¿Cómo puedo acceder a un valor BuildConfig en mi archivo AndroidManifest.xml?
¿Es posible acceder a un valor BuildConfig desde AndroidManifest.xml?
En mi archivo build.gradle, tengo:
- Cómo leer el valor de etiqueta de nodo padre XML en android
- Aplicación de estilo estrella a la casilla de verificación en Android
- XML predeterminado para la notificación de estado
- Error al buscar el estilo mapViewStyle
- Xmlns: android = "http://schemas.android.com/apk/res/android" se agrega a todos mis objetos de diseño causando errores
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
se define en mis archivos gradle.properties:
# Facebook identifier (app ID) FACEBOOK_APP_ID=XXXXXXXXXX
Para usar Facebook conecta en mi aplicación, debo agregar esta línea a mi AndroidManifest.xml:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
Quiero reemplazar @string/applicationId
por el campo BuildConfig FACEBOOK_APP_ID
definido en gradle, como esto:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
¿Es posible usar BuildConfig? Si no, ¿cómo puedo lograr esto?
- Problema de renderizado en vista previa XML: no se puede localizar el modo 0
- Alinear la vista de texto según la selección de idioma (LEFT -RIGHT)
- ¿Cómo puedo crear una vista semanal del calendario para una aplicación Android Honeycomb?
- Gradiente radial en XML con el tamaño del padre
- ¿Es posible girar un drawable en la descripción de xml?
- Cambiar el color de ScrollView mediante programación
- La adición de mi vista personalizada a un diseño XML arroja una excepción
- El segundo diseño no se muestra con la etiqueta de inclusión en el estudio de Android
Reemplazar
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
con
resValue "string", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
Luego reconstruya su proyecto (Android Studio -> Build -> Rebuild Project).
Los dos comandos producen valores generados – consistentes en constantes Java en el primer caso y recursos de Android en el segundo – durante las compilaciones del proyecto, pero el segundo método generará un valor de recurso de string
que se puede acceder mediante la sintaxis @string/FACEBOOK_APP_ID
. Esto significa que se puede utilizar en el manifiesto, así como en el código.
Otra forma de acceder a Gradle Build Config valores de su AndroidManifest.xml es a través de marcadores de posición como este:
android { defaultConfig { manifestPlaceholders = [ facebookAppId:"someId..."] } productFlavors { flavor1 { } flavor2 { manifestPlaceholders = [ facebookAppId:"anotherId..." ] } } }
Y luego en su manifiesto:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${facebookAppId}"/>
Vea más detalles aquí: https://developer.android.com/studio/build/manifest-build-variables.html
(Enlace antiguo sólo para referencia: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger )
Acceda a las propiedades build.gradle en su manifiesto como en el siguiente ejemplo:
Por ejemplo, tienes una propiedad "applicationId" en tu build.gradle y quieres acceder a ella en tu AndroidManifest:
Acceda a "applicationId" en 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>
Del mismo modo, podemos crear recursos de cadena para otras constantes y acceder a ellas en archivos de código tan simples como:
context.getString(R.string.GCM_SENDER_ID);
Otra opción: utilizar un archivo de recursos de cadena diferente para reemplazar todos los valores dependientes de Sabor:
Paso 1: Crear una nueva carpeta en la carpeta "src" con el nombre de su sabor, im mi caso "stage"
Paso 2: Crear archivos de recursos para todos los archivos que dependen del sabor por ejemplo:
Paso 3: También estoy usando iconos diferentes, así que usted ve las carpetas mipmap también. Para esta pregunta, sólo el "strings.xml" es importante. Ahora puede sobrescribir todos los recursos importantes de la cadena. Solo necesitas incluir los que quieras anular, todos los demás se usarán desde el principal "strings.xml", aparecerá en Android Studio como este:
Paso 4: Utilice los recursos de cadena en su proyecto y relájese:
Nota: cuando se utiliza resValue
el valor puede ser resValue
accidentalmente por el archivo de recursos de cadenas (por ejemplo, para otro idioma)
Para obtener un verdadero valor constante que puede utilizar en el manifiesto y en java-code, use manifestPlaceholders
y buildConfigField
: eg
android { defaultConfig { def addConstant = {constantName, constantValue -> manifestPlaceholders = [ (constantName):constantValue] buildConfigField "String", "${constantName}", "\"${constantValue}\"" } addConstant("FACEBOOK_APP_ID", "xxxxx") }
Acceso en el archivo de manifiesto:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}"/>
De java
BuildConfig.FACEBOOK_APP_ID
@stkent es bueno, pero olvida agregar que necesita reconstruir su proyecto después
Reemplazar
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
con
resValue "string", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
entonces
Android Studio -> Build -> Rebuild Project
Esto permitirá a android generar el recurso de cadena accesible vía
R.string.FACEBOOK_APP_ID
- Cómo arreglar la pantalla en blanco en la aplicación Inicio?
- Android ImageView que ajusta la altura de los padres y el ancho de ajuste