Zum Hauptinhalt springen
CI/CD

Automatischer Capacitor Android-Build mit GitHub Aktionen

Wie Sie in 5 Minuten einen CI/CD-Pipeline für Ihr Android-Capacitor-App mit fastlane und GitHub Actions einrichten

Martin Donadieu

Martin Donadieu

Content-Marketing-Spezialist

Automatischer Capacitor Android-Build mit GitHub Aktionen

Die Einrichtung von CI/CD für Capacitor-Anwendungen kann komplex und zeitaufwändig sein. Hier ist, was Sie wissen müssen:

Wir empfehlen nun die Verwendung von Capgo-Build mit der Capgo CLI zur Erstellung von nativen Capacitor-Anwendungen. Diese Fastlane-Anleitung wird für Teams aufrechterhalten, die bestehende GitHub-Actions-Pipelines weiterhin unterhalten, aber neue Android-Builds sollten die Capgo CLI verwenden, damit Sie keine Fastlane, Gradle-Runner, Keystores und Upload-Skripte selbst unterhalten müssen.

Voraussetzungen

Bevor Sie beginnen, müssen Sie Folgendes einrichten:

  • Eine GitHub-Konto mit Administratorzugriff
  • Ihre App ist bereits auf dem Google Play Store veröffentlicht und mit der richtigen Signatur versehen
  • Android-Signierungs-Schlüssel und Keystore-Dateien
  • Ein Google Cloud Console-Projekt mit der API-Funktion im Google Play Store aktiviert
  • Dienstkonten mit geeigneten Berechtigungen
  • Verständnis der GitHub Aktionen-Workflows
  • Kenntnisse der Fastlane-Konfiguration
  • Zeit zur Wartung und Fehlersuche im Pipeline

Capgo Build für CI/CD durch Capgo

Vermeiden Sie die Wartung von Fastlane, Gradle-Runner, Keystore und Upload-Script. Capgo Build führt von Ihrem bestehenden CI/CD-Pipeline aus signierte native Android-Builds durch:

  • Wird mit Ihrer Pipeline verwendetAuslösen Sie Capgo Build von GitHub Aktionen, GitLab CI, Jenkins oder lokalen Skripten nach Ihrem Web-Build und npx cap sync.
  • Signieren Sie aus CI-SecretsBehalten Sie Android-Keystores, Schlüsselalias, Passwörter und Play-Console-Dienstkonto-JSON in Ihren eigenen CI-Secrets bei.
  • Keine native Runner-Pflege: Capgo Build stellt gepflegte Android-Buildumgebungen bereit, sodass Sie keine SDK-Images, Gradle-Cache-Probleme oder Fastlane-Linien verwalten müssen.
  • Kunstwerke und Einreichung: Laden Sie signierte Artefakte für QA oder übermitteln Sie Release-Builds über die Capgo CLI.

Preise

  • Capgo-Pläne beginnen bei 12 $/Monat
  • Inklusive OTA-Updates und etwa 15 native Builds pro Monat
  • Zusätzliche Build-Minuten werden nach Minute über Krediten abgerechnet

Einrichten von Capgo Build in CI/CD

Manuelle Einrichtungsanleitung

Hier ist, was Sie tun müssen:

GitHub Actions-Preise

Preis GitHub Aktion

GitHub Aktionen bietet kostenlose Minuten basierend auf Ihrem Repository-Typ:

  • Öffentliche Repositorys: 2.000 Minuten/Monat
  • Private Repositorys: 2.000 Minuten/Monat (Linux-Runner)

Für private Projekte betragen die Kosten etwa 0,008 $/Minute. Ein typischer Build dauert 3-5 Minuten.

Manuelle Setup-Schritte

  1. Erstellen Sie einen Android-Keystore
  2. Konfigurieren Sie ein Google Play Service-Konto
  3. Konfigurieren Sie Fastlane
  4. Konfigurieren Sie GitHub-Geheimnisse
  5. Erstellen Sie eine GitHub-Aktion-Workflow

1. Erstellen Sie einen Android-Keystore

Bevor Sie Ihr Android-App signieren und veröffentlichen können, müssen Sie ein Keystore-Datei erstellen. Dies ist eine einmalige Einrichtung.

Keystore mit keytool generieren

Führen Sie diesen Befehl in Ihrem Terminal aus:

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

Sie werden aufgefordert:

  • Keystore-Passwort: Wählen Sie einen starken Passwort (Sie benötigen dies als KEYSTORE_STORE_PASSWORD)
  • Sicherheitszertifikat-Passwort: Wählen Sie einen starken Passwort (Sie benötigen dies als KEYSTORE_KEY_PASSWORD)
  • Ihr Name, Organisation, usw.: Füllen Sie Ihre Details ein

Wichtige Hinweise

  • Speichern Sie diese Werte sicher:

    • Sicherheitsdatei-Ort (z.B., my-release-key.keystore)
    • Alias für die Sicherheitsdatei (z.B., my-key-alias) - Sie benötigen dies als KEYSTORE_KEY_ALIAS
    • Sicherheitsdateipasswort - Sie benötigen dies als KEYSTORE_STORE_PASSWORD
    • Sicherheitsdateipasswort - Sie benötigen dies als KEYSTORE_KEY_PASSWORD
  • Sichere die Sicherheitsdatei-Datei: Wenn Sie sie verlieren, können Sie Ihre veröffentlichte App nicht aktualisieren

  • Behalten Sie es geheim: Kommitieren Sie die Sicherheitsdatei-Datei nie in Git

  • Speichern Sie es sicher: Halten Sie mehrere Sicherungskopien in sicheren Orten

Alternative: Verwenden Sie eine bestehende Sicherheitsdatei

Wenn Sie Ihre App bereits veröffentlicht haben, müssen Sie denselben Keystore verwenden, den Sie ursprünglich verwendet haben. Sie können ihn finden:

  • Auf Ihrem lokalen Computer, an dem Sie die App zuerst gebaut haben
  • In Ihrem Play-Console → Einstellungen → App-Zertifizierung (wenn Sie Google Play App-Zertifizierung verwenden)

2. Einrichten Sie Google Play Service-Konto

Um GitHub-Aktionen zu ermöglichen, Builds auf Google Play hochzuladen, benötigen Sie ein Dienstkonto.

Schritt 2.1: Erstellen Sie ein Google Cloud-Projekt

  1. Gehe zu Google Cloud Console
  2. Erstellen Sie ein neues Projekt oder wählen Sie eines aus, das bereits existiert
  3. Notieren Sie die Projekt-ID

Schritt 2.2: Aktivieren Sie Google Play-Entwickler API

  1. In Google Cloud Console, gehen Sie zu APIs & DienstleistungenBibliothek
  2. Suchen Sie nach „Google Play Android-Entwickler API“
  3. Klicken Sie Aktivieren

Schritt 2.3: Erstellen Sie einen Dienstkonten

  1. Zum IAM & AdminDienstkonten
  2. Klicken Sie Dienstkonten erstellen
  3. Details eingeben:
    • Name: github-actions-uploader
    • Beschreibung: „Dienstkonten für GitHub Actions zum Hochladen von Builds“
  4. Klicken Sie Erstellen und fortfahren
  5. Rollenzuweisung für den Moment überspringen (klicken Sie Fortfahren, dann Fertig)

Schritt 2.4: Erstellen Sie eine Dienstkonten-Schlüssel

  1. Klicken Sie auf das neu erstellte Dienstkonten
  2. Gehe zu Schlüssel Registerkarte
  3. Klicken Sie Schlüssel hinzufügenNeuen Schlüssel erstellen
  4. Wählen Sie JSON-Format Klicken Sie
  5. Erstellen Ein JSON-Datei wird heruntergeladen -
  6. Speichern Sie dies sicher auf, Sie benötigen es späterSie benötigen es später

Schritt 2.5: Zugriff in Play Console gewähren

  1. Gehe zu Google Play Console
  2. Gehe zu EinrichtungAPI Zugriff
  3. Unter Dienstkonten, klicke Zugriff gewähren für deine Dienstkonto
  4. Auf der App-Berechtigungen Registerkarte, Ihre App hinzufügen
  5. Auf der Konto-Berechtigungen Registerkarte, diese Berechtigungen erteilen:
    • App-Informationen anzeigen und große Berichtsdateien herunterladen (nur Lesen)
    • Erstellen, bearbeiten und Löschen von Entwurfs-Apps
    • Apps auf Test-Tracks freigeben
    • Apps auf Produktions-Tracks, Ausschluss- und andere Tracks freigeben
  6. Klicken Benutzer einladen
  7. Klicken Einladung senden

Schritt 2.6: Überprüfe die JSON-Schlüssel

Das heruntergeladene JSON-Datei sollte wie folgt aussehen:

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

Du wirst dies in der GitHub-Geheimnisse-Einstellungsschritt in Base64 umwandeln.

3. Fastlane einrichten

Erstelle einen Ordner in deinem Projektroot und füge einen mit diesem Inhalt hinzu: fastlane 4. __CAPGO_KEEP_0__-Geheimnisse konfigurieren Fastfile Jetzt, da du deinen Keystore und die Dienstkontoeinstellungen hast, musst du sie sicher in __CAPGO_KEEP_0__ speichern.

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

Schritt 4.1: GitHub-Geheimnisse zugreifen

Gehe zu deinem Repository auf GitHub

Step 4.1: Access GitHub Secrets

  1. Go to your repository on GitHub
  2. Klicken Sie EinstellungenGeheimnisse und VariablenAktionen
  3. Klicken Sie Neuer Repository-Geheimnis

Schritt 4.2: Fügen Sie erforderliche Geheimnisse hinzu

Fügen Sie jedes dieser Geheimnisse einzeln hinzu:

PLAY_CONFIG_JSON

  1. Holen Sie sich das JSON-Datei des Dienstkontos, das Sie in Schritt 2.4 heruntergeladen haben
  2. Konvertieren Sie es in Base64:

On macOS/Linux:

base64 service_account_key.json | pbcopy

Auf Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
  1. Erstelle einen neuen geheimen Schlüssel namens PLAY_CONFIG_JSON und füge den Base64-String ein

ANDROID_KEYSTORE_FILE

  1. Konvertiere deinen Keystore in Base64:

Auf macOS/Linux:

base64 my-release-key.keystore | pbcopy

Auf Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
  1. Erstelle einen neuen geheimen Schlüssel namens ANDROID_KEYSTORE_FILE und füge den Base64-String ein

KEYSTORE_KEY_ALIAS

Erstelle einen neuen geheimen Schlüssel mit dem Alias, den du verwendet hast, wenn du den Keystore generiert hast (z.B. my-key-alias)

KEYSTORE_KEY_PASSWORD

Erstellen Sie ein neues Geheimnis mit der Schlüsselwort, das Sie bei der Erstellung des Keystores festgelegt haben

__CAPGO_KEEP_0__

Erstellen Sie ein neues Geheimnis mit dem Keystore-Passwort, das Sie bei der Erstellung des Keystores festgelegt haben

__CAPGO_KEEP_0__

Erstellen Sie ein neues Geheimnis mit dem Paketnamen Ihrer App (z.B., com.example.app)

Sie finden Ihren Paketnamen in android/app/build.gradle unter applicationId

Schritt 4.3: Überprüfen Sie alle Geheimnisse

Stellen Sie sicher, dass Sie diese 6 Geheimnisse konfiguriert haben:

  • ✅ PLAY_CONFIG_JSON
  • ✅ ANDROID_KEYSTORE_FILE
  • ✅ __CAPGO_KEEP_0__
  • ✅ KEYSTORE_KEY_PASSWORD
  • ✅ KEYSTORE_STORE_PASSWORD
  • ✅ Entwickler-Paketname

5. Erstelle GitHub Actions Workflow

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

Wie es funktioniert

  1. Erstelle einen Git-Tag, um den Workflow auszulösen
  2. GitHub Actions baut Ihr App
  3. Fastlane lädt es in den Google Play Beta-Kanal hoch
  4. Ihre App wird automatisch aktualisiert

Build Time und Kosten

  • Buildzeit: 3-5 Minuten
  • Kosten für private Repos: ~$0.04 pro Build
  • Kostenlos für Open-Source-Projekte

CI/CD-Einrichtungsanleitungen

Alternative CI/CD-Plattformen

Live-Updates & Bereitstellung

Ressourcen

Weitermachen von der automatischen Capacitor Android-Build mit GitHub Aktionen

Wenn Sie verwenden Automatische Capacitor Android-Builds mit GitHub Aktionen um die CI/CD-Automatisierung zu planen, verbinden Sie es mit Capgo CI/CD für den Produktworkflow in Capgo CI/CD, Capgo Native Builds für den Produktworkflow in Capgo Native Builds, Capgo Integrations für den Produktworkflow in Capgo Integrations, CI/CD-Integration für die Implementierungsdetails in CI/CD-Integration, und GitHub Actions-Integration für die Implementierungsdetails in GitHub Actions-Integration.

Live-Updates für Capacitor-Anwendungen

Wenn ein Bug im Web-Schicht lebt, liefern Sie die Reparatur über Capgo anstatt Tage zu warten, bis die App-Store-Zulassung genehmigt ist. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Los geht's

Neuestes aus unserem Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle mobilen App zu erstellen.