构建所有 ABI,但只打包一个子集

Posted

技术标签:

【中文标题】构建所有 ABI,但只打包一个子集【英文标题】:Building all ABIs but packaging only a subset 【发布时间】:2018-09-14 09:23:15 【问题描述】:

我正在尝试为我的项目构建所有 ABI,但只想将其中的一部分打包到我的应用中。例如,我想构建“x86”、“x86_64”、“armeabi-v7a”和“arm64-v8a”,但只构建“x86”包(例如)。

阅读本文档 (https://developer.android.com/studio/projects/gradle-external-native-builds.html#jniLibs) 在“指定 ABI”部分下,使用他们提供的 sn-p 作为示例似乎很有可能。但是,这似乎对我不起作用。

我的代码sn-p如下。

android 
    defaultConfig 
        ndk 
            abiFilters 'armeabi-v7a'
        
        externalNativeBuild 
            cmake 
                abiFilters 'armeabi-v7a', 'x86'
            
        
    
    externalNativeBuild 
        cmake 
            path "CMakeLists.txt"
        
    

在上面的sn-p中,根据我对文档的理解,它应该同时构建armeabi-v7a和x86,但只在我的APK中打包armeabi-v7a。但这不起作用。

我正在使用 Android 插件 3.1.0 和 NDK 16.1.4479499

【问题讨论】:

我认为您对abiFilters 的解释是错误的。如果您想要打包,例如 x86armeabi,则定义此列表两次的想法可能会有所帮助,但要预先构建前者,并且只希望 Gradle 构建 armeabi 【参考方案1】:

您要查找的内容由拆分控制。

splits 
    abi 
        enable true
        reset()
        include 'armeabi-v7a'
        universalApk false //don't generate an additional APK that contains all the ABIs
    

【讨论】:

谢谢亚历克斯。这不会创建多个 APK 吗?我希望只用一个 ABI 创建一个 APK,但要构建所有 ABI。 虽然您只需要一个 ABI,但上面的设置就足够了。我不知道如何在构建更多 ABI 的同时创建具有两个 ABI 的 APK。 感谢亚历克斯的帮助。我在原始问题中发布的代码理论上应该可以工作,但由于某种原因它不是 :( 我赞成您的回复,因为它非常有帮助,但我仍然想了解为什么示例代码不起作用。

以上是关于构建所有 ABI,但只打包一个子集的主要内容,如果未能解决你的问题,请参考以下文章

Qt创建者:创建一个兼容多个ABI的APK?

如何在多 abi QT 构建中引用外部库

使用 -D_GLIBCXX_USE_CXX11_ABI=0 构建提升

人行横道项目错误“构建 ABI 'armeabi-v7a' 失败”

构建覆盖特定顶点子集的最小生成树

使用 ABI 拆分启用 externalNativeBuild