未从.apk安装ARMv8库

Nut*_*mic 1 android android-ndk

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

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

我在这里做错了什么?

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

apk内容

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

Nut*_*mic 5

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

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

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

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