java - intellij - gradlew assembledebug
detección de la configuración de compilación(depuración o versión) dentro de script ant (4)
Tengo un script ant que hace lo que necesita hacer, pero necesito establecer algunos valores de propiedad en función de si estoy ejecutando release o debug. ¿Cómo hago esto?
Si hace una diferencia, mi script de hormiga ejecuta algunas tareas de utilidad personalizadas antes de realizar la compilación de Android.
Para responder mi propia pregunta:
Las propiedades a buscar son " build.mode.release " y " build.mode.debug ", sin embargo, hay una advertencia ... si su manifiesto tiene debuggable = "true" , el sistema REVERTIRÁ al modo de depuración con un ligero " short-coming ''(IMO)
- build.mode.release NO está establecido ,
- build.mode.debug tampoco está configurado
- La firma de depuración está desactivada (debe proporcionar un almacén de claves, alias y contraseña)
Nota: Esto se aplica solo a las compilaciones de Android
ant -D<prop-name>=<value>
establecerá la propiedad en hormiga
El motivo de la "advertencia" está realmente documentado en el proyecto de Android main_rules.xml
( $ANDROID_SDK_ROOT/tools/ant/main_rules.xml
):
<target name="-set-release-mode">
<!-- release mode is only valid if the manifest does not explicitly
set debuggable to true. default is false.
We actually store build.packaging.debug, not build.release -->
<xpath input="AndroidManifest.xml" expression="/manifest/application/@android:debuggable"
output="build.packaging.debug" default="false"/>
...
</target>
Entonces, lo que quiere verificar es build.mode.debug
(ejecutado a través de ant debug
), build.mode.release
(cuando @debuggable=false
y ejecutado con la ant release
), y finalmente para cumplir con su advertencia: build.packaging.debug
(cuando @debuggable=true
y ejecutado con ant release
)
Aquí hay un ejemplo que funcionaría precompilar automáticamente:
<target name="-my-debug-precompile" if="build.mode.debug">
<!-- This is executed for any "debug" build ("ant debug") -->
</target>
<target name="-my-release-precompile" unless="build.mode.debug">
<!-- This is executed for any non-"debug" build (e.g., "ant release",
regardless of the @debuggable attribute in AndroidManifest.xml) -->
</target>
<!-- This is called automatically by Android''s ant tasks, and delegates the
task to one of the above two targets: -->
<target name="-pre-compile" depends="-my-debug-precompile,-my-release-precompile" />
Como una actualización de la respuesta de Joe, parece que, al menos con la revisión 22.3 de Herramientas de Android, la propiedad build.mode.debug ya no existe, pero puede usar build.is.packaging.debug para diferenciar entre depuración y publicación
alma final para el módulo de depuración y jni de hormiga:
1. en custom_rules.xml, asigne el modo de depuración a ''BUILDMODE''
<?xml version="1.0" encoding="UTF-8"?>
<project>
<property name="out.library.jar.file" location="bin/classes.jar" />
<target name="-pre-compile">
<exec executable="ndk-build">
<arg value="BUILDMODE=${build.is.packaging.debug}" />
</exec>
</target>
</project>
- jni / Android.mk, agregue lo siguiente:
ifeq ($ (BUILDMODE), verdadero)
LOCAL_CFLAGS=-DDEBUG
terminara si