adb 常用命令
ADB的全称为Android Debug Bridge,就是起到调试桥的作用。ADB是android sdk(Android专属的软件开发工具包)里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备。
它的主要功能有:运行设备的shell(命令行);管理模拟器或设备的端口映射;计算机和设备之间上传/下载文件;将本地apk软件安装至模拟器或android设备。
开启/关闭服务
有时候 adb 运行异常,就需要重启关闭开启 adb 服务。
adb kill-server # 关闭服务
adb start-server # 开启服务
查看当前连接的设备
示例:
$ adb devices
List of devices attached
192.168.91.185:5555 device
连接 USB 转为 WIFi
先使用 usb 连接到电脑上。
-
设置目标设备以侦听端口 5555 上的 TCP/IP 连接。
$ adb tcpip 5555 restarting in TCP mode port: 5555
-
断开 usb 连接,并访问设备的内部网址
$ adb connect device_ip_address connected to device_ip_address:5555
-
查看设备是否已连接
$ adb devices List of devices attached 192.168.2.127:5555 device
-
断开WiFi 连接的设备
$ adb disconnect disconnected everything
给指定设备发送命令
当电脑连接多个设备时,发出 adb 命令,必须指定一个设备
adb -s serial_number command
例如:
adb -s BY2XEE157 install path_to_apk
安装/卸载应用
-
安装应用
adb install path_to_apk
-
覆盖安装应用
adb install -r path_to_apk
-
卸载应用
adb uninstall com.package.name
电脑与设备间的文件复制
-
从设备复制文件
adb pull remote local
-
复制文件到设备
adb push local remote
在上述命令中,local
和 remote
指的是开发计算机(本地)和模拟器/设备实例(远程)上目标文件/目录的路径。例如:
adb push foo.txt /sdcard/foo.txt
输入设备日志到终端上
-
一直显示设备日志,直到你手动 (Ctrl + C) 停止
adb logcat
-
将设备缓存的日志输入到终端上,不会阻塞
adb logcat -d
-
将日志以文件形式输出到手机设备上,会阻塞,需手动 (Ctrl + C) 停止
adb logcat -f /sdcard/log.txt
PS:
(1). 如果在后台自动手机,不阻塞终端,则可在命令最后加一个&
的参数;
(2). 加了&
的命令,需要在不收集的时候手动停止,否则再次使用该命令时,会造成2个 logcat 的命令都写在同一个文件中。停止方法:
adb shell kill -9 <logcat pid>
其中logcat_pid 通过 如下命令获取
adb shell ps | grep logcat # Linux & macOS 平台 adb shell ps | findstr "logcat" # Windows 平台
-
清空日志缓存信息
adb logcat -c
-
过滤指定等级以上的日志
adb logcat "*:<level>"
日志等级列表:
-- V : Verbose (明细); -- D : Debug (调试); -- I : Info (信息); -- W : Warn (警告); -- E : Error (错误); -- F : Fatal (严重错误); -- S : Silent(Super all output) (最高的优先级, 可能不会记载东西);
示例:命令
$ adb logcat "*:E"
,只显示错误级别以上的日志
查看设备已安装应用
查看设备所有应用包名,包括:系统应用、第三方应用
adb shell pm list package
查看设备所有第三方应用包名
adb shell pm list package -3
清除指定应用的所有数据(不卸载应用)
adb shell pm clear com.package.name
强制关闭应用
adb shell am force-stop com.package.name
截屏
adb shell screencap /sdcard/screen.png
录制视频
adb shell screenrecord /sdcard/demo.mp4
如果需要停止录制视频,需要等待3分钟或输入快捷键Ctrl + C
停止,也可以加 --time-limit TIME
单位为秒
如:录制5分钟
adb shell screenrecord /sdcard/demo.mp4 --time-limit 300
当然还可以设置分辨率720P
adb shell screenrecord /sdcard/demo.mp4 --size 1280x720
获取输入法
-
获取当前设备默认输入法
adb shell settings get secure default_input_method
-
设置指定的输入法(设输入法为:com.android/input)为默认
adb shell ime set com.android/input # 两条命令作用一样 adb shell settings put secure default_input_method com.android/input
获取设备信息参数
adb shell getprop
重启手机命令
-
重启手机
adb reboot
-
重启手机到recovery界面
adb reboot recovery
-
重启手机到bootloader界面
adb reboot bootloader
-
重启手机到fastboot界面
adb reboot fastboot
获取设备属性
使用命令adb shell getprop
+下面的属性,即可获取相应的属性
属性名 | 含义 |
---|---|
ro.build.version.sdk | SDK 版本 |
ro.build.version.release | Android 系统版本 |
ro.product.model | 型号 |
ro.product.brand | 品牌 |
ro.product.name | 设备名 |
$ adb shell getprop ro.product.model
vivo X9i
查看实时资源占用情况
示例:
$ adb shell top
User 4%, System 2%, IOW 0%, IRQ 0%
User 108 + Nice 0 + Sys 68 + Idle 2284 + IOW 0 + IRQ 6 + SIRQ 6 = 2472
PID PR CPU% S #THR VSS RSS PCY UID Name
2003 5 3% S 64 1257132K 154860K fg u0_a19 com.android.systemui
521 5 2% D 13 145376K 23044K fg system /system/bin/surfaceflinger
19825 4 0% R 1 6516K 1416K fg shell top
18585 7 0% S 1 0K 0K fg root kworker/u16:2
19563 7 0% D 1 0K 0K fg root mdss_fb0
1452 5 0% S 178 2458344K 190788K fg system system_server
19795 7 0% S 1 0K 0K fg root kworker/u16:6
17950 7 0% S 1 0K 0K fg root kworker/u16:0
53 4 0% S 1 0K 0K fg root rcuop/6
2151 6 0% S 55 1708748K 76084K fg system com.vivo.daemonService
更多用法:
-m num 显示最多的进程数目
-n num 刷新多少次后退出
-d num 刷新时间间隔
-s col 以什么数据排列 (cpu,vss,rss,thr).
-t 显示线程信息代替进程
-h 显示帮助文档
查看内存信息
adb shell dumpsys meminfo # 查看整个设备的内存信息
adb shell dumpsys meminfo pid # 查看指定进程的内存信息
adb shell dumpsys meminfo com.package.name # 查看指定应用的内存信息
提示:
dalvik:是指dalvik所使用的内存。 native:是被native堆使用的内存。应该指使用C\C++在堆上分配的内存。
VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
查看指定应用的指定页面启动时间
- 可通过启动页面指定页面获得时间
adb shell am start -W -n com.package.name/.activity
- 查看设备日志获得打开指定页面时间
示例:
$ adb shell logcat | grep ActivityManager
06-22 16:27:43.827 1452 2446 I ActivityManager: START u0 {cmp=com.babychat.parent.test/com.babychat.module.setting.view.SettingAty} from uid 10113 on display 0
06-22 16:27:43.967 1452 1609 I ActivityManager: Displayed com.babychat.parent.test/com.babychat.module.setting.view.SettingAty: +115ms
06-22 16:27:44.847 1452 2158 I ActivityManager: START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.android.packageinstaller cmp=com.android.packageinstaller/.permission.ui.GrantPermissionsActivity (has extras)} from uid 10113 on display 0
06-22 16:27:44.867 1452 2473 I ActivityManager: START u0 {cmp=com.babychat.parent.test/com.babychat.activity.OutBoxActivity (has extras)} from uid 10113 on display 0
06-22 16:27:44.997 1452 1609 I ActivityManager: Displayed com.babychat.parent.test/com.babychat.activity.OutBoxActivity: +117ms
06-22 16:27:46.017 1452 26437 I ActivityManager: START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.android.packageinstaller cmp=com.android.packageinstaller/.permission.ui.GrantPermissionsActivity (has extras)} from uid 10113 on display 0
06-22 16:28:30.527 1452 2446 I ActivityManager: START u0 {cmp=com.babychat.parent.test/com.babychat.activity.UserHomeHistoryAty (has extras)} from uid 10113 on display 0
06-22 16:28:30.687 1452 1609 I ActivityManager: Displayed com.babychat.parent.test/com.babychat.activity.UserHomeHistoryAty: +140ms (total +44s660ms)
查看当前 activity
示例:
$ adb shell dumpsys window | grep mCurrentFocus
mCurrentFocus=Window{2cf7a4d u0 com.babychat.parent.test/com.babychat.module.chatting.groupmemberlist.GroupMemberListActivity}
获取流量
adb 命令获取流量有多种方式。
需提前准备的数据
-
获取指定应用的 pid
adb shell ps | grep com.package.name
如:
$ adb shell ps | grep com.babychat.parent.test u0_a113 9483 773 2033552 243156 SyS_epoll_ 0000000000 S com.babychat.parent.test u0_a113 9518 773 1603852 48948 SyS_epoll_ 0000000000 S com.babychat.parent.test:pushservice
其中logcat_pid 通过 如下命令获取
adb shell ps | grep logcat # Linux & macOS 平台 adb shell ps | findstr "logcat" # Windows 平台
第二列的数值就是 pid
-
获取指定应用的 uid
adb shell cat /proc/<pid>/status
PS:pid 第一点获取的数值
如:$ adb shell cat /proc/2076/status Name: hat.parent.test State: S (sleeping) Tgid: 9483 Pid: 9483 PPid: 773 TracerPid: 0 Uid: 10113 10113 10113 10113 Gid: 10113 10113 10113 10113 Ngid: 0 FDSize: 256 Groups: 3003 9997 50113 VmPeak: 2210788 kB VmSize: 2033632 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 362872 kB VmRSS: 244244 kB VmData: 378084 kB VmStk: 8196 kB VmExe: 20 kB VmLib: 121404 kB VmPTE: 1772 kB VmSwap: 0 kB Threads: 170 SigQ: 0/13358 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000001204 SigIgn: 0000000000000000 SigCgt: 00000002000094f8 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: 0000000000000000 Seccomp: 0 Cpus_allowed: ff Cpus_allowed_list: 0-7 voluntary_ctxt_switches: 17297 nonvoluntary_ctxt_switches: 10150
命令结果中第7行就是 uid 的结果了
1、读取/proc/uid_stat/<UID> 目录下的文件
流量数据分为接收流量(tcp_rcv)和发送流量(tcp_snd)两部分,这两个状态数值我们可以通过读取/proc/uid_stat/<UID>目录下的两个文件得到。
$ adb shell cat /proc/uid_stat/10114/tcp_rcv
100046432
$ adb shell cat /proc/uid_stat/10114/tcp_snd
2020511
PS:
- 以上命令只能获取 TCP 协议的流量,UDP 等其他协议没有计算在内;
- 以上数据的单位为(Byte),且此数据是一直累加的,直到卸载应用才会删除
- 使用以上方法获取流量,需在操作前和操作后各获取一次数据,得到得到之间的相差值就可以了。
2、读取/proc/net/xt_qtaguid/stats | grep <uid> 流量数值
通过使用以下命令获取设备流量信息,如果指定应用,则获取应用的 uid,在该命令后添加参数| grep uid
adb shell cat /proc/net/xt_qtaguid/stats
如:
$ adb shell cat /proc/net/xt_qtaguid/stats | grep 10114
40 wlan0 0x0 10114 0 6306390 5007 276578 3966 6306390 5007 0 0 0 0 276578 3966 0 0 0 0
41 wlan0 0x0 10114 1 104210738 82998 5295286 65789 104210738 82998 0 0 0 0 5295286 65789 0 0 0 0
PS:
- 第6列是接收的流量数值,单位:bytes;
- 第8列是发送的流量数值,单位:bytes;
- 如果结果出现多行数据,相加的总数即为结果
3、读取 /proc/<pid>/net/dev 数值
通过获取到的 pid ,使用命令可得到:
$ adb shell cat /proc/<Pid>/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
rmnet_ipa0: 716 7 0 0 0 0 0 0 880 12 0 0 0 0 0 0
r_rmnet_data7: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r_rmnet_data4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_data1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_data3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
wlan0: 320261121 1225926 0 124 0 0 0 0 28315746 159136 0 0 0 0 0 0
rmnet_data5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r_rmnet_data1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_data7: 620 8 0 0 0 0 0 0 880 12 0 0 0 0 0 0
dummy0: 0 0 0 0 0 0 0 0 210 3 0 0 0 0 0 0
p2p0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r_rmnet_data6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r_rmnet_data3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r_rmnet_data8: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_data0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r_rmnet_data0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_data2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_data4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
lo: 2272 27 0 0 0 0 0 0 2272 27 0 0 0 0 0 0
r_rmnet_data5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_data6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r_rmnet_data2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PS:
1.wlan0 代表是 WiFi 接收发送的流量数值,单位为:bytes
获取电量
未完待续