web-dev-qa-db-fra.com

Comment utiliser des saveurs avec des noms d'application différents dans Android studio?

Dans mon build.gradle au niveau de l'application, j'ai les saveurs suivantes:

productFlavors {
    originalFlavour{
    }

    freeFlavour{
    }
}

La chose est de construire les deux saveurs, j'obtiens le même nom d'application. Au lieu de cela, j'aimerais avoir des noms d'application différents pour chaque saveur. L'ajout d'un suffixe serait utile. J'espère que quelqu'un pourrait m'aider.

Merci d'avance

MODIFIER :

app/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="z.fncapps.etsiipod"  >

    <uses-permission
        Android:name="Android.permission.CALL_PHONE"
        Android:required="false" />

    <uses-feature
        Android:name="Android.hardware.telephony"
        Android:required="false"/>

    <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >

        <!-- actvities declared here -->
    </application>
</manifest>

app/src/freeFlavour/AndroidManifest.xml

<uses-permission 
    Android:name="Android.permission.CALL_PHONE"
    Android:required="false" />
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>

<uses-feature
   Android:name="Android.hardware.telephony"
   Android:required="false" />

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >

    <!-- actvities declared here -->
</application>
36
fapps

Retirer le app_name chaîne de votre strings.xml fichier, vous pouvez alors faire ceci:

productFlavors {
    originalFlavour{
        resValue "string", "app_name", "Original Flavor Name"
    }

    freeFlavour{
        resValue "string", "app_name", "Free Flavor Name"
    }
}

Ensuite, la référence existante à @string/app_name dans votre manifeste fera référence à une ressource de chaîne générée, qui est basée sur la saveur sélectionnée.

Notez que si vous spécifiez un libellé pour votre activité de lancement (en définissant le Android:label balise xml dans le <activity> element), cette valeur sera utilisée dans de nombreux endroits visibles par l'utilisateur plutôt que dans le libellé de votre application. Pour surmonter cela pour votre cas, vous pouvez simplement retirer l'étiquette de votre <activity> élément tout à fait. Voir https://stackoverflow.com/a/13200774/2911458 pour plus de détails sur cette distinction.

71
stkent

Vous pouvez utiliser une ressource de chaîne dans AndroidManifest.xml:

<application Android:label="@string/app_name">

Ensuite, utilisez des fichiers de ressources de valeurs différentes pour chaque saveur dans le dossier ../ app/src/:

../app/src/

La clé de cette solution est que vous pouvez créer des fichiers strings.xml localisés dans chaque dossier de valeurs pour chaque saveur:/res/values ​​/,/res/values-pt /,/res/values-es /, etc.

Chaque string.xml pourrait avoir le nom de l'application localisé, la valeur par défaut (/ res/values ​​/) pour Free Flavor Name pourrait être:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Free Flavor Name</string>
</resources>
23
crubio

Puisque vous avez déjà un manifeste distinct pour la saveur gratuite, pourquoi ne pas attribuer son étiquette à une valeur de ressource de chaîne différente?

Android:label="@string/free_app_name"
1
jk7