构建Android在Windows上的x86模拟器(下)
接上篇,在创建好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的模拟器。
参考文献: