在添加了“ndk {abiFilters'armeabi-v7a','arm64-v8a','x86','x86_64'}”后,Android 应用程序不符合 64 位标准。

5
在按照谷歌的文档here制作 Android 应用程序 64 位兼容后,我一直在尝试构建 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)中,并构建了应用程序包,以下是库文件的样子图片描述在此处输入

Gradle不会生成x86_64和arm64-v8a文件,这些文件对于使应用程序符合64位标准是必要的。我尝试了不同的组合方式,例如仅将abifilters添加到根build.gradle中、仅将其添加到应用程序的build.gradle中以及在两者上都使用abifilters,但它都无法生成64位支持库。

该应用程序是使用Java构建的,通过添加以下内容,我能够构建一个64位的应用程序包:

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

然后分析了该包,发现没有lib文件夹,并且Google开发者控制台的警告消失了,但是在这种情况下,我如何构建既支持64位又支持32位的库呢?


你的问题解决了吗?请与我们分享。 - Mouaad Abdelghafour AITALI
是的,我找到了问题所在。Android Studio项目中有一个“jnilibs”目录,其中包含“x86”,“mips”和“armeabi-v7a”子文件夹。“jnilibs”负责本地库。因此,我删除了这个文件夹,由于应用程序是用Java构建的,所以应用程序符合64位标准。因此,我的理解是,如果应用程序具有本地库,并且您拥有其源代码,则可以编译它,以便它可以具有64位版本。否则,在我的情况下,它没有被使用,所以我删除了该文件夹,然后它就可以正常工作了。希望这可以帮助您。 - Lenny Kiano
1个回答

2
你需要 x86_64armb64-v8a .so 文件以支持 64 位。这些是本地库,无法在 Android Studio 中构建。你使用的库的依赖项必须重新构建为这些处理器架构。"Original Answer" 翻译成 "最初的回答"。

谢谢您的回答,但我该如何重建依赖库以支持64位? - Lenny Kiano
如果您拥有此依赖库的源代码,您可以进行构建。 - RKRK
3
你好,我发现了问题所在。Android Studio 项目中有一个“jnilibs”目录,其中包含“x86”、“mips”和“armeabi-v7a”子文件夹,这些文件夹负责生成32位的.so文件。因此,我删除了这个文件夹,由于应用程序是用Java构建的,所以该应用程序已经符合64位的要求。非常感谢你的回答,让我明白了自己实际上正在处理什么问题。 - Lenny Kiano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接