Gradle 是什么

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。

安装Gradle

在 Android Studio 中新建项目成功后会下载Gradle,貌似这个过程不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。那么下载的 Gradle 到什么地方呢,或者说Gradle的本地目录在什么地方呢

  • Mac上会默认下载到 /Users/<用户名>/.gradle/wrapper/dists 目录
  • Win平台会默认下载到 C:\Documents and Settings\<用户名>.gradle\wrapper\dists 目录

你会看到这个目录下有个 gradle-x.xx-all 的文件夹, 如果下载实在太慢,可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下。

Gradle基本概念

我个人理解是 Gradle 在 Android Studio 中有三个意思

  • Gradle plugin(Gradle 插件及插件版本)
  • Gradle(Gradle 的版本)
  • Gradle wrapper(安装辅助工具)

下面我用一个开源项目开详细分析一下,加深自己对 Gradle 理解,首先这个项目有两个Moudle,一个是应用程序模块,一个是库模块

1. 9GAG/build.gradle(Gradle plugin)

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

这个文件是整个项目的gradle基础配置文件,内容主要包含了两个方面:一个是声明仓库的源,这里可以看到是指明的jcenter(),jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了 Gradle Plugin 的版本,这个dependencies中的gradle:1.0.0代表的就是使用Gradle 插件版本 1.0.0。在编译过程中,如果Gradle插件版本与Gradle版本不匹配,编译就会失败。

目前一些的Gradle与Gradle Plugin版本的对应关系如下:

Gradle Plugin 版本 Gradle 版本
2.3.0+ 3.3+
2.1.3 - 2.2.3 2.14.1+
2.0.0 2.10 - 2.13
1.5.0 2.2.1 - 2.13
1.2.0 - 1.3.1 2.2.1 - 2.9
1.0.0 - 1.1.3 2.2.1 - 2.3

Android Plugin for Gradle Release Notes

值得注意的是,你的AndroidStudio 版本越高,你的Gradle插件版本越高,目前Android Studio 2.3.2的版本对应的是Gradle Plugin 版本是2.3.2

2. 9GAG/app/build.gradle(Gradle)

// 声明是Android程序
apply plugin: 'com.android.application'android {// 编译SDK的版本compileSdkVersion 21// build tools的版本buildToolsVersion "21.1.1"defaultConfig {// 应用的包名applicationId "me.storm.ninegag"minSdkVersion 14targetSdkVersion 21versionCode 1versionName "1.0.0"}// java版本compileOptions {sourceCompatibility JavaVersion.VERSION_1_7targetCompatibility JavaVersion.VERSION_1_7}buildTypes {debug {// debug模式}release {// 是否进行混淆minifyEnabled false// 混淆文件的位置proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'}}// 移除lint检查的errorlintOptions {abortOnError false}
}dependencies {// 编译libs目录下的所有jar包compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:support-v4:21.0.2'compile 'com.etsy.android.grid:library:1.0.5'compile 'com.alexvasilkov:foldable-layout:1.0.1'// 编译extras目录下的ShimmerAndroid模块compile project(':extras:ShimmerAndroid')
}

这里需要说明几点:

  • 文件开头apply plugin是最新gradle版本的写法,

    • 应用程序的声明是apply plugin: ‘com.android.application’
    • 模块的声明是apply plugin: ‘com.android.library’
  • buildToolsVersion这个需要你本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是build version的版本不对,这个可以手动更改成你本地已有的版本或者打开 SDK Manager 去下载对应版本。
  • compileOptions是指java的版本,android 5.0开始默认安装jdk1.7才能编译,但是mac系统自带jdk的版本是1.6,所以需要手动下载jdk1.7并配置。
  • proguardFiles这部分有两段,前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事,这个文件的目录在 /tools/proguard/proguard-android.txt , 后一部分是我们项目里的自定义的混淆文件,目录就在 app/proguard-rules.txt , 如果你用Studio 1.0创建的新项目默认生成的文件名是 proguard-rules.pro , 这个名字没关系,在这个文件里你可以声明一些第三方依赖的一些混淆规则,由于是开源项目,9GAG里并未进行混淆。
  • compile project(‘:extras:ShimmerAndroid’)这一行是因为9GAG中存在其他Module。
  • 以上文件里的内容只是基本配置,其实还有很多自定义部分,如自动打包debug,release,beta等环境,签名,多渠道打包等,后续会单独拿出来讲解。

3. 9GAG/gradle/wrapper.properties(Gradle wrapper)

#Thu Dec 18 16:02:24 CST 2014
//distributionBase 是解压 gradle-2.14.1-all.zip 的文件的存放位置
distributionBase=GRADLE_USER_HOME//distributionPath 是 distributionBase 指定的目录下的子目录
distributionPath=wrapper/dists//zipStoreBase 是下载的 gradle-2.14.1-all.zip 所存放的位置
zipStoreBase=GRADLE_USER_HOME//zipStorePath 是 zipStoreBase 指定的目录下的子目录
zipStorePath=wrapper/dists//distributionUrl 是要下载的 gradle 的地址,使用哪个版本的 gradle,就在这里修改
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip

这里需要说明几点:

  • 下载位置可以和解压位置不一样。

  • zipStoreBase 和distributionBase 有两种取值:GRADLE_USER_HOME 和 PROJECT。

    • 其中,GRADLE_USER_HOME 表示用户目录。在 windows 下是 %USERPROFILE%/.gradle,例如C:\Users\.gradle\;在 Linux下是 $HOME/.gradle,例如~/.gradle。
    • PROJECT 表示工程的当前目录,即 gradlew 所在的目录。

4. 9GAG/settings.gradle

include ':app', ':extras:ShimmerAndroid'

文件中的 app, extras:ShimmerAndroid 都是module,如果还有其他module都需要按照如上格式加进去

版本变更方法–使用 Android Studio

  • 修改 build.gradle 插件版本号
    dependencies {classpath 'com.android.tools.build:gradle:1.0.0'}
  • 修改使用的 Gradle 版本(gradle wrapper 中 distributionUrl 修改 gradle版本与插件版本匹配)

gradle wrapper 中 distributionUrl 修改 gradle版本与插件版本匹配

distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
  • 或者直接在图形界面中修改


本文大量参考引用以下两篇文章,包括图片和代码,感谢两位作者

http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/

http://hucaihua.cn/2016/09/27/Gradle_upgrade/

Gradle教程--基础篇相关推荐

  1. Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

    Midjourney|文心一格prompt教程[基础篇]:注册使用教程.风格设置.参数介绍.隐私模式等 开头讲一下为什么选择Midjourney和文心一格,首先Midjourney功能效果好不多阐述: ...

  2. 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明

    基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...

  3. 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程

    基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...

  4. 付呗聚合支付快速教程 基础篇①——基本介绍和配置

    文章目录 一.对接手册 二.商户后台 三.银行分账 四.其他介绍 一.对接手册 付呗聚合支付对接手册 第一步自然是商务对接 本专栏是作为付呗的普通级商户,商户后台 使用付呗开发平台的支付API,接入到 ...

  5. ESP32-C3入门教程 基础篇⑪——Non-Volatile Storage (NVS) 非易失性存储参数的读写

    文章目录 一.前言 二.NVS介绍 三.操作流程 3.1 读操作流程 3.2 写操作流程 四.关键函数 五.随机整数 读写示例 六.对象/数组 读写示例 七.总结 八.参考 一.前言 本文基于VS C ...

  6. ESP32-C3入门教程 基础篇②——GPIO口输入,按键的长按和短按

    文章目录 一.前言 二.硬件准备 三.知识要点 3.1 GPIO使用 3.2 时钟节拍 四.参考例程 五.功能简述 六.源码实现 6.1 中断方式 6.2 定时扫描 七.源码详解 一.前言 本文基于V ...

  7. Redis进阶教程—基础篇-叶向阳-专题视频课程

    Redis进阶教程-基础篇-217人已学习 课程介绍         该系列教程涵盖了redis的方方面面,大亮点是实战经验分享总结.系列视频包含Redis基础篇.Redis提升篇.从零编写Redis ...

  8. 视频教程-Redis进阶教程—基础篇-NoSQL

    Redis进阶教程-基础篇 雅座Java架构师,架构开发公司百万级订单支付平台 叶向阳 ¥49.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠 ...

  9. python人生苦短_人生苦短,我用Python(教程基础篇)

    人生苦短,我用Python(Python快速教程 - 基础篇) Life is short, you need Python 人生苦短,我用Python Python简介 本章将介绍Python的最基 ...

  10. ESP32-C3入门教程 基础篇(八、NVS — 非易失性存储库的使用)

    前面的7节课把开发板上基本的外设都测试过一边,接下来马上就要进入wifi和蓝牙应用的测试了 在此之前,还需要把掉电数据保存的功能给实现,在STM32中,可以使用内部的flash或者有些自带的EEPRO ...

最新文章

  1. python抓取新浪微博评论并分析
  2. python画图程序-无所不能的python编程是怎么快速画图的呢?5分钟学会!
  3. 栈堆的emplace和push_C++(STL):19---deque之删除和emplace用法
  4. wget的url获取方式
  5. ElasticSearch查询 第四篇:匹配查询(Match)
  6. 我来说说java的NIO
  7. Leetcode 565. Array Nesting
  8. 核心技术java基础_JAVA核心技术I---JAVA基础知识(集合set)
  9. [html] 说说js代码写到html里还是单独写到js文件里哪个好?为什么?
  10. windows环境下nginx的入门配置跳转tomcat
  11. 将vim打造成python开发工具
  12. python有几种_Python常见的几种算法
  13. UE4 创建编辑器模块
  14. 闪客工具:好玩的GifCam录制gif软件
  15. 荣耀笔记本pro linux版本,荣耀MagicBook Pro锐龙版发布:首发锐龙7 3750H、还有Linux版...
  16. JavaScript进阶(四)
  17. 计算机的声音图标打不开怎么回事,win10电脑音量图标打不开怎么办
  18. 紫书《算法竞赛入门经典》
  19. 【好奇心驱动力】ESP8266从零开始折腾记录
  20. Codeforces round #628 C. Ehab and Path-etic MEXs(构造)

热门文章

  1. 文献翻译——基于关联规则挖掘识别的鸡源大肠杆菌共有多重耐药模式(上)
  2. powerdesign生成SQL
  3. bootstrap 下拉列表获取_Bootstrap框架下下拉菜单的实现(代码示例)
  4. html页面布局实验原理,Html设计实验报告.doc
  5. 淘宝十年数据和轶事整理
  6. winrar5.7.1商业版 无广告 注册下载
  7. 数仓建模—建模工具PDMan(CHINER) 入门介绍
  8. Lenovo ThinkPad SL400安装克隆版的XP
  9. 通信软件开发与应用结业报告
  10. 计算机一级二级三级四级相当的水平,计算机等级考试通过必看:一至四级通关策略...