Ich habe 2 buildTypes (debug, release) und 2 productFlavors (product1, product2). Ich möchte ein buildConfigField für jeden buildType und productFlavors definieren. Das buildConfigField ist die URL, über die die App Daten vom Server herunterlädt, und sie ändert sich für jedes productFlavor und buildTypes.Code Pfad pro Geschmack in Android Gradle
Jetzt habe ich:
buildTypes {
debug {
debuggable true
}
release {
debuggable false
}
}
productFlavors {
product1 {
buildConfigField STRING, "URL_BASE", '"https://api1.release.com"'
}
product2 {
buildConfigField STRING, "URL_BASE", '"https://api2.release.com"'
}
}
Aber ich möchte etwas wie folgt aus:
buildTypes {
debug {
debuggable true
}
release {
debuggable false
}
}
productFlavors {
product1 {
debug {
buildConfigField STRING, "URL_BASE", '"https://api1.debug.com"'
}
release {
buildConfigField STRING, "URL_BASE", '"https://api1.release.com"'
}
product2 {
debug {
buildConfigField STRING, "URL_BASE", '"https://api2.debug.com"'
}
release {
buildConfigField STRING, "URL_BASE", '"https://api2.release.com"'
}
}
}
Wie ich das erreichen kann?
Update:
Jede URL_BASE hat ein anderes Muster, so kann ich nicht gruppiert die URLs. Eine mögliche Lösung besteht darin, die URL-Basis der 2 Flavor in den verschiedenen Build-Typen hinzuzufügen und die richtige in der Flavor auszuwählen.
buildTypes {
debug {
debuggable true
buildConfigField STRING, API_VARIANT_PRODUCT1, '"api1.deb.com"'
buildConfigField STRING, API_VARIANT_PRODUCT2, '"api2.debug.com"'
}
release {
debuggable false
buildConfigField STRING, API_VARIANT_PRODUCT1, '"api1.release.com"'
buildConfigField STRING, API_VARIANT_PRODUCT2, '"api2.release.com"'
}
}
productFlavors {
product1 {
buildConfigField STRING, URL_BASE, '"https://" + API_VARIANT_PRODUCT1 + "/v1"'
}
product2 {
buildConfigField STRING, URL_BASE, '"https://" + API_VARIANT_PRODUCT2 + "/v1"'
}
}
}
UPDATE 2
Wenn Sie Ressourcen in gradle hinzufügen müssen, wie ein 'KEY_MAP' ist die Lösung in diesem page.
Was ist mit den Java-Klassen, die für jeden Buildtyp gleich sind? Muss ich jede Java-Klasse klonen, um sie in product1Debug, product1Release hinzuzufügen? Oder muss ich einen Ordner namens product1 erstellen und dieser Code ist drin ?? Zum Beispiel eine Java-Klasse namens SplashActivity.java, die für die Build-Typen debug und release in product1 identisch ist. Danke – beni
Für Java-Klassen müssen Sie 1 Klasse für jeden buildTypes setzen. Sie können in diesem Fall verwenden: '- app/src/debug:' '- app/src/product1Release' ' - app/src/product2Release' –