RE:从零开始学gradle(一)

Gradle基础知识

在Android Studio中构建一个新的项目时,程序会自动在项目的根目录下生成build.gradle这个文件。这个文件中配置了AS(Android Studio简称)构建版本号,还定义了中央代码仓库(可以定义mavenCentral() mavenLocal() 以及jcenter())。其中jcenter是maven中心库的一个分支,可以自由的在其间进行切换。要注意的是,jcenter支持HTTPS,maven不支持,所以从安全的角度来看的话,个人推荐用jcenter。

Gradle构建脚本的语言不是xml语言,而是基于JVM的动态语言Groovy。如果有Java语言基础的话,学习Groovy语言并不是什么难事。

Gradle中最重要的两个概念

Project & Task (项目和任务)

每个版本至少由一个项目组成,每个项目包含一个以上的任务。每个build.gradle文件都代表着一个项目。在初始化构建项目的时候,Gradle组装Project和Task对象。Task对象是由Action对象的列表组成,并且按照分配好的顺序执行。Action对象类似于java中的方法,是一段代码块。

下面给出一个简单的Task

task newTask << {
    println test  //获取gradle.properties中键为test的值并打印出来
    println project.getProperties().get("test")//和上面的语句一样
}
在AS的这段代码上右键,会出现 Run'gradle:newTask'这个选项,或者用快捷键 Ctrl+Shift+F10来执行这段Task


执行后的结果是:


打印了两个test2222是因为我在gradle.properties中定义了test=test2222

Gradle构建生命周期

Gradle的构建就是单纯的去执行任务。其工作流的动态模型是定向非循环图(DAG)。这就表明所有的任务都是一个接一个的执行,不会进行循环。当任务被执行后,就无法再次进行调用。没有依赖关系的任务总是在其他任务执行前执行。

Gradle构建分成了三个阶段:

1.初始化:如果项目拥有多个模块,则每个模块都拥有自己的build.gradle文件,这样的话,每个build.gradle对应的project都会被构建。

2.配置:这个阶段,将要执行构建脚本,创建并为每个project分配task。

3.执行:根据阶段来判断哪些任务需要执行并执行。应该执行什么任务取决于用于启动构建所传递的参数和当前目录是什么。

构建配置文件

构建文件必须有以下基本要素

buildscript {
    repositories {//定义了jcenter作为仓库  还可以定义 mavenCentral() mavenLocal()
        jcenter()
    }
    dependencies {//定义构建过程
        classpath TOOLS_BUILD
    }
}
细心的你也许发现了,我的这个classpath和普通不一样。这是因为我将android构建环境版本号配置在了我的本地gradle.properties中了。这样可以解决在真实项目中由于不同人员所用的构建环境版本不同而导致提交GIT冲突问题。将版本号配置在本地后,就算每个人的构建环境版本不一样,也可以轻轻松松提交GIT,不用再担心这个配置文件的冲突啦。

在repositores中可以配置仓库,不管是远程的还是本地的都行。

        //以下是添加远程的maven库的  如果需要权限的话,还可以加入验证
//        maven{
//            url "http://.s.s,d."
//            credentials{
//                username 'user'
//                password '11111111'
//            }
//        }
构建脚本还定义了对Android构建工具的依赖。Android插件提供了构建和测试应用程序所需要的一切工具。每个Android项目都需要用以下代码来应用Android插件:

apply plugin: 'com.android.application'
这个是定义在项目内的build.gradle文件中。插件用于扩展Gradle构建脚本的功能。就有点像jar包了,可以使用插件提供的定义属性以及task。

注:如果该项目是以model(library)的形式来进行构建,那么在这个项目的build.gradle中就不可以用以上插件,而是用一下的写法:

apply plugin: 'com.android.library'
当使用了Android插件时,还可以配置Android的编译工具版本、项目版本、项目包名等,并且还会生成适用于Android的任务。

android {
    compileSdkVersion 23  //sdk版本
    buildToolsVersion "23.0.3"//构建工具版本
    defaultConfig {
        applicationId "com.dls.myview"//包名
        minSdkVersion 16//最小版本号
        targetSdkVersion 22//目标版本号
        versionCode 1//项目版本
        versionName "1.0"//暂无用
    }
    buildTypes {
        debug {//会在BuildConfig.class 下生成常量
            buildConfigField("String", "API_URL", "\"http://test.example.com/api/\"")//定义常量
            buildConfigField("boolean", "LOG_HTTP_CALLS", "true")
            resValue("string", "APP_NAME", "DLS_VIEW")//string的首字母需要小写
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
Gradle Wrapper(Gradle 包装器)

由于Gradle是一个不断进行更新迭代的工具,新的版本可能会破坏向后兼容性。那么使用Gradle包装器将有效的避免问题并确保可以正确构建项目。

GW(GradleWrapper在本文中的简称)在windows和shell脚本上提供了批处理文件。运行脚本时,如果所需版本的gradle不存在时,那么就会去下载,并且自动用于构建。在Linux和Mac上是执行gradlew,在Windows上是执行gradlew.bat。

当在AS中新建一个项目后,AS就在项目的根目录下新建了一个GW。



一般默认从eclipse中导入的项目不会有GW,这个时候需要自己来手动导入一个GW。

gradle官方下载地址http://gradle.org/downloads,如果上不去的话,可能是需要翻墙了。闭嘴

也可以通过task来进行构建打包

task wrapper(type: Wrapper) {
    gradleVersion = '2.8'
}
还可以通过命令

$ gradle wrapper --gradle-version 2.8
如果不指定版本号,那么就会使用默认版本。

最新版本下的GW相关文件如下:



脚本文件是在项目的根目录下,所使用jar和属性文件是在gradle/wrapper/下。

属性文件gradle-wrapper.properties的内容如下:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
其中gradle的路径你可以自己设置,可以设置为本地文件。
一般来说AS会自己去配置好该项目所需的gradle版本,一般不需要手动来设置。

看完这些基本配置后,那么就该开始跑task啦。未完待续~~




猜你喜欢

转载自blog.csdn.net/shirakawakanaki/article/details/52918391