Android Studio gradle 风味维度构建变体无法正常工作
Posted
技术标签:
【中文标题】Android Studio gradle 风味维度构建变体无法正常工作【英文标题】:Android studio gradle flavor dimensions build varients not working correctly 【发布时间】:2015-08-31 11:35:30 【问题描述】:我有一个应用程序的两个维度,然后调用绿色和蓝色。只有这两个维度,但产品口味的数量是无限的。这是我在gradle中设置的方式
flavorDimensions "green", "blue"
productFlavors
one
applicationId "com.app.green.one"
versionCode 1
versionName "1.0.0.1";
flavorDimension = "green"
two
applicationId "com.app.blue.two"
versionCode 6
versionName "1.0.1";
flavorDimension = "blue"
但是在我同步 gradle 之后,在构建变体选项卡中,我看到的只是 oneTwoDebug 和 oneTwoRelease,我应该在其中看到 greenOneDebug greenOneRelease、blueTwoDebug、blueTwoRelease
理论上我想把它扩展成这样
one
applicationId "com.app.green.one"
versionCode 1
versionName "1.0.0.1";
flavorDimension = "green"
two
applicationId "com.app.blue.two"
versionCode 6
versionName "1.0.1";
flavorDimension = "blue"
three
applicationId "com.app.green.three"
versionCode 1
versionName "1.0.0.1";
flavorDimension = "green"
four
applicationId "com.app.blue.four"
versionCode 6
versionName "1.0.1";
flavorDimension = "blue"
在这种情况下,维度代表应用的“类型”,然后对于可以添加的组织而言,风味更多。
**编辑我的 gradle 设置错误,正如这里指出的,这是对我所拥有的更准确的描述
flavorDimensions "type", "organization"
productFlavors
blue
applicationId "com.app.blue"
flavorDimension = "type"
versionCode 6
versionName "1.0.1";
red
applicationId "com.app.red"
flavorDimension = "type"
versionCode 1
versionName "1.0.0.1";
company1
flavorDimension = "organization"
company2
flavorDimension = "organization"
到目前为止,这是可行的,所以我可以为切换类型创建 java 源目录,但是如果我想要组织特定的配置文件,我是否也为每个组织创建 java 源目录?
【问题讨论】:
【参考方案1】:我认为您误解了 flavorDimension 的概念。
flavorDimension 类似于 风味类别,每个维度的风味的每种组合都会产生一个变体。
在您的情况下,您必须定义一个名为“type”的 flavorDimension 和另一个名为“organization”的维度。 它将为“组织”维度中的每种风味生成所有可能的“类型”(或双重表述:对于每个“类型”,它将为每个组织生成一个变体)。
风味维度定义了将用于生成变体的笛卡尔积。
编辑:我会尝试用伪gradle代码来说明:
让我们定义一些“类型”:青铜、白银和黄金
让我们定义一些组织:customerA、customerB、customerC
所有这些都是 productFlavors,但它们属于 2 个不同的维度:
flavorDimensions("type_line", "organization")
productFlavors
gold
...
dimension = "type_line"
silver
...
dimension = "type_line"
bronze
...
dimension = "type_line"
customerA
...
dimension = "organization"
customerB
...
dimension = "organization"
customerC
...
dimension = "organization"
此配置将产生 18 (3*3*2) 个变体(如果您有 2 种标准构建类型:调试和发布):
gold-customerA-debug ; gold-customerA-release ; gold-customerB-debug ; gold-customerB-release ; gold-customerC-debug ; gold-customerC-release ;
silver-customerA-debug ; silver-customerA-release ; silver-customerB-debug ; silver-customerB-release ; silver-customerC-debug ; silver-customerC-release ;
...(青铜也一样)
请注意,维度的名称完全是任意的,对变体名称没有影响。
风味维度非常强大,但如果使用太多:它会导致变体数量呈指数级增长(构建后清理任务可能有助于删除无用或无意义的变体)
【讨论】:
这更有意义,但是每种产品风味都需要定义一个风味维度,因此,如果每种风味都是两者的组合,那么它是如何工作的 我想我真正想做的是某种意义上的亚风味 感谢您的示例!在您之前的评论之后,我才弄清楚它是如何工作的,这更有意义,如果可以,最后一个问题,如果我也想要组织的配置文件,每个组织都需要自己的 java 源目录吗?还是必须将组织配置放在“类型”配置中?这有意义吗 您可以为 /src/flavorName/java 下的每个产品风味(分别为 src/flavorName/res 和 src/flavorName/assets)和每个变体创建额外的 java/ 、 res/ 或 assets/ 目录将包括 src/main/ 下的源代码 + src/flavorName/ 下的源代码(我不明白您所说的“放置在类型配置中”是什么意思) @ben75 代替“清理任务”,使用variantFilter 块来减少变体的数量并排除无用的组合以上是关于Android Studio gradle 风味维度构建变体无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
在android studio中build.gradle中使用flavor维度
现在,所有风格都必须属于命名风味维度Android Studio NDK