[Android] 介绍一个gradle插件shrinker: 快速无反作用去除apk包中多余的 R类

看到微信团队近期把 Matrix 开源了,点个赞并蹭个热点android

Matrix其中有个组件是 ApkChecker,他会检查apk包中一系列“多余”的东西。其中有一项功能是:git

统计apk中包含的R类以及R类中的field countgithub

编译以后,代码中对资源的引用都会优化成int常量,除了R.styleable以外,其余的R类其实均可以删除bash

想必有些小伙伴可能不明白为何要这么作。这里有一篇我在1月份撰写的文章专门介绍了原理,原文戳这里:yrom.net/blog/2018/0…微信

关于插件:

插件名:shrinkerapp

项目地址: github.com/yrom/shrink…(其实很早以前就已经发布到github上了,不过无人问津→_→)测试

插件效果:与removeUnusedCodeminifyEnabled选项的另外一种写法)同用能够起到最佳效果gradle

这里有一个简单的测试项目,大部分类来自于依赖的support库,结果以下:优化

选项 methods fields classes
原始项目 22164 14367 2563
应用shrinker 插件 21979 7805 2392
应用shrinker 并开启 removeUnusedCode 11335 3302 1274

若是应用于依赖众多的大型项目则效果惊人(数据见文末)。spa

ps. 其实已经在 b 站的 APP 上使用好久好久好久了,插件很是稳定、可靠且无任何反作用。

附b站app数据

应用插件前(已开启minifyEnabled):

Dex count in iBiliPlayer-release-5.37.0-b2333.apk: 
  Total classes: 38633 (58.95%)
  Total methods: 263540 (402.14%)
  Total fields : 372259 (568.03%)
复制代码

应用后(已开启minifyEnabled):

Dex count in iBiliPlayer-release-5.37.0-b2333.apk: 
  Total classes: 37997 (57.98%)
  Total methods: 263427 (401.96%)
  Total fields : 117145 (178.75%)
复制代码

最后再次给微信团队开源精神点个赞<( ̄︶ ̄)↗

相关文章
相关标签/搜索