Android: 如何为发布变体重置 resConfigs?

Android: How to reset resConfigs for release variant?

为了加快开发速度,我想做以下事情:

android {
    defaultConfig {
        resConfigs "en"
    }
}

我的应用有多种语言,这样做可以节省大量开发时间。但是,我不想发布带有此集合的版本。不幸的是,resConfigs 在产品风格或构建类型上不可用,因此我无法在 debug {} 中设置它,例如。

如何从 release 变体中自动排除 resConfigs 我不想记住注释掉我为发布构建时的代码行。

我的解决方案受到 this answer 相关问题的启发。操作方法如下:

app/build.gradle

// Reset `resConfigs` for release
afterEvaluate {
    android.applicationVariants.all { variant ->
        if (variant.buildType.name.equals('release')) {
            variant.mergedFlavor.@mResourceConfiguration = null
        }
    }
}

之所以有效,是因为 mResourceConfigurationresConfigs 的支持字段。不幸的是,Android Gradle DSL 目前没有公开重置 resConfigs 的方法,因此我们不得不直接使用 groovy @<fieldName> 访问该字段句法。这有效,即使 mResourceConfiguration 是私有的。

警告:这个解决方案有点脆弱,因为 Android Gradle 构建工具团队可以随时更改该字段的名称,因为它不是 public API.

的一部分

这不行吗?

检测调试版本、重置配置并添加所需的调试配置。

applicationVariants.all { variant ->
    if (variant.buildType.name == "debug") {   
        variant.mergedFlavor.resourceConfigurations.clear()
        variant.mergedFlavor.resourceConfigurations.add("en")
    }
}