Android构建工具——Gradle简述

作者: 阿敏其人 | 来源:发表于2016-07-20 18:25 被阅读1023次

本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。

说在前面
最直观的,用Gradle作为构建工具哪里爽得最明显?
依赖里面一行代码 依赖+管理 库。而不是Eclipse时代复制jar包,再手动添加。

compile 'com.android.support:appcompat-v7:23.4.0'

依赖?很明显啦。
管理?其实管理就是改改库的版本号,但是比替换jar来得方便多了吧。

一、什么是构建工具?

构建工具,帮我们构建项目的工具。
构建工具的做的事情一般是 —— 编译、运行、打包、签名 和 依赖管理。

二、构建工具有哪些?

传统的构建工具有:Make、Ant、Maven和Ivy等。

对于安卓:
Eclipse时代的构建工具是:ADT
Android Studio时代的构建工具是:Gradle

三 、什么是Gradle

首先Gradle是构建工具。
虽然As把Gradle作为自身的构建工具,但是Gradle是独立的项目,跟谷歌不存在从属关系。

简单来说有以下几点:

1、独立项目,和Google无关
2、Grdle基于Groovy。(Maven、Ant基于xml)
3、Gradle兼容Maven、Ant
4、Gradle 的推出主要以 Java 应用为主,当然还支持 Android、C、C++等。

四、Gradle和As的合作

As怎么依赖Gradle让Gradle作为自身的构建工具呢?Google开发一个Gradle插件。

As项目依赖了这个插件,就相当于让Gradle作为了自身的的构建工具。

现在比如我们新建一个As项目,打来项目的根目录的gradle.build文件。是类似如下代码:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

关键是

classpath 'com.android.tools.build:gradle:2.1.2'

这句代码,让As成功依赖Gradle插件。

2.1.2代表的是谷歌的Gradle插件的版本号,而不是Gradle的版本号。

上面的一、二、三、四的4大点,我弄了张图,方便以后看起来省事。

构建工具——Gradle.png

五、As项目里面那些Gradle团伙

哇,万Gradle穿心,魑魅魍魉,怎么他就这么多!

Paste_Image.png

来吧来吧,说道说道:
(为了方便说清楚,我们不严格按照上图的顺序来)

从直观上看,我们看到项目有一个.gradle文件夹和一个gradle文件夹。

.gradle文件夹

  • .gradle文件夹
    .gradle文件夹 是gradle 运行以后生成的缓存文件夹。所以有时从网络上下载的as项目没有这个文件夹并不奇怪。
    (个用,转用可删之)

gradle文件夹

  • gradle文件夹
Paste_Image.png
  • gradle-wrapper.jar
    jar就jar吧

  • gradle-wrapper.properties

通过配置其中的gradle-wrapper.properties 中的distributionUrl 可以给你的项目指定需要使用的gradle 版本。

当前打开如下

#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

作为项目的module里面的build.gradle文件

  • /app/build.gradle
    每一个mudole里面都有一个 /�module/build.gradle
    这个很可以细说

// com.android.application 说明了这是一个项目
// 如果是作为库的module 是 apply plugin: 'com.android.library'
apply plugin: 'com.android.application'

// android 相关 构建参数
android {

    compileSdkVersion 23    // 编译使用SDK版本
    buildToolsVersion "23.0.3"   // 编译工具的版本   buildTools

    defaultConfig {
        applicationId "com.am.gradletest"  // 用于标识的包名
        minSdkVersion 14   // sdk最低支持版本
        targetSdkVersion 23  //  目标SDK版本,如果目标设备的API版本正好等于此数值,就不会为此程序开启兼容性检查判断的工作
        versionCode 1   //版本号
        versionName "1.0"
    }

    // 编译类型
    // 下面 声明了 debug 和 release 两种类型,名字随意
    buildTypes {
        // release 发布 ,release里面是关于发布的配置
        release {
            minifyEnabled false  // minifyEnabled 是否开启混淆,false不开启
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 混淆文件
        }

        // debug(不作为发布版)时候的配置,这个debug的代码块默认不带,这里是手动加的
        debug{

        }

    }
}

// 依赖 三种依赖,第一种是本地的jar,第二种是本地的module库,第三种是利用gradle远程的依赖管理
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar']) // 这句代码会自动依赖本地的所有jar,就不要逐个依赖了
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}

根目录的全局 build.gradle

默认有三个“节点”,
buildscript
allprojects
task clean

local.properties

  • local.properties

Android studio 自动生成,用于配置本地的 SDK、NDK 路径。
因为这是针对设备的设置,不同的设备SDK路径不一定一样。

VCS(版本控制)的时候应该忽略掉这个文件。

gradle.properties

gradle.properties 文件,是对gradle的配置。
有时候会gradle坐优化就会在这里面做一些修改。

gradlew文件 和 gradlw.bat 文件

简单来说,这两个文件就是让玲玲可以在不同的平台执行一样的命令的。

gradlew和gradlew.bat这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。
这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。gradlew的用法跟gradle一模一样,比如执行构建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的缩写。

,比如查看版本,./gradlew -v (win用户直接输入 gradlew -v)

请问android studio创建的工程目录下的gradlew文件有什么作用?

gradlew相关命令:

  • assemble : 针对某个版本创建一个apk
  • clean : 删除所有的构建任务(包含已经构建号的apk文件)
  • check : 执行Lint检查,如果Lint检查到错误,则停止执行脚本
  • build : 同时执行assemble,check命令
  • connectedCheck : 执行测试任务
  • deviceCheck : 执行在远程设备上的测试
  • installDebug : 安装debug版本
  • installRelease : 安装release版本
  • uninstallDebug : 卸载debug版本
  • uninstallRelease : 卸载release版本
  • tasks :查看当前可构建的所有task
  • -v : 查看当前的gradle版本

settings.gradle

用来配置多模块的
比如当前工程打开该文件:

include ':app'

比如你的项目有两个模块module-a,module-b,那么你就需要在这个文件中进行配置,格式如下:

include ':module-a',':module-b'

大概就到这里,深入学习还可以研究主工程build.gradle的配置,还有gradlew的命令。这花时间需实际需要改善。

本篇完。

参考:
给 Android 初学者的 Gradle 知识普及
Android 开发你需要了解的 Gradle 配置
gradle入门

相关文章

网友评论

    本文标题:Android构建工具——Gradle简述

    本文链接:https://www.haomeiwen.com/subject/jobvjttx.html