2

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

android {
    defaultConfig {
        resConfigs "en"
    }
}

我的应用程序有很多语言,这样做可以在开发过程中节省大量时间。但是,我不想发布带有这个集合的版本。不幸的是,resConfigs在产品风味或构建类型上不可用,因此我无法将其设置debug {}为 .

如何自动resConfigs发布变体中排除?当我为发布而构建时,我不想记住注释掉那行代码。

4

2 回答 2

2

我的解决方案是受到这个对相关问题的回答的启发。这是你如何做到的:

app/build.gradle

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

这是有效mResourceConfiguration的,因为它是resConfigs. 不幸的是,Android Gradle DSL 目前没有公开 reset 的方法resConfigs,所以我们不得不使用 groovy@<fieldName>语法直接访问该字段。这有效,即使mResourceConfiguration是私人的。

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

于 2017-02-15T20:15:56.563 回答
2

这不行吗?

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

applicationVariants.all { variant ->
    if (variant.buildType.name == "debug") {   
        variant.mergedFlavor.resourceConfigurations.clear()
        variant.mergedFlavor.resourceConfigurations.add("en")
    }
}
于 2017-03-03T11:30:34.910 回答