对Gradle的基本理解
一个基于Gradle的Android工程,必须有一个build.grade构建脚本,而我们用Android Studio创建工程时,Studio以为我们自动生成了该脚本文件。每个Module也会对应各自的一个构建脚本build.grade文件。
Gradle脚本不是像传统的xml文件那样,而是一种基于Groovy的动态DSL,而Groovy语言是一种基于jvm的动态语言。
在grade中两大概念:project和tasks。
Android studio中的project和Gradle中的project不是一个概念。
每个project有至少一个tasks。每一个build.grade文件代表着一个project。tasks在build.gradle中定义。
当初始化构建进程,gradle会基于build文件,集合所有的project和tasks,一个tasks包含了一系列动作,
然后它们将会按照顺序执行,一个动作就是一段被执行的代码,很像Java中的方法。
Android中的Gradle脚本文件
Android的build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
}
}
这就是实际构建开始的地方,仓库地址,使用了JCenter,JCenter类似maven库,grade还支持其他几个仓库,不论是远程还是本地仓库。
每个Module构建脚本的第一行都会声明使用什么插件:
apply plugin: 'com.android.application'
每个Android应用都需要一个插件:’com.android.application’;依赖库插件为’com.android.library’。(两插件不能同时使用)
插件用于扩展gradle脚本的能力,在一个项目中使用插件,这样该项目的构建脚本就可以定义该插件定义好的属性和使用它的tasks。
当使用Android 插件的时候,Android标签将可以被使用,如:
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
//设置代码文件源,一般用于导入旧的eclipse Android工程
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
androidTest.setRoot('tests')
}
}
Gradle 基本构建命令
tasks:命令行,导航到项目文件夹下,命令,列出所以可运行的tasks
$ gradlew tasks
assemble:开发时,构建项目,你需要运行assemble task通过debug配置
$ gradlew assembleDebug
该任务将会创建一个debug版本的app,同时Android插件会将其保存在MyApp/app/build/ outputs/apk目录下。
check 运行所以的checks,这意味着运行所有的tests在已连的设备或模拟器上
build 是check和assemble的集合体
clean 清楚项目的output文件