
Apple 생태계로부터 해방된 AirPods
> [!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 기능을 사용할 수 있습니다. AirPods와 Apple 기기 간의 데이터 교환에 사용되는 독점 프로토콜을 구현하여, 비 Apple 플랫폼에서도 노이즈 컨트롤 모드 변경, 빠른 착용 감지, 정확한 배터리 상태, 머리 제스처, 대화 인식 등의 기능을 사용할 수 있게 해줍니다. # 기능 지원 여부 | 기능 | Linux | Android | | ----------------------------------------------------------- | ----- | ------- | | 청취 모드 변경 | ✅ | ✅ | | 착용 감지 | ✅ | ✅ | | 배터리 상태 | ✅ | ✅ | | AirPods 이름 변경 <details><summary>Android 관련 참고 사항</summary>Android에서는 이름을 변경한 후 AirPods를 다시 페어링해야 합니다. Android가 최신 이름을 사용하지 않을 수 있기 때문입니다.</details> | ✅ | ✅ | | 큰 소리 감소 | 🔴 | ⚪ | | 머리 제스처 | ⛔ | ✅ | | 대화 인식 | ✅ | ✅ | | AirPods에 자동 연결 | ✅ | ✅ | | 보청기 | 🔴 | ⚪ | | 투명도 모드 사용자 지정 | 🔴 | ⚪ | | 다중 기기 연결 (Bluetooth 멀티포인트, 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) 필요; 사용에 따른 책임은 본인에게 있음 | | 🟡 | 실험적/작업 진행 중 | | 🔴 | 아직 구현되지 않음; 계획됨 | | ⛔ | 구현되지 않을 예정 | | ❓ | 알 수 없음 | ## 나의 찾기 나의 찾기와 관련된 다음 기능들은 계획되어 있으나 추가적인 RE가 필요하며 Android에서는 루트 권한이 필요할 수 있습니다: - AirPods를 나의 찾기 네트워크에 추가 - 충전 케이스를 찾기 위해 케이스에서 소리 재생 - 두고 갈 때 알림 - 케이스 충전 소리 전환 ## 공간 음향 현재 앱은 OS가 HRTF를 수행할 수 있도록 Android에 머리 추적 정보를 제공하지 않습니다. 이는 완전히 탐구되지 않았으며 루트 권한이 필요할 수 있습니다. 스테레오 사운드의 공간화는 이 프로젝트의 범위를 벗어나며 절대 제공되지 않을 것입니다. 많은 OEM이 자체적인 구현을 가지고 있습니다. ## 심박수 모니터링 ### Android `android/rewrite` 브랜치에서 사용 가능합니다. [빌드](https://github.com/librepods-org/librepods/actions/workflows/ci-android.yml?query=branch%3Aandroid%2Frewrite) ### Linux 아직 사용할 수 없습니다 (어차피 컴퓨터에서는 유용하지 않을 것 같습니다. 제안 사항이 있으면 토론을 생성해 주세요.) ## 고품질 양방향 오디오 iOS/iPadOS에서는 AirPods가 마이크에서 고해상도(AAC-ELD 모노 64kHz?) 오디오 스트림을 AACP를 통해 전송하는 동안에도 A2DP를 계속 사용할 수 있습니다. ### Android Headset/Handsfree 프로필로 전환하여 재생 품질을 저하시키지 않고 AirPods의 마이크를 사용하여 앱 내에서 오디오를 녹음합니다. 하지만 이를 다른 앱/전화 통신에서 사용할 수 있게 하려면 루트 권한이 필요할 수 있으며, 가능하다고 해도 그럴 것입니다. Recorder는 작업 진행 중이며, `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 프로필의 VendorID를 Apple의 것으로 변경하면 여러 특수 기능에 접근할 수 있습니다! Linux에서는 `/etc/bluetooth/main.conf`의 DeviceID를 편집하여 이를 수행할 수 있습니다. 설정 파일에 `DeviceID = bluetooth:004C:0000:0000` 줄을 추가하세요. Android의 경우 앱 설정에서 `act as Apple device` 설정을 활성화할 수 있습니다(Xposed가 사용 가능하고 LibrePods 모듈이 활성화된 경우에만 표시됨). ## 다중 기기 연결 최대 두 대의 기기를 AirPods에 동시에 연결할 수 있으며, 오디오와 제어 모두 가능합니다. 끊김 없는 연결 전환. Android가 마치 Apple 기기인 것처럼 AirPods를 넘겨받을 때 Apple 기기에 동일한 알림이 표시됩니다("Move to iPhone"). 다른 기기가 넘겨받을 때 Android에서도 팝업이 표시됩니다. ## 접근성 설정 및 보청기 투명도 모드 사용자화(증폭, 밸런스, 톤, 대화 부스트, 주변 소음 감소) 및 큰 소리 감소와 같은 접근성 설정을 구성할 수 있습니다. 오디오그램 결과 설정을 포함한 모든 보청기 사용자화를 Android(곧 Linux)에서 수행할 수 있습니다. 이 앱은 훨씬 더 많은 정밀도를 요구하기 때문에 청력 검사를 수행하는 방법을 제공하지 않습니다. 이미 사용 가능한 오디오그램 결과를 사용하는 것이 훨씬 좋습니다. # 프로토콜 및 리버스 엔지니어링 사용된 프로토콜에 대한 자세한 내용은 Nojus([@pabloaul](https://github.com/pabloaul))의 Wireshark 디섹터 플러그인을 참조하세요: [pabloaul/apple-wireshark](https://github.com/pabloaul/apple-wireshark) 이 디섹터는 LibrePods의 대부분의 구현에서 사용되지 않았습니다. 이 디섹터가 만들어지기 전에 제가 직접 프로토콜을 리버스 엔지니어링했기 때문입니다. 하지만 양방향 고품질 오디오와 공간 오디오를 포함한 많은 (향후) 기능은 그들의 RE 노력 없이는 불가능했을 것입니다! # AI 사용 ## Android 앱 앱의 다음 부분은 완전히 AI로 생성되었습니다: - Head Gestures - 로직과 UI를 포함한 전부 - r2 + xposed 모듈(두 버전 모두)을 사용한 오프셋 설정 - Troubleshooter 및 LogCollector 나머지 모든 것 - 백그라운드 서비스, Bluetooth 관리자 클래스(AACP 및 ATT), 전체 UI, 심지어 가장 작은 컴포넌트까지 - 은 수동으로 작성되었습니다. UI 컴포넌트의 일부는 [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)에 따라 라이선스가 부여된 [Kyant0의 데모 앱](https://github.com/Kyant0/AndroidLiquidGlass/tree/master/catalog)에서 차용했습니다. ## Linux (rewrite) `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께 감사드립니다 - 리눅스 앱의 첫 버전을 만들어 주신 @timgromeyer께 감사드립니다 - [High Seas](https://highseas.hackclub.com)와 [Low Skies](https://low-skies.hackclub.com)를 호스팅해 주신 @hackclub께 감사드립니다! - 물론, 테스트, 피드백 공유, 또는 단순한 관심 표명 등 어떤 방식으로든 프로젝트에 기여해 주신 모든 분들께 감사드립니다! # 다른 플랫폼을 위한 대안: - CAPod - Android용 AirPods 컴패니언 앱입니다. ([play store](https://play.google.com/store/apps/details?id=eu.darken.capod) | [source code](https://github.com/d4rken-org/capod)). Android 버전 16 QPR3 이하를 사용 중이고 루팅되지 않은 경우 이 앱을 사용하세요. - Steam Deck용 MagicPods ([website](https://magicpods.app/steamdeck/)) - MagicPods - "Windows용 LibrePods"를 찾고 있다면 ([ms store](https://apps.microsoft.com/store/detail/9P6SKKFKSHKM) [installer](https://magicpods.app/installer/MagicPods.appinstaller) | [website](https://magicpods.app/)) # Star History <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 Copyright (C) 2025 LibrePods contributors 이 프로그램은 자유 소프트웨어입니다. 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서(GNU General Public License)의 조건에 따라, 라이선스 버전 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.와 제휴하거나 Apple Inc.의 보증을 받지 않습니다.