1.何为ADB
Android 调试桥 (Android Debug Bridge, adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。它是一种客户端-服务器程序,包括以下三个组件:… …
2.故事
因为业务需求,需要使用adb命令模拟点击和填写文字(中文,英文,数字),adb发送文字大家都知道是:
adb shell input text "Hello"
这样就可以将Hello推送到手机上当前对焦的如TextView等输入控件上。当时当我尝试如下命令就会出现无法推送到情况
adb shell input text "你好"
通过搜索引擎得知目前adb因为设计的缺陷无法发送中文字符(unicode),于是又通过搜索引擎找到了一个开源工具https://github.com/senzhk/ADBKeyBoard,通过安装此输入法并将其设置为默认输入法即可通过adb方式发送中文(这里测试魅族部分机型无法修改系统输入法,系统版本Flyme 8.0.0.0A)华为部分机型可以设置,部分小米手机也可以,但是你要额外开启USB安全模式。接下来就是按照ADBKeyBoard给出的使用方法进行测试了
adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好嗎? Hello?'
然而,第一个用例就翻车了,出现了乱码,不过还好至少能有反应了。继续阅读,发现下面有类似将字符进行Base64编码后再丢给工具进行发送的例子如下:
* For Mac/Linux, you can use the latest base64 input type with base64 command line tool: adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo '你好嗎? Hello?' | base64`
但是很遗憾,我是Python3(Windows10)平台,于是得对这条命令进行改造在pyton中写一个汉字转base64编码的方法即可:
def hans_to_base64(hans):
return base64.b64encode(hans.encode("utf-8")).decode()
一行搞定,接下来只要在需要发送中文的地方进行如下调用即可
os.system("adb shell am broadcast -a ADB_INPUT_B64 --es msg " + hans_to_base64("你好"))
3.ABD常用命令
1.adb devices , 获取设备列表及设备状态
2.adb get-state , 获取设备的状态
- 设备的状态有 3 钟,device , offline , unknown
- device:设备正常连接
- offline:连接出现异常,设备无响应
- unknown:没有连接设备
**3.**安装卸载应用程序
adb install 用于安装
- 安装成功,返回成功提示 “Success”;
- 安装失败,会返回以下:
- INSTALL_FAILED_ALREADY_EXISTS
- 此时需要用 -r 参数来重新安装。
- INSTALL_FAILED_SIGNATURE_ERROR
- 应用的签名不一致,可能是发布版和调试版签名不同所致。也有可能是没卸载旧应用导致。
- INSTALL_FAILED_INSUFFICIENT_STORAGE
- 存储空间不足,需要检查设备存储情况。
adb uninstall 用于卸载
- adb uninstall 后面带的是应用的包名,而不是应用名。
- 查看系统所有应用的包名:
- adb shell pm list packages –f
4****.上传、下载文件
- adb push 命令将PC机上的文件推到 DLT-RK3288 机器上;
- adb pull 命令将DLT-RK3288机器上的文件拉到PC机上;
- 例如:
- adb push d:/new.txt /sdcard/
- 将D盘下new.txt文件 推到内部存储器
- adb pull /sdcard/new.txt d:\
- 将DLT-RK3288 内部存储器根目录下的new.txt 拉到D盘
5. adb shell pm list package
Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息
-s:列出系统应用
-f:列出应用包名及对应的apk名及存放位置
5.adb shell
通过adb shell 命令,就可以进入设备或者模拟器的shell环境了,在这个Linux shell中,我们就可以执行各种Linux命令了。
如果只想执行一条shell命令,就可以采用:adb shell [shell_command],在实际使用中,经常与grep或findstr一起使用,起到过滤作用,查看自己需要的关键信息。
6. 常见命令:
如 ls, cd, rm, mkdir, touch, pwd, cp, mv, ifconfig, netstat, ping, ps, top等,进入adb shell即可执行,与linux相似