The Android Open Source Project | 54b6cfa | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 1 | page.title=What is Android? |
| 2 | @jd:body |
| 3 | |
| 4 | <p>Android is a software stack for mobile devices that includes an operating |
The Android Open Source Project | d24b818 | 2009-02-10 15:44:00 -0800 | [diff] [blame] | 5 | system, middleware and key applications. The <a |
The Android Open Source Project | 54b6cfa | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 6 | href="http://code.google.com/android/download.html">Android SDK</a> |
| 7 | provides the tools and APIs necessary to begin developing applications on the |
| 8 | Android platform using the Java programming language.</p> |
| 9 | |
| 10 | <h2>Features</h2> |
| 11 | |
| 12 | <ul> |
| 13 | <li><strong>Application framework</strong> enabling reuse and replacement |
| 14 | of components</li> |
| 15 | <li><strong>Dalvik virtual machine</strong> optimized for mobile |
| 16 | devices</li> |
| 17 | <li><strong>Integrated browser</strong> based on the open source <a |
| 18 | href="http://webkit.org/">WebKit</a> engine </li> |
| 19 | <li><strong>Optimized graphics</strong> powered by a custom 2D graphics library; 3D |
| 20 | graphics based on the OpenGL ES 1.0 specification (hardware acceleration |
| 21 | optional)</li> |
| 22 | <li><strong>SQLite</strong> for structured data storage</li> |
| 23 | <li><strong>Media support</strong> for common audio, video, and still |
| 24 | image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, |
| 25 | GIF)</li> |
| 26 | <li><strong>GSM Telephony</strong> (hardware dependent)</li> |
| 27 | <li><strong>Bluetooth, EDGE, 3G, and WiFi</strong> (hardware dependent)</li> |
| 28 | <li><strong>Camera, GPS, compass, and accelerometer</strong> (hardware dependent)</li> |
| 29 | <li><strong>Rich development environment</strong> including a device |
| 30 | emulator, tools for debugging, memory and performance profiling, and a plugin for the Eclipse IDE</li> |
| 31 | </ul> |
| 32 | |
| 33 | <a name="os_architecture" id="os_architecture"></a> |
| 34 | <h2>Android Architecture</h2> |
| 35 | |
| 36 | <p>The following diagram shows the major components of the Android operating |
| 37 | system. Each section is described in more detail below.</p> |
| 38 | |
| 39 | <p><img src="{@docRoot}images/system-architecture.jpg" alt="Android System Architecture" width="713" height="512"></p> |
| 40 | |
| 41 | <a name="applications" id="applications"></a> |
| 42 | <h2>Applications</h2> |
| 43 | |
| 44 | <p>Android will ship with a set of core applications including an email |
| 45 | client, SMS program, calendar, maps, browser, contacts, and |
| 46 | others. All applications are written using the Java programming language.</p> |
| 47 | |
| 48 | <a name="application_framework" id="application_framework"></a> |
| 49 | <h2>Application Framework</h2> |
| 50 | |
| 51 | <p>Developers have full access to the same framework APIs used by the core |
| 52 | applications. The application architecture is designed to simplify the reuse |
| 53 | of components; any application can publish its capabilities and any other |
| 54 | application may then make use of those capabilities (subject to security |
| 55 | constraints enforced by the framework). This same mechanism allows components |
| 56 | to be replaced by the user.</p> |
| 57 | |
| 58 | <p>Underlying all applications is a set of services and systems, including: |
| 59 | <ul> |
| 60 | <li>A rich and extensible set of <a |
The Android Open Source Project | f013e1a | 2008-12-17 18:05:43 -0800 | [diff] [blame] | 61 | href="{@docRoot}guide/tutorials/views/index.html">Views</a> that can be used to |
The Android Open Source Project | 54b6cfa | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 62 | build an application, including lists, grids, text boxes, buttons, and even |
| 63 | an embeddable web browser</li> |
The Android Open Source Project | f013e1a | 2008-12-17 18:05:43 -0800 | [diff] [blame] | 64 | <li><a href="{@docRoot}guide/topics/providers/content-providers.html">Content |
The Android Open Source Project | 54b6cfa | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 65 | Providers</a> that enable applications to access data from other |
The Android Open Source Project | f013e1a | 2008-12-17 18:05:43 -0800 | [diff] [blame] | 66 | applications (such as Contacts), or to share their own data</li> <li>A <a |
| 67 | href="{@docRoot}guide/topics/resources/resources-i18n.html">Resource |
| 68 | Manager</a>, providing access to non-code resources such as localized |
| 69 | strings, graphics, and layout files</li> |
The Android Open Source Project | 54b6cfa | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 70 | <li>A {@link android.app.NotificationManager Notification Manager} that enables |
| 71 | all applications to display custom alerts in the status bar</li> |
| 72 | <li>An {@link android.app.Activity Activity Manager} that manages the |
The Android Open Source Project | f013e1a | 2008-12-17 18:05:43 -0800 | [diff] [blame] | 73 | lifecycle of applications and provides a common navigation backstack</li> |
The Android Open Source Project | 54b6cfa | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 74 | </ul> |
| 75 | |
The Android Open Source Project | f013e1a | 2008-12-17 18:05:43 -0800 | [diff] [blame] | 76 | <p>For more details and a walkthrough of an application, see the <a |
| 77 | href="{@docRoot}guide/tutorials/notepad/index.html">Notepad Tutorial</a>.</p> |
The Android Open Source Project | 54b6cfa | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 78 | |
| 79 | <a name="libraries" id="libraries"></a> |
| 80 | <h2>Libraries</h2> |
| 81 | |
| 82 | <p>Android includes a set of C/C++ libraries used by various components of the |
| 83 | Android system. These capabilities are exposed to developers through the |
| 84 | Android application framework. Some of the core libraries are listed below:</p> |
| 85 | <ul> |
| 86 | <li><strong>System C library</strong> - a BSD-derived implementation of |
| 87 | the standard C system library (libc), tuned for embedded Linux-based |
| 88 | devices</li> |
| 89 | <li><strong>Media Libraries</strong> - based on PacketVideo's OpenCORE; |
| 90 | the libraries support playback and recording of many popular audio and video |
| 91 | formats, as well as static image files, including MPEG4, H.264, MP3, AAC, |
| 92 | AMR, JPG, and PNG</li> |
| 93 | <li><strong>Surface Manager</strong> - manages access to the display |
| 94 | subsystem and seamlessly composites 2D and 3D graphic layers from multiple |
| 95 | applications</li> |
| 96 | <li><strong>LibWebCore</strong> - a modern web browser engine which |
| 97 | powers both the Android browser and an embeddable web view</li> |
| 98 | <li><strong>SGL</strong> - the underlying 2D graphics |
| 99 | engine</li> |
| 100 | <li><strong>3D libraries</strong> - an implementation based on |
| 101 | OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration |
| 102 | (where available) or the included, highly optimized 3D software |
| 103 | rasterizer</li> |
| 104 | <li><strong>FreeType</strong> - bitmap and vector font rendering</li> |
| 105 | <li><strong>SQLite</strong> - a powerful and lightweight relational |
| 106 | database engine available to all applications</li> |
| 107 | </ul> |
| 108 | |
| 109 | <a name="runtime" id="runtime"></a> |
| 110 | |
| 111 | <h2>Android Runtime</h2> |
| 112 | |
| 113 | <p>Android includes a set of core libraries that provides most of |
| 114 | the functionality available in the core libraries of the Java programming |
| 115 | language.</p> |
| 116 | |
| 117 | <p>Every Android application runs in its own process, with its own instance of |
| 118 | the Dalvik virtual machine. Dalvik has been written so that a device can run |
| 119 | multiple VMs efficiently. The Dalvik VM executes files in the Dalvik |
| 120 | Executable (.dex) format which is optimized for minimal memory |
| 121 | footprint. The VM is register-based, and runs classes |
| 122 | compiled by a Java language compiler that have been transformed into the .dex |
| 123 | format by the included "dx" tool.</p> |
| 124 | |
| 125 | <p>The Dalvik VM relies on the Linux kernel for underlying functionality such |
| 126 | as threading and low-level memory management.</p> |
| 127 | |
| 128 | <a name="kernel" id="kernel"></a> |
| 129 | |
| 130 | <h2>Linux Kernel</h2> |
| 131 | |
| 132 | <p>Android relies on Linux version 2.6 for core system services such as |
| 133 | security, memory management, process management, network stack, and driver |
| 134 | model. The kernel also acts as an abstraction layer between the hardware and |
| 135 | the rest of the software stack.</p> |