- 100% Kotlin
- Coroutines - perform background operations
- Networking: Retrofit
- Jetpack Compose
- Accompanist - collection of extension libraries for Jetpack Compose
- Coil - image loading library
- Jetpack
- Klock - multiplatform Date and time library for Kotlin
- Architecture
- MVVM + MVI (presentation layer)
- Android Architecture components
- Android KTX - Jetpack Kotlin extensions
- Dependency Injection: Koin
- Static analysis tools
- Ktlint - validate code formatting
- Detekt - verify complexity look for and code smell
- Spotless - keep your code spotless
- Arrow Analysis - Pre-, post-condition, and invariant checks for your Kotlin code
- Gradle: Gradle Kotlin DSL + Custom tasks and plugins
- Loggers: Kotlin Logging
- Dependency versions: Version catalog TOML file format
- Git: Specification - Conventional Commits
- App module: the entry point to the application, contains almost no code, depends on the feature-modules.
- Feature module: contain specific functionality. By structure, these modules can contain all
the layers of your architecture, but they can also just contain some feature without any layers. A
feature module can have dependencies on other feature modules only through an API module or on
the main module, if we are talking about an feature UI module. Feature modules can be divided into
three types:
- Feature UI module: contains a screen, a group of screens, views, resources, and other code to implement a specific UI. Feature UI modules are independent of other feature UI modules. For interconnection between feature UI modules, a helper module is usually used that contains specific code for their interaction (for example, a module that contains code for navigating between screens).
- Feature module of implementation: contains implementations of interfaces from the API module, contains classes for working with the database and server, data models with JSON annotations for serializing/deserializing data. It resembles a data layer from a Clean architecture;
- Feature API module: contains interfaces for working with data, data models without JSON annotations, business logic and usecases.
- Core module: contains helper code that can be used in more than one module. These can be abstract classes, utilities, providing libraries through transitive dependencies, and so on. Core modules do not depend on any other modules.
- BuildSrc: can contain application configuration, dependency versions and custom gradle tasks.
The project has a set of githooks. In order for git to detect them, you need to add them to the config.
git config --local core.hooksPath .githooks
There are a few ways to open this project.
Android Studio
->File
->New
->From Version control
->Git
- Enter
https://github.com/majorkik/MovieBox-Compose.git
into URL field an pressClone
button
- Run
git clone https://github.com/majorkik/MovieBox-Compose.git
command to clone project - Open
Android Studio
and selectFile | Open...
from the menu. Select cloned directory and pressOpen
button
Add parameters in the locale.properties file as shown in the example below.
keyTmdb="Your TMDb Key"
- Open TheMovieDatabase ->
Login/Join TMDb
->Profile
->Settings
->API
-> CopyAPI Key (v3 auth)
- Paste copied key into
local.properties
file (keyTmdb
)
Here I will leave useful links to utilities, projects or articles that may come in handy when developing mobile applications.
- Jetpack compose samples - official Jetpack Compose samples.
- Add git-hooks
- Implement networking with Ktor
- Try to implement a network layer in Rust (Experiment)
- Write tests (unit/instrumental)
- Update readme (naming and code conventions)
- Add data caching
- Add debug menu
- Gradle plugins - Plugin search
- GitIgnore.io - .gitignore builder