连接手机,终端执行命令adb devices
,确保手机能连上电脑。
(1)方法一:通过adb devices -l
查看设备信息;
(2)方法二:(推荐)通过adb shell getprop | grep product
查看设备信息:
而更详细的信息可以使用adb shell getprop
查看全部信息。
安装:adb install xxx/xx.apk
或者adb install -r xxx/xx.apk
,其中-r
可选,表示保留数据和缓存文件重新安装,相当于强制覆盖安装。
卸载:adb uninstall com.package
或者adb uninstall -k com.package
,其中com.package
是应用包名,可选参数-k
表示保留配置和缓存文件。
导入:adb push xxx/xxx /sdcard/xxx
导出:adb pull /sdcard/xxx /xxx/xxx
通过adb logcat
可以抓取手机的实时日志,但是这样抓取的内容会非常非常之多,所以我们可以通过adb logcat | grep 'xxx'
。前面的两个命令都会把所有结果输出到命令行中,实际使用中,我们往往需要导出保存到 log 文件中,则可以使用
adb logcat -v time > /xxx/xx.log
或者:
adb logcat -v time | grep 'xxx' > /xxx/xx.log
其中-v
选项可以设置日志的输出信息。
(1)方法一 (推荐):adb shell dumpsys activity | grep "Run #"
或者adb shell dumpsys activity | grep -i run
,其中最大的编号为当前运行的前台 activity,其它为后台 resume 运行的 activity。
adb shell dumpsys activity | grep "Run #"
Run #8: ActivityRecord{58eafc u0 com.tencent.mm/.ui.LauncherUI t144}
Run #7: ActivityRecord{77d375b u0 com.android.mms/.ui.ConversationList t143}
Run #6: ActivityRecord{18e093 u0 com.meizu.connectivitysettings/.Settings$WifiProxySettingsActivity t132}
Run #5: ActivityRecord{dc8c307 u0 com.meizu.connectivitysettings/.Settings$WifiInfoSettingsActivity t132}
Run #4: ActivityRecord{f99b13b u0 com.meizu.connectivitysettings/.Settings t132}
Run #3: ActivityRecord{9d3e0da u0 com.android.settings/.Settings t132}
Run #2: ActivityRecord{71a02cb u0 com.meizu.mstore/.page.search.SearchActivity t134}
Run #1: ActivityRecord{c916ac5 u0 com.meizu.mstore/com.meizu.flyme.appcenter.activitys.AppMainActivity t134}
Run #0: ActivityRecord{b1bf6ad u0 com.android.incallui/.InCallActivity t129}
Run #0: ActivityRecord{969f985 u0 com.meizu.flyme.launcher/.Launcher t104}
如上,Run #8 那一行就是当前我打开的微信首页 activity:com.tencent.mm/.ui.LauncherUI,其它为后台运行的应用。
(2)方法二:adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
(3)方法三 (不推荐):adb shell dumpsys activity | grep "mFoc"
。
不推荐方法三的原因有两个:其一,只能获取得到当前前台的 activity,而获取不到 resume 后台运行的 activity;其二,在高版本的安卓系统中,运行此命令将无法获取到想要的结果。
启动:adb shell am start -n com.package/com.activity
,执行命令,将会启动应用,并跳转到指定的 activity 页面。
退出:adb shell am force-stop com.package
,直接退出应用 (非后台)。
注意:如果想要后台应用,可以通过模拟按键事件,执行点击 Home 键adb shell input keyevent KEYCODE_HOME
或adb shell input keyevent 3
。
执行adb shell am start -W com.package/com.activity
,会返回三个时间:ThisTime、TotalTime、WaitTime。每个时间含义都不同,一般以 TotalTime 为准。
(1)方法一:
低版本 Android(Android N 及之前):adb shell top -n 1 | sed -n '4,17p'
高版本 ANdroid(Android O 及之后):adb shell top -n 1 | sed -n '5,15p'
(2)方法二:adb shell dumpsys cpuinfo
(3)方法三 (不推荐):adb shell top -m 10 -s cpu -n 2
,其中,-m 10
选项表示获取前 10 行数据,-s cpu
表示根据 cpu 排序 (其它值为:vss,rss,thr),-n 2
表示执行 2 次。
参数含义:
PID 进程id
PR 优先级
CPU% 当前瞬时CPU占用率
S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
#THR 程序当前所用的线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
UID 进程所有者的用户id
Name 进程的名称
注意:之所以不推荐方法三,是因为在高版本 Android 中,top 命令的选项已经不同于低版本 Android 的了,执行方法三的命令会直接报错:top: not integer: cpu
。具体情况在实际使用中,可以先使用adb shell top --help
查看 top 命令支持哪些选项参数。
注意:不同方法可能获取到的 cpu 数据将会差别很大。瞬时数据以 top 为准;而 cpuinfo 取的是一段时间的平均 cpu 值,而且受其他命令影响大,尤其是 dumpsys meminfo,所以一般优先执行 dumpsys cpuinfo。建议用 busybox top -b -n 1,单次抓取,比系统带的快,计算精度高一位。
参考:android 端取 cpu,fps,men,wifi/gprs 流量等值
输入:adb shell dumpsys meminfo com.package
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
如果需要查看设备系统总内存及占用情况,可以使用adb shell cat /proc/meminfo
查看。
从 android 5.0 开始,可以通过adb shell dumpsys batterystats com.package
获取电量的相关信息。
执行:adb shell pm clear com.package
(1)方法一 (推荐):
执行:adb shell screencap -p /sdcard/1.png
保存图片到设备 sdcard
然后再执行adb pull /sdcard/1.png ~/xxx/
把截图 pull 到电脑上。
(2)方法二:
Android 7.0 及以上:adb shell screencap -p > screen.png
Android 6.0:adb exec-out screencap -p > screen.png
或者 adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png
注意:低版本 Android 可能用此方法保存的图片是损坏的,因此推荐使用方法一。
对于 Android4.4 以上的手机,系统自带了一个命令 screenrecord,我们可以很方便的使用。
录屏命令:adb shell screenrecord /sdcard/test.mp4
命令执行后会一直录制 180s,按下 ctrl+c 可以提前结束录制。
通过adb shell screenrecord --help
命令我们可以查看到--size
,--bit-rate
、--bugreport
,--time-limit
,--verbose
,--help
参数--size
设定视频分辨率 (默认是手机设备的分辨率):
adb shell screenrecord --size 1280*720 /sdcard/test.mp4
# 录屏,保存视频的分辨率为 1280*720
参数--bit-rate
设定视频比特率 (默认 4M/s,对应数字:4000000):
adb shell screenrecord --bit-rate 2000000 /sdcard/test.mp4
# 录屏,保存视频的比特率为 2M/s
参数–time-limit N
设定录制时间:
adb shell screenrecord /sdcard/test.mp4 --time-limit 10
# 录屏 10s
注意:仅支持 mp4 视频格式。
通过adb shell input --help
我们可以看到,input 相关的命令有以下几种:
text <string> (Default: touchscreen)
keyevent [--longpress] <key code number or name> ... (Default: keyboard)
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll <dx> <dy> (Default: trackball)
tmode <tmode>
text:输入文本
keyevent:功能键
tap:点击
swipe:滑动 (长按)
draganddrop:拖拽
press:发送点击按压命令
roll:发送滚动命令
发送事件:adb shell input keyevent key_code
发送文本信息:adb shell input text "xxx"
例如:
adb shell input keyevnet 3
# 点击 home 键操作
adb shell input keyevent 4
# 点击返回键操作
adb shell input keyevent 8
# for key '1'
adb shell input keyevent 29
# for key 'A'
adb shell input text “hello”
# 发送文本 “hello”
常用的 key_code 主要有:
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"
85 --> "TAG_LAST_KEYCODE"
在设备光标处于编辑框时,通过adb shell text input "hello"
可以将内容填写到编辑框,模拟键盘输入。
点击 x,y 坐标点位置:adb shell input tap 50 100
# 点击坐标点 (50, 100)
滑动坐标点 (x1,y1) 到 (x2,y2):adb shell input swipe 10 20 100 200
# 从 (10,20) 滑动到 (100,200)
也可以添加滑动时间 (单位:ms):adb shell input swipe 10 20 100 200 500
# 从 (10,20) 滑动到 (100,200),滑动时间 500ms
长按操作:
adb shell input swipe 100 200 100 200 1200
# 从 (100,200) 滑动到 (100,200),滑动时间 1200ms,相当于长按一个坐标点 1200ms
1.手机通过 USB 连接上电脑,然后输入:adb devices
,确保设备已经连接上电脑。
2.确保设备和 PC 连接同一个 WiFi 网络环境,并查看 Android 设备的 IP 地址,然后输入:adb connect xx.xx.xx.xx
。
(1)如果现实连接成功,则断开 USB,即可通过 adb 继续操作设备;
(2)如果提示 connect 拒绝,输入adb tcpip 5555
重启 adb,然后再次执行adb connect xx.xx.xx.xx
。
3.断开连接:adb disconnect
。
查看屏幕分辨率:adb shell wm size
或者 adb shell dumpsys window displays
查看系统版本:adb shell getprop ro.build.version.release
查看系统 api 版本:adb shell getprop ro.build.version.sdk
查看手机 IP 地址:adb shell ifconfig | grep 'inet addr:' | sed -n '2p' | awk '{print $2}' | cut -d ':' -f 2