shrinkResources 的使用

Posted dx我是大雄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shrinkResources 的使用相关的知识,希望对你有一定的参考价值。

一.背景

对于缩小APk大小,除了开启混淆

minifyEnabled true
还有使用

shrinkResources true
说下这两者的区别

minifyEnabled 这个是用来开启删除无用代码,比如没有引用到的代码

shrinkResources 用来开启删除无用资源,也就是没有被引用的文件(经过实测是drawable,layout,实际并不是彻底删除,而是保留文件名,但是没有内容,等等),但是因为需要知道是否被引用所以需要配合mififyEnable使用,只有当两者都为true的时候才会起到真正的删除无效代码和无引用资源的目的

Android官方文档


二.实际动手试试

同样的资源代码

1.只有minififyEnable false   或者 minififyEnable false  && shrinkResources true

APK大小为1.39M

资源文件和layout都存在且是有内容的

2.只有minifyEnable true

866K  

资源文件和layout都存在且是有内容的

3.minifyEnable true && shrinkResources true

资源文件在但是没有内容大小都变成67字节,layout文件内容被清空

4.minifyEnable true && shrinkResources true 在res/raw/keep.xml(避免被误删除)写了配置的

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
           tools:keep="@layout/activity_four,@drawable/no_reference_but_keep"/>
没有在配置文件中声明保存的文件没有内容,声明保存的文件有内容(资源文件和layout文件)


注意:string.xml中没有被引用的怎么设置都不会被删除




可以通过gradlew clean assembleRelease - info来获得APK缩减资源的概览

当您压缩资源时,Gradle Console 会显示它从应用软件包中移除的资源的摘要。例如:

:android:shrinkDebugResources
Removed unused resources: Binary resource data reduced from 2570KB to 1711KB: Removed 33%
:android:validateDebugSigning

以上是关于shrinkResources 的使用的主要内容,如果未能解决你的问题,请参考以下文章

当我使用proguard并启用minify和shrinkresources时,Retrofit body request是空白的

Android Gradle 插件BuildType 编译类型配置 ⑤ ( renderscriptDebuggable 配置 | shrinkResources 配置 )

解决 release-stripped.ap_' specified for property 'resourceFile' does not exist.

应用优化记录

应用优化记录

无法使用 ProGuard 实例化 AndroidPlatform 类