VirtualApp原理解析(2)--后台服务初始化流程

原文地址:https://blog.****.net/leif_/article/details/72763991

VirtualApp原理解析(2)–后台服务初始化流程

VirtualApp后台服务进程运行BinderProvider,其继承自ContentProvider。后台服务主要类:VAppMS,VAMS,VPMS等。

主要功能:数据结构组建状态保存、模拟系统API的实现、预处理等。

以下是VirtualApp的后台服务初始化流程图:

VirtualApp原理解析(2)--后台服务初始化流程

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对象可以跨进程获取之前初始化的各项系统服务。

    VirtualApp原理解析(2)–后台服务初始化流程