Android π€
Project Structure
The team typically uses the following project structure:
{project_name}
βββ app
βΒ Β βββ libs
βΒ Β βββ src
βΒ Β β βββ androidTest (instrumented tests)
βΒ Β β βΒ Β βββ java
βΒ Β β βΒ Β Β Β βββ {package_name}
βΒ Β β βΒ Β βββ HomeScreenTest.kt
βΒ Β β βββ main
βΒ Β β βΒ Β βββ java
βΒ Β β βΒ Β βΒ Β βββ {package_name}
βΒ Β β βΒ Β βΒ Β βββ di
βΒ Β β βΒ Β βΒ Β βββ extensions
βΒ Β β βΒ Β βΒ Β βββ ui
βΒ Β β βΒ Β βΒ Β β βββ base
βΒ Β β βΒ Β βΒ Β β β βββ BaseScreen.kt
βΒ Β β βΒ Β βΒ Β β β βββ BaseViewModel.kt
βΒ Β β βΒ Β βΒ Β β βββ common
βΒ Β β βΒ Β βΒ Β β β βββ AppButton.kt
βΒ Β β βΒ Β βΒ Β β βββ models (UiModel, enum)
βΒ Β β βΒ Β βΒ Β β βββ screens
βΒ Β β βΒ Β βΒ Β β β βββ main
βΒ Β β βΒ Β βΒ Β β β β βββ home
βΒ Β β βΒ Β βΒ Β β β β β βββ HomeScreen.kt
βΒ Β β βΒ Β βΒ Β β β β β βββ HomeScreenParameterProvider.kt
βΒ Β β βΒ Β βΒ Β β β β β βββ HomeViewModel.kt
βΒ Β β βΒ Β βΒ Β β β β βββ MainNavGraph.kt
βΒ Β β βΒ Β βΒ Β β β βββ MainActivity.kt
βΒ Β β βΒ Β βΒ Β β βββ theme
βΒ Β β βΒ Β βΒ Β β β βββ AppColors.kt
βΒ Β β βΒ Β βΒ Β β β βββ AppDimens.kt
βΒ Β β βΒ Β βΒ Β β β βββ AppShapes.kt
βΒ Β β βΒ Β βΒ Β β β βββ AppStyles.kt
βΒ Β β βΒ Β βΒ Β β β βββ AppTypography.kt
βΒ Β β βΒ Β βΒ Β β β βββ AppTheme.kt
βΒ Β β βΒ Β βΒ Β β βββ AppDestination.kt
βΒ Β β βΒ Β βΒ Β β βββ AppNavGraph.kt
βΒ Β β βΒ Β βΒ Β βββ util
βΒ Β β βΒ Β βΒ Β βββ MainApplication.kt
βΒ Β β βΒ Β βββ res
βΒ Β β βΒ Β β βββ drawable
βΒ Β β βΒ Β β βββ font
βΒ Β β βΒ Β β βββ mipmap
βΒ Β β βΒ Β β βββ values
βΒ Β β βΒ Β β βββ xml
βΒ Β β βΒ Β βββ AndroidManifest.xml
βΒ Β β βββ staging
βΒ Β β β βββ res
βΒ Β β β βββ values
βΒ Β β βββ test (unit tests)
βΒ Β β βββ java
βΒ Β β β βββ {package_name}
βΒ Β β Β Β β Β βββ test (helpers)
βΒ Β β Β Β βΒ Β βββ ui
βΒ Β β Β Β βΒ Β βββ screens
βΒ Β β Β Β βΒ Β βββ main
βΒ Β β Β Β βΒ Β β βββ home
βΒ Β β Β Β βΒ Β β βββ HomeScreenTest.kt
βΒ Β β Β Β βΒ Β β βββ HomeViewModelTest.kt
βΒ Β β β βββ BaseScreenTest.kt
βΒ Β β βββ resources
βΒ Β βββ build.gradle
βΒ Β βββ proguard-rules.pro
βββ buildSrc (Kotlin DSL)
βββ data
βΒ Β βββ src
βΒ Β β βββ main
βΒ Β β βΒ Β βββ java
βΒ Β β βΒ Β Β Β βββ {package_name}.data
βΒ Β βΒ Β β Β Β βββ extensions
βΒ Β β βΒ Β Β Β βββ local
βΒ Β β βΒ Β β βββ storages
βΒ Β β βΒ Β Β Β βββ remote
βΒ Β β βΒ Β Β Β β βββ authenticators
βΒ Β β βΒ Β Β Β β βββ interceptors
βΒ Β β βΒ Β Β Β β βββ models
βΒ Β β βΒ Β Β Β β β βββ requests
βΒ Β β βΒ Β βΒ Β β βββ responses
βΒ Β β βΒ Β Β Β β βββ providers
βΒ Β β β Β Β Β Β β βββ services
βΒ Β β βΒ Β Β Β βββ repositories (impl)
β β βββ test
βΒ Β β Β Β βββ java
βΒ Β β Β Β Β Β βββ {package_name}.data
βΒ Β βΒ Β Β Β βββ extensions
βΒ Β β Β Β Β Β βββ repositories (impl)
βΒ Β β Β Β Β Β βββ test (helpers)
β βββ build.gradle.kts
βββ domain
βΒ Β βββ src
βΒ Β β βββ main
βΒ Β β βΒ Β βββ java
βΒ Β β βΒ Β Β Β βββ {package_name}.domain
βΒ Β βΒ Β β Β Β βββ exceptions
βΒ Β β βΒ Β Β Β βββ models
βΒ Β β βΒ Β Β Β βββ repositories
βΒ Β β βΒ Β Β Β βββ usecases
β β βββ test
βΒ Β β Β Β βββ java
βΒ Β β Β Β Β Β βββ {package_name}.domain
βΒ Β β Β Β Β Β βββ test (helpers)
βΒ Β β Β Β Β Β βββ usecases
β βββ build.gradle.kts
βββ detekt-config.yml
βββ build.gradle
βββ settings.gradle
βββ README.md
Development Environment
Android SDK, IDE
- The team uses Android Studio as the main official IDE.
- Itβs encouraged to use the Developer preview version to access the new feature and adopt the changes to improve productivity.
Emulator
- Use x86 emulator for significant speed up during development.