首页 > 解决方案 > 使用 AS 同步时将运行 gradle 任务

问题描述

我在 app/build.gradle 中创建了一个任务取决于 assembleRelease,就像这段代码一样,FileNotFoundException当我使用 AS 同步时出现错误

task push(type: Exec, dependsOn: ['assembleRelease']) {
    println 'push invoke'
    def apkDir = "${project.projectDir.absolutePath}/build/outputs/plugin/release/"
    def apkName = ""
    fileTree(apkDir).visit { FileVisitDetails details ->
        println "${details.name}"
        //只取第一个apk
        if (apkName.endsWith(".apk")) {
            apkName = details.name
            details.stopVisiting()
        }
    }
    if (apkName.isEmpty()) throw new FileNotFoundException("apk file not found,please invoke 'assemblePlugin' first")
    workingDir project.projectDir
    commandLine 'adb', 'push', "${project.projectDir.absolutePath}/build/outputs/plugin/release/{$apkName}", '/sdcard/Demo_plugin_1.apk'
    ignoreExitValue true
}

当我同步 gradle 时代码会运行吗?我希望代码在执行时运行gradlew push 我该怎么办

标签: androidgradle

解决方案


尝试对任务的第一部分使用 doFirst{ } 块:

doFirst {
    println 'push invoke'
    def apkDir = "${project.projectDir.absolutePath}/build/outputs/plugin/release/"
    def apkName = ""
    fileTree(apkDir).visit { FileVisitDetails details ->
        println "${details.name}"
        //只取第一个apk
        if (apkName.endsWith(".apk")) {
            apkName = details.name
            details.stopVisiting()
        }
    }
    if (apkName.isEmpty()) throw new FileNotFoundException("apk file not found,please 
     invoke 'assemblePlugin' first")
}

推荐阅读