When Google released Android, the intent was to have an open software environment that would allow application developers to build end user apps without any concern for the underlying processor architecture. Google wanted to create an operating system and app environment that would always be able to run transparently on a range of hardware. Consequently, Android has always run on all major processor architectures and this portability goal continues to be core to Android. Android is the only mobile operating system that runs equally well on MIPS, Intel and ARM architecture processors, while preserving the same look and feel, plus application environment, for end users.
However, early in Android’s evolution, application processors and associated graphics processors in mobile devices had relatively low performance compared to those in PCs and Macs. While that has subsequently changed, in order to initially meet the need for application developers to build, or port, any application that required significant performance, it was necessary for Google to provide a Native Development Kit (NDK) that allowed native instructions to be mixed with Java code segments and thus avoid the Dalvik overhead in critical code paths. Thus, in spite of the attractive goals of portability, when it came to key, high-performance apps such as games, developers turned to the use of native instruction streams, thereby limiting their apps to essentially run on only a single processor architecture.