AndroidStudio目前已经成为Android开发人员的主流工具,而Gradle的原理,配置,使用仍然是不少android开发人员感到困惑的地方。网上虽然有不少相关文档,可是要么是只会用可是不知道gradle的原理,要么就是过于深究Gradle和Groovy,没能和具体的android使用场景结合,致使不少人看完云里雾里。本文只针对android开发人员,结合具体使用,捎带介绍一下Gradle和Groovy的本质,但愿可让更多的android开发人员不只能知其然,更能知其因此然。html
参考书籍:linux
实战Gradleandroid
Android Gradle 权威指南git
巧用Gradle构建Android应用windows
2013 年,Google 发布了全新的 Android 开发 IDE————Android Studio,核心是 Google 新推出的 Gradle 编译环境。首先,咱们要明白,Android Studio 使用 Gradle 构建工具,Eclipse 的 ADT 插件使用的是 Ant 构建工具。其次,要搞明白Android Studio 为何使用 Gradle 构建工具。Gradle有什么特色呢?app
由此可知,Gradle 之因此强大是由于继承了强大、灵活的 Ant 和 Maven 丰富的依赖管理,配置管理简单,脚本编写方便灵活,插件模块化。jvm
Gradle的优越性让它在不少地方都有应用,本文从Android的角度来分析和使用。ide
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 项目的子项目包含文件 |
为何我没有从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子工程的工程目录。若是没有的话,会报错。
每一个project都会有build文件,该文件是该project构建的入口,能够在这里针对该project进行设置,好比配置版本,须要哪些插件,依赖哪些库等。AS项目结构中有两个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}" }
配置全局的管理文件。用来配置 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
Android Studio 自动建立的工程中,IDE 自动配备了本地配置文件,而且设置了 sdk.dir 属性。也就是配置了 Android_Home 环境变量,因此 IDE 可以自动生成这个配置文件。通常状况都不用修改这个配置文件,除非你必定要从新制定一个 SDK 路径。