[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest

大家好,我系苍王。

以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。

[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表


我们最开始开发需要了解的除了Activity,估计就是AndroidMainfest了。

但是当你使用组件化运用到你的工程的时候,你真的了解你的AndroidManifest组成吗?

我在第十二章Actvity页面跳转和第十五章Application组件化的时候有提到过AndroidManifest的变化,近来也有不少QQ群里的同学向我提到,AndroidMainfest的变化的独特性,我决定这里整理介绍一下。

以下都是以我的ModuleBus(https://github.com/cangwang/ModuleBus)的代码为例,有兴趣可以下载对着观看一下

一.注册Activity

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第1张图片

那么我们在最终合成的AndroidMainfest(地址是app/build/intermediates/manifests/full)里面将会看到

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第2张图片

这里可以带入隐式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中可以看到

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第3张图片

(2)如果我其他module再申请同样的权限呢?

这里告诉你们答案,最终的AndroidManifest会合并这个权限。所以相同的权限只会声明一次。

那么结合我们第十一节所介绍功能module可以从lib转为application开发,如果为了以后调试的方便,请把模块中所需要的权限声明一下,这样会避免不必要的权限遗漏问题。当然base module全部都会被依赖到,所以其声明的权限全部都会有的。

这个问题是QQ群内有同学提问6.0的权限提示封装在组件化应该如何做?在这里就是解答了。

四.主题

(1)Activity的主题,因为每个Activity应该都是独立声明的,所以每个Activity主题都应该会被承接到AndroidManifest里面。

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第4张图片

(2)Application的主题,将会设定为最终编入到AndroidManifest的那个自定义Application的android:theme里面。

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第5张图片

五.Service

Service也是能通过隐式来完成操作的。

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第6张图片

这是在最终的AndroidManifest里面,可以看到android:name都是    module包名+类名

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第7张图片

我们可以想象一下四大组件其启动声明规则都应该是一样的,那么最终合成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,也可以扫码进群。我在这里期待你们的加入!!!

[Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest_第8张图片

你可能感兴趣的:([Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest)