android - 使用 Android Gradle 插件编译前运行任务

标签 android gradle android-build

我有一个非常简单的 build.gradle 文件,内容如下:

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()
    }
}

我想要的是在 java 编译开始之前运行 generateSources 任务。我找到了几种解决方案,例如 compileJava.dependsOn("generateSources"),但不幸的是它们给出了错误:

A problem occurred evaluating root project 'Android'.
> Could not find property 'compileJava' on root project 'Android'.

我不了解 Gradle,也无法理解这段代码有什么问题。所以我想知道如何解决这个错误。

最佳答案

显然,android 插件不会添加 compileJava 任务(就像 java 插件那样)。您可以使用 gradle tasks --all 检查哪些任务可用,并为您的(否则正确的)依赖项声明选择正确的任务。

编辑:

显然,android 插件延迟了任务的创建,因此不能像往常一样急切地访问它们。解决此问题的一种方法是将访问推迟到配置阶段结束:

gradle.projectsEvaluated {
    compileJava.dependsOn(generateSources)
}

可能有一种更惯用的方法来解决您的用例,但请快速浏览 Android plugin docs我找不到。

关于android - 使用 Android Gradle 插件编译前运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16853130/

相关文章:

android - 如何将 Gradle 依赖项更新到最新版本

android - 使用 eclipse 在 Android 中快速构建

java - Android AutoCompleteTextView,如何将建议链接到xml?

android - Cordova 错误仅适用于 Android : com. android.dex.DexException:多个 dex 文件定义 Landroid/support/annotation/AnimRes;

macos - 在Macbook上运行Gradle

android - 错误 : Program type already present: androidx. 核心.R

android - 在 G. Maps v2 中使用动画 Gif 作为地面叠加层

android - 在sdcard中创建数据库

gradle - 使用grunt和gradle配置jshint

java - 我仍然可以将 eclipse 用于 android 项目吗?