使用android studio有很长一段时间了,记得当初使用android studio的时候,最不适应的部分就是gradle了,现在android开发还是比较火热,越来越多的人进入这个领域,也发现有很多人对gradle很迷惑,今天就来对gradle进行简单的解析,希望新来的开发者能尽快的了解gradle,最起码知道一些概念,无论学什么东西,知道此东西为什么会出现?它有什么用?关于它的一些概念是什么意思?这是学习东西的一个有效方法,也是作为一个初学者进入更高层次首先要解决的问题。
什么是Gradle?有什么用?
专业术语:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。维基百科
看官:这是什么啊?什么构建工具,什么又是Groovy语言啊?你这明显是用未知解释未知?有个毛用啊,都看不懂!
博主:看不懂?我学习的时候也看不懂,好吧,我就以人类的语言加上举例子这种终极武器来解释什么是Gradle.
博主:gradle在哪里使用?
看官:在开发工具中使用!
博主:那如果我们不同开发工具,而是直接在编辑器中编写代码,然后用sdk中提供的编译打包工具手动的进行编译和打包,我们还需要使用gradle吗?
看官:那当然不用使用gradle了,直接手工直接整就行啦,你到底有没有水平啊,问题问的这么弱智。。。,唉?不对,等等,我好像知道什么是构建工具了。
博主:那你说说什么是构建工具?
构建工具就是一个把我们本来必须要使用手工进行编译打包的方式来用自动化的方式来完成。
博主:嗯,定义下的不错,其实说白了,就是在我们编译打包的时候,我们只需要点击编译工具上的一个按钮,但是这时候是gradle来负责调用sdk中的编译打包工具的,如aapt.exe等,好像这里还有点面向对象的味道。
一个android项目中Gradle的种类
如下图所示(以下图片均来自网络):
可以看出来一般一个项目中有图示的几个gradle文件!
Moudle中的build.gradle
// 声明是Android程序
apply plugin: ‘com.android.application‘
android {
// 编译SDK的版本
compileSdkVersion 21
// build tools的版本
buildToolsVersion "21.1.1"
defaultConfig {
// 应用的包名
applicationId "me.storm.ninegag"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0.0"
}
// java版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
debug {
// debug模式
}
release {
// 是否进行混淆
minifyEnabled false
// 混淆文件的位置
proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.txt‘
}
}
// 移除lint检查的error
lintOptions {
abortOnError false
}
}
dependencies {
// 编译libs目录下的所有jar包
compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
compile ‘com.android.support:support-v4:21.0.2‘
compile ‘com.etsy.android.grid:library:1.0.5‘
compile ‘com.alexvasilkov:foldable-layout:1.0.1‘
// 编译extras目录下的ShimmerAndroid模块
compile project(‘:extras:ShimmerAndroid‘)
}
我们来一行一行的进行分析:
- apply plugin:如果创建的是一个应用,就以
com.android.application
作为值,而如果创建的是Library,就以com.android.library
作为值。 - // 编译SDK的版本
compileSdkVersion 21
// build tools的版本
buildToolsVersion “21.1.1”
此处应该比较好理解,配置的是编译版本和构建工具的版本。
- release {
minifyEnabled false //false代表不混淆,true代表混淆
// 混淆文件的位置
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.txt’
}
- dependencies {
// 编译libs目录下的所有jar包
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
compile ‘com.android.support:support-v4:21.0.2’
compile ‘com.etsy.android.grid:library:1.0.5’
compile ‘com.alexvasilkov:foldable-layout:1.0.1’
// 编译extras目录下的ShimmerAndroid模块
compile project(‘:extras:ShimmerAndroid’)
}
这个部分值很重要的,我们会经常使用到。
compile ‘com.android.support:support-v4:21.0.2’
compile ‘com.etsy.android.grid:library:1.0.5’
compile ‘com.alexvasilkov:foldable-layout:1.0.1’
这三个表示的是外部依赖,什么是外部依赖呢? 就是有一个网站,它专门收集各种软件库,当我们想要用哪一个库的时候,就添加一个compile 依赖,然后ADT工具就会自动的从该网站上把库下载下来,供我们使用。
整个工程的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.0.0‘
}
}
allprojects {
repositories {
jcenter()
}
}
- repositories {
jcenter()
}
看到这了吗?这就是那个存放library的仓库,除了这个仓库还有mavenCentral()仓库。
有的开发者会把这两个仓库和github仓库混淆,其实他们是不一样的,github关注的是合作开发和代码分享,而这两个库专注的是代码的收集和存放。
settings.gradle
include ‘:app‘, ‘:extras:ShimmerAndroid‘
此配置定义的就是当前项目的子目录,从图中可以看出来,此工程中有一个app Modle和一个ShimmerAndroid Moudle.
以上就是在android studio中常用的gradle技能,如有错误,敬请指出,不胜感激!