从很早以前就一直很好奇 VirtualApp 的相关技术,但是一直抽不出时间。正巧最近想试着自己照猫画虎开发一个类似的容器化应用,并做一些定制化的需求,因此抽空把整个项目过了一遍,也正好帮我整理一遍过去一直对整个 Android 系统较为模糊的认知。
以下是本系列的速览规划:
- VirtualApp 原理速览 - 框架体系概述
- Activity 启动流程 - 我想我们需要先清楚正常的应用是如何启动的
- 容器内 APP 启动流程 - 四大组件 Activity 是如何实现的
- 容器内 Service 启动流程 - 四大组件 Service 是如何实现的
- Broadcast Receiver 容器内实现 - 四大组件 Broadcast Receiver 是如何实现的
- Content Provider 容器内实现 - 四大组件 Content Provider 是如何实现的
- 路径重定向和 Xposed 注入时机分析 - 容器内应用的数据访问如何正常进行以及 Xposed 是如何被注入的
VA 框架对应用的操作涉及三个层面:
- Java
- Framework
- Native 技术只在应用层进行,因此无需 root 。一言蔽之,欺骗系统让系统以为应用已安装,同时也欺骗应用,让应用以为自己被安装。
考虑到现有开源的 VirtualApp 只支持老版本 Android,因此选择原理相同的 blackbox 进行参考 仓库地址:https://github.com/Monster-GM/sandbox
项目代码分为两个模块:
- app模块:用户操作与UI模块
- Bcore模块:此模块为秘盒空间的核心模块,负责完成整个应用的调度
- src/main:VirtualApp框架代码
- pine:Hook框架
- 其他
本系列文章会主要关心其中的 VirtualApp 框架实现部分。


