Home | History | Annotate | Download | only in architecture
      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