為什麼PC配置那麼好,跑安卓虛擬機還是卡,是技術原因,還是硬體原因? ?

明明電腦的配置可以秒手機配置幾條街,為什麼用電腦跑安卓虛擬機還是那麼卡呢?手機上就能那麼流暢的運行,這個到底是應該硬體問題,還是軟體優化不到位。

我覺得答案成給我推薦用什麼模擬器流暢了呢?我是想問技術瓶頸在哪?是硬體還是軟體?


AVD卡的原因是,和iOS不同的是,AVD真正的模擬了不同設備全部的硬體環境,而不像iOS只需要模擬一個app的運行環境,所以包括像arm架構不同的指令集不同設備可能也是不同的,如果需要的話可以保存某些AVD的環境,或者是在設置中勾選硬體加速,這樣在某些和你pc指令集相同的機器就會快很多。

印象是這樣的,火車上爪機回答,回到家再查證補充一下

-------- 完善答案如下 ------------

雖然沒什麼人關注這道題,自己挖的坑自己填了

先說說iPhone的simulator模擬了一個運行iOS環境的虛擬機,所有iOS代碼compiled之後都可以mac-native的速度運行。

而android emulator(注意此處的區別)基於開源的 Quick Emulator,模擬了包括storage system, screen在內的幾乎所有的硬體。QEMU將原本應該運行於android devices上的機器碼運行在你的電腦上,好處是它最大程度的還原了device的每一個硬體細節,因此變得比ios simulator要慢。

如何提升使用的速度?

1. 保存emulator的snapshot,具體在AVD manager中勾選 "Store a snapshot for faster startup";

2. 使用硬體加速,比如你在使用的電腦是基於x86架構的,而你需要模擬的android設備也是x86架構的,那麼使用硬體加速可以很大的提升emulator的速度,此時你需要安裝 Intel』s Hardware Accelerated Execution Manager (HAXM);

希望以上對大家有用


我在這裡的回答 為什麼 Visual Studio Emulator for Android 那麼流暢? - 叛逆者的回答 ,反過來(邏輯錯誤地)解釋這個原因,那就是:

1. 裡面運行的是arm的,利用QEMU轉x86解釋執行,效率遠低於hyper-v的x86硬體虛擬化。

2. 沒有用我的圖形驅動(臭不要臉一下)

一個回答居然能正反用兩次,我自己都看不下去了。。。


或許提問者沒有嘗試過這兩個模擬器?

Genymotion

Visual Studio(我也沒用過)

實際上AOSP的模擬器在載入了HAXM後,CPU部分的性能是不差的

比如開個Chrome瀏覽器去跑分,會發現和主機上的差不多

AOSP也允許調用主機的GPU進行渲染,可以讓畫面流暢很多

但是即便這樣原生模擬器還是不如Genymotion/微軟的模擬器

這應該是模擬器的問題了吧


自認為可以比較系統回答這個問題,普通android emulator運行慢原因主要有兩個!第一,在x86(pc)上運行arm(android),指令是模擬的,這不同於virtualbox里跑linux,guest指令幾乎不用模擬直接在host cpu上執行。模擬帶來的時間損失是數量級的!第二,普通android emulator中,渲染全是軟實現,沒有用host端硬體加速!

在國外,bluestack的emulator做得不錯,國內也有一家叫海馬王。他們兩家解決性能的技術方案不盡相同,對海馬王方案相對了解一些,簡單說來是virtualbox+androidx86+intel libhoudini+host渲染加速,virtualbox解決emulator載體問題,android x86使得guest是x86架構,在系統層面確保gust host架構相同,免除指令模擬,intel libhoudini是intel提供的免費但不開源arm to x86指令翻譯工具,這個工具使得只提供了arm so的app在emulator成為可行且性能不錯,由於不開源,不知道翻譯是發生在哪個階段,但我猜是運行時動態翻譯,文檔顯示翻譯後性能接近直接跑x86指令,實測的確如此!最後一個性能提升項是host渲染加速,基本原理是,在guesthost間建立一條高速數據傳輸通道,將guest端渲染命令打包傳給host端,host端解包再執行命令,最後把結果返回,注意,這裡很多時候是要求同步的,這也是為什麼強調通道必須高速。

另外,別說我為何知道這些細節,因為我正在做這玩意!


因為不同的指令集。

現在一般的PC用CPU原生支持虛擬化,即其提供專用指令用於模擬虛擬機,所以與宿主機相同指令集的虛擬機相當於是直接跑在硬體上。

而不同指令集的虛擬機由於其底層指令在宿主機硬體上無法使用,所以必須用軟體模擬出硬體環境或者進行指令翻譯,這個開銷是很大的。

所以你在vmware或virtualbox上跑一般的linux、windows很快,而跑安卓系統就慢得多了


舉個例子,你不會英文,老師讓你寫一個作業,作業要求是英文的。如果你明白作業要幹什麼,以你的能力,一秒鐘就能搞定,但是現在你看不懂英文,所以就要找人幫你翻譯,這個翻譯花費了一小時,現在你做作業的時間就是一小時零一秒鐘。這個例子可能不太恰當,但是也差不多。在一個系統內虛擬另外一個系統本身就很傷,更何況兩套系統CPU命令集都不一樣。


安卓虛擬機是CPU emulator,會把ARM指令轉譯成x86指令。這與vritual box、vmware不一樣,而類似於紅白機模擬器那樣。這類模擬器能有十分之一的效率大概就了不得了。


我也不是專業的,就給你簡單解釋一下吧,所有的遊戲機、手機、蘋果之類的硬體和軟體,都是配套生產的,專項專用的,而這些都和電腦的硬體不匹配,不匹配怎麼模擬呢?就需要模擬器的編程人員用程序硬是在你的電腦硬體里模擬出其他機種的虛擬硬體環境,然後這些機種的軟體才能根據設計特徵去運轉。

換句話說,你以為模擬器在跑的只是其他平台的程序么,它實際上同時還在不斷模擬其他平台的硬體本身,而這個模擬本身就占很多資源不說——它畢竟是模擬,不是真貨,只是搭的布景,很多時候因為技術原因,很難完美模擬——所以就難免有穿幫的時候,穿幫了就得停下來修布景,然後再給你繼續運行,這這個修補的過程又是一番大費周章,自然就慢了。


是因為你用的安卓虛擬機是arm架構的 而電腦普遍是x86架構 指令集轉換十分消耗性能 用x86的鏡像就完全不同了


用x86的就好多了,比如genymotion,令附個鏈接

performance - Why is the Android emulator so slow? How can we speed up the Android emulator?


用AMIDuOS(Bring the Fun and Functionality of Android to Your Windows 7 or 8 Device with AMIDuOS!)吧,14.99美元http://www.amiduos.com/

做BIOS的公司做的,更好地利用硬體。


裝x86的虛擬機用有x86版本的apk就可以超神啦


並不卡,加個內存條就好了


試試微軟新出的android設備模擬器 速度很快

補充:軟體的名稱是Visual Studio Emulator for Android


軟體兼容問題,PC性能是肯定不虛移動設備的


樓上一群把問題看複雜的。。。其實就是垂直同步的關係。。。


用什麼海馬模擬器之類的可以啊,比較快,如果用谷歌的模擬器,sdk要下x86的鏡像啊


推薦閱讀:

單片機、ARM、嵌入式開發、Android 底層開發有什麼關係?
Android L 發布,新安卓系統在安全方面有哪些變化?
如何看待 Google I/O 大會推出的Android Studio?單純開發 Android 方面能取代 Eclipse 嗎?
Android程序員,最常用的20%技術有哪些?
安卓系統的後台是怎樣的?

TAG:Android開發 | 虛擬機 | Android |