x86架构的android手机兼容性问题

自从CES2012上Intel发布了针对移动市场的Medfield平台以来,市面上出现过一些基于X86的Android手机。架构

大部分Android应用都使用基于Dalvik Java代码开发。理论上,因为Dalvik代码在系统的虚拟机中执行,在x86的ATOM平台上不会有性能损失。但因为虚拟机执行效率的有限,对于一些高性能追求的应用,谷歌容许开发者使用原生的C语言代码。而原生代码是针对硬件平台编译,x86,ARM或是MIPS都有其相应的二进制文件。一般来讲,针对ARM平台编译的二进制代码,x86的处理器是没法直接运行的。而主流的安卓产品均采用ARM处理器,尽管很早以前,Google的Android NDK就引入了x86编译的选项,但至今仍是有至关一部分应用只针对ARM平台进行了编译,这就形成了x86安卓平台兼容性问题。app

为了解决这一问题,Intel在推出Android手机系统的ATOM平台之初,就引入了“二进制转换”(Binary Translation)这一功能,来解决x86没法直接运行ARM库的问题。针对ARM编译的二进制代码会被ATOM处理器翻译成x86执行的代码,从而运行包含为ARM编译的原生代码的应用。性能

经过这一功能,x86 ATOM能够兼容市面上的绝大部分应用。最新的采用Atom Z2580处理器的联想K900已经宣传本身能兼容市场上的TOP 20000应用。测试

在解决了兼容性问题后,加上x86 Atom单核战双核、双核秒四核的彪悍性能(跑分),x86彷佛已毫无黑点,横扫市场指日可待。但遗憾的是,x86所宣传的“兼容”与“性能”,因为目前的生态环境的限制,并不能兼得。线程

尽管TOP 20000的应用已经能够被兼容,但我的统计了豌豆荚市场中最热门的250个应用,其中31%的应用没有使用原生代码。剩下的69%含有原生代码的应用中,只有8%包含了x86库,剩下61%只有ARM原生库。也就是说,只有这8%的应用,x86能够发挥本身的最佳性能,而绝大部分,都须要进行二进制转换去进行兼容。翻译

经过统计当乐网中最热游戏TOP100,咱们发现,只有6%的游戏不含原生库,胜于94%的游戏都含有原生代码。在这其中,只有5%的游戏含有x86原生库,剩余的将近90%的游戏,都须要Atom处理器经过二进制转换运行为ARM编译的代码。游戏

经过实验对比,咱们发现:当使用x86原生库时,咱们能够发现ATOM的单线程性能异常强悍,特别是内存性能而一旦采用兼容模式,二进制转换运行ARM库,性能就大大降低。能够看到二进制转换相比原生执行x86代码,损失的性能仍是很可观的,在性能诉求的应用中,损失可高达50%以上。在一些游戏类应用中,也会带来约400mW的CPU功耗的增长内存

总的来讲,x86的Android之路还很漫长,尽管经过Intel和厂商的努力解决了兼容和性能问题,但相对恶劣的生态环境使得性能和兼容不可兼得开发

///////////////////////////////////////////////////////////////////////////////////////////////////////////////虚拟机

事实证实,通过个人测试,x86 的应用兼容性已经作的十分完善,英特尔此前宣布可达 95% 的兼容性不假,你们大可放下内心包袱。不过英特尔是如何作到的,这背后的缘由不少人并不知道。刚好在 IDF 上,我遇到了一位英特尔软件部门工程师,他向我通俗的讲述了其中的缘由。

其实问题主要出在指令集上,x86 使用的是 SSE 指令集,而 ARM 是用的 NEON 指令集,二者差别致使了应用不兼容。不过好在 Android 的大部分应用运行在 Dalvik 虚拟机之上,并不依赖 CPU 架构,所以这些应用能够很好地跑在 x86 上。

支持 Dalvik 的程序占据大多数,但仍然会有一些应用绕过 Dalvik。好比须要更高的性能或者须要硬件的支持的时候,前者一般是大型游戏,后者则是结合了感应器或者电源管理等硬件相关的应用。Angry Bird 二者都不占,因此能够兼容,赛车游戏二者都须要,因此大多不兼容。

这些稍显复杂的应用数量并不低,且用户需求强烈。为了快速解决这些问题,英特尔试图经过技术去完善,开发了一种转换技术“Houdini”。 “Houdini”至关于一个中间层,可让本来不兼容的应用跑在 x86 上。但这种强行结合的技术运行起来每每效率不高,容易出问题,且会增长 2% 左右的耗电。

从源头解决问题显然是更好的办法,尽管速度会慢一下。自从英特尔和 Android 合做以后,英特尔就提供了 x86 的 NDK。 开发者只需在应用中支持这个 NDK,应用在提交时会自动生成 2 个 app,设备在下载时会根据本身的架构下载合适的 app。这种方法并不难,效果也最好,难的是如何让众多开发商甘愿合做。因此英特尔以及手机厂商会去和应用厂商挨个合做,督促其支持 x86 的 NDK。

如今已经有不少大型游戏支持 x86 架构,包括极品飞车、无尽之剑等。用户大可没必要担忧,因兼容性引发的影响已经十分微小了。

何况用户平常使用最频繁的偏偏是那些十分简单、无需从新适配的应用。因为 Android 使用虚拟机,应用性能常遭人诟病,可是这样作的好处是,应用能够轻松跨平台运行。若是没有这个,那对英特尔来讲将是灾难性的,从这点来看,英特尔仍是十分幸运的。

相关文章
相关标签/搜索