Following the Android Developers's Guide definition, Android represents a software stack, that is a set of software subsystems needed to create a fully functional solutions, at the first place for mobile devices.
The Android stack includes an operation system (Android OS is modified version of the Linux kernel), middleware partly based on Java (software which purpose is to connect the low-level operating system to high-level applications) and key applications written in Java programming language (i.e. internet browser or contact manager)
Android has the following features:
- Application framework enabling reuse and replacement of app components
- Bluetooth, EDGE, 3G, and WiFi support (hardware dependent)
- Camera, GPS, compass, and accelerometer support (hardware dependent)
- Dalvik Virtual Machine (DVM) optimized for mobile devices
- GSM Telephony support (hardware dependent)
- Integrated browser based on the open source WebKit engine
- Media support for common audio, video, and still image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
- Optimized graphics powered by a custom 2D graphics library; 3D graphics based on the OpenGL ES 1.0 specification (hardware acceleration optional)
- SQLite for structured data storage
Android development environment (together with a device emulator and ADT - a plugin for the Eclipse IDE) are not parts of an Android device's software stack, but they could be considered as an Android feature.