启动/停止
adb kill-server 停止adb server
adb start-server 启动adb server
设备连接
adb shell 连接设备
adb devices 获取设备列表及设备状态
adb get-state 获取设备状态
device : 设备正常连接
offline: 连接出现异常,设备无响应
unknown: 没有连接设备
unauthorized: 设备未授权允许调试
安装/卸载软件
运行命令后如果见到类似如下输出(状态为Success)代表安装成功
[100%] /data/local/tmp/1.apk
pkg:/data/local/tmp/1.apk
Success
而如果状态为 Failure则表示安装失败,比如:
[100%] /data/local/tmp/map-20160831.apk
pkg: /data/local/tmp/map-20160831.apk
Failure [INSTALL_FAILED_ALREADY_EXISTS]
应用列表
adb shell pm list packages [-f] [-d] [-e][-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
无 所有应用
-f 显示应用关联的 apk 文件
-d 只显示 disabled 的应用
-e 只显示 enabled 的应用
-s 只显示系统应用
-3 只显示第三方应用
-I 显示应用的 installer
-u 包含已卸载应用
<FILTER> 包名包含 <FILTER> 字符串
adb shell pm list packages 列出手机装的所有app的包名
adb shell pm list packages -s 列出系统应用的所有包名
adb shell pm list list packages -3 列出除了系统应用的第三方应用包名
查看前台Activity/Service
adb shell dumpsys activity activities | grep mFocusedActivity
adb shell dumpsys activity services [<packagename>]
与应用交互
主要是使用am<command>命令,常用的 <command>如下:
command | 含义 |
start [options] <INTENT> | 启动 <INTENT>指定的 Activity |
startservice [options] <INTENT> | 启动 <INTENT>指定的 Service |
broadcast [options] <INTENT> | 发送 <INTENT> 指定的广播 |
force-stop <packagename> | 停止 <packagename>相关的进程 |
<INTENT>参数很灵活,和写 Android程序时代码里的 Intent相对应。主要是使用 am<command>命令,常用的 <command>如下:
参数 | 含义 |
-a <ACTION> | 指定 action,比如android.intent.action.VIEW |
c <CATEGORY> | 指定 category,比如android.intent.category.APP_CONTACTS |
-n <COMPONENT> | 指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity |
例如:
adb shell am start -n com.alina.demo/.ui.DemoActivity 启动应用
adb shell am force-stop <packagename> 强制停止应用
adb shell am startservice [options] <INTENT> 调起Service
adb shell am broadcast [options] <INTENT> 发送广播
adb shell pm clear <packagename> 清除应用数据与缓存
设备状态
adb shell dumpsys battery 电池状况
adb gegt-serialno 获取序列号
adb shell cat /sys/class/net/elan0/address 获取MAC地址
adb shell getprop ro.build.version.release 查看Android系统版本
adb shell wm size 查看屏幕分辨率
adb shell wm density 查看屏幕密度
adb shell dumpsys window displays 显示屏参数
adb shell settings get secure android_id android_id
adb shell dumpsys iphonesubinfo Android4.4及以下版本获取IMEI
adb shell
su
service call iphonesubinfo 1 Android5.0及以上版本获取I
adb shell getprop ro.build.version.release Android 系统版本
adb shell ifconfig | grep Mask IP 地址
adb shell cat /proc/cpuinfo CPU 信息
adb shell cat /proc/meminfo 内存信息
模拟按键/输入
adb shell input keyevent <keycode>
3 HOME 键
4 返回键
5 打开拨号应用
6 挂断电话
24 增加音量
25 降低音量
26 电源键
27 拍照(需要在相机应用里)
64 打开浏览器
82 菜单键
85 播放/暂停
86 停止播放
87 播放下一首
88 播放上一首
122 移动光标到行首或列表顶部
123 移动光标到行末或列表底部
126 恢复播放
127 暂停播放
164 静音
176 打开系统设置
187 切换应用
207 打开联系人
208 打开日历
209 打开音乐
210 打开计算器
220 降低屏幕亮度
221 提高屏幕亮度
223 系统休眠
224 点亮屏幕
231 打开语音助手
276 如果没有 wakelock 则让系统休眠
adb shell input swipe 起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标
adb shell input text ~
日志
[adb] logcat [<option>] ...[<filter-spec>] ..
Android的日志分为如下几个优先级(priority):
V —— Verbose(最低,输出得最多)
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal
S —— Silent(最高,啥也不输出)
按某级别过滤日志则会将该级别及以上的日志输出。
比如,命令:
adb logcat *:W
会将 Warning、Error、Fatal和 Silent 日志输出。
按 tag和级别过滤日志
<filter-spec>可以由多个 <tag>[:priority]组成。
adb logcat ActivityManager:I MyApp:D *:S
表示输出 tag ActivityManager的 Info以上级别日志,输出 tag MyApp的 Debug以上级别日志,及其它 tag的 Silent级别日志(即屏蔽其它 tag日志)。
日志格式
可以用 adb logcat -v <format>选项指定日志输出格式。
日志支持按以下几种 <format>:
l brief
默认格式。格式为:
<priority>/<tag>(<pid>): <message>
示例:
D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
格式为:
<priority>(<pid>) <message>
示例:
D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
格式为:
<priority>/<tag>: <message>
示例:
D/HeadsetStateMachine: Disconnected process message: 10, size: 0
格式为:
<message>
示例:
Disconnected process message: 10, size: 0
l time
格式为:
<datetime> <priority>/<tag>(<pid>): <message>
示例:
08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
lthreadtime
格式为:
<datetime> <pid> <tid> <priority> <tag>: <message>
示例:
08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
llong
格式为:
[ <datetime> <pid>:<tid> <priority>/<tag> ]
<message>
示例:
[ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ]
Disconnected process message: 10, size: 0
指定格式可与上面的过滤同时使用。比如:
adb logcat -v long ActivityManager:I *:S
adb logcat -c
adb shell dmesg
<6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs
<6>[14201.685525] PM: early resume of devices complete after 0.838 msecs
<6>[14201.753642] PM: resume of devices complete after 68.106 msecs
中括号里的[14201.684016]代表内核开始启动后的时间,单位为秒。
通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory那一行前面的时间就是。
状态栏和导航栏的显示隐藏
本节所说的相关设置对应Cyanogenmod里的「扩展桌面」。
命令:
adb shell settings put global policy_control <key-values>
<key-values>可由如下几种键及其对应的值组成,格式为<key1>=<value1>:<key2>=<value2>。
key | 含义 |
immersive.full | 同时隐藏 |
immersive.status | 隐藏状态栏 |
immersive.navigation | 隐藏导航栏 |
immersive.preconfirms | ? |
这些键对应的值可则如下值用逗号组合:
value | 含义 |
apps | 所有应用 |
* | 所有界面 |
packagename | 指定应用 |
-packagename | 排除指定应用 |
例如:
adb shell settings put global policy_control immersive.full=*
表示设置在所有界面下都同时隐藏状态栏和导航栏。
adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
表示设置在包名为com.package1和 com.package2的应用里隐藏状态栏,在除了包名为 com.package3的所有应用里隐藏导航栏。
实用功能
adb exec-out screencap -p > sc.png 截图保存到电脑
adb shell screencap -p /sdcard/sc.png 截图保存到设备里
adb shell screenrecord /sdcard/filename.mp4 录制屏幕
adb shell screenrecord –help
可以使用 adb shell screencap -h查看 screencap 命令的帮助信息,下面是两个有意义的参数及含义:
参数 | 含义 |
-p | 指定保存文件为 png 格式 |
-d display-id | 指定截图的显示屏编号(有多显示屏的情况下) |
另外一种一行命令截图并保存到电脑的方法:
Linux和 Windows
adb shell screencap -p | sed "s/\r$//" > sc.png
Mac OS X
adb shell screencap -p | gsed "s/\r$//" > sc.png
重新挂载 system分区为可写
1. 进入 shell并切换到 root 用户权限命令:
adb shell
su
2.
查看当前分区挂载情况
命令:
mount
3.
重新挂载
mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system
查看连接过的 WiFi 密码
adb shell
su
cat /data/misc/wifi/*.conf
重启手机
adb reboot
使用 Monkey 进行压力测试
adb shell monkey -p <packagename> -v 500
表示向 <packagename> 指定的应用程序发送 500 个伪随机事件
开启/关闭 WiFi
adb root
adb shell svc wifi enable
adb shell svc wifi disable
若执行成功,输出为空;若未取得 root 权限执行此命令,将执行失败,输出 Killed
查看进程
adb shell ps
列名 | 含义 |
USER | 所属用户 |
PID | 进程 ID |
PPID | 父进程 ID |
NAME | 进程名 |
查看实时资源占用情况
adb shell top
关闭adb
adb shell settings put global adb_enabled 0