美文网首页程序员Android开发Android开发经验谈
VirtualApk源码分析-BroadcastReceiver

VirtualApk源码分析-BroadcastReceiver

作者: JasmineBen | 来源:发表于2018-05-19 00:44 被阅读0次

    广播的注册分为静态注册和动态注册两种,android关于广播的源码分析可以参照此文 :

    https://www.jianshu.com/writer#/notebooks/11066526/notes/28225946

    广播的插件化指的是插件能够接受到外部的广播,即插件apk里的Receiver对象能够响应对应的广播。动态注册的广播指的是在插件apk中调用registerReceiver进行注册的广播,这种场景不需要进行特别处理。

    插件中静态注册的广播,VirtualApk处理的方式也很简单:将插件apk的AndroidManifest.xml中静态注册的Receiver通过动态registerReceiver注册到宿主Context中即可。

    在加载插件Apk的时候通过PackageParser对Apk进行解析,生成LoadedPlugin对象,该对象内部有个 PackageParser.Package类型的变量mPackage,mPackager保存了插件apk的AndroidManifest.xml中注册的四大组件信息,通过读取mPackage里面的receivers,动态进行广播注册即可。代码如下:

    动态注册插件的广播

    mPackage.receivers在解析Apk的时候生成的,生成的主要代码如下:

    PackageParser.parseBaseApplication

    PackageParser.parseBaseApplication通过解析AndroidManifest.xml中的<receiver>标签,生产Receiver对象,parseActivity为生成静态广播对象的函数。

    获取到receivers之后,通过插件ClassLoader(DexClassLoader)就可以加载对应的Receiver对象,最后通过mHostContext.registerReceiver就可以对静态广播动态注册。

    至此,就完成静态广播的插件化。

    相关文章

      网友评论

        本文标题:VirtualApk源码分析-BroadcastReceiver

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