Veröffentlichung im Google Play Store

Android verlangt, dass alle Apps mit einem Zertifikat digital signiert werden, bevor sie installiert werden können. Um Ihre Android-Anwendung über den Google Play Store zu vertreiben, muss sie mit einem Freigabeschlüssel signiert werden, der dann für alle zukünftigen Updates verwendet werden muss. Seit 2017 ist es für Google Play möglich, die Signierung von Freigaben automatisch zu verwalten, dank der Funktion App Signing by Google Play. Bevor die Binärdatei Ihrer Anwendung jedoch zu Google Play hochgeladen wird, muss sie mit einem Upload-Schlüssel signiert werden. Die Seite Signieren Ihrer Anwendungen in der Android Developers-Dokumentation beschreibt das Thema im Detail. In diesem Leitfaden wird der Prozess kurz beschrieben, und es werden die Schritte aufgeführt, die zum Verpacken des JavaScript-Bündels erforderlich sind.

Generieren eines Upload-Schlüssels#

Sie können einen privaten Signierschlüssel mit keytool erzeugen. Unter Windows muss keytool aus C:\Program Files\Java\jdkx.x.x_x\bin ausgeführt werden.

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Copy

Dieser Befehl fordert Sie zur Eingabe von Passwörtern für den Keystore und den Schlüssel sowie der Distinguished Name-Felder für Ihren Schlüssel auf. Anschließend wird der Keystore als Datei mit dem Namen my-upload-key.keystore.

Der Keystore enthält einen einzigen Schlüssel, der 10000 Tage lang gültig ist. Der Alias ist ein Name, den Sie später beim Signieren Ihrer Anwendung verwenden werden, also merken Sie sich den Alias.

Wenn Sie auf dem Mac nicht sicher sind, wo sich Ihr JDK bin-Ordner befindet, führen Sie den folgenden Befehl aus, um ihn zu finden:

/usr/libexec/java_home

Kopieren

Es wird das Verzeichnis des JDK ausgegeben, das etwa so aussehen wird:

/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home

Kopieren

Navigieren Sie zu diesem Verzeichnis mit dem Befehl cd /your/jdk/path und verwenden Sie den Befehl keytool mit sudo-Berechtigung wie unten gezeigt.

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

Copy

Hinweis: Denken Sie daran, die Keystore-Datei privat zu halten. Für den Fall, dass Sie den Upload-Schlüssel verloren haben oder er kompromittiert wurde, sollten Sie diese Anweisungen befolgen.

Einrichten von Gradle-Variablen#

  1. Platzieren Sie die Datei my-upload-key.keystore unter dem Verzeichnis android/app in Ihrem Projektordner.
  2. Bearbeiten Sie die Datei ~/.gradle/gradle.properties oder android/gradle.properties und fügen Sie Folgendes hinzu (ersetzen Sie ***** durch das richtige Keystore-Passwort, Alias und Schlüsselpasswort),

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Kopieren

Dies werden globale Gradle-Variablen sein, die wir später in unserer Gradle-Konfiguration zum Signieren unserer App verwenden können.

Hinweis zur Sicherheit: Wenn Sie keine Lust haben, Ihre Passwörter im Klartext zu speichern, und Sie macOS verwenden, können Sie Ihre Anmeldedaten auch in der App Keychain Access speichern. Dann können Sie die beiden letzten Zeilen in ~/.gradle/gradle.properties überspringen.

Hinzufügen der Signierungskonfiguration zur Gradle-Konfiguration Ihrer App#

Der letzte Konfigurationsschritt, der durchgeführt werden muss, ist die Einrichtung von Release-Builds, die mit dem Upload-Schlüssel signiert werden. Bearbeiten Sie die Datei android/app/build.gradle in Ihrem Projektordner und fügen Sie die Signing Config hinzu,

android {
defaultConfig { … }
signingConfigs {
release {
if (project.hasProperty(‚MYAPP_UPLOAD_STORE_FILE‘)) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}

Kopieren

Erzeugen des Releases AAB#

Führen Sie folgendes in einem Terminal aus:

cd android
./gradlew bundleRelease

Kopieren

Gradle’s bundleRelease bündelt das gesamte JavaScript, das für die Ausführung Ihrer App benötigt wird, in das AAB (Android App Bundle). Wenn Sie die Art und Weise ändern müssen, wie das JavaScript-Bündel und/oder die zeichenbaren Ressourcen gebündelt werden (z. B. wenn Sie die Standard-Datei-/Ordnernamen oder die allgemeine Struktur des Projekts geändert haben), sehen Sie sich android/app/build.gradle an, um zu sehen, wie Sie es aktualisieren können, um diese Änderungen widerzuspiegeln.

Hinweis: Stellen Sie sicher, dass gradle.properties nicht org.gradle.configureondemand=true enthält, da dies dazu führt, dass das Release-Build die Bündelung von JS und Assets in das App-Binary überspringt.

Das generierte AAB kann unter android/app/build/outputs/bundle/release/app.aab gefunden werden und ist bereit, auf Google Play hochgeladen zu werden.

Damit Google Play das AAB-Format akzeptiert, muss das App Signing by Google Play für Ihre Anwendung in der Google Play Console konfiguriert werden. Wenn Sie eine bestehende App aktualisieren, die App Signing by Google Play nicht verwendet, lesen Sie bitte den Abschnitt zur Migration, um zu erfahren, wie Sie diese Konfigurationsänderung vornehmen können.

Testen des Release-Builds Ihrer App#

Bevor Sie den Release-Build in den Play Store hochladen, sollten Sie ihn gründlich testen. Deinstallieren Sie zunächst alle früheren Versionen der App, die Sie bereits installiert haben. Installieren Sie sie auf dem Gerät mit dem folgenden Befehl im Projektstamm:

npx react-native run-android –variant=release

Copy

Beachten Sie, dass --variant release nur verfügbar ist, wenn Sie die Signierung wie oben beschrieben eingerichtet haben.

Sie können alle laufenden Bundler-Instanzen beenden, da Ihr gesamter Framework- und JavaScript-Code in den APK-Assets gebündelt ist.

Veröffentlichung in anderen Stores#

Standardmäßig enthält die generierte APK den nativen Code für die CPU-Architekturen x86 und ARMv7a. Dies erleichtert die Weitergabe von APKs, die auf fast allen Android-Geräten laufen. Dies hat jedoch den Nachteil, dass auf jedem Gerät etwas ungenutzter nativer Code vorhanden sein wird, was zu unnötig größeren APKs führt.

Sie können eine APK für jede CPU erstellen, indem Sie die folgende Zeile in android/app/build.gradle ändern:

– ndk {
– abiFilters „armeabi-v7a“, „x86“
– }
– def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true

Copy

Laden Sie diese beiden Dateien auf Märkte hoch, die Device-Targeting unterstützen, wie Google Play und Amazon AppStore, und die Benutzer erhalten automatisch die entsprechende APK. Wenn Sie auf andere Märkte hochladen möchten, wie z. B. APKFiles, die nicht mehrere APKs für eine einzelne App unterstützen, ändern Sie die folgende Zeile ebenfalls, um die standardmäßige Universal-APK mit Binärdateien für beide CPUs zu erstellen.

– universalApk false // Wenn wahr, wird auch eine universelle APK erzeugt
+ universalApk true // Wenn wahr, wird auch eine universelle APK erzeugt

Copy

Aktivieren von Proguard, um die Größe der APK zu reduzieren (optional)#

Proguard ist ein Tool, das die Größe der APK leicht reduzieren kann. Dazu werden Teile des React Native Java-Bytecodes (und seiner Abhängigkeiten) entfernt, die Ihre App nicht verwendet.

WICHTIG: Stellen Sie sicher, dass Sie Ihre App gründlich testen, wenn Sie Proguard aktiviert haben. Proguard erfordert oft eine spezifische Konfiguration für jede von Ihnen verwendete native Bibliothek. Siehe app/proguard-rules.pro.

Um Proguard zu aktivieren, bearbeiten Sie android/app/build.gradle:

/**
* Führen Sie Proguard aus, um den Java-Bytecode in Release-Builds zu verkleinern.
*/
def enableProguardInReleaseBuilds = true

Copy

Migration alter Android React Native Apps zur Verwendung von App Signing by Google Play#

Wenn Sie von einer früheren Version von React Native migrieren, ist es wahrscheinlich, dass Ihre App die Funktion App Signing by Google Play nicht verwendet. Wir empfehlen Ihnen, diese Funktion zu aktivieren, um von Vorteilen wie dem automatischen App-Splitting zu profitieren. Um von der alten Art des Signierens zu migrieren, müssen Sie zunächst einen neuen Upload-Schlüssel generieren und dann die Release Signing Config in android/app/build.gradle ersetzen, um den Upload-Schlüssel anstelle des Release-Schlüssels zu verwenden (siehe Abschnitt über das Hinzufügen der Signing Config zu gradle). Sobald das erledigt ist, sollten Sie den Anweisungen auf der Google Play-Hilfe-Website folgen, um Ihren ursprünglichen Freigabeschlüssel an Google Play zu senden.

Standardberechtigungen#

Standardmäßig wird die INTERNET-Berechtigung zu Ihrer Android-App hinzugefügt, da so gut wie alle Apps sie verwenden. Die Berechtigung SYSTEM_ALERT_WINDOW wird Ihrer Android APK im Debug-Modus hinzugefügt, wird aber in der Produktion entfernt.