一:模块
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 原理: 核心思想可以总结为两个字:代理。通过在 Manifest 中注册代理组件,当启动插件组件时首先启动一个代理组件,然后通过这个代理组件来构建、启动插件组件。
总体原理图
(1) 首先通过 DLPluginManager 的 loadApk 函数加载插件,这步每个插件只需调用一次。
流程解析:
(2) 通过 DLPluginManager 的 startPluginActivity 函数启动代理 Activity。
(3) 代理 Activity 启动过程中构建、启动插件 Activity。