The typical experience with the Android Emulator on Windows is that it is essentially unusable. But if you throw hardware acceleration into the mix then it becomes possible to get the emulator working quite well – well enough for everyday use.

The cause of the emulator’s lack of performance is due to it being implemented completely in software. However, Intel has a set of hardware accelerator drivers called HAXM for computer’s utilizing it’s chips. The caveat is that your Intel processor has to support Intel’s Virtualization Technology (VT) in order for the drivers to work. See this link – Microsoft® Hardware-Assisted Virtualization Detection Tool – to see if your system supports Intel’s VT.

Install HAXM

You can install HAXM through the Android SDK Manager (Within Eclipse, go to Window > Android SDK Manager and look for “Intel® Hardware Accelerated Execution Manager” under the Extras folder and install it) or via a separate download/install file. The following link describes both: Installation Instructions for Intel® Hardware Accelerated Execution Manager – Microsoft Windows*.

[EDIT 10/23/13] I recently bought a new laptop and proceeded to setup my android dev environment and had gotten to the point of installing HAXM. I went to the SDK Manager and selected HAXM from the bottom of the list and downloaded it. The SDK Manager indicated that HAXM was installed but it in fact was not – it was merely downloaded but not installed. I had to find where the installer was downloaded and install it manually. The file is downloaded to your “extras” folder which is somewhere within your Eclipse installation directory. I navigated to my Eclipse install folder and did a search for “extras” and quickly found the file. Here’s a screen cap:

haxm_install

You can see that the file you want to execute is IntelHaxm.exe.

I was then presented with this message during the HAXM install:

haxm_vt_disabled

When I clicked the OK button the install failed – the Intel VT must be enabled first before you can install HAXM.

While researching how to do this I came across a blog post that said some people’s Windows 8 machines would no longer detect USB devices after enableing VT. The fix that worked for that particular blogger (and others) was to disable fast boot. Not wanting to fall victim to this bug I went ahead and disabled that feature. If you are in Windows 8 and would like to do the same you can do so in Control Panel, under Power Settings, select the option of choosing what the power button does. Disable the “Fast Startup” option.

Anyway so now I have to enable VT which by the sound of it means that I have to boot into my system’s BIOS. You will have to search on how to do this for your particular machine, but for my Lenovo IdeaPad Y410p i just had to hold down the F2 button during bootup. Once I enabled VT in the bios and rebooted I was able to complete the HAXM install.

haxm_install_success

[/EDIT]

Create a HAXM-enabled AVD

Once HAXM is installed you’ll want to create a HAXM-enabled AVD, here’s the walk-through on how to do so.

Start Eclipse and select Window > Android Virtual Device Manager.

haxm_start_avd

The AVD Manager appears.

haxm_avd_3

Click “New” to create a new Virtual Device.

haxm_new_avd

The “New AVD” window is where you setup the AVD and specify that you want to use HAXM. Note that HAXM is only available for Android 4 and higher. If you set your Android Target to anything below then HAXM will not be available to you.

The first thing to do is to give your AVD a name. As this will be a HAXM accelerated AVD I personally like to use “HAXM” as part of the name. In this case I’ll call the project “my_tablet_HAXM” (note that spaces are not permitted thus the underscore characters in the name).

Next click the Device list and choose “10.1″ WXGA (Tablet)”. Immediately you will notice that many of the other fields have been filled in for you, as seen below:

haxm_new_avd_tablet

To use HAXM you must change the “CPU/ABI” field to “Intel Atom (x86) however you will see that the “CPU/ABI” field is greyed out. HAXM is only available on API level 15 (Android 4.0.3) and higher. Ours is currently set for something much lower so lets bump up the “Target” to 17 (Android 4.2). Now you can change the CPU value to x86.

haxm_choosex86_2

In memory options you can go as high as 1024MB of RAM. I’ve left it as is – half of that at 512 – feel free to go to 1024 but don’t exceed that number as you wont see any benefit.

In the “SD Card” section you will want to give your AVD some memory to store whatever it is your app might be doing – the default seems to be 9mb (if you don’t enter a value). I’m going to enter an arbitrary value of 16MB.

Next at the bottom are 2 options – “Snapshot” and “Use Host GPU”.

“Snapshot” retains the state of your application so that programs installed in one session carry over to the next thus behaving just like a real device. Otherwise whatever you install/configure will be cleared when you shut down the emulator.

“Use Host GPU” is the switch that enables hardware acceleration and utilizes the GPU to speed up screen rendering for Android 4.0.3 (API Level 15, revision 3) or higher. We’re using a target level of 17 so we meet that requirement. Note that as of API Level 17 GPU acceleration is experimental so if you encounter some oddness (i.e., screen flickering) its most likely due to your enabling HAXM for your AVD.

I’ve read that both Snapshot and the GPU can conflict in some way – regardless you likely want both. In this case I’ll forgo the use of Snapshot. Your new AVD should look like this:

haxm_new_avd_settings_ready

Click “Ok” and your new AVD is added to the AVD Manager. You now have this AVD available to you whenever you want to test your apps. If you like you can kick the tires to see how it performs by selecting the new AVD from the list and clicking the “Start” button.

haxm_start_new_avd_3

You’ll have some Launch Options appear, go ahead and skip the options by clicking the “Launch” button.

The Emulator starts…

haxm_avd_is_running

From here go ahead and play with things – there’s a marked improvement in performance.