认识 ADB
ADB:用于管理模拟器或真机状态的工具。说人话就是:ADB是PC和移动终端通信的桥梁。
它采用了C/S模型,由三部分组成。
adb client
client是运行在PC端的组件,可以在命令行中运行adb命令来调用该客户端,通常的ADB插件、DDMS、豌豆荚等工具都可以调用ADB。
每当我们发起一个ADB命令时,就会开启一个client程序,client开启后就会去检测后台是否已存在server程序在运行,如无存在则开启一个adb-server进程。我们常见的打开Android Studio开发工具时,会帮你自动开启一个client。
client与模拟器是一对多的关系,连接多个手机也只有一个client。client都是通过5037端口与adb-server进行通讯的。
adb daemon
daemon守护进程,该组件作为一个后台进程运行在模拟器/真实Android设备中。在PC命令行中中输入的ADB命令,通过Server与daemon的通信,将命令传至daemon,实际命令是在daemon中运行。
daemon使用端口的范围是5554-5585,每个模拟器/设备连接到PC端时,总会开启这样一个后台进程(client会帮助检查),并且为其分配了两个连续的端口,比如:
Emulator1, console: 5554
偶数端口用于控制台与终端设备进行连接交互
Emulator1, adb: 5555
奇数端口是用来Server与模拟器、手机进行连接通信的
因为每个设备都分一组两个端口,所以adb连接手机的最大数量为16。
adb server
Server,该组件管理客户端和后台程序之间的通信,作为一个后台的程序运行在开发PC端。当一个server开启的时候,会自动绑定并且监听5037端口,接收client通过该端口发送过来的命令。同时server还会对5555-5585间的奇数端口进行扫描,进行对已连接设备的定位。server将client中命令传至daemon。
ADB 通信原理
ADB组件是通过TCP/IP协议建立长连接实现通信的。其通信流程大致如下:
- ADB客户端启动后,会主动寻找并尝试连接ADB Server服务进程,如果Server未启动,则client启动一个server。
- 随后 client 与 server 通过本地端口5037进行通信。Server通过扫描5555—5585之间的奇数端口来搜寻模拟器或手机,一旦发现adb daemon,则通过该端口建立连接。
- Server可以从多个client接收ADB命令,然后将命令传至连接的多个daemon,在daemon中运行命令达到控制手机/模拟器的效果。
ADB命令
常用
1 | # 锁定手机 |
设备信息
KeyCode值 | 对应按键名 |
---|---|
亮度 | /sys/class/leds/lcd-backlight/brightness |
CPU | /sys/devices/system/cpu/cpu0/cpufreq |
GPU | /sys/class/ kgsl/kgsl-3d0/gpuclk |
限频 | cat /data/pmlist.config |
电流 | cat /sys/class/power_supply/battery/current_now |
获取设备信息 | cat /system/build.prop 【grep】 |
获取手机MAC地址 | cat /sys/class/net/wlan0/address |
查看wifi密码 | cat /data/misc/wifi/*.conf |
获取连接设备的IP地址 | ifconfig wlan0 |
查看连接设备的IP地址 | netcfg |
获取手机内存信息 | cat /proc/meminfo |
获取手机存储信息 | df |
获取手机内部存储信息 | df /data |
获取系统版本 | getprop ro.build.version.release |
获取系统api版本 | getprop ro.build.version.sdk |
获取手机设备型号 | getprop ro.product.model |
获取手机厂商名称 | getprop ro.product.brand |
列出设备上的输入法 | adb shell ime list -s |
查看Power | dumpsys power |
获取Android设备屏幕分辨率 | dumpsys window (或 grep mUnrestrictedScreen) |
WIFI | data/misc/wifi/wpa_supplicant.conf |
持有wake_lock | echo a> sys/power/wake_lock |
释放wake_lock | echo a> sys/power/wake_unlock |
查看Wakeup_source | cat sys/kernel/debug/wakeup_sources |
Display(关闭AD) | mv /data/misc/display/calib.cfg /data/misc/display/calib.cfg.bak 重启 |
进程、Service及状态
命令模式 | 说明 | 示例 |
---|---|---|
su root | 获取root权限 | 一般Android板子可以,手机一般不行 |
service list | 查看后台services信息 | |
dumpsys services [] | 查看正在运行的Services | |
dumpsys activity [] | 查看正在运行的Activity | |
procrank | 查看运行进程 | |
kill 366 | 关闭或杀掉进程 | |
ps | 列出当前运行的进程 | adb shell ps -x [PID] 查看指定进程状态 |
cat /proc/1460/maps | 查看进程的文件结构 | 1460进程的PID |
cat /proc/1460/status | 查看进程的状态 | 1460进程的PID |
关闭cabc | echo 0 > /sys/device/virtual/graphics/fb0/cabc_onoff | |
打开cabc | echo 3 > /sys/device/virtual/graphics/fb0/cabc_onoff |
KEYCODE表
KeyCode值 | 对应按键名 |
---|---|
0 | KEYCODE_UNKNOWN |
1 | KEYCODE_MENU |
2 | KEYCODE_SOFT_RIGHT |
3 | KEYCODE_HOME |
4 | KEYCODE_BACK |
5 | KEYCODE_CALL |
6 | KEYCODE_ENDCALL |
7 | KEYCODE_0 |
8 | KEYCODE_1 |
9 | KEYCODE_2 |
10 | KEYCODE_3 |
11 | KEYCODE_4 |
12 | KEYCODE_5 |
13 | KEYCODE_6 |
14 | KEYCODE_7 |
15 | KEYCODE_8 |
16 | KEYCODE_9 |
17 | KEYCODE_STAR |
18 | KEYCODE_POUND |
19 | KEYCODE_DPAD_UP |
20 | KEYCODE_DPAD_DOWN |
21 | KEYCODE_DPAD_LEFT |
22 | KEYCODE_DPAD_RIGHT |
23 | KEYCODE_DPAD_CENTER |
24 | KEYCODE_VOLUME_UP |
25 | KEYCODE_VOLUME_DOWN |
26 | KEYCODE_POWER |
27 | KEYCODE_CAMERA |
28 | KEYCODE_CLEAR |
29 | KEYCODE_A |
30 | KEYCODE_B |
31 | KEYCODE_C |
32 | KEYCODE_D |
33 | KEYCODE_E |
34 | KEYCODE_F |
35 | KEYCODE_G |
36 | KEYCODE_H |
37 | KEYCODE_I |
38 | KEYCODE_J |
39 | KEYCODE_K |
40 | KEYCODE_L |
41 | KEYCODE_M |
42 | KEYCODE_N |
43 | KEYCODE_O |
44 | KEYCODE_P |
45 | KEYCODE_Q |
46 | KEYCODE_R |
47 | KEYCODE_S |
48 | KEYCODE_T |
49 | KEYCODE_U |
50 | KEYCODE_V |
51 | KEYCODE_W |
52 | KEYCODE_X |
53 | KEYCODE_Y |
54 | KEYCODE_Z |
55 | KEYCODE_COMMA |
56 | KEYCODE_PERIOD |
57 | KEYCODE_ALT_LEFT |
58 | KEYCODE_ALT_RIGHT |
59 | KEYCODE_SHIFT_LEFT |
60 | KEYCODE_SHIFT_RIGHT |
61 | KEYCODE_TAB |
62 | KEYCODE_SPACE |
63 | KEYCODE_SYM |
64 | KEYCODE_EXPLORER |
65 | KEYCODE_ENVELOPE |
66 | KEYCODE_ENTER |
67 | KEYCODE_DEL |
68 | KEYCODE_GRAVE |
69 | KEYCODE_MINUS |
70 | KEYCODE_EQUALS |
71 | KEYCODE_LEFT_BRACKET |
72 | KEYCODE_RIGHT_BRACKET |
73 | KEYCODE_BACKSLASH |
74 | KEYCODE_SEMICOLON |
75 | KEYCODE_APOSTROPHE |
76 | KEYCODE_SLASH |
77 | KEYCODE_AT |
78 | KEYCODE_NUM |
79 | KEYCODE_HEADSETHOOK |
80 | KEYCODE_FOCUS |
81 | KEYCODE_PLUS |
82 | KEYCODE_MENU |
83 | KEYCODE_NOTIFICATION |
84 | KEYCODE_SEARCH |
常用python+adb指令集
1 | # 查看包名和activity |