国内最全IT社区平台 联系我们 | 收藏本站
阿里云优惠2流量王
您当前位置:首页 > php开源 > 综合技术 > 【安卓笔记】gradle入门

【安卓笔记】gradle入门

来源:程序员人生   发布时间:2015-04-14 08:50:14 阅读次数:12588次
随着Android Studio愈来愈完善,更多的开发者舍弃掉Eclipse。但是新的IDE与以往的Eclipse有很大区分,这致使部份开发者望而生畏,其中1个大家觉得比较麻烦的是Android Studio采取的新的构建系统,gradle。那末这篇文章我将对gradle进行1个简单介绍(主要讲gradle配合Android Studio的使用),希望帮助大家熟习gradle。

1. gradle是甚么?
gradle跟ant/maven1样,是1种依赖管理/自动化构建工具。但是跟ant/maven不1样,它并没有使用xml语言,而是采取了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。更多详细介绍可以看它的官网:http://www.gradle.org/
 

2.为何使用gradle?

更容易重用资源和代码;
可以更容易创建不同的版本的程序,多个类型的apk包;
更容易配置,扩大;
更好的IDE集成;


3.gradle入门需知

  1.基本配置:
首先明确gradle跟maven1样,也有1个配置文件,maven里面是叫pom.xml,而在gradle中是叫build.gradle。Android Studio中的android项目通常最少包括两个build.gradle文件,1个是project范围的,另外一个是module范围的,由于1个project可以有多个module,所以每一个module下都会对应1个build.gradle。这么说有点抽象,看下面这个图:

这是1个android工程的project视图,上面那个是module下的build.gradle文件。下面那个是project下的build.gradle文件。这两个文件是有区分的,project下的build.gradle是基于全部project的配置,而module下的build.gradle是每一个模块自己的配置。下面看下这两个build.gradle里面的内容:

project#build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { //构建进程依赖的仓库 repositories { jcenter() } //构建进程需要依赖的库 dependencies {//下面声明的是gradle插件的版本 classpath 'com.android.tools.build:gradle:1.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } //这里面配置全部项目依赖的仓库,这样每一个module就不用配置仓库了 allprojects { repositories { jcenter() } }
注:大家可能很奇怪,为何仓库repositories需要声明两次,这实际上是由于它们作用不同,buildscript中的仓库是gradle脚本本身需要的资源,而allprojects下的仓库是项目所有模块需要的资源。所以大家千万不要配错了。

module#build.gradle:
//声明插件,这是1个android程序,如果是android库,应当是com.android.library apply plugin: 'com.android.application' android {//安卓构建进程需要配置的参数 compileSdkVersion 21//编译版本 buildToolsVersion "21.1.2"//buildtool版本 defaultConfig {//默许配置,会同时利用到debug和release版本上 applicationId "com.taobao.startupanim"//包名 minSdkVersion 15 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes {//这里面可以配置debug和release版本的1些参数,比如混淆、签名配置等 release {//release版本 minifyEnabled false//是不是开启混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆文件位置 } } } dependencies {//模块依赖 compile fileTree(dir: 'libs', include: ['*.jar'])//依赖libs目录下所有jar包 compile 'com.android.support:appcompat-v7:21.0.3'//依赖appcompat库 }
defaultConfig中是1些基本配置,它会同时利用到debug/release版本上,下面罗列了所有可配项及对应的值:


buildTypes结点很重要,这里可以配置构建的版本的1些参数,默许有两个构建版本release/debug,固然你可以自定义1个构建版本,比如叫foo,然后通过gradlew assembleFoo就能够生成对应的apk了。
buildTypes里还有很多可配置项,下面罗列了所有可配项和debug/release版本的默许值:

现在大家对build.gradle已初步了解了,我们再看下其他1些与gradle相干的文件:
1.gradle.properties:
从名字上就知道它是1个配置文件,没错,这里面可以定义1些常量供build.gradle使用,比如可以配置签名相干信息如keystore位置,密码,keyalias等。
2.settings.gradle:
这个文件是用来配置多模块的,比如你的项目有两个模块module-a,module-b,那末你就需要在这个文件中进行配置,格式以下:
include ':module-a',':module-b'
3.gradle文件夹:
这里面有两个文件,gradle-wrapper.jar和gradle-wrapper.properties,它们就是gradle wrapper。gradle项目都会有,你可以通过命令gradle init来创建它们(条件是本地安装了gradle并且配置到了环境变量中)。

4.gradlew和gradlew.bat:
这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。这样就能够保证在不同的环境下构建时都是使用的统1版本的gradle,即便该环境没有安装gradle也能够,由于gradle wrapper会自动下载对应的gradle版本。
gradlew的用法跟gradle1模1样,比如履行构建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的缩写。

2.gradle仓库:
gradle有3种仓库,maven仓库,ivy仓库和flat本地仓库。声明方式以下:
maven{ url "..." } ivy{ url "..." } flatDir{ dirs 'xxx' }
有1些仓库提供了别名,可直接使用:
repositories{ mavenCentral() jcenter() mavenLocal() }
3.gradle任务:
gradle中有1个核心概念叫任务,跟maven中的插件目标类似。
gradle的android插件提供了4个顶级任务
assemble 构建项目输出 check 运行检测和测试任务 build 运行assemble和check clean 清算输出任务
履行任务可以通过gradle/gradlew+任务名称的方式执,履行1个顶级任务会同时履行与其依赖的任务,比如你履行
gradlew assemble
它通常会履行:
gradlew assembleDebug gradlew assembleRelease
这时候会在你项目的build/outputs/apk或build/outputs/aar目录生成输出文件

注:linux下履行构建任务需要首先更改gradlew脚本的权限,然后才能履行该脚本:
chmod +x gradlew ./gradlew assemble
可以通过:
gradlew tasks