我有一个包含本机二进制文件的应用程序。目前,我们只有ARMv5和x86二进制文件。有了这些,我们将二进制文件放入src/main/jniLibs/armeabi/libsyncthing.so
和src/main/jniLibs/x86/libsyncthing.so
,在所有设备上都可以正常工作。
现在,我们想添加一个附加的ARMv8二进制文件,放在src/main/jniLibs/arm64-v8a/libsyncthing.so
中。根据this guide,这是正确的子文件夹。但是,当我在LG G4(支持ARMv8)上安装apk时,/lib/
文件夹中没有安装二进制文件,因此该应用程序无法正常工作。
我在这里做错了什么?
在这里,您可以看到二进制文件都包含在apk中:
您可以在this PR on Github中查看完整的代码。二进制文件不包括在其中,但可以使用./gradlew buildNative
生成。
最佳答案
我终于自己弄清楚了。问题是我在做binary = context.getApplicationInfo().dataDir + "/lib/libsyncthing.so";
事实证明,ARMv8库存储在其他位置,因此失败了。相反,我不得不使用以下代码:binary = context.getApplicationInfo().nativeLibraryDir + "/libsyncthing.so";