1 page.title=What is Android? 2 @jd:body 3 4 <p>Android is a software stack for mobile devices that includes an operating 5 system, middleware and key applications. The <a 6 href="http://developer.android.com/sdk/index.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>By providing an open development platform, Android 52 offers developers the ability to build extremely rich and innovative 53 applications. Developers are free to take advantage of the 54 device hardware, access location information, run background services, set alarms, 55 add notifications to the status bar, and much, much more. </p> 56 57 <p>Developers have full access to the same framework APIs used by the core 58 applications. The application architecture is designed to simplify the reuse 59 of components; any application can publish its capabilities and any other 60 application may then make use of those capabilities (subject to security 61 constraints enforced by the framework). This same mechanism allows components 62 to be replaced by the user.</p> 63 64 <p>Underlying all applications is a set of services and systems, including: 65 <ul> 66 <li>A rich and extensible set of <a 67 href="{@docRoot}resources/tutorials/views/index.html">Views</a> that can be used to 68 build an application, including lists, grids, text boxes, buttons, and even 69 an embeddable web browser</li> 70 <li><a href="{@docRoot}guide/topics/providers/content-providers.html">Content 71 Providers</a> that enable applications to access data from other 72 applications (such as Contacts), or to share their own data</li> <li>A <a 73 href="{@docRoot}guide/topics/resources/resources-i18n.html">Resource 74 Manager</a>, providing access to non-code resources such as localized 75 strings, graphics, and layout files</li> 76 <li>A {@link android.app.NotificationManager Notification Manager} that enables 77 all applications to display custom alerts in the status bar</li> 78 <li>An {@link android.app.Activity Activity Manager} that manages the 79 lifecycle of applications and provides a common navigation backstack</li> 80 </ul> 81 82 <p>For more details and a walkthrough of an application, see the <a 83 href="{@docRoot}resources/tutorials/notepad/index.html">Notepad Tutorial</a>.</p> 84 85 <a name="libraries" id="libraries"></a> 86 <h2>Libraries</h2> 87 88 <p>Android includes a set of C/C++ libraries used by various components of the 89 Android system. These capabilities are exposed to developers through the 90 Android application framework. Some of the core libraries are listed below:</p> 91 <ul> 92 <li><strong>System C library</strong> - a BSD-derived implementation of 93 the standard C system library (libc), tuned for embedded Linux-based 94 devices</li> 95 <li><strong>Media Libraries</strong> - based on PacketVideo's OpenCORE; 96 the libraries support playback and recording of many popular audio and video 97 formats, as well as static image files, including MPEG4, H.264, MP3, AAC, 98 AMR, JPG, and PNG</li> 99 <li><strong>Surface Manager</strong> - manages access to the display 100 subsystem and seamlessly composites 2D and 3D graphic layers from multiple 101 applications</li> 102 <li><strong>LibWebCore</strong> - a modern web browser engine which 103 powers both the Android browser and an embeddable web view</li> 104 <li><strong>SGL</strong> - the underlying 2D graphics 105 engine</li> 106 <li><strong>3D libraries</strong> - an implementation based on 107 OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration 108 (where available) or the included, highly optimized 3D software 109 rasterizer</li> 110 <li><strong>FreeType</strong> - bitmap and vector font rendering</li> 111 <li><strong>SQLite</strong> - a powerful and lightweight relational 112 database engine available to all applications</li> 113 </ul> 114 115 <a name="runtime" id="runtime"></a> 116 117 <h2>Android Runtime</h2> 118 119 <p>Android includes a set of core libraries that provides most of 120 the functionality available in the core libraries of the Java programming 121 language.</p> 122 123 <p>Every Android application runs in its own process, with its own instance of 124 the Dalvik virtual machine. Dalvik has been written so that a device can run 125 multiple VMs efficiently. The Dalvik VM executes files in the Dalvik 126 Executable (.dex) format which is optimized for minimal memory 127 footprint. The VM is register-based, and runs classes 128 compiled by a Java language compiler that have been transformed into the .dex 129 format by the included "dx" tool.</p> 130 131 <p>The Dalvik VM relies on the Linux kernel for underlying functionality such 132 as threading and low-level memory management.</p> 133 134 <a name="kernel" id="kernel"></a> 135 136 <h2>Linux Kernel</h2> 137 138 <p>Android relies on Linux version 2.6 for core system services such as 139 security, memory management, process management, network stack, and driver 140 model. The kernel also acts as an abstraction layer between the hardware and 141 the rest of the software stack.</p> 142