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 使用虛擬機,應用性能常遭人詬病,可是這樣作的好處是,應用能夠輕鬆跨平臺運行。若是沒有這個,那對英特爾來講將是災難性的,從這點來看,英特爾仍是十分幸運的。

相關文章
相關標籤/搜索