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.
- Crear un archivo
android-react-gradle-fix
- Crear script
android-release-gradle-fix.js
archivo 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.