VirtualApk源码分析-BroadcastReceiver插件化

简介: 广播的注册分为静态注册和动态注册两种,android关于广播的源码分析可以参照此文 :https://www.jianshu.com/writer#/notebooks/11066526/notes/28225946广播的插件化指的是插件能够接受到外部的广播,即插件apk里的Receiver对象能够响应对应的广播。

广播的注册分为静态注册和动态注册两种,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,动态进行广播注册即可。代码如下:

img_0ba7795901db0c246bae1b76fdd4e2b3.png
动态注册插件的广播

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

img_2573d11e5c3a19f15eea5d340d5cc4cb.png
PackageParser.parseBaseApplication

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

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

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

目录
相关文章
|
Java Android开发 开发者
【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理 )(一)
【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理 )(一)
151 0
|
存储 Java Android开发
【Android 插件化】插件化原理 ( 类加载器 )
【Android 插件化】插件化原理 ( 类加载器 )
177 0
【Android 插件化】插件化原理 ( 类加载器 )
|
文件存储 Android开发
学习笔记:插件化Activity
学习笔记:插件化Activity
151 0
|
Java Android开发 开发者
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取 IActivityManager 对象 )(一)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取 IActivityManager 对象 )(一)
600 0
|
Android开发
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取 IActivityManager 对象 )(二)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取 IActivityManager 对象 )(二)
330 0
|
Android开发
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )(二)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )(二)
154 0
|
Android开发 开发者
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )(三)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )(三)
143 0
|
Android开发 开发者
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
198 0
|
Android开发
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )(一)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )(一)
154 0
|
Android开发
【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 )(二)
【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 )(二)
176 0