AndroidStudio目前已经成为Android开发人员的主流工具,而Gradle的原理,配置,使用仍然是很多android开发人员感到困惑的地方。网上虽然有很多相关文档,但是要么是只会用但是不知道gradle的原理,要么就是过于深究Gradle和Groovy,没能和具体的android使用场景结合,导致很多人看完云里雾里。本文只针对android开发人员,结合具体使用,捎带介绍一下Gradle和Groovy的本质,希望可以让更多的android开发人员不仅能知其然,更能知其所以然。

参考书籍:

实战Gradle

Android Gradle 权威指南

巧用Gradle构建Android应用

1.  Gradle简介

2013 年,Google 发布了全新的 Android 开发 IDE————Android Studio,核心是 Google 新推出的 Gradle 编译环境。首先,我们要明白,Android Studio 使用 Gradle 构建工具,Eclipse 的 ADT 插件使用的是 Ant 构建工具。其次,要搞明白Android Studio 为什么使用 Gradle 构建工具。Gradle有什么特点呢?

  • 采用了 Domain Specific Language(DSL 语言) 来描述和控制构建逻辑。
  • 构建文件基于 Groovy,并且允许通过混合声明 DSL 元素和使用代码来控制 DSL 元素以控制自定义的构建逻辑。
  • 支持 Maven 或者 Ivy 的依赖管理。
  • 非常灵活。允许使用最好的实现,但是不会强制实现的方式。
  • 插件可以提供自己的 DSL 和 API 以供构建文件使用。
  • 良好的 API 工具供 IDE 集成。

由此可知,Gradle 之所以强大是因为继承了强大、灵活的 Ant 和 Maven 丰富的依赖管理,配置管理简单,脚本编写方便灵活,插件模块化。

2.  AS中的Gradle文件

Gradle的优越性让它在很多地方都有应用,本文从Android的角度来分析和使用。

Android中的一个项目结构通常如下:

相关文件信息如下:

目录文件 定义
.gradle gradle项目产生文件(自动编译工具产生的文件)
.idea IDEA项目文件(开发工具产生的文件)
app 其中一个 module,复用父项目的设置,可与父项目拥有相同的配置文件
build 自动构建时生成文件的地方
gradle 自动完成 gradle 环境支持文件夹
.gitignore git源码管理文件
build.gradle gradle 项目自动编译的配置文件
gradle.properties gradle 运行环境配置文件
gradlew 自动完成 gradle 环境的 linux mac 脚本,配合 gradle 文件夹使用
gradlew.bat 自动完成 gradle 环境的 windows 脚本,配合 gradle 文件夹使用
local.properties Android SDK NDK 环境路径配置
*.iml IDEA 项目文件
setting.gradle gradle 项目的子项目包含文件

2.1  settings.gradle

为什么我没有从build.gradle开始介绍,而是从settings.gradle这个文件开始呢?是因为这个问价是Gradle的设置文件,用于初始化以及工程树的配置,位置放在根工程目录下。设置文件大多数的作用是为了配置子工程。在Gradle中多工程是通过工程树表示的,就相当于As中看到的Project和Moudle的概念一样。根工程相当于AS中的Project,一个根工程可以有很多子工程,也就是很多Moudle。

一个子工程只有在settings文件里配置了Gradle才会识别,才会在构建的时候被包含进去。具体使用如下:

//定义一个名为initMinshengGradleEnvironment的函数。该函数内部完成一些初始化操作
//比如创建特定的目录,设置特定的参数等
def initTKGradleEnvironment(){
println"initialize TK Gradle Environment ....."
......//干一些special的私活....
println"initialize TK Gradle Environment completes..."
}
//settings.gradle加载的时候,会执行initTKGradleEnvironment
initTKGradleEnvironment()
include ':voice'
include ':imagepicker'
project(':imagepicker').projectDir = new File(rootDir, 'tk/imagepicker')

首先,这个文件中可以自己设置一些函数,如initTKGradleEnvironment(),这些函数会在gradle构建整个工程任务的时候执行,所以,可以在settings做一些初始化的工作。

其次,可以通过include函数,将子Project的名字(其文件夹名)包含进来 。这里要注意的是,如果像imagepicker'子工程指定了文件夹的目录,它的工程目录就是rootDir/tk/imagepicker;而像voice子工程这样没有指定相应的文件夹目录,默认目录会是其同级的目录,即Gradle会把当前与settings.gradle文件同级的voice目录作为voice子工程的工程目录。如果没有的话,会报错。

2.2  build.gradle

每个project都会有build文件,该文件是该project构建的入口,可以在这里针对该project进行设置,比如配置版本,需要哪些插件,依赖哪些库等。AS项目结构中有两个build文件。我们分别对其进行介绍。

2.2.1  app Moudle的build文件

Android Studio 自动创建的 module 默认生成的 build.gradle 文件,这个文件是开发中打交道最多的一个文件。

这个文件中包括apply plugin,android,greendao,repositories,dependencies等多个代码块。

android {
compileSdkVersion project.ANDROID_BUILD_SDK_VERSION as int
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION defaultConfig {
applicationId project.APPLICATION_ID
versionCode project.VERSION_CODE as int
versionName project.VERSION_NAME
minSdkVersion project.ANDROID_BUILD_MIN_SDK_VERSION as int
targetSdkVersion project.ANDROID_BUILD_TARGET_SDK_VERSION as int
}
} dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//这里注意是双引号
compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY}"
compile "com.android.support:design:${SUPPORT_LIBRARY}"
compile "com.android.support:recyclerview-v7:${SUPPORT_LIBRARY}"
compile "com.android.support:support-annotations:${SUPPORT_LIBRARY}"
compile "com.android.support:cardview-v7:${SUPPORT_LIBRARY}"
compile "com.android.support:support-v4:${SUPPORT_LIBRARY}"
}

  

2.2.2  root Project的build文件

2.3   gradle.properties

配置全局的管理文件。用来配置 gradle 运行环境的文件,比如配置 gradle 运行模式,运行时 jvm 虚拟机的大小。

## Project-wide Gradle settings.
#
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Wed Mar 21 09:55:30 CST 2018
org.gradle.jvmargs=-Xmx1536m -Xmx4048m

properties其实是Java项目中的配置文件,不是Gradle独创的。又因为Gradle语法可以和Java进行混合使用,所以在Java项目上面使用properties文件的方式,在Gradle上面也可以使用。Gradle借用了这一点,所以内置了对gradle.properties的使用方式.

properties里面的数据格式采用键值对的方式,大概有以下几种写法: 
1. key=value 
2. key:value 
3. key :value 
4. # 作为注释 
在Android Studio 中最好使用第一种写法,要不会有警告。

在实际开发中,一般大型的项目都是拆分进行模块化开发的,每个模块在合并的时候容易有冲突(比如版本冲突),或者需要改版本的时候比较麻烦,需要一个一个地方去改,这时候配置全局的 gradle.properties 文件就很有必要了。具体参考如下设置:

## Project-wide Gradle settings.
#
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Wed Mar 21 09:55:30 CST 2018
org.gradle.jvmargs=-Xmx1536m -Xmx4048m
#添加ndk支持(按需添加)
android.useDeprecatedNdk=true
# 应用版本名称
VERSION_NAME=1.0.0
# 应用版本号
VERSION_CODE=100
# 支持库版本
SUPPORT_LIBRARY=24.2.1
# MIN_SDK_VERSION
ANDROID_BUILD_MIN_SDK_VERSION=14
# TARGET_SDK_VERSION
ANDROID_BUILD_TARGET_SDK_VERSION=24
# BUILD_SDK_VERSION
ANDROID_BUILD_SDK_VERSION=24
# BUILD_TOOLS_VERSION
ANDROID_BUILD_TOOLS_VERSION=24.0.3

  

2.4  local.properties

Android Studio 自动创建的工程中,IDE 自动配备了本地配置文件,并且设置了 sdk.dir 属性。也就是配置了 Android_Home 环境变量,所以 IDE 能够自动生成这个配置文件。一般情况都不用修改这个配置文件,除非你一定要重新制定一个 SDK 路径。

AndroidGradle最实用的指南的更多相关文章

  1. Log4J实用配置指南

    转自:http://www.cnblogs.com/licheng/archive/2008/08/23/1274566.html 1         概述 本文档是针对Log4j日志工具的使用指南. ...

  2. PM2实用入门指南

    简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 下面就对PM2进行入门性的介绍,基本涵盖了PM2的常用的功能和 ...

  3. Timeline扩展功能实践指南

    转载于http://forum.china.unity3d.com/forum.php?mod=viewthread&tid=32842,介绍了timeline的轨道扩展 Timeline功能 ...

  4. extjs 学习笔记(二)

    EXTJS实用开发指南 1. 要使用ExtJS 框架的页面中一般包括下面几句: <link rel="stylesheet" type="text/css" ...

  5. [转帖]ExtJs与服务器的交互(一)

    Ext是一个非常好的Ajax框架,其华丽的外观表现确实令我们折服,然而一个应用始终离开不服务器端,因此在实现开发中我们需要对Ext与服务器端的交互技术有较为详细的了解,在开发中才能游刃有余地应用.本文 ...

  6. 转:测试用书(出处:cnblog--liangshi)

    列表格式为:图书分类.中文书名.英文书名.作者.排名不分先后,用红色标记出我推荐的书籍. 测试入门 软件测试(第2版) Software Testing (2e), Ron Patton 一本测试入门 ...

  7. 基于Qt的FreeType字体轮廓解析

    一.本文目的 以前的文档中.详细的介绍了FreeType开源字体引擎库的基础知识.基本用法.但并未详细的阐明在TurboCG中.是如何解析出一个文字的轮廓的,本文集中阐述.怎么样使用FreeType开 ...

  8. 大量Javascript/JQuery学习教程电子书合集

    [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人   不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pd ...

  9. [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人

    不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pdf 274.79 KB   21天学通JavaScript(第2版)-顾宁燕扫描版.pdf ...

随机推荐

  1. Log4j 相关

    Log4j(Log for Java) Log4j是Apache提供的一种专门用于Java程序记录日志的工具,是目前主流的开发日志技术. 日志的作用: 1.记录系统运行过程中的重要运行信息 a) 付费 ...

  2. (转)linux top命令中各cpu占用率含义及案例分析

    原文:https://blog.csdn.net/ydyang1126/article/details/72820349 linux top命令中各cpu占用率含义 0 性能监控介绍 1 确定应用类型 ...

  3. 一个对眼睛很好的vim 颜色主题

    地址:https://github.com/altercation/vim-colors-solarized 安装: $ cd vim-colors-solarized/colors $ mv sol ...

  4. C#集成FastDFS断点续传

    C#集成FastDFS断点续传 参考 .net版本FastDFS客户端v5.05. https://github.com/zhouyh362329/fastdfs.client.net FastDFS ...

  5. 用分布式缓存提升ASP.NET Core性能

    得益于纯净.轻量化并且跨平台支持的特性,ASP.NET Core作为热门Web应用开发框架,其高性能传输和负载均衡的支持已广受青睐.实际上,10-20台Web服务器还是轻松驾驭的.有了多服务器负载的支 ...

  6. [转]让程序不触发 Vista/Win7下应用程序兼容性助手弹出 .

    原文地址 http://blog.csdn.net/maxuhuiabc/article/details/6081874 在Vista/Win7下 运行一个 exe 应用程序后,系统经常弹出 兼容性助 ...

  7. Eclipse怎么样添加智能感知提示功能(含Windows版和Mac版)

    近日感兴趣于安卓,开始学习Android开发……第一次使用Eclipse,用久了VS,也习惯了他的智能提示,刚转到Eclipse下实在是不习惯…… 网上有人说按Alt + / 可以实现单词补全功能,实 ...

  8. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)

    不多说,直接上干货!  Anaconda2 里 PS C:\Anaconda2\Scripts> PS C:\Anaconda2\Scripts> pip.exe install itch ...

  9. Javac中的nullcheck

    Javac会通过调用引用对象的getClass()来判空,主要有几处: (1)JCMethodInvocation()方法中,如下实例: class A{ class B{} } public cla ...

  10. Vue2.0-token权限处理

    token一种身份的验证,在大多数网站中,登录的时候都会携带token,去访问其他页面,token就想当于一种令牌.可以判断用户是否登录状态.本次页面是通过Element-ui搭建的登录界面 当用户登 ...