我創建了一個需要在許多(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。
「每次我嘗試弄亂productFlavors配置時,我得到一個錯誤或者更改/添加被默認忽略」 - 當你不解釋什麼「混亂」意味着很難幫助你,你得到了什麼錯誤,什麼是「默默無視」的「變化/添加」等等。 – CommonsWare
爲什麼要創建這麼多的構建?你的代碼無法識別它運行的是哪個版本並相應地調整它的方法? Google/Android人員在支持庫的工作方面做得很好 – Martin
@Martin我需要這麼多版本,因爲這些應用程序是作爲白標籤應用程序出售給客戶的(不同的packageName,不同的Google開發者賬戶,不同的keyStore)。我的公司在打印到網絡部門工作,所以是的:我需要這麼多的版本。 – TheHippo