TypeVibrator

📳 LSPosed / LibXposed 模块 | 为 微信输入法、豆包输入法、讯飞输入法、Gboard 提供更丰富的震动选项。

我很喜欢 vivo 输入法那个双段震动,遂制作此模块给别的输入法也弄一个两段震动。

需要 LibXposed API 102(LSPosed 1.9.3 及以上),以及 Android 13(API 33)及以上。


🪲我有话说:

  • 作者只有一部 vivo 手机开发与测试,因此当你的设备没有生效时欢迎带日志反馈(issue/酷安)。

  • 酷安在这,有问题欢迎。

  • 个人仓库,这边更新也许更及时一点。

  • 频道链接,感觉做个模块频道有一种很有模块感觉的感觉所以建了一个频道。

  • 觉得高兴可以喂作者一口🫣

    喂喂作者

⚠️已知问题

  • 部分ROM对输入法的震动反馈有特调震动,例如对于作者的设备微信输入法和gboard都在此白名单中,导致输入法发出的震动不能被原样播放。该问题本模块目前无法通过操作模块与宿主绕过。因此如果在您的设备上也出现了部分输入法有两段震动但震动降级/与配置不一致请考虑此限制。未来可能通过Hook系统框架解决,免root框架暂时无解决方案。

🏖️食用方法

安装

  • 通过 LSP仓库/本仓库 下载模块并安装。在 LSPosed 管理器中启用模块、勾选作用域(微信输入法 / 豆包输入法 / 讯飞输入法 / Gboard)后,重启一次目标应用即可。讯飞的定制版(.oem / .miui)不在默认作用域里,需要手动勾选对应应用。此后更新模块本体不需要再重启输入法(走 API 102 热重载,若设置页正在前台会推迟到关闭后)。
  • 模块鲁棒性还行,兼容其他模块和部分修改版。但对于***“共存版”、“改包名版”***,因包名改变会导致无法使用,可拉取源码自行编译。

配置

  • 打开输入法的设置页,点击屏幕侧边悬浮的圆形按钮进入模块设置。模块没有桌面图标。

  • 根级底栏为「首页 / 配置 / 设置」三项:

    • 首页:框架连接状态、版本信息、宿主概览、注入状态;
    • 配置:按下震动、抬起震动、恢复默认配置、重载输入法;
    • 设置:颜色模式、配置导入 / 导出、调试日志、帮助文档、关于(仓库 / 酷安 / 频道 / 赞助)。
  • 震动风格
    • 无震动:顾名思义
    • 系统预设:Android 系统中现有的最多 20 种震动风格
    • 简单自定义:自定义震动时长与强度的震动
    • 自定义波形:自定义具体震动曲线的高级震动,参阅 高级配置
  • 其他设置
    • 配置导入 / 导出:导出为 JSON 文件,或从文件选择器导入;导入时校验格式,非法文件会被拒绝
    • 调试日志:调试输出开关、清除日志、打包导出
  • 重载输入法: 用于在重启输入法后才能生效的场景(例如更换了震动目标类)。需授予宿主 root 权限。

  • 配置保存在各输入法自己的数据目录:/sdcard/Android/data/<宿主包名>/files/haostoo/config/state.json,各宿主独立保存但结构相同。可用「导出配置」备份。

高级配置

自定义波形可直接在设置页图形化编辑:在「配置」页将按下/抬起风格选为自定义波形后,点击 设置波形 进入编辑器。

点击某方向的「设置波形」只会编辑该方向(按下或抬起)的波形。编辑器包含:

  • 有效波段数(2~8):该卡片唯一的波段数量来源;
  • 曲线预览:平滑拟合曲线(仅作视觉预览,实际震动按符合牛顿定律的离散数值执行),点击曲线节点可打开该波段的底部调整面板;
  • 波段编辑行:按有效波段数生成,逐段填写时长(ms)与强度(0~255);第 1 段时长依 Android 文档固定为 0 且只读。

默认预填一套四段波形。缩小波段数后再放大,会保留本次编辑中隐藏的波段值;新增波段按当前曲线插值生成非零初值,不会补零。点击保存才写入配置并生效;取消或返回不会写入。

当震动风格为自定义波形时,对应的按下(Down)或抬起(Up)震动将根据此配置震动。通过自定义曲线理论上可以模拟绝大多数应用和系统触觉反馈的震动风格,包括但不限于部分定制输入法提供的模拟机械键盘震动。

配置示例

导出的配置文件形如:

{
  "schema": 3,
  "host": "com.bytedance.android.doubaoime",
  "state": {
    "settings": { "down_mode": 1, "up_mode": 0 },
    "waveform": {
      "down": { "timings": [0, 10, 40], "amplitudes": [0, 140, 60] },
      "up": { "timings": [0, 40], "amplitudes": [0, 120] }
    }
  }
}
字段说明

down: 按键按下时触发的震动波形。

up: 按键抬起时触发的震动波形。

timings: 震动时间数组,单位为毫秒(ms)。数组中的每个元素表示该阶段持续的时间。

amplitudes: 震动强度数组。取值范围:0 ~ 255。数值越大,震感越强。

示例:
"timings": [0, 6, 6],
"amplitudes": [0, 140, 60]

表示:

阶段 时长 强度
0 立即开始 开始
1 持续 6ms 140
2 持续 6ms 60

CustomHaptic 配置规则

1. 两个数组长度必须一致

正确:

{
  "timings": [0, 6, 6],
  "amplitudes": [0, 140, 60]
}

错误:

{
  "timings": [0, 6, 6],
  "amplitudes": [0, 140]
}
2. timings 第一个元素必须为 0

正确:

"timings": [0, 6, 6]

错误:

"timings": [5, 6, 6]
3. timings 值必须非负,amplitudes 值必须位于 0~255 之间

正确:

"amplitudes": [0, 120, 255]

错误:

"amplitudes": [0, 300, -1]
4. 数组不能为空

错误:

"timings": []

配置建议

  • 不同设备的马达性能不同,相同配置的实际震感可能存在 巨大差异。想获得较正常的体验至少需要线性马达。转子马达难以高精度控制,效果很差。

  • 不同系统对于震动调用的频率和精度也有限制。因此 timings 分段不建议过短过复杂,过于复杂精细的曲线可能被系统截断或降级,导致实际震动效果与配置效果有出入。

  • 因此总时长控制在几十毫秒,分 2~4 段是比较甜点的选择。

自定义波形震动基于 VibrationEffect.createWaveform() 实现。


📄许可证

本项目基于 Apache License 2.0 开源。

Releases

1605

Stable

10/31/2026, 4:33:28 AM

  • 新增讯飞输入法,Gboard支持

  • 设置页现在通过输入法设置的FAB打开

  • 小修小补

  • 部分ROM对输入法的震动反馈有特调震动,例如对于作者的设备微信输入法和gboard都在此白名单中,导致输入法发出的震动不能被原样播放。该问题本模块目前无法通过操作模块与宿主绕过。因此如果在您的设备上也出现了部分输入法有两段震动但震动降级/与配置不一致请考虑此限制。未来可能通过Hook系统框架解决,免root框架暂时无解决方案。

Assets

3

ver1.2.2

Stable

8/30/2026, 2:14:42 AM

v1.2.2 (1225) · 2026-08-29

  • 修复:设置页与 hook 的配置路径不一致问题,配置读写统一指向宿主(输入法)目录,修改设置能正确生效
  • 新增:配置热重载(FileObserver 监听配置目录),保存后即时生效,无需重启输入法
  • 新增:外观主题(浅色 / 深色 / 跟随系统)
  • 新增:调试与日志 —— 调试输出开关(按分类输出 hardware/vibrate/ui 日志到 logs 目录)、清除日志、导出日志(打包 zip 到指定位置)
  • 清理:移除冗余代码

已知问题

  • 微信输入法侧「简单自定义」与「自定义波形」的震动输出可能受设备 ROM 限制偏弱;豆包输入法侧全部模式完整可用

Assets

3

ver1.1.7

Stable

4/30/2026, 8:27:33 AM

本模块迎来大变!


  • 移除原有的模块界面
  • 新增寄生设置页,设置打开方式:微信输入法设置->帮助与反馈。
    (部分修改版移除了微信输入法的桌面图标,不过实测仍可通过键盘界面打开设置)
  • 移除了hook成功的toast提示,改为在模块目录下生成文件标记(hookstatus.txt),当方法找到hook成功时生成,记录hook注入时间。
    (有的系统好像经常会把键盘进程干掉导致频繁弹toast比较碍事,想来可能需要看这个toast的也不是很多毕竟用手一点就知道成没成功了)

  • 提供的快速重载功能,用于快速重启输入法子进程

  • 好像也没有别的了,功能都在设置页写了。
    对了选择系统预设风格的下拉菜单是可以滑动的。一共有二十种预设风格选择。由于Android版本不同和厂商魔改可能会导致有的效果不生效或者很诡异,自行体验。

  • 模块的配置文件位于/storage/emulated/0/Android/data/com.tencent.wetype/files/haostoo/,config/config.xml为配置文件,可以直接精确数值修改(不过意义不是很大就是了反正最后都要换算到0~255再取整),hookstatus.txt为hook标记,前文提过。


以上

继续欢迎带日志反馈,有日志反馈我就尽量修,没反馈我自用没问题就不管了。
然后我要研究怎么做下滑快捷操作顺便好好学学kotlin了,这个好像没我想的那么简单。短时间内如果没有严重问题估计不会更新了。

Assets

3