Gradle插件在包体积优化中的应用

在安卓app包里面,占体积的主要是三块

  • 一块是dex文件,也就是java/kotlin代码,这块基本上都是用了Proguard去 压缩(Shrinking)、优化(Optimization)、混淆(Obfuscation),基本上proguard之后再优化的空间已经不大了。当然可以采用插件化去动态下发。
  • 一块是so库,如果不是自己本公司开发的so库,基本是没有办法去优化三方库的so体积的。当然依然可以使用云端动态下发。
  • 一块就是资源图片,当然依然是可以图片服务器通过glide等从云端拉取。这里主要讲采用gradle插件或工具来便捷的对图片资源的优化。

1、 使用 Lint 的 Remove Unused Resource

APK 的资源主要包括图片、XML,与冗余代码一样,它也可能遗留了很多旧版本当中使用而新版本中不使用的资源,这点在快速开发的 App 中更可能出现。我们可以通过点击右键,选中 Refactor,然后点击 Remove Unused Resource => preview 可以预览找到的无用资源,点击 Do Refactor 可以去除冗余资源。如下图所示:

removeunuse.png

2、检测重复资源

项目开发中可能经常出现不同名但是其实是同张图片或者shape的情况,这个时候要用肉眼去观察其实是一件很难也很费时间的事情,对于文件的唯一性,我们可以通过md5来区分是否是同一资源,这里使用写了md5校验文件的插件。

checkDuplicate.png

3、检测大图上传cdn图片服务器

在项目中,有些很大的图片其实没有必要全部都放在本地。正常情况100k以上的图片就需要放到图片服务器了,那么开发人员那么多,总是会有粗心的会放在本地。那么如何限制进行收口管理,我们可以在讲module upload maven的脚本中加上图片体积限制,大于一定体积直接抛异常即可。这里写了个一个检测图片体积的gradle插件

checkressize.png

4、检测非webp的图片

webp格式是google推出的图片格式,相对于png在体积上进行了一定的压缩,无损webp压缩近30%,有损webp压缩近80%,由于手机屏幕小,采用有损webp肉眼几户也很难察觉出区别,所以使用有损webp格式的话 100k接近压缩至20几k,效果还是很客观的。正常公司ui提供的图是有webp的,但是有些同学可能粗心选择的png。要是每个迭代都去肉眼目测一次图片格式是不现实的,所以,这里依然写了个检测是否存在非webp格式图片的插件

checkwebp.png

代码地址

你可能感兴趣的:(Gradle插件在包体积优化中的应用)