Ho 2 buildTypes (debug, release) e 2 productFlavors (product1, product2). Voglio definire un buildConfigField per ogni buildType e productFlavors. Il buildConfigField è l'url dell'app per scaricare i dati dal server e cambia per ciascun prodottoFlavor e buildTypes.Code Path per Flavor in Android Gradle
Ora, ho:
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"'
}
}
Ma io voglio qualcosa di simile:
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"'
}
}
}
Come posso raggiungere questo obiettivo?
Aggiornamento:
Ogni URL_BASE ha un modello diverso quindi non posso gruppo gli URL. Una soluzione possibile consiste nell'aggiungere la base url del 2 sapore nei diversi tipi di build e selezionare quello giusto nel sapore.
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
Se avete bisogno di aggiungere risorse a Gradle, come un 'KEY_MAP' la soluzione è in questo page.
E le classi java che sono uguali per ogni tipo di build? Devo clonare ogni classe java per aggiungere in product1Debug, product1Release? O devo creare una cartella chiamata product1 e questo codice è in esso ?? Ad esempio una classe java chiamata SplashActivity.java che è la stessa per i tipi di build debug e release in product1. Grazie – beni
Per le classi java devi mettere 1 classe per ogni buildTypes. Si può usare in questo caso: '- app/src/debug:' '- app/src/product1Release' ' - app/src/product2Release' –