A simple Android template that lets you create an Android project quickly.
Just click
on
button to create a new repo starting from this template.
This project follows Clean Architecture with MVVM and is organized into a multi-module structure:
MVVMTemplate/
βββ app/ # Application module (MainActivity, Navigation, DI wiring)
βββ build-logic/ # Convention plugins (shared build configuration)
βββ core/
β βββ common/ # Shared base classes, utilities, DataStore
β βββ data/ # Repository implementations, data sources, API models
β βββ domain/ # Use cases, domain models, repository interfaces
β βββ network/ # Retrofit setup, OkHttp configuration, network response handling
β βββ testing/ # Shared test utilities (TestDispatcherRule, fakes, test data)
β βββ ui/ # Shared Compose UI components, theming, screen states
βββ feature/
βββ products/ # Products feature (list, detail, choose screens)
The app demonstrates both RxJava and Coroutines side by side - users choose which reactive approach to explore at runtime via a choose screen.
- 100% Kotlin
- 100% Jetpack Compose with Material 3 and Material You dynamic color
- Multi-module architecture with convention plugins
- Version Catalog (
libs.versions.toml) for centralized dependency management - KSP for annotation processing
- Coroutines & Flow
with
StateFlowfor UI state - RxJava 3 with AutoDispose for automatic lifecycle-bound disposal
- Hilt with KSP
- Retrofit 3 - HTTP client
- OkHttp - Network interceptor
- kotlinx-serialization - JSON serialization
- Custom
NetworkResponsesealed class for structured API response handling
- Navigation 3 - Type-safe Compose
navigation with
NavKeyandNavDisplay
- Material 3 with dynamic color, light/dark theme, edge-to-edge support
- Lottie - Vector animations
- Coil - Image loading
- Palette - Dynamic card coloring from image palettes
- Paging 3 - Pagination (both Coroutine and RxJava data sources)
- Compose stability configuration (
compose_compiler_config.conf) and compiler metrics/reports
- DataStore - Preferences storage
- Detekt with Compose rules - Static code analysis
- StrictMode - Runtime guardrails (
detectAll()thread policy, leaked object detection) - LeakCanary - Memory leak detection
- Chucker - HTTP inspector
- Timber - Logging
- Gradle Doctor - Build health
- Dependency Analysis - Dependency insights
- Sonatype Scan - Dependency security scanning
- Unit tests with Fakes over Mocks pattern
- Truth - Fluent assertions
- Turbine - Flow testing
- Coroutines Test -
TestDispatcherRulefor deterministic coroutine testing - Shared
core:testingmodule with reusable fakes and test data
- Semantic properties for TalkBack (
mergeDescendants,heading,contentDescription) - Touch target sizing (48dp minimum)
- String resources with translator context comments
- Non-transitive R classes for proper resource scoping
This template uses GitHub Actions as CI.
Available workflows:
- Validate Gradle Wrapper - Checks the Gradle wrapper has a valid checksum
- Pre Merge Checks - Runs
buildandtestDebugUnitTesttasks - Android - Runs
assembleDebugtask
dependencyUpdates- Displays the dependency updates for the projectdetekt- Runs static Kotlin code analysis for the whole projectbuildHealth- Provides advice for managing dependencies and applied pluginsossIndexAudit- Scans dependencies using Sonatype OSS Index for known vulnerabilities
- Rick and Morty API
- Right or Left animation by Marco Martina on LottieFiles
- Loading Beer animation by Hashim Irfan on LottieFiles
Feel free to open an issue or submit a pull request for any bugs/improvements.
