本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。
说在前面
最直观的,用Gradle作为构建工具哪里爽得最明显?
依赖里面一行代码 依赖+管理 库。而不是Eclipse时代复制jar包,再手动添加。
compile 'com.android.support:appcompat-v7:23.4.0'
依赖?很明显啦。
管理?其实管理就是改改库的版本号,但是比替换jar来得方便多了吧。
一、什么是构建工具?
构建工具,帮我们构建项目的工具。
构建工具的做的事情一般是 —— 编译、运行、打包、签名 和 依赖管理。
二、构建工具有哪些?
传统的构建工具有:Make、Ant、Maven和Ivy等。
对于安卓:
Eclipse时代的构建工具是:ADT
Android Studio时代的构建工具是:Gradle
三 、什么是Gradle
首先Gradle是构建工具。
虽然As把Gradle作为自身的构建工具,但是Gradle是独立的项目,跟谷歌不存在从属关系。
简单来说有以下几点:
1、独立项目,和Google无关
2、Grdle基于Groovy。(Maven、Ant基于xml)
3、Gradle兼容Maven、Ant
4、Gradle 的推出主要以 Java 应用为主,当然还支持 Android、C、C++等。
四、Gradle和As的合作
As怎么依赖Gradle让Gradle作为自身的构建工具呢?Google开发一个Gradle插件。
As项目依赖了这个插件,就相当于让Gradle作为了自身的的构建工具。
现在比如我们新建一个As项目,打来项目的根目录的gradle.build文件。是类似如下代码:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
关键是
classpath 'com.android.tools.build:gradle:2.1.2'
这句代码,让As成功依赖Gradle插件。
2.1.2代表的是谷歌的Gradle插件的版本号,而不是Gradle的版本号。
上面的一、二、三、四的4大点,我弄了张图,方便以后看起来省事。
五、As项目里面那些Gradle团伙
哇,万Gradle穿心,魑魅魍魉,怎么他就这么多!
来吧来吧,说道说道:
(为了方便说清楚,我们不严格按照上图的顺序来)
从直观上看,我们看到项目有一个.gradle文件夹和一个gradle文件夹。
.gradle文件夹
- .gradle文件夹
.gradle文件夹 是gradle 运行以后生成的缓存文件夹。所以有时从网络上下载的as项目没有这个文件夹并不奇怪。
(个用,转用可删之)
gradle文件夹
- gradle文件夹
gradle-wrapper.jar
jar就jar吧gradle-wrapper.properties
通过配置其中的gradle-wrapper.properties 中的distributionUrl 可以给你的项目指定需要使用的gradle 版本。
当前打开如下
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
作为项目的module里面的build.gradle文件
- /app/build.gradle
每一个mudole里面都有一个 /�module/build.gradle
这个很可以细说
// com.android.application 说明了这是一个项目
// 如果是作为库的module 是 apply plugin: 'com.android.library'
apply plugin: 'com.android.application'
// android 相关 构建参数
android {
compileSdkVersion 23 // 编译使用SDK版本
buildToolsVersion "23.0.3" // 编译工具的版本 buildTools
defaultConfig {
applicationId "com.am.gradletest" // 用于标识的包名
minSdkVersion 14 // sdk最低支持版本
targetSdkVersion 23 // 目标SDK版本,如果目标设备的API版本正好等于此数值,就不会为此程序开启兼容性检查判断的工作
versionCode 1 //版本号
versionName "1.0"
}
// 编译类型
// 下面 声明了 debug 和 release 两种类型,名字随意
buildTypes {
// release 发布 ,release里面是关于发布的配置
release {
minifyEnabled false // minifyEnabled 是否开启混淆,false不开启
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 混淆文件
}
// debug(不作为发布版)时候的配置,这个debug的代码块默认不带,这里是手动加的
debug{
}
}
}
// 依赖 三种依赖,第一种是本地的jar,第二种是本地的module库,第三种是利用gradle远程的依赖管理
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) // 这句代码会自动依赖本地的所有jar,就不要逐个依赖了
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}
根目录的全局 build.gradle
默认有三个“节点”,
buildscript
allprojects
task clean
local.properties
- local.properties
Android studio 自动生成,用于配置本地的 SDK、NDK 路径。
因为这是针对设备的设置,不同的设备SDK路径不一定一样。
VCS(版本控制)的时候应该忽略掉这个文件。
gradle.properties
gradle.properties 文件,是对gradle的配置。
有时候会gradle坐优化就会在这里面做一些修改。
gradlew文件 和 gradlw.bat 文件
简单来说,这两个文件就是让玲玲可以在不同的平台执行一样的命令的。
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的缩写。
,比如查看版本,./gradlew -v (win用户直接输入 gradlew -v)
请问android studio创建的工程目录下的gradlew文件有什么作用?
gradlew相关命令:
- assemble : 针对某个版本创建一个apk
- clean : 删除所有的构建任务(包含已经构建号的apk文件)
- check : 执行Lint检查,如果Lint检查到错误,则停止执行脚本
- build : 同时执行assemble,check命令
- connectedCheck : 执行测试任务
- deviceCheck : 执行在远程设备上的测试
- installDebug : 安装debug版本
- installRelease : 安装release版本
- uninstallDebug : 卸载debug版本
- uninstallRelease : 卸载release版本
- tasks :查看当前可构建的所有task
- -v : 查看当前的gradle版本
settings.gradle
用来配置多模块的
比如当前工程打开该文件:
include ':app'
比如你的项目有两个模块module-a,module-b,那么你就需要在这个文件中进行配置,格式如下:
include ':module-a',':module-b'
大概就到这里,深入学习还可以研究主工程build.gradle的配置,还有gradlew的命令。这花时间需实际需要改善。
本篇完。
参考:
给 Android 初学者的 Gradle 知识普及
Android 开发你需要了解的 Gradle 配置
gradle入门