Android Development
Build Android apps with Kotlin and Jetpack Compose: lifecycle, state, coroutines, architecture and releasing on Google Play.
- 01
Kotlin for Android
The Kotlin you need for Android development, from null safety, data classes and lambdas to scope functions, lateinit and lazy, and the Java interop traps that come from the Android SDK, with Java side by side where it helps.
4–30 min beginner Junior & senior
- 02
Jetpack Compose Basics
Build your first Compose screens from composable functions, modifiers, Row, Column and Box, understand why modifier order matters and how constraints decide sizes, and make a screen react to taps.
7–30 min beginner Junior & senior
- 03
State and Recomposition
Make Jetpack Compose screens update when they should and keep their state when they should, with remember, rememberSaveable, state hoisting and ViewModels.
9–45 min beginner Junior & senior
- 04
Activity lifecycle and configuration changes
Know when Android creates, pauses, stops and destroys your Activity, what survives a rotation and what survives the system killing your app, and how to run work only while the screen is visible, in Kotlin with Java where it helps.
4–25 min beginner Junior & senior
- 05
ViewModel and unidirectional data flow
Keep screen state in a ViewModel, expose it as one immutable UiState, send user actions back as events, and survive rotation and process death on Android.
6–35 min beginner Junior & senior
- 06
Coroutines and Flow
Do background work without blocking the UI using suspend functions, scopes and dispatchers, and model data that changes over time with Flow and StateFlow on Android.
5–30 min intermediate Junior & senior
- 07
Navigation
Move between Compose screens with Navigation Compose and type-safe routes, pass ids instead of objects, return results, control the back stack for login flows and bottom navigation, and open screens from deep links.
4–20 min intermediate Junior & senior
- 08
Networking with Retrofit and Ktor
Call a REST API from an Android app with Retrofit or Ktor Client and kotlinx.serialization, turn HTTP and network failures into results the UI can show, add auth headers and timeouts with interceptors, and keep requests off the main thread and out of the composables.
4–30 min intermediate Junior & senior
- 09
Room database
Store data on the device with Room, observe queries as Flow so the UI updates itself, make the local database the single source of truth for offline-first screens, and change the schema with migrations that never lose user data.
3–30 min intermediate Junior & senior
- 10
Dependency injection with Hilt
Wire an Android app together with Hilt, using constructor injection, modules for third-party types and interfaces, scopes that match how long objects should live, @HiltViewModel for screens, and test replacements without changing production code.
3–25 min intermediate Junior & senior
- 11
WorkManager and background work
Run work that must finish even if the user leaves the app or the phone restarts, with WorkManager's constraints, retries with backoff, unique and chained work, periodic jobs and expedited work, and know when to use a coroutine, a foreground service or nothing at all.
4–25 min intermediate Junior & senior
- 12
Architecture: MVVM, MVI and Clean
Structure an Android app in UI, domain and data layers, make the local database the source of truth behind a repository, decide when use cases are worth it, choose between several StateFlows and one UI state, and split the app into feature and core modules without over-engineering it.
4–25 min intermediate Junior & senior
- 13
Testing
Test an Android app at the right levels, with fast ViewModel tests using fakes, runTest, test dispatchers and Turbine for Flows, Compose UI tests that find elements by semantics, and a few instrumented tests on real storage and real devices, without sleeps or flakiness.
4–25 min intermediate Junior & senior
- 14
Performance and baseline profiles
Make an Android app start fast and scroll smoothly, measure on release builds with Macrobenchmark and Perfetto instead of guessing, avoid unnecessary recomposition in Compose with keys, stable parameters and deferred state reads, keep work off the main thread at startup, and ship baseline profiles so critical code is compiled ahead of time.
4–25 min advanced Junior & senior
- 15
Permissions and notifications
Ask for runtime permissions at the moment they make sense and handle every answer, including "don't ask again", then show notifications properly on modern Android, with channels, the POST_NOTIFICATIONS permission, PendingIntents that open the right screen, and FCM messages that behave the same in the foreground and background.
4–25 min intermediate Junior & senior
- 16
Google Play release and R8
Ship an Android app to Google Play safely, with R8 shrinking and obfuscation, keep rules for code used through reflection, mapping files to read crash reports, App Bundles and Play App Signing, version codes, testing tracks, staged rollouts you can halt, and the target API level and vitals Google enforces.
3–20 min intermediate Junior & senior