LBE平行空间的技术实现


利益相关:本人是LBE员工,Parallel Space平行空间的名字就是我起的:)


前面有同学对LBE平行空间的原理做了一些推测和分析,有些正确,有些不完整,我再做些补充


LBE平行空间和市面上的其他应用双开app有本质区别,其他方案是通过改包名、改Framework等非常粗糙的方式达到目的,而LBE平行空间的底层是一个完整的虚拟化引擎:MultiDroid


更准确的说,MultiDroid并不是硬件虚拟化或OS虚拟化 (譬如VMware, Xen, KVM),它也不是应用层虚拟化(譬如XenApp, Wine),MultiDroid更类似容器(Container),譬如Docker


MultiDroid的关键技术有:


1. Framework层的虚拟实现


在Android环境中,每个应用在运行时都需要和Android framework打交道。Android系统的System-Server进程提供了大部分的系统API。 应用程序通过Binder IPC调用系统API。LBE之前在安全大师产品中,也就是通过对System-Server的hook来实现主动防御和权限管理,但MultiDroid在设计之初的一个最重要的目标就是不需要root权限,从而不能通过hook的方式来实现虚拟化。为此,我们需要自行实现一套完整的System-Server API,这就是MultiDroid的核心,工作量非常大,更麻烦的是,我们的设计目标是支持所有Android 4.0以上版本,而每个版本的Framework实现又千差万别……


2. 文件系统虚拟化


程序在运行的时候,会加载文件系统上的程序指令和程序数据。要建立虚拟的应用程序运行环境,需要模拟一个独立的文件系统,在这个独立的文件系统中,再针对不同的虚拟应用的主目录进行区分和权限控制

3. Android系统组件管理


一个Android应用基本上是由Android四大组件(Activity, Service, Broadcast Receiver,Content Provider)构成。在Android环境中,System-Server和应用通过进程间通信交互,Android系统负责了四大组件的管理,包括创建,激活,销毁等。MultiDroid引擎实现了一套Android组件管理系统,用来模拟系统对Android组件的管理。每个运行在虚拟环境中的应用,会把自己的组件注册给MultiDroid引擎,由MultiDroid引擎负责各个组件的生命周期维护


4. 应用进程管理


Android本身在应用和进程之间做了隔离,应用几乎不需要感知进程的存在,只需要关注应用自身的四大组件。但是应用本身还是需要在Dalvik进程中运行。虚拟环境中的进程仍然是一个Dalvik进程, MultiDroid引擎负责了虚拟应用进程的创建,进程ID的分配,进程的销毁等


MultiDroid的未来发展:


目前的MultiDroid引擎已经相当完善,可以很好的运行市面上的绝大部分App,而且在耗电和内存使用上都做了非常多的优化,但这只是起步,我们期望下一版的MultiDroid引擎将会从某种程度上改变Android本身的生态环境和使用体验,譬如支持整个虚拟环境的快照和恢复,发烧友就不用为了尝试各种新鲜玩法而反复刷机了,当然,还有虚拟环境内应用数据的云备份,类似iCloud,虽然有Android厂商也支持类似功能,但跨厂商的设备同步目前还没有;再譬如代码动态优化,虽然目前的MultiDroid引擎并没有性能问题,但我们希望可以借鉴ART的做法,通过在虚拟环境中的代码预优化和动态转换,来提升应用加载速度;同时,我们已经找到了一个办法把具有某些特征的dex字节码片段在虚拟环境中转为native指令来运行,性能的提升非常夸张。总之,MultiDroid打开了一个盒子,里面有无穷可能。

发布了81 篇原创文章 · 获赞 68 · 访问量 32万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览