| page.title=What is Android? |
| @jd:body |
| |
| <p>Android is a software stack for mobile devices that includes an operating |
| system, middleware and key applications. The <a |
| href="http://developer.android.com/sdk/index.html">Android SDK</a> |
| provides the tools and APIs necessary to begin developing applications on the |
| Android platform using the Java programming language.</p> |
| |
| <h2>Features</h2> |
| |
| <ul> |
| <li><strong>Application framework</strong> enabling reuse and replacement |
| of components</li> |
| <li><strong>Dalvik virtual machine</strong> optimized for mobile |
| devices</li> |
| <li><strong>Integrated browser</strong> based on the open source <a |
| href="http://webkit.org/">WebKit</a> engine </li> |
| <li><strong>Optimized graphics</strong> powered by a custom 2D graphics library; 3D |
| graphics based on the OpenGL ES 1.0 specification (hardware acceleration |
| optional)</li> |
| <li><strong>SQLite</strong> for structured data storage</li> |
| <li><strong>Media support</strong> for common audio, video, and still |
| image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, |
| GIF)</li> |
| <li><strong>GSM Telephony</strong> (hardware dependent)</li> |
| <li><strong>Bluetooth, EDGE, 3G, and WiFi</strong> (hardware dependent)</li> |
| <li><strong>Camera, GPS, compass, and accelerometer</strong> (hardware dependent)</li> |
| <li><strong>Rich development environment</strong> including a device |
| emulator, tools for debugging, memory and performance profiling, and a plugin for the Eclipse IDE</li> |
| </ul> |
| |
| <a name="os_architecture" id="os_architecture"></a> |
| <h2>Android Architecture</h2> |
| |
| <p>The following diagram shows the major components of the Android operating |
| system. Each section is described in more detail below.</p> |
| |
| <p><img src="{@docRoot}images/system-architecture.jpg" alt="Android System Architecture" width="713" height="512"></p> |
| |
| <a name="applications" id="applications"></a> |
| <h2>Applications</h2> |
| |
| <p>Android will ship with a set of core applications including an email |
| client, SMS program, calendar, maps, browser, contacts, and |
| others. All applications are written using the Java programming language.</p> |
| |
| <a name="application_framework" id="application_framework"></a> |
| <h2>Application Framework</h2> |
| |
| <p>By providing an open development platform, Android |
| offers developers the ability to build extremely rich and innovative |
| applications. Developers are free to take advantage of the |
| device hardware, access location information, run background services, set alarms, |
| add notifications to the status bar, and much, much more. </p> |
| |
| <p>Developers have full access to the same framework APIs used by the core |
| applications. The application architecture is designed to simplify the reuse |
| of components; any application can publish its capabilities and any other |
| application may then make use of those capabilities (subject to security |
| constraints enforced by the framework). This same mechanism allows components |
| to be replaced by the user.</p> |
| |
| <p>Underlying all applications is a set of services and systems, including: |
| <ul> |
| <li>A rich and extensible set of <a |
| href="{@docRoot}resources/tutorials/views/index.html">Views</a> that can be used to |
| build an application, including lists, grids, text boxes, buttons, and even |
| an embeddable web browser</li> |
| <li><a href="{@docRoot}guide/topics/providers/content-providers.html">Content |
| Providers</a> that enable applications to access data from other |
| applications (such as Contacts), or to share their own data</li> <li>A <a |
| href="{@docRoot}guide/topics/resources/resources-i18n.html">Resource |
| Manager</a>, providing access to non-code resources such as localized |
| strings, graphics, and layout files</li> |
| <li>A {@link android.app.NotificationManager Notification Manager} that enables |
| all applications to display custom alerts in the status bar</li> |
| <li>An {@link android.app.Activity Activity Manager} that manages the |
| lifecycle of applications and provides a common navigation backstack</li> |
| </ul> |
| |
| <p>For more details and a walkthrough of an application, see the <a |
| href="{@docRoot}resources/tutorials/notepad/index.html">Notepad Tutorial</a>.</p> |
| |
| <a name="libraries" id="libraries"></a> |
| <h2>Libraries</h2> |
| |
| <p>Android includes a set of C/C++ libraries used by various components of the |
| Android system. These capabilities are exposed to developers through the |
| Android application framework. Some of the core libraries are listed below:</p> |
| <ul> |
| <li><strong>System C library</strong> - a BSD-derived implementation of |
| the standard C system library (libc), tuned for embedded Linux-based |
| devices</li> |
| <li><strong>Media Libraries</strong> - based on PacketVideo's OpenCORE; |
| the libraries support playback and recording of many popular audio and video |
| formats, as well as static image files, including MPEG4, H.264, MP3, AAC, |
| AMR, JPG, and PNG</li> |
| <li><strong>Surface Manager</strong> - manages access to the display |
| subsystem and seamlessly composites 2D and 3D graphic layers from multiple |
| applications</li> |
| <li><strong>LibWebCore</strong> - a modern web browser engine which |
| powers both the Android browser and an embeddable web view</li> |
| <li><strong>SGL</strong> - the underlying 2D graphics |
| engine</li> |
| <li><strong>3D libraries</strong> - an implementation based on |
| OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration |
| (where available) or the included, highly optimized 3D software |
| rasterizer</li> |
| <li><strong>FreeType</strong> - bitmap and vector font rendering</li> |
| <li><strong>SQLite</strong> - a powerful and lightweight relational |
| database engine available to all applications</li> |
| </ul> |
| |
| <a name="runtime" id="runtime"></a> |
| |
| <h2>Android Runtime</h2> |
| |
| <p>Android includes a set of core libraries that provides most of |
| the functionality available in the core libraries of the Java programming |
| language.</p> |
| |
| <p>Every Android application runs in its own process, with its own instance of |
| the Dalvik virtual machine. Dalvik has been written so that a device can run |
| multiple VMs efficiently. The Dalvik VM executes files in the Dalvik |
| Executable (.dex) format which is optimized for minimal memory |
| footprint. The VM is register-based, and runs classes |
| compiled by a Java language compiler that have been transformed into the .dex |
| format by the included "dx" tool.</p> |
| |
| <p>The Dalvik VM relies on the Linux kernel for underlying functionality such |
| as threading and low-level memory management.</p> |
| |
| <a name="kernel" id="kernel"></a> |
| |
| <h2>Linux Kernel</h2> |
| |
| <p>Android relies on Linux version 2.6 for core system services such as |
| security, memory management, process management, network stack, and driver |
| model. The kernel also acts as an abstraction layer between the hardware and |
| the rest of the software stack.</p> |