In late 2016 we embarked on a journey to reimagine our existing Adobe Experience Platform Mobile SDKs. There were a few concrete goals in mind, as well as a few nice-to-haves. First and foremost we wanted to implement an extensible and pluggable architecture that would allow for incremental additions of functionality, both internally developed and from partners and customers alike. Additionally, we wanted to build platform-independent logic that was easily portable across various client devices and operating systems. Lastly, we wanted to ensure that the various performance metrics that we track for the SDK (CPU time, memory consumption, binary size, stability) remained at least the same as our pre-existing SDKs.
With our baseline requirements and architectures in hand, we moved on to the selection of the underlying language(s) that could be used to achieve or exceed our goals. Because we build for multiple platforms, we first investigated languages that could be used across all of them. This turned out to be a very short list (C++). After a few POCs though, we realized that the restrictions and size implications of shipping a C++ library for Android implementations were too significant to ignore, and we decided to align on a core language for each key platform (one for iOS, one for Android).