Android History – In July 2005, Google acquired Android, a small start-up company based in Palo Alto, Central America. Android’s co-founders who went to work at Google included Andy Rubin (co-founder of Danger), Rich Miner (co-founder of Wildfire), Nick Sears (once VP at T-Mobile) and Chris White (one of the first engineers at WebTV). At the time, little was known about the functions of Android other than they made software for mobile phones. This began rumors that Google was planning to enter the mobile phone market, although it was unclear at the time what function they might perform in that market.
At Google, the team, led by Rubin, developed a Linux-based mobile device OS which they were marketing to handset makers and carriers on the premise of providing a flexible, upgradeable system. It was reported that Google had already lined up a series of hardware component and software partners and signaled to carriers that it was open to various degrees of cooperation on their part.
In November 2007 Google announced the introduction of the Android platform, along with the Open Handset Alliance (a consortium of 71 hardware, software, and telecom companies devoted to advancing open standards for mobile devices. Google released most of the Android code under the Apache License, a free software and open source license), a group of hardware, software, and telecommunications companies that had agreed to participate in the development and distribution of the Android platform.
Introduction to Android OS
Android is an operating system for mobile devices such as cellular phones, tablet computers and net-books. It is based upon the Linux kernel and GNU software. According to NPD Group, unit sales for Android OS smart-phones ranked first among all smart-phone OS handsets sold in the U.S. in the second quarter of 2010, at 33%. BlackBerry OS is second at 28%, and iOS is ranked third with 22%.
Android has a large community of developers writing apps that extend the functionality of the devices. There are currently over 70,000 apps available for Android with some estimates saying 100,000 have been submitted, which makes it the second most popular mobile development environment. Developers write managed code in the Java language, controlling the device via Google-developed Java libraries. The latest update was Gingerbread based on Linux Kernel 2.6.33 or 34. Let’s start off by taking a look at the overall system architecture–the key layers and components that make up the Android stack. The following diagram shows the “20,000 foot” view of Android:
Starting at the bottom is the Linux Kernel. Android uses Linux for its device drivers, memory management, process management, and networking. However programming will never be done to this layer directly.
The next level contains the Android native libraries. They are all written in C/C++ internally, but will be called through Java interfaces. In this layer, the Surface Manager (for compositing windows), 2D and 3D graphics, Media codecs (MPEG-4, H.264, MP3, etc.), the SQL database (SQLite), and a native web browser engine (WebKit) can be found.
Next is the Android runtime, including the Dalvik Virtual Machine. Dalvik runs dex files, which are converted at compile time from standard class and jar files. Dex files are more compact and efficient than class files, which is an important consideration for the limited memory and battery powered devices that Android targets.
The core Java libraries are also part of the Android runtime. They are written in Java, as is everything above this layer. Here, Android provides a substantial subset of the Java 5 Standard Edition packages, including Collections, I/O, and so forth.
The next level up is the Application Framework layer. Parts of this toolkit are provided by Google, and parts are extensions or services that we write. The most important component of the framework is the Activity Manager, which manages the life cycle of applications.
Finally, the top layer is the Applications layer. Most of the code will live here, alongside built-in applications such as the Phone and Web Browser.
One of the unique and powerful qualities of Android is that all applications have a level playing field. What I mean is that the applications Google writes have to go through the same public API that you use. You can even tell Android to make your application replace the standard applications if you like.
Key features of the Android OS
App Fundamentals – All the apps are written in the java programming language. In many ways, each Android application lives in its own world-
- By default, every application runs in its own Linux process. Android starts the process when any of the application’s code needs to be executed, and shuts down the process when it’s no longer needed and system resources are required by other applications.
- Each process has its own virtual machine (VM), so application code runs in isolation from the code of all other applications.
- By default, each application is assigned a unique Linux user ID. Permissions are set so that the application’s files are visible only to that user and only to the application itself — although there are ways to export them to other applications as well.
It’s possible to arrange for two applications to share the same user ID, in which case they will be able to see each others files. To conserve system resources, applications with the same ID can also arrange to run in the same Linux process, sharing the same VM.
A central feature of Android is that one application can make use of elements of other applications (provided those applications permit it). For example, if your application needs to display a scrolling list of images and another application has developed a suitable scroller and made it available to others, you can call upon that scroller to do the work, rather than develop your own. Your application doesn’t incorporate the code of the other application or link to it. Rather, it simply starts up that piece of the other application when the need arises.
For this to work, the system must be able to start an application process when any part of it is needed, and instantiate the Java objects for that part. Therefore, unlike applications on most other systems, Android applications don’t have a single entry point for everything in the application (no main() function, for example). Rather, they have essential components that the system can instantiate and run as needed.
Bluetooth Data Transfer – The Android platform includes support for the Bluetooth network stack, which allows a device to wirelessly exchange data with other Bluetooth devices. The application framework provides access to the Bluetooth functionality through the Android Bluetooth APIs. These APIs let applications wirelessly connect to other Bluetooth devices, enabling point-to-point and multipoint wireless features. Using the Bluetooth APIs, an Android application can perform the following:
- Scan for other Bluetooth devices
- Query the local Bluetooth adapter for paired Bluetooth devices
- Establish RFCOMM channels
- Connect to other devices through service discovery
- Transfer data to and from other devices
- Manage multiple connections
Application Widgets – App Widgets are miniature application views that can be embedded in other applications (such as the Home screen) and receive periodic updates. These views are referred to as Widgets in the user interface, and you can publish one with an App Widget provider. An application component that is able to hold other App Widgets is called an App Widget host.
Data Storage- Android provides several options for you to save persistent application data. The solution you choose depends on your specific needs, such as whether the data should be private to your application or accessible to other applications (and the user) and how much space your data requires.Your data storage options are the following:
- Shared Preferences- Store private primitive data in key-value pairs.
- Internal Storage- Store private data on the device memory.
- External Storage- Store public data on the shared external storage.
- SQLite Databases- Store structured data in a private database.
- Network Connection- Store data on the web with your own network server.
Android provides a way for you to expose even your private data to other applications — with a content provider. A content provider is an optional component that exposes read/write access to your application data, subject to whatever restrictions you want to impose.
Search Features – Search is a core user feature on Android. Users should be able to search any data that is available to them, whether the content is located on the device or the Internet. The search experience should be seamless and consistent across the entire system, which is why Android provides a search framework to help you provide users with a familiar search dialog and a great search experience.
Android’s search framework provides a user interface in which users can perform a search and an interaction layer that communicates with your application, so you don’t have to build your own search Activity. Instead, a search dialog appears at the top of the screen at the user’s command without interrupting the current Activity.
The search framework manages the life of the search dialog. When users execute a search, the search framework passes the query text to your application so your application can perform a search. Once your application is set up to use the search dialog, you can:
- Enable voice search
- Provide search suggestions based on recent user queries
- Provide custom search suggestions that match actual results in your application data
- Offer your application’s search suggestions in the system-wide Quick Search Box
Support for multiple displays – Android is designed to run on a variety of devices that offer a range of screen sizes and resolutions. For applications, the platform provides a consistent environment across devices and handles much of the complexity of adapting an application’s UI to the screen on which it is being displayed. At the same time, the platform exposes APIs that give application developers precise control over their application’s UI when displayed on specific screen sizes and resolutions. It also supports multiple media formats.
Sophisticated Apps - It’s hard to cover all the great apps, as there are plenty out there. I shall describe the Maps app in detail. The map rendering facility on Android device is similar to Google Earth.
- MapActivity to handle creation, loading, streaming and event handling
- MapView to display a map as a component
- MapController to navigate between map locations
- Overlays used to display additional graphics as layers on top of a map
- Locations on a map specified using the Geo-URI (Uniform Resource Identifier) standard – not fully supported
- Specify latitude and longitude as a Point, translate this on map using the PixelCalculator class
There are other fascinating applications like the one shown below which depicts weather conditions.
Android is designed to run on many different types of devices. For developers, the range and number of devices means a huge potential audience: the more devices that run Android apps, the more users who can access your app. In exchange, however, it also means that your apps will have to cope with that same variety of hardware.
Fortunately, Android has built-in tools and support that make it easy for your apps to do that, while at the same time letting you maintain control of what types of devices your app is available to. With a bit of forethought and some minor changes in your app’s manifest file, you can ensure that users whose devices can’t run your app will never see it in the Android Market, and will not get in trouble by downloading it.
Some other great features of Android OS
- The platform is adaptable to larger, VGA, 2D graphics library, 3D graphics library based on OpenGL ES 2.0 specifications, and traditional smartphone layouts.
- SQLite, a lightweight relational database, is used for data storage purposes
- Android supports connectivity technologies including GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, Wi-Fi, and WiMAX.
- SMS and MMS are available forms of messaging, including threaded text messaging and now Android Cloud to Device Messaging Framework (C2DM) is also a part of Android Push Messaging service.
- Android supports the following audio/video/still media formats: H.263, H.264 (in 3GP or MP4 container), MPEG-4 SP, AMR,AMR-WB (in 3GP container), AAC, HE-AAC (in MP4 or 3GP container), MP3, MIDI, Ogg Vorbis, WAV, JPEG, PNG, GIF,BMP
- Android can use video/still cameras, touchscreens, GPS, accelerometers, gyroscopes, magnetometers, proximity and pressure sensors, thermometers, accelerated 2D bit blits (with hardware orientation, scaling, pixel format conversion) and accelerated 3D graphics.
- Includes a device emulator, tools for debugging, memory and performance profiling.
- Android has native support for multi-touch.
The features I explained above clearly illustrate reasons for Android being the best mobile OS to date. The next android software update called HoneyComb is slated for release in 2011.