ADB 模拟电视遥控器输入指南

4 阅读7分钟

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 5555adb connect <设备IP>:5555
模拟器自动连接

二、按键事件(keyevent)速查表

核心命令格式:

adb shell input keyevent <KEYCODE>

遥控器常用按键

按键KeyEvent 常量keycode命令
KEYCODE_DPAD_UP19adb shell input keyevent 19
KEYCODE_DPAD_DOWN20adb shell input keyevent 20
KEYCODE_DPAD_LEFT21adb shell input keyevent 21
KEYCODE_DPAD_RIGHT22adb shell input keyevent 22
确认 (OK)KEYCODE_DPAD_CENTER23adb shell input keyevent 23
返回KEYCODE_BACK4adb shell input keyevent 4
HomeKEYCODE_HOME3adb shell input keyevent 3
菜单KEYCODE_MENU82adb shell input keyevent 82
音量+KEYCODE_VOLUME_UP24adb shell input keyevent 24
音量-KEYCODE_VOLUME_DOWN25adb shell input keyevent 25
静音KEYCODE_VOLUME_MUTE164adb shell input keyevent 164
电源KEYCODE_POWER26adb shell input keyevent 26
搜索KEYCODE_SEARCH84adb shell input keyevent 84
设置KEYCODE_SETTINGS176adb shell input keyevent 176

媒体控制按键

按键keycode命令
播放/暂停85adb shell input keyevent 85
停止86adb shell input keyevent 86
下一曲87adb shell input keyevent 87
上一曲88adb shell input keyevent 88
快进90adb shell input keyevent 90
快退89adb shell input keyevent 89

数字键

数字keycode命令
07adb shell input keyevent 7
18adb shell input keyevent 8
.........
916adb 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 / F1Home
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 + MCmd + Mkeyevent 82菜单
Ctrl + BCmd + Bkeyevent 4返回
Ctrl + HCmd + Hkeyevent 3Home
Ctrl + SCmd + S最近任务/多任务
Ctrl + PCmd + Pkeyevent 26电源 (开/关屏)
Ctrl + ↑Cmd + ↑keyevent 24音量 +
Ctrl + ↓Cmd + ↓keyevent 25音量 -
Ctrl + NCmd + N通知栏
Ctrl + OCmd + Okeyevent 23关闭屏幕
Ctrl + Shift + VCmd + Shift + V粘贴到设备
Ctrl + RCmd + R旋转屏幕
Ctrl + FCmd + 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 两种连接方式
  • 完全开源免费,无广告

十一、注意事项

  1. input text 无法输入中文和空格,中文需用 am broadcast -a ADB_INPUT_TEXT --es msg '中文'
  2. keyevent 只能模拟系统已识别的按键,第三方遥控器的特殊按键 keycode 可能不同
  3. WiFi 连接状态下 input keyevent 会有轻微延迟(约 100-300ms),脚本中建议加 sleep
  4. 部分 Android TV 设备的菜单键已被系统拦截,keyevent 82 可能不生效,需要用 D-pad 手动导航
  5. scrcpy 需要 Android 5.0+,需开启 USB 调试,设备重启后需要重新 adb tcpip 5555
  6. 如果 scrcpy 黑屏,尝试 scrcpy --no-audio 关闭音频捕获