最近 Android Studio 穩定版迎來了3.3版本更新,帶來的新特性之一是新一代的代碼壓縮工具 R8,本文將詳細介紹這一新工具 R8。閱讀本文內容前需瞭解:html
做爲 Android 開發者,你們都知道縮減 APK 的大小是每一個項目都須要面臨的重要工做,而代碼縮減有助於經過移除未使用的代碼和資源來減小 APK 的大小,並使實際代碼佔用更少的空間(也稱爲混淆),因此 R8 這一項工具的目的是讓代碼縮減過程更快和更有效率。R8 目前已開源:android
咱們開發者使用 Java 或者是 Kotlin 來編寫程序代碼,而後轉換爲 Android 設備所須要的 Dalvik 字節碼(.dex),整個過程能夠簡單的用下圖來表示: git
對於開發者來講,構建過程的性能是很是重要的,所以在2015年,谷歌 Android 團隊引入了編譯器 Jack 和 Jill 。他們只需一步便可集成 Java 編譯器、ProGuard 和 Dalvik 編譯器的功能: github
這仍然爲優化構建過程留下了空間,R8 是 D8 的衍生產品,旨在集成 ProGuard 和 D8 的功能: 工具
R8 一步到位地完成了全部的縮減(shrinking),去糖(desugaring)和 轉換成 Dalvik 字節碼(dexing )過程。性能
縮減(shrinking)過程實現如下三個重要的功能:gradle
- 壓縮:從代碼中移除無用的類、段、方法等。
- 優化:使代碼在指令級更小,更高效。
- 混淆:使用簡短無心義的名稱重命名代碼裏剩餘的類,字段和方法。
R8 和當前的代碼縮減解決方案 Proguard 相比,R8 能夠更快地縮減代碼,同時改善輸出大小。下面將經過幾張數據圖來對比(數據源自於 benchmark): 優化
R8 使用的方式很是簡單,Android Studio 升級到3.3及以上版本後,只需在項目的 gradle.properties 里加上:ui
android.enableR8=true
複製代碼
R8 普通模式是兼容 Proguard的,若原項目裏已使用了proguard,直接啓用 R8 便可。同時,R8 也有徹底模式,與Proguard不直接兼容。能夠在 gradle.properties 文件中另外設置如下內容:google
android.enableR8.fullMode=true
複製代碼
本文爲我的原創,轉載請註明出處。