Skip to content

O app ainda está em desenvolvimento e tem como intuito colocar em prática algumas ferramentas e técnicas que estão em alta no mundo Android, além de melhorar algumas skills.

License

Notifications You must be signed in to change notification settings

gustavobarbosab/movies

Repository files navigation

🎥 Moovie

Build Status GitHub repo size GitHub language count GitHub forks GitHub open issues GitHub open pull requests

review

🚧  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

💻 Environment setup:

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>

🏠 What is the project architecture?

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
Architecture dependency Architecture dependency

Another inspiration to start this project was VMadalin project.

🚀 What modules does the app contain?

Modules organization

  • 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.

💡 How is a feature organization?

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.

Modules organization

We have created Gradle plugins using Groovy to generalize each module configuration.

  • moovie.feature-data
  • moovie.feature-presentation
  • moovie.feature.domain

☕ How does the communication between feature modules and app module?

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.

Modules organization

🐛 Generating versions and other Gradle configurations

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.

😄 Become a contributor

Do you wish to be part of this project? Open a pull request with your contribution.

📝 License

This project contains licenses. Look at the file LICENSE for more details.

⬆ Back to begin

About

O app ainda está em desenvolvimento e tem como intuito colocar em prática algumas ferramentas e técnicas que estão em alta no mundo Android, além de melhorar algumas skills.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages