Zero-to-Hero Android Development
Learn modern Android development with Jetpack Compose, Kotlin Coroutines, and Clean Architecture. Interactive lessons with code editors and real-world examples.
- Level 1
The Atom (Hello Compose)
Composable Functions
In modern Android, UI is not a separate XML file. It is a Kotlin function annotated with `@Composable`....
Start Level - Level 2
State & Interactivity
Reactive State Management
Reactivity. When `state` changes, the UI automatically "recomposes" (redraws). We use `remember` to keep state across re...
Start Level - Level 3
Layouts & Modifiers
Compose Layout System
No more nested XML layouts. We use `Column` (vertical), `Row` (horizontal), and `Box` (z-index stacking). **Modifiers** ...
Start Level - Level 4
Lists (The new RecyclerView)
LazyColumn for Lists
`LazyColumn` renders only what is on screen. It replaces the complex RecyclerView + Adapter boilerplate....
Start Level - Level 5
State Hoisting (Unidirectional Data Flow)
Unidirectional Data Flow
UI components should be dumb. They receive data (`state`) and emit events (`callbacks`). They shouldn't change state the...
Start Level - Level 6
ViewModel & Flow (Architecture)
MVVM with StateFlow
Business logic lives in the `ViewModel`. The UI observes `StateFlow`. This survives configuration changes (rotation)....
Start Level - Level 7
Modern Navigation
Navigation Compose
Single Activity, multiple Composable destinations. Defined via a Navigation Graph....
Start Level - Level 8
Side Effects
LaunchedEffect & Side Effects
Running code that isn't UI (timers, analytics, snackbars) inside Composable functions safely....
Start Level - Level 9
The Full Network Stack (Retrofit + Repository)
Clean Architecture Data Layer
The "Clean Architecture" way to fetch data....
Start Level - Level 10
Dependency Injection (Hilt)
Hilt for DI
Automating how classes get their dependencies....
Start Level - Level 11
Coroutines on Android (Structured Concurrency)
viewModelScope & Structured Concurrency
Long-running work (network, disk) must run off the main thread. `viewModelScope` launches coroutines that are automatica...
Start Level - Level 12
Local Persistence (Room + Flow)
Room: Entities, DAO & Reactive Queries
Room is the recommended SQLite abstraction. Define an `@Entity` (table), a `@Dao` (queries), and a `@Database`. Returnin...
Start Level - Level 13
Storing Preferences (DataStore)
DataStore over SharedPreferences
`SharedPreferences` is synchronous and error-prone. `DataStore` is the modern replacement: it is async, transactional, a...
Start Level - Level 14
Deferrable Background Work (WorkManager)
WorkManager for Guaranteed Work
For work that must run even if the app closes (syncing, uploads), use `WorkManager`. It survives process death and reboo...
Start Level - Level 15
Type-Safe Navigation
Navigation Compose with Serializable Routes
String routes like `"profile/{userId}"` are easy to get wrong. Modern Navigation Compose lets you model destinations as ...
Start Level - Level 16
Lifecycle-Aware Collection
lifecycleScope & repeatOnLifecycle
Collecting a `Flow` in a coroutine that keeps running while the screen is in the background wastes resources and can cra...
Start Level - Level 17
Theming & Dark Mode (Material 3)
MaterialTheme, Color Schemes & Dynamic Color
A consistent look comes from a single `MaterialTheme`. You define a light and dark `ColorScheme`, switch based on the sy...
Start Level - Level 18
Testing (ViewModel & Compose UI)
Coroutine Tests & Compose Test Rule
Tests lock in behavior. Unit-test `ViewModel` logic with a test dispatcher, and assert your UI with the Compose testing ...
Start Level - Level 19
Paging 3 (Infinite Scrolling)
PagingSource, Pager & collectAsLazyPagingItems
Loading thousands of rows at once is wasteful. Paging 3 fetches data in pages as the user scrolls, exposes load states (...
Start Level - Level 20
Animations in Compose
animate*AsState, AnimatedVisibility & updateTransition
Compose animates by re-targeting a value: you change a state, and a backing `Animatable` smoothly moves to the new value...
Start Level - Level 21
Custom Drawing with Canvas
Canvas, DrawScope & graphicsLayer
When no built-in component fits — a ring chart, a signature pad, a custom progress arc — you drop to the `Canvas` compos...
Start Level - Level 22
Runtime Permissions
ActivityResult API & rememberLauncherForActivityResult
Dangerous permissions (camera, location, notifications) must be requested at runtime and can be revoked anytime. The mod...
Start Level - Level 23
Recomposition Performance
Stability, derivedStateOf & key/remember
Slow Compose UIs almost always come from recomposing too much. Understanding stable types, deferring reads, and deriving...
Start Level - Level 24
Offline-First Repository
Single Source of Truth & NetworkBoundResource
An offline-first app treats the local database as the single source of truth. The UI always reads from Room; the network...
Start Level