¿Es posible acceder a un valor BuildConfig desde AndroidManifest.xml?
En mi archivo build.gradle, tengo:
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 connect 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 este:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
¿Es eso posible usando BuildConfig? Si no, ¿cómo puedo lograr esto?
<item name="facebook_app_id" type="string">15233522...</item>
Otra forma de acceder a los valores de configuración de Gradle Build desde su AndroidManifest.xml es a través de marcadores de posición como este:
y luego en tu manifiesto:
Ver más detalles aquí: https://developer.android.com/studio/build/manifest-build-variables.html
(Enlace anterior solo como referencia: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger )
fuente
nota: cuando usa
resValue
el valor, el archivo de recursos de cadenas puede anularlo accidentalmente (por ejemplo, para otro idioma)Para obtener un verdadero valor constante que pueda usar en el manifiesto y en el código java, use ambos
manifestPlaceholders
ybuildConfigField
: por ejemploacceso en el archivo de manifiesto:
de java:
Si el valor constante debe ser específico de buildType, el asistente
addConstant
debe modificarse (para trabajar con una semántica de cierre excelente), por ejemplo,fuente
addConstant()
dos veces (con diferente,constantNames
por supuesto). ¿Qué error obtienes?+=
operador de esta maneramanifestPlaceholders += [...]
Acceda a las propiedades build.gradle en su manifiesto como en el siguiente ejemplo:
Por ejemplo, tiene una propiedad "applicationId" en su build.gradle y desea acceder a ella en su AndroidManifest:
Acceda a "applicationId" en AndroidManifest:
Del mismo modo, podemos crear recursos de cadena para otras constantes y acceder a ellos en archivos de código tan simples como:
fuente
@stkent es bueno pero olvida agregar que necesita reconstruir su proyecto después
Reemplazar
con
luego
Esto permitirá que Android genere el recurso de cadena accesible a través de
fuente
Otra opción: usar un archivo de recursos de cadena diferente para reemplazar todos los valores dependientes de Flavor:
Paso 1: Crea una nueva carpeta en la carpeta "src" con el nombre de tu sabor, en mi caso, "etapa"
Paso 2: cree archivos de recursos para todos los archivos que dependen del sabor, por ejemplo:
Paso 3: También estoy usando diferentes íconos, así que también puedes ver las carpetas de mipmap. Para esta consulta, solo es importante el "strings.xml". Ahora puede sobrescribir todos los recursos de cadena importantes. Solo necesita incluir los que desea anular, todos los demás se utilizarán desde el "strings.xml" principal, se mostrará en Android Studio de esta manera:
Paso 4: usa los recursos de cadena en tu proyecto y relájate:
fuente
Puede usar el valor largo como se muestra a continuación
buildConfigField 'long', 'FLAVOR_LONG', '11500L'
fuente