ADB Shell 命令
AI 汇总,用于速查。
一、活动管理器
adb shell am
(Activity Manager)命令用于在 Android 设备上管理 Activity、Service、Broadcast 等组件。其参数可划分为以下功能模块:
1. 组件启动与操作
- 启动 Activity
start [options] <INTENT>
示例:adb shell am start -n com.example/.MainActivity
- 启动 Service
startservice [options] <INTENT>
示例:adb shell am startservice -n com.example/.MyService
- 绑定 Service
bindservice [options] <INTENT>
示例:adb shell am bindservice -n com.example/.MyService
- 停止 Service
stopservice [options] <INTENT>
示例:adb shell am stopservice -n com.example/.MyService
- 发送广播
broadcast [options] <INTENT>
示例:adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
2. 进程与应用管理
- 强制停止应用
force-stop <PACKAGE>
示例:adb shell am force-stop com.example.app
- 终止进程
kill [options] <PACKAGE>
示例:adb shell am kill com.example.app
- 清除应用数据
clear-app-data <PACKAGE>
示例:adb shell am clear-app-data com.example.app
3. 调试与性能分析
- 启动性能分析
profile start <PROCESS> <FILE>
示例:adb shell am profile com.example.app start /sdcard/profile.trace
- 停止性能分析
profile stop <PROCESS>
示例:adb shell am profile com.example.app stop
- 设置调试应用
set-debug-app [options] <PACKAGE>
示例:adb shell am set-debug-app -w com.example.app
- 清除调试应用设置
clear-debug-app
4. Instrumentation 测试
- 运行测试用例
instrument [options] <COMPONENT>
示例:adb shell am instrument -w com.example.test/androidx.test.runner.AndroidJUnitRunner
5. 用户与多任务管理
- 切换用户
switch-user <USER_ID>
示例:adb shell am switch-user 1
- 启动用户
start-user <USER_ID>
示例:adb shell am start-user 1
- 停止用户
stop-user [options] <USER_ID>
示例:adb shell am stop-user -f 1
- 任务栈操作
stack move-task <TASK_ID> <STACK_ID>
示例:adb shell am stack move-task 1 2
6. 设备显示设置
- 修改显示尺寸
display-size <WIDTH>x<HEIGHT>
示例:adb shell am display-size 800x600
- 修改显示密度
display-density <DPI>
示例:adb shell am display-density 240
7. 其他工具
- 监控模式
monitor
示例:adb shell am monitor
(监控 Activity/Service 生命周期) - 模拟系统挂起(测试用)
hang
示例:adb shell am hang
- 重启设备
restart
示例:adb shell am restart
常用 Intent 参数选项
在启动组件时,可通过以下选项构建 Intent:
-a <ACTION>
:指定 Action(如android.intent.action.VIEW
)。-n <COMPONENT>
:指定组件名(包名/类名)。-d <DATA_URI>
:设置数据 URI(如https://example.com
)。-t <MIME_TYPE>
:设置 MIME 类型(如image/png
)。-f <FLAGS>
:添加 Intent Flags(如0x10000000
)。--es <EXTRA_KEY> <EXTRA_STRING_VALUE>
:添加字符串 Extra。
二、包管理器
adb shell pm
(Package Manager)命令用于管理 Android 设备上的应用包(APK)。其参数可划分为以下功能模块:
1. 包查询与列表
- 列出所有包
list packages [options] [filter]
示例:adb shell pm list packages -f # 显示包关联的APK路径 adb shell pm list packages -s # 只显示系统应用
- 查看包安装路径
path <PACKAGE>
示例:adb shell pm path com.android.chrome
- 查看包详细信息
dump <PACKAGE>
示例:adb shell pm dump com.android.chrome
2. 包安装与卸载
- 安装APK
install [options] <APK_PATH>
示例:adb shell pm install /sdcard/app.apk adb shell pm install -t -g app.apk # 允许测试并授予所有权限
- 卸载应用
uninstall [options] <PACKAGE>
示例:adb shell pm uninstall com.example.app adb shell pm uninstall -k com.example.app # 卸载但保留数据
3. 权限管理
- 授予权限
grant <PACKAGE> <PERMISSION>
示例:adb shell pm grant com.example.app android.permission.CAMERA
- 撤销权限
revoke <PACKAGE> <PERMISSION>
示例:adb shell pm revoke com.example.app android.permission.ACCESS_FINE_LOCATION
- 重置权限
reset-permissions
示例:adb shell pm reset-permissions
4. 包状态控制
- 启用/禁用组件
enable <PACKAGE/COMPONENT>
disable <PACKAGE/COMPONENT>
disable-user <PACKAGE>
(仅对当前用户禁用)
示例:adb shell pm disable com.example.app/.MainActivity
- 挂起/恢复应用(Android 9+)
suspend <PACKAGE>
unsuspend <PACKAGE>
示例:adb shell pm suspend com.example.app
5. 用户管理
- 创建用户
create-user <USER_NAME>
示例:adb shell pm create-user test_user
- 删除用户
remove-user <USER_ID>
示例:adb shell pm remove-user 10
- 列出用户
list users
示例:adb shell pm list users
6. 存储与数据管理
- 清除应用数据
clear <PACKAGE>
示例:adb shell pm clear com.example.app
- 设置安装位置
set-install-location <0|1|2>
(0
=自动,1
=内部存储,2
=外部存储)
示例:adb shell pm set-install-location 0
- 获取安装位置
get-install-location
7. 编译与优化
- 编译应用(ART优化)
compile [options] <PACKAGE>
示例:adb shell pm compile -m speed com.example.app # 速度优化
- 强制编译所有应用
force-dex-opt
示例:adb shell pm force-dex-opt
8. 验证与安全
- 验证安装包
verify [options] <URI>
示例:adb shell pm verify -r /sdcard/app.apk
- 设置应用链接行为
set-app-links [options] <PACKAGE> <STATE>
示例:adb shell pm set-app-links --package com.example.app 1
(允许打开链接)
9. 其他工具
- 修复权限
reset-permissions
(重置运行时权限) - 重置偏好设置
reset-preferred-apps <USER_ID>
示例:adb shell pm reset-preferred-apps 0
三、设备信息
getprop
和 setprop
是 Android 系统属性管理命令,用于读取/修改系统级配置参数。以下是详细的功能模块划分和参数说明:
1. 命令基础功能
命令 | 功能描述 | 语法格式 |
---|---|---|
getprop | 读取系统属性值 | getprop [属性名] |
setprop | 设置系统属性值 | setprop <属性名> <属性值> |
2. 系统属性类型(按前缀分类)
a) 只读属性 (ro.*
)
- 前缀:
ro.
(read-only) - 特点:系统初始化后不可修改
- 常见属性:
ro.build.version.release # Android 版本号 ro.product.model # 设备型号 (e.g., "Pixel 6") ro.serialno # 设备序列号
b) 持久化属性 (persist.*
)
- 前缀:
persist.
- 特点:重启后值保持不变(存储在
/data/property
) - 常见属性:
persist.sys.timezone # 系统时区 (e.g., "Asia/Shanghai") persist.sys.language # 系统语言
c) 控制属性 (ctl.*
)
- 前缀:
ctl.
- 特点:用于启停系统服务
- 关键操作:
setprop ctl.start <service> # 启动服务 (e.g., "zygote") setprop ctl.stop <service> # 停止服务
d) 调试属性 (debug.*
, log.*
)
- 前缀:
debug.
/log.
- 作用:控制调试行为
- 示例:
setprop log.tag.GPS VERBOSE # 开启GPS模块详细日志 setprop debug.choreographer.skipwarning 1 # 禁用UI渲染警告
e) 网络属性 (net.*
, dhcp.*
)
- 前缀:
net.
/dhcp.
- 作用:管理网络配置
- 示例:
getprop net.dns1 # 主DNS服务器IP setprop net.eth0.dns1 8.8.8.8 # 设置以太网DNS
3. 核心参数详解
getprop
参数
参数/用法 | 说明 |
---|---|
getprop | 列出 所有 系统属性 |
getprop <属性名> | 读取指定属性值 |
getprop -T | 显示属性类型 (Android 8.0+) |
getprop -Z | 显示安全上下文 (SELinux) |
setprop
参数
参数/用法 | 说明 |
---|---|
setprop <属性名> <值> | 修改/创建属性 |
特殊值注意 | |
空格需用引号包裹 | setprop test.key "value with spaces" |
多单词值需引号 | setprop boot_completed "done" |
4. 关键属性示例表
属性名 | 作用 | 读写性 |
---|---|---|
ro.build.fingerprint | 设备指纹信息 | 只读 |
persist.sys.adb.tcp.port | ADB网络调试端口 | 持久化 |
sys.boot_completed | 系统启动完成标志 (1=完成) | 可写 |
debug.egl.trace | 启用OpenGL渲染跟踪 | 可写 |
service.adb.root | 控制ADB Root权限 (1=开启) | 可写 |
5. 操作示例
▶ 读取设备信息
adb shell getprop ro.product.model # 输出: "Pixel 7 Pro"
adb shell getprop ro.build.version.sdk # 输出: "34" (Android 14)
▶ 修改时区(需重启)
adb shell setprop persist.sys.timezone Europe/Paris
▶ 控制服务启停
# 重启网络服务
adb shell setprop ctl.stop netd
adb shell setprop ctl.start netd
▶ 开启全局调试日志
adb shell setprop log.tag.* VERBOSE
▶ 检查系统启动状态
adb shell getprop sys.boot_completed # 输出"1"表示启动完成
6. 注意事项
-
权限要求:
- 修改
ro.*
属性需要 Root 权限(需先adb root
) persist.*
修改后需重启生效
- 修改
-
属性存储位置:
- 临时属性:
/dev/__properties__
- 持久属性:
/data/property/*
- 临时属性:
-
危险操作:
错误修改核心属性(如ro.
前缀)可能导致 系统无法启动 -
属性删除:
无直接删除命令,可通过设置空值覆盖:setprop my.temp.property ""
7. 调试技巧
- 监视属性变化:
adb shell watch -n 1 getprop | grep <属性名>
- 查看属性列表:
adb shell getprop | grep -E "ro.|persist." # 过滤关键属性
- 重置所有持久属性:
删除/data/property/*
文件(需 Root)
四、转储系统信息
dumpsys
是 Android 系统诊断工具,用于获取系统服务的详细状态信息。其功能模块按系统服务分类,以下是主要模块及其参数的详细解析:
1. 基础系统服务
服务名 | 命令参数 | 功能描述 |
---|---|---|
activity | dumpsys activity [options] | 显示 Activity/任务栈信息 |
window | dumpsys window [options] | 窗口管理器状态 |
package | dumpsys package [options] | 包管理信息 |
meminfo | dumpsys meminfo [package] | 内存使用详情 |
2. 硬件与传感器
服务名 | 命令参数 | 功能描述 |
---|---|---|
battery | dumpsys battery | 电池状态与统计 |
sensorservice | dumpsys sensorservice | 传感器服务状态 |
display | dumpsys display | 显示配置参数 |
3. 网络与连接
服务名 | 命令参数 | 功能描述 |
---|---|---|
netstats | dumpsys netstats | 网络流量统计 |
connectivity | dumpsys connectivity | 网络连接状态 |
wifi | dumpsys wifi | Wi-Fi 服务详情 |
4. 存储与多媒体
服务名 | 命令参数 | 功能描述 |
---|---|---|
diskstats | dumpsys diskstats | 磁盘使用统计 |
media.camera | dumpsys media.camera | 相机服务状态 |
media.audio | dumpsys media.audio | 音频服务信息 |
5. 进程与性能
服务名 | 命令参数 | 功能描述 |
---|---|---|
procstats | dumpsys procstats [hours] | 进程运行统计 |
gfxinfo | dumpsys gfxinfo [package] | 图形渲染性能 |
cpuinfo | dumpsys cpuinfo | CPU 使用情况 |
核心参数详解
通用参数
参数 | 作用 | 示例 |
---|---|---|
-l | 列出所有可用服务 | dumpsys -l |
--help | 显示帮助信息 | dumpsys --help |
-t [timeout] | 设置超时时间(秒) | dumpsys -t 30 activity |
--proto | 输出 Protocol Buffer 格式 | dumpsys window --proto |
模块专用参数
-
Activity 服务 (
activity
)dumpsys activity [options] [COMPONENT]
a
:显示所有 Activity 信息b
:显示后台 Activitys
:显示栈信息p [package]
:过滤指定包名- 示例:
dumpsys activity p com.android.chrome
-
内存信息 (
meminfo
)dumpsys meminfo [options] [package|pid]
-a
:显示所有进程-d
:显示 Dalvik 内存-s
:按重要性排序- 示例:
dumpsys meminfo -s com.android.browser
-
图形渲染 (
gfxinfo
)dumpsys gfxinfo [package] [framestats]
framestats
:输出帧性能数据reset
:重置统计计数器- 示例:
dumpsys gfxinfo com.android.chrome framestats
-
电池统计 (
battery
)dumpsys battery [options]
set [ac|usb|wireless|status] [value]
:模拟电池状态reset
:重置电池统计- 示例:
dumpsys battery set level 50
五、monkey测试
monkey
是 Android 平台的压力测试工具,用于模拟用户随机操作事件。以下是完整的命令参数详解,按功能分类说明:
1、基础命令格式
adb shell monkey [options] <event-count>
<event-count>
:必需参数,指定要发送的随机事件数量(必须放在命令最后)
2、事件类型控制参数
控制不同类型事件的生成比例(默认比例见括号):
参数 | 说明 | 示例 |
---|---|---|
--pct-touch <percent> | 触摸事件比例(点击屏幕,默认15%) | --pct-touch 30 |
--pct-motion <percent> | 动作事件比例(滑动/拖动,默认10%) | --pct-motion 20 |
--pct-trackball <percent> | 轨迹球事件比例(默认0%) | --pct-trackball 5 |
--pct-nav <percent> | 基本导航事件比例(方向键,默认5%) | --pct-nav 10 |
--pct-majornav <percent> | 主要导航事件比例(返回/菜单键,默认10%) | --pct-majornav 15 |
--pct-syskeys <percent> | 系统按键比例(Home/音量键,默认5%) | --pct-syskeys 3 |
--pct-appswitch <percent> | 应用切换比例(启动Activity,默认15%) | --pct-appswitch 25 |
--pct-anyevent <percent> | 其他事件比例(默认0%) | --pct-anyevent 2 |
--pct-pinchzoom <percent> | 双指缩放事件比例(Android 4.1+,默认0%) | --pct-pinchzoom 10 |
3、测试对象约束参数
参数 | 说明 | 示例 |
---|---|---|
-p <package-name> | 只测试指定包(可多次使用) | -p com.android.browser |
--ignore-package <package> | 排除指定包 | --ignore-package com.xxx |
--ignore-crashes | 忽略崩溃继续测试 | |
--ignore-timeouts | 忽略ANR继续测试 | |
--ignore-security-exceptions | 忽略权限错误继续测试 | |
-c <category> | 只测试指定Intent类别的Activity | -c android.intent.category.LAUNCHER |
4、调试与日志参数
参数 | 说明 | 示例 |
---|---|---|
-v | 日志级别(每多一个-v 增加详细度) | -v -v -v |
--dbg-no-events | 初始化但不发送事件 | |
--setup scriptfile | 运行前执行脚本 | --setup /sdcard/init.mks |
-f <scriptfile> | 运行指定脚本(可多次使用) | -f /sdcard/test1.mks |
--port <port> | 设置控制端口 | --port 1080 |
--wait-dbg | 等待调试器连接 |
5、事件流控制参数
参数 | 说明 | 示例 |
---|---|---|
-s <seed> | 设置随机种子(用于重现测试) | -s 12345 |
--throttle <ms> | 事件间延迟(毫秒) | --throttle 300 |
--randomize-throttle | 随机化事件间隔 | |
--monitor-native-crashes | 监控Native崩溃 | |
--kill-process-after-error | 出错时杀死进程 | |
--hprof | 事件前后生成性能分析文件 |
6、高级配置参数
参数 | 说明 | 示例 |
---|---|---|
--pct-rotation <percent> | 屏幕旋转事件比例 | --pct-rotation 5 |
--pct-permission <percent> | 权限事件比例 | --pct-permission 3 |
--pkg-blacklist-file <file> | 包黑名单文件 | --pkg-blacklist-file /sdcard/blacklist.txt |
--pkg-whitelist-file <file> | 包白名单文件 | --pkg-whitelist-file /sdcard/whitelist.txt |
--bugreport | 崩溃时自动生成bugreport |
7、完整命令示例
1. 基础稳定性测试
adb shell monkey -p com.example.app \--throttle 300 \--ignore-crashes \--ignore-timeouts \-v -v 10000
2. 精准复现测试场景
adb shell monkey -p com.android.chrome \-s 20240501 \ # 固定随机种子--pct-touch 40 \--pct-appswitch 30 \--throttle 500 \-v -v -v 5000
3. 带黑名单的多应用测试
adb shell monkey \--pkg-blacklist-file /sdcard/blacklist.txt \--ignore-security-exceptions \--monitor-native-crashes \-v 20000
4. 脚本化测试
adb shell monkey \-f /sdcard/gestures.mks \ # 手势脚本-f /sdcard/login.mks \ # 登录脚本--throttle 1000 \-v 1000
8、Monkey 脚本语法
Monkey 脚本(.mks 文件)支持精确控制事件:
# 基本命令
type= raw events
count= 10
speed= 1.0# 触摸事件
DispatchPointer(0,0,0,500,800,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,500,800,0,0,0,0,0,0,0)# 按键事件
DispatchKey(0,0,0,KEYCODE_HOME,0,0,0,0)# 启动Activity
LaunchActivity(com.example,com.example.MainActivity)# 等待
UserWait(2000)
9、调试技巧
-
事件流重现
使用-s
参数固定随机种子重现问题场景:adb shell monkey -s 12345 -v 1000
-
实时监控
结合logcat
过滤 Monkey 事件:adb logcat -s "Monkey"
-
性能分析
使用--hprof
生成内存快照:adb shell monkey --hprof -p com.example.app 500
-
网络控制
通过端口远程控制 Monkey:adb shell monkey --port 1080 1000 telnet localhost 1080 # 输入命令如:tap 100 200
六、自动化开发相关
1. 输入命令 (input
)
用于模拟各种输入事件(按键、触摸、文本输入等)
主要参数:
参数 | 说明 | 示例 |
---|---|---|
text <string> | 输入文本 | input text "Hello@123" |
keyevent <keycode> | 发送按键事件 | input keyevent KEYCODE_HOME |
tap <x> <y> | 点击屏幕坐标 | input tap 500 1200 |
swipe <x1> <y1> <x2> <y2> [duration] | 滑动操作 | input swipe 300 800 300 300 500 |
draganddrop <x1> <y1> <x2> <y2> | 拖拽操作 | input draganddrop 100 100 500 500 |
press | 模拟轨迹球按下 | input press |
roll <dx> <dy> | 模拟轨迹球滚动 | input roll 0 10 |
高级用法:
# 长按操作(通过延长swipe时间)
input swipe 500 500 500 500 2000# 组合按键(返回+菜单)
input keyevent KEYCODE_BACK && input keyevent KEYCODE_MENU# 输入特殊字符
input text "邮箱地址\%40domain.com" # @符号需转义
2. 屏幕截图与录制
(1) screencap
截图命令
参数 | 说明 | 示例 |
---|---|---|
-p | 保存为PNG格式(默认) | screencap -p /sdcard/screen.png |
-d <display-id> | 指定显示器(多屏设备) | screencap -d 1 /sdcard/screen2.png |
–auto-rotate | 根据设备方向自动旋转 | Android 12+ |
–crop <x,y,w,h> | 截取指定区域 | screencap --crop 100,200,600,800 /sdcard/crop.png |
(2) screenrecord
录屏命令
参数 | 说明 | 示例 |
---|---|---|
–size <WIDTHxHEIGHT> | 设置分辨率 | screenrecord --size 1280x720 /sdcard/demo.mp4 |
–bit-rate <RATE> | 设置比特率(默认4Mbps) | screenrecord --bit-rate 6000000 demo.mp4 |
–time-limit <TIME> | 设置最大时长(秒,默认180) | screenrecord --time-limit 30 demo.mp4 |
–rotate | 旋转输出视频90度 | screenrecord --rotate demo.mp4 |
–bugreport | 添加调试信息叠加层 | screenrecord --bugreport demo.mp4 |
–show-touches | 显示触摸操作 | screenrecord --show-touches demo.mp4 |
3. 设置提供程序 (settings
)
管理系统/安全/全局设置
命令结构:
settings [--user <USER_ID>] <namespace> <command> <key> [value]
命名空间:
命名空间 | 说明 |
---|---|
system | 系统设置(铃声、亮度等) |
secure | 安全设置(位置、输入法等) |
global | 全局设置(ADB、调试选项) |
主要命令:
命令 | 说明 | 示例 |
---|---|---|
get <key> | 获取设置值 | settings get system screen_brightness |
put <key> <value> | 修改设置值 | settings put system screen_brightness 150 |
delete <key> | 删除设置 | settings delete secure bluetooth_address |
list <namespace> | 列出所有设置项 | settings list global |
常用键值示例:
# 启用USB调试
settings put global adb_enabled 1# 设置默认输入法
settings put secure default_input_method com.google.android.inputmethod.latin/.LatinIME# 修改屏幕超时
settings put system screen_off_timeout 600000 # 10分钟
4. 窗口管理器 (wm
)
管理显示设置和窗口属性
主要命令:
命令 | 参数 | 说明 | 示例 |
---|---|---|---|
size | [reset|WxH] | 获取/设置分辨率 | wm size 1080x1920 |
density | [reset|DENSITY] | 获取/设置DPI | wm density 420 |
overscan | reset|LEFT,TOP,RIGHT,BOTTOM | 设置过扫描区域 | wm overscan 0,0,-100,0 |
scaling | off|auto | 显示缩放模式 | wm scaling auto |
dismiss-keyguard | 解锁屏幕 | wm dismiss-keyguard | |
multiwindow | enable|disable | 启用/禁用分屏 | wm multiwindow enable |
高级用法:
# 临时修改为720P分辨率
wm size 720x1280# 恢复默认分辨率
wm size reset# 右侧扩大显示区域100像素(游戏全屏常用)
wm overscan 0,0,-100,0
5. 输入法管理器 (ime
)
管理输入法设置和状态
主要命令:
命令 | 参数 | 说明 | 示例 |
---|---|---|---|
list | [-a|-s] | 列出输入法 | ime list -s |
set <IME_ID> | 设置默认输入法 | ime set com.ime/.Keyboard | |
enable <IME_ID> | 启用输入法 | ime enable com.ime/.Keyboard | |
disable <IME_ID> | 禁用输入法 | ime disable com.ime/.Keyboard | |
reset | 重置输入法选择 |
使用流程:
-
获取输入法ID:
adb shell ime list -a # 示例输出:com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
-
设置默认输入法:
ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
-
切换输入法:
# 禁用当前输入法 ime disable com.current.ime/.Keyboard# 启用新输入法 ime enable com.new.ime/.Keyboard
调试技巧:
# 查看当前输入法
settings get secure default_input_method# 强制显示输入法
input keyevent KEYCODE_SETTINGS
综合使用示例
# 1. 修改分辨率
wm size 720x1280# 2. 降低屏幕亮度
settings put system screen_brightness 30# 3. 切换输入法
ime set com.google.android.inputmethod.latin/.LatinIME# 4. 输入文本
input text "测试输入@123"# 5. 截图保存
screencap /sdcard/test_screen.png# 6. 恢复设置
wm size reset
settings put system screen_brightness 150