User:Eric Clevinger/Sandbox/droiddraft

MY DRAFT ARTICLE!!!

Android is the name of an open software platform for mobile smartphone development. The Android project is a collaborative effort of the Open Handset Alliance. It includes an operating system, middleware, and critical applications. Android was built from the ground-up to enable developers to create compelling mobile applications that take full advantage of all a handset has to offer. It is built to be truly open. For example, an application could call upon any of the phone's core functionality such as making calls, sending text messages, or using the camera, allowing developers to create richer and more cohesive experiences for users. Android is built on the open Linux Kernel. Furthermore, it utilizes a custom virtual machine called 'Dalvik' that has been designed to optimize memory and hardware resources in a mobile environment. Android will be open source; it can be liberally extended to incorporate new cutting edge technologies as they emerge. The platform will continue to evolve as the developer community works together to build innovative mobile applications.

Features
Android has a complete set of application programming interfaces available for everything from user-interface components to accessing location information. The goal is to allow for new and innovative applications that either can't be done on existing platforms or simply haven't been allowed. This openness extends beyond simply providing access to the data on the handset. Included applications can be customized or even replaced entirely. For example, a corporation could replace the messaging application with one that only allowed secure messaging through the company's servers or a user could replace the included photo viewer with one of their choosing.

The Android APIs are extensive and modern. In addition to the typical APIs for screen drawing, user input, and network access, you'll find APIs for storage, media, graphics, and even direct hardware access. Media APIs are available for both playback and recording of audio, video, and still images. For storage, developers aren't limited to file-based APIs. SQLite is available for relational data storage, a preferences API is available for simple setting storage, and applications can extend the data storage mechanisms available. OpenGL ES, with optional hardware acceleration, is available for 3D graphics applications. Lastly, there will be a set of low-level APIs for direct access to the hardware, such as WiFi or Bluetooth. Most mobile platforms don't allow low-level access to the hardware, but Android allows developers to extend the hardware on a given handset. For instance, it might be possible to add support for Bluetooth profiles that weren't provided out-of-the-box.

Security is essential with such an open development environment. Therefore, a tight security model is built into Android. Applications are only granted required permissions (data access, APIs used, and so forth) at installation time and cannot change their permissions later. So, an application can't remotely add a new feature to, say, read a user's location with or without the user's permission. This is a big step towards preventing malware and easing privacy and safety concerns for users of the platform.

HIGHLIGHTS

 * Video showcase of the Android features : Android Demo
 * Application framework enabling reuse and replacement of components
 * Dalvik virtual machine optimized for mobile devices
 * Integrated browser based on the open source WebKit engine
 * Optimized graphics powered by a custom 2D graphics library; 3D graphics based on the OpenGL ES 1.0 specification (hardware acceleration optional)
 * SQLite for structured data storage
 * Media support for common audio, video, and still image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
 * GSM Telephony (hardware dependent)
 * Bluetooth, EDGE, 3G, and WiFi (hardware dependent)
 * Camera, GPS, compass, and accelerometer (hardware dependent)
 * Rich development environment including a device emulator, tools for debugging, memory and performance profiling, and a plugin for the Eclipse IDE

Developing Applications
Applications for Android can be developed using a Java-based Android SDK. The SDK or Software Development Kit has detailed instructions - right from installing the Androind plugin for your eclipse development environment to creating complicated applications that exploit powerful Google APIs. Applications will be supported on a wide range of phones, right from a regular 12 key mobile to a high end touch sensitive device.

Android Application Design Philosophy
Android, being a mobile platform and a product that was nurtured by Google, puts primary emphasis on user experience. According to the Android philosophy an outstanding mobile user experience is one that is fast, responsive and seamless. Detailed descriptions of these three rubrics that measure the excellence of an Android application can be found here. However, as any developer can gather from his/her experiences - one must learn how a tool CAN be used before he/she learns how it SHOULD be used. Therefore in the section that follows there is a very brief introduction to the anatomy of an Android application.

Building Blocks of an Application
An Android application is a combination of any or all of the following base classes: Very briefly, an Activity in Android terminology usually means a single screen in an application. For example, the first screen with a list of contact names and numbers on your phone would be an Activity. The second block - Intent Receiver - is related to the concept of an Intent. An Intent is any action the user takes to nagivate between the screens of your application. VIEW, PICK, EDIT are all examples of actions that would qualify for Intent.
 * Activity
 * Intent Receiver
 * Service
 * Content Provider

A Service is quite like the media player the user may invoke but once he/she does so and navigates to a different screen the music (or in this case, the Service) shouldn't stop. Last but not least the Content Provider block makes it possible for different applications to access the same data - standardized methods of storage and retrieval. This was an oversimplification of the Android application model and interested readers should definitely visit: Android Innards for more information. One of the major advantages of the Android platform is the ease of development and a very good demonstration of that can be found in the following Hello World link.

Motivation
According to Andy Rubin, Google's Director of mobile platforms, Android is an attempt to accelerate innovation in the mobile world by incorporating ideas from the advancement of the internet. The goal of Android is to provide an open handset platform with which developers can create their own applications. Although Google's official position about subsidizing the cost of Android handsets by putting ads all over wireless is, "...thats crazy. The economics don't work.." . Critics view the development as an opportunity to expand their (Google's) internet advertising market to mobile internet devices. According to the critics, creating a platform, free to cell phone companies, will rapidly increase the demand for mobile internet advertising. Google also hopes to cripple the products of competitors, like Microsoft's Windows Mobile. All speculation and hidden agendas aside, it is safe to say that Android is a new stage in the evolution of the smartphone - the balance of power has been shifted from the producer to the consumer.

Android vs. iPhone
Put in very simplistic terms, the battle between Android and the iPhone is similar to the one between Linux and Windows - at least from an open source vs. proprietary software perspective. However, the fact that the Android vs. iPhone debate is set in the mobile arena changes things considerably. Without going into the nuances of how future mobile telecommunication policy (700Mhz auction) is going to affect Android and the iPhone, we can take a look at how the Android phones might have an upper hand on the iPhone from a software perspective. According to an article recently published in Network World, the major drawback of the iPhone Software Development Kit is a "..nice" yet "..constrained" framework. The article points out that Apple not only gets to pick and choose which applications it will sell in its AppStore, but also prevents developers from making applications that modify or compete with existing iPhone applications, such as Web browsers. Another obvious but important point to make about the iPhone is, the OS runs on only one device. Android on the other hand is expected to be used on a wide array of devices ranging from 12 key feature phones, to high end Smartphones. Vice President Mobile Platforms for Google, Rich Minor, adds that there are specific applications that just can't be written for the iPhone - "..they [Apple] don't let you do multiprocess things, they don't allow your applications to run in the background, you can't have interpreted languages (here he is referring to the fact that applications for the iPhone can only be written in Objective C)." Android is not bullet proof either - where the openess of the operating system gives us freedom, the variability of its use on different devices leaves us with endless possibilities of bugs and security issues. Essentially, a good part of Google's (and in effect the Open Handset Alliance's) success with Android will depend on "...making the platform and programming language behave universally on a variety of devices, thus cutting down the work programmers have to do to get their products to market."

Possible Shortcomings
There has been no formal announcement of any traditional application store (along the lines of the iTunes store) for developers to distribute their applications. Without a shared distribution channel, small developers or those who wish to distribute free applications may have a much harder time getting the distribution they would like. There is also the possibility that operators will create their own application stores and enforce their own rules, leading to a closed distribution environment.

Android is a very flexible platform for handset manufacturers and wireless operators alike. It is also very flexible for custom use within enterprises of all sizes. Unfortunately, this flexibility comes at a cost, much of which falls on the developer. Not all Android handsets will have the same features or capabilities, support the same APIs, or have the same hardware specifications.This device fragmentation is common on other mobile platforms, though, and is seen as largely unavoidable in today's market.

Why does Google want Android?
Possible reason 1: Google thought Microsoft had beat it to mobile—it had a quickly growing platform, tied to Microsoft's ends. Google, on the other hand, was having its applications (such as mobile Picasa) shot down by carriers who wanted to charge users to do the same thing Google offered for free, and who wanted to create a niche in the mobile internet market where they had no presence. But Android, being web centric, may give Google an edge.

Possible reason 2: The 700 MHZ Band was up for Sale. And Google saw this as a chance. Verizon and AT&T were the leading bidders but the perception in the industry was that, after winning the bid, they would simply keep it unutilized. That’s the reason Google pushed for one of the bands, not so much with an intention of buying it. But by promising the FCC $4.6 billion for the band C, Google was able to enforce upon FCC to make the band an open network.

Possible conclusion: Why would Google want to a have an open network? Because then they would not have to pay any royalty for providing services over networks which, today, are restricted by the telecom service providers who overcharge customers for providing various mobile web services. That would also result in a more competitive mobile internet business than the largely closed system available today.

Other Open Source Mobile Operating Systems

 * Nokia Symbian OS
 * LiMo
 * Openmoko