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,这个 ...
随机推荐
- 使用Visual Studio的动态连接库创建通用数据库连接对话框
1.在VS(此处文件夹文件以vs2010为例)安装文件夹下("%Visual Studio安装文件夹%/Common10/IDE/Microsoft.Data.ConnectionUI.Di ...
- [Android] android:visibility属性应用
在Android开发中,有这样一种场景: 当edittext中有内容时候,旁边的提交或确定按钮显示: 当edittext中内容为空的时候,提交或确定按钮隐藏: 要实现起来其实并不困难.很多控件都有vi ...
- 深入理解C/C++ [Deep C (and C++)] (2)
好.接着深入理解C/C++之旅.我在翻译第一篇的时候.自己是学到不不少东西,因此打算将这整个ppt翻译完成. 请看以下的代码片段: #include <stdio.h> void foo( ...
- lodash 工具库
lodash是一套工具库,内部封装了很多字符串.数组.对象等常见数据类型的处理函数. 1.lodash的引用 import _ from 'lodash' 用一个数组遍历来说明为什么要使用lodash ...
- 原生js 操作类名
添加类名: document.getElementById('navBar').getElementsByClassName('mui-tab-item')[0].classList.add('mui ...
- 百度MUX:APP动效之美需内外兼修
移动互联网时代已经到来.APP已如天空的繁星.数也数不清.随着手机硬件的不断升级,实现炫酷且流畅的动效不再是遥远的梦想.假设你是APP达人,喜欢试用各种APP,你肯定会发现越来越多的APP開始动效化. ...
- Oracle 查询搜索字符串在哪些存储过程中包含
如下: select *from all_source where OWNER = 'LC0019999'and TEXT like '%insert into%d values(%'
- nginx跨域(转2)
当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要给Nginx服 ...
- Centos7使用LVM扩容磁盘(测试成功)
1.新增加了一块200G大小的磁盘/dev/sdb fdisk -l 2. pvcreate /dev/sdb 3. pvdisplay 查看添加成功的/dev/sdb的大小为200G 4. vgex ...
- java-ApiValueDemo
关于API相关正则表达式,各方法的使用 package com.example; import java.util.Arrays; import java.util.Scanner; /** * Ap ...