用Android-X86和VirtualBox打造高效能Android開發環境
不知道有多少Android開發著對Android虛擬機器的那悲劇的效能有意見,反正我的看法是:那速度實在是太坑爹了!
為什麼Android虛擬機器比iOS和WP7的虛擬機器要慢很多呢?原因如下:
1. Android 模擬器模擬的是 ARM 的體系結構(arm-eabi),而 iOS 和 WP7 的模擬器的目標體系結構都是 x86 的,另外 iOS 的模擬器中執行的 App 也是編譯為 x86 的。這樣一來 Android 模擬器需要做一些額外的二進位制翻譯工作。
2. Android 模擬器用的是 QEMU 的全系統模式(full system),也就說它模擬時需要啟動整個 GUEST 系統,初始化各種模擬裝置。相反的,iOS 和 WP7 的模擬器只是 user-mode 的模擬。
3. 在 Android 模擬器之中還需要跑一個 Dalvik VM,用以執行 Android 應用的 bytecodes。
綜上所述,慢的一個主要原因就是虛擬機器不是跑在x86上而是模擬的ARM,有沒有辦法弄個x86的Android呢?
答案是當然有———開源專案Android-x86,這個牛B的開源專案將Android移植到了x86平臺,系統執行的時候不再需要模擬成ARM,這樣就能直接將Android裝在PC或虛擬機器上流暢的運行了。
萬事俱備,只欠東風了,下面我就來講一下我使用Android-X86和VirtualBox打造手機開發模擬器的整個流程
1.下載Android-x86系統映象檔案
2.在VirtualBox上建立虛擬機器
作業系統選擇Linux,版本選擇Linux 2.6
記憶體建議為512MB
硬碟預設8GB即可,因為是開發用,8GB綽綽有餘了
虛擬機器建立好之後,還需要修改一些配置
首先是調整網絡卡,連線方式建議選擇bridged adapter這樣虛擬機器在區域網中有獨立IP可以方便訪問,然後控制晶片要選擇為PCnet-PCI II,否則Android-x86無法識別網絡卡
如果你想有聲音的話需要在聲音設定面板將控制晶片設定為soundblaser 16
把虛擬機器的光碟機設定為我們剛才下載的Android-x86 iso之後,啟動虛擬機器
思想之地原創文章,謝絕轉載
3.安裝Android-x86到虛擬機器
虛擬機器啟動後,你可以看到下面的畫面
第一和第二的專案是讓你不用安裝體驗高、中DPI的Android-x86,有興趣的話可以先執行體驗一下x86的速度
我們要安裝Android到硬碟,選擇最後一項後回車
Installation - Install Android-x86 to harddisk
接下來我們會進入安裝介面,介面效果如下
我們選擇Create/Modify partitions來建立分割槽
首先我們選擇new來建立新分割槽
選擇Primary建立主分割槽
分割槽大小採用預設大小即可
然後我們設定該分割槽可以引導(選中Bootable後回車),這是分割槽的flag會顯示boot,然後我們再選擇write將修改寫入到硬碟(選擇write之後還需要輸入yes來確認)
分割槽完畢後再選擇quit即可退出,退出後,我們就能看到剛才分配的新分割槽被識別出來了
按下回車選擇該分割槽,這時會詢問採用什麼分割槽格式格式化分割槽,建議選擇ext3
選擇好格式後系統會再跟你確認一遍,輸入yes安裝就會開始了
安裝中途會詢問你是否安裝Grub,這裡一定要選擇YES,因為我們後需要Grub來自定義啟動Android
安裝Grub的時候會詢問你是否將/system目錄安裝為讀寫模式(設為讀寫可以更方便的debug,但是會佔用更多的空間和安裝時間),選擇yes
回車後安裝就會開始了
安裝結束後,會彈出一個選單
三個選項分別是
執行Android
建立一個虛擬SD卡
重啟
因為我們開發肯定會用到SD卡,所以在此我們建立一個虛擬SD卡
建立時會詢問SD卡的大小,根據你的需要設定即可,我在此設定的是128MB
回車後安裝程式就會開始初始化sd卡了
格式完畢後,會提示重啟,此時退出虛擬機器光碟機中的系統盤後重啟,重啟後就能進入Android系統了
注意使用在Android系統中使用滑鼠的時候需要設定Virtual Box禁止自動滑鼠獨佔,否則滑鼠在Android中無法正常使用
Android-x86執行截圖:
思想之地原創文章,謝絕轉載
4.自定義虛擬機器解析度
我們在開發時肯定需要測試不同的解析度,那麼如何自定義Android虛擬機器的解析度呢?
首先我們需要從Virtual Box的設定入手
開啟cmd,進入Virtual Box的下你建立的虛擬機器的目錄,我建立的虛擬機器叫Android-x86,我的賬戶是Administrator,在我Windows XP上的路徑是
C:\Documents and Settings\Administrator\VirtualBox VMs\Android-x86
注意:
1.在不同作業系統下路徑會有一些不同,請根據作業系統的實際情況尋找,原則上都是在你當前使用者的個人資料夾裡
2.Android-x86是我建立的虛擬機器的名稱,如果你的和我的不同,請修改為你建立的虛擬機器的名稱
在這裡我們需要使用VirtualBox提供的命令列工具來給你的虛擬機器新增一個自定義解析度,例如我想新增一個現在流行的手機螢幕解析度 480x800,那麼我們輸入的命令如下
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "Android-x86" "CustomVideoMode1" "480x800x16"
上面的命令中,加粗的部分是要根據你自己電腦上的情況進行修改的,相關解釋如下:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
是Virtual Box命令列工具VBoxManage.exe的完整路徑,請根據你電腦上安裝的VirtualBox的實際路徑修改
注意:如果路徑中含有空格請使用雙引號將整個路徑包起來
Android-x86
這個是虛擬機器的名稱
480x800x16
這個是自定義的解析度,請根據自己的需要修改,後面的16指的是16位顏色,請勿修改
如果你想增加更多的解析度,請修改引數後多次執行該命令即可
修改完畢之後,啟動虛擬機器,在Android的啟動畫面選中選項後按兩次e鍵編輯核心啟動引數,增加一個引數 vga=ask,具體流程如下
啟動畫面按e鍵
進入新畫面後再按一次e鍵
這時進入核心引數編輯狀態,增加引數 vga=ask
編輯完畢後按回車儲存修改結果,這時會回到上一個頁面,此時按下b鍵啟動
此時系統會提示你按回車進入解析度選擇介面,我們按回車繼續
進入頁面之後,你可以看到所有系統支援的解析度,這時請尋找你剛才設定的解析度,在下圖中,可以找到在先前設定的 480x800的解析度,注意其前面的16進位制程式碼360,如果想以該解析度啟動虛擬機器,我們就輸入360再回車即可
回車後Android就會按照你設定的解析度來啟動了,下圖是以480x800解析度啟動的Android-x86虛擬機器截圖
注意:
如果你需要系統採用你指定的解析度啟動,需要在每次Android虛擬機器啟動的時候執行上面步驟的操作來修改核心引數啟動Android
如果你想Android在啟動的時候就預設進入解析度選擇畫面或者預設採用你指定的解析度啟動虛擬機器,那麼可以參考以下步驟
1. 進入android虛擬機器後按alt+F1進入命令列
2. 輸入mkdir /data/fs
3. 掛載硬碟,使用下列命令
mount -t 硬碟格式 /dev/block/硬碟名稱 /data/fs
硬碟格式為你虛擬機器硬碟的格式,我這裡是ext3 硬碟名稱則是你虛擬機器的
硬碟名稱我這預設是sda1,表示第一個sata硬碟, linx下具體的硬碟命名規則請自行Google之
mount -t ext3 /dev/block/sda1 /data/fs
將硬碟掛在到 /data/fs資料夾上
4. vi /data/fs/grub/menu.list 編輯啟動選單列表 (vi這個命令列編輯器怎麼用請自行Google之)
5. 和剛才啟動時一樣,在第一個kernel那一行的末尾增加 vga=ask 後儲存
6. 重啟虛擬機器,這時候你就會發現每次Android啟動的時候就會詢問解析度了
思想之地原創文章,謝絕轉載
5.使用eclipse ADT在虛擬機器上遠端除錯開發
現在虛擬機器已經配置完成,下面來講解如何使用eclipse來在上面執行和除錯Android應用程式
在前面設定虛擬機器的時候我把虛擬機器的網絡卡設定成了bridged adapter,這樣虛擬機器在區域網中相當於一臺獨立電腦,你可以給它設定一個ip或者講其網絡卡設定為dhcp狀態來自動獲取ip,我下面只講解一下在 dhcp狀態下如何檢視android虛擬機器ip的方法:
進入android虛擬機器,按alt+F1進入命令,輸入netcfg命令來檢視網路狀態,參考介面如下
其中eth0就是當前的網絡卡,後面的ip地址就是通過dhcp獲得的ip地址
弄清楚之後再按alt+F7返回圖形介面
此時我們開啟eclipse,進入android開發外掛的設定介面,選擇ddms,勾選 Use ado host, 並在ADT host value 一欄填寫虛擬機器的ip地址,具體介面請參看下圖
選擇ok儲存後,在ddms介面的device選單上選擇重啟adb服務,重啟後,就能看到ddms連線上虛擬機器了
接下來就能和平常一樣在虛擬上執行和測試你的Android程式了,enjoy~
思想之地原創文章,謝絕轉載
最後總結一下這個環境的優缺點:
優點:
1.高速,相比Android SDK的虛擬機器,無論是啟動還是執行,本虛擬機器要快上很多很多,讓你可以流暢的執行測試你的Android應用,當然,也能舒服的在電腦上體驗到Android系統:)
2.可以模擬平板電腦的環境
缺點:
1.硬體支援還是悲劇,像打電話,簡訊,重力感應,GPS攝像頭什麼的你還是得去弄臺真機器除錯(不過這些東西本來就不是模擬器能做的)
另外補充一下虛擬機器中主頁、返回、關機、選單對應的鍵盤按鍵
Home鍵 -> Win鍵
返回鍵 -> ESC鍵
掛機鍵 -> alt+F4
選單鍵 -> 鍵盤選單鍵,一般在右邊win鍵和ctrl鍵中間