Skip to content
Native Android App

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 GitHub

Features

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.

Push Gateway Flow

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. 1Push gateway maintains the SIP registration with your PBX
  2. 2PBX sends an INVITE to the gateway when someone calls you
  3. 3Gateway sends an FCM high-priority data message to your device
  4. 4AriaFirebaseMessagingService receives the push and wakes the app
  5. 5App reports the incoming call to ConnectionService
  6. 6Android shows the native incoming call UI (even on lock screen)
  7. 7User accepts the call and RTP media flows directly between the device and PBX
PBXINVITE →
Push GatewayB2BUA
FCMHigh-priority data
AriaFirebaseMessagingServiceWakes app
ConnectionServiceNative call UI
RTP media flows directly between device and PBX
Technical Details

Tech Specs

Built with modern Android tooling and a battle-tested Rust engine

UI FrameworkJetpack Compose
Target SDKAndroid SDK 36
Minimum SDKSDK 26 (Android 8.0+)
Core EngineRust via UniFFI
Shared Libraryaria-mobile-core
Push + Call UIFCM + ConnectionService
Design SystemMaterial 3 + Material You
IDEAndroid Studio Ladybug+
Build SystemGradle 8.11
LanguageKotlin
Project Structure

Architecture

Clean separation of concerns with service layer, UI layer, and Rust bridge

app/src/main/kotlin/com/solutions5060/aria/
AriaApplication.kt
MainActivity.kt
bridge/
AriaMobileCore.kt // UniFFI bindings
service/
AriaConnectionService.kt // Native call management
AriaFirebaseMessagingService.kt // FCM push handler
IncomingCallService.kt // Foreground service
ui/
AriaApp.kt // Root composable
dialer/ // Dial pad screen
call/ // Active call screen
contacts/ // Contacts browser
history/ // Call history list
settings/ // App configuration
theme/ // Material 3 + dynamic color
Transparency

Permissions

Aria requests only the permissions it needs, and the code is open source so you can verify it yourself

PermissionPurpose
INTERNETSIP signaling and RTP media transport
RECORD_AUDIOMicrophone access for voice calls
READ_CONTACTSDisplay Android contacts in the app
MANAGE_OWN_CALLSIntegrate with Android's ConnectionService
FOREGROUND_SERVICE_PHONE_CALLKeep call audio alive in the background
POST_NOTIFICATIONSShow incoming call and missed call notifications
USE_FULL_SCREEN_INTENTDisplay 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

Get started with Aria for Android

Clone the repo, build with Android Studio, and start making calls. Open source for non-commercial use.