文件
..

蟹蟹输入 Android应用内键盘组件

基于CrabKeyboard MIT词库,由herry重写的Android手表原生键盘组件,1.2.3 / 10203。提供可集成的 AAR、演示APK和独立接入示例;适用Android 8.1 / API 27及以上。

应用接入后,点击自己的输入框自动展开内置键盘。不注册系统输入法、不要求用户切换输入法、不改变系统默认输入法。 圆屏按每行所在高度计算安全弦宽;4×4完整候选,单字16个一页,词组扩宽或增加行高,候选不显示拼音。九宫、标准QWERTY全拼/英文、14键、数字、三页符号、Unicode删除、按住连删及光标编辑。

完全离线,无网络或外部存储权限;组件不持久化输入内容,不启用学习。密码输入默认英文并遮蔽预览。页面隐藏/销毁时清除组件会话与候选,宿主输入框中的内容仍由宿主决定如何处理。异步查询按会话序号隔离,旧结果不能回填新的输入框。

1.2.3 增加未完成拼音补全、上下文续写及词频排序;复用预览、按键及候选控件,按帧合并刷新。联想仅在内存中使用当前输入框光标前的中文,不持久化全文,密码内容不参与。见本版验收。

1.2.2 去掉英文、数字、符号模式未使用的候选栏空位,文字与键盘紧密相接。本版真机间距检查通过;完整测试的限制见验收记录。

一分钟接入

将发行版crab-keyboard-1.2.3.aar放入宿主app/libs/:

dependencies { implementation files('libs/crab-keyboard-1.2.3.aar') }
import com.sydxky.crabinput.CrabKeyboard;

// Activity 的 UI 线程,已有 EditText;attach 返回一个可关闭绑定。
CrabKeyboard.Binding keyboard = CrabKeyboard.attach(this, editText);
// 已有自己的焦点/点击处理时,可在相应事件调用 keyboard.show()。
// Activity 销毁时可显式 keyboard.close(),重复关闭安全。

attach会接管该输入框的焦点和点击监听器,并关闭此框的系统软键盘自动显示。show()、dismiss()、close()在UI线程调用。自动监听宿主Activity停止和销毁,停止时关闭会话,关闭绑定时恢复输入框原来的软键盘显示属性。组件通过该输入框的Editable/InputConnection回填,支持选区和数字/密码/网址InputType。窗口为宿主应用自己的Dialog,不申请悬浮窗权限。

需要保留自定义监听器时,先取得绑定,再在自定义事件中调用keyboard.show();不要重复绑定同一个输入框。host/是独立包名的最小接入示例,app/是完整演示。未接入的应用继续使用原有系统输入法。

模块与构建

模块 用途
keyboard/ 原生公开组件、词库、MIT许可,生成AAR
app/ 圆屏演示APK,包名com.sydxky.crabinput
host/ 独立应用集成示例,证明组件可由其他应用接入

准备JDK 17、Android SDK compile 37及Python 3。词库位于同仓库RTOS目录,SDK/私钥不随源码分发。

python scripts/build-dictionary.py
.\gradlew.bat :keyboard:testDebugUnitTest :keyboard:lintRelease :keyboard:assembleRelease :app:lintRelease :app:assembleDebug :host:assembleDebug
# 演示APK正式签名由本机受保护文件提供;组件AAR无须应用签名。
.\gradlew.bat :app:assembleRelease -PreleaseSigningProperties=<本机签名配置路径>

输出keyboard/build/outputs/aar/keyboard-release.aar。SQLite词库无损转换并全量回读104,837组索引、163,238候选;数据库是可生成的本地资产,不进入Git。正式APK必须使用已批准签名,签名材料不公开。

真机验证

短时验收在已连接的OWW261上使用真实EditText和公开组件,通过UiAutomator点击操作,不直接调用键盘内部状态代替交互;比较测试前后系统默认输入法保持一致。范围及截图见1.2.0验收。演示应用内即可测试,无需启用或切换系统输入法。

.\gradlew.bat :app:assembleAndroidTest :host:assembleDebug -PimeTestBuildType=release -PreleaseSigningProperties=<本机签名配置路径>
python scripts/validate-device.py --serial <已连接手表序列号> --output <本地证据目录>

源码、截图及下载:https://git2.sydxky.cn/sydxky/crab-input-rtos。MIT允许商用,保留LICENSE、NOTICE及词库/jieba许可。AndroidX/JUnit仅用于测试;AAR无第三方运行时依赖。当前是组件和演示验收,未进行商店审核。