四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式:
反射实现 (反射实现会对性能有所影响,主流的插件化框架没有采用此方式)
接口实现
Hook技术实现
关于接口实现可以阅读dynamic-load-apk的源码。
Hook技术实现主要有两种解决方案:
通过Hook IActivityManager来实现,
Hook Instrumentation实现
Activity的启动过程主要分为两种:
根Activity的启动过程
首先Launcher进程向AMS请求创建根Activity,AMS会判断根Activity所需的应用程序进程是否存在并启动,如果不存在就会请求Zygote进程创建应用程序进程。应用程序进程启动后,AMS会请求应用程序进程创建并启动根Activity。

普通Activity的启动过程
在应用程序进程中的Activity向AMS请求创建普通Activity(步骤1),AMS会对 这个Activty的生命周期和栈进行管理,校验Activity等等。如果Activity满足AMS的校验,AMS就会请求应用程序进程中的ActivityThread去创建并启动普通Activity
我们在startActivity之后系统最终会调用 Instrumentation 的 execStartActivity 方法,然后再通过 ActivityManagerProxy 与 AMS 进行交互。

VirtualAPK 大致方案如下:
Activity:在宿主 Apk 中提前占坑,然后通过 Hook Activity 的启动过程,“欺上瞒下”启动插件 Apk 中的 Activity,因为 Activity 存在不同的 LaunchMode 以及一些特殊的熟悉,所以需要多个占坑的“李鬼” Activity。
Service:通过代理 Service 的方式去分发;主进程和其他进程,VirtualAPK 使用了两个代理Service。
BroadcastReceiver:静态转动态。
ContentProvider:通过一个代理Provider进行分发。