Aria for Android
A native Android SIP softphone built with Jetpack Compose and Material 3, powered by the same Rust core as every Aria client. Incoming calls wake your device instantly via FCM push and appear in the native Android call UI.
View on GitHubFeatures
Built from the ground up as a true native Android experience
ConnectionService Integration
Incoming and outgoing calls are managed through Android's native ConnectionService API, so calls appear in the system call UI alongside cellular calls.
FCM Push Notifications
High-priority FCM data messages wake the device instantly for incoming calls, even when the app is closed or in the background.
Jetpack Compose + Material 3
The entire UI is built with Jetpack Compose and Material 3, with Material You dynamic color theming on Android 12 and above.
Full Dial Pad with Haptics
A complete dial pad with haptic feedback for every key press, designed for fast and tactile dialing.
Mid-Call Controls
Mute, hold, speaker toggle, and DTMF input during active calls, all accessible from a clean in-call screen.
Contacts Integration
Browse and search your Android contacts directly from the app. Tap any phone number to start a call.
Call History
Call history is persisted via SharedPreferences with direction (inbound/outbound/missed) and duration tracking for every call.
Settings
Configure gateway URL, API key, SIP credentials (username, password, domain), and view your auto-fetched FCM token.
Shared Rust Core
The SIP and RTP engine is written in Rust and shared across all Aria clients via UniFFI bindings. One engine, every platform.
How It Works
Android devices can't hold a persistent SIP registration without draining the battery. The Aria push gateway solves this by maintaining the registration on behalf of the device and waking it via FCM when a call arrives.
- 1 Push gateway maintains the SIP registration with your PBX
- 2 PBX sends an INVITE to the gateway when someone calls you
- 3 Gateway sends an FCM high-priority data message to your device
- 4 AriaFirebaseMessagingService receives the push and wakes the app
- 5 App reports the incoming call to ConnectionService
- 6 Android shows the native incoming call UI (even on lock screen)
- 7 User accepts the call and RTP media flows directly between the device and PBX
Tech Specs
Built with modern Android tooling and a battle-tested Rust engine
Architecture
Clean separation of concerns with service layer, UI layer, and Rust bridge
Permissions
Aria requests only the permissions it needs, and the code is open source so you can verify it yourself
| Permission | Purpose |
|---|---|
INTERNET | SIP signaling and RTP media transport |
RECORD_AUDIO | Microphone access for voice calls |
READ_CONTACTS | Display Android contacts in the app |
MANAGE_OWN_CALLS | Integrate with Android's ConnectionService |
FOREGROUND_SERVICE_PHONE_CALL | Keep call audio alive in the background |
POST_NOTIFICATIONS | Show incoming call and missed call notifications |
USE_FULL_SCREEN_INTENT | Display incoming call screen over lock screen |
Requirements
What you need to build and run Aria for Android
Runtime
- Android 8.0 (API 26) or later
- Push gateway for incoming calls
- A SIP account (PBX or provider)
Development
- Android Studio Ladybug or later
- Rust toolchain with Android targets
- Android NDK
- Gradle 8.11
Aria Ecosystem
Aria for Android is one part of a fully open-source softphone platform
Get started with Aria for Android
Clone the repo, build with Android Studio, and start making calls in minutes. It's open source and MIT licensed.