問題描述
我創建了一個需要以多種 (30 多種) 風格構建的 Android 應用.
I've created an Android App which needs to be build in many (30+) flavors.
我的想法是直接從我的 src
目錄中的文件夾結構生成不同的 productFlavors
,因為配置總是非常相似(基本上只是另一個 packageName,一個新的啟動器圖標和一些字符串更改).
My idea was to generate the different productFlavors
directly from the folder structure in my src
directory, since the configuration is always very similar (basically just another packageName, a new launcher icon and some strings change).
src
文件夾如下所示:
└── src
├── flavor1
│?? ├── flavor2.keystore
│?? ├── res
├── flavor2
│?? ├── res
│?? ├── flavor2.keystore
└── main
?? ├── AndroidManifest.xml
?? ├── java
?? └── res
如果我必須手動創建 gradle 屬性,它會看起來像這樣:
If I had to create the gradle properties by hand it would look somehow like this:
android {
....
productFlavors {
flavor1 {
packageName 'com.example.flavor1'
}
flavor2 {
packageName 'com.example.flavor2'
}
}
}
每次我嘗試在創建后更改 productFlavors
配置時都??會收到錯誤消息,或者更改/添加會被忽略.
這可能是我造成的問題,因為我的 Gradle/Groovy 經驗非常有限,或者這是不可能的.
Everytime I try to change the productFlavors
configuration after its creation I get either an error or the changes / additions are ignored silently.
This could a be problem caused by me, because my Gradle / Groovy experience is very limited, or this isn't possible.
我經常遇到錯誤,說 GroupableProductFlavorDsl_Decorated
無法按照我想要的方式進行操作.
I mostly get error, saying that GroupableProductFlavorDsl_Decorated
could not be manipulated the way I want.
我要歸檔的內容應該如下所示:
What I'm trying to archive should somehow look like this:
android {
....
def flavors = getMyFlavorsFromFileSystem()
productFlavors {
}
flavors.each { name, config ->
productFlavors[name] << config
}
}
注意:我知道這個問題基本上是重復a> 的一個較老的問題,遺憾的是從未得到回答.由于 Gradle 對 Android 世界來說是一種新事物,我希望自上次提出問題以來得到更多答案,因為現在越來越多的開發人員正在使用 Gradle.
Note: I know this question is basically an duplicate of an older question, which sadly was never answered. Since Gradle is kind of new to the Android world, I'm hoping to get more answers as since the last time the question was asked, because more developers are using Gradle now.
更新:
我嘗試了一些非常簡單的方法:
Here some very simple approaches I tried:
變體 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
*/
所有這些都是要點.
推薦答案
通過反復試驗解決:
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
}
}
}
}
這篇關于動態生成產品風味的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!