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怎样禁用整个布局点击,Android - 自动禁用布局里的所有子控件

很久没有写博客了,今天给大家分享一个刚写好的小功能,很实用。使用场景:禁用布局里所有的子控件,让界面只能看,但不能编辑,如果一个一个控件去设置肯定是很麻烦的,于是想了个好方法。可根据需要…

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…

android6.0 sd卡卸载api,android6.0 用户关掉sd卡读取权限的情况下, 还能做到手机缓存么?...

兄弟,你理解错了。可以看看官方文档。Android的储存空间分两块:Internal storage和External storageInternal storage总是可用的,不需要额外权限,这里的文件默认只能被我们的app所访问。可以通过Context下的getFilesDir()方法获取…

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

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

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

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

html中选择省份城市,省份、城市、区县三级联动Html代码

$(function(){function objInit(obj){return $(obj).html("请选择");}var arrData {江西省:{宜春市: "袁州区,万载县",品牌1_2: "型号1_2_1,型号1_2_2"},湖南省:{邵阳市: "邵阳县,型号2_1_2",品牌2_2: "型号2_2_1,型号2_2_2&quo…

html怎么连接外部音乐,mp3音乐外链接-怎么样连接外部音乐 爱问知识人

升级后的新浪播放器非常方便实用,解决了多年来困扰新浪博客难弄背景音乐的尴尬,成为2008新浪博客的亮点。升级后的新浪播放器具有以下特点:大容量:可供创建50个音乐专辑,每个专辑可添加100首歌曲;高品质&am…

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

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

苏大微型计算机原理与应用题库,苏州大学计算机原理及应用考研复习题.pdf

苏州大学计算机原理及应用考研复习题.pdf专业课复习资料(最新版)专业课复习资料(最新版) 封封 面面 复习题 1复习题 1 判断指令是否正确判断指令是否正确 1. MOV AH,BX(F) 2. INCAL(T) 3. MOV DS,BP(F) 4. XCHG AX, 1000H(F) 5. POPAL(T) 6.MOVAL,10H(T) 7.NOTCX,AX(F) 8.PUSHA…

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

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

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

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

html5 web storage攻击,HTML5安全风险详析之二:Web Storage攻击

**一、WebStorage简介**HTML5支持WebStorage,开发者可以为应用创建本地存储,存储一些有用的信息。例如LocalStorage可以长期存储,而且存放空间很大,一般是5M,极大的解决了之前只能用Cookie来存储数据的容量小、存取不便…

win7网络看不到win10计算机,网络共享中win7能找到win10,但win10找不到win7

您好,了解到您在使用Windows10出现的问题。您可以尝试以下方案进行操作,看看是否有效果:“WinR”>>键入:regedit依次展开“[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters] ”项&…

centos写mysql光标移到上一行_python操作mysql——使用pymysql库

pymysql是python3连接mysql操作的库,在python2中使用的是mysqldb1.基础操作创建连接import pymysqldb_conn pymysql.connect(host"你的数据库地址",user"用户名",port3306,password"密码",database"数据库名",charset&quo…

大连工业大学艺术学院计算机考试,大连工业大学艺术与信息工程学院应用科技学院...

大连工业大学艺术与信息工程学院是经中华人民共和国教育部批准,于2002年6月正式成立的普通高等学校独立学院。学院新校区位于大连庄河市,毗邻空气清新的国家4A级冰峪旅游度假风景区、人间仙境海王九岛、天门山风景区、步云山温泉度假区等著名旅游名胜&am…

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

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

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

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

医院计算机科室简介,信息中心

一、在院领导的领导下,协助医院和各相关科室进行医院信息化规划及其相关信息系统的实施,做好需求辅助分析、技术选型和调研工作。二、在院领导的领导下,全面负责信息科的日程行政管理工作,并做好计算机应用方面的对外交流工作。三…

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

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