Czy jest możliwy dostęp do wartości BuildConfig z AndroidManifest.xml?
W moim pliku build.gradle mam:
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
jest zdefiniowany w moich plikach gradle.properties:
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX
Aby korzystać z połączenia z Facebookiem w mojej aplikacji, muszę dodać ten wiersz do mojego pliku AndroidManifest.xml:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
Chcę zamienić @string/applicationId
na pole BuildConfig FACEBOOK_APP_ID
zdefiniowane w gradle, na przykład:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
Czy jest to możliwe przy użyciu BuildConfig? Jeśli nie, jak mogę to osiągnąć?
<item name="facebook_app_id" type="string">15233522...</item>
Innym sposobem uzyskania dostępu do wartości konfiguracji Gradle Build Config z pliku AndroidManifest.xml jest użycie takich symboli zastępczych:
a potem w swoim manifeście:
Zobacz więcej szczegółów tutaj: https://developer.android.com/studio/build/manifest-build-variables.html
(Stary link tylko w celach informacyjnych: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger )
źródło
uwaga: kiedy używasz
resValue
wartość może zostać przypadkowo nadpisana przez plik zasobów stringów (np. dla innego języka)Aby uzyskać prawdziwą stałą wartość, której możesz użyć w manifeście i kodzie java, użyj obu
manifestPlaceholders
ibuildConfigField
: npdostęp w pliku manifestu:
z java:
Jeśli stała wartość musi być specyficzna dla buildType, pomocnik
addConstant
musi zostać zmodyfikowany (aby pracować z semantyką zamknięcia groovy), np.źródło
addConstant()
dwa razy (constantNames
oczywiście z różnymi ). Jaki błąd otrzymujesz?+=
operatoramanifestPlaceholders += [...]
Uzyskaj dostęp do właściwości build.gradle w swoim manifeście, jak w poniższym przykładzie:
Na przykład masz właściwość „applicationId” w pliku build.gradle i chcesz uzyskać do niej dostęp w swoim AndroidManifest:
Otwórz „applicationId” w AndroidManifest:
Podobnie możemy tworzyć zasoby ciągów dla innych stałych i uzyskiwać do nich dostęp w plikach kodu tak prostych jak:
źródło
@stkent jest dobry, ale zapomina dodać, że później musisz odbudować swój projekt
Zastąpić
z
następnie
Umożliwi to systemowi Android wygenerowanie zasobu ciągu dostępnego za pośrednictwem
źródło
Inna opcja: użyj innego pliku zasobów ciągu, aby zastąpić wszystkie wartości zależne od smaku:
Krok 1: Utwórz nowy folder w folderze „src” z nazwą swojego smaku, w moim przypadku „stage”
Krok 2: Utwórz pliki zasobów dla wszystkich plików zależnych od smaku, na przykład:
Krok 3: Używam również różnych ikon, więc widzisz również foldery mipmap. W przypadku tego zapytania ważny jest tylko plik „strings.xml”. Teraz możesz nadpisać wszystkie ważne zasoby ciągów. Musisz tylko dołączyć te, które chcesz przesłonić, wszystkie inne zostaną użyte z głównego pliku „strings.xml”, pojawi się w Android Studio w następujący sposób:
Krok 4: Wykorzystaj zasoby tekstowe w swoim projekcie i zrelaksuj się:
źródło
Możesz użyć długiej wartości, jak poniżej
buildConfigField „long”, „FLAVOR_LONG”, „11500L”
źródło