我正在通过以下方式加载我的本地库:
try {
System.loadLibrary("myNative");
} catch (UnsatisfiedLinkError e) {
//java.lang.UnsatisfiedLinkError here
System.load("/data/data/com.my.app/app_native/libmyNative.so");
}
上述代码最终被打包成Jar文件。
在另一个项目中,我使用DexClassLoader加载上述Jar文件:
DexClassLoader dexClassLoader = new DexClassLoader(jarPath,
optJarPath,
getDir("native", Context.MODE_PRIVATE),
getClassLoader());
请注意,在构建此
dexClassLoader
实例时,我已指定本机代码所在的路径,即getDir("native", Context.MODE_PRIVATE)
。(我正在使用NDK release 10生成本机库。当生成本机代码文件libmyNative.so时,我的Java代码(打包到最终Jar中)检查CPU体系结构类型并将正确的代码复制到
getDir("native",Context.MODE_PRIVATE)
。)上述代码在除Android 5.0 Lollipop之外的其他设备上运行良好。在Android 5.0 Lollipop设备上运行时,我不断收到以下错误:
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.my.app/app_native/libmyNative.so" is 32-bit instead of 64-bit
at java.lang.Runtime.load(Runtime.java:331)
at java.lang.System.load(System.java:982)
如何解决这个问题?