DynamicLoadApk 源码简单解析

一:模块

DynamicLoadApk 主要分为四大模块:
(1) DLPluginManager : 插件管理模块,负责插件的加载、管理以及启动插件组件。
(2) Proxy:代理组件模块,目前包括 DLProxyActivity(代理Activity)、DLProxyFragmentActivity(代理 FragmentActivity)、DLProxyService(代理 Service)
(3) Proxy Impl:代理组件公用逻辑模块,与(2)中的 Proxy 不同的是,这部分并不是一个组件,而是负责构建、加载插件组件 的管理器。这些 Proxy Impl 通过反射得到插件组件,然后将插件与 Proxy 组件建立关联,最后调用插件组件的 onCreate 函数进行启动。
(4) Base Plugin:插件组件的基类模块,目前包括 DLBasePluginActivity(插件 Activity 的基类)、DLBasePluginFragmentActivity(插件 FragmentActivity 的基类)、DLBasePluginService(插件 Service 的基类)。

DynamicLoadApk 源码简单解析_第1张图片
DynamicLoadApk

二:原理

DynamicLoadApk 原理: 核心思想可以总结为两个字:代理。通过在 Manifest 中注册代理组件,当启动插件组件时首先启动一个代理组件,然后通过这个代理组件来构建、启动插件组件。
总体原理图

DynamicLoadApk 源码简单解析_第2张图片
加载插件并启动代理组件

(1) 首先通过 DLPluginManager 的 loadApk 函数加载插件,这步每个插件只需调用一次。
流程解析:
DynamicLoadApk 源码简单解析_第3张图片
loadApk流程

(2) 通过 DLPluginManager 的 startPluginActivity 函数启动代理 Activity。

DynamicLoadApk 源码简单解析_第4张图片
startPluginActivity启动代理组件流程

(3) 代理 Activity 启动过程中构建、启动插件 Activity。

DynamicLoadApk 源码简单解析_第5张图片
构建,启动插件组件流程

你可能感兴趣的:(DynamicLoadApk 源码简单解析)