A friend of mine pointed me to this article, a well-written guide that describes the process of creating an x86 VM that can run Android, in an attempt to provide a faster execution environment for development.

While the title of the article, How to speed up the Android Emulator, is somewhat misleading, the author does dedicate a section to explain why an x86 VM easily outperforms the de-facto Android Emulator:

…[The] Android Emulator emulates a real ARM processor on top of an x86 processor. This is a lot of overhead.

At least for quick test and demonstration purposes, I don’t need to emulate an ARM processor, I just need to be able to run Android and my application.

He makes a good point: emulating a full ARM-based machine on top of an x86 architecture is certainly expensive, and the performance loss is immediately evident to anyone that uses the emulator.

However, it’s important to understand that, by using this approach, we’re not actually speeding up the emulator, we’re replacing it with a simulator. It is not the same. The execution environment will behave similary, but it won’t be a ground-up sandboxed reproduction of the actual thing. It’s impossible (to my knowledge, at least) to predict if and where differences will emerge during the development of an application, but the risk does exist. You may end up fixing something that is not really broken, or satisfied at the look and feel of something that will behave differently when deployed.

It all boils down to a classic emulation dilemma: performance vs. fidelity. As long as you can afford the performance loss, it’s always good for the emulation to reproduce the real environment as accurately as possible.

The choice is, I think, entirely personal. I don’t feel the Android Emulator is slow enough to justify the introduction of this additional concern, but that’s just me. The day may come when I really need an extra performance boost to test out a feature, but for now, I’ll stick with the emulator. If you choose instead to use an x86 VM for development, however, do keep in mind that you’re not speeding up the emulator, you’re eliminating one of the abstraction layers, and loosing accuracy in the process.

Summing up, both choices have merits and flaws. The decision is personal. Just make sure you understand it.