Saltati al contenuto principale
CI/CD

Automatic Capacitor Android build with GitHub actions

Come configurare una pipeline CI/CD per il tuo app Android Capacitor utilizzando fastlane e azioni GitHub in 5 minuti

Crediti dell'articolo

Martin Donadieu

Autore

Valeria

Recensore

Jordan

Curatore

Automatic Capacitor Android build with GitHub actions

Configurare la CI/CD per le Capacitor app può essere complesso e richiede molto tempo. Ecco cosa devi sapere:

Ora raccomandiamo di utilizzare Capgo Build con il Capgo CLI per le costruzioni native Capacitor. Questa guida Fastlane è mantenuta per i team che mantengono pipeline di azioni GitHub esistenti, ma nuove costruzioni Android dovrebbero utilizzare il Capgo CLI in modo da non dover mantenere Fastlane, eseguitori di Gradle, chiavi di firma e script di caricamento da soli.

Requisiti

Prima di iniziare, avrai bisogno di configurare:

  • Un account GitHub con accesso amministrativo
  • La tua app già pubblicata su Google Play Store con firma corretta
  • Chiave di firma Android e file di keystore
  • Progetto di Google Cloud Console con API di Play Store abilitato
  • Account di servizio con autorizzazioni adeguate
  • Capacità di comprendere GitHub Flussi di lavoro di Actions
  • Conoscenza della configurazione di Fastlane
  • Tempo per mantenere e debuggare il flusso di lavoro

Capgo Build per CI/CD da Capgo

Evitare la manutenzione di Fastlane, Gradle runner, keystore e upload-script. Capgo Build Esegue costruzioni native Android firmate direttamente dal tuo flusso di lavoro CI/CD esistente:

  • Lavora con il tuo flusso di lavoro: Trascina Capgo Build da GitHub Actions, GitLab CI, Jenkins o script locali dopo la costruzione web e npx cap sync.
  • Autenticazione da segreti di CI: Mantieni le chiavi Android, gli alias delle chiavi, le password e il JSON del servizio account di Play Console nei tuoi segreti di CI.
  • No mantenimento del runner nativo: Il Capgo Build fornisce ambienti di costruzione Android mantenuti, quindi non dovete gestire SDK immagini, problemi di cache Gradle o percorsi Fastlane.
  • Articoli e sottoscrizione: Scaricate gli articoli firmati per la QA o sottoponete i rilasci attraverso il Capgo CLI.

Prezzi

  • Capgo plans start at $12/month
  • I piani __CAPGO_KEEP_0__ iniziano da 12 dollari al mese
  • Includono aggiornamenti OTA e circa 15 costruzioni native al mese

Set up Capgo Build in CI/CD

Configura il __CAPGO_KEEP_0__ Build in CI/CD

Guida di configurazione manuale

GitHub Actions Pricing

Prezzo GitHub Action

GitHub Actions offre minuti gratuiti in base al tipo del tuo repository:

  • Repository pubblici: 2.000 minuti/mese
  • Repository privati: 2.000 minuti/mese (esecutori Linux)

Per i progetti privati, i costi sono di circa $0,008/minuto. Una costruzione tipica richiede 3-5 minuti.

Passaggi di configurazione manuale

  1. Creare Android Keystore
  2. Configurare l'account di servizio Google Play
  3. Configurare Fastlane
  4. Configurare GitHub secrets
  5. Creare GitHub Actions workflow

1. Creare Android Keystore

Prima di poter firmare e pubblicare la tua app Android, devi creare un file keystore. Questo è un setup di una sola volta.

Genera Keystore con keytool

Esegui questo comando nel tuo terminale:

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

Ti verrà chiesto:

  • Password del keystore: Scegli una password forte (avrai bisogno di questa come KEYSTORE_STORE_PASSWORD)
  • Password della chiave: Scegli una password forte (avrai bisogno di questa come KEYSTORE_KEY_PASSWORD)
  • Nome, organizzazione, ecc.: Inserisci i tuoi dati

Note importanti

  • Salva questi valori in modo sicuro:

    • Posizione del file Keystore (ad esempio, my-release-key.keystore)
    • Alias della chiave (ad esempio, my-key-alias) - avrai bisogno di questo come KEYSTORE_KEY_ALIAS
    • Password del Keystore - avrai bisogno di questo come KEYSTORE_STORE_PASSWORD
    • Password della chiave - avrai bisogno di questo come KEYSTORE_KEY_PASSWORD
  • Backup del file Keystore: Se lo perdi, non potrai aggiornare l'app pubblicata

  • Tienilo segreto: Mai commetti il file Keystore a git

  • Conservalo in modo sicuro: Conserva più backup in luoghi sicuri

Alternativa: Utilizza Esistente Keystore

If hai già pubblicato il tuo app, devi utilizzare lo stesso keystore che hai utilizzato inizialmente. Puoi trovarlo:

  • In macchina locale dove hai costruito l'app per la prima volta
  • In Console di Gioco → Impostazioni → Firma dell'app (se utilizzando la firma dell'app di Google Play)

2. Configura il Servizio di Gioco di Google

Per consentire agli GitHub Azioni di caricare le build su Google Play, hai bisogno di un account di servizio.

Passo 2.1: Crea Progetto di Google Cloud

  1. Vai a Console di Google Cloud
  2. Crea un nuovo progetto o seleziona uno esistente
  3. Nota l'ID del progetto

Passo 2.2: Abilita il API dello Sviluppatore di Google Play

  1. In Console di Google Cloud, vai a Servizi APILibreria
  2. Cerca “Google Play Android Developer API”
  3. Clicca Abilita

Passo 2.3: Crea account di servizio

  1. Vai a IAM & AdminAccount di servizio
  2. Clicca Crea account di servizio
  3. Inserisci i dettagli:
    • Nome: github-actions-uploader
    • Descrizione: “Account di servizio per GitHub azioni per l'upload dei build”
  4. Clicca Creare e Continua
  5. Saltare l'assegnazione del ruolo per ora (clicca Continua, quindi Fatto)

Passo 2.4: Crea Chiave di Account di Servizio

  1. Clicca sul nuovo account di servizio
  2. Vai a Chiavi scheda
  3. Clicca Aggiungi chiaveCrea una nuova chiave
  4. Scegli formato JSON Clicca
  5. Crea Scaricherai un file JSON -
  6. salva questo in modo sicuro ne avrai bisogno in seguitoClicca

Step 2.5: Concedi accesso in Console di Gioco

  1. Vai a Console di Gioco di Google
  2. Vai a ConfigurazioneAPI access
  3. __CAPGO_KEEP_0__ accesso SottoConti di servizio , clicca Concedi accesso
  4. per il tuo account di servizio di costruzione nativa di Google Play Console. Su Autorizzazioni dell'app tab, aggiungi la tua app
  5. Nella sezione Autorizzazioni dell'account tab, concedi queste autorizzazioni:
    • Visualizzare informazioni sull'app e scaricare rapporti in blocco (lettura solo)
    • Creare, modificare e cancellare app in bozza
    • Pubblica app in tracce di testing
    • Pubblica app in produzione, escludi e altre tracce
  6. Clicca Invita utente
  7. Clicca Invia invito

Passo 2.6: Verifica la chiave JSON

Il file JSON scaricato dovrebbe avere questo aspetto:

{
  "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": "..."
}

Convertirai questo in base64 nel passo di configurazione dei segreti GitHub.

3. Imposta Fastlane

Crea una fastlane cartella nella radice del tuo progetto e aggiungi un Fastfile con il seguente contenuto:

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. Configura i segreti GitHub

Ora che hai il tuo keystore e il file JSON del servizio account, devi memorizzarli in modo sicuro in GitHub.

Passo 4.1: Accesso ai segreti GitHub

  1. Vai al tuo repository su GitHub
  2. Clicca ImpostazioniSegreti e variabiliAzioni
  3. Clicca Crea un nuovo segreto di repository

Passo 4.2: Aggiungi i segreti richiesti

Aggiungi ogni segreto uno per uno:

PLAY_CONFIG_JSON

  1. Prendi il file JSON del servizio account che hai scaricato nel Passo 2.4
  2. Convertilo in base64:

Sui sistemi macOS/Linux:

base64 service_account_key.json | pbcopy

On Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
  1. Crea un nuovo segreto denominato PLAY_CONFIG_JSON Incolla la stringa base64:

ANDROID_KEYSTORE_FILE

  1. Converti il tuo keystore in base64:

On macOS/Linux:

base64 my-release-key.keystore | pbcopy

On Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
  1. Crea un nuovo segreto denominato ANDROID_KEYSTORE_FILE Incolla la stringa base64:

KEYSTORE_KEY_ALIAS

Crea un nuovo segreto con la chiave alias che hai utilizzato quando hai generato il keystore (ad esempio, my-key-alias)

KEYSTORE_KEY_PASSWORD

Creare un nuovo segreto con la chiave password impostata quando si genera la chiave di archiviazione

KEYSTORE_STORE_PASSWORD

Creare un nuovo segreto con la password della chiave di archiviazione impostata quando si genera la chiave di archiviazione

DEVELOPER_PACKAGE_NAME

Creare un nuovo segreto con il nome del pacchetto della tua app (ad esempio, com.example.app)

Puoi trovare il nome del pacchetto nella sezione android/app/build.gradle sotto applicationId

Passo 4.3: Verifica Tutti i Segreti

Assicurati di avere configurati questi 6 segreti:

  • ✅ PLAY_CONFIG_JSON
  • ✅ ANDROID_KEYSTORE_FILE
  • ✅ KEYSTORE_KEY_ALIAS
  • ✅ CHIAVE_DI_CRIPTAZIONE_DEL_KEYSTORE
  • ✅ CHIAVE_DI_CRIPTAZIONE_DEL_STORE
  • ✅ NOME_DEL_PACKAGE_DEVELOTTORE

5. Crea GitHub Flussi di lavoro di Azioni

Create .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

Come Funziona

  1. Creare
  2. GitHub Actions builds your app
  3. Creare un tag Git per attivare il flusso di lavoro
  4. __CAPGO_KEEP_0__ Azioni costruisce il tuo'app

Fastlane lo carica sul canale beta di Google Play

  • La tua app viene aggiornata automaticamente
  • Costo per repository privati: ~$0,04 per build
  • Gratuito per progetti open-source

Guida alla configurazione CI/CD

Alternative piattaforme CI/CD

Aggiornamenti in tempo reale & distribuzione

Risorse

Keep going from Automatic Capacitor Android build with GitHub actions

If sei stai utilizzando Automatic Capacitor build Android con GitHub azioni per pianificare l'automazione CI/CD, connettilo con Capgo CI/CD per il flusso di lavoro del prodotto in Capgo CI/CD, Capgo Build nativi per il flusso di lavoro del prodotto in Capgo Build nativi, Capgo Integrazioni per il flusso di lavoro del prodotto in Capgo Integrazioni, Integrazione CI/CD per il dettaglio di implementazione in Integrazione CI/CD, e GitHub Integrazione azioni per la dettagliata implementazione in GitHub Azioni di integrazione.

Aggiornamenti in Tempo Reale per le app Capacitor

Quando un bug nel layer web è attivo, invia la correzione attraverso Capgo invece di attendere giorni per l'approvazione della store. Gli utenti ricevono l'aggiornamento in background mentre le modifiche native rimangono sulla normale via di revisione.

Supporto umano da parte di Martin

Inizia subito

Ultimi articoli dal nostro Blog

Capgo vi dà le migliori informazioni che avete bisogno per creare un'app mobile veramente professionale.