一个作用于 ColorOS 系统录音机(com.coloros.soundrecorder)的 LSPosed 模块。
通话录音入库后自动触发"录音转文本",无需手动逐条点击;录音列表右上角菜单支持一键批量转文本;原生搜索原本只能搜"摘要",本模块为其注入了转写正文全文搜索能力。
模块无界面、无桌面图标,全部功能均在录音机进程内通过 Hook 实现。
仓库只放打包的apk, 源代码请查看: 源代码
在录音列表(BrowseFragment)右上角展开菜单中注入两个菜单项(位于"设置"下方):
| 菜单项 | 行为 |
|---|---|
| 转文本 | 扫描全部通话录音(最新优先),跳过已转完的,取最多 10 条未转的批量触发 |
| 转全部 | 同上但不设上限,库里所有未转的通话录音全部入队 |
批量任务由事件驱动的串行队列(ConvertQueue)逐条推进:每条转写完成后(Hook 完成回调)延迟 3s 再触发下一条,长录音也会等到真正转完才继续;另设超时保底防止队列卡死。
原生搜索只能命中"摘要"(AI 生成,非全部录音都有)。本模块在后台为每份转写 txt 建立 SQLite FTS 索引,并将命中结果伪装成摘要条目注入原生搜索结果:
- 关键词高亮、点击跳转播放页等 UI 全部复用宿主原生逻辑,零自定义界面;
- 注入条目统一打上「转文本:」标签,与原生"摘要"区分;
- 转写完成 / 录音删除时增量同步索引(Hook 落库口与删除口),另有一次搜索前懒对账兜底清理。
- 宿主:ColorOS 系统录音机
com.coloros.soundrecorder,实际开发与测试基于 17.8.8 版本; - 框架:LSPosed(libxposed 现代 API,API ≥ 102);
- 其他 ColorOS / realme UI 版本未逐一验证,类名漂移时依赖 DexKit 兜底,欢迎反馈 issue。
要求:JDK 17 + Android SDK 37(AGP 9 已内置 Kotlin 编译支持)。
./gradlew assembleRelease-
版本号全自动:
versionCode= 当前分支提交总数,versionName= 最近的v*tag(如v1.2→1.2),无需手动维护; -
正式签名:在项目根目录创建
keystore.properties(已被 gitignore,不进仓库):storeFile=release.jks storePassword=xxxxxx keyAlias=xxxxxx keyPassword=xxxxxx
该文件不存在时自动回退 debug 签名,便于本地验证。
- 构建 APK 后安装到手机(或从 Releases 下载);
- 在 LSPosed 中启用本模块;
- 作用域勾选 ColorOS 录音机(
com.coloros.soundrecorder,模块声明为静态作用域,一般会自动勾选); - 重启系统界面或重启手机,打开录音机验证。
验证方式:打开录音机后,在 LSPosed 管理器日志中能看到 module loaded / hooked ... 等日志;通话录音入库后数秒内出现"转文本已完成"提示。
MIT License © 2026 Frank2222
本项目仅供学习交流与个人使用,通过 Hook 技术修改第三方应用行为,与 OPPO / ColorOS 无任何关联。使用本模块产生的任何后果由使用者自行承担,请勿用于非法用途。
