Modern Android Development Gradle Kotlin DSL Gradle Versions Plugin Build Variants Build Types Product Flavors Code Style detekt ktlint / Ktlint Gradle Spotless Lint Checks Git Hooks Documentation KDoc dokka Architecture Application Architecture Jetpack Guide Clean Architecture Module Architecture Single Module Multi Module Layer Modules (Dynamic) Feature Modules Utility Modules Presentation Architecture MVP MVVM MVI Navigation Architecture Single Activity Flow Based Activities Design Layout Design Use ConstraintLayout Avoid hard-coded layout sizes Create alternative layouts Use the smallest width qualifier Use the available width qualifier Add orientation qualifiers Modularize UI components with fragments Material Theming Color Dark Theme Typography Shape Motion Libraries AndroidX Architecture Components View Binding Data Binding Lifecycle LiveData Paging ViewModel Work Manager Navigation CameraX Dependency Injection / Service Locator Dagger Koin Utilities Extension Splitties Time ThreeTenABP Klock Validation EasyValidation VValidator (BETA) Permissions PermissionsDispatcher Assent Biometrics Assure Deep Link DeepLinkDispatch Localization Android Localization Activity Result Inline Activity Result Network Retrofit OkHttp Reactivity / Thread Management Kotlin Coroutines RxJava Serialization Gson Moshi Kotlin Serialization Persistence Relational Room SQLDelight Realm ObjectBox Key-Value Paper MMKV Binary Preferences Shared Preferences Rxkprefs Splitties → Preferences Only Secure-preferences Repository Store (alpha) Image Loading Glide Coil UI Recycler View Epoxy Recyclical Square Cycler (Under development) Paris Cyanea FlexboxLayout Material Dialogs Lottie / LottieFiles SDP / SSP ExoPlayer Logging Timber Debugging Stetho Flipper Chucker LeakCanary Android Debug Database Testing JUnit5 Robolectric Mockito MockK Espresso Truth Kluent JaCoCo Tools Crash Reporting & Analytics Firebase Mixpanel Countly Flurry CI / CD Github Actions CircleCI Travis CI Bitrise Jenkins