Skip to content

Commit 2bd0a3a

Browse files
committed
a few small changes
1 parent 7eafb7f commit 2bd0a3a

File tree

99 files changed

+3666
-884
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+3666
-884
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
- uses: actions/checkout@v4
4848
- uses: actions/download-artifact@v4
4949
- name: Export APK_NAME for later use
50-
run: echo "APK_NAME=ALN-$(echo ${{ github.sha }} | cut -c1-7).apk" >> $GITHUB_ENV
50+
run: echo "APK_NAME=LibrePods-$(echo ${{ github.sha }} | cut -c1-7).apk" >> $GITHUB_ENV
5151
- name: Rename .apk file
5252
run: mv "./Debug APK/debug/"*.apk "./$APK_NAME"
5353
- name: Decode keystore file

AAP Definitions.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,8 @@ Once tracking is active, the AirPods stream sensor packets with the following co
429429

430430
# LICENSE
431431

432-
AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
433-
Copyright (C) 2024 Kavish Devar
432+
LibrePods - AirPods liberated from Apple’s ecosystem
433+
Copyright (C) 2025 LibrePods contributors
434434

435435
This program is free software: you can redistribute it and/or modify
436436
it under the terms of the GNU Affero General Public License as published

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
## btl2capfix v0.0.3
2-
- ([#34](https://github.com/kavishdevar/aln/pull/34)) @devnoname120 Add on-device libbluetooth patcher using a Magisk/KernelSU module (arm64-only)
2+
- ([#34](https://github.com/kavishdevar/librepods/pull/34)) @devnoname120 Add on-device libbluetooth patcher using a Magisk/KernelSU module (arm64-only)
33

4-
_[See more here](https://github.com/kavishdevar/aln/releases)_
4+
_[See more here](https://github.com/kavishdevar/librepods/releases)_

CONTRIBUTING.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Welcome to AirPods Like Normal contributing guide <!-- omit in toc -->
1+
# Welcome to LibrePods contributing guide <!-- omit in toc -->
22

3-
Thank you for considering a contribution to AirPods Like Normal! Your support helps bring Apple-exclusive AirPods features to Linux and Android.
3+
Thank you for considering a contribution to LibrePods! Your support helps bring Apple-exclusive AirPods features to Linux and Android.
44

55
Read our [Code of Conduct](./CODE_OF_CONDUCT.md) to keep our community approachable and respectful.
66

@@ -25,19 +25,19 @@ To develop for the Android App, Android Studio is the preferred IDE. And you can
2525

2626
#### Create a new issue
2727

28-
If you find a bug or want to suggest a feature, check if an issue already exists by searching through our [existing issues](https://github.com/kavishdevar/aln/issues). If no relevant issue exists, open a new one and fill in the details.
28+
If you find a bug or want to suggest a feature, check if an issue already exists by searching through our [existing issues](https://github.com/kavishdevar/librepods/issues). If no relevant issue exists, open a new one and fill in the details.
2929

3030
#### Solve an issue
3131

32-
Browse our [issues list](https://github.com/kavishdevar/aln/issues) to find an interesting issue to work on. Use labels to filter issues and pick one that matches your expertise. If you’d like to work on an issue, open a PR with your solution.
32+
Browse our [issues list](https://github.com/kavishdevar/librepods/issues) to find an interesting issue to work on. Use labels to filter issues and pick one that matches your expertise. If you’d like to work on an issue, open a PR with your solution.
3333

3434
### Make Changes
3535

3636
#### Make changes locally
3737

3838
1. Fork the repository and clone it to your local environment.
3939
```
40-
git clone https://github.com/kavishdevar/aln.git
40+
git clone https://github.com/kavishdevar/librepods.git
4141
cd AirPods-Like-Normal
4242
```
4343
2. Create a working branch to start your changes.
@@ -67,4 +67,4 @@ Once your PR is open, a team member will review it. They may ask questions or re
6767

6868
### Your PR is merged!
6969

70-
Congratulations! :tada: Once merged, your contributions will be publicly available in AirPodsLikeNormal.
70+
Congratulations! :tada: Once merged, your contributions will be publicly available in LibrePods.

README.md

Lines changed: 88 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,58 @@
1-
# ALN - AirPodsLikeNormal
2-
*Bringing AirPods' Apple-exclusive features on linux and android!*
1+
# LibrePods
32

4-
## [XDAForums Thread](https://xdaforums.com/t/app-root-for-now-airpodslikenormal-unlock-apple-exclusive-airpods-features-on-android.4707585/)
3+
![LibrePods Banner](/imgs/banner.png)
54

6-
## Tested device(s)
7-
- AirPods Pro 2
5+
*AirPods liberated from Apple's ecosystem*
86

9-
Other devices might work too. Features like ear detection and battery should be available for any AirPods! Although the app will show unsupported features/settings. I will not be able test any other devices than the ones I already have (i.e. the AirPods Pro 2).
7+
[![XDA Thread](https://img.shields.io/badge/XDA_Forums-Thread-orange)](https://xdaforums.com/t/app-root-for-now-airpodslikenormal-unlock-apple-exclusive-airpods-features-on-android.4707585/)
108

11-
## Features
9+
## What is LibrePods?
1210

13-
Check the [pinned issue](https://github.com/kavishdevar/aln/issues/20) for a list.
11+
LibrePods unlocks Apple's exclusive AirPods features on non-Apple devices. Get access to noise control modes, adaptive transparency, ear detection, battery status, and more - all the premium features you paid for but Apple locked to their ecosystem.
1412

13+
## Device Compatibility
1514

16-
## CrossDevice Stuff
15+
| Status | Device | Features |
16+
|--------|--------|----------|
17+
|| AirPods Pro (2nd Gen) | Fully supported and tested |
18+
| ⚠️ | Other AirPods models | Basic features (battery status, ear detection) should work |
1719

18-
> [!IMPORTANT]
19-
> This feature is still in development and might not work as expected. No support is provided for this feature.
20+
Most features should work with any AirPods. Currently, testing is only performed with AirPods Pro 2.
2021

21-
### Features
22+
## Key Features
2223

23-
- **Battery Status**: Get battery status on any device when you connect your AirPods to one of them.
24-
- **Control AirPods**: Control your AirPods from either of your device when you connect to one, like changing the noise control mode, toggling conversational awareness, and more.
25-
- **Automatic Device Switching**: Automatically switch between your Linux and Android device, like when you receive a call, start playing music on Android while you're connected to Linux, and more!
24+
- **Noise Control Modes**: Easily switch between noise control modes without having to reach out to your AirPods to long press
25+
- **Ear Detection**: Controls your music automatically when you put your AirPods in or take them out, and switch to phone speaker when you take them out
26+
- **Battery Status**: Accurate battery levels
27+
- **Head Gestures**: Answer calls just by nodding your head
28+
- **Conversational Awareness**: Volume automatically lowers when you speak
29+
- **Other customizations**:
30+
- Rename your AirPods
31+
- Customize long-press actions
32+
- Few accessibility features
33+
- And more!
2634

27-
Check out the demo below!
35+
See our [pinned issue](https://github.com/kavishdevar/librepods/issues/20) for a complete feature list and roadmap.
2836

29-
https://github.com/user-attachments/assets/d08f8a51-cd52-458b-8e55-9b44f4d5f3ab
37+
## Platform Support
3038

39+
### Linux
3140

32-
## Linux
41+
The Linux version runs as a system tray app. Connect your AirPods and enjoy:
3342

34-
The Linux version is a simple tray-app, with a modern and adaptive ui. Still WIP, but most things work (battery, ear-detection, auto-pause, rename, etc.)
43+
- Battery monitoring
44+
- Ear detection with auto-pause
45+
- Device renaming
46+
- Media controls
3547

36-
Check out the README file in [linux](/linux) folder for more info.
48+
> [!NOTE]
49+
> Work in progress, but core functionality is stable and usable.
3750
38-
## Android
51+
For installation and detailed info, see the [Linux README](/linux/README.md).
3952

40-
> Can I use aln without root?
53+
### Android
4154

42-
**No, it's not possible to use aln without root.** You will have to root your device if you want to use aln, and there is no way around it. **No exceptions.**
43-
44-
### Screenshots
55+
#### Screenshots
4556

4657
| | | |
4758
|-------------------|-------------------|-------------------|
@@ -50,46 +61,75 @@ Check out the README file in [linux](/linux) folder for more info.
5061
| ![Long Press Configuration](/android/imgs/long-press.png) | ![Widget](/android/imgs/widget.png) | ![Customizations](/android/imgs/customizations.png) |
5162
| ![audio-popup](/android/imgs/audio-connected-island.png) | | |
5263

53-
### Installation
54-
55-
Currently, there's a [bug in the Android Bluetooth stack](https://issuetracker.google.com/issues/371713238) that prevents the app from working (upvote the issue - click the '+1' icon on the top right corner of IssueTracker).
64+
#### Root Requirement
5665

5766
> [!CAUTION]
58-
> Until Google merges the fix **you will only be able to use aln if you are rooted**. There are **no exceptions**, don't ask about it.
67+
> **You must have a rooted device to use LibrePods on Android.** This is due to a [bug in the Android Bluetooth stack](https://issuetracker.google.com/issues/371713238). Please upvote the issue by clicking the '+1' icon on the IssueTracker page.
68+
>
69+
> There are **no exceptions** to the root requirement until Google merges the fix.
5970
60-
In order to use aln you will have to install the module using your favorite root manager in OverlayFS mode (KernelSU, Apatch, or Magisk). If you don't know what this means, no support is provided: you will have to search by yourself on Google or ask in some Android rooting communities on Telegram.
71+
#### Installation Methods
6172

62-
The module to install is available in the releases section under the name `btl2capfix.zip`.
73+
##### Method 1: Xposed Module (Recommended)
74+
This method is less intrusive and should be tried first:
6375

64-
### Android – features
76+
1. Install LSPosed, or another Xposed provider on your rooted device
77+
2. Download the LibrePods app from the releases section, and install it.
78+
3. Enable the Xposed module for the bluetooth app in your Xposed manager
79+
4. Follow the instructions in the app to set up the module.
80+
5. Open the app and connect your AirPods
6581

66-
#### Renaming the Airpods
67-
When you rename the Airpods using the app, you'll need to re-pair it with your phone. Currently, user-level apps cannot directly rename a Bluetooth device. After re-pairing, your phone will display the updated name!
82+
##### Method 2: Root Module (Backup Option)
83+
If the Xposed method doesn't work for you:
6884

69-
#### Noise Control Modes
85+
1. Download the `btl2capfix.zip` module from the releases section
86+
2. Install it using your preferred root manager (KernelSU, Apatch, or Magisk).
87+
3. Reboot your device
88+
4. Connect your AirPods
7089

71-
- Active Noise Cancellation (ANC): Blocks external sounds using microphones and advanced algorithms for an immersive audio experience; ideal for noisy environments.
72-
- Transparency Mode: Allows external sounds to blend with audio for situational awareness; best for environments where you need to stay alert.
73-
- Off Mode: Disables noise control for a natural listening experience, conserving battery in quiet settings.
74-
- Adaptive Transparency: Dynamically reduces sudden loud noises while maintaining environmental awareness, adjusting seamlessly to fluctuating noise levels.
90+
##### Method 3: Patching it yourself
91+
If you prefer to patch the Bluetooth stack yourself, follow these steps:
7592

76-
> [!IMPORTANT]
77-
> Due to recent AirPods' firmware upgrades, you must enable `Off listening mode` to switch to `Off`. This is because in this mode, louds sounds are not reduced!
93+
1. Look for the library in use by running `lsof | grep libbluetooth`
94+
2. Find the library path (e.g., `/system/lib64/libbluetooth_jni.so`)
95+
3. Find the `l2c_fcr_chk_chan_modes` function in the library
96+
4. Patch the function to always return `1` (true)
97+
5. Repack the library and push it back to the device. You can do this by creating a root module yourself.
98+
6. Reboot your device
99+
100+
If you're unfamiliar with these steps, search for tutorials online or ask in Android rooting communities.
101+
102+
#### A few notes
103+
104+
- Due to recent AirPods' firmware upgrades, you must enable `Off listening mode` to switch to `Off`. This is because in this mode, louds sounds are not reduced!
78105

79-
#### Conversational Awareness
106+
- If you have take both AirPods out, the app will automatically switch to the phone speaker. But, Android might keep on trying to connect to the AirPods because the phone is still connected to them, just the A2DP profile is not connected. The app tries to disconnect the A2DP profile as soon as it detects that Android has connected again if they're not in the ear.
80107

81-
Automatically lowers audio volume and enhances voices when you start speaking, making it easier to engage in conversations without removing your AirPods.
108+
- When renaming your AirPods through the app, you'll need to re-pair them with your phone for the name change to take effect. This is a limitation of how Bluetooth device naming works on Android.
82109

83-
#### Automatic Ear Detection
110+
## Development Resources
84111

85-
Recognizes when the AirPods are in your ears to automatically play or pause audio and adjust functionality accordingly.
112+
For developers interested in the protocol details, check out the [AAP Definitions](/AAP%20Definitions.md) documentation.
86113

87-
## Check out the packet definitions at [AAP Definitions](/AAP%20Definitions.md)
114+
## CrossDevice Stuff
115+
116+
> [!IMPORTANT]
117+
> This feature is still in early development and might not work as expected. No support is provided for this feature yet.
118+
119+
### Features in Development
120+
121+
- **Battery Status Sync**: Get battery status on any device when you connect your AirPods to one of them
122+
- **Cross-device Controls**: Control your AirPods from either device when connected to one
123+
- **Automatic Device Switching**: Seamlessly switch between Linux and Android devices based on active audio sources
124+
125+
Check out the demo below:
126+
127+
https://github.com/user-attachments/assets/d08f8a51-cd52-458b-8e55-9b44f4d5f3ab
88128

89129
# License
90130

91-
AirPodsLikeNormal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
92-
Copyright (C) 2024 Kavish Devar
131+
LibrePods - AirPods liberated from Apple’s ecosystem
132+
Copyright (C) 2025 LibrePods contributors
93133

94134
This program is free software: you can redistribute it and/or modify
95135
it under the terms of the GNU Affero General Public License as published

android/app/build.gradle.kts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,15 @@ plugins {
66
}
77

88
android {
9-
namespace = "me.kavishdevar.aln"
9+
namespace = "me.kavishdevar.librepods"
1010
compileSdk = 35
1111

1212
defaultConfig {
13-
applicationId = "me.kavishdevar.aln"
13+
applicationId = "me.kavishdevar.librepods"
1414
minSdk = 28
1515
targetSdk = 35
16-
versionCode = 3
17-
versionName = "0.0.3"
18-
19-
externalNativeBuild {
20-
cmake {
21-
cppFlags += ""
22-
}
23-
}
16+
versionCode = 4
17+
versionName = "0.1.0"
2418
}
2519

2620
buildTypes {

android/app/src/main/AndroidManifest.xml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
66
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
77
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" />
8+
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"
9+
tools:ignore="ProtectedPermissions" />
810
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
911
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
1012
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
@@ -37,7 +39,7 @@
3739
android:label="@string/app_name"
3840
android:roundIcon="@mipmap/ic_launcher_round"
3941
android:supportsRtl="true"
40-
android:theme="@style/Theme.ALN"
42+
android:theme="@style/Theme.LibrePods"
4143
tools:ignore="UnusedAttribute"
4244
tools:targetApi="31">
4345
<receiver
@@ -67,22 +69,31 @@
6769
android:name=".CustomDevice"
6870
android:exported="true"
6971
android:label="@string/title_activity_custom_device"
70-
android:theme="@style/Theme.ALN">
72+
android:theme="@style/Theme.LibrePods">
7173
<intent-filter>
7274
<category android:name="android.intent.category.LAUNCHER" />
7375
</intent-filter>
7476
</activity>
7577
<activity
7678
android:name=".MainActivity"
7779
android:exported="true"
78-
android:theme="@style/Theme.ALN">
80+
android:theme="@style/Theme.LibrePods">
7981
<intent-filter>
8082
<action android:name="android.intent.action.MAIN" />
8183

8284
<category android:name="android.intent.category.LAUNCHER" />
8385
</intent-filter>
8486
</activity>
8587

88+
<activity
89+
android:name=".QuickSettingsDialogActivity"
90+
android:exported="false"
91+
android:theme="@style/Theme.TransparentDialog"
92+
android:launchMode="singleTask"
93+
android:excludeFromRecents="true"
94+
android:taskAffinity=""
95+
/>
96+
8697
<service
8798
android:name=".services.AirPodsService"
8899
android:enabled="true"

0 commit comments

Comments
 (0)