【发布时间】:2016-03-04 08:25:12
【问题描述】:
我正在尝试将一些 lib (.jar & .so) 添加到我在 android studio 中的 multidex 项目中。
当我只向项目中添加几个 jar 时,一切正常。 如果我添加越来越多的罐子(其他库) 我收到此错误:
java.lang.UnsatisfiedLinkError:
dalvik.system.PathClassLoader[DexPathList[[zip file
"/data/app/com.test.digital.ocrtest-2/base.apk"],nativeLibraryDirectories=[/data/app/com.test.digital.ocrtest-2/lib/arm,
/data/app/com.test.digital.ocrtest-2/base.apk!/lib/armeabi-v7a,
/vendor/lib, /system/lib]]] couldn't find
"libScanovatePassportAndIDLSDK_CPP.so"
知道如何告诉编译器在同一个 dex 中生成 jar 等吗?
【问题讨论】:
-
不,.so 不会进入 dex。但请检查 .so 是否已打包到您的 APK 中。您可以使用
unzip -l列出 APK 文件的内容。 -
是的,它已打包在我的 APK 中。
-
您的 APK 在停止工作时的总大小是多少?这是什么设备?
-
更新:如果我将 .so 文件添加到 jniLibs 中的其他 3 个文件夹中,它会起作用。现在我在项目的 4 个文件夹中有 .so 文件(armeabi、mips、armeabi-v7 和 x86)。 .so 的大小是 14MB,4 倍是很多。
-
所以可能根本原因不是 multidex 而不是大小,但也许其中一个额外的 JAR 为 armeabi-v7a 带来了本机库,而您的 libScanovatePassportAndIDLSDK_CPP .so 只为 armeabi 构建。然后解决方法不是添加更多 .so 的副本,而是剥离其他 ABI。在gradle中,你可以use splits
标签: android android-studio java-native-interface android-gradle-plugin