es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Groovy/build.gradle: Obtener si es Depuración o Versión final

Estoy buscando una forma sencilla de averiguar si una aplicación de Android se está construyendo en modo Depuración o en modo Lanzamiento dentro de mi script “build.gradle” de una biblioteca (en una tarea).

Tengo una tarea llamada “prepareHermes” que extrae un archivo .aar. Actualmente extraigo siempre la variante de depuración, pero en compilaciones de Lanzamiento quiero utilizar la variante de lanzamiento:

  tarea prepareHermes() {
    realizar después {
      def ES_DEPURACIÓN = // TODO: aquí
      def nombreAAR = ES_DEPURACIÓN ? "hermes-debug.aar" : "hermes-release.aar"
      def hermesAAR = archivo("$rutaPaqueteHermes/android/${nombreAAR}")

  if (!hermesAAR.existe()) {
    lanzar nueva GradleScriptException("El paquete npm de hermes-engine está ausente 'android/${nombreAAR}'", null)
  }

  def archivosSo = zipTree(hermesAAR).matching({ it.include " **/*.so" })

  copiar {
    desde archivosSo
    desde "$reactNative/ReactAndroid/src/main/jni/first-party/hermes/Android.mk"
    hacia "$directorioNdkTerceros/hermes"
  }
}

}

Esta tarea se utiliza posteriormente en varios lugares (ver código completo aquí), por lo que hacer dos tareas separadas (prepareHermesDebug y prepareHermesRelease) es un poco incómodo, ya que tendría mucho código duplicado. (Esta tarea es una dependencia para algunas otras tareas, como se muestra en el código completo).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para averiguar si una aplicación de Android se está compilando en modo Depuración o Lanzamiento dentro del script build.gradle de una biblioteca, puedes utilizar la propiedad gradle.startParameter.taskNames para comprobar si la compilación actual incluye la tarea assembleDebug. Si es así, entonces la aplicación se está compilando en modo Depuración, de lo contrario se está compilando en modo Lanzamiento. Puedes modificar tu tarea prepareHermes para utilizar esta información de la siguiente manera:

    tarea prepareHermes() {
        doLast {
            def isDebug = gradle.startParameter.taskNames.any {
                it.toLowerCase().contains("debug")
            }
    
            def aarName = isDebug ? "hermes-debug.aar" : "hermes-release.aar"
            def hermesAAR = file("$hermesPackagePath/android/${aarName}")
    
            if (!hermesAAR.exists()) {
                throw new GradleScriptException("El paquete npm hermes-engine no tiene \"android/${aarName}\"", null)
            }
    
            def soFiles = zipTree(hermesAAR).matching({ it.include "**/*.so" })
    
            copy {
                from soFiles
                from "$reactNative/ReactAndroid/src/main/jni/first-party/hermes/Android.mk"
                into "$thirdPartyNdkDir/hermes"
            }
        }
    }
    

    Esto comprobará si la compilación actual incluye la tarea assembleDebug y establecerá la variable isDebug en consecuencia. Luego, utilizará esta información para elegir el archivo .aar correcto para extraer.

Comments are closed.