一、图片资源
1)在条件允许下,可以将图片进行有陨压缩。TingPng--一个图片压缩网站,在上面压过的图基本都能小很多。
2)png->jpg,可以将非透明的大图png转成jpg格式
3)jpg->webp,如果png大图转成jpg还是很大,或者想压的更小,而尽量不降低画质,那么可以考虑一下webp。但android4.0 才开始支持webp(要注意的一点是webp的解码较慢,不过是毫秒级别的,影响较小)
https://isux.tencent.com/introduction-of-webp.html
4)可以使用svg 使用方便,节约空间。(可缩放矢量图形。它和位图(Bitmap)相对,SVG不会像位图一样因为缩放而让图片质量下降格式的图片)
二、去除多余资源
1)去除多余语言资源包。
通过配置resConfigs可以选择只打包哪几种语言,进而去掉各种aar包中全世界的语言,尤其是support包中的。build文件中配置
defalultConfig{
resConfigs “zh”
}
2)去除无用资源
开发中难免项目中总是会有些资源明明没有被使用却一直放在那没有被及时清理,可以通过android studio 工具lint去除
菜单栏Analyze-> Inspect code
3)去除第三方包中没有用到so文件
像fresco会提供各大平台的so文件,打包时会跟着打包进去.同样可以在build文件中配置,过滤不必要的so文件.
4)通过shrinkResources 打包时自动去除多余的资源
但需注意的是需minifyEnabled 开启才有用,混淆本身就能减少apk的大小
三、 其他
1)通过AndroResGuard资源混淆工具
混淆除了增加代码安分,还能减小apk的大小。但gradle里配置的混淆是针对java文件,而AndroResGuard是一个资源混淆工具,他通过两方面来减小apk的大小,一是资源文件的混淆,二是相关文件的压缩。
降低包体的原理是因为其采用了7z极限压缩,将项目里使用到的资源文件,图片极限压缩,同时还会利用超短路径,将文件信息和签名信息变短(例如res/drawable/emoji.png会缩短成r/d/e)
https://github.com/shwenzhang/AndResGuard
2)动态下载资源
将某些资源放到网上,如表情、字体、js代码等(如果只是某些logo或特殊的字用到了字体,可将字体分离出来)
3)压缩资源
如果某些资源必需和apk一并发布,对于这样的文件可以采用压缩,等有需要时才解压。如asset下的资源。
4)提高布局的复用性
5)相关业务模块插件化