J'essaie de trouver un moyen de pouvoir modifier le nom d'application de mon application par type de construction dans Gradle.
Par exemple, je voudrais que la version de débogage ait <APP_NAME>-debug
et que la version qa ait <APP-NAME>-QA
.
Je suis familier avec:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
Cependant, je n'arrive pas à trouver de commande de changement pour appliquer le changement d'application lorsque vous êtes dans le lanceur.
Si par "nom de l'application", vous voulez dire Android:label
sur <application>
, la solution la plus simple consiste à placer ce point sur une ressource chaîne (par exemple, Android:label="@string/app_name"
), puis à avoir une version différente de cette ressource chaîne dans un ensemble de sources src/debug/
.
Vous pouvez voir cela dans cet exemple de projet , où j'ai un remplacement pour app_name
dans src/debug/res/values/strings.xml
, qui sera appliqué aux générations debug
. release
builds utilisera la version de app_name
dans src/main/
.
Vous pouvez utiliser quelque chose comme ça
buildTypes {
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
resValue "string", "app_name", "AppName debug"
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
zipAlignEnabled true
resValue "string", "app_name", "AppName"
}
}
Vous pouvez utiliser @ string/app_name dans les fichiers AndroidManifest.xml.
Assurez-vous de supprimer app_name de values / folder (aucune entrée portant ce nom).
Vous pouvez le faire avec gradle:
Android {
buildTypes {
release {
manifestPlaceholders = [appName: "My Standard App Name"]
}
debug {
manifestPlaceholders = [appName: "Debug"]
}
}
}
Puis dans votre AndroidManifest.xml
, mettez:
<application
Android:label="${appName}"/>
<activity
Android:label="${appName}">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Remarque: cela fonctionne également avec productFlavors
.
Pour prendre en charge les traductions, faites ceci:
1. remove string "nom_app"
2. ajouter au grade
buildTypes {
admin {
resValue "string", "app_name", "@string/app_name_admin"
}
release {
resValue "string", "app_name", "@string/app_name_release"
}
debug {
resValue "string", "app_name", "@string/app_name_debug"
}
}
3. Définir le nom de l'application dans Manifest comme "@ string/app_name"
4. Ajouter aux valeurs de strings.xml
<string name="app_name_admin">App Admin</string>
<string name="app_name_release">App release</string>
<string name="app_name_debug">App debug</string>
Le nom de l'application est visible par l'utilisateur. C'est pourquoi Google vous encourage à le conserver dans votre fichier strings.xml. Vous pouvez définir un fichier de ressources de chaîne séparé contenant des chaînes spécifiques à vos buildTypes. On dirait que vous pourriez avoir un qa
buildType personnalisé. Si ce n'est pas vrai, ignorez la partie qa ci-dessous.
└── src
├── debug
│ └── res
│ └── buildtype_strings.xml
├── release
│ └── res
│ └── buildtype_strings.xml
└── qa
└── res
└── buildtype_strings.xml
Nous avons besoin d'une solution pour prendre en charge le nom de l'application avec la localisation (pour les langues multiples) . J'ai testé avec la solution @Nick Unuchek, mais la construction a échoué (introuvable @ string /). un petit changement pour corriger ce bogue: build.gradle:
Android {
ext{
APP_NAME = "@string/app_name_default"
APP_NAME_DEV = "@string/app_name_dev"
}
productFlavors{
prod{
manifestPlaceholders = [ applicationLabel: APP_NAME]
}
dev{
manifestPlaceholders = [ applicationLabel: APP_NAME_DEV ]
}
}
valeurs\strings.xml:
<resources>
<string name="app_name_default">AAA prod</string>
<string name="app_name_dev">AAA dev</string>
</resources>
values-fr\strings.xml:
<resources>
<string name="app_name_default">AAA prod en</string>
<string name="app_name_dev">AAA dev en</string>
</resources>
Manifest.xml:
<application
Android:label="${applicationLabel}" >
</application>
Pour une solution plus dynamique basée sur les grades (par exemple, définissez une fois le nom de l'application de base dans le strings.xml
de main et évitez de vous répéter dans chaque strings.xml
du type de construction/construction), voyez ma réponse ici: https://stackoverflow.com/a/ 32220436/1128600
Vous pouvez utiliser strings.xml
dans différents dossiers, voir Valeurs de chaîne distinctes pour Android pour les versions Release et Debug .
Alors, créez ce fichier:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Your app name</string>
</resources>
Puis collez-le dans les dossiers app\src\debug\res\values\
et app\src\release\res\values\
. Remplacez "Le nom de votre application" dans les fichiers de débogage et de publication. Supprimez l'élément app_name
de strings.xml
dans le dossier app\src\main\res\values\
.
Dans AndroidManifest
vous aurez le même
<application
Android:label="@string/app_name"
...
Aucun changement du tout. Même si vous avez ajouté une bibliothèque avec son fichier AndroidManifest
et strings.xml
.