This is now DEPRECATED in favor of Android Super App.
This project is a compilation of some best practices that I have found during my Android development career.
The behavior is to consume a public blockchain API and show the current value and a historical prices. The result is cached in the SQLite to be used when there is no internet connection.
Explore the project branches and modules to see how it works. The project architecture is MVVM only.
Branch | Description |
---|---|
master | Monolithic using RxJava. Same the develop |
develop | Monolithic using RxJava and Dagger 2. |
develop-coroutines | Monolithic using Coroutines and Dagger 2. |
multi-module | Multi-module dynamic-feature using RxJava and Koin. |
multi-module-coroutine | Multi-module dynamic-feature using Coroutines and Dagger 2. |
The app
module is the main entry point in all branches but in the multi-module
the app module is a base feature to the blockchain
module.
base
feature/module: It's a library with shared codes used in all other modules.
I have organized my code by feature. This avoid to share knowledge between feature without is required. Below you see the package organization sample.
- feature1
data
- Check internet connection, network request, API response mapper, database cachedi
- Feature dependency injection configurationsdomain
- Business rules validations and data communicationspresentation
- UI state, UI formatted values
- login - A feature sample with other features and shared code between children features
access
- An internal feature that is organized like feature1register
- An internal feature that is organized like feature1SharedCode.kt
- A code that is used in the login feature and its children features
- If you are beginning in Android or your project is below SDK 23, you should use
minSdkVersion
.minSdkVersionDev
greater than or equals to 23 is for Android experts only!!! - Instrumented unit tests not supported with dynamic features.
- Blockchain for the public Blockchain API