【问题标题】:How to run multiple tasks before compilation using Android Gradle plugin如何使用 Android Gradle 插件在编译前运行多个任务
【发布时间】:2017-09-19 08:22:20
【问题描述】:

我想通过 Gradle 运行脚本来运行任务,所有任务在编译之前运行,以自动生成工件以运行 Android 应用程序。

任务:

  1. 我想运行一个生成工件的.cmd 文件
  2. 将生成的工件复制到 Android 资产文件夹

这是模块 build.gradle:

task createArtifacts(type:Exec) {
    commandLine 'cmd', '/c', "$rootDir\\create-artifacts.cmd"
    workingDir "$rootDir"
}

task copyAssets(type: Copy) {
    from "$rootDir/../Artifacts/assets"
    into "src/main/assets"
}

afterEvaluate {
    android.applicationVariants.all { variant ->
        variant.javaCompiler.dependsOn[copyAssets] //How do I make this multiple in this part?
    }
}

所以我想在afterEvaluate 内的copyAssets 之前完成任务createArtifacts

我的参考是here

【问题讨论】:

    标签: android gradle android-gradle-plugin build.gradle android-build


    【解决方案1】:

    假设您有默认的构建变体:debugrelease

    这就是我在项目中的做法:

    afterEvaluate {
       if (project.hasProperty("assembleRelease")) {
          assembleRelease.dependsOn copyAssets
          copyAssets.dependsOn createArtifacts
       }
       if (project.hasProperty("assembleDebug")) {
          assembleDebug.dependsOn copyAssets
          copyAssets.dependsOn createArtifacts
       }
    }
    

    【讨论】:

    • 我想连续调用任务,让 copyAssets 在 createArtifacts 之后运行。
    • 这是我发布的代码应该做的。构建依赖于“createArtifacts”的“copyAssets”。因此,“createArtifacts”在“copyAssets”之前运行。
    【解决方案2】:

    我通过创建另一个名为 order 的任务解决了这个问题,并在 afterEvaluate 中调用了最终任务以确保遵循顺序。

    task createArtifacts(type:Exec) {
        commandLine 'cmd', '/c', "$rootDir\\create-artifacts.cmd"
        workingDir "$rootDir"
    }
    
    task copyAssets(type: Copy) {
        from "$rootDir/../Artifacts/assets"
        into "src/main/assets"
    }
    
    task order {
        dependsOn 'createArtifacts'
        dependsOn 'copyAssets'
        tasks.findByName('copyAssets').mustRunAfter 'createArtifacts'
    }
    
    afterEvaluate {
        android.applicationVariants.all { variant ->
            variant.javaCompiler.dependsOn(order)
        }
    }
    

    现在,批处理脚本在实际应用构建完成之前运行,因此每次构建应用时我的依赖项都会更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 2019-06-06
      • 2012-12-04
      • 2021-11-29
      相关资源
      最近更新 更多