Panduan Android Kotlin di developer.android.com/kotlin adalah pintu masuk resmi Google untuk pengembangan Android dengan Kotlin. Sejak 2019 Kotlin menjadi bahasa utama Android, dan seluruh dokumentasi Jetpack terbaru ditulis dengan contoh Kotlin terlebih dahulu. Pada chapter ini kita memetakan konsep utama yang sering muncul di panduan Android, mendemokan activity lifecycle dan ViewModel dengan simulasi JVM, serta menunjukkan stack Jetpack modern.
Konsep Inti Android #
Berikut tujuh konsep yang menjadi inti pengembangan Android modern:
| Konsep | Peran |
|---|---|
| Activity lifecycle | State mesin CREATED → STARTED → RESUMED → PAUSED → STOPPED → DESTROYED |
| ViewModel | Menyimpan state UI yang selamat dari rotasi layar |
| StateFlow / LiveData | Observable state yang UI observe untuk re-render |
| Intent | Pesan untuk pindah activity atau memicu action sistem |
| Jetpack Compose | UI deklaratif menggantikan XML layout |
| Navigation Compose | Type-safe navigation antar composable |
| Room / DataStore / Retrofit | Persistence dan networking |
Demo Lifecycle, ViewModel, dan Intent #
Karena Android SDK tidak tersedia di JVM biasa, cuplikan berikut memodelkan tiga konsep utama sebagai class Kotlin murni: activity lifecycle sebagai enum + state machine, ViewModel sebagai class dengan property, dan intent sebagai data class. Perilaku dan urutan event sama dengan implementasi Android nyata:
// panduan_android.kt
// Tour singkat Panduan Android Kotlin:
// https://developer.android.com/kotlin
//
// Mendemokan konsep yang sering muncul di pengembangan Android dengan Kotlin
// (tanpa Android SDK — dijalankan di JVM biasa).
// 1. Activity Lifecycle — simulasi state mesin status
enum class ActivityState {
CREATED, STARTED, RESUMED, PAUSED, STOPPED, DESTROYED
}
class ActivitySimulasi {
var state: ActivityState = ActivityState.CREATED
private set
fun onCreate() { state = ActivityState.CREATED; println(" onCreate() -> $state") }
fun onStart() { state = ActivityState.STARTED; println(" onStart() -> $state") }
fun onResume() { state = ActivityState.RESUMED; println(" onResume() -> $state") }
fun onPause() { state = ActivityState.PAUSED; println(" onPause() -> $state") }
fun onStop() { state = ActivityState.STOPPED; println(" onStop() -> $state") }
fun onDestroy() { state = ActivityState.DESTROYED; println(" onDestroy() -> $state") }
}
// 2. ViewModel — menyimpan state UI yang selamat dari rotasi
class PenggunaViewModel {
var nama: String = ""
private set
var skor: Int = 0
private set
fun setNama(n: String) { nama = n }
fun tambahSkor(n: Int = 1) { skor += n }
}
// 3. LiveData/StateFlow simulasi — observable state
class CounterMutable {
private var nilai: Int = 0
private val observers = mutableListOf<(Int) -> Unit>()
fun observe(block: (Int) -> Unit) {
observers.add(block)
}
fun setNilai(n: Int) {
nilai = n
observers.forEach { it(nilai) }
}
}
// 4. Intent (pindah activity) — simulasi
data class Intent(val action: String, val extras: Map<String, String> = emptyMap())
class NavigasiActivity {
private val stack = mutableListOf<String>("MainActivity")
fun startActivity(intent: Intent) {
stack.add(intent.action)
println(" Navigasi ke ${intent.action}, extras=${intent.extras}")
}
fun back(): String? {
if (stack.size > 1) {
stack.removeAt(stack.lastIndex)
println(" Back ke ${stack.last()}")
}
return stack.lastOrNull()
}
}
fun main() {
println("=== Panduan Android dengan Kotlin ===")
println("Sumber: https://developer.android.com/kotlin")
println()
println("--- 1. Activity Lifecycle ---")
val act = ActivitySimulasi()
act.onCreate()
act.onStart()
act.onResume()
act.onPause()
act.onStop()
act.onDestroy()
println()
println("--- 2. ViewModel state ---")
val vm = PenggunaViewModel()
vm.setNama("Budi")
vm.tambahSkor(5)
vm.tambahSkor(3)
println(" ViewModel: nama=${vm.nama}, skor=${vm.skor}")
println(" (State selamat dari rotasi layar)")
println()
println("--- 3. Observable state (mirip StateFlow) ---")
val counter = CounterMutable()
counter.observe { println(" Observer 1: nilai = $it") }
counter.observe { println(" Observer 2: nilai = $it (x2 = ${it * 2})") }
counter.setNilai(10)
counter.setNilai(25)
println()
println("--- 4. Intent dan navigasi ---")
val nav = NavigasiActivity()
nav.startActivity(Intent("DetailActivity", mapOf("id" to "42")))
nav.startActivity(Intent("EditActivity", mapOf("id" to "42", "mode" to "edit")))
nav.back()
nav.back()
println()
println("--- 5. Stack Android modern ---")
val stack = listOf(
"Jetpack Compose -> UI deklaratif (replace XML layout)",
"ViewModel -> state yang selamat dari rotasi",
"Navigation Compose -> type-safe navigation",
"Room -> ORM SQLite dengan @Dao",
"Hilt -> dependency injection",
"Retrofit -> HTTP client dengan @GET, @POST",
"Coroutines -> async programming (Dispatchers.Main)",
"DataStore -> pengganti SharedPreferences (async)"
)
stack.forEach { println(" $it") }
println()
println("--- 6. Resource Android ---")
val res = listOf(
"res/layout/ -> XML layout (legacy)",
"res/values/strings.xml -> string terjemahan",
"res/drawable/ -> gambar (PNG, Vector)",
"res/mipmap/ -> app icon",
"AndroidManifest.xml -> deklarasi komponen app"
)
res.forEach { println(" $it") }
println()
println("--- 7. Cara belajar Android Kotlin ---")
val cara = listOf(
"1. Install Android Studio (bundled Kotlin + emulator)",
"2. Buat project 'Empty Compose Activity'",
"3. Pelajari Jetpack Compose (UI modern)",
"4. Tambahkan ViewModel + Room untuk state persistence",
"5. Tambahkan Retrofit untuk network call",
"6. Deploy ke device fisik via USB debugging"
)
cara.forEach { println(" $it") }
}Output yang Dihasilkan:
=== Panduan Android dengan Kotlin ===
Sumber: https://developer.android.com/kotlin
--- 1. Activity Lifecycle ---
onCreate() -> CREATED
onStart() -> STARTED
onResume() -> RESUMED
onPause() -> PAUSED
onStop() -> STOPPED
onDestroy() -> DESTROYED
--- 2. ViewModel state ---
ViewModel: nama=Budi, skor=8
(State selamat dari rotasi layar)
--- 3. Observable state (mirip StateFlow) ---
Observer 1: nilai = 10
Observer 2: nilai = 10 (x2 = 20)
Observer 1: nilai = 25
Observer 2: nilai = 25 (x2 = 50)
--- 4. Intent dan navigasi ---
Navigasi ke DetailActivity, extras={id=42}
Navigasi ke EditActivity, extras={id=42, mode=edit}
Back ke DetailActivity
Back ke MainActivity
--- 5. Stack Android modern ---
Jetpack Compose -> UI deklaratif (replace XML layout)
ViewModel -> state yang selamat dari rotasi
Navigation Compose -> type-safe navigation
Room -> ORM SQLite dengan @Dao
Hilt -> dependency injection
Retrofit -> HTTP client dengan @GET, @POST
Coroutines -> async programming (Dispatchers.Main)
DataStore -> pengganti SharedPreferences (async)
--- 6. Resource Android ---
res/layout/ -> XML layout (legacy)
res/values/strings.xml -> string terjemahan
res/drawable/ -> gambar (PNG, Vector)
res/mipmap/ -> app icon
AndroidManifest.xml -> deklarasi komponen app
--- 7. Cara belajar Android Kotlin ---
1. Install Android Studio (bundled Kotlin + emulator)
2. Buat project 'Empty Compose Activity'
3. Pelajari Jetpack Compose (UI modern)
4. Tambahkan ViewModel + Room untuk state persistence
5. Tambahkan Retrofit untuk network call
6. Deploy ke device fisik via USB debuggingPerhatikan empat kelompok yang dicetak: activity lifecycle lengkap dari CREATED ke DESTROYED, ViewModel yang menyimpan nama dan skor, observable state yang mengabari dua observer tiap perubahan, dan navigasi activity dengan back stack.
Stack Jetpack Modern #
Pengembangan Android hari ini tidak lepas dari Jetpack. Compose menggantikan XML untuk UI, ViewModel menyimpan state lintas rotasi, Room memetakan tabel SQLite ke data class Kotlin, Hilt menyuntikkan dependency di compile-time, Retrofit mempermudah HTTP, dan Coroutines mengatur asinkron. DataStore menggantikan SharedPreferences dengan API async berbasis Flow.
Referensi Lanjutan #
- Android developers — Kotlin — pusat sumber daya Android + Kotlin dari Google yang memuat codelab, contoh, dan panduan resmi
Selanjutnya #
Android adalah satu target; target lain yang sama pentingnya adalah backend. Chapter berikutnya membahas panduan backend Kotlin — Ktor dan Spring Boot, dua framework utama untuk membangun server.