Est-il possible d'accéder à une valeur BuildConfig depuis AndroidManifest.xml?
Dans mon fichier build.gradle, j'ai:
defaultConfig {
applicationId "com.compagny.product"
minSdkVersion 16
targetSdkVersion 21
versionCode 1
versionName "1.0"
// Facebook app id
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
}
FACEBOOK_APP_ID
est défini dans mes fichiers gradle.properties:
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX
Pour utiliser Facebook connect dans mon application, je dois ajouter cette ligne à mon AndroidManifest.xml:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
Je veux remplacer @string/applicationId
par le champ BuildConfig FACEBOOK_APP_ID
défini dans gradle, comme ceci:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
Est-ce possible avec BuildConfig? Sinon, comment puis-je y parvenir?
<item name="facebook_app_id" type="string">15233522...</item>
Un autre moyen d'accéder aux valeurs Gradle Build Config à partir de votre AndroidManifest.xml consiste à utiliser des espaces réservés comme celui-ci:
puis dans votre manifeste:
Voir plus de détails ici: https://developer.android.com/studio/build/manifest-build-variables.html
(Ancien lien juste pour référence: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger )
la source
Remarque: lorsque vous utilisez
resValue
la valeur peut être accidentellement écrasée par le fichier de ressources de chaînes (par exemple pour une autre langue)Pour obtenir une vraie valeur constante que vous pouvez utiliser dans le manifeste et dans le code java, utilisez à la fois
manifestPlaceholders
etbuildConfigField
: par exempleaccès dans le fichier manifeste:
de java:
Si la valeur de la constante doit être spécifique à buildType, l'assistant
addConstant
doit être modifié (pour travailler avec la sémantique de fermeture groovy), par exemple,la source
addConstant()
deux fois (avec différentesconstantNames
bien sûr). Quelle erreur obtenez-vous?+=
opérateur comme celui-cimanifestPlaceholders += [...]
Accédez aux propriétés build.gradle dans votre manifeste comme dans l'exemple suivant:
Par exemple, vous avez une propriété "applicationId" dans votre build.gradle et vous souhaitez y accéder dans votre AndroidManifest:
Accédez à "applicationId" dans AndroidManifest:
De même, nous pouvons créer des ressources de chaîne pour d'autres constantes et y accéder dans des fichiers de code aussi simples que:
la source
@stkent c'est bien mais oublie d'ajouter que vous devez reconstruire votre projet par la suite
Remplacer
avec
puis
Cela permettra à Android de générer la ressource de chaîne accessible via
la source
Une autre option: utilisez un fichier de ressources de chaîne différent pour remplacer toutes les valeurs dépendant de la saveur:
Étape 1: Créez un nouveau dossier dans le dossier "src" avec le nom de votre saveur, dans mon cas "stage"
Étape 2: Créez des fichiers de ressources pour tous les fichiers qui dépendent de la saveur, par exemple:
Étape 3: J'utilise également différentes icônes, donc vous voyez également les dossiers mipmap. Pour cette question, seul le "strings.xml" est important. Vous pouvez maintenant écraser toutes les ressources de chaîne importantes. Il vous suffit d'inclure ceux que vous souhaitez remplacer, tous les autres seront utilisés à partir du "strings.xml" principal, ils s'afficheront dans Android Studio comme ceci:
Étape 4: Utilisez les ressources de chaîne dans votre projet et détendez-vous:
la source
Vous pouvez utiliser une valeur longue comme ci-dessous
buildConfigField 'long', 'FLAVOR_LONG', '11500L'
la source