从 apk 中排除 abi

Posted

技术标签:

【中文标题】从 apk 中排除 abi【英文标题】:Exclude abi from apk 【发布时间】:2015-11-26 20:02:09 【问题描述】:

在我的应用程序中,我使用了具有 x86、armeabi-v7a 和 mips 的本机代码(每个约 2.7Mb)的渲染脚本。我还读到 mips 架构只有几个设备。所以我想将我的应用程序捆绑在两个 APK 中:通用(例如 x86 和 armeabi-v7a)和 mips。我发现拆分部分有助于为 mips 创建 apk,但通用 apk 仍然包含 mips 架构。所以我的问题是如何从结果 apk 中排除 abi?

谢谢

【问题讨论】:

【参考方案1】:

您可以尝试设置包含除 MIPS 之外的所有内容的另一种风格。在作为 android Gradle 插件源的一部分的测试项目之一的 build.gradle 文件中,我发现了这个:

apply from: "../commonHeader.gradle"
buildscript  apply from: "../commonBuildScript.gradle", to: buildscript 
apply plugin: 'com.android.application'
android 
    compileSdkVersion 21
    buildToolsVersion = rootProject.ext.buildToolsVersion
    productFlavors 
        x86 
            ndk 
                abiFilter "x86"
            
        
        arm 
            ndk 
                abiFilters "armeabi-v7a", "armeabi"
            
        
        mips 
            ndk 
                abiFilter "mips"
            
        
    

看起来他们的arm 风格基本上包括两个常见的ARM ABI。您可能可以定义一个包含x86armeabi-v7a 的“通用”风格。

他们还有另一个test project,其build.gradle 包含:

splits 
    abi 
        enable true
        reset()
        include 'x86', 'armeabi-v7a', 'mips'
    

您也许可以使用类似的东西,然后从那里删除mips

【讨论】:

当前 ndk 部分已弃用。你现在有另一种使用方式吗? 这也可以在不使用产品风格的情况下完成,您只需根据需要将 ndk 部分添加到调试或发布部分。见这里***.com/questions/30946365/… @Vetalll 你可以在 gradle.properties 中使用 android.useDeprecatedNdk=true。但是,我不确定

以上是关于从 apk 中排除 abi的主要内容,如果未能解决你的问题,请参考以下文章

Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件

在Gradle Android Studio中排除一个类文件

从获取中排除属性/字段 - 核心数据

从 Woocommerce 相关产品中排除特定产品类别

从类型中排除属性

Woocommerce 从结帐小计中排除税款