¿Es posible declarar una variable en Gradle utilizable en Java? Básicamente, me gustaría declarar algunos vars en build.gradle y luego obtenerlos (obviamente) en el momento de la compilación. Al igual que las macros de preprocesador en C / C ++ ...
Un ejemplo de declaración sería algo así ...:
android {
debug {
A_VAR_RETRIEVABLE_IN_JAVA = 42
}
release {
A_VAR_RETRIEVABLE_IN_JAVA = 42+52
}
}
¿Hay alguna manera de hacer algo así?
java
android
gradle
android-gradle-plugin
Klefevre
fuente
fuente
<project>/src/
, si crea el archivodebug/res/values/strings.xml
y otro archivorelease/res/values/strings.xml
, también podría establecer recursos para la depuración y publicación de compilaciones de una manera un poco más limpia.android
complemento? es decir, solo usandoapply plugin java
? ¡Gracias!Un ejemplo de uso de una clave de aplicación Api en una aplicación de Android (Java y XML)
gradle.properties
build.gradle
Uso en código java
Uso en código xml
fuente
./gradlew -PAppKey="1234" testdebug
defaultConfig
bloque: stackoverflow.com/a/51521146/321354@string/APP_KEY_2
Ejemplo usando las propiedades del sistema, establecido en build.gradle, leído desde la aplicación Java (siguiendo la pregunta en los comentarios):
Básicamente, usando la
test
tarea enbuild.gradle
, con el método de tarea de pruebasystemProperty
estableciendo una propiedad del sistema que se pasa en tiempo de ejecución:Y aquí está el resto del código de muestra (que probablemente podría inferir, pero se incluye aquí de todos modos): obtiene una propiedad del sistema
MY-VAR1
, que se espera que en el tiempo de ejecución se establezca enVALUE-TEST
:Caso de prueba: si no
MY-VAR
está configurado, la prueba debería fallar:Ejecutar (nota: la prueba está pasando):
Descubrí que la parte difícil es realmente obtener la salida de gradle ... Entonces, el registro se configura aquí (slf4j + logback), y el archivo de registro muestra los resultados (alternativamente, ejecutar
gradle --info cleanTest test
; también hay propiedades que se pueden usar como estándar). la consola, pero ya sabes por qué):Si comenta "
systemProperty...
" (que, por cierto, solo funciona en unatest
tarea), entonces:Para completar, aquí está el logback config (
src/test/resources/logback-test.xml
):Archivos:
build.gradle
src/main/java/example/HelloWorld.java
src/test/java/example/HelloWorldTest.java
src/test/resources/logback-test.xml
fuente
version = '0.0.1-SNAPSHOT'
código Java?systemProperty
realmente solo tiene sentido para las pruebas, así que veo por qué lo hicieron de esta manera (no es un descuido), pero al mismo tiempo, también intenté usar gradle para cosas para las que no estaba destinado (como una aplicación DSL ) para que pueda identificarme. Como alternativa, recomendaría simplemente cargar propiedades desde un archivo de propiedades (o servicio de configuración, etc.), porque si no está en modo "prueba", entonces está en modo "producción" y requiere lógica de aplicación. (Esa es la teoría, de todos modos.)Puede crear el campo de configuración de compilación reemplazable mediante variables de entorno del sistema durante la compilación:
Fallback se usa durante el desarrollo, pero puede anular la variable cuando ejecuta la compilación en Jenkins u otra herramienta.
En su aplicación build.gradle :
La variable estará disponible como
BuildConfig.SERVER_URL
.fuente
La respuesta de rciovati es completamente correcta. Solo quería agregar un tidbit más que también puede crear variables para cada tipo de compilación dentro de la parte de configuración predeterminada de su build.gradle. Esto se vería así:
Esto le permitirá tener acceso a través de
Solo quería tomar nota de este escenario también si desea una configuración común.
fuente
Estoy usando este código y estoy trabajando muy bien.
}
fuente
¿Cómo puede insertar el resultado de la función String en buildConfigField?
Aquí hay un ejemplo de fecha de compilación en un conjunto de formatos legibles por humanos:
fuente
Estoy usando
Se basa en la respuesta de Dennis, pero la toma de una variable de entorno.
fuente
Ninguna de las respuestas anteriores me dio pautas, por lo que tuve que pasar dos horas aprendiendo sobre los métodos Groovy.
Quería poder ir en contra de un entorno de producción, sandbox y local. Como soy vago, solo quería cambiar la URL en un lugar. Esto es lo que se me ocurrió:
Sintaxis alternativa, porque solo puede usar
${variable}
comillas dobles en Groovy Methods.Lo que me resultó difícil de entender fue que las cadenas deben declararse como cadenas rodeadas de comillas. Debido a esa restricción, no pude usar la referencia
API_HOST
directamente, que era lo que quería hacer en primer lugar.fuente