怎么做到包体积超小,功能还要超多,是一件很不容易的事情。
前言、瘦身优化的好处
Android瘦身优化的好处主要包括以下几个方面:
- 提高下载转化率:小型化的APK可以减少用户的下载时间和流量消耗,从而提升下载转化率。大型APK通常需要更多的流量和时间来下载,这可能会让用户望而却步。通过瘦身优化,可以显著减少APK的大小,使用户更容易下载和安装应用12。
- 加快安装速度:较小的APK文件在安装过程中需要处理的数据量更少,因此安装速度更快,减少了用户的等待时间2。
- 减少内存占用:安装解压后的APK可能会占用更多的存储空间。通过瘦身优化,可以减少安装后的内存占用,使得应用更加适合在低端设备上运行1。
- 提升加载速度:优化资源文件和代码可以减少不必要的加载项,从而加快应用的启动速度和页面加载速度,提升用户体验。
- 降低服务器带宽成本:对于应用市场和应用开发者来说,较大的APK会占用更多的服务器带宽和存储空间。通过瘦身优化,可以降低服务器带宽成本,特别是在应用市场如Google Play对超过100MB的应用有特殊的上传要求时
一、清理无用资源
- 使用android studio 下面Refactor->Remove unused Resource来删除无用资源
- 使用Lint工具检查出无用资源
- 开启shrinkResources去除无用资源:在build.gradle 里面配置shrinkResources true
- 删除无用的语言资源
arduino
android {
defaultConfig {
resConfigs "zh"
}
}
- 清理第三方库中冗余代码
二、图片资源优化
- 使用压缩过的图片
- 只用一套图片 对于绝大对数APP来说,只需要取一套设计图就足够了。从内存占用和适配的角度考虑,这一套图建议放在xhdpi文件夹下
- 使用不带alpha值的jpg图片: 对于非透明的大图,jpg将会比png的大小有显著的优势,虽然不是绝对的,但是通常会减小到一半都不止
- 使用tinypng有损压缩: 支持上传PNG图片到官网上压缩,然后下载保存,在保持alpha通道的情况下对PNG的压缩可以达到1/3之内,而且用肉眼基本上分辨不出压缩的损失
- 使用webp格式: webp支持透明度,压缩比比jpg更高但显示效果却不输于jpg,从Android 4.0+开始原生支持,但是不支持包含透明度,直到Android 4.2.1+才支持显示含透明度的webp,使用的时候要特别注意。
- 使用svg 矢量图是由点与线组成,和位图不一样,它再放大也能保持清晰度,而且使用矢量图比位图设计方案能节约30~40%的空间,现在谷歌一直在强调扁平化方式,矢量图可很好的契合该设计理念。有如下优点:
1)占用存储空间小
2)无极拉伸不会出现锯齿,可以照顾不同尺寸的机型
3)Android Studio自带很多资源 - 使用shape:特别是在扁平化盛行的当下,很多纯色的渐变的圆角的图片都可以用shape实现,代码灵活可控,省去了大量的背景图片。
- 使用着色方案: 相信你的工程里也有很多selector文件,也有很多相似的图片只是颜色不同,通过着色方案我们能大大减轻这样的工作量,减少这样的文件
- 对打包后的图片进行压缩: 使用7zip压缩方式对图片进行压缩,建议使用微信的AndResGuard
- 设计层面:如何选择??
1)SVG适用场景: 图标
2)PNG适用场景: LOGO
3)JPG适用场景: 高保真图像(照片)
4)webp适用场景: 网络传输
5)Android 5.0之前要适配的话, 不采用SVG的这种替换方案,直接上PNG
三、资源动态加载
- 在线化素材库
- 皮肤插件化动态加载
- 模块插件化,动态加载
四、lib库优化
- 使用一套V7或者V8的库
- so插件化,让其动态加载
五、压缩资源
使用7zip压缩资源:对于assets或者raw文件夹中的资源,可以使用7zip压缩,使用时进行解压。
六、代码混淆:
arduino
android {
buildTypes {
release {
minifyEnabled true
}
}
}
为什么代码混淆可以让apk变小?
1)可以删除注释和不用的代码。
2)将java文件名改成短名
3)将方法名改成短名
七、资源(res)混淆 :
资源混淆简单来说希望实现将res/drawable/icon,png变成res/drawable/a.png,
或我们甚至可以将文件路径也同时混淆,改成r/s/a.png。
建议使用微信的AndResGuard
八、使用微信AndResGuard:
使用微信AndResGuard对资源混淆并且压缩图片res等资源
九、Facebook的redex优化字节码:
redex是facebook发布的一款android字节码的优化工具.
十、极致瘦身
全动态插件化,让App做成了没有任何业务的一个空壳子
参考我前面文章:
零反射,零HooK,全动态化,插件化框架,全网唯一结合启动优化的插件化架构
大型项目架构:全动态插件化+模块化+Kotlin+协程+Flow+Retrofit+JetPack+MVVM+极限瘦身+极限启动优化+架构示例+全网唯一
十一、总结
本文重点介绍了Android的Apk瘦身优化需要时10个要点。