Native Environment Info reagieren:
System:
OS: macOS 10.14
CPU: (4) x64 Intel(R) Core(TM) i5-7267U CPU @ 3.10GHz
Memory: 103.10 MB / 8.00 GB
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 8.12.0 - /usr/local/bin/node
Yarn: 1.0.1 - /usr/local/bin/yarn
npm: 6.4.1 - /usr/local/bin/npm
Watchman: 4.7.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 12.1, macOS 10.14, tvOS 12.1, watchOS 5.1
Android SDK:
API Levels: 16, 17, 19, 21, 23, 24, 25, 26, 27, 28
Build Tools: 19.1.0, 20.0.0, 23.0.1, 23.0.2, 23.0.3, 25.0.0, 25.0.1, 25.0.2, 25.0.3, 26.0.0, 26.0.1, 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.3, 28.0.0, 28.0.0, 28.0.2, 28.0.3
System Images: android-16 | ARM EABI v7a, android-16 | MIPS, android-16 | Intel x86 Atom, android-16 | Google APIs Intel x86 Atom, android-19 | Google APIs Intel x86 Atom, android-24 | Google Play Intel x86 Atom, android-26 | Google APIs Intel x86 Atom, android-26 | Google APIs Intel x86 Atom_64, android-26 | Google Play Intel x86 Atom, android-27 | Google Play Intel x86 Atom, android-28 | Google APIs Intel x86 Atom, android-P | Google APIs Intel x86 Atom, android-P | Google Play Intel x86 Atom
IDEs:
Android Studio: 3.2 AI-181.5540.7.32.5056338
Xcode: 10.1/10B61 - /usr/bin/xcodebuild
npmPackages:
react: 16.6.0-alpha.8af6728 => 16.6.0-alpha.8af6728
react-native: 0.57.4 => 0.57.4
npmGlobalPackages:
babel-preset-react-native: 4.0.0
react-native-cli: 2.0.1
react-native-create-library: 3.1.2
react-native-git-upgrade: 0.2.7
Ich kann keine Release-Apk mit dem PNG-Bild in Android erstellen. Kann aber eine Release-Apk erstellen, wenn kein PNG-Image darin ist. Hier ist der Fehler, den ich beim Generieren des Release-Builds erhalte
[drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources
:app:mergeReleaseResources FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
> [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
react-native init demo
assets
-Ordner im Projektstammordner.image
-Komponente mit dem obigen PNG-Image.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/
Generate Signed APK
Überprüfen Sie dies unter https://github.com/facebook/react-native/issues/19239#issuecomment -414564404
Sie müssen ein zeichnbares Ordnerbild entfernen, falls vorhanden?
@ ZeroCool00 wirkt sich das nicht auf die Bilder in Android aus?
Die Antwort von Mapsy sollte https://stackoverflow.com/a/52750886 helfen
Sie bearbeiten also im Grunde die Datei
und fügen Sie den doLast direkt nach dem doFirst- Block manuell hinzu.
doFirst { ... }
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
}
@ ZeroCool00 @mkchx Ich habe beide
Hallo zusammen, wie können wir das mit Jenkins Job schaffen? Da wird npm immer installiert, die diese Änderung in der Datei react.gradle überschreiben. Wir können Build-on-Android-Studio für Android erstellen, aber auf Jenkins nicht möglich.
Hi @ vivek-walecha-657 Ich habe dies nicht ausprobiert, aber Sie können diesen Befehl zum Erstellen einer Offline-Bündelung ausprobieren
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle
@jeffreyrajanofficial Vielen Dank für das Schreiben. Die von Ihnen bereitgestellte Lösung hilft, wenn wir die Datei react.gradle ändern. Aber ich möchte die Veröffentlichung nicht machen, indem ich die Datei react.gradle jedes Mal ändere, wenn ich npm überall installiere.
@jeffreyrajanofficial Kannst du bitte sagen, welche Version (die neueste niedriger als diese oder höher als diese) ohne dieses Problem
Die Dinge werden jetzt in RN sortiert.> 57 Die Datei react.gradle erstellt automatisch das Bundle.
Zum Erstellen eines Release-Builds müssen Sie das npm run build: android : release nicht ausführen
Unter Verwendung der nativen Version 55.4 reagieren ist hier mein Beispielprojekt für build.gradle package.json mit Korrekturen.
https://gist.github.com/Abhishekgarg727/daf031fb9f94fdfd985e84db57dedbe1
Ich habe dies immer noch mit macOS 10.14.3 + RN 0.57.8 + Android Studio 3.3 + Gradle 4.10.3 gesehen. Vielleicht bin ich nicht der einzige? Oder vielleicht kann jemand hier bestätigen, dass es funktioniert, also werde ich mehr graben und es für mich selbst reparieren.
Ich arbeite derzeit mit dem "Patch-Paket" -Paket in Kombination mit dem angehängten Patch daran, basierend auf dem obigen Kommentar von @mkchx (mit dem Suffix .txt
damit Github den Anhang akzeptiert), um automatisch zu arbeiten Beheben Sie das Problem bei 'npm install', nachdem Sie meinen package.json-Skripten postinstall: patch-package
hinzugefügt haben.
Vielleicht ist das für jemanden nützlich ...
React-Native + 0.57.8.patch.txt
Entfernen Sie die Dateien, die Sie möglicherweise haben:
android / app / src / main / res / drawable-mdpi /
android / app / src / main / res / drawable-xhdpi /
android / app / src / main / res / drawable-xxhdpi /
Führen Sie Build erneut aus. Dies hat das Problem für mich behoben.
Ich habe das immer noch in RN0.58.x gesehen und es geht weiter in RN0.59.x - machen wir hier etwas falsch oder ist das wirklich ein Fehler?
Ich habe weiterhin Erfolg mit der Problemumgehung von
Wenn Sie zusätzliche Ressourcen in benutzerdefinierten Ordnern hinzugefügt haben, möchten Sie möglicherweise Folgendes ausprobieren:
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("drawable-ldpi").call()
moveFunc.curry("drawable-mdpi").call()
moveFunc.curry("drawable-hdpi").call()
moveFunc.curry("drawable-xhdpi").call()
moveFunc.curry("drawable-xxhdpi").call()
moveFunc.curry("drawable-xxxhdpi").call()
moveFunc.curry("raw").call()
}
Wenn Sie jedoch Abhängigkeiten haben, die ihre eigenen Assets packen, funktioniert dies nicht und es wird immer noch der folgende Fehler angezeigt (aus Gründen der Übersichtlichkeit bearbeitet):
Execution failed for task ':app:mergeReleaseResources'.
> [drawable-xxxhdpi-v4/node_modules_reactnavigationstack_dist_views_assets_backicon]
/[...]/android/app/src/main/res/drawable-xxxhdpi/node_modules_reactnavigationstack_dist_views_assets_backicon.png
[drawable-xxxhdpi-v4/node_modules_reactnavigationstack_dist_views_assets_backicon]
/[...]/android/app/build/generated/res/react/release/drawable-xxxhdpi/node_modules_reactnavigationstack_dist_views_assets_backicon.png:
Error: Duplicate resources
Wird dies aktiv bewertet oder sollten wir mit unseren eigenen Patches vorankommen?
@dragosroua Ich sehe einen fehlenden Bindestrich in Ihrem xxxhdpi-Curry. Zufälligerweise die gleichen Leitpfade mit Problemen für Sie?
Du hast mich um 2 Minuten geschlagen, ich wollte gerade diesen Teil bearbeiten. Ja, jetzt ist alles in Ordnung, aber das Bit mit dem "rohen" Pfad für benutzerdefinierte Ressourcen könnte für jemanden nützlich sein.
@dragosroua froh, dass du jetzt kompilierst - ich erinnere mich, wie frustrierend dieses für mich war, und ich bin immer noch erstaunt, dass es nicht im Master behoben ist, obwohl ich auch keine PR vorgeschlagen habe, also denke ich, ich bekomme heraus, was ich hineingesteckt habe. ..
Ich habe dies immer noch mit macOS 10.14.3 + RN 0.57.8 + Android Studio 3.3 + Gradle 4.10.3 gesehen. Vielleicht bin ich nicht der einzige? Oder vielleicht kann jemand hier bestätigen, dass es funktioniert, also werde ich mehr graben und es für mich selbst reparieren.
Ich arbeite derzeit mit dem "Patch-Paket" -Paket in Kombination mit dem angehängten Patch daran, basierend auf dem obigen Kommentar von @mkchx (mit dem Suffix
.txt
damit Github den Anhang akzeptiert), um automatisch zu arbeiten Beheben Sie das Problem bei 'npm install', nachdem Sie meinen package.json-Skriptenpostinstall: patch-package
hinzugefügt haben.Vielleicht ist das für jemanden nützlich ...
React-Native + 0.57.8.patch.txt
Bitte erklären Sie mir, warum es für mein React-Native 0.57.5 nicht funktioniert.
Ich habe eine Pacth-Datei erstellt. Zu package.json hinzugefügt. Führen Sie npm install aus und haben Sie das Ergebnis
def currentBundleTask = tasks.create(
name: "bundle${targetName}JsAndAssets",
type: Exec) {
group = "react"
description = "bundle JS and assets for ${targetName}."
// Create dirs if they are not there (e.g. the "clean" task just ran)
doFirst {
jsBundleDir.deleteDir()
jsBundleDir.mkdirs()
resourcesDir.deleteDir()
resourcesDir.mkdirs()
}
// Set up inputs and outputs so gradle can cache the result
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
outputs.dir jsBundleDir
outputs.dir resourcesDir
ohne notwendige Änderungen.
@zakabluk Sie müssten die Ausgabe Ihrer npm-Installation veröffentlichen, aber
Normalerweise erstelle ich Python-Skripte zum Patchen von node_modules.
Fügen Sie dies als postinstall.py
und fügen Sie es Ihrem Postinstall-Skript hinzu oder führen Sie es mit ./postinstall.py
#!/usr/bin/env python3
import os
import textwrap
def file_dir():
return os.path.dirname(os.path.realpath(__file__))
def read_file(filename):
'''
Reads the specified file.
:param filename: The file to read
:return: The content of the specified file
'''
if os.path.exists(filename):
with open(filename, "r") as file:
return file.read()
else:
raise IOError("file {} not found.".format(filename))
def write_file(filename, text):
'''
Writes the specified text to the specified file.
:param filename: The file to write to
:param text: The text to write
'''
with open(filename, "w") as file:
file.write(text)
def fix_android_assets():
print("Fixing android error with duplicate assets: https://github.com/facebook/react-native/issues/22234")
gradle_file_path = "{}/node_modules/react-native/react.gradle".format(file_dir())
code_snippet = textwrap.indent("""\
// Added by post_install
// Fix for: https://github.com/facebook/react-native/issues/22234
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
}
""", "")
text = read_file(gradle_file_path)
start = text.find("doFirst", 0)
end = text.find("}", start)
end = text.find("\n", end) + 1
text = text[:end] + code_snippet + text[end:]
write_file(gradle_file_path, text)
def main():
fix_android_assets()
if __name__ == "__main__":
main()
Hier können Sie bei Bedarf Ihre eigenen Skripte hinzufügen
Sieht aus wie eine Neuimplementierung dessen, was Sie mit npm install patch-package
aber wenn Python Ihr Ding ist und Sie selbst mehr Code pflegen möchten, scheint es machbar. Ich benutze immer noch das Patch-Paket für das, was es wert ist, mit 0,59,3
React-Native + 0.59.3.patch.txt
@hramos - # 19239 war ähnlich (glaube ich) und dies ist langjährig, scheint aber eine Lösung zu haben. Benötigt dies nur eine PR für eine ultimative Lösung oder fehlt mir ein Grund, warum der hier verwendete Patch nicht funktionsfähig ist? (Ich könnte). Wenn wir nur eine PR brauchen, könnte ich eine einsenden ...
Sieht aus wie eine Neuimplementierung dessen, was Sie mit
npm install patch-package
aber wenn Python Ihr Ding ist und Sie selbst mehr Code pflegen möchten, scheint es machbar. Ich benutze immer noch das Patch-Paket für das, was es wert ist, mit 0,59,3
React-Native + 0.59.3.patch.txt@hramos - # 19239 war ähnlich (glaube ich) und dies ist langjährig, scheint aber eine Lösung zu haben. Benötigt dies nur eine PR für eine ultimative Lösung oder fehlt mir ein Grund, warum der hier verwendete Patch nicht funktionsfähig ist? (Ich könnte). Wenn wir nur eine PR brauchen, könnte ich eine einsenden ...
Wie man diesen Weg benutzt, danke
@ZhanRu - https://github.com/ds300/patch-package#set -up - Sie möchten diesen Patch (mit der Erweiterung .patch) nur nach der Installation und Einrichtung von patch- in das Verzeichnis 'patches' in Ihrem Projekt einfügen. Paket
@ZhanRu - https://github.com/ds300/patch-package#set -up - Sie möchten diesen Patch (mit der Erweiterung .patch) nur nach der Installation und Einrichtung von patch- in das Verzeichnis 'patches' in Ihrem Projekt einfügen. Paket
Vielen Dank
Für alle, die noch mitmachen, habe ich kürzlich ein externes System integriert und musste meine Tests von externen Produktionsdaten trennen, was dazu führt, dass "Flavours" in Gradle verwendet werden, damit qaDebug, stagingRelease usw. usw. auf ein anderes externes System verweisen können. Der Patch hier hat dies jedoch nicht unterstützt, daher habe ich Geschmacksunterstützung hinzugefügt, und mein Patch sieht jetzt so aus. Es lebt in patches/react-native+0.59.5.patch
wo es angewendet wird, während npm i
nach npm install patch-package
läuft
diff --git a/node_modules/react-native/react.gradle b/node_modules/react-native/react.gradle
index 4ead2b6..e0f92b7 100644
--- a/node_modules/react-native/react.gradle
+++ b/node_modules/react-native/react.gradle
@@ -48,6 +48,33 @@ afterEvaluate {
resourcesDir.mkdirs()
}
+ // From https://stackoverflow.com/questions/53239705/react-native-error-duplicate-resources-android
+ // Currently has no solution?
+
+ // IF you are using flavors, add flavor name to the path you move from
+ def flavorPathSegment = ""
+ android.productFlavors.all { flavor ->
+ if (targetName.toLowerCase().contains(flavor.name)) {
+ flavorPathSegment = flavor.name + "/"
+ }
+ }
+
+ doLast {
+ def moveFunc = { resSuffix ->
+ File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}")
+ if (originalDir.exists()) {
+ File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}")
+ ant.move(file: originalDir, tofile: destDir);
+ }
+ }
+ moveFunc.curry("ldpi").call()
+ moveFunc.curry("mdpi").call()
+ moveFunc.curry("hdpi").call()
+ moveFunc.curry("xhdpi").call()
+ moveFunc.curry("xxhdpi").call()
+ moveFunc.curry("xxxhdpi").call()
+ }
+
// Set up inputs and outputs so gradle can cache the result
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
outputs.dir(jsBundleDir)
In meinem Fall bleibt das Problem mit dem Verzeichnis raw
.
Version: react-native 0.59.5
Meine Lösung:
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
def moveRawFunc = { dir ->
File originalDir = file("$buildDir/generated/res/react/release/${dir}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/${dir}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
moveRawFunc.curry("raw").call()
}
Grüße
@Dbroqua Ihre Lösung hat bei mir funktioniert (Version react-native 0.59.5
). Vielen Dank.
Sehr interessant - ich hatte kein Problem mit Raw - beachten Sie, dass meine neueste Version des Patches Unterstützung für Aromen hinzufügte. Wenn Sie anfangen, Aromen zu machen, möchten Sie diese Geschmacksunterstützung jetzt in diesen beiden Funktionen. Vielleicht könnte es irgendwie parametrisiert werden, damit sich die beiden Funktionen nicht so oft wiederholen, aber ich bin nicht gut genug im Grooving, um darüber nachzudenken.
Ich kann mir nur vorstellen, dass dies kein Problem bei Facebook und reaktionsnativen CIs ist, da sie BUCK verwenden und ihre CI-Builds jedes Mal sauber sind. Hat jemand eine saubere Reproduktion davon, damit wir einen Fix Upstream bekommen können?
In meinem Fall enthält das Raw-Verzeichnis einige MP3s, die in meiner Anwendung verwendet werden.
Das könnte dann die Basis für einen schnellen und einfachen Repro bilden. Ich habe (noch) keine derartigen Assets, aber es ist einfach genug, native Init für ein Repo zu reagieren. Setzen Sie einige Assets ein, und ich denke, beim zweiten Release-Build (vielleicht sogar beim ersten?) Sind Sie abgespritzt ...
@Dbroqua nur ein Kopf hoch, mein Patch wurde zusammengeführt, aber Ihre Erwähnung von Rohverzeichnissen, die sehr eng miteinander verwandt sind, aber nicht in meinem Patch enthalten sind, spiegelt sich auch in der Zusammenführung wider. Nachdem mein Patch installiert ist, möchten Sie möglicherweise sehen, welche Änderungen für das Raw-Verzeichnis erforderlich sind, und einen PR mit einer Fortsetzung des Fixes vorschlagen, der für Ihren Fall erweitert wird.
In Ordnung,
Ich werde das Notwendige so schnell wie möglich tun.
Grüße,
Damien
Fest!
In meinem Fall befanden sich Dateien in den Drawables-Verzeichnissen res/drawable-*
, die von einem anderen Entwickler in meinem Team-Commit verweilten. Ich erhielt den Fehler "Fehler: Doppelte Ressourcen", der auf diese Dateinamen zeigte. Ich habe die Dateien aus Drawables gelöscht und alles funktioniert gut 👍
Die Antwort von Mapsy sollte https://stackoverflow.com/a/52750886 helfen
Sie bearbeiten also im Grunde die Datei
und fügen Sie den doLast direkt nach dem doFirst- Block manuell hinzu.doFirst { ... } doLast { def moveFunc = { resSuffix -> File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}"); if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}"); ant.move(file: originalDir, tofile: destDir); } } moveFunc.curry("ldpi").call() moveFunc.curry("mdpi").call() moveFunc.curry("hdpi").call() moveFunc.curry("xhdpi").call() moveFunc.curry("xxhdpi").call() moveFunc.curry("xxxhdpi").call() }
Ich arbeite nicht für mich.
@ Nextt1 Sie müssen eine neue Ausgabe eröffnen - wenn möglich mit einem reproduzierbaren Testfall in einem öffentlichen Repo - und möglicherweise eine neue PR vorschlagen. Dieses Problem wurde von meiner PR geschlossen, und dann wurde ein weiteres Problem (das einen Fall behandelt, in dem meine erste PR nicht gut behandelt wurde) zusammengeführt. Wir sind also alle weitergegangen und ich denke, es funktioniert für die meisten, sodass dieses Problem wahrscheinlich nicht auftritt Beachtung.
Hallo allerseits - die PR, die ich vorgeschlagen habe, um dies zu beheben, wurde zusammengeführt, verursacht aber anscheinend eine Regression - https://github.com/facebook/react-native/issues/25325 - Ich untersuche, aber ob es hier jetzt Gradle-Gurus gibt Wie Sie dieses Problem beheben können, ohne diese Regression zu verursachen, wäre dankbar - danke!
Okay, die zugehörige PR hier wird eine "PR zurücksetzen" haben - sie verursacht eine Regression, und das zugrunde liegende Problem, das dieses Problem verursacht hat, war wirklich eine schlechte Dokumentation.
Hier ist die Sache: Sie sollten während eines Builds niemals wirklich Dinge in das src-Verzeichnis kopieren. Sie müssen Dinge in Zwischenprodukte kopieren und generieren usw. Wenn Sie bereits Dinge in src kopiert haben (aus früheren Builds, die diesen Patch verwenden, oder aus einem reaktionsnativen Bundle-Befehl): Sie müssen diese löschen, damit src / main / res Verzeichnis ist sauber - nur echte Assets aus Ihrem Projekt
Um eine APK mit einem Offline-Bundle zu erstellen - auch in dev, damit Sie es auf API <17 ausführen können - sollten Sie die Dinge anders machen, als es jeder im Web empfiehlt (oder Sie haben dieses Problem).
Was Sie wollen, ist dies in Ihrem android/app/build.gradle
:
project.ext.react = [
// This is what most people will need
bundleInDebug: project.hasProperty("bundleInDebug") ? project.getProperty("bundleInDebug") : false,
// If you use build variants it has to be like this - put your own names in there
bundleInDevDebug: project.hasProperty("bundleInDevDebug") ? project.getProperty("bundleInDevDebug") : false,
bundleInQaDebug: project.hasProperty("bundleInQaDebug") ? project.getProperty("bundleInQaDebug") : false,
bundleInStagingDebug: project.hasProperty("bundleInStagingDebug") ? project.getProperty("bundleInStagingDebug") : false,
bundleInProdDebug: project.hasProperty("bundleInProdDebug") ? project.getProperty("bundleInProdDebug") : false
]
Dann rufen Sie react-native
ungefähr so auf - Senden einer Gradle-Projekteigenschaft über eine Umgebungsvariable:
ORG_GRADLE_PROJECT_bundleInDebug=true npx react-native run-android
(oder für Varianten wie diese ORG_GRADLE_PROJECT_bundleInDevDebug=true npx react-native run-android --variant devDebug
)
Ich habe dies immer noch mit macOS 10.14.3 + RN 0.57.8 + Android Studio 3.3 + Gradle 4.10.3 gesehen. Vielleicht bin ich nicht der einzige? Oder vielleicht kann jemand hier bestätigen, dass es funktioniert, also werde ich mehr graben und es für mich selbst reparieren.
Ich arbeite derzeit mit dem "Patch-Paket" -Paket in Kombination mit dem angehängten Patch daran, basierend auf dem obigen Kommentar von @mkchx (mit dem Suffix
.txt
damit Github den Anhang akzeptiert), um automatisch zu arbeiten Beheben Sie das Problem bei 'npm install', nachdem Sie meinen package.json-Skriptenpostinstall: patch-package
hinzugefügt haben.Vielleicht ist das für jemanden nützlich ...
React-Native + 0.57.8.patch.txt
Genial! Im Moment ist es die beste Antwort!
Ich sehe das immer noch in 0.59.9. Die Antwort von @mkchx hat das Problem für mich
@juliancorrea @scgough sei nur vorsichtig damit, ich folgte diesem Lösungsstil bis zum Ende mit einer sogar akzeptierten PR, aber nach Folgeproblemen mussten wir ihn zurücksetzen. Es ist eine Sackgasse. Ich habe einige Details oben zu den derzeit empfohlenen Lösungen veröffentlicht und kann nur den neuen Stil empfehlen. Wenn Sie meinen alten angehängten Patch verwenden, der auf der Antwort von @mkchx basiert, vorerst für Sie, jedoch nur unter bestimmten Bedingungen - er schlägt in anderen gängigen Szenarien fehl, die Ihr Projekt möglicherweise in Zukunft benötigt
@mikehardy OK - Ich werde mir jetzt Ihre Lösung ansehen.
Ich denke, was ich eigentlich will, ist, dass der signierte APK-Build von Android Studio das Bundle überspringt (da ich dies manuell über das Terminal mache).
Ich werde mir die von Ihnen angegebenen Einstellungen ansehen und prüfen, ob sie helfen.
Ich habe immer noch Probleme damit ...
Ich kann meine Release-APK-Datei scheinbar nicht erstellen. Ich erhalte für jede Asset-Datei den folgenden Fehler:
[drawable-mdpi-v4/filename] /Users/me/React/myapp/android/app/src/main/res/drawable-mdpi/filename.png
[drawable-mdpi-v4/filename] /Users/me/React/myapp/android/app/build/generated/res/react/release/drawable-mdpi/filename.png
: Fehler: Ressourcen duplizieren
Ich habe beide Instanzen von drawable-mdpi
-Ordnern gelöscht, aber die APK-Generation legt sie zurück und Fehler.
Ich führe Folgendes manuell aus, um mein Bundle zu erstellen:
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/
In meinem App-Gradle habe ich:
project.ext.react = [
entryFile: "index.android.js",
bundleInRelease: true //I've tried true and false here
]
apply from: "../../node_modules/react-native/react.gradle"
Nur als zusätzliche Information - meine App funktioniert gut beim Debuggen (über react-native run-android
)
Im Moment kann ich meine Release-APK nur über das oben beschriebene doLast
PR-Update erstellen.
Ich denke, ich könnte zumindest den Grund / die Lösung für mein Problem haben.
Mein alter Bundle-Befehl (den ich seit RN 0.2.x verwendet habe?!) Hat die Assets in den Zielordner android/app/src/main/res/
verschoben
Ich habe einen Beitrag unter dem folgenden Link notiert, der besagt, dass> RN 57 tatsächlich Assets benötigt, die in den folgenden Ordner verschoben werden:
android/app/build/intermediates/res/merged/release/
Quelle: https://github.com/facebook/react-native/issues/19211#issuecomment -448301870
Ich habe folgendes gemacht:
drawable-mdpi
Assets, die in android/app/src/main/res/
kopiert wurdenaktualisieren
Die APK wurde installiert, aber die App stürzt jetzt mit der Ausnahme ab:
com.facebook.react.bridge.JSApplicationIllegalArgumentException: Error while updating property 'defaultSrc' of a view managed by: RCTImageView
... so sieht es so aus, als ob es die Bilder nicht finden kann 😞
Update 2
Die einzige Möglichkeit, die APK (bisher) zum Laufen zu bringen, besteht darin, Folgendes zu tun:
android/app/src/main/res/
android/app/src/main/res/drawable-mdpi
in android/app/src/main/res/drawable-hdpi
Mein Build Gradle ist:
project.ext.react = [
entryFile: "index.android.js"
]
Die APK erstellt und läuft dann ...
Randnotiz:
Ich habe einen unerwarteten Fehler festgestellt, der zu einer createBitmap
OutOfMemory-Ausnahme für eine Bildschiebereglerkomponente führte.
Ich habe meinem Manifest Folgendes hinzugefügt und die App wird erneut ausgeführt: android:largeHeap="true"
Ich bin mir bewusst, dass durch das Hinzufügen ein Leck- / Komponentenproblem umgangen wird, aber die App wird bisher wieder ohne Probleme ausgeführt.
In React Native 0.60.0 habe ich festgestellt, dass die native Basis auch doppelte Ressourcen erstellt, aber die oben beschriebene Problemumgehung funktioniert nicht, da sie auf den Rohordner abzielt.
[raw / node_modules_nativebase_dist_src_basic_icon_nbicons] C: \ Projects \ some-app \ CLIENT \ android \ app \ src \ main \ resrawnode_modules_nativebase_dist_src_basic_icon_nbicons.json
[raw / node_modules_nativebase_dist_src_basic_icon_nbicons] C: \ Projekte \ some-app \ CLIENT \ android \ app \ build \ generate \ res \ reactreleaserawnode_modules_nativebase_dist_src_basic_icon_nbicons.json: Fehler: Duplizieren
Für andere Benutzer mit diesem Problem:
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
File originalDir = file("$buildDir/generated/res/react/release/raw");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/raw");
ant.move(file: originalDir, tofile: destDir);
}
}
Wie können wir das lösen, wenn wir CI verwenden?
In meinem Fall bleibt das Problem mit dem Verzeichnis
raw
.Version:
react-native 0.59.5
Meine Lösung:
doLast { def moveFunc = { resSuffix -> File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}"); if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}"); ant.move(file: originalDir, tofile: destDir); } } def moveRawFunc = { dir -> File originalDir = file("$buildDir/generated/res/react/release/${dir}"); if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/${dir}"); ant.move(file: originalDir, tofile: destDir); } } moveFunc.curry("ldpi").call() moveFunc.curry("mdpi").call() moveFunc.curry("hdpi").call() moveFunc.curry("xhdpi").call() moveFunc.curry("xxhdpi").call() moveFunc.curry("xxxhdpi").call() moveRawFunc.curry("raw").call() }
Grüße
Das funktioniert!
[drawable-mdpi-v4/node_modules_reactnativemaplink_src_images_uber] /Users/umair/my-app/android/app/src/main/res/drawable-mdpi/node_modules_reactnativemaplink_src_images_uber.png [drawable-mdpi-v4/node_modules_reactnativemaplink_src_images_uber] /Users/umair/my-app/android/app/build/generated/res/react/debug/drawable-mdpi/node_modules_reactnativemaplink_src_images_uber.png: Error: Duplicate resources
Ich erhalte diesen Fehler, wenn ich react-native run-android
ausführe, aber nicht, wenn ich den Release-Build erstelle und ausführe. Keine der oben genannten Lösungen funktioniert für mich.
RN 0,60,5
UPDATE: Mir wurde klar, dass ich die obigen "Patch" -Methoden ändern sollte, um die Verzeichnisse debug
anstelle von release
zu zitieren, und das hat es behoben. Ich musste auch mein raw
Verzeichnis reparieren
Ich habe auch das gleiche Problem und reagiere. Der Patch gradle wird es nicht beheben. In meinem Fall sind meine duplizierten Ressourcen .OBJ- und .MTL-Dateien. Sie haben keine Probleme mit Bildressourcen.
[raw / Assets_res_salad_salad] /Users/sercanov/Projects/ARt/diner/DinerApp/android/app/src/main/res/raw/assets_res_salad_salad.mtl [raw / Assets_res_salad_salad] / Users / sercanov / Projects / Dt /android/app/src/main/res/raw/assets_res_salad_salad.obj: Fehler: Doppelte Ressourcen
[raw / assets_res_steak_steak] /Users/sercanov/Projects/ARt/diner/DinerApp/android/app/src/main/res/raw/assets_res_steak_steak.mtl [raw / assets_res_steak_steak] / Users / sercanov / Projects / ARt / diner / DinerApp /android/app/src/main/res/raw/assets_res_steak_steak.obj: Fehler: Ressourcen duplizieren
[raw / Assets_res_salmon_salmon] /Users/sercanov/Projects/ARt/diner/DinerApp/android/app/src/main/res/raw/assets_res_salmon_salmon.mtl [raw / Assets_res_salmon_salmon] / Users / sercanov / Projects / Dt /android/app/src/main/res/raw/assets_res_salmon_salmon.obj: Fehler: Doppelte Ressourcen
@sercanov versuchen Sie immer noch, die Kopie zu src zu verwenden? Dieser Stil wurde untersucht und schlägt aus bekannten Gründen fehl. Es gibt unterstützte Methoden zum Erstellen, die keine Dinge in src platzieren - oder versuchen Sie diese Methoden, die nicht in src kopiert werden sollen, und scheitern immer noch? https://github.com/facebook/react-native/issues/22234#issuecomment -504721069
hey @mikehardy hat tatsächlich beide Ansätze ausprobiert, keiner von beiden hat es in Release-Builds zum
Bei Verwendung der Methode "Nicht kopieren nach src" ORG_GRADLE_PROJECT_bundleInArRelease=true npx react-native run-android --variant arRelease
bekomme ich diese;
Ausführung für Aufgabe ': app: mergeArReleaseResources '
[raw / assets_res_salad_salad] /Users/sercanov/Projects/ARt/diner/DinerApp/android/app/build/generated/res/react/ar/release/raw/assets_res_salad_salad.mtl [raw / resources_res_salad_salad] / Users / sercan /ARt/diner/DinerApp/android/app/build/generated/res/react/ar/release/raw/assets_res_salad_salad.obj: Fehler: Doppelte Ressourcen
[raw / assets_res_steak_steak] /Users/sercanov/Projects/ARt/diner/DinerApp/android/app/build/generated/res/react/ar/release/raw/assets_res_steak_steak.mtl [raw / assets_res_steak_steak] / Users / sercanov / Projects /ARt/diner/DinerApp/android/app/build/generated/res/react/ar/release/raw/assets_res_steak_steak.obj: Fehler: Doppelte Ressourcen
[raw / assets_res_salmon_salmon] /Users/sercanov/Projects/ARt/diner/DinerApp/android/app/build/generated/res/react/ar/release/raw/assets_res_salmon_salmon.mtl [raw / assets_res_salmon_salmon] / Users / sercan /ARt/diner/DinerApp/android/app/build/generated/res/react/ar/release/raw/assets_res_salmon_salmon.obj: Fehler: Ressourcen duplizieren
Bei Verwendung von copy-to-src doLast way; Ich musste den Android / Build-Ordner jedes Mal löschen, um erfolgreich zu sein, aber irgendwie waren keine Assets in der App verfügbar. Dies hängt möglicherweise mit meinem Code zusammen, der derzeit untersucht wird.
Wenn Sie auf die Methode "Nicht kopieren nach src" wechseln, müssen Sie zuerst alles bereinigen, um den Wechsel vorzunehmen. Mein Projekt hatte viel "Abfall" aus einer Bündelungsperspektive aus dem vorherigen Copy-to-Src-Stil, den ich bereinigen musste, bevor es funktionierte, und dann funktionierte es jedes Mal.
@ rahulkumar1409 das hat mir bei diesem Fehler geholfen, aber es wirft einen anderen Fehler
Aufgabe : React -Native-Simple-Download-
Haben Sie eine Idee, warum dies passiert?
Diese Lösung hat bei mir funktioniert.
Sie bearbeiten also im Grunde die Datei /node_modules/react-native/react.gradle
und fügen Sie den doLast direkt nach dem doFirst-Block manuell hinzu.
doFirst {...}
doLast {
def moveFunc = {resSuffix ->
Datei originalDir = Datei ("$ buildDir / generate / res / react / release / drawable - $ {resSuffix}");
if (originalDir.exists ()) {
Datei destDir = Datei ("$ buildDir /../ src / main / res / drawable - $ {resSuffix}");
ant.move (Datei: originalDir, Tofile: destDir);
}}
}}
moveFunc.curry ("ldpi"). call ()
moveFunc.curry ("mdpi"). call ()
moveFunc.curry ("hdpi"). call ()
moveFunc.curry ("xhdpi"). call ()
moveFunc.curry ("xxhdpi"). call ()
moveFunc.curry ("xxxhdpi"). call ()
}}
Wir sind auf reaktionsnativen 0,60,5.
Wir verwenden Produktaromen wie bei @mikehardy erwähnt und hatten Probleme mit dem ' raw' -Ordner, genau wie bei
Am Ende habe ich beide Lösungen gemischt und wir verwenden diesen Code:
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}")
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}")
ant.move(file: originalDir, tofile: destDir)
}
}
def moveRawFunc = { dir ->
File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${dir}")
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/${dir}")
ant.move(file: originalDir, tofile: destDir)
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
moveRawFunc.curry("raw").call()
}
Dieser Thread war wirklich hilfreich, danke an alle für ihren Beitrag. 😄
Ich erhalte den doppelten Fehler nur bei Release-Builds. Ich verwende React-Native 60.5
/release/drawable-xhdpi/node_modules_reactnavigationstack_lib_module_views_assets_backicon.png: Fehler: Doppelte Ressourcen
Ich habe versucht, bundleInDebug auf true und false zu setzen, aber ohne Auswirkungen.
Ich baue mit App Center. Dies erfordert eine src / main / assets / appcenter-config.json-Datei. Ich habe auch ein Verzeichnis src / main / assets / fonts, da ich benutzerdefinierte Schriftarten verwende. Ist dies wahrscheinlich das Problem zu verursachen?
@ARichIVC Ich
Es sieht so aus, als ob das Standardproblem "Mein src / -Verzeichnis ist durch frühere Versuche im Kopierstil verschmutzt, Bundle-Verpackungen zu handhaben" aus dieser ursprünglichen Lösung stammt, bevor wir alle erkannten, dass es sich um eine Sackgasse handelt und Sie src / aus den kopierten löschen müssen Dinge, bevor Sie die nachfolgende Lösung für das BundleInDebug-Zeug ausprobieren. Es ist alles in diesem Thread, der leider unhandlich und lang ist, aber die Informationen sind da drin
Danke @mikehardy für deine Hilfe. Ich fand es in Ordnung, die Schriftarten usw. im Assets-Verzeichnis zu belassen, musste aber die anderen herumhängenden Teile löschen. Nämlich alles in \ android \ app \ src \ main \ res \ drawable-hdpi \
Beachten Sie, dass sich Schriftarten auch im richtigen Verzeichnis befinden sollten - ein Beispiel: https://github.com/oblador/react-native-vector-icons#android, mit dem Sie aufgefordert werden, diese Datei aufzurufen, die sorgfältig in ein Nicht-src kopiert wird Verzeichnis https://github.com/oblador/react-native-vector-icons/blob/master/fonts.gradle#L16 - jedes Projekt ist natürlich anders, aber ich fand es erwähnenswert
Wir sind auf reaktionsnativen 0,60,5.
Wir verwenden Produktaromen wie bei @mikehardy erwähnt und hatten Probleme mit dem ' raw' -Ordner, genau wie bei
Am Ende habe ich beide Lösungen gemischt und wir verwenden diesen Code:
doLast { def moveFunc = { resSuffix -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}") ant.move(file: originalDir, tofile: destDir) } } def moveRawFunc = { dir -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${dir}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/${dir}") ant.move(file: originalDir, tofile: destDir) } } moveFunc.curry("ldpi").call() moveFunc.curry("mdpi").call() moveFunc.curry("hdpi").call() moveFunc.curry("xhdpi").call() moveFunc.curry("xxhdpi").call() moveFunc.curry("xxxhdpi").call() moveRawFunc.curry("raw").call() }
Dieser Thread war wirklich hilfreich, danke an alle für ihren Beitrag. 😄
Es klappt! Vielen Dank! 👍
Für React Native 0.59.1 oder höher müssen Sie den folgenden Code in react.gradle in node_modules / react-native hinzufügen.
def flavorPathSegment = ""
android.productFlavors.all { flavor ->
if (targetName.toLowerCase().contains(flavor.name)) {
flavorPathSegment = flavor.name
}
}
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
}
@ Dayachand-Systematix diesen schlechten Rat. Diese Stillösung wurde bis zu dem Punkt verfolgt, an dem sie eine PR hatte und sogar zusammengeführt wurde. Dann wurde festgestellt, dass es die falsche Richtung war und die PR wurde zurückgesetzt. Würden Sie den Leuten raten, eine Lösung zu verwenden, die tatsächlich dazu geführt hat, dass eine PR-Zusammenführung rückgängig gemacht wurde? Ich würde nicht. https://github.com/facebook/react-native/issues/22234#issuecomment -504721069
@mikehardy Ja, ich weiß, dass dies keine dauerhafte Lösung ist, aber es funktioniert gut. Außerdem kann ich Ihre Lösung nicht verwenden, da ich einige andere Dateien wie Begrüßungsbildschirme und DB im Verzeichnis res habe .
Ja @ dayachand-systematix mich auch:
mike<strong i="6">@isabela</strong>:~/work/Kullki/ksocialscore/packages/public-app/android/app (lerna-import) % find . -type f |grep res
./src/main/res/drawable-xhdpi/minilogo_bw.png
./src/main/res/mipmap-xxhdpi/ic_launcher.png
./src/main/res/values-v21/styles.xml
./src/main/res/drawable-xxhdpi/minilogo_bw.png
./src/main/res/drawable-xxhdpi/kscore_splash.png
./src/main/res/drawable-hdpi/minilogo_bw.png
./src/main/res/mipmap-xxxhdpi/ic_launcher.png
./src/main/res/mipmap-hdpi/ic_launcher.png
./src/main/res/layout/launch_screen.xml
./src/main/res/drawable/background_launch.xml
./src/main/res/values/colors.xml
./src/main/res/values/styles.xml
./src/main/res/values/strings.xml
./src/main/res/mipmap-xhdpi/ic_launcher.png
./src/main/res/xml/filepaths.xml
./src/main/res/xml/react_native_config.xml
./src/main/res/drawable-mdpi/minilogo_bw.png
./src/main/res/drawable-xxxhdpi/minilogo_bw.png
./src/main/res/mipmap-mdpi/ic_launcher.png
./src/qa/res/mipmap-xxhdpi/ic_launcher.png
./src/qa/res/mipmap-xxxhdpi/ic_launcher.png
./src/qa/res/mipmap-hdpi/ic_launcher.png
./src/qa/res/values/strings.xml
./src/qa/res/mipmap-xhdpi/ic_launcher.png
./src/qa/res/mipmap-mdpi/ic_launcher.png
./src/debug/res/xml/react_native_config.xml
./src/staging/res/mipmap-xxhdpi/ic_launcher.png
./src/staging/res/mipmap-xxxhdpi/ic_launcher.png
./src/staging/res/mipmap-hdpi/ic_launcher.png
./src/staging/res/values/strings.xml
./src/staging/res/mipmap-xhdpi/ic_launcher.png
./src/staging/res/mipmap-mdpi/ic_launcher.png
./src/dev/res/mipmap-xxhdpi/ic_launcher.png
./src/dev/res/mipmap-xxxhdpi/ic_launcher.png
./src/dev/res/mipmap-hdpi/ic_launcher.png
./src/dev/res/values/strings.xml
./src/dev/res/mipmap-xhdpi/ic_launcher.png
./src/dev/res/mipmap-mdpi/ic_launcher.png
Und trotzdem funktioniert die vorgeschlagene / nicht PR-zurückgesetzte Lösung für mich: man_shrugging:
Heya, wir haben das Problem behoben, indem wir den Parameter --asset-dest
:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle
@ hery-finimize hi - würde das Entfernen des Parameters --asset-dest
nicht dazu führen, dass die neuesten Assets nicht an der richtigen Stelle gebündelt werden. Wenn Sie also Ihre APK erstellen, besteht die Gefahr, dass sie fehlen / fehlen Datum Asset-Dateien in der App?
@scgough Ich dachte, das könnte der Fall sein. In diesem Fall können wir alle doppelten Assets mit Ausnahme der lokalen Assets, die wir vor dem Erstellen mit Android Studio oder einem beliebigen Produktionsworkflow benötigen, selektiv entfernen, z
find android/app/src/main/res/drawable-* \( -name launch_screen.png -o -name ic_stat_onesignal_default.png -prune \) -o -type f -exec rm {} +
Nicht ideal, aber es sollte funktionieren, bis dies behoben ist.
Dieses Problem tritt auf, wenn Sie Dateien mit demselben Namen und unterschiedlicher Erweiterung in einem solchen Assets-Ordner haben
back.png
back.jpg
weil in android beide so anrufen;
R.drawable.back
R.drawable.back
Entfernen oder benennen Sie eine der Dateien um.
Hallo,
Ich habe versucht, react.gradle zu ändern: Der Build geht noch einen Schritt weiter (die app.aab wird erstellt, aber ich kann die APK nicht erstellen.
Ich habe versucht, die APK mit Android Studio zu erstellen, und es gab kein Problem (mit dem Patch zu react.gradle).
Es ist ziemlich seltsam für mich, weil der Prozess zum Erstellen der APK in beiden Fällen der gleiche sein sollte. Liege ich falsch ?
Dieser Kommentar funktionierte für 0.59.10. Mit diesem Kern gemischt .
Vielen Dank, @ dayachand-systematix!
Was für mich funktioniert hat, war eine Kombination aus zwei Kommentaren:
Ich füge dies hier für jeden ein, der es sonst noch braucht.
`` `
def flavourPathSegment = ""
android.productFlavors.all {Flavor ->
if (targetName.toLowerCase (). enthält (flavour.name)) {
FlavorPathSegment = Flavour.name
}}
}}
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}")
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}")
ant.move(file: originalDir, tofile: destDir)
}
}
def moveRawFunc = { dir ->
File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${dir}")
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/${dir}")
ant.move(file: originalDir, tofile: destDir)
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
moveRawFunc.curry("raw").call()
}
@AbhishekNairOfficial wo
@AbhishekNairOfficial wo
node_modules / react-native / react.gradle.
Setzen Sie dies nach dem doFirst () -Block
@AbhishekNairOfficial wo
node_modules / react-native / react.gradle.
Setzen Sie dies nach dem doFirst () -Block
Ich denke, es ist nicht der richtige Weg, um dieses Problem zu umgehen. Weil diese Änderung beim nächsten npm install
überschrieben wird. Auch das CI wird nicht funktionieren
Hat jemand unten Befehle ausprobiert?
cd android
./gradlew clean
cd ..
Es hat bei mir funktioniert
Was für mich funktioniert hat, war eine Kombination aus zwei Kommentaren:
Ich füge dies hier für jeden ein, der es sonst noch braucht.
def flavorPathSegment = "" android.productFlavors.all { flavor -> if (targetName.toLowerCase().contains(flavor.name)) { flavorPathSegment = flavor.name } } doLast { def moveFunc = { resSuffix -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}") ant.move(file: originalDir, tofile: destDir) } } def moveRawFunc = { dir -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${dir}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/${dir}") ant.move(file: originalDir, tofile: destDir) } } moveFunc.curry("ldpi").call() moveFunc.curry("mdpi").call() moveFunc.curry("hdpi").call() moveFunc.curry("xhdpi").call() moveFunc.curry("xxhdpi").call() moveFunc.curry("xxxhdpi").call() moveRawFunc.curry("raw").call() }
Oh Mann, du hast meinen Tag gerettet <3
Was für mich funktioniert hat, war eine Kombination aus zwei Kommentaren:
Ich füge dies hier für jeden ein, der es sonst noch braucht.def flavorPathSegment = "" android.productFlavors.all { flavor -> if (targetName.toLowerCase().contains(flavor.name)) { flavorPathSegment = flavor.name } } doLast { def moveFunc = { resSuffix -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}") ant.move(file: originalDir, tofile: destDir) } } def moveRawFunc = { dir -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${dir}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/${dir}") ant.move(file: originalDir, tofile: destDir) } } moveFunc.curry("ldpi").call() moveFunc.curry("mdpi").call() moveFunc.curry("hdpi").call() moveFunc.curry("xhdpi").call() moveFunc.curry("xxhdpi").call() moveFunc.curry("xxxhdpi").call() moveRawFunc.curry("raw").call() }
Oh Mann, du hast meinen Tag gerettet <3
Haha danke. Ich bin fast täglich zu diesem Thema gekommen, also habe ich beschlossen, das Leben auch anderen zu erleichtern.
Das Entfernen des Ordners android/app/build
und das erneute Erstellen funktionierten für mich.
Meine Lösung:
Löschen Sie alle Dateien in / your_project / android / app / src / main / raw / res .
Es ist Arbeit für mich!
Was für mich funktioniert hat, war eine Kombination aus zwei Kommentaren:
Ich füge dies hier für jeden ein, der es sonst noch braucht.
def flavorPathSegment = "" android.productFlavors.all { flavor -> if (targetName.toLowerCase().contains(flavor.name)) { flavorPathSegment = flavor.name } } doLast { def moveFunc = { resSuffix -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}") ant.move(file: originalDir, tofile: destDir) } } def moveRawFunc = { dir -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${dir}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/${dir}") ant.move(file: originalDir, tofile: destDir) } } moveFunc.curry("ldpi").call() moveFunc.curry("mdpi").call() moveFunc.curry("hdpi").call() moveFunc.curry("xhdpi").call() moveFunc.curry("xxhdpi").call() moveFunc.curry("xxxhdpi").call() moveRawFunc.curry("raw").call() }
danke @AbhishekNairOfficial. Das hat mir viel Zeit gespart.
rm -rf ./android/app/src/main/res/drawable-*
rm -rf ./android/app/src/main/res/raw
Das funktioniert also, aber dann fehlen Ihre Bilder. Wenn Sie also Ihre App neu bündeln und versuchen, sie zu erstellen, wird der gleiche Fehler angezeigt. Hat jemand schon eine legitime Lösung dafür?
Dasselbe in Version 0.61.5 und wie @ wincod75 sagt, ist das Löschen von unformatierten und zeichnbaren Ordnern keine wirkliche Lösung, da alle Bilder entfernt werden.
Ich verstehe, dass sie für den Release-Build neu erstellt wurden, aber es wäre schön, wenn sie auch funktionieren würden, wenn reaktionsnatives run-android ausgeführt wird - varant = release, das funktioniert nur, wenn sie sich in src / main befinden, und es kann nicht erstellt werden .
Konnte jemand auf v0.61.5 lösen?
@ gudbrand3 Ich habe schließlich den oben genannten Fix in die Datei "node_modules / react-native / react.gradle" implementiert, nur damit ich einen neuen Build für den Appstore erhalten kann, aber das ist absurd, nicht sicher, warum dies nicht der Fall ist wurde noch nicht behoben ...
@ wincod75 hören hören! Am Ende hatte ich das gleiche ... bla. Ich verstehe auch nicht, warum es nicht nur im Paket enthalten ist, bis ein besserer Ansatz gefunden wird, da die Leute es sowieso manuell machen. Jetzt muss es bei jedem Löschen von node_modules und jeder erneuten npm-Installation erneut durchgeführt werden. #frustrierend
Das Entfernen der Zeichenordner würde für mich nicht funktionieren, da ich Zeichenressourcen hatte, die ich behalten musste. Mein Problem war mit duplicate resources
für alles im Ordner android/app/src/main/res/raw
und Dateien, die mit nodemodules...
im Ordner android/app/src/main/res/drawable
begannen. Dies löste das Problem für mich:
Hinzufügen zu android/app/build.gradle
:
...
project.ext.react = [
...
bundleInRelease : true,
resourcesDirRelease : "src/release/res",
...
]
...
Alles, was mit node
von android/app/src/main/drawable*
entfernen:
rm android/app/src/main/drawable*/node*
rm -rf android/app/src/main/raw
Bereinigen Sie das Projekt, führen Sie den Befehl REACT NATIVE BUNDLE NICHT aus und erstellen Sie ihn neu.
Hoffe das hilft jemandem!
Oh Junge. Vielleicht ist eine offizielle Lösung in Vorbereitung?
Ich habe das gleiche Problem in Version 0.61.4
in meinem Fall
Erstens: Ich habe den folgenden Code in node_modules / react-native / react.gradle nach 'doFirst' eingefügt.
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
}
zweitens: Ich habe alle Inhalte des Ordners android / app / src / main / res / raw gelöscht
kann für jemanden nützlich sein
Oh Junge. Vielleicht ist eine offizielle Lösung in Vorbereitung?
Ich hoffe es, ich verwende RN 0.62.1 und bin auch auf dieses Problem
Durch Hinzufügen des doLast-Codes oder Löschen der Drawables-Ordner wird dieses Problem
Ich frage mich, was die offizielle Empfehlung ist.
Vielen Dank
Das Entfernen der Zeichenordner würde für mich nicht funktionieren, da ich Zeichenressourcen hatte, die ich behalten musste. Mein Problem war mit
duplicate resources
für alles im Ordnerandroid/app/src/main/res/raw
und Dateien, die mitnodemodules...
im Ordnerandroid/app/src/main/res/drawable
begannen. Dies löste das Problem für mich:Hinzufügen zu
android/app/build.gradle
:... project.ext.react = [ ... bundleInRelease : true, resourcesDirRelease : "src/release/res", ... ] ...
Alles, was mit
node
vonandroid/app/src/main/drawable*
entfernen:rm android/app/src/main/drawable*/node* rm -rf android/app/src/main/raw
Bereinigen Sie das Projekt, führen Sie den Befehl REACT NATIVE BUNDLE NICHT aus und erstellen Sie ihn neu.
Hoffe das hilft jemandem!
Die obige Lösung hat mir geholfen, eine anständige Antwort zu finden:
Hinzufügen zu android/app/build.gradle
:
...
project.ext.react = [
...
bundleInRelease : true,
resourcesDirRelease : "src/release/res",
...
]
...
Führen Sie den folgenden Befehl aus, um alle node_module-Dateien zu löschen.
rm -rf drawable*/node*
Führen Sie diesen Befehl aus, um und APK zu erstellen.
./gradlew assembleRelease
Ich habe das folgende Skript für meine package.json erstellt
"release-apk": "cd android && yarn remove-duplicate-files && ./gradlew assembleRelease"
Hoffe das hilft!
Und vielen Dank an alle, die mit ihren Lösungen mitgemacht haben
Für alle, die Probleme mit Nicht-Image-Rohstoffen haben; Ich habe es gelöst, indem ich die Dateien mit demselben Namen, aber unterschiedlicher Erweiterung umbenannt habe.
Ich hatte object.obj
und object.mtl
Dateien. Selbst wenn die Erweiterungen unterschiedlich sind, wurde ein Fehler bei doppelten Ressourcen ausgelöst. Weil Android sie nach Dateinamen aufnimmt. Das Umbenennen von object.mtl
in object_material.mtl
hatte es also endlich für mich gelöst.
Dies kann auch für Bildressourcen der Fall sein. Versuchen Sie, sie umzubenennen, wenn Sie Bilder mit identischen Namen haben.
Was für mich funktioniert hat, war eine Kombination aus zwei Kommentaren:
Ich füge dies hier für jeden ein, der es sonst noch braucht.
def flavorPathSegment = "" android.productFlavors.all { flavor -> if (targetName.toLowerCase().contains(flavor.name)) { flavorPathSegment = flavor.name } } doLast { def moveFunc = { resSuffix -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/drawable-${resSuffix}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}") ant.move(file: originalDir, tofile: destDir) } } def moveRawFunc = { dir -> File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${dir}") if (originalDir.exists()) { File destDir = file("$buildDir/../src/main/res/${dir}") ant.move(file: originalDir, tofile: destDir) } } moveFunc.curry("ldpi").call() moveFunc.curry("mdpi").call() moveFunc.curry("hdpi").call() moveFunc.curry("xhdpi").call() moveFunc.curry("xxhdpi").call() moveFunc.curry("xxxhdpi").call() moveRawFunc.curry("raw").call() }
targetName.toLowerCase().contains(flavor.name.toLowerCase())
arbeiten für mich.
Mein flavor.name
sieht aus wie xxXX.
All dieses Dolast-Zeug wurde in den PRs Nr. 24518 und Nr. 24778 hinzugefügt und dann in Nr. 25363 wieder entfernt. Weiß jemand, warum es entfernt wurde? Dies war ein langjähriges Problem, und ich dachte, sie hätten es behoben.
Egal, Antworten hier:
https://github.com/facebook/react-native/issues/22234#issuecomment -504721069
und hier: https://github.com/facebook/react-native/issues/25325
Falls das hilft, hier ein paar Einzeiler aus meinem Skript (auch für Android X):
echo "Fixing java error: package android.support.v4.widget does not exist issue with Android X"
npm install jetifier
npx jetify
echo "Fixing duplicate resources issue"
rm -rf .../android/app/src/main/res/raw
cd .../node_modules/react-native
cat <<EOT >> react_gradle.patch
121a122,137
> doLast {
> def moveFunc = { resSuffix ->
> File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
> if (originalDir.exists()) {
> File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
> ant.move(file: originalDir, tofile: destDir);
> }
> }
> moveFunc.curry("ldpi").call()
> moveFunc.curry("mdpi").call()
> moveFunc.curry("hdpi").call()
> moveFunc.curry("xhdpi").call()
> moveFunc.curry("xxhdpi").call()
> moveFunc.curry("xxxhdpi").call()
> }
>
EOT
ls -l react_gradle.patch
patch react.gradle react_gradle.patch
Diese Lösung hat mir geholfen, einen Release-Build zu erstellen: https://github.com/facebook/react-native/issues/26245#issuecomment -631382817
Die folgenden Schritte haben es für mich getan:
1. gradlew clean
2. npm install
3. gradlew bundleRelease
System:
OS: macOS 10.15.3
CPU: (4) x64 Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Memory: 221.64 MB / 8.00 GB
Shell: 5.7.1 - /bin/zsh
Binaries:
Node: 12.13.1 - ~/.nvm/versions/node/v12.13.1/bin/node
Yarn: 1.22.4 - ~/Documents/youpendo-app-bareworkflow/node_modules/.bin/yarn
npm: 6.12.1 - ~/.nvm/versions/node/v12.13.1/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.9.3 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
Android SDK:
API Levels: 28, 29
Build Tools: 28.0.3, 29.0.2
System Images: android-28 | Google APIs Intel x86 Atom, android-29 | Google APIs Intel x86 Atom
Android NDK: Not Found
IDEs:
Android Studio: 3.6 AI-192.7142.36.36.6392135
Xcode: 11.3.1/11C504 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_232 - /usr/bin/javac
Python: 2.7.16 - /usr/bin/python
npmPackages:
@react-native-community/cli: ^4.8.0 => 4.10.0
react: 16.11.0 => 16.11.0
react-native: 0.62.2 => 0.62.2
npmGlobalPackages:
*react-native*: Not Found
Ich erhalte den gleichen Fehler. Irgendeine Lösung ?
Kann jemand bitte die Patch-Datei für die Reaktion native 0.62.2 teilen
Ich habe diesen Patch für React Native 0.63.2 erstellt. Wenn Sie 'drawable- ' Ordner haben, benennen Sie diese in 'mipmap-' um . Sie können die Referenz in der Datei android / app / src / main / AndroidManifest.xml ändern
Führen Sie dies im Stammverzeichnis des Projekts aus, um die Patch-Datei zu erstellen
cat <<EOT >> react-native-0.63.2-react.gradle.patch
@@ -147,6 +147,23 @@
jsSourceMapsDir.mkdirs()
}
+ doLast {
+ def moveFunc = { resFolder ->
+ File originalDir = file("\${buildDir}/generated/res/react/release/\${resFolder}");
+ if (originalDir.exists()) {
+ File destDir = file("\${buildDir}/../src/main/res/\${resFolder}");
+ ant.move(file: originalDir, tofile: destDir);
+ }
+ }
+ moveFunc.curry("drawable-ldpi").call()
+ moveFunc.curry("drawable-mdpi").call()
+ moveFunc.curry("drawable-hdpi").call()
+ moveFunc.curry("drawable-xhdpi").call()
+ moveFunc.curry("drawable-xxhdpi").call()
+ moveFunc.curry("drawable-xxxhdpi").call()
+ moveFunc.curry("raw").call()
+ }
+
// Set up inputs and outputs so gradle can cache the result
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
outputs.dir(jsBundleDir)
EOT
Wenden Sie dann den Patch mit an
patch node_modules/react-native/react.gradle < react-native-0.63.2-react.gradle.patch
Auch empfehlen zu tun
rm -Rf android/.gradle
cd android && gradlew clean
Kopieren Sie node_ modules/react-native/react.gradle
nach android/app/react.gradle
und ändern Sie dann android/app/build.gradle
und android/app/react.gradle
:
android/app/build.gradle
- apply from: "../../node_modules/react-native/react.gradle"
+ apply from: "./react.gradle"
android/app/react.gradle
doFirst {
jsBundleDir.deleteDir()
jsBundleDir.mkdirs()
resourcesDir.deleteDir()
resourcesDir.mkdirs()
jsIntermediateSourceMapsDir.deleteDir()
jsIntermediateSourceMapsDir.mkdirs()
jsSourceMapsDir.deleteDir()
jsSourceMapsDir.mkdirs()
}
+
+ doLast {
+ def moveFunc = { resSuffix ->
+ File originalDir = file("${resourcesDir}/drawable-${resSuffix}")
+ if (originalDir.exists()) {
+ File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}")
+ ant.move(file: originalDir, tofile: destDir)
+ }
+ }
+ def moveRawFunc = { dir ->
+ File originalDir = file("${resourcesDir}/${dir}")
+ if (originalDir.exists()) {
+ File destDir = file("$buildDir/../src/main/res/${dir}")
+ ant.move(file: originalDir, tofile: destDir)
+ }
+ }
+
+ moveFunc.curry("ldpi").call()
+ moveFunc.curry("mdpi").call()
+ moveFunc.curry("hdpi").call()
+ moveFunc.curry("xhdpi").call()
+ moveFunc.curry("xxhdpi").call()
+ moveFunc.curry("xxxhdpi").call()
+ moveRawFunc.curry("raw").call()
+ }
Dies funktioniert bei mir in react-native 0.63.2
doLast {
def flavorPathSegment = ""
println targetName.toLowerCase();
android.productFlavors.all { flavor ->
if (targetName.toLowerCase().contains(flavor.name.toLowerCase())) {
flavorPathSegment = flavor.name
}
}
def moveFunc = { resFolder ->
File originalDir = file("${buildDir}/generated/res/react/${flavorPathSegment}/release/${resFolder}");
if (originalDir.exists()) {
File destDir = file("${buildDir}/../src/main/res/${resFolder}");
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("drawable").call()
moveFunc.curry("drawable-ldpi").call()
moveFunc.curry("drawable-mdpi").call()
moveFunc.curry("drawable-hdpi").call()
moveFunc.curry("drawable-xhdpi").call()
moveFunc.curry("drawable-xxhdpi").call()
moveFunc.curry("drawable-xxxhdpi").call()
moveFunc.curry("raw").call()
}
Hier die Patch-Datei react-native+0.63.2.patch
diff --git a/node_modules/react-native/react.gradle b/node_modules/react-native/react.gradle
index 6441d93..1eb4645 100644
--- a/node_modules/react-native/react.gradle
+++ b/node_modules/react-native/react.gradle
@@ -147,6 +147,33 @@ afterEvaluate {
jsSourceMapsDir.mkdirs()
}
+ doLast {
+ def flavorPathSegment = ""
+ println targetName.toLowerCase();
+ android.productFlavors.all { flavor ->
+ if (targetName.toLowerCase().contains(flavor.name.toLowerCase())) {
+ flavorPathSegment = flavor.name
+ }
+ }
+ def moveFunc = { resFolder ->
+ File originalDir = file("${buildDir}/generated/res/react/${flavorPathSegment}/release/${resFolder}");
+ if (originalDir.exists()) {
+ File destDir = file("${buildDir}/../src/main/res/${resFolder}");
+ ant.move(file: originalDir, tofile: destDir);
+ }
+ }
+
+ moveFunc.curry("drawable").call()
+ moveFunc.curry("drawable-ldpi").call()
+ moveFunc.curry("drawable-mdpi").call()
+ moveFunc.curry("drawable-hdpi").call()
+ moveFunc.curry("drawable-xhdpi").call()
+ moveFunc.curry("drawable-xxhdpi").call()
+ moveFunc.curry("drawable-xxxhdpi").call()
+ moveFunc.curry("raw").call()
+ }
+
+
// Set up inputs and outputs so gradle can cache the result
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
outputs.dir(jsBundleDir)
diff --git a/node_modules/react-native/scripts/.packager.env b/node_modules/react-native/scripts/.packager.env
new file mode 100644
index 0000000..21a13cf
--- /dev/null
+++ b/node_modules/react-native/scripts/.packager.env
@@ -0,0 +1 @@
+export RCT_METRO_PORT=8081
\ No newline at end of file
Hallo zusammen! Könnte jemand eine PR für diese Änderungen machen? Das Bearbeiten von node_modules ist nicht ideal.
Hallo zusammen,
Ich verwende reaktionsnatives 0.63.2. Ich war auch mit diesem Problem konfrontiert und habe versucht, react.gradle zu bearbeiten, Ressourcen / drawable und alles zu löschen. Aber endlich hat das Ausführen des Befehls gradlew assembleRelease
für mich funktioniert.
Ich habe den Befehl "Reale-Native Bundle" nicht ausgeführt. gradlew assembleRelease
führt das reaktionsnative Bundle aus und erstellt apk selbst.
Dies funktioniert bei mir in
react-native 0.63.2
doLast { def flavorPathSegment = "" println targetName.toLowerCase(); android.productFlavors.all { flavor -> if (targetName.toLowerCase().contains(flavor.name.toLowerCase())) { flavorPathSegment = flavor.name } } def moveFunc = { resFolder -> File originalDir = file("${buildDir}/generated/res/react/${flavorPathSegment}/release/${resFolder}"); if (originalDir.exists()) { File destDir = file("${buildDir}/../src/main/res/${resFolder}"); ant.move(file: originalDir, tofile: destDir); } } moveFunc.curry("drawable").call() moveFunc.curry("drawable-ldpi").call() moveFunc.curry("drawable-mdpi").call() moveFunc.curry("drawable-hdpi").call() moveFunc.curry("drawable-xhdpi").call() moveFunc.curry("drawable-xxhdpi").call() moveFunc.curry("drawable-xxxhdpi").call() moveFunc.curry("raw").call() }
Hier die Patch-Datei
react-native+0.63.2.patch
diff --git a/node_modules/react-native/react.gradle b/node_modules/react-native/react.gradle index 6441d93..1eb4645 100644 --- a/node_modules/react-native/react.gradle +++ b/node_modules/react-native/react.gradle @@ -147,6 +147,33 @@ afterEvaluate { jsSourceMapsDir.mkdirs() } + doLast { + def flavorPathSegment = "" + println targetName.toLowerCase(); + android.productFlavors.all { flavor -> + if (targetName.toLowerCase().contains(flavor.name.toLowerCase())) { + flavorPathSegment = flavor.name + } + } + def moveFunc = { resFolder -> + File originalDir = file("${buildDir}/generated/res/react/${flavorPathSegment}/release/${resFolder}"); + if (originalDir.exists()) { + File destDir = file("${buildDir}/../src/main/res/${resFolder}"); + ant.move(file: originalDir, tofile: destDir); + } + } + + moveFunc.curry("drawable").call() + moveFunc.curry("drawable-ldpi").call() + moveFunc.curry("drawable-mdpi").call() + moveFunc.curry("drawable-hdpi").call() + moveFunc.curry("drawable-xhdpi").call() + moveFunc.curry("drawable-xxhdpi").call() + moveFunc.curry("drawable-xxxhdpi").call() + moveFunc.curry("raw").call() + } + + // Set up inputs and outputs so gradle can cache the result inputs.files fileTree(dir: reactRoot, excludes: inputExcludes) outputs.dir(jsBundleDir) diff --git a/node_modules/react-native/scripts/.packager.env b/node_modules/react-native/scripts/.packager.env new file mode 100644 index 0000000..21a13cf --- /dev/null +++ b/node_modules/react-native/scripts/.packager.env @@ -0,0 +1 @@ +export RCT_METRO_PORT=8081 \ No newline at end of file
Dankeschön
Hilfreichster Kommentar
Die Antwort von Mapsy sollte https://stackoverflow.com/a/52750886 helfen
Sie bearbeiten also im Grunde die Datei
und fügen Sie den doLast direkt nach dem doFirst- Block manuell hinzu.