Gradle相关配置(一):Gradle配置分析

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)
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值