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

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进行单独签名,也可以用其他的签名软件

你可能感兴趣的:(React,Native)