cancel
Showing results for 
Search instead for 
Did you mean: 

Kapsel Library not found on Android: couldn't find "libodataofflinejni.so"

ericci
Active Contributor
0 Kudos

Hi everyone,

we've added Kapsel to our UI5 application. When I use this application on my Samsung S4 Mini everything is working fine.

If I try to use it on my Samsung S8 it stop working "silently". When I say "silently" I mean that the app does not crash but it does not work (it's blocked on the OData syncronization dialog in a loop).

I don't see any error on the JS side but I see an error on the Android side.

The error that I see is this one:

E/SMP_LOGON: Certificate info of certificate retrieved from Logon Manager is null
E/SMP_AUTH_PROXY: Getting certificate from Logon Manager failed due to InvocationTargetException: null
I/com.sap.smp.authflows: [group: com.sap.smp.sdk.android] [artifact: HttpConvAuthFlows] [version: 3.15.3] [buildTime: 2017:07:19:12:13] [gitCommit: 48bd516ede62773b0ecb863646c41130c7767c29] [gitBranch: n/a]
D/shim: loading shared libraries
W/System.err: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/base.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_resources_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/lib/arm64, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/base.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_resources_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/com.techedge.mfspp-H-1jvpRUjO-CftPguTjTvA==/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]] couldn't find "libodataofflinejni.so"
W/System.err:     at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
                  at java.lang.System.loadLibrary(System.java:1657)
W/System.err:     at com.sap.smp.client.odata.offline.common.OfflineStore.load(OfflineStore.java:78)
W/System.err:     at com.sap.smp.client.odata.offline.common.OfflineStore.<clinit>(OfflineStore.java:67)
W/System.err:     at com.sap.mp.cordova.plugins.odata.OData.openOfflineStore(OData.java:264)
W/System.err:     at com.sap.mp.cordova.plugins.odata.OData.execute(OData.java:130)
W/System.err:     at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98)
W/System.err:     at org.apache.cordova.PluginManager.exec(PluginManager.java:132)
W/System.err:     at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57)
W/System.err:     at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
W/System.err:     at android.os.MessageQueue.nativePollOnce(Native Method)
                  at android.os.MessageQueue.next(MessageQueue.java:325)
W/System.err:     at android.os.Looper.loop(Looper.java:142)
                  at android.os.HandlerThread.run(HandlerThread.java:65)

So when I saw "couldn't find "libodataofflinejni.so" I understood that Kapsel is also installing some c++ compiled library.

I searched inside the source code and I saw this:

The library exists but only for the x86 and armeabi-v7a architecture.

In the case of Samsung S8, it uses arm64-v8a architecture. I think that android, when it does not find the .so lib in the correct folder (that is missing in this case) is falling back to the armeabi folder. That is also missing.

Do you know if I can find and updated Kapsel SDK that is shipping the armeabi / arm64-v8a libs?

Accepted Solutions (1)

Accepted Solutions (1)

ericci
Active Contributor
0 Kudos

So as I tought the current SAP MDK (event the 3.1) does not support newest CPU architectures like the one used for Samsung S8 arm64-v8a.

Usually you have two options if you encounter this problem:

  1. update the MDK and include also the .so libraries creating the folder arm64-v8a inside "jniLibs" and adding them
  2. force Android Studio to only use the currently available libraries when they build the APK

Unfortunately we're on the second case (the not optimized one) so the only thing we can do is to "forse" gradle to build one build-flavor that will use and mix both the x86 libs and armeabi-v7a.

You can do that editing the gradle.build file productFlavors code and adding this part in the defaultConfig

android {

    ...

    defaultConfig {
        ...

        ndk {
            abiFilters "x86", "armeabi-v7a"
        }
    }

    ...

}

Answers (1)

Answers (1)

former_member276237
Participant
0 Kudos

Hi, what version of Kapsel SDK are you using?