android - 如何在 PowerShell 中使用 ADB 返回码(或结果)?
问题描述
我想制作删除预装应用程序的 PowerShell 脚本,并且我有这些应用程序的列表。
问题是,我想让脚本首先运行某个命令,并且只有当命令失败时,才运行另一个命令。
就像,如果脚本无法删除应用程序,那么它将尝试禁用该应用程序。无需尝试禁用已删除的应用程序,对吗?
adb shell am force-stop <app> # force stop app
adb shell am kill <app> # kill app if not force-stopped
adb uninstall <app> # remove app
adb shell pm disable-user --user 0 <app> # disable app for user 0 if not removed
是的,有一些已经回答的类似问题是这样的。但这些现在不起作用。
PS > adb shell "pm uninstall com.google.android.apps.photos; echo $?"
Failure [DELETE_FAILED_INTERNAL_ERROR]
True
即使命令失败(Failure
),也会echo
返回True
。
这是用最新的(几分钟前刚刚下载的)ADB 和 Android 11 测试的,所以我猜我的信息('那不起作用!')更“最新”。
那么,如何在PowerShell中使用ADB命令的返回码呢?
PS。如果您想要我编写的代码进行更多检查,这里是:LINK
它已被修改为不使用echo
,但仍然没有成功。
解决方案
那么,如何在PowerShell中使用ADB命令的返回码呢?
正确的检查方法应该是:
adb devices
if($?) {
echo "Command succedded"
} else {
echo "Command failed!"
}
此外,还有另一个退出代码$LASTEXITCODE表示 0,如果命令执行没有任何异常;和非零值,如果命令因某些异常而失败。您可以将其用作:
if($LASTEXITCODE -eq 0) {
echo "Command succedded"
} else {
echo "Command failed!"
}
$?
和的区别在于$LASTEXICODE
前者返回Boolean,而后者返回Int32类型。
即使命令失败(Failure),echo 也会返回 True。
您面临此问题的真正问题是,因为您正在尝试卸载Google Photos应用程序,该应用程序是与其他 OEM 供应商应用程序一起预先捆绑的系统应用程序,具有最小版本。要卸载此类系统应用程序,您需要root 权限,可以使用--user 0
flag 来激活adb pm
命令,但您需要root 访问权限。当您购买新设备时,它已经作为系统应用程序安装并且可以更新。当您尝试卸载它时,它的更新将被卸载,系统将恢复最小的预捆绑版本,而不是完全卸载。这就是您收到Failure [DELETE_FAILED_INTERNAL_ERROR]
消息并随后收到的原因True
,这应该是False
但命令不会抛出那个。诡异的。
推荐阅读
- hugo - 在静态站点上添加临时消息
- mysql - 如何使用 localhost 通过网桥连接到 mysql docker 实例?
- python - 仅从 Python 中的 TXT 文件中提取文章的标题
- python - Python Selenium ElementClickInterceptedException
- ruby-on-rails - Ruby Rails:我应该使用布尔真还是:真?
- python - 哪种数据类型最适合 Keras 中的 CNN?
- python - 将单元格值移动到另一列中的较低单元格
- javascript - 我怎样才能把这个边框和我的幻灯片结合起来?
- wordpress - 如何在 Elementor 存档页面小部件/主题生成器中添加可点击的类别链接?
- javascript - 我的反应网站在移动元素后冻结