<分区>
我正在通过以下方式加载我的原生库:
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
实例时,我指定了native代码所在的路径,即getDir("native", Context.MODE_PRIVATE )
。
(我正在使用 NDK release 10 生成 native 库。当生成 native 代码文件 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)
如何解决这个问题?