
Apple 생태계로부터 해방된 AirPods
[!WARNING] librepods.org는 LibrePods 프로젝트의 공식 웹사이트가 아닙니다. 해당 사이트는 저작권을 주장하고 바닥글에 LibrePods 로고를 사용하여 프로젝트의 공식 웹사이트임을 부정확하게 표시하고 있습니다. 동시에 그들은 프로젝트가 LibrePods 프로젝트나 개발자들과 제휴 관계가 아니라고 말합니다.
이러한 다른 웹사이트를 발견하면 [email protected]로 신고해 주세요.
LibrePods를 사용하면 Apple 기기 전용인 AirPods 기능을 사용할 수 있습니다. AirPods와 Apple 기기 간 데이터 교환에 사용되는 독점 프로토콜을 구현하여 Apple이 아닌 플랫폼에서도 소음 제어 모드 변경, 빠른 착용 감지, 정확한 배터리 상태, 머리 제스처, 대화 인식 등의 기능을 사용할 수 있습니다.
| 기호 | 의미 |
|---|---|
| ✅ | 구현되어 정상 작동함 |
| ⚪ | VendorID 스푸핑 필요함, 사용에 따른 책임은 본인에게 있음 |
Find My와 관련된 다음 기능이 계획되어 있지만 추가 리버스 엔지니어링(RE)이 필요하며 Android에서는 루트 권한이 필요할 수 있습니다:
현재 앱은 OS가 HRTF를 수행하도록 Android에 머리 추적 정보를 제공하지 않습니다. 이 부분은 완전히 탐구되지 않았으며 루트 권한이 필요할 수 있습니다.
스테레오 사운드를 공간화하는 것은 이 프로젝트의 범위를 벗어나며 제공되지 않을 것입니다. 많은 OEM이 이를 위한 자체 구현을 갖추고 있습니다.
이 기능은 작업 중입니다. 자세한 내용은 LibrePods Discord 서버의 #reverse-engineering 채널을 확인하세요. 만약 구현된다면 Android에서 루트 권한이 필요할 가능성이 높습니다.
iOS/iPadOS에서는 AirPods가 AACP를 통해 마이크 오디오 스트림을 보내는 동안 A2DP를 계속 사용할 수 있습니다.
이 기능은 Android에서 오디오와 더 깊은 통합이 필요하므로 루트 권한이 필요할 가능성이 높습니다.
알고 보니 DID 프로필의 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 기기에 동일한 알림("Move to iPhone")이 표시됩니다. Android에서도 다른 기기가 인수하면 팝업이 표시됩니다.
주변음 허용 모드 사용자 지정(증폭, 밸런스, 톤, 대화 부스트, 주변 소음 감소) 및 큰 소리 감소 같은 접근성 설정을 구성할 수 있습니다.
보청기 사용자 지정은 오디오그램 결과 설정을 포함하여 Android에서 모두 수행할 수 있습니다(Linux는 곧 지원 예정). 앱은 청력 검사를 제공하지 않습니다. 청력 검사는 훨씬 더 높은 정밀도가 필요하기 때문입니다. 이미 확보한 오디오그램 결과를 사용하는 것이 훨씬 좋습니다.
사용된 프로토콜에 대한 자세한 내용은 Nojus(@pabloaul)가 만든 Wireshark 디섹터(dissector) 플러그인을 참조하세요: pabloaul/apple-wireshark
디섹터는 대부분의 구현 과정에서 LibrePods에 사용되지 않았습니다. 이 디섹터가 만들어지기 전에 제가 직접 프로토콜을 리버스 엔지니어링했기 때문입니다. 하지만 양방향 고품질 오디오와 공간 오디오를 포함한 많은 (향후) 기능은 그들의 리버스 엔지니어링 노력 없이는 불가능했을 것입니다!
앱의 다음 부분은 완전히 AI로 생성되었습니다:
나머지 모든 것(백그라운드 서비스, Bluetooth 관리자 클래스(AACP 및 ATT), 전체 UI, 가장 작은 구성 요소까지)은 수동으로 작성되었습니다.
일부 UI 구성 요소는 Apache License 2.0으로 라이선스된 Kyant0의 데모 앱에서 가져왔습니다.
aacp.rs 및 att.rs 파일은 AI를 사용하여 Kotlin에서 Rust로 변환되었습니다. media_controller.rs 파일의 일부, 주로 pulse 통합 부분도 AI로 생성되었습니다.
프로젝트를 지원해 주시는 모든 분께 큰 감사를 드립니다!
LibrePods - Apple 생태계에서 해방된 AirPods 저작권 (C) 2025 LibrePods 기여자들
이 프로그램은 자유 소프트웨어입니다: 당신은 이를 Free Software Foundation이 발표한 GNU 일반 공중 사용 허가서(GNU General Public License) 제3판 또는 (선택적으로) 그 이후 버전의 조건에 따라 재배포하거나 수정할 수 있습니다.
이 프로그램은 유용하게 쓰이리라는 희망으로 배포되지만, 어떠한 보증도 없습니다. 상품성 또는 특정 목적 적합성에 대한 묵시적 보증도 제외됩니다. 자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오.
이 프로그램과 함께 GNU 일반 공중 사용 허가서 사본을 받았을 것입니다. 그렇지 않다면, https://www.gnu.org/licenses/를 참조하십시오.
GPL은 LibrePods 이름, 로고 또는 브랜딩을 사용할 권리를 부여하지 않습니다. LibrePods 이름과 로고는 사전 허가 없이 공식 LibrePods 프로젝트와의 제휴, 보증 또는 연관을 암시하는 방식으로 소프트웨어, 웹사이트, 도메인, 제품, 서비스 또는 기타 프로젝트에 사용할 수 없습니다.
LibrePods 이름이나 로고의 오용을 발견하면 [email protected]로 신고해 주세요.
Android 앱에 사용된 SF Pro 글꼴은 Apple Inc.의 자산입니다. 이 글꼴은 향후 앱 버전에서 제거되고 곧 오픈 대안으로 대체될 예정입니다.
AirPods, AirPods Pro, AirPods Max 및 AirPods 로고는 Apple Inc.의 상표입니다. LibrePods 프로젝트는 Apple Inc.와 어떤 방식으로도 제휴하거나 보증을 받지 않습니다.
| 기능 | Linux | Android |
|---|
| 청취 모드 변경 | ✅ | ✅ |
| 착용 감지 | ✅ | ✅ |
| 배터리 상태 | ✅ | ✅ |
AirPods 이름 변경 Android 참고Android에서는 AirPods 이름을 변경한 후 다시 페어링해야 합니다. Android가 최신 이름을 사용하지 않을 수 있기 때문입니다. | ✅ | ✅ |
| 큰 소리 감소 | 🔴 | ⚪ |
| 머리 제스처 | ⛔ | ✅ |
| 대화 인식 | ✅ | ✅ |
| AirPods 자동 연결 | ✅ | ✅ |
| 보청기 | 🔴 | ⚪ |
| 주변음 허용 모드 사용자 지정 | 🔴 | ⚪ |
| 다중 기기 연결(Bluetooth Multipoint, 2개 기기만) | ⚪ | ⚪ |
기타 접근성 설정(클릭하여 펼치기)
| 🔴 | ✅ |
기타 일반 설정
| 🔴 | ✅ |
| 머리 추적 공간 오디오 | ❓ | ❓ |
| 심박수 모니터링 | ⛔ | 🔴 |
| Find My | ❓ | ❓ |
| 고품질 양방향 오디오 | 🔴 | 🔴 |
| 🔴 | 아직 구현되지 않음, 계획됨 |
| ⛔ | 구현 예정 없음 |
| ❓ | 알 수 없음 |
|
@davdroman |
@tedsalmon |
@wiless |
|
@SmartMsg |
@lunaroyster |
@ressiwage |
|
@kkjdroid |
@CitrusJoules |
@DanielReyesDev |
|
@sumitduster |
@GrifTheDev |