哪个优先,Gradle构建类型或风格?

esp*_*chi 4 android gradle

假设我在两个级别都定义了一个常量:在构建类型中,我将其设置为"mybuild",并将其设置为"myflavor".

比如在这里:

buildTypes {
    debug {
        resValue "string", "analytics_key", "XXX_SANDBOX_KEY_XXX"
    }
}

productFlavors {
    appA {
        resValue "string", "analytics_key", "XXX_KEY_FOR_A_XXX"
    }
    appB {
        resValue "string", "analytics_key", "XXX_KEY_FOR_A_XXX"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将不同应用程序(即风味)的事件发送到我的分析平台中的不同帐户.但是,如果我正在调试,我想将它们全部发送到我的沙盒帐户.

最初的问题是:哪个优先?从我的测试中,我已经可以回答:构建类型中的那个.

然而,更有趣的是:这有保证吗?

(或者,有更好的方法吗?)

Com*_*are 7

这有保证吗?

对于同一级别的事物(例如,相同的模块),构建类型通常被认为优先于产品风格.引用文档:

通常,构建类型配置是覆盖其他配置的覆盖.例如,Build Type的packageNameSuffix被附加到Product Flavor的packageName.

但是,清单合并相当复杂,需要自己的一组文档.

在您的情况下,您正在创建资源.在这种情况下,它应该遵循相同的规则,就像您将这些值作为字符串资源放在相关的源集中一样:

所有资源(Android资源和资产)都使用覆盖优先级,其中构建类型会覆盖产品风格,后者会覆盖主要的sourceSet.

如果resValue开始的行为与使用sourcesets的等效行为不同,我会认为这是一个错误.