Android Studio 3.3 Beta提供了新的Android代码压缩器R8
摘要: 在將D8作為其新的Dalvik編譯器之后,谷歌已經開始研發新的代碼壓縮器R8,在Android Studio 3.3 beta版本上它已經可以使用了。R8承諾用更少的時間交付更小的APK文件。
在將D8作為其新的Dalvik編譯器之后,谷歌已經開始研發新的代碼壓縮器(shrinker)R8,在Android Studio 3.3 beta版本上它已經可以使用了。R8承諾用更少的時間交付更小的Android應用文件(Android applicatin package,APK)。
R8會一次性完成壓縮、脫語法糖并將應用轉換為DEX格式(https://source.android.com/devices/tech/dalvik/dex-format) 的過程。R8能夠優化Java字節碼,使其變得更小更高效,同時還會移除所有未使用的類、字段、方法和屬性。它還會將所有程序的名稱變短,實現對它們的混淆,另外還會讓可執行文件變得更小。按照谷歌的基準測試,使用R8能夠大幅度減少處理時間,它所耗費的時間大約是當前的Android壓縮器Proguard的一半。在APK(或DEX)文件大小方面,優勢并不明顯。盡管如此,R8還是成功地將谷歌用作基準測試的Santa Tracker應用的最終APK文件減少了幾百KB。
在特性方面,谷歌還沒有提供R8與Proguard之間對比的技術細節。前段時間,Proguard的創建者GuardSquare提供了這兩款產品的對比,這項對比是基于對R8源碼的分析以及它們自己的測試套件進行的。在GuardSquare的對比中,R8對反射的支持有限;對字符串、資源文件以及資源文件名中的類名混淆支持有限;沒有標準的內部類重命名。目前尚不清楚在GuardSquare的報告之后,R8是否有新的進展來克服這些限制。
R8將代碼轉換成一個中間表述形式,并會執行一個靜態單一賦值(static single assignment,SSA)分析,在分析方法體時,這是一種標準的方式。Proguard會在整個代碼庫進行局部運算(partial evaluation),這能夠進一步看到代碼的動態行為。
R8和Proguard之間的主要區別似乎在于R8是一個一次性(one-pass)的優化器,而Proguard可以在多個過程中優化代碼——對于Android構建,默認情況下是5個過程。通常情況下,當前執行的優化過程會為后續的優化創造新的機會。在這方面,一個典型的例子就是日志語句的優化,在連續的優化過程中,可以刪除僅在這些日志語句中使用的變量。
R8依然是可選的,你可以在gradle.properties文件中通過如下的配置啟用它:
android.enableR8=trueR8提供了更高級的選項,也就是所謂的“完整模式(full mode)”,它會帶來更多的優化,而它的代價是犧牲對Proguard的兼容性。你可以通過如下的配置啟用完整模式:
android.enableR8.fullMode=true因為R8依然處于beta階段,所以相對于Proguard的效果可能會有一定的差異。 不過,對開發人員來說最重要的似乎是R8在運行時間上的巨大改進,在文件大小方面的效果似乎比較有限。
查看英文原文:
https://www.infoq.com/news/2018/11/r8-shrinker-android-studio-3.3
總結
以上是生活随笔為你收集整理的Android Studio 3.3 Beta提供了新的Android代码压缩器R8的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CesiumLab V1.3 新功能 M
- 下一篇: 转:AMS之dumpsys篇