217 lines
7.0 KiB
Plaintext
217 lines
7.0 KiB
Plaintext
page.title=Platform Architecture
|
||
page.keywords=platform,architecture,framework
|
||
@jd:body
|
||
|
||
|
||
<div id="qv-wrapper">
|
||
<div id="qv">
|
||
<h2>
|
||
In this document
|
||
</h2>
|
||
|
||
<ol>
|
||
<li>
|
||
<a href="#linux-kernel">The Linux Kernel</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="#hal">Hardware Abstraction Layer (HAL)</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="#art">Android Runtime</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="#native-libs">Native C/C++ Libraries</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="#api-framework">Java API Framework</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="#system-apps">System Apps</a>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
<p>
|
||
Android is an open source, Linux-based software stack created for a wide
|
||
array of devices and form factors. The following diagram shows the major
|
||
components of the Android platform.
|
||
</p>
|
||
|
||
<img src="/guide/platform/images/android-stack_2x.png" alt="" width=
|
||
"519">
|
||
<p class="img-caption">
|
||
<strong>Figure 1.</strong> The Android software stack.
|
||
</p>
|
||
|
||
<h2 id="linux-kernel">
|
||
The Linux Kernel
|
||
</h2>
|
||
|
||
<p>
|
||
The foundation of the Android platform is the Linux kernel. For example,
|
||
<a href="#art">the Android Runtime (ART)</a> relies on the Linux kernel for
|
||
underlying functionalities such as threading and low-level memory management.
|
||
</p>
|
||
|
||
<p>
|
||
Using a Linux kernel allows Android to take advantage of <a href=
|
||
"https://source.android.com/security/overview/kernel-security.html">key
|
||
security features</a> and allows device manufacturers to develop hardware
|
||
drivers for a well-known kernel.
|
||
</p>
|
||
|
||
<h2 id="hal">
|
||
Hardware Abstraction Layer (HAL)
|
||
</h2>
|
||
|
||
<p>
|
||
The <a href=
|
||
"https://source.android.com/devices/index.html#Hardware%20Abstraction%20Layer">
|
||
hardware abstraction layer (HAL)</a> provides standard interfaces that expose
|
||
device hardware capabilities to the higher-level <a href=
|
||
"#api-framework">Java API framework</a>. The HAL consists of multiple library
|
||
modules, each of which implements an interface for a specific type of hardware
|
||
component, such as the <a href=
|
||
"https://source.android.com/devices/camera/index.html">camera</a> or <a href=
|
||
"https://source.android.com/devices/bluetooth.html">bluetooth</a> module.
|
||
When a framework API makes a call to access device hardware, the Android
|
||
system loads the library module for that hardware component.
|
||
</p>
|
||
|
||
<h2 id="art">
|
||
Android Runtime
|
||
</h2>
|
||
|
||
<p>
|
||
For devices running Android version 5.0 (API level 21) or higher, each app
|
||
runs in its own process and with its own instance of the <a href=
|
||
"http://source.android.com/devices/tech/dalvik/index.html">Android Runtime
|
||
(ART)</a>. ART is written to run multiple virtual machines on low-memory
|
||
devices by executing DEX files, a bytecode format designed specially for
|
||
Android that's optimized for minimal memory footprint. Build toolchains, such
|
||
as <a href="https://source.android.com/source/jack.html">Jack</a>, compile
|
||
Java sources into DEX bytecode, which can run on the Android platform.
|
||
</p>
|
||
|
||
<p>
|
||
Some of the major features of ART include the following:
|
||
</p>
|
||
|
||
<ul>
|
||
<li>Ahead-of-time (AOT) and just-in-time (JIT) compilation
|
||
</li>
|
||
|
||
<li>Optimized garbage collection (GC)
|
||
</li>
|
||
|
||
<li>Better debugging support, including a dedicated sampling profiler,
|
||
detailed diagnostic exceptions and crash reporting, and the ability to set
|
||
watchpoints to monitor specific fields
|
||
</li>
|
||
</ul>
|
||
|
||
<p>
|
||
Prior to Android version 5.0 (API level 21), Dalvik was the Android runtime.
|
||
If your app runs well on ART, then it should work on Dalvik as well, but
|
||
<a href="/guide/platform/verifying-apps-art.html">the reverse may not be
|
||
true</a>.
|
||
</p>
|
||
|
||
<p>
|
||
Android also includes a set of core runtime libraries that provide most of
|
||
the functionality of the Java programming language, including some <a href=
|
||
"/guide/platform/j8-jack.html">Java 8 language features</a>, that the Java
|
||
API framework uses.
|
||
</p>
|
||
|
||
<h2 id="native-libs">
|
||
Native C/C++ Libraries
|
||
</h2>
|
||
|
||
<p>
|
||
Many core Android system components and services, such as ART and HAL, are
|
||
built from native code that require native libraries written in C and C++.
|
||
The Android platform provides Java framework APIs to expose the functionality
|
||
of some of these native libraries to apps. For example, you can access
|
||
<a href="/guide/topics/graphics/opengl.html">OpenGL ES</a> through the
|
||
Android framework’s <a href=
|
||
"/reference/android/opengl/package-summary.html">Java OpenGL API</a> to add
|
||
support for drawing and manipulating 2D and 3D graphics in your app.
|
||
</p>
|
||
|
||
<p>
|
||
If you are developing an app that requires C or C++ code, you can use the
|
||
<a href="/ndk/index.html">Android NDK</a> to access some of these <a href=
|
||
"/ndk/guides/stable_apis.html">native platform libraries</a> directly from
|
||
your native code.
|
||
</p>
|
||
|
||
<h2 id="api-framework">
|
||
Java API Framework
|
||
</h2>
|
||
|
||
<p>
|
||
The entire feature-set of the Android OS is available to you through APIs
|
||
written in the Java language. These APIs form the building blocks you need to
|
||
create Android apps by simplifying the reuse of core, modular system
|
||
components and services, which include the following:
|
||
</p>
|
||
|
||
<ul>
|
||
<li>A rich and extensible <a href="/guide/topics/ui/overview.html">View
|
||
System</a> you can use to build an app’s UI, including lists, grids, text
|
||
boxes, buttons, and even an embeddable web browser
|
||
</li>
|
||
|
||
<li>A <a href="/guide/topics/resources/overview.html">Resource Manager</a>,
|
||
providing access to non-code resources such as localized strings, graphics,
|
||
and layout files
|
||
</li>
|
||
|
||
<li>A <a href="/guide/topics/ui/notifiers/notifications.html">Notification
|
||
Manager</a> that enables all apps to display custom alerts in the status bar
|
||
</li>
|
||
|
||
<li>An <a href="/guide/components/activities.html">Activity Manager</a> that
|
||
manages the lifecycle of apps and provides a common <a href=
|
||
"/guide/components/tasks-and-back-stack.html">navigation back stack</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="/guide/topics/providers/content-providers.html">Content
|
||
Providers</a> that enable apps to access data from other apps, such as
|
||
the Contacts app, or to share their own data
|
||
</li>
|
||
</ul>
|
||
|
||
<p>
|
||
Developers have full access to the same <a href=
|
||
"/reference/packages.html">framework APIs</a> that Android system apps use.
|
||
</p>
|
||
|
||
<h2 id="system-apps">
|
||
System Apps
|
||
</h2>
|
||
|
||
<p>
|
||
Android comes with a set of core apps for email, SMS messaging, calendars,
|
||
internet browsing, contacts, and more. Apps included with the platform have
|
||
no special status among the apps the user chooses to install. So a
|
||
third-party app can become the user's default web browser, SMS messenger, or
|
||
even the default keyboard (some exceptions apply, such as the system's
|
||
Settings app).
|
||
</p>
|
||
|
||
<p>
|
||
The system apps function both as apps for users and to provide key
|
||
capabilities that developers can access from their own app. For example, if
|
||
your app would like to deliver an SMS message, you don't need to build that
|
||
functionality yourself—you can instead invoke whichever SMS app is already
|
||
installed to deliver a message to the recipient you specify.
|
||
</p> |