当前位置: 首页 > 知识库问答 >
问题:

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

督嘉言
2023-03-14

我有一个非常简单的构建。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,也不明白这个代码出了什么问题。所以我想知道如何修复这个错误。

共有3个答案

斜宁
2023-03-14

您可以在终端运行任务中看到任务执行,例如gradle assemble。试试这个,它实际上比任何东西都要早。

android {
    ...
    gradle.projectsEvaluated {
         preBuild.dependsOn(generateSources)
    }
    ...
}

编辑,这可能在Android Studio中不起作用,因为Android Gradle DSL没有项目评估方法

花博厚
2023-03-14

在Android上编译Java之前运行任务的正确方法是使每个变体的编译任务取决于您的任务。

afterEvaluate {
  android.applicationVariants.all { variant ->
    variant.javaCompiler.dependsOn(generateSources)
  }
}
濮阳景天
2023-03-14

显然,android插件并没有添加compileJava任务(就像java插件一样)。您可以检查哪些任务可以与gradle tasks(all)一起使用,并为您的(否则是正确的)依赖关系声明选择正确的任务。

编辑:

显然,android插件以无法像往常一样急切访问的方式推迟任务的创建。克服这个问题的一种方法是将访问推迟到配置阶段结束:

gradle.projectsEvaluated {
    compileJava.dependsOn(generateSources)
}

很可能有一种更惯用的方法来解决您的用例,但快速浏览Android插件文档时我找不到。

 类似资料:
  • 我想通过Gradle运行脚本来运行任务,在编译之前运行所有任务,以自动生成运行Android应用程序的工件。 任务: 我想运行一个<代码>。cmd生成工件的文件 将生成的工件复制到Android资产文件夹 这是build.gradle模块: 因此,我想在

  • 所以我试着在https://grpc.io/docs/tutorials/basic/java.html#generating-客户端和服务器代码,但我在使用grpc插件和protoc编译器进行编译时遇到问题。我已经设置了pom。xml与插件(我认为)正确结合,但编译器不会生成指南所需的文件(即RouteGuideGrpc.java)。 我目前正在编译。使用“mvn protobuf:编译”的pr

  • 我的gradle项目中有一个java主程序,我可以通过命令行使用gradle应用程序插件运行任务--args param new从gradle 4.9开始运行,如下所示: 我想在IntelliJ IDEA CE 2018.1中为同样的配置创建一个运行配置。 我在Run/Debug配置dilog中将任务字段指定为 当我运行这个运行配置时,我得到一个错误: 如何通过运行配置使此工作?

  • 1. YodaOS Universal 如何配置系统和应用 1.1. 目录 1.1.1. 一.YODAOS完整体验 1.1.2. 定制系统和应用 1.1. 目录 YODAOS 完整体验 如何定制化系统和应用 1.1.1. 一.YODAOS完整体验 下载代码 Yodaos使用git作为源代码管理工具,用Repo 命令行工具管理多个git代码仓库,下载代码时需要用户注册成为Rokid 平台开发者。 注

  • 问题内容: 我有一个文件和。 当我进行调试构建时,我得到: 如何将添加到基础任务?关于Java编译选项的Gradle插件用户指南无济于事。 问题答案: 我根据有关操作任务的Gradle插件用户指南和有关JavaCompile的Gradle DSL文档 找到了以下解决方案: 添加到: 应用程序变体在Gradle的配置阶段,所需的任务也不存在,因此我在执行阶段进行了修改。

  • 22.11.编译 java java 插件为项目的每一个 source set 增加了一个 JavaCompile 实例, 最常见的配置选项如下所示: 表22.13.java 插件-编译配置 任务属性 类型 默认值 classpath FileCollection sourceSet.compileClasspath source FileTree,可以在Section 15.6, “Copyin