Как я могу получить доступ к значению 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 94

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:

enter image description here

доступ "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: Создание файлов ресурсов для всех файлов, которые зависят от вкуса например:

enter image description here

Шаг 3: Я также использую разные значки, поэтому вы также видите папки mipmap. На этот вопрос, только "струнные.xml " имеет важное значение. Теперь вы можете перезаписать все важные строковые ресурсы. Вам нужно только включить те, которые вы хотите переопределить, все остальные будут использоваться в главном "строк.xml", он будет отображаться в Android Studio следующим образом:

enter image description here

Шаг 4: Используйте строковые ресурсы в своем проекте и расслабьтесь:

enter image description here

@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