Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.4——自定义代码集合
问题:
你想要在项目中使用非标准的代码目录。
解决方案:
在gradle的build配置里面使用sourceSets属性。
讨论:
Android分发的samples里面使用多个代码目录,使得通用的文件从主代码里面分离。
考虑一个武断的API23,叫做Basic Gesture Detect的例子,在input/BasicGestureDetext目录下找到。应用本身的细节不重要,可以看到Gradle build演示了代码集合的修改。
下面显示应用子目录的Gradle 配置文件,注意samples礼貌经常使用Application来代替app作为主要的子项目。
// The sample build uses multiple directories to // keep boilerplate and common code separate from // the main sample code.
List<String> dirs = [
'main', // main sample code; look here for the interesting stuff.
'common', // components that are reused by multiple samples
'template'] // boilerplate code that is generated by the sample template process
android {
// ... code omitted ...
sourceSets {
main {
dirs.each { dir ->
java.srcDirs "src/${dir}/java"
res.srcDirs "src/${dir}/res"
}
}
androidTest.setRoot('tests')
androidTest.java.srcDirs = ['tests/src']
}
}
配置文件定义了一个叫做dirs的List<String>来表示代码目录。Groovy支持一个原生的lists语法,使用方括号里面包含用逗号分隔的值。上面显示的值是main,common,template。
在android块下面,sourcesSets属性用来在classpath里面增加相关的代码目录。注意main块里面,Groovy的each提供给list里面每个入口一个闭包,如下:
dirs.each { dir ->
java.srcDirs "src/${dir}/java"
res.srcDirs "src/${dir}/res"
}
each方法来自于Groovy。它遍历collection的每个元素,将他们传递给闭包参数。这里的闭包给所有元素都贴上dir的标签,并且将它转化为Groovy的字符串。
标准的项目结构定义了一个默认的代码树src/main/java和一个资源树src/main/res。在这样的情况下,使用srcDirs属性将额外的目录添加到这些集合中。这样的结果就是目录src/main/java,src/common/java,src/template/java都被添加到编译的classpath里,src/main/res,src/common/res,src/template/res被认为是资源目录。
讽刺的是,这个sample里面没有任何额外的目录。所有java代码都在src/main/java下面,所有资源都在src/main/res下面。实际上,没有一个sample实际使用了定义的结构。他们都将java代码和资源文件限制到标准的目录下面。定义这样的结构是为了一些未来计划的事情,或者一些事情的延期,或者只是证明Google的android开发者的幽默。
有一部分sourceSets属性被使用。代替将所有的测试都放在事先定义好的src/androidTest/java目录下面,Gradle配置改变了位置,如下:

测试的根目录现在是tests文件夹,tests本身放在tests/srcs文件夹下面。每个sample项目在Application下面都有两个文件夹,src和tests。ActivityInstrumentation的基础项目布局包含了一个应用目录,如下:

就像你看到的,java代码在src/main/java下面,资源文件在src/main/res下面,测试在tests/src下面。
哪里可以使用sourceSet属性。在Android apps没有转到Gradle项目之前的项目使用了不同的项目结构。Android Studio可以导入那些app,但是会重写项目结构。
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.4——自定义代码集合的更多相关文章
- 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,这个 ...
随机推荐
- 【微信小程序】获取轮播图当前图片下标、滑动展示对应的位数、点击位数展示对应图片
业务需求: 3个图片轮番播放,可以左右滑动,点击指示点可以切换图片 index.wxml: 这里使用小程序提供的<swiper>组件autoplay:自动播放interval:自动切换时 ...
- SSL and SSL Certificates Explained
Secure Sockets Layer (SSL) and Transport Layer security (TLS ) are protocols that provide secure com ...
- 区分SQL Server关联查询之inner join,left join, right join, full outer join并图解
1.from A inner join B on A.ID=B.ID :两表都有的记录才列出 A表: ID Name B表: ID Clas ...
- php里面的编码问题
1 获取当前字符串的编码 $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312",& ...
- [k8s]kubectl windows配置(kubernetic) && kubectl config set-context使用Kubernetic
参考: https://feisky.gitbooks.io/kubernetes/components/kubectl.html https://kubernetes.io/docs/tasks/t ...
- 495. Implement Stack【easy】
Implement a stack. You can use any data structure inside a stack except stack itself to implement it ...
- poj 1182 食物链 并查集的又一个用法
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 41584 Accepted: 12090 Descripti ...
- win7系统如何配置JAVA环境变量
1.在“计算机”右击选择“属性” 2.点击“高级系统设置” 3.点击“环境变量” 4.点击系统变量下面的“新建” (1)新建->变量名:JAVA_HOME变量值 C:\Program Files ...
- 给input元素换样式
浏览器默认的<input type="file">真是巨丑无比,搜了很多之后知道原来是可以把这个设置成透明的! 不过这样比较麻烦,需要将input标签对应的区域设置成和 ...
- vim编码设置
转载于:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html vim 编码方式的设置和所有的流行文本编辑器一样,Vim 可以 ...