Android 只允许 InputMethodService 向输入框写文本。AI 要合法注入字符串,就得拿输入法身份,不需要键盘 UI。
设计
- UI:点击输入框只弹一条 1px 横线,不弹软键盘,截屏零遮挡
- 协议:HTTP + JSON,固定端口 8767
- 入口:adb forward 访问 HTTP;adb shell am broadcast 走广播
- 服务名编码协议:
com.aixtin.invisime/.Ime_tcp8767_http_json,dumpsys 可见即用
协议
HTTP 主入口:
adb forward tcp:8767 localabstract:httpd
curl -X POST <http://127.0.0.1:8767> -d '{"cmd":"type","text":"你好"}'
广播快速入口:
adb shell am broadcast -a AIX_INPUT_TEXT --es text "你好"
指令集:type / backspace / enter / get_text(回读输入框内容)/ select(选区)/ composition(模拟真人打字节奏)。核心动作只有一个:commitText(CharSequence)。
实现
四个组件:
ImeState:状态机,当前输入法开关与注入目标
InvisImeService:InputMethodService,onCreateInputView 返回 1px View
InvisHttpServer:NanoHTTPD 监听 8767,解析 JSON 指令
InjectReceiver:广播接收,解析 intent extra
文本写入统一走 commitText;读回走 InputConnection 的 getTextBeforeCursor / getTextAfterCursor。
历史 bug:初版 executeType 重复 commitText,已修;fixMojibake() 做 ISO-8859-1→UTF-8 回转。
安全边界
只写不点:不点发送按钮、enter 默认换行、不改写已有文本、不静默切换系统输入法。
实测
真机 OPPO ColorOS Android 14(一加 Ace 3 Pro,WireGuard 10.10.10.3:5555)。
坑:ColorOS 输入法导航栏默认不可见,NavigationBarFrame 被设 alpha=0.0;定位后在 onWindowShown postDelayed 300ms 扫 decorView setAlpha(1.0) 恢复。
HTTP 与广播注入中文、英文、删除、回读均验证通过。
评论