Aplikasi yang berjalan dari flutter run adalah build debug yang tidak layak disebarkan kepada pengguna. Topik ini membahas perbedaan tiga mode build, pembangunan APK dan app bundle untuk Android, arsip iOS, dasar penandatanganan Android, serta nomor versi pada pubspec.yaml. Setelah topik ini dibaca, setiap perintah build dapat dipilih secara tepat sesuai saluran distribusinya.
Tiga mode build#
Flutter mengenal tiga mode build yang kegunaannya berbeda. Tabel berikut merangkum ketiganya.
| Mode | Kegunaan | Ciri utama |
|---|---|---|
| debug | pengembangan harian | hot reload, asersi aktif, performa tidak mewakili |
| profile | pengukuran performa | kompilasi AOT dengan alat profiler aktif |
| release | penyebaran kepada pengguna | kompilasi AOT, kode dioptimalkan, asersi dilepas |
Build debug membawa penanda dan layanan debugging tanpa optimasi, sehingga performanya jauh di bawah build rilis dan tidak boleh menjadi acuan penilaian kecepatan. Build release mengompilasi Dart secara AOT (ahead-of-time, dikompilasi penuh sebelum aplikasi disebarkan) dan melepas seluruh asersi. Build profile menggabungkan kompilasi AOT dengan instrumentasi pengukuran, sehingga pengukuran performa dilakukan dengan mode ini, bukan dengan build debug.
Membangun APK untuk Android#
APK (Android Package) adalah berkas pemasangan Android yang dapat disalin ke perangkat dan dipasang langsung. Perintahnya sebagai berikut.
# tidak-dijalankan
# membangun APK rilis
flutter build apk --releaseHasilnya berada di build/app/outputs/flutter-apk/app-release.apk. Tanpa opsi tambahan, satu APK memuat kode mesin untuk semua arsitektur prosesor yang didukung, yang membuat ukurannya lebih besar. Apabila distribusinya melalui tautan unduhan langsung, satu APK per arsitektur mengecilkan unduhan.
# tidak-dijalankan
# membangun satu APK per arsitektur prosesor
flutter build apk --release --split-per-abiPerintah tersebut menghasilkan berkas seperti app-release-arm64-v8a.apk, satu berkas untuk setiap arsitektur. Pemisahan ini disebut per-ABI, dengan ABI (application binary interface) sebagai istilah untuk kelompok arsitektur prosesor.
Membangun app bundle untuk Google Play#
Google Play menerima format AAB (Android App Bundle) yang menyerahkan penyesuaian arsitektur dan sumber daya kepada Play.
# tidak-dijalankan
# membangun app bundle untuk Google Play
flutter build appbundleHasilnya berada di build/app/outputs/bundle/release/app-release.aab. Play menyusun unduhan per perangkat dari bundle tersebut, sehingga pengguna menerima unduhan yang lebih kecil daripada APK universal. Untuk publikasi melalui Play, AAB adalah format yang direkomendasikan, sedangkan APK tetap berguna untuk distribusi di luar Play.
Arsip iOS#
Distribusi iOS dilakukan melalui Xcode dan hanya berjalan pada macOS karena Xcode tidak tersedia di sistem lain. Perintah flutter build ipa membangun arsip aplikasi di build/ios/archive, lalu mengekspornya menjadi berkas .ipa di build/ios/ipa, dengan penandatanganan yang menggunakan sertifikat distribusi dan provisioning profile yang disiapkan pada Xcode. Alternatifnya, arsip dapat dibangun dari Xcode melalui menu Product lalu Archive. Berkas arsip kemudian diunggah ke App Store Connect untuk diperiksa sebelum dirilis kepada pengguna.
Menandatangani aplikasi Android#
Build rilis Android wajib ditandatangani dengan keystore, yaitu berkas biner yang menyimpan kunci penandatanganan. Buat keystore dengan keytool yang disertakan pada JDK, dan simpan di luar direktori proyek.
# tidak-dijalankan
# membuat keystore rilis di luar direktori proyek
keytool -genkey -v -keystore ~/kunci-rilis.jks -keyalg RSA -keysize 2048 -validity 10000 -alias uploadKata sandi dan lokasi keystore kemudian ditulis pada berkas key.properties di dalam direktori android, yang bentuknya sebagai berikut.
storePassword=<kata-sandi-keystore>
keyPassword=<kata-sandi-kunci>
keyAlias=upload
storeFile=<lokasi-berkas-keystore>Konfigurasi build.gradle kemudian membaca berkas tersebut untuk menandatangani build rilis, dan dokumentasi resmi Android memuat langkahnya sampai tuntas. Karena isinya rahasia, berkas key.properties beserta keystore tidak boleh ikut dalam repository. Pastikan .gitignore mencakup keduanya.
Nomor versi pada pubspec.yaml#
Setiap rilis membawa dua nomor yang dikelola pada pubspec.yaml.
name: aplikasi_catatan
version: 1.0.0+1Bagian sebelum tanda tambah adalah nama versi yang dilihat pengguna, sedangkan angka sesudahnya adalah nomor build yang wajib naik pada setiap unggahan. Android menerjemahkannya menjadi versionName dan versionCode, sedangkan iOS menjadi CFBundleShortVersionString dan CFBundleVersion. Kebiasaan yang baik adalah menaikkan nama versi pada rilis fitur dan menaikkan nomor build pada setiap unggahan, karena unggahan dengan nomor build yang sama akan ditolak.
Artefak untuk web#
Perintah flutter build web menghasilkan situs statis pada direktori build/web yang dapat disebarkan ke hosting statis apa pun. Penyebaran web adalah yang paling ringan di antara semuanya karena tidak memerlukan penandatanganan maupun toko aplikasi. Meskipun demikian, fitur yang mengandalkan API khusus platform tetap perlu diperiksa ketersediaannya di web sebelum aplikasi dipublikasikan.
Kesalahan umum#
- Mengirim build debug kepada pengguna. Berkasnya lebih besar, lebih lambat, dan asersinya aktif, sehingga kesan pertama pengguna menjadi buruk.
- Menaikkan nama versi tanpa menaikkan nomor build. Unggahan baru dengan nomor build yang sama ditolak oleh toko aplikasi.
- Menyimpan keystore di dalam repository. Rahasia itu praktis bocor setelah sekali masuk, dan harus dianggap terbaca oleh publik.
- Menandatangani rilis publik dengan keystore debug. Keystore debug digunakan bersama oleh semua proyek pada satu komputer, sehingga tidak mengidentifikasi pemilik aplikasi.
Ringkasan#
- Mode debug untuk pengembangan, profile untuk pengukuran performa, dan release untuk penyebaran dengan kompilasi AOT serta asersi yang dilepas.
flutter build apkmenghasilkan berkas pemasangan Android,flutter build appbundlemenghasilkan AAB untuk Play, danflutter build ipamenghasilkan arsip iOS dari macOS.- Penandatanganan Android menggunakan keystore dan
key.propertiesyang keduanya wajib dijauhkan dari repository. - Nomor versi ditulis pada
pubspec.yamldengan bentuk1.0.0+1, dan nomor build-nya wajib naik pada setiap unggahan.
Referensi#
- Build and release an Android app — Google — Langkah resmi pembangunan APK dan app bundle beserta penandatanganannya.
- Build and release an iOS app — Google — Langkah resmi arsip, penandatanganan, dan pengunggahan iOS.
- Build and release a web app — Google — Panduan resmi build dan penyebaran aplikasi web Flutter.
- Flutter pubspec options — Google — Dokumentasi bidang pubspec, termasuk format bidang version.