Releases: CommandPrompt-Wang/BetterZUIKey-GboardExt
Release list
Gboard 增强 v1.0.0
Gboard 增强 v1.0.0
摘要
首个公开版本。本模块通过 LSPosed 注入 Gboard 进程,拦掉它自己的语言 / 布局切换,把「切语言」这件事交还给系统输入法框架 —— 让 BetterZUIKey 的「切换到下一个输入法语言」对 Gboard 也能用;并在提交链路上补齐标点归一、引号括号配对,以及中文态 Enter 不误提交。
完整变更: 本仓库首个版本,见 https://github.com/CommandPrompt-Wang/BetterZUIKey-GboardExt/commits/main
新功能
-
框架驱动的语言切换(严格模式)(「只响应系统框架语言切换消息」,默认关):拦掉 Gboard 自己切语言 / 切布局,语言只由框架 / BetterZUIKey 决定。四层挂点(客户端
InputMethodManager/ 输入法侧InputMethodService/ IMMS 的 Binder 代理 /IInputMethodPrivilegedOperations代理),外加拦掉「地球键 → 注入KEYCODE_LANGUAGE_SWITCH(204)→ 系统替它切」这条路。需要 BetterZUIKey v1.7.0 以上。只拦「当前输入法内部」的 subtype 切换——目标是别的输入法时一律放行(那是换输入法,不是换语言);装不上、认不出的一律放行并打日志。- 1.6.x 亦可联动部分功能,但无法使用轮转顺序自定义功能,系统框架只能切换最近使用的 2 门语言。
-
标点管线:把「该出什么字符(语义层)」与「宽窄(形式层)」拆开,二者可独立切换。
功能 说明 快捷键 默认 完整的 ……和——输入 —/…时输出两个而不是一个— 开 智能中文标点 更合理的中文标点映射( + - # [ ]等按半角处理)— 开 全角模式 允许在全角 / 半角之间切换 Shift+Space开(状态默认半角) 中英文标点 允许中文态在中英标点之间切换 Ctrl+.开(状态默认中文标点) 智能编号 数字后面的 。)自动用半角,方便输入1.2)— 开 - 半角 = 把
FF01–FF5E按区间规则拉回 ASCII(只排除中文标点!?;:,());全角 = 只把符号转全角、不动字母数字(否则中文态打字会变成全角拼音) - 之所以用区间而不是逐个补表:Gboard 原生的
.so里躺着一张覆盖整个 ASCII 可打印区的 1:1 全角表,+=这类就是补漏漏出来的,补表是打地鼠
- 半角 = 把
-
引号 / 括号自动补全:软键盘与物理键盘两个独立开关,共用同一份可编辑的配对表(默认 18 对,支持分组换行;留空 = 不配对)。
- 软键盘(默认开):打引号、括号时自动补另一半并把光标移进中间
- 物理键盘(默认关,状态默认开;快捷键
Ctrl+Shift+9):同上,但只认硬件按键 - 有选区时包裹选区(
abc→(abc))而不是替换它 - 光标后侧已有闭字符时只把光标移过去,不再多吐一个;手动移动光标后可以恢复正常闭合
-
中文态 Enter 不误提交(默认关):在「按回车就提交」的输入框(浏览器地址 / 搜索框、聊天消息栏)里,拼音栏还有字时按 Enter 会把原始拼音上屏、但整个输入框不再被提交。做法是把普通 Enter 整对(down + 配对的 up)改写为带
Shift交给 Gboard 走它自己的 Shift+Enter 路径,再把这次「给拼音上屏用的」注入事件吞掉;拼音仍由 Gboard 自己提交,引擎内部状态天然同步。 -
配置热生效:广播推送 + 有界补播链(
0s / 10s / 30s / 1min / 3min / 10min / 30min),改完设置无需重启输入法,也照顾到「改设置那一刻 Gboard 往往没在跑」的场景。 -
状态位镜像:三个状态位(全角 / 中英标点 / 物理补全)的当前档位回传到设置页显示,长按整条可应急切换。
-
界面:Material 3 首页;最上面是「自启动权限」入口与说明;快捷键反馈用贴底横幅(Gboard 进程里的 Toast 会被系统按应用通知设置拦掉,实测静默失效)。
已知限制
-
中文态 Enter 不提交不覆盖软键盘:软键盘上的 Enter 不走
onKeyDown,本功能只对物理键盘生效。- 不过软键盘一般也遇不到这类问题
-
自启动状态无法自检:联想把每个应用的自启动状态记在安全中心的私有 prefs 里,其它应用无权限读,
Settings.Global/Secure中没有对应的键(疑似这一块被魔改),所以 App 判断不出来是否已放行,只能自行前往系统设置确认。
其他
- 仅针对
com.google.android.inputmethod.latin的 Gboard,其他输入法无效。 - 兼容 Gboard
17.2.2~18.3.1/arm64:以17.2.2为开发基线,18.1.3完成静态核验,最终在18.3.1实装 A/B 测试。理论上该范围和接近此范围的版本都可以生效,其它遥远版本可以尝试,但不保证效果。 - 好消息是:除 DexKit 的结构化查找之外,功能挂的都是框架类 / 框架方法名,不硬编码混淆名。实测这三代 Gboard 的混淆名整批换了三套而本模块挂点一个都不用改。因此换版本时更可能是功能降级而不是完全崩溃。
- 逆向、踩坑与实测数据整理在仓库 PRINCIPLE.md。欢迎研究学习。
- 本仓库主要部分为 AIGC,可能有缺陷,欢迎审查和 PR。
⚠ 安装与升级注意
- 安装后在 LSPosed 中启用模块即可 —— 作用域由模块静态声明(只有 Gboard),无需也无法手动勾选;随后杀死 Gboard 进程(或重启设备),让 hook 生效。
- 打开模块 App 可见各开关;系统设置里给个自启动权限会让配置同步更稳。
- 若要用严格模式(需要 BZK v1.7.0 以上):在 BZK 的「输入法增强 → 输入法适配管理」页的「使用系统框架」一段里把 Gboard 勾上(1.7.0 起 Gboard 是内置项,默认关),再打开本模块的严格模式开关。
- 框架默认只在「最近用过的两个语言」之间轮转;要让快捷键按顺序轮满多个语言,长按那条进「轮转顺序」页,打开「覆盖默认轮转顺序」。
- 需要 Android 8.1+ / LSPosed。
- 本模块直接 hook 输入法的按键、提交与语言切换链路。不当配置可能导致切不到某个语言、标点 / 配对行为异常,或严格模式下无法切换语言(此时先关掉严格模式)。