[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%)
複製代碼

最後再次給微信團隊開源精神點個贊<( ̄︶ ̄)↗

相關文章
相關標籤/搜索