Intel Android image and SMP 2.x MBO with UltraLite
Note: this blog was also published on SAP Community Network: http://scn.sap.com/community/mobile/blog/2014/10/15/intel-android-image-and-smp-2x-mbo-with-ultralite
After reading my blog about how to improve the performance of the Android emulator I guess you are using this image successfully for your Cordova development. In case you want to use the Intel image also for SUP/SMP MBO based projects, you won`t be able to do so. The UltraLite library is for ARM architecture and not for 386.
Here is a simple explanation why you’ll have to use the Google Android images (ARM): after adding the libraries to the Android project, coding the MBO part, deploying the app to the emulator and running it, the log shows an error message like:
FATAL EXCEPTION: main
at com.ianywhere.ultralitejni16.DatabaseManager.connect(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: Couldn’t load ultralitej16: findLibrary returned null
Keep in mind that the libraries for the UltraLite database used by MBOs is delivered as a binary library (.so).This library is already compiled and won`t be compiled again for your Android project. This library is for Android devices on ARM, as this is the primary architecture for Android smartphone / tablets is ARM. The folder that contains the files is named armeabi and the .so files make it clear that the library is not a Java object. While the jar for UltraLite included in the Android project allows communicating with the API, the libraries will fail to load on Intel emulator.
On the Intel image, a .so file is for Intel 80386 architecture:
While on the “original” emulator from Google the architecture is ARM:
Running the exact same app on the Google Android image will work. Just install the APK file on the right emulator.