Android Gradle remplacer le nom de Package d'une valeur de manifeste
Je suis à l'aide de Gradle avec les Produits de saveurs où j'ai mis un autre nom pour chacun d'eux.
productFlavors {
appone {
packageName "com.dg.app1"
}
apptwo {
packageName "com.dg.app2"
}
appthree {
packageName "com.dg.app3"
}
appfour {
packageName "com.dg.app4"
}
}
J'ai besoin d'être en mesure de remplacer le nom du paquet à l'intérieur du manifeste pour chaque application.
Mon manifeste a ceci:
<receiver android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.dg.example" />
</intent-filter>
</receiver>
J'ai donc besoin de remplacer com.la dg.exemple pour chaque application de la saveur du nom du package. Quelle est la meilleure façon de le faire?
- Je ne sais pas de toute façon de "remplacer" le nom du package dans le manifeste au moment de la construction. Mais ce que sur l'obtention d'un fichier AndroidManifest pour chaque saveur ?
- Je considérais que c'est mais je vais avoir à coder en dur le nom du package de partout, ça sera mon deuxième choix si je ne peux pas trouver un moyen de lire le nom du package à partir de construire.gradle.
Vous devez vous connecter pour publier un commentaire.
Plugin Gradle v0.12 et plus:
Utilisation
${applicationId}
au lieu de${packageName}
.Plugin Gradle v0.11 et plus:
De v0.11, vous n'avez plus besoin de spécifier de ne pas utiliser la vieille manifeste de fusion.
Plugin Gradle v0.10 et plus:
En supposant que vous êtes à l'aide de la version 0.10 ou supérieur, c'est maintenant officiellement pris en charge:
De v0.10, vous aurez également à activer manuellement la nouvelle manifeste de la fusion, même si je m'attends à cette exigence d'aller loin dans une version ou deux chaque fois que la nouvelle de la fusion devient la valeur par défaut:
Ensuite, il suffit d'utiliser
${packageName}
n'importe où dansAndroidManifest.xml
que vous le feriez normalement coder en dur le nom du package. Par exemple:deviendrait
<category android:name="${packageName}"/>
Plugin Gradle v0.9 et ci-dessous:
Donc, référencement ce post, il apparaît que ce n'est pas encore officiellement supporté par le biais de Gradle. Une solution simple est la suivante:
<category android:name="my.package.name"/>
devient<category android:name="_PACKAGENAME_"/>
build.gradle
, en vertu de laandroid
portée:<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="${packageName}.MainActivity"/>
mais ça ne fonctionne pas.<manifest package="xxx"
) et de ne pas l'id de l'application..MainActivity
et il va s'auto-préfixe le nom du package..MainActivity
n'a pas fonctionné.Faire quelque chose comme cela, j'utilise buildTypes dans mon gradle fichier, mais je suis sûr que cela va fonctionner avec les saveurs ainsi. Pour moi, je suis en train de mettre l'étiquette de champ dans les activités.
J'ai une des chaînes de fichier xml pour chacun de mes buildTypes.
Ensuite, j'ai un sourceSet pour chaque buildType qui comprend le bon fichier de chaînes.
Ensuite, dans le manifeste, je n'utilise pas une chaîne codée en dur, mais plutôt "@string/ma_var" qui va tirer la chaîne correcte en fonction de la façon dont le sourceSets sont définis.
Ce google+ post et liées gist peut aider.
Quelque chose d'autre à faire est de mettre un AndroidManifest.xml fichier dans le répertoire src/saveur qui ne contient que les bits qui sont pertinents pour chaque saveur. Puis prendre les bits de le principal fichier de manifeste. Au moment de la construction du Manifeste fichiers seront fusionnés en un seul fichier. Vous pouvez voir le résultat issu de la fusion se manifeste de construire/se manifeste.
J'ai eu le même problème et mis en place un espace réservé remplacement de la méthode de Gradle. C'est exactement ce que vous attendez, mais aussi prend en charge environ
packageNameSuffix
attributs de sorte que vous pouvez avoirdebug
etrelease
ainsi que toute autre coutume construit sur le même appareil.Je l'ai sur un
résumé
trop si vous voulez voir si elle évolue plus tard.J'ai trouvé pour être un plus élégant que les multiples ressources et d'analyse XML approches.
Option Gradle:
Utiliser grade attributs API. Quelque chose comme ceci
Option 1
Comment convertir votre projet pour Android - projet de bibliothèque, et de faire des supplémentaires de projet pour chaque entreprise. Que vous pouvez modifier la
Manifest
fichier comme vous le souhaitez.Option 2
Écrire un fichier de commandes.