ReactNative打Release生产包报错error: failed parsing overlays

本文详细介绍如何使用ReactNative生成静态JSBundle文件及打Release生产包的过程,包括常见错误如error:failedparsingoverlays的解决方法,以及如何通过修改assetPathUtils.js和设置gradle属性来避免资源文件冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ReactNative打Release生产包报错error: failed parsing overlays

一,生成静态JS Bundle文件

在项目根目录下执行以下命令:

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/

具体含义为
react-native bundle
–platform android //平台类型
–dev false //是否是开发
–entry-file index.android.js //输入
–bundle-output android/bundle/index.android.bundle //输出
–assets-dest android/assets //资源文件

编译index.js, 在assets文件夹下多出两个文件
index.android.bundle index.android.bundle.meta

二, 可以通过以下两种方式来打ReactNative Release 生产包

1,在代码android目录下有一个脚本文件gradlew,直接运行该脚本文件:

cd android && ./gradlew assembleRelease

2,在Android Studio中将Build Variant修改为release,然后Build APK

在编译过程中会报以下错误:
注:#Home:项目根目录
2.1,#Home/android/app/build/intermediates/res/merged/release/drawable-xhdpi/app_images_common_preservation.png: error: uncompiled PNG file passed as argument. Must be compiled first into .flat file…
error: failed parsing overlays.

解决办法:在android/gradle.properties文件添加android.enableAapt2=false

2.2,#Home/android/app/build/intermediates/res/merged/release/drawable-xxhdpi/app_images_common_preservation.png: error: Duplicate file.
#Home/android/app/build/intermediates/res/merged/release/drawable-xxhdpi-v4/app_images_common_preservation.png: Original is here. The version qualifier may be implied.
原因:Gradle2.3之后,离线打包的路径都会在drawable-xxx-v4中,原版的离线路径在drawable-xxx中,所以导致图片重复问题
解决办法:修改assetPathUtils.js
assetPathUtils.js文件路径:node_modules\react-native\local-cli\bundle\assetPathUtils.js
修改:getAndroidAssetSuffix方法

修改前:

 function getAndroidAssetSuffix(scale) {
   switch (scale) {
    case 0.75: return 'ldpi';
    case 1: return 'mdpi';
    case 1.5: return 'hdpi';
    case 2: return 'xhdpi';
    case 3: return 'xxhdpi';
    case 4: return 'xxxhdpi';
   }
 }

修改后:

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';
   }
 }

至此,编译成功!

三,签名

将生成的app-release-unsigned.apk文件用360signer进行单独签名,也可以用其他的签名软件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值