高质量、全自动的 Android 通话录音应用。为已 root 设备、自定义 ROM 和 Xposed/LSPosed 框架用户设计。
🎙️ Vibe Coding — 本项目由 Claude Code 驱动开发,通过 Skill 编排多智能体协作完成从需求分析到代码实现的全流程。
| 录音界面 | 归档列表 | 设置 |
|---|---|---|
![]() |
![]() |
![]() |
- 全自动触发 — 通过
InCallService监听通话状态,来电/去电自动开始录音 - 6 种输出格式 — Opus (OGG) · AAC (M4A) · FLAC · WAV (PCM) · AMR-WB · AMR-NB
- 智能规则引擎 — 按号码、通话方向、SIM 卡槽设置录音规则(保存 / 暂停 / 丢弃 / 忽略)
- 通配符匹配 — 号码模式支持
*前缀/后缀匹配 - 前台通知 — 通话中常驻通知,支持暂停/恢复/保留/丢弃快捷操作
- RMS 静音检测 — 基于均方根算法(默认 -40dBFS 阈值,90% 静音占比),自动丢弃无效录音
- 多音频源 — VOICE_CALL / VOICE_UPLINK_DOWNLINK(立体声分离)/ VOICE_UPLINK / VOICE_DOWNLINK
- 与通话录音共享同一套
AudioRecord+MediaCodec原生引擎 - 支持全部 6 种格式、自定义文件名模板、元数据 JSON 输出
- 暂停/恢复、长按停止(带进度环动画)
- SAF 输出 — 用户可选择任意目录(SD 卡 / 外部存储)
- 统一归档 — 通话录音和手动录音在同一列表中展示
- 方向标签 — 来电(绿)/ 去电(蓝)/ 会议(紫)
- 内联播放 — just_audio + ExoPlayer 原生支持 content:// URI
- 下拉刷新 — 及时同步文件变更
- 元数据 JSON — 每次录音生成侧车文件(通话详情、格式参数、录音指标)
- 自动清理 — 按天数保留策略自动删除过期文件
- Material 3 — ColorScheme.fromSeed() 动态主题,亮色/暗色/跟随系统
- 底部导航 — 录音 / 归档 / 设置三 Tab 布局
- Firebase Auth — Google 登录(无 GMS 设备优雅降级)
- DirectBoot — 未解锁设备也可录音,解锁后自动迁移
- Magisk / KernelSU 模块安装(priv-app)
- Xposed / LSPosed 模块支持
- 仅支持 Android 10+ (API 29+),目标 API 36
模块打包功能开发中,详见 T-11。
- 下载最新
acr-vX.Y.Z-ksu.zip - 在 Magisk / KernelSU Manager 中刷入模块
- 重启设备
adb push app-release.apk /system/priv-app/studio.unicom.acr/studio.unicom.acr.apk
adb push privapp-permissions-studio.unicom.acr.xml /system/etc/permissions/
adb reboot- 安装 APK
- 在 LSPosed Manager 中启用 ACR 模块
- 选择推荐的作用域(电话、通讯录)
- Flutter 3.x (stable)
- Android SDK 34+
- JDK 21
# 克隆项目
git clone git@github.com:UnicomAndroid/ACR.git
cd ACR
# 安装依赖
flutter pub get
# 构建 APK
flutter build apk --release
# 输出: build/app/outputs/flutter-apk/app-release.apk┌─────────────────────────────────────────┐
│ Flutter (Dart) │
│ ┌─────────┐ ┌────────┐ ┌───────────┐ │
│ │ Rec Tab │ │Archive │ │ Settings │ │
│ └────┬─────┘ └───┬────┘ └─────┬─────┘ │
│ └────────────┼────────────┘ │
│ NativeBridge │
│ MethodChannel IPC │
├─────────────────────────────────────────┤
│ Android (Kotlin) │
│ ┌──────────────────────────────────┐ │
│ │ MainActivity.kt │ │
│ │ MethodCallHandler + SAF Picker │ │
│ └──────────────┬───────────────────┘ │
│ │ │
│ ┌──────────────┴───────────────────┐ │
│ │ RecorderInCallService.kt │ │
│ │ InCallService 前台服务 │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ RecorderThread │ │ │
│ │ │ AudioRecord + │ │ │
│ │ │ MediaCodec 管道 │ │ │
│ │ └─────────────────────┘ │ │
│ └──────────────────────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ ManualRecordingService.kt │ │
│ │ 手动录音 (复用 RecorderThread) │ │
│ └──────────────────────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ SilenceDetector · Retention │ │
│ │ Format · RuleEngine · Notify │ │
│ │ OutputDirUtils · CallMetadata │ │
│ └──────────────────────────────────┘ │
│ Storage Access Framework │
└─────────────────────────────────────────┘
| 组件 | 用途 |
|---|---|
just_audio / ExoPlayer |
音频播放,原生 content:// URI |
kotlinx-serialization-json |
元数据 JSON 序列化 |
libphonenumber-android |
电话号码格式化与匹配 |
libxposed (API 101.0.0) |
Xposed/LSPosed 模块接口 |
Firebase Auth + Google Sign-In |
用户认证 |
MediaCodec |
音频编码(Opus/AAC/FLAC/AMR) |
AudioRecord |
音频捕获 |
本项目基于 BCR (Basic Call Recorder) 的原生录音引擎,由 Andrew Gunnerson 开发并维护。
- 原始项目 © 2022-2026 Andrew Gunnerson
RecorderThread、Format抽象、OutputDirUtils、SilenceDetector等核心模块继承自 BCR 并进行了适配和增强- Flutter UI、MethodChannel 通信桥、手动录音服务、Material 3 主题等为新增实现
特别感谢 Andrew Gunnerson 和 BCR 项目的所有贡献者。
本项目采用 Vibe Coding 模式开发——与 AI 结对编程,由 Claude Code 作为主要编码代理:
- AI 模型:Claude Code (Anthropic)
- 工作流:Skill 系统 + 多智能体协作(Plan → Explore → Implement → Review)
- PRD → Tasks:从产品需求文档自动生成结构化任务分解
- 全栈覆盖:Kotlin 原生层、Flutter UI 层、MethodChannel IPC、构建配置
"不是 AI 替你写代码,而是你和 AI 一起 Vibe。"
本项目基于 GPL-3.0-only 许可发布。详见 LICENSE。
SPDX-FileCopyrightText: 2022-2026 Andrew Gunnerson
SPDX-FileCopyrightText: 2026 UnicomAndroid
SPDX-License-Identifier: GPL-3.0-only


