Android构建工具——Gradle简述

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

说在前面
最直观的,用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入门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容