Langsung ke konten utama

Build Android Release Tanpa Android Studio di Linux, Windows, dan CI

Buat signed Android AAB untuk aplikasi Capacitor hanya lewat command line: keytool keystore, Gradle dari terminal, Play Console service account, dan alternatif cloud Capgo Build yang menjaga keystore tetap aman dari laptop.

Build Android Release Tanpa Android Studio di Linux, Windows, dan CI

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 -version cetak 21).
  • Android command line SDK dengan platform-tools, build-tools dan 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_HOME diekspor, atau android/local.properties dengan sdk.dir=....
  • Aplikasi Capacitor dengan android/ yang dibuat oleh bunx 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: set ANDROID_HOME atau buat android/local.properties.
  • Keystore was tampered with, or password was incorrect: password store salah, atau file korup karena konversi CRLF di Git. Tandai *.jks sebagai binary di .gitattributes jika 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 ~/.gradle dan SDK dari Defender, serta simpan proyek di path lokal yang pendek.
  • Out of memory di Gradle: add org.gradle.jvmargs=-Xmx4g ke android/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.

Live updates untuk aplikasi Capacitor

Saat bug web-layer sudah live, kirim perbaikannya lewat Capgo alih-alih menunggu berhari-hari untuk persetujuan app store. Pengguna mendapat update di background, sementara perubahan native tetap mengikuti jalur review normal.

Terbaru dari Blog kami

Capgo memberikan insight terbaik yang Anda butuhkan untuk membuat aplikasi mobile yang benar-benar profesional.