使用APK Splits for Release但不使用Debug构建类型

时间:2016-01-04 13:41:34

标签: android gradle android-gradle build.gradle

我已成功实施APK Splits,以便为不同的ABI生成单独的APK。

但是,为了提高效率(因为我在Debug中不需要非armeabi-v7a APK),我想限制Debug版本只生成armeabi-v7a APK。

如何做到这一点?

有一个想法是:

abi {
    enable true
    reset()
    include 'x86', 'armeabi-v7a', 'mips'
    universalApk false
}

也许有一些方法可以根据Build类型设置enable

4 个答案:

答案 0 :(得分:20)

您可以尝试@ Geralt_Encore的答案的变体,这可以避免单独的gradlew命令。在我的情况下,我只关心使用APK拆分来减少已发布的APK文件大小,我想在Android Studio中完全执行此操作。

splits {
    abi {
      enable gradle.startParameter.taskNames.contains(":app:assembleRelease")
      reset()
      include 'x86', 'armeabi-v7a', 'mips'
      universalApk false
    }
}

如果:app前缀的字面名称为app,则可能需要将assembleRelease前缀替换为应用程序模块的名称。

从我所见,Build |在Android Studio中生成签名的APK菜单项会使用release Gradle目标生成APK。

请注意,如果您使用构建版本生成APK,或者您的版本构建未命名为assembleRelease,则需要相应地更改assemblePaidRelease目标,例如paid如果您的构建风格为md-input-container .md-error-spacer{ display:none; }

答案 1 :(得分:14)

您可以根据命令行参数设置enable。当我只想为发布版本使用拆分时,我已经解决了类似的问题,但不适用于常规的调试版本。

splits {
    abi {
        enable project.hasProperty('splitApks')
        reset()
        include 'x86', 'armeabi-v7a'
    }
}

然后./gradlew -PsplitApks assembleProdRelease(在我的情况下,prod是一种味道)。

答案 2 :(得分:0)

我参加这个聚会有点晚了,但是在使用不同的口味和任务名称时遇到了问题,

ext.isRelease = { array ->
    array.each { name ->
        if (name.contains("Debug")) {
            return false
        }
    }
    return true
}

android {

...

    splits {
        abi {
            enable isRelease(gradle.startParameter.taskNames)
            reset()
            include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
            universalApk false
        }
    }

}

这只是对Jeff P答案的一个小更新,但可以与不同的风格和构建配置很好地配合使用。

答案 3 :(得分:0)

更新@Jeff P的答案,使其根据应用程序名称更加灵活并支持Android App Bundle(.aab)格式

splits {
    abi {
      enable gradle.startParameter.taskNames.any { it.contains("Release") }
      reset()
      include 'x86', 'armeabi-v7a', 'mips'
      universalApk false
    }
}