>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Kotlin

ShizuCallRecorder 让非Root设备也能在原生Android上恢复通话录音功能

还记得在Android上录制电话就像在Google Play下载第一个应用一样简单吗?Google一直在随着每个新系统版本系统性地封堵这个漏洞。先是限制了通话期间的麦克风访问权限,随后又阻止了第三方录音应用使用辅助功能API。结果,现代设备用户只剩下两个选择:购买内置厂商录音功能的智能手机,或者获取Root权限。

最近GitHub上出现了一个名为ShizuCallRecorder的新项目,其作者找到了第三种方案。这个开源工具可以在Android 12及更高版本上录制通话双方的声音,完全无需任何系统修改。

无Root状态下音频捕获的工作原理

这个项目的思路简单明了。开发者没有试图通过特殊功能来绕过系统安全机制,而是利用了Shizuku基础设施。

对于不熟悉Shizuku的人:它是一个将ADB权限转发到普通应用级别的工具。在Android中以shell(com.android.shell)身份运行,可以获得普通软件无法访问的权限。ShizuCallRecorder的作者在应用内打包了知名scrcpy工具的二进制文件(scrcpy-server)。

当有来电或去电时,ShizuCallRecorder通过Shizuku启动一个隔离线程(scrcpy-server)。服务器直接从系统拦截音频流并传回应用。这样就能清晰地录制双方的声音,即使通过蓝牙耳机通话也能实现。

工作流程如下:

  1. 应用从(TelephonyManager)接收电话状态变化事件。
  2. 请求Shizuku启动内部服务。
  3. 启动带有音频捕获标志的本地(scrcpy-server)实例。
  4. 将流编码为Opus或AAC并保存到设备内存。
  5. 通话结束时,进程停止。

该应用没有持续在后台运行的服务,不会占用内存或消耗电量,只在系统事件触发时才会唤醒。

设置和功能

该工具的功能设计刻意保持简洁。作者在文档中明确警告,不打算将项目变成适用于Telegram或WhatsApp等通讯应用的通用录音工具,主要专注于普通运营商通话。

有用的选项包括:

  • 在Opus和AAC之间选择音频编解码器。
  • 自动录音配合排除规则。可以忽略匿名号码、通讯录中的特定联系人,或仅录制来自未知号码的通话。
  • 通话后自动关闭Shizuku。

最后一点涉及安全考虑。某些银行应用和企业服务客户端对启用的ADB或活跃的Shizuku服务会产生负面反应。为避免触发其他软件的安全机制,ShizuCallRecorder可以自动结束其会话。

注意事项和限制

安装前需要了解技术实现细节。

首先,该工具依赖Android的私有API和(scrcpy-server)逻辑。在原生Android(Pixel、Motorola或AOSP ROM)上运行正常,但智能手机厂商喜欢重写系统通话处理服务。MIUI、HyperOS或One UI等固件可能会出现问题。

其次,并行通话存在细微差别。如果在通话中有第二个来电并切换到它,录音会继续写入同一文件而不会分开。

第三,最近Android版本的隐私规则使得即时访问来电号码变得困难。因此,来电显示有时会延迟触发,自动过滤器可能会错误地将通话视为匿名。

系统版本兼容性如下:

  • Android 11支持但有限制:设备屏幕必须保持解锁状态才能进行音频捕获。
  • Android 12、13、14和15完全支持。
  • Android 16和17由于ADB子系统的公告变更仍存在疑问。

如何试用该项目

设置过程比普通应用商店安装稍复杂,但步骤很简单:

  1. 在智能手机上安装并启动Shizuku(仓库作者推荐使用thedjchi的fork版本)。
  2. 从GitHub的ShizuCallRecorder发布页面下载最新的APK文件。
  3. 授予应用通话和联系人访问的基本权限。
  4. 批准Shizuku访问请求。

ShizuCallRecorder是一个很好的例子,展示了如何通过结合现有基础设施(scrcpy和Shizuku)来解决在Android系统限制面前碰壁的问题。该项目使用Kotlin编写,基于GPL-3.0许可证发布,精准地完成了设计目标。

如果你需要在不Root设备的情况下进行独立通话录音,这个项目绝对值得加入你的工作工具集。

相关项目