【发布时间】:2022-01-21 23:58:03
【问题描述】:
我在我的应用程序中使用了一个仅针对 armeabi、armeabi-v7a 和 x86 编译的本地库。
在三星 S6 等 64 位设备上加载此库时,应用程序崩溃并出现 UnsatisfiedLinkError
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.myapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libfoo.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:989)
不幸的是,该库是封闭源代码。有没有办法在不使用 64 位目标重新编译库的情况下解决这个问题?
【问题讨论】:
-
我做到了。一种适用于 AOSP,另一种适用于动态类加载。我的情况实际上要简单得多。但我刚刚发现我包含的另一个本机库确实提供了 64 位 .so 文件,因此在最终 apk 的 /lib 文件夹中有一个 arm64-86 文件夹。可能这就是系统假设我在所有情况下都提供 64 位 .so 文件的原因。我将尝试重新编译这个仅支持 32 位的库,看看它是否有效。
-
好主意。让我们知道(如果需要,请回答您自己的问题)。
标签: android android-ndk ndk-build