> [!WARNING] > librepods.org 并非 LibrePods 项目的官方网站。该网站通过声明版权并在页脚使用 LibrePods 徽标,不准确地声称自己是该项目的官方网站。同时,他们又表示该项目与 LibrePods 项目或其开发者并无关联。 > > 请将任何其他此类网站报告至 [[email protected]](mailto:[email protected]) <picture> <source media="(prefers-color-scheme: dark)" srcset="./imgs/banner-dark.png" /> <source media="(prefers-color-scheme: light)" srcset="./imgs/banner.png" /> <img alt="LibrePods" src="https://assets.kitploit.com/production/public/readmes/7308/dd79739201ddda9382b9f24871abdd8b39e75645fe7c341831c76ed98b61f805.png" /> </picture> <div align="center" style="margin: 20px 0px;"> <a href="https://github.com/kavishdevar/librepods/releases/latest"> <img src="https://img.shields.io/github/downloads/kavishdevar/librepods/total?label=GitHub%20Downloads" /> </a> <a href="https://github.com/kavishdevar/librepods/actions/workflows/ci-android.yml"> <img src="https://github.com/kavishdevar/librepods/actions/workflows/ci-android.yml/badge.svg" /> </a> <a href="https://github.com/kavishdevar/librepods/actions/workflows/ci-linux-rust.yml"> <img src="https://github.com/kavishdevar/librepods/actions/workflows/ci-linux-rust.yml/badge.svg" /> </a> <a href="https://github.com/kavishdevar/librepods/issues"> <img src="https://img.shields.io/github/issues/kavishdevar/librepods" /> </a> <a href="https://discord.gg/HhG4ycVum4"> <img src="https://img.shields.io/discord/1441416992027574375?logoColor=white&color=5865F2&label=Discord" /> </a> </div> # 什么是 LibrePods? LibrePods 让你能够在非 Apple 设备上使用 AirPods 的 Apple 设备专属功能。它实现了 AirPods 与 Apple 设备之间交换数据所用的专有协议,从而在非 Apple 平台上支持切换噪声控制模式、快速入耳检测、准确的电池状态、头部手势、对话感知等功能。 # 功能可用性 | 功能 | Linux | Android | | ----------------------------------------------------------- | ----- | ------- | | 更改聆听模式 | ✅ | ✅ | | 入耳检测 | ✅ | ✅ | | 电池状态 | ✅ | ✅ | | 重命名 AirPods <details><summary>Android 注意事项</summary>在 Android 上,重命名后需要重新配对 AirPods,因为 Android 可能不会使用最新的名称。</details> | ✅ | ✅ | | 降低响亮声音 | 🔴 | ⚪ | | 头部手势 | ⛔ | ✅ | | 对话感知 | ✅ | ✅ | | 自动连接 AirPods | ✅ | ✅ | | 助听器 | 🔴 | ⚪ | | 通透模式自定义 | 🔴 | ⚪ | | 多设备连接(蓝牙多点连接;仅限 2 台设备) | ⚪ | ⚪ | | <details><summary>其他辅助功能配置(点击展开)</summary><ul><li>按压速度</li><li>按住持续时间</li><li>单只 AirPod 的降噪</li><li>滑动音量控制</li><li>音量滑动速度</li></ul></details> | 🔴 | ✅ | | <details><summary>其他通用配置</summary><ul><li>按住以在聆听模式之间循环/调用数字助理(调用数字助理需要较新的固件)</li><li>配置通话控制</li><li>个性化音量</li><li>降低响亮声音(需要 <a href="#vendorid-spoofing">VendorID 欺骗</a>)</li><li>麦克风侧</li><li>入睡时暂停媒体(需要较新的固件)</li><li>启用 <code>Off listening mode</code> 以切换到 <code>Off</code></li></ul></details> | 🔴 | ✅ | | [头部追踪空间音频](#spatial-audio) | ❓ | ❓ | | [心率监测](#heart-rate-monitoring) | 🔴 | 🟡 | | [查找我的](#find-my) | ❓ | ❓ | | [高质量双向音频](#high-quality-two-way-audio) | 🟡 | 🟡 | | 符号 | 含义 | | ------ | ------------------------------------------------------------------- | | ✅ | 已实现且运行良好 | | ⚪ | 需要 [VendorID 欺骗](#vendorid-spoofing);请自行承担风险 | | 🟡 | 实验性/进行中 | | 🔴 | 尚未实现;已计划 | | ⛔ | 不会实现 | | ❓ | 未知 | ## 查找我的 以下与“查找我的”相关的功能已计划,但需要进一步逆向工程,且在 Android 上可能需要 root: - 将你的 AirPods 添加到“查找我的”网络 - 通过充电盒播放声音以找到它 - 遗落时通知 - 切换充电盒提示音 ## 空间音频 该应用目前不会向 Android 提供头部追踪信息,以供操作系统执行 HRTF。此功能尚未完全探索,且可能需要 root。 将立体声空间化超出了本项目的范围,永远不会提供。许多 OEM 厂商都有自己的实现。 ## 心率监测 ### Android 在 `android/rewrite` 分支中可用。[构建](https://github.com/librepods-org/librepods/actions/workflows/ci-android.yml?query=branch%3Aandroid%2Frewrite) ### Linux 尚不可用(不过这在电脑上似乎也没什么用。如果你有任何建议,请创建讨论。) ## 高质量双向音频 在 iOS/iPadOS 上,你可以继续使用 A2DP,同时 AirPods 通过 AACP 从其麦克风发送高分辨率(AAC-ELD 单声道 64kHz?)音频流。 ### Android 在应用内使用 AirPods 的麦克风录制音频,而无需切换到 Headset/Handsfree 配置文件从而降低播放质量。但是,将此功能提供给其他应用/电话系统可能需要 root 权限,如果可行的话。 录音器仍在开发中;可在 `android/rewrite` 分支中使用。[构建](https://github.com/librepods-org/librepods/actions/workflows/ci-android.yml?query=branch%3Aandroid%2Frewrite) ### Linux 请查看 [PR #655](https://github.com/librepods-org/librepods/pull/655)。 # 安装 - [**Android**](https://github.com/librepods-org/librepods/blob/main/android/README.md) - [**Linux**](https://github.com/librepods-org/librepods/blob/main/linux/README.md) # VendorID 欺骗 事实证明,如果你将 DID Profile 中的 VendorID 改为 Apple 的 VendorID,你就可以访问若干特殊功能! 在 Linux 上,你可以通过编辑 `/etc/bluetooth/main.conf` 中的 DeviceID 来实现。将以下行添加到配置文件中 `DeviceID = bluetooth:004C:0000:0000`。对于 Android,你可以在应用的设置中启用 `act as Apple device` 设置(仅在 Xposed 可用且 LibrePods 模块已启用时显示)。 ## 多设备连接 最多可将两台设备同时连接到 AirPods,音频和控制均可。无缝连接切换。当 Android 接管 AirPods 时,Apple 设备上会显示相同的通知,就像它是 Apple 设备一样(“移动到 iPhone”)。当另一台设备接管时,Android 也会显示弹出窗口。 ## 辅助功能设置和助听器 可以配置辅助功能设置,例如自定义通透模式(放大、平衡、音调、对话增强和环境降噪)以及大声降低。 所有助听器自定义都可以从 Android 完成(Linux 即将支持),包括设置听力图结果。该应用不提供进行听力测试的方式,因为这需要更高的精度。使用已有的听力图结果要好得多。 # 协议与逆向工程 请参阅 Nojus([@pabloaul](https://github.com/pabloaul))的 Wireshark 解析器插件,以获取有关所用协议的更多信息:[pabloaul/apple-wireshark](https://github.com/pabloaul/apple-wireshark) 在 LibrePods 的大部分实现中并未使用该解析器;在该解析器制作之前,我已自行逆向工程了该协议。但许多(未来的)功能,包括双向高质量音频和空间音频,如果没有他们的逆向工程努力就不可能实现! # AI 的使用 ## Android 应用 应用的以下部分完全由 AI 生成: - 头部手势 - 全部内容,包括逻辑和 UI - 使用 r2+ 的偏移设置以及 xposed 模块(两个版本) - 故障排除器和 LogCollector 其余所有内容——后台服务、蓝牙管理器类(AACP 和 ATT)、整个 UI,甚至最小的组件都是手动编写的。 部分 UI 组件借鉴自 [Kyant0 的演示应用](https://github.com/Kyant0/AndroidLiquidGlass/tree/master/catalog),该应用采用 [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) 许可。 ## Linux(重写) `aacp.rs` 和 `att.rs` 文件由 AI 从 Kotlin 翻译为 Rust。`media_controller.rs` 文件的部分内容,主要是 pulse 集成,也是由 AI 生成的。 # 支持者 衷心感谢每一位支持本项目的人! <table> <tr> <td align="center"> <a href="https://github.com/davdroman"> <img src="https://assets.kitploit.com/production/public/readmes/7308/776c36c82a7801798fc6ff1a91611d8272c3f21c41f10a808ae6ab459872104a.jpg" width="48" height="48"alt="davdroman"/><br /> @davdroman </a> </td> <td align="center"> <a href="https://github.com/tedsalmon"> <img src="https://assets.kitploit.com/production/public/readmes/7308/29cbb61b4c1f9a9992f644c2592fb4c3a626d580397fb5ff01133039fa9a7441.jpg" width="48" height="48"alt="tedsalmon"/><br /> @tedsalmon </a> </td> <td align="center"> <a href="https://github.com/wiless"> <img src="https://assets.kitploit.com/production/public/readmes/7308/f10d3773c4c1f7ac24dafc11366fd93ae98e40bf3f2252ed17023f6909c280de.jpg" width="48" height="48"alt="wiless"/><br /> @wiless </a> </td> </tr> <tr> <td align="center"> <a href="https://github.com/SmartMsg"> <img src="https://assets.kitploit.com/production/public/readmes/7308/8d8b4afb772a2d505ffbd6d895c279126a6140bd8c3c0431e0fecb1d8cc78d4a.jpg" width="48" height="48"alt="SmartMsg"/><br /> @SmartMsg </a> </td> <td align="center"> <a href="https://github.com/lunaroyster"> <img src="https://assets.kitploit.com/production/public/readmes/7308/8ab33c6770165d3fbd14e19766731ada3f0d9cb29f2c7782d142b848e92c1cbd.jpg" width="48" height="48"alt="lunaroyster"/><br /> @lunaroyster </a> </td> <td align="center"> <a href="https://github.com/ressiwage"> <img src="https://assets.kitploit.com/production/public/readmes/7308/06edb9c51fd205aea82e9415bada62fb35394b66a7b65709ea99dc771a308a69.jpg" width="48" height="48"alt="ressiwage"/><br /> @ressiwage </a> </td> </tr> <tr> <td align="center"> <a href="https://github.com/kkjdroid"> <img src="https://assets.kitploit.com/production/public/readmes/7308/3156f982f536e6bd7c59d465c9b31d02ab86684b688024396caaba99b184f1ba.jpg" width="48" height="48"alt="kkjdroid"/><br /> @kkjdroid </a> </td> <td align="center"> <a href="https://github.com/CitrusJoules"> <img src="https://assets.kitploit.com/production/public/readmes/7308/251a526465bd512cb24e299e6d5f901dc509bf01a3ceb4308b13cdfcf936d1ae.png" width="48" height="48"alt="CitrusJoules"/><br /> @CitrusJoules </a> </td> <td align="center"> <a href="https://github.com/DanielReyesDev"> <img src="https://assets.kitploit.com/production/public/readmes/7308/d184d9fac60f0c7c719d061c7f13da5ae765fcb06a516db3b6368f5a143b1aa3.jpg" width="48" height="48"alt="DanielReyesDev"/><br /> @DanielReyesDev </a> </td> </tr> <tr> <td align="center"> <a href="https://github.com/sumitduster"> <img src="https://assets.kitploit.com/production/public/readmes/7308/dc57745f78d8548393402e301691893b01dc0067a134f7ecf20629d14a81c22b.jpg" width="48" height="48"alt="sumitduster"/><br /> @sumitduster </a> </td> <td align="center"> <a href="https://github.com/GrifTheDev"> <img src="https://assets.kitploit.com/production/public/readmes/7308/3d4decbb6b54d36f8354af483fb767741550b61e163054cddff36d196ea77518.png" width="48" height="48"alt="GrifTheDev"/><br /> @GrifTheDev </a> </td> </tr> </table> # 特别感谢 - @tyalie 编写了该协议的第一份文档!([tyalie/AAP-Protocol-Definition](https://github.com/tyalie/AAP-Protocol-Defintion)) - @rithvikvibhu 以及 lagrangepoint 的各位协助开发助听器功能([gist](https://gist.github.com/rithvikvibhu/45e24bbe5ade30125f152383daf07016)) - @devnoname120 协助完成第一个 root 补丁 - @timgromeyer 制作了 Linux 应用的第一个版本 - @hackclub 主办了 [High Seas](https://highseas.hackclub.com) 和 [Low Skies](https://low-skies.hackclub.com)! - 当然,还有所有以任何方式为本项目做出贡献的人,包括测试、分享反馈,或仅仅是表达关注! # 其他平台的替代方案: - CAPod - 适用于 Android 的 AirPods 配套应用。([play store](https://play.google.com/store/apps/details?id=eu.darken.capod) | [源代码](https://github.com/d4rken-org/capod))。如果你使用的是 Android 16 QPR3 或更低版本且未 root,请使用此应用。 - MagicPods for Steam Deck([网站](https://magicpods.app/steamdeck/)) - MagicPods - 如果你在寻找“适用于 Windows 的 LibrePods”([ms store](https://apps.microsoft.com/store/detail/9P6SKKFKSHKM) [安装程序](https://magicpods.app/installer/MagicPods.appinstaller) | [网站](https://magicpods.app/)) # Star 历史 <a href="https://www.star-history.com/?repos=librepods-org%2Flibrepods&type=date&legend=top-left"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=librepods-org/librepods&type=date&theme=dark&legend=top-left&sealed_token=CS9QF2Wcx-_EN6M7lBhwvTa2WBd5eB8FbQa5FWt3SV14v1OcQdy2aCGsXxHoytVaoylP_pTxj1h2U-odoXDV_EwTqMxM-MQwG_WpvV_1g_yH-Jh3ux2BuWCmS98LxLqfox2ibLOlFDHu_-geTLFsTmqTc1SjX6-NYxVHXF5DaqnxFOAyjLPL5_WtXVew" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=librepods-org/librepods&type=date&legend=top-left&sealed_token=CS9QF2Wcx-_EN6M7lBhwvTa2WBd5eB8FbQa5FWt3SV14v1OcQdy2aCGsXxHoytVaoylP_pTxj1h2U-odoXDV_EwTqMxM-MQwG_WpvV_1g_yH-Jh3ux2BuWCmS98LxLqfox2ibLOlFDHu_-geTLFsTmqTc1SjX6-NYxVHXF5DaqnxFOAyjLPL5_WtXVew" /> <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=librepods-org/librepods&type=date&legend=top-left&sealed_token=CS9QF2Wcx-_EN6M7lBhwvTa2WBd5eB8FbQa5FWt3SV14v1OcQdy2aCGsXxHoytVaoylP_pTxj1h2U-odoXDV_EwTqMxM-MQwG_WpvV_1g_yH-Jh3ux2BuWCmS98LxLqfox2ibLOlFDHu_-geTLFsTmqTc1SjX6-NYxVHXF5DaqnxFOAyjLPL5_WtXVew" /> </picture> </a> # 许可证 LibrePods - 从 Apple 生态系统中解放出来的 AirPods 版权所有 (C) 2025 LibrePods 贡献者 本程序是自由软件:你可以根据自由软件基金会发布的 GNU 通用公共许可证的条款(无论是许可证的第 3 版,还是(由你选择)任何更新的版本)重新分发和/或修改它。 本程序的发布是希望它会有用,但不提供任何担保;甚至不提供适销性或特定用途适用性的默示担保。有关更多详细信息,请参阅 GNU 通用公共许可证。 你应该已经随本程序收到了 GNU 通用公共许可证的副本。如果没有,请参阅 <https://www.gnu.org/licenses/>。 # 商标声明 GPL 不授予使用 LibrePods 名称、徽标或品牌的任何权利。未经事先许可,不得以暗示与官方 LibrePods 项目存在关联、获得其认可或与其有关联的方式,将 LibrePods 名称和徽标用于软件、网站、域名、产品、服务或其他项目。 如果你发现任何滥用 LibrePods 名称或徽标的行为,请向 [[email protected]](mailto:[email protected]) 举报。 Android 应用中使用的 SF Pro 字体是 Apple Inc. 的财产。该字体将在应用的未来版本中移除,并很快替换为开源替代方案。 AirPods、AirPods Pro、AirPods Max 和 AirPods 徽标是 Apple Inc. 的商标。LibrePods 项目与 Apple Inc. 没有任何关联,也未获得其认可。