Windows下使用bat按行执行adb命令

使用*adb shell su -c *会报错 su: invalid uid/gid ‘-c’

Part one :前情回顾

本来是想通过bat脚本跑一下adb的相关指令,需要的执行的adb 指令如下:

adb shell
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

于是,在脚本中便写下了下面这个样子以企图按照预期,自动按行执行:

Part two : 期望按行执行

@echo off
adb shell
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

结果脚本会阻塞在,adb shell 状态,不会按行执行

Part three : 使用 su -c

经过搜索和查询,网上大部分推荐的是这个样子:

adb shell su -c "setprop service.adb.tcp.port 5555"
adb shell su -c "stop adbd"
adb shell su -c "start adbd"

期待能成功。
然而,运行之后就呵呵了…
Windows下使用bat按行执行adb命令_第1张图片

可能在别的手机上su -c是可以的,也许是跟system img版本号有关系

Part four : 解决问题

通过上面的错误,便开始了大量的搜索,百度上搜索到的基本都是建议使用su -c,于是FQ了一下,也没有找到有效的信息。无奈只能搜索一下adb shell su命令大全,就发现了su 0这个解决了我需求的方案。在此记录一下:
修改之后的bat脚本内容如下:

adb shell su 0 "setprop service.adb.tcp.port 5555"
adb shell su 0 "stop adbd"
ping -n 6 www.baidu.com
adb shell su 0 "start adbd"
ping -n 6 www.baidu.com

注:中间ping几次其他的主机,是为了adbd的重启切换争取时间。
su 0 : su后面跟的是数字‘ 零’ ,不是字母 O

Part five :总结

1、由于adb shell指令在bat脚本单独运行,会进入设备的shell状态且是阻塞状态,导致后面几行命令不会按照预期的按行执行,所以直接通过Part one中的方案是不可行的。
2、su -c是Linux中支持的指令,但是并不是所有的Linux指令都会在Android中被支持
3、su 0是Android中su执行后续指令的一种标准写法,大家可以验证一下不通型号的手机是否都支持

谢谢阅读!!!祝:工作顺利,生活愉快!!

你可能感兴趣的:(Java,Android,windows,开发工具)