Produktions-App-Bundle mit EAS bauen
Paketnamen festlegen
Setze in
app.json(oderapp.config.js)android.package, z. B.com.yourcompany.app. Nach dem ersten Upload ist er endgültig.EAS installieren und konfigurieren
Installiere die CLI, melde dich an und erstelle
eas.jsonmit den Befehlen unten. Die erzeugte Datei enthält bereits einproduction-Profil.Bauen
Starte den Produktionsbuild. Das Standard-Produktionsprofil erstellt auf EAS-Servern ein Android App Bundle; mit
--localbaust du stattdessen auf deinem eigenen Rechner.Bundle herunterladen
Lade die
.aabnach dem Build von der Build-Seite auf expo.dev oder über den Link im Terminal herunter.
npm install -g eas-cli
eas login
eas build:configureeas build -p android --profile productionSetze android.buildType im Produktionsprofil nicht auf apk. Ein APK lässt sich nicht bei Google Play einreichen.
Zugangsdaten: EAS verwahrt den Upload-Schlüssel
Beim ersten Android-Build bietet EAS an, einen Keystore zu erzeugen, und speichert ihn auf den Expo-Servern; spätere Builds verwenden ihn wieder. Für Google Play ist dieser Keystore dein Upload-Schlüssel. Beim Hochladen des ersten Bundles wird die Play App-Signatur eingerichtet, und Google verwahrt den App-Signaturschlüssel.
Mit eas credentials siehst du den eingerichteten Keystore, lädst ein Backup herunter oder ersetzt ihn. Bewahre das Backup sicher auf: Du brauchst es, falls du einmal lokal baust oder EAS verlässt.
eas credentials -p androidErzeuge nach dem ersten Upload keinen neuen Keystore. Ein mit einem anderen Upload-Schlüssel signiertes Bundle wird abgelehnt, bis du in der Play Console ein Zurücksetzen des Upload-Schlüssels beantragst.
Versionscode und Ziel-API-Level
Die Play Console lehnt jedes Bundle ab, dessen versionCode schon verwendet wurde. Am einfachsten verwaltet EAS ihn in der Cloud und erhöht ihn bei jedem Produktionsbuild:
{
"cli": { "appVersionSource": "remote" },
"build": {
"production": { "autoIncrement": true }
},
"submit": {
"production": {
"android": { "track": "alpha", "releaseStatus": "draft" }
}
}
}Ist appVersionSource auf remote gesetzt, speichert EAS den Versionscode und ignoriert android.versionCode in deiner App-Konfiguration. Hast du schon Builds von Hand hochgeladen, führe einmal eas build:version:set aus, damit EAS bei deiner letzten Nummer weitermacht.
Seit dem 31. August 2026 müssen neue Apps und Updates Android 16 (API-Level 36) als Ziel haben. Jede Expo-SDK-Version legt das Ziel-SDK selbst fest; die zuverlässige Lösung ist also eine SDK-Version mit Ziel 36. Das Config-Plugin expo-build-properties kann targetSdkVersion überschreiben, aber nur, wenn dein SDK und deine Bibliotheken das unterstützen.
Expo-Fallen
- eas submit landet im internen Test. Standardmäßig schickt
eas submit -p androidden Build in den internen Track, der für die Regel mit 12 Testern nicht zählt. Setze im Submit-Profil wie oben"track": "alpha"(Googles standardmäßiger geschlossener Track) oder lade die heruntergeladene.aabvon Hand in den geschlossenen Track. - Erste Releases nur als Entwurf. Solange die App nie veröffentlicht wurde, nimmt Google über die API nur Entwurfs-Releases an. Behalte
"releaseStatus": "draft"bei und schließe das Rollout in der Play Console ab. - Ein Dienstkonto ist nötig.
eas submitnutzt einen Google-Dienstkontoschlüssel, den du bei EAS unter den Zugangsdaten der App hochlädst. Ohne ihn lädst du manuell hoch. - Entwicklungs-Builds. Ein Build mit
developmentClient: trueerwartet einen Entwicklungsserver. Stell sicher, dass Tester das Produktionsprofil bekommen. - Fehlende Umgebungsvariablen. Werte aus einer von Git ignorierten
.env-Datei werden nicht zu EAS Build hochgeladen. Lege Produktionswerte als EAS-Umgebungsvariablen an, sonst spricht der Release-Build mit dem falschen Backend. - Native Änderungen brauchen einen neuen Build. Berechtigungen, Paketname und Config-Plugins erreichen Tester nur über einen neuen EAS-Build, nicht über ein Over-the-Air-Update.
eas submit -p android --profile productionHerausfinden, warum der Build bei Testern abstürzt
Ein Production-Build verhält sich anders als Expo Go und Development-Builds: Es gibt keinen Dev-Server, das JavaScript ist minifiziert und nur die nativen Module, die du einkompiliert hast, sind vorhanden. Reproduziere, was Tester sehen, bevor du rätst.
Production-Modus lokal starten
npx expo start --no-dev --minifyführt dein JavaScript wie ein Release-Bundle aus und zeigt Fehler, die der Entwicklungsmodus nie auslöst.Native Logs lesen
Schließ das Smartphone per USB an und führe
adb logcataus. Native Logs zeigen oft die Ursache, wenn eine JavaScript-Error-Boundary das Problem nicht abfängt.Play Console prüfen
Abstürze von Testern erscheinen unter Beobachten und verbessern → Android Vitals → Abstürze und ANRs. Auch der Pre-Launch-Bericht, den Google nach einem Upload automatisch erstellt, startet die App auf Testgeräten und listet gefundene Abstürze auf.
JavaScript-Fehler lesbar machen
Mit Sentry lädt EAS Build die Source Maps automatisch hoch, sobald
SENTRY_AUTH_TOKENals sensible EAS-Umgebungsvariable gesetzt ist. Führe nacheas updateden Befehlnpx sentry-expo-upload-sourcemaps distaus, damit auch Updates lesbar sind.
Brauchst du natives Debugging? npx expo prebuild -p android erzeugt den Ordner android, damit du den Debugger von Android Studio anhängen kannst. Lösche ihn danach, damit Expo das Projekt weiter verwaltet.
Play Console kurz: vom geschlossenen Test zur Produktion
Sobald dein Expo-Bundle gebaut und signiert ist, passiert der Rest in der Play Console und funktioniert für jedes Framework gleich. Hier die Checkliste; jedes Menü und jeden Bildschirm erklärt die vollständige Play-Console-Anleitung.
- App-Einrichtung abschließen: im Dashboard Datenschutzerklärung, App-Zugriff, Werbung, Altersfreigabe, Zielgruppe, Datensicherheit und Store-Eintrag.
- Release für den geschlossenen Test erstellen: unter Testen und veröffentlichen → Tests → Geschlossene Tests die Länder deiner Tester wählen, das
.aabhochladen und zur Prüfung senden. - Tester per Google Group hinzufügen: im Tab Tester die Gruppe eintragen und den Opt-in-Link teilen. Er funktioniert, sobald der Track Veröffentlicht zeigt.
- Mindestens 12 Tester 14 Tage ohne Unterbrechung im Opt-in halten. Interne Tests zählen nicht, und wer austritt und wiederkommt, beginnt seine 14 Tage von vorn.
- Während des Tests mindestens ein Update veröffentlichen und notieren, was Tester gefunden und was du geändert hast.
- Produktionszugang beantragen: im Dashboard den Antrag öffnen und die drei Abschnitte zu deinem Test, deiner App und deiner Produktionsreife beantworten. Die Entscheidung trifft Google; niemand kann eine Freigabe garantieren.
Plane Ausfälle ein: Gewinne mehr als 12 Tester, damit ein Abgang deinen Zeitplan nicht verschiebt. Alle Play-Console-Schritte ansehen.
Die vollständige Play-Console-Anleitung
Geschlossener Track, Google Group und Opt-in-Link, die Regel 12 Tester / 14 Tage und der Produktionsantrag, Schritt für Schritt auf einer Seite.
Korrekturen schnell ausliefern: neue Builds und EAS Update
Mit Cloud-Versionierung startest du einfach den Produktionsbuild erneut und lädst ihn hoch oder reichst ihn im geschlossenen Track ein; der Versionscode steigt von selbst.
eas build -p android --profile productionFür reine JavaScript-Korrekturen kann EAS Update ein neues Bundle ohne erneute Store-Einreichung ausliefern. Die Google-Play-Richtlinie zu Geräte- und Netzwerkmissbrauch erlaubt so ein Update für Code, der in einem Interpreter oder einer virtuellen Maschine läuft, etwa JavaScript; nativen Code herunterzuladen erlaubt sie nicht. Nutze Updates für echte Korrekturen und bleib im Rahmen dessen, was der geprüfte Build tut.
eas update --channel production --message "Fix checkout crash" --environment production- Channels.
eas update:configuresetzt einenchannelin den Build-Profilenpreviewundproduction. Ein Build erhält nur Updates, die in seinem Channel veröffentlicht werden. Ab SDK 55 ist--environmentPflicht. - Runtime-Version. Ein Update erreicht nur Builds mit derselben Runtime-Version. Die Richtlinie
fingerprintändert sie bei jeder Änderung, die die native Runtime betrifft, sodass inkompatible Updates sehr unwahrscheinlich sind. - Neustarts. Release-Builds laden ein Update im Hintergrund und wenden es nach einem Neustart der App an. Bitte Tester, die App zu schließen und wieder zu öffnen, notfalls zweimal.
- Native Änderungen brauchen einen Build. Neue Berechtigungen, Config-Plugins oder native Bibliotheken erreichen Tester nur über einen neuen Production-Build im geschlossenen Track, der zugleich ein sichtbares Release in der Play Console hinterlässt.
Häufige Fragen
Sollen Tester Expo Go verwenden?
Nein. Tester installieren deine App über den Opt-in-Link aus Google Play, also einen Production-Build von EAS im geschlossenen Track. Expo Go und Development-Builds sind für dich, nicht für deine 12 Tester.
Kann ich zuerst einen Build auf mein eigenes Smartphone bringen?
Ja. Ergänze in einem Preview-Profil unter android den Eintrag "buildType": "apk" und führe eas build -p android --profile preview aus. Ein .aab lässt sich nicht direkt installieren; es ist nur für Google Play.
Welche Runtime-Version-Richtlinie soll ich wählen?
appVersion ist einfach, aber wenn du nativen Code änderst, ohne die App-Version zu erhöhen, passen Builds und Updates nicht mehr zusammen. fingerprint folgt nativen Änderungen automatisch, kostet dafür mehr Builds und passt meist gut zu einem kurzen geschlossenen Test.
Was, wenn ein Update die App kaputt macht?
Ruft ein Update nativen Code auf, den der Build nicht hat, kann expo-updates den Fehler erkennen und zum vorherigen funktionierenden Update zurückkehren. Du kannst auch das letzte stabile Update erneut über das fehlerhafte veröffentlichen.
Quellen
Die technischen Details wurden mit der offiziellen Dokumentation unten abgeglichen. Menüs und Standardwerte ändern sich zwischen Versionen; im Zweifel gilt die offizielle Seite.
- Expo: Submit to the Google Play Store
- Expo: App version management
- Expo: eas.json reference
- Expo: Managed credentials
- Android Developers: Target API level requirements
- Expo: EAS Update introduction
- Expo: Runtime versions and updates
- Expo: Debugging runtime issues
- Expo: Build APKs for Android emulators and devices
- Play Policy: Device and Network Abuse
- Play Console Help: Pre-launch reports
- Play Console Help: App testing requirements for new personal developer accounts
- Play Console Help: Set up an open, closed, or internal test
- Play Console Help: Deobfuscate or symbolicate crash stack traces
Neu bei der Regel mit 12 Testern?
Der allgemeine Leitfaden erklärt Googles Anforderung, wie eine TestBunny-Kampagne Tag für Tag abläuft und was wir garantieren können und was nicht.
Allgemeinen Leitfaden lesen