大家好,我系苍王。
以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。
[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表
我们最开始开发需要了解的除了Activity,估计就是AndroidMainfest了。
但是当你使用组件化运用到你的工程的时候,你真的了解你的AndroidManifest组成吗?
我在第十二章Actvity页面跳转和第十五章Application组件化的时候有提到过AndroidManifest的变化,近来也有不少QQ群里的同学向我提到,AndroidMainfest的变化的独特性,我决定这里整理介绍一下。
以下都是以我的ModuleBus(https://github.com/cangwang/ModuleBus)的代码为例,有兴趣可以下载对着观看一下
一.注册Activity
那么我们在最终合成的AndroidMainfest(地址是app/build/intermediates/manifests/full)里面将会看到
这里可以带入隐式intent启动,具体请看第十二节的页面跳转
二.注册Application
这里App只允许存在着一个Application。
(1)如果某个功能module有Application,主module木有自定义Application,这时候会自然引用功能module的Application
(2)如果主module有自定义Application,其他module木有,自动引入主module的
(3)如果功能module中有两个自定义Application,那么需要解决冲突后,你会发现,Application最终会载入的后编译的module的Application
(4)如果主module中有自定义Application,其他功能module也有自定义Application,在解决冲突后,你会发现最后编译的主module的Application会在AndroidManifest里面
这个可以查看我第十六节的组件化Application
三.权限相关
(1)如果有在一个功能module中声明权限
那么在主module中可以看到
(2)如果我其他module再申请同样的权限呢?
这里告诉你们答案,最终的AndroidManifest会合并这个权限。所以相同的权限只会声明一次。
那么结合我们第十一节所介绍功能module可以从lib转为application开发,如果为了以后调试的方便,请把模块中所需要的权限声明一下,这样会避免不必要的权限遗漏问题。当然base module全部都会被依赖到,所以其声明的权限全部都会有的。
这个问题是QQ群内有同学提问6.0的权限提示封装在组件化应该如何做?在这里就是解答了。
四.主题
(1)Activity的主题,因为每个Activity应该都是独立声明的,所以每个Activity主题都应该会被承接到AndroidManifest里面。
(2)Application的主题,将会设定为最终编入到AndroidManifest的那个自定义Application的android:theme里面。
五.Service
Service也是能通过隐式来完成操作的。
这是在最终的AndroidManifest里面,可以看到android:name都是 module包名+类名
我们可以想象一下四大组件其启动声明规则都应该是一样的,那么最终合成AndroidManifest里都用这样的方式module包名+类名区分每个module的四大组件,其里面的相关属性都会完全转移到最终合成的AndroidManifest里面。那么broadcast和contentProvider猜想应该也是一样的。
六.sharedUid
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据。
(1)如果我们只是在功能module中声明sharedUid,那么最终的AndroidManifest会如何呢?
其不会降这个功能module的sharedUid放到最终的AndroidManifest中。
(2)经过试验,只有在主module(生成app的module)声明sharedUid,才会最终打包到full AndroidManifest中。
可以简单推断出,manifest里面声明的属性,full AndroidManifest只会将主module里面的属性合成到里面
这一节介绍就到这里,
下一节将会更精彩,敬请期待!!!
群号是316556016,也可以扫码进群。我在这里期待你们的加入!!!