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

java.lang.ExceptionInInitializerError

at com.ianywhere.ultralitejni16.DatabaseManager.connect(Unknown Source)

at com.sybase.afx.ulj.ConnectionUtil.createConnection(ConnectionUtil.java:199)

at com.sybase.afx.ulj.ConnectionUtil.getConnection(ConnectionUtil.java:176)

[…]

Caused by: java.lang.UnsatisfiedLinkError: Couldn’t load ultralitej16: findLibrary returned null

at java.lang.Runtime.loadLibrary(Runtime.java:365)

at java.lang.System.loadLibrary(System.java:535)

 

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.