🚧 In Progress 🚧
This app is being developed and it has as its goal to practice new Android tools, libs, and techniques. If you liked this initiative, please star it and contribute to improving it.
We are using the components below:
- Dynamic features
- Motion layout
- Navigation
- Coroutines
- ViewModel
- Single Activity
- Dagger 2
- Mockk
- JUnit
- Jenkins / Bitrise
- MVI
- Paging
- Espresso
- Compose
First of all, you need Android Studio 2020.3.1 or later and JDK 11.
Create a developer key in TheMovieDB to build the project.
When you get the key, add it in local.properties
file, as below:
#TheMovieDB API KEY
api.key=<insert-here>
This project follows clean architecture concepts (see more here).
Using this architecture we have a lot of benefits such as decoupling code, ease of maintenance, good package structure, single responsibilities for each module, and a high possibility of testing the application.
Here we can see the link between the app layers and their respective modules.
App architecture | Clean architecture |
---|---|
Another inspiration to start this project was VMadalin project.
- App module: App contains the structure responsible for navigation and dependency injection.
- Core module: Core has the main components of the application, such as network configurations, database, dependency injection, etc.
- Commons module: Coomons contains common structures such as widgets, extensions, styles, etc.
- Libraries modules: Libraries are modules that can be exported as libraries to help other developers and projects.
- Feature modules: Features are modules related to the presentation layer and explained better below.
Features are divided into three packages, it was done to decouple the Android framework and business rules. Below we can see an explanation about each module and their links.
We have created Gradle plugins using Groovy to generalize each module configuration.
- moovie.feature-data
- moovie.feature-presentation
- moovie.feature.domain
The communication is done like the image below, and it was thought in a way to allow us to create dynamic modules using Android dynamic features.
To generate new app versions and help us increment the version code and version name, we have created a task called generateNewVersion
. It allows tools like Jenkins to execute this Gradle task when generating a new release.
Gradle files were not reviewed and can have a lot of ways to be improved.
Do you wish to be part of this project? Open a pull request with your contribution.
This project contains licenses. Look at the file LICENSE for more details.