AndroidStudio下gradle的入门介绍与使用
比如 “0..4” 表明包括 整数 0、1、2、3、4。Groovy 还支持排除范围,“0..<4” 表示 0、1、2、3。还能够创建字符范围:“a..e” 相当于 a、b、c、d、e。“a..<e” 包括小于 e 的全部值。
def range = 0..4
def coll = ["Groovy", "Java", "Ruby"]
def hash = [name:"Andy", "VPN-#":45]
它们不须要名称。能够在定义之后运行。
- def xxx = {paramters -> code} //或者
- def xxx = {无參数,纯code} 这样的case不须要->符号
- doLast({
- println'Hello world!'
- })
def acoll = ["Groovy", "Java", "Ruby"]
acoll.each{
println it
}
it 变量是一个keyword,指向被调用的外部集合的每一个值— 它是默认值,能够用传递给闭包的參数覆盖它。
- println 'Groovy world!'
Groovy把它转换成这种Java类:
运行 groovyc-d classes test.groovy
groovyc是groovy的编译命令,-d classes用于将编译得到的class文件复制到classes目录下
用于自己主动化构建、測试、公布打包。
每个Project在构建的时候都包括一系列的Task。
比方一个Android APK的编译可能包括:Java源代码编译Task、资源编译Task、JNI编译Task、lint检查Task、打包生成APK的Task、签名Task等。
1. gradle projects查看工程信息
到眼下为止,我们了解了Gradle什么呢?
l 每个Project都必须设置一个build.gradle文件。至于其内容。我们留到后面再说。
l 对于multi-projects build。须要在根文件夹下也放一个build.gradle,和一个settings.gradle。
l 一个Project是由若干tasks来组成的,当gradlexxx的时候,实际上是要求gradle运行xxx任务。
这个任务就能完毕详细的工作。
2. gradle tasks查看任务信息
gradleproject-path:tasks 即可。注意,project-path是文件夹名。后面必须跟冒号。
对于Multi-project。在根文件夹中,须要指定你想看哪个poject的任务。
只是你要是已经cd到某个Project的文件夹了,则不需指定Project-path。
- l Gradle有一个初始化流程,这个时候settings.gradle会运行。
- l 在配置阶段,每一个Project都会被解析。其内部的任务也会被加入到一个有向图里,用于解决运行过程中的依赖关系。
- l 然后才是运行阶段。
你在gradle xxx中指定什么任务。gradle就会将这个xxx任务链上的所有任务所有按依赖顺序运行一遍!
(1)生命周期
eg:Single project build example
settings.gradle
println 'This is executed during the initialization phase.'
build.gradle
println 'This is executed during the configuration phase.'
task configured {
println 'This is also executed during the configuration phase.'
}
task test << {
println 'This is executed during the execution phase.'
}
task testBoth {
doFirst {
println 'This is executed first during the execution phase.'
}
doLast {
println 'This is executed last during the execution phase.'
}
println 'This is executed during the configuration phase as well.'
}
include 'project1', 'project2:child', 'project3:child1'
includeFlat 'project3', 'project4'
(3)依据生命周期定制task
eg:Logging of start and end of each task execution
build.gradle
task ok
task broken(dependsOn: ok) << {
thrownew RuntimeException('broken')
}
gradle.taskGraph.beforeTask { Task task ->
println "executing $task ..."
}
gradle.taskGraph.afterTask { Task task, TaskState state ->
if (state.failure) {
println "FAILED"
}
else {
println "done"
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':bugrpt')
}
远程库依赖
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
标识project须要hibernate-core一起编译,project test须要junit的编译,第二种写法group:name:version
dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
}
像这些外部的库,gradle是通过repository来找到的
eg:Usage of a remote Maven repository
build.gradle
repositories {
maven {
url "http://repo.mycompany.com/maven2"
}
}
eg:Usage of a local Ivy directory
build.gradle
repositories {
ivy {
// URL can refer to a local directory
url "../local-repo"
}
}
eg:公布project
uploadArchives {
repositories {
ivy {
credentials {
username "username"
password "pw"
}
url "http://repo.mycompany.com"
}
}
}
buildTypes { debug { applicationIdSuffix ".debug" } jnidebug {
initWith(buildTypes.debug) packageNameSuffix ".jnidebug" jniDebuggable true } }}对于每一种buildTypes 会创建对应的ssemble<BuildTypeName>任务,比方debug会自己主动创建assembleDebug任务
$USER_HOME/.gradle/wrapper/dists.task hello {
doLast {
println 'Hello world!'
}
}
这个脚本定义了一个叫做hello的task,而且加入了一个action,这个action实际上是由groovy语言编写的闭包。更简洁的写法
task hello << {
println 'Hello world!'
}
> gradle -q hello
Hello world!
2 task依赖
project('projectA') {
task taskX(dependsOn: ':projectB:taskY') << {
println 'taskX'
}
}
project('projectB') {
task taskY << {
println 'taskY'
}
}
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
task myTask {
ext.myProperty = "myValue"
}
task printTaskProperties << {
println myTask.myProperty
}
5 设置默认
defaultTasks 'clean', 'run'
task clean << {
println 'Default Cleaning!'
}
task run << {
println 'Default Running!'
}
task other << {
println "I'm not a default task!"
}
6 能够加入HOOK
task distribution << {
println "We build the zip with version=$version"
}
task release(dependsOn: 'distribution') << {
println 'We release now'
}
gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(release)) {
version = '1.0'
} else {
version = '1.0-SNAPSHOT'
}
}
println hello.name
println tasks.hello.name
tasks.getByPath(':projectA:hello').path
Configuring a task - with closure
task copy(type: Copy) {
description 'Copies the resource directory to the target directory.'
from 'resources'
into 'target'
include('**/*.txt', '**/*.xml', '**/*.properties')
}
gradle user guide https://docs.gradle.org/current/userguide/userguide.html
AndroidStudio下gradle的入门介绍与使用的更多相关文章
- [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)
最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...
- Android CoordinatorLayout 入门介绍
Android CoordinatorLayout 入门介绍 CoordinatorLayout View 知道如何表现 在 2015 年的 I/O 开发者大会上,Google 介绍了一个新的 And ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- Nginx - Windows下Nginx初入门
公司刚使用nginx,预先学习下.鉴于机器没有Linux环境,在Windows熟悉下. 下载 目前(2015-07-11),nginx的稳定版本是1.8.0,在官网下载先,windows版的nginx ...
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- Gradle学习系列之一——Gradle快速入门
这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构 ...
- eclipse下gradle配置
eclipse下gradle配置 这可真麻烦啊,一个项目把java的东西学习完了!这不,刚弄完maven又来了个gradle. http://gradle.org/gradle-download 1. ...
- Windows下FFmpeg高速入门
本系列文章导航 Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进 ...
- Gradle学习系列之一——Gradle快速入门(转)
这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构 ...
随机推荐
- JQuery源码-------JQuery中数值型变量的判断isNumeric
判断一个数值型变量的方法,在jquery中非常简单,只有一行代码. isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false ...
- setInterval计时器延时问题
计时器延时问题 js计时器 使用setTimeout.setInterval函数时,第二个参数的设置的时间间隔t是自该函数(setTimeout(f1,t).setInterval(f1,t))被调用 ...
- ECMAScript 6 proxies
在ECMAScript 5里面,可以通过(writable 和 configurable)内部属性把属性设置为不可修改和不可删除的,可以通过(Object.preventExtensions() )让 ...
- 配置好postfix邮件服务器之后就可以使用它来发送邮件了
下面是一段摘自W3school关于php mail函数的栗子,经过测试发现两个问题. <?php $to = "somebody@example.com, somebodyelse@e ...
- Postman参数化使用以及中文乱码问题解决
1.参数化详解 准备工作,数据准备 2.使用csv文件时中文乱码可以通过使用txt文本,json文本改变调用json文件改变文件的编码格式解决 3:参数化数据调用的两种方式通过调用读取文件传入环境变量 ...
- Java web 引入wangEditor编辑器
最近项目需要我做些前端的事,这让我这个半吊子前端很是痛苦.项目中需要一个编辑器,之前找了个ueditor,插件比较多,需要改源码等等不说,最后弄好了,发现需要flash插件.没办法,只有推到重来,在网 ...
- VS2015如何连接mySQL数据库图文
1.新建一个工程名叫mysql,编程环境选择c#,然后选择windows窗体应用程序,新建一个窗体用于显示查询到sql数据库的数据集 2.从工具箱向form1窗体上拖一个按钮和datagridview ...
- javaweb学习方案1
一.JAVA环境变量的配置1.首先下载JDK JDK可以在Oracle(甲骨文)公司的官方网站http://www.oracle.com下载2.安装完成后查看JDK安装路径一般是C:\Program ...
- python - dict.setdefault
index = dict.serdefault(key,default) 尝试往dict中插入新键值key,如果key已存在就原dict不变,否则插入key:defalut:返回值为key在dict中 ...
- P1132 数字生成游戏
题目请见:传送门 以下为题解,直接从洛谷上搬过来的,还专门改了markdown,(汗) 宽搜 with 一些技巧 由于查询量很大,所以要预先处理所有答案 预处理当然是用BFS,并同时进行delete, ...