Apk体积优化实战总结

Apk体积优化实战总结

今日领导在公司内部做了一个关于ios app性能优化的技术分享,就突然对Android端的apk体积优化有了兴趣,于是跟领导讨论了一下,就开始了第一次体积优化的实践。经过几天的工作,最后成功减少了22%左右的大小,最后也成功上线,下面就根据自己实践的经历,做一次体积优化总结。

前期储备知识

apk结构

技术调研

首先着手调研了一下Android apk包体优化的技术方案,包括:大图压缩/采用webp图片格式,svg格式替换中小图片,无用资源清除,so库优化,代码混淆/资源混淆等。

  1. 移除无用资源。
    分物理移除与非物理移除。
    物理移除:
    Refactor -> Remove Unused Resources
    Analysis -> Run inspection by name,输入unused resources,对项目进行检查,手动删除。
    物理移除有风险,删除前需要检查,使用getIdentifier()方式动态调用资源要检查资源是否被误删!!!!!
    非物理移除:
    buildType中设置 shrinkResouces = true,在打包过程中移除无用的资源。

  2. 图片处理。
    大图可考虑压缩。(如tinyPng)
    可使用svg格式的图片作为图标。

  3. library库优化。
    对依赖库中重复的jar包进行整合等。

  4. 开启代码混淆。
    开启代码混淆可以减小apk的体积。

  5. 资源打包配置优化。
    如,移除不需要的语言如 :resConfig("zh-rCN),主要是在build.gradle中进行一些配置。

  6. 代码优化。
    及时去除无用代码
    减少枚举类的使用,使用注解@Indef

项目着手实践

  1. 第一步,首先从jenkins 下载apk包,拖取到AS中,便可以看到apk的组成。
    在这里插入图片描述

  2. 第二步,根据这些图片,找到项目中没有被使用过的界面,进行删除。

  3. 第三步,通过Analysis -> Run inspection by name,搜索unused resources,找到没有被使用过的资源文件,布局文件等,进行删除(注意)

  4. 第四步,重复进行第三步,因为删除无用布局后,可能有些图片资源又变成了无用资源,需要进行再一次的检查删除。

  5. 第五步,项目中有@Deprecated标记的页面,进行清理。
    最终结果:
    在这里插入图片描述

可优化的潜力分析

考虑到可能出现的风险问题,没有进行彻底的清理,所以还有可优化的潜力。

  1. 代码质量的优化减少枚举类的使用,一个独立的枚举类,会占用1到1.4k的空间,改为@Indef注解。
  2. 图片的压缩目前只对100k以上的图片进行了压缩,剩余图片还可以进行压缩处理。

采坑点

  1. 无用资源依然被打包进了apk中。
    原因是A布局虽然没有被使用,但是其里面的控件B的id被调用,所以仍然会被打包进apk中。
  2. 动态加载一些图片资源导致的错误。一些图片资源在代码里动态加载,AS lint没有检测到图片资源被使用,导致删除图片资源后出现一些bug。

总结

  1. 无用代码以及无用资源等,一定要及时清除。
  2. 有大图资源时,首先考虑优化其大小。
  3. apk体积优化是个持久性的工作,每个版本都要做体积优化,不能只做一次。

这只是我根据项目的实际情况进行的优化,主要只进行了资源的优化,代码未进行多少优化,其余的混淆,资源配置都已经设置过了。如果建议,望不吝赐教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值