看到微信团队近期把 Matrix 开源了,点个赞并蹭个热点
Matrix其中有个组件是 ApkChecker,他会检查apk包中一系列“多余”的东西。其中有一项功能是:
统计apk中包含的R类以及R类中的field count
编译之后,代码中对资源的引用都会优化成int常量,除了R.styleable之外,其他的R类其实都可以删除
想必有些小伙伴可能不明白为什么要这么做。这里有一篇我在1月份撰写的文章专门介绍了原理,原文戳这里:yrom.net/blog/2018/0…
关于插件:
插件名:shrinker
项目地址: github.com/yrom/shrink…(其实很早之前就已经发布到github上了,不过无人问津→_→)
插件效果:与removeUnusedCode(minifyEnabled选项的另一种写法)同用可以起到最佳效果
这里有一个简单的测试项目,大部分类来自于依赖的support库,结果如下:
| 选项 | methods | fields | classes |
|---|---|---|---|
| 原始项目 | 22164 | 14367 | 2563 |
| 应用shrinker 插件 | 21979 | 7805 | 2392 |
| 应用shrinker 并开启 removeUnusedCode | 11335 | 3302 | 1274 |
如果应用于依赖众多的大型项目则效果惊人(数据见文末)。
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%)
最后再次给微信团队开源精神点个赞<( ̄︶ ̄)↗