Apparently, the official Release version of Android 4.0 from android-x86.org should work completely out-of-the-box in VirtualBox: android-4.0-r1. I have an older development release linked later in this post that was built specifically for VirtualBox, which is what this post was originally written about. The Release version of Android 4.0 also contains Google Play and the other Google apps out of the box, so you can skip the part about installing the Google apps later. Thanks @DrDeve for pointing this out!
This blog post is about a very particular build of Android 4.0 that is linked to later in this post. The instructions that follow are known to work when installing from that ISO image. There does exist Android 4.3 ISOs from android-x86.org and when I tested them, a lot of stuff seemed to just work out of the box in VirtualBox, but this blog post isn't about Android 4.3.
Also, if you're using a different Android 4.0 ISO you found somewhere else, there's no guarantees it will work very well for you. Networking and audio are some of the biggest problems I've seen in Android virtualization. So, before you ask me for help with installing or getting the networking to work (hint: networking should just work with no extra fuss), make sure you're actually using the ISO image linked later in this blog and not some other random one. The one I have was designed specifically for VirtualBox and it works.
The folks at Android-x86 have been making x86 builds of the Android OS for quite a while now, and none of this would be possible without them. They have ISO images for various versions of Android available, but most of them don't work very well in VirtualBox. For example, their "eeepc" image for Android 4.0 has issues with the audio drivers and the network (it has no Ethernet support built in, etc.)
So this means using one of the Android-x86 images from there won't get you too far because audio and networking won't work. Fortunately, somebody has put together an ISO image that's been custom tailored to VirtualBox.
I don't remember where I found this ISO image; if it's yours, leave me a comment and I'll edit this post. I found the ISO here: android-x86 VirtualBox/VMWare support (thanks @jakimfett!)
I have a copy of this ISO hosted here: android-x86-vm-20120130.iso (244MB). This ISO works much better.
Make sure you add the SATA Controller if it does not appear, when you setup the virtual box and then add the ISO image and virtual disk image to this.It worked for me as listed above (IDE CD drive, SATA hard disk), but this is something to keep in mind if you have any issues booting the CD or installing it to disk.
If you try and add the ISO image and virtual disk image to the IDE Controller this will not work at.
This information maybe useful to someone making this mistake.
Internet not working is often because the kernel has no driver for your NIC and / or you are in bridged mode(Update: 8/30/2013) This is a common question people have, is how does the Android VM's connection to the Internet work?
The AMD-PCnet is the standard for virtual drivers for VB and VMware - including the heavy iron VmWare ESX -- no matter what you have installed switch VB settings to the PCnet driver and use NAT -- IT WILL JUST WORK IF YOU DO! Native drivers often dont start until you open VB settings box - quirky -- use the de-facto standard PCNET NIC driver.
I'd refer you to the VirtualBox documentation about networking, but briefly: configure your guest OS's network to use NAT mode. This is the simplest way to do it.
What happens in NAT mode is, Android will boot up, see an imaginary router handing out IP addresses, and get one. And, it doesn't matter what your real life network layout looks like (whether your physical computer is connected to Ethernet, Wifi, a 4G LTE dongle, dial-up modem, VPN), the Android virtual machine will always think it's connected to Ethernet. So, questions of "how do I connect to my Wifi?" don't make any sense when you understand how VirtualBox (and most other virtualization systems) work. If your host computer has an Internet connection, the virtual machine should have it as well, automatically.
This may be a bit confusing for Android users though because Android typically doesn't use Ethernet. The lock screen in the Android VM will say "No Internet connection", and in your settings, Wifi will probably be turned off and resist turning on. Completely ignore both of these things. The VM is using Ethernet for its connection, so just try opening the web browser and point to kirsle.net or something and see if it loads.
The Escape key on your keyboard corresponds to the Back key in Android. The context menu key on your keyboard corresponds to the Menu button in Android (the context menu key is usually next to the right Windows key).
To power off the VM, press HostKey+H. This will cause Android to pop up the shutdown dialog that you'd expect on a real phone. You can also use the "Machine->Send Shutdown Signal" to do the same.
Update (9/3/2013): @DrDeve mentions how to get out of the lock screen when Android's Powersave kicks in:
OK, one more thing I forgot -- Powersave
For some darn reason you cant bring a VB ICS 4.0.4 build out of powersave (hybernation for my Windows friends) by clicking on the video screen.
So if your VM goes into lockscreen while you are playing a game or something, after stopping for about 2 min (time to lock is configuratble in Settigns)
You will need to press on the right menu key several times, once only shows a lockscreen "ping"
the menu key is the key between the right hand alt and Ctrl keys on most modern keyboards
You may notice that this Android VM doesn't include the Android Market, GMail, or Google Maps. These are some of the Google Apps and due to some licensing restrictions Android-x86 doesn't include them "out of the box".
On a real Android device that's been rooted and flashed with a custom ROM, you'd install the Google apps by flashing them in recovery mode. But you can't get into recovery mode on VirtualBox. Thus, the method for installing the Google Apps is kinda sketchy, but it works (and if you know of a better way, feel free to tell me).
You'll need a file with a name like "gapps-ics-20120304-signed.zip". These are the Google apps (the date part might be different). You can Google them, but I have a copy of them here to download too.
You don't really need the entire Google Apps file, actually. Just the "system" folder inside the zip file. Create a new tar file of the "system" folder so that it will be easy to get it into your Android device. I have a prepared "system.tar.gz" for you if you just want to use mine.
$ cd /sdcard/Download $ tar -xzvf system.tar.gz $ su # cd /sdcard/Download # cp -rf system/* /system/Pay special attention to the
cp -rfcommand. Make sure the slashes and *'s are in the right places.
Note: in my experience, the Market app will be somewhat unstable. When you start the app, it will Force Quit after 10 or 15 seconds. However, if you're fast enough you should be able to quickly search for a specific app you'd like and begin the download process before Market crashes, and the app will continue to download and install regardless.
I imagine that the unorthodox way of installing the Google Apps might be partly to blame for the Market being unstable. The other Google apps seem to work fine though.
The general steps are as follows. Substitute
1024x768 with whatever resolution you want. You can add multiple video modes by changing "CustomVideoMode1" to be "CustomVideoMode2", etc.
VBoxManage setextradata "Android ICS" "CustomVideoMode1" "1024x768x32"
UVESA_MODE=1024x768to the end of the boot arguments (make sure to hit Space first), and press Enter.
Update (9/3/2013): @DrDeve mentions in the comments:
If you install GRUB bootloader you can hit e to edit like you say, or a, then press space and type vga=ask then press enter.
a long list of VESA modes (and the color bits from 8-32) will be displayed. Not all will ork, so selecting one here, resetting the VM if it doesnt work BEFORE editing the config files may save you from bricking your new toy!
Each entry is a thre char hex value, follwed by the resolution, like 1024x768x32, etc.
Once you find a mode that works, THEN modify the config using the hex value that worked using the methods above.
You can als edit the GRUB menu.lst to add the value from the sceen above
- convert the hex value that worked to decimal (i.e. 360 becomes 864, etc).
- open terminal
- cd /mnt/grub
- vi menu.lst
- add vga=864 to the end of the line that startes with "kernel", or if one is there, modify it
- save the file by entering :wq
if you havent used vi before you might need a guide open beside you look here http://www.cs.colostate.edu/helpdocs/vi.html
Your mileage may vary.