成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android 中的 R8詳解

移動開發 Android
Google 發布了 R8 來作為 Proguard 的替代品,用以幫助開發人員通過生成更好的輸出 (APK) 來縮減代碼。與 Proguard 相比,R8 被認為要比Proguard要快得多。

Google 發布了 R8 來作為 Proguard 的替代品,用以幫助開發人員通過生成更好的輸出 (APK) 來縮減代碼。與 Proguard 相比,R8 被認為要比Proguard要快得多。

1、什么是R8?

  • R8 是一個將我們的 java 字節碼轉換為優化的 dex 碼的工具。
  • 它遍歷整個應用程序,然后對其進行優化,例如刪除未使用的類、方法等。
  • 它在編譯時運行。它可以幫助我們減少構建的大小并使我們的應用程序更加安全。
  • R8 使用 Proguard 規則來修改其默認行為。

(1)開啟R8的好處

  • 代碼縮減(搖樹優化):使用靜態代碼分析來查找和刪除無法訪問的代碼和未實例化的類型,對規避 64k 引用限制非常有用。
  • 資源縮減:移除不使用的資源,包括應用庫依賴項中不使用的資源。
  • 混淆代碼:縮短類和成員的名稱,從而減小 DEX 文件的大小
  • 優化代碼:檢查并重寫代碼,選擇性內聯,移除未使用的參數和類合并來優化代碼大小.
  • 減少調試信息 : 規范化調試信息并壓縮行號信息
  • R8 會自動執行上述編譯時任務,也可以停用某些任務或通過 ProGuard 規則文件自定義 R8 的行為。
  • 使用某個第三方庫時,通常只使用其中很小一部分。若不壓縮,所有庫代碼都會保留在應用中。冗長的代碼有時可以提高可讀性和可維護性。

2、R8 怎么用

(1)R8 編譯器主要作用有:

  • 代碼縮減(即搖樹優化)從應用及其庫依賴項中檢測并安全地移除不使用的類、字段、方法和屬性(這使其成為了一個對于規避 64k 引用限制非常有用的工具)。例如,如果你僅使用某個庫依賴項的少數幾個 API,那么縮減功能可以識別應用不使用的庫代碼并僅從應用中移除這部分代碼。
  • 資源縮減:從封裝應用中移除不使用的資源,包括應用庫依賴項中不使用的資源。此功能可與代碼縮減功能結合使用,這樣一來,移除不使用的代碼后,也可以安全地移除不再引用的所有資源。
  • 優化:檢查并重寫代碼,以進一步減小應用的 DEX 文件的大小。例如,如果 R8 檢測到從未采用過給定 if/else 語句的 else {} 分支,則會移除 else {} 分支的代碼。
  • 混淆:使用無意義的簡短名稱重命名類、方法和字段,增加逆向難度,并且縮短類和成員的名稱,從而減小 DEX 文件的大小。

(2)啟用與禁用 R8

如需啟用縮減、混淆處理和優化功能,請在項目級 build.gradle 文件中添加以下代碼:

android {
buildTypes {
release {
// Enables code shrinking, obfuscation, and optimization for only
// your project's release build type.
//啟用 R8 的代碼縮減功能
minifyEnabled true
// Enables resource shrinking, which is performed by the
// Android Gradle plugin.
//啟用 R8 的資源縮減功能
shrinkResources true
// Includes the default ProGuard rules files that are packaged with
// the Android Gradle plugin. To learn more, go to the section about
// R8 configuration files.
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
...
}

關閉R8,gradle.properties中添加配置

# 顯式啟用 R8
android.enableR8 = true
# 只對 Android Library module 停用 R8 編譯器
android.enableR8.libraries = false
# 對所有 module 停用 R8 編譯器
android.enableR8 = false

R8 普通模式是兼容 Proguard 的,若原項目里已使用了 Proguard,直接啟用 R8 即可。同時,R8 也有完全模式,但是與 Proguard 不直接兼容,可以在 gradle.properties 文件中另外設置以下內容開啟:

android.enableR8.fullMode=true

額外的優化功能會使 R8 的行為與 ProGuard 不同,因此可能會需要您添加額外的 ProGuard 規則,以避免運行時問題

(3)自定義要保留的代碼

強制 R8 保留某些代碼,在 ProGuard 規則文件中添加 -keep 代碼行,如

-keep public class MyClass

為要保留的代碼添加 @Keep 注解

  • 在類上添加 @Keep 可按原樣保留整個類。
  •  在方法或字段上添加該注釋,將使該方法/字段(及其名稱)以及類名稱保持不變。
  • 只有在使用 AndroidX 注解庫且您添加 Android Gradle 插件隨附的 ProGuard 規則文件時,此注解才可用。

3、R8 與 Proguard 的比較

  • 對于使用 3.4.0 或更高版本的 Gradle 插件的 Android 應用,項目默認使用R8,不再使用Proguard進行優化。但是,它只使用 Proguard 規則。
  • R8 有效地內聯容器類并刪除未使用的類、字段和方法。Proguard 將應用程序大小減少了 8.5%,與 R8 相比減少了 10% 的代碼.
  • 與 Proguard 相比,R8 對 Kotlin 的支持更多。
  • R8 提供比 Proguard 更好的輸出,并且比 Proguard 更快,從而減少了整體構建時間。

(1)比較一下 Proguard 和 R8的性能

Proguard:

圖片

在使用 Proguard 時,應用程序代碼由 Java 編譯器轉換為 Java 字節碼。轉換后,Proguard 使用我們編寫的規則對其進行優化。然后 dex 將其轉換為優化的 Dalvik 字節碼。

將其轉換為 Dalvik 字節碼大概需要 4 個步驟。

R8:

圖片

  • 在使用 R8 時,首先將應用程序的代碼通過 java 編譯器轉換為 Java 字節碼,然后直接使用 R8 將 Java 字節碼轉換為 Dalvik 字節碼。
  • 通過使用 R8,它直接將 Java 字節碼轉換為 Dalvik 字節碼的步驟從 2 減少到 1。
  • 與 R8 相比,Proguard 應用了 520 個窺孔優化,后者非常少。窺孔優化是對一組編譯器生成的代碼執行的優化,通過使代碼更短、更快來提高代碼的性能。
  • 在 Proguard 和 R8 中,我們必須通過編寫自定義配置來處理反射。
  • 在轉換代碼的執行上,R8 比 Proguard 更快。
責任編輯:姜華 來源: Android開發編程
相關推薦

2022-06-02 16:46:25

京東APP升級Android升級AGP

2021-11-24 08:33:09

Android廣播機制應用程序

2013-06-28 14:00:28

Android

2012-11-28 10:54:33

Windows 8快速啟動

2009-12-11 09:15:13

2010-10-28 14:29:03

PowerShellServer2008

2010-04-30 15:53:20

2017-04-29 09:45:03

Python挖掘數據

2017-05-02 09:16:20

RPython文本挖掘

2020-12-07 13:48:48

EditorAndroid開發者

2011-07-27 09:44:32

Server 2008iSCSI

2014-05-27 15:36:01

AndroidActivity啟動模式

2013-04-22 13:51:08

Android開發Android中App

2011-09-09 13:47:48

Android Wid

2022-01-16 08:00:28

PythonFor循環

2014-07-11 09:33:24

iOS 8動作擴展

2019-03-04 08:14:35

LinuxIDBash

2013-05-08 10:36:07

JavaScriptJS詳解JavaScrip

2014-04-16 07:43:31

Java 8JRE

2011-02-18 14:02:36

Android R5 Android NDKAndroid NDK
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产极品车模吞精高潮呻吟 | 日韩黄a| 精品国产欧美一区二区 | 亚洲高清在线免费观看 | 国产专区免费 | 天天操 天天操 | 成人在线一区二区 | 国产精品视频入口 | 中文字幕成人 | 欧美激情一区二区三级高清视频 | 丁香五月网久久综合 | 日p视频免费看 | 亚洲一区二区在线电影 | 91免费观看| 91免费看片| 中文字幕一区二区三区精彩视频 | 国产精品久久久亚洲 | 欧美日韩国产一区二区三区 | 啪视频在线 | 欧美精品综合 | 91福利在线观看视频 | 欧美日韩中文在线 | 91丨九色丨国产在线 | 特黄特色大片免费视频观看 | 国产一级一片免费播放 | 91福利网 | 国产草草视频 | 国内精品视频在线观看 | av国产精品 | 国产网站在线播放 | 精品国产欧美 | 精品一区二区久久久久久久网站 | 免费av一区二区三区 | 精品免费 | 亚洲91精品 | 日韩一区二区视频 | 99热精品在线观看 | 免费看91 | 美女视频黄色片 | 成人小视频在线免费观看 | 成人夜晚看av |