帝游网提供最新手游APP下载和游戏攻略!

Android 模拟器发展探索

发布时间:2024-10-15浏览:87

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

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

科技创造世界,世界正在由你改变!根据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公开课》资料!

用户评论

夏至离别

这篇博客文章挺有意思,我对模拟器发展的现状还挺好奇的。

    有10位网友表示赞同!

肆忌

感觉最近几年Android模拟器的进步真的蛮快的.

    有10位网友表示赞同!

反正是我

学习一下Hello World课程很有意思,可以了解到模拟器背后的技术。

    有13位网友表示赞同!

青楼买醉

想做游戏开发的人,这篇文章绝对是入门必看!

    有20位网友表示赞同!

拉扯

"你好世界"公开课?感觉名字好亲切啊。

    有8位网友表示赞同!

神经兮兮°

模拟器和游戏开发的结合,真是越来越复杂了。

    有16位网友表示赞同!

〆mè村姑

这个课程应该会让我对Android模拟器的原理有更深刻的了解。

    有11位网友表示赞同!

有阳光还感觉冷

我对如何在手机上开发游戏的细节很感兴趣,尤其是用模拟器的方法。

    有19位网友表示赞同!

嘲笑!

希望这个公开课能够给我一些实用的学习资源。

    有6位网友表示赞同!

各自安好ぃ

学完这篇文章后能自己制作一个简单的游戏吗?太酷了!

    有13位网友表示赞同!

全网暗恋者

感觉模拟器技术发展得越来越成熟了,以后玩手机游戏的体验会更好?

    有8位网友表示赞同!

素衣青丝

想了解一下目前市场上有哪些主流的Android模拟器平台。

    有6位网友表示赞同!

枫无痕

这篇文章可能会让我对编程这个领域更有兴趣。

    有8位网友表示赞同!

如梦初醒

Android模拟器的性能已经非常接近真的手机设备了,太厉害了!

    有13位网友表示赞同!

仰望幸福

我对游戏开发一直有兴趣,现在有机会学习相关的知识了。

    有20位网友表示赞同!

像从了良

希望能看到更多关于Android模拟器应用技术的讨论。

    有17位网友表示赞同!

青衫负雪

这个课程可以帮助我更好地理解游戏开发流程吗?

    有7位网友表示赞同!

蹂躏少女

想知道用模拟器开发游戏的局限性和优势有哪些?

    有17位网友表示赞同!

七级床震

这篇文章看起来很有深度,值得花时间仔细阅读。

    有7位网友表示赞同!

等量代换

期待更多关于Hello World公开课的资讯和学习内容!

    有12位网友表示赞同!

热点资讯