Android Gradle构建类型还是风格优先?
假设我在两个级别都定义了一个常量:在构建类型中,我将其设置为“mybuild”,在flavor中,我将其设置为“myflavor” 例如在这里: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_
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文件中使重写更明确一些,但我认为这是不必要的。