Android is a package of software for many mobile devices that including an operating system, middleware and core applications. The Android SDK provides powerful tools and APIs necessary to start developing applications on the Android platform using the Java (also sometimes called GAVA = Google + jAVA) programming language.
The following chart shows the main components of the Android OS. Each part is described in details below.
- Application framework enabling reuse and replacement of components
- Powerful browser based on the open source WebKit engine (like Safari from Apple)
- Own virtual machine (called Dalvik) heavily optimized for mobile devices (CPU/RAM/Battery-Optimized)
- Optimized graphics powered by a custom 2D graphics library; 3D graphics based on the OpenGL ES 1.0 specification (hardware acceleration optional)
- Rich Media support for general-used video, audio, and image formats (MPEG4, AAC, H.264, MP3, AMR, PNG, JPG, GIF)
- GPS, VideoCamera, compass, and 3d-accelerometer (depending on hardware)
- SQLite for structured data storage
- Bluetooth, EDGE, 3G(UMTS), and WiFi/WLAN (depending on hardware)
- GSM Telephony (hardware dependent)
- Versatile development environment including a emulator startable with different resolutions, tools for debugging, memory and performance profiling, internet testing, and for the Eclipse IDE a plugin (ADT)
Android will come with a set of core applications including an usegul email client, a SMS app, a calendar, a maps-application, webbrowser, contacts-app, and many more. All appS are written using the Java programming language. (As first rumors say C/C++ is also possible!)
Developers have full access to the same framework APIs used by the core applications. The application architecture is designed to simplify the reusing of all components; any application can publish its capabilities to receive intents and any other application may make use of those capabilities (providing managable security constraints enforced by the framework). This same mechanism allows EVERY components to be replaced by the user.
Underlying all applications is a set of services and systems, including:
A rich and extensible set of ActivitiesViews that can be used to build an application, including grids, lists, textViews editTexts, Spinners, Buttons, an embeddable web browser and even an MapView which can be put into every app within very few lines of code.
Content Providers that enable applications to access data from other applications (such as Contacts), or to share their own data
A automatic Resource Manager, making non-code resources (graphics, accessible strings, and layout files) accessible from code.
A Notification Manager that enabling all applications to show custom alerts in the upper status bar.
An Activity Manager managing the life of each applications and providing a useful navigation backtrack.
For more details and a walkthrough of an application, see the Google-Articles on Writing an Android Application.
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:
- System C library - a BSD-derived implementation of the standard C system library (libc), tuned for embedded Linux-based devices
- Media Libraries - 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 MP3, AAC, AMR, MPEG4, H.264, JPG, and PNG
- SGL - the underlying 2D graphics engine
- FreeType - bitmap and vector font rendering
- 3D libraries - 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
- Surface Manager - manages access to the display subsystem and seamlessly composites 2D and 3D graphic layers from multiple applications
- SQLite - a powerful and lightweight relational database engine available to all applications
- LibWebCore - a modern web browser engine which powers both the Android browser and an embeddable web view
Android includes a set of core libraries that provides most of the functionality available in the core libraries of the Java programming language.
Every Android application runs in its own process given by the OS, and owns its own instance of the Dalvik virtual machine. Dalvik has been written so that a device can run multiple VMs efficiently. The Dalvik VM is executing files in the .dex (Dalvik Executable) format which was optimized for minimal cpu-and-memory-usage. The Virtual Machine is register-based, and runs classes compiled by a Java language compiler that have been transformed at compile-time into the .dex format using the "dx" tool, that are shipped with the SDK.
The Linux Kernel can run multiple instances of the Dalvik VM, also providing underlying functionality such as threads and lowest-level memory management.
Android relies on Linux (Kernel version 2.6) for core system services such as memory management, process management, network stack, security, and driver model. The core also acts as an hardware abstraction layer between the applications and all the hardware.