1、语言和作用
Gradle是一种自动化构建语音,是一种DSL,目前是Android的默认构建工具,是一个编译框架。
APK构建流程:
2、Gradle特性
3、Gradle的重要概念
①Wrapper:指的是gradle-wapper.properties文件中的一些配置项,通过gradle-wrapper.jar包执行这些属性,比如distributionUrl指本地是否存在gradle插件,如果不存在就去网上进行下载。
②Closure:闭包,可以理解为打包过程中一系列的执行命令。
③Project:执行的最小单元。
④Tasks:指任务,在任务中可以执行一些打包的脚本。
⑤Hooks:比如调用gradle方法时,它会有个callback,让你知道它执行完了给你返回,你可以在callback中写自己的groovy语法代码。
⑥Plugin:插件,gradle可以做些插件化的功能,主要是编译器的插件,这个编译器的插件可以用java编写也可以用groovy进行编写,不限定语音。
3.1 Gradle Wrapper
一个gradle的封装体。有了gradle wrapper,即便你的机器上没有安装gradle,也可以执行gradle的构建工作了。
根目录下面的build.gradle文件:
//构建脚本
buildscript {
// 定义一个公共仓库
repositories {
google() //gogole的公共仓库
jcenter() //github的公共仓库
mavenCentral()
}
dependencies {
//定义依赖
classpath 'com.android.tools.build:gradle:4.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//项目本身需要的依赖,配置所有的module公共依赖,如果app或module中的子build.grade没有定义这些依赖,就采用这个依赖
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
//系统自动生成的task,主要用于清除构建的文件(就是编译后的build下面的文件)
task clean(type: Delete) {
delete rootProject.buildDir
}
App或module下的build.gradle文件:
//配置当前module构建属性,如果说声明的com.android.application,表示生成的是apk文件//如果说声明的com.android.plugin,表示生成的是aar文件或者是被依赖的文件
apply plugin: 'com.android.application'
//android{}表示当前针对android平台,针对当前module项目构建配置选项
android {
compileSdkVersion 29 //编译sdk的版本
buildToolsVersion "29.0.0" //编译工具的版本号
defaultConfig {
applicationId "com.jw.robot.armed"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
abiFilter("arm64-v8a")
abiFilter("armeabi-v8a") //google上架必须要这个
abiFilter("x86")
abiFilter("x86_64")
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// implementation 'androidx.appcompat:appcompat:1.1.0'
// implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:26.+'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
//以下为groovy语法
task stringText{
// 使用def关键字
def str1 = "one"
def str2 = "two"
println(str1)
println("one and ${str2}" )
}
task list{
// 定义集合
def list = [1, 2, 3, 4, 5]
def numList = ["one", "two", "three"]
println(list[0] + "--" + list[1])
println(numList[2])
numList.each {
println it
}
}
//定义一个map对象
task map {
def map = ['name':'jack', 'value':19]
println(map['name'])
map.each {
println "key:${it.key}, value:${it.value}"
}
}
task method{
println methodA(2,3)
}
//定义一个方法
def methodA(int a, int b) {
//println a + b
//groovy语法中默认将函数的最后一行作为结果返回
a + b
}
task javaBean{
Student student = new Student()
student.name="groovy"
student.age = 18
println(student.age)
print "age: ${student.age}"
student.setName("zhangsan")
println()
println("name:${student.name}")
}
//定义一个类
class Student {
private String name
private int age
String getName() {
return name
}
void setName(String name) {
this.name = name
}
int getAge() {
return age
}
void setAge(int age) {
this.age = age
}
}
//闭包的概念
task closure{
mEach{
println it
}
mEachWithParams{
m,n->println "${m} is ${n}" //m.n->将闭包的参数和主体区分离开来
}
}
def mEach(closure) {
for(int i in 1..5) { // 循环i的取值为1~5
closure(i)
}
}
def mEachWithParams(closure){
def map = ["name":"groovy", "age": 10]
map.each {
closure(it.key, it.value)
}
}