Da ich neu in React-Native bin, lassen Sie es mich wissen, wenn in Schritten etwas nicht stimmt.
Ich habe eine reaktionsfähige native Android-App mit dem Befehl gemäß Dokumentation erstellt
reagieren native Android
Während der Ausführung auf dem Gerät wurde der folgende Befehl verwendet
React-Native Run-Android
Das gibt mir die Ausgabe von 2 apk-Dateien in meinem Projektordner / android / app / build / output / apk
Wenn ich jetzt diese apk nach der Installation installiere, frage ich nach einem Entwicklungsserver, der eine Verbindung herstellt, um die JS zu bündeln. Aber meine Anforderung ist, dass der Benutzer nicht mit dem Entwicklungsserver zu kämpfen hat, sondern nur die apk installieren muss und alles erledigt ist.
Ich habe einige Fragen zum Stackoverflow durchlaufen, bin aber nicht hilfreich, um eine nicht signierte Apk zu erstellen, für die kein Entwicklungsserver erforderlich ist.
Könnt ihr mir helfen, den Weg zu finden, wie man apk baut und nicht signiert, um native zu reagieren?
quelle
Antworten:
Sie müssen das Bundle für einen Debug-Build manuell erstellen.
Bundle-Debug-Build:
#React-Native 0.59 react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res #React-Native 0.49.0+ react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug #React-Native 0-0.49.0 react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
So erstellen Sie die APKs nach dem Bündeln:
$ cd android #Create debug build: $ ./gradlew assembleDebug #Create release build: $ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`
PS Ein anderer Ansatz könnte darin bestehen, Gradle-Skripte zu ändern.
quelle
--assets-dest ./android/app/src/main/res/
Bitte befolgen Sie diese Schritte.
Bündeln Sie Ihre js:
Wenn Sie index.android.js im Projektstamm haben, führen Sie es aus
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
Wenn Sie index.js im Projektstamm haben, führen Sie es aus
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
Debug apk erstellen:
cd android/ ./gradlew assembleDebug
Dann finden Sie Ihre apk hier:
cd app/build/outputs/apk/
quelle
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
Neuestes Update
In Ihrem Stammprojektverzeichnis
Stellen Sie sicher, dass Sie bereits das Verzeichnis android / app / src / main / assets / haben. Wenn Sie kein Verzeichnis erstellen, erstellen Sie anschließend eine neue Datei und speichern Sie unter
index.android.bundle
und legen Sie Ihre Datei wie folgt ab: android / app / src / main / assets / index.android .bündelnDanach führen Sie dies aus
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/ cd android && ./gradlew assembleDebug
Dann können Sie
apk
in app / build / output / apk / debug / app-debug.apk gelangenquelle
index.android.bundle
wird , ist wirklich wichtig, um den Entwicklungsserver nicht im Host zu verwenden.Führen Sie bei mir im Projektverzeichnis die folgenden Befehle aus.
Für die Reaktion auf eine native alte Version (Sie sehen index.android.js im Stammverzeichnis):
mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../
Für die Reaktion auf eine native neue Version (Sie sehen nur index.js im Stammverzeichnis):
mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../
Die apk-Datei wird generiert unter:
quelle
$ mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew assembleDebug
--entry-file index.android.js
dies--entry-file index.js
für neuere Projekte ersetzt werden muss, die sichindex.js
nichtindex.android.js
im Stammverzeichnis ihres Projektverzeichnisses befinden.Nachdem Sie der ersten Antwort gefolgt sind , können Sie Ihre App mit ausführen
react-native run-android --variant=debug
Und Ihre App wird ohne den Packager ausgeführt
quelle
Ab reaktionsnativ 0,57 funktioniert keine der zuvor bereitgestellten Antworten mehr, da sich die Verzeichnisse, in denen gradle erwartet, das Bundle und die Assets zu finden, geändert haben.
Einfacher Weg ohne reaktionsnatives Bundle
Der einfachste Weg, einen Debug-Build zu erstellen, besteht darin, den
react-native bundle
Befehl überhaupt nicht zu verwenden, sondern einfach Ihreapp/build.gradle
Datei zu ändern .Fügen Sie innerhalb der
project.ext.react
Karte in derapp/build.gradle
Datei denbundleInDebug: true
Eintrag hinzu. Wenn Sie möchten, dass es sich nicht um einen--dev
Build handelt (keine Warnungen und minimiertes Bundle), sollten Sie dendevDisabledInDebug: true
Eintrag auch derselben Karte hinzufügen .Mit reaktionsnativem Bundle
Wenn Sie aus irgendeinem Grund den
react-native bundle
Befehl zum Erstellen des Bundles und dann./gradlew assembleDebug
zum Erstellen der APK mit dem Bundle und den Assets verwenden müssen oder möchten, müssen Sie sicherstellen, dass das Bundle und die Assets in den richtigen Pfaden platziert werden, wo gradle dies kann finde sie.Ab reaktionsnativ 0,57 sind diese Pfade
android/app/build/generated/assets/react/debug/index.android.js
für das Bündelund
android/app/build/generated/res/react/debug
für die Vermögenswerte. Die vollständigen Befehle zum manuellen Bündeln und Erstellen der APK mit dem Bundle und den Assets lauten also:react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/index.android.bundle --assets-dest ./android/app/build/res/react/debug
und dann
./gradlew assembleDebug
Bundle- und Assets-Pfad
Beachten Sie, dass sich die Pfade, in denen gradle nach dem Bundle und den Assets sucht, möglicherweise ändern. Um herauszufinden, wo sich diese Pfade befinden, sehen Sie sich die
react.gradle
Datei in Ihremnode_modules/react-native
Verzeichnis an. Die Zeilen beginnen mitdef jsBundleDir =
unddef resourcesDir =
geben die Verzeichnisse an, in denen gradle nach dem Bundle bzw. den Assets sucht.quelle
react-native bundle
Befehl überein . Und keine der Varianten führt dazu, dass das Bundle Teil der APK mit React Native 0.63 ist. Siehe die Beschreibung im Fehler, der an React Native CLI-Dokumente gemeldet wurde .bundleInDebug
. Das ist der richtige Weg. Die Verwendungreact-native bundle
macht keinen Sinn, wenn es Gradle-Skripte gibt, die sich um alles kümmern.Nur für den Fall, dass kürzlich jemand anderes auf dasselbe Problem stößt, verwende ich React Native 0.59.8 (ebenfalls mit RN 0.60 getestet) und kann einige der anderen Antworten bestätigen. Hier sind die Schritte:
Deinstallieren Sie die neueste kompilierte Version Ihrer App, die Sie auf Ihrem Gerät installiert haben
Lauf
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
Lauf
cd android/ && ./gradlew assembleDebug
Holen Sie sich Ihre app-debug.apk in den Ordner android / app / build / output / apk / debug
Viel Glück!
quelle
android/app/build/generated/assets/react/debug/index.android.js
und die Assets in reaktionsnativenandroid/app/build/generated/res/react/debug
0,57 befinden.Für Windows-Benutzer, wenn alle Schritte ordnungsgemäß ausgeführt wurden: https://facebook.github.io/react-native/docs/signed-apk-android.html
Sie müssen nur ausführen:
gradlew assembleRelease
Und Ihre Datei wird sein:
Ort:
E:\YourProjectName\android\app\build\outputs\apk
quelle
Ich bin auf native 5.5.4 reagieren, im Grunde musste ich manuell bündeln:
react-native bundle --dev false --platform android --entry-file index.js --bundle- output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets- dest ./android/app/build/intermediates/res/merged/debug
Verbinden Sie dann Ihr Gerät über USB und aktivieren Sie das USB-Debugging. Überprüfen Sie das angeschlossene Gerät mit
adb devices
.Zuletzt ausführen,
react-native run-android
wodurch das Debug-Apk auf Ihrem Telefon installiert wird und Sie es problemlos mit dem Dev-Server ausführen könnenHinweis:
index.js
gradlew assembleRelease
generiert nur die nicht signierten apks, die nicht installiert werden könnenquelle
Es kann möglich sein, eine nicht signierte apk-Version zu Testzwecken zu generieren, damit Sie sie auf Ihrem Handy ausführen können.
Anfangs habe ich die roten Bildschirmfehler bekommen, wie hier am meisten erwähnt. aber ich folgte dem gleichen, das hier erwähnt wurde und es funktionierte für mich.
Führen Sie diese vier Befehle auf Ihrer Konsole im Arbeitsverzeichnis aus
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug cd android gradlew assembleDebug gradlew assembleRelease
Und dann wird die APK-Datei erstellt unter: android \ app \ build \ output \ apk \ debug \ app-debug.apk
quelle
Ich habe eine Lösung gefunden, die buildTypes wie folgt ändert:
buildTypes { release { signingConfig signingConfigs.release } }
quelle