【发布时间】:2016-05-04 10:42:04
【问题描述】:
我编写了一个调用 32 位 JNI 库的 Android 应用程序。 在 Galaxy Note 4(32 位,Snapdragon 805)上,一切正常,在 LG Flex2(64 位,Snapdragon 810)上,应用程序仅在将参数“--abi armeabi-v7a”传递给 ADB 时才有效(显然)。
但是,当手动安装 jar 文件时,Android 会假定它是 64 位应用程序,这会导致下面列出的 UnsatisfiedLinkError。
这是我检查/尝试过的:
- 整个 APK 中不存在 64 位库
- 在 APK (lib/armeabi-v7a) 中只有一个特定于架构的目录
- 原生库是用“LOCAL_MULTILIB := 32”构建的
知道为什么 Android 坚持在 64 位模式下运行这个应用程序吗? 根据我的阅读,Android 应该在安装期间仅遇到 32 位本机共享库时自动检测旧版 32 位应用程序。
提前谢谢你,克莱门斯
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/at.ac.ait.modentity-2/base.apk"],nativeLibraryDirectories=[/data/app/at.ac.ait.modentity-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "liblept.so"
java.lang.Runtime.loadLibrary(Runtime.java:366)
PS:请不要建议部署 64 位库,我希望应用程序在 32 位模式下执行。
【问题讨论】:
标签: android java-native-interface 32bit-64bit native-code