Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build工具。

Gradle脚本是基于一种JVM语言 -- Groovy,再加上DSL(领域特定语言)组成的。

因为Groovy是JVM语言,所以可以使用大部分的Java语言库。所谓DSL就是专门针对Android开发的插件,比如标准Gradle之外的一些新的方法(Method)、闭包(Closure)等。

由于Gradle的语法足够简洁,而且可以使用大部分的java包,当之无愧地成为新一代 Build System。

使用Android Studio新建一个工程后,默认会生成两个build.gralde文件,一个位于工程根目录,一个位于app目录下。还有另外一个文件 --settings.gradle。

根目录下的脚本文件是针对module的全局配置,它的作用阈所包含的所有 module 是通过settings.gradle来配置。

app文件夹就是一个module,如果在当前工程中添加了一个新的module -- lib,就需要在settings.gralde文件中包含这个新的module。

gradle脚本的基本结构

用我现在的工程举例来说,根目录的build.gradle的内容如下所示:

  1. // Top-level build file where you can add configuration options common to all sub-projects/modules.
  2. buildscript {
  3. repositories {
  4. jcenter()
  5. }
  6. dependencies {
  7. classpath 'com.android.tools.build:gradle:1.0.0-rc4'
  8. // NOTE: Do not place your application dependencies here; they belong
  9. // in the individual module build.gradle files
  10. }
  11. }
  12. allprojects {
  13. repositories {
  14. jcenter()
  15. maven {
  16. url 'http://mvnrepo.xxx.com/mvn/repository'
  17. }
  18. }
  19. }

classpath 'com.android.tools.build:gradle:1.0.0-rc4'就是Android特有的插件,maven仓库位于通过方法jCenter() 获取,这也是默认的maven仓库。当然也可以添加额外的maven仓库地址,例如以上文件中的

maven {
url 'http://mvnrepo.xxx.com/mvn/repository'
}

然后是 settings.gradle 文件:

  1. include ':app'

app就是项目包含的一个module,如果有多个module,可以在为 include 方法添加多个参数。


最后是app/build.gradle

  1. apply plugin: 'com.android.application'
  2. android {
  3. compileSdkVersion 21
  4. buildToolsVersion "21.1.1"
  5. compileOptions {
  6. sourceCompatibility JavaVersion.VERSION_1_7
  7. targetCompatibility JavaVersion.VERSION_1_7
  8. }
  9. defaultConfig {
  10. applicationId "your.application.id"
  11. minSdkVersion 14
  12. targetSdkVersion 21
  13. versionCode 2
  14. versionName "2.0.0"
  15. }
  16. signingConfigs {
  17. release {
  18. storeFile file('release.keystore')
  19. storePassword "yourstorepassword"
  20. keyAlias "yourkeyalias"
  21. keyPassword "yourkeypassword"
  22. }
  23. debug {
  24. storeFile file('debug.keystore')
  25. }
  26. }
  27. buildTypes {
  28. release {
  29. minifyEnabled true
  30. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  31. signingConfig signingConfigs.release
  32. }
  33. debug {
  34. signingConfig signingConfigs.debug
  35. }
  36. }
  37. productFlavors {
  38. inner {
  39. applicationId "your.application.inner.id"
  40. versionName "2.0.0"
  41. }
  42. market {
  43. }
  44. }
  45. }
  46. repositories {
  47. flatDir {
  48. dirs 'libs'
  49. }
  50. }
  51. dependencies {
  52. // 通用
  53. compile name: 'volley', ext: 'aar'
  54. compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
  55. compile 'com.alibaba:fastjson:latest.integration'
  56. // 项目相关(已删除)
  57. }

Groovy 的基本语法

方法调用

  1. apply plugin: 'com.android.application'

以上语句中的apply是一个方法,给它传递了一个参数plugin,plugin 的值是'com.android.application'。

如果有多个参数,则以逗号隔开,例如

  1. <code>compile name: 'volley', ext: 'aar'</code>

闭包

Groovy中花括号包含的部分成为一个闭包(Closure)。例如下面的代码

  1. compileOptions {
  2. sourceCompatibility JavaVersion.VERSION_1_7
  3. targetCompatibility JavaVersion.VERSION_1_7
  4. }

compileOptions 是一个 Method, 它的参数是一个闭包,这个闭包内依次执行了两个方法 -- sourceCompatibility 和targetCompatibility, 参数都是JavaVersion.VERSION17。

闭包也可以嵌套包含

  1. repositories {
  2. flatDir {
  3. dirs 'libs'
  4. }
  5. }

常见使用方法

包依赖(aar)

使用aar时可以分为两种情况

① aar位于本地目录

  1. 首先在 android 的参数闭包中添加调用方法 repositories

    1. repositories {
    2. flatDir {
    3. dirs 'libs'
    4. }
    5. }
  2. 然后在 dependencies 的参数闭包中添加

    1. compile name: 'volley', ext: 'aar'

② aar位于远程仓库

这里以maven为例,当然也可以使用其他类型的仓库,例如 Ivy。

只需要在jar包引用方式后面添加一个@aar就可以了

  1. compile 'com.alibaba:fastjson:latest.integration@aar'

包依赖(jar)

  1. compile group: 'com.alibaba', module: 'fastjson', version: 'latest.integration'

可以简写成

  1. compile 'com.alibaba:fastjson:latest.integration'

latest.integration可以替换成具体的版本号,这里是获取服务器上的最新版本。

去掉重复依赖

  1. compile 'com.alibaba.fastjson.latest.integration' {
  2. exclude module: 'annotations', group: 'com.google.android'
  3. }

使用 Java7

  1. compileOptions {
  2. sourceCompatibility JavaVersion.VERSION_1_7
  3. targetCompatibility JavaVersion.VERSION_1_7
  4. }

productFlavors

针对不同的APP分发渠道,我们可以定义不同的 product flavor。也可以定义内部版本和外部版本,内部版本中包含了一些调试代码,这些代码在发布时并不会被编译进最后的APP中。而且可以分别为内部版本和外部版本指定不同的ApplicationId,这样在同一个设备上可以同时安装两个版本以方便调试。

命令行执行Gradle脚本

在Android工程根目录下会自动生成一个shell脚本 - gradlew,执行之前记得加上x属性 - chomod +x gradlew

gradle脚本中包含了很多 task,可以通过task名来指定需要执行的task。

  • ./gradlew build
  • ./gradlew assemble
  • ./gradlew assembleInnderDebug

总结

不得不说,Gradle实在太好用了!虽然 Gradle 可以与 Ant 或 maven
配合使用,但是其简洁和功能性远远超过其他两个。我现在开发的项目普遍使用的是
maven,不知道什么原因,使用Gradle时经常会遇到一些无法获取远程依赖包的问题,最简单的解决办法就是把依赖包下载的本地。

快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]的更多相关文章

  1. 快速掌握 Android Studio 中 Gradle 的使用方法

    快速掌握 Android Studio 中 Gradle 的使用方法 Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build ...

  2. 虚拟机中的CentOS7如何上网?---https://blog.csdn.net/nothing2017/article/details/61420767

    虚拟机中的CentOS7如何上网?https://blog.csdn.net/nothing2017/article/details/61420767

  3. R语言中的正则表达式(转载:http://blog.csdn.net/duqi_yc/article/details/9817243)

    转载:http://blog.csdn.net/duqi_yc/article/details/9817243 目录 Table of Contents 1 正则表达式简介 2 字符数统计和字符翻译 ...

  4. Android 设计模式之观察者模式(转载自:“http://blog.csdn.net/fangchongbory/article/details/7774044”)

    /* * 观察者模式 *      定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...

  5. C++ 中宏的使用 --来自:http://blog.csdn.net/hgl868/article/details/7058906

    宏在代码中的使用实例: g_RunLog2("Middleware client for Linux, build:%s %s", __DATE__, __TIME__); 下面详 ...

  6. Python 去除列表中重复的元素(转载http://blog.csdn.net/zhengnz/article/details/6265282)

    比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a']l2 = list(set(l1))print l2   还有一种据说速度更快的,没测试过两者的速度 ...

  7. Android Studio 中 Gradle 依赖的统一管理(rootProjectt)

    最近遇到Android Studio 中 Gradle 依赖的统一管理的不懂得地方,看大神的也没看懂,百度了一下,使用起来还挺方便 下面是链接,在这里我就不详细说明了, http://www.jian ...

  8. android studio 更新 Gradle错误解决方法(Gradle sync failed)

    android studio 更新 Gradle错误解决方法   Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...

  9. android gradle,groovy--https://blog.csdn.net/hebbely/article/details/79074460

    android grale,groovyhttps://blog.csdn.net/hebbely/article/details/79074460 Gradle编译时报错:gradle:peer n ...

随机推荐

  1. UNITY_MATRIX_IT_MV[Matrix] (转载)

    转载 http://blog.csdn.net/cubesky/article/details/38682975 前面发了一篇关于unity Matrix的文章. http://blog.csdn.n ...

  2. Unity3D研究院之LZMA压缩文件与解压文件

    原地址:http://www.xuanyusong.com/archives/3095 前两天有朋友告诉我Unity的Assetbundle是LZMA压缩的,刚好今天有时间那么就研究研究LZMA.它是 ...

  3. Long和Date数据类型之间相互转换代码 - 调整时间推前往后,截取long型日期方法。

    SimpleDateFormat DATETIME_SEC_STR = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateForm ...

  4. logback日志配置文件代码示例

    <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true&q ...

  5. firefox浏览器live http headers无法使用

    手贱的将firefox升级后,很多的插件不能使用.我这里因为用到live http headers,所以以此为例子.主要表现为live http headers修改数据包后,尤其是post数据包后,r ...

  6. iOS音效

    //AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service) //System Sound S ...

  7. ABP集合帖

    http://www.cnblogs.com/kebinet/p/5341663.html http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent ...

  8. oracle连接数据

    1.源代码 string connString = "User ID=scott;Password=yanhong;Data Source=(DESCRIPTION = (ADDRESS_L ...

  9. OSVERSIONINFO的用法及实例

    OSVERSIONINFO 快速信息 Windows NT   支持 Windows 95    支持 Win32s           支持 引入程序库    - 头文件           win ...

  10. WordPress主题制作教程5:循环

    wordpress循环分两种,一种是自定义循环,一种是默认循环. 自定义循环:根据指定参数进行实例化 调用所有页面,post_type值:page对应页面,post对应文章 <?php $arg ...