Gradle adb Android Exec任务因失败而挂起

Gradle adb Android Exec任务因失败而挂起,android,shell,gradle,adb,Android,Shell,Gradle,Adb,我正在尝试编写一个Gradle任务,该任务执行adb命令以清除已连接android设备的应用程序/数据缓存: task clearAppDataCache(type: Exec) { description = "Clears device app data/cache." group = "Utils" commandLine "$sdkDir/platform-tools/adb" args = ["shell", "pm", "clear", "com.m

我正在尝试编写一个Gradle任务,该任务执行adb命令以清除已连接android设备的应用程序/数据缓存:

task clearAppDataCache(type: Exec) {
    description = "Clears device app data/cache."
    group = "Utils"

    commandLine "$sdkDir/platform-tools/adb"
    args = ["shell", "pm", "clear", "com.my.package"]
}
如果设备上安装了com.my.package安卓软件包,则上述任务有效。但是,如果未安装程序包,则任务会打印出故障,然后以以下方式挂起:

有人知道为什么会这样吗?我希望它会以类似于原始shell命令运行的方式失败并完成

编辑:

向任务添加以下配置子句将停止挂起:

doFirst {
        if (!packageExists("com.my.package"))
            throw new GradleException("com.my.package package is not installed on connected device.")
    }
使用以下函数定义:

/**
  * Returns true if the packageName argument exists on the the connected device,
  * false otherwise.
  */
def packageExists(String packageName) {
    def output = "adb shell pm list packages -f".execute().waitFor().text
    if (output.contains("$packageName")) return true
    return false
}
但是,我仍在寻找它挂起的原因。

试试这个:

task clearAppDataCache(type: Exec) {
    description = "Clears device app data/cache."
    group = "Utils"
    commandLine "./pmclear.sh"
}
pmclear.sh:

#!/bin/bash
[ "`adb shell "pm list packages com.my.package"`" == "" ] || adb shell "pm clear com.my.package

仍然得到如上所述的挂起。我检查并pm清除。。。确实是卡住了。因此,制作一个简单的脚本来检查包是否已安装,并从gradle代码中调用它。谢谢Alex!这解决了这个问题,但我仍在寻找问题的根本原因。