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插件只支持集成测试,并 ...
随机推荐
- python对solr进行查询、插入操作(GET\POST)
循环查询一个列表中词的个数: #coding=utf-8 import requests ls = [u'我', u'是', u'一个', u'天才', u'你', u'也是'] for item i ...
- 从C转到JAVA学习路之struct与class对比(转)
转自:http://blog.csdn.net/andywxf01/article/details/53506549 JAVA里最牛B的最基本的就是类,而C语言中的struct也可以定义自己的数据结构 ...
- Dubbo超时机制导致的雪崩连接
Bug影响:Dubbo服务提供者出现无法获取Dubbo服务处理线程异常,后端DB爆出拿不到数据库连接池,导致前端响应时间异常飙高,系统处理能力下降,核心基础服务无法提供正常服务. Bug发现过程: ...
- 【原】Ubuntu下使用teamviewer
想尝试直接使用Xmanager打开Ubuntu桌面版,结果一直存在问题,迂回一下,尝试使用teamviewer解决,结果OK.办法如下: 在Ubuntu中,下载teamviewer,通过Windows ...
- Windows外壳名字空间的浏览
Windows95/98对Dos/Win3.x作了许多重大改进,在文件系统方面,它除了采用长文件名替代Dos中的8.3文件名以外,引入外壳名字空间(Shell Name Space)来代Dos文件系统 ...
- 神技do{}while(false)
神技do{}while(false) do{}while(false)或者说do{}while(0),本人在linux源码中学得,起初看起来比较奇怪,但在处理连续流程中特别有用,例如ABC三个流程,A ...
- 8.1.2 绑定Activity和Service
8.1.2 绑定Activity和Service 2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Andro ...
- Service#onStartCommand返回值解析
Service#onStartCommand返回值解析 Service类有个生命周期方法叫onStartCommand,每次启动服务(startService)都会回调此方法.此方法的原型例如以下: ...
- systemd 对/home等目录的限制
systemd 默认配置了对/root /home等目录的限制 比如ProtectHome=true 意味着启动时应用对这些目录不可写,这是个大坑,谨记
- unity, Invoke延迟执行
参考:http://blog.christianhenschel.com/2013/05/15/how-to-do-delayed-function-calls-in-unity3d-one-line ...