快速掌握 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的内容如下所示:
- // 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-rc4'
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
- }
- allprojects {
- repositories {
- jcenter()
- maven {
- url 'http://mvnrepo.xxx.com/mvn/repository'
- }
- }
- }
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 文件:
- include ':app'
app就是项目包含的一个module,如果有多个module,可以在为 include 方法添加多个参数。
最后是app/build.gradle
- apply plugin: 'com.android.application'
- android {
- compileSdkVersion 21
- buildToolsVersion "21.1.1"
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
- }
- defaultConfig {
- applicationId "your.application.id"
- minSdkVersion 14
- targetSdkVersion 21
- versionCode 2
- versionName "2.0.0"
- }
- signingConfigs {
- release {
- storeFile file('release.keystore')
- storePassword "yourstorepassword"
- keyAlias "yourkeyalias"
- keyPassword "yourkeypassword"
- }
- debug {
- storeFile file('debug.keystore')
- }
- }
- buildTypes {
- release {
- minifyEnabled true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- signingConfig signingConfigs.release
- }
- debug {
- signingConfig signingConfigs.debug
- }
- }
- productFlavors {
- inner {
- applicationId "your.application.inner.id"
- versionName "2.0.0"
- }
- market {
- }
- }
- }
- repositories {
- flatDir {
- dirs 'libs'
- }
- }
- dependencies {
- // 通用
- compile name: 'volley', ext: 'aar'
- compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
- compile 'com.alibaba:fastjson:latest.integration'
- // 项目相关(已删除)
- }
Groovy 的基本语法
方法调用
- apply plugin: 'com.android.application'
以上语句中的apply
是一个方法,给它传递了一个参数plugin
,plugin
的值是'com.android.application'
。
如果有多个参数,则以逗号隔开,例如
- <code>compile name: 'volley', ext: 'aar'</code>
闭包
Groovy中花括号包含的部分成为一个闭包(Closure)。例如下面的代码
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
- }
compileOptions
是一个 Method, 它的参数是一个闭包,这个闭包内依次执行了两个方法 -- sourceCompatibility
和targetCompatibility
, 参数都是JavaVersion.VERSION17
。
闭包也可以嵌套包含
- repositories {
- flatDir {
- dirs 'libs'
- }
- }
常见使用方法
包依赖(aar)
使用aar时可以分为两种情况
① aar位于本地目录
首先在 android 的参数闭包中添加调用方法 repositories
- repositories {
- flatDir {
- dirs 'libs'
- }
- }
然后在 dependencies 的参数闭包中添加
- compile name: 'volley', ext: 'aar'
② aar位于远程仓库
这里以maven为例,当然也可以使用其他类型的仓库,例如 Ivy。
只需要在jar包引用方式后面添加一个@aar
就可以了
- compile 'com.alibaba:fastjson:latest.integration@aar'
包依赖(jar)
- compile group: 'com.alibaba', module: 'fastjson', version: 'latest.integration'
可以简写成
- compile 'com.alibaba:fastjson:latest.integration'
latest.integration
可以替换成具体的版本号,这里是获取服务器上的最新版本。
去掉重复依赖
- compile 'com.alibaba.fastjson.latest.integration' {
- exclude module: 'annotations', group: 'com.google.android'
- }
使用 Java7
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
- }
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]的更多相关文章
- 快速掌握 Android Studio 中 Gradle 的使用方法
快速掌握 Android Studio 中 Gradle 的使用方法 Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build ...
- 虚拟机中的CentOS7如何上网?---https://blog.csdn.net/nothing2017/article/details/61420767
虚拟机中的CentOS7如何上网?https://blog.csdn.net/nothing2017/article/details/61420767
- R语言中的正则表达式(转载:http://blog.csdn.net/duqi_yc/article/details/9817243)
转载:http://blog.csdn.net/duqi_yc/article/details/9817243 目录 Table of Contents 1 正则表达式简介 2 字符数统计和字符翻译 ...
- Android 设计模式之观察者模式(转载自:“http://blog.csdn.net/fangchongbory/article/details/7774044”)
/* * 观察者模式 * 定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...
- C++ 中宏的使用 --来自:http://blog.csdn.net/hgl868/article/details/7058906
宏在代码中的使用实例: g_RunLog2("Middleware client for Linux, build:%s %s", __DATE__, __TIME__); 下面详 ...
- Python 去除列表中重复的元素(转载http://blog.csdn.net/zhengnz/article/details/6265282)
比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a']l2 = list(set(l1))print l2 还有一种据说速度更快的,没测试过两者的速度 ...
- Android Studio 中 Gradle 依赖的统一管理(rootProjectt)
最近遇到Android Studio 中 Gradle 依赖的统一管理的不懂得地方,看大神的也没看懂,百度了一下,使用起来还挺方便 下面是链接,在这里我就不详细说明了, http://www.jian ...
- android studio 更新 Gradle错误解决方法(Gradle sync failed)
android studio 更新 Gradle错误解决方法 Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...
- 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 ...
随机推荐
- ASP.NET的一套笔试题
1. 自定义控件如何做?答:自定义控件,跟HtmlControl或WebControl相似,编译后可以添加引用到工具栏里面,直接用鼠标拖动使用.2.界面的布局?答:表格,div3.程序的执行过程 ...
- 为什么主流网站无法捕获 XSS 漏洞?
二十多年来,跨站脚本(简称 XSS)漏洞一直是主流网站的心头之痛.为什么过了这么久,这些网站还是对此类漏洞束手无策呢? 对于最近 eBay 网站曝出的跨站脚本漏洞,你有什么想法?为什么会出现这样的漏网 ...
- AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
彩蛋爆料直击现场 几周前,我们曾报道了13个字符导致Chrome崩溃的漏洞.然而,这个漏洞有个小小的遗憾,那就是它只在MAC OS X下生效,其他系统并不受影响. 现在,我们又有了一个更有趣的漏洞.黑 ...
- POJ 2182
#include <iostream> #define MAXN 8005 using namespace std; int _m[MAXN]; int main() { //freope ...
- 14个Xcode中常用的快捷键操作
在Xcode 6中有许多快捷键的设定可以使得你的编程工作更为高效,对于在代码文件中快速导航.定位Bug以及新增应用特性都是极有效的. 当然,你戳进这篇文章的目的也在于想要快速的对代码文件进行操作,或者 ...
- sql只修改第一二行数据
update t_table set colname=* where a=1 order by id desc limit 1,2
- svn教程
安装过程: 1.下载软件后,双击程序进行安装,点击“Next”: 2.在许可证协议页面,选择“I Accept the terms in the License Agreement”,点击“Next” ...
- 浅谈Spark Kryo serialization
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3833985.html 最近在使用spark开发过程中发现当数据量很大时,如果cache数据将消耗很多的内 ...
- 李洪强iOS开发之通知的使用
李洪强iOS开发之通知的使用 01 - 在A中发送通知 02 - 在B中监听通知 03 - 在B中通知出发的方法 04 - 在B控制器viewDidLoad调用通知
- 2016CVTE编程题:兔子藏洞
兔子藏洞 题目描述 一只兔子藏身于20个圆形排列的洞中(洞从1开始编号),一只狼从x号洞开始找,下次隔一个洞找(及在x+2号洞找),在下次个两个洞找(及在x+5号洞找),以此类推...它找了n次仍然没 ...