adb详解及常用命令总结

1,259 阅读4分钟

前言

如果想要调试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可以进行无线调试,甚至我们可以在云测平台远程调试云测手机。

  1. 如果设备没有开启监听端口,需要先有线连接usb,终端输入要监听的端口号,指定adbd的监听端口号(有的rom系统还需要在开发者设置中开启adb远程调试功能,比如小米,具体操作可以谷歌一下)
adb tcpip <port> 例如5555
  1. 断开有线连接
adb connect <device-ip-address>:<port>

有时候adb运行该命令会报连接错误,这个时候可以尝试以下命令

  1. 关闭PC端的adb server
adb kill-server
  1. 开启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