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

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的内容如下所示:

[plain] view plain copy print?

  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 文件:

[plain] view plain copy print?

  1. include ‘:app‘

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


最后是app/build.gradle

[plain] view plain copy print?

  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 的基本语法

方法调用

[plain] view plain copy print?

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

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

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

[plain] view plain copy print?

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

闭包

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

[plain] view plain copy print?

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

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

闭包也可以嵌套包含

[plain] view plain copy print?

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

常见使用方法

包依赖(aar)

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

① aar位于本地目录

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

    [plain] view plain copy print?

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

    [plain] view plain copy print?

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

② aar位于远程仓库

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

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

[plain] view plain copy print?

  1. compile ‘com.alibaba:fastjson:[email protected]‘

包依赖(jar)

[plain] view plain copy print?

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

可以简写成

[plain] view plain copy print?

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

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

去掉重复依赖

[plain] view plain copy print?

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

使用 Java7

[plain] view plain copy print?

  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时经常会遇到一些无法获取远程依赖包的问题,最简单的解决办法就是把依赖包下载的本地。

时间: 2024-08-07 14:57:11

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

快速掌握 Android Studio 中 Gradle 的使用方法(转)

Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build工具. Gradle脚本是基于一种JVM语言 -- Groovy,再加上DSL(领域特定语言)组成的. 因为Groovy是JVM语言,所以可以使用大部分的Java语言库.所谓DSL就是专门针对Android开发的插件,比如标准Gradle之外的一些新的方法(Method).闭包(Closure)等. 由于Gradle的语法足够简洁,而且可以使用大部分的java包,当之

Android音频系统之音频框架(转http://blog.csdn.net/uiop78uiop78/article/details/8796492)

1.1 音频框架 转载请注明,From LXS, http://blog.csdn.net/uiop78uiop78/article/details/8796492 Android的音频系统在很长一段时间内都是外界诟病的焦点.的确,早期的Android系统在音频处理上相比于IOS有一定的差距,这也是很多专业的 音乐播放软件开发商没有推出Android平台产品的一个重要原因.但这并不代表它的音频框架一无是处,相反,基于Linux系统的Android平台有 很多值得我们学习的地方. 1.1.1 Li

快速掌握 Android Studio 中 Gralde 的使用方法

Gradle是Android开发新一代的 Build System, 也是 Android Studio默认的build工具. Gradle脚本是基于一种JVM语言 -- Groovy,再加上DSL(领域特定语言)语言组成的. 因为Groovy是JVM语言,可以使用大部分的Java语言库.所谓DSL就是专门针对Android开发的插件,比如标准Gradle之外的一些新的方法(Method).闭包(Closure)等. 由于Gradle的语法足够简介,而且可以使用大部分的java包,当之无愧地成为

Android Studio中Gradle统一管理版本号引用配置

Gradle统一管理版本号引用配置 为了提高项目开发效率,在实际项目开发过程中往往会引入一些开源框架,还有项目中使用的各种module,moudle过多时最好提供一种统一的方式去管理版本号,如:compileSdkVersion.buildToolsVersion.androidTestCompile 等,便于日后对版本号进行维护,此处记录2种方式处理上述问题. 方式一 1.在项目根目录下创建.gradle文件,如:config.gradle 2.在根目录下的build.gradle文件中引入我

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

android studio 更新 Gradle错误解决方法 Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 Gradle Project Compile Error 等等相关的问题 解决这些问题办法是 首先打开android studio项目 找到项目目录gradle\wrapper\gradle-wrapper.properties这个文件 内容如下

Android APK反编译详解(附图) (转至 http://blog.csdn.net/ithomer/article/details/6727581)

本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x64 反编译工具包 下载 (2012-10-10更新) 一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk反编译成java源码工具,以及源码查看工具. apk反编译工具dex2jar,是将apk中的classes.dex转化成jar文件 源码查看工具jdgui,是一个反编译工具,可以直接查看反编译后的

android 自定义照相机Camera黑屏 (转至 http://blog.csdn.net/chuchu521/article/details/8089058)

对于一些手机,像HTC,当自定义Camera时,调用Camera.Parameters的 parameters.setPreviewSize(width, height)方法时,如果width和height为奇数情况下,则会出现黑屏现象,解决办法可参考SDK提供的ApiDemos中关于Camera的 例子: List<Size> sizes = parameters.getSupportedPreviewSizes(); Size optimalSize = getOptimalPreview

(六十六)Android打造形形色色的进度条 (转载自:http://blog.csdn.net/lmj623565791/article/details/43371299)

转载自:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重复造轮子的原则,上github上搜索了一番,看了几个觉得比较好看的ProgressBar,比如:daimajia的等.简单看了下代码,基本都是继承自View,彻彻底底的自定义了一个进度条.盯着那绚丽滚动条,忽然觉得,为什么要通过View去写一个滚动条,系统已经提供了ProgressBar以及属于它的特性,我

Android 利用cursor来进行排序(转至http://blog.csdn.net/yangzongquan/article/details/6547860)

主要思路是:override move系列的方法,让cursor以自己想要的顺序来移动,从而达到对cursor排序的目的.比如数组A0里有 4(0),3(1),1(2),2(3),括号内为位置,排序后用数据记录A1:1(2),2(3),3(1),4(0).要访问第一个元素,则访问 A1[0]得到1(2),根据(2)找到在A0中的实际位置2,即1(2).参考了下系统的CursorWrapper和AbstractCursor代 码实现,另外有时间可以顺带了解下MatrixCursor. packag