(三)Android 占位式/插桩式 插件化之 动态/静态`BroadcastReceiver`

1,182 阅读2分钟

源码 github.com/itang01/jia…

BroadcastReceiver静态广播接收者和动态广播接收者,在做 占位式/插桩式 插件化的时候,是有很大区别的。首先来看看:

动态广播接收者

动态广播接收者 插件化实现方式和前两篇 (一)Android 占位式/插桩式 插件化之Activity(二)Android 占位式/插桩式 插件化之Service 实现方式大同小异,具体可看上面的源码。难的是:

静态广播接收者

实现插件中的静态广播接收者的注册,需要了解Android应用加载和启动过程,对这一过程中的源码要十分了解,否则,没法玩~

解析流程

首先要知道 静态广播接收者 是在 AndroidManifest.xml 中配置的,插件没有运行环境,系统无法注册插件中静态广播接收者,要注册插件中的 静态广播接收者,就需要我们自己手动解析 AndroidManifest.xml 中配置的静态广播接收者 和 intent-filter,然后注册 静态广播接收者,最后,与Activity、Service 和 动态广播接收者 的实现套路一样,通过注册宿主app中的BroadcastReceiver代理,去监听插件中的广播。

关键点

反射系统源码,来解析apk 文件里的 所有信息,这里最终是获取到是 插件 AndroidManifest.xml 中配置的 静态广播接收者 的全类名,然后,通过反射,实例化广播接受者(其实是定义的接口标准

关键类

  • PackageParser(解析AndroidManifest.xml返回Package,Package 中包含了四大组件和权限等所有信息)