我想知道是否可以为特定的风味组组合提供文件或配置设置。例如,我有2个风味组,每组有2种不同的风味:
风味组:版本
风味组:输入
当订购“Type”,“Version”时,我能够构建4种不同风格的应用程序:
我的源代码树看起来像这样:
/src
/free
/res
/full
/res
/v2
/java
/res
AndroidManifest.xml (features and permissions for v2 flavors)
/v3
/java
/res
AndroidManifest.xml (features and permissions for v3 flavors)
这正是我想要的,并且对我的项目非常有效。但是,我希望我能为特定的风味组合组合提供文件。例如,我想为FullV3和FullV2提供不同的AndroidManifests。我不认为这是可能的,或者?例如:
/src
/free
/res
/full
/res
/v2
/java
/res
AndroidManifest.xml (features and permissions for v2 flavors)
/v3
/java
/res
AndroidManifest.xml (features and permissions for v3 flavors)
/fullv3
AndroidManifest.xml (features and permissions for full v3 only!)
/fullv2
AndroidManifest.xml (features and permissions for full v2 only!)
我很高兴能够在gradle构建文件中执行此操作:
productFlavors {
free {
packageName ...
flavorGroup "type"
}
full {
packageName ...
flavorGroup "type"
}
v2 {
packageName ...
flavorGroup "version"
}
v3 {
packageName ...
flavorGroup "version"
}
fullv2 {
... <-- specifically for the full-v2 combination
}
fullv3 {
... <-- specifically for the full-v3 combination
}
}
注意:一种解决方案是只有1个风味组并明确定义4种风味:
然而,这对我来说不是一个可行的解决方案,因为我必须为每个版本的免费和完整版本复制所有特定于版本的代码。
答案 0 :(得分:9)
此功能已在Android plugin for Gradle
的版本 0.7.0 中添加http://tools.android.com/tech-docs/new-build-system&lt; - 截至2014年1月6日,此链接有效
如果您有口味,现在可以拥有变体特定的源文件夹。
- 仅适用于app(不是库或测试)。名称为
src/flavorDebug/...
或src/flavor1Flavor2Debug/
- 请注意camelcase命名,首字母为小写。
- 其组件(res,manifest等)的优先级高于构建类型或flavor的组件。
- 当使用多个风味维度时,还有一个“风味组合”源文件夹。例如
src/flavor1Flavor2/
- 请注意,这适用于所有尺寸的所有组合。
- 它的优先级高于单味源集,但低于构建类型。
2014年1月30日更新
IntelliJ IDEA v13.0.2 (Build 133.696)现在支持在0.7.0中进行的Android Gradle插件更改
答案 1 :(得分:0)
当风味融合在一起时,文件将被合并。因此,如果您在full
和v3
中有清单,则会在生成fullV3
时将其合并。这样就可以生成组合。
答案 2 :(得分:0)
根据问题,您需要不同的AndroidManifest文件,以获得v2和v3的完整版本。因此,您可以根据自己的方便使用flavor和buildType的组合,而不是使用完整和免费的口味。
例如
我知道完整且免费应该是产品风格而不是构建类型但是你的要求说完全和免费是你的buildTypes和v2和v3是你的应用程序风味
buildTypes {
debug {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
full{
runProguard false/true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.prodSigning // write your signingConfig
}
free{
runProguard false/true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.prodSigning // write your signingConfig
}
}
productFlavors{
v2 {
//required configuration for full version
}
v3 {
//required configuration for full version
}
}
现在你的项目结构应该是这样的。
--src
---main
----java
----res
----Manifest
---full
----java
----res
----Manifest(Manifest you want for Full Version)
---free
----java
----res
----Manifest (Manifest you want for Free Version)
---v2
----java
----res
----Manifest
---v3
----java
----res
----Manifest
与Gradle同步之后,这将在AS的左窗格中的构建变体选项卡中提供构建类型的组合,并将为其创建不同的任务。
转到Build Variant并根据您的选择从下拉列表生成构建。
它会为你提供像这样的Build Variants
答案 3 :(得分:0)
要为构建文件中的每个风味组合设置配置,您可以使用我在此处提出的解决方案:https://stackoverflow.com/a/26585241
然后,您可以使用和variantFilter迭代所有风味组合并匹配每个组合的名称(就像创建&#34时使用的名称;风味组合&#34;源文件夹,您可以在其中放置特定资源,如上所述在@abest的回答中:
android.variantFilter { variant ->
def flavorString = ""
def flavors = variant.getFlavors()
for (int i = 0; i < flavors.size(); i++) {
flavorString += flavors[i].name;
}
if(flavorString.equalsIgnoreCase("fullv2")) {
variant.getDefaultConfig().applicationId "com.example.fullv2"
}