Je travaille sur une application de marque blanche.
Nous créons une saveur différente par client et chaque client a des API Debug
et Production
, donc j'essaye de les configurer dans Gradle.
Comment dois-je faire cela?
Voici ce que j'ai essayé:
https://prod.company2.com/api/
EDIT:
Je voudrais pouvoir définir une BASE_URL
différente pour chaque Flavor et Buildtype.
Flavour company1, BuildType debug
https://dev.company2.com/api/
Flavour company1, version BuildType
https://app.company1.com/prodApi/
Flavour company2, débogage BuildType
https://app.company1.com/devApi/
Flavour company2, version BuildType
buildTypes { debug { // some configurations } release { // some configurations } } flavorDimensions "client" productFlavors { company1{ dimension "client" buildConfigField("String", "BASE_URL", "\"https://app.company1/devApi/\"") } company2 { dimension "client" buildConfigField("String", "BASE_URL", "\"https://app.company2/devApi/\"") } }
5 Réponses :
Vous pouvez utiliser des saveurs pour ajouter des configurations de base pour votre application, qui vont de l ' URL de l'application
, des clés API
, du mot de passe principal
etc. < pre> XXX
Maintenant, si vous vérifiez vos variantes de construction
, vous obtiendrez quelque chose comme ceci:
Voici l'exemple de travail
// Spécifie une dimension de saveur.
String baseURL =BuildConfig.BASE_URL_PATH;
vous pouvez y accéder comme ceci
flavorDimensions "version" productFlavors { dev { dimension "version" applicationId "com.example.lk" versionCode 1 versionName "1.0.1" buildConfigField("String", "BASE_URL_PATH", "\"https://app.dev.com/api/v1/\"") } prod { dimension "version" applicationId "com.example.in" versionCode 1 versionName "1.0.1" buildConfigField("String", "BASE_URL_PATH", "\"https://app.prod.com/api/v1/\"") } staging { dimension "version" applicationId "com.example.other" versionCode 1 versionName "1.0.1" buildConfigField("String", "BASE_URL_PATH", "\"https://app.staging.com/api/v1/\"") }} buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Votre principal problème est que vous ne placez pas correctement vos buildTypes pour les saveurs et aucun paramètre correct à l'intérieur de chaque entreprise et je vous suggère également d'en savoir plus sur les configurations Gradle ( developer.android ).
buildTypes { debug { // some configurations } release { // some configurations } } flavorDimensions "version", "brand" productFlavors { dev { versionName += "dev" dimension "version" buildConfigField "String", "BASE_API_URL", "\...\"" } prod { dimension "version" buildConfigField "String", "BASE_API_URL", "\...\"" } company1{ dimension "brand" versionName "1.0.0" buildConfigField("int", "CLONE_ID", "1") **here you can set some params, for current clone id: examlpe ->** buildConfigField("boolean", "SHOW_CREDIT_BUY_IN_PROFILE", "true") } company2 { dimension "brand" versionName "1.0.0" buildConfigField("int", "CLONE_ID", "2") **here you can set some params, for current clone id: examlpe ->** buildConfigField("boolean", "SHOW_CREDIT_BUY_IN_PROFILE", "false") }
Essayez quelque chose comme ceci:
buildTypes { debug { buildConfigField("String", "BASE_URL_PATH", "\"devApi/\"") } release { buildConfigField("String", "BASE_URL_PATH", "\"prodApi/\"") } } flavorDimensions "client" productFlavors { company1{ dimension "client" buildConfigField("String", "BASE_URL_DOMAIN", "\"https://app.company1/\"") } company2 { dimension "client" buildConfigField("String", "BASE_URL_DOMAIN", "\"https://app.company2/\"") } }
Et utilisez-le comme:
Chaîne BASE_URL = BuildConfig.BASE_URL_DOMAIN + BuildConfig.BASE_URL_PATH
Merci d'avoir répondu. Cela fonctionnerait dans certains cas, mais dans mon cas, j'ai besoin de BASE_URL tous ensemble. Cette URL ne dépend pas de nous et peut être company1.com/apiDebug
ou debug.company2.com/api
Mon idée est de diviser l'URL entière en parties et de les mettre en Flavors et BuildTypes. Cela fonctionne même s'il existe une combinaison avec plus de 2 types. c'est-à-dire quelque chose comme Company1-Mobile-Debug, Company2-Tablet-Prod etc. Si vous dites que tout est incertain ici, vous feriez mieux d'utiliser les constantes String dans votre Java et d'utiliser Build Type et Product Flavors avec une instruction Switch pour construire le URL réelle au moment de l'exécution
Pour mon problème spécifique, où les URL diffèrent beaucoup les unes des autres, je ne pouvais pas le faire fonctionner avec Flavors et BuildTypes.
J'ai pu définir les URL de débogage / production en utilisant des strings.xml
spécifiques pour chaque variante de construction (qui est chaque combinaison de saveur et de type de construction):
Ces sont les structures de dossiers pour ce faire:
src/flavour2Debug/res/values/strings.xml src/flavour2Release/res/values/strings.xml
et
src/flavour1Debug/res/values/strings.xml src/flavour1Release/res/values/strings.xml
EXTRA:
Cela peut également être utilisé pour héberger différents fichiers google-services.json
quelles sont exactement vos exigences que vous souhaitez donner en saveur?
vérifiez ma réponse @kike, vous pouvez modifier selon vos besoins
Salut, @kike, avez-vous la meilleure solution maintenant? J'ai eu le même problème aujourd'hui. Malheureusement, je ne peux pas obtenir une solution satisfaisante uniquement avec Gradle. Je dois enfin définir deux variables dans chaque saveur, une pour le débogage et l'autre pour la publication. Ensuite, dans le code, je vérifie le buildType pour obtenir la bonne valeur. Toute mise à jour?
@Freddie Si ces variables sont très différentes (par exemple, vous ne pouvez pas combiner des chaînes) vous devrez les définir dans un
strings.xml
séparé. Vérifiez ma réponse ci-dessous et faites-moi savoir si vous avez d'autres questions.