Android in Mobile
Mobile handsets are one of the world's largest, most valuable markets, and Android has been a huge success for Google, the handset makers, and makers of handset components. As you might expect, Google will concentrate on capitalizing on Android's success in mobile handsets.
There is another view of Android that arises from the people who make systems-on-a-chip, also known as SoCs. The ARM chip in your mobile handset is a kind of a SoC, and chip makers like Samsung and Qualcomm dominate that part of the SoC market. Android is obviously very important to them. But Samsung and Qualcomm are not the whole SoC business, and mobile handsets are not the only market for SoCs.
Hundreds of chip makers are licensees of the ARM CPU design. Dozens more make CPUs based on MIPS, PowerPC, and other SoC architectures. These chips go into everything that is microprocessor controlled: cars, TVs, appliances, industrial machines, network nodes, computer peripherals, medical devices, scientific instruments, security systems, environmental controls, infrastructure systems, and on and on.
While Google has only made some small steps outside mobile handsets with Google TV, the makers of SoCs and the users of SoCs have been paying close attention to Android since Android was introduced. This is due to the fact Android happens to solve a common set of problems across a wide range of uses of SoCs:
- Easy, inexpensive licensing without per-unit costs or lifecycle costs such as support contracts and license renewal
- Completeness: Everything from a large base of device drivers and protocols to user interface
- Good development tools
- Quick, highly productive product creation
- A long lifespan, to prevent having to maintain orphaned technologies
- Support from system integrators and a strong knowledge-base in the industry
Android meets all these criteria. Before Android, using Linux in embedded systems was commonplace, but none of the free Linux distributions had all the qualities listed above. For example, embedded UI systems like Qt Embedded, or MiniGUI, had to be licensed from commercial vendors. Alternatively, proprietary embedded systems like Wind River's VxWorks provided a complete system, tool chain, and 3rd-party ecosystem for SoC-based systems, but at the cost of a commercial license.
Wide Acceptance Among Suppliers and Customers
My involvement in Android stems from a project I led to create a handset operating system based on Linux for voice-over-IP (VoIP) products. I chose the MiniGUI graphics package, an open source Java implementation, and Linux as the principal components of that system. When Android appeared, it was obvious to us - and to our prospective customers - that Android would supplant other attempts to create a modern device software platform based on Linux.
A Modern Userland for Embedded Systems
Android created and/or coalesced all the major components needed for a wide range of embedded applications - especially those with a visual user interface - under one open platform with hassle-free licensing terms. Android's wide acceptance in mobile handsets means that every system integrator, every peripheral maker, and all other parts of the SoC ecosystem provide Android and/or Linux software support. Android, therefore, is poised to make large inroads in SoC-based systems outside of mobile handsets.
Android's user interface system is a large part of the attraction SoC-makers have to Android. Color touchscreen displays are declining in price to the point where, once a device needs a few buttons and a display, the manufacturer can greatly enhance the user experience with a color touch-panel at a cost similar to an old-fashioned monochrome LCD and a panel of physical buttons. This is already evident in the printers that use small color touchscreens for their user interface.
Android isn't just a UI system on top of Linux. Android is a comprehensive basis for an OS userland, including inter-process communication, multimedia, networking, account management, etc. What's very significant to people who want to learn Android programming is the fact that Android uses the same software framework for system software as for applications. To make a program for controlling a print server in Android, you would use the same software development tools as the developers of Angry Birds. When you learn Android application development, you are well on your way to knowing how to develop Android system software and to make deep modifications to the Android operating system.
You may be thinking that much the same could be said of iOS. That's true, but iOS isn't free, or even available, to makers of SoC-based systems. Android is uniquely well placed, and is already in the plans of those hundreds of chip makers and their tens of thousands of customers making things with SoCs. Windows Phone 7, WebOS, and Meego share many properties of Android, but are not yet on the radar of SoC makers and their customers, and some of these alternatives are impeded by licensing restrictions.
Developers and Embedded Android
The SoC makers and their customers will need software - lots of it - to make pumps and printers and cars and toasters and heart monitors and saws and washing machines present the right user interface on touch panels, and perform the right operations based on software written in Android's software framework. That software is going to be written in the Java language, but it will operate in the context of Android's unique architecture for modularity, inter-process communication, and resource management in small systems. Makers of SoC-based systems will need software for devices and purposes that range from small numbers of high-value systems in infrastructure or medical care to high-volume consumer products that will stretch Android's ability to fit in low-cost systems.
The story of Android in SoC-based systems is not just that of color and touch replacing buttons, lights, and monochrome LCDs. Android will bring better interaction, easier access to the functionality of systems, a reduction in user errors, and more communication with Internet-based services in these systems. There is a great deal of value to be added through improved interaction, control, and communication in many kinds of devices and systems.
In writing Programming Android, my co-authors and I kept in mind that knowledge about how Android works, and of Android's architecture, is useful to application developers, and that some application developers are going to become system software developers.