Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.1——编写自己的任务
问题:
你想用自己的任务定制gradle的构建过程。
解决方案:
在gradle的build文件里面增加task元素。用Android插件支持的extra属性使得开发更容易。
讨论:
Gradle的DSL支持使用task块来定义自己的任务。API包括的非常广范围的task(像 Copy,Wrapper和Exec),你可以简单的通过配置来使用。
举例子,Copy任务包含from和to属性,from块可以设置排除指定格式文件名的文件。将那些没有签名的apk以外的所有apk复制到新的文件夹下,任务如下:
task copyApks(type: Copy) {
from("$buildDir/outputs/apk") {
exclude '**/*unsigned.apk', '**/*unaligned.apk'
}
into '../apks'
}
buildDir属性和默认的build目录相关,$符号被用来将它插入到Groovy字符串里面(使用双引号)。Copy任务的文档显示,exclude块支持Ant风格的文件目录名,意味着**匹配所有的子目录。
如果你想要简单的配置一个已有的gradle任务,你需要理解gradle里面configuration和execution阶段的区别。在configuration阶段,Gradle基于依赖构建了一个DAG。然后执行特点的任务。所有任务在执行前都被配置过。
Gradle喜欢陈述性的任务。像上面的例子,你具体说明你想要做什么,而不是怎么做。如果你需要执行命令,在Gradle任务里面增加一个doLast块:
task printVariantNames() {
doLast {
android.applicationVariants.all { variant ->
println variant.name
}
}
}
任何doLast块前面或者后面的task中执行的,都会在configuration期间执行。doLast块里面的代码在execution期间执行。
Android插件增加一个android属性,相应的有一个applicationVariants属性可以返回所有的buildType/flavor的组合。在这种情况下,他们能够在控制台上输出。
将所有debug flavors装到同一个设备上面(假设他们有唯一的applicationId值),可以使用下面的任务:
task installDebugFlavors() {
android.applicationVariants.all { v ->
if (v.name.endsWith('Debug')) {
String name = v.name.capitalize()
dependsOn "install$name"
}
}
}
dependsOn方法显示这是configuration阶段的一部分,而不是execution的。每个变体的名字,像friendlyDebug,被大写(FriendlyDebug),然后相应的安装任务(installFriendlyDebug)被添加到installDebugFlavors任务里面。
这个任务是在configuration阶段,installArrogantDebug,installFriendlyDebug,installObsquiousDebug都作为依赖添加到installDebugFlavors里面。因此执行installDebugFalvors任务也会要求三个flavor安装。
写自定义任务需要一点Groovy的只是。进一步讨论有点超出本书的范围。但是有一些不错的书,额外的Groovy概念在里面有介绍。
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.1——编写自己的任务的更多相关文章
- Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)
如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...
- Android开发工具全面转向Android Studio(2)——AS project/module的CRUD
本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...
- 配置cordova的android开发环境(无android studio)
原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...
- 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。
AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...
- Eclipse搭建Android开发环境并运行Android项目
Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档
问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试
问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App
问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...
- Android开发:《Gradle Recipes for Android》阅读笔记1.2
在android开发中会需要配置使用app的android SDK的最低版本和目标版本,这个是bulidl.gradle的android模块设置.默认有以下几个设置: applicationId,这个 ...
随机推荐
- REOBJECT structure
REOBJECT structure 包含丰富编辑控件中的OLE或图像对象的信息. Syntax 语法 typedef struct _reobject { DWORD cbStruct; LON ...
- [Javascript] Deep merge in Javascript with Ramda.js mergeDeepWith
Javascript's Object.assign is shadow merge, loadsh's _.merge is deep merge, but has probem for array ...
- IE8兼容<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
转自:http://nicyea.iteye.com/blog/719007 前言 X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的,这个区别与 conten ...
- 输入N,打印如图所看到的的三角形(例:N=3,N=4,N=5)1<=N<=26
package demo; public class PrintDemo { public static void main(String[] args) { print(26); } private ...
- libevent2源码分析之三:信号的初始化流程
libevent2对信号的响应也进行了封装,使之与socket操作一样对外提供统一的接口.这里的信号一般指linux的信号.由于信号与socket相关的编程接口有较大的不同,因此在内部实现也有一些区别 ...
- MySQL存储过程详解 mysql 存储过程(转)
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- (五)EasyUI使用——datagrid数据表格
DataGrid以表格形式展示数据,并提供了丰富的选择.排序.分组和编辑数据的功能支持.DataGrid的设计用于缩短开发时间,并且使开发人员不需要具备特定的知识.它是轻量级的且功能丰富.单元格合并. ...
- freemarker相关
大部分引入:http://www.blogjava.net/alinglau36/archive/2011/02/23/344970.html Freemarker操作字符串 1.substring( ...
- UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multibyte sequence
[问题] python中已获取网页: http://blog.csdn.net/hfahe/article/details/5494895 的html源码,其时UTF-8编码的. 提取出其标题部分: ...
- udpsocket 通信C#例子
服务端代码: using System; using System.Collections.Generic; using System.Linq; using System.Net; using Sy ...