Zum Hauptinhalt springen

Capacitor Entwicklung unter Linux: Der komplette Setup-Guide

Richte einen vollständigen Capacitor Workflow auf Ubuntu, Fedora oder Arch ein: Node oder Bun, JDK, Android SDK, Emulator mit KVM, USB-Geräte mit udev-Regeln und iOS-Builds ohne Mac via Capgo Build.

Capacitor Entwicklung unter Linux: Der komplette Setup-Guide

Linux ist eine hervorragende Plattform für Capacitor Entwicklung. Der Web-Layer besteht nur aus Node-Tooling, Android-Tools laufen nativ, und der Linux-Emulator mit KVM ist oft schneller als derselbe Emulator unter Windows. Die einzige Lücke ist iOS: Xcode gibt es nur auf macOS, daher benötigt man für diesen Teil einen Cloud-Build-Service.

Dieser Guide führt durch ein komplettes Linux-Setup, getestet auf Ubuntu 24.04, Fedora 42 und Arch. Er endet mit einem iOS-Build von Linux aus unter Verwendung von Capgo Build, sodass du beide Stores beliefern kannst, ohne einen Mac zu besitzen.

Was auf Linux funktioniert und was nicht

Aufgabe Linux
Webentwicklung, Vite, Framework-Tooling Ja
cap add android, cap sync, Gradle-Builds Ja
Android-Emulator Ja, mit KVM
Physisches Android-Gerät via USB Ja, via udev-Regeln
Chrome DevTools Remote Debugging Ja
cap add ios, cap sync ios (generieren und kopieren) Ja, mit Hinweis auf übersprungene CocoaPods
iOS kompilieren, signieren und archivieren Nein, benötigt macOS. Nutze Capgo Build
iOS-Simulator Nein
Safari Web Inspector für iOS WebView Nein

Alles in den „Nein“-Zeilen wird in die Cloud oder auf ein echtes iPhone via TestFlight ausgelagert. Das erklären wir am Ende.

1) Node oder Bun installieren

CLI von Capacitor benötigt Node 20 oder neuer. Bun dient als Runtime und Package Manager und ist bei Installationen schneller.

# Bun (recommended)
curl -fsSL https://bun.sh/install | bash

# Or Node via your package manager
# Ubuntu / Debian
sudo apt install -y nodejs npm
# Fedora
sudo dnf install -y nodejs
# Arch
sudo pacman -S nodejs npm

Versionen prüfen:

bun --version
node --version

2) JDK installieren

Capacitor 7 und 8 benötigen JDK 21. Distributionspakete sind okay.

# Ubuntu / Debian
sudo apt install -y openjdk-21-jdk

# Fedora
sudo dnf install -y java-21-openjdk-devel

# Arch
sudo pacman -S jdk21-openjdk

Setzen Sie JAVA_HOME in ~/.bashrc oder ~/.zshrc. Der Pfad hängt von der Distribution ab:

# Ubuntu / Debian
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
# Fedora
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
# Arch
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk

Falls mehrere JDKs installiert sind, wählt Gradle das, JAVA_HOME auf das gezeigt wird. Eine falsche Version zeigt sich als Unsupported class file major version während cap run android.

3) Installiere das Android SDK

Du hast zwei Optionen. Android Studio bietet dir GUI-Tools. Die Command-Line-Tools allein sind schlanker und reichen zum Build aus.

Option A: Android Studio

Lade das Linux-Tarball von der Android-Studio-Website herunter und entpacke es:

sudo tar -xzf android-studio-*.tar.gz -C /opt
/opt/android-studio/bin/studio.sh

Beim ersten Start installiert der Setup-Wizard das SDK in ~/Android/Sdk.

Capacitors cap open android muss wissen, wo Studio liegt:

export CAPACITOR_ANDROID_STUDIO_PATH=/opt/android-studio/bin/studio.sh

Option B: Nur Command-Line-Tools

mkdir -p ~/Android/Sdk/cmdline-tools
cd ~/Android/Sdk/cmdline-tools
# Download "Command line tools only" for Linux from the Android developer site, then:
unzip commandlinetools-linux-*.zip
mv cmdline-tools latest

Füge das SDK deinem Shell-Profil hinzu:

export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator

Installiere, was Capacitor benötigt, und akzeptiere die Lizenzen:

sdkmanager "platform-tools" "platforms;android-36" "build-tools;36.0.0" "emulator"
sdkmanager --licenses

Passe die Plattform-Version an die compileSdkVersion in deinem generierten android/variables.gradle. Capacitor 8 nutzt 36; Capacitor 7 nutzt 35.

4) KVM für den Emulator aktivieren

Ohne KVM ist der Emulator unbrauchbar. Prüfe, ob deine CPU Virtualisierung unterstützt:

egrep -c '(vmx|svm)' /proc/cpuinfo

Ein Ergebnis über 0 bedeutet, dass es unterstützt wird. Installiere KVM und gib deinem User Zugriff:

# Ubuntu / Debian
sudo apt install -y qemu-kvm
# Fedora
sudo dnf install -y qemu-kvm
# Arch
sudo pacman -S qemu-base

sudo usermod -aG kvm $USER

Abmelden und neu anmelden. Erstelle und starte ein Device:

sdkmanager "system-images;android-36;google_apis;x86_64"
avdmanager create avd -n pixel8 -k "system-images;android-36;google_apis;x86_64" -d pixel_8
emulator -avd pixel8

Falls der Emulator Fehlermeldungen bezüglich /dev/kvm Berechtigungen anzeigt, wurde die Gruppenänderung noch nicht übernommen. Starte neu.

5) USB-Zugriff für physische Geräte

Linux erlaubt regulären Usern standardmäßig keinen Zugriff auf USB-Geräte. Füge eine udev-Regel hinzu:

sudo tee /etc/udev/rules.d/51-android.rules > /dev/null <<'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="2a70", MODE="0666", GROUP="plugdev"
EOF
sudo udevadm control --reload-rules
sudo usermod -aG plugdev $USER

Die oben genannten Vendor-IDs decken Google, Samsung und OnePlus ab. Finde deine eigene mit lsusb falls dein Phone nicht gelistet ist. Aktiviere USB-Debugging am Phone, schließe es an, bestätige den Fingerprint-Prompt, dann:

adb devices

6) Das Capacitor Projekt erstellen

bun create vite@latest my-app
cd my-app
bun install
bun add @capacitor/core @capacitor/android @capacitor/ios
bun add -d @capacitor/cli
bunx cap init
bun run build
bunx cap add android
bunx cap add ios

cap add ios unter Linux wird eine Warnung ausgegeben, dass CocoaPods nicht verfügbar ist. Das ist normal. Der ios/ Ordner wird trotzdem erstellt und ist das, was Capgo Build später kompiliert.

Auf dem Emulator oder Gerät ausführen:

bunx cap run android

WebView in Chrome debuggen unter chrome://inspect.

7) Release-Builds unter Linux

Android Release-Builds erfolgen komplett lokal. Erstelle einen Keystore mit dem JDKs keytool:

keytool -genkeypair -v -keystore release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias release

Dann builden:

cd android
./gradlew bundleRelease

Die AAB landet in android/app/build/outputs/bundle/release/. Wenn du Signing-Keys lieber nicht auf Laptops speichern möchtest, Capgo Build für Android speichert den Keystore einmal und baut in der Cloud mit demselben CLI, den du für iOS nutzt.

8) iOS von Linux mit Capgo Build

Das ist der Schritt, den Linux allein nicht schafft. Der Workflow:

  1. Erstelle deine Web-Assets und synchronisiere sie in ios/.
  2. Speichere deine iOS-Signing-Credentials einmalig.
  3. Fordere einen Cloud Build an. Capgo kompiliert, signiert und kann zu TestFlight hochladen.
bun run build
bunx cap sync ios

bunx @capgo/cli@latest login
bunx @capgo/cli@latest build init --platform ios
bunx @capgo/cli@latest build request com.example.app --platform ios --build-mode release

build init führt dich durch die Credentials. Unter Linux erstellst du den App Store Connect API Key manuell im Apple-Portal; der iOS-Build-Anleitung zeigt jeden Klick. Für das Distribution Certificate brauchst du Keychain Access nie: Generiere den CSR und .p12 with OpenSSL as described in iOS-Zertifikate und Provisioning Profiles erklärt, oder nutze den iOS-Zertifikatsgenerator.

Logs streamen live in dein Terminal. Der komplette Linux-zu-TestFlight-Flow ist ausführlich beschrieben in Eine iOS-App unter Linux bauen mit Capacitor und Capgo Build.

9) Native Rebuilds mit Live Updates überspringen

Sobald die Native Shells in den Stores sind, bestehen die meisten täglichen Änderungen aus JavaScript, HTML und CSS. Die lassen sich in Sekunden von Linux aus deployen mit Capgo Live Updates:

bunx @capgo/cli@latest init
bun run build
bunx @capgo/cli@latest bundle upload --channel production

Nutze Native Builds nur für Plugin-Änderungen, Berechtigungsänderungen und Capacitor-Upgrades.

Häufige Linux-Probleme

  • SDK location not found: ANDROID_HOME ist in der Shell, die Gradle ausführt, nicht exportiert. Füge es deinem Profil hinzu und öffne ein neues Terminal, oder erstelle android/local.properties mit sdk.dir=/home/you/Android/Sdk.
  • Unsupported class file major version: falsches JDK. Verweise JAVA_HOME auf JDK 21.
  • Emulator: schwarzer Bildschirm oder sehr langsam: KVM ist nicht aktiv. Prüfe ls -l /dev/kvm und deine Gruppenmitgliedschaft.
  • adb devices zeigt no permissions: udev-Regel fehlt oder wurde nicht neu geladen. Nach dem Neuladen Gerät aus- und wieder einstecken.
  • Gradle-Daemon läuft ohne Speicher aus: hinzufügen org.gradle.jvmargs=-Xmx4g zu android/gradle.properties.
  • Wayland und Android Studio Glitches: starte Studio mit _JAVA_AWT_WM_NONREPARENTING=1 wenn Windows leer bleiben.

Zusammenfassung

Linux verarbeitet den kompletten Capacitor Loop für Android und den Web-Layer nativ und oft schneller als andere Desktops. Für iOS generiere das Projekt lokal, synchronisiere deine Assets und überlasse den macOS-Teil dem Capgo Build. Kombiniere das mit Live Updates, und das einzige Mal, dass du an Xcode denkst, ist, wenn Apple die minimale SDK ändert.

Live-Updates für Capacitor-Apps

Wenn ein Bug im Web-Layer live ist, liefere den Fix über Capgo aus, statt Tage auf die App-Store-Freigabe zu warten. Nutzer bekommen das Update im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Neues aus unserem Blog

Capgo gibt dir die besten Insights, um eine wirklich professionelle Mobile App zu erstellen.