Android Gradle构建类型还是风格优先?

Android Gradle构建类型还是风格优先?,android,gradle,Android,Gradle,假设我在两个级别都定义了一个常量:在构建类型中,我将其设置为“mybuild”,在flavor中,我将其设置为“myflavor” 例如在这里: buildTypes { debug { resValue "string", "analytics_key", "XXX_SANDBOX_KEY_XXX" } } productFlavors { appA { resValue "string", "analytics_key", "XXX_

假设我在两个级别都定义了一个常量:在构建类型中,我将其设置为“mybuild”,在flavor中,我将其设置为“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"
    }
}
我想将不同应用程序(thta is、口味)的事件发送到我分析平台中的不同帐户。但是,如果我正在调试,我希望将它们全部发送到我的沙盒帐户

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

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


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

作为替代方法,您可以将资源放在buildType文件夹、ProductFlavor文件夹或buildVariant文件夹的源文件夹中的string.xml文件中

如果将其放置在buildVariant文件夹中,则可以保证使用该值

src-Root
    |->main
    |->debugAppA <- resources in this combination will be given precedence.
    |   |->res
    |      |->values
    |         |-> strings.xml
    |-> debug
    |   |->res
    |      |->values
    |         |-> strings.xml
    |-> appA
    |   |->res
    |      |->values
    |         |-> strings.xml
src根目录
|->主要
|->debugAppA res
||->值
||->strings.xml
|->调试
||->res
||->值
||->strings.xml
|->阿帕
||->res
||->值
||->strings.xml
这有保证吗

对于同一级别(例如,同一模块)的事物,构建类型通常被认为比产品风格具有更高的优先级。引述:

通常,构建类型配置是覆盖在其他配置之上的。例如,构建类型的packageNameSuffix被附加到产品风格的packageName中

然而,清单合并是相当复杂的,需要大量的数据

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

所有资源(Android资源和资产)都使用覆盖优先级,其中构建类型覆盖产品风格,而产品风格覆盖主源集


<> > <代码> Reals>/Cord>开始使用不同于使用SoeSeCes的等价物时,我会认为这是一个bug。

+ 1。是的,(通过Commonware的参考资料)确认您的建议确实有效。最后,我将做一个混合:string.xml作为味道,build.gradle作为覆盖它们的构建类型。@espinchi,这是怎么可能的?你能在这里@espinchi检查我的问题吗:“如果我使用XML资源,或者如果我混合使用它们(如我所愿)”--我绝对不会对相同的资源类型和名称同时使用
resValue
和“real”资源,因为我怀疑这是一种预期的使用模式。但是,如果有什么不同的话,单独使用资源文件应该更安全,因为这种行为是明确记录的。你的情况是什么?(对不起,我错误地删除了我以前的评论。)是的,只使用资源可以按预期工作,最终结果实际上更具可读性。起初,我想在build.gradle文件中使重写更明确一些,但我认为这是不必要的。