ADB 模拟电视遥控器输入指南
在开发 Android TV / 机顶盒 / 电视端 App 时,经常需要用遥控器的方向键、确认键、菜单键等来操作。手上没有实体遥控器或真机不方便按的时候,ADB 就是最快最灵活的调试工具。
一、基础准备
1. 确认设备已连接
adb devices
输出示例:
List of devices attached
192.168.1.100:5555 device # WiFi 连接
emulator-5554 device # 模拟器
2. 连接方式
| 方式 | 命令 |
|---|---|
| USB 连接 | 插线就行 |
| WiFi 连接 | adb tcpip 5555 → adb connect <设备IP>:5555 |
| 模拟器 | 自动连接 |
二、按键事件(keyevent)速查表
核心命令格式:
adb shell input keyevent <KEYCODE>
遥控器常用按键
| 按键 | KeyEvent 常量 | keycode | 命令 |
|---|---|---|---|
| 上 | KEYCODE_DPAD_UP | 19 | adb shell input keyevent 19 |
| 下 | KEYCODE_DPAD_DOWN | 20 | adb shell input keyevent 20 |
| 左 | KEYCODE_DPAD_LEFT | 21 | adb shell input keyevent 21 |
| 右 | KEYCODE_DPAD_RIGHT | 22 | adb shell input keyevent 22 |
| 确认 (OK) | KEYCODE_DPAD_CENTER | 23 | adb shell input keyevent 23 |
| 返回 | KEYCODE_BACK | 4 | adb shell input keyevent 4 |
| Home | KEYCODE_HOME | 3 | adb shell input keyevent 3 |
| 菜单 | KEYCODE_MENU | 82 | adb shell input keyevent 82 |
| 音量+ | KEYCODE_VOLUME_UP | 24 | adb shell input keyevent 24 |
| 音量- | KEYCODE_VOLUME_DOWN | 25 | adb shell input keyevent 25 |
| 静音 | KEYCODE_VOLUME_MUTE | 164 | adb shell input keyevent 164 |
| 电源 | KEYCODE_POWER | 26 | adb shell input keyevent 26 |
| 搜索 | KEYCODE_SEARCH | 84 | adb shell input keyevent 84 |
| 设置 | KEYCODE_SETTINGS | 176 | adb shell input keyevent 176 |
媒体控制按键
| 按键 | keycode | 命令 |
|---|---|---|
| 播放/暂停 | 85 | adb shell input keyevent 85 |
| 停止 | 86 | adb shell input keyevent 86 |
| 下一曲 | 87 | adb shell input keyevent 87 |
| 上一曲 | 88 | adb shell input keyevent 88 |
| 快进 | 90 | adb shell input keyevent 90 |
| 快退 | 89 | adb shell input keyevent 89 |
数字键
| 数字 | keycode | 命令 |
|---|---|---|
| 0 | 7 | adb shell input keyevent 7 |
| 1 | 8 | adb shell input keyevent 8 |
| ... | ... | ... |
| 9 | 16 | adb shell input keyevent 16 |
数字键 code 是
7 + 数字,即 0→7, 1→8, ..., 9→16
三、长按操作
--longpress 参数模拟长按(遥控器按住不放):
# 长按确认键
adb shell input keyevent --longpress 23
# 长按返回键
adb shell input keyevent --longpress 4
四、文本输入
在焦点已落在输入框的情况下:
# 输入英文/数字
adb shell input text "https://example.com"
# 输入中文(需要先切换到中文输入法或使用 Unicode)
adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好'
# 替换掉空格(URL 中常用)
adb shell input text "Hello_World" # 用 _ 替代空格
input text不支持空格和特殊字符,URL 中的/:.等符号是支持的。
五、触摸/点击模拟
虽然不是遥控器操作,但在 TV App 调试时也可能用到:
# 点击坐标 (x, y)
adb shell input tap 500 1000
# 滑动 (x1, y1) → (x2, y2),持续 300ms
adb shell input swipe 500 1000 500 500 300
六、实用场景组合
场景1:测试菜单键 → 选择列表项
# 打开菜单
adb shell input keyevent 82
# 等对话框弹出
sleep 1
# 按向下键选中第二项
adb shell input keyevent 20
# 确认
adb shell input keyevent 23
场景2:输入 URL 并加载
# 1. 打开菜单
adb shell input keyevent 82
sleep 0.5
# 2. 向下选到「手动输入地址」
adb shell input keyevent 20
adb shell input keyevent 20
adb shell input keyevent 20
adb shell input keyevent 20
# 3. 确认
adb shell input keyevent 23
sleep 0.5
# 4. 输入 URL
adb shell input text "https://test.example.com"
# 5. 确认
adb shell input keyevent 23
场景3:一键写成一个脚本
保存为 test_menu.sh:
#!/bin/bash
# 测试菜单键 → 选择第一个地址加载
adb shell input keyevent 82 # 菜单
sleep 0.5
adb shell input keyevent 23 # 确认第一个地址
echo "Done."
场景4:多设备时指定设备
# 指定序列号
adb -s 192.168.1.100:5555 shell input keyevent 82
# 指定模拟器
adb -s emulator-5554 shell input keyevent 82
七、查看完整 KeyEvent 列表
# 查看系统所有支持的 keycode
adb shell input keyevent
# 或者看 KeyEvent 源码中的常量定义
adb shell dumpsys input | grep -A 200 "Keyboard Layout"
八、进阶:模拟红外/蓝牙遥控器信号
如果需要测试遥控器的特殊按键(如 Netflix 键、YouTube 键等厂商定制键):
# 触发生厂商自定义键(keycode 范围 288-301)
adb shell input keyevent 288 # 示例:自定义按键1
adb shell input keyevent 289 # 示例:自定义按键2
九、快速参考卡片
遥控操作 ADB 命令
─────────────────────────────────────────
上 / 下 / 左 / 右 input keyevent 19/20/21/22
确认 (OK) input keyevent 23
返回 input keyevent 4
Home input keyevent 3
菜单 input keyevent 82
音量 ± input keyevent 24/25
输入文字 input text "your_text"
长按确认 input keyevent --longpress 23
十、其他模拟遥控器的方法(无需 ADB 命令行)
除了纯 ADB 命令,还有几种更直观的方式来模拟遥控器操作。
1. Android Studio 模拟器自带 Remote Control
运行 Debug 时,Android Studio 模拟器侧边栏有 Remote Control 面板:
模拟器窗口右侧栏 → 点击 "..." 按钮 → 选择 "Remote Control"
面板上直接提供了 D-pad 上下左右按钮、确认键、返回键、Home 键、菜单键、音量键 等。
特点:
- 无需任何命令,鼠标点击即可
- 还能模拟旋转屏幕、指纹、GPS 定位等
- 只适用于模拟器,真机不行
2. 外接 USB / 蓝牙键盘
直接给 Android TV 设备/机顶盒插个 USB 键盘,或者通过蓝牙连键盘:
| 键盘按键 | 等价遥控器按钮 |
|---|---|
| 方向键 ↑ ↓ ← → | D-pad 上下左右 |
| Enter | 确认 (DPAD_CENTER) |
| Esc | 返回 (BACK) |
| Home / F1 | Home |
| Menu / 右键菜单键 | 菜单 (MENU) |
| F2 / 搜索键 | 搜索 (SEARCH) |
特点:
- 插上即用,零配置
- 输入 URL 和文字非常方便
- 适合开发调试,直接在设备上操作
3. Google 官方「Android TV Remote Control」App
Google 官方出品,手机下载后连接同一 WiFi 即可当遥控器:
- 下载:Google Play 搜索「Android TV Remote Control」
- 连接:手机和 Android TV 在同一 WiFi → App 自动发现设备 → 连接
- 功能:完整遥控器布局(D-pad、确认、返回、Home、语音输入、触摸板模式)
特点:
- 真实遥控器体验
- 支持语音输入和触摸板滑动
- 只有 Android TV 设备可用,普通手机/平板不行
4. scrcpy — 电脑键盘直接操控 Android(最推荐)
scrcpy(screen copy)是 Genymobile 开发的开源工具,通过 ADB 将 Android 屏幕镜像到电脑,直接用电脑键盘和鼠标操作设备。
安装:
# macOS
brew install scrcpy
# Windows (Chocolatey)
choco install scrcpy
# Linux (Ubuntu/Debian)
sudo apt install scrcpy
使用:
# USB 连接后,一行命令即可
scrcpy
# WiFi 无线连接
adb tcpip 5555
adb connect 192.168.1.100:5555
scrcpy
键盘映射:
| PC 键盘操作 | Android TV 效果 |
|---|---|
| 方向键 ↑↓←→ | D-pad 方向 |
| Enter | 确认 |
| Esc | 返回 |
| 鼠标点击 | 触摸点击 |
| 键盘打字 | 直接输入到设备 |
快捷键速查:
| 快捷键 (Win/Linux) | 快捷键 (macOS) | 对应 ADB 命令 | 作用 |
|---|---|---|---|
Ctrl + M | Cmd + M | keyevent 82 | 菜单 |
Ctrl + B | Cmd + B | keyevent 4 | 返回 |
Ctrl + H | Cmd + H | keyevent 3 | Home |
Ctrl + S | Cmd + S | — | 最近任务/多任务 |
Ctrl + P | Cmd + P | keyevent 26 | 电源 (开/关屏) |
Ctrl + ↑ | Cmd + ↑ | keyevent 24 | 音量 + |
Ctrl + ↓ | Cmd + ↓ | keyevent 25 | 音量 - |
Ctrl + N | Cmd + N | — | 通知栏 |
Ctrl + O | Cmd + O | keyevent 23 | 关闭屏幕 |
Ctrl + Shift + V | Cmd + Shift + V | — | 粘贴到设备 |
Ctrl + R | Cmd + R | — | 旋转屏幕 |
Ctrl + F | Cmd + F | — | 全屏 |
常用参数:
scrcpy --turn-screen-off # 手机熄屏但仍然投屏
scrcpy --max-size 1920 # 限制分辨率
scrcpy --max-fps 60 # 限制帧率
scrcpy --no-control # 只投屏,不控制
scrcpy --record output.mp4 # 录屏同时操作
scrcpy -s 192.168.1.100:5555 # 指定设备
特点:
- 无需在手机装任何 App,无需 root
- 延迟仅 35-70ms,非常流畅
- 电脑键盘直接打字,输入 URL 效率极高
- 支持 USB + WiFi 两种连接方式
- 完全开源免费,无广告
十一、注意事项
input text无法输入中文和空格,中文需用am broadcast -a ADB_INPUT_TEXT --es msg '中文'keyevent只能模拟系统已识别的按键,第三方遥控器的特殊按键 keycode 可能不同- WiFi 连接状态下
input keyevent会有轻微延迟(约 100-300ms),脚本中建议加sleep - 部分 Android TV 设备的菜单键已被系统拦截,
keyevent 82可能不生效,需要用 D-pad 手动导航 - scrcpy 需要 Android 5.0+,需开启 USB 调试,设备重启后需要重新
adb tcpip 5555 - 如果 scrcpy 黑屏,尝试
scrcpy --no-audio关闭音频捕获