Android Development with Kotlin
Build and ship native Android apps with Kotlin and Jetpack Compose — from your first screen to Google Play.
Android is the platform most people in India actually use, and it is where most mobile work here starts. This course takes you from a blank Android Studio project to an app on Google Play.
Jetpack Compose throughout. XML layouts get one module, because every existing app you join will still have them and you need to read them — but nobody starts new screens that way, so that is all the time they get.
It spends real time on architecture, because Android punishes you for skipping it. An app that ignores the lifecycle looks fine until a phone call arrives, the screen rotates, or Android reclaims memory, and then it loses the user's work. The module on state and lifecycle exists precisely to stop that.
You need no Mac and no paid account to follow along. A Google Play developer account is a one-off fee and only matters for the final module.
Who this is for
- Anyone who has finished our Kotlin Complete Foundation course
- Developers who want to build for the platform most of their users are on
- iOS developers adding Android
- Interns joining Android client work
What you need first
- Solid Kotlin. Our Kotlin Complete Foundation course covers everything assumed here, including coroutines.
- A computer that can run Android Studio comfortably — 8 GB of RAM is realistically the floor.
- A physical Android phone is useful but not required; the emulator is fine for most of the course.
- A Google Play developer account is needed only for the final module, and costs a one-off fee.
Tools you will use
By the end you can
- Build Android interfaces with Jetpack Compose
- Handle state, recomposition and the activity lifecycle correctly
- Structure an app with ViewModels, repositories and dependency injection
- Navigate between screens and pass data without leaking it
- Store data locally with Room and DataStore
- Call APIs with Retrofit and coroutines, and survive a bad network
- Run work in the background that outlives your screen
- Request permissions without the user refusing them
- Test, profile and debug a real app
- Publish to Google Play and ship an update
15 modules, 74 lessons
Work through these in order. Each lesson is short enough to finish in one sitting and ends with something to build, not a quiz.
- 1
Getting Started
Android Studio, an emulator, and an app running on it.
- What Android development actually involvesComing soon
- Installing Android Studio and the SDKComing soon
- Your first app, runningComing soon
- The emulator, and running on your own phoneComing soon
- Finding your way around Android StudioComing soon
- 2
How an Android App Is Put Together
The pieces the platform expects, and the lifecycle that catches everyone.
- The anatomy of a projectComing soon
- The manifest, and what it declaresComing soon
- Activities, and why there is usually only one nowComing soon
- The lifecycle: the thing that breaks naive appsComing soon
- Resources: strings, drawables and configurationComing soon
- 3
Jetpack Compose Fundamentals
Describing a screen instead of inflating one.
- Declarative UI, and how it differs from XMLComing soon
- Composable functionsComing soon
- Recomposition: what actually re-runsComing soon
- Modifiers, and why order mattersComing soon
- Previews and the fastest way to iterateComing soon
- Material 3 components you will use dailyComing soon
- 4
Layout and Theming
Looking right across a very wide range of devices.
- Row, Column and BoxComing soon
- Constraint layouts and flowComing soon
- Material theming, colour and typographyComing soon
- Dark mode and dynamic colourComing soon
- Adapting to phones, foldables and tabletsComing soon
- Accessibility: TalkBack, touch targets and contrastComing soon
- 5
State and Lifecycle
The module that stops your app losing the user's work.
- remember and mutableStateOfComing soon
- State hoisting, and stateless composablesComing soon
- ViewModel, and surviving rotationComing soon
- Saved state, and surviving process deathComing soon
- Side effects: LaunchedEffect and friendsComing soon
- 6
Lists and Navigation
The two things almost every app is made of.
- LazyColumn and LazyRowComing soon
- Keys, and why your list is jankyComing soon
- Navigation between screensComing soon
- Passing data, and what not to passComing soon
- Bottom bars, drawers and app structureComing soon
- 7
Architecture
Structure that holds up past the third screen.
- Why Android punishes you for skipping thisComing soon
- UI, domain and data layersComing soon
- Repositories, and a single source of truthComing soon
- Modelling UI state as one objectComing soon
- Dependency injection with HiltComing soon
- Flows from the data layer to the screenComing soon
- 8
Storing Data on Device
What survives the app being closed, and what should not.
- DataStore for preferencesComing soon
- Room: entities, DAOs and the databaseComing soon
- Queries, relations and migrationsComing soon
- Caching, and an app that works on a bad trainComing soon
- Files, and where secrets goComing soon
- 9
Networking
Talking to an API on a connection that keeps dropping.
- Retrofit and typed API callsComing soon
- Coroutines, scopes and cancellationComing soon
- Loading, empty, error and retryComing soon
- Loading remote images efficientlyComing soon
- Offline-first, and syncing when you canComing soon
- 10
Work That Outlives the Screen
Background work on a platform that is actively trying to stop you.
- Why Android keeps killing your background workComing soon
- WorkManager for deferrable workComing soon
- Foreground services, and when they are justifiedComing soon
- Notifications, channels and permissionComing soon
- 11
Permissions and Device Features
Asking for access without getting refused.
- The permission model, and asking at the right momentComing soon
- Camera, photos and the media pickerComing soon
- Location, and its privacy expectationsComing soon
- Intents, sharing and deep linksComing soon
- 12
Meeting XML Layouts
One module, because the app you join will be full of them.
- Why XML layouts are still everywhereComing soon
- Reading a layout and a RecyclerViewComing soon
- Mixing Compose and Views in one appComing soon
- 13
Testing, Profiling and Debugging
Finding problems before a one-star review does.
- Logcat, breakpoints and the layout inspectorComing soon
- Unit testing ViewModels and repositoriesComing soon
- Testing Compose UIComing soon
- Profiling: jank, memory and batteryComing soon
- Crash reporting, and reading a stack trace from the fieldComing soon
- 14
Shipping to Google Play
Release builds, signing, the console, and the review you can fail.
- Release builds, R8 and shrinkingComing soon
- Signing and the key you must not loseComing soon
- The Play Console and your first listingComing soon
- Internal, closed and open testing tracksComing soon
- Play policy, data safety and staying publishedComing soon
- 15
Capstone Project
Design, build, test and publish a complete app.
- The brief: a local deals appComing soon
- Designing it before building itComing soon
- Building it screen by screenComing soon
- Polish, icons and empty statesComing soon
- Publishing itComing soon
Learning this with a mentor is faster
Our internship programme is free and fully remote. You get this curriculum, real project work, and code review from working developers.