官网:https://developer.android.com/studio/build/shrink-code
要启用资源压缩
请在 build.gradle 文件中将 shrinkResources 属性设置为 true(在用于代码压缩的 minifyEnabled 旁边)。例如:
android {
...
buildTypes {
release {
//资源缩减
shrinkResources true
//源代码混淆 true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
//资源缩减
shrinkResources true
//源代码混淆 true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
自定义要保留的资源
如果您有想要保留或舍弃的特定资源,请在您的项目中创建一个包含 <resources> 标记的 XML 文件,并在 tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。这两个属性都接受逗号分隔的资源名称列表。您可以使用星号字符作为通配符。路径:res/raw/keep.xml。构建不会将该文件打包到 APK 之中。
res---raw---keep.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:discard="@color/selector_tint_color"
tools:keep="@layout/activity_test1,@layout/activity_test2"
tools:shrinkMode="strict"/>
<!--discard:做严格检查-->
<!--keep :不做严格检查-->
<!--shrinkMode="strict" :该模式只保留在代码或者资源文件中明确引用的资源-->
<!--shrinkMode="safe" :该模式会保留所有明确引用的资源以及可能被 Resources.getIdentifier() 动态引用的资源-->
项目中activity_test资源被用了,activity_test1、activity_test2被keep住了,activity_test3没被keep住,也没被用,这时rebuild之后,看效果
apk里面的activity_test、activity_test1、activity_test2都有代码,而activity_test3里面代码没有了,而且占用内存极小,不需要做文件删除,就可以使不用的资源最小化
APK优化(一)之SVG--------------解决大量的套图问题
APK优化(二)之Tint着色器-------------减少apk体积
APK优化(三)之资源打包配置----resources.arsc
APK优化(四)之.so动态库打包配置
APK优化(五)之移除无用资源,物理删除
APK优化(六)之代码混淆
APK优化(七)之启用shrinkResources资源缩减 ,不需要物理上的删除
APK优化(八)之启用webp转换插件-----图片变小
APK优化(九)之资源res文件混淆和7ZIP压缩