Release dan Publishing adalah topik penting dalam pengembangan aplikasi Android dengan Kotlin. Memahaminya membantu kita membangun aplikasi yang andal, mudah diuji, dan siap untuk publikasi ke Google Play Store. Pada chapter ini kita akan membongkar konsep inti, melihat contoh kode praktis, dan menutup dengan checklist implementasi.
Build Variant #
Gradle menghasilkan APK (untuk testing cepat) dan AAB (untuk release Play Store). ./gradlew assembleRelease → APK. ./gradlew bundleRelease → AAB. AAB lebih kecil karena Play Store hanya mengirim resource yang relevan per device.
Berikut program demonstrasi konsep-konsep di atas:
// release_publishing.kt
// Mendemonstrasikan konsep release Android: build variant, signing config,
// dan metadata publish — disimulasikan sebagai struktur data.
data class BuildVariant(
val name: String,
val debuggable: Boolean,
val minifyEnabled: Boolean,
val output: String
)
data class SigningConfig(
val storeFile: String,
val keyAlias: String,
val keyPasswordEnv: String // jangan hardcode password
)
data class ReleaseArtifact(
val filename: String,
val sizeBytes: Long,
val sha256: String,
val mappingFile: String? = null
)
fun main() {
// === Build variants ===
val variants = listOf(
BuildVariant("debug", debuggable = true, minifyEnabled = false, output = "app-debug.apk"),
BuildVariant("release", debuggable = false, minifyEnabled = true, output = "app-release.aab")
)
println("=== Build Variants ===")
variants.forEach { v ->
val minify = if (v.minifyEnabled) "[R8 aktif]" else "[tanpa R8]"
println("${v.name}: debuggable=${v.debuggable} $minify → ${v.output}")
}
// === Signing config ===
val signing = SigningConfig(
storeFile = "/secure/release.keystore",
keyAlias = "my-release-key",
keyPasswordEnv = "RELEASE_KEY_PASSWORD"
)
println("\n=== Signing Config ===")
println("keystore: ${signing.storeFile}")
println("alias: ${signing.keyAlias}")
println("password: dari env var \$${signing.keyPasswordEnv} (jangan hardcode)")
// === Artifact yang dihasilkan ===
val artifact = ReleaseArtifact(
filename = "app-release.aab",
sizeBytes = 4_823_104L,
sha256 = "a3f5...c8b2",
mappingFile = "mapping.txt"
)
println("\n=== Release Artifact ===")
println("file: ${artifact.filename}")
println("size: ${artifact.sizeBytes} bytes (${artifact.sizeBytes / 1024 / 1024} MB)")
println("sha256: ${artifact.sha256}")
println("mapping: ${artifact.mappingFile} (upload ke Play Console untuk deobfuscate crash)")
println("\nPlay Console: upload AAB → store listing → submit review (1-3 hari) → staged rollout 1% → 10% → 50% → 100%")
}Output yang Dihasilkan:
=== Build Variants ===
debug: debuggable=true [tanpa R8] → app-debug.apk
release: debuggable=false [R8 aktif] → app-release.aab
=== Signing Config ===
keystore: /secure/release.keystore
alias: my-release-key
password: dari env var $RELEASE_KEY_PASSWORD (jangan hardcode)
=== Release Artifact ===
file: app-release.aab
size: 4823104 bytes (4 MB)
sha256: a3f5...c8b2
mapping: mapping.txt (upload ke Play Console untuk deobfuscate crash)
Play Console: upload AAB → store listing → submit review (1-3 hari) → staged rollout 1% → 10% → 50% → 100%Signing #
Release build wajib di-sign dengan keystore. signingConfigs { create("release") { storeFile = file("release.keystore"); storePassword = "..."; keyAlias = "..."; keyPassword = "..." } }. Jangan commit keystore ke repo.
ProGuard/R8 Mapping #
Build release menghasilkan mapping.txt untuk de-obfuscate crash stack trace. Upload ke Play Console → Android Vitals. Tanpa mapping, stack trace crash di production tidak terbaca.
Play Console Upload #
Login ke https://play.google.com/console . Buat aplikasi baru. Upload AAB di Production → Create new release. Lengkapi store listing (deskripsi, screenshot, icon). Submit untuk review (biasanya 1-3 hari).
Staged Rollout #
Play Console mendukung staged rollout: mulai dari 1% pengguna, naikkan bertahap. Pantau crash rate, ANR rate, dan rating. Rollback bila ada masalah. Production release bertahap mengurangi risiko massal.
Staged Rollout Strategy #
Play Console memungkinkan kita merilis update secara bertahap untuk mengurangi risiko. Mulai dengan 1 persen pengguna selama 24 hingga 48 jam untuk mendeteksi masalah awal. Bila crash rate dan ANR rate stabil di bawah ambang batas baseline, naikkan ke 10 persen, lalu 50 persen, dan akhirnya 100 persen.
Antar setiap tahap, pantau dashboard Android Vitals di Play Console. Metrik utama yang diawasi mencakup crash rate pengguna, ANR rate, dan rating baru. Siapkan ambang batas otomatis dengan notifikasi email: bila crash rate naik di atas 1 persen pengguna aktif harian, hentikan rollout dan evaluasi log crash yang terdeobfuscate melalui mapping file.
Prosedur rollback harus ditulis sebelum rilis. Play Console menyediakan tombol “Rollback” untuk menarik release tertentu dan mengembalikan pengguna ke versi sebelumnya. Rollback bekerja cepat untuk pengguna yang belum menerima update, namun pengguna yang sudah ter-update perlu menghapus update secara manual bila versi baru bermasalah parah.
Untuk fitur besar, pertimbangkan server-side feature flag agar pemutusan fitur tidak bergantung pada rollout aplikasi. Kombinasi staged rollout dan feature flag memberi dua lapisan keamanan: rollout menangani distribusi APK, sedangkan flag menangani aktivasi logika di dalam APK. Bila bug ditemukan, matikan flag dari server tanpa harus menunggu rollback selesai.
Play Console Submission Checklist #
Sebelum menekan tombol submit review, lakukan audit menyeluruh terhadap seluruh komponen yang dijelaskan dalam kebijakan Play Console. Berikut ringkasan item wajib yang perlu diverifikasi:
- Store listing lengkap: judul, deskripsi singkat (80 karakter), deskripsi panjang (4000 karakter), ikon 512x512, fitur grafis 1024x500, dan minimal dua screenshot per peranti.
- Privacy Policy URL yang dapat diakses publik, wajib bila aplikasi meminta izen sensitif atau mengumpulkan data pribadi.
- Content rating melalui kuesioner IARC, menentukan label usia (Everyone, Teen, Mature).
- Target SDK level sesuai persyaratan Play Store terbaru, biasanya SDK terbaru wajib untuk app baru.
- Data safety form yang deklarasikan tipe data yang dikumpulkan, apakah dibagi dengan pihak ketiga, dan praktik enkripsi.
- App signing key, baik diunggah sebagai upload key maupun ditangani oleh Play App Signing.
- AAB hasil
bundleReleaseyang sudah diuji pada setidaknya satu peranti fisik dan satu emulator.
Lengkapi juga halaman test: internal test track untuk pengujian tim, closed track untuk beta tester pilihan, dan open track untuk pengguna awal. Setiap track memiliki dashboard metrik sendiri sehingga masalah bisa terdeteksi sebelum mencapai production track.
Referensi Lanjutan #
- Publish your app — panduan resmi publikasi aplikasi Android: signing, build App Bundle, dan rilis ke Play Console
Penutup #
Dengan memahami release dan publishing, kita siap membangun aplikasi Android yang lebih matang dan siap produksi. Materi terkait di section lain meliputi coroutines, Compose Multiplatform, dan testing — semuanya saling melengkapi untuk pengembangan Android modern.