Android (Kotlin) Tutorial
Kotlin is the language Google now recommends for all new Android development —
more concise than Java, null-safe by design, and built from the ground up to work beautifully with
coroutines for asynchronous code. This is the most comprehensive Android track on this site:
64 lessons covering everything from Kotlin fundamentals through modern Jetpack
architecture, networking, background work, device features, Firebase, testing, and shipping to
the Play Store. Throughout the whole track we build one running example together —
TrailLog, a hiking journal app where users log trails with notes, photos, and GPS
location, sync them to the cloud, and get reminders to log their next hike — so every concept
lands in a real, connected context rather than isolated snippets.
Where this fits: This track stands on its own — no prior Android experience needed, though if you've been through the
Android (Java) track already, you'll recognize the same core concepts here, just written the modern Kotlin way.
Why This Track Is Different From the Java Track
| Instead of... | This track teaches... |
| Raw AsyncTask / Loaders | Kotlin Coroutines and Flow — the modern, structured way to handle asynchronous and background work |
| findViewById() everywhere | View Binding — type-safe, null-safe view references generated automatically |
| SharedPreferences | Jetpack DataStore — the modern, coroutine-friendly replacement |
| Dagger 2 (raw) | Hilt — Google's own opinionated dependency injection layer built on top of Dagger |
| Mockito | MockK — a mocking library actually designed for Kotlin's language features |
A Quick Look Ahead
Example: A ViewModel Loading Trails with Coroutines
class TrailViewModel(private val repository: TrailRepository) : ViewModel() {
private val _trails = MutableStateFlow<List<Trail>>(emptyList())
val trails: StateFlow<List<Trail>> = _trails
fun loadTrails() {
viewModelScope.launch {
_trails.value = repository.getTrails()
}
}
}
Note: This is correct, real Kotlin/Android code — but this website's own project doesn't run a live Android Studio build, so you won't see it actually execute on this page. Follow along by creating your own project after the next few setup lessons.
What You'll Learn In This Track
| Area | Covered in |
| Foundations | Why Kotlin, installation, language basics, functions & classes, your first app |
| Core concepts | Activities, Fragments, Navigation Component, ViewModel & LiveData, MVVM |
| Kotlin deep dive | Null safety, data & sealed classes, collections, coroutines, Flow |
| UI: Views & layouts | View Binding, ConstraintLayout, RecyclerView, Material Components, custom views, animations, theming |
| Data & storage | DataStore, Room, file storage, the Repository pattern |
| Networking | Retrofit + Coroutines, OkHttp, serialization, error handling, WebSockets |
| Background, permissions & security | WorkManager, structured concurrency, runtime permissions, ProGuard/R8 |
| Device features & Firebase | Notifications, CameraX, location & maps, sharing, Firebase Auth/Firestore/FCM |
| Testing, architecture & shipping | Unit & UI testing, Hilt, Clean Architecture, Gradle KTS, signing, Play Store publishing |
Next steps: Head to
Why Kotlin? before we install anything — understanding the philosophy makes everything after it click faster.