Android was developed initially as an operating system for smartphones, but now it is popping up in other devices such as netbooks, sat nav and ereaders, not to mention development boards like the ubiquitous Beagleboard. So, why would you choose Android over any other version of embedded Linux? I think it comes down to critical mass. Android is a known quantity, promoted by a well-known and wealthy organisation which creates a standard platform where non existed before. Whereas each implementation of Linux on an embedded device is (more or less) unique, implementations of Android are going to be (more or less) the same.
My comments below are based on the source code available from http://source.android.com and specifically version 2.2 (Froyo).
Here are some reasons why you might want to use Android
- It's open source, so it is free to use and you are free to modify and re-distribute the source code. Most of the code is licensed under the Apache 2.0 license, which is more permissive than the GPL, which is some people feel is important. The main exception here is the kernel, which is Linux and therefore licensed under the GPL v2
- It is actively developed by a teams funded by Google and others, with rapid addition of features (4 releases in the last 12 months)
- There is a rich application framework and high-level tools for writing applications in Java and compiling them to run on the Dalvik VM. Dalvik is free of license requirements, unlike Java ME
- > 100,000 Android apps available. Though to be frank, not many of them would not be all that useful on anything other than a smartphone
- Tool-chains for ARM and SH4 are part of the download from source.android.com
- It also includes an emulator so you can write and test code without having the hardware
- And, there are good, well-documented development tools, including the ADT plug-ins for Eclipse and the adb debug tool
- It has excellent power management leading to long battery life for portable equipment
- It has support for SGL (2 D graphics) and OpenGL/ES (3D graphics) and works with accelerated graphic hardware where available
- There is out-of-the-box support for touch screens, wifi, bluetooth, cameras, audio and more
And, here are some reasons why you might not want to use Android
- You are not working on ARM devices. While there is support for SH4 and MIPS from various places, ARM is the main architecture
- There is no Android kernel for your platform: if you still want to use Android you will have to port the patches yourself
- Your applications are written mostly in C/C++ using POSIX APIs: the Android C/C++ libraries support only a subset of POSIX C APIs and C++ classes
- You have applications written in C/C++ that require libraries that are not part of the base Android system. If you do you'll have to cross compile them yourself
- You have code written for Java SE or Java ME: the Android classes do not include much of SE/ME
- You are doing real-time stuff
In summary, while I think Android has a few drawbacks, including a wilful disregard for doing things “the Linux way” (take a look at the layout of the root file system to see what I mean), I think there are sufficient positives to make developers want to deploy it on new devices. Expect to see it on medical and test equipment, set-top boxes, in-car entertainment or indeed more or less anything with a (touch)screen.