最近项目开发应用到VirtualXposed相关的技术方案,花了一点时间研究了下里面的基本实现原理,现记录一下。
该项目主要由两大核心功能:virtualapp 和 Xposed技术。
VirtualApp是一个App虚拟化引擎:
VirtualApp在你的App内创建一个虚拟空间,你可以在虚拟空间内任意的安装、启动和卸载APK,这一切都与外部隔离,如同一个沙盒。VirtualApp的多开机制,类似Android自身的多用户机制,一个app每一个用户的数据都不一致,并且能够同时运行。
app的apk只会保留一份,也就是多个用户使用同一个apk,但是data数据分开存放。
Xposed技术是Hook技术的一中解决方案。
Hook 的这个本领,使它能够将自身的代码「融入」被勾住(Hook)的程序的进程中,成为目标进程的一个部分。API Hook 技术是一种用于改变 API 执行结果的技术,能够将系统的 API 函数执行重定向。在 Android 系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行互不干扰。这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是 Hook 的出现给我们开拓了解决此类问题的道路。当然,根据 Hook 对象与 Hook 后处理的事件方式不同,Hook 还分为不同的种类,比如消息 Hook、API Hook 等。
使用 Java 反射实现 API Hook:通过对 Android 平台的虚拟机注入与 Java 反射的方式,来改变 Android 虚拟机调用函数的方式(ClassLoader),从而达到 Java 函数重定向的目的,这里我们将此类操作称为 Java API Hook。