web-dev-qa-db-fra.com

Comment changer le nom de l'application par type de construction Gradle

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.

100
Andre Perkins

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/.

127
CommonsWare

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).

114
irscomp

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.

44

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>
24
NickUnuchek

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
12
Krylez

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>
7
HungNM2

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

3
Steffen Funke

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.

0
CoolMind