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
}
}
}
之所以有效,是因为 mResourceConfiguration
是 resConfigs
的支持字段。不幸的是,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")
}
}
为了加快开发速度,我想做以下事情:
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
}
}
}
之所以有效,是因为 mResourceConfiguration
是 resConfigs
的支持字段。不幸的是,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")
}
}