gradle入门
2016-03-01 11:04
375 查看
随着Android Studio越来越完善,更多的开发者舍弃掉Eclipse。但是新的IDE与以往的Eclipse有很大区别,这导致部分开发者望而却步,其中一个大家觉得比较麻烦的是Android Studio采用的新的构建系统,gradle。那么这篇文章我将对gradle进行一个简单介绍(主要讲gradle配合Android Studio的使用),希望帮助大家熟悉gradle。
gradle跟ant/maven一样,是一种依赖管理/自动化构建工具。但是跟ant/maven不一样,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。更多详细介绍可以看它的官网:http://www.gradle.org/
更容易重用资源和代码;
可以更容易创建不同的版本的程序,多个类型的apk包;
更容易配置,扩展;
更好的IDE集成;
1.基本配置:
首先明确gradle跟maven一样,也有一个配置文件,maven里面是叫pom.xml,而在gradle中是叫build.gradle。Android Studio中的android项目通常至少包含两个build.gradle文件,一个是project范围的,另一个是module范围的,由于一个project可以有多个module,所以每个module下都会对应一个build.gradle。这么说有点抽象,看下面这个图:
这是一个android工程的project视图,上面那个是module下的build.gradle文件。下面那个是project下的build.gradle文件。这两个文件是有区别的,project下的build.gradle是基于整个project的配置,而module下的build.gradle是每个模块自己的配置。下面看下这两个build.gradle里面的内容:
project#build.gradle:
注:大家可能很奇怪,为什么仓库repositories需要声明两次,这其实是由于它们作用不同,buildscript中的仓库是gradle脚本自身需要的资源,而allprojects下的仓库是项目所有模块需要的资源。所以大家千万不要配错了。
module#build.gradle:
defaultConfig中是一些基本配置,它会同时应用到debug/release版本上,下面列举了所有可配项及对应的值:
buildTypes结点很重要,这里可以配置构建的版本的一些参数,默认有两个构建版本release/debug,当然你可以自定义一个构建版本,比如叫foo,然后通过gradlew assembleFoo就可以生成对应的apk了。
buildTypes里还有很多可配置项,下面列举了所有可配项以及debug/release版本的默认值:
现在大家对build.gradle已经初步了解了,我们再看下其他一些与gradle相关的文件:
1.gradle.properties:
从名字上就知道它是一个配置文件,没错,这里面可以定义一些常量供build.gradle使用,比如可以配置签名相关信息如keystore位置,密码,keyalias等。
2.settings.gradle:
这个文件是用来配置多模块的,比如你的项目有两个模块module-a,module-b,那么你就需要在这个文件中进行配置,格式如下:
3.gradle文件夹:
这里面有两个文件,gradle-wrapper.jar和gradle-wrapper.properties,它们就是gradle wrapper。gradle项目都会有,你可以通过命令gradle init来创建它们(前提是本地安装了gradle并且配置到了环境变量中)。
4.gradlew和gradlew.bat:
这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。
gradlew的用法跟gradle一模一样,比如执行构建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的缩写。
2.gradle仓库:
gradle有三种仓库,maven仓库,ivy仓库以及flat本地仓库。声明方式如下:
有一些仓库提供了别名,可直接使用:
3.gradle任务:
gradle中有一个核心概念叫任务,跟maven中的插件目标类似。
gradle的android插件提供了四个顶级任务
执行任务可以通过gradle/gradlew+任务名称的方式执,执行一个顶级任务会同时执行与其依赖的任务,比如你执行
它通常会执行:
这时会在你项目的build/outputs/apk或者build/outputs/aar目录生成输出文件
注:linux下执行构建任务需要首先更改gradlew脚本的权限,然后才能执行该脚本:
可以通过:
列出所有可用的任务。在Android Studio中可以打开右侧gradle视图查看所有任务。
四.常见问题
1.导入本地jar包:
跟eclipse不太一样,android studio导入本地jar除了将jar包放到模块的libs目录中以外,还得在该模块的build.gradle中进行配置,配置方式是在dependencies结点下进行如下声明:
如果libs下有多个jar文件,可以这样声明:
2.导入maven库:
可见,格式为
3.导入某个project:
你的app是多模块的,假设有两个模块app和module-A,并且app模块是依赖module-A的,这时候我们就需要在app模块的build.gradle中的dependencies结点下配置依赖:
并且你需要在settings.gradle中把module-A模块包含进来:
此外,这种情况下module-A模块是作为库存在的,因而它的build.gradle中的插件声明通常应该是这样的:
而且,作为library的模块module-A的build.gradle文件的defaultConfig中是不允许声明applicationId的,这点需要注意。
4.声明三方maven仓库:
可能你项目需要的一些库文件是在你们公司的私服上,这时候repositories中仅有jcenter就不行了,你还需要把私服地址配到里面来,注意,应该配到project的build.gradle中的allprojects结点下或者直接配到某个模块中如果仅有这个模块用到。
配置方式:
5.依赖三方aar文件:
6.将库项目导出为aar:
首先你的项目必须是一个库项目,build.gradle中进行配置:
然后你可以在命令行中进到项目目录,执行如下gradle任务:
生成的aar在/build/output/aar文件夹中
7.引用本地aar:
首先将aar文件放到模块的libs目录下,然后在该模块的build.gradle中声明flat仓库:
最后在dependencies结点下依赖该aar模块:
8.排除依赖:
当出现依赖冲突的时候可以通过排除依赖解决,具体方式如下:
9.多dex支持(打包65k方法数限制)
首先在build.gradle的buildConfig中增加如下配置:
接着,在dependencies结点下增加如下依赖:
最后,让你的Application继承MultiDexApplication,如果你的应用没有声明Application,可以在manifest文件的application结点下增加name属性,值为android.support.multidex.MultiDexApplication。
详细内容参见官方文档。
10.自动移除不用资源
可以在buildTypes结点中增加如下配置:
11.忽略lint错误:
可以在build.gradle文件中的android结点下增加如下配置:
12.声明编译的java版本
可以在build.gradle文件中的android结点下增加如下配置:
13.应用签名配置
首先在module的build.gradle中增加这些字段:
具体配置方式为:
首先在build.gradle的android结点下增加如下配置:
注:debug的默认签名为:
位置为
然后在buildTypes结点下的对应版本中添加上面的配置:
当然,release不是固定的名称,你可以随便取,比如这样:
真实开发中,把密码配置到build.gradle中不是很好的做法,最好的做法是放在gradle.properties中:
然后直接引用即可:
14.定制buildConfig:
在build.gradle中配置:
这样就会在BuildConfig类中生成type字段:
一. gradle是什么?
gradle跟ant/maven一样,是一种依赖管理/自动化构建工具。但是跟ant/maven不一样,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。更多详细介绍可以看它的官网:http://www.gradle.org/
二.为什么使用gradle?
更容易重用资源和代码;可以更容易创建不同的版本的程序,多个类型的apk包;
更容易配置,扩展;
更好的IDE集成;
三.gradle入门需知
1.基本配置:首先明确gradle跟maven一样,也有一个配置文件,maven里面是叫pom.xml,而在gradle中是叫build.gradle。Android Studio中的android项目通常至少包含两个build.gradle文件,一个是project范围的,另一个是module范围的,由于一个project可以有多个module,所以每个module下都会对应一个build.gradle。这么说有点抽象,看下面这个图:
这是一个android工程的project视图,上面那个是module下的build.gradle文件。下面那个是project下的build.gradle文件。这两个文件是有区别的,project下的build.gradle是基于整个project的配置,而module下的build.gradle是每个模块自己的配置。下面看下这两个build.gradle里面的内容:
project#build.gradle:
module#build.gradle:
buildTypes结点很重要,这里可以配置构建的版本的一些参数,默认有两个构建版本release/debug,当然你可以自定义一个构建版本,比如叫foo,然后通过gradlew assembleFoo就可以生成对应的apk了。
buildTypes里还有很多可配置项,下面列举了所有可配项以及debug/release版本的默认值:
现在大家对build.gradle已经初步了解了,我们再看下其他一些与gradle相关的文件:
1.gradle.properties:
从名字上就知道它是一个配置文件,没错,这里面可以定义一些常量供build.gradle使用,比如可以配置签名相关信息如keystore位置,密码,keyalias等。
2.settings.gradle:
这个文件是用来配置多模块的,比如你的项目有两个模块module-a,module-b,那么你就需要在这个文件中进行配置,格式如下:
这里面有两个文件,gradle-wrapper.jar和gradle-wrapper.properties,它们就是gradle wrapper。gradle项目都会有,你可以通过命令gradle init来创建它们(前提是本地安装了gradle并且配置到了环境变量中)。
4.gradlew和gradlew.bat:
这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。
gradlew的用法跟gradle一模一样,比如执行构建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的缩写。
2.gradle仓库:
gradle有三种仓库,maven仓库,ivy仓库以及flat本地仓库。声明方式如下:
gradle中有一个核心概念叫任务,跟maven中的插件目标类似。
gradle的android插件提供了四个顶级任务
注:linux下执行构建任务需要首先更改gradlew脚本的权限,然后才能执行该脚本:
四.常见问题
1.导入本地jar包:
跟eclipse不太一样,android studio导入本地jar除了将jar包放到模块的libs目录中以外,还得在该模块的build.gradle中进行配置,配置方式是在dependencies结点下进行如下声明:
你的app是多模块的,假设有两个模块app和module-A,并且app模块是依赖module-A的,这时候我们就需要在app模块的build.gradle中的dependencies结点下配置依赖:
4.声明三方maven仓库:
可能你项目需要的一些库文件是在你们公司的私服上,这时候repositories中仅有jcenter就不行了,你还需要把私服地址配到里面来,注意,应该配到project的build.gradle中的allprojects结点下或者直接配到某个模块中如果仅有这个模块用到。
配置方式:
首先你的项目必须是一个库项目,build.gradle中进行配置:
7.引用本地aar:
首先将aar文件放到模块的libs目录下,然后在该模块的build.gradle中声明flat仓库:
当出现依赖冲突的时候可以通过排除依赖解决,具体方式如下:
首先在build.gradle的buildConfig中增加如下配置:
详细内容参见官方文档。
10.自动移除不用资源
可以在buildTypes结点中增加如下配置:
可以在build.gradle文件中的android结点下增加如下配置:
可以在build.gradle文件中的android结点下增加如下配置:
首先在module的build.gradle中增加这些字段:
首先在build.gradle的android结点下增加如下配置:
在build.gradle中配置:
相关文章推荐
- SourceProvider.getJniDirectories
- 执行失败的任务 ': processDebugManifest'
- Android Studio使用教程(六):Gradle多渠道打包
- Android客户端程序Gradle如何打包
- Android Studio使用教程(四):Gradle基础
- Android Studio使用教程(五):Gradle命令详解和导入第三方包
- Win7安装gradle
- mac gradle 安装
- 关于Android Studio 和 Gradle的那些事儿
- Gradle这个黑盒子
- maven用户试用gradle
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序-依赖管理篇
- Gradle 构建 android 应用常见问题解决指南
- Adnroid Studio Gradle 多渠道打包
- Gradle,构建工具的未来?
- Android Studio 使用 Gradle 打包 Jar-IT蓝豹
- gradle安装
- idea使用gradle搭建SpringBoot
- 如何在 Eclipse 下用 Gradle 构建 Web Application