我有一个Android库,它生成了一个debug.aar和一个release.aar,我需要将release.aar复制到另一个文件夹作为对项目其他部分的引用。
我现在所做的是在这个Android库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
}
}
在android {}内部属性(我想那是什么叫它?) 运行gradle构建,出现此错误:无法找到属性' applicationVariants'
然后我遇到了这个片段:
tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn copyAARToCommonLibs }
但似乎这使得任务在编译后运行,我不知道如何修改它以便在汇编后运行。
有人可以在我做错的地方纠正我,如何在生成.arr文件后让这个副本任务工作?
答案 0 :(得分:17)
似乎finalizedBy
可能会有所帮助。
assembleRelease.finalizedBy(copyAARToCommonLibs)
请注意,通过以下方式,您无法定义依赖关系:
assembleRelease.doLast {
copyAARToCommonLibs
}
实际上......它什么都没做。您需要执行任务:
assembleRelease.doLast {
copyAARToCommonLibs.execute()
}
但不鼓励以下列方式运行任务,这是非常糟糕的做法。
您也可以尝试:
assembleRelease.doLast {
copy {
from('../build/outputs/aar') {
include '*-release.aar'
}
into '../AscendonSDKSamples/libs'
}
}
答案 1 :(得分:3)
我使用了finalizedBy(),但必须将其包含在afterEvaluate ...
中afterEvaluate {
if (project.hasProperty("assembleFatRelease")) {
assembleFatRelease.finalizedBy(crashlyticsUploadSymbolsFatRelease)
} else {
assembleFatDebug.finalizedBy(crashlyticsUploadSymbolsFatDebug)
}
}
这适用于自动将原生符号上传到Fabric / Crashlytics。
答案 2 :(得分:0)
由于android studio通过动态添加任务,因此assembleRelease
无法被识别。
只需在添加任务事件发生后添加钩子即可。
tasks.whenTaskAdded {
theTask ->
if (theTask.name.contains('externalNativeBuild')) {
theTask.doLast{
println "[*] begin to copy file."
}
}
// println theTask.name
}