Ich habe meine App erstellt und kann sie auf meinem lokalen Simulator (und auch auf meinem Android Gerät innerhalb desselben Netzwerks durch Ändern des Debug-Servers) ausführen.
Ich möchte jedoch eine Apk erstellen, die ich an jemanden ohne Zugriff auf den Entwicklungsserver senden kann, und ich möchte, dass dieser die Anwendung testen kann.
Ich sehe, dass es einen Abschnitt Verwenden des Offline-Bundles unter iOS in der Dokumentation gibt. Aber ich konnte nicht herausfinden, wie ich dasselbe für Android erreichen kann. Ist das möglich? Wenn das so ist, wie?
UPDATE: Bei der Beantwortung dieser Frage ( Native reagieren Android JS-Bundle konnte nicht geladen werden ) Das Offline-Bundle kann vom Entwicklungsserver heruntergeladen werden. Wenn ich das Bundle jedoch vom Entwicklungsserver erhalte, können die Bilddateien nicht geladen werden.
Nach der Antwort von Aditya Singh konnte das generierte (nicht signierte) Apk nicht auf meinem Telefon installiert werden. Ich musste eine signierte apk mit den anweisungen erstellen hier .
Folgendes hat für mich funktioniert:
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
Platzieren Sie die Datei my-release-key.keystore
im Verzeichnis Android/app
in Ihrem Projektordner. Bearbeiten Sie dann die Datei ~/.gradle/gradle.properties
und fügen Sie Folgendes hinzu (ersetzen Sie **** durch das richtige Keystore-Passwort, Alias und Schlüsselpasswort)
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****
Wenn Sie MacOS verwenden, können Sie Ihr Kennwort mithilfe der Anweisungen hier im Schlüsselbund speichern, anstatt es im Klartext zu speichern.
Bearbeiten Sie dann app/build.gradle und stellen Sie sicher, dass Folgendes vorhanden ist (die Abschnitte mit signingConfigs signingConfig müssen möglicherweise hinzugefügt werden):
...
Android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...
Dann den Befehl cd Android && ./gradlew assembleRelease
ausführen,
Für Windows 'cd Android' und führen Sie dann den Befehl gradlew assembleRelease
aus und suchen Sie Ihren signierten apk unter Android/app/build/outputs/apk/app-release.apk
Du musst einen Schlüssel erstellen, um das Apk zu signieren. Verwenden Sie unten, um Ihren Schlüssel zu erstellen:
keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000
Verwenden Sie ein Passwort, wenn Sie dazu aufgefordert werden
Sobald der Schlüssel generiert ist, verwenden Sie ihn, um den installierbaren Build zu generieren:
react-native bundle --platform Android --dev false --entry-file index.Android.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res/
Generieren Sie den Build mit gradle
cd Android && ./gradlew assembleRelease
Laden Sie die APK auf Ihr Handy hoch. Das -r
-Flag ersetzt die vorhandene App (falls vorhanden)
adb install -r ./app/build/outputs/apk/app-release-unsigned.apk
Eine detailliertere Beschreibung finden Sie hier: https://facebook.github.io/react-native/docs/signed-apk-Android.html
UPDATE: Basierend auf Kommentaren von @shashuec und @Fallen
wenn du eine Fehlermeldung bekommst
ENOENT: Keine solche Datei oder Verzeichnis, öffne 'Android/app/src/main/assets/index.Android.bundle'
führen Sie mkdir Android/app/src/main/assets aus
Führen Sie diesen Befehl aus:
react-native run-Android --variant=release
Beachten Sie, dass
--variant=release
nur verfügbar ist, wenn Sie das Signieren mitcd Android && ./gradlew assembleRelease
eingerichtet haben.
Verwenden Sie für diesen Vorgang einfach Android studio. Es ist einfach einfacher. Führen Sie jedoch zuerst diesen Befehl in Ihrem reaktiven nativen App-Verzeichnis aus:
react-native bundle --platform Android --dev false --entry-file index.Android.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res/
Verwenden Sie dann Android Studio, um den Ordner "Android" in Ihrem nativen App-Verzeichnis zu öffnen. Sie werden aufgefordert, gradle und einige andere Dinge zu aktualisieren. Gehe zu build-> Generate signed APK und folge den Anweisungen von dort. Es ist wirklich einfach.
für React Native 0.49 und höher
sie sollten zum Projektverzeichnis auf dem Terminal gehen und diesen Befehl ausführen
1 - mkdir Android/app/src/main/assets
2 - react-native bundle --platform Android --dev false --entry-file index.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res
wenn unter 0,49
1 - mkdir Android/app/src/main/assets
2 - react-native bundle --platform Android --dev false --entry-file index.Android.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res
Verwenden Sie dann Android Studio, um den Ordner "Android" in Ihrem nativen App-Verzeichnis zu öffnen. Sie werden aufgefordert, gradle und einige andere Dinge zu aktualisieren. Gehe zu build-> Generate signed APK und folge den Anweisungen von dort. Das okey.
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
bekommen.Ich habe versucht, mit der Methode von @ Aditya eine nicht signierte APK-Datei zu generieren und diese zu installieren. Als ich sie jedoch auf meinem Android Tablet installierte, gab es den Fehler Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
.
Ich stelle mir das vor, weil die APK-Datei nicht signiert war und das Tablet damit nicht zufrieden war. Nach dem Generieren der React Native-Bundle-Datei konnte ich über Android Studio wie gewohnt eine signierte APK-Datei generieren.
Unsere App ist übrigens eine voll funktionsfähige Android App, die bereits im Play Store vorhanden ist, und wir fügen ihr lediglich React Native hinzu mundgerechte Stücke, weil es großartig ist.
Um es zusammenzufassen, hier sind meine Schritte:
1) React Natives Bundle generieren:
react-native bundle --platform Android --dev false --entry-file index.Android.js --bundle-output Android/<your-package-name>/src/main/assets/index.Android.bundle --assets-dest Android/<your-package-name>/src/main/res/
2) Generiere eine signierte APK-Datei aus Android Studio.
) Installiere signierte APK-Datei auf ein USB-Gerät:
adb -d install -r <path_to_signed_apk>
Das -d
-Flag weist adb
an, auf dem angeschlossenen USB-Gerät zu installieren, falls auch ein Emulator ausgeführt wird. Wenn Sie auf einem beliebigen Emulator installieren möchten, löschen Sie das Flag -d
.
4) Gewinn!
Ich habe eine andere Lösung: - Erstellen eines Signaturschlüssels Mit keytool können Sie einen privaten Signaturschlüssel erstellen. Unter Windows muss keytool unter C:\Programme\Java\jdkx.x.x_x\bin ausgeführt werden.
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
Platzieren Sie die Datei my-release-key.keystore im Verzeichnis Android/app in Ihrem Projektordner.
Bearbeiten Sie die Datei Android/app/build.gradle in Ihrem Projektordner und fügen Sie die Signaturkonfiguration hinzu.
Android {
....
signingConfigs {
release {
storeFile file('my-release-key.keystore')
storePassword 'yourpassword'
keyAlias 'my-key-alias'
keyPassword 'yourpassword'
}
}}}
buildTypes {release {signingConfig signingConfigs.release}}
und Renn
gradlew assembleRelease
Auf diese Weise erhalten Sie zwei Dateien unter Android\app\build\output\apk app-release.apk und app-release-unsigned.apk. Installieren Sie jetzt app-release.apk auf Ihrem Android Gerät.
Gehen Sie in das Projektverzeichnis und führen Sie den Befehl aus:
cd Android && ./gradlew assembleRelease
Für neueste native Versionen reagieren, um das Projekt zu bündeln
Android
react-native bundle --platform Android --dev false --entry-file index.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res/
iOS
react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios
Wenn Sie einen Fehler mit index.Android.js erhalten. Dies liegt daran, dass Sie die neue React-native Version verwenden (ich verwende 0.55.4). Ersetzen Sie einfach "index.Android.js" durch "index.js".
react-native bundle --platform Android --dev false --entry-file index.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res/
Versuchen Sie es unten, es wird eine app-debug.apk in Ihrem root/Android/app/build/output/apk/debug-Ordner erzeugen
react-native bundle --platform Android --dev false --entry-file index.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/src/main/res
gehen Sie dann zum Ordner Android und führen Sie ihn aus
./gradlew assembleDebug
Hoffentlich hilft es neuen Anfängern
Offizielles Dokument hier
Wenn Sie keinen Keystore haben, den Sie vor dem Befehl verwenden, überspringen Sie den Vorgang
Generieren eines Signaturschlüssels/einer Keystore-Datei Mit keytool können Sie einen privaten Signaturschlüssel generieren. Unter Windows muss keytool unter C:\Programme\Java\jdkx.x.x_x\bin ausgeführt werden.
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
sie erhalten eine Datei wie my-release-key.keystore
Gradle-Variablen einrichten Legen Sie die Datei my-release-key.keystore im Verzeichnis Android/app in Ihrem Projektordner ab. Bearbeiten Sie die Datei Android/gradle.properties und fügen Sie Folgendes hinzu (ersetzen Sie ***** durch das richtige Keystore-Passwort, Alias und Schlüsselpasswort). EnableAapt2 set false ist eine Problemumgehung, da Android gradle Version 3.0 - Problem
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****
Android.enableAapt2=false
dann füge diese App hinzu/buid.gradle (app)
unterhalb der Standardkonfiguration
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
Release vom Typ und Inside Build {}
signingConfig signingConfigs.release
dann einfach diesen Befehl in Android Studio Terminal ausführen Unter Befehle werden vor allem Antworten automatisiert
wenn Windows
cd Android
gradlew assembleRelease
wenn Linux/Mac
$ cd Android
$ ./gradlew assembleRelease
wenn Sie einen Fehler haben, löschen Sie den gesamten Build-Ordner und führen Sie den Befehl aus
gradlew clean
als nochmal
gradlew assembleRelease
Die Verwendung von Android Studio zum Generieren signierter APKs für das Android Projekt von react ist ebenfalls eine gute und einfache Option. Öffnen Sie das Android Projekt von react in Android Studio und generiere Tastendruck und signierte apk.
Wenn jemand ohne Playstore-Schlüssel bauen möchte, wäre dieser Befehl sehr hilfreich.
# react-native run-Android --variant=release
Nach Abschluss des Builds finden Sie das apk in der Release-Build-Datei.
Informationen zum Generieren signierter APK finden Sie in der offiziellen Dokumentation der reaktionsfähigen Benutzer