【问题标题】:Android: How to reset resConfigs for release variant?Android:如何重置发布变体的 resConfigs?
【发布时间】:2017-07-04 16:36:30
【问题描述】:

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

android {
    defaultConfig {
        resConfigs "en"
    }
}

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

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

【问题讨论】:

    标签: android gradle android-build-type


    【解决方案1】:

    这不行吗?

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

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

    【讨论】:

    • resourceConfigurations 不是variant.mergedFlavor 的公共成员。
    • @AutonomousApps 为我工作。你使用的是什么 Gradle 版本?
    • 一个旧的。工具 2.1.2 和 Gradle 2.14。
    【解决方案2】:

    我的解决方案受到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 的方法,因此我们不得不使用常规的@<fieldName> 语法直接访问该字段。这有效,即使 mResourceConfiguration 是私有的。

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

    【讨论】:

    • 该解决方案对我不起作用,gradle 是否有重大变化? variant.mergedFlavor.resourceConfigurations.clear() 确实有效。
    • 我在旧版本的 Android Gradle 插件 (AS 2.x) 上成功使用了它。我没有用 AS 3.x 和 build tools 3.x 尝试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2017-11-28
    • 2017-07-05
    • 2014-10-29
    相关资源
    最近更新 更多