Comment changer le nom de l'application par type de build Gradle
J'essaie de trouver un moyen de pouvoir changer d'application nom de l'application par type de build dans gradle.
Par exemple, je voudrais que la version de débogage pour avoir <APP_NAME>-debug
et la version qa avoir <APP-NAME>-QA
.
Je suis familier avec:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
Cependant, je n'arrive pas à trouver un gradle de commande pour appliquer la modification de l'application dans le lanceur.
Vous devez vous connecter pour publier un commentaire.
Si par "nom de l'application", vous voulez dire
android:label
sur<application>
, la solution la plus simple est de ce point à une ressource de chaîne (par exemple,android:label="@string/app_name"
), puis une autre version de cette ressource de chaîne dans unesrc/debug/
sourceset.Vous pouvez voir que dans cet exemple de projet, où j'ai un remplacement pour
app_name
danssrc/debug/res/values/strings.xml
, qui seront appliquées pourdebug
construit.release
builds vont utiliser la version deapp_name
danssrc/main/
.release
cordes.release
part, je vois un peu différemment que l'on peut vouloir tester aussi pour les problèmes de localisation, tout en permettant à la "libération" et "test" construit à coexister sur le même appareil. Dans un tel cas, les deux versions peut se retrouver avec le même lanceur étiquette, probablement à l'origine d'une certaine confusion. C'est ce que j'essayais d'éviter.release
mode. Et de n'utiliser cette ressource de chaîne pourapp_name
, pas pour tout autre rôle.app_name
, même s'il n'est pas nécessaire (par exemple, vous avez le français ou l'allemand développeurs qui ne parlent pas l'anglais et ont donc besoin d'une traduction). Pour le test pour voir si le non modifiéerelease
version deapp_name
œuvres, ses traductions, test de larelease
construire, ou de créer unnear-release
type de build qui ajoute juste l'ID de l'application de suffixe et laisse les cordes seules.strings.xml
dans/src/debug/res/values/
ne fonctionne pas. Au lieu de cela, vous devez spécifier le nom de la saveur en face du type de construction, par exemple: si vous avez une saveur Premium puis le nom du dossier doit être:premiumDebug
. @CommonsWare, peut-être que vous devriez mettre à jour votre réponse en conséquence.debug
construit indépendamment de la saveur, ma réponse est correcte. Si vous rencontrez des problèmes pour obtenir que cela fonctionne, le fichier de frais de Dépassement de Pile question avec un un minimum de reproductibles exemple.flavorDebug
, il semblait faire l'affaire.Vous pouvez utiliser quelque chose comme cela
Vous pouvez utiliser @string/app_name dans AndroidManifest.xml les fichiers.
Assurez-vous de retirer app_name de valeurs/dossier (pas d'entrée par ce nom).
resValue "string", "app_name", System.getenv("APP_NAME") ?: "MyApp"
strings.xml
etapp_name
, une application va obtenir une valeur à partir de là. Probablement dans ce cas, vous devriez changer une cléapp_name
à d'autres.Vous pouvez faire cela avec gradle:
Puis dans votre
AndroidManifest.xml
mettre:Remarque: il fonctionne également avec
productFlavors
.À l'appui de traductions faites ceci:
1. supprimer la chaîne "app_name"
2. ajouter à gradle
3. Définir nom de l'application dans le Manifeste comme "@string/app_name"
4. Ajouter à strings.xml les valeurs
Le nom de l'application est visible par l'utilisateur, et c'est pourquoi Google vous encourage à garder dans votre strings.xml fichier. Vous pouvez définir une chaîne distincte fichier de ressources qui contient des chaînes de caractères qui sont spécifiques à votre buildTypes. Il semble que vous pourriez avoir un personnalisé
qa
buildType. Si ce n'est pas vrai, ignorer l'assurance de la qualité partie ci-dessous.Nous avons besoin d'une solution à l'appui de nom de l'application avec la localisation (pour multi-langue).
J'ai testé avec @Nick Unuchek solution, mais la construction est un échec (pas trouvé @string/) . un peu de changement pour corriger ce bug:
construire.gradle fichier:
values\strings.xml:
values-en\strings.xml:
Manifest.xml:
tools:replace="android:label"
dansapplication
dansAndroidManifest
Plus dynamiques gradle en fonction de la solution (par exemple, définir une base nom de l'Application dans la main
strings.xml
une fois, et éviter de vous répéter dans chaque saveur /type de construction combinaison destrings.xml
), voir ma réponse ici: https://stackoverflow.com/a/32220436/1128600Vous pouvez utiliser
strings.xml
dans des dossiers différents, voir Android distincte de la chaîne de valeurs pour la release et debug.Donc créer ce fichier:
Puis de le coller à
app\src\debug\res\values\
etapp\src\release\res\values\
dossiers. Remplacer "Votre nom de l'application" en debug et release fichiers. Supprimerapp_name
élément destrings.xml
dansapp\src\main\res\values\
dossier.Dans
AndroidManifest
, vous aurez le mêmeAucune modification. Même si vous avez ajouté une bibliothèque avec
AndroidManifest
fichier etstrings.xml
.Comme l'auteur de la demande pour ce faire, dans Gradle, nous pouvons supposer qu'il veulent le faire dans le script et pas dans les fichiers de configuration. Depuis deux Android Studio et Gradle a été fortement mis à jour et modifié dans la dernière année (~2018) toutes les autres réponses ci-dessus, semblent trop tordu. L'easy-peasy, est d'ajouter les éléments suivants à votre
app/build.gradle
: