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

时间:2022-08-27 18:50:54

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是一个方法,给它传递了一个参数pluginplugin 的值是'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, 它的参数是一个闭包,这个闭包内依次执行了两个方法 -- sourceCompatibilitytargetCompatibility, 参数都是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&colon;&sol;&sol;blog&period;csdn&period;net&sol;nothing2017&sol;article&sol;details&sol;61420767

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

  3. R语言中的正则表达式(转载:http&colon;&sol;&sol;blog&period;csdn&period;net&sol;duqi&lowbar;yc&sol;article&sol;details&sol;9817243)

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

  4. Android 设计模式之观察者模式(转载自:&OpenCurlyDoubleQuote;http&colon;&sol;&sol;blog&period;csdn&period;net&sol;fangchongbory&sol;article&sol;details&sol;7774044”)

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

  5. C&plus;&plus; 中宏的使用 --来自:http&colon;&sol;&sol;blog&period;csdn&period;net&sol;hgl868&sol;article&sol;details&sol;7058906

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

  6. Python 去除列表中重复的元素(转载http&colon;&sol;&sol;blog&period;csdn&period;net&sol;zhengnz&sol;article&sol;details&sol;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错误解决方法&lpar;Gradle sync failed&rpar;

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

  9. android gradle,groovy--https&colon;&sol;&sol;blog&period;csdn&period;net&sol;hebbely&sol;article&sol;details&sol;79074460

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

随机推荐

  1. ES6新特性概览

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  2. UVa 694 - The Collatz Sequence

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...

  3. Contains DuplicateII

    超时版: /*Contains Duplicate II Given an array of integers and an integer k, find out whether there the ...

  4. 通过PLSQL Developer导入SQL文件

    1.点击“工具” 2.选中其中的“导入表(L)”,在按下图所示操作: PLSQL Developer会自动运行相关命令,在Tables中刷新即可看到新导入的表.

  5. &lbrack;JSOI2008&rsqb;Blue Mary的旅行

    嘟嘟嘟 看\(n\)那么小,就知道是网络流.然后二分,按时间拆点. 刚开始我看成所有航班一天只能起飞一次,纠结了好一会儿.但实际上是每一个航班单独考虑,互不影响. 建图很显然,拆完点后每一个点的第\( ...

  6. ylz 开发学习笔记一(注意事项)

    Eclipse快捷键 断点 F6执行下一步 等等 C+S+R 搜索文件名字      C+鼠标移动左击 跳入类文件    jsp 文件的断点是使用 debugger  之后再chrom 用F10单步调 ...

  7. Angular 组件

    1 2 change是TimepickerDemoCtrl上的,mytime在timepicker内部改变生效就会触发 3 timepicker内部绑定TimepickerDemoCtrl对值的监控 ...

  8. thinkphp 去除空格

  9. Spark Streaming Programming Guide

    参考,http://spark.incubator.apache.org/docs/latest/streaming-programming-guide.html Overview SparkStre ...

  10. 架构实战项目心得(十四):spring-boot结合Swagger2构建RESTful API测试体系

    一.添加依赖: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...