Je travaille sur une application Android avec Gradle comme système de construction.
Mon objectif est d'utiliser une valeur (un nom de package) comme applicationId
:
productFlavors {
orange {
applicationId "com.fruits.Android.orange"
// ...
Mais aussi de l'exposer via BuildConfig
pour que Java y ait accès).
Cet accès doit provenir de l'extérieur de la saveur (à savoir, la version gratuite de l'application doit connaître le nom du package de la version payante afin qu'elle puisse inviter l'utilisateur à effectuer une mise à niveau dans Play Store).
Je voudrais donc faire quelque chose comme ça:
productFlavors {
orange {
applicationId orangeProPackage
// ...
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ?
Seulement, je ne sais pas comment définir orangeProPackage
pour qu'il soit visible dans tout le build.gradle et ne casse pas le script.
Puisqu'il y a quelques saveurs différentes, il serait préférable que je puisse en quelque sorte regrouper toutes ces constantes comme ça (je suppose?):
def proPackages = [
orange: "..."
Apple: "..."
banana: "..."
]
puis vous y référer de manière claire et descriptive comme proPackages.orange
etc.
La question est, comment y parvenir?
Ce n'est pas un doublon de Est-il possible de déclarer une variable dans Gradle utilisable en Java?
J'ai vu cette question (et quelques autres). Je sais comment déclarer buildConfigFields, j'en ai déjà beaucoup. Ma question concerne la réutilisation de la même valeur qu'un buildConfigField
et applicationId
.
Seulement, je ne sais pas comment définir orangeProPackage pour qu'il soit visible dans tout le build.gradle et ne casse pas le script.
Vous pouvez le mettre dans gradle.properties
dans la racine de votre projet. Comme les autres .properties
fichiers, c'est juste un magasin de valeurs-clés:
ORANGE_PRO_PACKAGE=com.morawski.awesomeapp
Vous vous référez ensuite à elle comme une simple variable de chaîne globale (ORANGE_PRO_PACKAGE
) dans votre build.gradle
:
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', ORANGE_PRO_PACKAGE
ce serait mieux si je pouvais en quelque sorte regrouper toutes ces constantes
Tout ce qui implique .properties
les fichiers ne géreront pas cela. Là, vous envisagez peut-être de définir des globaux dans le niveau supérieur build.gradle
fichier juste en code Groovy ordinaire ou quelque chose.