Gradle介绍与使用

Gradle介绍与使用

 

Gradle是一个用来管理编译构建流程的工具,它可以帮你管理项目中的依赖、编译、打包、部署、差异(不同的签名文件,不同的icon,不同的服务器地址),你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用。gradle免费开源。

gradle正是基于Groovy来实现的,Groovy是一种DSL(Domain Specific Languages)特定领域语言,这种构建语言基于 Groovy 中,并进行了一些补充,使其易于描述构建,一般只用在特定领域。Gradle 的 DSL 目前支持两种语言的格式,Groovy 和 Kotlin,Kotlin 格式的 DSL 是在 5.0 引入的。

Gradle环境必须依赖JDK与Groovy库,所以Gradle 需要安装 JDK。但因Gradle 自带了 Groovy 库,所以不需要安装 Groovy,Gradle 会忽略已经安装的 Groovy。

 

【DSL(Domain Specific Languages)

你可能已见过或用到过它而未明确意识到,从Windows里的ini配置文件, XML配置文件,到主流编程语言的正则表达式,SQL都算是。

关于DSL可参见:

DSL简介https://blog.csdn.net/u010278882/article/details/50554299

在Android Studio、IntelliJ IDEA中已集成了gradle,较新的Eclipse版本(如eclipse4.10.0)中也已集成了gradle。

本文分两大部分:第一部分Gralde安装与简单使用,第二部分gradle在Android Studio等中的应用入门。Gralde很难全面把握,牵扯的环节方面太多,初学时总觉得云里雾里的,后来我感觉从比较直观的感性认识入手,再逐步深入比较不错,本文是我学习笔记的再次总结,希望对新手有所帮助。万事开头难,对于新手,有了入门认识基础,再往下学挫败感将减少许多。特别声明,本文希望通过这两部分,对Gradle进行比较直观的介绍。

 

第一部分、Gralde安装与简单使用

Gradle 安装

首先要配置好JDK。关于这点参见他文。

【可以在cmd中通过 Java -version 验证是否安装了JDK】

 

访问官网,下载Gradle安装包

https://gradle.org/releases/?utm_source=hacpai.com

官方提供以下 2 种压缩包可供下载

binary-only (如果不需要源码、文档,选择下载这个压缩包就够了)

complete (包含文档及源码)

 

我下载的是gradle-6.0.1-bin.zip是压缩文件版,将其压缩文件解压到任意目录下,即可看到如下文件路径。

bin:该路径下存放了各种工具命令,常用的gradle命令就放在该路径下。

lib:该目录下包含了gradle的各种工具JAR包、gradle的依赖库。

 

下载完成后,解压到指定目录,

配置gradle环境变量:将 bin 目录添加到系统环境变量(配置gradle环境变量)。

将(跟据你的实际情况)D:\gradle-6.0.1\bin

放入系统环境变量path

 

在win10配置系统环境变量

右键此电脑,属性,高级系统设置,系统属性,在“系统变量”中,找到PATH,添加,参见下图:

 

验证 Gradle 是否安装成功

打开命令行工具输入以下命令

gradle -v 回车

看到类似输出,说明设置成功!

【特别提示:下载的版本要和jdk版本匹配,否者出现出错提示:

FAILURE: Build failed with an exception.

……】

 

在cmd中输入gradle -help 回车,可以了解gradle命令概述:

 

Gradle 脚本文件的扩展名.gradle

 

Gradle 脚本文件的例子

//创建一个名为buildA.gradle的文件

task helloA {

    doLast {

        println 'Hello world!'

    }

}

 

特别说明 等同的代码如下:

task helloA {

    println 'Hello world!'

}

注意,gradle 5.0之前的版本,等同的代码还可这样:

task helloA << {

    println 'Hello world!'

}

注意,<<已经过时了,可以通过降低gradle版本(比如4.10.1)运行

 

将上面代码,保存到d:\GradleDemo目录中,文件名buildA.gradle,

可以在cmd中,使用Gradle命令运行。

 

先介绍一下Gradle命令常用格式

gradle taskName -q -b buildFile

其中

taskName是任务名(task name),上例中为helloA。

-q可选,q表示quiet模式,表示编译执行Gradle脚本的过程中,只输出必要的信息。

-b buildFileName 可选,用来指定构建文件名(build file name),上例中为buildA.gradle,如果文件名保存为build.gradle,且保存在当面目录下,可以省略-b buildFileName,否者不能省略。buildFileName可带路径,如:d:\dirA\fileA.gradle。

编译执行某个Project中的某个task:gradle -b Project名 Task名

 

【关于Gradle命令详细语法,参见:

Command-Line Interface

https://docs.gradle.org/current/userguide/command_line_interface.html

 

现在运行上面的例子

在cmd中输入 gradle hello -b d:\GradleDemo\buildA.gradle回车

参见下图:

 

 

Gradle项目有两个概念,projecttask, Project为一个项目,Task为一次构建任务中的一个个别任务,Task是隶属与project的,每次build可以有多个project. Gradlemodule为单位来管理project.

Gradle中每个待编译的工程都是一个Project(每个工程的build.gradle对应一个Project对象),每个Project在构建的时候都包含一系列Task,任务动作定义了一个最小的工作单元,可以定义依赖于其他任务、动作序列和执行条件。

每次构建(build)至少由一个project构成,一个project 由一到多个task构成。项目结构中的每个build.gradle文件代表一个project,在这编译脚本文件中可以定义一系列的tasktask 本质上又是由一组被顺序执行的Action`对象构成,Action其实是一段代码块,类似于Java中的方法。

 

task介绍

task,如其名:任务,gradle就是由一个一个任务来完成的。他其实也是一个类,有自己的属性,也可以"继承",甚至他还有自己的生命周期。

他的定义方式有很多,前面已演示过一个例子极其如何运行。

再举一例

task myTaskA{

 

   def valueB = "我的测试" 

    println  "valueB="  +  valueB

 

   5.times{     //5次的一个循环

         println "it is: " + it   //等价写成println "it is: $a"//$变量名,表示去取变量的值

   }

}

 

保存为保存到d:\GradleDemo目录中,文件名testBuild.gradle

【注】

  .times 和 it是Gradle的循环用关键字

println "it is: " + it  /等价写成

println "it is: $a"//$变量名,表示去取变量的值

 

现在运行上面的例子

在cmd中输入 gradle myTaskA -q -b d:\GradleDemo\testBuild.gradle回车

参见下图:

 

编写自定义插件

在创建自定义插件时,您需要编写一个插件的实现。 Gradle实例化插件并使用Plugin.apply()方法调用插件实例。以下示例包含一个简单的CustomPluginTask插件示例:

 

apply plugin:CustomPlugin

class CustomPlugin implements Plugin<Project> {

    @Override

    void apply(Project project) {

        project.task('CustomPluginTask') {

            doLast {

                println "自定义简单插件测试"

            }

        }

    }

}

 

保存为保存到d:\GradleDemo目录中,文件名testBuildPlugin.gradle

在cmd中输入 gradle CustomPluginTask -q -b d:\GradleDemo\testBuildPlugin.gradle 回车

参见下图:

 

上面的简单例子很简单,重点在于说明Gradle脚本的运行。

 

 

Gradle Wrapper

Gradle Wrapper称为Gradle包装器,是对Gradle的一层包装。为什么需要Gradle Wrapper呢?比如在一个开发团队中,如果每进来一个成员,都需要在计算机中安装Gradle,这个时候运行Gradle的环境和版本就会对构建结果带来不确定性。针对这个问题,Gradle提供了一个解决方案,那就是Gradle Wrapper,它是一个脚本,可以在计算机没有安装Gradle的情况下运行Gradle构建,并且能够指定Gradle的版本,开发人员可以快速启动并运行Gradle项目,而不必手动安装,这样就标准化了项目,从而提高了开发效率。AS在新建项目时会自带Gradle Wrapper,这也是我们很少去单独去下载安装Gradle的原因。Gradle Wrapper的工作流程如下图所示。

 

当使用Gradle Wrapper启动Gradle时,如果指定版本的Gradle没有被下载关联,会先从Gradle官方仓库下载该版本Gradle到用户本地,进行解包并执行批处理文件。后续的构建运行都会重用这个解包的运行时安装程序。

 

Gradle已经内置了Wrapper Task,执行Wrapper Task就可以在项目目录中生成Gradle Wrapper的目录文件。在项目根目录执行gradle wrapper就可以了。

例如,你已预先建立了目录d:\ABC2

在cmd中

输入cd /d d:\ABC2 回车(即按下Enter键)切换到目录d:\ABC2

输入gradle wrappe 回车

参见下图:

 

进入目录d:\ABC2可以看到:

 

可以简化示意为:

├── gradle

│   └── wrapper

│       ├── gradle-wrapper.jar

│       └── gradle-wrapper.properties

├── gradlew

└── gradlew.bat

每个文件的含义如下:

•       gradle-wrapper.jar :包含Gradle运行时的逻辑代码。

•       gradle-wrapper.properties :负责配置包装器运行时行为的属性文件,用来配置使用哪个版本的Gradle等属性。

•       gradlew:Linux平台下,用于执行Gralde命令的包装器脚本。

•       gradlew.bat:Windows平台下,用于执行Gralde命令的包装器脚本。

 

 

学习Gralde主要目的是配置编译构建流程。

 

第二部分、gradle在Android Studio等中的应用入门

 

下一步重点是学习gradle在Android Studio、IntelliJ IDEA、Eclipse中的应用。

                                                 

★ Android Studiogradle

Android Studio 是谷歌(Google)推出的一个Android集成开发工具,基于IntelliJ IDEA。基于Gradle的构建支持。

【注意,不要将Android Studio和IntelliJ IDEA混淆:

Android Studio只支持Android开发,是谷歌在IntelliJ IDEA社区版上剔除其他功能的一款专注Android开发的插件,可以说是弱化版的IntelliJ IDEA。

IntelliJ IDEA是JetBrains公司推出的Java集成开发环境,当然Android也是基于java的,IntelliJ IDEA除了支持Android开发,还支持JavaSE,Android,Groovy,Scale,HTML,CSS,PHP等语言的开发。】

Android Studio一个Android集成开发工具, 建立项目是基于Gradle的构建支持。

用Android Studio新建一个项目

启动Andriod Studio

单击“Start a new Andriod Studio project”

出现

这里,作为测试,选择Basic Activity , 点击Next

Name输入框中输入 MyAppTest

点击“Finish”,请耐心等待构建项目框架。

 

请耐心等待,直到出现如下界面,中间部分是布局编辑器:

【如果你看到的视图不是这样的,请在左侧Project Exlorer中依次展开app -> res ->layout,再双击content_main.xml即可。】

至此,Android studio已(默认利用Gradle)创建一个简单Java项目。默认产生了一些文件,其中有两个文件:第一个是程序文件(mainactivity.java),第二个是.xml界面布局文件(activity_main.xml)。程序文件主要进行逻辑程序的编写,.xml界面布局文件相当于图形界面,我们可以进行一些组件(控件)的布局等操作,然后在程序文件中进行逻辑程序的编写和对组件(控件)的调用。参见下图:

你可以双击程序文件mainactivity.java,打开看看,在此就不图示了。

Android Studio 建立项目是基于Gradle构建的,请留意工程目录——是按约定【或称为默认规范】建立的——Gradle构建框架形成了,参见上图,重点看左侧区域。之后你就可以在此构建框架的基础上,编写应用代码实现具体功能了。

仔细观察分析,你可以直观的发现创建的工程目录遵从一定的规范,源文件、配置文件的位置(目录)遵从一定的规范,这是因为gradle插件在背后作用——gradle插件的默认设置起了作用——因为我们还没有直接改变gradle设置,至于如何改变gradle设置,及gradle设置语法,对于初学者,不要一开始就过于纠缠这些细节,在此,主要介绍利用gradle构建项目的框架,给出直观描述,为以后的深入认识学习奠定基础。

注意 [Android] Gradle插件和Gradle是有区别的。

Gradle 是项目自动化构建开源工具。

[Android] Gradle插件是Android Studio用于开发Android项目的gradle插件。

安装Android Studio后就已经帮我安装了Gradle插件,Gradle插件是独立于Android Studio运行的,它的更新是与Android Studio分开的。

查看Android Studio的Gradle、Android Gradle插件的版本

点击菜单File->-Project Structure

进入Project Structure界面之后,点击Project,如下图:

你可以在这里指定项目使用的Android Gradle Plugin和Gradle版本,当你指定的版本没有下载下来时,在你下次构建项目时会自动下载之。指定Gradle插件的版本的另一种方法,在build.gradle文件中classpath处,指定Gradle的版本的另一种方法,在gradle-wrapper.properties文件中distributionUrl处。本文后面还将提到。

【可参见文档Android Gradle plugin release notes(Android Gradle插件发行说明):https://developer.android.google.cn/studio/releases/gradle-plugin

Android Gradle Plugin 本质上就是 一个AS的插件,它一边调用 Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译、打包功能,从而让我们能够顺畅地在AS上进行开发。

 

Android Studio3.4.1项目中的gradle的文件

使用Android Studio3.4.1创建一个项目可以看到Android 视图项目结构显示,请注意图中箭头标识的扩展名为.gradle的文件:

 

在Project视图项目结构显示,请注意图中箭头标识的扩展名为.gradle的文件:

 

请注意图中箭头标识的扩展名为.gradle的文件,双击它可以打开浏览修改。

 

gradle插件版本配置位置:

可以在此指定Gradle插件的版本,classpath处。

gradle版本配置位置(在gradle-wrapper-propertiies中):

可以在此指定Gradle的版本,在distributionUrl处。

Android Gradle 构建的补充说明

每次构建的执行本质上执行一系列的Task。某些Task可能依赖其他Task。哪些没有依赖的Task总会被最先执行,而且每个Task只会被执行一遍。每次构建的依赖关系是在构建的配置阶段确定的。

初学者往往有一个疑问,点击开build.gradle却没看见一个task,怎么回事?

你点击AndroidStudio右侧的一个Gradle按钮,会打开一个面板,内容差不多是这样的:

里面的每一个条目都是一个task,那这些task是哪来的呢?

一个是根目录下的 build.gradle 中的

dependencies {
    classpath 'com.android.tools.build:gradle:3.5.2'
   
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

参见下图:

 

dependencies {classpath ‘com.android.tools.build:gradle:3.5.2’}是Android Gradle编译插件的版本。

 

还一个是 app 目录下的 build.gradle 中的

apply plugin: 'com.android.application'

参见下图:

apply plugin: ‘com.android.application’是引入了Android的应用构建项目。

对此,就不深入了。【Gradle是Android Studio 默认的build 工具。使用Android Studio 新建一个项目后,默认会生成两个build.gradle 文件,一个Top-level build file(顶级build文件),一个Module级的。其中语句的比较详细解释可参见:
史上最全的Android build.gradle配置教程
https://www.jb51.net/article/145005.htm

还有另外一个文件settings.gradle。如果在当前项目中添加了一个新的 module ,就需要在settings.gradle 文件中包含这个新的module。】

总之,Gradle提供了一个框架,这个框架有一些运行的机制可以让你完成编译,但是至于怎么编译是由插件决定的。还好Google已经给我们写好了Android对应的Gradle工具,我们使用就可以了。

 

 

★ IntelliJ IDEA和gradle

我用的是IntelliJ IDEA 2019.2 x64。

idea自带gradle。

用IntelliJ IDEA创建gradle项目

在初始界面选择create new project或在菜单栏中选择File-->New-->projec

选择Gradle

然后单击“NEXT”:

GroupId是组名,通常用公司域名倒写如:com.xxx.xxx(和填写包名称类似),如果您打算在本地部署项目,则可以不填,这儿填的是cn.abc,ArtifactId标识为新项目的名称,这儿填的是testB,然后单击“NEXT”:

 

然后单击“Finish”,等待项目初始化,项目建好后,显示如下图(展开刚建立的项目testB:单击testB,再单击scr,找到build.gradle双击后的情况):

使用gradle建立项目,请留意工程目录——是按约定【或称为默认规范】建立的,——Gradle构建框架形成了,参见上图,重点看左侧区域。之后你就可以在此构建框架的基础上,编写应用代码实现具体功能了。

现在就可以创建一个测试java类——HiGradle:

工程下的 src用于存放代码。点击src展开,找到Java右击,操作参见下图:

输入类名后回车:

在代码编辑区输入如下测试代码:

public static void main(String args[])

    {

        System.out.println("Hi,gradle");

   }

现在变成:

 

至此,已用IDEA和gradle创建一个简单Java项目。仔细观察分析,你可以直观的发现创建的工程目录遵从一定的规范,源文件、配置文件的位置(目录)遵从一定的规范,这是因为gradle插件在背后作用——gradle插件的默认设置起了作用——因为我们还没有直接改变gradle设置,至于如何改变gradle设置,及gradle设置语法,对于初学者,不要一开始就过于纠缠这些细节,在此,主要介绍利用gradle构建项目的框架,给出直观描述,为以后的深入认识学习奠定基础。

 

IDEA自带gradle,如果你有特殊需要,可以更改Gradle 版本。方法是:

File ->Settings

单击“Build,Execution,Deployment”,单击“Build Tools” ,单击“Gradle”,如图所示:

IntelliJ IDEA 允许您在创建或导入 Gradle 项目时使用不同的选项来配置 Gradle 版本。您可以使用默认的 Gradle 包装器,使用 Gradle 包装器作为任务,或配置本地Gradle 分配器。

 

 

 

★ Eclipsegradle

查看Eclipse是否安装了gradle插件

在Eclipse中选择Help -> Eclipse Marketplace

出现如下对话框界面,单击Installe(已安装)选项卡,如果看到Buildship Gradle Integration 3.0说明已安装,参见下图:

若没有,单击Search(搜索)选项卡,在其find框中buildship点击Go,选择Gradle插件:Buildship Gradle Integration 3.0,然后单击其右边的Install安装,参见下图:

 

Eclipse中创建gradle项目

前提是Eclips安装了gradle插件

File -> Other 在出现的对话框中找到 Gradle -> Gradle Project,参见下图,并按图操作:

稍等一会,

使用gradle建立项目,请留意工程目录——是按约定【或称为默认规范】建立的,——Gradle构建框架形成了,参见上图,重点看左侧区域。之后你就可以在此构建框架的基础上,编写应用代码实现具体功能了。

【gradle项目配置文件说明:

(1)build.gradle

项目自动编译的时候要读取的配置文件,比如指定项目的依赖包等。

(2)gradle.properties

定义了一系列供build.gradle使用的常量。

(3)gradlew与gradlew.bat

gradlew为Linux下的shell脚本,gradlew.bat是Windows下的批处理文件。gradlew是gradle wrapper的缩写,也就是说它对gradle的命令进行了包装, 比如我们进入到指定Module目录并执行“gradlew.bat assemble”即可完成对当前Module的构建(Windows系统下)。

(4)settings.gradle

整个项目的管理,假如我们的项目包含了不只一个Module时,我们想要一次性构建所有Module以完成整个项目的构建,这时我们需要用到这个文件。比如我们的项目包含了ModuleA和ModuleB这两个模块,则这个文件中会包含这样的语句:include ':ModuleA', ':ModuleB'。

现在就可以创建一个测试java类——HiGradle:

工程下的 src用于存放代码。展开ABC项目,找到scr/main/java,右击,操作参见下图:

 

点击“Finish”按钮后:

 

输入如下测试代码

System.out.println("Hi,gradle");

 

至此,已用Eclipse和gradle创建一个简单Java项目。仔细观察分析,你可以直观的发现创建的工程目录遵从一定的规范,源文件、配置文件的位置(目录)遵从一定的规范,这是因为gradle插件在背后作用——gradle插件的默认设置起了作用——因为我们还没有直接改变gradle设置,至于如何改变gradle设置,及gradle设置语法,对于初学者,不要一开始就过于纠缠这些细节,在此,主要介绍利用gradle构建项目的框架,给出直观描述,为以后的深入认识学习奠定基础。

 

本文就到这里吧。

 

 

 

 

延展阅读

Gradle用户使用指南

https://www.jianshu.com/p/5255b100930e

Gradle 教程(Gradle User Manual)

https://docs.gradle.org/current/userguide/userguide.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值