《Hello,World公开课》Android模拟器发展如何?

开课吧开课吧科科2021-03-19 16:17

《Hello,World》与你一起改变世界。

无论我们是一个C++开发人员,还是一个JavaScript开发人员,又或是一个AngularJS专家......我们都是一名简单纯粹的程序员。

《Hello,World公开课》提供了这样的一个平台,一端集结业内名师大咖,一端集结追求技术极致的学员,以专业知识分享交流为桥梁,链接正在创造世界的一群科技主力们,向初心致敬,为技术发烧。

科技创造世界,世界正在由你改变!根据talkingdata的数据,目前有70%左右的智能手机在运行Android系统,这款在2007年由Google发布的移动操作系统,一经发布就在全球掀起了移动化浪潮。如今14年过去了,现如今Android系统怎么样了?

3月18日,开课吧《Hello,World公开课》迎来了步山老师,让他为我们说说,Android模拟器未来的发展如何。

Android模拟器底层技术实现

Android模拟器是令Android系统大红大紫的一个重要原因。简单来说,所谓的Android模拟器就是可以在其他的平台,如电脑上模拟出Android手机运行环境,并能体验Android系统应用的一种技术。

目前常见的模拟器有官方的Android Studio Emulator,以及LDPlayer,Bliss OS,Phoenix OS等等。从早期基于X86架构的模拟器发展到今天,已经发展到可以基于容器和云计算技术来构建模拟器了。

安卓模拟器

下面,我们来看看整个Android软件堆栈,如下图所示,从上到下依次是Android软件层、Java API,原生库、虚拟机、硬件抽象层、Linux Kernel。

硬件抽象层主要作用是将一些技术细节隐藏起来以方便开源,更多是商业层面的考量,紫色的部分是原生库,比如OpenGL ES是图形图像相关的库。

安卓模拟器

但有一个问题需要注意,上面这个系统是无法在X86的环境下运行的。为了解决这个问题,官方利用X86的技术重写了虚拟机以及Linux Kerenel等多个底层模块和驱动。替换掉后,就变成了如下图所示的架构:

安卓模拟器

整个系统架构了解清楚了,下面,我们再来看看Android模拟器是如何实现的,先来介绍一个重要的工具—Goldfish,它是一种虚拟的ARM处理器,Android模拟器通过它来运行arm926t指令集。下图就是Goldfish如何实逐步现Android模拟器的。Frameworks代码层通过调用Server来实现应用的请求,Hardware是硬件抽象层。

安卓模拟器

模拟器遇到的问题

原生库

在Android模拟器实现中有一个应用原生库的问题,因为不同的Android 设备使用的是不同CPU,而不同的CPU 支持不同的指令集。CPU 与指令集的每种组合都有专属的应用二进制接口(ABI),如下图所示。

原生库

下面我们看看如何通过二进制指令翻译—houndini解决这个问题

通过触发Nativebridge机制,在“/proc/sys/fs/binfmt_misc”下的名为“register”的文件中写入了两串字符串,通知Dalvik/ART:

所有使用ARM指令集的可执行和动态库ELF文件都用houdini程序打开

所有ARM64指令集的可执行和动态库ELF文件都用houdini64程序打开

图形图像

可以想象,模拟器中图形图像对系统的开销是非常大的,可能会有几千条指令在同时运行。所以我们需要用到模拟计算来提升效率,如下图所示,guest是Android系统本身,host通过共享内存的方式将指令做转换。

图形图像

交互

既然是操作系统,那人机交互肯定是少不了的。在Windows系统中,是通过鼠标键盘来输入数据,而一般安卓设备是触摸屏,所以我们还需要通过触摸屏虚拟设备加底层硬件驱动,将电脑端传过来的数据转换为触摸屏的数据。

安卓模拟器

Android模拟器演进

容器

这里我们又提到了容器,还记不记得之前《Hello,World公开课》中关于容器的介绍么,在这里,利用容器可以即隔离虚拟的应用环境,又可以高效利用宿主机的硬件。

容器

WSL

WSL (Windows Subsystem for Linux)支持适用于Linux的Windows子系统在Windows上运行ELF64 Linux二进制文件。主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。

安卓模拟器

以华为云为例,如下图所示,它是由Guest OS、虚拟化、主机OS、硬件平台这个部分构成,AOSP是Android的开源版本。

记得前面说的么,在安卓模拟器中,我们要通过异构指令的方式,把arm的指令翻译成X86的,这样做性能会大幅度削减,如果采用同构指令的方式,性能基本没有折损,因为华为云下面的鲲鹏云平台就是基于arm的。

安卓模拟器

讲师介绍

步山,复旦大学软件工程硕士毕业,曾在Corel,Intel等研发中心工作,专注Java虚拟机、安卓系统研发,目前为智能家居初创公司CEO

《Hello,World公开课》是由开课吧推出面向广大开发工程师的免费加餐课,我们希望能搭建起一座桥梁,将业内的最热门的技术,最好的解决方案一起打包免费送给你。无论你是初入职场的应届生,还是准备升职加薪的职场精英,相信这里都有你需要的内容。

更多《Hello,World公开课》尽在开课吧广场动态信息频道!

有用1
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
Hello,World公开课