Ejecute la tarea antes de la compilación mediante el complemento Android Gradle
Tengo un archivo build.gradle
muy simple con el siguiente contenido:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4.1' } } apply plugin: 'android' android { buildToolsVersion "17.0.0" compileSdkVersion 17 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } } task generateSources { doFirst { def script = "python GenerateSources.py".execute() script.in.eachLine {line -> println line} script.err.eachLine {line -> println "ERROR: " + line} script.waitFor() } }
Lo que quiero es ejecutar la tarea generateSources
antes de iniciar la compilación de java. He encontrado varias soluciones de cómo hacerlo, como compileJava.dependsOn("generateSources")
, pero lamentablemente dan un error:
- No se puede resolver el símbolo 'AppCompatActivity'
- Dependencias de Gradle: compilar el proyecto por ruta relativa
- Variantes de construcción de Android en travis.ci
- Gradle: ¿cómo hacer que las tareas se ejecuten una tras otra?
- Error de Gradle después de incluir facebook sdk
A problem occurred evaluating root project 'Android'. > Could not find property 'compileJava' on root project 'Android'.
No sé Gradle y no puedo entender lo que está mal con este código. Así que me gustaría saber cómo puedo solucionar este error.
- Android Studio 0.5.0 reconstrucción no funciona con Proguard
- ¿Puede un AAR incluir dependencias transitivas?
- Android Studio Emulator Error - terminado con un valor de salida diferente de cero 2
- El complemento de Android Studio es demasiado antiguo
- Android Studio - Todos los nombres de archivo en el proyecto son de color rojo, pero no hay errores
- Exportar un proyecto eclipse como gradle
- Crashlytics desarrollador error de herramientas al construir android -grado proyecto
- Construir proyecto con Gradle 2.2.1 y Android Studio 1.2.2
Aparentemente, el complemento de android
no agrega una tarea de compileJava
java
(como el plugin de java
). Puede comprobar qué tareas están disponibles con gradle tasks --all
, y elegir la correcta para su declaración de dependencia (de lo contrario correcta).
EDITAR:
Al parecer, el plugin de android
difiere la creación de tareas de tal manera que no se puede acceder con impaciencia como de costumbre. Una forma de superar este problema es aplazar el acceso hasta el final de la fase de configuración :
gradle.projectsEvaluated { compileJava.dependsOn(generateSources) }
Lo más probable es que hay una forma más idiomática de resolver su caso de uso, pero rápidamente la navegación de los documentos de complemento de Android no pude encontrar uno.
La forma correcta de ejecutar una tarea antes de la compilación de Java en Android es hacer que una tarea de compilación para cada variante dependa de su tarea.
afterEvaluate { android.applicationVariants.all { variant -> variant.javaCompiler.dependsOn(generateSources) } }
Puede ver la ejecución de la tarea en la tarea de ejecución de terminal, por ejemplo, gradle assemble
. Prueba este, se inicia prácticamente antes de nada.
gradle.projectsEvaluated { preBuild.dependsOn(generateSources) }
Editar , esto puede no funcionar en Android Studio, ya que el Android Gradle DSL no tiene un método projectsEvaluated
.
Prueba esto:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4.1' } } apply plugin: 'android' android { buildToolsVersion "17.0.0" compileSdkVersion 17 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } } task generateSources { def script = "python GenerateSources.py".execute() script.in.eachLine {line -> println line} script.err.eachLine {line -> println "ERROR: " + line} script.waitFor() } project.afterEvaluate { preBuild.dependsOn generateSources } clean.dependsOn generateSources clean.mustRunAfter generateSources
Las dos últimas líneas son opcionales: invocarán la tarea "generateSources" al ejecutar un gradle clean
- Cómo configurar el efecto Ripple en un LinearLayout mediante programación?
- No se pudo encontrar el método android () para los argumentos al crear un proyecto de Android desde gradle