android studio开源代码,Android Studio Set of source 代码源集

一、源集

1、定义:Android Studio 按逻辑关系将每个模块的源代码和资源进行分组,这个分组叫做源集。

2、main Module 源集包括其所有构建变体共用的代码和资源。这句话很关键,意思是,所有的其他构建变体,src/main是其共同拥有的。在说明BuildType时,我们会通过案例代码进行介绍。

3、其他源集目录为可选项,在您配置新的构建变体时,Android Studio 不会自动为您创建这些目录,用户可以通过File > New 菜单选项新建文件或目录,进行特定源集进行创建。

源集按照构建类别(buildType)、产品倾向(productFlavor)等,分为以下几个类型:

源集

备注

src/main/

此源集包括所有构建变体共用的代码和资源。

src//

创建此源集可加入特定构建类型专用的代码和资源。

src//

创建此源集可加入特定产品风味专用的代码和资源。

src//

创建此源集可加入特定构建变体专用的代码和资源。

例如,要生成应用的“完整调试”版本,构建系统需要合并来自以下源集的代码、设置和资源:

src/fullDebug/(构建变体源集)

src/debug/(构建类型源集)

src/full/(产品风味源集)

src/main/(主源集)

4、源集的Overlay机制。如果不同源集包含同一文件的不同版本,Gradle 将按以下优先顺序决定使用哪一个文件(左侧源集替换右侧源集的文件和设置):

构建变体 > 构建类型[BuildType] > 产品风味[ProductFlavor] > 主源集[main] > 库依赖项

在合并多个清单时,Gradle 会使用专用于试图构建的资源进行编译,这些文件包括:构建变体的文件,其他应用版本共用的 Activity、应用逻辑和资源,从而达到不同的构建,编译不同的资源的目的。

二、源集的创建

Gradle 会按照与 main/ 源集类似的特定组织形式来管理源集文件和目录。例如,Gradle 要求您的“调试”构建类型所特定的 Java 类文件位于 src/debug/java/ 目录中。

以debug为例,源集构建会有如下几种方式:

方式一:

1、打开 Project 窗格并从窗格顶端的下拉菜单中选择 Project 视图。

2、导航至 MyProject/app/src/。

3、右键点击 src 目录并选择 New > Folder > Java Folder。

4、从 Target Source Set 旁边的下拉菜单中,选择 debug。

5、点击 Finish。

方式二:

1、在相同的 Project 窗格中,右键点击 src 目录并选择 New > XML > Values XML File。

2、为 XML 文件输入名称或保留默认名称。

3、从 Target Source Set 旁边的下拉菜单中,选择 debug。

4、点击 Finish。

a8870dccda1f

Target Source Set

以上两种方式,都可以创建源集,源集成功创建后,工程展示如下:

a8870dccda1f

三、源集的重定向

可以通过sourceSets {}来设定Gradle module对应的源集路径。

Android SourceSet表示Java,aidl和RenderScript源以及Android和非Android(Java风格)资源的逻辑组。

3.1、属性

属性

描述

aidl

Android AIDL源目录为此源设置。

assets

该资源集的Android Assets目录。

compileConfigurationName

该源集合的编译配置的名称。

java

Java源代码由Java编译器编译到类输出目录中。

jni

这个源码集的Android JNI源目录。

jniLibs

这个源码集的Android JNI libs目录。

manifest

该源代码集的Android Manifest文件。

name

这个源集的名称。

packageConfigurationName

此源集合的运行时配置的名称。

providedConfigurationName

此源集合的仅编译配置的名称。

renderscript

该源码集的Android RenderScript源目录。

res

该资源集的Android资源目录。

resources

要复制到javaResources输出目录的Java资源。

3.2、方法

方法

描述

setRoot(path)

将源集的根设置为给定的路径。源集合的所有条目都位于此根目录下。

更多属性以及方法详情,请参与官方文档

案例配置: 配置app/other/目录中的源映射到 main源集的某些组件,并更改 androidTest 源集的根目录。

android {

...

sourceSets {

// main源集(source set)的闭包配置。

main {

// 变更Java 的源文件夹,默认的文件夹 = 'src/main/java'.

java.srcDirs = ['other/java']

//如果像以下方式一样,列出来多个文件夹,那么Gradle使用所有的这些文件夹来加载资源,

//并赋予这些文件夹相同的优先级。如果不同的文件夹中定义了相同的资源,那么会产生资源合并错误。

//默认的资源文件夹是 'src/main/res'.

res.srcDirs = ['other/res1', 'other/res2']

//避免多个文件夹出现“父子”依赖关系。例如:如下情况要避免:

//res.srcDirs = ['other/res1', 'other/res1/layouts', 'other/res1/strings']

//应该只指定:'other/res1'或者指定'other/res1/layouts' and 'other/res1/strings'

//每个源集只能有一个AndroidManifest.xml清单文件,

//默认情况下,main源集的清单文件在src/main/ 目录中。

manifest.srcFile 'other/AndroidManifest.xml'

...

}

// 创建额外闭包块区配置其他源集

androidTest {

// 如果所有的源集文件都在一个单独的目录中,可以使用setRoot来进行配置。

// 这样子,Gradle就只会加载该区域。例如:如下配置,Gradle只会从src/tests/java/

// 来获取源集文件。

setRoot 'src/tests'

...

}

}

}

...

四、源集的使用

在使用源集进行编译的时候,要特别注意资源合并的优先级的问题。上面也提到了,优先级如下:

构建变体 > 构建类型[BuildType] > 产品风味[ProductFlavor] > 主源集[main] > 库依赖项

详细说明如下:

Java文件。如果找到两个或两个以上定义相同Java 类名的源集目录,那么Gradle 就会引发一个构建错误。

例如,在构建调试 APK 时,同时定义 src/debug/Utility.java 和 src/main/Utility.java,会发生编译错误。 这是因为Gradle 在构建中检查这两个目录并引发了“duplicate class”错误。

清单合并为单个清单。在合并清单时,将按照上述列表中的顺序指定优先级。也就是说,某个构建类型的清单设置会替换某个产品风味的清单设置,依此类推。

value资源。values/ 目录中的文件也会合并在一起。如果两个文件同名,例如存在两个 strings.xml 文件,将按照上述列表中的相同顺序指定优先级。也就是说,某个源集文件中定义的值将会替换产品风味中同一文件中定义的值,依此类推。

res/ 和 asset/ 目录中的资源将打包到一起。如果两个或两个以上的源- 集中定义有同名资源,将按照上述列表中的相同顺序指定优先级。

最后,在构建 APK 时,Gradle 会为随库模块依赖项包含的资源和清单分配最低的优先级。

写作不易,耗费心力,如果上面的内容对你有帮助,请随意打赏,让我们坚持下去~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android nougat和安卓7.1,Android Nougat 7.1.2 先睹为快

Android Nougat 的下一个维护版本 7.1.2 即将发布!为了让广大开发者有机会抢先尝鲜,我们从今天开始向已注册 Android Beta 计划、符合条件的设备(包括 Pixel 和 Pixel XL、Nexus 5X、Nexus Player 和 Pixel C 设备)推出公众测试版本。我们还在准备 Nexus…

android app 移植到pc,微软开发新应用把Android app“移植”到Win Phone

依据微软2010年公布在Tweet上的一份专利申请书,微软正在开发一种新服务能够在不同的手机操作系统中“移植”应用和应用数据。这是说Android,iOS应用以后可以跨平台“移植”到 Win Phone Win8系统上?因为Win Phone 著名的“应用问题”&#xf…

鸿蒙系统能否推广,鸿蒙系统凭实力占市场,无需通过禁止安卓系统来推广

有人提议中国应该全面禁用安卓系统,以推广鸿蒙系统(HarmonyOS),甚至还给出了比如安全等理由。确实有这个必要吗?答案是否定的。一、安卓系统是开源系统,不存在被谷歌完全操控而影响到中国安全的问题。实际上安卓系统诸如碎片化、应…

android ut接口介绍,CMCC UT接口(IMS SS)规范说明

OverviewCMCC 关于 UT 部分的说明及规范请参考 "中国移动VoLTE终端技术规范" 中的第6节说明.写在前面: 由于 CMCC 的XCAP server(UT) 和 CS Server(HLR)暂不支持 SS 业务配置SYNC. 因此, 针对支持 UT 的卡, 以及所在城市提供 UT 服务, 则如果某项 SS 业务不支持通过 …

五年级信息技术上册教案计算机主机探秘,第1课信息与信息技术探秘教案

第1课信息与信息技术探秘教案[教学目标]1、知识与技能(1)了解什么是信息、信息传递和信息处理的基本知识。(2)了解信息技术及其应用、发展的基本情况。(3)了解计算机在信息处理中的作用和地位。2、过程与方法以直观的手段让学生初步了解信息和信息技术。…

pc端html轮播带滑块,swiper.js简单快速实现轮播滑动(兼容PC端、移动端)

swiper是一款免费以及轻量级轮播滑动的js框架,适用于PC端跟移动端,官方地址:(https://www.swiper.com.cn/)效果演示:PC端移动端(在浏览器将设备切换为手机,这里切换为iphone),swiper支持移动端触控左右滑动…

html木桶布局,木桶布局 实现

百度图片图片来自 百度图片像这样高度一样,而宽度不同的布局方式称之为木桶布局。它有几个鲜明的特点: 每行的图片高度一致;每行的图片都是占满的。如何实现木桶布局 之 整体思路我们需要先拥有一些素材(图片), 并且将这些图片横向…

如何自己塑封_全球市场三足鼎立,国内半导体封测业如何实现可持续发展?

由于全球半导体市场规模不断增长,终端电子产品需求旺盛,国内半导体封装测试产业迎来了良好的发展机遇。国内半导体封装测试产业如何实现高质量、可持续发展?一时间,半导体封装测试产业再起热议。全球封装测试市场三足鼎立我国半导体封装测试…

博途中用的是c吗_一只“66 鸭”离奇出走,只为助蛋宝宝C位出道

作者 | 欧阳睿 来源 | 4A广告文案对于喜爱蛋黄酥的粉丝来说,一定知道轩妈蛋黄酥,这个在南宁土生土长的蛋黄酥品牌,2015年公司才刚刚成立,如今已坐拥超高人气和口碑,成长为全网类目的TOP1,就连李佳琦也强…

尼奥机器人不能手机绑定_微信绑定的手机号,如果手机号停用,是不是微信也不能用了?...

风水转运算命师未卜先知、指点迷津,助你顺风顺水!商务合作qq:2770794800如果小编现在问你?你在干什么?那么是不是很多人都会说:当然是在刷手机了!我们现在生活中最经常使用的就是手机了&#xf…

吸顶那个叫什么_为什么我家吸顶灯开灯后一闪一闪的

前不久,笔者看到网络上有网友在问:为什么我家的吸顶灯开灯后一闪一闪的,关灯后闪一会才会灭!对于这个问题,笔者发现有好多网友在问。我们给出的方法和原则就是:哪里里坏了换哪里! 那么&#xff…

计算机声卡怎么启动不了,三大方法助你解决声卡故障问题!

电脑声卡坏了怎么办?可能大家平时会碰到这个问题,别紧张,电脑声卡故障的原因无非就是那么几个,下面让小编带大家一起分析分析电脑声卡故障的原因以及处理办法。造成电脑声卡故障的原因主要有三种,一是相关服务未开启,…

我的世界服务器自定义欢迎界面,我的世界启动界面如何修改 diy修改启动界面攻略...

来源:网络我的世界怎么修改界面描述如何修改描述,是不是很多小伙伴们都不了解呢?今天Minecraft中文分享站小编就来给大家介绍一下,还不是很清楚相关内容的小伙伴抓紧了,希望这篇攻略对大家有帮助~!我的世界…

腾讯云服务器数据盘买多了,腾讯云Windows云服务器数据盘分区和格式化

Windows2008_64位系统手动格式化小于2TB数据盘操作指引新购买的Windows云服务器,数据盘未做分区和格式化,无法使用。请根据以下步骤手动对数据盘进行分区以及格式化。暂不支持对Windows云服务器进行自动格式化。1. 进入数据盘分区界面登录Windows云服务器…

dataset的去重计数 g2_向工程渣土运输车辆计数 漏洞损失说“不”

基建越来越扩张的今天,很多工地还在人工计数管理,漏洞巨大,不远改变思维,总觉得损失一点也没有什么,现在开始逐渐推行智慧工地渣土运输管理,没有跟上步伐的,迟早会被被市场和“甲方爸爸”抛弃&a…

服务器虚拟化底层系统安装,Hyper-V是底层的虚拟机程序,位于操作系统和硬件之间,很薄一层...

今天介绍Hyper-V是底层的虚拟机程序,Windows server 2008 R2如何启动Hyper-V虚拟机。小伙伴们可能不一定了解,Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似VMWare和Citrix Xen一样的基于Hypervisor的技术。通过Hyper-V功能&#xff0…

显示三维图片序列_SLAM结合三维检测

11.11---11.17​ 在此前一周进行yolo与cube slam整合的时候,采用ros通信的方式。存在两个问题:一个是darknet检测不到目标,就不对外发布检测结果,会造成检测结果和图片序列对不上。另一个问题是图片发布给darknet和cube slam的时间…

cc穿盾并发脚本_敢不敢模拟超过 5 万的并发用户?

阅读本文大概需要 6 分钟。来自:http://t.cn/ES7KBkW本文将从负载测试的角度,描述了做一次流畅的 5 万用户并发测试需要做的事情。你可以在本文的结尾部分看到讨论的记录。快速的步骤概要:编写你的脚本使用 JMeter 进行本地测试BlazeMeter 沙…

tomcat上传文件到不同服务器,使用SpringMVC进行跨服务器上传文件出现的那些坑

[1] 405 Method Not Allowed原因是因为Servlet默认是只读的,也就是写不进去(文件上传不过来)所以要在文件服务器的 web.xml 对 Servlet 进行配置defaultServletorg.apache.catalina.servlets.DefaultServletdebug0readonlyfalselistingsfalse1defaultServlet/这里可…

confluence添加用户_玩转Confluence插件开发插件模块配置文件介绍(04)

上一章节我们介绍了测试模块的配置文件,这一章节我们介绍插件本身的配置文件,这个是我们部署插件真正用到的. 文件的位置位于项目主目录中的/src/main/resources目录中.插件配置文件介绍插件描述文件的根元素<atlassian-plugin key"${project.groupId}.${project.artif…