1. adb devices
连接Android设备到电脑上,用这个命令检查设备连接状态,有device、offline和没有device三种状态。
1) device:正常运行状态,如下图,可以获取到设备的序列号。如果连接了多个设备,可以根据序列号,使用”-s + 序列号”只对某个设备操作。例如:
adb -s 2aa1c436 shell df
adb -s 2aa1c436 install xxx.apk
2) offline:未连接到 adb 或不响应。
3) 没有device:未连接模拟器/设备。
2. adb root
意义:切换adb服务使用对象为root用户。
常见问题:商用机上adb root命令无效。
解决方案:这个命令只有工程机(测试机)上有用,对商用机无效。对于商用机,想切换成root用户,必须先root设备,然后在adb shell下使用命令“su”切换成root账户。
3. adb push
意义:将PC机上的文件拷贝一份到Android设备路径下。注意PC机上文件路径和Android设备路径的路径分隔符可能是不同的。
示例:
adb push D:\android\test\test.sh /data/local/tmp/
常见问题:push文件到设备里某些路径失败,比如/system/, /etc/等路径。
解决方案:先使用以下两个命令,再用adb push命令。
adb root
adb remount
4. adb pull
意义:将Android设备上的文件拷贝一份到PC机路径下。注意Android设备路径和PC机路径的路径分隔符可能是不同的。
示例:
adb pull /data/local/tmp/logcat.txt D:\android\test
常见问题:没有成功将文件pull出来。这种情况在商用机上出现的比较多。有时候因为pull一个文件夹下所有文件,而其中的某几个文件没有pull出来,不仔细看,可能还发现不了问题。
解决方案:1)先用adb root命令切换成root用户,再使用adb pull命令;2)如果无法切换成root用户,就请先用以下命令给需要pull的文件或文件夹加上可读的权限。
adb shell
chmod 777 <文件>
chmod 777 <文件夹> -R
5. adb install xx.apk
意义: 安装xx.apk到设备中,xx.apk前可以加上apk所在路径,注意这个路径是PC机的路径。
常见问题:安装失败。
解决方案:安装失败有不同的原因,必须仔细分析有针对性地解决。
6. adb uninstall package
意义: 卸载package所对应的apk。
常见问题:不知道apk对应的package是什么。
解决方案:有很多的方法可以获取到package,这里提供其中的一种,首先打开要卸载的apk,输入adb shell dumpsys window windows | findstr "Current"命令,“/”之前红色区域的字符串就是当前apk的package。
7. adb shell + shell_cmd
意义: shell_cmd二进制文件存储在模拟器或设备的文件系统中,其路径为 /system/bin/ 和/system/xbin/。adb shell 后面可以直接跟上shell_cmd,也可以按下Enter键后,再输入shell_cmd。
8. adb remount
意义:remount /system/, /etc/等路径的读写权限,使当前用户有权限读写设备中/system/, /etc/等路径下的文件。使用先必须先用adb root命令。
常见问题: remount失败。
解决方案: 如果adb remount 命令提示remount失败,则可以先运行adb disable-verity命令,然后重启设备,最后再使用root和remount命令。
adb disable-verity
adb reboot
adb root
adb remount
9. adb logcat [option] [filter-specs]
意义: logcat用于存储系统消息日志,其中包括设备引发错误时的堆叠追踪以及从您的应用使用Log类编写的消息。[option]和[filter-specs]都有有多种设置。
示例: 最常用的是以下几个。
1) 查看主要日志缓冲区(默认值)的log,每行log前不包含时间信息,保存到PC机当前路径下main_log.txt文件中。在cmd窗口中输入“start .”(英文半角的点哦) 命令可以快速打开当前路径。
adb logcat > main_log.txt
2) 查看主要日志缓冲区(默认值)的log,每行log前包含时间信息,保存到PC机当前路径下main_log.txt文件中。
adb logcat -v threadtime > main_log.txt
3) 查看包含无线装置/电话相关消息的缓冲区,每行log前包含时间信息,保存到PC机当前路径下radio_log.txt文件中。
adb logcat -v threadtime -b radio > radio_log.txt
4) 查看包含事件相关消息的缓冲区,每行log前包含时间信息,保存到PC机当前路径下events_log.txt文件中。
adb logcat -v threadtime -b events > events_log.txt
5) 清除缓存区log
adb logcat -c
注意:所有这些logcat命令也可以在shell里面执行,如下所示,先用输入adb shell按下Enter键,然后在输入相关的命令。不过在shell里面输入,”>”重定向后面的路径必须是Android设备中的路径。
adb shell
logcat > /data/local/tmp/main_log.txt
常见问题:log没有保存下来,或者保存下来的log不是想要的log。
解决方案:1)如上述注意事项中所述,在不在shell中使用logcat命令,其保存的log文件路径是不同的,必须根据实际情况,书写正确的路径。2)路径没有错误,却没有保存下想要的log,原因可能是logcat缓存区log太多,没有及时保存导致。解决方案如下: 先输入logcat -c命令清除缓存区log,再输入logcat相关命令,然后开始测试或复现问题,等测试完毕,再终止logcat抓取窗口。
10. adb kill-server/adb start-server
意义: 停止adb 服务/启动adb 服务。通常只有在adb devices找不到设备时才会使用,并且是成对使用。
常见问题:这两个命令都已经执行了,但是adb devices仍找不到设备。
解决方案:adb devices找不到设备有很多的原因,请参考小编文章列表,根据不同的原因有针对性地解决。
11. adb reboot [bootloader|recovery|]
意义: adb reboot用于重启设备,adb reboot bootloader用于将设备切换至bootloader状态,adb reboot recovery用于将设备切换至recovery状态。
常见问题: 切换至bootloader或recovery状态失败。
解决方案: 想要切换至bootloader或recovery状态,则设备的版本软件中必须包含bootloader或recovery相关的image。因为image软件比较大,有时候为了更快地刷和版本(或者没有编译等其他原因),版本中不包含bootloader或recovery相关的image,就无法切换成功了。
12. adb wait-for-usb-device /adb wait-for-device +其他命令
意义: 等待设备处于在线状态之后执行其他命令,也就是说等正确连接到设备后立即执行其他命令。旧的adb版本用的是adb wait-for-device命令,新的adb 版本用的是adb wait-for-usb-device命令。
示例:
adb wait-for-device shell dmesg
adb wait-for-usb-device shell dmesg
如果不加wait-for-device,"adb shell dmesg”命令就会立即执行,这时要是找不到设备,就会直接报错,譬如,设备正在重启中。加了wait-for-device,命令就会一直处于pending状态,直到PC机正确连接上了设备就立即开始执行wait-for-device后续的命令。
13. adb bugreport
意义:将 dumpsys、dumpstate 和 logcat 数据输出到屏幕,包括进程列表,内存信息,VM信息等等,以用于报告错误。这个命令信息量非常大,执行起来也需要花费很多时间(大约1分钟),对于bug的分析也十分有用。
14. adb version
意义: 获取adb程序的版本号。
15. adb get-state
意义: 获取设备连接的状态(offline | bootloader | device),一般自动化测试中会用到这个命令,手动测试无需这个命令。
16. adb get-serialno
意义: 获取设备的序列号,一般自动化测试中会用到这个命令,手动测试无需这个命令。
17. 更多的命令
更多的命令请在cmd窗口中,输入adb,按下Enter,获取帮助:adb help