Cómo definir y utilizar una constante en el script de compilación de Gradle (Android)?
Estoy trabajando en una aplicación de Android con Gradle como su sistema de construcción.
Mi objetivo es usar un valor (un nombre de paquete) como un applicationId
:
- En Android Gradle build.gradle ¿Qué es "it" en it.buildConfigField?
- Depuración de archivos de compilación de Gradle en Intellij / Android Studio
- Gradle Advertencia: falta declaración groovy devolución
- SignedConfigs me da un error de Lint en build.gradle después de actualizar a v22
- Grails C2DM - Android
productFlavors { orange { applicationId "com.fruits.android.orange" // ...
Pero también para exponerlo a través de BuildConfig
para que el código Java tenga acceso a él.
Este acceso tiene que ser de fuera del sabor (es decir, la versión gratuita de la aplicación necesita saber el nombre del paquete de la versión de pago para que pueda solicitar al usuario una actualización en Play Store).
Así que me gustaría hacer algo así:
productFlavors { orange { applicationId orangeProPackage // ... buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ?
Sólo que no estoy seguro de cómo definir orangeProPackage
para que sea visible en todo el build.gradle y no rompe el script.
Dado que hay algunos sabores diferentes, sería mejor si pudiera de alguna manera agrupar todas estas constantes como que (supongo?):
def proPackages = [ orange: "..." apple: "..." banana: "..." ]
Y luego se refieren a ellos de una manera limpia y descriptiva como proPackages.orange
etc
La pregunta es, ¿cómo lograrlo?
Esto no es un duplicado de ¿Es posible declarar una variable en Gradle utilizable en Java?
He visto esa pregunta (y algunos otros). Sé cómo declarar buildConfigFields, ya tengo mucho. Mi pregunta es acerca de reutilizar el mismo valor que un buildConfigField
y applicationId
.
- Utilizar JSON para crear un objeto en Groovy / Grails
- Resolver Etiqueta de aplicación para cada tipo de compilación
- Sabores de productos dependencia Android de Gradle
- Prueba de una biblioteca de Android con Robolectric
- Es groovy un lenguaje de desarrollo potencial para Android
- Agregue dependencia de tareas a la tarea de complemento existente en Gradle?
- Gradle define el valor de la ruta absoluta para un archivo de almacén de claves
- Ejecución de scripts de Groovy incrustados en Java en tiempo de ejecución para Android
Sólo que no estoy seguro de cómo definir orangeProPackage para que sea visible en todo el build.gradle y no rompe el script.
Usted podría ponerlo en gradle.properties
en su raíz del proyecto. Al igual que otros archivos .properties
, es sólo un almacén de valores clave:
ORANGE_PRO_PACKAGE=com.morawski.awesomeapp
A continuación, se refiere a él como una variable de cadena global simple ( ORANGE_PRO_PACKAGE
) en su build.gradle
:
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', ORANGE_PRO_PACKAGE
Sería mejor si pudiera de alguna manera agrupar todas estas constantes
Cualquier cosa que involucre archivos .properties
no manejará eso. Allí, puede estar buscando definir globales en el archivo build.gradle
nivel build.gradle
sólo en código Groovy normal o algo así.