Zum Hauptinhalt springen
CI/CD

Automatische Capacitor-Android-Build mit GitHub-Aktionen

Wie Sie eine CI/CD-Pipeline für Ihre Android-Capacitor-App mit fastlane und GitHub-Aktionen in 5 Minuten einrichten können

Martin Donadieu

Martin Donadieu

Inhaltsmarketer

Automatische Capacitor-Android-Build mit GitHub-Aktionen

Die Einrichtung einer CI/CD-Pipeline für Capacitor-Apps 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 für native Capacitor-Bauten. Diese Anleitung zu Fastlane wird für Teams beibehalten, die bestehende GitHub-Actions-Pipelines weiterhin pflegen, aber neue Android-Bauten sollten die Capgo CLI verwenden, damit Sie Fastlane, Gradle-Runner, Keystores und Upload-Skripte nicht selbst pflegen müssen.

Voraussetzungen

Bevor Sie beginnen, müssen Sie Folgendes einrichten:

  • Ein GitHub-Konto mit Administratorzugriff
  • Ihre App ist bereits auf dem Google Play Store veröffentlicht und mit der richtigen Signierung versehen
  • Android-Signierungschlüssel und Keystore-Dateien
  • Ein Google Cloud Console-Projekt mit der API-Funktion für den Google Play Store aktiviert
  • Ein Dienstkonto mit den richtigen Berechtigungen
  • Verständnis der GitHub-Actions-Workflows
  • Kenntnisse in der Fastlane-Konfiguration
  • Zeit, um den Pipeline zu pflegen und zu debuggen

Capgo Build für CI/CD durch Capgo

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

  • Arbeitet mit Ihrer Pipeline: Auslösen Sie Capgo Build von GitHub Actions, GitLab CI, Jenkins oder lokalen Skripten nach Ihrem Web-Build und npx cap sync.
  • Signieren aus CI-Secrets: Halten Sie Android-Keystores, Schlüsselalias, Passwörter und Play-Console-Dienstkontoinformationen in Ihren eigenen CI-Secrets.
  • Keine native Runner-Wartung: Capgo Build bietet gepflegte Android-Buildumgebungen, sodass Sie keine SDK-Images, Gradle-Cache-Probleme oder Fastlane-Linien verwalten müssen.
  • Artikel und Einreichung: Laden Sie signierte Artikel für QA oder einreichen Sie Release-Builds über die Capgo CLI.

Preisgestaltung

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

Capgo Build in CI/CD einrichten

Anleitung zur manuellen Einrichtung

Hier ist, was Sie tun müssen:

GitHub-Actions-Preise

Preis für GitHub-Action

GitHub-Actions bietet kostenlose Minuten auf der Grundlage Ihres Repository-Typs:

  • Ö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 Einrichtungsschritte

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

1. Erstellen Sie einen Android-Keystore

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

Erstellen Sie einen Keystore mit keytool

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 ein starkes Passwort (Sie benötigen dies als KEYSTORE_STORE_PASSWORD)
  • Schlüsselpasswort: Wählen Sie ein starkes Passwort (Sie benötigen dies als KEYSTORE_KEY_PASSWORD)
  • Ihr Name, Organisation, usw.: Füllen Sie Ihre Details

Wichtige Hinweise

  • Sparen Sie diese Werte sicher:

    • Standort des Keystore-Dateis (z.B. my-release-key.keystore)
    • Alias des Schlüssels (z.B. my-key-alias) - Sie benötigen dies als KEYSTORE_KEY_ALIAS
    • Keystore-Passwort - Sie benötigen dies als KEYSTORE_STORE_PASSWORD
    • Schlüsselpassword - Sie benötigen dies als KEYSTORE_KEY_PASSWORD
  • Die Keystore-Datei sichern Sie: Wenn Sie es verlieren, können Sie Ihre veröffentlichte App nicht aktualisieren

  • Es geheim halten: Kommitieren Sie die Keystore-Datei nie in Git

  • Sicher aufbewahren: Halten Sie mehrere Sicherungskopien in sicheren Orten

Alternative: Verwendung eines bestehenden Keystores

Wenn Sie bereits Ihre App 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 zum ersten Mal erstellt haben
  • im Google Play Console → Einstellungen → App-Zertifizierung (wenn Sie Google Play App-Zertifizierung verwenden)

2. Einrichten Sie ein Google Play Service-Konto

Um GitHub Actions 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. Beachten Sie die Projekt-ID

Schritt 2.2: Aktivieren Sie Google Play Developer API

  1. In Google Cloud Console gehen Sie zu APIs & DiensteBibliothek
  2. Suchen Sie nach „Google Play Android Developer API“
  3. Klicken Sie Aktivieren

Schritt 2.3: Erstellen Sie einen Dienstkontoadministratoren

  1. Gehe zu IAM & AdminDienstkontoadministratoren
  2. Klicken Sie Dienstkontoadministrator erstellen
  3. Details eingeben:
    • Name: github-actions-uploader
    • Beschreibung: „Dienstkonto für GitHub-Aktionen zum Hochladen von Builds“
  4. Klicken Sie Erstellen und fortfahren
  5. Überspringen Sie die Rolle zuweisen für jetzt (klicken Sie Fortsetzen, dann Fertig)

Schritt 2.4: Erstellen Sie eine Dienstkontoinvite

  1. Klicken Sie auf die neu erstellte Dienstkontoinvite
  2. Gehe zu Schlüssel Registerkarte
  3. Klicken Sie HinzufügenNeuen Schlüssel erstellen
  4. Wählen Sie JSON-Format Format
  5. Klicken Sie Erstellen
  6. Ein JSON-Datei wird heruntergeladen - Speichern Sie dies sicher, Sie benötigen es späterSchritt 2.5: Zugriff in Play Console gewähren

Gehe zu

  1. Google Play Console Gehe zu
  2. Schritt 2.5: Zugriff in Google Play Console gewähren EinstellungAPI Zugriff
  3. Unter Dienstkonten, klicken Sie Zugriff gewähren für Ihr Dienstkonto
  4. Auf der Anwendungsrechte Registerkarte, fügen Sie Ihrer Anwendung
  5. Auf der Kontorechte Registerkarte, erteilen Sie diese Berechtigungen:
    • Anzeigen von Anwendungsinformationen und herunterladen von großen Berichten (nur Lesen)
    • Erstellen, bearbeiten und Löschen von Entwurfsanwendungen
    • Veröffentlichen von Anwendungen in Testkanälen
    • Veröffentlichen von Anwendungen in der Produktion, Ausschluss und andere Kanäle
  6. Klicken Benutzer einladen
  7. Klicken Einladung senden

Schritt 2.6: Überprüfen Sie die JSON-Schlüssel

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

Sie werden dies in der GitHub-Geheimnisse-Konfigurationsschritt in Base64 umwandeln.

3. Ein Fastlane einrichten

Erstelle ein fastlane Ordner in deinem Projekt-Root und füge ein Fastfile mit diesem Inhalt:

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. GitHub-Geheimnisse konfigurieren

Nachdem Sie Ihr Keystore und Ihr Service-Account-JSON haben, müssen Sie diese sicher in GitHub speichern.

Schritt 4.1: GitHub-Geheimnisse zugreifen

  1. Gehe zu deinem Repository auf GitHub
  2. Klicke EinstellungenGeheimnisse und VariablenAktionen
  3. Klicken Neuer Repository-Schlüssel

Schritt 4.2: Hinzufügen von erforderlichen Geheimnissen

Fügen Sie diese Geheimnisse einzeln hinzu:

PLAY_CONFIG_JSON

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

Auf macOS/Linux:

base64 service_account_key.json | pbcopy

Auf Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
  1. Erstellen Sie einen neuen Schlüssel mit dem Namen PLAY_CONFIG_JSON und fügen Sie die Base64-Zeichenfolge ein

ANDROID_KEYSTORE_FILE

  1. Ihre Keystore in Base64 umwandeln:

Auf macOS/Linux:

base64 my-release-key.keystore | pbcopy

Auf Windows (PowerShell):

[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
  1. Erstellen Sie ein neues Geheimnis mit dem Namen ANDROID_KEYSTORE_FILE und fügen Sie die Base64-Zeichenfolge ein

KEYSTORE_KEY_ALIAS

Erstellen Sie ein neues Geheimnis mit dem Schlüsselalias, den Sie bei der Erstellung der Keystore verwendet haben (z.B. my-key-alias)

KEYSTORE_KEY_PASSWORD

Erstellen Sie ein neues Geheimnis mit dem Schlüsselpasswort, das Sie bei der Erstellung der Keystore gesetzt haben

KEYSTORE_STORE_PASSWORD

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

DEVELOPER_PACKAGE_NAME

Erstellen Sie ein neues Geheimnis mit Ihrem Anwendungs-Paketnamen (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
  • ✅ KEYSTORE_KEY_ALIAS
  • ✅ KEYSTORE_KEY_PASSWORD
  • ✅ KEYSTORE_STORE_PASSWORD
  • ✅ ENTWICKLER_PAKETNAME

5. Erstellen Sie 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. Erstellen Sie ein Git-Tag, um den Workflow auszulösen
  2. GitHub Aktionen bauen Ihr App
  3. Fastlane lädt es in den Google Play Beta-Kanal hoch
  4. Ihre App wird automatisch aktualisiert

Zeit und Kosten für die Erstellung

  • Zeit für die Erstellung: 3-5 Minuten
  • Kosten für private Repositories: ~0,04 $ pro Build
  • Kostenlos für Open-Source-Projekte

CI/CD-Einrichtungsleitfäden

Alternative CI/CD-Plattformen

Live-Updates und -Deployments

Ressourcen

Fortsetzen Sie mit der automatischen Capacitor Android-Build mit GitHub Aktionen

Wenn Sie Automatic __CAPGO_KEEP_0__ Android-Build mit __CAPGO_KEEP_1__ Aktionen verwenden Automatic Capacitor Android build with GitHub actions Ressourcen Capgo Live Updates Dokumentation 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-Apps

Wenn ein Web-Schicht-Bug live ist, versenden Sie die Reparatur über Capgo anstatt Tage für die Genehmigung des App-Store abzuwarten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Menschliche Unterstützung von Martin

Loslegen

Neueste von unserem Blog

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