1page.title=App Framework 2@jd:body 3 4<p>Android is a software stack for mobile devices that includes an operating 5system, middleware and key applications. The <a 6href="http://developer.android.com/sdk/index.html">Android SDK</a> 7provides the tools and APIs necessary to begin developing applications on the 8Android 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 37system. 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 45client, SMS program, calendar, maps, browser, contacts, and 46others. 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 52offers developers the ability to build extremely rich and innovative 53applications. Developers are free to take advantage of the 54device hardware, access location information, run background services, set alarms, 55add 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 58applications. The application architecture is designed to simplify the reuse 59of components; any application can publish its capabilities and any other 60application may then make use of those capabilities (subject to security 61constraints enforced by the framework). This same mechanism allows components 62to 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 83href="{@docRoot}training/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 89Android system. These capabilities are exposed to developers through the 90Android 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 120the functionality available in the core libraries of the Java programming 121language.</p> 122 123<p>Every Android application runs in its own process, with its own instance of 124the Dalvik virtual machine. Dalvik has been written so that a device can run 125multiple VMs efficiently. The Dalvik VM executes files in the Dalvik 126Executable (.dex) format which is optimized for minimal memory 127footprint. The VM is register-based, and runs classes 128compiled by a Java language compiler that have been transformed into the .dex 129format by the included "dx" tool.</p> 130 131<p>The Dalvik VM relies on the Linux kernel for underlying functionality such 132as 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 139security, memory management, process management, network stack, and driver 140model. The kernel also acts as an abstraction layer between the hardware and 141the rest of the software stack.</p> 142