首页 > 自考资讯 > 自考知识

grad y,gradle是干嘛的

头条共创 2024-06-27

Gradle 是Android 项目的默认构建工具,每个Android 朋友都知道它。但真正了解Gradle的人并不多。接下来,小婷会讲一下Gradle比ant、Maven等传统构建工具有何优势,以及Gradle是什么以及它包含哪些内容。这可以让您对Gradle 构建项目有一个整体的看法和理解。

970a7bfd-06fa-4a0d-9a2c-33d5f9b11089~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720071143&x-signature=72o9yDIU7Vh7pzujjsxk7kIdQHA%3DGradle、ant、maven有什么区别?

Gradle比ant或maven强大得多。 Ant和Maven是XML配置。 Gradle使用Groovy编程语言,这使得它具有可编程性并且更加灵活。作为一种编程语言,你可以开发插件,并且有很多第三方插件库。

Gradle执行流程

Gradle执行过程涉及三个部分:初始化、配置、运行。

初始化:解析所有项目并构建项目对象。运行settings.gradle 文件。

配置:分析项目中的所有任务并构建任务拓扑图。

运行:运行所有任务。

监控执行过程:如果想要监控Gradle执行过程并在适当的时候注入处理逻辑,则需要以下接口。

beforeEvalueate {} 或gradle.beforeProject {} //在配置阶段之前运行

afterEvaluate {} 或gradle.afterProject {} //在配置阶段之后运行

gradle.buildFinished {} //执行阶段后执行

gradle.addListener //添加自定义监听器

等级配置

Gradle 由三部分组成:Groovy、构建脚本块和Gradle API。

Groovy 语言是Gradle 使用的编程语言,具有可编程、灵活、方便的特点。

构建脚本块:这意味着如果您想要执行某些功能,则需要使用Groovy 语言创建脚本块。

Gradle API 是Gradle 提供的一组API,旨在使构建过程的编程变得更加容易。

摇篮API

包括项目、任务、属性、文件、Gradle 生命周期等。

项目

build.gradle对应的是Project对象。

任务

您可以创建在Gradle 执行期间在特定时间运行逻辑的任务。

意义:

task hello(group: 'hello', description:'hello task') {println 'hello task!' //配置阶段运行doFirst {println 'task group is:' + group //执行阶段运行}} 示例:统计打包时间

def startBuildTime, endBuildTimethis.afterEvaluate { Project project -//确保您要查找的任务已设置def preBuildTask=project.tasks.getByName(''preBuild)preBuildTask.doFirst {startBuildTime=System.currentTimeMillis() }def buildTask=project.tasks.getByName('build')buildTask.doLast {endBuildTime=System.currentTimeMillis()println "Build time is : ${endBuildTime - startBuildTime}"}} 扩展:基于统计打包,可以按顺序删除一些测试任务以优化构建时间。

任务执行顺序:

由于构建APK 需要使用许多任务,因此任务的运行顺序决定了哪些任务先运行,哪些任务后运行。

task task1 {doLast {println 'task1'}}task task2 {doLast {println 'task2'}}task task3(dependsOn: [task1, task2]) { //dependentOn 应该在闭包中写为doLast {println 'task3'}您还可以}任务输入和输出:

task writeTask { //指定任务的输入inputs.property('versionCode', this.versionCode)inputs.property('versionName', this.versionName)//指定任务的输出Outputs.file destFiledoLast { def data=input.getProperties ()File file=Outputs.getFiles().getSingleFile()//将map转换为实体对象def versionMsg=new VersionMsg(data)def stringWriter=new StringWriter()def xmlBuilder=new MarkupBuilder(stringWriter )if (file.text !=null file.text.size()=0) {//文件没有内容xmlBuilder.releases {release {versionCode(versionMsg.versionCode)versionName(versionMsg.versionName)}} file.withWriter {writer - Writer.append( stringWriter .toString())}}}} 将自定义任务挂钩到构建过程中:

this.project.afterEvaluate { project -def buildTask=project.tasks.getByName('build')if (buildTask==null) { throw GradleException('未找到构建任务')}buildTask.doLast {writeTask.execute( )} }环境

settings.gradle 文件对应于Settings 对象。 Gradle初始化过程执行该文件。

源集

该功能是改变Gradle默认约定的文件位置。 Gradle 要求规则大于配置。也就是说,如果不更改配置,它将遵循默认规则。例如,从java文件夹中获取源代码,从res文件夹中获取资源。但是,您可以通过SourceSet 更改代码、资源等的位置。

android {.sourceSets {main {jniLibs.srcDirs=['libs'] //更改SO库存储位置res.srcDirs=['src/main/res','src/main/res-ad ','src/main/res-pay'] //更改资源存储位置}}} 插件

1.定义插件类

class ExamplePluginimplements PluginProject {@Overridevoid apply(Project project) {println ‘Hello ’ + project.nameproject.extensions.create(‘Custom Alias’, Custom Class)}} 自定义任务类必须继承自DefaultTask 类。

class ExampleTask extends DefaultTask {ExampleTask() {group='amy'description='example'} //Gradle执行阶段运行的代码@TaskActionvoid doAction() {.}} 2.在配置文件中指定插件类

3.添加到build.gradle文件

plugin: ‘插件名称’ 应用自定义别名{……}Android 和Java 插件扩展到Gradle

Android 对Gradle 的扩展主要是配置变体。

android {.} 配置脚本块设置是变体设置。还可以通过检索Android 项目的变体来获取此信息。

Java 的Gradle 扩展比Android 简单得多,主要是在jar 打包等功能方面。

现在,这就是Gradle 的全部内容。通过上面的介绍,希望您已经对Gradle有了一个大概的了解。后续我会写一篇文章介绍构建apk的整个任务流程,敬请期待。

版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。

猜你喜欢