Skip to content
dboychtPublic

About

Turn your Android phone into a Bluetooth HID keyboard — landscape layouts (full PC keyboard, phone-style, IME text passthrough) that type on iPad, PC, or TV over Bluetooth. No root required.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

keyforge · 键铸

把安卓手机变成蓝牙键盘:四套布局(手机全屏 / 电脑全键盘 / 双手分体 / 游戏方向键),经蓝牙 HID 直连 iPad 等主机直接打字。 支持文字转发(边打边发):在键盘页的文本框里用你自己的输入法打字,字符边打边发到主机。 也可作为输入法使用(手机负责录入,按键流发给主机)。无需 root。

Turn your Android phone into a Bluetooth HID keyboard — four layouts (phone, desktop 60%, split two-thumb, and a game pad), plus on-the-fly text forwarding and an input-method mode that forwards typed text to the host. No root required.


状态:可用(全屏键盘 + 4 套布局 + 文字转发 + 连接管理 + 输入法)

已在真机上跑通"注册为键盘 → 连接主机 → 敲字上屏"的完整链路,并逐项验证过按键手感:

已实现 说明
蓝牙键盘 手机注册为 HID 键盘(BluetoothHidDevice),与主机配对后直接输入
全屏键盘 隐藏系统栏,键盘占满整屏;顶部一条细状态条 + 按需展开的面板;退出全屏按钮常驻可见,系统栏也可下滑临时呼出
4 套布局 手机全屏(12 格宽,竖屏 30dp 键;26 字母 + 数字行 + - ' , . / + 方向键)· 电脑全键盘(60%,15 格宽:Esc/` 列、完整标点、四向方向键)· 双手分体(13 格宽:中间留 1 格空隙、左右各 6 格、两个空格条)· 游戏方向键(12 格 × 4 行:左手 WASD/QERF + 空格,右手标准「↑ / ←↓→」方向簇;不能打字,选择器里已写明)。选择会被记住;从未选择过时:竖屏(窄窗口)默认手机全屏,横屏(宽窗口)默认电脑全键盘
文字转发(边打边发) 键盘页有一个文本框,用你自己的输入法打字(应用不替换你的输入法),字符边打边发到已连接主机;每次编辑会被判定为追加 / 退格 / 无法复现三类,主机只收到新增字符而不是整行重发;光标跳到无法复现的位置时会重新锚定并明说,而不是发出错误的按键;「边打边发」开关可随时开启或关闭
输入法模式 可在系统输入法列表里选「键铸输入法」:手机自身的编辑/联想保持可用,输出发给主机。这是次要路径,只为让手机自己的编辑与候选保持可用;上面的文字转发不需要它(那个用的是你平时的输入法)
长按 = 按住 同真实键盘:按住一个键只发按下、不发抬起,字符重复由主机自己产生;抬起只发生在手指离开的那一刻(这样串流玩游戏时长按方向键是连续移动,不是一顿一顿)
按键震动 按下按键时手机轻震一下(走系统的 VIRTUAL_KEY 触感通道,因此跟随系统的触感/触觉反馈设置);可在「键盘」设置里随时开关,默认开
按键音 按下按键响一声:系统允许「触摸提示音」时用系统那声(音色与手机其他按键一致),系统关掉时用应用自带的短促音(因此开关一定听得到);「键盘」设置里可随时开关,默认开
4 套配色 夜幕(默认)· 明亮 · 午夜蓝 · 樱花;只改键盘本身的颜色(键面、按下高亮、键盘底色),设置页仍跟随系统深色;选择会被记住。每套配色都由单测校验可读性(文字对比度 ≥ 4.5:1、键面与底色可分辨),并有一张数据驱动的预览图
「关于」 设置里一键查看:应用名、版本号(读自安装包,与 versionName 同一来源,不写死)、支持范围、实测主机(iPad ✅ / Windows 11 + MediaTek ❌ / 其他未实测)、已知限制(只能发扫描码)、许可证,以及 GitHub 仓库与查看最新版本两个链接
修饰键两种模式 默认同电脑键盘(按住生效、松手释放);可在设置里切成"点一下保持"
前台服务 离开应用后键盘仍保持连接(有常驻通知,可直接断开/停止)

尚未实现(后续方向):鼠标/媒体键/触摸板。

⚠️ 只能转 ASCII,文字转发也一样:HID 键盘只有按键扫描码,中文/emoji 没有扫描码。 用中文输入法打拼音,主机收到的是那些字母;发不出去的字符会逐字列出字符和原因, 不会假装成功,也不会被悄悄丢掉或变成错误的按键。

兼容性(实测,请先读)

键盘能力来自 Android 的 BluetoothHidDevice(HID Device 角色,Android 9 / API 28+), 但能否真正用起来取决于主机侧的蓝牙栈。实测结果:

主机 结果
iPad(iPadOS) ✅ 可用(90 ms 内建立连接,持续在线,敲字正常上屏)
Windows 11 + MediaTek 蓝牙 ❌ 不可用:主机的配对记录里始终没有 HID 服务,手机发起的连接约 16 秒后被主机断开
其他主机 未实测。仓库带一个探针 tools/bt-service-probe.ps1,可在 Windows 上检查"主机是否登记了本机的 HID 服务"

⚠️ 另外部分厂商固件没有向应用开放 HID Device profile。仓库里的能力探针(应用内"能力探针"页面) 就是用来在目标机型上先确认这一点的:registerApp 成功才谈得上后续。 在 OPPO K12 Plus / Android 16 上实测:支持。

已知边界

  • 非 ASCII 无法通过标准键盘协议送达:HID 键盘只传按键扫描码,中文、emoji 没有对应扫描码。 因此文字转发只转发可映射的 ASCII 按键——用中文输入法打拼音,到达主机的是那些字母; 中文要靠目标设备自己的输入法(如 iPad 已装拼音)才能上屏。
  • 本项目不需要 root,也不会要求 root。

使用

键盘页(手机自己当键盘)

  1. 安装 APK,打开应用 → 「能力探针」会检查本机是否支持(不支持会直接说明原因)。
  2. 点「打开键盘」进入键盘页,用系统蓝牙与主机配对。
  3. 点「连接设备」选择主机 → 显示"已连接"后即可打字。
  4. 需要保持连接时直接切走应用即可(前台服务会维持会话;通知栏可断开或停止)。
  5. 设置里的「全屏键盘」打开后键盘占满整屏(顶部状态条有「退出全屏」);顶部状态条还有一个「文字转发」按钮,点它会唤起你自己的系统键盘,你的键盘升起期间应用会隐藏自己的屏幕键盘,免得挡住文本框。

文字转发(边打边发)

  1. 先在键盘页连好主机。
  2. 打开「边打边发」开关。
  3. 在文本框里用你自己的输入法输入(应用不会替换你的输入法):字符边打边发,主机那边就开始上屏。
  4. 每次编辑会被判定为追加 / 退格 / 无法复现三类,因此主机只收到新增的字符,不会把整行重发一遍。
  5. 光标跳到应用无法复现的位置时,它会重新锚定并明确告知,而不是继续发出错误的按键。

输入法模式(在别的应用里打字,输出到主机)

  1. 系统设置 → 语言与输入法 → 启用「键铸输入法」,并切换为当前输入法 (或在任意输入框弹出的输入法切换器里选它)。
  2. 先在键盘页连好主机(输入法与键盘页共用同一个连接会话)。
  3. 在输入框里输入文本 → 点「发送」,按键流会发到主机。
  4. 中文/emoji 等无法发送的字符会逐字列出原因(HID 只有扫描码),其余字符照常发送。

⚠️ 「输入法模式」是一条次要路径,只为让手机自己的编辑与联想保持可用;上面的 文字转发不需要它——文字转发用的是你平时的输入法,不需要把键铸设成系统输入法。

环境要求(构建)

组件 版本
JDK 17+(本机用 Microsoft OpenJDK 21)
Android SDK compileSdk 36、build-tools 36.x;local.properties 里 sdk.dir 指向本机 SDK
Gradle 8.13(wrapper 已随仓库提供)
最低运行版本 Android 13(API 33)
$env:JAVA_HOME = "<你的 JDK 17+ 目录>"
.\gradlew.bat assembleDebug        # 产物:app\build\outputs\apk\debug\app-debug.apk

单元测试(纯逻辑:键码映射 / 报文 / 状态机 / 布局数据 / 文本转发):

.\gradlew.bat testDebugUnitTest

⚠️ 作者本机的 wrapper 发行包下载被本地代理的 TLS 解密阻断(见开发副本 ERROR.md E1), 可直接用已解包的 Gradle 构建:<GRADLE_USER_HOME>\wrapper\dists\gradle-8.13-bin\<hash>\gradle-8.13\bin\gradle.bat assembleDebug。

版本

版本号单一来源:app/build.gradle.kts 的 versionName(当前 1.0.3 为开发中版本; 1.0.2、1.0.1 为已发布版本)。 打 tag / 发 Release 由维护者按需触发。

说明:目前的 release 构建用调试密钥签名(tools/sign-apk.ps1), 面向自用/测试;正式发布前会换成正式 keystore。

许可证

Apache License 2.0

About

Turn your Android phone into a Bluetooth HID keyboard — landscape layouts (full PC keyboard, phone-style, IME text passthrough) that type on iPad, PC, or TV over Bluetooth. No root required.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages