大数跨境
0
0

Android Gradle自定义任务在打包任务执行完成后执行cmd命令

Android Gradle自定义任务在打包任务执行完成后执行cmd命令 黄大官AOSP
2024-11-21
1

背景

在每次打包之后需要做某事,例如每次打包后我都会安装某个目录下的一个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,再执行自己的逻辑。

可以修改:

// 自定义任务来执行 assembleReleasetask 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双击执行就可以,不会影响到其他人。

【声明】内容源于网络
0
0
黄大官AOSP
学习和分享Android,iOS,财务笔记,AOSP源码定制
内容 59
粉丝 0
黄大官AOSP 学习和分享Android,iOS,财务笔记,AOSP源码定制
总阅读53
粉丝0
内容59