3

I have two .aar files that I need to add to my project as dependencies. I imported the projects and did the following and it worked just fine.

dependencies {
    compile project(':zoomcommonlib')
    compile project(':zoomsdk')
}

However, I have added many other libraries and I had to use MultiDex library to support apps over 64K methods

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    compile project(':zoomcommonlib')
    compile project(':zoomsdk')
    compile 'com.google.android.gms:play-services-maps:10.2.0'
    compile 'com.google.android.gms:play-services-location:10.2.0'
    .....
}

Yes, MultiDex is properly setup because I can build the application and run it with no problem.

The problem: When I try to utilize those specific projects, application crashes. Following Log:

18790-18790/com.mypackage.name E/UncaughtException: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mypackage.name-1/base.apk", zip file "/data/app/com.mypackage.name-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.mypackage.name-1/lib/arm64, /data/app/com.mypackage.name-1/base.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libzoom_stlport.so"
       at java.lang.Runtime.loadLibrary0(Runtime.java:984)
       at java.lang.System.loadLibrary(System.java:1530)
       at com.zipow.cmmlib.AppContext.<clinit>(AppContext.java:31)
       at com.zipow.cmmlib.AppContext.initialize(AppContext.java:64)
       at us.zoom.sdk.ZoomSDK.initialize(ZoomSDK.java:225)
       at us.zoom.sdk.ZoomSDK.initialize(ZoomSDK.java:184)
       at com.mypackage.name.SectionListActivity.getInitializedZoomSDK(SectionListActivity.java:857)
       at com.mypackage.name.SectionListActivity.access$1500(SectionListActivity.java:88)
       at com.mypackage.name.SectionListActivity$8.onClick(SectionListActivity.java:812)
       at android.view.View.performClick(View.java:5637)
       at android.view.View$PerformClick.run(View.java:22429)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6119)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
18790-18899/com.mypackage.name D/FA: Logging event (FE): _ae, Bundle[{_o=crash, _sc=SectionListActivity, _si=7450316610930895524, timestamp=1488996958198, fatal=1}]
18790-18899/com.mypackage.name V/FA: Using measurement service
18790-18899/com.mypackage.name V/FA: Connecting to remote service

                                                                  --------- beginning of crash
18790-18790/com.mypackage.name E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.mypackage.name, PID: 18790
      java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mypackage.name-1/base.apk", zip file "/data/app/com.mypackage.name-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.mypackage.name-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.mypackage.name-1/lib/arm64, /data/app/com.mypackage.name-1/base.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/com.mypackage.name-1/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libzoom_stlport.so"
      at java.lang.Runtime.loadLibrary0(Runtime.java:984)
      at java.lang.System.loadLibrary(System.java:1530)
      at com.zipow.cmmlib.AppContext.<clinit>(AppContext.java:31)
      at com.zipow.cmmlib.AppContext.initialize(AppContext.java:64)
      at us.zoom.sdk.ZoomSDK.initialize(ZoomSDK.java:225)
      at us.zoom.sdk.ZoomSDK.initialize(ZoomSDK.java:184)
      at com.mypackage.name.SectionListActivity.getInitializedZoomSDK(SectionListActivity.java:857)
      at com.mypackage.name.SectionListActivity.access$1500(SectionListActivity.java:88)
      at com.mypackage.name.SectionListActivity$8.onClick(SectionListActivity.java:812)
      at android.view.View.performClick(View.java:5637)
      at android.view.View$PerformClick.run(View.java:22429)
      at android.os.Handler.handleCallback(Handler.java:751)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:154)
      at android.app.ActivityThread.main(ActivityThread.java:6119)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

From my understanding, those project dependencies are not properly getting added with MultiDex enabled. Is there some configuration that I am missing for project dependencies?

I've also tried the following in my build.gradle file.

dexOptions {
    preDexLibraries = false
}

It seems to have no effect on it. It crashes each time.

ᴛʜᴇᴘᴀᴛᴇʟ
  • 4,466
  • 5
  • 39
  • 73
  • Do you have (multiDexEnabled true) under defaultConfig in gradle https://developer.android.com/studio/build/multidex.html – Tasos Mar 08 '17 at 18:40
  • @Tasos yes, `multiDexEnabled true` is in `defaultConfig` and ` MultiDex.install(this);` is added to `attachBaseContext()` of the `Application` class. I am able to run the app and perform many tasks. It only crashes when I call a method from those libraries – ᴛʜᴇᴘᴀᴛᴇʟ Mar 08 '17 at 18:41
  • looks like dex is working but you have this error -- couldn't find "libzoom_stlport.so" -- so it looks like its missing a file – Tasos Mar 08 '17 at 18:45
  • But when I remove multidex and few other dependencies, it works fine. I also created a new project with just those two dependencies and it works as well. It only stopped working after adding multidex library – ᴛʜᴇᴘᴀᴛᴇʟ Mar 08 '17 at 18:47
  • i see -- well there is support here, see if you can get help from zoom https://support.zoom.us/hc/en-us – Tasos Mar 08 '17 at 19:08
  • @Tasos yea I tried that. Lets just say support is not their strong skill. Thanks anyway – ᴛʜᴇᴘᴀᴛᴇʟ Mar 08 '17 at 19:26
  • Try to compare the contents of apk file (just unzip both multidex version and the one that working) - does *libzoom_stlport.so* present (under lib folder) in both of them? – Alex Lipov Mar 09 '17 at 05:45
  • `libzoom_stlport.so` is present in non-multidex version however it is not present in the multidex version. I did this test in a different project where multidex was not even needed (it only had three libraries. Two zoom libraries and one for multidex) – ᴛʜᴇᴘᴀᴛᴇʟ Mar 13 '17 at 14:32
  • @th3pat3l Did this issue ever been solved ? And is it device specific ? – AJay Mar 21 '17 at 04:50
  • @AJay it is not device or OS specific. And no, I was not able to solve this issue. – ᴛʜᴇᴘᴀᴛᴇʟ Mar 21 '17 at 05:48
  • @th3pat3l hey thanks but for me it is working on all 32 bit devices , I am facing this issue on 64 bit devices – AJay Mar 21 '17 at 08:14
  • solved, see answer – rubenwardy Mar 21 '17 at 13:01

2 Answers2

5

The ZoomSDK you have doesn't support 64bit Android, unfortunately. In the mean time, you need to disable the use of 64bit libraries in your app and only support the mentioned framework so it builds in 32bit mode.

Add the following to the build.gradle of the main module of your app:

android {
    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
}

From the Zoom forum:

We support only 32 bit libs now. To work on 64 bit devices, you should not use other 64 bit libs ( from other projects or other third party SDK). Android OS can support 32 bit libs on 64 bit devices if you don't have other 64 bit libs in the project

Community
  • 1
  • 1
rubenwardy
  • 679
  • 5
  • 21
0

For x86, it can be supported via Intel ARM binary translator (Houdini). But your app should not contain other x86 targeted native binaries.

  1. In order for the app to run on x86, all the binary files in your app should target on ARM, binary translator will translate them to support x86.

  2. If your app contains other binary files that target on x86, you should delete those files to remain only ARM targets. Because on x86 devices, if an app have binary files target on x86, it also should have the file that target on ARM. Because Zoom Android SDK does not contains any x86 binaries, so other files also can't have binaries that target on x86 in order for the SDK to run.

  3. The ARM binary translator works at run time, not at compile time.

You only need to add following to main gradle file

android {
    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
}

and in gradle.properties file add the following line

android.useDeprecatedNdk = true
AJay
  • 1,233
  • 10
  • 19