我创建了一个需要以多种 (30 多种) 风格构建的 Android 应用。
我的想法是直接从我的 src
目录中的文件夹结构生成不同的 productFlavors
,因为配置总是非常相似(基本上只是另一个 packageName,一个新的启动器图标和一些字符串更改)。
src
文件夹如下所示:
└── src
├── flavor1
│ ├── flavor2.keystore
│ ├── res
├── flavor2
│ ├── res
│ ├── flavor2.keystore
└── main
├── AndroidManifest.xml
├── java
└── res
如果我必须手动创建 gradle 属性,它会看起来像这样:
android {
....
productFlavors {
flavor1 {
packageName 'com.example.flavor1'
}
flavor2 {
packageName 'com.example.flavor2'
}
}
}
每次我在创建后尝试更改 productFlavors
配置时都会收到错误消息,或者更改/添加会被忽略。
这可能是我造成的问题,因为我的 Gradle/Groovy 经验非常有限,或者这是不可能的。
我经常遇到错误,说 GroupableProductFlavorDsl_Decorated
无法按照我想要的方式进行操作。
我要归档的内容应该如下所示:
android {
....
def flavors = getMyFlavorsFromFileSystem()
productFlavors {
}
flavors.each { name, config ->
productFlavors[name] << config
}
}
注意:我知道这个问题基本上是 duplicate一个较老的问题,遗憾的是从未得到回答。由于 Gradle 对 Android 世界来说是一种新事物,我希望自上次提出问题以来得到更多答案,因为现在越来越多的开发人员正在使用 Gradle。
更新:
我尝试了一些非常简单的方法:
变体 1:
android {
productFlavors {
}
productFlavors['flavor1'] << {
packageName "com.example.flavor1"
}
productFlavors['flavor2'] << {
packageName "com.example.flavor2"
}
}
/*
A problem occurred evaluating root project 'MyProject'.
> GroupableProductFlavorDsl with name 'flavor1' not found.
*/
变体 2:
android {
productFlavors {
}
productFlavors['flavor1'] = {
packageName "com.example.flavor1"
}
productFlavors['flavor2'] = {
packageName "com.example.flavor2"
}
}
/*
no error, but does not work
*/
变体 3:
android {
productFlavors {
}
productFlavors['flavor1'] = [packageName: "com.example.flavor1"]
productFlavors['flavor2'] = [packageName: "com.example.flavor2"]
}
/*
no error, but does not work
*/
所有这些都是 Gist .
最佳答案
通过反复试验解决:
android {
// let's assume these are return by a function which reads the filesystem
def myFlavors = [
flavor1: [
packageName: "com.example.flavor1"
],
flavor2: [
packageName: "com.example.flavor2"
]
]
productFlavors {
myFlavors.each { name, config ->
"$name" {
packageName config.packageName
}
}
}
}
关于android - 动态生成产品 flavor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976946/