我有一个包含本机二进制文件的应用程序。目前,我们只有ARMv5和x86二进制文件。有了这些,我们将二进制文件放入src/main/jniLibs/armeabi/libsyncthing.sosrc/main/jniLibs/x86/libsyncthing.so,在所有设备上都可以正常工作。

现在,我们想添加一个附加的ARMv8二进制文件,放在src/main/jniLibs/arm64-v8a/libsyncthing.so中。根据this guide,这是正确的子文件夹。但是,当我在LG G4(支持ARMv8)上安装apk时,/lib/文件夹中没有安装二进制文件,因此该应用程序无法正常工作。

我在这里做错了什么?

在这里,您可以看到二进制文件都包含在apk中:

android - 未从.apk安装ARMv8库-LMLPHP

您可以在this PR on Github中查看完整的代码。二进制文件不包括在其中,但可以使用./gradlew buildNative生成。

最佳答案

我终于自己弄清楚了。问题是我在做

binary = context.getApplicationInfo().dataDir + "/lib/libsyncthing.so";

事实证明,ARMv8库存储在其他位置,因此失败了。相反,我不得不使用以下代码:

binary = context.getApplicationInfo().nativeLibraryDir + "/libsyncthing.so";

08-06 09:01