VirtualApp原理解析(2)–后台服务初始化流程
VirtualApp后台服务进程运行BinderProvider,其继承自ContentProvider。后台服务主要类:VAppMS,VAMS,VPMS等。
主要功能:数据结构组建状态保存、模拟系统API的实现、预处理等。
以下是VirtualApp的后台服务初始化流程图:
1.后台服务初始化在SplashActivity启动之后进行的。
- 在SplashActivity的onCreate中通过一系列构造ProviderCall及最终调用到ContentResolver.call()跨进程访问BinderProvider。
2.访问到后台服务BinderProvider中。
如果BinderProvider没有创建则执行创建之后执行onCreate方法。在onCreate中首先启动一个DemonService提升其所在进程的优先级。
接着会依次初始化VPMS并将起添加到ServiceCache中的Binder的
Map<String, IBinder> sCache
中:- 初始化VPMS有两个步骤,首先创建VPMS实例对象,接着新建VUMS传入前面的实例。
初始化VAMS添加到sCache:
- 首先创建VAMS实例回调其中的onCreate,在该方法中获取该VAPP下的组建信息保存。
初始化VAPPMS,该服务主要用于将双开目标应用安装到VirtualApp中。
- 创建VAPPMS实例,从配置文件中读取一个已经安装应用的UID列表保存到map中。
之后还会初始化诸如:VJobSchedulerService、VAccountManagerSService等与系统对应的服务。
将上述服务初始化成功后添加到sCache中等待客户端进程调用。
执行玩onCreate接着调用call函数因为不满足执行条件不分析。这里的call方法其实是返回一个集合了所有后台服务Binder的一个对象。客户端进程调用可以获取所有需要的后台服务Binder进而调用相应方法。
3.初始化完成后台服务之后由SplashActivity跳转到HomeActivity。
简单总结:
主要是创建初始化BinderProvider及其他系统服务,保存这些系统服务到map便于查找。
BinderProvider的call方法向客户端提供IBinder对象可以跨进程获取之前初始化的各项系统服务。