在Gradle爆红之前,常用的构建工具是ANT,然后又进化到Maven。ANT和Maven这两个工具其实也还算方便,现在还有很多地方在使用。但是二者都有一些缺点,所以让更懒得人觉得不是那么方便。比如,Maven编译规则是用XML来编写的。XML虽然通俗易懂,但是很难在xml中描述 if{某条件成立,编译某文件}/else{编译其他文件} 这样有不同条件的任务。所以,Gradle选择了Groovy。
Groovy
Groovy基于Java并拓展了Java,Groovy说白了就是把写Java程序变得像写脚本一样简单。写完就可以执行,Groovy内部会将其编译成Java class然后启动虚拟机来执行。
List底层对应的就是java中的List接口,ArrayList作为真正的实现
def mList = [1,"zhangsan",false]
mList.each{
item -> println()
}
Map底层对应java中的LinkeHashMap
def mMap = ['name':'zhangsan',age:18,addr:'北大街']
Range是Groovy对List的一种扩展
def aRange = 1..5 (开始值 + 两点 + 结束值)
aRange = 1..<5 (< 表示不包括最后一个值)
Closure闭包,是一种以{}括起来可执行的代码
def aClosure = {
//->左边表示参数,右边表示逻辑代码
params -> println "$params"
}
def aClosure = {
//或者没有(显式)参数,但是会有默认参数it
println "no params"
}
aClosure() //无参闭包调用
aClosure("name") //有参闭包调用
aClosure.call("name") //有参闭包调用
Groovy文件的读写
def nh = new File('nihao.groovy')
println new String(nh.getBytes())
nh.eachLine{
line -> println line
}
nh.withInputStream{
ios -> ios.text
}
nh.withOutputStream{
out << "hehe"
}
Gradle
在Gradle中,每个待编译的工程都叫一个project(build.gradle),每个build.gradle都会转成一个project对象,Project对象对应的就是Build Script对象;每个project中包含一系列的task,一个tasks包含了一系列动作,也就是一段被执行的代码。
Gradle工作流程:
初始化 --> 执行settings.gradle,为每个project创建实例。 配置 --> 执行project(build.gradle),为每个project创建task。 执行 --> gradle会决定执行哪个Task任务
//添加插件
apply plugin: 'com.android.application'
android {
//编译app使用的api版本
compileSdkVersion 22
//构建工具版本
buildToolsVersion "22.0.1"
//核心配置
defaultConfig {
applicationId "com.gradleforandroid.gettingstarted"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile
('proguard-android.txt'), 'proguard-rules.pro'
}
//构建一个新版本,类似继承
staging.initWith(buildTypes.debug)
staging {
applicationIdSuffix ".staging"
versionNameSuffix "-staging"
debuggable = false
}
}
productFlavors {
//创建不同版本,相同属性覆盖默认属性
shanxisheng {
applicationId 'com.gradleforandroid.red'
versionCode 3
}
weiyangqu {
applicationId 'com.gradleforandroid.blue'
minSdkVersion 14
versionCode 4
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
}
Android task
assemble 针对每个版本创建一个apk
clean 删除所有的构建任务,包含apk文件
check 执行Lint检查并且能够在Lint检测到错误后停止执行脚本
build 执行assemble和check
connectedCheck 在测试机上执行所有测试任务
deviceCheck 执行所有的测试在远程设备上
网友评论