Posterior a observar en diversos repositorios y sitios de internet al final hemos dado con la solución que te compartimos pronto.
Solución:
Después de probar muchas soluciones, encontré que solo dos soluciones funcionan. Aquí están
Solución 1:
Después de empaquetar, elimine el drawable
carpeta de Android Studio
. Podrías encontrar esto en android/app/src/main/res/drawable
Solucion 2:
POR FAVOR NO USE LA SOLUCIÓN # 2, SEGÚN LA PROPUESTA DEL AUTOR ORIGINAL. Todos los paquetes debajo
node_modules
se generan, y cualquier cambio que realice se perderá cuando elreact-native
el paquete se reinstala / actualiza.
En esta solución, no es necesario eliminar ninguna carpeta dibujable. Simplemente agregue el siguiente código en el reaccionar gradle archivo que puedes encontrar debajo node_modules/react-native/react.gradle
sendero
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()
Como referencia, agregaré el reaccionar gradle código de archivo aquí
import org.apache.tools.ant.taskdefs.condition.Os
def config = project.hasProperty("react") ? project.react : [];
def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
def entryFile = config.entryFile ?: "index.android.js"
def bundleCommand = config.bundleCommand ?: "bundle"
def reactRoot = file(config.root ?: "../../")
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
def bundleConfig = config.bundleConfig ? "$reactRoot/$config.bundleConfig" : null ;
afterEvaluate
android.applicationVariants.all def variant ->
// Create variant and target names
def targetName = variant.name.capitalize()
def targetPath = variant.dirName
// React js bundle directories
def jsBundleDir = file("$buildDir/generated/assets/react/$targetPath")
def resourcesDir = file("$buildDir/generated/res/react/$targetPath")
def jsBundleFile = file("$jsBundleDir/$bundleAssetName")
// Additional node and packager commandline arguments
def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
def extraPackagerArgs = config.extraPackagerArgs ?: []
def currentBundleTask = tasks.create(
name: "bundle$targetNameJsAndAssets",
type: Exec)
// Expose a minimal interface on the application variant and the task itself:
variant.ext.bundleJsAndAssets = currentBundleTask
currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)
// registerGeneratedResFolders for Android plugin 3.x
if (variant.respondsTo("registerGeneratedResFolders"))
variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
else
variant.registerResGeneratingTask(currentBundleTask)
variant.mergeResources.dependsOn(currentBundleTask)
// packageApplication for Android plugin 3.x
def packageTask = variant.hasProperty("packageApplication")
? variant.packageApplication
: tasks.findByName("package$targetName")
def resourcesDirConfigValue = config."resourcesDir$targetName"
if (resourcesDirConfigValue)
def currentCopyResTask = tasks.create(
name: "copy$targetNameBundledResources",
type: Copy)
group = "react"
description = "copy bundled resources into custom location for $targetName."
from resourcesDir
into file(resourcesDirConfigValue)
dependsOn(currentBundleTask)
enabled currentBundleTask.enabled
packageTask.dependsOn(currentCopyResTask)
def currentAssetsCopyTask = tasks.create(
name: "copy$targetNameBundledJs",
type: Copy)
group = "react"
description = "copy bundled JS into $targetName."
if (config."jsBundleDir$targetName")
from jsBundleDir
into file(config."jsBundleDir$targetName")
else
into ("$buildDir/intermediates")
into ("assets/$targetPath")
from jsBundleDir
// Workaround for Android Gradle Plugin 3.2+ new asset directory
into ("merged_assets/$targetPath/merge$targetNameAssets/out")
from jsBundleDir
// mergeAssets must run first, as it clears the intermediates directory
dependsOn(variant.mergeAssets)
enabled currentBundleTask.enabled
packageTask.dependsOn(currentAssetsCopyTask)
Crédito: ZeroCool00 mkchx
(ACTUALIZADO)
Esta solución funciona para mi
rm -rf ./android/app/src/main/res/drawable-*
rm -rf ./android/app/src/main/res/raw
En mi caso, la compilación falló porque hay recursos duplicados en mi proyecto de Android (dentro de la carpeta de Android), estas dos líneas son necesarias para eliminar los recursos duplicados, eso es todo.
Para generar apk de depuración
"debug-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 && cd .."
Para generar apk de lanzamiento
"release-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/build/intermediates/res/merged/release/ && rm -rf android/app/src/main/res/drawable-* && rm -rf android/app/src/main/res/raw/* && cd android && ./gradlew assembleRelease && cd .."
Funciona bien para mi react-native> = 0.61.2 proyecto usando el código anterior en mi guiones Sección de package.json expediente.
Te mostramos las comentarios y valoraciones de los usuarios
Si entiendes que te ha sido útil nuestro post, nos gustaría que lo compartas con más programadores y nos ayudes a extender esta información.