ADB Shell 命令

发布于:2025-07-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

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

三、设备信息

getpropsetprop 是 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. 注意事项

  1. 权限要求

    • 修改 ro.* 属性需要 Root 权限(需先 adb root
    • persist.* 修改后需重启生效
  2. 属性存储位置

    • 临时属性:/dev/__properties__
    • 持久属性:/data/property/*
  3. 危险操作
    错误修改核心属性(如 ro. 前缀)可能导致 系统无法启动

  4. 属性删除
    无直接删除命令,可通过设置空值覆盖:

    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
模块专用参数
  1. Activity 服务 (activity)

    dumpsys activity [options] [COMPONENT]
    
    • a:显示所有 Activity 信息
    • b:显示后台 Activity
    • s:显示栈信息
    • p [package]:过滤指定包名
    • 示例:dumpsys activity p com.android.chrome
  2. 内存信息 (meminfo)

    dumpsys meminfo [options] [package|pid]
    
    • -a:显示所有进程
    • -d:显示 Dalvik 内存
    • -s:按重要性排序
    • 示例:dumpsys meminfo -s com.android.browser
  3. 图形渲染 (gfxinfo)

    dumpsys gfxinfo [package] [framestats]
    
    • framestats:输出帧性能数据
    • reset:重置统计计数器
    • 示例:dumpsys gfxinfo com.android.chrome framestats
  4. 电池统计 (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、调试技巧

  1. 事件流重现
    使用 -s 参数固定随机种子重现问题场景:

    adb shell monkey -s 12345 -v 1000
    
  2. 实时监控
    结合 logcat 过滤 Monkey 事件:

    adb logcat -s "Monkey"
    
  3. 性能分析
    使用 --hprof 生成内存快照:

    adb shell monkey --hprof -p com.example.app 500
    
  4. 网络控制
    通过端口远程控制 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 重置输入法选择
使用流程:
  1. 获取输入法ID:

    adb shell ime list -a
    # 示例输出:com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
    
  2. 设置默认输入法:

    ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
    
  3. 切换输入法:

    # 禁用当前输入法
    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

网站公告

今日签到

点亮在社区的每一天
去签到