A complete overview of ListApp's development process, architecture decisions, automated testing framework, and quality assurance pipeline — built to professional standards.
ListApp is a native Android application built with modern Android development best practices, targeting Android 8.0+ (API 26) with full Material Design 3 compliance.
Kotlin 2.2 with Jetpack Compose for declarative UI. Material 3 Design System with exclusive dark theme. Navigation Compose for type-safe screen navigation.
Room 2.7 (SQLite) with KSP code generation. Repository pattern with StateFlow for reactive data streams. DataStore for preferences.
Firebase Authentication (Google Sign-In + Email). Cloud Firestore for real-time sync. FCM for push notifications. Google Play Billing for subscriptions.
CameraX + ML Kit for barcode scanning. ZXing for code generation. WorkManager for scheduled notifications. In-App Updates API.
The application follows the Model-View-ViewModel (MVVM) architecture with a clean separation of concerns:
The project uses Gradle build variants to manage different environments:
debug — Full features, debug logging, debug signingstaging — External services disabled (AdMob, Firebase, Billing), premium auto-granted. Used for automated testing.release — Minified, obfuscated, production-signed with R8/ProGuardProfessional end-to-end testing using Appium with UiAutomator2, running on a local Android emulator with Google Play Store for realistic production-like testing.
Python 3.9+ with pytest 8.x. Allure reporting for rich test reports. pytest markers for test categorization. Parallel execution support.
Appium 3.6 server with UiAutomator2 8.2 driver. Supports both emulator and physical device testing. Cross-platform (macOS + Linux).
Android 14 (API 34) with Google Play Store. x86_64 architecture for fast execution. Google account pre-configured for in-app purchase testing.
Page Object Model (POM) with base page inheritance. Text-based UiAutomator selectors for Jetpack Compose elements. Reusable navigation helpers.
Boot AVD with Play Store
UiAutomator2 server ready
pytest executes suites
Rich HTML results
Current automated test execution results on the staging build running on Android 14 emulator:
| Test Suite | Total | Passed | Failed | Skipped | Coverage |
|---|---|---|---|---|---|
| Smoke (Navigation & UI) | 13 | 10 | 3* | 0 | 77% |
| Products CRUD | 4 | 3 | 0 | 1 | 75% |
| Shopping Lists CRUD | 4 | 4 | 0 | 0 | 100% |
| Stores CRUD | 4 | 2 | 1 | 1 | 50% |
| Settings | 6 | 6 | 0 | 0 | 100% |
| Backup & Export | 6 | 5 | 1 | 0 | 83% |
| Total | 37 | 30 | 5 | 2 | 81% |
* 3 smoke failures are expected on the staging build — features that require Firebase Auth (disabled) or populated database.
The testing framework includes a GitHub Actions workflow for continuous integration, along with local automation scripts for daily development.
Developer commits
Gradle assembleStaging
Emulator + Appium
Allure + artifacts
# Build staging APK (no ads, no firebase, premium enabled)
./gradlew assembleStaging
# Install on emulator
adb install -r app/build/outputs/apk/staging/app-staging.apk
# Run automated tests
pytest tests/ -v --alluredir=allure-results
# Generate report
allure serve allure-results