看到微信團隊近期把 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%)
複製程式碼
最後再次給微信團隊開源精神點個贊<( ̄︶ ̄)↗