VirtualApk源码分析

  • 时间:
  • 浏览:1

广播的插件化指的是插件能不能 接受到内部内部结构的广播,即插件apk里的Receiver对象能不能 响应对应的广播。动态注册的广播指的是在插件apk中调用registerReceiver进行注册的广播,你這個场景不可能不能 进行一阵一阵处里。

PackageParser.parseBaseApplication

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

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

动态注册插件的广播

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

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

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

插件中静态注册的广播,VirtualApk处里的土最好的辦法 也很简单:将插件apk的AndroidManifest.xml中静态注册的Receiver通过动态registerReceiver注册到宿主Context中即可。

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

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