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. 1 Push gateway maintains the SIP registration with your PBX
  2. 2 PBX sends an INVITE to the gateway when someone calls you
  3. 3 Gateway sends an FCM high-priority data message to your device
  4. 4 AriaFirebaseMessagingService receives the push and wakes the app
  5. 5 App reports the incoming call to ConnectionService
  6. 6 Android shows the native incoming call UI (even on lock screen)
  7. 7 User accepts the call and RTP media flows directly between the device and PBX
PBX INVITE →
Push Gateway B2BUA
FCM High-priority data
AriaFirebaseMessagingService Wakes app
ConnectionService Native 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 Framework Jetpack Compose
Target SDK Android SDK 36
Minimum SDK SDK 26 (Android 8.0+)
Core Engine Rust via UniFFI
Shared Library aria-mobile-core
Push + Call UI FCM + ConnectionService
Design System Material 3 + Material You
IDE Android Studio Ladybug+
Build System Gradle 8.11
Language Kotlin
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

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

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.