前言
如果想要调试Android系统里的应用,一般的方式是手动通过jwdp attach到指定应用的虚拟机进行调试,这种方式很费事费力。除此以外,想要拷贝修改文件,查看系统信息等等,都不是很方便,好在系统给我们提供了一个很好的工具。
adb (Android Debug Bridge) 全称安卓调试桥,是一个集调试应用、操作系统内文件、查看系统/应用相关信息于一身的开发工具。
adb和安卓系统中的系统服务一样,同样采用了CS (client-server) 的架构。其内部主要包含三个部分: adb client、adb server和adbd
。其中,
adb client
: 运行于PC上,提供PC端运行的命令,比如我们经常调用的adb shell。adb server
: 同样运行于PC上,作为后台进程,负责client与手机/模拟器中的守护进程(daemon)
的socket通信,正如其名像一座桥一样。adbd (adb daemon)
: 运行于手机/模拟器,作为系统启动后的守护进程
调试相关
调试Application的onCreate中的断点
如果我们要调试的断点很靠前,比如在Application的onCreate方法中,以至于不能足够快的将进程设置为debug模式,此时可以使用adb命令解决该问题
在应用未启动时,输入以下命令后点击app启动
adb shell am set-debug-app -w <your-app-package-name>
如果不想每次都运行该命令才能开始调试,可以加上参数
adb shell am set-debug-app -w --persistent <your-app-package-name>
使用此参数,记得调试完成后要关闭
adb shell am clear-debug-app
无线连接
正因为adb这种cs架构,所以adb可以进行无线调试,甚至我们可以在云测平台远程调试云测手机。
- 如果设备没有开启监听端口,需要先有线连接usb,终端输入要监听的端口号,指定adbd的监听端口号(有的rom系统还需要在开发者设置中开启adb远程调试功能,比如小米,具体操作可以谷歌一下)
adb tcpip <port> 例如5555
- 断开有线连接
adb connect <device-ip-address>:<port>
有时候adb运行该命令会报连接错误,这个时候可以尝试以下命令
- 关闭PC端的adb server
adb kill-server
- 开启PC端的adb server
adb start-server
5.Android端开启adbd(需要root)
su
setprop service.adb.tcp.port 5555
start adbd // 如果失败,则先进行stop adbd
应用相关
查看应用列表
adb shell pm list packages
参数 | 显示列表 |
---|---|
-f | 显示应用关联的 apk 文件 |
-s | 只显示系统应用 |
-3 | 只显示第三方应用 |
安装应用
adb install <path_to_apk>
参数 | 含义 |
---|---|
-r | 允许覆盖安装 |
-d | 允许降级覆盖安装 |
-g | 授予所有运行时权限 |
卸载应用
adb uninstall [-k] <packagename>
参数-k:表示卸载应用但保留数据和缓存目录
清除应用数据与缓存
adb shell pm clear <packagename>
此操作在应用内是无法调用的,除非root.
如果仅想删除应用数据而保留用户数据,可以尝试使用(需要root),
adb shell su -c "rm -rf /data/data/<app's package>/cache/*"
如果是debug包,可以使用run-as
命令在非root情况下删除数据,
adb shell run-as <app's package> "rm -rf /data/data/<app's package>/cache/*"
查看前台Activity
adb shell dumpsys activity top
此方法通常用于很方便地定位activity类的名称,使用频率很高
查看正在运行的 Services
adb shell dumpsys activity services [<packagename>]
查看应用详细信息
adb shell dumpsys package <packagename>
设备IP 地址
adb shell ifconfig
查看cpu信息
adb shell cat /proc/cpuinfo
查看内存信息
adb shell cat /proc/meminfo
屏幕截图
截图并保存在当前文件目录下,非常实用
adb exec-out screencap -p > sc.png
如果经常需要使到截图功能,可以考虑写shell脚本,一个简单的实现方式如下,
snap_screen() {
//自定义要保存的图片名称
if [ $# -eq 0 ]
then
//不输入名称,则默认值如下
name="screenshot.png"
else
name="$1.png"
fi
adb shell screencap -p /sdcard/$name
adb pull /sdcard/$name
adb shell rm /sdcard/$name
curr_dir=pwd
echo "save to `pwd`/$name"
}
该脚本可以保存在~/.zshrc
(这里推荐一下终端zsh,非常好用), 或~/.bashrc
里,source一下,下次就可以很方便的使用了
录制屏幕
录制屏幕以 mp4 格式保存到 /sdcard:
adb shell screenrecord /sdcard/filename.mp4
需要停止时按 Ctrl-C
,默认录制时间和最长录制时间都是 180 秒。
如果需要导出到电脑:
adb pull /sdcard/filename.mp4