当我们创建一个新的工程,Android studio会默认为我们创建三个gradle文件,两个build.gradle,一个settings.gradle,build.gradle分别放在了根目录和moudle目录下,下面是gradle文件的构成图:
MyApp
├── build.gradle
├── settings.gradle
└── app
└── build.gradle
module:app中的build.gradle
apply plugin: 'com.android.application'
//Android plugin提供了所有需要去构建和测试的应用。
// 插件用于扩展gradle脚本的能力,在一个项目中使用插件,这样该项目的构建脚本就可以定义该插件定义好的属性和使用它的tasks。
//注意:当你在开发一个依赖库,那么你应该使用'com.android.library',并且你不能同时使用他们2个,这将导致构建失败,
// 一个模块要么使用Android application或者Android library插件,而不是二者。
// Gradle 所引入的插件,插件里面包含了 Android 项目相关的所有工具。
//由google的Android开发团队编写的插件,能够提供所有关于Android应用和依赖库的构建,打包和测试。
//以apply plugin: 'com.android.application'作为主程序的标识
//以apply plugin: 'com.android.library'标识为Android Library
// minSdkVersion <= targetSdkVersion <= compileSdkVersion
// minSdkVersion <= buildToolsVersion <= compileSdkVersion
android {
compileSdkVersion 25 //当前向前兼容sdk的版本:编译该app时候,你想使用到的api版本。
buildToolsVersion "25.0.2" //构建工具的版本
//defaultConfig方法包含了该app的核心属性,该属性会重写在AndroidManifest.xml中的对应属性。
defaultConfig {
applicationId "com.example.administrator.myapplication" //应用程序的id,在市场上使用的包名
minSdkVersion 15 //最小sdk版本支持,最小支持api。
targetSdkVersion 25 //目标sdk版本
//versionCode将会作为版本号标示,而versionName毫无作用。
versionCode 1 //应用程序版本号
versionName "1.0" //应用程序版本名称
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//buildTypes定义了如何构建不同版本的app
buildTypes {
release {
minifyEnabled false //混淆是否开启
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies { //依赖外部的类库
//如果你有任何依赖的jar包,你需要告诉gradle它在哪儿,假设jar包会在一个叫做libs的文件夹内,那么你应该这么配置:
//该行意为:将libs文件夹中所有的jar文件视为依赖包。
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'
testCompile 'junit:junit:4.12'
}
//模块内的gradle文件只对该模块起作用,而且其可以重写任何的参数来自于根目录下的gradle文件。
gradle下的gradle-wrapper.properties:
#Sat Apr 08 18:40:35 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
#解压位置
#distributionBase 和 distributionPath 组合在一起,是解压 gradle-2.14.1-all.zip 之后的文件的存放位置。
#distributionPath 是 distributionBase 指定的目录下的子目录。
#下载位置
#zipStoreBase 和 zipStorePath 组合在一起,是下载的 gradle-2.14.1-all.zip 所存放的位置。
#zipStorePath 是 zipStoreBase 指定的目录下的子目录。
#下载位置可以和解压位置不一样。
#zipStoreBase 和distributionBase 有两种取值:GRADLE_USER_HOME 和 PROJECT。
#其中,GRADLE_USER_HOME 表示用户目录。
#在 windows 下是 %USERPROFILE%/.gradle,例如C:\Users\<user_name>.gradle\。
#在 Linux下是 $HOME/.gradle,例如~/.gradle。
#PROJECT 表示工程的当前目录,即 gradlew 所在的目录。
#下载地址URL
#distributionUrl 是要下载的 gradle 的地址,使用哪个版本的 gradle,就在这里修改。
#gradle 有 3 种版本:(当然这个不了解也没关系)
#gradle-xx-all.zip 是完整版,包含了各种二进制文件,源代码文件,和离线的文档。
# 例如,https://services.gradle.org/distributions/gradle-2.14.1-all.zip
#gradle-xx-bin.zip 是二进制版,只包含了二进制文件(可执行文件),没有文档和源代码。
# 例如,https://services.gradle.org/distributions/gradle-2.14.1-bin.zip
#gradle-xx-src.zip 是源码版,只包含了 Gradle 源代码,不能用来编译你的工程。
# 例如,https://services.gradle.org/distributions/gradle-2.14.1-src.zip
#如果只是为了编译,可以不用完整版,只需要二进制版即可,例如,gradle-2.14.1-bin.zip。
#你可以改变该url来改变你的gradle版本。
#此文件用于保存 gradle 下载路径的配置文件位置,用于没有gradle环境的环境初始化使用。
#gradle 文件夹包括如下:
#gradle-wrapper.propertes //gradle-wrapper 配置文件:下载URL、下载位置、解压位置
#gradle-wrapper.jar //gradle-wrapper 核心 jar
project:myapplication中的gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {//构建脚本:包括仓库和依赖
repositories {//1、仓库
jcenter()//声明中央远程仓库的源,兼容maven中心仓库
//jcenter是maven中心库的一个分支
}
dependencies {//2、依赖
classpath 'com.android.tools.build:gradle:2.4.0-alpha4'
//Android构建工具,这个就是Android plugin的来源之处。
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//buildscript方法是定义了全局的相关属性,
// repositories定义了jcenter作为仓库。一个仓库代表着你的依赖包的来源,例如maven仓库。
// dependencies用来定义构建过程。这意味着你不应该在该方法体内定义子模块的依赖包,
// 你仅仅需要定义默认的Android插件就可以了,
// 因为该插件可以让你执行相关Android的tasks。
allprojects {
repositories {
jcenter()
}
}
//allprojects方法可以用来定义各个模块的默认属性,你可以不仅仅局限于默认的配置,
// 未来你可以自己创造tasks在allprojects方法体内,这些tasks将会在所有模块中可见。
task clean(type: Delete) {
delete rootProject.buildDir
}
settings.gradle
include ':app'
//当你的app只有一个模块的时候,你的setting.gradle将会如上所示
//setting.gradle文件将会在初始化时期执行
//setting.gradle是针对多模块操作的,所以单独的模块工程完全可以删除掉该文件。
gradle.properties
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# 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.
#项目范围 Gradle 设置。
# IDE(例如Android Studio)用户:
# Gradle 设置通过 IDE 配置 *将会覆盖*
#任何设置在该文件中指定。
#更多细节关于如何配置您的构建环境的访问
# http://www.gradle.org/docs/current/userguide/build_environment.html
#指定 JVM 参数用于守护进程。
#这个 setting 尤其有用的调整内存的设置。
#配置全局的管理文件。
#配置 gradle 运行环境的文件,比如配置 gradle 运行模式,运行时 jvm 虚拟机的大小。
org.gradle.jvmargs=-Xmx1536m
# 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
#配置时,它将运行在孵化并行模式。
#这个选项应该只被用于分离的项目。更多细节,请访问
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html秒:decoupled_projects
# org.gradle.parallel = true
local.properties
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Tue Feb 28 00:55:39 CST 2017
sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk
#Android Studio 自动创建的工程中,IDE 自动配备了本地配置文件,并且设置了 sdk.dir 属性。
#也就是配置了 Android_Home 环境变量,所以 IDE 能够自动生成这个配置文件。
#一般情况都不用修改这个配置文件,除非你一定要重新制定一个 SDK 路径。
参考:
Gradle for Android 第一篇( 从 Gradle 和 AS 开始 )
Gradle for Android 第二篇( Build.gradle入门 )
Gradle for Android 第三篇( 依赖管理 )