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安卓平台兼容性問題。

為了解決這一問題,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 使用虛擬機,應用性能常遭人詬病,但是這樣做的好處是,應用可以輕松跨平台運行。如果沒有這個,那對英特爾來說將是災難性的,從這點來看,英特爾還是十分幸運的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM