【问题标题】:Android app not 64 bit compliant after adding 'ndk { abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64' }'添加 'ndk { abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64' }' 后,Android 应用程序不兼容 64 位
【发布时间】:2019-08-05 12:14:40
【问题描述】:

在关注了 google 关于如何使 android 应用程序符合 64 位的文档here 之后,我一直在尝试构建的 android 应用程序包仍然不符合 64 位。

android studio 项目包含不同的模块(应用程序),它们有自己的 build.gradle 文件,但所有应用程序都有一个通用的 build.gradle(Module:app) 和 build.gradle 项目级别。 在一般的 build.gradle(Module:app) 我添加了以下内容:

 ndk {
            abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
        } 

按照谷歌文档的默认配置。 我还尝试将相同的代码添加到应用程序的 build.gradle(Module:app) 并构建了应用程序包,这是 lib 文件的样子

gradle 不会生成使应用程序兼容 64 位所需的 x86_64 和 arm64-v8a 文件。例如,我尝试了将 abifilters 放置在何处的不同组合,仅将其添加到根 build.gradle,仅将其添加到应用程序的 build.gradle 并且在两者上都有 abifilters,但它不会构建 64 位支持库。

该应用程序是用 java 构建的,我可以通过添加以下内容来构建一个 64 位应用程序包:

ndk {
        abiFilters 'arm64-v8a', 'x86_64'
    }

然后分析了捆绑包,它没有 lib 文件夹,谷歌开发者控制台警告消失了,但是我怎样才能为这种情况构建 64 位和 32 位支持库?

【问题讨论】:

  • 您的问题解决了吗?请与我们分享
  • 是的,我发现了问题所在,android studio 项目有一个“jnilibs”目录,其中包含“x86”、“mips”、“armeabi-v7a”子文件夹。 “jnilibs”负责本地库。因此我删除了这个文件夹,因为应用程序是用 java 构建的,所以应用程序变得兼容 64 位。所以我的理解是,如果应用程序有本地库,并且如果你有它的源代码,你可以编译它,以便它可以有 64 位版本。否则,对于我的情况,它没有被使用,所以我删除了该文件夹并且它起作用了。希望这对您有所帮助。

标签: java android kotlin 64-bit


【解决方案1】:

您需要 x86_64armb64-v8a .so 文件以获得 64 位支持。您无法在 Android Studio 中构建它们。这是本机库。 您正在使用的库的依赖项必须针对这些处理器架构重新构建。

【讨论】:

  • 感谢您的回答,但是如何重建依赖库以支持 64 位?
  • 如果你有这个依赖库的源代码,你可以构建。
  • 嗨,我发现了问题所在,android studio 项目有一个 'jnilibs' 目录,其中有 'x86'、'mips'、'armeabi-v7a' 子文件夹,这些子文件夹负责用于制作 32 位 .so 文件。因此我删除了这个文件夹,因为应用程序是用 java 构建的,所以应用程序变得兼容 64 位。所以谢谢你的回答,它让我明白我真正在处理什么。
猜你喜欢
  • 1970-01-01
  • 2016-01-23
  • 2019-09-09
  • 2019-11-11
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
相关资源
最近更新 更多