1、查看设备信息

连接手机,终端执行命令adb devices,确保手机能连上电脑。

(1)方法一:通过adb devices -l查看设备信息;

(2)方法二:(推荐)通过adb shell getprop | grep product查看设备信息:

而更详细的信息可以使用adb shell getprop查看全部信息。

2、安装/卸载 apk 应用

安装:adb install xxx/xx.apk或者adb install -r xxx/xx.apk,其中-r可选,表示保留数据和缓存文件重新安装,相当于强制覆盖安装。

卸载:adb uninstall com.package或者adb uninstall -k com.package,其中com.package是应用包名,可选参数-k表示保留配置和缓存文件。

3、导入/导出文件

导入:adb push xxx/xxx /sdcard/xxx

导出:adb pull /sdcard/xxx /xxx/xxx

4、adb 抓取日志

通过adb logcat可以抓取手机的实时日志,但是这样抓取的内容会非常非常之多,所以我们可以通过adb logcat | grep 'xxx'。前面的两个命令都会把所有结果输出到命令行中,实际使用中,我们往往需要导出保存到 log 文件中,则可以使用

adb logcat -v time > /xxx/xx.log

或者:

adb logcat -v time | grep 'xxx' > /xxx/xx.log

其中-v选项可以设置日志的输出信息。

5、获取当前 activity

(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;其二,在高版本的安卓系统中,运行此命令将无法获取到想要的结果。

6、启动 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。

7、获取应用启动时间

执行adb shell am start -W com.package/com.activity,会返回三个时间:ThisTime、TotalTime、WaitTime。每个时间含义都不同,一般以 TotalTime 为准。

ThisTime:一般和 TotalTime 时间一样,除非在应用启动时开了一个透明的 Activity 预先处理一些事再显示出主 Activity,这样将比 TotalTime 小。

TotalTime:应用的启动时间,包括创建进程 +Application 初始化 +Activity 初始化到界面显示,但不包括前一个应用 Activity pause 的时间。

WaitTime:一般比 TotalTime 大点,包括前一个应用 Activity pause 的时间和新应用启动的时间,以及系统影响的耗时。

8、查看应用的 cpu 和内存占用情况

8.1 查看 cpu

(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 流量等值

8.2 查看内存

输入: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查看。

9、获取单个应用的电量信息

从 android 5.0 开始,可以通过adb shell dumpsys batterystats com.package获取电量的相关信息。

10、清除应用的数据和缓存

执行:adb shell pm clear com.package

11、截取屏幕(截屏)和(录制屏幕)录屏

11.1 截屏

(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 可能用此方法保存的图片是损坏的,因此推荐使用方法一。

11.2 录屏

对于 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 视频格式。

12、input 模拟事件

通过adb shell input --help我们可以看到,input 相关的命令有以下几种:

text (Default: touchscreen)

keyevent [--longpress] ... (Default: keyboard)

tap (Default: touchscreen)

swipe [duration(ms)] (Default: touchscreen)

draganddrop [duration(ms)] (Default: touchscreen)

press (Default: trackball)

roll (Default: trackball)

tmode

text:输入文本

keyevent:功能键

tap:点击

swipe:滑动 (长按)

draganddrop:拖拽

press:发送点击按压命令

roll:发送滚动命令

12.1 keyevent 事件

发送事件: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"

12.2 text 发送文本

在设备光标处于编辑框时,通过adb shell text input "hello"可以将内容填写到编辑框,模拟键盘输入。

12.3 tap 点击坐标点

点击 x,y 坐标点位置:adb shell input tap 50 100 # 点击坐标点 (50, 100)

12.4 swipe 滑动 (长按)

滑动坐标点 (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

13、通过 WiFi 连接设备

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。

14、其它一些常用命令

查看屏幕分辨率: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