Lebih lanjut ke konten utama

Automatic Capacitor Android build with GitHub actions

Cara mengatur alur CI/CD untuk aplikasi Android Capacitor Anda menggunakan fastlane dan Aksi GitHub dalam waktu 5 menit

Martin Donadieu

Martin Donadieu

Pengembang Konten

Automatic Capacitor Android build with GitHub actions

Mengatur CI/CD untuk aplikasi Capacitor dapat rumit dan memakan waktu. Berikut adalah hal-hal yang perlu Anda ketahui:

Sekarang kami merekomendasikan menggunakan Pembangunan Capgo dengan Capgo CLI untuk pembangunan Capacitor asli. Petunjuk Panduan Fastlane ini disimpan untuk tim yang menjaga pipeline GitHub yang sudah ada, tetapi pembangunan Android baru harus menggunakan Capgo CLI sehingga Anda tidak perlu menjaga Fastlane, pengguna Gradle, kunci, dan skrip unggah sendiri.

Prasyarat

Sebelum memulai, Anda perlu mengatur:

  • Akun GitHub dengan akses admin
  • Aplikasi Anda sudah dipublikasikan di Google Play Store dengan tanda tangan yang tepat
  • Kunci dan file keystore Android
  • Project Google Cloud Console dengan API Play Store diaktifkan
  • Akun layanan dengan hak akses yang tepat
  • Pengertian tentang GitHub Actions workflows
  • Pengenalan konfigurasi Fastlane
  • Waktu untuk menjaga dan memperbaiki pipeline

Capgo Build untuk CI/CD oleh Capgo

Mengabaikan perawatan Fastlane, Gradle runner, keystore, dan skrip unggah. Capgo Build Melakukan build native Android yang ditandatangani secara otomatis dari pipeline CI/CD yang sudah ada:

  • Berfungsi dengan pipeline Anda: Aktifkan Capgo Build dari GitHub Actions, GitLab CI, Jenkins, atau skrip lokal setelah build web Anda dan npx cap sync.
  • Tanda tangan dari rahasia CI: Simpan keystore Android, alias kunci, kata sandi, dan JSON akun layanan Play Console di rahasia CI Anda sendiri.
  • Mengabaikan perawatan runner native: Capgo Build menyediakan lingkungan build Android yang terjaga, sehingga Anda tidak perlu mengelola SDK gambar, masalah cache Gradle, atau jalur Fastlane.
  • Artikel dan pengiriman: Unduh artikel yang ditandatangani untuk QA atau kirimkan build rilis melalui Capgo CLI.

Paket Harga

  • Capgo rencana mulai dari $12/bulan
  • Mengandung pembaruan OTA dan sekitar 15 bangun native per bulan
  • Menit tambahan pembangunan dikenakan berdasarkan menit melalui kredit

Pengaturan Capgo Bangun dalam CI/CD

Panduan Pengaturan Tangan

Berikut ini yang perlu Anda lakukan:

Paket Harga GitHub Aksi

Harga GitHub Aksi

Paket Harga GitHub Aksi menawarkan menit gratis berdasarkan jenis repositori Anda:

  • Repositori publik: 2.000 menit/bulan
  • Repositori pribadi: 2.000 menit/bulan (pengguna Linux)

Untuk proyek pribadi, biaya sekitar $0,008/menit. Pembangunan biasanya memakan waktu 3-5 menit.

Langkah-Langkah Konfigurasi Manual

  1. Buat Keystore Android
  2. Konfigurasi Akun Layanan Google Play
  3. Konfigurasi Fastlane
  4. Konfigurasi Rahasia GitHub
  5. Buat Alur Kerja GitHub

1. Buat Keystore Android

Sebelum Anda bisa menandatangani dan menerbitkan aplikasi Android Anda, Anda harus membuat file keystore. Ini adalah langkah satu kali.

Generate Keystore dengan keytool

Jalankan perintah ini di terminal Anda:

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Akan Anda diminta untuk:

  • Sandi Keystore: Pilih kata sandi yang kuat (anda akan membutuhkannya sebagai KEYSTORE_STORE_PASSWORD)
  • Sandi Kunci: Pilih kata sandi yang kuat (anda akan membutuhkannya sebagai KEYSTORE_KEY_PASSWORD)
  • Nama Anda, organisasi, dll.: Isi detail Anda

Pesan Penting

  • Simpan nilai-nilai ini dengan aman:

    • Lokasi file Keystore (misalnya, my-release-key.keystore)
    • Alias Kunci (misalnya, my-key-alias) - Anda akan membutuhkannya sebagai KEYSTORE_KEY_ALIAS
    • Sandi Keystore - Anda akan membutuhkannya sebagai KEYSTORE_STORE_PASSWORD
    • Sandi kunci - Anda akan membutuhkannya sebagai KEYSTORE_KEY_PASSWORD
  • Backup file keystore: Jika Anda kehilangan, Anda tidak dapat memperbarui aplikasi yang telah dipublikasikan

  • Hindari rahasia: Tidak pernah komit file keystore ke git

  • Simpan dengan aman: Simpan beberapa backup di lokasi yang aman

Alternatif: Gunakan Keystore yang Ada

Jika Anda telah memublikasikan aplikasi, Anda harus menggunakan keystore yang sama yang digunakan awalnya. Anda dapat menemukannya:

  • Pada mesin lokal Anda di mana Anda pertama kali membangun aplikasi
  • Pada Console Play → Pengaturan → Penandatanganan Aplikasi (jika menggunakan Penandatanganan Aplikasi Google Play)

2. Atur Akun Layanan Google Play

To memungkinkan GitHub Actions untuk mengunggah build ke Google Play, Anda memerlukan akun layanan.

Langkah 2.1: Buat Project Google Cloud

  1. Pergi ke Google Cloud Console
  2. Buat proyek baru atau pilih salah satu yang sudah ada
  3. Perhatikan ID proyek

Langkah 2.2: Aktifkan Pengembang Google Play API

  1. Pada Google Cloud Console, pergi ke APIs & ServicesLibrary
  2. Cari “Pengembang Android Google Play API”
  3. Klik Aktifkan

Langkah 2.3: Buat Akun Layanan

  1. Pergi ke IAM & AdminAkun Layanan
  2. Klik Buat Akun Layanan
  3. Masukkan detail:
    • Nama: github-actions-uploader
    • Deskripsi: “Akun layanan untuk GitHub Aksi untuk mengunggah build”
  4. Klik Buat dan Lanjutkan
  5. Skip pengaturan peran untuk sekarang (klik Teruskan, kemudian Done)

Langkah 2.4: Buat Kunci Akun Layanan

  1. Klik pada akun layanan yang baru saja dibuat
  2. Pergi ke Tab Kunci Klik
  3. Tambah Kunci Buat kunci baruprotectedTokens
  4. Pilih Format JSON format
  5. Klik Buat
  6. Sebuah file JSON akan diunduh - Simpan hal ini dengan amanKamu akan membutuhkannya nanti

Langkah 2.5: Berikan Akses di Play Console

  1. Pergi ke Google Play Console
  2. Pergi ke KonfigurasiAPI akses
  3. Di bawah Akun layanan, klik Berikan akses untuk akun layanan Anda
  4. Pada tab Otorisasi aplikasi Tambahkan aplikasi Anda
  5. Pada tab Otorisasi akun tab, berikan izin ini:
    • Pandang informasi aplikasi dan download laporan bulk (hanya baca)
    • Buat, edit, dan hapus aplikasi draft
    • Rilis aplikasi ke jalur uji coba
    • Rilis aplikasi ke produksi, kecuali, dan jalur lainnya
  6. Klik Undang pengguna
  7. Klik Kirim undangan

Langkah 2.6: Verifikasi Kunci JSON

File JSON yang diunduh harus terlihat seperti ini:

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "...",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
  "client_email": "github-actions-uploader@your-project-id.iam.gserviceaccount.com",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."
}

Anda akan mengonversi ini ke base64 di langkah pengaturan rahasia GitHub.

3. Atur Fastlane

Buat sebuah fastlane folder di root proyek Anda dan tambahkan sebuah Fastfile dengan konten ini:

default_platform(:android)

KEYSTORE_KEY_ALIAS = ENV["KEYSTORE_KEY_ALIAS"]
KEYSTORE_KEY_PASSWORD = ENV["KEYSTORE_KEY_PASSWORD"]
KEYSTORE_STORE_PASSWORD = ENV["KEYSTORE_STORE_PASSWORD"]

platform :android do
    desc "Deploy a beta version to the Google Play"
    private_lane :verify_changelog_exists do |version_code: |
      changelog_path = "android/metadata/en-US/changelogs/#{version_code}.txt"
      UI.user_error!("Missing changelog file at #{changelog_path}") unless File.exist?(changelog_path)
      UI.message("Changelog exists for version code #{version_code}")
    end

    private_lane :verify_upload_to_staging do |version_name: |
      UI.message "Skipping staging verification step"
    end
    
    lane :beta do
        keystore_path = "#{Dir.tmpdir}/build_keystore.keystore"
        File.write(keystore_path, Base64.decode64(ENV['ANDROID_KEYSTORE_FILE']))
        json_key_data = Base64.decode64(ENV['PLAY_CONFIG_JSON'])
        
        # Get previous build number and increment
        previous_build_number = google_play_track_version_codes(
            package_name: ENV['DEVELOPER_PACKAGE_NAME'],
            track: "internal",
            json_key_data: json_key_data,
        )[0]
        current_build_number = previous_build_number + 1
        sh("export NEW_BUILD_NUMBER=#{current_build_number}")
        
        # Build the app
        gradle(
          task: "clean bundleRelease",
          project_dir: 'android/',
          print_command: false,
          properties: {
            "android.injected.signing.store.file" => "#{keystore_path}",
            "android.injected.signing.store.password" => "#{KEYSTORE_STORE_PASSWORD}",
            "android.injected.signing.key.alias" => "#{KEYSTORE_KEY_ALIAS}",
            "android.injected.signing.key.password" => "#{KEYSTORE_KEY_PASSWORD}",
            'versionCode' => current_build_number
          })
        
        # Upload to Play Store
        upload_to_play_store(
            package_name: ENV['DEVELOPER_PACKAGE_NAME'],
            json_key_data: json_key_data,
            track: 'internal',
            release_status: 'completed',
            skip_upload_metadata: true,
            skip_upload_changelogs: true,
            skip_upload_images: true,
            skip_upload_screenshots: true,
        )
    end
end

4. Konfigurasi Rahasia GitHub

Sekarang Anda telah memiliki keystore dan JSON akun layanan, Anda perlu menyimpannya secara aman di GitHub.

Langkah 4.1: Akses Rahasia GitHub

  1. Pergi ke repositori Anda di GitHub
  2. Klik PengaturanRahasia dan variabelAksi
  3. Klik Repository rahasia baru

Langkah 4.2: Tambahkan Rahasia yang Diperlukan

Tambahkan rahasia satu per satu:

PLAY_CONFIG_JSON

  1. Ambil file JSON akun layanan yang Anda download pada Langkah 2.4
  2. Konversi ke base64:

Pada macOS/Linux:

base64 service_account_key.json | pbcopy

Pada Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
  1. Buat rahasia baru bernama PLAY_CONFIG_JSON dan tempelkan string base64

ANDROID_KEYSTORE_FILE

  1. Konversi keystore Anda ke base64:

Pada macOS/Linux:

base64 my-release-key.keystore | pbcopy

Pada Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
  1. Buat rahasia baru dengan nama ANDROID_KEYSTORE_FILE dan tempelkan string base64 Anda

ALIAS_KUNCI_KEystore

Buat rahasia baru dengan kunci alias yang Anda gunakan ketika menghasilkan keystore (misalnya, my-key-alias)

KUNCI_PASSWORD_KEystore

Buat rahasia baru dengan kata sandi kunci yang Anda tetapkan ketika menghasilkan keystore

KUNCI_PASSWORD_GUDANG

Buat rahasia baru dengan kata sandi gudang keystore yang Anda tetapkan ketika menghasilkan keystore

NAMA_PACKAGE_PENGEMBANG

Membuat rahasia baru dengan nama paket aplikasi Anda (misalnya, com.example.app)

Anda dapat menemukan nama paket Anda di android/app/build.gradle bawah applicationId

Langkah 4.3: Verifikasi Semua Rahasia

Pastikan Anda telah mengonfigurasi 6 rahasia ini:

  • ✅ PLAY_CONFIG_JSON
  • ✅ ANDROID_KEYSTORE_FILE
  • ✅ KEYSTORE_KEY_ALIAS
  • ✅ KEYSTORE_KEY_PASSWORD
  • ✅ KEYSTORE_STORE_PASSWORD
  • ✅ NAMA_PAKET_PENGEMBANG

Membuat GitHub Workflow Aksi

Membuat .github/workflows/build-upload-android.yml:

name: Build and Deploy Android App

on:
  push:
    tags:
      - '*'

jobs:
  build_android:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      
      - name: Setup Node.js
        uses: actions/setup-node@v6
        with:
          node-version: 24
          cache: npm
          
      - name: Install dependencies
        run: npm ci
        
      - name: Cache Gradle
        uses: actions/cache@v5
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
            
      - name: Build app
        run: npm run build
        
      - name: Sync Capacitor
        run: npx cap sync
        
      - name: Setup Java
        uses: actions/setup-node@v5
        with:
            distribution: 'zulu'
            java-version: '17'
            
      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.0'
          bundler-cache: true
          
      - name: Run Fastlane
        uses: maierj/fastlane-action@v3.1.0
        env:
          PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}
          ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
          DEVELOPER_PACKAGE_NAME: ${{ secrets.DEVELOPER_PACKAGE_NAME }}
          KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
          KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
          KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
        with:
          lane: android beta
          
      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: android-release
          path: ./android/app/build/outputs/bundle/release/app-release.aab
          retention-days: 10

Berikut Cara Kerjanya

  1. Membuat sebuah tag Git untuk mengaktifkan alur kerja
  2. GitHub Aksi membangun aplikasi Anda
  3. Fastlane mengunggahnya ke saluran Google Play beta
  4. Aplikasi Anda secara otomatis diperbarui

Waktu dan Biaya Pembangunan

  • Waktu pembangunan: 3-5 menit
  • Biaya untuk repositori pribadi: sekitar $0,04 per pembangunan
  • Gratis untuk proyek sumber terbuka

Panduan Pengaturan CI/CD

Alternatif Platform CI/CD

Pembaruan Hidup & Pengembangan

Sumber Daya

Teruskan dari Pembaruan Otomatis Android Capacitor dengan aksi GitHub

Jika Anda menggunakan Pembaruan Otomatis Android Capacitor dengan aksi GitHub untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo CI/CD untuk alur produk di Capgo CI/CD, Capgo Pembangunan Nativ untuk alur produk di Capgo Pembangunan Nativ, Capgo Integrasi for the product workflow in Capgo Integrations, untuk alur produk di __CAPGO_KEEP_0__ Integrasi, Integrasi CI/CD GitHub Actions Integration for the implementation detail in GitHub Actions Integration.

Update Hidup untuk Aplikasi Capacitor

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Dukungan Manusia dari Martin

Mulai Sekarang

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk menciptakan aplikasi mobile yang benar-benar profesional.