Decision Guide

Choose Android Kotlin Compose when native Android capability is the product, not just the packaging format.

Use Android Kotlin Compose When

TriggerWhy Native Android Wins
SMS parsing, call logs, contacts, notifications, device storage, Bluetooth, camera, sensors, widgets, or background scheduling are coreYou need Android APIs, runtime permissions, Play declarations, and real-device behavior
Offline-first finance, ledger, tracker, or field appRoom, local files, exports, WorkManager, and low-connectivity testing are first-class
Play Store release is the main distribution pathNative release signing, app bundles, target API, and Play policy checks become unavoidable
Budget-device performance mattersCompose can be tuned and tested directly against Android rendering, memory, and startup behavior
Privacy posture mattersA no-network local app can be implemented and verified without a web backend

Prefer Another Stack When

NeedBetter Default
Content, docs, dashboards, admin toolsWeb app or PWA
Same-day iOS and Android launch with mostly shared UIFlutter or React Native/Expo
Shared business logic but native UI on each platformKotlin Multiplatform later, not for the first Android-only v1
Desktop-first local appNative desktop, Tauri, or web depending on the product
Policy-sensitive SMS use without a strong core-functionality caseAvoid restricted SMS permissions; use manual import, user copy/paste, or explicit file import

Android Native Versus PWA

Use PWA if the app can live inside the browser permission model and tolerate limited background behavior. Use native Android if users expect a launcher app that handles device events, local storage, restricted permissions, offline usage, notifications, or Play distribution.

For a Kenya SMS expense tracker, native Android is the right default because SMS access, local-first storage, budget-device testing, and Play policy evidence are not side details.

Android Native Versus React Native Or Flutter

React Native and Flutter reduce duplicate UI work across platforms. They do not remove Android policy, signing, target API, background work, or permission realities. If Android is the only near-term platform, native Compose removes a layer of indirection.

Pick cross-platform only when iOS parity is a near-term requirement and you can afford platform-specific escape hatches.

Android Native Versus Kotlin Multiplatform

Kotlin Multiplatform is useful when you already have meaningful shared business logic across Android and another platform. It is not the simplest first step for a solo Android v1.

Start Android-only. Keep repositories and pure domain logic Android-light where reasonable. Revisit KMP after the product proves it needs another platform.

Default Recommendation

For Android-first local apps, use this stack:

Kotlin + Compose + Material 3 + ViewModel + Flow + Room + WorkManager + Play App Signing

Keep the first build boring. Ship one clear app module before modularizing.

Gotcha: A restricted permission can decide the whole stack. If the app needs READ_SMS, design the policy narrative, fallback mode, data minimization, and privacy policy before writing the parser.