Setelah membangun beberapa aplikasi backend dan CLI, kita beralih ke platform mobile. Aplikasi Android Pencatat Keuangan adalah proyek pertama yang menyasar peranti mobile. Aplikasi ini memungkinkan pengguna mencatat pemasukan dan pengeluaran, melihat saldo, serta menavigasi antar layar daftar, tambah transaksi, dan dashboard ringkasan. Kita memakai Jetpack Compose untuk antarmuka, ViewModel untuk state, dan Room untuk database lokal. Proyek ini memperkenalkan konsep penting pengembangan Android modern: UI deklaratif berbasis composable, state hoisting, navigation dengan Compose Navigation, dan database lokal berbasis Room. Setiap Bagian menghasilkan aplikasi yang dapat dijalankan di emulator atau peranti fisik, sehingga kita dapat memverifikasi tampilan dan interaksi secara konkret.
Tujuan Proyek #
Aplikasi Android pencatat keuangan yang akan kita bangun mendukung fitur berikut:
- Menampilkan daftar transaksi dalam
LazyColumndengan item composable. - Menambah transaksi pemasukan atau pengeluaran melalui form.
- Menavigasi antar layar dengan Compose Navigation.
- Menyimpan transaksi ke database lokal via Room (SQLite).
- Menampilkan ringkasan saldo, total pemasukan, dan total pengeluaran.
Aplikasi mengikuti pola arsitektur single-activity, multiple composable screen dengan ViewModel sebagai pemegang state UI. State dipegang oleh ViewModel sehingga tetap bertahan saat konfigurasi berubah (rotasi layar, misalnya).
Perilaku yang Diharapkan #
Alur penggunaan tipikal pada peranti Android:
# Pseudo interaksi pengguna
Buka aplikasi -> Dashboard saldo (Rp3.050.000)
Tap "Tambah" -> Form -> Pilih "Pengeluaran", 50000, Makan -> Simpan
Kembali ke Dashboard -> Saldo turun menjadi Rp3.000.000Output yang Dihasilkan (dari demo konsep terminal):
[1] + Rp5.000.000 | Gaji - Gaji Januari
[2] - Rp750.000 | Makan - Makan siang
Pemasukan : Rp5.000.000
Pengeluaran: Rp1.950.000
Saldo : Rp3.050.000Pada chapter ini kita mengekspresikan konsep dengan Kotlin murni yang dapat dijalankan di terminal. Composable sebenarnya membutuhkan Android SDK dan tidak dapat dijalankan langsung dengan kotlinc; kode di setiap Bagian memetakan logika domain dan state yang akan dipakai Compose di layer UI.
Teknologi dan Stack #
Proyek ini menggunakan peranti berikut:
| Komponen | Versi | Tujuan |
|---|---|---|
| Bahasa | Kotlin 2.0.21 | Coroutines, null-safety, DSL Compose |
| UI | Jetpack Compose 1.5+ | UI deklaratif, reaktif terhadap state |
| State | ViewModel + StateFlow | Bertahan saat rotasi, observable |
| Navigation | Compose Navigation | Navigasi antar composable |
| Database | Room (SQLite) | Abstraksi JDBC-like di Android |
| Pengujian | JUnit + Compose UI Test | Unit test logic, UI test interaksi |
| Build tool | Gradle 8.x dengan Kotlin DSL | Plugin Android, build APK |
Proyek ini menggabungkan banyak pustaka Jetpack sekaligus. Untuk fokus pada konsep, kode contoh di setiap Bagian ditulis sebagai Kotlin murni yang dapat dijalankan di terminal, dengan pola yang sama persis dengan Compose di Android.
Prasyarat #
Pembaca diharapkan telah menyelesaikan chapter berikut:
- Section Dasar-Dasar Kotlin:
data class,enum class,sealed class, dan lambda, - Section Coroutines:
suspend,launch,async, sertaFlowuntuk stream data, - Section Object-Oriented Programming:
interfacedanobjectuntuk dependency injection, - Pola MVVM dan state management dasar,
- SQL dan database (proyek REST API Manajemen Tugas dan Aplikasi Inventaris).
Untuk benar-benar menjalankan aplikasi di peranti, dibutuhkan Android Studio dengan SDK Android API 34 atau lebih baru. Namun, kode contoh di chapter ini dapat dijalankan dengan kotlinc biasa.
Arsitektur #
Aplikasi mengikuti pola unidirectional data flow yang direkomendasikan Google. Composable membaca state dari ViewModel melalui StateFlow<T>; aksi pengguna menjadi event yang mengubah state di ViewModel; state baru dipancarkan ke UI yang otomatis render ulang. Pola ini membuat alur data dapat dilacak dan diuji.
Pemisahan Repository dari ViewModel memungkinkan sumber data diganti (misalnya dari Room lokal ke API Ktor backend) tanpa mengubah ViewModel. State hoisting memindahkan kepemilikan state dari Composable ke ViewModel, sehingga Composable tetap stateless dan mudah di-preview maupun diuji.
Struktur Bagian #
Proyek ini dikerjakan dalam empat bagian berurutan:
| Bagian | Yang Dikerjakan | Hasil yang Diharapkan |
|---|---|---|
| 1. Desain Antarmuka | LazyColumn, item composable, tema Material | Daftar transaksi tampil dengan layout yang konsisten |
| 2. State dan Navigation | ViewModel, StateFlow, Compose Navigation | Navigasi antar layar daftar, form, dan dashboard dengan state yang bertahan |
| 3. Database Lokal | Room DAO, entity, repository | Transaksi tersimpan persisten di SQLite dan dimuat saat aplikasi dibuka |
| 4. Pengujian dan Release | Unit test ViewModel, Compose UI Test, build APK release | Logika teruji otomatis; APK dapat diinstall di peranti |
Mulailah dari Bagian 1 dan ikuti urutannya karena setiap Bagian dibangun di atas Bagian sebelumnya. Setelah Bagian 4 selesai, kita siap melangkah ke proyek Aplikasi Web Ktor yang membawa kita kembali ke backend, namun dengan struktur modular dan deployment siap produksi.
Referensi Lanjutan #
- Kotlin Multiplatform Mobile getting started — panduan resmi KMP Mobile sebagai konteks pembuatan aplikasi Android Kotlin
- Kotlin documentation home — halaman utama dokumentasi Kotlin sebagai rujukan fitur yang dipakai di seluruh bagian proyek
Bangun antarmuka Jetpack Compose dengan LazyColumn untuk daftar transaksi, item composable, dan form tambah transaksi.
Buka → # Bagian 2: State dan NavigationTambahkan ViewModel dengan StateFlow untuk state hoisting dan Compose Navigation untuk berpindah antar layar.
Buka → # Bagian 3: Database LokalHubungkan ViewModel ke database lokal via Room: Entity, Dao, dan AppDatabase, dengan operasi insert, query, dan agregasi.
Buka → # Bagian 4: Pengujian dan ReleaseTulis unit test untuk ViewModel, lalu bangun APK release dengan R8 minifikasi dan signing keystore.
Buka →