http://www.infoq.com/cn/articles/android-in-depth-gradle/
先学习什么是gradle,在android中的作用是什么,以上链接非常有用,但是内容非常长,耐心,慢慢看完。
看完,我们一起来学习一下anroid项目中的以.gradle结尾的三个文件,在项目中的作用。
1、settings.gradle
include ':app'
啊哦,就这一行代码嫩,基本上也就这一行,多的话,就是下面这样的:
include ':app','photopicker'
//'模块名','模块名',.....用到几个加几个
setting文件的是配置项目的子项目的,用于指示 Gradle 在构建应用时应将哪些模块包括在内,app
就是建项目是默认的Module,也就是目录结构图中的app包名,也可以配置多个,其他的就是用来开发使用的,比如photopicker
图片选择器,也可以依赖,也可以以moudle的方式放进项目里使用。
2、build.gradle(最外层)
这些代码都是自动生成的,
// Top-level build file where you can add configuration options common to all sub-projects/modules.
//翻译:顶级构建文件,您可以在其中添加对所有子项目/模块通用的配置选项。
// 此处的"buildscript"用于配置Project的build script的classpath。
buildscript {
repositories {
google() //google 仓库
jcenter() //JCenter 仓库
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
//翻译:注意:不要把你的应用依赖放在这里;他们属于在单独的模块构建中.gradle文件
}
}
// 该配置会被应用到所有的子工程。
allprojects {
repositories {
google()
jcenter()
}
}
// 运行gradle clean时,执行此处定义的task。
// 该任务继承自Delete,删除根目录中的build目录。
// 相当于执行Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
delete rootProject.buildDir
}
buildscript:闭包。gradle脚本执行所需依赖,分别是对应的maven库和插件
两处 repositories :闭包,声明jcenter()和google(),这是代码托管仓库,在这里配置好之后,我们就可以引用jcenter和google上的开源项目了。
dependencies :闭包,使用classpath声明一个gradle插件,来构建android项目
allprojects :闭包。项目本身需要的依赖,比如我现在要依赖我自己maven库的toastutils库,那么我应该将maven {url ‘https://..........‘}写在这里,而不是buildscript中,不然找不到。
task clean::开启一个任务,指定每次编译都要清空工程
3、build.gradle
apply plugin: 'com.android.application' //声明是Android程序
android {
compileSdkVersion 26 //用于指定项目的编译版本
buildToolsVersion '26.0.3' //构建工具版本
defaultConfig {
applicationId "com.example.administrator.helloworld" //包名
minSdkVersion 19 //最低兼容版本
targetSdkVersion 26 //目标sdk版本
versionCode 1 //版本号
versionName "1.0" //版本名
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" //单元测试
}
buildTypes {
release {
minifyEnabled false //是否混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //混淆文件
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) //本地依赖
implementation 'com.android.support:appcompat-v7:28.0.0-rc02' //远程依赖
testImplementation 'junit:junit:4.12' //测试
androidTestImplementation 'com.android.support.test:runner:1.0.2' //测试
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //测试
//demo,依赖一个第三方
implementation 'com.hyman:flowlayout-lib:1.1.2' //远程依赖
}
apply plugin:声明是Android程序,这里有两种选择:com.android.application
表示这是一个应用程序模块,可直接运行,com.android.library
表示这是一个库模块,是依附别的应用程序运行
android 闭包 :在这个闭包中我们可以配置项目构建的各种属性。
compileSdkVersion :用于指定项目的编译版本,这里26,表示使用android8.0系统的SDK编译。
buildToolsVersion :用于指定项目的构建工具版本。
defaultConfig 闭包:对项目的更多细节进行配置
applicationId :用于指定那项目的包名
minSdkVersion : 用于指定最低兼容版本,这里15,表示最低兼容到android4.0系统。
targetSdkVersion :表示你在该目标版本上做了充分的测试,系统将会为你的程序启动新的功能和特性,比如android6.0系统引入了运行时权限这个功能,如果将targetSdkVersion
设置为23或者更高,那么系统就会为你的程序启动运行时权限功能,而如果你将targetSdkVersion
设置为22,那么就说明你的程序最高只在android5.1的系统上做过充分的测试,android6.0系统中引入的新功能自然不会启用了。
versionCode :用于指定项目的版本号
versionName :用于指定项目的版本名
testInstrumentationRunner ://单元测试使用,不用关心
buildTypes 闭包: 指定生成安装文件的配置,通常只会有两个子闭包,一个release
,一个debug
,debug
闭包用于指定生成测试版本的配置,release
用于指定正式版本安装文件的配置,另外,debug
默认是不写的。
release :
minifyEnabled :是否对代码进行混淆
proguardFiles :指定混淆时使用的规则文件,这里指定了两个文件,一个proguard-android.txt
在android SDK目录下,一个proguard-rules.pro
在当前项目的根目录下,里面可以编写写当前项目特有的混淆规则.
dependencies 闭包:指定当前项目的所有依赖关系。一共有3种依赖方式:本地依赖,库依赖,远程依赖。本地依赖可以的对本地的jar
包或者目录添加依赖关系,库依赖可以对项目的的库模块添加依赖关系,远程依赖则可以对jcenter
库上的开源项目添加依赖关系。
implementation fileTree:本地依赖声明,他表示降libs
目录下的所有.jar
后缀的文件都添加到项目的构建路径中。
implementation:这是一个标准的远程依赖,com.android.support
是域名,appcompat-v7
是组名,28.0.0-rc02
是版本号,加上这句户后,gradle
在构建项目的时候回首先检查一下本地是否已经有这个库的缓存,没有则联网下载,有则添加到构架的路径中。
testImplementation 以及下面两个:是测试用例库,暂时用不到,不用关心
implementation project(:'XXX') :这个是库依赖的格式, XXX
代表的是库的名称,这里没有用到。
网友评论