ReactNative通过gradlew assembleRelease打包的时候会报Duplicate file
/android/app/build/intermediates/res/merged/release/drawable-hdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png
android/app/build/intermediates/res/merged/release/drawable-hdpi-v4/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png: error: Duplicate file.

通过 GitHub issues里提到的解决方案

I found the root cause is that old version's packager collect resources (image etc.) and put under $(rn_project)\android\app\src\main\res, while newer version put them under $(rn_project)\android\app\build\intermediates\res\merged$(buildType). It brings duplication which leads to failure of task 'processReleaseResources'. And it also explains why new created project works well. When you have an old RN project upgrading to newer version, just delete directories like 'drawable-xxxx' (ATTN:no 'v?' postfix) under $(rn_project)\android\app\src\main\res and wolrd will be nice.

简单翻译一下就是,旧版本的打包方式是把资源放在了$(rn_project)\ android \ app \ src \ main \ res下,新版的打包方式是在编译的$(rn_project)\android\app\build\intermediates\res\merged$(buildType)下,所以会造成重复文件的问题,导致导致任务“processReleaseResources”失败


解决方法是把$(rn_project)\android\app\src\main\res文件夹下的带有drawable-xxxx的文件夹删掉就可以了

另一个说法是把:node_modules/react-native/local-cli/bundle/assetPathUtils.js这个文件里面getAndroidAssetSuffix方法改为
function getAndroidAssetSuffix(scale) {
  switch (scale) {
    case 0.75: return 'ldpi-v4';
    case 1: return 'mdpi-v4';
    case 1.5: return 'hdpi-v4';
    case 2: return 'xhdpi-v4';
    case 3: return 'xxhdpi-v4';
    case 4: return 'xxxhdpi-v4';
  }
}
@AvatarQing 把这个统一集成到了react.gradle 里面完美的解决掉了drawable-xxxx重复文件的问题

在react.gradle里的def currentBundleTask = tasks.create方法里面最后面添加:

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

}

第一种方法完美解决各种复杂项目结构,第二种方法也行
共勉

GitHub issues

ReactNative ./gradlew assembleRelease打包失败Duplicate file相关推荐

  1. react-native Android release打包失败

    npm run build报错(android) react-native 0.5x在安卓环境 gradle 3.x版本下编译release版本的时候提示编译失败,但是debug模式下是没有问题的. ...

  2. ReactNative windows下打包生成安卓apk

    create-react-native-app 运行npm run eject后根目录会产生一个andriod目录和ios目录.里面就是运行打包的配置文件. 如果你是用react-native-cli ...

  3. 安卓转战React-Native之签名打包成Apk并极速多渠道打包

    前言 搞安卓的开发应该知道开发好的apk都是需要上传到应用市场给用户下载的,当然有些公司的产品是不用上传到应用市场的(比如我们公司放七牛云)但是也需要放在云上面给用户下载.react-native直接 ...

  4. 打包失败,Gradle构建失败问题良心解决,看完这个一定让你轻松

    打包失败问题良心解决,看完这个一定让你轻松 问题 CommandInvokationFailure: Gradle build failed. C:\Program Files\Java\jdk1.8 ...

  5. 17、uwp 打包失败记录

    今天在打包时,总是打包失败, visual studio 报错误: 严重性 说明 代码 项目 文件 行 禁止显示状态 错误 Error info: error 80080204: All app pa ...

  6. 解决打包软链接打包失败问题

    一般情况下打包文件时,如果直接打包软连接会导致打包失败,即没有将要打包的内容打包进去,这里提供tar打包参数-h [root@localhost ~]# ll /etc/rc.local lrwxrw ...

  7. hbuilder ios 打包失败,无法导入p12证书的解决方案

    问题描述: 在profile描述文件和私钥证书通过hbuilder ios 打包成功过的前提下,突然遇到打包失败的问题,问题详情是无法导入p12证书. 探索过程: 本着遇到问题先自省的态度,重复打包了 ...

  8. [react-native]-ReactNative为iOS打包ipa文件

    2019独角兽企业重金招聘Python工程师标准>>> ReactNative为iOS打包ipa文件: 点击查看 转载于:https://my.oschina.net/xiaoLoo ...

  9. UE4学习-打包失败 缺失UE4Game二进制文件

    文章目录 补充 今天研究蓝图转C++的时候,突发发现我打包失败,提示缺失UE4Game二进制文件,具体的原因,现在我也不知道,不过我找到一个解决办法,能够让我的程序打包成功. 文件->打包项目- ...

最新文章

  1. “数学不好,干啥都不行!”资深程序员:别再瞎努力了!
  2. 在layui中使用ajax传值给后台,浅谈layui 数据表格前后台传值的问题
  3. pandas 增加行、列
  4. 在虚拟机中安装Windows Server 2008企业版
  5. Chain of responsibility(职责链)--对象行为型模式
  6. java nginx https_docker nginx 配置ssl,实现https
  7. ssh时,密码输入框(密码输入提示)很晚才出现的解决方法
  8. python程序代码解析_Python源码分析3 – 词法分析器PyTokenizer
  9. AMD发布APPML源码,构建clMath库
  10. 怎样查看class文件的jdk版本号
  11. c语言输入一串数字存入数组_在Excel中快速输入,竟是输入一串数字?
  12. 2016全球十大主流ERP厂商“新鲜出炉”!
  13. 北大软微计算机技术硕士复试,【高分学长带你飞】北大软微408学长超详经验贴...
  14. 2012年8月27日|第二章:编程语言概述|总结
  15. 记一次重大的生产事故
  16. 用字体,每次都要先开软件,ifonts闪退?不好用怎么办
  17. mySql中Truncate的用法
  18. java拼图游戏系统总体方案_基于JAVA的拼图游戏的设计与实现(含录像)
  19. HTML5 canvas 240行代码实现粒子漩涡特效
  20. 2011年6月9日中国互联网公司市值排名

热门文章

  1. ALLEGRO的约束规则的设置教程,手把手教你!
  2. 利用Python暴力破解邻居家WiFi密码
  3. 国产FPGA(紫光同创)—— 数据采集及千兆以太网传输(一)
  4. NAT穿越(NAT-T)原理
  5. Vue接入Google Adsense
  6. 中国电子级高性能聚酰亚胺薄膜市场十四五规划与发展战略建议报告2022~2028年
  7. ae软件安装计算机丢失,安装adobe ae等软件提示找不到msvcp110.dll、msvcp
  8. python 网站爬虫需要哪些技术?
  9. 硬件篇——阻容一阶滤波电路
  10. Python turtle画图库画姓名实例(Python入门)