Loading repository dataβ¦
Loading repository dataβ¦
igorwojda / repository
π Android application following best practices: Kotlin, Coroutines, JetPack, Clean Architecture, Feature Modules, Tests, MVVM, DI, Static Analysis...
A production-ready Android application demonstrating modern development practices and architectural patterns. This project showcases how to build scalable, maintainable, and testable Android applications using industry-standard tools and libraries.
Built with Clean Architecture principles, this app serves as a comprehensive example of modular design, advanced Gradle configuration, and robust CI/CD practices. Perfect for teams looking to establish solid architectural foundations for large-scale Android projects.
A music discovery app built with Jetpack Compose that displays album information sourced from the Last.fm API. The application demonstrates real-world scenarios including network requests, local caching, navigation, and state management.
Features:
Built with modern Android development tools and libraries, prioritizing, project structure stability and production-readiness.
Core Technologies:
Android Jetpack:
Networking & Images:
Dependency Injection:
Architecture:
UI & Design:
Testing:
Code Quality:
Build & CI:
GitHub Actions:
Gradle Plugins:
com.android.application) - Android app module configurationcom.android.library) - Android library module configurationorg.jetbrains.kotlin.android) - Kotlin compilation for Androidorg.jetbrains.kotlin.plugin.serialization) - JSON serialization supportorg.jetbrains.kotlin.plugin.compose) - Compose compiler pluginThe project implements Clean Architecture with a modular approach, treating each feature as an independent, reusable component similar to a microservice. This design enables maintainability and scalability for large development teams.
Benefits of Modular Architecture:
Module Types:
app - Main application module containing navigation setup, DI configuration, and app-level componentsfeature-* - Feature modules (album, profile, favourite) containing feature-specific business logicfeature-base - Shared foundation module providing common utilities and base classeslibrary-* - Utility modules for testing and shared functionalityClean Architecture is implemented at the module level - each module contains its own set of Clean Architecture layers:
Notice that the
appmodule andlibrary_xmodules structure differs a bit from the feature module structure.
Each feature module contains 3 layers with a distinct set of responsibilities and common module components.
This layer is closest to what the user sees on the screen.
The presentation layer mixes MVVM and MVI patterns:
MVVM - Jetpack ViewModel is used to encapsulate a common UI state. It exposes the state via observable state
holder (Kotlin Flow)MVI - action modifies the common UI state and emits a new state to a view via Kotlin FlowThe
common stateis a single source of truth for each view. This solution derives from Unidirectional Data Flow and Redux principles.
This approach facilitates the creation of consistent states. The state is collected via collectAsUiStateWithLifecycle
method. Flows collection happens in a lifecycle-aware manner, so
no resources are wasted.
Stated is annotated with [Immutable](https://developer.android.com/reference/kotlin/androidx/compo