背景
在每次打包之后需要做某事,例如每次打包后我都会安装某个目录下的一个apk。这个apk是通过一堆shell命令过滤得到一个apk的地址,然后把执行的几个shell命令何必成一个alias指令,在打包后只需要执行alias指令实现功能。当然也可以直接写在Gradle中,为了让平时在终端也可以使用,本次功能不会这样做。
环境:macOS 12.6,as Android Studio Chipmunk | 2021.2.1 Patch 2
目标任务assembleRelease
我想在执行完成这个任务之后执行一个终端命令。在build.gradle
中,最底下位置增加代码:
android {
// 你的其他配置
}
tasks.whenTaskAdded { task ->
if (task.name == "assembleRelease") {
task.finalizedBy 'myCustomTask'
}
}
task myCustomTask {
doLast {
// 在这里执行你的终端命令, 这个命令可以换自己的,例如我的alias fff
def command = "echo 'Hello, World!'"
println "Executing command: $command"
// 使用下列语句执行终端命令
def process = command.execute()
process.in.eachLine {line ->
println line
}
process.waitFor()
}
}
这样配置后,同步一次Gradle
即可,在你每次执行assembleRelease
的时候都会执行myCustomTask
,但你的同事也执行这个任务也会触发定制任务。为了不影响别人,应该改成一个独立的任务,这个任务执行的时候,先执行assembleRelease
,再执行自己的逻辑。
可以修改:
// 自定义任务来执行 assembleRelease
task myAssembleAndRunCommand {
dependsOn 'assembleRelease' // 先执行 assembleRelease 任务
doLast {
// 在 assembleRelease 完成后执行你的终端命令
def command = "echo 'Hello, World!'"
println "Executing command: $command"
// 使用下列语句执行终端命令
def process = command.execute()
process.in.eachLine {line ->
println line
}
process.waitFor()
}
}
这个时候,myAssembleAndRunCommand
是一个新的任务,它依赖于 assembleRelease
。在执行myAssembleAndRunCommand
时,Gradle
会先确保 assembleRelease
已经完成。
在自己需要的时候去other里面找到myAssembleAndRunCommand
双击执行就可以,不会影响到其他人。