美文网首页gradle
组件化架构笔记(第一章)

组件化架构笔记(第一章)

作者: 风月寒 | 来源:发表于2021-09-01 20:08 被阅读0次
AndroidManifest.xml

每个module都有一份AndroidManifest来记载其信息,最终生成app的时候,将多个AndroidManifest合并成一个总的,路径为:app/build/intermediates/manifests/full/debug/AndroidManifest.xml。

合并的规则如下:

1 注册Activity

在单module中,name属性可以采用缩进的方式,但是在合并后,name属性则以包名加属性名显示,不这样的话,编译打包的时候会找不到每个文件的具体位置。

2、注册Application

(1)如果功能module有Application,主module没有自定义的Application,这时会引用功能module的Application.

(2)如果主module有自定义的Application,功能module没有Application,则直接引入主module的Application.

(3)如果功能module中 有两个自定义的Application,在解决冲突之后,Application最终会载入最终编译后的module的Application.

(4)如果主module中有自定义的Application,其他功能module也有自定义的Application,在解决冲突之后,最后编译的主module的Application会在AndroidManifest中。

3、权限申明

相同点权限只会被声明一次,所以可以把声明权限全部放在Base module中。

4、主题声明

Activity的每个主题都是独立的,每个Activity的主题都会引用自身的module的AndroidManifest所声明的主题。

5、shareUid

通过声明Share User Id,拥有同一个User id的多个App可以配置成运行在同一个进程中,所以默认可以互相访问任意数据。

只有在主module中声明shareUid,才会最终打包到 full AndroidManifest中,如果只是在功能module中声明,并不会放在最终的AndroidManifest中。

合并冲突的规则

如果不指定uses-sdk,默认的minSdkVersion和targetSdkVersion值为1,当发生冲突时将使用高优先级的值。若不指定targetSdkVersion,其值等于targetSdkVersion

当library工程的minSdkVersion比主工程src/main中的minSdkVersion低时会产生冲突,此时需要添加overLibrary标记解决冲突

当library工程的targetSdkVersion比主工程src/main中的大时,合并过程会增加一些权限保证library工程能正常运行

每个Manifest文件只和其子Manifest文件的属性合并

<intent-filter>的合并规则是叠加而不是覆盖

合并冲突标记

merge

默认合并操作。

replace

高优先级替换低优先级Manifest文件中的属性

strict

属性相同而值不同时会报错,除非通过冲突规则resolved

merge-only

仅合并低优先级的属性

remove

移除指定的低优先级的属性

remove-All

移除相同节点类型下所有低优先级的属性

相关文章

网友评论

    本文标题:组件化架构笔记(第一章)

    本文链接:https://www.haomeiwen.com/subject/whrfwltx.html