studio programacion móviles generar firmar desarrollo curso aplicaciones android react-native apk

programacion - generar apk android studio sin firmar



Reaccionar error de archivo duplicado nativo de Android al generar apk (5)

No ejecute el react-native bundle antes de ./gradlew assembleRelease .

Para mí, estaba ejecutando el react-native bundle antes de ejecutar ./gradlew assembleRelease .

Recibía un mensaje de error duplicado similar con uno de mis activos.

Al ver la salida de ./gradlew assembleRelease , me di cuenta de que construye el paquete JS por sí mismo (gracias a la apply from: "../node_modules/react-native/react.gradle" en su archivo build.gradle ) así fue no es necesario ejecutar manualmente el react-native bundle .

Si simplemente no ./gradlew assembleRelease react-native bundle antes de ejecutar ./gradlew assembleRelease todo funcionó muy bien.

Probé el Release APK y las cargas del paquete JS bien, incluidas todas las imágenes.

Mi única preocupación es si se --sourcemap-output mapas de origen --sourcemap-output (para Bugsnag). Si no, estoy seguro de que hay una manera de que ./gradlew assembleRelease genere también. Simplemente no lo he probado todavía.

Cuando intento generar Android apk usando ./gradlew installRelease , recibo este error en la consola:

~/React-Native/mockingbird/android/app/build/intermediates/res/merged/release/drawable-mdpi-v4/src_resources_img_loading.gif: error: Duplicate file. ~/React-Native/mockingbird/android/app/build/intermediates/res/merged/release/drawable-mdpi/src_resources_img_loading.gif: Original is here. The version qualifier may be implied.

Intenté Build->Clean Project través de Android Studio y ejecuté ./gradlew installRelease nuevo; Tampoco funcionó.

Además, intenté eliminar la carpeta de build , pero tampoco ayuda.


Al momento de escribir, las versiones más recientes de React Native (> 0.57.0) han aumentado el nivel de envoltorio de Gradle a 4.4 y el complemento de Gradle a 3.1.4, como lo indica el changelog . Esto tiene el efecto de hacer que el proceso de construcción de Gradle almacene los resultados de AAPT, que ahora son necesarios , dentro de un directorio diferente al de anteriormente.

En términos de la asombrosa solución de , necesitamos hacer una pequeña modificación para evitar colisiones de recursos duplicados, ya que parece apuntar al directorio antiguo y no al directorio generated la aplicación. Al cambiar el directorio de destino donde se combinan estos archivos duplicados después de que se hayan generado los recursos, aún podemos deducir los recursos.

El react.gradle existente se refiere a la ruta a continuación:

$buildDir === <project-working-directory>/android/app/build

Las rutas de archivos duplicadas pueden aparecer entre:

file("$buildDir/../src/main/res/drawable-${resSuffix}") file("$buildDir/generated/res/react/release/drawable-${resSuffix}")

Como solución alternativa, podemos actualizar la solución de Nhan de la siguiente manera (asegúrese de incluir esto dentro de currentBundleTask después de la declaración de doFirst en react.gradle :

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() }


Dar algunos consejos para usted, espero que sea trabajo. (probado con "reaccionar": "16.2.0", "reaccion-native": "0.54.2")

Personalice node_modules / react-native / react.gradle para resolver el error Duplicate file perfectamente. Agregue el siguiente código en el bloque de creación de currentBundleTask ( después del bloque doFirst )

doLast { def moveFunc = { resSuffix -> File originalDir = file("${resourcesDir}/drawable-${resSuffix}") if (originalDir.exists()) { File destDir = file("${resourcesDir}/drawable-${resSuffix}-v4") 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() }

Puedes crear un script para hacerlo automáticamente.

  1. Crear un archivo android-react-gradle-fix
  2. Crear script android-release-gradle-fix.js archivo
  3. Actualizar el archivo package.json :

    "scripts": { "postinstall": "node ./android-release-gradle-fix.js" },

¡Eso es! Ejecutar npm install para obtener impresionante.

Nota: si ejecuta npm install en ci como jenkins, puede obtener un error: postinstall: cannot run in wd %s %s (wd=%s) node => simplemente use npm install --unsafe-perm


Eliminar los archivos que pueda tener en:

android/app/src/main/res/drawable-mdpi/ android/app/src/main/res/drawable-xhdpi/ android/app/src/main/res/drawable-xxhdpi/

Ejecutar Build de nuevo, esto solucionó el problema para mí.


Para mí es ./gradlew assembleRelease eliminar la carpeta: android/build y ejecutar ./gradlew assembleRelease nuevo.