Archivo de construcción de Android Gradle con Time Stamp corriendo versión de ayer

A continuación tengo mi archivo de compilación para Gradle. Problema. Corre el APK de ayer en lugar del de hoy. Causa principal. Puse dinámicamente la fecha en el nombre de apks – para compilaciones de depuración.

Cuando ejecuto la aplicación ve el viejo APK y ve que coincide con lo que Gradle está esperando, ya que Gradle no ha actualizado y notado el cambio de fecha.

Necesito forzar gradle para actualizar cada carrera.

buildTypes { debug { debuggable true minifyEnabled false proguardFiles 'proguard-rules.pro' applicationVariants.all { variant -> variant.outputs.each { output -> def formattedDate = new Date().format('yyyyMMdd') def newName = output.outputFile.name newName = newName.replace("app-", "myappname-") //"MyAppName" -> I set my app variables in the root project newName = newName.replace("-release", "-" + versionName + "-" + formattedDate + "-r") newName = newName.replace("-debug", "-" + versionName + "-" + formattedDate + "-d") output.outputFile = new File(output.outputFile.parent, newName) } } } } 

Opciones de la línea de comandos

Aunque algunas otras opciones podrían funcionar, ¿has probado el

 --recompile-scripts 

Obliga a recompilar las secuencias de comandos, evitando el almacenamiento en caché.

Opción de línea de comandos ? Otra alternativa sería --rerun-tasks , pero que podría ser excesivo.

Opción de código: upToDateWhen

Echa un vistazo a Restaurar la propiedad UP-TO-DATE de las tareas de gradle? . Setting upToDateWhen {false} puede hacer el truco. Intente lo siguiente en su lugar:

  applicationVariants.all { variant -> variant.outputs.upToDateWhen {false} variant.setOnlyIf { true } variant.outputs.each { output -> def formattedDate = new Date().format('yyyyMMdd') def newName = output.outputFile.name newName = newName.replace("app-", "myappname-") //"MyAppName" -> I set my app variables in the root project newName = newName.replace("-release", "-" + versionName + "-" + formattedDate + "-r") newName = newName.replace("-debug", "-" + versionName + "-" + formattedDate + "-d") output.outputFile = new File(output.outputFile.parent, newName) } } 

Puede crear tal tarea, por ejemplo, para cada sabor y tipo de construcción (installDebug, intallRelease) si no hay sabores, y ejecutarlo en lugar de la configuración predeterminada Ejecutar. Pero, a continuación, debe adjuntar manualmente a depuración y, tal vez, tendrá algunos otros problemas. Tal vez hay alguna capacidad para generar estas tareas automáticamente para cada sabor / tipo de construcción.

Script desde aquí: https://stackoverflow.com/a/21992166/4069913

 task appStart(type: Exec, dependsOn: 'install$Flavor$Build') { // linux commandLine 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MainActivity' // windows // commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MainActivity' } 
  • Gradle y dependencias no transitivas anidadas
  • Gradle - Inesperada excepción de nivel superior - De la nada
  • Problema de actualización en la versión de herramientas de compilación de gradle de 1.2.3 a 1.3.1
  • Android Studio: Volver a cargar dependencias y sincronizar el proyecto
  • Error: Error de ejecución para la tarea ': ProjectName: mergeDebugResources'. > Crunching Cruncher * algunos archivos * fallaron, ver registros
  • build.gradle en el proyecto vs. build.gradle en la aplicación
  • ¿Cómo excluir la carpeta res de los desarrolladores de gradle build?
  • Gradle versión 1.10 es necesario. La versión actual es 2.2.1. En android
  • Actualización de Android Studio -Error: No se pudo ejecutar la acción de compilación mediante la distribución de Gradle
  • Después de la actualización gradle a 2.10, no se puede ejecutar la aplicación
  • Múltiples aplicaciones de Android dependiendo de la biblioteca de Android con gradle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.