1 <html devsite> 2 <head> 3 <title>Architecture</title> 4 <meta name="project_path" value="/_project.yaml" /> 5 <meta name="book_path" value="/_book.yaml" /> 6 </head> 7 <body> 8 <!-- 9 Copyright 2017 The Android Open Source Project 10 11 Licensed under the Apache License, Version 2.0 (the "License"); 12 you may not use this file except in compliance with the License. 13 You may obtain a copy of the License at 14 15 http://www.apache.org/licenses/LICENSE-2.0 16 17 Unless required by applicable law or agreed to in writing, software 18 distributed under the License is distributed on an "AS IS" BASIS, 19 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20 See the License for the specific language governing permissions and 21 limitations under the License. 22 --> 23 24 25 26 <p> 27 Android system architecture contains the following components: 28 </p> 29 30 <img src="../images/ape_fwk_all.png"> 31 32 <p class="img-caption"><strong>Figure 1.</strong> Android system architecture</p> 33 34 <h2 id="application-framework">Application framework</h2> 35 36 <p>The application framework is used most often by application developers. As a 37 hardware developer, you should be aware of developer APIs as many map directly 38 to the underlying HAL interfaces and can provide helpful information about 39 implementing drivers.</p> 40 41 <h2 id="binder-ipc">Binder IPC</h2> 42 <p>The Binder Inter-Process Communication (IPC) mechanism allows the application 43 framework to cross process boundaries and call into the Android system services 44 code. This enables high level framework APIs to interact with Android system 45 services. At the application framework level, this communication is hidden from 46 the developer and things appear to "just work".</p> 47 48 <h2 id="system-services">System services</h2> 49 <p>System services are modular, focused components such as Window Manager, 50 Search Service, or Notification Manager. Functionality exposed by application 51 framework APIs communicates with system services to access the underlying 52 hardware. Android includes two groups of services: <em>system</em> (such as 53 Window Manager and Notification Manager) and <em>media</em> (services involved 54 in playing and recording media).</p> 55 56 <h2 id="hal">Hardware abstraction layer (HAL)</h2> 57 <p>A HAL defines a standard interface for hardware vendors to implement, 58 which enables Android to be agnostic about lower-level driver implementations. 59 Using a HAL allows you to implement functionality without affecting or modifying 60 the higher level system. HAL implementations are packaged into modules and 61 loaded by the Android system at the appropriate time. For details, see 62 <a href="/devices/architecture/hal.html">Hardware Abstraction Layer (HAL)</a>. 63 </p> 64 65 <h2 id="Linux-kernel">Linux kernel</h2> 66 <p>Developing your device drivers is similar to developing a typical Linux 67 device driver. Android uses a version of the Linux kernel with a few special 68 additions such as wake locks (a memory management system that is more aggressive 69 in preserving memory), the Binder IPC driver, and other features important for a 70 mobile embedded platform. These additions are primarily for system functionality 71 and do not affect driver development.</p> 72 73 <p>You can use any version of the kernel as long as it supports the required 74 features (such as the binder driver). However, we recommend using the latest 75 version of the Android kernel. For details, see 76 <a href="/source/building-kernels.html">Building Kernels</a>.</p> 77 78 </body> 79 </html> 80