android - Gradle:构建Android库后如何运行自定义任务?

我有一个 Android 库,它正在生成 debug.aar 和 release.aar,我需要将 release.aar 复制到另一个文件夹作为对项目其他部分的引用。

我现在所做的是在这个 Android Library build.gradle 中我定义了一个任务:

task copyAARToCommonLibs(type: Copy) {
    from('../build/outputs/aar') {
        include '*-release.arr'
    }
    into '../SomeSampleApps/libs'
}

我正在尝试在生成 arr 后运行此任务,我认为这是 assembleRelease 阶段,所以我尝试在此 build.gradle 中执行此操作

assembleRelease.doLast{
   copyAARToCommonLibs
}

我使用

构建整个项目
 gradle build

但是这个任务是在整个过程的最开始运行的。

我也试过这个:

 applicationVariants.all { variant ->
     variant.assemble.doLast {
         copyAARToCommonLibs
     }
 }

inside android{} 属性(我猜这就是它的名字?) 运行 gradle build,得到这个错误:找不到属性 'applicationVariants'

然后我发现了这个 fragment :

tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn copyAARToCommonLibs }

但这似乎使任务在编译后运行,我不知道如何修改它以在汇编后运行。

有人可以纠正我在哪里做错了吗?在生成 .arr 文件后如何让这个复制任务工作?

最佳答案

似乎 finalizedBy 可能会有所帮助。

assembleRelease.finalizedBy(copyAARToCommonLibs)

请注意,以下方式不会定义依赖项:

assembleRelease.doLast {
   copyAARToCommonLibs
}

实际上.. 它什么也没做。您需要执行任务:

assembleRelease.doLast {
   copyAARToCommonLibs.execute()
}

但不鼓励以以下方式运行任务,这是非常糟糕的做法。

你也可以试试:

assembleRelease.doLast {
   copy {
      from('../build/outputs/aar') {
        include '*-release.aar'
      }
      into '../AscendonSDKSamples/libs'
   }
}

https://stackoverflow.com/questions/32878383/

相关文章:

javascript - grunt-concat 分隔符选项?

java - Eclipse Gradle 构建 "Could not find tools.jar

c# - 构建失败。有关详细信息,请参阅构建日志

gradle - 如何更改使用 shadowjar 创建的 jar 的名称

macos - 如何在 mac 上安装 build-essential?

linux - RPM - 安装时间参数

build - Sublime Text 2 通过简单的批处理文件构建

linux - 使用 Jenkins 的嵌入式 Linux 开发模型

build - 将 Gradle 脚本从根目录导入子项目

macos - 如何在 Mac OS X 上将 OpenSSL 构建为 32 位 (i386)?