This project is open source part for my ongoing development. I present modern Android application architecture that is modular with dynamic feature.
This project brings to table set of best practices, tools, and solutions:
- Modern architecture (feature modules, Clean Architecture, Model-View-ViewModel)
- Android Jetpack
- CI pipeline
- Dependency Injection with Koin
- Material design
- Libraries and Frameworks
- Kotlin + Coroutines - perform background operations
- Koin - dependency injection
- Retrofit - networking
- Jetpack
- Navigation - deal with whole in-app navigation
- LiveData - notify views about database change
- Lifecycle - perform action when lifecycle state changes
- ViewModel - store and manage UI-related data in a lifecycle conscious way
- Room - persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.
- Pagination - helps you load and display small chunks of data at a time. Loading partial data on demand reduces usage of network bandwidth and system resources.
- Data Binding - allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.
- Stetho - application debugging tool
- Architecture
- Clean Architecture (at module level)
- MVVM Pattern
- Dynamic feature modules
- Gradle
This project uses IGDB Api for fetching datas. You need to get Api key for services the app uses.
When you obtain the key, you can provide them to the app by putting the following in the gradle.properties
project root file:
#IGDB API KEY
apiToken = <insert>
Each module has own Clean Architecture layers.
:core
module only responsible for implement common dependencies, holds remote (Retrofit) and cache (Room) repositories.:onboarding
module is install-time delivery feature module, this module install when app is downloaded. (Uninstall this module is upcoming development progress.):home
module is install-time delivery feature module, this module install when app is downloaded.:app
this is simple application module, this is responsible for navigate feature modules.
Module | OnboardingFragments | ViewPager2 - TabLayout | MaterialAndroid | SelectPlatformFragment |
---|---|---|---|---|
:onboarding |
Module | HomeFragment - BottomNavigationView | Pagination - Horizontal RecyclerView | NavigationComponent |
---|---|---|---|
:home |