接上篇,在建立好Android x86的模擬器後,預設的螢幕是寬屏的,而且沒有可以旋轉螢幕的操作。為了使螢幕可以顯示成普通手機的豎屏,需要做如下操作:
1.在Windows上進入命令列模式,轉到VirtualBox的安裝目錄下,輸入如下命令:
其中"Android 2.3"是你在VirtualBox中建立虛擬機器時候填入的虛擬機器名字,"CustomVideoMode1"是VBoxManage的保留參數,指明這是一個自訂的參數,當然以後你也可以增加CustomVideoMode2、 CustomVideoMode3直到CustomVideoModeN。最後一個參數就是螢幕的解析度,480x800就是手機豎屏的寬高,16是螢幕顏色位元,一般就是用16,其他的貌似會有問題。480與800之間的乘號就用小寫字母x即可。
2.開啟你的Android虛擬機器,在引導頁的時候,選擇Debug Mode進入:
等待命令台載入完成後,輸入如的命令:
這樣做的目的是進入Android虛擬系統的grub中,用vi工具修改menu.lst檔案。在上述命令斷行符號後,將會看到menu.lst的內容,注意,最上端的title欄位是我後來加的,原本只顯示下面三個title欄位的。按照下面的三個title的格式,自訂一個title欄位(如我的MY HDPI),內容的話,就按照HDPI和MDPI順便抄一個就好,但是注意一定要在kernel這一行的最後,加上一個空格,然後是vga=ask這樣的參數。基本上操作就是普通的Ubuntu上vi的操作,按i可以進入文本編輯模式,然後用游標移動,輸入即可,完成後,按Esc,然後按下:鍵,並輸入wq進行儲存就可以了。
儲存完成後,回到控制台,輸入/system/bin/reboot,啟動整個Android系統,在引導頁,選擇剛剛我們建立的那個MY HDPI選項即可:
按下斷行符號,進入video modes的選擇頁面:
最後那個代號為360的就是我們在VBoxManage裡面設定的自訂顯示模式,輸入360,進入該模式:
在第一次進入虛擬機器系統的時候,你可能發現螢幕還是寬屏的,這是由於VirtualBox有緩衝機制,你只要用滑鼠在視窗的邊緣拖動一下,視窗就可以變成豎屏的了,調整大小,使之適應你的顯示器螢幕:
接下來要來測試虛擬系統的網路是否可用,這關係到adb調試橋能否正常串連到Android x86系統。
在保持系統被啟用的狀態下,按下Alt+F1(按Alt+F7是返回正常的螢幕),進入Android x86的終端控制台,輸入netcfg命令,它會打出當前系統的網路連接情況,如果你能找到eth0欄位,且其IP地址是和你的主機地址在同一網段的話(非0.0.0.0或其他異常地址),那麼你就可以直接開啟eclipse,按照普通SDK模擬器那樣開發調試了。如果你的顯示如下:
根本沒有顯示eth0的話,那麼說明虛擬機器的網路連接有問題,關閉虛擬機器,進入VirtualBox的設定,在“網路”頁面,確保選中的是橋接網卡模式,然後將控制晶片選擇PCnet-FAST III,儲存後重啟虛擬機器,這個時候你會看到eth0出現了。但是其IP地址卻是0.0.0.0!此時你需要的是,進入Android系統,在Settings->Ethernet Configuration中將Ethernet選項勾中,這樣就確保了Android系統使用了主機的乙太網路串連,同時你會注意到Android的系統欄裡面多了一個乙太網路串連的ICON。你可以Alt+F1返回到控制台,使用netcfg重新查看當前的網路連接,eth0應該不再是0.0.0.0,而是一個和你的主機IP在同一網段的IP地址了。
即是在開啟Ethernet選項前後的netcfg的輸出:
最後就是在eclipse裡面調試了,首先,在Windows的CMD模式下,進入Android SDK的目錄,運行adb connect 你的虛擬機器的IP地址:5555條命令,使得adb與Android模擬器之間建立串連:
然後在eclipse裡面進行調試的時候,就可以彈出Android模擬器的顯示項目了:
大功告成!
限制:如果你的工程裡面有使用so,那麼請確保在Android.mk中修改介面類型為x86類型的,否則apk將無法在Android x86模擬器上運行。這也意味著如果你下載的apk裡面有使用so的話,一般都無法再Android x86上啟動並執行,因為市集中的apk的so都是arm類型的。所以一般如果是開發調試so的話,還是建議使用真機或者SDK的模擬器。
參考文獻:
Switch android x86 screen resolution