Merge "Docs: Adding new diagrams for compatibility section Tweaking text on index for better flow Removed unclear pronoun antecedents"
diff --git a/src/accessories/audio.jd b/src/accessories/audio.jd
index 9202438..0b61b3f 100644
--- a/src/accessories/audio.jd
+++ b/src/accessories/audio.jd
@@ -74,3 +74,9 @@
<p class="note"><strong>Note:</strong> The ADK 2012 source code includes an open source Bluetooth stack that
is built for the Texas Instruments CC2564 chip, but can work with any Bluetooth chip that
implements a standard Host/Controller Interface (HCI).</p>
+
+<h2 id="midi-over-usb">MIDI over USB and Bluetooth LE</h2>
+<p>Both USB and Bluetooth Low Energy can be used as transports for the
+<a href="http://en.wikipedia.org/wiki/MIDI">MIDI</a> protocol.
+See <a href="{@docRoot}devices/audio/midi.html">MIDI</a> for more information.
+</p>
diff --git a/src/accessories/headset-spec.jd b/src/accessories/headset-spec.jd
index c9a749e..572bb12 100644
--- a/src/accessories/headset-spec.jd
+++ b/src/accessories/headset-spec.jd
@@ -1,8 +1,8 @@
-page.title=Wired audio headset specification
+page.title=Wired audio headset specification (v1.1)
@jd:body
<!--
- Copyright 2014 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -24,116 +24,68 @@
</div>
</div>
-<p><em>Version 1.1</em></p>
+<p>This section specifies requirements for headsets and mobile devices to
+function uniformly across the Android ecosystem.</p>
-<p>This document specifies the requirements for headsets and mobile devices to
-function uniformly across the Android ecosystem. It is separated into two
-sections beginning with the specifications for the headset
-accessory followed by the specifications for the mobile device.</p>
+<h2 id="headset_accessory_plug_specifications">Headset accessory (plug)
+specifications</h2>
-<h2 id=headset_accessory_plug_specifications>Headset Accessory (Plug) Specifications</h2>
+<p>The following requirements apply to headset accessories.</p>
-<p>The requirements in the following section apply to the headset accessory.</p>
+<h3 id="functions">Functions</h3>
-<h3 id=functions>Functions</h3>
+<table style="width:50%">
+ <tr>
+ <th>Function</th>
+ <th>Accessory Support</th>
+ </tr>
+ <tr>
+ <td>Stereo Audio Out</td>
+ <td>Required</td>
+ </tr>
+ <tr>
+ <td>Audio in (Mic)</td>
+ <td>Required</td>
+ </tr>
+ <tr>
+ <td>Ground</td>
+ <td>Required</td>
+ </tr>
+</table>
+
+<h3 id="control-function_mapping">Control-function mapping</h3>
<table>
<tr>
- <th>
-<p><strong>Function</strong></p>
-</th>
- <th>
-<p><strong>Accessory Support</strong></p>
-</th>
+ <th style="width:33%">Control Function</th>
+ <th style="width:33%">Accessory Support</th>
+ <th style="width:33%">Description</th>
</tr>
<tr>
- <td>
-<p>Stereo Audio Out</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
+ <td>Function A</td>
+ <td>Required</td>
+ <td>Play/pause/hook (Short Press), Trigger Assist (Long Press), Next
+ (Double Press)</td>
</tr>
<tr>
- <td>
-<p>Audio in (Mic)</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
+ <td>Function B</td>
+ <td>Optional</td>
+ <td>Vol+</td>
</tr>
<tr>
- <td>
-<p>Ground</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
+ <td>Function C</td>
+ <td>Optional</td>
+ <td>Vol-</td>
+ </tr>
+ <tr>
+ <td>Function D</td>
+ <td>Optional</td>
+ <td>Reserved (Nexus devices use this to launch Google voice search)
</td>
</tr>
</table>
-<h3 id=control-function_mapping>Control-Function Mapping</h3>
-
-<table>
- <tr>
- <th>
-<p><strong>Control Function</strong></p>
-</th>
- <th>
-<p><strong>Accessory Support</strong></p>
-</th>
- <th>
-<p><strong>Description</strong></p>
-</th>
- </tr>
- <tr>
- <td>
-<p>Function A</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>Play/pause/hook (Short Press), Trigger Assist (Long Press), Next (double press)</p>
-</td>
- </tr>
- <tr>
- <td>
-<p>Function B</p>
-</td>
- <td>
-<p>Optional</p>
-</td>
- <td>
-<p>Vol+</p>
-</td>
- </tr>
- <tr>
- <td>
-<p>Function C</p>
-</td>
- <td>
-<p>Optional</p>
-</td>
- <td>
-<p>Vol-</p>
-</td>
- </tr>
- <tr>
- <td>
-<p>Function D</p>
-</td>
- <td>
-<p>Optional</p>
-</td>
- <td>
-<p>Reserved (Nexus devices will use this reserved function to launch Google
-voice search)</p>
-</td>
- </tr>
-</table>
-
-<p><strong>Assign functions to buttons as follows</strong>:</p>
+<p>Assign functions to buttons as follows:</p>
<ul>
<li> All one-button headsets must implement Function A.
@@ -146,160 +98,93 @@
</ul>
</ul>
-<h3 id=mechanical>Mechanical</h3>
+<h3 id="mechanical">Mechanical</h3>
<table>
<tr>
- <th>
-<p><strong>Function</strong></p>
-</th>
- <th>
-<p><strong>Accessory Support</strong></p>
-</th>
- <th>
-<p><strong>Notes</strong></p>
-</th>
+ <th style="width:33%">Function</th>
+ <th style="width:33%">Accessory Support</th>
+ <th style="width:33%">Notes</th>
</tr>
<tr>
- <td>
-<p>4 conductor 3.5mm plug</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>Ref: EIAJ-RC5325A standard</p>
-</td>
+ <td>4 conductor 3.5mm plug</td>
+ <td>Required</td>
+ <td>Ref: EIAJ-RC5325A standard</td>
</tr>
<tr>
- <td>
-<p>CTIA pinout order (LRGM)</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>Except in regions with legal requirements for OMTP pinout</p>
-</td>
+ <td>CTIA pinout order (LRGM)</td>
+ <td>Required</td>
+ <td>Except in regions with legal requirements for OMTP pinout</td>
</tr>
<tr>
- <td>
-<p>OMTP pinout order (LRMG)</p>
-</td>
- <td>
-<p>Optional</p>
-</td>
+ <td>OMTP pinout order (LRMG)</td>
+ <td>Optional</td>
<td></td>
</tr>
<tr>
- <td>
-<p>Microphone</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>Must not be obstructed when operating headset controls</p>
-</td>
+ <td>Microphone</td>
+ <td>Required</td>
+ <td>Must not be obstructed when operating headset controls</td>
</tr>
</table>
-<h3 id=electrical>Electrical</h3>
+<h3 id="electrical">Electrical</h3>
<table>
<tr>
- <th>
-<p><strong>Function</strong></p>
-</th>
- <th>
-<p><strong>Accessory Support</strong></p>
-</th>
- <th>
-<p><strong>Description</strong></p>
-</th>
+ <th style="width:33%">Function</th>
+ <th style="width:33%">Accessory Support</th>
+ <th style="width:33%">Description</th>
</tr>
<tr>
- <td>
-<p>Ear speaker impedance</p>
-</td>
- <td>
-<p><strong>16 ohms or higher</strong></p>
-</td>
- <td>
-<p>Recommend 32 - 300 ohms</p>
-</td>
+ <td>Ear speaker impedance</td>
+ <td>16 ohms or higher</td>
+ <td>Recommend 32 - 300 ohms</td>
</tr>
<tr>
- <td>
-<p>Mic DC resistance</p>
+ <td>Mic DC resistance</td>
+ <td>1000 ohms or higher
</td>
- <td>
-<p><strong>1000 ohms or higher</strong></p>
-</td>
- <td>
-<p>Mic characteristics must be compliant with section 5.4 “Audio Recording” of
-current Android Compatibility Definition Document (CDD)</p>
-</td>
+ <td>Mic characteristics must be compliant with section 5.4 “Audio
+ Recording” of the current
+ <a href="{@docRoot}compatibility/android-cdd.pdf">Android CDD</a></td>
</tr>
<tr>
- <td>
-<p>Control Function Equivalent impedance*</p>
-
-<p>*Total impedance from positive mic terminal to GND when button is pressed with
-2.2 V mic bias applied through 2.2 kOhm resistor</p>
-</td>
- <td>
-<p><strong>0 ohm</strong></p>
-</td>
- <td>
-<p>[Function A] Play/Pause/Hook</p>
-</td>
+ <td rowspan="4">Control Function Equivalent impedance*</td>
+ <td>0 ohm</td>
+ <td>[Function A] Play/Pause/Hook</td>
</tr>
<tr>
- <td></td>
- <td>
-<p><strong>240 ohm</strong> +/- 1% resistance</p>
-</td>
- <td>
-<p>[Function B]</p>
-</td>
+ <td>240 ohm +/- 1% resistance</td>
+ <td>[Function B]</td>
</tr>
<tr>
- <td></td>
- <td>
-<p><strong>470 ohm</strong> +/- 1% resistance</p>
-</td>
- <td>
-<p>[Function C] </p>
-</td>
+ <td>470 ohm +/- 1% resistance</td>
+ <td>[Function C]</td>
</tr>
<tr>
- <td></td>
- <td>
-<p><strong>135 ohm</strong> +/- 1% resistance</p>
-</td>
- <td>
-<p>[Function D]</p>
-</td>
+ <td>135 ohm +/- 1% resistance</td>
+ <td>[Function D]</td>
</tr>
</table>
-<p>In the following diagrams, Button A is mapped to Function A, Button B to
+<p><em>*Total impedance from positive mic terminal to GND when button is
+pressed with 2.2 V mic bias applied through 2.2 kOhm resistor</em></p>
+
+<p>In the following diagrams, Button A maps to Function A, Button B to
Function B, and so on.</p>
-<h3 id=reference_headset_test_circuit_1>Reference Headset Test Circuit 1</h3>
+<h3 id="reference_headsets">Reference headset test circuits</h3>
+
+<p>The following diagram for Reference Headset Test Circuit 1 shows the CTIA
+pinout for a 4-segment plug. For the OMTP pinout, switch the positions of the
+MIC and GND segments.</p>
<img src="images/headset-circuit1.png" alt="Reference Headset Test Circuit 1" />
<p class="img-caption"><strong>Figure 1.</strong> Reference headset test circuit 1</p>
-<p class="note"><strong>Note:</strong> The above diagram shows the CTIA pinout
-for a 4-segment plug. For the OMTP pinout, switch the positions of the MIC and
-GND segments.</p>
-
-<h3 id=reference_headset_test_circuit_2>Reference Headset Test Circuit 2</h3>
-
-<p>The second reference circuit shows how the actual resistor values (R1 - R4)
-are altered to meet this specification.</p>
+<p>The following diagram for Reference Headset Test Circuit 2 shows how the
+actual resistor values (R1 - R4) are altered to meet this specification.</p>
<img src="images/headset-circuit2.png" alt="Reference Headset Test Circuit 2" />
<p class="img-caption"><strong>Figure 2.</strong> Reference headset test circuit 2</p>
@@ -314,293 +199,161 @@
equivalent impedance value of that button (provided), and Rmic is the
microphone impedance value.</p>
-<p>The example above assumes a 5 kohm microphone impedance (Rmic). Therefore, to
-achieve an equivalent R4 impedance of 135 ohm (ReqD), the actual resistor value
-(R4) needs to be 139 ohms.</p>
+<p>The example above assumes a 5 kohm microphone impedance (Rmic); to achieve
+an equivalent R4 impedance of 135 ohm (ReqD), the actual resistor value (R4)
+must be 139 ohms.</p>
-
-<h2 id=mobile_device_jack_specifications>Mobile Device (Jack) Specifications</h2>
+<h2 id="mobile_device_jack_specifications">Mobile device (jack) specifications</h2>
<p class="caution"><strong>Caution:</strong> To achieve compatibility with the
-headset specification above, devices that include a 4 conductor 3.5mm audio
-jack must meet the following specifications. Please see the <em>Analog audio
-ports</em> section of the <a
-href="{@docRoot}compatibility/android-cdd.pdf">Android Compatibility Definition
-Document (CDD)</a> for Android compatibility requirements.</p>
+headset specification, devices that include a 4 conductor 3.5mm audio jack
+must meet the following specifications. For Android compatibility requirements,
+refer to the <em>Analog audio ports</em> section of the <a
+href="{@docRoot}compatibility/android-cdd.pdf">Android CDD</a>.</p>
-<p><strong>Headset Jack Functions</strong></p>
+<h3 id="headset_jack_functions">Functions</h3>
+
<table>
<tr>
- <th>
-<p><strong>Function</strong></p>
-</th>
- <th>
-<p><strong>Device Support</strong></p>
-</th>
+ <th>Function</th>
+ <th>Device Support</th>
</tr>
<tr>
- <td>
-<p>Stereo Audio Out</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
+ <td>Stereo Audio Out</td>
+ <td>Required</td>
</tr>
<tr>
- <td>
-<p>Audio in (Mic)</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
+ <td>Audio in (Mic)</td>
+ <td>Required</td>
</tr>
<tr>
- <td>
-<p>Ground</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
+ <td>Ground</td>
+ <td>Required</td>
</tr>
</table>
-<h3 id=software_mapping>Software mapping</h3>
+<h3 id="software_mapping">Software mapping</h3>
<table>
<tr>
- <th>
-<p><strong>Function</strong></p>
-</th>
- <th>
-<p><strong>Device Support</strong></p>
-</th>
- <th>
-<p><strong>Description</strong></p>
-</th>
+ <th style="width:33%">Function</th>
+ <th style="width:33%">Device Support</th>
+ <th style="width:33%">Description</th>
</tr>
<tr>
- <td>
-<p>Function A control event </p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>input event KEY_MEDIA</p>
-
-<p>Android key KEYCODE_HEADSETHOOK</p>
-</td>
+ <td>Function A control event</td>
+ <td>Required</td>
+ <td>input event KEY_MEDIA
+<p>Android key KEYCODE_HEADSETHOOK</p></td>
</tr>
<tr>
- <td>
-<p>Function D control event</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>input event KEY_VOICECOMMAND</p>
-
-<p>Android key KEYCODE_VOICE_ASSIST</p>
-</td>
+ <td>Function D control event</td>
+ <td>Required</td>
+ <td>input event KEY_VOICECOMMAND
+<p>Android key KEYCODE_VOICE_ASSIST</p></td>
</tr>
<tr>
- <td>
-<p>Function B control event</p>
+ <td>Function B control event</td>
+ <td>Required
</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>input event KEY_VOLUMEUP</p>
-
-<p>Android key VOLUME_UP</p>
-</td>
+ <td>input event KEY_VOLUMEUP
+<p>Android key VOLUME_UP</p></td>
</tr>
<tr>
- <td>
-<p>Function C control event</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>input event KEY_VOLUMEDOWN</p>
-
-<p>Android key VOLUME_DOWN</p>
-</td>
+ <td>Function C control event</td>
+ <td>Required</td>
+ <td>input event KEY_VOLUMEDOWN
+<p>Android key VOLUME_DOWN</p></td>
</tr>
<tr>
- <td>
-<p>Headset insertion detection</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>input event SW_JACK_PHYSICAL_INSERT 7</p>
-</td>
+ <td>Headset insertion detection</td>
+ <td>Required</td>
+ <td>input event SW_JACK_PHYSICAL_INSERT 7</td>
</tr>
<tr>
- <td>
-<p>Headset type detection</p>
-</td>
- <td>
-<p><strong>Mic</strong></p>
-</td>
- <td>
-<p>input event SW_MICROPHONE_INSERT 4</p>
-</td>
+ <td rowspan="2">Headset type detection</td>
+ <td>Mic</td>
+ <td>input event SW_MICROPHONE_INSERT 4</td>
</tr>
<tr>
- <td>
-<p>Headset type detection</p>
-</td>
- <td>
-<p><strong>No Mic</strong></p>
-</td>
- <td>
-<p>input event SW_HEADPHONE_INSERT 2</p>
-</td>
+ <td>No Mic</td>
+ <td>input event SW_HEADPHONE_INSERT 2</td>
</tr>
<tr>
- <td>
-<p>Headset speaker impedance</p>
-</td>
- <td>
-<p><strong>Required Headphone (low)</strong></p>
-</td>
- <td>
-<p>Failure mode is to indicate headphones so that limitation would be on</p>
-</td>
+ <td rowspan="2">Headset speaker impedance</td>
+ <td>Required Headphone (low)</td>
+ <td>Failure mode is to indicate headphones so limitation would be on</td>
</tr>
<tr>
- <td>
-<p>Headset speaker impedance</p>
-</td>
- <td>
-<p><strong>Required Line In (high)</strong></p>
-</td>
- <td>
-<p>input event SW_LINEOUT_INSERT 6</p>
-</td>
+ <td>Required Line In (high)</td>
+ <td>input event SW_LINEOUT_INSERT 6</td>
</tr>
</table>
-<h3 id=mechanical11>Mechanical</h3>
+<h3 id="mechanical11">Mechanical</h3>
<table>
<tr>
- <th>
-<p><strong>Function</strong></p>
-</th>
- <th>
-<p><strong>Device Support</strong></p>
-</th>
- <th>
-<p><strong>Description</strong></p>
-</th>
+ <th style="width:33%">Function</th>
+ <th style="width:33%">Device Support</th>
+ <th style="width:33%">Description</th>
</tr>
<tr>
- <td>
-<p>4 conductor 3.5mm jack</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
+ <td>4 conductor 3.5mm jack</td>
+ <td>Required</td>
<td></td>
</tr>
<tr>
- <td>
-<p>CTIA pinout order (LRGM)</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>3 Pin & Mono Plug Compatible</p>
-</td>
+ <td>CTIA pinout order (LRGM)</td>
+ <td>Required</td>
+ <td>3 Pin & Mono Plug Compatible</td>
</tr>
<tr>
- <td>
-<p>OMTP pinout order (LRMG)</p>
-</td>
- <td>
-<p>Optional but <strong>Strongly Recommended</strong></p>
-</td>
+ <td>OMTP pinout order (LRMG)</td>
+ <td>Optional but strongly recommended</td>
<td></td>
</tr>
<tr>
- <td>
-<p>Headset detect sequence</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>Plug insert notification must only be triggered after all contacts on plug are
-touching their relevant segments. This will prevent unreliable headset
-detection due to slow insertion. </p>
-</td>
+ <td>Headset detect sequence</td>
+ <td>Required</td>
+ <td>Plug insert notification must be triggered only after all contacts on
+ plug are touching their relevant segments (this prevents unreliable headset
+ detection due to slow insertion.</td>
</tr>
</table>
-<h3 id=electrical12>Electrical</h3>
+<h3 id="electrical12">Electrical</h3>
-<h4 id=general>General</h4>
+<h4 id="general">General</h4>
<table>
<tr>
- <th>
-<p><strong>Function</strong></p>
-</th>
- <th>
-<p><strong>Device Support</strong></p>
-</th>
- <th>
-<p><strong>Notes</strong></p>
-</th>
+ <th style="width:33%">Function</th>
+ <th style="width:33%">Device Support</th>
+ <th style="width:33%">Notes</th>
</tr>
<tr>
- <td>
-<p>Maximum output voltage drive</p>
-</td>
- <td>
-<p>150mV </p>
-</td>
- <td>
-<p>>= 150mV on 32 ohm</p>
-
-<p>Test conditions: EN50332-2</p>
-</td>
+ <td>Maximum output voltage drive</td>
+ <td>150mV</td>
+ <td>>= 150mV on 32 ohm
+<p>Test conditions: EN50332-2</p></td>
</tr>
<tr>
- <td>
-<p>Mic bias resistance </p>
-</td>
- <td>
-<p>Required</p>
-</td>
- <td>
-<p>Flexible on detection method used and microphone bias resistor selection.
-Require that all button resistance value ranges specified below be detected and
-related to their respective function</p>
-</td>
+ <td>Mic bias resistance</td>
+ <td>Required</td>
+ <td>Flexible on detection method used and microphone bias resistor
+ selection. Require that all button resistance value ranges specified below
+ be detected and related to their respective function</td>
</tr>
<tr>
- <td>
-<p>Mic bias voltage</p>
-</td>
- <td>
-<p>1.8V - 2.9V</p>
-</td>
- <td>
-<p>To guarantee compatibility to common microphone capsules.</p>
-</td>
+ <td>Mic bias voltage</td>
+ <td>1.8V - 2.9V</td>
+ <td>To guarantee compatibility to common microphone capsules.</td>
</tr>
</table>
-<h4 id=function_impedance_and_threshold_detection>Function Impedance and Threshold Detection</h4>
+<h4 id="function_impedance_and_threshold_detection">Function impedance and
+threshold detection</h4>
<p>Devices must detect the following resistor ladder on the accessories. The
accessories will be tested to the standardized circuit diagram in the diagram
@@ -609,89 +362,49 @@
bias applied through 2.2 kOhm resistor. This is the same effective resistance
as the button detection circuit with the microphone in parallel with the button
resistor.</p>
+
<table>
<tr>
- <th>
-<p><strong>Button Impedance Level</strong></p>
-</th>
- <th>
-<p><strong>Device Support</strong></p>
-</th>
- <th>
-<p><strong>Notes</strong></p>
-</th>
+ <th style="width:40%">Button Impedance Level</th>
+ <th style="width:20%">Device Support</th>
+ <th style="width:40%">Notes</th>
</tr>
<tr>
- <td>
-<p><strong>70 ohm or less</strong></p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>[Function A]</p>
-</td>
+ <td>70 ohm or less</td>
+ <td>Required</td>
+ <td>[Function A]</td>
</tr>
<tr>
- <td>
-<p><strong>110 - 180 ohm </strong></p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>[Function D]</p>
-</td>
+ <td>110 - 180 ohm</td>
+ <td>Required</td>
+ <td>[Function D]</td>
</tr>
<tr>
- <td>
-<p><strong>210 - 290 ohm</strong></p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>[Function B]</p>
-</td>
+ <td>210 - 290 ohm</td>
+ <td>Required</td>
+ <td>[Function B]</td>
</tr>
<tr>
- <td>
-<p><strong>360 - 680 ohm </strong></p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>[Function C]</p>
-</td>
+ <td>360 - 680 ohm</td>
+ <td>Required</td>
+ <td>[Function C]</td>
+ </tr>
+ </table>
+
+ <table>
+ <tr>
+ <th style="width:40%">Headset Speaker Impedance Level</th>
+ <th style="width:20%">Device Support</th>
+ <th style="width:40%">Notes</th>
</tr>
<tr>
- <td>
-<p><strong>Headset speaker impedance level</strong></p>
-</td>
- <td></td>
- <td></td>
+ <td>Low Threshold Detection</td>
+ <td>Required</td>
+ <td>Headphone (low) < 1 Kohm</td>
</tr>
<tr>
- <td>
-<p>Low Threshold Detection</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>Headphone (low) < 1 Kohm</p>
-</td>
+ <td>High Threshold Detection</td>
+ <td>Required</td>
+ <td>Line In (high) > 5 Kohm</td>
</tr>
- <tr>
- <td>
-<p>High Threshold Detection</p>
-</td>
- <td>
-<p><strong>Required</strong></p>
-</td>
- <td>
-<p>Line In (high) > 5 Kohm</p>
-</td>
- </tr>
-</table>
+</table>
\ No newline at end of file
diff --git a/src/accessories/images/headset-circuit1.png b/src/accessories/images/headset-circuit1.png
index f3e622a..d6f7421 100644
--- a/src/accessories/images/headset-circuit1.png
+++ b/src/accessories/images/headset-circuit1.png
Binary files differ
diff --git a/src/accessories/images/headset-circuit2.png b/src/accessories/images/headset-circuit2.png
index ff6b541..6700c45 100644
--- a/src/accessories/images/headset-circuit2.png
+++ b/src/accessories/images/headset-circuit2.png
Binary files differ
diff --git a/src/compatibility/contact-us.jd b/src/compatibility/contact-us.jd
index 6c590f5..e77b115 100644
--- a/src/compatibility/contact-us.jd
+++ b/src/compatibility/contact-us.jd
@@ -2,24 +2,24 @@
@jd:body
<!--
- Copyright 2015 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
-->
<p>This page describes the
contact methods for inquiries regarding the Android compatibility program,
including the Compatibility Definition Document (CDD) and Compatibility Test
-Suite (CTS). See the <a href="{@docRoot}community/index.html">Community</a>
+Suite (CTS). See the <a href="{@docRoot}source/community.html">Community</a>
page for communication channels regarding other topics.</p>
<h2
@@ -38,7 +38,7 @@
</ul>
<p>To make best use of this list, please first read <a
-href="{@docRoot}source/community/index.html#getting-the-most-from-our-lists">Getting
+href="{@docRoot}source/community.html#getting-the-most-from-our-lists">Getting
the Most from Our Lists</a> on the Community page. Users looking for help with
Android devices should contact their carrier or manufacturer for help.</p>
@@ -49,4 +49,4 @@
href="mailto:android-partnerships@google.com">android-partnerships@google.com</a>
<p>While we read every message received, we cannot respond to each of them. We
-promise to contact you if we can help!</p>
+promise to contact you if we can help!</p>
\ No newline at end of file
diff --git a/src/compatibility/cts/development.jd b/src/compatibility/cts/development.jd
index 8494be4..662d94a 100644
--- a/src/compatibility/cts/development.jd
+++ b/src/compatibility/cts/development.jd
@@ -120,3 +120,70 @@
<p>Follow the <a href="{@docRoot}source/submit-patches.html">Submitting Patches workflow</a>
to contribute changes to CTS. A reviewer
will be assigned to your change, and your change should be reviewed shortly!</p>
+
+<h2 id="release-schedule">Release schedule and branch information</h2>
+
+<p>CTS releases follow this schedule.</p>
+
+<p class="note"><strong>Note</strong>: This schedule is tentative and may be
+updated from time to time as CTS for the given Android version matures.</p>
+
+<table>
+<tr>
+ <th>Version</th>
+ <th>Branch</th>
+ <th>Frequency</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+ <td>5.1</td>
+ <td>lollipop-mr1-cts-dev</td>
+ <td>Monthly</td>
+</tr>
+<tr>
+ <td>5.0</td>
+ <td>lollipop-cts-dev</td>
+ <td>Monthly</td>
+</tr>
+<tr>
+ <td>4.4</td>
+ <td>kitkat-cts-dev</td>
+ <td>Odd month (Jan, Mar, etc.)</td>
+</tr>
+<tr>
+ <td>4.3</td>
+ <td>jb-mr2-cts-dev</td>
+ <td>First month of each quarter</td>
+</tr>
+<tr>
+ <td>4.2</td>
+ <td>jb-mr1.1-cts-dev</td>
+ <td>First month of each quarter</td>
+</tr>
+</table>
+
+<h3 id="important-dates">Important Dates during month of the release</h3>
+
+<ul>
+ <li><strong>End of 1st Week</strong>: Code Freeze. At this point,
+submissions on the current branch will no longer be accepted and will not be
+included in the next version of CTS. Once we have chosen a candidate for
+release, the branch will again be open and accepting new submissions.
+
+ <li><strong>Second or third week</strong>: CTS is published in the Android
+Open Source Project (AOSP).
+</ul>
+
+<h3 id="auto-merge">Auto-merge flow</h3>
+
+<p>CTS development branches have been setup so that changes submitted to each
+branch will automatically merge as below:<br>
+jb-dev-> jb-mr1.1-cts-dev -> jb-mr2-cts-dev -> kitkat-cts-dev ->
+lollipop-cts-dev -> lollipop-mr1-cts-dev -> <private-development-branch for
+Android M></p>
+
+<p>If a changelist (CL) fails to merge correctly, the author of the CL will get
+an email with instructions on how to resolve the conflict. In most of the
+cases, the author of the CL can use the instructions to skip the auto-merge of
+the conflicting CL.</p>
diff --git a/src/compatibility/overview.jd b/src/compatibility/overview.jd
index aa0fccb..0a1bfca 100644
--- a/src/compatibility/overview.jd
+++ b/src/compatibility/overview.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/src/devices/audio/images/venn.png b/src/devices/audio/images/venn.png
new file mode 100644
index 0000000..1db4f53
--- /dev/null
+++ b/src/devices/audio/images/venn.png
Binary files differ
diff --git a/src/devices/audio/latency.jd b/src/devices/audio/latency.jd
index 59c3f73..a45bf20 100644
--- a/src/devices/audio/latency.jd
+++ b/src/devices/audio/latency.jd
@@ -50,4 +50,8 @@
<td>Round-trip audio latency results</td>
<td><a href="latency_measurements.html">Audio Latency Measurements</a></td>
</tr>
+<tr>
+ <td>Applications</td>
+ <td><a href="latency_app.html">Audio Latency for App Developers</a></td>
+</tr>
</table>
diff --git a/src/devices/audio/latency_app.jd b/src/devices/audio/latency_app.jd
new file mode 100644
index 0000000..22e3984
--- /dev/null
+++ b/src/devices/audio/latency_app.jd
@@ -0,0 +1,174 @@
+page.title=Audio Latency for App Developers
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>For the lowest audio latency possible, we recommend you use Android native audio
+based on OpenSL ES 1.0.1.</p>
+
+<h2 id=implementation>Implementation checklist</h2>
+
+<p>To use Android native audio:</p>
+
+<ol>
+
+<li>
+Download and install the
+<a href="https://developer.android.com/tools/sdk/ndk/index.html">Android NDK</a>.
+In the rest of this document, we'll assume <code>NDKroot</code> is the
+directory where you installed NDK.
+</li>
+
+<li>
+Read the <a href="#supporting">supporting documentation.</a>
+</li>
+
+<li>
+Check for API level 9 or higher.
+</li>
+
+<li>
+Check for feature
+<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html#hw-features">android.hardware.audio.low_latency.</a>
+</li>
+
+<li>
+Use the recommended native buffer size and sample rate returned by
+<a href="http://developer.android.com/reference/android/media/AudioManager.html#getProperty(java.lang.String)">android.media.AudioManager.getProperty(java.lang.String)</a>
+<p> <strong>Note</strong>: the same buffer size and sample rate should also be used for input.</p>
+</li>
+
+<li>
+Usually an OpenSL ES buffer count of 1 is sufficient.
+</li>
+
+<li>
+Keep your callback handlers short, without bursty CPU usage or unbounded blocking. Avoid
+<a href="avoiding_pi.html">priority inversion.</a>
+</li>
+
+<li>
+Consider using
+<a href="avoiding_pi.html#nonBlockingAlgorithms">non-blocking algorithms</a>
+to communicate between input and output callback handlers,
+and between the callback handlers and the rest of your application.
+</li>
+
+</ol>
+
+<h2 id=supporting>Supporting documentation</h2>
+
+<h3 id=opensl_es_1_0_1>OpenSL ES 1.0.1</h3>
+
+<p>
+Use a PDF viewer to review the
+<a href="https://www.khronos.org/registry/sles/specs/OpenSL_ES_Specification_1.0.1.pdf">OpenSL 1.0.1 Specification.</a>
+This is a rather long reference, and not all of it will be relevant to you; but you
+will need to consult it for details on the API.
+</p>
+
+<p class="note">
+<strong>Note</strong>: this document describes the full OpenSL ES 1.0.1, but Android
+native audio is actually based on a subset of OpenSL ES 1.0.1 with some Android-specific extensions.
+</p>
+
+<p>
+Documents describing later versions of OpenSL ES, such as 1.1,
+are not relevant to Android.
+</p>
+
+<h3 id=opensl_es_for_android>OpenSL ES for Android</h3>
+
+<p>
+The document "OpenSL ES for Android" is provided in the NDK installation,
+and is not currently available online. Open this link in a browser:
+</p>
+
+<pre>
+NDKroot/docs/Additional_library_docs/opensles/index.html
+</pre>
+
+<p>
+You’ll want to skim the whole
+document, but pay special attention to the "Performance" subsection of the
+"Programming notes" section.
+</p>
+
+<p>
+Section "Supported features from OpenSL ES 1.0.1"
+describes the subset supported by Android.
+</p>
+
+<p>
+Section "Android extensions" describes Android-specific extensions
+that aren't included in base OpenSL ES 1.0.1.
+</p>
+
+<h3 id=relationship>Relationship with OpenSL ES 1.0.1</h3>
+
+<p>
+This Venn diagram shows the relationship between
+Android native audio and OpenSL ES 1.0.1.
+</p>
+
+<img src="images/venn.png" alt="Venn diagram" id="figure1" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> Venn diagram
+</p>
+
+<h2 id=resources>Other resources</h2>
+
+<h3 id=source_android_com>source.android.com</h3>
+
+<p>
+The site <a href="{@docRoot}">source.android.com</a>
+is primarily designed for OEMs building Android
+devices, and the SoC vendors who supply components to these OEMs.
+</p>
+
+<p>
+However, there is a wealth of useful information about latency at this site, so
+you may want to review it. See the articles at
+<a href="latency.html">Audio Latency.</a>
+</p>
+
+<h3 id=android_ndk>android-ndk</h3>
+
+<p>
+If you have questions about how to use Android native audio, you can ask at the discussion group
+<a href="https://groups.google.com/forum/#!forum/android-ndk">android-ndk.</a>
+</p>
+
+<h3 id=videos>Videos</h3>
+
+<dl>
+
+<dt><a href="https://www.youtube.com/watch?v=d3kfEeMZ65c">Google I/O 2013 - High performance audio on Android</a></dt>
+<dd>The whole video is about latency.</dd>
+
+<dt><a href="https://www.youtube.com/watch?v=92fgcUNCHic">Google I/O 2014 - Building great multi-media experiences on Android</a></dt>
+<dd>The first 14 minutes are about audio in general and input latency in particular.</dd>
+
+</dl>
diff --git a/src/devices/audio/latency_measurements.jd b/src/devices/audio/latency_measurements.jd
index e66b5f9..8055890 100644
--- a/src/devices/audio/latency_measurements.jd
+++ b/src/devices/audio/latency_measurements.jd
@@ -331,6 +331,16 @@
<td>38</td>
</tr>
+</tr>
+ <td>Nexus 9</td>
+ <td>5.1.1</td>
+ <td>LMY47X</td>
+ <td>48000</td>
+ <td>256</td>
+ <td>5.3</td>
+ <td>32</td>
+</tr>
+
<tr>
<td>Nexus 6</td>
<td>5.0.1</td>
diff --git a/src/devices/audio/midi.jd b/src/devices/audio/midi.jd
new file mode 100644
index 0000000..38428c7
--- /dev/null
+++ b/src/devices/audio/midi.jd
@@ -0,0 +1,161 @@
+page.title=MIDI
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>
+<a href="http://en.wikipedia.org/wiki/MIDI">MIDI</a> (Musical Instrument Digital Interface)
+is a standard protocol for inter-connecting computers with musical instruments, stage lighting,
+and other time-oriented media.
+</p>
+
+<p>
+The physical <a href="http://en.wikipedia.org/wiki/Transport_layer">transport layer</a>
+specified in original MIDI 1.0 is a current loop with
+<a href="http://en.wikipedia.org/wiki/DIN_connector">5-pin DIN</a> connector.
+</p>
+
+<p>
+Since MIDI 1.0, additional transports have been defined, including MIDI over USB
+and a proposed draft for MIDI over
+<a href="http://en.wikipedia.org/wiki/Bluetooth_low_energy">Bluetooth Low Energy</a> (BLE.)
+</p>
+
+<p>
+Strictly speaking, MIDI is unrelated to audio. But since MIDI is commonly used with
+music, this article is placed in the audio section.
+</p>
+
+<h2 id="for-android">MIDI for Android</h2>
+
+<p>
+Android 3.1 and later support
+<a href="http://en.wikipedia.org/wiki/USB_On-The-Go">USB On-The-Go</a>,
+which permits an Android device to act as USB host to drive USB
+peripherals. The USB host mode APIs introduced in Android 3.1 permit
+developers to implement MIDI over USB at the application level, but until
+recently there have been no built-in platform APIs for MIDI.
+</p>
+
+<p>
+Beginning with the Android M release, device makers can enable optional MIDI support in the platform.
+Supported transports include USB, draft BLE, and virtual (inter-app).
+</p>
+
+<p>
+For details on application programming with the new MIDI APIs,
+first download the
+<a href="https://developer.android.com/preview/download.html#docs">preview reference</a>
+and then see the <code>android.media.midi</code> package.
+</p>
+
+<p>
+The remainder of this article discusses how an Android device maker can
+enable MIDI support in the platform.
+</p>
+
+<h2 id="transport">Enabling transports</h2>
+
+<h3 id="usb-host">USB host mode</h3>
+
+<p>
+To enable MIDI for USB host mode, first support USB host mode in general, and
+then enable <code>CONFIG_SND_RAWMIDI</code> in your kernel configuration.
+</p>
+
+<h3 id="usb-peripheral">USB peripheral mode</h3>
+
+<p>
+To enable MIDI for USB peripheral mode, you may need to apply patches
+to your Linux kernel to integrate the
+<code>drivers/usb/gadget/f_midi.c</code> into the USB gadget
+driver. As of this writing, these patches are available for Linux kernel version
+3.10. These patches have not yet been updated for
+<a href="http://en.wikipedia.org/wiki/Configfs">ConfigFs</a>
+(a new architecture
+for USB gadget drivers), nor are they merged at upstream
+<a href="http://kernel.org"</a>kernel.org</a>.
+</p>
+
+<p>
+The patches are shown in commit order for the <code>tegra</code> tree:
+</p>
+<ol>
+<li><a href="https://android.googlesource.com/kernel/tegra/+/261230ce54cfc119efe643fc1d128e431d1678d3"</a>261230ce54cfc119efe643fc1d128e431d1678d3</a></li>
+<li><a href="https://android.googlesource.com/kernel/tegra/+/3f048135f3028e503d9d6e32b602e362bd9f374f"</a>3f048135f3028e503d9d6e32b602e362bd9f374f</a></li>
+<li><a href="https://android.googlesource.com/kernel/tegra/+/ae2019d83ecf14454315240c16dc3136212f0da2"</a>ae2019d83ecf14454315240c16dc3136212f0da2</a></li>
+</ol>
+
+<p>
+In addition, the end user must also check the box for MIDI
+in the <em>Settings</em> dialog for <em>Select USB configuration</em>,
+or by pulling down from the top of screen while attached
+to the USB host, and choosing <strong>MIDI</strong> for "Use USB for ...".
+</p>
+
+<h3 id="ble">BLE</h3>
+
+<p>
+MIDI over BLE is always enabled.
+As this transport is in draft status, it is subject to change.
+</p>
+
+<h3 id="virtual">Virtual (inter-app)</h3>
+
+<p>
+The virtual (inter-app) transport is always enabled.
+</p>
+
+<h2 id="claim-feature">Claiming the feature</h2>
+
+<p>
+Applications can screen for the presence of MIDI support using the
+<code>android.software.midi</code> feature.
+</p>
+
+<p>
+To claim MIDI support, add this line to your <code>device.mk</code>:
+</p>
+<pre>
+PRODUCT_COPY_FILES += \
+frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml
+</pre>
+
+<p>
+See the
+<a href="{@docRoot}compatibility/android-cdd.pdf">Android Compatibility Definition Document (CDD)</a>
+for information
+on requirements to claim the feature.
+</p>
+
+<h2 id="hostDebugging">Debugging while in host mode</h2>
+
+<p>
+While in USB host mode, Android Debug Bridge (adb) debugging over USB is unavailable.
+See section <a href="http://developer.android.com/tools/help/adb.html#wireless">Wireless usage</a>
+of
+<a href="http://developer.android.com/tools/help/adb.html">Android Debug Bridge</a>
+for an alternative.
+</p>
diff --git a/src/devices/devices_toc.cs b/src/devices/devices_toc.cs
index ca4ef2d..10a5dbb 100644
--- a/src/devices/devices_toc.cs
+++ b/src/devices/devices_toc.cs
@@ -46,11 +46,13 @@
<li><a href="<?cs var:toroot ?>devices/audio/testing_circuit.html">Light Testing Circuit</a></li>
<li><a href="<?cs var:toroot ?>devices/audio/loopback.html">Audio Loopback Dongle</a></li>
<li><a href="<?cs var:toroot ?>devices/audio/latency_measurements.html">Measurements</a></li>
+ <li><a href="<?cs var:toroot ?>devices/audio/latency_app.html">Applications</a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>devices/audio/avoiding_pi.html">Priority Inversion</a></li>
<li><a href="<?cs var:toroot ?>devices/audio/src.html">Sample Rate Conversion</a></li>
<li><a href="<?cs var:toroot ?>devices/audio/debugging.html">Debugging</a></li>
+ <li><a href="<?cs var:toroot ?>devices/audio/midi.html">MIDI</a></li>
<li><a href="<?cs var:toroot ?>devices/audio/usb.html">USB Digital Audio</a></li>
<li><a href="<?cs var:toroot ?>devices/audio/tv.html">TV Audio</a></li>
</ul>
@@ -215,6 +217,21 @@
</li>
<li class="nav-section">
+ <div class="nav-section-header">
+ <a href="<?cs var:toroot ?>devices/tech/admin/index.html">
+ <span class="en">Device Administration</span></a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>devices/tech/admin/implement.html">Implementation</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/admin/multi-user.html">Multiple Users</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/admin/managed-profiles.html">Managed Profiles</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/admin/provision.html">Provisioning</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/admin/multiuser-apps.html">Multiuser Apps</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/admin/testing-setup.html">Testing Setup</a></li>
+ </ul>
+ </li>
+
+ <li class="nav-section">
<div class="nav-section-header empty">
<a href="<?cs var:toroot ?>devices/halref/index.html">
<span class="en">HAL File Reference</span>
@@ -222,20 +239,6 @@
</div>
</li>
- <li><a href="<?cs var:toroot ?>devices/tech/kernel.html">Kernel</a></li>
-
- <li class="nav-section">
- <div class="nav-section-header">
- <a href="<?cs var:toroot ?>devices/tech/ram/index.html">
- <span class="en">RAM</span>
- </a>
- </div>
- <ul>
- <li><a href="<?cs var:toroot ?>devices/tech/ram/low-ram.html">Low RAM</a></li>
- <li><a href="<?cs var:toroot ?>devices/tech/ram/procstats.html">Viewing RAM Usage Data</a></li>
- </ul>
- </li>
-
<li class="nav-section">
<div class="nav-section-header">
<a href="<?cs var:toroot ?>devices/tech/ota/index.html">
@@ -251,14 +254,12 @@
</ul>
</li>
- <li><a href="<?cs var:toroot ?>devices/tech/netstats.html">Network Data</a></li>
-
<li class="nav-section">
<div class="nav-section-header">
<a href="<?cs var:toroot ?>devices/tech/power/index.html"><span class="en">Power</span></a>
</div>
<ul>
- <li><a href="<?cs var:toroot ?>devices/tech/power/batterystats.html">Viewing Battery Usage Data</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/power/batterystats.html">Battery Usage Data</a></li>
</ul>
</li>
@@ -331,6 +332,29 @@
</ul>
</li>
</ul>
+
+ <li class="nav-section">
+ <div class="nav-section-header">
+ <a href="<?cs var:toroot ?>devices/tech/resources.html">
+ <span class="en">System Resources</span>
+ </a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>devices/tech/kernel.html">Kernel Configuration</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/netstats.html">Network Usage Data</a></li>
+ <li class="nav-section">
+ <div class="nav-section-header">
+ <a href="<?cs var:toroot ?>devices/tech/ram/index.html">
+ <span class="en">RAM</span>
+ </a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>devices/tech/ram/low-ram.html">Low RAM Configuration</a></li>
+ <li><a href="<?cs var:toroot ?>devices/tech/ram/procstats.html">RAM Usage Data</a></li>
+ </ul>
+ </li>
+ </ul>
+
<li class="nav-section">
<div class="nav-section-header">
<a href="<?cs var:toroot ?>devices/tech/test_infra/tradefed/index.html">
diff --git a/src/devices/input/getevent.jd b/src/devices/input/getevent.jd
index 8bf4093..fd39dbb 100644
--- a/src/devices/input/getevent.jd
+++ b/src/devices/input/getevent.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>The <code>getevent</code> tool runs on the device and provides information about input
devices and a live dump of kernel input events.</p>
<p>It is very useful tool for ensuring that device drivers are reporing the
diff --git a/src/devices/input/input-device-configuration-files.jd b/src/devices/input/input-device-configuration-files.jd
index 877053c..ffe9ba4 100644
--- a/src/devices/input/input-device-configuration-files.jd
+++ b/src/devices/input/input-device-configuration-files.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>Input device configuration files (<code>.idc</code> files) contain device-specific
configuration properties that affect the behavior of input devices.</p>
<p>Input device configuration files are typically not necessary for standard
diff --git a/src/devices/input/key-character-map-files.jd b/src/devices/input/key-character-map-files.jd
index 6872cdb..d485707 100644
--- a/src/devices/input/key-character-map-files.jd
+++ b/src/devices/input/key-character-map-files.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>Key character map files (<code>.kcm</code> files) are responsible for mapping combinations
of Android key codes with modifiers to Unicode characters.</p>
<p>Device-specific key layout files are <em>required</em> for all internal (built-in)
diff --git a/src/devices/input/key-layout-files.jd b/src/devices/input/key-layout-files.jd
index d353d08..2b7cd53 100644
--- a/src/devices/input/key-layout-files.jd
+++ b/src/devices/input/key-layout-files.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>Key layout files (<code>.kl</code> files) are responsible for mapping Linux key codes
and axis codes to Android key codes and axis codes and specifying associated
policy flags.</p>
diff --git a/src/devices/input/keyboard-devices.jd b/src/devices/input/keyboard-devices.jd
index 74bafaa..267ae42 100644
--- a/src/devices/input/keyboard-devices.jd
+++ b/src/devices/input/keyboard-devices.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>Android supports a variety of keyboard devices including special function
keypads (volume and power controls), compact embedded QWERTY keyboards,
and fully featured PC-style external keyboards.</p>
diff --git a/src/devices/input/overview.jd b/src/devices/input/overview.jd
index 118fabf..11cdf97 100644
--- a/src/devices/input/overview.jd
+++ b/src/devices/input/overview.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>The Android input subsystem nominally consists of an event pipeline
that traverses multiple layers of the system.</p>
<h2 id="input-pipeline">Input Pipeline</h2>
diff --git a/src/devices/input/touch-devices.jd b/src/devices/input/touch-devices.jd
index 298ba15..bb78d35 100644
--- a/src/devices/input/touch-devices.jd
+++ b/src/devices/input/touch-devices.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>Android supports a variety of touch screens and touch pads, including
stylus-based digitizer tablets.</p>
<p>Touch screens are touch devices that are associated with a display such that
diff --git a/src/devices/input/validate-keymaps.jd b/src/devices/input/validate-keymaps.jd
index 6a907a1..4a099d4 100644
--- a/src/devices/input/validate-keymaps.jd
+++ b/src/devices/input/validate-keymaps.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>The Android framework has a small tool called <code>validatekeymaps</code> to validate the
syntax of input device configuration files, key layout files, key character
maps files and virtual key definition files.</p>
diff --git a/src/devices/storage/config-example.jd b/src/devices/storage/config-example.jd
index 347d8d5..fd55db8 100644
--- a/src/devices/storage/config-example.jd
+++ b/src/devices/storage/config-example.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
<p>Below are examples of external storage configurations as of Android 4.4
for various typical devices. Only the relevant portions of the configuration
diff --git a/src/devices/storage/index.jd b/src/devices/storage/index.jd
index e8786ec..894e85b 100644
--- a/src/devices/storage/index.jd
+++ b/src/devices/storage/index.jd
@@ -16,6 +16,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
<img style="float: right; margin: 0px 15px 15px 15px;" src="images/ape_fwk_hal_extstor.png" alt="Android external storage HAL icon"/>
diff --git a/src/devices/tech/admin/images/multi-user-perms.png b/src/devices/tech/admin/images/multi-user-perms.png
new file mode 100644
index 0000000..f955ddc
--- /dev/null
+++ b/src/devices/tech/admin/images/multi-user-perms.png
Binary files differ
diff --git a/src/devices/tech/admin/implement.jd b/src/devices/tech/admin/implement.jd
new file mode 100644
index 0000000..03ce93c
--- /dev/null
+++ b/src/devices/tech/admin/implement.jd
@@ -0,0 +1,147 @@
+page.title=Implementing Device Administration
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>This page walks you through the many features in Android 5.0 and higher
+platform release that need to be enabled and validated on devices to make them
+ready for managed profile and device owner user cases that are essential to using
+them in a corporate environment. In addition to the related Android Open Source
+Project (AOSP) code, there are a number of additional components required for a
+device to function with managed profiles.</p>
+
+<h2 id=requirements>Requirements</h2>
+
+<p>The following uses-feature need to be defined:</p>
+
+<pre>
+android.software.managed_users
+android.software.device_admin
+</pre>
+
+<p>Confirm with: <code>adb shell pm list features</code></p>
+
+<p>It should not be a low-RAM device, meaning <code>ro.config.low_ram</code>
+should not be defined. The framework automatically limits the number of users
+to 1 when the <code>low_ram</code> flag is defined.</p>
+
+<p>By default, only applications that are essential for correct operation of the
+profile should be enabled as part of provisioning a managed device.</p>
+
+<p>OEMs must ensure the managed profile or device has all required applications by
+modifying:</p>
+
+<pre>
+vendor_required_apps_managed_profile.xml
+vendor_required_apps_managed_device.xml
+</pre>
+
+<p>Here are examples from a Nexus device:</p>
+
+<code>packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml</code>
+
+<pre>
+<resources>
+ <!-- A list of apps to be retained on the managed device -->
+ <string-array name="vendor_required_apps_managed_device">
+ <item>com.android.vending</item> <!--Google Play -->
+ <item>com.google.android.gms</item> <!--Required by Play -->
+ <item>com.google.android.contacts</item> <!--Google or OEM Contacts-->
+ <item>com.google.android.googlequicksearchbox</item> <!--Google Launcher -->
+ <item>com.google.android.launcher</item> <!--Google Launcher or OEM Launcher -->
+ <item>com.google.android.dialer</item> <!--Google or OEM dialer to enable making phone calls -->
+ </string-array>
+</resources>
+</pre>
+
+<code>
+packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml
+</code>
+
+<pre>
+<resources>
+ <!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. -->
+ <string-array name="vendor_required_apps_managed_profile">
+ <item>com.android.vending</item> <!-- Google Play -->
+ <item>com.google.android.gms</item> <!-- Required by Play -->
+ <item>com.google.android.contacts</item> <!-- Google or OEM Contacts -->
+ </string-array>
+</resources>
+</pre>
+
+<h3 id=launcher>Launcher</h3>
+
+<p>The launcher must support badging applications with the icon badge provided
+in the Android Open Source Project (AOSP) to represent the managed applications
+and other badge user interface elements such as recents and notifications.</p>
+
+<p>Update the Launcher to support badging. If you use <a
+href="https://android.googlesource.com/platform/packages/apps/Launcher3/">launcher3</a>
+in AOSP as-is, then you likely already support this badging feature.
+</p>
+
+<h3 id=nfc>NFC</h3>
+
+<p>On devices with NFC, NFC must be enabled in the Android Setup Wizard and
+configured to accept managed provisioning intents:</p>
+
+<code>packages/apps/Nfc/res/values/provisioning.xml</code>
+
+<pre>
+<bool name="enable_nfc_provisioning">true</bool>
+<item>application/com.android.managedprovisioning</item>
+</pre>
+
+<h3 id=setup_wizard>Setup Wizard</h3>
+
+<p>The Android Setup Wizard needs to support device owner provisioning. When it
+opens, it needs to check if another process (such as device owner provisioning)
+has already finished the user setup. If this is the case, it needs to fire a
+home intent and finish the setup wizard. </p>
+
+<p>This intent will be caught by the provisioning application, which will then
+hand over control to the newly set device owner. This can be achieved by adding
+the following to your setup wizard’s main activity:</p>
+
+<pre>
+@Override
+ protected void onStart() {
+ super.onStart();
+
+ // When returning to a setup wizard activity, check to see if another setup process
+ // has intervened and, if so, complete an orderly exit
+ boolean completed = Settings.Secure.getInt(getContentResolver(),
+ Settings.Secure.USER_SETUP_COMPLETE, 0) != 0;
+ if (completed) {
+ startActivity(new Intent(Intent.ACTION_MAIN, null)
+ .addCategory(Intent.CATEGORY_HOME)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK
+ | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED));
+ finish();
+ }
+
+ ...
+ }
+</pre>
diff --git a/src/devices/tech/admin/index.jd b/src/devices/tech/admin/index.jd
new file mode 100644
index 0000000..7798355
--- /dev/null
+++ b/src/devices/tech/admin/index.jd
@@ -0,0 +1,62 @@
+page.title=Device Administration
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>Devices running Android 5.0 and later with the managed_users feature
+declared can be used in a <a href="http://www.android.com/work/">corporate
+environment</a> under the auspices of each company’s information technology (IT)
+department. This is possible with the introduction of <a href="multi-user.html">multiple
+users</a>, <a href="managed-profiles.html">managed profiles</a>, and enterprise
+mobility management (EMM) applications, as well as enhancements to default
+<a
+href="{@docRoot}devices/tech/security/encryption/index.html">encryption</a>,
+<a
+href="{@docRoot}devices/tech/security/verifiedboot/index.html">verified
+boot</a>, and <a
+href="{@docRoot}devices/tech/security/selinux/index.html">SELinux</a>.</p>
+
+<p>With these enhancements, either users or their IT departments may create
+managed profiles that separate corporate employer data from personal user
+information. Follow the documents within this section of the site to properly
+implement corporate device administration.</p>
+
+<h2 id=summary>Summary</h2>
+
+<p>Follow this flow to employ device administration:</p>
+
+<ol>
+ <li>Gain an understanding of key concepts, such as <a
+href="multi-user.html">multiple users</a> and <a
+href="managed-profiles.html">managed profiles</a>.
+ <li><a href="implement.html">Implement device administration</a> via custom
+overlay files.
+ <li><a href="testing-setup.html">Test</a> and validate your devices with EMM providers and applications.
+</ol>
+
+<h2 id=supporting_documentation>Supporting documentation</h2>
+
+<p><a href="http://developer.android.com/guide/topics/admin/device-admin.html">Device Administration API</a></p>
+
+<p><a href="https://developer.android.com/training/enterprise/index.html">Building Apps for Work</a></p>
diff --git a/src/devices/tech/admin/managed-profiles.jd b/src/devices/tech/admin/managed-profiles.jd
new file mode 100644
index 0000000..c36510e
--- /dev/null
+++ b/src/devices/tech/admin/managed-profiles.jd
@@ -0,0 +1,170 @@
+page.title=Employing Managed Profiles
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>A <em>managed profile</em> or <em>work profile</em> is an Android <a
+href="multi-user.html">user</a> with some additional special properties around
+management and visual aesthetic.</p>
+
+<h2 id=purpose>DevicePolicyManager APIs</h2>
+
+<p>Android 5.x or newer offers a greatly improved DevicePolicyManager with dozens of new
+APIs to support both corporate-owned and bring your own device (BYOD)
+administration use cases. Examples include app restrictions, silent
+installation of certificates, and cross-profile sharing intent access control.
+You may use the sample Device Policy Client (DPC) app, <a
+href="https://developer.android.com/samples/BasicManagedProfile/index.html">BasicManagedProfile.apk</a>,
+as a starting point. See <a
+href="https://developer.android.com/training/enterprise/work-policy-ctrl.html">Building
+a Work Policy Controller</a> for additional details.
+
+<h2 id=purpose>Purpose</h2>
+
+<p>The primary goal of a managed profile is to create a segregated and secure
+space for managed (for example, corporate) data to reside. The administrator of
+the profile has full control over scope, ingress, and egress of data as well as
+its lifetime. These policies offer great powers and therefore fall upon the
+managed profile instead of the device administrator.</p>
+
+<ul>
+ <li><strong>Creation</strong> - Managed profiles can be created by any application in the primary user. The
+user is notified of managed profile behaviors and policy enforcement before
+creation.
+ <li><strong>Management</strong> - Management is performed by applications that programmatically invoke APIs in
+the <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html">DevicePolicyManager</a> class to restrict use. Such applications are referred to as <em>profile owners</em> and are defined at initial profile setup. Policies unique to managed profile
+involve app restrictions, updatability, and intent behaviors.
+ <li><strong>Visual treatment</strong> - Applications, notifications, and widgets from the managed profile are always
+badged and typically made available inline with user interface (UI) elements
+from the primary user.
+</ul>
+
+<h2 id=data_segregation>Data Segregation </h2>
+
+<h3 id=applications>Applications</h3>
+
+<p>Applications are scoped with their own segregated data when the same app exists
+in the primary user and managed profile. Generally, applications cannot
+communicate directly with one another across the profile-user boundary and act
+independently of one another.</p>
+
+<h3 id=accounts>Accounts</h3>
+
+<p>Accounts in the managed profile are distinctly unique from the primary user.
+There is no way to access credentials across the profile-user boundary. Only
+apps in their respective context are able to access their respective accounts.</p>
+
+<h3 id=intents>Intents</h3>
+
+<p>The administrator controls whether intents are resolved in/out of managed
+profile or not. Applications from the managed profile are default scoped to
+stay within the managed profile exception of the Device Policy API.</p>
+
+<h3 id=settings>Settings</h3>
+
+<p>Enforcement of settings is generally scoped to the managed profile with a few
+exceptions. Specifically, lockscreen and encryption settings are still scoped
+to the device and shared between the primary user and managed profile.
+Otherwise, a profile owner does not have any device administrator privileges
+outside the managed profile.</p>
+
+<p>Managed profiles are implemented as a new kind of secondary user, such that:</p>
+
+<pre>
+uid = 10000 * userid + appid
+</pre>
+
+
+<p>They have separate app data like regular users:</p>
+
+<pre>
+/data/user/<userid>
+</pre>
+
+<p>The UserId is calculated for all system requests using <code>Binder.getCallingUid()</code>, and all system state and responses are separated by userId. You may consider
+instead using <code>Binder.getCallingUserHandle</code> rather than <code>getCallingUid</code> to avoid confusion between uid and userId.</p>
+
+<p>The AccountManagerService maintains a separate list of accounts for each user.</p>
+
+<p>The main differences between a managed profile and a regular secondary user are
+as follows:</p>
+
+<ul>
+ <li> The managed profile is associated with its parent user and started alongside
+the primary user at boot time.
+ <li> Notifications for managed profiles are enabled by ActivityManagerService
+allowing the managed profile to share the activity stack with the primary user.
+ <li> Some other system services shared are: IME, A11Y services, Wi-Fi, and NFC.
+ <li> New Launcher APIs allow launchers to display badged apps and whitelisted
+widgets from the managed profile alongside apps in the primary profile without
+switching users.
+</ul>
+
+<h2 id=device_administration>Device administration</h2>
+
+<p>Android device administration includes two new types of device administrators for
+enterprises:</p>
+
+<ul>
+ <li><em>Profile owner</em>—Designed for bring your own device (BYOD) environments
+ <li><em>Device Owner</em>—Designed for corp-liable environments
+</ul>
+
+<p>The majority of the new device administrator APIs that have been added for
+Android 5.0 are available only to profile or device owners. Traditional device
+administrators remain but are applicable to the simpler consumer-only case
+(e.g. find my device).</p>
+
+<h3 id=profile_owners>Profile owners</h3>
+
+<p>A Device Policy Client (DPC) app typically functions as the profile owner. The
+DPC app is typically provided by an enterprise mobility management (EMM)
+partner, such as Google Apps Device Policy.</p>
+
+<p>The profile owner app creates a managed profile on the device by sending the
+<code>ACTION_PROVISION_MANAGED_PROFILE</code> intent. This profile is
+distinguished by the appearance of badged instances of
+apps, as well as personal instances. That badge, or Android device
+administration icon, identifies which apps are work apps.</p>
+
+<p>The EMM has control only over the managed profile (not personal space) with some
+exceptions, such as enforcing the lock screen.</p>
+
+<h3 id=device_owners>Device owners</h3>
+
+<p>The device owner can be set only in an unprovisioned device:</p>
+
+<ul>
+ <li>Can be provisioned only at initial device setup
+ <li>Enforced disclosure always displayed in quick-settings
+</ul>
+
+<p>Device owners can conduct some tasks profile owners cannot, and here are a few examples:</p>
+
+<ul>
+ <li>Wipe device data
+ <li>Disable Wi-Fi/ BT
+ <li>Control <code>setGlobalSetting</code>
+ <li><code>setLockTaskPackages</code> (the ability to whitelist packages that can pin themselves to the foreground)
+</ul>
diff --git a/src/devices/tech/admin/multi-user.jd b/src/devices/tech/admin/multi-user.jd
new file mode 100644
index 0000000..8319be0
--- /dev/null
+++ b/src/devices/tech/admin/multi-user.jd
@@ -0,0 +1,162 @@
+page.title=Supporting Multiple Users
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>This document describes the Android multi-user feature. It allows more than one
+user on a single Android device by separating their accounts and application
+data. For instance, parents may let their children use the family tablet. Or a
+critical team might share a mobile device for on-call duty.</p>
+
+<h1 id=definitions>Definitions</h1>
+
+<p>Before supporting multiple Android users, you should understand the basic
+concepts involved. Here are the primary terms used when describing Android
+users and accounts:</p>
+
+<ul>
+ <li><em>User</em> - Each user is intended to be used by a different physical person. Each user
+has distinct application data and some unique settings, as well as a user
+interface to explicitly switch between users. A user can run in the background
+when another user is active; the system manages shutting down users to conserve
+resources when appropriate. Secondary users can be created either directly via
+the primary user interface or from a <a
+href="https://developer.android.com/guide/topics/admin/device-admin.html">Device
+Administration</a> application.
+ <li><em>Account</em> - Accounts are contained within a user but are not defined by a user. Nor is a
+user defined by or linked to any given account. Users and profiles contain
+their own unique accounts but are not required to have accounts to be
+functional. The list of accounts differs by user. See the <a href="https://developer.android.com/reference/android/accounts/Account.html">Account class</a> definition.
+ <li><em>Profile<strong></em> </strong>- A profile has separated app data but shares some system-wide settings (for
+example, Wi-Fi and Bluetooth). A profile is a subset of and tied to the
+existence of a user. A user can have multiple profiles. They are created
+through a <a href="https://developer.android.com/guide/topics/admin/device-admin.html">Device
+Administration</a> application. A profile always has an immutable
+association to a ‘parent’ user, defined by the user that created the profile.
+Profiles do not live beyond the lifetime of the creating user.
+ <li><em>App</em> - An application’s data exists within each associated user. App data is
+sandboxed from other applications within the same user. Apps within the same
+user can interact with each other via IPC. See <a href="https://developer.android.com/training/enterprise/index.html">Building Apps for Work</a>.
+</ul>
+
+<h2 id=user_types>User types</h2>
+
+<ul>
+ <li><em>Primary</em> - The first user added to a device. The primary user cannot be removed except
+by factory reset. This user also has some special privileges and settings only
+it can set. The primary user is always running even when other users are in the
+foreground.
+ <li><em>Secondary</em> - Any user added to the device other than the primary user. They can be
+removed by either themselves or the primary user and cannot impact other users
+on a device. Secondary users can run in the background and will continue to
+have network connectivity when they do.
+ <li><em>Guest<strong></em> </strong>- A guest user is a temporary secondary user with an explicit option to quick
+delete the guest user when its usefulness is over. There can be only one guest
+user at a time.
+</ul>
+
+<h2 id=profile_types>Profile types</h2>
+
+<ul>
+ <li><em>Managed<strong></em> </strong>- Managed profiles are created by an application to contain work data and
+apps. They are managed exclusively by the ‘profile owner’, the app who created
+the corp profile. Launcher, notifications and recent tasks are shared by the
+primary user and the corp profile.
+ <li><em>Restricted</em> - Restricted profiles use the accounts based off the primary user. The Primary
+user can control what apps are available on the restricted profile. Restricted
+profiles are available only on tablets.
+</ul>
+
+<h1 id=effects>Effects</h1>
+
+<p>When users are added to a device, some functionality will be curtailed when
+another user is in the foreground. Since app data is separated by user, the
+state of those apps differs by user. For example, email destined for an account
+of a user not currently in focus won’t be available until that user and account
+are active on the device.</p>
+
+<p>The default state is only the primary user has full access to phone calls and
+texts. The secondary user may receive inbound calls but cannot send or receive
+texts. The primary user must enable these functions for others.</p>
+
+ <p class="note"><strong>Note</strong>: To enable or disable the phone and SMS functions for a secondary user, go to
+Settings > Users, select the user, and switch the <em>Allow phone calls and SMS</em> setting to off.</p>
+
+<p>Please note, some restrictions exist when a secondary user is in background.
+For instance, the background secondary user will not be able to display the
+user interface or make Bluetooth services active. Finally, background secondary
+users will be halted by the system process if the device needs additional
+memory for operations in the foreground user.</p>
+
+<p>Here are aspects of behavior to keep in mind when employing multiple users on
+an Android device:</p>
+
+<ul>
+ <li>Notifications appear for all accounts of a single user at once.
+ <li>Notifications for other users do not appear until they are active.
+ <li>Each user gets his or her own workspace to install and place apps.
+ <li>No user has access to the app data of another user.
+ <li>Any user can affect the installed apps for all users.
+ <li>The primary user can remove apps or even the entire workspace established by
+secondary users.
+</ul>
+
+<h1 id=implementation>Implementation</h1>
+
+<h2 id=managing_users>Managing users</h2>
+
+<p>Management of users and profiles (with the exception of restricted profiles) is
+performed by applications that programmatically invoke API in the <code>DevicePolicyManager</code> class to restrict use.</p>
+
+<p>Schools and enterprises may employ users and profiles to manage the lifetime
+and scope of apps and data on devices. They may use the types outlined above in
+conjunction with the <a href="http://developer.android.com/reference/android/os/UserManager.html">UserManager API</a> to build unique solutions tailored to their use cases.</p>
+
+<h2 id=applying_the_overlay>Applying the overlay</h2>
+
+<p>The multi-user feature is disabled by default in the Android 5.0 release. To
+enable it, device manufacturers must define a resource overlay that replaces
+the following values in frameworks/base/core/res/res/values/config.xml:</p>
+
+<pre>
+<!-- Maximum number of supported users -->
+<integer name="config_multiuserMaximumUsers">1</integer>
+<!-- Whether Multiuser UI should be shown -->
+<bool name="config_enableMultiUserUI">false</bool>
+</pre>
+
+<p>To apply this overlay and enable guest and secondary users on the device, use the
+<code>DEVICE_PACKAGE_OVERLAYS</code> feature of the Android build system to:</p>
+
+<ul>
+ <li> Replace the value for <code>config_multiuserMaximumUsers</code> with one greater than 1
+ <li> Replace the value of <code>config_enableMultiUserUI</code> with: <code>true</code>
+</ul>
+
+<p>Device manufacturers may decide upon the maximum number of users.</p>
+
+<p>That said, if device manufacturers or others have modified settings, they need
+to ensure SMS and telephony work as defined in the <a
+href="{@docRoot}compatibility/android-cdd.pdf">Android Compatibility Definition
+Document</a> (CDD).</p>
diff --git a/src/devices/tech/admin/multiuser-apps.jd b/src/devices/tech/admin/multiuser-apps.jd
new file mode 100644
index 0000000..6577bcf
--- /dev/null
+++ b/src/devices/tech/admin/multiuser-apps.jd
@@ -0,0 +1,104 @@
+page.title=Building Multiuser-Aware Apps
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>When a device supports <a href="multi-user.html">multiple users</a>, its apps must be made aware of these distinct users.</p>
+
+<p>Certain apps need to have some components run as singletons and can accept
+requests from any user. Only system apps can currently use this feature.</p>
+
+<p>This facility:</p>
+
+<ul>
+ <li>Conserves resources
+ <li>Arbitrates one or more shared resources across users
+ <li>Reduces network overhead by using a single server connection
+</ul>
+
+<p>See the diagram below for a depiction of permissions flow with multiple users.</p>
+
+<p><img src="images/multi-user-perms.png" alt="Multiple users permissions flow" />
+<p class="img-caption"><strong>Figure 1.</strong> Multiple users permissions</p>
+
+<h2 id=enabling_a_singleton_component>Enabling a singleton component</h2>
+
+<p>To identify an app as a singleton, Add <code>android:singleUser=”true”</code> to your service or provider in the Android manifest.</p>
+
+<p>The system will instantiate that component in the process running as user 0
+only. Any requests to connect to that provider or service from any user will be
+routed to the process in user 0. If this is the only component in your app,
+only one instance of your app will run.</p>
+
+<p>Activities in your package will still be launched in a separate process for
+each user, with the UID being in the UID range for that user (such as 1010034).</p>
+
+<h2 id=interacting_with_users>Interacting with users</h2>
+
+<h3 id=perms_required>Set permissions</h3>
+
+<p>These permissions are required</p>
+
+<pre>
+INTERACT_ACROSS_USERS (signature|system)
+INTERACT_ACROSS_USERS_FULL (signature)
+</pre>
+
+<h3 id=apis>Employ APIs</h3>
+
+<p>Use the following APIs to make apps aware of multiple users.</p>
+
+<ol>
+ <li> Extract the user handle from incoming Binder calls:
+ <ul>
+ <li> <code>int userHandle = UserHandle.getCallingUserId()</code>
+ </ul>
+ <li> Use new, protected APIs to start services, activities, broadcasts on a specific
+user:
+ <ul>
+ <li><code>Context.startActivityAsUser(Intent, UserHandle)</code>
+ <li><code>Context.bindServiceAsUser(Intent, …, UserHandle)</code>
+ <li><code>Context.sendBroadcastAsUser(Intent, … , UserHandle)</code>
+ <li><code>Context.startServiceAsUser(Intent, …, UserHandle)
+UserHandle</code> can be an explicit user or one of the special handles: <code>UserHandle.CURRENT</code> or <code>UserHandle.ALL</code>. <code>CURRENT</code> indicates the user that is currently in the foreground. You can use <code>ALL</code> when you want to send a broadcast to all users.
+ </ul>
+ <li>Communicate with components in your own app:
+<code>(INTERACT_ACROSS_USERS)</code>
+Or with components in other apps:
+<code>(INTERACT_ACROSS_USERS_FULL)</code>
+ <li>You may need to create proxy components that run in the user’s process that
+then access the <code>singleUser</code> component in user 0.
+ <li>Query users and their handles with the new <code>UserManager</code> system service:
+ <ul>
+ <li><code>UserManager.getUsers()</code>
+ <li><code>UserManager.getUserInfo()</code>
+ <li><code>UserManager.supportsMultipleUsers()</code>
+ <li><code>UserManager.getUserSerialNumber(int userHandle)</code> - a non-recycled number that corresponds to a user handle.
+ <li><code>UserManager.getUserHandle(int serialNumber)</code>
+ <li><code>UserManager.getUserProfiles() </code>- returns the collection of self and managed profiles, if any.
+ </ul>
+ <li>Register to listen to specific or all users and the callbacks with new APIs on
+ContentObserver, PackageMonitor, BroadcastReceiver that provide additional
+information about which user has caused the callback.
+</ol>
diff --git a/src/devices/tech/admin/provision.jd b/src/devices/tech/admin/provision.jd
new file mode 100644
index 0000000..62b898e
--- /dev/null
+++ b/src/devices/tech/admin/provision.jd
@@ -0,0 +1,168 @@
+page.title=Provisioning for Device Administration
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>This page describes the process for deploying devices to corporate users.</p>
+
+<p>Device owner provisioning can be accomplished over NFC or with an activation
+code. See <a href="implement.html">Implementing Device Administration</a> for
+the complete list of requirements.</p>
+
+<p>Download the <a
+href="https://github.com/googlesamples/android-NfcProvisioning">NfcProvisioning
+APK</a> and <a
+href="https://github.com/googlesamples/android-DeviceOwner">Android-DeviceOwner
+APK</a>.</p>
+
+<h2 id=managed_provisioning>Managed Provisioning</h2>
+
+<p>Managed Provisioning is a framework UI flow to ensure users are adequately
+informed of the implications of setting a device owner or managed profile. You can
+think of it as a setup wizard for managed profiles.</p>
+
+<p class="note"><strong>Note:</strong> Remember, the device owner can be set
+only from an unprovisioned device. If
+<code>Settings.Secure.USER_SETUP_COMPLETE</code> has ever been set, then the
+device is considered provisioned & device owner cannot be set.</p>
+
+<p>Please note, devices that enable default encryption offer considerably
+simpler/quicker device administration provisioning flow. The managed provisioning
+component:</p>
+
+<ul>
+ <li>Encrypts the device</li>
+ <li>Creates the managed profile</li>
+ <li>Disables non-required applications</li>
+ <li>Sets the enterprise mobility management (EMM) app as profile owner</li>
+</ul>
+
+<p>In turn, the EMM app:</p>
+
+<ul>
+ <li>Adds user accounts</li>
+ <li>Enforces device compliance</li>
+ <li>Enables any additional system applications</li>
+</ul>
+
+<p>In this flow, managed provisioning triggers device encryption. The framework
+ copies the EMM app into the managed profile as part of managed provisioning.
+ The instance of the EMM app inside of the managed profile gets a callback from the
+framework when provisioning is done.</p>
+
+<p>The EMM can then add accounts and enforce policies; it then calls
+<code>setProfileEnabled()</code>, which makes the launcher icons visible.</p>
+
+<h2 id=profile_owner_provisioning>Profile Owner Provisioning</h2>
+
+<p>Profile owner provisioning assumes the user of the device oversees its
+management (and not a company IT department). To enable, profile owner
+provisioning, you must send an intent with appropriate extras. See the <a href="https://developer.android.com/samples/BasicManagedProfile/index.html">BasicManagedProfile.apk</a> for an example.</p>
+
+<p>Mobile Device Management (MDM) applications trigger the creation of the managed
+profile by sending an intent with action:</p>
+
+<p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/admin/DevicePolicyManager.java">DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE</a></p>
+
+<p>Here is a sample intent that will trigger the creation of the managed profile
+and set the DeviceAdminSample as the profile owner:</p>
+
+<pre>
+adb shell am start -a android.app.action.PROVISION_MANAGED_PROFILE \
+ -c android.intent.category.DEFAULT \
+ -e wifiSsid $(printf '%q' \"GoogleGuest\") \
+ -e deviceAdminPackage "com.google.android.deviceadminsample" \
+ -e android.app.extra.deviceAdminPackageName $(printf '%q'
+ .DeviceAdminSample\$DeviceAdminSampleReceiver) \
+ -e android.app.extra.DEFAULT_MANAGED_PROFILE_NAME "My Organisation"
+</pre>
+
+<h2 id=device_owner_provisioning_via_nfc>Device Owner Provisioning via NFC</h2>
+
+<p>Device owner provisioning via NFC is similar to the profile owner method but
+requires more bootstrapping before managed provisioning.</p>
+
+<p>To use this method, <a href="http://developer.android.com/guide/topics/connectivity/nfc/nfc.html">NFC bump</a> the device from the first page of setup wizard (SUW). This offers a low-touch
+flow and configures Wi-Fi, installs the DPC, and sets the DPC as device owner.</p>
+
+<p>Here is the typical NFC bundle:</p>
+
+<pre>
+ EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME
+ EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LOCATION
+ EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
+ EXTRA_PROVISIONING_WIFI_SSID
+ EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
+</pre>
+
+<p>The device must have NFC configured to accept the managed provisioning mimetype
+from SUW:</p>
+
+<pre>
+/packages/apps/Nfc/res/values/provisioning.xml
+
+ <bool name="enable_nfc_provisioning">true</bool>
+ <item>application/com.android.managedprovisioning</item>
+</pre>
+
+<h2 id=device_owner_provisioning_with_activation_code>Device Owner Provisioning with Activation Code</h2>
+
+<p>Select <em>Add Work Account</em> from the setup wizard. This triggers a
+lookup of the EMM from Android servers.</p>
+
+<p>The device installs the EMM app and starts provisioning flow. As an extra
+option, Android device administration supports the option of using email
+address with a six-digit activation code to bootstrap the process as part of
+setup wizard.</p>
+
+<h2 id=emm_benefits>EMM benefits</h2>
+
+<p>An EMM can help by conducting these tasks for you:</p>
+
+<ul>
+ <li>Provision managed profile
+ <li>Apply security policies
+ <ul>
+ <li>Set password complexity
+ <li>Lockdowns: disable screenshots, sharing from managed profile, etc.
+ </ul>
+ <li>Configure enterprise connectivity
+ <ul>
+ <li>Use WifiEnterpriseConfig to configure corporate Wi-Fi
+ <li>Configure VPN on the device
+ <li>Use DPM.setApplicationRestrictions() to configure corporate VPN
+ </ul>
+ <li>Enable corporate app Single Sign-On (SSO)
+ <ul>
+ <li>Install desired corporate apps
+ <li>Use DPM.installKeyPair()to silently install corp client certs
+ <li>Use DPM.setApplicationRestrictions() to configure hostnames, cert alias’ of
+corporate apps
+ </ul>
+</ul>
+
+<p>Managed provisioning is just one piece of the EMM end-to-end workflow, with the
+ end goal being to make corporate data accessible to apps in the managed profile.</p>
+
+<p>See <a href="https://docs.google.com/document/d/1xWdZHjsDB_4FWQcHfPh84EuTvljoMgrc2JINGMBtDQg/edit#">Manual Setup for Device Owner Testing</a> for testing instructions.</p>
diff --git a/src/devices/tech/admin/testing-setup.jd b/src/devices/tech/admin/testing-setup.jd
new file mode 100644
index 0000000..678c04b
--- /dev/null
+++ b/src/devices/tech/admin/testing-setup.jd
@@ -0,0 +1,93 @@
+page.title=Setting up Device Testing
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>These are the essential elements that must exist for OEM devices to ensure
+minimal support for managed profiles:</p>
+
+<ul>
+ <li>Profile Owner as described in <a
+href="https://developer.android.com/training/enterprise/app-compatibility.html">Ensuring
+Compatibility with Managed Profiles</a>
+ <li>Device Owner
+ <li>Activation Code Provisioning
+ </ul>
+<p>See <a href="implement.html">Implementing Device Administration</a> for the complete list of requirements.</p>
+
+<h2 id=summary>Summary</h2>
+<p>To test your device administration features:</p>
+
+<ol>
+ <li>For device owner, use the <a
+href="https://developer.android.com/samples/BasicManagedProfile/index.html">BasicManagedProfile.apk</a>
+test app.
+ <li>Consider working with other enterprise mobility management (EMM) providers
+directly.
+</ol>
+
+<h2 id=set_up_the_device_owner_for_testing>Set up the device owner for testing</h2>
+<ol>
+ <li>Device MUST be built with <strong>userdebug</strong> or <strong>eng</strong> build.
+ </li>
+ <li>Factory reset the target device (and continue with the next steps in the
+ meantime).
+ </li>
+ <li>Download <a
+ href="http://developer.android.com/downloads/samples/BasicManagedProfile.zip">BasicManagedProfile.zip</a>. (Also see the <a
+ href="http://developer.android.com/samples/BasicManagedProfile/index.html">BasicManagedProfile</a> documentation.)</li>
+ <li>Unzip the file.
+ <li>Navigate (<code>cd</code>) to the unzipped directory.</li>
+ <li>If you don't have it, download the <a href="http://developer.android.com/sdk/index.html#Other">Android SDK Tools</a> package.</li>
+ <li>Create a file with the name <code>local.properties</code> containing the following single
+ line:<br>
+ <code>sdk.dir=<em><path to your android SDK folder></em></code><br>
+ <li>On Linux and Mac OS, run:<br>
+ <code>./gradlew assembleDebug</code><br>
+ Or on windows run:<br>
+ <code>gradlew.bat assembleDebug</code></li>
+ <li>If the build is unsuccessful because you have an outdated android SDK, run:<br>
+ <code><em><your android sdk folder></em>/tools/android update sdk -u -a</code></li>
+ <li>Wait for factory reset to complete if it hasn’t yet.<br>
+ <p class="Caution"><strong>Caution</strong>: Stay on the first screen
+ after factory reset and do not finish the setup wizard.</li>
+ <li>Install the BasicManagedProfile app by running the following command:<br>
+ <code>adb install ./Application/build/outputs/apk/Application-debug.apk </code>
+ </li>
+ <li>Set this app as the device owner by running this command:<br><code>$ adb shell am start -a
+ com.android.managedprovisioning.ACTION_PROVISION_MANAGED_DEVICE --es
+ android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME
+ com.example.android.basicmanagedprofile</code>
+ </li>
+ <li>Go through device owner setup on the device (encrypt, select Wi-Fi, etc.)</li>
+</ol>
+
+<h2 id=verify_the_device_owner_was_correctly_setup>Verify the device owner was correctly setup</h2>
+<ol>
+ <li>Go to <em>Settings > Security > Device Administrators</em>.
+ </li>
+ <li>Confirm the BasicManagedProfile is in the list and verify it cannot be
+ disabled. (This signifies it is a device owner.)
+ </li>
+</ol>
diff --git a/src/devices/tech/dalvik/dex-format.jd b/src/devices/tech/dalvik/dex-format.jd
index 9b7a6a2..5315db1 100644
--- a/src/devices/tech/dalvik/dex-format.jd
+++ b/src/devices/tech/dalvik/dex-format.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/src/devices/tech/index.jd b/src/devices/tech/index.jd
index 62a1f59..10c42ab 100644
--- a/src/devices/tech/index.jd
+++ b/src/devices/tech/index.jd
@@ -30,14 +30,6 @@
are looking to modify, contribute to, or port the Android software. This is
"under the hood" information intended for engineers.</p>
-<h2 id="accessory-protocol-information">Accessories</h2>
-<p>Android devices can connect to hardware accessories, such as audio docks,
-keyboards and custom hardware, through USB or Bluetooth. This section
-describes the Android Open Accessory protocol (AOAP) for accessory hardware
-builders.</p>
-<p><a href="{@docRoot}accessories/index.html">» Accessory Protocol
-Information</a></p>
-
<h2 id="art-technical-information">ART</h2>
<p>The Android runtime (ART) is the heart of Android. It's a fast, ahead-of-time
compiled runtime with modern garbage collection designed to scale.
@@ -61,6 +53,13 @@
<p><a href="{@docRoot}devices/tech/debug/index.html">» Debugging
Information</a></p>
+<h2 id="admin-information">Device Administration</h2>
+<p>Since Android 5.0, the platform supports use cases in a corporate
+environment under the auspices of each company’s information technology (IT)
+department.</p>
+<p><a href="{@docRoot}devices/tech/admin/index.html">» Device
+administration information</a></p>
+
<h2 id="HAL-technical-information">HAL File Reference</h2>
<p>Android's Hardware Abstraction Layer (HAL) provides the interface between
software APIs and hardware drivers. This section contains the commented code
@@ -109,4 +108,4 @@
slot into environments with existing build, test, and reporting
infrastructures.</p>
<p><a href="{@docRoot}devices/tech/test_infra/tradefed/index.html">
-» Trade Federation Testing Infrastructure Overview</a></p>
\ No newline at end of file
+» Trade Federation Testing Infrastructure Overview</a></p>
diff --git a/src/devices/tech/kernel.jd b/src/devices/tech/kernel.jd
index 637c5c4..e3f89bb 100644
--- a/src/devices/tech/kernel.jd
+++ b/src/devices/tech/kernel.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,7 +16,18 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<p>The kernel configuration settings in this document are meant to be used as a base for an Android kernel configuration. All devices should have the options in android-base configuration enabled. While not mandatory, the options in android-recommended configuration enable advanced Android
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
+<p>The kernel configuration settings in this document are meant to be used as a
+base for an Android kernel configuration. All devices should have the options
+in android-base configuration enabled. While not mandatory, the options in
+android-recommended configuration enable advanced Android
features.</p>
<p>
diff --git a/src/devices/tech/resources.jd b/src/devices/tech/resources.jd
new file mode 100644
index 0000000..dade1a7
--- /dev/null
+++ b/src/devices/tech/resources.jd
@@ -0,0 +1,20 @@
+page.title=System Resources
+@jd:body
+
+<!--
+ Copyright 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<p> The following sections contain information, documentation, tips and tricks about Android system resources.</p>
diff --git a/src/devices/tech/security/images/device_states.png b/src/devices/tech/security/images/device_states.png
deleted file mode 100644
index 319c345..0000000
--- a/src/devices/tech/security/images/device_states.png
+++ /dev/null
Binary files differ
diff --git a/src/devices/tech/security/images/dm-verity_mgmt.png b/src/devices/tech/security/images/dm-verity_mgmt.png
index f67b93f..2c2854e 100644
--- a/src/devices/tech/security/images/dm-verity_mgmt.png
+++ b/src/devices/tech/security/images/dm-verity_mgmt.png
Binary files differ
diff --git a/src/devices/tech/security/images/verified_boot.png b/src/devices/tech/security/images/verified_boot.png
index 592aee8..b1c5cb6 100644
--- a/src/devices/tech/security/images/verified_boot.png
+++ b/src/devices/tech/security/images/verified_boot.png
Binary files differ
diff --git a/src/devices/tech/security/overview/acknowledgements.jd b/src/devices/tech/security/overview/acknowledgements.jd
index 19e79ec..35e8cbc 100644
--- a/src/devices/tech/security/overview/acknowledgements.jd
+++ b/src/devices/tech/security/overview/acknowledgements.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2014 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>The Android Security Team would like to thank the following people and
parties for helping to improve Android security. They have done this either by
finding and responsibly reporting security vulnerabilities to <a
diff --git a/src/devices/tech/security/verifiedboot/dm-verity.jd b/src/devices/tech/security/verifiedboot/dm-verity.jd
index f86c1b2..0b03dda 100644
--- a/src/devices/tech/security/verifiedboot/dm-verity.jd
+++ b/src/devices/tech/security/verifiedboot/dm-verity.jd
@@ -189,6 +189,9 @@
<p>And this table describes those metadata fields.</p>
+<p class="table-caption" id="table1">
+ <strong>Table 1.</strong> Verity metadata fields</p>
+
<table>
<tr>
<th>Field</th>
@@ -233,3 +236,11 @@
<td>0</td>
</tr>
</table>
+
+<h3 id="optimize">Optimizing dm-verity</h3>
+
+<p>To get the best performance out of dm-verity, you should:</p>
+ <ul>
+ <li>In the kernel, turn on NEON SHA-2 for ARMv7 and the SHA-2 extensions for ARMv8.
+ <li>Experiment with different read-ahead and prefetch_cluster settings to find the best configuration for your device.
+ </ul>
diff --git a/src/devices/tech/security/verifiedboot/verified-boot.jd b/src/devices/tech/security/verifiedboot/verified-boot.jd
index c96d930..19a95a4 100644
--- a/src/devices/tech/security/verifiedboot/verified-boot.jd
+++ b/src/devices/tech/security/verifiedboot/verified-boot.jd
@@ -41,6 +41,9 @@
<h2 id=glossary>Glossary</h2>
+<p class="table-caption" id="table1">
+ <strong>Table 1.</strong> Glossary of terms related to verified boot</p>
+
<table>
<tr>
<td>
@@ -65,7 +68,7 @@
</td>
<td>
<p>The device state indicates how freely software can be flashed to the device.
-Device states are LOCKED, UNLOCKED, or VERIFIED.</p>
+Device states are LOCKED and UNLOCKED.</p>
</td>
</tr>
<tr>
@@ -94,38 +97,39 @@
must be used to verify the boot image.</p>
</td>
</tr>
- <tr>
- <td>
-<p>User provided keystore</p>
-</td>
- <td>
-<p>The user keystore is a keystore flashed to the device via <code>fastboot
-flash keystore <path></code>.</p>
-</td>
- </tr>
</table>
<h2 id=overview>Overview</h2>
<p>In addition to device state - which already exists in devices and controls
whether the bootloader allows new software to be flashed - we introduce the
-concept of boot state that indicates the state of device integrity. We also
-add a third device state, which allows developers for example, to flash the
-software more frequently without a data wipe while still benefiting from
-verification.</p>
+concept of boot state that indicates the state of device integrity.</p>
+
+<h3 id=classes>Classes</h3>
+
+<p>We define two implementation classes for verified boot depending on how
+fully the device implements this specification, as follows:</p>
+
+<p><strong>Class A</strong> implements verified boot with full chain of trust
+up to verified partitions. This implementation must support the LOCKED device
+state, and GREEN and RED boot states.</p>
+
+<p><strong>Class B</strong> implements Class A and additionally supports the
+UNLOCKED device state and the ORANGE boot state.</p>
<h3 id=verification_keys>Verification keys</h3>
<p>Bootloader integrity must be verified using a hardware root of trust. For
-verifying boot and recovery images, the bootloader must have a fixed OEM key
-available to it. It must always attempt to verify the boot image using the OEM
-key and only try other possible keys if this verification fails.</p>
+verifying boot and recovery partitions, the bootloader must have a fixed OEM key
+available to it. It must always attempt to verify the boot partition using the OEM
+key first and try other possible keys only if this verification fails.</p>
-<p>It must be possible for the user to flash alternative image verification keys
-to the device, and the bootloader must try verification using these keys if
-verification using the OEM key fails. However, using an image signed with the
-user-provided keystore must result in a notification to be shown, as described
-below.</p>
+<p>In Class B implementations, it must be possible for the user to flash
+software signed with other keys when the device is UNLOCKED. If the device is
+then LOCKED and verification using the OEM key fails, the bootloader must try
+verification using the certificate embedded in the partition signature.
+However, using a partition signed with anything other than the OEM key must
+result in a notification or a warning, as described below.</p>
<h3 id=boot_state>Boot state</h3>
@@ -133,103 +137,62 @@
attempt:</p>
<ul>
- <li> GREEN, indicating a full chain of trust extending from the bootloader to the
-system partition, including the bootloader, boot partition, and system
-partition.
+ <li>GREEN, indicating a full chain of trust extending from the bootloader to
+verified partitions, including the bootloader, boot partition, and all verified
+partitions.
+
+ <li>YELLOW, indicating the boot partition has been verified using the
+embedded certificate, and the signature is valid. The bootloader is required to
+display a notification and the fingerprint of the public key during boot.
+
+ <li>ORANGE, indicating a device may be freely modified. Device integrity is
+left to the user to verify out-of-band. The bootloader must display a warning
+to the user before allowing the boot process to continue.
+
+ <li>RED, indicating the device has failed verification. The bootloader must
+display a warning to the user before allowing the boot process to continue.
</ul>
-<ul>
- <li> YELLOW, indicating a chain of trust starting from a user-provided keystore
-and extending up. To enable users to acquire trust in their keystore,
-bootloaders are required to display a partial hash of the verifying keystore
-during boot.
-</ul>
+<p>The recovery partition must also be verified in the exact same way.</p>
-<ul>
- <li> ORANGE, indicating a device may be freely modified. Device integrity is
-left to the user to verify out-of-band.
-</ul>
+<h3 id=device_state>Device state</h3>
-<ul>
- <li> RED, indicating the device has failed verification. This must display a
-warning to the user before allowing the boot process to continue.
-</ul>
+<p>The device is required to be in one of two states at all times:</p>
-<p>The recovery partition must also be verified and should be verified in the
-exact same way.</p>
+<ol>
+ <li>LOCKED, indicating the device cannot be flashed. A LOCKED device must
+boot into the GREEN, YELLOW, or RED states during any attempted boot.
+
+ <li>UNLOCKED, indicating the device may be flashed freely and is not intended
+to be verified. An UNLOCKED device must always boot to the ORANGE boot state.
+</ol>
<img src="../images/verified_boot.png" alt="Verified boot flow" id="figure1" />
<p class="img-caption"><strong>Figure 1.</strong> Verified boot flow</p>
-<h3 id=device_state>Device state</h3>
-
-<p>The device is required to be in one of three states at all times:</p>
-
-<ol>
- <li>LOCKED, indicating the device cannot currently be flashed. In the image
-above, a LOCKED device must boot into the GREEN state, YELLOW state, or RED
-state during any attempted boot. It must not be possible to alter the user
-keystore in the LOCKED state.
-
- <li>VERIFIED, indicating someone in physical control of the device may perform
-limited actions intended to change the state of the device but may not break
-its current chain of trust. In the image above, a VERIFIED device must boot
-into the GREEN state, YELLOW state, or RED state during each attempted boot. It
-must not be possible to alter the user keystore in the VERIFIED state. It must
-be possible to:
- <ol>
- <li> Flash the following partitions:
- <ol>
- <li> bootloader
- <li> boot partition
- <li> system partition
- <li> vendor partition
- <li> recovery partition
- </ol>
- <li> Erase the following partitions:
- <ol>
- <li> userdata
- <li> cache
- </ol>
- </ol>
-
-<p>Boot and recovery image signatures may be verified during the flashing process,
-and the bootloader may reject images that do not validate against the OEM key
-or the user-provided keystore at this point. However, signatures must also be
-verified again at every boot.
-
- <li>UNLOCKED, indicating the device may be flashed freely and is not intended
-to be verified.
-</ol>
-
<h2 id=detailed_design>Detailed design</h2>
<p>Achieving full chain of trust requires support from both the bootloader and the
-software on the boot partition, specifically <code>init</code>, which is responsible for
-mounting additional partitions. Verification metadata must also be appended to the
-system partition and any additional partitions whose integrity should be
-verified.</p>
+software on the boot partition, which is responsible for mounting further
+partitions. Verification metadata must also be appended to the system partition
+and any additional partitions whose integrity should be verified.</p>
<h3 id=bootloader_requirements>Bootloader requirements</h3>
-<p>The bootloader is the guardian of the device state, manages the user-provided
-keystore, and is responsible for initializing the TEE and binding its root of
-trust.</p>
+<p>The bootloader is the guardian of the device state and is responsible for
+initializing the TEE and binding its root of trust.</p>
<p>Most importantly, the bootloader must verify the integrity of the boot and/or
recovery partition before moving execution to the kernel and display the
-warnings or notifications in the section <a href="#boot_state">Boot state</a>.</p>
+warnings specified in the section <a href="#boot_state">Boot state</a>.</p>
-<h4 id=changing_device_state><strong>Changing device state</strong></h4>
+<h4 id=changing_device_state>Changing device state</h4>
<p>State changes are performed using the <code>fastboot flashing [unlock |
-verified | lock]</code> command. And to protect user data, <strong>all</strong>
+lock]</code> command. And to protect user data, <strong>all</strong>
state transitions require a data wipe. Note the user must be asked for
confirmation before data is deleted.</p>
-<img src="../images/device_states.png" alt="Changing device states" id="figure2" />
-<p class="img-caption"><strong>Figure 2.</strong> Changing device states</p>
-
<ol>
<li>The UNLOCKED to LOCKED transition is anticipated when a user buys a used
development device. As a result of locking the device, the user should have
@@ -237,20 +200,13 @@
<li>The LOCKED to UNLOCKED transition is expected in the case where a developer
wishes to disable verification on the device.
-
- <li>The LOCKED to VERIFIED transition is expected in the case where a developer
-wishes to do development on the device and doesn’t want to wipe data frequently.
-
- <li>The VERIFIED to LOCKED transition is idempotent with the above.
-
- <li>The UNLOCKED to VERIFIED transition is anticipated when a user wishes to put a
-development device in a more secure state but may not want to prevent
-themselves from flashing new system images.
-
- <li> The VERIFIED to UNLOCKED transition is idempotent with the above.
</ol>
<p>Requirements for <code>fastboot</code> commands that alter device state are listed in the table below:</p>
+
+<p class="table-caption" id="table2">
+ <strong>Table 2.</strong> <code>fastboot</code> commands</p>
+
<table>
<tr>
<td>
@@ -266,9 +222,8 @@
flashing lock</code></td>
<td>
<ul>
- <li>Wipe data after asking the user for confirmation
+ <li>Wipe data after asking the user for confirmation
<li>Clear a write-protected bit indicating the device is unlocked
- <li>Clear a write-protected bit indicating the device is verified
</ul>
</td>
</tr>
@@ -278,21 +233,8 @@
flashing unlock</code></td>
<td>
<ul>
- <li>Wipe data after asking the user for confirmation
+ <li>Wipe data after asking the user for confirmation
<li>Set a write-protected bit indicating the device is unlocked
- <li>Clear a write-protected bit indicating the device is verified
-</ul>
-</td>
- </tr>
- <tr>
- <td>
-<code>
-flashing verified</code></td>
- <td>
-<ul>
- <li>Wipe data after asking the user for confirmation
- <li>Clear a write-protected bit indicating the device is unlocked
- <li>Set a write-protected bit indicating the device is verified
</ul>
</td>
</tr>
@@ -300,6 +242,10 @@
<p>When altering partition contents, the bootloader must check the bits set by
the above commands as described in the following table:</p>
+
+<p class="table-caption" id="table3">
+ <strong>Table 3.</strong> <code>fastboot</code> command requirements</p>
+
<table>
<tr>
<td>
@@ -314,128 +260,110 @@
<code>
flash <partition></code></td>
<td>
-<ul>
- <li>If the bit set by <code>flashing unlock</code> is set, flash the partition as normal
- <li>If this bit is not set, check the bit set by <code>flashing verified</code>
- <ul>
- <li>If this bit is not set, exit with an error
- <li>If this bit is set and <partition> is on the list provided in
- the section <a href="#device_state">Device state</a>, flash the partition as normal.
- </ul>
-</ul>
+ <p>If the bit set by <code>flashing unlock</code> is set, flash the
+ partition. Otherwise, do not allow flashing.<p>
</td>
</tr>
</table>
-<p>The same checks should be performed for any <code>fastboot</code> command that can be used to change the contents of partitions.</p>
+<p>The same checks should be performed for any <code>fastboot</code> command
+that can be used to change the contents of partitions.</p>
-<h4 id=managing_user_provided_keystore><strong>Managing user-provided keystore</strong></h4>
+<p class="note"><strong>Note</strong>: Class B implementations must support
+changing device state.</p>
-<p>Users can flash their own verification keys to the device, which must be
-used to verify the integrity of boot and recovery images if verification
-against the OEM key fails. This allows a developer to change the system
-software frequently, for example, while still keeping verified boot enabled.</p>
+<h4 id=binding_tee_root_of_trust>Binding TEE root of trust</h4>
-<p>The bootloader is responsible for maintaining the integrity of the user
-keystore. It must not be possible to change the contents of the keystore unless
-the device is UNLOCKED. When the user flashes a new keystore to the device, the
-bootloader must sign it using the TEE and store the signed keystore. Before
-using keys from the keystore, the bootloader must use the TEE to verify the
-signature.</p>
-
-<p>Requirements for <code>fastboot</code> commands used to manage the user-provided keystore are listed in the table
-below:</p>
-<table>
- <tr>
- <td>
-<p><strong><code>fastboot</code> command</strong></p>
-</td>
- <td>
-<p>Requirements</p>
-</td>
- </tr>
- <tr>
- <td>
-<code>
-flash keystore <filename></code></td>
- <td>
-<ul>
- <li>Check the bit set by <code>flashing unlock</code>; if not set, exit with an error
- <li>Validate the given keystore against the format provided in section <a href="#keystore_format">Keystore format</a>
- <li>Pass the keystore to the TEE for signing
- <li>Write the signed keystore to the write-protected user keystore storage
- area (location to be determined by the OEM)
-</ul>
-</td>
- </tr>
- <tr>
- <td>
-<code>
-erase keystore</code></td>
- <td>
-<ul>
- <li>Check the bit set by <code>flashing unlock</code>; if not set, exit with an error
- <li>Erase the keystore stored in the write-protected user keystore storage area
-</ul>
- </td>
- </tr>
-</table>
-
-<h4 id=binding_tee_root_of_trust><strong>Binding TEE root of trust</strong></h4>
-
-<p>After the bootloader has initialized the TEE and performed boot image
-verification steps, it must pass the following information to the TEE Keymaster
-as the root of trust:</p>
+<p>If TEE is available, the bootloader should pass the following information to
+the TEE to bind the Keymaster root of trust, after partition verification and
+TEE initialization:</p>
<ol>
- <li>The public key that was used to sign the boot image
- <li>The current device state (LOCKED, VERIFIED, or UNLOCKED)
+ <li>the public key that was used to sign the boot partition
+ <li>the current device state (LOCKED or UNLOCKED)
</ol>
-<p>This changes the keys derived by the TEE. For disk encryption, for example,
-this prevents user data from being decrypted when the device is booted using a
-potentially untrusted image signed with a different key.</p>
+<p>This changes the keys derived by the TEE. Taking disk encryption as an example,
+this prevents user data from being decrypted when the device state changes.</p>
<p class="note"><strong>Note:</strong> This means if the system software or the
device state changes, encrypted user data will no longer be accessible as the
TEE will attempt to use a different key to decrypt the data.</p>
-<h4 id=booting_into_recovery><strong>Booting into recovery</strong></h4>
+<h4 id=booting_into_recovery>Booting into recovery</h4>
-<p>The recovery image should be verified in exactly the same manner as the boot
-image.</p>
+<p>The recovery partition should be verified in exactly the same manner as the
+boot partition.</p>
+
+<h4 id=comm_boot_state>Communicating boot state</h4>
+
+<p>System software needs to be able to determine the verification status of
+previous stages. The bootloader must specify the current boot state as a
+parameter on the kernel command line (or through the device tree under
+<code>firmware/android/verifiedbootstate</code>) as described in the table
+below:</p>
+
+<p class="table-caption" id="table4">
+ <strong>Table 4.</strong> Kernel command line parameters</p>
+
+<table>
+ <tr>
+ <th>Kernel command line parameter</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td><code>androidboot.verifiedbootstate=green</code></td>
+ <td>Device has booted into GREEN boot state.<br>
+ Boot partition has been verified using the OEM key and it’s valid.</td>
+ </tr>
+ <tr>
+ <td><code>androidboot.verifiedbootstate=yellow</code></td>
+ <td>Device has booted into YELLOW boot state.<br>
+ Boot partition has been verified using the certificate embedded into
+ the signature and it’s valid.</td>
+ </tr>
+ <tr>
+ <td><code>androidboot.verifiedbootstate=orange</code></td>
+ <td>Device has booted into ORANGE boot state.<br>
+ The device is unlocked and no verification has been performed.</td>
+ </tr>
+ <tr>
+ <td><code>androidboot.verifiedbootstate=red</code></td>
+ <td>Device has booted into RED boot state.<br>
+ The device has failed verification.</td>
+ </tr>
+</table>
<h3 id=boot_partition>Boot partition</h3>
-<p>Once execution has moved to the boot and/or recovery image, <code>init</code> is responsible
-for setting up verification for further partitions. Due to its large size, the
-system partition cannot be verified similarly to previous parts but must be
-verified in real time as it’s being accessed by using the dm-verity kernel
-driver.</p>
+<p>Once execution has moved to the boot partition, the software there is responsible
+for setting up verification of further partitions. Due to its large size, the
+system partition typically cannot be verified similarly to previous parts but must be
+verified as it’s being accessed instead using the dm-verity kernel driver or a
+similar solution.</p>
-<p>When <code>fs_mgr</code> flags in the device’s <code>fstab</code> indicate a partition should be
-verified, <code>init</code> will verify the signed verity metadata appended to the partition
-before mounting it and set up the dm-verity device for the partition.</p>
+<p>If dm-verity is used to verify large partitions, the signature of the verity
+metadata appended to each verified partition must be verified before the
+partition is mounted and dm-verity is set up for it.</p>
-<h4 id=managing_dm-verity><strong>Managing dm-verity</strong></h4>
+<h4 id=managing_dm-verity>Managing dm-verity</h4>
-<p>By default, dm-verity operates in verifying mode and verifies each block read
-from the device against a hash tree passed to it by <code>init</code> during set up. If it
+<p>By default, dm-verity operates in enforcing mode and verifies each block read
+from the partition against a hash tree passed to it during setup. If it
comes across a block that fails to verify, it returns an I/O error and makes
the block with unexpected contents inaccessible to user space. Depending on
which block is corrupted, this may cause some of the programs that reside on
the partition to malfunction.</p>
-<p>Using a persistent flag, dm-verity can also be configured to function in
-logging mode. This flag is read by <code>init</code> when setting up dm-verity. And if the
-mode flag is set to logging or verity metadata cannot be verified, a warning
-must be displayed to the user, similar to the warning the bootloader shows
-before booting into RED state.</p>
+<p>Using an optional verity table parameter, dm-verity can be configured to
+function in logging mode. If dm-verity is not started in enforcing mode for any
+reason, or verity metadata cannot be verified, a warning must be displayed to
+the user, similar to the one shown before booting into the RED state.</p>
-<img src="../images/dm-verity_mgmt.png" alt="dm-verity management" id="figure3" />
-<p class="img-caption"><strong>Figure 3.</strong> dm-verity management</p>
+<img src="../images/dm-verity_mgmt.png" alt="dm-verity management" id="figure2" />
+<p class="img-caption"><strong>Figure 2.</strong> dm-verity management</p>
-<h4 id=recovering_from_dm-verity_errors><strong>Recovering from dm-verity errors</strong></h4>
+<h4 id=recovering_from_dm-verity_errors>Recovering from dm-verity errors</h4>
<p>Since the system partition is by far larger than the boot partition, the
probability of verification errors is also higher. Specifically, there is a
@@ -445,31 +373,32 @@
<p>It’s generally not possible to distinguish disk corruption from malicious
changes, so any change to the system partition must result in the user being
-notified, and no unverified data must leak to user space until a warning has
+notified; and no unverified data must leak to user space until a warning has
been shown. However, we must also assume most verification failures are
not the result of malicious behavior; so the user must also have an option to
continue using the device without verification.</p>
-<p>If dm-verity is in verifying mode and a block of a partition fails to verify,
-it will send a <code>uevent</code> to notify user space of the error. This event must be
-handled by software in the boot partition as potentially any program residing
-on the verified partition may not function anymore. When the event is received,
-the persistent dm-verity state must be updated to set the mode flag to logging
-mode, and the device must be rebooted. When the device restarts,
-<code>init</code> will warn the user of changes to the partition before mounting it.</p>
+<p>When a dm-verity error is detected, the device must be rebooted and
+dm-verity must be started in logging mode during all subsequent restarts until
+any of the verified partitions is reflashed or changed by an OTA update. This
+means dm-verity state should be stored in a persistent flag. When a verified
+partition has been changed, the flag must be cleared and dm-verity must again
+be started in enforcing mode. Anytime dm-verity is not started in enforcing
+mode, a warning must be shown to the user before any of the verified partitions
+are mounted.</p>
<h3 id=verified_partition>Verified partition</h3>
<p>In a verified device, the system partition must always be verified. But any
-other read-only partition can also be set to be verified, as well. Specifically,
-any read-only partition that contains executable code must be verified on a
-verified device. This include the vendor partition, if one exists, for example.</p>
+other read-only partition should also be set to be verified, as well. Any
+read-only partition that contains executable code must be verified on a
+verified device. This includes vendor and OEM partitions, if they exist, for example.</p>
<p>In order for a partition to be verified, signed verity metadata must be
appended to it. The metadata consists of a hash tree of the partition contents
and a verity table containing signed parameters and the root of the hash tree.
-If this information is missing or invalid when <code>init</code> attempts to
-mount the device, the user must be warned.</p>
+If this information is missing or invalid when dm-verity is set up for the
+partition, the user must be warned.</p>
<h2 id=implementation_details>Implementation details</h2>
@@ -481,7 +410,6 @@
<h3 id=signature_format>Signature format</h3>
-
<p>The signature on an Android verifiable boot image is an ASN.1 DER-encoded
message, which can be parsed with a decoder similar to the one found at: <a
href="https://android.googlesource.com/platform/bootable/recovery/+/f4a6ab27b335b69fbc419a9c1ef263004b561265/asn1_decoder.cpp">platform/bootable/recovery/asn1_decoder.cpp</a><br/>
@@ -508,9 +436,9 @@
<p>The <code>Certificate</code> field is the full X.509 certificate containing
the public key used for signing, as defined by <a
href="http://tools.ietf.org/html/rfc5280#section-4.1.1.2">RFC5280</a> section
-4.1. The bootloader must ignore this field and must NOT use the key
-specified in the certificate to verify the signature. Signatures must always be
-verified against the OEM key or the user-provided keystore only.</p>
+4.1. When LOCKED, the bootloader must always use the OEM key for verification
+first, and only boot to YELLOW or RED states if the embedded certificate is
+used for verification instead.</p>
<p>The remaining structure is similar to that defined by <a
href="http://tools.ietf.org/html/rfc5280#section-4.1.1.2">RFC5280</a> sections
@@ -526,7 +454,8 @@
<li>Generate the unsigned image.
<li>0-pad the image to the next page size boundary (omit this step if already
aligned).
- <li>Populate the fields of the <code>AuthenticatedAttributes</code> section above based on the padded image and desired target partition.
+ <li>Populate the fields of the <code>AuthenticatedAttributes</code> section
+ above based on the padded image and desired target partition.
<li>Append the <code>AuthenticatedAttributes</code> structure above to the image.
<li>Sign the image.
</ol>
@@ -537,55 +466,23 @@
a header).
<li>Read the signature located at the offset above.
<li>Validate the contents of the <code>AuthenticatedAttributes</code> field.
-If these values do not validate, treat it as a signature validation error.
+ If these values do not validate, treat it as a signature validation error.
<li>Verify the image and <code>AuthenticatedAttributes</code> sections.
</ol>
-<h3 id=keystore_format>Keystore format</h3>
-
-<p>The Android verified boot keystore format is an ASN.1 DER-encoded document. Its
- specification follows:</p>
-
-<pre>
-AndroidVerifiedBootKeystore DEFINITIONS ::=
- BEGIN
- FormatVersion ::= INTEGER
- KeyBag ::= SEQUENCE {
- Key ::= SEQUENCE {
- AlgorithmIdentifier ::= SEQUENCE {
- algorithm OBJECT IDENTIFIER,
- parameters ANY DEFINED BY algorithm
- OPTIONAL
- }
- KeyMaterial ::= RSAPublicKey
- }
- }
- Signature ::= AndroidVerifiedBootSignature OPTIONAL
- END
-</pre>
-
-<p>Where <code>RSAPublicKey</code>, <code>AlgorithmIdentifier</code>, and
-parameters are as specified in <a
-href="http://tools.ietf.org/html/rfc3279#section-2.3.1">RFC3279</a>. Other key
-types specified in RFC3279 section 2.3 may optionally be supported,
-in which case the appropriate type for <code>Key</code> must be used.</p>
-
-<h3 id=keystore_location>Keystore location</h3>
-
-<p>The location of the keystore is not specified here, but that location must be
-known to the bootloader and both readable and writable by it. Reading should
-happen as per the above; writing a new keystore should be accomplished through
-<code>fastboot flash keystore <path></code>. Sufficient storage must be
-provided for at least one key, with storage for additional keys recommended.</p>
-
<h3 id=user_experience>User experience</h3>
<p>A user in the GREEN boot state should see no additional user interaction besides that
-required by normal device boot. In other boot states, the user should see a
+required by normal device boot. In other boot states, the user must see a
warning for at least five seconds. Should the user interact with the device during
-this time, the warning should remain visible until the user agrees to continue.</p>
+this time, the warning must remain visible at least 30 seconds longer, or until
+the user dismisses the warning.</p>
<p>Sample user interaction screens for other states are shown in the following table:</p>
+
+<p class="table-caption" id="table5">
+ <strong>Table 5.</strong> Sample user interaction screens</p>
+
<table>
<tr>
<td>
@@ -601,11 +498,11 @@
</td>
<td>
<img src="../images/boot_yellow1.png" alt="Yellow device state 1" id="figure4" />
-<p class="img-caption"><strong>Figure 4.</strong> Yellow state example 1 UI</p>
+<p class="img-caption"><strong>Figure 3.</strong> Yellow state example 1 UI</p>
</td>
<td>
<img src="../images/boot_yellow2.png" alt="Yellow device state 2" id="figure5" />
-<p class="img-caption"><strong>Figure 5.</strong> Yellow state example 2 UI</p>
+<p class="img-caption"><strong>Figure 4.</strong> Yellow state example 2 UI</p>
</td>
</tr>
@@ -615,7 +512,7 @@
</td>
<td>
<img src="../images/boot_orange.png" alt="Orange device state" id="figure6" />
-<p class="img-caption"><strong>Figure 6.</strong> Orange state example UI</p>
+<p class="img-caption"><strong>Figure 5.</strong> Orange state example UI</p>
</td>
</tr>
<tr>
@@ -624,7 +521,7 @@
</td>
<td>
<img src="../images/boot_red.png" alt="Red device state" id="figure7" />
-<p class="img-caption"><strong>Figure 7.</strong> Red state example UI</p>
+<p class="img-caption"><strong>Figure 6.</strong> Red state example UI</p>
</td>
</tr>
</table>
diff --git a/src/devices/tech/test_infra/tradefed/full_example.jd b/src/devices/tech/test_infra/tradefed/full_example.jd
index a9f57bc..34cd63a 100644
--- a/src/devices/tech/test_infra/tradefed/full_example.jd
+++ b/src/devices/tech/test_infra/tradefed/full_example.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
<p>This tutorial guides you through the construction of a "hello world" Trade Federation test
configuration, and gives you a hands-on introduction to the Trade Federation framework. Starting
@@ -435,6 +442,5 @@
<a href="https://android.googlesource.com/platform/tools/tradefederation/+/master"
>Trade Federation source code</a> has a lot of useful information that isn't
exposed in the documentation. And if all else fails, try asking on the
-<a href="/source/community/index.html">android-platform</a> Google Group, with "Trade Federation"
-in the message subject.</p>
-
+<a href="{@docRoot}source/community.html">android-platform</a> Google Group, with "Trade Federation"
+in the message subject.</p>
\ No newline at end of file
diff --git a/src/devices/tech/test_infra/tradefed/fundamentals/index.jd b/src/devices/tech/test_infra/tradefed/fundamentals/index.jd
index 98ab260..68ff06d 100644
--- a/src/devices/tech/test_infra/tradefed/fundamentals/index.jd
+++ b/src/devices/tech/test_infra/tradefed/fundamentals/index.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -70,6 +70,6 @@
<p>If you've gotten through everything here and still have unanswered questions, first try taking
a look at the <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master"
>Trade Federation source code.</a>. Beyond that, feel free to try asking on the
-<a href="/source/community/index.html">android-platform</a> Google Group. For best results, make
+<a href="{@docRoot}source/community.html">android-platform</a> Google Group. For best results, make
sure to mention "Trade Federation" (or "tradefed", or "TF") in the message subject.</p>
diff --git a/src/devices/tech/test_infra/tradefed/fundamentals/options.jd b/src/devices/tech/test_infra/tradefed/fundamentals/options.jd
index 3874256..568cd35 100644
--- a/src/devices/tech/test_infra/tradefed/fundamentals/options.jd
+++ b/src/devices/tech/test_infra/tradefed/fundamentals/options.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
<p>Option handling lies at the heart of Trade Federation's modular approach. In particular, options
are the mechanism by which the Developer, Integrator, and Test Runner can work together without
diff --git a/src/devices/tech/test_infra/tradefed/index.jd b/src/devices/tech/test_infra/tradefed/index.jd
index dabe07f..64939b2 100644
--- a/src/devices/tech/test_infra/tradefed/index.jd
+++ b/src/devices/tech/test_infra/tradefed/index.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,14 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol id="auto-toc">
+ </ol>
+ </div>
+</div>
+
<p>Trade Federation (tradefed or TF for short) is a continuous test framework designed for running tests
on Android devices. It's a Java application which runs on a host computer, and communicates to one or
more Android devices using ddmlib (the library behind DDMS) over adb.</p>
diff --git a/src/index.jd b/src/index.jd
index fa56fe5..7c3a2d3 100644
--- a/src/index.jd
+++ b/src/index.jd
@@ -42,55 +42,58 @@
<div class="landing-docs">
<div class="col-8">
<h3>What's New</h3>
-<a href="{@docRoot}compatibility/cts/index.html">
- <h4>Compatibility Test Suite User Instructions</h4></a>
- <p>The <strong><a
- href="{@docRoot}compatibility/cts/index.html">Compatibility Test Suite (CTS)
- User Manual</a></strong> previously presented as a PDF has been converted to native web
- pages and updated to improve clarity.</p>
+<a href="{@docRoot}devices/tech/admin/index.html">
+ <h4>Device Administration Introduction</h4></a>
+ <p>A new <strong><a
+ href="{@docRoot}devices/tech/admin/index.html">Device
+ Administration</a></strong> section summarizes use of Android in a corporate
+ environment, including <strong><a
+ href="{@docRoot}devices/tech/admin/implement.html">implementation</a></strong>, <strong><a
+ href="{@docRoot}devices/tech/admin/provision.html">provisioning</a></strong>,
+ <strong><a
+ href="{@docRoot}devices/tech/admin/testing-setup.html">testing</a></strong>,
+ and more.</p>
-<a href="{@docRoot}devices/halref/index.html">
- <h4>Hardware Abstraction Layer References</h4></a>
- <p>The <strong><a href="{@docRoot}devices/halref/index.html">Hardware
- Abstraction Layer (HAL) reference files</a></strong> have been updated to
- reflect the latest development, such as the introduction of
- <code>AUDIO_PARAMETER_DEVICE_CONNECT</code> to <strong><a
- href="{@docRoot}devices/halref/audio_8h_source.html">audio.h</a></strong>.</p>
-
-<a href="{@docRoot}devices/tech/debug/dumpsys.html">
- <h4>Example Dumpsys Diagnostic Output</h4></a>
- <p>In addition to the aforementioned <strong><a
- href="{@docRoot}devices/input/diagnostics.html">Input
- Diagnostics</a></strong>, you can now find Dumpsys examples of usage
- data for <strong><a href="{@docRoot}devices/tech/ram/procstats.html">RAM
- (procstats)</a></strong>, <strong><a
- href="{@docRoot}devices/tech/netstats.html">network (netstats)</a></strong>,
- and <strong><a
- href="{@docRoot}devices/tech/power/batterystats.html">battery (batterystats)</a></strong>.</p>
-
-<a href="{@docRoot}devices/audio/latency_measurements.html">
- <h4>Audio Latency Measurements</h4></a>
+<a href="{@docRoot}devices/audio/midi.html">
+ <h4>MIDI and Audio Latency for Developers</h4></a>
<p>The Android audio team has published <strong><a
- href="{@docRoot}devices/audio/latency_measurements.html">round-trip audio latency
- measurements</a></strong> for select Nexus devices to help partners compare their
- own devices and reduce latency further.</p>
+ href="{@docRoot}devices/audio/latency_app.html">advice to developers
+ for reducing latency</a></strong> and also instructions to partners on
+ implementing the new support for <strong><a
+ href="{@docRoot}devices/audio/midi.html">MIDI</a></strong> protocol now
+ available in AOSP.</p>
-<a href="{@docRoot}devices/tech/power/index.html">
- <h4>Power Profile Details</h4></a>
+<a href="{@docRoot}compatibility/cts/development.html">
+ <h4>CTS Development Release Schedule</h4></a>
+ <p>Compatibility Test Suite (CTS) <strong><a
+ href="{@docRoot}compatibility/cts/development.html#release-schedule">release
+ schedule and branch information</a></strong> has been published,
+ including code freeze dates and auto-merge instructions.</p>
+
+<a href="{@docRoot}devices/tech/resources.html">
+ <h4>System Resources Section</h4></a>
+ <p>A new <strong><a href="{@docRoot}devices/tech/resources.html">System
+ Resources</a></strong> section has been added to contain documentation on the
+ <strong><a href="{@docRoot}devices/tech/kernel.html">kernel</a></strong>, <strong><a
+ href="{@docRoot}devices/tech/netstats.html">network</a></strong>, and
+ <strong><a href="{@docRoot}devices/tech/ram/index.html">RAM</a></strong>.</p>
+
+<a href="{@docRoot}devices/tech/security/verifiedboot/verified-boot.html">
+ <h4>Verified Boot Improvements</h4></a>
<p><strong><a
- href="{@docRoot}devices/tech/power/index.html">Power</a></strong>
- information has been moved and expanded to include details on
- <code>cpu.awake</code> and <code>cpu.active</code>. The need to create a
- <code>power_profile.xml</code> file is also emphasized throughout.</p>
+ href="{@docRoot}devices/tech/security/verifiedboot/verified-boot.html#classes">Verifying
+ Boot</a></strong> has been rewritten to remove the VERIFIED state and Keystore
+ format and add details on implementation classes, communicating boot state, and
+ kernel command line parameters. And performance recommendations have been added
+ to <strong><a
+ href="{@docRoot}devices/tech/security/verifiedboot/dm-verity.html#optimize">Implementing
+ dm-verity</a></strong>.</p>
-<a href="{@docRoot}source/initializing.html">
- <h4>Initializing Improvements</h4></a>
- <p>Build environment <strong><a
- href="{@docRoot}source/initializing.html#setting-up-a-mac-os-x-build-environment">Initializing</a></strong>
- instructions now explain how to resize and unmount Mac OS sparse
- images. And the ccache section has been moved to an optional <strong><a
- href="{@docRoot}source/initializing.html#optimizing-a-build-environment">Optimizing
- a build environment</a></strong> section.</p>
+<a href="{@docRoot}source/building.html">
+ <h4>Increased Disk Space Requirements</h4></a>
+ <p>The amount of available disk space required to build Android has
+ been increased to a minimum of 100GB in <strong><a
+ href="{@docRoot}source/building.html">Downloading and Building</a></strong>.</p>
</div>
<div class="col-8">
diff --git a/src/source/build-numbers.jd b/src/source/build-numbers.jd
index 395b613..185006d 100644
--- a/src/source/build-numbers.jd
+++ b/src/source/build-numbers.jd
@@ -178,6 +178,18 @@
<th>Supported devices</th>
</tr>
<tr>
+ <td>LMY47Z</td>
+ <td>android-5.1.1_r4</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For Sprint, USC ONLY)</td>
+</tr>
+<tr>
+ <td>LMY48B</td>
+ <td>android-5.1.1_r3</td>
+ <td>Lollipop</td>
+ <td>Nexus 5</td>
+</tr>
+<tr>
<td>LMY47X</td>
<td>android-5.1.1_r2</td>
<td>Lollipop</td>
@@ -196,12 +208,24 @@
<td>Nexus 4, Nexus 7 (flo/deb)</td>
</tr>
<tr>
+ <td>LMY47M</td>
+ <td>android-5.1.0_r4</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For T-Mobile ONLY)</td>
+</tr>
+<tr>
<td>LMY47I</td>
<td>android-5.1.0_r3</td>
<td>Lollipop</td>
<td>Nexus 5, Nexus 6</td>
</tr>
<tr>
+ <td>LMY47E</td>
+ <td>android-5.1.0_r2</td>
+ <td>Lollipop</td>
+ <td>Nexus 6</td>
+</tr>
+<tr>
<td>LMY47D</td>
<td>android-5.1.0_r1</td>
<td>Lollipop</td>
diff --git a/src/source/building-devices.jd b/src/source/building-devices.jd
index fee5254..f0d978e 100644
--- a/src/source/building-devices.jd
+++ b/src/source/building-devices.jd
@@ -2,7 +2,7 @@
@jd:body
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -28,31 +28,24 @@
<a href="building-running.html">Building and Running</a> with
information that is specific to individual devices.</p>
-<p>With the current release, it is possible to build for
-Nexus 4, Nexus 7, and for some variants of Galaxy Nexus.
-The exact level of functionality for each device depends on the availability
-of the relevant proprietary hardware-specific binaries.</p>
-<p>For Nexus 4 and Nexus 7, all configurations can be used,
-and all the hardware is functional.
-Due to hardware differences, do not use 4.1.1 on a Nexus 7 that
+<h2 class="nexus-devices">Nexus devices</h2>
+<p>
+It is possible to build for Nexus devices using the AOSP
+builds and the relevant hardware-specific binaries.
+For a list of available Android builds and the Nexus devices
+they can be installed on, see <a
+href="build-numbers.html#source-code-tags-and-builds">Source
+Code, Tags, and Builds</a>.
+</p>
+
+<p class="note">
+<b>Note:</b> Due to hardware differences, do not use 4.1.1 on a Nexus 7 that
was originally sold with 4.1.2 or newer.</p>
-<p>All configurations of Nexus 10 "manta" can be used with 4.2.2.
-On those devices, graphics, audio,
-Wi-Fi, Bluetooth, camera, NFC, GPS and orientation sensors are functional.</p>
-<p>The variants of Galaxy Nexus that can be used are the GSM/HSPA+ configuration
-"maguro" (only if it was originally sold with a "yakju" or "takju" operating
-system) and the VZW CDMA/LTE configuration "toro". On those devices, graphics
-and audio are functional, as well as Wi-Fi, Bluetooth, and access to the
-respective cellular networks. NFC and the orientation sensors are functional.</p>
-<p>The Sprint CDMA/LTE configuration "toroplus" of Galaxy Nexus is supported
-experimentally, in the jb-mr1-dev-plus-aosp branch. On that configuration,
-the cellular network is not functional,
-and the other peripherals work like they do on "toro".</p>
+
+<h2 class="other-devices">Other devices</h2>
<p>The Motorola Xoom can be used in the Wi-Fi configuration "wingray"
sold in the USA, with Android 4.1.2. Graphics and audio are functional
as well as Wi-Fi and Bluetooth and the orientation sensors.</p>
-<p>All configurations of Nexus S and Nexus S 4G can be used with Android 4.1.2.
-On those devices all the hardware is functional.</p>
<p>In addition, <a href="http://pandaboard.org">PandaBoard</a> a.k.a. "panda" can be used
in the jb-mr1-dev-plus-aosp branch, but is considered experimental.
The specific details to use a PandaBoard with the Android Open-Source Project
@@ -64,6 +57,7 @@
<a href="building-running.html">Building and Running</a>, and replace the main <code>make</code> command with</p>
<pre><code>$ make fastboot adb
</code></pre>
+
<h2 id="booting-into-fastboot-mode">Booting into fastboot mode</h2>
<p>During a cold boot, the following key combinations can be used to boot into fastboot mode,
which is a mode in the bootloader that can be used to flash the devices:</p>
diff --git a/src/source/building.jd b/src/source/building.jd
index 408ddb1..78401da 100644
--- a/src/source/building.jd
+++ b/src/source/building.jd
@@ -21,14 +21,15 @@
build tools available. We welcome reports of successes or failures on other
distributions.</p>
-<p>Before you download and build the Android source, ensure your system meets the following requirements:</p>
+<p>Before you download and build the Android source, ensure your system meets
+the following requirements:</p>
<ul>
<li>A Linux or Mac OS system. It is also possible
to build Android in a virtual machine on unsupported systems such as Windows.
If you are running Linux in a virtual machine, you need at
- least 16GB of RAM/swap and 50GB or more of disk space in order to
+ least 16GB of RAM/swap and 100GB or more of disk space in order to
build the Android tree. See disk size requirements below.
</li>
@@ -36,8 +37,8 @@
branch. You can compile older versions on 32-bit systems.
</li>
- <li>At least 50GB of free disk space for a checkout, 100GB for a single
- build, and 150GB or more for multiple builds. If you employ ccache, you will
+ <li>At least 100GB of free disk space for a checkout, 150GB for a single
+ build, and 200GB or more for multiple builds. If you employ ccache, you will
need even more space.</p>
</li>
diff --git a/src/source/community/index.jd b/src/source/community.jd
similarity index 100%
rename from src/source/community/index.jd
rename to src/source/community.jd
diff --git a/src/source/faqs.jd b/src/source/faqs.jd
index 42e52bf..6c01017 100644
--- a/src/source/faqs.jd
+++ b/src/source/faqs.jd
@@ -172,7 +172,7 @@
in the ART runtime. Similarly, we won't accept contributions such as GPL
or LGPL libraries that are incompatible with our licensing goals.</p>
<p>We encourage those interested in contributing source code to contact us
-via the channels listed on the <a href="{@docRoot}source/community/index.html">
+via the channels listed on the <a href="{@docRoot}source/community.html">
Android Community</a> page prior to beginning any work. You can find more
information on this topic from the <a href="{@docRoot}source/contributing.html">
Contributing</a> page.</p>
@@ -187,7 +187,7 @@
Approvers are typically Google employees, but the same approvers are
responsible for all submissions, regardless of origin.</p>
<p>You can find more information on this topic at the <a href="submit-patches.html">Submitting Patches</a> page.</p>
-<a href="#top">Back to top</a>
+<a href="#top">Back to top</a>
<h2 id="compatibility">Compatibility</h2>
<h3 id="what-does-compatibility-mean">What does "compatibility" mean?</h3>
<p>We define an "Android-compatible device" as one that can run any
diff --git a/src/source/source_toc.cs b/src/source/source_toc.cs
index 84897f1..b707b43 100644
--- a/src/source/source_toc.cs
+++ b/src/source/source_toc.cs
@@ -1,5 +1,5 @@
<!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -78,7 +78,7 @@
<li class="nav-section">
<div class="nav-section-header empty">
- <a href="<?cs var:toroot ?>source/community/index.html">
+ <a href="<?cs var:toroot ?>source/community.html">
<span class="en">Community</span>
</a>
</div>
diff --git a/src/source/using-eclipse.jd b/src/source/using-eclipse.jd
index 12ee1eb..33ef381 100644
--- a/src/source/using-eclipse.jd
+++ b/src/source/using-eclipse.jd
@@ -230,5 +230,5 @@
</li>
</ul>
<p>If you're still having problems, please contact one of the <a
-href="{@docRoot}source/community/index.html">Android community mailing lists or
+href="{@docRoot}source/community.html">Android community mailing lists or
IRC channels</a>.</p>