RePluginApplication.attachBaseContext
RePlugin.App.attachBaseContext
IPC.init -- 进程名,进程ID的保存等
PMF.init -- 重要流程
PmBase实例化 -- 主要是PluginProcessPer的实例化,负责初始化坑位
PmBase.init -- 这里两个进程的初始化做的工作不一样。GuardService读取plugins-builtin.json文件及扫描路径,构建plugins信息。主进程通过binder获取到GuardService进程中的plugins信息
PatchClassLoaderUtils.patch -- 反射替换application.mPackageInfo.mClassLoader为RePluginClassLoader,这也是唯一进行反射的地方
这里PmBase.init涉及到两个进程,GuardService进程初始化的时候扫描文件构造plugin信息,主进程通过ContentProvider得到cursor,进一步得到binder(也就是PmHostSvc)然后得到plugin信息。
有两点不太明白:1、为什么不用bindService?2、主进程通过binder查询信息的时候GuardService进程就一定初始化好了吗,怎么保证的,通过ContentProvider?
RePlugin.onCreate
...
PmBase.callAppCreate -- 1、