我正在尝试编写一个Gradle任务,该任务执行adb命令以清除已连接的Android设备的app / data缓存:
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
}
但是,我仍在寻找它首先挂起的原因。
答案 0 :(得分:0)
试试这个:
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