学习总结

官方说明https://developer.android.google.cn/studio/command-line/adb?hl=zh-cn

不错的使用方法https://github.com/mzlogin/awesome-adb

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。它是一种客户端-服务器程序,包括以下三个组件:

  • 客户端:用于发送命令。客户端在开发机器上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
  • **守护程序 (adbd)**:用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
  • 服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。

安装adb

1
sudo apt install adb

获取手机的序列号

这个用的多

1
2
3
adb get-serialno #方法一

adb shell getprop ro.serialno #方法二

ADB获取手机信息

1、获取手机系统版本

1
adb shell getprop ro.build.version.release

2、获取手机系统api版本

1
adb shell getprop ro.build.version.sdk

3、获取手机设备型

1
adb -d shell getprop ro.product.model

5、获取手机厂商名称

1
adb -d shell getprop ro.product.brand

#### 6、获取手机的IME

有三种方式,由于手机和系统的限制,不一定获取到

1
1、 adb shell dumpsys iphonesubinfo

其中Device ID即为IMEI号

1
2、 adb shell getprop gsm.baseband.imei
1
3、 service call iphonesubinfo 1 

此种方式,需要自己处理获取的信息得到

7、获取手机mac地址

1
adb shell cat /sys/class/net/wlan0/address

8、获取手机内存信息

1
adb shell cat /proc/meminfo

9、获取手机存储信息

1
adb shell df

10、获取手机分辨率

1
adb shell "dumpsys window | grep mUnrestrictedScreen"

11、获取手机物理密度

1
adb shell wm density

12、获取IP 地址

1
adb shell ifconfig | grep Mask

13、CPU信息

1
adb shell cat /proc/cpuinfo

14、内存信息

1
adb shell cat /proc/meminfo

查看已经连接的设备

1
2
3
4
5
6
adb devices

# 演示
>>adb devices
List of devices attached
6f0efe58 device

无线连接

开启监听的端口,下面命令:这个是开启让设备在 5555 端口监听 TCP/IP 连接

1
adb tcpip 5555

断开 USB 连接

获取您的设备 IP 地址

1
2
3
4
5
6
adb shell ip route | awk '{print $9}'

演示
>>> adb shell ip route | awk '{print $9}'
10.104.83.11
192.168.248.112

通过 IP 地址连接设备

1
2
3
4
5
6
7
8
9
adb connect ip:端口

演示
>>> adb connect 192.168.248.112:5555 # 连接
connected to 192.168.248.112:5555

>>> adb devices # 确定连接的状态
List of devices attached
192.168.248.112:5555 device

断开无线连接

1
2
3
4
adb disconnect ip:端口

>>> adb disconnect 192.168.248.112:5555
disconnected 192.168.248.112:5555

查看应用列表

命令

1
adb shell pm list packages 参数

相关的参数

参数 显示列表
所有应用
-f 显示应用关联的 apk 文件
-d 只显示 disabled 的应用
-e 只显示 enabled 的应用
-s 只显示系统应用
-3 只显示第三方应用
-i 显示应用的 installer
-u 包含已卸载应用
<FILTER> 包名包含 <FILTER> 字符串

查看全部的程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
adb shell pm list packages 

#演示
>>> adb shell pm list packages
package:com.miui.screenrecorder
package:com.github.uiautomator
package:cn.xiaochuankeji.tieba
package:com.android.cts.priv.ctsshim
package:com.quark.browser
package:com.google.android.youtube
package:com.miui.contentextension
package:com.qualcomm.qti.qcolor
package:com.android.internal.displa
......................................

安装 APK

1
adb install 文件

卸载应用

1
adb uninstall 程序名 

清除应用数据与缓存

1
adb shell pm clear 程序名 

强制停止应用

1
adb shell am force-stop 程序名 

复制设备里的文件到电脑

1
adb pull <设备里的文件路径> [电脑上的目录]

复制电脑里的文件到设备

1
adb push <电脑上的文件路径> <设备里的目录>

模拟按键/输入

电源键

命令:

1
adb shell input keyevent 26

执行效果相当于按电源键。

菜单键

命令:

1
adb shell input keyevent 82

HOME 键

命令:

1
adb shell input keyevent 3

返回键

命令:

1
adb shell input keyevent 4

音量控制

增加音量:

1
adb shell input keyevent 24

降低音量:

1
adb shell input keyevent 25

静音:

1
adb shell input keyevent 164

媒体控制

播放/暂停:

1
adb shell input keyevent 85

停止播放:

1
adb shell input keyevent 86

播放下一首:

1
adb shell input keyevent 87

播放上一首:

1
adb shell input keyevent 88

恢复播放:

1
adb shell input keyevent 126

暂停播放:

1
adb shell input keyevent 127

点亮/熄灭屏幕

可以通过上文讲述过的模拟电源键来切换点亮和熄灭屏幕,但如果明确地想要点亮或者熄灭屏幕,那可以使用如下方法。

点亮屏幕:

1
adb shell input keyevent 224

熄灭屏幕:

1
adb shell input keyevent 223

滑动解锁

如果锁屏没有密码,是通过滑动手势解锁,那么可以通过 input swipe 来解锁。

命令(参数以机型 Nexus 5,向上滑动手势解锁举例):

1
adb shell input swipe 300 1000 300 500

参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标

输入文本

在焦点处于某文本框时,可以通过 input 命令来输入文本。

命令:

1
adb shell input text hello

现在 hello 出现在文本框了。

重启手机

命令:

1
adb reboot

查看进程

命令:

1
adb shell ps

输出示例:

1
2
3
4
5
6
7
8
USER     PID   PPID  VSIZE  RSS     WCHAN    PC        NAME
root 1 0 8904 788 ffffffff 00000000 S /init
root 2 0 0 0 ffffffff 00000000 S kthreadd
...
u0_a71 7779 5926 1538748 48896 ffffffff 00000000 S com.sohu.inputmethod.sogou:classic
u0_a58 7963 5926 1561916 59568 ffffffff 00000000 S org.mazhuang.boottimemeasure
...
shell 8750 217 10640 740 00000000 b6f28340 R ps

各列含义:

列名 含义
USER 所属用户
PID 进程 ID
PPID 父进程 ID
NAME 进程名

查看实时资源占用情况

命令:

1
adb shell top

输出示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
User 0%, System 6%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 21 + Idle 280 + IOW 0 + IRQ 0 + SIRQ 3 = 307

PID PR CPU% S #THR VSS RSS PCY UID Name
8763 0 3% R 1 10640K 1064K fg shell top
131 0 3% S 1 0K 0K fg root dhd_dpc
6144 0 0% S 115 1682004K 115916K fg system system_server
132 0 0% S 1 0K 0K fg root dhd_rxf
1731 0 0% S 6 20288K 788K fg root /system/bin/mpdecision
217 0 0% S 6 18008K 356K fg shell /sbin/adbd
...
7779 2 0% S 19 1538748K 48896K bg u0_a71 com.sohu.inputmethod.sogou:classic
7963 0 0% S 18 1561916K 59568K fg u0_a58 org.mazhuang.boottimemeasure
...

各列含义:

列名 含义
PID 进程 ID
PR 优先级
CPU% 当前瞬间占用 CPU 百分比
S 进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
#THR 线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY 调度策略优先级,SP_BACKGROUND/SPFOREGROUND
UID 进程所有者的用户 ID
NAME 进程名

top 命令还支持一些命令行参数,详细用法如下:

1
2
3
4
5
6
7
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
-m num 最多显示多少个进程
-n num 刷新多少次后退出
-d num 刷新时间间隔(单位秒,默认值 5)
-s col 按某列排序(可用 col 值:cpu, vss, rss, thr)
-t 显示线程信息
-h 显示帮助文档

查看进程 UID

有两种方案:

  1. adb shell dumpsys package <packagename> | grep userId=

    如:

    1
    2
    $ adb shell dumpsys package org.mazhuang.guanggoo | grep userId=
    userId=10394
  2. 通过 ps 命令找到对应进程的 pid 之后 adb shell cat /proc/<pid>/status | grep Uid

    如:

    1
    2
    3
    4
    5
    6
    $ adb shell
    gemini:/ $ ps | grep org.mazhuang.guanggoo
    u0_a394 28635 770 1795812 78736 SyS_epoll_ 0000000000 S org.mazhuang.guanggoo
    gemini:/ $ cat /proc/28635/status | grep Uid
    Uid: 10394 10394 10394 10394
    gemini:/ $

    其它

如下是其它常用命令的简单描述,前文已经专门讲过的命令不再额外说明:

命令 功能
cat 显示文件内容
cd 切换目录
chmod 改变文件的存取模式/访问权限
df 查看磁盘空间使用情况
grep 过滤输出
kill 杀死指定 PID 的进程
ls 列举目录内容
mount 挂载目录的查看和管理
mv 移动或重命名文件
ps 查看正在运行的进程
rm 删除文件
top 查看进程的资源占用情况