Ist es möglich, über AndroidManifest.xml auf einen BuildConfig-Wert zuzugreifen?
In meiner build.gradle-Datei habe ich:
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
ist in meinen gradle.properties-Dateien definiert:
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX
Um Facebook Connect in meiner App verwenden zu können, muss ich diese Zeile zu meiner AndroidManifest.xml hinzufügen:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
Ich möchte @string/applicationId
durch das in gradle FACEBOOK_APP_ID
definierte BuildConfig-Feld wie folgt ersetzen :
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
Ist das mit BuildConfig möglich? Wenn nicht, wie kann ich das erreichen?
<item name="facebook_app_id" type="string">15233522...</item>
Eine andere Möglichkeit, über Ihre AndroidManifest.xml auf Gradle Build Config-Werte zuzugreifen, sind Platzhalter wie die folgenden:
und dann in Ihrem Manifest:
Weitere Details finden Sie hier: https://developer.android.com/studio/build/manifest-build-variables.html
(Alter Link nur als Referenz: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger )
quelle
Hinweis: Wenn Sie verwenden
resValue
den Wert verwenden, kann er versehentlich von der String-Ressourcendatei überschrieben werden (z. B. für eine andere Sprache).Um einen echten konstanten Wert zu erhalten, den Sie im Manifest und im Java-Code verwenden können, verwenden Sie beide
manifestPlaceholders
undbuildConfigField
: zZugriff in der Manifestdatei:
von Java:
Wenn der konstante Wert buildType-spezifisch sein muss, muss der Helfer
addConstant
optimiert werden (um mit der Groovy-Closure-Semantik zu arbeiten), z.quelle
addConstant()
zweimal auf (constantNames
natürlich anders ). Welchen Fehler bekommen Sie?+=
Operator wiemanifestPlaceholders += [...]
Greifen Sie wie im folgenden Beispiel auf build.gradle-Eigenschaften in Ihrem Manifest zu:
Zum Beispiel haben Sie eine Eigenschaft "applicationId" in Ihrem build.gradle und möchten darauf in Ihrem AndroidManifest zugreifen:
Zugriff auf "applicationId" in AndroidManifest:
Ebenso können wir Zeichenfolgenressourcen für andere Konstanten erstellen und in Codedateien darauf zugreifen, so einfach wie:
quelle
@stkent ist gut, vergisst jedoch hinzuzufügen, dass Sie Ihr Projekt anschließend neu erstellen müssen
Ersetzen
mit
dann
Dadurch kann Android die Zeichenfolgenressource generieren, auf die über zugegriffen werden kann
quelle
Eine weitere Option: Verwenden Sie eine andere String-Ressourcendatei, um alle geschmacksabhängigen Werte zu ersetzen:
Schritt 1: Erstellen Sie einen neuen Ordner im Ordner "src" mit dem Namen Ihres Geschmacks, in meinem Fall "Bühne"
Schritt 2: Erstellen Sie Ressourcendateien für alle Dateien, die von der Variante abhängig sind, zum Beispiel:
Schritt 3: Ich verwende auch verschiedene Symbole, sodass Sie auch die Mipmap-Ordner sehen. Für diese Löschung ist nur die "strings.xml" wichtig. Jetzt können Sie alle wichtigen Zeichenfolgenressourcen überschreiben. Sie müssen nur diejenigen einschließen, die Sie überschreiben möchten. Alle anderen werden aus der Hauptdatei "strings.xml" verwendet. Sie wird in Android Studio folgendermaßen angezeigt:
Schritt 4: Verwenden Sie die Zeichenfolgenressourcen in Ihrem Projekt und entspannen Sie sich:
quelle
Sie können den folgenden langen Wert verwenden
buildConfigField 'long', 'FLAVOR_LONG', '11500L'
quelle