相关疑难解决方法(0)

如何在64位Android设备上使用32位本机库

我在我的应用程序中使用本机库,该库仅为armeabi,armeabi-v7a和x86编译.

在像Samsung 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)
Run Code Online (Sandbox Code Playgroud)

不幸的是,图书馆是封闭的来源.有没有办法解决这个问题而无需使用64位目标重新编译库?

android android-ndk ndk-build

54
推荐指数
2
解决办法
3万
查看次数

在Android上强制CPU/ABI到armeabi-v7a

我有一个使用一些JNI代码的Android应用程序.长话短说(双关语),几乎不可能将JNI库转换为64位,因为它需要进行大量更改.代码(Java和JNI)在armeabi-v7a架构上运行良好.

使用loadLibrary加载库.当我尝试在Nexus 6上运行我的应用程序时,应用程序加载正常.执行loadLibrary后,应用程序崩溃并显示此处描述的错误.

根据我的理解,问题是在Nexus 6上执行时,应用程序构建为arm64-8a.但这些库不是为arm64-8a构建的(因为64位版本存在我在问题开头提到的问题).

我的问题是,我可以强制arm64-8a设备也运行armeabi-v7a代码吗?我如何强制我的应用程序apk是armeabi-v7a所以它只是32位无论设备?

java-native-interface android arm android-ndk

4
推荐指数
1
解决办法
4264
查看次数