首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未从.apk安装ARMv8库

未从.apk安装ARMv8库
EN

Stack Overflow用户
提问于 2016-09-14 04:59:01
回答 2查看 977关注 0票数 1

我有一个包含本机二进制文件的应用程序。目前,我们只有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中:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-05 11:30:18

我终于自己想明白了。问题是我在做

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

事实证明,ARMv8库存储在不同的位置,因此此操作失败。取而代之的是,我不得不使用以下代码:

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

票数 5
EN

Stack Overflow用户

发布于 2016-09-14 21:52:02

您是使用System.LoadLibrary还是其他方式来加载库?

从Android6.0开始,如果.so文件以未压缩的方式存储,并且apk是.so对齐的(都是默认的as2.2),.so文件可以就地使用,从APK加载,而不是从其他地方解压。

您可以尝试设置:

代码语言:javascript
复制
<application
    android:extractNativeLibs="true"
    ...
>

来修改此行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39478884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档