快速了解Android Studio的Gradle

gradle是什么,它有哪些基本特性

gradle task的基本概念和写法

本人使用的环境:LUbuntu 14.04,AndroidStudio 1.3.2,其自带Gradle 2.4

Gradle Scripts

使用AndroidStudio新建一个Android项目,一直默认直到创建完成,然后点开AndroidStudio左边的Project面板,可以看到如下工程组织:

快速了解Android Studio的Gradle

先简单粗暴的来看看这些文件是什么鬼。

gradle提供了多种方法为构建环境添加属性:

命令行执行gradle带\-D参数,\-D参数也会传递给java(这里指运行gradle的java程序)

写在gradle.properties文件里面,而且每个子工程目录下都可以有自己的gradle.properties文件

写在 GRADLE_USER_HOME 环境变量所指目录下的gradle.properties中。

写在以 ORG_GRADLE_PROJECT_ 开头的环境变量里。

以上方式可以同时使用,gradle按以上列出的顺序(优先级从低到高)进行分析,若属性有冲突,保留优先级高的配置。

设置代理。

现在此文件默认什么都没配置,先不管。

settings.gradle

这个文件也是gradle约定命名的,默认只有一行代码 include ':app' ,表示当前项目只有一个模块(我们习惯叫工程,gradle习惯叫模块),app是目录名,同时也作为工程名。当有多个工程的时候,可以在此添加。

local.properties默认内容是Android SDK和NDK的配置路径,这是我之前在AndroidStudio配置过的,此文件不需要我们修改,在IDE的设置会自动覆盖此文件的设置,此文件不应该commit到源码管理系统中,因为它是个人环境的配置。

好,下面我们具体来看build.gradle文件。

根目录的build.gradle

// 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:1.3.0'
  // NOTE: Do not place your application dependencies here; they belong
  // in the individual module build.gradle files
 }
}
allprojects {
 repositories {
  jcenter()
 }

这是一个最顶层的gradle工程。gradle工程在gradle系统中用一个 )表示,它有如下一些元素:

allprojects { }

artifacts { }

buildscript { }

configurations { }

dependencies { }

repositories { }

sourceSets { }

subprojects { }

publishing { }

下面我们只对相关的进行探索。

Gradle Plugins

Gradle内核集成了很多插件(比如编译java代码的插件),使用插件,我们只需要做很少的工作就可以完成常规的构建任务。以.jar文件打包成的插件叫二进制插件,在使用这种插件之前,得把它添加到当前构建脚本的classpath中。

buildscript

buildscript是gradle工程中定义的一个方法,可以传入一个语句块(有人叫闭包),这个语句块返回一个ScriptHandler对象。查看 ScriptHandler对象的API 得知,ScriptHandler包含两个方法:repositories和dependencies,调用dependencies设置构建时依赖什么东西,调用repositories设置这些依赖来自哪里的仓库。现在明白了,上面的代码其实就是为Android的gradle插件指定位置和版本。

allprojects

这也是gradle的特性,gradle支持在根build.gradle里使用allprojects,事先对整个构建可能包含的所有工程进行统一的配置,上面的代码就是给所有工程都配置了 jcenter仓库 ,这样工程所依赖的第三方库在构建过程中都会被自动下载。如果多个工程(子工程)有相同的行为或属性要配置,使用这个是很方便的。

app工程下的build.gradle

apply plugin: 'com.android.application'
android {
 compileSdkVersion 21
 buildToolsVersion "22.0.1"
 defaultConfig {
  applicationId "example.jk.myapplication"
  minSdkVersion 19
  targetSdkVersion 21
  versionCode 1
  versionName "1.0"
 }
 buildTypes {
  release {
   minifyEnabled false
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  }
 }
}
dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 compile 'com.android.support:appcompat-v7:22.2.0'

apply plugin

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1af93fc48e4eaf0efdd437318b8949de.html