转载自:知乎:木头人
常用命令用于速查,都是经常需要用到的,没有接触过adb命令从第二节开始看,对每个命令有详细解释。
1. 常用命令:
1 | adb devices #查看连接设备 |
2.1 连接设备
adb [-d|-e|-s
连接指定设备
参数:
-d 指定当前唯一通过USB 连接的Android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s
command 为所需对设备执行的命令
示例:
1 | $adb devices |
adb devices 查看已连接的设备信息, 上面已经连接3台设备。
2.2 查看信息
2.2.1 查看版本设备
adb version 查看adb 版本信息
adb devices 查看adb 连接设备
示例:
1 | $adb devices |
注意:offline 表示设备未连接成功或无响应,device 设备已连接
adb shell getprop ro.product.model 查看设备型号
adb get-serialno 获取设备序列号
adb bugreport 查看bug 报告
adb logcat 查看日志
adb shell wm size 查看屏幕分辨率
adb shell wm density 查看屏幕密度
2.2.2 查看应用信息
adb shell pm list packages 列出手机装的所有app 的包名
adb shell pm list packages -s 列出系统应用的所有包名
adb shell pm list packages -3 列出除了系统应用的第三方应用包名
adb shell pm list packages | find “test” win 列出手机装带有的test的包
adb shell pm list packages | grep ‘test’ linux 列出手机装带有的test的包
adb shell cat */sys/class/net/wlan0/address* 获取MAC 地址, 根据系统版本参数可能不同
adb shell getprop ro.build.version.release 查看Android 系统版本
adb shell dumpsys activity services [
2.3 app 安装和卸载
2.3.1 app 安装:
adb install
adb install -r *test.apk* 保留数据和缓存文件,重新安装apk
adb install -s *test.apk* 安装apk 到sd 卡
2.3.2 app 卸载
adb uninstall
示例:
1 | $adb uninstall cn.com.test.mobile |
2.4 启动停止服务
adb start-server
启动adb 服务,基本不会用到,因为只要设备连接正确,会自动启动adb server
adb kill-server
停止adb server
adb -P
指定adb server 的网络端口port (默认为5037)启动服务
2.5 与应用交互
adb shell pm clear
清除应用数据与缓存
示例:
1 | $adb shell pm clear cn.com.test.mobile |
adb shell am force-stop
强制停止应用
示例:强制停止微信
1 | $adb shell am force-stop com.tencent.mm |
adb shell am
command 命令详解
command 用途
start [options]启动 指定的 Activity
startservice [options]启动 指定的 Service
broadcast [options]发送 指定的广播
force-stop停止 相关的进程
-a
指定 action,如android.intent.action.VIEW
-c指定 category,如android.intent.category.APP_CONTACTS
-n指定完整 component 名,用于明确指定启动哪个 Activity,如
com.example.app/.ExampleActivity
2.5.1 启动 Activity
adb shell am start [options]
示例:
1 | #指定完整 component 名,用于明确指定启动哪个Activity |
2.5.2 启动 Service
adb shell am startservice [options]
示例: 表示调起微信的某 Service。
1 | $adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService |
2.5.3 发送广播
可以向所有组件广播,也可以只向指定组件广播。
adb shell am broadcast [options]
示例:
1 | #向所有组件广播 BOOT_COMPLETED (开机广播) |
系统预定义的广播:
Android 系统预定义广播
2.5.4 强制停止应用
adb shell am force-stop
示例:
1 | # 查询出包名 |
2.6 文件管理
2.6.1 复制设备里的文件到电脑
adb pull <设备里的文件路径> [电脑上的目录]
示例:
1 | $adb pull /sdcard/abc.mp4 ~/tmp/ |
小技巧:设备上的文件路径可能需要 root 权限才能访问,如果你的设备已经 root 过,可以先使用 adb shell 和 su 命令在 adb shell 里获取 root 权限后,先 cp /path/on/device /sdcard/filename 将文件复制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc。
2.6.2 复制电脑里的文件到设备
adb push <电脑上的文件路径> <设备里的目录>
示例:
1 | $adb push e:/ss.au3 /data/local/tmp/ |
小技巧:设备上的文件路径普通权限可能无法直接写入,如果你的设备已经 root 过,可以先 adb push /path/on/pc /sdcard/filename,然后 adb shell 和 su 在 adb shell 里获取 root 权限后,cp /sdcard/filename /path/on/device
2.7 使用ADB命令模拟按键/输入
adb shell input keyevent
keycode位操作参数,不同的 keycode 能实现不同的功能
完整的功能见:https://developer.android.com/reference/android/view/KeyEvent.html
keycode 能实现不同的功能,对应的编码如下:
keycode 列表
示例:
1 | $adb shell input keyevent 26 #电源键 |
2.8 查看日志
2.8.1 Android 日志
[adb] logcat [
*按级别过滤日志*
按某级别过滤日志则会将该级别及以上的日志输出,Android 日志的优先级如下:
V —— Verbose(最低,输出得最多)
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal
S —— Silent(最高,啥也不输出)
示例:输出W之上的日志,W,E,F,S
1 | $adb logcat *:W |
*按 tag 和级别过滤日志*
示例:输出 tag ActivityManager 的 I 以上级别日志,输出tag MyApp的D 以上级别日志,及其它 tag 的 S 级别日志(即屏蔽其它 tag 日志)。
1 | $adb logcat ActivityManager:I MyApp:D *:S |
*日志格式*
adb logcat -v
指定日志输出格式
示例:
1 | $adb logcat -v <format> 指定日志输出格式 |
*清空日志*
1 | $adb logcat -c |
2.8.2 内核日志
1 | $adb shell dmesg |
查看内核日志
2.9 查看设备信息
2.9.1 型号
1 | $adb shell getprop ro.product.model |
2.9.2 电池状况
1 | $adb shell dumpsys battery |
2.9.3 屏幕分辨率
1 | $adb shell wm size |
2.9.4 屏幕密度
1 | $adb shell wm density |
2.9.5 显示屏参数
1 | $adb shell dumpsys window displays |
2.9.6 android_id
1 | $adb shell settings get secure android_id |
2.9.7 IMEI
1 | $adb shell dumpsys iphonesubinfo |
2.9.8 Android 系统版本
1 | $adb shell getprop ro.build.version.release |
2.9.9 IP 地址
1 | $adb shell ifconfig | find “Mask” |
2.9.10 Mac 地址
1 | $adb shell cat /sys/class/net/wlan0/address # 设备不同可能地址不同 |
2.9.11 CPU 信息
1 | $adb shell cat /proc/cpuinfo |
2.9.12 内存信息
1 | $adb shell cat /proc/meminfo |
2.9.13更多硬件与系统属性
1 | $adb shell cat /system/build.prop |
adb shell getprop <属性名>
也可以
1 | $adb shell cat /system/build.prop | grep ro.product.cpu.abi |
2.10 修改设置
修改设置之后,运行恢复命令仍然不太正常,可以运行 adb reboot 重启设备或手动重启。
修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。
2.10.1分辨率
adb shell wm size *480x1024* #将分辨率修改为 480px * 1024px
adb shell wm size reset #恢复原分辨率
2.10.2屏幕密度
adb shell wm density *160* #屏幕密度修改为 160dpi
adb shell wm density reset #恢复原屏幕密度
2.10.3显示区域
adb shell wm overscan *0,0,0,100*
# 四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 100px留白
adb shell wm overscan reset #恢复显示区域
2.10.4 关闭 USB 调试模式
adb shell settings put global adb_enabled 0
使用命令无法恢复调试模式,只能通过手动
2.10.5 状态栏和导航栏的显示隐藏
adb shell settings put global policy_control
key 键对应的值
这些键对应的值可则如下值用逗号组合
示例:
1 | # 设置在所有界面下都同时隐藏状态栏和导航栏 |
2.11 实用功能
2.11.1屏幕截图
adb exec-out screencap -p > img.png # 老版本无exec-out命令,只适合于新版的截图
adb shell screencap -p /sdcard/img.png # 老版本截图先保存在设备端
adb pull /sdcard/img.png # 通过pull拷贝到本地
screencap 参数:
参数 含义
-p 指定保存文件为 png 格式
-d display-id 指定截图的显示屏编号(有多显示屏的情况下)
2.11.2录制屏幕
# 默认录制时间和最长录制时间都是180s
adb shell screenrecord /sdcard/filename.mp4
screenrecord 参数:
参数 含义
–size WIDTHxHEIGHT 视频的尺寸,比如 1280x720,默认是屏幕分辨率。
–bit-rate RATE 视频的比特率,默认是 4Mbps。
–time-limit TIME 录制时长,单位秒。
–verbose 输出更多信息。
2.11.3 重新挂载 system 分区为可写
注:需要 root 权限
/system 分区默认挂载为只读,但有些操作比如给 Android 系统添加命令、删除自带应用等需要对 /system 进行写操作,所以需要重新挂载它为可读写。
步骤:
1.进入 shell 并切换到 root 用户权限。
1 | $adb shell |
2.查看当前分区挂载情况。
1 | $mount |
找到其中我们关注的带 /system 的那一行:
3.重新挂载。
1 | $mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system |
2.11.4 查看连接过的 WiFi 密码
注:需要 root 权限
1 | $adb shell |
2.11.5设置系统日期和时间
注:需要 root 权限
1 | $adb shell |
2.11.6 重启手机
1 | $adb reboot |
2.11.7 检测设备是否已 root
1 | $adb shell |
此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。
2.11.8 使用 Monkey 进行压力测试
Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
1 | # 向 <packagename> 指定的应用程序发送 500 个伪随机事件 |
monkey 官方文档 https://developer.android.com/studio/test/monkey.html
2.11.9 开启/关闭 WiFi
注:需要 root 权限
开启 WiFi:
1 | $adb root |
关闭 WiFi:
1 | $adb root |
2.12刷机相关命令
注:不要随便操作,没实验过无法保证成功
2.12.1重启到 Recovery 模式
1 | $adb reboot recovery |
2.12.2从 Recovery 重启到 Android
1 | $adb reboot |
2.12.3重启到 Fastboot 模式
1 | $adb reboot bootloader |
2.12.4通过 sideload 更新系统
如果我们下载了 Android 设备对应的系统更新包到电脑上,那么也可以通过 adb 来完成更新。
以 Recovery 模式下更新为例:
1.重启到 Recovery 模式。
1 | $adb reboot recovery |
2.在设备的 Recovery 界面上操作进入 Apply update-Apply from ADB。
注:不同的 Recovery 菜单可能与此有差异,有的是一级菜单就有 Apply update from ADB。
3.通过 adb 上传和更新系统。
1 | $adb sideload <path-to-update.zip> |
2.13 更多 adb shell 命令
2.13.1查看进程
adb shell ps
2.13.2查看实时资源占用情况
adb shell top
top命令参数如下:
使用方法: 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 显示帮助文档
2.13.3其它