Resource and asset merger: Duplicate resources - RN

一波未平一波又起,使用 ReactNative 开发的项目迭代过程中集成了 react-native-image-picker 类库后苹果端运转还算相对稳定,注意添加两端的功能访问的系统权限后正常调用方法实现业务逻辑即可;
因之前一直使用苹果端 iPad 开发调试,后打包 ipa 包也很顺利,但在打包安卓端 apk 的时候遇到了重重问题 。。。
先是 index.android.bundle is packaged correctly for release 的问题,抛出了如下异常:

Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.

其次,调试好后再次尝试打包 debug 的时候顺利安装至安卓 pad(注:此处分别尝试了三星 pad 和小米 pad 均正常运行,系统版本是 4.4.4 KTU84P 和 6.0.1)但是尝试打包 release 的时候却 gg 抛出了如下异常:

Resource and asset merger: Duplicate resources

大致问题是项目中资源文件重复导致打包异常,再 debug 之前 index.android.bundle is packaged correctly for release 该异常的时候执行了如下命令:

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

之后安卓项目工程中 build 生成了很多的资源文件,同时也包含了如上图中文件夹中的资源图片。

 

解决办法

首先,清除了 mipmap 中除程序 icon 图片之外的资源文件;
其次,定位到 ReactNative 项目工程中 node_modules 下的 node_modules/react-native/react.gradle 文件中,在 doFirst 代码块下添加 doLast 代码块,具体代码 code 如下:

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

再其次,清除安卓项目中之前的打包缓存,打开安卓 Android Studio 导航栏中选择 build 下的 clean project
最后,再次通过 ReactNative 命令执行打包操作,cd 到 android 目录执行打包命令即可。

cd android
./gradlew assembleRelease

以上便是此次分享的全部内容,希望能对大家有所帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值