3个核心技巧掌握ADBKeyBoard远程输入控制
基础认知:ADBKeyBoard是什么
ADBKeyBoard是一款通过ADB(Android Debug Bridge)命令实现远程控制的虚拟键盘工具,专为解决Android自动化测试中的文本输入难题而设计。与系统自带的"input"命令不同,它支持完整的Unicode字符输入,包括中文、日文等多语言文字,以及表情符号等特殊字符,是移动应用自动化测试和设备管理的必备工具。
技术原理简析
ADBKeyBoard通过实现Android输入法服务(InputMethodService),建立了一个接收系统广播意图的通信通道。当设备接收到特定格式的ADB广播命令时,AdbReceiver组件会解析命令参数,将文本或按键事件传递给InputConnection接口,最终实现对目标输入框的内容控制。这种设计绕开了系统输入法的限制,直接与应用层进行通信,确保了字符传输的完整性和准确性。
场景化应用:从安装到基础操作
部署输入法:建立远程控制通道
目标:在Android设备上完成ADBKeyBoard的安装与激活
操作:
- 获取项目源码
git clone https://gitcode.com/gh_mirrors/ad/ADBKeyBoard
- 构建调试版本APK
cd ADBKeyBoard
./gradlew assembleDebug
- 安装到目标设备
adb install -r keyboardservice/build/outputs/apk/debug/keyboardservice-debug.apk
验证:执行以下命令查看设备已安装输入法列表
adb shell ime list -s
若输出包含"com.android.adbkeyboard/.AdbIME"则表示安装成功
常见误区:直接安装APK后未启用输入法。ADBKeyBoard需要在系统设置中手动启用,或通过命令行设置为默认输入法才能正常工作。
切换输入法:两种激活方式对比
| 实现方式 | 操作步骤 | 适用场景 |
|---|---|---|
| 命令行方式 | adb shell ime set com.android.adbkeyboard/.AdbIME |
自动化脚本集成 |
| 图形界面方式 | 设置 → 语言和输入法 → 虚拟键盘 → 选择"ADB Keyboard" | 单次手动操作 |
验证:通过以下命令确认当前默认输入法
adb shell settings get secure default_input_method
深度实践:核心功能应用
文本输入:多语言内容远程注入
目标:向应用输入框发送包含中文、英文和特殊字符的混合文本
操作:
- 基础文本输入(适用于Android 7.0及以下)
adb shell am broadcast -a ADB_INPUT_TEXT --es msg "自动化测试:ADBKeyBoard 演示"
- Base64编码输入(解决高版本系统中文乱码问题)
# Linux/macOS系统
adb shell am broadcast -a ADB_INPUT_B64 --es msg $(echo -n "自动化测试:ADBKeyBoard 演示" | base64)
# Windows系统(PowerShell)
$text = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("自动化测试:ADBKeyBoard 演示"))
adb shell am broadcast -a ADB_INPUT_B64 --es msg $text
验证:检查目标应用输入框内容是否与发送文本一致
常见误区:在Android 8.0+系统直接使用ADB_INPUT_TEXT发送中文会导致乱码,必须使用ADB_INPUT_B64方式。
按键控制:模拟用户交互操作
目标:实现文本框内容删除与提交操作
操作:
- 删除操作(模拟退格键)
# 发送删除键事件(67为KEYCODE_DEL)
adb shell am broadcast -a ADB_INPUT_CODE --ei code 67
- 提交操作(模拟编辑器动作)
# 发送"前往"动作(2为IME_ACTION_GO)
adb shell am broadcast -a ADB_EDITOR_CODE --ei code 2
- 组合操作:清空输入框
# 发送清除文本命令(v2.0+支持)
adb shell am broadcast -a ADB_CLEAR_TEXT
验证:观察应用界面是否按预期响应按键事件
扩展探索:企业级应用与跨平台方案
自动化测试集成:构建完整测试流程
目标:实现登录场景的自动化测试
操作:创建bash脚本(login_test.sh)
#!/bin/bash
# 唤醒设备
adb shell input keyevent KEYCODE_POWER
sleep 2
# 启动目标应用
adb shell am start -n com.example.app/.LoginActivity
sleep 3
# 输入用户名(使用Base64编码)
USER=$(echo -n "test_account" | base64)
adb shell am broadcast -a ADB_INPUT_B64 --es msg $USER
# 模拟Tab键切换到密码框
adb shell input keyevent KEYCODE_TAB
# 输入密码
PASSWORD=$(echo -n "Secure123!" | base64)
adb shell am broadcast -a ADB_INPUT_B64 --es msg $PASSWORD
# 模拟回车登录
adb shell input keyevent KEYCODE_ENTER
验证:执行脚本后检查应用是否成功登录
多设备管理:企业级批量操作方案
目标:同时向多台设备发送相同文本内容
操作:
# 获取已连接设备列表
devices=$(adb devices | grep -v List | cut -f1)
# 并行发送文本到所有设备
for device in $devices; do
(
echo "正在操作设备: $device"
adb -s $device shell am broadcast -a ADB_INPUT_B64 \
--es msg $(echo -n "设备配置已更新" | base64)
) &
done
wait
验证:检查所有设备是否均收到文本消息
跨平台适配:Windows与Linux环境兼容方案
| 功能 | Linux/macOS实现 | Windows实现 |
|---|---|---|
| Base64编码 | echo -n "文本" | base64 |
powershell -Command "$([Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('文本')))" |
| 多设备并行 | for device in $(adb devices...); do (command) & done |
for /f "skip=1" %d in ('adb devices') do start /b adb -s %d command |
| 脚本语言 | Bash | Batch/PowerShell |
高级功能:特殊场景解决方案
特殊字符输入:表情与符号注入
目标:向输入框发送表情符号与特殊字符
操作:使用Unicode编码发送
# 发送"😀👍"(Unicode编码分别为128512和128077)
adb shell am broadcast -a ADB_INPUT_CHARS --eia chars '128512,44,32,128077'
验证:检查输入框是否正确显示表情符号
快捷键模拟:组合键操作实现
目标:模拟Ctrl+A全选操作
操作:
# 4096代表META_CONTROL_ON,29代表KEYCODE_A
adb shell am broadcast -a ADB_INPUT_TEXT --es mcode '4096,29'
验证:检查当前输入框内容是否被全选
问题排查与优化
常见错误及解决方法
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 命令执行成功但无输入 | 未激活ADBKeyBoard | adb shell ime set com.android.adbkeyboard/.AdbIME |
| 中文显示乱码 | 系统版本过高 | 使用ADB_INPUT_B64方式 |
| 广播命令无响应 | 应用未获取焦点 | 先通过adb shell input tap x y激活输入框 |
性能优化建议
- 命令批处理:将多个操作合并为一个脚本,减少ADB连接次数
- 连接复用:使用
adb shell进入交互模式后执行多条命令 - 状态检查:在关键步骤前添加输入法状态验证
总结
ADBKeyBoard通过创新的广播意图机制,突破了Android系统输入法的限制,为自动化测试和设备管理提供了强大的文本输入解决方案。掌握基础安装配置、文本输入、按键控制这三个核心技巧,即可应对大多数自动化场景需求。对于企业级应用,其多设备管理能力和跨平台兼容性使其成为规模化测试的理想选择。随着移动应用测试复杂度的提升,ADBKeyBoard将继续发挥其在字符输入控制领域的独特价值,帮助测试工程师构建更稳定、更高效的自动化测试流程。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0148- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0111