Android打包编译shrinkResources true报错解决方案

本文章分析解决在android打包编译时,配置了shrinkResources为true移除无用资源时打包报错的解决方案

1 Android 打包失败

Android 项目打包或者在 flutter项目中打包 apk 打包失败,异常日志如下

         
* What went wrong:                                                      
A problem occurred evaluating root project 'android'.                   
> A problem occurred configuring project ':app'.                        
   > Removing unused resources requires unused code shrinking to be turned on. See http://d.android.com/r/tools/shrink-resources.html for more information.
                                                                        
* Try:                                                                  
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

2 解决方案

在android 项目目录下的 build.gradle 文件中配置

        release {
            signingConfig signingConfigs.app_key
            是否对代码进行混淆
            minifyEnabled false
            // A problem occurred configuring project ':app'. minifyEnabled 与 shrinkResources 搭配使用
            shrinkResources false
            //指定混淆的规则文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

或者

        release {
            signingConfig signingConfigs.app_key
            是否对代码进行混淆
            minifyEnabled true
            // A problem occurred configuring project ':app'. minifyEnabled 与 shrinkResources 搭配使用
            shrinkResources true
            //指定混淆的规则文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

就是说 如果我们需要移除项目无用资源,就必须同时打开混淆配置。

4 Android打包设置shrinkResources true引发的问题分析

当配置 shrinkResources 的值为 true 时,gradle 在打包编译的时候会将未引用的例如图片等资源文件移除。
那么常见的一个问题就是例如聊天或者论坛中使用到的表情等解析,因为这一类的表情图片是根据聊天信息中的标识匹配显示的,而且是动态获取资源id,在打包时示引用,会被当作无用资源移除,造成的结果就是无法解析显示表情图片

5 解决方案

保留使用到的图片,使用是并没有在程序中引用,在打包时也开启了 shrinkResources 的值为 true 移除无用资源,可做如下配置

在raw下配置keep.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@mipmap/ic_like_icon,@mipmap/ic_share_icon">

</resources>

例如上述配置中,保留 mipmap 目录下的未引用的图片 ic_share_icon.png 、ic_like_icon.png


完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早起的年轻人

创作源于分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值