11Gradle专题
22===
33
4- 随着` Google ` 对` Eclipse ` 的无情抛弃以及` Studio ` 的不断壮大,` Android ` 开发者逐渐拜倒在` Studio ` 的石榴裙下。
5- 而作为` Studio ` 的默认编译方式,` Gradle ` 已逐渐普及。我最开始是被它的多渠道打包所吸引。关于多渠道打包,请看之前我写的文章[ AndroidStudio使用教程(第七弹)] [ 1 ]
6-
7- 接下来我们就系统的学习一下` Gradle ` 。
8-
94作用
105---
116
12- Gradle是一个开源的自动化构建工具 。现在Android项目构建编译都是通过Gradle进行的,Gradle的版本在` gradle/wrapper/gradle-wrapper.properties ` 下:
13- ```
7+ [ Gradle ] ( https://docs.gradle.org/7.3.3/userguide/what_is_gradle.html ) 是一个开源的自动化构建工具 。现在Android项目构建编译都是通过Gradle进行的,Gradle的版本在` gradle/wrapper/gradle-wrapper.properties ` 下:
8+ ![ image ] ( https://github.com/CharonChui/Pictures/blob/master/gradle_version.png?raw=true )
149
15- ```
16-
17-
18- 使用这个工具可以完成app的编译打包等工作。
10+ 当前Gradle版本为6.7.1。当我们执行assembleDebug/assembleRelease编译命令的时候,Gradle就会开始进行编译构建流程。
1911
2012
2113简介
2214---
2315
24- [ Gradle] ( https://gradle.org/releases/ ) 是以` Groovy ` 语言为基础,面向` Java ` 应用为主。基于` DSL(Domain Specific Language) ` 语法的自动化构建工具。
16+ [ Gradle] ( https://gradle.org/releases/ ) 是以` Groovy ` 语言为基础,面向` Java ` 应用为主。
17+ 基于` DSL(Domain Specific Language) ` 语法的自动化构建工具。
2518
2619` Gradle ` 集合了` Ant ` 的灵活性和强大功能,同时也集合了` Maven ` 的依赖管理和约定,从而创造了一个更有效的构建方式。凭借` Groovy ` 的` DSL ` 和创新打包方式,` Gradle ` 提供了一个可声明的方式,并在合理默认值的基础上描述所有类型的构建。 ` Gradle ` 目前已被选作许多开源项目的构建系统。
2720
28- [ Groovy] ( http://www.groovy-lang.org/api.html ) 基于Java并拓展了Java。 Java程序员可以无缝切换到使用Groovy开发程序。Groovy说白了就是把写Java程序变得像写脚本一样简单。写完就可以执行,Groovy内部会将其编译成Javaclass然后启动虚拟机来执行。当然,这些底层的渣活不需要你管。* 实际上,由于Groovy Code在真正执行的时候已经变成了Java字节码,所以JVM根本不知道自己运行的是Groovy代码* 。
21+ [ Groovy] ( http://www.groovy-lang.org/api.html ) 基于Java并拓展了Java。
22+ Java程序员可以无缝切换到使用Groovy开发程序。Groovy说白了就是把写Java程序变得像写脚本一样简单。写完就可以执行,Groovy内部会将其编译成Javaclass然后启动虚拟机来执行。
23+ 当然,这些底层的渣活不需要你管。实际上,由于Groovy Code在真正执行的时候已经变成了Java字节码,所以JVM根本不知道自己运行的是Groovy代码。
24+
2925
3026因为` Gradle ` 是基于` DSL ` 语法的,如果想看到` build.gradle ` 文件中全部可以选项的配置,可以看这里
3127[ DSL Reference] ( http://google.github.io/android-gradle-dsl/current/ )
@@ -34,15 +30,61 @@ Gradle是一个开源的自动化构建工具。现在Android项目构建编译
3430
3531![ Image] ( https://raw.githubusercontent.com/CharonChui/Pictures/master/android_build_process.png?raw=true )
3632
33+ ### Gradle的生命周期
34+
35+ 1 . Initialization:初始化阶段
36+ - 解析整个工程中所有的Project,构建所有Project对应的project对象。
37+ - 初始化阶段执行项目目录下的settings.gradle脚本,用于判断哪些项目需要被构建,并且为对应项目创建Project对象。
38+
39+ 2 . Configuration配置阶段
40+ - 解析所有的project对象中的Task,构建所有Task的括扑图
41+ - 配置阶段的任务是执行各module下的build.gradle脚本,从而完成Project的配置,并且构建Task任务依赖关系图以便在执行阶段按照依赖关系执行Task。
42+ - 这个阶段Gradle会拉取remote repo的依赖(如果本地之前没有下载过依赖的话)
43+ 3 . Execution执行阶段
44+ 执行具体的task以及其依赖的task
45+ 4 . Build Finished
46+
47+
48+
49+
50+
3751Gradle与Android Studio的关系
3852---
3953
4054Gradle跟Android Studio其实没有关系,但是Gradle官方还是很看重Android开发的,Google在推出AS的时候选中了Gradle作为构建工具,为了支持Gradle
41- 能在AS上使用,Google做了个AS的插件叫Android Gradle Plugin,所以我们能在AS上使用Gradle完全是因为这个插件的原因。在项目的根目录有个build.gradle文件,里面有这么一句代码:
55+ 能在AS上使用,Google做了个AS的插件叫Android Gradle Plugin,所以我们能在AS上使用Gradle完全是因为这个插件的原因。
56+
57+ ### AGP
58+ AGP即Android Gradle Plugin,主要用于管理Android编译相关的Gradle插件集合,包括javac,kotlinc,aapt打包资源,D8/R8等都在AGP中。
59+
60+ AGP的版本是在根目录的build.gradle中配置的:
61+ ```
62+ dependencies {
63+ classpath 'com.android.tools.build:gradle:4.2.1'
64+ ...
65+ }
66+ ```
67+
68+ ### AGP与Gradle的区别与联系
69+
70+ Gradle是构建工具,而AGP是管理Android构建的插件。可以理解为AGP是Gradle构建流程中重要的一环。
71+
72+ 虽然AGP和Gradle不是一个纬度的事情,但是两者也在一定程度上有所关联:两者的版本号必须匹配上: https://developer.android.com/build/releases/gradle-plugin?hl=zh-cn#updating-gradle
73+
74+
75+ ![ image] ( https://github.com/CharonChui/Pictures/blob/master/agp_gradle_version.png?raw=true )
76+
77+
78+ 既然Android编译是通过AGP实现的,AGP就是Gradle的插件,那么这个插件是什么时候被apply的内?
79+ 因为一个插件如果没有apply的话,那么压根不会执行的。
4280```
43- classpath 'com.android.tools.build:gradle:2.1.2'
81+ plugins {
82+ id 'com.android.application'
83+ id 'kotlin-android'
84+ id 'kotlin-kapt'
85+ }
4486```
45- 这个就是依赖gradle插件的代码,后面的版本号代表的是android gradle plugin的版本,而不是Gradle的版本,这个是Google定的,跟Gradle官方没关系。
87+ 这就是AGP被apply的地方,也是区分一个module究竟是被打包成app还是一个library的地址。
4688
4789
4890
0 commit comments