我有一个包含原生二进制文件的应用。目前,我们只有ARMv5和x86二进制文件。有了这些,我们将二进制文件放入src/main/jniLibs/armeabi/libsyncthing.so
和src/main/jniLibs/x86/libsyncthing.so
,这在所有设备上都可以正常工作。
我们现在想要添加一个放在src/main/jniLibs/arm64-v8a/libsyncthing.so
中的附加ARMv8二进制文件。根据{{3}},这是正确的子文件夹。但是,当我在LG G4(支持ARMv8)上安装apk时,/lib/
文件夹中没有安装任何二进制文件,并且该应用程序无法正常工作。
我在这里做错了什么?
在这里你可以看到二进制文件都包含在apk中:
答案 0 :(得分:4)
我终于弄明白了。问题是我在做什么
binary = context.getApplicationInfo().dataDir + "/lib/libsyncthing.so";
事实证明,ARMv8库存储在不同的位置,因此失败了。相反,我不得不使用这段代码:
binary = context.getApplicationInfo().nativeLibraryDir + "/libsyncthing.so";
答案 1 :(得分:1)
您是使用System.LoadLibrary还是其他方式加载库?
从Android 6.0开始,如果.so文件未压缩存储且apk为zipaligned(默认为AS 2.2),则.so文件可以就地使用,从APK加载而不是在其他地方提取。
您可以尝试设置:
<application
android:extractNativeLibs="true"
...
>
修改此行为。