A template for bootstrapping a multi-module android project. It demonstrates clean architecture and has a navigation module based on this
- Multi-module clean architecture
- Kotlin coroutines with Flow
- Dependency injection with Dagger-Hilt
- View abstracted from Fragment like componentizationArch
- API request with Retrofit and Moshi for JSON serialisation and deserialization
- Local persistence with Room
- Paging with Paging 3.0
- CI with Github actions
- Code coverage with jacoco with reports uploaded to codecov
- Code lint check with Ktlint using a gradle plugin
- Static code analysis with detekt
- Dependency management with buildSrc (Kotlin DSL)
- Dependency updates with buildSrcVersions
- Git hooks to perform ktlint, detekt and lint checks before committing
- Material Components
- Constraint Layout
- Retrofit for REST api communication
- Moshi for JSON serialisation and deserialization
- Mockk for mocking in tests
- Dagger-Hilt for dependency injection
- Kotlin Flow for concurrency
- Turbine for testing flow
- ViewModel & LiveData
- Navigation Architecture Component
- Room for database
- Glide for image loading
- ViewBinding
- Kotlin Delegates
- Ktlint gradle plugin for code lint checks
- Detekt for static code analysis
- LeakCanary for detecting memory leaks in development
The gradle script uses Kotlin Gradle DSL (buildSrc ) which brings Kotlin's rich language features to gradle configuration. The project also uses detekt to detect code smells and ktlint to enforce proper code style. Github actions handles continuous integration, and runs detekt, ktlint, lint and unit tests concurrently. A pre-commit git hook verifies the project's code style before committing code. Test coverage reports are uploaded to codecov.