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#
- Einrichten von Gradle-Variablen#
- Hinzufügen der Signierungskonfiguration zur Gradle-Konfiguration Ihrer App#
- Erzeugen des Releases AAB#
- Testen des Release-Builds Ihrer App#
- Veröffentlichung in anderen Stores#
- Aktivieren von Proguard, um die Größe der APK zu reduzieren (optional)#
- Migration alter Android React Native Apps zur Verwendung von App Signing by Google Play#
- Standardberechtigungen#
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.
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:
Kopieren
Es wird das Verzeichnis des JDK ausgegeben, das etwa so aussehen wird:
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.
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#
- Platzieren Sie die Datei
my-upload-key.keystore
unter dem Verzeichnisandroid/app
in Ihrem Projektordner. - Bearbeiten Sie die Datei
~/.gradle/gradle.properties
oderandroid/gradle.properties
und fügen Sie Folgendes hinzu (ersetzen Sie*****
durch das richtige Keystore-Passwort, Alias und Schlüsselpasswort),
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,
Kopieren
Erzeugen des Releases AAB#
Führen Sie folgendes in einem Terminal aus:
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
nichtorg.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:
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:
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.
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
:
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.