Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.5——在项目中共享配置
问题:
取出多个模块下相同的配置
解决方案:
在顶级gradle配置文件里面使用allprojects或者subprojects块
讨论:
当你在android studio中新建android项目时,IDE创建了一个两级的gradle项目,一个配置文件在根目录下,一个在叫app的模块目录下。顶级的build.gradle有几个叫allprojects的块:

这个块是gradle的语法,所以不只是在adroid项目中,在所有基于gradle的项目中都能使用。allprojects属性来源于Gradle项目中的类org.gradle.api.Project的属性。这个属性由当前项目和所有子项目的集合组成。另外有一个也叫这个名字的方法,允许你配置当前项目和所有子项目。
PS:在gradle API中年经常有一个属性和方法同名。上下问会判断你使用的哪个。
做法是将闭包参数应用于allprojects集合中的每个项目。也就是说你不需要在子项目(app)中重复repositories块,因为它们已经存在了。
一个可以替代的方式是使用subprojects块。举例说,如果你有多个android库项目,每个都会在build文件应用库插件。如果每个子项目都是类库项目,你通过在上级配置中应用这个插件的方式,去掉重复的配置,如:

subprojects返回一个子项目的集合,并且有个叫subprojects的方法对他们使用闭包。
进一步思考:
如果查看allprojects方法的文档你会发现,这个方法使用一个叫org.gradle.api.Action的类做参数。签名如下:

文档说这个方法对当前项目和所有子项目执行给定的Action。Action<T>是一个只有一个参数的叫做execute的简单方法。这好像暗示你要创建一个实现Action接口的类,实例化它,并且将结构作为参数。在1.8以前的java,这经常用作匿名内部类。
在Groovy中,你可以简单的使用闭包作为参数来实现单方法的接口。闭包会成为方法实现。Gradle对allprojects和subprojects方法的实现,是将闭包参数应用于每个项目。
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.5——在项目中共享配置的更多相关文章
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.1——设置项目参数
问题: 开发的时候经常需要向项目中添加一些额外的参数或者硬编码的值. 解决方案: 使用ext块设置公用的值.如果需要从build文件中移除这些值,可以将参数放到gradle.properties文件中 ...
- 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》阅读笔记(翻译)6.1——推荐配置
问题: 你想要提高Gradle的构建效率. 解决方案: 使用下面推荐的技术组合. 讨论: 首先,这里没有可以影响app表现的建议.有很多你可以做的事来提高app,很多都和Android的混淆工具有关. ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试
问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...
随机推荐
- 蓝点通用管理系统V13版发布了!
蓝点通用管理系统13版已发布! 重磅新功能:系统的通知和提醒功能,增加微信方式,微信通知.微信查询数据.微信拍照上传....... 蓝点的客户管理系统.进销存管理系统.产品管理系统.工作流管理系统.投 ...
- IE8兼容<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
转自:http://nicyea.iteye.com/blog/719007 前言 X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的,这个区别与 conten ...
- python 使用 urllib2
使用basic auth 的3种方式 1. 设置header import urllib2 from base64 import encodestring headers = {'Content-Ty ...
- ssh中使用spring的集成quartz 编写定时任务
之前没有使用框架开发时对于开发定时任务都是 使用java的原声timer类,重写线程的run方法跑要执行的任务.刚刚换的新公司,项目使用ssh2,目前该项目中的定时任务的使用spirng集成的quar ...
- BigInteger 与 BigDecimal区别,及BigDecimal详解
一般来说,BigInteger用的不是很多,BigDecimal用的稍微多一点,就比如说JDBC中,如果一个字段的数据库类型是Number, 那么getObject().getClass()的结果是j ...
- 锁定窗口,禁止更新的win32函数
[DllImport("user32.dll", EntryPoint = "LockWindowUpdate", SetLastError = true, E ...
- js获取100个随机数存入数组
. //js获取100个随机数存入数组 $(function () { var arr = []; ; var str = ""; ) { , ); ) { arr[num] = ...
- View的setTag和getTag使用
在listview 优化其中,会使用到setTag()以及getTag()方法 代码例如以下: @Override public View getView(int position, View con ...
- DM36x IPNC OSD显示中文 --- 基本数据准备篇
经过上一篇的叙述,基本原理搞清楚后,便需要对我们在OSD上显示中文作数据准备,首先是需要将gb2312关键区(也就是实际有文字存在的区)中的汉字转换为图片,在实际的转换中,并不像上一篇中GB2312编 ...
- Ionic学习笔记3_ionic指令简单布局
1) 添加引用类库(ionic样式和ionic js文件) 2) 标题栏,页脚栏,内容区 3) Js引入ionic类库,添加页面操作方法和对象 4) 数据初始化 5) Html页面 ...