Android Gradle、Android Gradle Plugin、BuildTool關系

1. Gradle 的定位:通用構建工具

Gradle 是一個通用的跨平臺構建工具,支持多種語言(如 Java、Kotlin、C++)和項目類型

它的核心功能包括:

  • ?任務自動化:通過 Groovy/Kotlin DSL 腳本定義編譯、測試、打包等流程。
  • ?依賴管理:支持從 Maven、Ivy 等倉庫自動解析和下載依賴項
  • ?靈活性:可通過插件擴展功能,適用于任何規模的項目

應用示例:build.gradle文件

build.gradle` 文件是用 Groovy 語言編寫的。它是 Gradle 構建系統的一部分,負責定義項目的構建腳本,包括依賴管理、任務定義、編譯選項等。通過 `build.gradle` 文件,你可以配置和自定義構建過程,使得項目的構建和部署更加自動化和高效。


2. AGP 的作用:面向 Android 的封裝

AGP(Android Gradle Plugin)是 Gradle 的專用插件,由 Google 開發,用于簡化 Android 應用的構建流程

它的核心功能包括:

  • ?Android 特有任務:如資源編譯(AAPT2)、字節碼優化(D8/R8)、APK/AAB 打包等
  • ?配置擴展:通過?android {}?閉包提供?buildTypes(構建類型)、productFlavors(多渠道配置)等 Android 專屬配置
  • ?與 Android SDK 工具鏈集成:調用?aapt(資源處理)、zipalign(APK 對齊)等底層工具完成構建

封裝邏輯AGP 在 Gradle 通用構建框架的基礎上,封裝了 Android 特有的構建步驟。例如:

  • ?資源編譯:將?res/?目錄下的資源文件編譯為二進制格式(如?resources.arsc
  • ?DEX 生成:通過?d8?或?r8?將 Java/Kotlin 字節碼轉換為 Android 虛擬機識別的 DEX 格式
  • ?APK 簽名與優化:集成?apksigner?和?zipalign?工具,確保 APK 符合 Android 平臺規范

3. ?兩者的協作關系

  • ?Gradle 提供基礎架構:管理構建生命周期(初始化→配置→執行階段)、任務調度、依賴解析等通用能力
  • ?AGP 擴展 Android 能力:通過插件形式注入 Android 專屬任務和配置,最終生成 APK/AAB?

示例:執行?./gradlew assembleDebug?時:

  1. Gradle 啟動并加載 AGP 插件。
  2. AGP 定義的任務(如?mergeResourcescompileDebugKotlin)被插入到構建流程中。
  3. Gradle 協調這些任務的執行順序,最終輸出 APK

?4. 版本兼容性

AGP 和 Gradle 的版本需嚴格匹配。例如:

  • ?AGP 7.4?要求 Gradle ≥7.5
  • ?AGP 8.0+?強制使用 R8 混淆工具,并依賴 Gradle 8.0+ 的新特性

    若版本不兼容,構建會直接失敗(如提示?Unsupported Gradle version


?5. gradle 文件里面的buildToolsVersion、compileSdkVersion 什么關系

首先明確,gradle文件,就是一個配置文件,用來表示gradle是怎么進行的

  • compileSdkVersion
    表示編譯時使用的 Android SDK 版本決定了開發者可以調用的 API 范圍。例如,compileSdkVersion 34允許使用 Android 14(API 34)的新特性(如細粒度媒體權限)

  • ?buildToolsVersion
    是 Android SDK 中構建工具鏈的版本,包含?aapt2(資源編譯)、d8/r8(代碼轉換)、zipalign(APK 優化)等工具。例如,buildToolsVersion "34.0.0"?是專為 Android 14 設計的構建工具版本

6. 它們之間的關系

6.1 流程框架

整個構建流程的協作可概括為:
Gradle(構建引擎) → AGP(Android 構建邏輯) → Build Tools(工具鏈) → compileSdk(API 規范)?


?6.2 具體協作流程

?階段 1:Gradle 構建引擎啟動

  • ?Gradle 角色:作為通用構建工具,管理整個項目的生命周期(初始化、配置、執行)
  • ?關鍵行為
    • 解析?settings.gradle?確定子項目結構
    • 加載根目錄和子模塊的?build.gradle?文件
    • 創建任務依賴圖(Task DAG)以確定執行順序

?階段 2:AGP 接管 Android 構建邏輯

  • ?AGP 角色:作為 Gradle 插件,定義 Android 特有的構建規則
  • ?關鍵行為
    • ?配置階段:通過?android {}?塊解析?compileSdk?和?buildToolsVersion?配置,生成?ApplicationExtension?對象
    • ?任務注冊:注冊編譯、資源處理、打包等任務(如?mergeResourcescompileDebugJavaWithJavac
    • ?變體管理:根據?buildTypes?和?productFlavors?生成構建變體(Variant)

?階段 3:Build Tools 執行底層操作

  • ?Build Tools 角色:提供具體工具鏈,實現 AGP 定義的任務邏輯
  • ?工具鏈調用
    • ?資源編譯aapt2?處理 XML 和圖片資源(基于?compileSdk?的 API 規范)
    • ?代碼轉換javac/kotlinc?生成字節碼 →?d8/r8?轉換為 DEX 文件
    • ?APK 優化zipalign?對齊文件,apksigner?簽名

?階段 4:compileSdk 定義 API 兼容性

  • ?compileSdk 角色:決定編譯時使用的 Android SDK 版本
  • ?核心影響
    • 提供?android.jar?中的 API 定義(如 Android 14 的新接口)
    • 控制代碼編譯時的兼容性檢查(如使用新 API 需匹配?compileSdk
    • 必須與?buildToolsVersion?主版本一致(如?compileSdk 34?對應?build-tools;34.0.0

?6.3 版本兼容性規則
組件依賴關系示例
?AGP 與 GradleAGP 版本需匹配 Gradle 版本(如 AGP 8.3 → Gradle 8.4+)AGP 7.4 → Gradle 7.5
?Build ToolsbuildToolsVersion?主版本需等于?compileSdk(次要版本可升級)compileSdk 34 → build-tools 34.0.0
?compileSdk需 ≥?targetSdk,且 ≤ 最新穩定版(推薦最新)

14

targetSdk 33 → compileSdk 34

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

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

相關文章

DHCP之報文格式

字段說明: op (op code): 表示報文的類型,取值為 1 或 2,含義如下 1:客戶端請求報 2:服務器響應報文 Secs (seconds):由客戶端填充,表示從客戶端開始獲得 IP 地址或 IP 地址續借后所使用了的秒數,缺省值為 3600s。 F…

觀察者模式在Java微服務間的使用

一.、使用RabbitMQ來實現 (1) 生產者(訂單微服務) import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service;Service public class OrderService {private final RabbitTemplate rabbitTemplate;…

OSPF五種數據包詳解

一、OSPF頭部封裝 OSPF是跨四層封裝協議,直接封裝在網絡層之上,需要IP協議使用一個協議號來標定——89。 OSPF頭部結構: 版本:標識OSPF的版本,OSPFv2(2)、OSPFv3(3)&am…

NO.64十六屆藍橋杯備戰|基礎算法-簡單貪心|貨倉選址|最大子段和|紀念品分組|排座椅|矩陣消除(C++)

貪?算法是兩極分化很嚴重的算法。簡單的問題會讓你覺得理所應當,難?點的問題會讓你懷疑?? 什么是貪?算法? 貪?算法,或者說是貪?策略:企圖?局部最優找出全局最優。 把解決問題的過程分成若?步;解決每?步時…

Linux(十二)信號

今天我們就要來一起學習信號啦!!!還記得小編在之前的文章中說過的ctrlc嗎?之前小編沒有詳細介紹過,現在我們就要來學習啦!!! 一、信號的基本介紹 首先,小編帶領大家先一…

Dify開發實戰-自制插件 和安裝python3最新版本 記錄版本 后續會持續更新

自定義插件 Dify 插件腳手架工具Python 環境,版本號 ≥ 3.12 安裝Python 一 進入官網 https://www.python.org/downloads/windows/ 點擊下載 二、安裝python(本文中有借鑒其他圖片 所以圖片展示python版本可能不一致 請忽略) 1.雙擊打開py…

Docker安裝、配置Redis

1.如果沒有docker-compose.yml文件的話,先創建docker-compose.yml 配置文件一般長這個樣子 version: 3services:redis:image: redis:latestcontainer_name: redisports:- "6379:6379"command: redis-server --requirepass "123456"restart: a…

Parasoft C++Test軟件單元測試_操作指南

系列文章目錄 Parasoft C++Test軟件靜態分析:操作指南(編碼規范、質量度量)、常見問題及處理 Parasoft C++Test軟件單元測試:操作指南、實例講解、常見問題及處理 Parasoft C++Test軟件集成測試:操作指南、實例講解、常見問題及處理 進階擴展:自動生成靜態分析文檔、自動…

二級索引詳解

二級索引詳解 二級索引(Secondary Index)是數據庫系統中除主鍵索引外的附加索引結構,用于加速基于非主鍵列的查詢操作。以下是關于二級索引的全面解析: 一、核心概念 特性主鍵索引 (Primary Index)二級索引 (Secondary Index)唯一性必須唯一可以唯一或非唯一數量每表只有…

Python_level1_字符串_11

目錄 一、基本概念 二、字符串基本操作:【索引、切片、遍歷】 1.字符串與列表(相同) 1)索引(從0開始)(可以獲取某一個/某幾個連續的字符) 2)切片 [xx:xx] 與 列表 語法規則一樣 [起…

Axure數據可視化科技感大屏設計資料——賦能多領域,展示無限價值

可視化大屏如何高效、直觀地展示數據,并將其轉化為有價值的決策依據,成為了許多企業和組織面臨的共同挑戰。Axure大屏可視化模板,作為一款強大的數據展示工具,正在以其出色的交互性和可定制性,賦能多個領域&#xff0c…

MySQL 性能調優:數據庫的極限運動訓練

就像運動員需要不斷訓練才能突破極限,數據庫也需要各種調優才能跑得更快…讓我們一起給 MySQL 安排一套專業的"健身計劃"! 什么是 MySQL 性能調優?🤔 MySQL 性能調優是指通過各種配置優化、結構調整和查詢改進&#x…

4.5/Q1,GBD數據庫最新文章解讀

文章題目:Emerging trends and cross-country health inequalities in congenital birth defects: insights from the GBD 2021 study DOI:10.1186/s12939-025-02412-7 中文標題:先天性出生缺陷的新趨勢和跨國健康不平等:GBD 202…

基于DeepSeek、ChatGPT支持下的地質災害風險評估、易發性分析、信息化建庫及災后重建

前言: 地質災害是指全球地殼自然地質演化過程中,由于地球內動力、外動力或者人為地質動力作用下導致的自然地質和人類的自然災害突發事件。在降水、地震等自然誘因的作用下,地質災害在全球范圍內頻繁發生。我國不僅常見滑坡災害,還…

Linux | 安裝超級終端串口軟件連接i.MX6ULL開發板(8)

01 它的安裝步驟也非常簡單,安裝語言選擇中文簡體,點擊確定,如下圖所示。 點擊下一步,如下圖所示。 02

藍橋杯15屆 寶石組合

問題描述 在一個神秘的森林里,住著一個小精靈名叫小藍。有一天,他偶然發現了一個隱藏在樹洞里的寶藏,里面裝滿了閃爍著美麗光芒的寶石。這些寶石都有著不同的顏色和形狀,但最引人注目的是它們各自獨特的 “閃亮度” 屬性。每顆寶…

Lua:第1-4部分 語言基礎

1 Lua語言入門 1.1 程序段 我們將 Lua 語言執行的每一段代碼(例如,一個文件或交互模式下的一行)稱為一個程序段 ( Chunk ) ,即一組命令或表達式組成的序列 。 1.2 一些詞法規范 Lua 語言中的標識符&#…

CTF類題目復現總結-hashcat 1

一、題目地址 https://buuoj.cn/challenges#hashcat二、復現步驟 1、下載附件,解壓得到What kind of document is this_文件; 2、用010 Editor打開What kind of document is this_文件,發現是office文件; 3、將后綴名改為ppt時…

手機歸屬地查詢Api接口,數據準確可靠

手機歸屬地查詢是一項非常實用的功能,它可以幫助我們快速了解一個手機號碼的所屬地區、區號、郵政編碼等信息。在互聯網時代,隨著大數據和人工智能技術的發展,手機歸屬地查詢的API接口也變得越來越普及和便捷。 在本文中,我們將介…

orangepi zero燒錄及SSH聯網

下載對應版本的armbian鏡像 armbian的默認用戶root,默認密碼:1234 下載燒錄工具win32diskimager https://sourceforge.net/projects/win32diskimager/files/Archive/ 插入16G以上TF卡,使用win32diskimager燒錄armbian鏡像 燒錄完畢后用l…