Android Gradle 开发与应用 (一) : Gradle基础

1. Gradle是什么

Gradle是一个通用的构建工具,支持诸多主要的 IDE,包括 Android Studio、IntelliJ IDEA、Visual Studio 等

  • Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的
  • 开发者通常使用 Groovy 或 Kotlin 来编写构建脚本

在这里插入图片描述

1.1 那么为什么Gradle的底层不使用Groovy进行开发,而是使用Java ?

  • Java具有更被广泛验证的稳定性,生态系统庞大且成熟,拥有大量的开源库和工具
  • Java是静态语言,具有更好的可维护性,尤其是在一个需要长期维护的大型开源项目时
  • 随着时间推移,Gradle还引入了Kotlin DSL作为构建脚本的开发,而底层仍然使用Java,这样可以确保无论脚本层如何变化,核心引擎的性能和表现都能一致

2. Gradle和Ant、Maven

  • Ant : 2000年由Apache推出的纯Java编写的构建工具,通过build.xml文件管理项目
  • Maven : 2004年Apache推出的使用pom.xml管理项目的构建工具
    • 缺点 : 配置文件编写不够灵活,构建过程僵化
  • Gradle : 2012年Google推出的权限项目构建工具,集合了Ant和Maven各自的优势。
    • 相对学习成本高

在这里插入图片描述

3. Gradle安装包

在Gradle中,srcbinall是不同类型的发布版本或分发方式,这些版本在内容和使用上有所不同。
Gradle的所有安装包都可以在官网上下载到 : Gradle Release,以下是它们之间的主要区别:

  • src(源码版):包含了Gradle的完整源代码
  • bin(二进制版):包含了Gradle的可运行程序,但不包含源码和文档
  • all(完整版):包含了Gradle的完整发布,包括可运行程序、用户文档和源码

4. Gradle项目结构

Android项目的目录结构就是继承自Gradle的,所以我们会感觉Gradle的项目结构非常的熟悉。
下面这张图,我对Gradle目录的结构,做了对应的说明。

pFttN6K.png

其中

  • gradlew.bat 这个是在windows下的可执行脚本
  • gradlew是在其他系统下的可执行脚本

无论是gradlew.bat还是gradlew实际上都是执行的wrapper文件夹底下指定版本的Gradle的指令

详见 Gradle Directories

5. Gradle Wrapper

Gradle的项目中,都有gradle-wrapper.jargradlew.bat脚本。
假设我们把这个项目复制到没有安装任何Gradle的机器上,会发生什么 ?

会自动去下载指定的gradle。

可以看一下脚本里的源码,本质上会去加载并运行gradle-wrapper.jargradle-wrapper.jar 会把gradle指定版本给下载下来后,然后用这个指定gradle版本来执行构建。

gradlew wrapper给上传上去,以保证任何人将项目源码下载下来之后,都可以和你一样的gralde版本去构建,以避免版本不一致带来的问题。

6. GradleUserHome

GradleUserHome是Gradle构建工具的一个重要属性,它是Gradle的工作及缓存仓库文件目录。如果不进行特别配置,GradleUserHome的默认路径通常是用户目录下的“.gradle”文件夹 (C:\Users\我的用户名\.gradle)。在这个目录下,Gradle会下载或缓存大量文件。

在这里插入图片描述

由于GradleUserHome占用存储空间比较大,我们可以配置全局的环境变量,将GradleUserHome设置到非系统盘中,从而减少C盘的磁盘空间占用。

在这里插入图片描述

如果你把一个gradle的脚本放在init.gradle这个目录,那么这个脚本就会对你机器上所有的gradle构建生效,在你的gradle构建之前,它就会先执行一下。比如说执行一个全局的仓库替换(国内下载很慢)。
但是init.gradle 文件和项目的 settings.gradle 或 settings.gradle.kts 文件不同。settings.gradle 文件是用于配置项目设置(如项目名称、包含的模块等)的,而 init.gradle 是全局的,并且针对Gradle守护进程。
在大多数情况下,你不需要手动创建或编辑 init.gradle 文件,除非你有特定的全局配置需求。如果你确实需要修改它,确保你了解这些更改的影响,并在必要时进行充分的测试。

6.1 gradle-wrapper.properties文件解读

gradle项目的wrapper目录下,有一个``文件,这个文件用来配置Gradle具体的版本和下载地址以及存放路径

  • zipStore : 压缩包存放的目录
  • distribution : 压缩包解压后存放的目录
  • distributionUrl : Gradle的版本及下载地址,默认的是国外的下载地址,可能下载速度比较慢,可以将URL改为国内的 ,比如https://mirrors.cloud.tencent.com/gradle/gradle-8.2-bin.zip

在这里插入图片描述

7. Gradle相关的其他文章

Android Gradle开发与应用 (一) : Gradle基础
Android Gradle开发与应用 (二) : Groovy基础语法
Android Gradle插件开发_实现自动复制文件插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/263643.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Order By Limit不稳定性

文章目录 前置解决不确定性场景1 Order By索引1.1 背景1.2 不确定性产生原因1.2.1 正常情况下1.2.2 但是 1.3 补充1.4 场景1总结 场景2 Order by id2.1 背景2.2 不会产生不确定性原因1原因2 2.3 推荐使用方式 场景3 filesort3.1 背景3.2 不确定性产生原因3.3 内存排序和磁盘临时…

Jmeter基础(3) 发起一次请求

目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程,需要几个步骤呢? 1、添加线程组2、添加HTTP请求3、添加监听器,查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…

【Java程序设计】【C00282】基于Springboot的校园台球厅人员与设备管理系统(有论文)

基于Springboot的校园台球厅人员与设备管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园台球厅人员与设备管理系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xf…

【数据结构与算法】(16)基础算法 之哈希表 相关示例 详细代码讲解

目录 3.6 哈希表第一版生成 hashCode思考习题E01. 两数之和-Leetcode 1E02. 无重复字符的最长字串-Leetcode 3E03. 字母异位词分组-Leetcode 49E04. 判断有没有重复元素-Leetcode 217E05. 找出出现一次的数字-Leetcode 136E06. 判断字母异位词-Leetcode 242E07. 第一个不重复字…

前端工程化面试题 | 16.精选前端工程化高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

解决方法: 打开PowerShell,在命令框输入set-ExecutionPolicy RemoteSigned 在PowerShell中输入会出现如下图,输入y即可。

数据结构-列表LinkedList

一,链表的简单的认识. 数组,栈,队列是线性数据结构,但都算不上是动态数据结构,底层都是依托静态数组,但是链表是确实真正意义上的动态数组. 为什么要学习链表? 1,链表时最简单的动态数据结构 2,掌握链表有助于学习更复杂的数据结构,例如,二叉树,trie. 3,学习链表有助于更深入…

unity学习(40)——创建(create)角色脚本(panel)——UI

1.点击不同的头像按钮,分别选择职业1和职业2,create脚本中对应的函数。 2.调取inputfield中所输入的角色名(限制用户名长度为7字符),但愿逆向的服务器可以查重名: 3.点击头衔,显示选择的职业&a…

Spring Boot 手写starter!!!

原因:为什么要手写starter??? 原因:简化功能。 实例:以分页为例:写一个starter。 1.首先定义一个PageX注解。 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented p…

LeetCode 热题 100 | 二叉树(一)

目录 1 基础知识 1.1 先序遍历 1.2 中序遍历 1.3 后序遍历 2 94. 二叉树的中序遍历 3 104. 二叉树的最大深度 4 226. 翻转二叉树 5 101. 对称二叉树 菜鸟做题,语言是 C 1 基础知识 二叉树常见的遍历方式有: 先序遍历中序遍历后序遍历…

RocketMQ-架构与设计

RocketMQ架构与设计 一、简介二、框架概述1.设计特点 三、架构图1.Producer2.Consumer3.NameServer4.BrokerServer 四、基本特性1.消息顺序性1.1 全局顺序1.2 分区顺序 2.消息回溯3.消息重投4.消息重试5.延迟队列(定时消息)6.重试队列7.死信队列8.消息语…

神经网络系列---感知机(Neuron)

文章目录 感知机(Neuron)感知机(Neuron)的决策函数可以表示为:感知机(Neuron)的学习算法主要包括以下步骤:感知机可以实现逻辑运算中的AND、OR、NOT和异或(XOR)运算。 感知机(Neuron) 感知机(Neuron)是一种简单而有效的二分类算法,用于将输入…

jmeter下载base64加密版pdf文件

一、何为base64加密版pdf文件 如下图所示,接口jmeter执行后,返回一串包含大小写英文字母、数字、、/、的长字符串,直接另存为pdf文件后,文件有大小,但是打不开;另存为doc文件后,打开可以看到和…

Puppeteer 使用实战:如何将自己的 CSDN 专栏文章导出并用于 Hexo 博客(二)

文章目录 上一篇效果演示Puppeteer 修改浏览器的默认下载位置控制并发数错误重试并发控制 错误重试源码 上一篇 Puppeteer 使用实战:如何将自己的 CSDN 专栏文章导出并用于 Hexo 博客(一) 效果演示 上一篇实现了一些基本功能,…

Maxwell安装部署

1 Maxwell输出格式 database:变更数据所属的数据库table:变更数据所属的表type:数据变更类型ts:数据变更发生的时间xid:事务idcommit:事务提交标志,可用于重新组装事务data:对于inse…

uni-app nvue vue3 setup中实现加载webview,解决nvue中获取不到webview实例的问题

注意下面的方法只能在app端使用, let wv plus.webview.create("","custom-webview",{plusrequire:"none", uni-app: none, width: 300,height:400,top:uni.getSystemInfoSync().statusBarHeight44 }) wv.loadURL("https://ww…

浅析Linux设备驱动:DMA内存映射

文章目录 概述DMA与Cache一致性DMA映射类型一致性DMA映射dma_alloc_coherent 流式DMA映射dma_map_single数据同步操作dma_direct_sync_single_for_cpudma_direct_sync_single_for_device 相关参考 概述 现代计算机系统中,CPU访问内存需要经过Cache,但外…

第6.4章:StarRocks查询加速——Colocation Join

目录 一、StarRocks数据划分 1.1 分区 1.2 分桶 二、Colocation Join实现原理 2.1 Colocate Join概述 2.2 Colocate Join实现原理 三、应用案例 注:本篇文章阐述的是StarRocks-3.2版本的Colocation Join 官网文章地址: Colocate Join | StarRoc…

32单片机基础:GPIO输出

目录 简介: GPIO输出的八种模式 STM32的GPIO工作方式 GPIO支持4种输入模式: GPIO支持4种输出模式: 浮空输入模式 上拉输入模式 下拉输入模式 模拟输入模式: 开漏输出模式:(PMOS无效,就…

【笔记】【开发方案】APN 配置参数 bitmask 数据转换(Android KaiOS)

一、参数说明 &#xff08;一&#xff09;APN配置结构对比 平台AndroidKaiOS文件类型xmljson结构每个<apn>标签是一条APN&#xff0c;包含完成的信息层级数组结构&#xff0c;使用JSON格式的数据。最外层是mcc&#xff0c;其次mnc&#xff0c;最后APN用数组形式配置&am…