首先先说下Apk包大小优化的好处:
1,减少app内存使用
2,用户在应用市场下载安装时,往往会将apk的大小作为一个考虑因素
下面分享我以往的优化经验:
1,使用svg
使用svg可以减少少量包体积,
使用Android studio 可以直接导入svg文件,需要注意的是:PSD不支持渐变和透明度
批量导入svg:svg2vector.jar
将svg图片生成为指定维度的png图片 gradle文件下,defaultConfig节点下加上:
5.0以下版本的适配: vectorDrawables.generatedDensities('xhdpi','xxhdpi','xxxhdpi')
5.0以上的版本适配: vectorDrawables.useSupportLibrary = true
2,着色器
这个方案主要针对,图片一样,但是颜色不一样的,我们经常要写一些selector,里面就包含选中的状态和默认状态,这两个
状态一般都只是图片一样而颜色不一样,这时候就可以使用着色器优化,我们只需要使用一套图片,然后通过着色器修改选中的颜色,一般配合selector使用。
ImageView 里面的 android:tint='';属性
3,资源打包配置
如果你项目只需要中文,则可以配置:
gradle文件下,defaultConfig节点下加上: resourceConfigs("zh-rCN")
减少一些string占用的体积
4,动态库的打包配置
配置cpu架构
gradle文件下,defaultConfig节点下加上: ndk{ abiFilters('armeabi') }
这个可以减少非常多包体积
5,移除无用的资源
使用Lint找到无用的资源并删除,属于物理删除
6,开启混淆
7,开启资源压缩
并不是物理的删除,文件会保留,但是内容会被压缩,图片会变成占位符,xml文件代码会被删除。
需要在raw/keep.xml配置
shrinkResources true
8,使用图片之前要压缩
推荐使用webp格式,android studio 右键自带webp转换
9,资源的混淆、7z压缩、对齐、签名
有第三方的方案,一般为腾讯的和美团的,
腾讯方案:https://github.com/shwenzhang/AndResGuard