Android中的DX、D8、R8

Kotlin 版本所需的 AGP、D8 和 R8 版本 :https://developer.android.google.cn/build/kotlin-support?hl=zh_cn

R8:https://developer.android.google.cn/tools/retrace?hl=zh_cn
D8:https://developer.android.google.cn/tools/d8?hl=zh_cn

在這里插入圖片描述
如上圖,這張圖片是來自Google官方視頻里面的。當時還沒有R8,所以讓DeepSeek要了一張:
在這里插入圖片描述
在這里插入圖片描述

  • DX 編譯流程??(傳統方案),??特點??:脫糖→轉換→DX 編譯是??離散的三步??,效率低且輸出臃腫
  • D8 編譯流程??(2017年推出),特點??:整合脫糖到編譯器內部,??一步完成語法轉換和 Dex 生成?
  • R8 編譯流程??(2018年推出),特點??:??全功能一體化引擎??,一步完成脫糖+優化+混淆+壓縮+Dex生成

核心能力對比?

Android 編譯工具演進對比:DX vs D8 vs R8

特性DXD8R8
? 核心功能.class → .dex 轉換.class → .dex 轉換 + 脫糖D8功能 + 混淆/壓縮/優化
?? 編譯速度?? 慢
(需多階段處理)
🟢 比 DX 快 30%🟢 與 D8 接近
(額外優化耗時低)
📦 輸出 Dex 大小?? 較大
(無優化)
?? 比 DX 小約 5%? 比 D8 小 10-20%
(經代碼壓縮)
🔒 混淆能力? 無
(需 ProGuard)
? 無
(需 ProGuard)
? 內置
(替代 ProGuard)
🧬 脫糖支持? 需獨立工具? 原生整合? 原生整合
? 代碼優化? 無?? 基礎優化? 高級優化
(內聯/死代碼刪除等)
🛠? 維護狀態? 已棄用
(AGP 7.0+)
? 基礎編譯
(過渡方案)
? 官方推薦
(現代項目首選)

關鍵差異說明?

Android編譯工具演進

  1. DX(舊編譯流程)

    • 多步驟處理:javac → 獨立脫糖 → transforms → DX編譯
    • 脫糖是獨立步驟,增加IO開銷
    • 無任何優化功能
  2. D8(DX的現代化替代)

    • 簡化流程:javac → transforms → D8 + 脫糖
    • 關鍵升級:脫糖集成到編譯器內部
    • 編譯速度比DX快30%
    • Dex文件縮小5%
  3. R8(D8的全功能升級)

    • 單一流程:javac → transforms → R8引擎
    • 五合一功能:
      • 脫糖(繼承自D8)
      • 深度代碼優化(方法內聯等)
      • 混淆(取代ProGuard)
      • 資源/代碼壓縮
      • 最終dex生成
    • Dex文件比D8小10 - 20%
    • 構建速度比"D8 + ProGuard"快2倍

實際項目配置?
在 gradle.properties 中強制啟用 R8(AGP 4.0+ 默認啟用):

# 顯式啟用 R8(AGP 7.0+ 默認)
android.enableR8 = true
# 開啟全模式優化(代碼壓縮+混淆+優化)
minifyEnabled true

在 build.gradle 中的配置對比:

// DX時代(已過時)
android {// 無特別配置
}// D8使用方式
android {// 默認啟用(AGP 3.0+)
}// R8完整配置
android {buildTypes {release {minifyEnabled true   // 啟用R8全功能shrinkResources true // 資源壓縮proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')}}
}

總結?

  • DX??:舊時代的過渡工具,已被徹底淘汰
  • D8??:??編譯基石??,專注高效的 .class→.dex 轉換
  • ??R8??:??終極形態??,集成編譯+優化+混淆三位一體

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84800.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通義靈碼 AI IDE 上線!智能體+MCP 從手動調用工具過渡到“AI 主動調度資源”

告訴大家一個好消息,通義靈碼發布了 AI 編程 IDE :Lingma IDE ,你沒看錯,通義靈碼也推出了自己的 AI IDE 客戶端,不是 AI 編程插件,是 IDE 。 Lingma IDE 是基于 VS Code 開源版本構建的智能代碼編輯器&am…

快速解決軟件測試的邏輯方法運用

在軟件測試過程中,遇到復雜問題時,如何快速定位和解決?關鍵在于運用邏輯方法,系統化地分析問題、設計測試用例、優化測試流程。本文將介紹幾種高效的邏輯方法,幫助測試工程師提升效率,減少盲測和重復勞動。…

楓清科技攜手中化信息挖掘實現AI高價值場景應用,打通智能化“最后一公里”

近日,中國中化控股有限責任公司(以下簡稱“中國中化”)發布“人工智能”專項行動推進方案,標志著其全面深化人工智能戰略布局、全力支撐“數智中化”建設進入加速落地階段。作為集團智能化轉型的核心支撐單位,中國中化…

Yolov5.6增加注意力機制+ByterTrack:目標檢測與跟蹤

簡介:本項目使用ESP32-CAM采集圖像上傳至上位機進行手部目標檢測與追蹤,使用了YOLOv5.6(注意力機制ECA,CBAM)ByteTrack 博主同款迅雷鏈接: 鏈接:https://pan.xunlei.com/s/VOSO1EIzmXhBb_BIKM58cM5cA1# 提…

C++進階—C++中的繼承

第一章:繼承的概念及定義 1.1繼承的概念 繼承(inheritance)機制是面向對象程序設計使代碼可以復用的最重要的手段,它允許程序員在保持原有類特性的基礎上進行擴展,增加功能,這樣產生新的類,稱派生類。繼承呈現了面向…

力扣Hot100每日N題(11~14)

200. 島嶼數量 BFS或DFS class Solution {private int[] dx {0, 0, 1, -1};private int[] dy {1, -1, 0, 0};int ans 0, n, m;void dfs(char[][] grid, int x, int y){if(x < 0 || y < 0 || x > n || y > m || grid[x][y] 0) return;grid[x][y] 0;for(int i…

人工智能 倒底是 智能 還是 智障?

假設有如下哈希運算的過程和結果&#xff0c;然后讓人工智能根據初始條件和最終結果的最后幾個字符推理出中間過程。 yw "123456" salt "a1b2c3d4e5f6" sda256(saltsha1(md5(yw.encode)salt)) 1c5852fa5d3c450621c17b9ba87ffdab8d336b16f015b4a10cffc945…

傳智健康---十天項目總結

第一天&#xff1a; 基本內容如下&#xff1a; 從gitee拉取對應的基礎代碼。做好配置相關工作。測試頁面是否可以正常打開。 無問題 需要學習的內容&#xff1a;spring security 了解到這個框架的基礎作用大概是&#xff1a;管理請求路徑&#xff0c;管理用戶權限&#xf…

AbMole| Angiotensin II human(M6240;血管緊張素Ⅱ)

Angiotensin II&#xff08;血管緊張素II&#xff09;是一種生物活性肽和血管收縮劑。Angiotensin II作為腎素-血管緊張素-醛固酮系統&#xff08;RAAS&#xff09;的關鍵活性成分&#xff0c;在動物模型中&#xff0c;它通過調節于血管平滑肌細胞上的血管緊張素II受體&#xf…

【C/C++】gmock vs mockcpp

文章目錄 gmock vs mockcpp1 基本介紹2 語法風格與使用方式gmock 特點&#xff08;基于接口 Mock&#xff09;&#xff1a;mockcpp 特點&#xff08;基于重寫/攔截原函數&#xff09;&#xff1a; 3 對比總結4 實際使用建議 gmock vs mockcpp gmock 和 mockcpp 是 C 中常用的兩…

自己的服務器被 DDOS跟CC攻擊了怎么處理,如何抵御攻擊?

今天后臺突然彈出警報&#xff1a;服務器帶寬瞬間跑滿&#xff0c;CPU 占用率飆到 100%。刷新頁面時&#xff0c;首頁加載像卡帶般斷斷續續&#xff0c;圖片剛顯示半張就卡住&#xff0c;點擊任何按鈕都沒反應。登錄服務器一看&#xff0c;訪問日志里密密麻麻全是陌生 IP 的高頻…

icg真的只能用latch不能用Flip-flop嗎

soc設計中常用latch來做時鐘門控&#xff0c;它的rtl描述如下&#xff1a; input EN; input clk; input TE; output E_clk;always (*) beginif (clk1d0)E_latch EN | TE; endassign E_clk E_latch & clk;實際soc實現會把上面代碼中latch和與操作換成專用CLKLANQ的libcel…

基于python大數據的nba球員可視化分析系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

從0開始學習R語言--Day22--km曲線

KM曲線 在分析疾病的死亡率時&#xff0c;我們往往會糾結于怎樣在邏輯架構中去考慮未死亡的人群&#xff0c;以及想研究兩種藥物的表現效果&#xff0c;但病人的指標表現都不明顯&#xff0c;作用于其他指標且很難量化。 而KM曲線可以很好地反映人群在時間序列上的生存率&…

SpringBoot ?@ControllerAdvice 處理異常

應用中的異常&#xff0c;有兩件事要考慮&#xff0c;怎么處理這個異常&#xff0c;怎么把異常可讀性高地返回給前端用戶 1.怎么把異常可讀性高的返回給前端用戶或API的消費者 自定義錯誤代碼和錯誤內容 2.怎么處理異常 比如遇到某個異常時需要發郵件通知IT團隊 Controlle…

爬百度圖片如何解決{“antiFlag“:1,“message“:“Forbid spider access“}

在學習深度學習的卷積神經算法時&#xff0c;需要貓和狗的訓練數據集。這時想到在百度網上爬取貓和狗的圖片。 在爬取狗狗圖片的時候&#xff0c;我抓包分析了下獲取這個url1 “https://image.baidu.com/search/index?tnbaiduimage&ipnr&ct201326592&cl2&lm&…

QWebEngine

Qt自帶的QWebEngine 不支持播放MP4, 需要手動編譯QWebEngine模塊 不支持播放mp4 // mainwindow.cpp , m_webEngine(new MyWebEngine(this)) void MainWindow::init() { //關閉系統代理&#xff0c;提高速度,采用release會更快QNetworkProxyFactory::setUseSystemConfigurati…

Rust 學習筆記1

Basic基礎 actix_web基礎 #[get("/favicon")] 獲取靜態圖片 #[get("/welcome")] 簡單的歡迎 #`/user/{name}/` basic.rs源碼 源碼 use std::{convert::Infallible, io};use actix_files::{Files, NamedFile}; use actix_session::{storage::Cooki…

3GPP協議PDF下載

https://www.tech-invite.com/3m38/tinv-3gpp-38.html 可以進入3GPP官網界面&#xff0c;也可以進入PDF下載界面 PDF加載比較慢

高性能服務器程序框架知識梳理

服務器編程框架 服務器程序種類有很多&#xff0c;但是基本框架都一樣&#xff0c;核心不同點在于邏輯處理單元。基本框架包含&#xff1a;I/O處理單元、邏輯單元、網絡存儲單元以及請求隊列。 I/O處理單元&#xff08;主線程&#xff09;&#xff1a;服務器用來管理客戶連接…