Как я могу получить доступ к значению BuildConfig в моем AndroidManifest.xml-файл?
можно ли получить доступ к значению BuildConfig из AndroidManifest.xml?
в моей сборке.gradle файл, у меня есть:
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
определяется в моем gradle.файлы свойств:
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX
чтобы использовать Facebook connect в моем приложении, я должен добавить эту строку в свой AndroidManifest.XML-код:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
Я хочу заменить @string/applicationId
по полю BuildConfig FACEBOOK_APP_ID
определяется в gradle, как это:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
это возможно с помощью BuildConfig? Если нет, то как я могу этого достичь?
6 ответов:
заменить
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
С
resValue "string", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
затем перестроить проект (Android Studio - > Build - > Rebuild Project).
обе команды генерируют генерируемые значения-состоящие из констант Java в первом случае и ресурсов Android во втором-во время сборки проекта, но второй метод будет генерировать
string
значение ресурса, к которому можно получить доступ с помощью@string/FACEBOOK_APP_ID
синтаксис. Это означает, что он может быть использован в манифесте как так же как и в коде.
другой способ доступа к значениям конфигурации сборки Gradle из вашего AndroidManifest.xml-это через заполнители, как это:
android { defaultConfig { manifestPlaceholders = [ facebookAppId:"someId..."] } productFlavors { flavor1 { } flavor2 { manifestPlaceholders = [ facebookAppId:"anotherId..." ] } } }
и затем в вашем манифесте:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${facebookAppId}"/>
смотрите дополнительную информацию здесь:https://developer.android.com/studio/build/manifest-build-variables.html
(старая ссылка только для справки: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger)
Примечание: при использовании
resValue
значение может быть случайно переопределено файлом ресурсов strings (например, для другого языка)чтобы получить истинное постоянное значение, которое можно использовать в манифесте и в java-коде, используйте оба
manifestPlaceholders
иbuildConfigField
, например:android { defaultConfig { def addConstant = {constantName, constantValue -> manifestPlaceholders += [ (constantName):constantValue] buildConfigField "String", "${constantName}", "\"${constantValue}\"" } addConstant("FACEBOOK_APP_ID", "xxxxx") }
доступ в файле манифеста:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}"/>
от java:
BuildConfig.FACEBOOK_APP_ID
доступ к сборке.gradle свойства в манифесте, как в следующем примере:
например, у вас есть свойство "applicationId" в вашей сборке.gradle и вы хотите получить доступ к этому в вашем AndroidManifest:
доступ "applicationId" в AndroidManifest:
<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="${applicationId}" /> </intent-filter> </receiver>
аналогично, мы можем создавать строковые ресурсы для других констант и обращаться к ним в файлах кода так же просто, как:
context.getString(R.string.GCM_SENDER_ID);
другой вариант: используйте другой строковый файл ресурсов для замены всех значений, зависящих от вкуса:
Шаг 1: Создайте новую папку в папке" src "с именем вашего аромата, im my case"stage"
Шаг 2: Создание файлов ресурсов для всех файлов, которые зависят от вкуса например:
Шаг 3: Я также использую разные значки, поэтому вы также видите папки mipmap. На этот вопрос, только "струнные.xml " имеет важное значение. Теперь вы можете перезаписать все важные строковые ресурсы. Вам нужно только включить те, которые вы хотите переопределить, все остальные будут использоваться в главном "строк.xml", он будет отображаться в Android Studio следующим образом:
Шаг 4: Используйте строковые ресурсы в своем проекте и расслабьтесь:
@stkent хорошо, но забывает добавить, что вам нужно перестроить свой проект после этого
заменить
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
С
resValue "string", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
затем
Android Studio -> Build -> Rebuild Project
это позволит android генерировать строковый ресурс, доступный через
R.string.FACEBOOK_APP_ID