你应该知道的Gradle知识

TT_123456789 2020-08-14 18:42:37 2661

什么是构建工具?

我们大家都知道 Gradle 是一种构建工具,那么什么是构建工具呢?

这里以Android 开发举个例子。

Android 是基于 Java 语言的,最初 Google 希望 Android 能在 Eclipse 上进行开发,为了满足这个需求,Google 开发了一个叫 ADT (Android Developer Tools)的东西,有了 ADT ,我们只需要码好代码,然后直接在 Eclipse 上进行编译、运行、签名、打包等一系列流程,而这背后的工作都是 ADT 的功劳。某种意义上 ADT 就是我们的构建工具。

自 Google 推出 Android Studio 以来,就宣布默认使用 Gradle 来作为构建工具,并且之后放弃更新 ADT ,从此 Gradle 走入 Android 开发者的视野。

一般来说,构建工具除了以上提到的编译、运行、签名、打包等,还具备依赖管理的功能,什么是依赖管理呢?

gradle是用来支持java的,为了能在AS上使用,专门有了个插件叫Android Gradle Plugin。AS中项目的根目录下有个build.gradle文件,其中有

classpath 'com.android.tools.build:gradle:2.1.2'
1
这就是用来依赖gradle插件的代码,类似这样的依赖方式,又方便又很直观,直接可以看到源地址,升级的话直接改下版本号就可以了,这就是所谓的依赖管理。

gradle的依赖管理功能非常实用,只需要一行代码,gradle就会帮你在远程仓库拉取需要的jar包。
仓库

这里的仓库通常指的是远程仓库,比如Jcenter,Maven等。
仓库相当于一个jar文件的集合体,你只要定义好需要什么jar文件,gradle工具就会帮你从你制定的仓库里拉取jar文件。
jar文件会在你执行build构建的时候从远程仓库拉取,并且会在本地保留缓存,所以一个版本的依赖包只需要下载一次。
定义一个依赖通常需要三个元素
group:创建该library的组织名,通常也会是包名,
name :是该library的唯一标识
version:该library的版本号
常规写法

dependencies {
compile 'com.google.code.gson:gson:2.3'
compile 'com.squareup.retrofit:retrofit:1.9.0'
}
完成

当然还有一些类库不在maven或者jcenter中,
这个时候你可以这么定义,将url写在maven中

repositories {
maven {
url "http://repo.acmecorp.com/maven2"
}
}

本地依赖
添加jar文件作为依赖

dependencies {
compile files('libs/libraryname.jar')
}

ibs目录下的所有jar包

dependencies {
compile fileTree('libs')
}

或者

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}

ative包(c/c++写的library会被叫做so包)
app根目录下创建一个jniLibs目录,

dependencies {
compile fileTree(dir: 'jniLibs', include: ['*.so'])
}

rr文件(包含资源文件的依赖包)
将app下build.gradle的配置改为

apply plugin: 'com.android.library'
//删除
applicationId "com.***"

编译通过之后会在build/outputs/aar文件下生产aar包
使用方式,
aar文件也是属于jar包,所以也可以放入到libs目录下,
接着在build.gradle中android方法下

repositories {
flatDir {
dirs 'libs'
}
在dependencies方法下
compile(name:'libraryname', ext:'aar')

这表示在libs目录下,有个叫libraryname,后缀是aar的文件
依赖的形式

compile 'com.google.code.gson:gson:2.3'

这是我们正常情况下使用的方法,

complie:包含所有的依赖包,debug模式下和release模式下都会依赖
其他的还有provided:意思是提供debug支持,但是不会写入release。
testCompile和androidTestCompile:主要针对测试使用。另外还有debugCompile和releaseProvided方式,可以配置在不同的情况下需要配置不同的依赖方式

所以构建工具就是对你的项目进行编译、运行、签名、打包、依赖管理等一系列功能的合集,传统的构建工具有 Make、Ant、Maven、Ivy等,而 Gradle 是新一代的自动化构建工具。

gradle下的project和tasks
在grade中的两大重要的概念,分别是project和tasks。

每一次构建都是有至少一个project来完成,所以Android studio中的project和Gradle中的project不是一个概念。每个project有至少一个tasks。每一个build.grade文件代表着一个project。tasks在build.gradle中定义。当初始化构建进程,gradle会基于build文件,集合所有的project和tasks,一个tasks包含了一系列动作,然后它们将会按照顺序执行,一个动作就是一段被执行的代码。

构建生命周期
一旦一个tasks被执行,那么它不会再次执行了,不包含依赖的Tasks总是优先执行,一次构建将会经历下列三个阶段:
初始化阶段:project实例在这儿创建,如果有多个模块,即有多个build.gradle文件,多个project将会被创建。
配置阶段:在该阶段,build.gradle脚本将会执行,为每个project创建和配置所有的tasks。
执行阶段:这一阶段,gradle会决定哪一个tasks会被执行,哪一个tasks会被执行完全依赖开始构建时传入的参数和当前所在的文件夹位置有关。
项目结构
gradle使用了一个叫做source set的概念,一个source set就是一系列资源文件,其将会被编译和执行,对于Android项目,main就是一个source set
而如果要写测试用例的话,需要另外开一个source set,叫做androidTest,这样才可以单独编译和执行测试用例。

Android 项目包含的 Gradle 配置文件

红色标记部分从上到下剖析:

notepad-master-master/app/build.gradle
这个文件是 app 文件夹下这个 Module 的 gradle 配置文件,也可以算是整个项目最主要的 gradle 配置文件。

notepad-master-master/gradle
这个目录下有个 wrapper 文件夹,里面可以看到有两个文件,我们主要看下 gradle-wrapper.properties 这个文件的内容:

gradle-wrapper.properties

可以看到里面声明了 gradle 的目录与下载路径以及当前项目使用的 gradle 版本,这些默认的路径我们一般不会更改的,这里要注意的是文件里指明的 gradle 版本不对是很多导包不成功的原因之一。

3 .notepad-master-master/build.gradle
这个文件是整个项目的 gradle 基础配置文件,默认的内容就是声明了 android gradle plugin 的版本。

4.notepad-master-master/settings.gradle
这个文件是全局的项目配置文件,里面主要声明一些需要加入 gradle 的 module,我们来看看 该文件的内容:
settings.gradle

项目结构
gradle使用了一个叫做source set的概念,一个source set就是一系列资源文件,其将会被编译和执行,对于Android项目,main就是一个source set
而如果要写测试用例的话,需要另外开一个source set,叫做androidTest,这样才可以单独编译和执行测试用例。

认识下几个命令
只要有构建工具,不需要 IDE 我们一样有办法开发,这个时候我们就需要用到几个有用的 Gradle 命令了:

./gradlew -v 版本号
./gradlew clean 清除9GAG/app目录下的build文件夹
./gradlew build 检查依赖并编译打包

这里注意的是 ./gradlew build 命令把 debug、release 环境的包都打出来,如果正式发布只需要打 Release 的包,则需要更有用的命令 assemble , 如下

./gradlew assembleDebug 编译并打Debug包
./gradlew assembleRelease 编译并打Release的包

值得注意的是,以上所有命令都是在终端里执行,并且必须要切换到所在项目的根目录下执行,win系统直接执行 gradlew

**

当当当福利时间!
**
Gradle 运行慢?
用过 Gradle 的朋友多少会感觉到它有时候会比较慢。我们可以通过下面的三个手段加速你的 Gradle。

· 不用中央仓库。如果你的 repository 配置的是 mavenCentral,放开它吧。试试 jCenter。

· 升级最新的 Gradle 版本。
下载地址:https://gradle.org/install

· 开启Gradle的电动小马达。在 gradle.properties里面添加下面的配置:

如果你的任务没有时序要求,那么打开这个选项可以并发处理多个任务,充分利用硬件资源 org.gradle.parallel=true 这个也可以在命令行通过参数的形式启动,3个小时有效。守护进程可以使编译时间大大缩 短 org.gradle.daemon=true 这个看需求吧,Gradle 是运行在 Java 虚拟机上的,这个指定了这个虚拟机的堆内存初始化 为256M,最大为1G。org.gradle.jvmargs=-Xms256m -Xmx1024m 建议的方式是在你的用户目录下面的 .gradle/ 下面创建一个 gradle.properties。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
TT_123456789
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区