PROPELOO

ANDROID APP DEVELOPMENT

Build Android apps that perform on every device, not just flagship phones.

PROPELOO engineers native Android applications in Kotlin — from Jetpack Compose architecture and ViewModel design through Room database, WorkManager, Play Store submission and the device fragmentation strategy that ensures your app works on a $150 Android as well as a Pixel 8 Pro. Android is the world's largest mobile platform. Building for it correctly requires understanding both its power and its constraints.

Android has 72% global market share. Most of those users are on mid-range devices with 4GB RAM and slower CPUs.

Android development is harder than iOS development in one specific way: device fragmentation. There are thousands of Android device models across a 10-year range of hardware capability. An app that performs beautifully on a Pixel 8 Pro can be unusable on a Redmi Note 10 with 4GB RAM and a MediaTek Helio G85. Memory management, background process limits, battery optimisation restrictions and manufacturer-specific OEM customisations all affect real-world behaviour in ways that no emulator replicates. PROPELOO tests on physical mid-range devices throughout development — not just on simulators and flagship hardware — because that is where the majority of your users live.

The Android engineering stack.

System Layers

  • UI Layer: Jetpack Compose for declarative UI, Material Design 3, custom composables and animations
  • Architecture Layer: MVVM with ViewModel, StateFlow, Hilt dependency injection, Navigation Compose
  • Data Layer: Room for local DB, DataStore for preferences, Retrofit for network, WorkManager for background
  • Platform Layer: Health Connect, CameraX, ML Kit, Location services, Notification channels, App Widgets
  • Distribution Layer: Play Store, Play Console, in-app billing, App Bundle, Firebase App Distribution

Core Technical Capabilities

  • Jetpack Compose Architecture

    Modern declarative Compose UI with proper state hoisting, LazyColumn performance optimisation, side effects (LaunchedEffect, SideEffect) and custom composable design system.

  • Clean Architecture

    MVVM with ViewModel + StateFlow, Hilt for dependency injection, separate data/domain/presentation layers, Repository pattern and coroutines for async operations.

  • Background Processing

    WorkManager for deferrable background tasks, Foreground Services for ongoing operations, AlarmManager for exact timing, Doze mode and App Standby bucket compliance.

  • Local Data & Storage

    Room database with migrations, DataStore Preferences replacing SharedPreferences, EncryptedSharedPreferences for sensitive data, Scoped Storage compliance for media files.

  • Platform APIs

    Health Connect for health data, CameraX for camera features, ML Kit for on-device ML, Bluetooth LE, NFC, biometric authentication via BiometricPrompt.

  • CI/CD & Distribution

    GitHub Actions with Gradle build, Firebase App Distribution for internal testing, Play Store AAB submission automation and Crashlytics integration.

How we think about Android development.

Android development is not just "like iOS but different." It has its own failure modes, its own battery management model and its own approach to background processing.

  • Kotlin coroutines changed Android architecture

    ViewModelScope, lifecycleScope and Dispatchers.IO make async Android code as clean as Swift async/await. Callback-based code and RxJava are legacy patterns. New Android code should use coroutines and StateFlow as the primary async and reactive model.

    Axiom:

  • Battery and process death are real constraints

    Android aggressively kills background processes to save battery — especially on Chinese OEM devices (Xiaomi, Huawei, Samsung with aggressive battery management). Apps that rely on persistent background services will fail on these devices. WorkManager, which is guaranteed to run eventually, is the correct tool for deferrable background work.

    Axiom:

  • Jetpack Compose is not complete replacement for View system yet

    Compose is the future but has gaps for complex custom UI and some older libraries. Interop with View system works well. New screens in Compose, existing complex views in XML, is the practical production approach for 2024.

    Axiom:

  • Play Store review is faster but policy is stricter

    Play Store review is typically 1-3 days. But Play Store policies on permissions, user data handling (Play Data Safety declaration) and target API level are strictly enforced. API level must be updated within deadlines or the app becomes unavailable to new users.

    Axiom:

The Android architecture decisions.

  • Jetpack Compose vs XML Views?

    Impact: Compose for new apps targeting Android 5+ (API 21+). XML Views for maintaining existing codebases. Hybrid in practice for large apps transitioning.

    • Compose — modern, Google-recommended, declarative, some interop complexity
    • XML Views — battle-tested, all libraries supported, more verbose
    • Hybrid — Compose for new screens, Views for complex existing components
    • React Native — cross-platform, non-native feel
  • Architecture pattern?

    Impact: MVVM + StateFlow + Hilt for most apps. MVI for complex state management needs. Clean Architecture for large codebases with multiple developers.

    • MVVM + StateFlow + Hilt — Google recommended, well supported
    • MVI (Orbit, MVI Kotlin) — unidirectional data flow, more predictable
    • Clean Architecture (domain layer) — adds structure for large teams
    • MVP — older pattern, still valid for simpler apps
  • Dependency injection?

    Impact: Hilt for most Android apps — Google support, compile-time verification, Compose and ViewModel integration.

    • Hilt — Google-recommended, Dagger-based, compile-time validation
    • Koin — lightweight, runtime DI, easier setup
    • Dagger 2 — maximum control, complex setup
    • Manual DI — fine for small apps, scales poorly
  • Local database?

    Impact: Room for local database requirements. DataStore (Proto or Preferences) replacing SharedPreferences for key-value storage.

    • Room — Google-supported, type-safe, KSP annotations
    • SQLDelight — KMP compatible, type-safe SQL
    • Realm — mobile-first, reactive, third-party
    • DataStore only — for preferences, not relational data
  • Background work?

    Impact: WorkManager for virtually all background tasks. Foreground Service only for operations users expect to continue visibly (audio playback, navigation, file upload with progress).

    • WorkManager — guaranteed execution, battery-friendly, correct choice
    • Foreground Service — ongoing visible work only (navigation, music)
    • AlarmManager — exact timing requirements
    • JobScheduler — older API, WorkManager handles this
  • Crash and analytics?

    Impact: Firebase Crashlytics + Analytics for most apps. Sentry for cross-platform apps where unified error tracking across iOS/Android/web matters.

    • Firebase Crashlytics + Analytics — free, Google-integrated, standard
    • Sentry — better error context, cross-platform
    • DataDog — enterprise, expensive at scale
    • No monitoring — never acceptable for production

What PROPELOO builds.

  • Consumer Android App

    Jetpack Compose UI, MVVM architecture, Room database, push notifications and Play Store listing with screenshots and A/B tested store listing.

  • Fintech Android App

    BiometricPrompt authentication, EncryptedSharedPreferences for token storage, root detection, certificate pinning and Play Integrity API for device integrity verification.

  • IoT & Bluetooth App

    Bluetooth LE (BLE) device pairing and communication, background BLE scanning with WorkManager, custom data protocol parsing and device management UI.

  • Enterprise MDM App

    Android Enterprise managed profile, Work Profile APIs, EMM integration via Device Policy Controller, offline capability and enterprise SSO via SAML/OIDC.

  • Health & Fitness App

    Health Connect API for health data access and contribution, step counting, sleep tracking, sensor fusion and wearable device integration.

  • E-commerce Android App

    Product catalogue with Paging 3, Google Pay in-app purchase, deep link handling for marketing campaigns and offline browsing with Room caching.

The Android stack.

  • Core

    Stack: Kotlin, Jetpack Compose, Coroutines + Flow, Hilt, Navigation Compose

  • Data

    Stack: Room, DataStore, Retrofit + OkHttp, WorkManager, Paging 3

  • Platform

    Stack: Health Connect, CameraX, ML Kit, Bluetooth LE, Play Billing

  • Testing

    Stack: JUnit 5, Mockk, Espresso, Compose UI Test, Robolectric

  • CI/CD

    Stack: GitHub Actions, Gradle, Firebase App Distribution, Play Store API, Fastlane

  • Monitoring

    Stack: Firebase Crashlytics, Firebase Analytics, Sentry, Android Vitals

Android security requires explicit hardening.

  • Android Keystore

    Hardware-backed key storage via Android Keystore System. Cryptographic operations happen inside secure hardware — keys never exposed to app memory.

  • Biometric Authentication

    BiometricPrompt API with StrongBox Keymaster backing. Class 3 biometrics (fingerprint, face on high-end devices) for financial operations.

  • Root Detection

    Play Integrity API for device integrity attestation. RootBeer or custom detection for rooted device identification. Required for financial and health apps.

  • Network Security Config

    network_security_config.xml to enforce HTTPS, pin certificates and prevent cleartext traffic. Debug vs release certificate pinning separation.

  • Data Safety Declaration

    Google Play requires accurate Data Safety section declaring all data collected and shared. Incorrect declarations result in Play Store removal.

  • ProGuard/R8 Obfuscation

    R8 code shrinking and obfuscation reduces APK size and makes reverse engineering harder. Custom rules to preserve reflection-based classes.

From concept to Play Store.

  1. 01. Architecture

    Module structure, MVVM architecture, DI setup, data layer design and background work strategy.

  2. 02. Project Setup

    Gradle build config, Hilt setup, Compose theme, navigation graph, CI/CD pipeline.

  3. 03. Core Development

    Feature development with physical device testing on mid-range Android throughout.

  4. 04. Platform APIs

    Play Billing, notifications, background services, permissions — each requiring specific Play Policy compliance.

  5. 05. Performance Testing

    Android Profiler for CPU/memory/battery, Compose performance (frame time), low-end device testing.

  6. 06. Testing

    Unit tests with JUnit/Mockk, Compose UI tests, instrumented tests on Firebase Test Lab device matrix.

  7. 07. Play Store Launch

    App Bundle submission, Store listing optimisation, Data Safety declaration, content rating and phased rollout.

Frequently Asked Questions

How do we handle Android device fragmentation?

Set min SDK API 26 (Android 8.0) to reach 95%+ of active devices while avoiding very old API limitations. Test on physical mid-range devices (4GB RAM, MediaTek/Snapdragon 600-series) — emulators do not replicate OEM battery management. Use Android Vitals in Play Console to monitor crash rate and ANR rate by device model.

What is an Android App Bundle (AAB)?

AAB is the required Play Store format since August 2021. Unlike APK, it contains all resources and lets Google Play generate device-specific APKs — reducing download size by 15-20%. Required for new apps. Google Play handles the APK splitting by screen density, ABI (CPU architecture) and language.

How does background work actually work?

Android has complex restrictions on background work to save battery. WorkManager is the solution for deferrable background tasks — it schedules work that is guaranteed to run eventually, even after device restart, respecting Doze mode and App Standby buckets. Foreground Services (with persistent notification) for ongoing work the user is aware of. Direct boot (runs before device unlock) for critical startup work.

How do we pass Play Store review?

Key compliance areas: target API level must be within 1 year of current (currently API 34 minimum for updates), Data Safety section must accurately declare all data collection, permissions must be justified and minimised, apps with sensitive permissions (SMS, location) require a Privacy Policy. Play Console pre-launch report catches crashes on Google's device test matrix before review.

What is the Play Integrity API?

Play Integrity API (replacing SafetyNet) provides attestation that your app is running on a genuine Android device, installed from Play Store, and that the device passes Play Protect device integrity. Used for: detecting rooted devices, verifying app is not modified, preventing emulator-based abuse. Returns MEETS_STRONG_INTEGRITY (verified hardware), MEETS_DEVICE_INTEGRITY (software-only) or MEETS_BASIC_INTEGRITY.

How do we test on many devices?

Firebase Test Lab provides physical device testing on Google's device matrix — run Espresso instrumented tests on hundreds of real devices. Robo test (automated exploration) can catch crashes without writing test code. Focus manual testing on your top devices by user base (Android Vitals shows device breakdown) plus one low-end device representing bottom 20% of your user hardware.

Native Android vs React Native?

Native Kotlin/Compose for apps where: native performance matters (animations, camera, gaming), deep platform integration is required (HealthConnect, BLE, NFC, Android Automotive), or the Android experience is a primary differentiator. React Native for: shared web/mobile codebase, teams with React expertise, apps without heavy platform API requirements. Kotlin Multiplatform Mobile (KMM) for sharing business logic while keeping native UIs.

How do in-app purchases work on Android?

Google Play Billing Library handles in-app purchases and subscriptions. Subscriptions have base plans and offers (free trial, introductory price). Server-side verification via Google Play Developer API is required — never trust client-side purchase confirmation. Real-time Developer Notifications (RTDN) via Pub/Sub for subscription lifecycle events (renewal, cancellation, billing issues).