Android Studio adalah IDE yang bagus, tapi tidak wajib digunakan untuk membuat Android build yang siap rilis ke store. File android/ folder dalam proyek Capacitor berisi Gradle wrapper yang bisa melakukan build dan signing dari terminal mana pun. Ini penting untuk server Linux tanpa display, mesin Windows yang lambat menjalankan Studio, dan untuk CI.
Panduan ini membuat signed AAB hanya dengan command line, lalu menunjukkan varian cloud dengan Capgo Build untuk tim yang tidak ingin menyimpan keystore di laptop.
Prerequisites
- JDK 21 (
java -versioncetak 21). - Android command line SDK dengan
platform-tools,build-toolsdan platform yang sesuai dengan versi Capacitor Anda (API 36 untuk Capacitor 8, API 35 untuk Capacitor 7). Panduan Linux dan Panduan Windows mencakup instalasi. ANDROID_HOMEdiekspor, atauandroid/local.propertiesdengansdk.dir=....- Aplikasi Capacitor dengan
android/yang dibuat olehbunx cap add android.
1) Buat signing keystore
keytool adalah bagian dari JDK di setiap platform:
keytool -genkeypair -v \
-keystore release.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias release
Jawab prompt dan pilih store password serta key password. Simpan file dan kedua password tersebut di password manager atau secret vault Anda sekarang. Jangan pernah commit release.jks.
Aktifkan Play App Signing saat membuat aplikasi di Play Console. Google akan menyimpan final signing key dan keystore Anda akan menjadi upload key, yang bisa di-reset jika hilang.
2) Beri tahu Gradle cara signing
Jauhkan secret dari build.gradle. Buat android/keystore.properties (gitignored):
storeFile=/absolute/path/to/release.jks
storePassword=your-store-password
keyAlias=release
keyPassword=your-key-password
Kemudian referensikan di android/app/build.gradle:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file("keystore.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
signingConfigs {
release {
if (keystorePropertiesFile.exists()) {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
}
}
}
Tambah android/keystore.properties dan *.jks ke .gitignore.
3) Naikkan versi
Google Play menolak upload dengan versionCode pernah dilihat sebelumnya. Edit android/app/build.gradle:
defaultConfig {
versionCode 12
versionName "1.4.0"
}
Tim biasanya mengambil versionCode dari nomor run CI atau jumlah git commit untuk menghindari edit manual.
4) Build AAB dari terminal
bun run build
bunx cap sync android
cd android
./gradlew bundleRelease
Di Windows gunakan .\gradlew.bat bundleRelease. Signed bundle akan ditulis ke android/app/build/outputs/bundle/release/app-release.aab.
Butuh APK untuk instalasi langsung via adb? ./gradlew assembleRelease menghasilkan app-release.apk di bawah outputs/apk/release/. Instal dengan adb install; panduan instalasi adb mencakup kasus-kasus khusus.
5) Verifikasi tanda tangan
$ANDROID_HOME/build-tools/36.0.0/apksigner verify --print-certs app/build/outputs/apk/release/app-release.apk
Untuk AAB, jarsigner -verify -verbose app-release.aab mengonfirmasi tanda tangan dan fingerprint sertifikat. Bandingkan SHA-256 dengan yang ada di Play Console pada bagian App integrity.
6) Upload ke Google Play via command line
Upload manual lewat Play Console bisa dilakukan. Untuk otomatisasi, buat service account di Google Cloud, berikan akses di Play Console pada bagian Users and permissions, lalu download JSON key-nya. Setelah itu, upload menggunakan Google Play Developer API atau tool seperti fastlane supply:
bundle exec fastlane supply --aab android/app/build/outputs/bundle/release/app-release.aab \
--track internal --json_key play-service-account.json --package_name com.example.app
Upload pertama aplikasi baru harus dilakukan manual di Play Console; API hanya menerima build untuk aplikasi yang sudah ada.
7) Alternatif cloud: Capgo Build untuk Android
Semua cara di atas berhasil, tapi menyisakan keystore di setiap mesin yang melakukan build. Capgo Build menyimpan keystore di vault terenkripsi, melakukan build dari android/ proyek yang Anda upload, dan bisa push AAB ke track Play.
Simpan kredensial cukup sekali:
bunx @capgo/cli@latest build credentials save --platform android \
--keystore ./release.jks \
--keystore-alias "release" \
--keystore-key-password "key-password" \
--keystore-store-password "store-password" \
--play-config ./play-service-account.json
Atau biarkan bunx @capgo/cli@latest build init --platform android memandu Anda. Setelah itu, setiap rilis cukup:
bun run build
bunx cap sync android
bunx @capgo/cli@latest build request com.example.app --platform android --build-mode release
Log mengalir ke terminal. Tambahkan --output-upload untuk mendapatkan link download AAB atau APK, dan --ai-analytics agar build yang gagal dijelaskan secara otomatis. Perintah yang sama bisa dijalankan di Windows, Linux, macOS, dan CI. Contoh GitHub Actions ada di Panduan build Android.
Karena Capgo hanya menerima project native yang sudah disiapkan, registry npm privat dan secret build web tetap di lingkungan Anda.
8) Berhenti build ulang untuk perubahan web
Native Build yang ditandatangani diperlukan untuk upgrade plugin, izin, ikon, dan Capacitor. Untuk semua hal di dist/, Capgo Live Updates push web bundle baru langsung ke aplikasi yang terinstal:
bunx @capgo/cli@latest bundle upload --channel production
Ini akan mengurangi sebagian besar proses Gradle setiap minggunya.
Pemecahan Masalah
SDK location not found: setANDROID_HOMEatau buatandroid/local.properties.Keystore was tampered with, or password was incorrect: password store salah, atau file korup karena konversi CRLF di Git. Tandai*.jkssebagai binary di.gitattributesjika memang harus di-versioning, padahal seharusnya tidak.Unsupported class file major version: JDK lebih baru atau lebih lama dari 21.- Play menolak AAB: “signed with a different key”: Play App Signing meminta upload key Anda. Gunakan keystore yang terdaftar di Play Console, atau ajukan reset upload key.
- Build lambat di Windows: exclude
~/.gradledan SDK dari Defender, serta simpan proyek di path lokal yang pendek. - Out of memory di Gradle: add
org.gradle.jvmargs=-Xmx4gkeandroid/gradle.properties.
Ringkasan
Android release Capacitor membutuhkan JDK, SDK, dan Gradle wrapper, bukan Android Studio. Buat keystore dengan keytool, sign melalui keystore.properties, build dengan bundleRelease, dan upload dengan Play API. Kalau Anda ingin keystore tidak lagi tersimpan di laptop dan perintahnya sama di semua OS, Capgo Build yang menangani signing dan upload dari project yang sudah disiapkan.