Android Gradle、Android Gradle Plugin、BuildTool关系

news2025/4/7 22:10:09

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.coloradmin.cn/o/2330083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter之页面布局二

目录: 1、列表布局1.1、基础列表1.2、水平滑动的列表1.3、网格列表1.3、不同列表项的列表1.4、包含间隔的列表1.6、长列表 2、滚动2.1、浮动的顶栏2.2、平衡错位滚动 1、列表布局 1.1、基础列表 import package:flutter/material.dart;void main() > runApp(con…

RCE漏洞的小点总结

RCE简介与危害:包括远程代码执行和远程命令执行漏洞。 在很多web应用中,开发人员会使用一些函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就…

单片机实现多线程的方法汇总

在单片机上实现“多线程”的方法有几种,下面按照从简单到复杂、从轻量到系统性来列出常见的方案: 🧵 一、伪多线程(最轻量) 方法:主循环 状态机 / 定时器轮询 主循环中轮流调用各个任务的处理函数&#x…

Java八股文-List集合

集合的底层是否加锁也就代表是否线程安全 (一)List集合 一、数组 array[1]是如何通过索引找到堆内存中对应的这块数据的呢? (1)数组如何获取其他元素的地址值 (2)为什么数组的索引是从0开始的,不可以从1开始吗 (3)操作数组的时间复杂度 ①查找 根据索引查询 未…

从零构建大语言模型全栈开发指南:第四部分:工程实践与部署-4.2.3行业案例:智能客服中的图文交互系统

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 从零构建大语言模型全栈开发指南-第四部分:工程实践与部署4.2.3 行业案例:智能客服中的图文交互系统1. 图文交互系统的核心挑战与价值2. 系统架构设计2.1 分层架构2.2 Adapter技术应用3. 行业应用案例…

华为IP(4)

VRRP(虚拟路由冗余协议) 前言: 局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络,如果默认网关设备发生故障,那么所有用户终端访问外部网络的流量将会中断。可以通过部署多个网关的方式来解决单点故障…

计算机网络中科大 - 第1章 结构化笔记(详细解析)

博主主页 目录 **1. 计算机网络概述****1.1 计算机网络的定义****1.2 计算机网络的发展** **2. 计算机网络的组成与分类****2.1 计算机网络的组成****2.2 计算机网络的分类****按地理范围****按拓扑结构****按交换方式** **3. 计算机网络的性能指标****4. 计算机网络体系结构**…

【神经网络】python实现神经网络(三)——正向学习的模拟演练

有了之前的经验(【神经网络】python实现神经网络(二)——正向推理的模拟演练),我们继续来介绍如何正向训练神经网络中的超参(包含权重以及偏置),本章大致的流程图如下: 一.损失函数 神经网络以某个指标为基准寻求最优权重参数,而这个指标即可称之为 “损失函数” 。(…

PPTAgent:一款开源免费生成和评估幻灯片的项目

这篇文章介绍一下PPTAgent,一个从文档自动生成演示文稿的创新系统。该系统从人类的展示创作方法中汲取灵感,采用两步流程来确保卓越的整体质量。此外,本文还介绍了PPTEval,这是一个综合评估框架,可以跨多个维度评估演示…

Java 大视界 -- Java 大数据在智能供应链库存优化与成本控制中的应用策略(172)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

斯坦福大学李飞飞团队新突破!FlowMo 革新图像 Tokenizer

当我们悠然刷着手机,看到一张可爱猫咪的照片时,大脑会瞬间识别出「这是一只猫」,这一切不过是电光火石间的事儿。但在计算机的 “眼中”,情况却复杂得超乎想象。假设这是一张10001000像素的彩色照片,在计算机的世界里&…

博客文章:深入分析 PyMovie - 基于 Python和 MoviePy 的视频管理工具

这是一个使用 wxPython 构建界面、moviepy 处理视频的自定义 GUI 应用程序。该工具提供了视频播放、元数据提取、格式转换、视频裁剪和截图等功能。通过分析其设计和实现,我们将了解其工作原理、优点和潜在的改进空间。 C:\pythoncode\new\output\pymovieSample.py …

2025年渗透测试面试题总结-某 携程旅游-基础安全工程师(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 携程旅游-基础安全工程师 反序列化原理 核心原理 扩展分析 SQL注入本质 核心原理 扩展分析 SQL注…

niuhe插件, 在 go 中渲染网页内容

思路 niuhe 插件生成的 go 代码是基于 github.com/ma-guo/niuhe 库进行组织管理的, niuhe 库 是对 go gin 库的一个封装,因此要显示网页, 可通过给 gin.Engine 指定 HTMLRender 来实现。 实现 HTMLRender 我们使用 gitee.com/cnmade/pongo2gin 实现 1. main.go …

使用MySQL时出现 Ignoring query to other database 错误

Ignoring query to other database 错误 当在远程连接软件中输入MySQL命令出现该错误 导致错误原因是:登录mysql时账户名没有加上u 如果出现该错误,退出mysql,重新输入正确格式进入即可!

java后端开发day34--脑子空空如何无痛想起所有知识点--概念拟人化

1.上半部学习思考 1.1反思–浮躁–二倍速 刚开始算半个小白吧,从最基础的知识点开始学习,到后面学习整个项目的布局和功能。可能是后面慢慢懂得多了,每次打代码搞项目啊什么的,就能明显感觉到自己很浮躁:脑子里已经明…

fastGPT—前端开发获取api密钥调用机器人对话接口(HTML实现)

官网文档链接&#xff1a;OpenAPI 介绍 | FastGPT 首先按照文档说明创建api密钥 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

解决 PDF 难题:批量处理、文档清理与自由拆分合并

软件介绍 在日常办公与学习中&#xff0c;处理 PDF 文件常常让人头疼不已&#xff0c;不过别担心&#xff0c;今天有一款堪称神器的国产老牌 PDF 工具要分享给大家。它就是 PDF 补丁丁&#xff0c;凭借其强大功能&#xff0c;为大家排忧解难。 界面体验 初次打开 PDF 补丁丁&…

使用pycharm社区版调试DIFY后端python代码

目录 背景 前置条件 DIFY使用的框架 API服务调试配置步骤&#xff08;基于tag为0.15.3的版本&#xff09; 1.配置.env文件 2.关闭docker里面的docker-api-1服务 3.使用DOCKER启动本地环境需要用到的中间件&#xff0c;并暴露端口 注意事项一&#xff1a; 注意事项二&#xff1a…

量子计算与人工智能的结合:未来科技的双重革命

引言 在过去几十年里&#xff0c;人工智能&#xff08;AI&#xff09;和计算能力的提升一直是推动科技进步的重要力量。然而&#xff0c;随着深度学习和大规模数据处理的发展&#xff0c;传统计算架构的算力瓶颈逐渐显现&#xff0c;人工智能的训练和推理效率受到了限制。在此背…