安卓实现安卓-光速虚拟机技术内幕

简介: 光速虚拟机是基于安卓系统和ARM处理器架构实现的一套虚拟化技术,在安卓系统的用户态空间无需特殊权限实现了一套完整的安卓内核和硬件抽象层,能够在安卓APP内部运行另外一个安卓系统,虚拟机内部的APP和游戏运行性能能够接近真机的运行性能和兼容性。光速虚拟机也可以认为是一种安卓系统上的库操作系统(libos)。

安卓实现安卓-光速虚拟机技术内幕


背景

1.png

光速虚拟机是基于安卓系统和ARM处理器架构实现的一套虚拟化技术,在安卓系统的用户态空间无需特殊权限实现了一套完整的安卓内核和硬件抽象层,能够在安卓APP内部运行另外一个安卓系统,虚拟机内部的APP和游戏运行性能能够接近真机的运行性能和兼容性。光速虚拟机也可以认为是一种安卓系统上的库操作系统(libos)。从行业的情况来看,微软和Google分别在不同系统上实现过类似的方案,微软DrawBridge是在Windows上实现Windows,以及其后续发展出来的WSL是Windows上实现linux,Google的gVisor则是linux上实现linux。光速虚拟机是通过安卓来实现安卓。光速虚拟机是市面上第一家在手机上实现完整安卓虚拟化的产品。

选择光速虚拟机作为研发方向主要考虑了如下三种场景:
1) 游戏场景
用户在玩游戏的时候需要多开游戏,或者息屏以后仍然希望游戏能够运行。
由于受到众所周知的原因,华为手机不能安装GooglePlay,外服游戏的用户也会遇到很大障碍。光速虚拟机内部可以预装GooglePlay和内置外服游戏的加速能力。
2) 安全场景
安全场景分为普通用户场景和企业场景。
普通用户在运行一些来路不明的APP的时候,担心隐私泄露、流氓广告的风险。而光速虚拟机将真机系统和虚拟系统实现了隔离,确保用户的信息不会被这些APP收集,也不会受到流氓广告的侵扰。
企业场景主要是安全管控能力,在移动办公领域,对企业办公APP的管控和防数据泄露,通常使用的方案是重打包或者沙箱方案(比如VirtualAPP),这些方案会存在兼容性、部署重、安全管控能力不足的问题。光速虚拟机实现了内核和硬件抽象层,具备可证明的安全性,能够实现对企业APP进行完整安全管控,并且是非侵入式方案,原理上能够达到更好的兼容性和更完整的安全性。
3) 兼容性场景
一些老的应用和游戏对新版本的安卓系统更新不及时,比如安卓10,或者即将升级的安卓11。光速虚拟机内部可以运行安卓4.4-安卓10系统和未来更高版本的安卓系统,目前外发的版本支持安卓7.1.2。这样能保证一些老的应用和游戏能够在新的安卓系统上运行起来。有点类似Windows操作系统的兼容模式。

相关技术介绍
团队分析了目前已经有的用户态虚拟化技术,挑选最具代表微软的Drawbridge&WSL和Google的gVisor,以及国内产商VMOS来进行介绍。
1)Drawbridge&WSL介绍
Drawbridge技术架构图:
2.png

微软基于这样一个背景来做Drawbridge:VM的虚拟化技术效率不高,而传统的OS虚拟化技术,如Linux Container技术,安全性又不足,所以Drawbridge选择了一条两者兼顾的道路,把Kernel的内存状态放到了Windows Container中,用户间的隔离更彻底,而各个Container之间依然共享一部分资源,所以相较VM虚拟化效率要高。
Drawbridge继续发展成为了支持linux的WSL。WSL则是通过Windows内核驱动来是实现linux内核的完整功能,不过技术原理上和Drawbridge有相关性。
8.png

2)Google gVisor介绍
Google gVisor技术架构图:
3.png

gVisor是用Go编写的用户空间内核,它实现了Linux内核系统调用的很大一部分。它包括一个称为runsc的开放容器标准(OCI)运行时,它在应用程序和主机内核之间提供隔离边界。 runsc运行时与Docker和Kubernetes集成,使运行沙盒容器变得简单。

3) VMOS
VMOS采用类似anbox的技术,没有实现完整的内核功能,而是基于现有安卓系统的内核,修改C库函数的基础上在安卓系统上运行另外一个安卓系统,这样实现的问题就是由于对系统调用很难实现完整截获,会引入一些兼容性问题,并且不能根治。

光速虚拟机技术架构
通过上面的分析我们知道,微软Drawbridge是在Windows上实现Windows,Google的gVisor则是linux上实现linux。光速虚拟机则是通过Android来实现Android,我们在安卓用户态实现了一个完整的安卓内核和安卓硬件抽象层。从工程角度来看,光速虚拟机比gVisor实现的困难度要大不少,手机终端的多样性远大于后台linux服务器版本的多样性,对性能的要求也更加严苛。光速虚拟机除了能在安卓上运行安卓,实现了跨系统的迁移层,具有很好的迁移性,能够在国产操作系统UOS、Linux、macOS和云上来运行安卓和linux程序。
4.png
5.png

1,完整的安卓内核
安卓内核基于linux内核,多了一些特殊设备比如binder的实现。光速虚拟机将真机安卓内核视为一种资源,在其基础上完整实现了内存管理,进程管理,文件系统和设备管理等安卓内核功能。对上层提供标准的安卓内核接口。这样安卓虚拟机内部运行的安卓系统将不依赖于手机内核的实现,可以实现在安卓5-安卓11上运行任意版本的安卓系统,这意味着可以在安卓5的手机上运行安卓7,或者安卓11。目前光速虚拟机外发发布版本主要支持安卓7。

从安全角度来看,相对于沙箱或者加固重打包方案,由于光速虚拟机是独立于主机的内核,能够实现更好的安全性和隔离性。也不会因为主机内核的漏洞导致APP之间的互相穿透行为。

2,完整的硬件抽象层次
光速虚拟机基于真机系统的安卓资源,实现了一个完整的硬件抽象层包含显示屏幕、输入输出设备、蓝牙等。这样能对虚拟机内部的APP使用硬件资源能够进行很强的管控。甚至可以的对屏幕打盲水印这样一些特殊安全能力。

3,精简的安卓系统
光速虚拟机目前会携带一个精简的安卓系统,目前系统是基于AOSP7.1.2精简而来,大小在170M左右,外发版本因为普通用户的一些需求会有200多M,未来比较方便扩展到安卓其他版本。

光速虚拟机实现过程中的主要技术难点:
1) 系统调用的兼容性
光速虚拟机内核对自身内部运行的APP是根据linux内核4.14的标准来实现的。
由于各个安卓系统所基于的linux内核版本不一致,各个厂商对内核也有会很多修改,光速虚拟机对真机内核使用的时候尽可能按照最少使用原则来,尽可能不使用新内核的新特性。这种方式对光速虚拟机内核实现的难度和复杂度都比较大,却能得到比较好的兼容性。

2) 系统调用的完备性
1、基于主操作系统内核来实现300多个系统调用,具有非常大的工程难度和工作量。
2、沙箱技术目前面临的最大问题是系统调用的完备性问题,沙箱通过HOOK C库函数的方式拦截所有系统调用,对于一些加固加壳的应用或者游戏,这些加固的代码不通过C库直接调用系统调用,对于这些系统调用没有通用的HOOK办法来实现拦截,需要通过搜索特征码的方式来实现。沙箱技术可以通过seccomp来实现对系统调用的拦截(seccomp是linux的一种安全机制,可以设置条件接管应有的所有系统调用),但是由于地址随机化ASLR的原因,沙箱很难区分系统调用是来自于C库还是来自于应用自身的直接调用,意味着每一个系统调用都需要进出两次内核,性能开销很大。光速虚拟机由于拥有相对完整的内核实现,比较好的解决这个问题,即兼顾性能又能实现系统调用监控的完备性。

3) TLS的处理
TLS (Thread Local Storage)是操作系统比较重要的特性,线程本地存储。
本质上虚拟机是真机上的一个APP,虚拟机里面运行的APP包含的进程是真机上的进程。如果虚拟机进程使用真机的TLS,会导致从虚拟机进入真机或者从真机回到虚拟机出现数据混乱的情况。这时就需要进程在虚拟机内部TLS和真机TLS的切换过程。虚拟机需要完整实现虚拟机内部TLS到真机TLS的互相切换过程。

4) 渲染的性能处理
虚拟机包括安卓模拟器的渲染处理,一般是将虚拟系统内部的OpenGLES渲染指令通过管道的方案发送到窗口进程来完成渲染的处理。由于渲染传输的数据非常大,又是跨进程通信,导致会有比较大的性能损耗,用户在玩游戏的过程中会有延迟的感觉。光速虚拟机的渲染没有通过管道传输到渲染窗口,而是直接穿透虚拟机直接调用真机的渲染接口来完成渲染指令的计算,然后合成到渲染窗口,这样性能基本接近真机的渲染性能。

5) 线程数量的控制
华为手机为了提示EMUI的性能,对单个APP有线程数量限制,比如mate8之前的手机有500个线程的数量限制,这样会导致虚拟机里面如果打开多个APP会触发这个线程数量的限制(虚拟机本质上是一个APP)。为了解决这个问题,虚拟机采用了线程池的方案。在虚拟机内核里面建立一个虚拟CPU,虚拟CPU包含了一个真机的线程池,虚拟机里面的APP创建线程的时候,实际上并不对应真机上真正的线程,由虚拟机的虚拟CPU来完成对APP线程的调度。
兼容性和性能评估
安全虚拟手机在安卓内核基础上完整模拟了一个新的内核和硬件抽象层,性能、兼容性接近真机。
应用兼容性:
一个完整的安卓运行环境,技术原理上可以做到跟用户手机的兼容一致。光速虚拟机发布情况来看兼容市面上绝大部分应用和游戏。
手机兼容性:
光速虚拟机支持Android5.1-Android10的手机系统。内存方面,需要手机的内存大于等于2G

光速虚拟机在性能方面做了比较多的优化工作,实际测试来看,性能方面:
1,主流应用启动时间相比真机影响<5%
2,主流应用运行内存占用,CPU开销相比真机影响<5%
3, 主流游戏性能帧率影响,渲染一帧所花时间跟真机对比影响<5%

光速虚拟机的进一步应用
移动端安全
6.png

基于光速虚拟机引擎能力的安全虚拟手机,提供整体可信任的移动端数据安全整体保护方案,包含企业应用防护,移动设备管控,安全审计等功能。
与其他解决方案进行对比,主要优势:
1,安全虚拟手机有独立于手机系统的内核和硬件抽象层,安全虚拟手机的内核数据、进程管理、内存管理、文件系统、设备管理独立于手机系统,具备完整的安全性。现有SDK方案或者沙箱方案和手机系统共用一个内核和安卓框架层,企业应用存在和手机上的其他应用进行通信和数据交互的风险。
2,非侵入式方案,方便部署和管理,方便接入到第三方管理系统,完全不需要企业应用做任何修改,具备更好的兼容性。侵入式方案通常包含SDK方案或者加固方案,需要企业重新打包已有企业应用,存在兼容性以及应用管理问题。
3,特殊安全能力,由于安全虚拟手机的屏幕是一个虚拟的屏幕设备,通过控制屏幕上像素点的显示方式,支持屏幕盲水印,需要有特殊算法才能计算出盲水印的信息。

跨平台迁移
7.png

光速虚拟机具备很好的迁移性,不依赖于虚拟化技术、在主流系统平台包含国产操作系统UOS、Android、Linux、macOS、云上系统等运行Android和Linux应用程序。
开放合作
光速虚拟机除了产品自身外,正在和行业全方位合作,我们的官网:www.gsxnj.cn。有兴趣的同学可以联系bd@smartgaga.com。

参考链接
1) https://www.microsoft.com/en-us/research/project/drawbridge/
2) https://docs.microsoft.com/zh-cn/archive/blogs/wsl/
3) https://github.com/google/gvisor
4) www.gsxnj.cn
5) www.vmos.com
6) https://anbox.io/
7) https://github.com/asLody/VirtualApp

相关文章
|
4月前
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
205 1
|
8月前
|
开发工具 Android开发
Android平台GB28181设备接入端语音广播技术探究和填坑指南
GB/T28181-2016官方规范和交互流程,我们不再赘述。
|
2月前
|
监控 Oracle Java
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,探索各大JVM虚拟机特色 —— JVM故障排除指南(先导篇)
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,探索各大JVM虚拟机特色 —— JVM故障排除指南(先导篇)
40 0
|
8月前
|
编解码 Android开发 数据安全/隐私保护
Android平台外部编码数据(H264/H265/AAC/PCMA/PCMU)实时预览播放技术实现
好多开发者可能疑惑,外部数据实时预览播放,到底有什么用? 是的,一般场景是用不到的,我们在开发这块前几年已经开发了非常稳定的RTMP、RTSP直播播放模块,不过也遇到这样的场景,部分设备输出编码后(视频:H.264/H.265,音频:AAC/PCMA/PCMU)的数据,比如无人机或部分智能硬件设备,回调出来的H.264/H.265数据,除了想转推到RTMP、轻量级RTSP服务或GB28181外,还需要本地预览甚至对数据做二次处理(视频分析、实时水印字符叠加等,然后二次编码),基于这样的场景诉求,我们开发了Android平台外部编码数据实时预览播放模块。
|
7月前
|
存储 传感器 定位技术
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
85 0
|
13天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
2月前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
91 0
|
2月前
|
存储 安全 搜索推荐
虚拟桌面基础结构(VDI)和虚拟机技术的区别和联系
虚拟桌面基础结构(VDI)和虚拟机技术的区别和联系
48 0
|
3月前
|
人工智能 vr&ar Android开发
探索安卓与iOS系统的技术进展
【2月更文挑战第4天】本文将探讨安卓与iOS两大操作系统在最新技术进展方面的差异与相似之处。我们将分析它们在人工智能、增强现实、隐私保护等方面的创新和发展,并展望未来可能出现的趋势。通过对比这两个操作系统的技术特点,读者将能够更好地了解并选择适合自己需求的智能设备。
|
8月前
|
开发工具 Android开发
Android平台GB28181设备接入端预置位查询(PresetQuery)探讨和技术实现
之前blog介绍了GB28181云台控制(PTZCmd)相关,本文主要是介绍下GB28181预置位查询。