aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGina Dimino <gdimino@google.com>2018-09-05 13:34:46 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-09-05 13:34:46 +0000
commitc595c8985055cc3a521e930b7de4c8047127e719 (patch)
treedb5aa60041ad2278bb69bfb80a1c204c688e83cf
parent53d4661f6995f83d98d80ecaca2c6740fdfa52dd (diff)
parent0051abdc34422e72cfc4726f16c488f9803a121b (diff)
downloadsource.android.com-android-o-mr1-iot-release-1.0.4.tar.gz
Merge "Docs: Changes to source.android.com"android-o-mr1-iot-release-1.0.4
-rw-r--r--en/compatibility/9/android-9-cdd.html (renamed from en/compatibility/9.0/android-9.0-cdd.html)0
-rw-r--r--en/compatibility/9/versions.html (renamed from en/compatibility/9.0/versions.html)4
-rw-r--r--en/compatibility/_toc-architecture.yaml2
-rw-r--r--en/compatibility/_toc-tests.yaml4
-rw-r--r--en/compatibility/cdd.html6
-rw-r--r--en/compatibility/cts/camera-its-box-assembly.html49
-rw-r--r--en/compatibility/cts/camera-its-box.html15
-rw-r--r--en/compatibility/cts/camera-wfov-box-assembly.md248
-rw-r--r--en/compatibility/cts/images/wfov-abs-pieces.pngbin0 -> 520068 bytes
-rw-r--r--en/compatibility/cts/images/wfov-aperture-plates.pngbin0 -> 1299589 bytes
-rw-r--r--en/compatibility/cts/images/wfov-assembled-box.pngbin0 -> 435034 bytes
-rw-r--r--en/compatibility/cts/images/wfov-assembled-side-panels.pngbin0 -> 248117 bytes
-rw-r--r--en/compatibility/cts/images/wfov-attached-mounts.pngbin0 -> 341304 bytes
-rw-r--r--en/compatibility/cts/images/wfov-box.pngbin0 -> 335778 bytes
-rw-r--r--en/compatibility/cts/images/wfov-cad-light-frame.pngbin0 -> 241496 bytes
-rw-r--r--en/compatibility/cts/images/wfov-cad-mounts.pngbin0 -> 113996 bytes
-rw-r--r--en/compatibility/cts/images/wfov-cad-wfov-box.pngbin0 -> 514044 bytes
-rw-r--r--en/compatibility/cts/images/wfov-light-mounts.pngbin0 -> 437045 bytes
-rw-r--r--en/compatibility/cts/images/wfov-light-strip.pngbin0 -> 469716 bytes
-rw-r--r--en/compatibility/cts/images/wfov-lights-exiting.pngbin0 -> 619098 bytes
-rw-r--r--en/compatibility/cts/images/wfov-lux-meter.pngbin0 -> 331348 bytes
-rw-r--r--en/compatibility/cts/images/wfov-mount-parts.pngbin0 -> 252158 bytes
-rw-r--r--en/compatibility/cts/images/wfov-mounts-with-plungers.pngbin0 -> 229181 bytes
-rw-r--r--en/compatibility/cts/images/wfov-parts.pngbin0 -> 450115 bytes
-rw-r--r--en/compatibility/cts/images/wfov-plunger.pngbin0 -> 333269 bytes
-rw-r--r--en/compatibility/cts/images/wfov-power-adapter.pngbin0 -> 351325 bytes
-rw-r--r--en/compatibility/cts/images/wfov-side-panels-baffles.pngbin0 -> 182444 bytes
-rw-r--r--en/compatibility/cts/images/wfov-yf1065.pngbin0 -> 417838 bytes
-rw-r--r--en/compatibility/cts/images/wfov-zip-ties-facing-up.pngbin0 -> 420993 bytes
-rw-r--r--en/compatibility/cts/images/wfov-zip-ties.pngbin0 -> 289118 bytes
-rw-r--r--en/compatibility/cts/sensor-fusion-box-assembly.md68
-rw-r--r--en/compatibility/cts/sensor-fusion-quick-start.html36
-rw-r--r--en/compatibility/cts/sensor_fusion_1.4.zip (renamed from en/compatibility/cts/sensor_fusion_box_1.3.zip)bin6523846 -> 6156836 bytes
-rw-r--r--en/compatibility/cts/wfov_its_box_assembly_2.6.zipbin0 -> 2406966 bytes
-rw-r--r--en/devices/_toc-connectivity.yaml2
-rw-r--r--en/devices/_toc-data.yaml2
-rw-r--r--en/devices/architecture/hal.html10
-rw-r--r--en/devices/architecture/vndk/index.html49
-rw-r--r--en/devices/architecture/vndk/renderscript.html635
-rw-r--r--en/devices/bluetooth/asha.html91
-rw-r--r--en/devices/input/key-layout-files.html4
-rw-r--r--en/devices/input/touch-devices.html2
-rw-r--r--en/devices/tech/connect/carrier-wifi.md2
-rw-r--r--en/devices/tech/connect/tethering-offload.md103
-rw-r--r--en/devices/tech/connect/wifi-passpoint.md98
-rw-r--r--en/devices/tech/debug/gdb.html12
-rw-r--r--en/security/_toc-bulletins.yaml4
-rw-r--r--en/security/bulletin/2018-09-01.html909
-rw-r--r--en/security/bulletin/2018.html14
-rw-r--r--en/security/bulletin/index.html14
-rw-r--r--en/security/bulletin/pixel/2018-09-01.html385
-rw-r--r--en/security/bulletin/pixel/2018.html15
-rw-r--r--en/security/bulletin/pixel/index.html15
-rw-r--r--en/security/overview/acknowledgements.html96
-rw-r--r--en/setup/start/p-release-notes.md21
-rw-r--r--zh-cn/devices/graphics/implement-vulkan.html40
-rw-r--r--zh-cn/devices/tech/connect/wifi-infrastructure.html123
-rw-r--r--zh-cn/devices/tech/ota/nonab/inside_packages.html6
-rw-r--r--zh-cn/devices/tech/power/device.html10
-rw-r--r--zh-cn/devices/tech/settings/settings-guidelines.html84
-rw-r--r--zh-cn/devices/tech/test_infra/tradefed/full_example.html2
-rw-r--r--zh-cn/security/keystore/tags.html127
-rw-r--r--zh-cn/setup/build/jack.html2
-rw-r--r--zh-cn/setup/community.html4
64 files changed, 2770 insertions, 543 deletions
diff --git a/en/compatibility/9.0/android-9.0-cdd.html b/en/compatibility/9/android-9-cdd.html
index e3561c86..e3561c86 100644
--- a/en/compatibility/9.0/android-9.0-cdd.html
+++ b/en/compatibility/9/android-9-cdd.html
diff --git a/en/compatibility/9.0/versions.html b/en/compatibility/9/versions.html
index 90babb79..bc55d387 100644
--- a/en/compatibility/9.0/versions.html
+++ b/en/compatibility/9/versions.html
@@ -24,7 +24,7 @@
<p>As described in Section 3.2.2 of the <a
-href="android-9.0-cdd.pdf">Android 9 Compatibility Definition</a>,
+href="android-9-cdd.pdf">Android 9 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
@@ -36,7 +36,7 @@ Compatibility Definition Document. This page lists the versions that are
allowable by an Android 9-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 9 are:</p>
<ul>
-<li>9.0</li>
+<li>9</li>
</ul>
</body>
diff --git a/en/compatibility/_toc-architecture.yaml b/en/compatibility/_toc-architecture.yaml
index c20f75ae..92ee6c24 100644
--- a/en/compatibility/_toc-architecture.yaml
+++ b/en/compatibility/_toc-architecture.yaml
@@ -3,7 +3,7 @@ toc:
path: /devices/architecture/
- title: Hardware Abstraction Layer (HAL)
section:
- - title: HALs
+ - title: Legacy HALs
path: /devices/architecture/hal
- title: HAL Types
path: /devices/architecture/hal-types
diff --git a/en/compatibility/_toc-tests.yaml b/en/compatibility/_toc-tests.yaml
index fd5d66fc..7460532c 100644
--- a/en/compatibility/_toc-tests.yaml
+++ b/en/compatibility/_toc-tests.yaml
@@ -27,7 +27,9 @@ toc:
path: /compatibility/cts/camera-hal
- title: Camera ITS-in-a-Box
path: /compatibility/cts/camera-its-box
- - title: Camera ITS-in-a-Box Assembly
+ - title: Wide Field of View ITS-in-a-Box Assembly
+ path: /compatibility/cts/camera-wfov-box-assembly
+ - title: Regular Field of View ITS-in-a-Box Assembly
path: /compatibility/cts/camera-its-box-assembly
- title: Sensor Fusion Box Quick Start
path: /compatibility/cts/sensor-fusion-quick-start
diff --git a/en/compatibility/cdd.html b/en/compatibility/cdd.html
index 00c0737f..4f12b74a 100644
--- a/en/compatibility/cdd.html
+++ b/en/compatibility/cdd.html
@@ -72,9 +72,9 @@ You may view the latest CDD either as an HTML web page or an easily downloadable
</tr>
<tr>
<td>9</td>
- <td><a href="9.0/android-9.0-cdd.pdf">android-9.0-cdd.pdf</a></td>
- <td><a href="9.0/android-9.0-cdd.html">android-9.0-cdd.html</a></td>
- <td><a href="9.0/versions.html">Version 9.0</a></td>
+ <td><a href="9/android-9-cdd.pdf">android-9-cdd.pdf</a></td>
+ <td><a href="9/android-9-cdd.html">android-9-cdd.html</a></td>
+ <td><a href="9/versions.html">Version 9</a></td>
</tr>
<tr>
<td>8.1</td>
diff --git a/en/compatibility/cts/camera-its-box-assembly.html b/en/compatibility/cts/camera-its-box-assembly.html
index 86518df8..2b4e7b98 100644
--- a/en/compatibility/cts/camera-its-box-assembly.html
+++ b/en/compatibility/cts/camera-its-box-assembly.html
@@ -1,6 +1,6 @@
<html devsite>
<head>
- <title>ITS-in-a-Box Assembly</title>
+ <title>Regular Field of View (RFoV) ITS-in-a-Box Assembly</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
@@ -21,14 +21,37 @@
limitations under the License.
-->
-<p>ITS-in-a-box consists of a plastic box that is laser cut from computer-aided
-design (CAD) drawings, a chart tablet, and a device under test (DUT). This page
-provides step-by-step instructions for assembling the ITS-in-a-box.</p>
+<p>The regular field of view (RFoV) ITS-in-a-box (revision 1) consists of a
+plastic box that is laser cut from computer-aided design (CAD) drawings, a chart
+tablet, and a device under test (DUT). The RFoV ITS-in-a-box is designed to test
+devices with an FoV less than 90 degrees (RFoV). You can purchase an
+ITS-in-a-box or build your own.</p>
+
+<aside class="note"><strong>Note:</strong> The wide field of view (WFoV)
+ITS-in-a-box (revision 2) can be used to test both WFoV (FoV > 90 degrees) and
+RFoV devices. For details, see
+<a href="/compatibility/cts/camera-wfov-box-assembly"> WFoV ITS-in-a-Box</a>.</aside>
+
+<h2 id=purchasing-box>Purchasing an RFoV ITS-in-a-box</h2>
+<p>We recommend purchasing an RFoV ITS-in-a-box from one of the following
+qualified vendors.</p>
+
+<ul>
+<li><em>Acu Spec, Inc.</em><br>990 Richard Ave, Ste 103, Santa Clara, CA
+95050<br>fred@acuspecinc.com</li>
+<li><em>MYWAY, Inc</em><br>4F., No. 163, Fu
+Ying Rd., New Taipei City, Taiwan<br>sales@myway.tw</li>
+</ul>
+
+<h2 id=building-box>Building an RFoV ITS-in-a-box</h2>
+
+<p>This section
+provides step-by-step instructions for assembling an RFoV ITS-in-a-box.</p>
<p><img src=images/camera_iab_cad.png></p>
<p class=caption><strong>Figure 1</strong>. CAD image for ITS-in-a-box.</p>
-<h2>Required tools</h2>
+<h3>Required tools</h3>
<p>Before getting started, ensure you have
<a href="camera_its_iab_tech_drawings.zip">downloaded the technical
drawings</a> for the ITS-in-a box and have the following tools available:</p>
@@ -39,7 +62,7 @@ drawings</a> for the ITS-in-a box and have the following tools available:</p>
<li>Wire cutters or scissors (optional)</li>
</ul>
-<h2 id=lighting>Step 1: Lighting</h2>
+<h3 id=lighting>Step 1: Lighting</h3>
<p>To assemble the ITS-in-a-box lighting component:</p>
<ol>
@@ -70,7 +93,7 @@ The LED lights should point down and the plastic should form a back to the light
to block the shiny, reflective back of the LED light bar.</li>
</ol>
-<h2 id=phone-mount>Step 2: Phone mounts</h2>
+<h3 id=phone-mount>Step 2: Phone mounts</h3>
<p>To assemble phone mounts:</p>
<ol>
@@ -89,7 +112,7 @@ Ensure the screws do not protrude beyond the plunger in the retracted or
extended plunger position.</li>
</ol>
-<h2 id=phone-mount>Step 3: Aperture plate</h2>
+<h3 id=phone-mount>Step 3: Aperture plate</h3>
<p>To assemble the front aperture plate:</p>
<ol>
<li>Gather the front aperture plate hardware shown in Figure 8:
@@ -106,7 +129,7 @@ position.</li>
</ol>
-<h2 id=tablet-holder>Step 4: Tablet holder</h2>
+<h3 id=tablet-holder>Step 4: Tablet holder</h3>
<p>To assemble the tablet holder:</p>
<ol>
@@ -151,7 +174,7 @@ All acorn nuts are on the same side of the tablet holder to maximize clearance
for the tablet.</li>
</ol>
-<h2 id=box-assembly>Step 5: Assemble box</h2>
+<h3 id=box-assembly>Step 5: Assemble box</h3>
<p>To assemble the box:</p>
<ol>
<li>Place the front panel with the circular aperture flat on the table, inside
@@ -172,7 +195,7 @@ Push the back onto the tabs, then slide the back to the right (when facing the
back of the box) to fit under the hooked tabs.</li></ol>
-<h2 id=light-install>Step 6: Install lights</h2>
+<h3 id=light-install>Step 6: Install lights</h3>
<p>To install the lights:</p>
<ol>
<li>Place lights in the assembled box as shown in Figure 17:
@@ -209,7 +232,7 @@ box, but it is easier to wire them to front corner as shown in Figure 21:
view.</li>
</ol>
-<h2 id=sides-holder>Step 7: Attach sides, tablet holder, and handles</h2>
+<h3 id=sides-holder>Step 7: Attach sides, tablet holder, and handles</h3>
<p>To attach the box sides, tablet holder, and handles with locking mechanism:</p>
<ol>
<li>Snap the right panel into place by pushing and sliding it upwards. The
@@ -242,7 +265,7 @@ handle is loose, insert washers to allow the acorn nuts to tighten effectively.
</li>
</ol>
-<h2 id=final-assembly>Step 8: Final assembly</h2>
+<h3 id=final-assembly>Step 8: Final assembly</h3>
<p>To perform final assembly of the ITS-in-a-box:</p>
<ol>
<li>Using two nylon screws (short or long), attach the square aperture panel
diff --git a/en/compatibility/cts/camera-its-box.html b/en/compatibility/cts/camera-its-box.html
index d4790c6f..8bdc3bb3 100644
--- a/en/compatibility/cts/camera-its-box.html
+++ b/en/compatibility/cts/camera-its-box.html
@@ -44,12 +44,17 @@ improves test execution efficiency.</li>
<h2 id=get-started>Getting started</h2>
<p>ITS-in-a-box consists of a plastic box that is laser cut from computer-aided
-design (CAD) drawings, a chart tablet, and a device under test (DUT). To get
-started with the Camera ITS-in-a-box:</p>
+design (CAD) drawings, a chart tablet, and a device under test (DUT). You can
+use the wide field of view (WFoV) ITS-in-a-box, which is capable
+of testing both WFoV (FoV > 90 degrees) and RFoV (FoV < 90 degrees) cameras, or
+the regular field of view (RFoV) ITS-in-a-box.</p>
+
+<p>To get started with the Camera ITS-in-a-box:</p>
<ol>
-<li><a href="camera_its_iab_tech_drawings.zip">Download the technical
-drawings</a>.</li>
-<li><a href="camera-its-box-assembly.html">Build the box</a>.</li>
+<li>Purchase or build a <a
+href="/compatibility/cts/camera-wfov-box-assembly">wide field of view
+(WFoV)</a> or <a href="/compatibility/cts/camera-its-box-assembly">regular field
+of view (RFoV)</a> ITS-in-a-box.</li>
<li><a href="#configure-tablet">Configure a tablet</a> with Camera ITS
software.</li>
<li><a href="#run-tests">Run tests</a>.</li>
diff --git a/en/compatibility/cts/camera-wfov-box-assembly.md b/en/compatibility/cts/camera-wfov-box-assembly.md
new file mode 100644
index 00000000..3e7ab382
--- /dev/null
+++ b/en/compatibility/cts/camera-wfov-box-assembly.md
@@ -0,0 +1,248 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ Copyright 2018 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.
+-->
+
+# Wide Field of View (WFoV) ITS-in-a-Box Assembly
+
+Android {{ androidPVersionNumber }} introduces ITS-in-a-box revision 2, an
+automated test system for both wide field of view (WFoV) and regular field of
+view (RFoV) camera systems in the Camera Image Test Suite (ITS). Revision 1 was
+designed to test mobile device cameras with an FoV less than 90 degrees
+(RFoV). Revision
+2 is designed to also test cameras that have an FoV greater 90 degrees (WFoV),
+enabling you to use one ITS-in-a-box system to test different cameras with
+varying FoVs.
+
+The ITS-in-a-box system consists of a plastic box laser cut from computer-aided
+design (CAD) drawings, an internal lighting system, a chart tablet, and a device
+under test (DUT). You can purchase an ITS-in-a-box or build your own.
+
+Note: For details on building ITS-in-a-box revision 1 (designed for RFoV cameras
+only), see
+[ITS-in-a-Box Assembly](/compatibility/cts/camera-its-box-assembly).
+
+## Purchasing a WFoV ITS-in-a-box
+
+We recommend purchasing a WFoV ITS-in-a-box from one of the following qualified
+vendors.
+
+* *Acu Spec, Inc.*
+ 990 Richard Ave, Ste 103, Santa Clara, CA 95050
+ fred@acuspecinc.com
+* *MYWAY, Inc*
+ 4F., No. 163, Fu Ying Rd., New Taipei City, Taiwan
+ sales@myway.tw
+
+## Building a WFoV ITS-in-a-box
+
+This section includes step-by-step instructions for assembling a WFoV
+ITS-in-a-box (revision 2) that can test cameras with a wide field of view
+(greater than 90 degrees).
+
+### Overview
+
+The WFoV ITS-in-a-box consists of a device under test (DUT), a chart tablet, an
+internal lighting system, and a plastic box that is laser cut from CAD drawings
+(shown in Figure 1).
+
+![CAD drawing of WFOV ITS-in-a-box](/compatibility/cts/images/wfov-cad-wfov-box.png){: width="800"}
+
+**Figure 1.** Mechanical drawing of WFoV ITS-in-a-box
+
+### Required tools
+
+Before getting started, ensure you have downloaded the
+[technical drawings for the WFoV ITS-in-a-box](/compatibility/cts/wfov_its_box_assembly_2.6.zip),
+cut the plastic and vinyl pieces, purchased the hardware
+from the BOM, and have the following tools available:
+
++ Phillips head screwdriver
++ Pliers
++ Wire cutters
++ Scissors
++ Water spray bottle
++ X-acto knife
+
+### Step 1: Apply colored vinyl
+
+To apply colored vinyl:
+
+1. Apply colored vinyl on the smooth side of the acrylonitrile butadiene
+ styrene (ABS) and cut out the necessary openings as shown in Figure 1. Make
+ sure to apply the white vinyl with the large rectangular opening on the
+ tablet side and the black vinyl with the circular opening on the mobile
+ device side of the box. For more information, see
+ [wikiHow](https://www.wikihow.com/Install-a-Vinyl-Graphic){: .external}.
+
+ ![ABS pieces with vinyl applied on the smooth side](/compatibility/cts/images/wfov-abs-pieces.png){: width="500"}
+
+ **Figure 2.** ABS pieces with vinyl applied on the smooth side (interior of
+ the box)
+
+### Step 2: Assemble and install the light rail
+
+To assemble and install the light frame structure with LED light strips:
+
+1. Review the mechanical drawing of the light frame structure.
+
+ ![Light frame structure with LED light strips](/compatibility/cts/images/wfov-cad-light-frame.png){: width="800"}
+
+ **Figure 3.** Light frame structure with LED light strips
+
+1. Gather the plastic light baffles, light mounts, LED light strip, and zip
+ ties.
+
+ ![Light baffles, light mounts, LED light strips, and zip ties](/compatibility/cts/images/wfov-parts.png){: width="350"}
+
+ **Figure 4.** Light baffles, light mounts, LED light strips, and zip ties
+
+1. Snap the plastic light baffles to the light mounts as shown in figure 5.
+ This should be a tight fit.
+
+ ![Plastic light baffles fitted in light mounts](/compatibility/cts/images/wfov-light-mounts.png){: width="350"}
+
+ **Figure 5.** Plastic light baffles fitted in light mounts
+
+1. Snap the light mounts to the side panels as shown in figure 6. When
+ complete, the light will shine towards the front corners of the box
+ interior.
+
+ ![Light baffles and mounts snapped onto the side panels](/compatibility/cts/images/wfov-side-panels-baffles.png){: width="350"}
+
+ **Figure 6.** Light baffles and mounts snapped onto the side panels
+
+1. Assemble the side panels. (Optional: Sand the edges of the baffles for
+ a better fit.)
+
+ ![Side panels assembled and screwed in](/compatibility/cts/images/wfov-assembled-side-panels.png){: width="350"}
+
+ **Figure 7.** Side panels assembled and screwed together
+
+1. Wrap the LED strip on the side facing the panel, between the holes used for
+ fastening. (Optional: Use the tape on the back of the LED light strip for
+ easier wrapping.)
+
+ ![LED light strip wrapped around the baffles ](/compatibility/cts/images/wfov-light-strip.png){: width="350"}
+
+ **Figure 8.** LED light strip wrapped around the baffles
+
+1. Wrap the light strips around the baffles twice, use zip ties to tie down the
+ strip, and snap the ends together.
+
+ ![Zip ties holding the LED light strips in place](/compatibility/cts/images/wfov-zip-ties.png){: width="350"}
+
+ **Figure 9.** Zip ties holding the LED light strips in place
+
+ ![LED lights wrapped around the baffles](/compatibility/cts/images/wfov-lights-exiting.png){: width="350"}
+
+ **Figure 10.** LED lights wrapped around the baffles twice and exiting
+ through side exit
+
+ ![Zip ties showing on the side facing up](/compatibility/cts/images/wfov-zip-ties-facing-up.png){: width="350"}
+
+ **Figure 11.** Zip ties showing on the side facing up. LED strips are on the
+ other side.
+
+### Step 3: Assemble tablet and phone mounts
+
+To assemble the tablet and phone mounts:
+
+1. Review the mechanical drawing of the tablet mount.
+
+ ![Mechanical drawing of tablet mount](/compatibility/cts/images/wfov-cad-mounts.png){: width="800"}
+
+ **Figure 12.** Mechanical drawing of tablet mount
+
+1. Gather the parts as shown in figure 13.
+
+ ![Tablet and phone mount parts](/compatibility/cts/images/wfov-mount-parts.png){: width="350"}
+
+ **Figure 13.** Tablet and phone mounts with screws, plungers, vinyl caps,
+ and nuts
+
+1. Cut the push-on vinyl cap by ⅓ of its length and push it onto the end of the
+ plunger. This ensures the plunger mechanism can be retracted and locked.
+
+ ![Plunger with adjusted push-on cap](/compatibility/cts/images/wfov-plunger.png){: width="350"}
+
+ **Figure 14.** Plunger with adjusted push-on cap
+
+1. Screw the plungers onto the mounts.
+
+ ![Tablet and phone mounts with plungers attached](/compatibility/cts/images/wfov-mounts-with-plungers.png){: width="350"}
+
+ **Figure 15.** Tablet and phone mounts with plungers attached
+
+### Step 4: Final assembly
+
+To assemble the WFoV ITS box:
+
+1. Gather the front aperture plates and screw the smaller plate with the square
+ on top of the larger plate as shown in figure 16.
+
+ ![Assembled aperture plates](/compatibility/cts/images/wfov-aperture-plates.png){: width="500"}
+
+ **Figure 16.** Front aperture plates screwed together with 4-40 screws
+
+1. Tape the front and back panels to the rest of the box.
+
+ ![WFoV box with sides screwed together](/compatibility/cts/images/wfov-box.png){: width="350"}
+
+ **Figure 17.** WFoV box with sides screwed together and the front and back
+ panels taped
+
+1. Check that the power adapter is 12V, 5A. Anything below 12V will not work;
+ anything below 5A may affect the brightness level of the lights.
+
+ ![12V, 5A power adapter](/compatibility/cts/images/wfov-power-adapter.png){: width="350"}
+
+ **Figure 18.** 12V, 5A power adapter
+
+1. Using a digital lux tester, test the lux of the LED lights to make sure they
+ are at the appropriate level. The YF-1065 by
+ [Contempo Views](https://www.contempoviews.com/){: .external}
+ is used in this example.
+
+ ![YF-1065 by Contempo Views](/compatibility/cts/images/wfov-yf1065.png){: width="350"}
+
+ **Figure 19.** YF-1065 by Contempo Views
+
+1. Place the light meter on the tablet side and turn it to 2000 lux to measure
+ the light. The lux should be around 100 to 130. Anything significantly lower
+ will be too dim for the tests and can lead to test failures.
+
+ ![Lux meter](/compatibility/cts/images/wfov-lux-meter.png){: width="350"}
+
+ **Figure 20.** Lux meter measuring light from the side with tablet mount
+
+1. Follow the appropriate step depending on the lux value measured:
+
+ * If the light is at the correct level, screw the front and back plates into
+ place.
+ * If the light is not at the correct level, check the LED and power supply
+ part number.
+
+1. Mount the phone mount on the aperture plate and the tablet mount on the
+ opposite side with screws and nuts.
+
+ ![Phone mount and tablet mount](/compatibility/cts/images/wfov-attached-mounts.png){: width="500"}
+
+ **Figure 21.** Phone mount (left) and tablet mount (right)
+
+ ![Assembled WFoV box](/compatibility/cts/images/wfov-assembled-box.png){: width="500"}
+
+ **Figure 22.** Assembled WFoV box: rear view (left) and front view (right)
diff --git a/en/compatibility/cts/images/wfov-abs-pieces.png b/en/compatibility/cts/images/wfov-abs-pieces.png
new file mode 100644
index 00000000..9c46a0aa
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-abs-pieces.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-aperture-plates.png b/en/compatibility/cts/images/wfov-aperture-plates.png
new file mode 100644
index 00000000..15ff528c
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-aperture-plates.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-assembled-box.png b/en/compatibility/cts/images/wfov-assembled-box.png
new file mode 100644
index 00000000..f3d65983
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-assembled-box.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-assembled-side-panels.png b/en/compatibility/cts/images/wfov-assembled-side-panels.png
new file mode 100644
index 00000000..5a245463
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-assembled-side-panels.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-attached-mounts.png b/en/compatibility/cts/images/wfov-attached-mounts.png
new file mode 100644
index 00000000..a9ede2f4
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-attached-mounts.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-box.png b/en/compatibility/cts/images/wfov-box.png
new file mode 100644
index 00000000..b9b42688
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-box.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-cad-light-frame.png b/en/compatibility/cts/images/wfov-cad-light-frame.png
new file mode 100644
index 00000000..9809ecbd
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-cad-light-frame.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-cad-mounts.png b/en/compatibility/cts/images/wfov-cad-mounts.png
new file mode 100644
index 00000000..ba13adc3
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-cad-mounts.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-cad-wfov-box.png b/en/compatibility/cts/images/wfov-cad-wfov-box.png
new file mode 100644
index 00000000..e5d75aab
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-cad-wfov-box.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-light-mounts.png b/en/compatibility/cts/images/wfov-light-mounts.png
new file mode 100644
index 00000000..9ba05a19
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-light-mounts.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-light-strip.png b/en/compatibility/cts/images/wfov-light-strip.png
new file mode 100644
index 00000000..1baabcee
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-light-strip.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-lights-exiting.png b/en/compatibility/cts/images/wfov-lights-exiting.png
new file mode 100644
index 00000000..99546725
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-lights-exiting.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-lux-meter.png b/en/compatibility/cts/images/wfov-lux-meter.png
new file mode 100644
index 00000000..1f976eb3
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-lux-meter.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-mount-parts.png b/en/compatibility/cts/images/wfov-mount-parts.png
new file mode 100644
index 00000000..11119581
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-mount-parts.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-mounts-with-plungers.png b/en/compatibility/cts/images/wfov-mounts-with-plungers.png
new file mode 100644
index 00000000..b46a3d1a
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-mounts-with-plungers.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-parts.png b/en/compatibility/cts/images/wfov-parts.png
new file mode 100644
index 00000000..f899ac06
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-parts.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-plunger.png b/en/compatibility/cts/images/wfov-plunger.png
new file mode 100644
index 00000000..71c770c7
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-plunger.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-power-adapter.png b/en/compatibility/cts/images/wfov-power-adapter.png
new file mode 100644
index 00000000..efdf2b8a
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-power-adapter.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-side-panels-baffles.png b/en/compatibility/cts/images/wfov-side-panels-baffles.png
new file mode 100644
index 00000000..03214849
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-side-panels-baffles.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-yf1065.png b/en/compatibility/cts/images/wfov-yf1065.png
new file mode 100644
index 00000000..1e7b8d10
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-yf1065.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-zip-ties-facing-up.png b/en/compatibility/cts/images/wfov-zip-ties-facing-up.png
new file mode 100644
index 00000000..4510f371
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-zip-ties-facing-up.png
Binary files differ
diff --git a/en/compatibility/cts/images/wfov-zip-ties.png b/en/compatibility/cts/images/wfov-zip-ties.png
new file mode 100644
index 00000000..1f89ac03
--- /dev/null
+++ b/en/compatibility/cts/images/wfov-zip-ties.png
Binary files differ
diff --git a/en/compatibility/cts/sensor-fusion-box-assembly.md b/en/compatibility/cts/sensor-fusion-box-assembly.md
index 29780cf0..c104f461 100644
--- a/en/compatibility/cts/sensor-fusion-box-assembly.md
+++ b/en/compatibility/cts/sensor-fusion-box-assembly.md
@@ -33,23 +33,23 @@ vendors.
* *Acu Spec, Inc.*
990 Richard Ave, Ste 103, Santa Clara, CA 95050
fred@acuspecinc.com
-* *MYWAY DESIGN*
- Website: [http://www.myway.tw/](http://www.myway.tw/){: .external}
- Fu-ming (Troy) Tsai, tsaifuming0205@gmail.com
+* *MYWAY, Inc*
+ 4F., No. 163, Fu Ying Rd., New Taipei City, Taiwan
+ sales@myway.tw
## Building a Sensor Fusion Box
This section includes step-by-step instructions for assembling a Sensor Fusion
Box from laser-cut plastic components (shown in Figure 1):
-<img src="images/sensor_fusion_assembly_box_cad_drawing.png" width="700" alt="CAD drawing of Sensor Fusion Box components">
+<img src="/compatibility/cts/images/sensor_fusion_assembly_box_cad_drawing.png" width="700" alt="CAD drawing of Sensor Fusion Box components">
**Figure 1.** CAD drawing of Sensor Fusion Box components
### Required tools
Before starting, ensure you have downloaded the technical drawings for the
-Sensor Fusion Box (included in the [Sensor Fusion Box 1.3.zip
-file](sensor_fusion_box_1.3.zip)) and
+Sensor Fusion Box (included in the
+[Sensor Fusion Box zip file](/compatibility/cts/sensor_fusion_1.4.zip)) and
have the following tools available:
* Phillips head screwdriver
@@ -67,7 +67,7 @@ stickers to the plastic box components:
[wikiHow](https://www.wikihow.com/Install-a-Vinyl-Graphic){: .external}.
1. Cut out the necessary holes on the vinyl.
- <img src="images/sensor_fusion_assembly_abs_pieces.png" width="350" alt="BS pieces">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_abs_pieces.png" width="350" alt="BS pieces">
**Figure 2.** ABS pieces with vinyl applied on the smooth side (interior of
the box)
@@ -79,8 +79,8 @@ To attach the servo:
holes on the back of the phone fixture:
<table class="columns">
<tr>
- <td><img src="images/sensor_fusion_assembly_phone_fixture_holes1.png" width="250" alt="Phone fixture tap holes"></td>
- <td><img src="images/sensor_fusion_assembly_phone_fixture_holes2.png" width="250" alt="Phone fixture countersink holes"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes1.png" width="250" alt="Phone fixture tap holes"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes2.png" width="250" alt="Phone fixture countersink holes"></td>
</tr>
</table>
**Figure 3.** Phone fixture with tap and countersink holes shown
@@ -89,16 +89,16 @@ To attach the servo:
drill bit (2.26 mm) into the last holes from each side so 4-40 screws could
grab onto them:
- <img src="images/sensor_fusion_assembly_servo_shaft.png" width="350" alt="Servo shaft">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_shaft.png" width="350" alt="Servo shaft">
**Figure 4.** Servo shaft with pilot holes at each end
1. Apply the flat-head 4-40 screws on the front of the phone fixture and
tighten the shaft:
- <img src="images/sensor_fusion_assembly_shaft_screws.png" width="350" alt="Shaft and screws">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_shaft_screws.png" width="350" alt="Shaft and screws">
**Figure 5.** Phone fixture front with shaft and screws shown
- <img src="images/sensor_fusion_assembly_shaft.png" width="350" alt="Shaft">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_shaft.png" width="350" alt="Shaft">
**Figure 6.** Shaft on the back of fixture, tightened by screws applied
from the front
@@ -108,7 +108,7 @@ To attach the clamp and rails:
1. Apply nylon thumb screws, rubber adhesive, and wire to the aluminum clamp:
- <img src="images/sensor_fusion_assembly_clamp.png" width="350" alt="Clamp with rubber adhesive">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_clamp.png" width="350" alt="Clamp with rubber adhesive">
**Figure 7.** Clamp with rubber adhesive, thumb screws and wire
1. Screw the phone clamps' thumb screws into the tapped holes of the phone
@@ -116,19 +116,19 @@ To attach the clamp and rails:
* CAD Drawing:
- <img src="images/sensor_fusion_assembly_clamp_attachment_cad_drawing.png" width="450" alt="CAD drawing of clamp attachment">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_clamp_attachment_cad_drawing.png" width="450" alt="CAD drawing of clamp attachment">
**Figure 8.** CAD drawing of clamp attachment to phone fixture
* Actual clamp attachment to phone fixture:
- <img src="images/sensor_fusion_assembly_assembled_fixture.png" width="350" alt="Assembled phone fixture">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_assembled_fixture.png" width="350" alt="Assembled phone fixture">
**Figure 9.** Assembled phone fixture
1. Fix rails on top and bottom of box towards the front. The figure below shows
6-32 screws on pre-tapped holes, but you can use self-tapping screws instead
if desired.
- <img src="images/sensor_fusion_assembly_fixed_rail.png" width="350" alt="Fixed rail">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_fixed_rail.png" width="350" alt="Fixed rail">
**Figure 10.** Fixed rail on top and bottom of box
### Step 4: Attach lighting
@@ -138,30 +138,30 @@ To attach the light brackets and diffuser:
1. Stack two handle pieces and connect using 6-32 screws (or use self-tapping
screws):
- <img src="images/sensor_fusion_assembly_handle_pieces.png" width="450" alt="Handle pieces and assembly">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_handle_pieces.png" width="450" alt="Handle pieces and assembly">
**Figure 11.** Sensor fusion box handle pieces and assembly
1. Prepare four 4-40 screws and nuts to fix the mounting bracket from the
lighting kit to the wall of the box:
- <img src="images/sensor_fusion_assembly_interior_wall_screws.png" width="350" alt="Screws and bracket on interior wall">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_interior_wall_screws.png" width="350" alt="Screws and bracket on interior wall">
**Figure 12.** Screws and light bracket on the interior wall of the box
- <img src="images/sensor_fusion_assembly_exterior_bolts.png" width="350" alt="Exterior with bolts applied">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_exterior_bolts.png" width="350" alt="Exterior with bolts applied">
**Figure 13.** Bolts applied to the screws from the exterior of the box
1. Snap the lights into the brackets (can be a tight fit):
- <img src="images/sensor_fusion_assembly_interior_wall_lights.png" width="450" alt="Lights on interior wall">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_interior_wall_lights.png" width="450" alt="Lights on interior wall">
**Figure 14.** Lights fixed to the interior wall with brackets
1. Cut the light diffuser to an appropriate size to wrap the light strips:
- <img src="images/sensor_fusion_assembly_light_strips_diffusers.png" width="350" alt="Light strips and diffusers">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_light_strips_diffusers.png" width="350" alt="Light strips and diffusers">
**Figure 15.** Light strips and light diffusers
1. Wrap the light diffuser around the strip and tape it at the back:
- <img src="images/sensor_fusion_assembly_strips_taped_back.png" width="350" alt="Strips and diffusers taped from back">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_strips_taped_back.png" width="350" alt="Strips and diffusers taped from back">
**Figure 16.** Light strips and light diffusers taped from the back
### Step 5: Attach phone fixture to servo plate
@@ -172,18 +172,18 @@ To attach the phone fixture to the servo plate:
The screws go from inside and fix themselves onto the servo plate that is
on the exterior of the wall.
- <img src="images/sensor_fusion_assembly_servo_servo_plate.png" width="450" alt="Servo and servo plate">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_servo_plate.png" width="450" alt="Servo and servo plate">
**Figure 17.** Servo and servo plate held in place with 6-32 screws
1. Secure phone fixture onto the servo with nylocks (pushing the center of the
shaft into the servo's rotation center):
- <img src="images/sensor_fusion_assembly_phone_fixture.png" width="450" alt="Phone fixture on servo">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_phone_fixture.png" width="450" alt="Phone fixture on servo">
**Figure 18.** Phone fixture on servo
1. Screw the phone fixture onto the servo with its servo screw:
- <img src="images/sensor_fusion_assembly_servo_screw.png" width="350" alt="Phone fixture on servo with screw">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_screw.png" width="350" alt="Phone fixture on servo with screw">
**Figure 19.** Securing phone fixture onto servo with servo screw
### Step 6: Final assembly
@@ -193,26 +193,30 @@ To complete final assembly of the Sensor Fusion Box:
1. Secure servo control box on the left of the servo with 4-40 screws from the
outside and fastened from the inside with nuts:
- <img src="images/sensor_fusion_assembly_servo_on_wall.png" width="450" alt="Servo control box on wall">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_on_wall.png" width="450" alt="Servo control box on wall">
**Figure 20.** Secure servo control box onto the wall
-1. Tape the box together, then screw the parts together (you might need to pre-drill some holes in some parts).
+1. Tape the box together, then screw the parts together (you might need to
+ pre-drill some holes in some parts).
* CAD drawing:
- <img src="images/sensor_fusion_assembly_complete_box_drawing.png" width="450" alt="Complete box CAD drawing">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_complete_box_drawing.png" width="450" alt="Complete box CAD drawing">
**Figure 21.** CAD drawing of complete Sensor Box
* Actual Sensor Fusion Box:
- <img src="images/sensor_fusion_assembly_taped_box.png" width="450" alt="Taped box">
- **Figure 22.** Taped box with motor assembly and servo control box and screw detail
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_taped_box.png" width="450" alt="Taped box">
+ **Figure 22.** Taped box with motor assembly and servo control box and
+ screw detail
-1. Print out a colored copy of the checkerboard (included in the [Sensor Fusion Box 1.3.zip file](sensor_fusion_box_1.3.zip)) on A3 (or 11 x 17 inch paper), and tape it on the opposite wall of the phone fixture.
+1. Print out a colored copy of the checkerboard (included in the [Sensor Fusion
+ Box zip file](/compatibility/cts/sensor_fusion_1.4.zip)) on A3 (or 11 x 17
+ inch paper), and tape it on the opposite wall of the phone fixture.
Make sure the red dot in the center of the checkerboard is directly facing
the camera when placed on the fixture, as shown below:
- <img src="images/sensor_fusion_assembly_checkerboard.png" width="350" alt="Checkerboard">
+ <img src="/compatibility/cts/images/sensor_fusion_assembly_checkerboard.png" width="350" alt="Checkerboard">
**Figure 23.** Checkerboard printed and taped to the opposite wall of phone
fixture
diff --git a/en/compatibility/cts/sensor-fusion-quick-start.html b/en/compatibility/cts/sensor-fusion-quick-start.html
index 521e5bea..e189d10c 100644
--- a/en/compatibility/cts/sensor-fusion-quick-start.html
+++ b/en/compatibility/cts/sensor-fusion-quick-start.html
@@ -28,7 +28,7 @@
Before getting started, ensure you have the following cables and cords
available:</p>
<figure id="sensor-fusion-test-component">
- <img src="images/sensor_fusion_test_components.png" width="700" alt="Sensor fusion test components">
+ <img src="/compatibility/cts/images/sensor_fusion_test_components.png" width="700" alt="Sensor fusion test components">
<figcaption><b>Figure 1.</b> Components required for the sensor fusion test</figcaption>
</figure>
<ul>
@@ -47,7 +47,7 @@
<li>Use the interconnected cable to connect the two lights.</li>
<li>Connect one light to the conversion cable.
<figure id="sensor-fusion-connect-lights">
- <img src="images/sensor_fusion_connect_lights.png" width="300" alt="Connect lights">
+ <img src="/compatibility/cts/images/sensor_fusion_connect_lights.png" width="300" alt="Connect lights">
<figcaption><b>Figure 2.</b> Connecting the lights to each other and one light to the conversion cable</figcaption>
</figure>
</li>
@@ -56,8 +56,8 @@
cable for lighting.
<table class="columns">
<tr>
- <td><img src="images/sensor_fusion_conversion_cable1.png" width="" alt="Conversion cable and power cable"></td>
- <td><img src="images/sensor_fusion_conversion_cable2.png" width="" alt="Power cable for lighting"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_conversion_cable1.png" width="" alt="Conversion cable and power cable"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_conversion_cable2.png" width="" alt="Power cable for lighting"></td>
</tr>
</table>
<b>Figure 3.</b> Lighting conversion cable exiting the box and connecting
@@ -73,15 +73,15 @@
Yellow, R = Red, B = Black), as reversing the order could damage the
motor.
<figure id="sensor-fusion-servo-connector">
- <img src="images/sensor_fusion_servo_connector.png" width="300" alt="Servo connecting to the servo control box">
+ <img src="/compatibility/cts/images/sensor_fusion_servo_connector.png" width="300" alt="Servo connecting to the servo control box">
<figcaption><b>Figure 4.</b> Servo connecting to the servo control box</figcaption>
</figure>
<li>Connect the servo control with its power cord (the lighting and
servo control have independent, dedicated power supplies).
<table class="columns">
<tr>
- <td><img src="images/sensor_fusion_servo_control1.png" width="" alt="Servo control"></td>
- <td><img src="images/sensor_fusion_servo_control2.png" width="" alt="Power to servo control"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_servo_control1.png" width="" alt="Servo control"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_servo_control2.png" width="" alt="Power to servo control"></td>
</tr>
</table>
<b>Figure 5.</b> Connecting the servo control to its dedicated power
@@ -90,8 +90,8 @@
host (machine that is running the test).
<table class="columns">
<tr>
- <td><img src="images/sensor_fusion_servo_control_box1.png" width="" alt="Connect servo control box"></td>
- <td><img src="images/sensor_fusion_servo_control_box2.png" width="" alt="Connect servo control box to host"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_servo_control_box1.png" width="" alt="Connect servo control box"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_servo_control_box2.png" width="" alt="Connect servo control box to host"></td>
</tr>
</table>
<b>Figure 6.</b> Connecting the servo control box to the host machine</li>
@@ -101,22 +101,22 @@
<li>Set the phone on the fixture and clamp it down.<br>
<table class="columns">
<tr>
- <td><img src="images/sensor_fusion_fixture1.png" width="" alt="Phone on fixture"></td>
- <td><img src="images/sensor_fusion_fixture2.png" width="" alt="Clamping phone on fixture"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_fixture1.png" width="" alt="Phone on fixture"></td>
+ <td><img src="/compatibility/cts/images/sensor_fusion_fixture2.png" width="" alt="Clamping phone on fixture"></td>
</tr>
</table>
<b>Figure 7.</b> Placing and clamping the phone on the fixture
<p> The upside-down thumb screw provides back support while the
other screw tightens the grip by turning right. For more help,
- refer to the video on loading the phone (included in the <a
- href="sensor_fusion_box_1.3.zip">Sensor Fusion Box zip file</a>).
- </p>
+ refer to the video on loading the phone (included in the
+ <a href="/compatibility/cts/sensor_fusion_1.4.zip">Sensor
+ Fusion Box zip file</a>). </p>
</li>
<li>Use a zip tie to hold the phone USB cord to the fixture plate and
lead it outside the box through the exit hole. Plug the other end
of the cord to the host running the test.
<figure id="sensor-fusion-zip-ties">
- <img src="images/sensor_fusion_zip_ties.png" width="300" alt="Phone USB cord with zip ties">
+ <img src="/compatibility/cts/images/sensor_fusion_zip_ties.png" width="300" alt="Phone USB cord with zip ties">
<figcaption><b>Figure 8.</b> Phone USB cord held to fixture with
zip ties</figcaption>
</figure>
@@ -176,7 +176,7 @@
<table class="columns">
<tr>
<td>
- <img src="images/sensor_fusion_adjust.png" width="" alt="Adjust position and speed of servo">
+ <img src="/compatibility/cts/images/sensor_fusion_adjust.png" width="" alt="Adjust position and speed of servo">
</td>
<td>
<ul>
@@ -192,7 +192,9 @@
</li>
</ol>
<p>
- For more help, refer to the video of the sensor fusion box running (included in the <a href=sensor_fusion_box_1.3.zip>Sensor Fusion Box zip file</a>).
+ For more help, refer to the video of the sensor fusion box running (included
+ in the <a href=/compatibility/cts/sensor_fusion_1.4.zip>Sensor Fusion Box
+ zip file</a>).
</p>
</body>
</html>
diff --git a/en/compatibility/cts/sensor_fusion_box_1.3.zip b/en/compatibility/cts/sensor_fusion_1.4.zip
index 814f83ee..ef140552 100644
--- a/en/compatibility/cts/sensor_fusion_box_1.3.zip
+++ b/en/compatibility/cts/sensor_fusion_1.4.zip
Binary files differ
diff --git a/en/compatibility/cts/wfov_its_box_assembly_2.6.zip b/en/compatibility/cts/wfov_its_box_assembly_2.6.zip
new file mode 100644
index 00000000..e8e411eb
--- /dev/null
+++ b/en/compatibility/cts/wfov_its_box_assembly_2.6.zip
Binary files differ
diff --git a/en/devices/_toc-connectivity.yaml b/en/devices/_toc-connectivity.yaml
index 833b600a..aebb3dde 100644
--- a/en/devices/_toc-connectivity.yaml
+++ b/en/devices/_toc-connectivity.yaml
@@ -9,7 +9,7 @@ toc:
path: /devices/bluetooth/services
- title: Bluetooth Low Energy
path: /devices/bluetooth/ble
- - title: BLE for Hearing Aids
+ - title: Hearing Aids over BLE
path: /devices/bluetooth/asha
- title: BLE Advertising
path: /devices/bluetooth/ble_advertising
diff --git a/en/devices/_toc-data.yaml b/en/devices/_toc-data.yaml
index af0157e7..6fef1f10 100644
--- a/en/devices/_toc-data.yaml
+++ b/en/devices/_toc-data.yaml
@@ -13,6 +13,8 @@ toc:
path: /devices/tech/datausage/iface-overview
- title: Tethering Data
path: /devices/tech/datausage/tethering-data
+- title: Tethering Offload
+ path: /devices/tech/connect/tethering-offload
- title: Usage Cycle Reset Dates
path: /devices/tech/datausage/usage-cycle-resets-dates
- title: Kernel Overview
diff --git a/en/devices/architecture/hal.html b/en/devices/architecture/hal.html
index 17ccea71..12525a65 100644
--- a/en/devices/architecture/hal.html
+++ b/en/devices/architecture/hal.html
@@ -1,6 +1,6 @@
<html devsite>
<head>
- <title>Hardware Abstraction Layer (HAL)</title>
+ <title>Legacy HALs</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
@@ -26,8 +26,9 @@
<p>A HAL defines a standard interface for hardware vendors to implement,
which enables Android to be agnostic about lower-level driver implementations.
Using a HAL allows you to implement functionality without affecting or modifying
-the higher level system. HAL implementations are packaged into modules and
-loaded by the Android system at the appropriate time.</p>
+the higher level system. This page describes the older architecture, which is no
+longer supported as of Android 8.0. For Android 8.0 and higher, please see
+<a href="/devices/architecture/hal-types/">HAL Types</a>.</p>
<img src="../images/ape_fwk_hal.png">
@@ -133,8 +134,5 @@ scheme varies slightly from module to module, but follows the general pattern
of: <code>&lt;module_type&gt;.&lt;device_name&gt;</code>.
</p>
-<p>For details on setting up the build for each HAL, see the HAL-specific
-documentation through the Porting section of this website.</p>
-
</body>
</html>
diff --git a/en/devices/architecture/vndk/index.html b/en/devices/architecture/vndk/index.html
index 02722a66..f692f8d8 100644
--- a/en/devices/architecture/vndk/index.html
+++ b/en/devices/architecture/vndk/index.html
@@ -5,6 +5,7 @@
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
+ {% include "_versions.html" %}
<!--
Copyright 2017 The Android Open Source Project
@@ -76,9 +77,9 @@ Namespace</a></em> provides fine-grained control over shared library linkages.
<li><em><a href="/devices/architecture/vndk/dir-rules-sepolicy.html">Directories,
Rules, and sepolicy</a></em> defines the directory structure for devices running
Android 8.0 and higher, VNDK rules, and associated sepolicy.</li>
-<li>The <em><a href="../images/vndk_design_android_o.pdf">VNDK Design in Android
-O</a></em> presentation illustrates fundamental VDNK concepts used in Android
-O.</li>
+<li>The <em><a href="/devices/architecture/images/VNDK.pdf">VNDK Design</a></em>
+presentation illustrates fundamental VDNK concepts used in Android 8.0 and
+higher.</li>
</ul>
<h2 id="concepts">VNDK concepts</h2>
@@ -273,7 +274,9 @@ generalizations) and released by Google.</aside>
<h2 id="vndk-versioning">VNDK versioning</h2>
-<p>In Android P, VNDK shared libraries are versioned:</p>
+<p>
+ In Android {{ androidPVersionNumber }}, VNDK shared libraries are versioned:
+</p>
<ul>
<li>The <code>ro.vndk.version</code> system property is automatically added to
@@ -314,7 +317,7 @@ below:</p>
built without <code>BOARD_VNDK_VERSION</code> or built with
<code>BOARD_VNDK_RUNTIME_DISABLE</code>), it may add
<code>PRODUCT_USE_VNDK_OVERRIDE := false</code> to <code>BoardConfig.mk</code>
-while upgrading to Android P.</p>
+while upgrading to Android {{ androidPVersionNumber }}.</p>
<p>If <code>PRODUCT_USE_VNDK_OVERRIDE</code> is <code>false</code>, the
<code>ro.vndk.lite</code> property will be automatically added to
@@ -323,30 +326,38 @@ Consequently, the dynamic linker will load the linker namespace configuration
from <code>/system/etc/ld.config.vndk_lite.txt</code>, which isolates only
SP-HAL and VNDK-SP.</p>
-<p>If an Android 7.0 (or earlier) device would like to upgrade to Android P,
-add <code>PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false</code> to
-<code>BoardConfig.mk</code>.</p>
+<p>
+ To upgrade an Android 7.0 or lower device to Android
+ {{ androidPVersionNumber }}, add
+ <code>PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false</code> to
+ <code>BoardConfig.mk</code>.
+</p>
<h3 id="vendor-test-suite">Vendor Test Suite (VTS)</h3>
-<p>Android P Vendor Test Suite (VTS) mandates a non-empty
-<code>ro.vndk.version</code> property. Both newly-launched devices and
-upgrading devices must define <code>ro.vndk.version</code>. Some VNDK test
-cases (e.g. <code>VtsVndkFilesTest</code> and
-<code>VtsVndkDependencyTest</code>) rely on the <code>ro.vndk.version</code>
-property to load the matching eligible VNDK libraries data sets.</p>
+<p>
+ The Android {{ androidPVersionNumber }} Vendor Test Suite (VTS) mandates a
+ non-empty <code>ro.vndk.version</code> property. Both newly-launched devices
+ and upgrading devices must define <code>ro.vndk.version</code>. Some VNDK test
+ cases (e.g. <code>VtsVndkFilesTest</code> and
+ <code>VtsVndkDependencyTest</code>) rely on the <code>ro.vndk.version</code>
+ property to load the matching eligible VNDK libraries data sets.
+</p>
-<p>If the <code>ro.product.first_api_level</code> property is greater than 27,
-the <code>ro.vndk.lite</code> property must not be defined.
-<code>VtsTreblePlatformVersionTest</code> will fail if
-<code>ro.vndk.lite</code> is defined in a newly-launched Android P device.</p>
+<p>
+ If the <code>ro.product.first_api_level</code> property is greater than 27,
+ the <code>ro.vndk.lite</code> property must not be defined.
+ <code>VtsTreblePlatformVersionTest</code> will fail if
+ <code>ro.vndk.lite</code> is defined in a newly-launched Android
+ {{ androidPVersionNumber }} device.
+</p>
<h2 id="document-history">Document history</h2>
<p>This section tracks changes to VNDK documentation.</p>
-<h3 id="changes-p">Android P changes</h3>
+<h3 id="changes-p">Android {{ androidPVersionNumber }} changes</h3>
<ul>
<li>Add VNDK versioning section.</li>
diff --git a/en/devices/architecture/vndk/renderscript.html b/en/devices/architecture/vndk/renderscript.html
index 82f3db16..a2b5a8bd 100644
--- a/en/devices/architecture/vndk/renderscript.html
+++ b/en/devices/architecture/vndk/renderscript.html
@@ -21,59 +21,81 @@
limitations under the License.
-->
-<p><em>RenderScript</em> is a framework for running computationally intensive
-tasks at high performance on Android. It is designed for use with data-parallel
-computation, although serial workloads can benefit as well. The RenderScript
-runtime parallelizes work across processors available on a device, such as
-multi-core CPUs and GPUs, enabling developers to focus on expressing algorithms
-rather than scheduling work. RenderScript is especially useful for applications
-performing image processing, computational photography, or computer vision.</p>
+<p>
+ <em>RenderScript</em> is a framework for running computationally intensive
+ tasks at high performance on Android. It is designed for use with
+ data-parallel computation, although serial workloads can benefit as well. The
+ RenderScript runtime parallelizes work across processors available on a
+ device, such as multi-core CPUs and GPUs, enabling developers to focus on
+ expressing algorithms rather than scheduling work. RenderScript is especially
+ useful for applications performing image processing, computational
+ photography, or computer vision.
+</p>
-<p>Android O devices use the following RenderScript framework and vendor HALs:
+<p>
+ Devices running Android 8.0 and higher use the following RenderScript
+ framework and vendor HALs:
</p>
+
<img src="../images/treble_rs_linking.png">
-<figcaption><strong>Figure 1.</strong> Vendor code linking to internal libs.
+<figcaption>
+ <strong>Figure 1.</strong> Vendor code linking to internal libs
</figcaption>
-<p>Differences from RenderScript in Android 7.x and earlier include:</p>
+<p>
+ Differences from RenderScript in Android 7.x and lower include:
+</p>
+
<ul>
-<li>Two instances of RenderScript internal libs in a process. One set is for CPU
-fallback path and is from directly at <code>/system/lib</code>; the other set is
-for GPU path and is from <code>/system/lib/vndk-sp</code>.</li>
-<li>RS internal libs in <code>/system/lib</code> are built as part of the
-platform and are updated as <code>system.img</code> is upgraded. However, libs
-in <code>/system/lib/vndk-sp</code> are built for the vendor and are not updated
-when <code>system.img</code> is upgraded (while they can be updated for a
-security fix, their ABI remains the same).</li>
-<li>Vendor code (RS HAL, RS driver, and the bcc plugin) are linked against the
-RenderScript internal libs located at <code>/system/lib/vndk-sp</code>. They
-cannot link against libs in <code>/system/lib</code> because libs in that
-directory are built for the platform and thus may not be compatible with the
-vendor code (i.e., symbols may be removed). Doing so would make a framework-only
-OTA impossible.</li>
+ <li>Two instances of RenderScript internal libs in a process. One set is for
+ CPU fallback path and is from directly at <code>/system/lib</code>; the other
+ set is for GPU path and is from <code>/system/lib/vndk-sp</code>.</li>
+ <li>RS internal libs in <code>/system/lib</code> are built as part of the
+ platform and are updated as <code>system.img</code> is upgraded. However, libs
+ in <code>/system/lib/vndk-sp</code> are built for the vendor and are not
+ updated when <code>system.img</code> is upgraded (while they can be updated
+ for a security fix, their ABI remains the same).</li>
+ <li>Vendor code (RS HAL, RS driver, and the <code>bcc plugin</code>) are
+ linked against the RenderScript internal libs located at
+ <code>/system/lib/vndk-sp</code>. They cannot link against libs in
+ <code>/system/lib</code> because libs in that directory are built for the
+ platform and thus may not be compatible with the vendor code (i.e., symbols
+ may be removed). Doing so would make a framework-only OTA impossible.</li>
</ul>
-<p>For more details, see
-<a href="https://developer.android.com/guide/topics/renderscript/compute.html" class="external">Renderscript</a>
-on developer.android.com.</p>
+<p>
+ For more details, see
+ <a href="https://developer.android.com/guide/topics/renderscript/compute.html" class="external">Renderscript</a>
+ on developer.android.com.
+</p>
<h2 id="design">Design</h2>
-<p>The following sections detail RenderScript design in Android O.</p>
+
+<p>
+ The following sections detail RenderScript design in Android 8.0 and higher.
+</p>
<h3 id="renderscript-libs-available-to-vendors">RenderScript libs available to
vendors</h3>
-<p>This section lists the RenderScript libs (known as Vendor NDK for
-Same-Process HALs or VNDK-SP) that are available to vendor code and which can be
-linked against. It also details additional libraries that are unrelated to
-RenderScript but which are also provided to vendor code.</p>
-<p>While the following list of libraries might differ between Android release,
-it is immutable for a specific Android release; for an up-to-date list of
-available libraries, refer to <code>/system/etc/ld.config.txt</code>.</p>
+<p>
+ This section lists the RenderScript libs (known as Vendor NDK for Same-Process
+ HALs or VNDK-SP) that are available to vendor code and which can be linked
+ against. It also details additional libraries that are unrelated to
+ RenderScript but which are also provided to vendor code.
+</p>
+
+<p>
+ While the following list of libraries might differ between Android releases,
+ it is immutable for a specific Android release; for an up-to-date list of
+ available libraries, refer to <code>/system/etc/ld.config.txt</code>.
+</p>
-<aside class="note"><strong>Note:</strong> Libraries not listed below cannot be
-used by any vendor code; i.e. <code>libLLVM.so</code> cannot be used by the
-vendor's bcc plugin as the lib is not in the list.</aside>
+<aside class="note">
+ <strong>Note:</strong> Libraries not listed below cannot be used by any vendor
+ code; i.e. <code>libLLVM.so</code> cannot be used by the vendor's
+ <code>bcc plugin</code> as the lib is not in the list.
+</aside>
<table>
<tr>
@@ -117,189 +139,249 @@ vendor's bcc plugin as the lib is not in the list.</aside>
</table>
<h3 id="linker-namespace-configuration">Linker namespace configuration</h3>
-<p>The linking restriction that prevents libs not in VNDK-SP from being used by
-vendor code is enforced at runtime using the linker namespace. (For details,
-refer to the
-<a href="/devices/architecture/images/vndk_design_android_o.pdf">VNDK Design in
-Android O</a> presentation.)</p>
-
-<p>On a device running Android O, all Same-Process HALs (SP-HALs) <em>except
-RenderScript</em> are loaded inside the linker namespace <code>sphal</code>.
-RenderScript is loaded into the RenderScript-specific namespace <code>rs</code>,
-a location that enables a slightly looser enforcement for RenderScript libs.
-Because the RS implementation needs to load the compiled bitcode,
-<code>/data/*/*.so</code> is added to the path of the <code>rs</code> namespace
-(other SP-HALs are not allowed to load libs from the data partition).</p>
-
-<p>In addition, the <code>rs</code> namespace allows more libs than provided for
-by other namespaces. <code>libmediandk.so</code> and <code>libft2.so</code> are
-exposed to the <code>rs</code> namespace because <code>libRS_internal.so</code>
-has an internal dependency to these libraries.</p>
+
+<p>
+ The linking restriction that prevents libs not in VNDK-SP from being used by
+ vendor code is enforced at runtime using the linker namespace. (For details,
+ refer to the <a href="/devices/architecture/images/VNDK.pdf">VNDK Design</a>
+ presentation.)
+</p>
+
+<p>
+ On a device running Android 8.0 and higher, all Same-Process HALs (SP-HALs)
+ <em>except RenderScript</em> are loaded inside the linker namespace
+ <code>sphal</code>. RenderScript is loaded into the RenderScript-specific
+ namespace <code>rs</code>, a location that enables a slightly looser
+ enforcement for RenderScript libs. Because the RS implementation needs to load
+ the compiled bitcode, <code>/data/*/*.so</code> is added to the path of the
+ <code>rs</code> namespace (other SP-HALs are not allowed to load libs from the
+ data partition).
+</p>
+
+<p>
+ In addition, the <code>rs</code> namespace allows more libs than provided for
+ by other namespaces. <code>libmediandk.so</code> and <code>libft2.so</code>
+ are exposed to the <code>rs</code> namespace because
+ <code>libRS_internal.so</code> has an internal dependency to these libraries.
+</p>
<img src="../images/treble_rs_namespace.png">
-<figcaption><strong>Figure 2.</strong> Namespace configuration for linker.
+<figcaption>
+ <strong>Figure 2.</strong> Namespace configuration for linker
</figcaption>
<h3 id="loading-drivers">Loading drivers</h3>
<h4>CPU fallback path</h4>
-<p>Depending on the existence of the <code>RS_CONTEXT_LOW_LATENCY</code> bit
-when creating an RS context, either the CPU or GPU path is selected. When the
-CPU path is selected, <code>libRS_internal.so</code> (the main implementation of
-the RS framework) is directly <code>dlopen</code>ed from the default linker
-namespace where the platform version of RS libs are provided.</p>
-
-<p>The RS HAL implementation from the vendor is not used at all when the CPU
-fallback path is taken, and an <code>RsContext</code> object is created with
-null <code>mVendorDriverName</code>. <code>libRSDriver.so</code> is (by default)
-<code>dlopen</code>ed and the driver lib is loaded from the <code>default</code>
-namespace because the caller (<code>libRS_internal.so</code>) is also loaded in
-the <code>default</code> namespace.</p>
+
+<p>
+ Depending on the existence of the <code>RS_CONTEXT_LOW_LATENCY</code> bit
+ when creating an RS context, either the CPU or GPU path is selected. When the
+ CPU path is selected, <code>libRS_internal.so</code> (the main implementation
+ of the RS framework) is directly <code>dlopen</code>ed from the default linker
+ namespace where the platform version of RS libs are provided.
+</p>
+
+<p>
+ The RS HAL implementation from the vendor is not used at all when the CPU
+ fallback path is taken, and an <code>RsContext</code> object is created with
+ null <code>mVendorDriverName</code>. <code>libRSDriver.so</code> is (by
+ default) <code>dlopen</code>ed and the driver lib is loaded from the
+ <code>default</code> namespace because the caller
+ (<code>libRS_internal.so</code>) is also loaded in the <code>default</code>
+ namespace.
+</p>
<img src="../images/treble_rs_cpu_fallback.png">
-<figcaption><strong>Figure 4.</strong> CPU fallback path.</figcaption>
+<figcaption>
+ <strong>Figure 4.</strong> CPU fallback path
+</figcaption>
<h4 id="gpu-path">GPU path</h4>
-<p>For the GPU path, the <code>libRS_internal.so</code> is loaded differently.
-First, <code>libRS.so</code> uses
-<code>android.hardware.renderscript@1.0.so</code> (and its underlying
-<code>libhidltransport.so</code>) to load
-<code>android.hardware.renderscript@1.0-impl.so</code> (a vendor implementation
-of RS HAL) into a different linker namespace called <code>sphal</code>. The RS
-HAL then <code>dlopen</code>s <code>libRS_internal.so</code> in a another linker
-namespace called <code>rs</code>.</p>
-
-<p>Vendors can provide their own RS driver by setting the build-time flag
-<code>OVERRIDE_RS_DRIVER</code>, which is embedded into the RS HAL
-implementation
-(<code>hardware/interfaces/renderscript/1.0/default/Context.cpp</code>). This
-driver name is then <code>dlopen</code>ed for the RS context for the GPU path.
-</p>
-
-<p>The creation of the <code>RsContext</code> object is delegated to the RS HAL
-implementation. The HAL calls back to the RS framework using
-<code>rsContextCreateVendor()</code> function with the name of the driver to use
-as an argument. The RS framework then loads the specified driver when the
-<code>RsContext</code> is initialized. In this case, the driver library is
-loaded into the <code>rs</code> namespace because the <code>RsContext</code>
-object is created inside the <code>rs</code> namespace and
-<code>/vendor/lib</code> is in the search path of the namespace.</p>
+
+<p>
+ For the GPU path, the <code>libRS_internal.so</code> is loaded differently.
+ First, <code>libRS.so</code> uses
+ <code>android.hardware.renderscript@1.0.so</code> (and its underlying
+ <code>libhidltransport.so</code>) to load
+ <code>android.hardware.renderscript@1.0-impl.so</code> (a vendor
+ implementation of RS HAL) into a different linker namespace called
+ <code>sphal</code>. The RS
+ HAL then <code>dlopen</code>s <code>libRS_internal.so</code> in a another
+ linker namespace called <code>rs</code>.
+</p>
+
+<p>
+ Vendors can provide their own RS driver by setting the build time flag
+ <code>OVERRIDE_RS_DRIVER</code>, which is embedded into the RS HAL
+ implementation
+ (<code>hardware/interfaces/renderscript/1.0/default/Context.cpp</code>). This
+ driver name is then <code>dlopen</code>ed for the RS context for the GPU path.
+</p>
+
+<p>
+ The creation of the <code>RsContext</code> object is delegated to the RS HAL
+ implementation. The HAL calls back to the RS framework using
+ <code>rsContextCreateVendor()</code> function with the name of the driver to
+ use as an argument. The RS framework then loads the specified driver when the
+ <code>RsContext</code> is initialized. In this case, the driver library is
+ loaded into the <code>rs</code> namespace because the <code>RsContext</code>
+ object is created inside the <code>rs</code> namespace and
+ <code>/vendor/lib</code> is in the search path of the namespace.
+</p>
<img src="../images/treble_rs_gpu_fallback.png">
-<figcaption><strong>Figure 5.</strong> GPU fallback path.</figcaption>
+<figcaption>
+ <strong>Figure 5.</strong> GPU fallback path
+</figcaption>
-<p>When transitioning from the <code>default</code> namespace to the
-<code>sphal</code> namespace, <code>libhidltransport.so</code> uses the
-<code>android_load_sphal_library()</code> function to explicitly order the
-dynamic linker to load the <code>-impl.so</code> library from the
-<code>sphal</code> namespace.</p>
+<p>
+ When transitioning from the <code>default</code> namespace to the
+ <code>sphal</code> namespace, <code>libhidltransport.so</code> uses the
+ <code>android_load_sphal_library()</code> function to explicitly order the
+ dynamic linker to load the <code>-impl.so</code> library from the
+ <code>sphal</code> namespace.
+</p>
-<p>When transitioning from the <code>sphal</code> namespace to the <code>rs</code>
-namespace, loading is done indirectly by the following line in
-<code>/system/etc/ld.config.txt</code>:</p>
+<p>
+ When transitioning from the <code>sphal</code> namespace to the
+ <code>rs</code> namespace, loading is done indirectly by the following line in
+ <code>/system/etc/ld.config.txt</code>:
+</p>
<pre class="prettyprint">
namespace.sphal.link.rs.shared_libs = libRS_internal.so
</pre>
-<p>This line specifies the dynamic linker should load
-<code>libRS_internal.so</code> from the <code>rs</code> namespace when the lib
-can't be found/loaded from the <code>sphal</code> namespace (which is always the
-case because <code>sphal</code> namespace does not search
-<code>/system/lib/vndk-sp</code> where <code>libRS_internal.so</code> resides).
-With this configuration, a simple <code>dlopen()</code> call to
-<code>libRS_internal.so</code> is enough to make the namespace transition.</p>
+<p>
+ This line specifies the dynamic linker should load
+ <code>libRS_internal.so</code> from the <code>rs</code> namespace when the lib
+ can't be found/loaded from the <code>sphal</code> namespace (which is always
+ the case because <code>sphal</code> namespace does not search
+ <code>/system/lib/vndk-sp</code> where <code>libRS_internal.so</code>
+ resides). With this configuration, a simple <code>dlopen()</code> call to
+ <code>libRS_internal.so</code> is enough to make the namespace transition.
+</p>
<h3 id="loading-bcc-plugin">Loading bcc plugin</h3>
-<p><code>bcc plugin</code> is a vendor-provided library loaded into the
-<code>bcc</code> compiler. Because <code>bcc</code> is a system process in the
-<code>/system/bin</code> directory, the <code>bcc plugin</code> library can be
-considered an SP-HAL (i.e., a vendor HAL that can be directly loaded into the
-system process without being binderized). As an SP-HAL, the
-<code>bcc-plugin</code> library:</p>
+
+<p>
+ <code>bcc plugin</code> is a vendor-provided library loaded into the
+ <code>bcc</code> compiler. Because <code>bcc</code> is a system process in the
+ <code>/system/bin</code> directory, the <code>bcc plugin</code> library can be
+ considered an SP-HAL (i.e., a vendor HAL that can be directly loaded into the
+ system process without being binderized). As an SP-HAL, the
+ <code>bcc-plugin</code> library:
+</p>
+
<ul>
-<li>Cannot link against framework-only libraries such as
-<code>libLLVM.so</code>.</li>
-<li>Can link against only the VNDK-SP libraries available to the
-vendor.</li>
+ <li>Cannot link against framework-only libraries such as
+ <code>libLLVM.so</code>.</li>
+ <li>Can link against only the VNDK-SP libraries available to the vendor.</li>
</ul>
-<p>This restriction is enforced by loading the bcc plugin into the
-<code>sphal</code> namespace using the <code>android_sphal_load_library()</code>
-function. In previous versions of Android, the plugin name was specified using
-the <code>-load</code> option and the lib was loaded using the simple
-<code>dlopen()</code> by <code>libLLVM.so</code>. In Android O, this is
-specified in <code>-plugin</code> option and the lib is directly loaded by the
-<code>bcc</code> itself. This option enables a non-Android-specific path to
-the open source LLVM project.</p>
+<p>
+ This restriction is enforced by loading the <code>bcc plugin</code> into the
+ <code>sphal</code> namespace using the
+ <code>android_sphal_load_library()</code> function. In previous versions of
+ Android, the plugin name was specified using the <code>-load</code> option and
+ the lib was loaded using the simple <code>dlopen()</code> by
+ <code>libLLVM.so</code>. In Android 8.0 and higher, this is specified in the
+ <code>-plugin</code> option and the lib is directly loaded by the
+ <code>bcc</code> itself. This option enables a non-Android-specific path to
+ the open source LLVM project.
+</p>
<img src="../images/treble_rs_bcc_plugin_old.png">
-<figcaption><strong>Figure 6.</strong> Loading bcc plugin, Android 7.x and
-earlier.</figcaption>
+<figcaption>
+ <strong>Figure 6.</strong> Loading bcc plugin, Android 7.x and lower
+</figcaption>
<br>
<br>
<img src="../images/treble_rs_bcc_plugin_new.png">
-<figcaption><strong>Figure 7. </strong>Loading bcc plugin, Android O.
+ <figcaption><strong>Figure 7.</strong> Loading bcc plugin, Android 8.0 and
+ higher
</figcaption>
<h3 id="search-paths-for-ld-mc">Search paths for ld.mc</h3>
-<p>When executing <code>ld.mc</code>, some RS runtime libs are given as inputs
-to the linker. The RS bitcode from the app is linked against the runtime libs
-and when the converted bitcode is loaded into an app process, the runtime libs
-are again dynamically linked from the converted bitcode.</p>
+
+<p>
+ When executing <code>ld.mc</code>, some RS runtime libs are given as inputs
+ to the linker. The RS bitcode from the app is linked against the runtime libs
+ and when the converted bitcode is loaded into an app process, the runtime libs
+ are again dynamically linked from the converted bitcode.
+</p>
<p>Runtime libs include:</p>
+
<ul>
-<li><code>libcompiler_rt.so</code></li>
-<li><code>libm.so</code></li>
-<li><code>libc.so</code></li>
-<li>RS driver (either <code>libRSDriver.so</code> or
-<code>OVERRIDE_RS_DRIVER</code>)</li>
+ <li><code>libcompiler_rt.so</code></li>
+ <li><code>libm.so</code></li>
+ <li><code>libc.so</code></li>
+ <li>RS driver (either <code>libRSDriver.so</code> or
+ <code>OVERRIDE_RS_DRIVER</code>)</li>
</ul>
-<p>When loading the compiled bitcode into the app process, we must provide the
-exact same library that was used by <code>ld.mc</code>. Otherwise, the compiled
-bitcode may not find a symbol which was available when it was linked.</p>
+<p>
+ When loading the compiled bitcode into the app process, provide the exact same
+ library that was used by <code>ld.mc</code>. Otherwise, the compiled bitcode
+ may not find a symbol which was available when it was linked.
+</p>
-<p>To do so, RS framework uses different search paths for the runtime libs when
-executing <code>ld.mc</code>, depending on whether the RS framework itself is
-loaded from <code>/system/lib</code> or from <code>/system/lib/vndk-sp</code>.
-This can be determined by reading the address of an arbitrary symbol of a RS
-framework lib and using <code>dladdr()</code> to get the file path mapped to the
-address.</p>
+<p>
+ To do so, RS framework uses different search paths for the runtime libs when
+ executing <code>ld.mc</code>, depending on whether the RS framework itself is
+ loaded from <code>/system/lib</code> or from <code>/system/lib/vndk-sp</code>.
+ This can be determined by reading the address of an arbitrary symbol of a RS
+ framework lib and using <code>dladdr()</code> to get the file path mapped to
+ the address.
+</p>
<h3 id="selinux-policy">SELinux policy</h3>
-<p>As a result of the SELinux policy changes in Android O, you must follow
-specific rules (enforced through <code>neverallows</code>) when labelling
-additional files in <code>vendor</code> partition:</p>
+
+<p>
+ As a result of the SELinux policy changes in Android 8.0 and higher, you must
+ follow specific rules (enforced through <code>neverallows</code>) when
+ labelling additional files in <code>vendor</code> partition:
+</p>
+
<ul>
-<li><code>vendor_file</code> must be the default label in for all files in
-<code>vendor</code> partition. The platform policy requires this to access
-passthrough HAL implementations.</li>
-<li>All new <code>exec_types</code> added in <code>vendor</code> partition
-through vendor SEPolicy must have <code>vendor_file_type</code> attribute. This
-is enforced through <code>neverallows</code>.</li>
-<li>To avoid conflicts with future platform/framework updates, avoid labelling
-files other than <code>exec_types</code> in <code>vendor</code> partition.
-<li>All library dependencies for AOSP-identified same process HALs must be
-labelled as <code>same_process_hal_file</code>.</li>
+ <li><code>vendor_file</code> must be the default label in for all files in
+ <code>vendor</code> partition. The platform policy requires this to access
+ passthrough HAL implementations.</li>
+ <li>All new <code>exec_types</code> added in <code>vendor</code> partition
+ through vendor SEPolicy must have <code>vendor_file_type</code> attribute.
+ This is enforced through <code>neverallows</code>.</li>
+ <li>To avoid conflicts with future platform/framework updates, avoid labelling
+ files other than <code>exec_types</code> in <code>vendor</code> partition.
+ </li>
+ <li>All library dependencies for AOSP-identified same process HALs must be
+ labelled as <code>same_process_hal_file</code>.</li>
</ul>
-<aside class="note"><strong>Note:</strong> For details on Android 8.0 SELinux,
-see <a href="/security/selinux/images/SELinux_Treble.pdf">SELinux for Android
-8.0</a>.</aside>
+<p>
+ For details on SELinux policy, see
+ <a href="/security/selinux/">Security-Enhanced Linux in Android</a>.
+</p>
<h3 id="abi-compatibility-for-bitcode">ABI compatibility for bitcode</h3>
-<p>If no new APIs are added, which means no HAL version bump, the RS frameworks
-will keep using the existing GPU (HAL 1.0) driver.</p>
-<p>For minor HAL changes (HAL 1.1) not affecting bitcode, the frameworks should
-fallback to CPU for these newly added APIs and keep using GPU (HAL 1.0) driver
-elsewhere.</p>
+<p>
+ If no new APIs are added, which means no HAL version bump, the RS frameworks
+ will keep using the existing GPU (HAL 1.0) driver.
+</p>
-<p>For major HAL changes (HAL 2.0) affecting bitcode compilation/linking, RS
-frameworks should choose not to load vendor-provided GPU drivers and instead use
-the CPU or Vulkan path for acceleration.</p>
+<p>
+ For minor HAL changes (HAL 1.1) not affecting bitcode, the frameworks should
+ fallback to CPU for these newly added APIs and keep using GPU (HAL 1.0) driver
+ elsewhere.
+</p>
+
+<p>
+ For major HAL changes (HAL 2.0) affecting bitcode compilation/linking, RS
+ frameworks should choose not to load vendor-provided GPU drivers and instead
+ use the CPU or Vulkan path for acceleration.
+</p>
<p>Consuming RenderScript bitcode occurs in three stages:</p>
@@ -310,114 +392,145 @@ the CPU or Vulkan path for acceleration.</p>
</tr>
<tr>
<td><em>Compile</em></td>
-<td><ul>
-<li>The input bitcode (.bc) for <code>bcc</code> must be in
-<code>LLVM 3.2</code> bitcode format and <code>bcc</code> must be backward
-compatible with existing (legacy) apps.</li>
-<li>However, the meta-data in .bc could change (there could new runtime
-functions, e.g, Allocation setters &mp; getters, math functions, etc.). Part
-of the runtime functions lives in <code>libclcore.bc</code>, part of them
-lives in LibRSDriver or vendor equivalent.</li>
-<li>New runtime functions or breaking meta-data changes require incrementing
-the bitcode API level. Because vendor drivers won't be able to consume it, the
-HAL version must also be incremented.</li>
-<li>Vendors may have their own compilers, but the conclusions/requirements for
-<code>bcc</code> also apply to those compilers.</li>
-</ul></td>
+<td>
+ <ul>
+ <li>The input bitcode (.bc) for <code>bcc</code> must be in
+ <code>LLVM 3.2</code> bitcode format and <code>bcc</code> must be backward
+ compatible with existing (legacy) apps.</li>
+ <li>However, the meta-data in .bc could change (there could new runtime
+ functions, e.g, Allocation setters &mp; getters, math functions, etc.). Part
+ of the runtime functions lives in <code>libclcore.bc</code>, part of them
+ lives in LibRSDriver or vendor equivalent.</li>
+ <li>New runtime functions or breaking meta-data changes require incrementing
+ the bitcode API level. Because vendor drivers won't be able to consume it,
+ the HAL version must also be incremented.</li>
+ <li>Vendors may have their own compilers, but the conclusions/requirements
+ for <code>bcc</code> also apply to those compilers.</li>
+ </ul>
+</td>
</tr>
<tr>
<td><em>Link</em></td>
-<td><ul>
-<li>The compiled .o will be linked with vendor driver, e.g,
-<code>libRSDriver_foo.so</code>, and <code>libcompiler_rt.so</code>. The CPU
-path will link with <code>libRSDriver.so</code>.</li>
-<li>If the .o requires a new runtime API from <code>libRSDriver_foo</code>, the
-vendor driver has to be updated to support it.</li>
-<li>Certain vendors may have their own linkers, but the argument for
-<code>ld.mc</code> also apply to them.</li>
-</ul></td>
+<td>
+ <ul>
+ <li>The compiled .o will be linked with vendor driver, e.g,
+ <code>libRSDriver_foo.so</code>, and <code>libcompiler_rt.so</code>. The CPU
+ path will link with <code>libRSDriver.so</code>.</li>
+ <li>If the .o requires a new runtime API from <code>libRSDriver_foo</code>,
+ the vendor driver has to be updated to support it.</li>
+ <li>Certain vendors may have their own linkers, but the argument for
+ <code>ld.mc</code> also apply to them.</li>
+ </ul>
+</td>
</tr>
<tr>
<td><em>Load</em></td>
-<td><ul>
-<li><code>libRSCpuRef</code> loads the the shared object. If there are changes
-to this interface, a HAL version bump is needed.</li>
-<li>Vendors would either rely on <code>libRSCpuRef</code> to load the shared
-object, or implement their own.</li>
-</ul></td>
+<td>
+ <ul>
+ <li><code>libRSCpuRef</code> loads the shared object. If there are
+ changes to this interface, a HAL version bump is needed.</li>
+ <li>Vendors would either rely on <code>libRSCpuRef</code> to load the shared
+ object, or implement their own.</li>
+ </ul>
+</td>
</tr>
</table>
-<p>In addition to the HAL, runtime APIs and the exported symbols are also
-interfaces. Neither interface has changed since Android 7.0 (API 24) and there
-are no immediate plans to change it in Android O and beyond. However, if the
-interface does change, the HAL version will also increment.</p>
+<p>
+ In addition to the HAL, runtime APIs and the exported symbols are also
+ interfaces. Neither interface has changed since Android 7.0 (API 24) and there
+ are no immediate plans to change it in Android 8.0 and beyond. However, if the
+ interface does change, the HAL version will also increment.
+</p>
<h2 id="vendor-implementations">Vendor implementations</h2>
-<p>Android O requires some GPU driver changes for the GPU driver to work
-correctly.</p>
+
+<p>
+ Android 8.0 and higher requires some GPU driver changes for the GPU driver to
+ work correctly.
+</p>
<h3 id="driver-modules">Driver modules</h3>
+
<ul>
-<li>Driver modules must not depend on any system libraries that are not in
-<a href="#renderscript-libs-available-to-vendors">the list</a>.</li>
-<li>Driver must provide its own
-<code>android.hardware.renderscript@1.0-impl_{NAME}</code>, or declare the
-default implementation <code>android.hardware.renderscript@1.0-impl</code> as
-its dependency.</li>
-<li>CPU implementation <code>libRSDriver.so</code> is a good example of how to
-remove non-VNDK-SP dependencies.</li>
+ <li>Driver modules must not depend on any system libraries that are not in
+ <a href="#renderscript-libs-available-to-vendors">the list</a>.</li>
+ <li>Driver must provide its own
+ <code>android.hardware.renderscript@1.0-impl_{NAME}</code>, or declare the
+ default implementation <code>android.hardware.renderscript@1.0-impl</code> as
+ its dependency.</li>
+ <li>CPU implementation <code>libRSDriver.so</code> is a good example of how to
+ remove non-VNDK-SP dependencies.</li>
</ul>
<h3 id="bitcode-compiler">Bitcode compiler</h3>
-<p>You can compile RenderScript bitcode for the vendor driver in two ways:</p>
+
+<p>
+ You can compile RenderScript bitcode for the vendor driver in two ways:
+</p>
+
<ol>
-<li>Invoke vendor-specific RenderScript compiler in <code>/vendor/bin/</code>
-(preferred method of GPU compilation). Similar to other driver modules, the
-vendor compiler binary cannot depend on any system library that is not in the
-list of <a href="#renderscript-libs-available-to-vendors">RenderScript libs
-available to vendors</a>.</li>
-<li>Invoke system bcc: <code>/system/bin/bcc</code> with a vendor-provided bcc
-plugin. The <code>bcc plugin</code> cannot depend on any system library that is
-not in the list of
-<a href="#renderscript-libs-available-to-vendors">RenderScript libs available to
-vendors</a>.</li>
+ <li>Invoke vendor-specific RenderScript compiler in <code>/vendor/bin/</code>
+ (preferred method of GPU compilation). Similar to other driver modules, the
+ vendor compiler binary cannot depend on any system library that is not in the
+ list of <a href="#renderscript-libs-available-to-vendors">RenderScript libs
+ available to vendors</a>.</li>
+ <li>Invoke system bcc: <code>/system/bin/bcc</code> with a vendor-provided
+ <code>bcc plugin</code>; this plugin cannot depend on any system library that
+ is not in the list of
+ <a href="#renderscript-libs-available-to-vendors">RenderScript libs available
+ to vendors</a>.</li>
</ol>
-<p>If the vendor <code>bcc plugin</code> needs to interfere with the CPU
-compilation and its dependency on <code>libLLVM.so</code> cannot be easily
-removed, the vendor should copy <code>bcc</code> (and all the non-LL-NDK
-dependencies, including <code>libLLVM.so</code>, <code>libbcc.so</code>) into
-<code>/vendor</code> partition.</p>
+<p>
+ If the vendor <code>bcc plugin</code> needs to interfere with the CPU
+ compilation and its dependency on <code>libLLVM.so</code> cannot be easily
+ removed, the vendor should copy <code>bcc</code> (and all the non-LL-NDK
+ dependencies, including <code>libLLVM.so</code>, <code>libbcc.so</code>) into
+ <code>/vendor</code> partition.
+</p>
+
+<p>
+ In addition, vendors need to make the following changes:
+</p>
-<p>In addition, vendors need to make the following changes:</p>
<img src="../images/treble_rs_vendor_driver.png">
-<figcaption><strong>Figure 8.</strong> Changes to vendor driver.</figcaption>
+<figcaption>
+ <strong>Figure 8.</strong> Changes to vendor driver
+</figcaption>
+
<ol>
-<li>Copy <code>libclcore.bc</code> to <code>/vendor</code> partition. This
-ensures <code>libclcore.bc</code>, <code>libLLVM.so</code>, and
-<code>libbcc.so</code> are in sync.</li>
-<li>Change the path to the <code>bcc</code> executable by setting
-<code>RsdCpuScriptImpl::BCC_EXE_PATH</code> from the RS HAL implementation.</li>
+ <li>Copy <code>libclcore.bc</code> to <code>/vendor</code> partition. This
+ ensures <code>libclcore.bc</code>, <code>libLLVM.so</code>, and
+ <code>libbcc.so</code> are in sync.</li>
+ <li>Change the path to the <code>bcc</code> executable by setting
+ <code>RsdCpuScriptImpl::BCC_EXE_PATH</code> from the RS HAL implementation.
+ </li>
</ol>
-<aside class="note"><strong>Note:</strong> Restrictions for
-<code>/vendor/bin/*</code> processes are not fully implemented in Android O.
-While not recommended, it is theoretically possible to just copy
-<code>bcc</code> to <code>/vendor/bin/ </code>without copying its dependencies.
+<aside class="note">
+ <strong>Note:</strong> Restrictions for <code>/vendor/bin/*</code> processes
+ are not fully implemented. While not recommended, it is theoretically possible
+ to just copy <code>bcc</code> to <code>/vendor/bin/</code> without copying its
+ dependencies.
</aside>
<h3 id="selinux-policy">SELinux policy</h3>
-<p>SELinux policy affects both the driver and the compiler executables. All
-driver modules must be labeled <code>same_process_hal_file</code> in the
-device's <code>file_contexts</code>. For example:</p>
+
+<p>
+ SELinux policy affects both the driver and the compiler executables. All
+ driver modules must be labeled <code>same_process_hal_file</code> in the
+ device's <code>file_contexts</code>. For example:
+</p>
<pre class="prettyprint">
/vendor/lib(64)?/libRSDriver_EXAMPLE\.so u:object_r:same_process_hal_file:s0
</pre>
-<p>The compiler executable must be able to be invoked by an app process, as does
-the vendor copy of bcc (<code>/vendor/bin/bcc</code>). For example:</p>
+<p>
+ The compiler executable must be able to be invoked by an app process, as does
+ the vendor copy of bcc (<code>/vendor/bin/bcc</code>). For example:
+</p>
<pre class="prettyprint">
device/vendor_foo/device_bar/sepolicy/file.te:
@@ -431,19 +544,25 @@ device/vendor_foo/device_bar/sepolicy/file_contexts:
</pre>
<h3 id="legacy-devices">Legacy devices</h3>
-<p>Legacy devices are those that satisfy the following conditions:</p>
+
+<p>
+ Legacy devices are those that satisfy the following conditions:
+</p>
+
<ol>
-<li><em>PRODUCT_SHIPPING_API_LEVEL</em> is lower than 26.</li>
-<li><em>PRODUCT_FULL_TREBLE_OVERRIDE</em> is not defined.</li>
+ <li><em>PRODUCT_SHIPPING_API_LEVEL</em> is lower than 26.</li>
+ <li><em>PRODUCT_FULL_TREBLE_OVERRIDE</em> is not defined.</li>
</ol>
-<p>For legacy devices, the restrictions detailed throughout this document are
-not enforced when upgrading to Android O, meaning the drivers can continue to
-link to libraries in <code>/system/lib[64]</code>. However, because of the
-architecture change related with <code>OVERRIDE_RS_DRIVER</code>,
-<code>android.hardware.renderscript@1.0-impl</code> must be installed to
-<code>/vendor</code> partition; failing to do so forces RenderScript runtime
-fallback to CPU path.</p>
+<p>
+ For legacy devices, the restrictions are not enforced when upgrading to
+ Android 8.0 and higher, meaning the drivers can continue to link to libraries
+ in <code>/system/lib[64]</code>. However, because of the architecture change
+ related to <code>OVERRIDE_RS_DRIVER</code>,
+ <code>android.hardware.renderscript@1.0-impl</code> must be installed to
+ <code>/vendor</code> partition; failing to do so forces RenderScript runtime
+ fallback to CPU path.
+</p>
</body>
</html>
diff --git a/en/devices/bluetooth/asha.html b/en/devices/bluetooth/asha.html
index d64d8a70..f6a6c193 100644
--- a/en/devices/bluetooth/asha.html
+++ b/en/devices/bluetooth/asha.html
@@ -24,14 +24,14 @@
<p>
Hearing aid devices (HA) can have improved accessibility on
Android-powered mobile devices by using connection-oriented L2CAP
- channels (COC) over Bluetooth Low Energy (BLE). COC uses an elastic
+ channels (CoC) over Bluetooth Low Energy (BLE). CoC uses an elastic
buffer of several audio packets to maintain a steady flow of audio, even
in the presence of packet loss. This buffer provides audio quality for
hearing aid devices at the expense of latency.
</p>
<p>
- The design of COC references the
+ The design of CoC references the
<a href="https://www.bluetooth.com/specifications/bluetooth-core-specification">Bluetooth Core Specification Version 5</a>
(BT). To stay aligned with the core specifications, all multi-byte
values on this page should be read as little-endian.
@@ -55,7 +55,7 @@
</h2>
<p>
- When using COC for hearing aids, the network topology assumes a single
+ When using CoC for hearing aids, the network topology assumes a single
central and two peripherals, one left and one right, as seen in
<strong>Figure 1</strong>. The Bluetooth audio system views the left
and right peripherals as a single audio sink. If a peripheral is
@@ -68,7 +68,7 @@
<p><img src="/devices/bluetooth/images/bt_asha_topology.png"><br />
<strong>Figure 1.</strong> Topology for pairing hearing aids with
- Android mobile devices using COC over BLE
+ Android mobile devices using CoC over BLE
</p>
<p>
@@ -112,7 +112,7 @@
<h2 id="system-requirements">System requirements</h2>
<p>
- To properly implement COC for a good user experience, the Bluetooth
+ To properly implement CoC for a good user experience, the Bluetooth
systems in the central and peripheral devices should:
</p>
@@ -128,11 +128,11 @@
<li>
have an LE credit based flow control [BT Vol 3, Part A, Sec 10.1].
Devices should support an MTU and MPS size of at least 240 bytes on
- COC and be able to buffer up to 8 packets.
+ CoC and be able to buffer up to 8 packets.
</li>
<li>
have an LE data length extension [BT Vol 6, Part B, Sec 5.1.9] with
- a payload of at least 24887 bytes. It is recommended that the data
+ a payload of at least 87 bytes. It is recommended that the data
length is at least 250 bytes.
</li>
<li>
@@ -140,7 +140,7 @@
and comply with the non-zero minimum_CE_Length parameter.
</li>
<li>
- maintain the data throughput for two LE COC connections to two
+ maintain the data throughput for two LE CoC connections to two
different peripherals with the connection intervals and payload
sizes in <a href="#audio-packet-format-and-timing">Audio packet
format and timing</a>.
@@ -165,7 +165,7 @@
</p>
<p>
- COC uses the standard Bluetooth mechanisms for link layer encryption
+ CoC uses the standard Bluetooth mechanisms for link layer encryption
and frequency hopping.
</p>
@@ -298,10 +298,10 @@
<tr>
<td>11-12</td>
<td>
- RenderDelay. This is the time, in milliseconds, the peripheral
- needs in order to render audio after the start command has been
- issued, such as for loading codecs.The RenderDelay can be used
- by the central to delay audio playback of short messages.
+ RenderDelay. This is the time, in milliseconds, from when the
+ peripheral receives an audio frame until the peripheral renders
+ the output. These bytes can be used to delay a video to
+ synchronize with the audio.
</td>
</tr>
<tr>
@@ -379,7 +379,7 @@
</tr>
<tr>
<td>0</td>
- <td>LE COC audio streaming supported (Yes/No).</td>
+ <td>LE CoC audio streaming supported (Yes/No).</td>
</tr>
<tr>
<td>1-7</td>
@@ -423,12 +423,6 @@
<td>C</td>
</tr>
<tr>
- <td>3</td>
- <td>OPUS @ 48 kHz ?</td>
- <td>48 kbit/s</td>
- <td>10 ms</td>
- <td>Not supported</td>
- </tr>
<tr>
<td colspan="5">
3-15 are reserved.<br />
@@ -440,7 +434,7 @@
<h3 id="audiocontrolpoint">AudioControlPoint</h3>
<p>
- This control point cannot be used when the LE COC is closed. See
+ This control point cannot be used when the LE CoC is closed. See
<a href="#starting-and-stopping-an-audio-stream">Starting and
stopping an audio stream</a> for the procedure description.
</p>
@@ -560,7 +554,7 @@
</p>
<p>
- If the peripherals put the name and service data types in the same
+ If the peripherals put the name and ASHA service data types in the same
frame type (ADV or SCAN RESP), then the two data types should appear
in the same frame. This lets the mobile device scanner get both data
in the same scan result.
@@ -635,16 +629,6 @@
</ul>
<p>
- The peripherals should maintain a common clock at the same or better
- resolution than the sample rate. This clock can be queried by the
- central using the Timestamp command, which returns the value in
- microseconds. The timestamp can be used to indicate the desired
- playback time of the first audio frame to the peripherals when starting
- the stream. The peripherals should perform the sample resynchronization
- to keep in sync with the incoming stream based on the given timestamp.
- </p>
-
- <p>
To give the central some flexibility, the G.722 packet length is not
specified. The G.722 packet length can change based on the connection
interval that the central sets.
@@ -674,13 +658,6 @@
<tr>
<td>G.722 @ 16 kHz</td>
<td>64 kbit/s</td>
- <td>15 ms</td>
- <td>3750 / 2500 us</td>
- <td>120 bytes</td>
- </tr>
- <tr>
- <td>G.722 @ 16 kHz</td>
- <td>64 kbit/s</td>
<td>20 ms</td>
<td>5000/3750 us</td>
<td>160 bytes</td>
@@ -695,31 +672,10 @@
<tr>
<td>G.722 @ 24 kHz</td>
<td>96 kbit/s</td>
- <td>15 ms</td>
- <td>5000 / 2500 us</td>
- <td>180 bytes</td>
- </tr>
- <tr>
- <td>G.722 @ 24 kHz</td>
- <td>96 kbit/s</td>
<td>20 ms</td>
<td>5000 / 3750 us</td>
<td>240 bytes</td>
</tr>
- <tr>
- <td>OPUS @ 48 kHz</td>
- <td>48 kbit/s</td>
- <td>10 ms</td>
- <td>2500 / 2500</td>
- <td>60 bytes</td>
- </tr>
- <tr>
- <td>OPUS @ 48 kHz Joint Stereo (JS)</td>
- <td>96 kbit/s</td>
- <td>10 ms</td>
- <td>3750 / 2500</td>
- <td>120 bytes</td>
- </tr>
</table>
<h2 id="starting-and-stopping-an-audio-stream">
@@ -744,13 +700,12 @@
<ol>
<li>PSM, and optionally, PreparationDelay is read.</li>
<li>
- COC L2CAP channel is opened – the peripheral should grant 8 credits
+ CoC L2CAP channel is opened – the peripheral should grant 8 credits
initially.
</li>
<li>
A connection update is issued to switch the link to the parameters
- required for the chosen codec. The replica latency is set to 0 in this
- update.
+ required for the chosen codec.
</li>
<li>
Both the central and the peripheral host wait for the update
@@ -759,13 +714,13 @@
<li>
Restart the audio encoder, and reset the packet sequence count to 0.
A <code>«Start»</code> command with the relevant parameters is
- issued on the AudioControlPoint.</li>
+ issued on the AudioControlPoint. During audio streaming, the replica
+ should be available at every connection event even though the current
+ replica latency may be non-zero.
+ </li>
<li>
The peripheral takes the first audio packet from its internal queue
- (sequence number 0) and plays it back with the first sample placed
- at the playback deadline. A new deadline is computed based on the
- sequence number. This happens once per connection event while
- checking the sequence number.
+ (sequence number 0) and plays it.
</li>
</ol>
diff --git a/en/devices/input/key-layout-files.html b/en/devices/input/key-layout-files.html
index ed8aa6cd..823770a5 100644
--- a/en/devices/input/key-layout-files.html
+++ b/en/devices/input/key-layout-files.html
@@ -216,7 +216,7 @@ key 116 POWER
# This is an example of a key layout file for a touch device with capacitive buttons.
key 139 MENU VIRTUAL
-key 102 HOME VIRTUAL
+key 172 HOME VIRTUAL
key 158 BACK VIRTUAL
key 217 SEARCH VIRTUAL
</pre>
@@ -306,7 +306,7 @@ time after the most recent touch on the touch screen (this delay is called the
input device with the <code>VIRTUAL</code> flag set for each key.
<pre class="devsite-click-to-copy">
key 139 MENU VIRTUAL
-key 102 HOME VIRTUAL
+key 172 HOME VIRTUAL
key 158 BACK VIRTUAL
key 217 SEARCH VIRTUAL
</pre>
diff --git a/en/devices/input/touch-devices.html b/en/devices/input/touch-devices.html
index e3126ed8..96f0774f 100644
--- a/en/devices/input/touch-devices.html
+++ b/en/devices/input/touch-devices.html
@@ -1141,7 +1141,7 @@ centerY of <code>835</code>, width of <code>90</code> and height of <code>55</co
<p>Key layout file: <code>/system/usr/keylayout/touchyfeely.kl</code>.</p>
<pre class="devsite-click-to-copy">key 158 BACK
key 139 MENU
-key 102 HOME
+key 172 HOME
key 217 SEARCH
</pre>
<p>Key character map file: <code>/system/usr/keychars/touchyfeely.kcm</code>.</p>
diff --git a/en/devices/tech/connect/carrier-wifi.md b/en/devices/tech/connect/carrier-wifi.md
index 9e96c391..b07e7748 100644
--- a/en/devices/tech/connect/carrier-wifi.md
+++ b/en/devices/tech/connect/carrier-wifi.md
@@ -34,7 +34,7 @@ Wi-Fi.
### Manufacturers
-In the carrier config manager, configure the following parameters for each
+In the carrier config manager, configure the following parameters for each
carrier:
+ [`KEY_CARRIER_WIFI_STRING_ARRAY`](https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#1606){: .external}:
diff --git a/en/devices/tech/connect/tethering-offload.md b/en/devices/tech/connect/tethering-offload.md
new file mode 100644
index 00000000..8b420335
--- /dev/null
+++ b/en/devices/tech/connect/tethering-offload.md
@@ -0,0 +1,103 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+<!--
+ Copyright 2018 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.
+-->
+
+# Tethering Hardware Offload
+
+Tethering offload enables devices to save power and improve performance by
+offloading the tethering traffic (over USB, Wi-Fi) to the hardware. The
+tethering traffic is offloaded by providing a direct path between the modem and
+the peripherals, bypassing the application processor.
+
+## Specifications
+
+Starting in Android 8.1, devices can use tethering offload to
+offload IPv4, IPv6, or IPv4+IPv6 forwarding to the hardware.
+
+The offload feature does not need to offload all packets. The framework is
+capable of handling any packet in software. Control packets are typically
+processed in software. Because IPv4 ports are shared between tethered traffic
+and device traffic, IPv4 session setup/teardown packets (e.g., SYN/SYN+ACK, FIN)
+must be processed in software so the kernel can construct the flow state.
+The framework provides the control plane and state machines. It also provides
+the hardware with information on upstream and downstream interfaces/prefixes.
+
+For IPv4, the hardware allows IPv4 network address translation (NAT) session
+setup packets to reach the CPU. The kernel creates NAT entries, and the HAL
+implementation observes the entries from the framework-provided file descriptors
+and handles these flows in hardware. This means the HAL implementation does not
+require `CAP_NET_*` because the HAL gets opened `NF_NETLINK_CONNTRACK` sockets
+from the framework. Periodically, the hardware sends NAT state updates for
+currently active flows to the framework, which refreshes the corresponding
+kernel connection tracking state entries.
+
+For IPv6, the framework programs a list of IPv6 destination prefixes to which
+traffic must not be offloaded. All other tethered packets can be offloaded.
+
+For data usage accounting, `NetworkStatsService` data usage polls causes the
+framework to request traffic stats from hardware. The framework also
+communicates data usage limits to the hardware via the HAL.
+
+## Hardware requirements
+
+To implement tethering offload, your hardware must be capable of forwarding IP
+packets between the modem and Wi-Fi/USB without sending the traffic through the
+main processor.
+
+## Implementation
+
+To enable the tethering offload feature, you must implement the two following
+both a config HAL (`IOffloadConfig`) and a control HAL (`IOffloadControl`).
+
+### Config HAL: `IOffloadConfig`
+
+The
+[`IOffloadConfig`](/reference/hidl/android/hardware/tetheroffload/config/1.0/IOffloadConfig)
+HAL starts the tethering offload implementation. The framework provides the HAL
+implementation with pre-connected `NF_NETLINK_CONNTRACK` sockets that the
+implementation can use to observe the IPv4 flows. Only forwarded flows must be
+accelerated.
+
+### Control HAL: `IOffloadControl`
+
+The
+[`IOffloadControl`](/reference/hidl/android/hardware/tetheroffload/control/1.0/IOffloadControl)
+HAL controls the offload implementation. The following methods must be
+implemented:
+
++ Start/stop offload hardware: Use `initOffload/stopOffload` and exempt local
+ IP addresses or other networks from offload with `setLocalPrefixes`.
++ Set upstream interface, IPv4 address, and IPv6 gateways: Use
+ `setUpstreamParameters` and configure downstream IP address ranges with
+ `addDownstream/removeDownstream`.
++ Data usage accounting: Use `getForwardedStats/setDataLimit`.
+
+Your vendor HAL must also send callbacks via the `ITetheringOffloadCallback`
+interface, which informs the framework of:
+
++ Asynchronous events such as offload being started and stopped
+ (OffloadCallbackEvent)
++ NAT timeout updates, which must be sent periodically to indicate that a
+ specific IPv4 flow contains traffic and must not be closed by the kernel
+
+## Validation
+
+To validate your implementation of tethering offload, use manual or automated
+testing to verify tethering and Wi-Fi hotspot work as expected. The
+[Vendor Test Suite (VTS)](/compatibility/vts/)
+contains tests for the tethering offload HALs.
diff --git a/en/devices/tech/connect/wifi-passpoint.md b/en/devices/tech/connect/wifi-passpoint.md
index f75a5adc..4ee96591 100644
--- a/en/devices/tech/connect/wifi-passpoint.md
+++ b/en/devices/tech/connect/wifi-passpoint.md
@@ -152,7 +152,7 @@ The following sub-tree nodes are used under `Credential`:
relax the IMSI matching to prefix only. For example, the IMSI string 123\*
matches any SIM card with an IMSI starting with 123.
-# Example Profile OMA-DM XML
+## Example Profile OMA-DM XML
```xml
<MgmtTree xmlns="syncml:dmddf1.2">
@@ -214,3 +214,99 @@ The following sub-tree nodes are used under `Credential`:
</Node>
</MgmtTree>
```
+
+## Auth advisory
+
+Devices running Android 8.0 or higher with a Passpoint R1 EAP-SIM, EAP-AKA,
+or EAP-AKA' profile will fail to auto-connect to the Passpoint network. This
+issue affects users, carriers, and services by reducing the Wi-Fi offload.
+
+
+<table>
+ <tr>
+ <th><strong>Segment</strong>
+ </th>
+ <th><strong>Impact</strong>
+ </th>
+ <th><strong>Size of impact</strong>
+ </th>
+ </tr>
+ <tr>
+ <td>Carriers and Passpoint service providers
+ </td>
+ <td>Increased load on cellular network.
+ </td>
+ <td>Any carrier using Passpoint R1.
+ </td>
+ </tr>
+ <tr>
+ <td>Users
+ </td>
+ <td>Missed opportunity to auto-connect to Carrier Wi-Fi access points
+ (APs), resulting in higher data costs.
+ </td>
+ <td>Any user with a device that runs on a carrier network supporting
+ Passpoint R1.
+ </td>
+ </tr>
+</table>
+
+### Cause of failure
+
+Passpoint specifies a mechanism to match an advertised (ANQP) service provider
+to a profile installed on the device. The following matching rules for
+EAP-SIM, EAP-AKA, and EAP-AKA' are a partial set of rules focusing on the
+EAP-SIM/AKA/AKA' failures:
+
+
+```
+If the FQDN (Fully Qualified Domain Name) matches
+ then the service is a Home Service Provider.
+Else: If the PLMN ID (3GPP Network) matches
+ then the service is a Roaming Service Provider.
+```
+
+The second criteria was modified in Android 8.0:
+
+```
+Else: If the PLMN ID (3GPP Network) matches AND the NAI Realm matches
+ then the service is a Roaming Service Provider.
+```
+
+This modified criteria meant the system observed no match for previously
+working service providers, so Passpoint devices did not auto-connect.
+
+
+### Workarounds
+
+To work around the issue of the modified matching criteria, carriers and
+service providers need to add the `NAI Realm` to the information published by
+the Passpoint AP.
+
+The recommended solution is for network service providers to implement a
+network-side workaround for the fastest time to deployment. A device-side
+workaround depends on OEMs picking up a changelist (CL) from the Android Open
+Source Project (AOSP) and then updating devices in the field.
+
+
+#### Network fix for Carriers and Passpoint service providers
+
+The network-side workaround requires reconfiguring the network to add the `NAI
+Realm` ANQP element as specified below. The Passpoint specifications do not
+require the `NAI Realm` ANQP element, but the addition of this property
+complies with the Passpoint specifications, so spec-compliant client
+implementations should not break.
+
+1. Add the `NAI Realm` ANQP element.
+1. Set the `NAI Realm` sub-field to match the `Realm` of the profile
+ installed on the device.
+
+#### Device/AOSP fix for OEMs
+
+To implement a device-side workaround, OEMs need to pick the patch CL [aosp/718508](https://android-review.googlesource.com/c/platform/frameworks/opt/net/wifi/+/718508).
+This patch can be applied on top of the following releases:
+
++ Android 8.x
++ Android 9
+
+Once the patch is picked up, OEMs need to update devices in the field.
diff --git a/en/devices/tech/debug/gdb.html b/en/devices/tech/debug/gdb.html
index e2ff21d6..e43ca3c3 100644
--- a/en/devices/tech/debug/gdb.html
+++ b/en/devices/tech/debug/gdb.html
@@ -48,15 +48,21 @@ called <code>gdbclient</code> instead of a Python script called <code>gdbclient.
<h2 id=starts>Debugging native process startup</h2>
<p>To debug a process as it starts, use <code>gdbserver</code> or
-<code>gdbserver64</code> (for 64-bit processes). For example:</p>
+<code>gdbserver64</code>. For a 64-bit executable:</p>
<pre class="devsite-terminal devsite-click-to-copy">
-adb shell gdbserver :5039 /system/bin/<var>MY_TEST_APP</var>
+adb shell gdbserver64 :5039 /system/bin/<var>MY_TEST_64_BIT_APP</var>
+</pre>
+
+<p>For a 32-bit executable:</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell gdbserver :5039 /system/bin/<var>MY_TEST_32_BIT_APP</var>
</pre>
<p>Example output:</p>
<pre class="devsite-click-to-copy">
-Process <var>MY_TEST_APP</var> created; pid = 3460
+Process <var>MY_TEST_64_BIT_APP</var> created; pid = 3460
Listening on port 5039
</pre>
diff --git a/en/security/_toc-bulletins.yaml b/en/security/_toc-bulletins.yaml
index b3b62c14..6363024c 100644
--- a/en/security/_toc-bulletins.yaml
+++ b/en/security/_toc-bulletins.yaml
@@ -11,6 +11,8 @@ toc:
section:
- title: 2018 Bulletins
section:
+ - title: September
+ path: /security/bulletin/2018-09-01
- title: August
path: /security/bulletin/2018-08-01
- title: July
@@ -105,6 +107,8 @@ toc:
path: /security/bulletin/pixel/index
- title: 2018 Bulletins
section:
+ - title: September
+ path: /security/bulletin/pixel/2018-09-01
- title: August
path: /security/bulletin/pixel/2018-08-01
- title: July
diff --git a/en/security/bulletin/2018-09-01.html b/en/security/bulletin/2018-09-01.html
new file mode 100644
index 00000000..ff71b63b
--- /dev/null
+++ b/en/security/bulletin/2018-09-01.html
@@ -0,0 +1,909 @@
+<html devsite>
+ <head>
+ <title>Android Security Bulletin—September 2018</title>
+ <meta name="project_path" value="/_project.yaml" />
+ <meta name="book_path" value="/_book.yaml" />
+ </head>
+ <body>
+ <!--
+ Copyright 2018 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
+
+ //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><em>Published September 4, 2018</em></p>
+
+<p>
+The Android Security Bulletin contains details of security vulnerabilities
+affecting Android devices. Security patch levels of 2018-09-05 or later address
+all of these issues. To learn how to check a device's security patch level, see
+<a href="https://support.google.com/pixelphone/answer/4457705"
+ class="external">Check and update your Android version</a>.
+</p>
+<p>
+Android partners are notified of all issues at least a month before
+publication. Source code patches for these issues will be released to the
+Android Open Source Project (AOSP) repository in the next 48 hours. We will
+revise this bulletin with the AOSP links when they are available.
+</p>
+<p>
+The most severe of these issues is a critical security vulnerability in Media
+framework that could enable a remote attacker using a specially crafted file
+to execute arbitrary code within the context of a privileged process. The
+<a href="/security/overview/updates-resources.html#severity">severity
+assessment</a> is based on the effect that exploiting the vulnerability would
+possibly have on an affected device, assuming the platform and service
+mitigations are turned off for development purposes or if successfully bypassed.
+</p>
+<p>
+We have had no reports of active customer exploitation or abuse of these newly
+reported issues. Refer to the
+<a href="#mitigations">Android and Google Play Protect mitigations</a>
+section for details on the
+<a href="/security/enhancements/">Android security platform protections</a>
+and Google Play Protect, which improve the security of the Android platform.
+</p>
+<p class="note">
+<strong>Note:</strong> Information on the latest over-the-air update (OTA) and
+firmware images for Google devices is available in the
+<a href="/security/bulletin/pixel/2018-09-01">September 2018
+Pixel&hairsp;/&hairsp;Nexus Security Bulletin</a>.
+</p>
+
+<h2 id="mitigations">Android and Google service mitigations</h2>
+<p>
+This is a summary of the mitigations provided by the
+<a href="/security/enhancements/">Android security platform</a>
+and service protections such as
+<a href="https://www.android.com/play-protect" class="external">Google Play
+Protect</a>. These capabilities reduce the likelihood that security
+vulnerabilities could be successfully exploited on Android.
+</p>
+<ul>
+<li>Exploitation for many issues on Android is made more difficult by
+enhancements in newer versions of the Android platform. We encourage all users
+to update to the latest version of Android where possible.</li>
+<li>The Android security team actively monitors for abuse through
+<a href="https://www.android.com/play-protect" class="external">Google Play
+Protect</a> and warns users about
+<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">Potentially
+Harmful Applications</a>. Google Play Protect is enabled by default on devices
+with <a href="http://www.android.com/gms" class="external">Google Mobile
+Services</a>, and is especially important for users who install apps from
+outside of Google Play.</li>
+</ul>
+<h2 id="2018-09-01-details">2018-09-01 security patch level vulnerability details</h2>
+<p>
+In the sections below, we provide details for each of the security
+vulnerabilities that apply to the 2018-09-01 patch level. Vulnerabilities are
+grouped under the component they affect. There is a description of the
+issue and a table with the CVE, associated references,
+<a href="#type">type of vulnerability</a>,
+<a href="/security/overview/updates-resources.html#severity">severity</a>,
+and updated AOSP versions (where applicable). When available, we link the public
+change that addressed the issue to the bug ID, such as the AOSP change list. When
+multiple changes relate to a single bug, additional references are linked to
+numbers following the bug ID.
+</p>
+
+
+<h3 id="android-runtime">Android Runtime</h3>
+<p>The most severe vulnerability in this section could enable a remote attacker
+using a specially crafted file to execute arbitrary code within the context of
+an application that uses the library.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9466</td>
+ <td>A-62151041</td>
+ <td>RCE</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9467</td>
+ <td>A-110955991</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+<h3 id="framework">Framework</h3>
+<p>The most severe vulnerability in this section could enable a remote attacker
+using a specially crafted file to execute arbitrary code within the context of
+an unprivileged process.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9469</td>
+ <td>A-109824443</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9470</td>
+ <td>A-78290481</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9471</td>
+ <td>A-77599679</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+<h3 id="library">Library</h3>
+<p>The most severe vulnerability in this section could enable a remote attacker
+using a specially crafted file to execute arbitrary code within the context of
+an application that uses the library.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9472</td>
+ <td>A-79662501</td>
+ <td>RCE</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+</table>
+
+
+<h3 id="media-framework">Media Framework</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to bypass user interaction requirements to gain access to
+additional permissions.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9474</td>
+ <td>A-77600398</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9440</td>
+ <td>A-77823362</td>
+ <td>DoS</td>
+ <td>Moderate</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+<h3 id="system">System</h3>
+<p>The most severe vulnerability in this section could enable a local attacker
+to bypass user interaction requirements to gain access to additional
+permissions.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9475</td>
+ <td>A-79266386</td>
+ <td>EoP</td>
+ <td>Critical</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9478</td>
+ <td>A-79217522</td>
+ <td>EoP</td>
+ <td>Critical</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9479</td>
+ <td>A-79217770</td>
+ <td>EoP</td>
+ <td>Critical</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9456</td>
+ <td>A-78136869</td>
+ <td>DoS</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9477</td>
+ <td>A-92497653</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9480</td>
+ <td>A-109757168</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9481</td>
+ <td>A-109757435</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9482</td>
+ <td>A-109757986</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9483</td>
+ <td>A-110216173</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9484</td>
+ <td>A-79488381</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9485</td>
+ <td>A-80261585</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9486</td>
+ <td>A-80493272</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9487</td>
+ <td>A-69873852</td>
+ <td>DoS</td>
+ <td>High</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9488</td>
+ <td>A-110107376</td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+<h3 id="update-media-framework">Update: Media Framework</h3>
+<p>The most severe vulnerability in this section could enable a remote attacker
+using a specially crafted file to execute arbitrary code within the context of
+a privileged process.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9411</td>
+ <td>A-79376389</td>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9427</td>
+ <td>A-77486542</td>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+<h2 id="2018-09-05-details">2018-09-05 security patch level vulnerability details</h2>
+<p>
+In the sections below, we provide details for each of the security
+vulnerabilities that apply to the 2018-09-05 patch level. Vulnerabilities are
+grouped under the component they affect and include details such as the
+CVE, associated references, <a href="#type">type of vulnerability</a>,
+<a href="/security/overview/updates-resources.html#severity">severity</a>,
+component (where applicable), and updated AOSP versions (where applicable). When
+available, we link the public change that addressed the issue to the bug ID,
+such as the AOSP change list. When multiple changes relate to a single bug,
+additional references are linked to numbers following the bug ID.
+</p>
+
+<h3 id="framework">Framework</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to bypass operating system protections that isolate application data
+from other applications.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9468</td>
+ <td>A-111084083</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+<h3 id="kernel-components">Kernel components</h3>
+<p>The most severe vulnerability in this section could enable a remote attacker
+to access data normally accessible only to locally installed applications with
+permissions.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-5754</td>
+ <td>A-69856074<a href="#asterisk">*</a><br />
+ Upstream kernel</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>Kernel Memory</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-components">Qualcomm components</h3>
+<p>These vulnerabilities affect Qualcomm components and are described in
+further detail in the appropriate Qualcomm APSS security bulletin or security
+alert. Android partners can check applicability of their issues to their
+devices through Createpoint. The severity assessment of these issues is
+provided directly by Qualcomm.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-11816</td>
+ <td>A-63527106 <br />
+QC-CR#2119840<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Video</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11261</td>
+ <td>A-64340487 <br />
+QC-CR#2119840<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Video</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11836</td>
+ <td>A-111128620 <br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=9d703c0815b2b260592bc8b91d907aeef7962eb7">QC-CR#2214158</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>WLAN HOST</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11842</td>
+ <td>A-111124974 <br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=5eea70b9d5852e468467c1565927dbe0c76d8674">QC-CR#2216741</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>WLAN HOST</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11898</td>
+ <td>A-111128799 <br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=dc657f502adb3038784b7488d2f183ed31b6aac3">QC-CR#2233036</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>WLAN HOST</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15825</td>
+ <td>A-68992460 <br />
+ <a href="https://source.codeaurora.org/quic/la/kernel/lk/commit/?id=252e22c9adb9b59c36e59e00d8b43013facec4d6">QC-CR#2096455</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>Boot</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11270</td>
+ <td>A-109741697 <br />
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=d475e1aba3f8be3b135199014549ff9d5c315e1d">QC-CR#2205728</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WiredConnectivity</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-closed-source-components">Qualcomm closed-source
+components</h3>
+<p>These vulnerabilities affect Qualcomm components and are described in
+further detail in the appropriate Qualcomm AMSS security bulletin or security
+alert. Android partners can check applicability of their issues to their
+devices through Createpoint. The severity assessment of these issues is
+provided directly by Qualcomm.</p>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2016-10394</td>
+ <td>A-68326803<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18314</td>
+ <td>A-62213176<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18311</td>
+ <td>A-73539234<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11950</td>
+ <td>A-72950814<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5866</td>
+ <td>A-77484228<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11824</td>
+ <td>A-111090697<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2016-10408</td>
+ <td>A-68326811<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18313</td>
+ <td>A-78240387<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18312</td>
+ <td>A-78239234<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18124</td>
+ <td>A-68326819<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-3588</td>
+ <td>A-71501117<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11951</td>
+ <td>A-72950958<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11952</td>
+ <td>A-74236425<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5871</td>
+ <td>A-77484229<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5914</td>
+ <td>A-79419793<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11288</td>
+ <td>A-109677940<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11285</td>
+ <td>A-109677982<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11290</td>
+ <td>A-109677964<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11292</td>
+ <td>A-109678202<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11287</td>
+ <td>A-109678380<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11846</td>
+ <td>A-111091377<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11855</td>
+ <td>A-111090533<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11857</td>
+ <td>A-111093202<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11858</td>
+ <td>A-111090698<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11866</td>
+ <td>A-111093021<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11865</td>
+ <td>A-111093167<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+</table>
+
+
+<h2 id="common-questions-and-answers">Common questions and answers</h2>
+<p>This section answers common questions that may occur after reading this
+bulletin.</p>
+<p><strong>1. How do I determine if my device is updated to address these
+issues?</strong></p>
+<p>To learn how to check a device's security patch level, see
+<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices"
+ class="external">Check and update your Android version</a>.</p>
+<ul>
+<li>Security patch levels of 2018-09-01 or later address all issues associated
+with the 2018-09-01 security patch level.</li>
+<li>Security patch levels of 2018-09-05 or later address all issues associated
+with the 2018-09-05 security patch level and all previous patch levels.</li>
+</ul>
+<p>Device manufacturers that include these updates should set the patch string
+level to:</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2018-09-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-09-05]</li>
+</ul>
+<p><strong>2. Why does this bulletin have two security patch levels?</strong></p>
+<p>
+This bulletin has two security patch levels so that Android partners have the
+flexibility to fix a subset of vulnerabilities that are similar across all
+Android devices more quickly. Android partners are encouraged to fix all issues
+in this bulletin and use the latest security patch level.
+</p>
+<ul>
+<li>Devices that use the 2018-09-01 security patch level must include all
+issues associated with that security patch level, as well as fixes for all
+issues reported in previous security bulletins.</li>
+<li>Devices that use the security patch level of 2018-09-05 or newer must
+include all applicable patches in this (and previous) security
+bulletins.</li>
+</ul>
+<p>
+Partners are encouraged to bundle the fixes for all issues they are addressing
+in a single update.
+</p>
+<p id="type">
+<strong>3. What do the entries in the <em>Type</em> column mean?</strong>
+</p>
+<p>
+Entries in the <em>Type</em> column of the vulnerability details table
+reference the classification of the security vulnerability.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Abbreviation</th>
+ <th>Definition</th>
+ </tr>
+ <tr>
+ <td>RCE</td>
+ <td>Remote code execution</td>
+ </tr>
+ <tr>
+ <td>EoP</td>
+ <td>Elevation of privilege</td>
+ </tr>
+ <tr>
+ <td>ID</td>
+ <td>Information disclosure</td>
+ </tr>
+ <tr>
+ <td>DoS</td>
+ <td>Denial of service</td>
+ </tr>
+ <tr>
+ <td>N/A</td>
+ <td>Classification not available</td>
+ </tr>
+</table>
+<p>
+<strong>4. What do the entries in the <em>References</em> column mean?</strong>
+</p>
+<p>
+Entries under the <em>References</em> column of the vulnerability details table
+may contain a prefix identifying the organization to which the reference value
+belongs.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Prefix</th>
+ <th>Reference</th>
+ </tr>
+ <tr>
+ <td>A-</td>
+ <td>Android bug ID</td>
+ </tr>
+ <tr>
+ <td>QC-</td>
+ <td>Qualcomm reference number</td>
+ </tr>
+ <tr>
+ <td>M-</td>
+ <td>MediaTek reference number</td>
+ </tr>
+ <tr>
+ <td>N-</td>
+ <td>NVIDIA reference number</td>
+ </tr>
+ <tr>
+ <td>B-</td>
+ <td>Broadcom reference number</td>
+ </tr>
+</table>
+<p id="asterisk">
+<strong>5. What does a * next to the Android bug ID in the <em>References</em>
+column mean?</strong>
+</p>
+<p>
+Issues that are not publicly available have a * next to the Android bug ID in
+the <em>References</em> column. The update for that issue is generally
+contained in the latest binary drivers for Pixel&hairsp;/&hairsp;Nexus devices
+available from the
+<a href="https://developers.google.com/android/drivers" class="external">Google
+Developer site</a>.
+</p>
+<p>
+<strong>6. Why are security vulnerabilities split between this bulletin and
+device&hairsp;/&hairsp;partner security bulletins, such as the
+Pixel&hairsp;/&hairsp;Nexus bulletin?</strong>
+</p>
+<p>
+Security vulnerabilities that are documented in this security bulletin are
+required to declare the latest security patch level on Android
+devices. Additional security vulnerabilities that are documented in the
+device&hairsp;/&hairsp;partner security bulletins are not required for
+declaring a security patch level. Android device and chipset manufacturers are
+encouraged to document the presence of other fixes on their devices through
+their own security websites, such as the
+<a href="https://security.samsungmobile.com/securityUpdate.smsb"
+ class="external">Samsung</a>,
+<a href="https://lgsecurity.lge.com/security_updates.html"
+ class="external">LGE</a>, or
+<a href="/security/bulletin/pixel/"
+ class="external">Pixel&hairsp;/&hairsp;Nexus</a> security bulletins.
+</p>
+
+<h2 id="versions">Versions</h2>
+<table>
+ <col width="25%">
+ <col width="25%">
+ <col width="50%">
+ <tr>
+ <th>Version</th>
+ <th>Date</th>
+ <th>Notes</th>
+ </tr>
+ <tr>
+ <td>1.0</td>
+ <td>September 4, 2018</td>
+ <td>Bulletin published.</td>
+ </tr>
+</table>
+</body></html>
+
+
+
diff --git a/en/security/bulletin/2018.html b/en/security/bulletin/2018.html
index ef673310..21939052 100644
--- a/en/security/bulletin/2018.html
+++ b/en/security/bulletin/2018.html
@@ -37,6 +37,20 @@ of all bulletins, see the <a href="/security/bulletin/index.html">Android Securi
<th>Security patch level</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/2018-09-01.html">September 2018</a></td>
+ <td>
+ <a href="/security/bulletin/2018-09-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ </td>
+ <td>September 4, 2018</td>
+ <td>2018-09-01<br>
+ 2018-09-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/2018-08-01.html">August 2018</a></td>
<td>
<a href="/security/bulletin/2018-08-01.html">English</a>&nbsp;/
diff --git a/en/security/bulletin/index.html b/en/security/bulletin/index.html
index 40f49e56..55a42b19 100644
--- a/en/security/bulletin/index.html
+++ b/en/security/bulletin/index.html
@@ -69,6 +69,20 @@ Android Open Source Project (AOSP), the upstream Linux kernel, and system-on-chi
<th>Security patch level</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/2018-09-01.html">September 2018</a></td>
+ <td>
+ <a href="/security/bulletin/2018-09-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/2018-09-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ </td>
+ <td>September 4, 2018</td>
+ <td>2018-09-01<br>
+ 2018-09-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/2018-08-01.html">August 2018</a></td>
<td>
<a href="/security/bulletin/2018-08-01.html">English</a>&nbsp;/
diff --git a/en/security/bulletin/pixel/2018-09-01.html b/en/security/bulletin/pixel/2018-09-01.html
new file mode 100644
index 00000000..4a9d3401
--- /dev/null
+++ b/en/security/bulletin/pixel/2018-09-01.html
@@ -0,0 +1,385 @@
+<html devsite>
+ <head>
+ <title>Pixel&hairsp;/&hairsp;Nexus Security Bulletin—September 2018</title>
+ <meta name="project_path" value="/_project.yaml" />
+ <meta name="book_path" value="/_book.yaml" />
+ </head>
+ <body>
+ <!--
+ Copyright 2018 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
+
+ //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><em>Published September 4, 2018</em></p>
+
+<p>
+The Pixel&hairsp;/&hairsp;Nexus Security Bulletin contains details of security
+vulnerabilities and functional improvements affecting <a
+href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices"
+class="external">supported Google Pixel and Nexus devices</a> (Google devices).
+For Google devices, security patch levels of 2018-09-05 or later address all
+issues in this bulletin and all issues in the September 2018 Android Security
+Bulletin. To learn how to check a device's security patch level, see <a
+href="https://support.google.com/pixelphone/answer/4457705"
+class="external">Check & update your Android version</a>.
+</p>
+<p>
+All supported Google devices will receive an update to the 2018-09-05 patch
+level. We encourage all customers to accept these updates to their devices.
+</p>
+<p class="note">
+<strong>Note:</strong> The Google device firmware images are available on the
+<a href="https://developers.google.com/android/images" class="external">Google
+Developer site</a>.
+</p>
+
+<h2 id="announcements">Announcements</h2>
+<p>In addition to the security vulnerabilities described in the September 2018
+Android Security Bulletin, Google devices also contain patches for the
+security vulnerabilities described below. Partners were notified of these
+issues at least a month ago and may choose to incorporate them as part of their
+device updates.</p>
+
+<h2 id="security-patches">Security patches</h2>
+<p>
+Vulnerabilities are grouped under the component they affect. There is a
+description of the issue and a table with the CVE, associated references,
+<a href="#type">type of vulnerability</a>,
+<a href="/security/overview/updates-resources#severity">severity</a>,
+and updated Android Open Source Project (AOSP) versions (where applicable).
+When available, we link the public change that addressed the issue to the bug
+ID, such as the AOSP change list. When multiple changes relate to a single bug,
+additional references are linked to numbers following the bug ID.
+</p>
+
+<h3 id="kernel-components">Kernel components</h3>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9517</td>
+ <td>A-38159931<br />
+ <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f026bc29a8e093edfbb2a77700454b285c97e8ad">Upstream kernel</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>L2TP</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9519</td>
+ <td>A-69808833<a href="#asterisk">*</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Easel</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9516</td>
+ <td>A-71361580<br />
+ <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=717adfdaf14704fd3ec7fa2c04520c0723247eac">Upstream kernel</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>HID debug driver</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9518</td>
+ <td>A-73083945<br />
+ <a href="https://lkml.org/lkml/2018/2/14/909">Upstream kernel</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>NFC</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-components">Qualcomm components</h3>
+
+<table>
+ <col width="21%">
+ <col width="21%">
+ <col width="14%">
+ <col width="14%">
+ <col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-11265</td>
+ <td>A-109741922<br />
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=b211b051d7ca226d96b70defe10ac318f768b5b2">QC-CR#2212592</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>MProc</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11273</td>
+ <td>A-109741750<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=789d4d21c3f1818dcbf74da4a051598e8f53676c">
+QC-CR#2204285</a>
+ [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=f34f6271362484c1f87f4176e72a3bfb80ee7711">2</a>]</td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>Audio</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11276</td>
+ <td>A-109741853<br />
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=83a44ca6057bf9c1e36515cded28edc32a4a1501">QC-CR#2204959</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>Kernel</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11281</td>
+ <td>A-109741734<br />
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=4bc7311e9ea9145a615184626cc43a8b92e7619c">QC-CR#2191541</a>
+ [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=c9861d16283cb4279de98a6695e0a4e6ea0230cb">2</a>]</td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>Data HLOS - LNX</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11293</td>
+ <td>A-109741621<br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=6fb7ac8d49631cdd09dbe72669d1a660dfce3bdb">QC-CR#2170668</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11295</td>
+ <td>A-109741911<br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=e262728243f98d8a3578eb157cbc39580004de4f">QC-CR#2201190</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11296</td>
+ <td>A-109741886<br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=0b0c18b45d1a39f9f33172d3c22f5b8031fe564e">QC-CR#2204463</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11297</td>
+ <td>A-109741872<br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=c708606086490ca9b8fc1077f18782891a595ba9">QC-CR#2175439</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11298</td>
+ <td>A-109741777<br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=9074c6cfb9c0bbfe279394eec0d3176c4f75ce80">QC-CR#2180699</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11300</td>
+ <td>A-109741735<br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=1f111832dc93bc639538dc173397b30af329b130">QC-CR#2191365</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11301</td>
+ <td>A-109741830<br />
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=31ad3a5a7458e60f5e0ba4f492cebe1f1bda0964">QC-CR#2205372</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+</table>
+
+<h2 id="functional-patches">Functional patches</h2>
+<p>
+These updates are included for affected Pixel devices to address functionality
+issues not related to the security of Pixel devices. The table includes
+associated references; the affected category, such as Bluetooth or mobile data;
+improvements; and affected devices.
+</p>
+
+<table>
+ <tr>
+ <th>References</th>
+ <th>Category</th>
+ <th>Improvements</th>
+ <th>Devices</th>
+ </tr>
+ <tr>
+ <td>A-110489408</td>
+ <td>Battery</td>
+ <td>Improve battery charge in Retail Mode</td>
+ <td>Pixel 2, Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-111455307</td>
+ <td>System</td>
+ <td>Improve SW Version reporting</td>
+ <td>Pixel, Pixel XL, Pixel 2, Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-101592600</td>
+ <td>Bluetooth</td>
+ <td>Improve audio quality over car speakers</td>
+ <td>Pixel, Pixel XL, Pixel 2, Pixel 2 XL</td>
+ </tr>
+</table>
+
+<h2 id="common-questions-and-answers">Common questions and answers</h2>
+<p>
+This section answers common questions that may occur after reading this
+bulletin.
+</p>
+<p>
+<strong>1. How do I determine if my device is updated to address these issues?
+</strong>
+</p>
+<p>
+Security patch levels of 2018-09-05 or later address all issues associated with
+the 2018-09-05 security patch level and all previous patch levels. To learn how
+to check a device's security patch level, read the instructions on the <a
+href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices"
+class="external">Pixel and Nexus update schedule</a>.
+</p>
+<p id="type">
+<strong>2. What do the entries in the <em>Type</em> column mean?</strong>
+</p>
+<p>
+Entries in the <em>Type</em> column of the vulnerability details table reference
+the classification of the security vulnerability.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Abbreviation</th>
+ <th>Definition</th>
+ </tr>
+ <tr>
+ <td>RCE</td>
+ <td>Remote code execution</td>
+ </tr>
+ <tr>
+ <td>EoP</td>
+ <td>Elevation of privilege</td>
+ </tr>
+ <tr>
+ <td>ID</td>
+ <td>Information disclosure</td>
+ </tr>
+ <tr>
+ <td>DoS</td>
+ <td>Denial of service</td>
+ </tr>
+ <tr>
+ <td>N/A</td>
+ <td>Classification not available</td>
+ </tr>
+</table>
+<p>
+<strong>3. What do the entries in the <em>References</em> column mean?</strong>
+</p>
+<p>
+Entries under the <em>References</em> column of the vulnerability details table
+may contain a prefix identifying the organization to which the reference value
+belongs.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Prefix</th>
+ <th>Reference</th>
+ </tr>
+ <tr>
+ <td>A-</td>
+ <td>Android bug ID</td>
+ </tr>
+ <tr>
+ <td>QC-</td>
+ <td>Qualcomm reference number</td>
+ </tr>
+ <tr>
+ <td>M-</td>
+ <td>MediaTek reference number</td>
+ </tr>
+ <tr>
+ <td>N-</td>
+ <td>NVIDIA reference number</td>
+ </tr>
+ <tr>
+ <td>B-</td>
+ <td>Broadcom reference number</td>
+ </tr>
+</table>
+<p id="asterisk">
+<strong>4. What does a * next to the Android bug ID in the <em>References</em>
+column mean?</strong>
+</p>
+<p>
+Issues that are not publicly available have a * next to the Android bug ID in
+the <em>References</em> column. The update for that issue is generally contained
+in the latest binary drivers for Pixel&hairsp;/&hairsp;Nexus devices available
+from the <a href="https://developers.google.com/android/nexus/drivers"
+class="external">Google Developer site</a>.
+</p>
+<p>
+<strong>5. Why are security vulnerabilities split between this bulletin and the
+Android Security Bulletins?</strong>
+</p>
+<p>
+Security vulnerabilities that are documented in the Android Security Bulletins
+are required to declare the latest security patch level on Android
+devices. Additional security vulnerabilities, such as those documented in this
+bulletin are not required for declaring a security patch level.
+</p>
+<h2 id="versions">Versions</h2>
+<table>
+ <col width="25%">
+ <col width="25%">
+ <col width="50%">
+ <tr>
+ <th>Version</th>
+ <th>Date</th>
+ <th>Notes</th>
+ </tr>
+ <tr>
+ <td>1.0</td>
+ <td>September 4, 2018</td>
+ <td>Bulletin published.</td>
+ </tr>
+</table>
+ </body>
+</html>
+
diff --git a/en/security/bulletin/pixel/2018.html b/en/security/bulletin/pixel/2018.html
index 216c4f68..36d60b71 100644
--- a/en/security/bulletin/pixel/2018.html
+++ b/en/security/bulletin/pixel/2018.html
@@ -39,6 +39,21 @@ Bulletins</a> homepage.</p>
<th>Security patch level</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/pixel/2018-09-01.html">September 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/pixel/2018-09-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>September 4, 2018</td>
+ <td>2018-09-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/pixel/2018-08-01.html">August 2018</a></td>
<td>
<a href="/security/bulletin/pixel/2018-08-01.html">English</a>&nbsp;/
diff --git a/en/security/bulletin/pixel/index.html b/en/security/bulletin/pixel/index.html
index 03a6d4ac..d7bd8e72 100644
--- a/en/security/bulletin/pixel/index.html
+++ b/en/security/bulletin/pixel/index.html
@@ -59,6 +59,21 @@ AOSP 24&ndash;48 hours after the Pixel&hairsp;/&hairsp;Nexus bulletin is release
<th>Security patch level</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/pixel/2018-09-01.html">September 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/pixel/2018-09-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-09-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>September 4, 2018</td>
+ <td>2018-09-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/pixel/2018-08-01.html">August 2018</a></td>
<td>
<a href="/security/bulletin/pixel/2018-08-01.html">English</a>&nbsp;/
diff --git a/en/security/overview/acknowledgements.html b/en/security/overview/acknowledgements.html
index a596c769..71430eb1 100644
--- a/en/security/overview/acknowledgements.html
+++ b/en/security/overview/acknowledgements.html
@@ -37,6 +37,102 @@ Rewards</a> program.</p>
<p>In 2018, the security acknowledgements are listed by month. In prior years,
acknowledgements were listed together.</p>
+<h4 id="sept-2018">September</h4>
+
+<table>
+ <col width="70%">
+ <col width="30%">
+ <tr>
+ <th>Researchers</th>
+ <th>CVEs</th>
+ </tr>
+ <tr>
+ <td>Baozeng Ding (<a href="https://twitter.com/@sploving1"
+ class="external">@sploving1</a>), Chengming Yang, and Yang Song
+ of Alibaba Mobile Security Group</td>
+ <td>CVE-2018-9517</td>
+ </tr>
+ <tr>
+ <td>Chong Wang
+ (<a href="http://weibo.com/csddl" class="external">weibo.com/csddl</a>) of
+ Chengdu Security Response Center, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2018-9480, CVE-2018-9481, CVE-2018-9482, CVE-2018-9485</td>
+ </tr>
+ <tr>
+ <td>Cusas of L.O. Team</td>
+ <td>CVE-2018-9440, CVE-2018-9467</td>
+ </tr>
+ <tr>
+ <td>Daniel Kachakil, Senior Security Consultant, IOActive</td>
+ <td>CVE-2018-9468</td>
+ </tr>
+ <tr>
+ <td>En He
+ (<a href="https://twitter.com/@heeeeen4x" class="external">@heeeeen4x</a>)
+ and Bo Liu of MS509Team
+ (<a href="http://www.ms509.com" class="external">ms509.com</a>)
+ </td>
+ <td>CVE-2018-9475</td>
+ </tr>
+ <tr>
+ <td>Hector Cuesta Garcia
+ (<a href="https://twitter.com/hectorcuesta"
+ class="external">@HectorCuesta</a>) of Innotec System</td>
+ <td>CVE-2018-9470</td>
+ </tr>
+ <tr>
+ <td>Hongli Han
+ (<a href="https://twitter.com/hexb1n" class="external">@hexb1n</a>) and
+ Mingjian Zhou (周明建) (<a href="https://twitter.com/mingjian_zhou"
+ class="external">@Mingjian_Zhou</a>) of C0RE Team</td>
+ <td>CVE-2018-11261</td>
+ </tr>
+ <tr>
+ <td>Jann Horn of Google Project Zero</td>
+ <td>CVE-2018-9488</td>
+ </tr>
+ <tr>
+ <td>Jianjun Dai (<a href="https://twitter.com/jioun_dai"
+ class="external">@jioun_dai</a>) and Guang Gong
+ (<a href="https://twitter.com/@oldfresher" class="external">@oldfresher</a>)
+ of Alpha Team, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2018-9478, CVE-2018-9479</td>
+ </tr>
+ <tr>
+ <td>Jianqiang Zhao (@jianqiangzhao) and pjf
+ (<a href="http://weibo.com/jfpan" class="external">weibo.com/jfpan</a>)
+ of IceSword Lab, Qihoo 360</td>
+ <td>CVE-2018-9516</td>
+ </tr>
+ <tr>
+ <td>M3, Inc.</td>
+ <td>CVE-2018-9469</td>
+ </tr>
+ <tr>
+ <td>Mingjian Zhou (周明建)
+ (<a href="https://twitter.com/@Mingjian_Zhou"
+ class="external">@Mingjian_Zhou</a>) of C0RE Team</td>
+ <td>CVE-2018-11816</td>
+ </tr>
+ <tr>
+ <td>Pengfei Ding (丁鹏飞) of Huawei Mobile Security Lab (华为移动安全实验室)</td>
+ <td>CVE-2018-9519</td>
+ </tr>
+ <tr>
+ <td>Tamir Zahavi-Brunner
+ (<a href="https://twitter.com/@tamir_zb" class="external">@tamir_zb</a>)
+ of Zimperium zLabs Team</td>
+ <td>CVE-2018-9411</td>
+ </tr>
+ <tr>
+ <td>Zinuo Han
+ (<a href="http://weibo.com/ele7enxxh" class="external">weibo.com/ele7enxxh</a>)
+ of Chengdu Security Response Center, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2018-9471, CVE-2018-9474, CVE-2018-9483, CVE-2018-9484, CVE-2018-9486
+ </td>
+ </tr>
+</table>
+
<h4 id="aug-2018">August</h4>
<table>
diff --git a/en/setup/start/p-release-notes.md b/en/setup/start/p-release-notes.md
index 70cd72c9..ad5a81ac 100644
--- a/en/setup/start/p-release-notes.md
+++ b/en/setup/start/p-release-notes.md
@@ -320,6 +320,14 @@ pages for more information:
* [Sensor Fusion Box Assembly](/compatibility/cts/sensor-fusion-box-assembly)
provides step-by-step instructions for assembling a Sensor Fusion Box.
+#### Wide Field of View ITS-in-a-Box
+
+The
+[Wide Field of View ITS-in-a-Box](/compatibility/cts/camera-wfov-box-assembly)
+is an automated system designed to test both wide field of view (WFoV) and
+regular field of view (RFoV) camera systems in the Camera Image Test Suite
+(ITS).
+
### Vendor Test Suite
#### Host Controller Architecture
@@ -757,7 +765,18 @@ conform to this HAL.
[Vehicle Properties](/devices/automotive/properties) describes changes to the
vehicle HAL interface.
-### GNSS hardware model
+### GNSS Satellite Selection
+
+When working with new Global Navigation Satellite System (GNSS) HALs (v1.1+),
+the Android Framework will monitor Android Settings. Partners can change the
+Settings from Google Play Services or other system updatees. These settings
+tell the GNSS HAL if certain GNSS satellites should not be used. This can be
+useful in case of persistent GNSS satellite or constellation errors, or to
+react more rapidly to GNSS HAL implementation issues that may occur when
+intermixing constellations using different time systems and external events,
+such as leap-second and/or Day, or Week Number rollovers.
+
+### GNSS Hardware Model
In Android {{ androidPVersionNumber }}, the GNSS HAL version 1.1 or higher can
pass information about the hardware API to the platform. The platform needs to
diff --git a/zh-cn/devices/graphics/implement-vulkan.html b/zh-cn/devices/graphics/implement-vulkan.html
index a3774293..ffa64fd2 100644
--- a/zh-cn/devices/graphics/implement-vulkan.html
+++ b/zh-cn/devices/graphics/implement-vulkan.html
@@ -4,6 +4,7 @@
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
+
<!--
Copyright 2017 The Android Open Source Project
@@ -65,6 +66,39 @@
<p>Android 允许在 Android 与其他平台之间移植层(包括编译环境更改)。有关层与加载程序之间接口的详细信息,请参阅 <a href="https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/loader/LoaderAndLayerInterface.md">Vulkan 加载程序规范和架构概览</a>。已经过验证可在 Android 上构建和运行的 LunarG 验证层的版本托管在 GitHub 上 <a href="https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/tree/android_layers">KhronosGroup/Vulkan-LoaderAndValidationLayers</a> 项目的 android_layers 分支下。</p>
+<h2 id="versions">Vulkan API 版本和功能</h2>
+<p>本部分将介绍受支持的 Vulkan API 版本。</p>
+
+<h3 id="v1_0">Vulkan API 版本 1.0</h3>
+<p>Android 7.0 版增加了对 Vulkan API 版本 1.0 的支持。</p>
+
+<h3 id="v1_1">Vulkan API 版本 1.1</h3>
+<p>Android 9 版本引入了对 Vulkan 1.1 图形 API 的支持。要详细了解 Vulkan 1.1 API,请参阅 <a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html">Vulkan 1.1 API 规格</a>。</p>
+
+<h4>Vulkan 1.1 支持概览</h4>
+<p>Vulkan 1.1 支持包括对 Vulkan 1.1 和 memory/synchronization 交互操作的支持。这样一来,OEM 即可在设备上支持 Vulkan 1.1,而且开发者可以确定某个设备是否支持 Vulkan 1.1,并在支持时有效地使用该版本。Vulkan 1.1 没有 Vulkan 1.0 之外的新硬件要求,但相应实现大都位于特定于 SOS 的图形驱动程序(而不是框架)中。</p>
+<p>对于 Android,最重要的 Vulkan 1.1 功能包括:</p>
+<ul>
+<li>支持从 Vulkan 外部导入和导出内存缓冲区和同步对象(以便与摄像头、编解码器和 GLES 进行交互操作)</li>
+<li>支持 YCbCr 格式</li>
+</ul>
+<p>Vulkan 1.1 还包含几项较小的功能和 API 易用性增强功能。</p>
+
+<h4>实现 Vulkan 1.1</h4>
+<p>Vulkan 1.1 在 Android 9 版本中是可选的。要使用该版本,设备必须具有符合 Vulkan 1.1 最低功能要求的 GPU。</p>
+<p>要实现 Vulkan 1.1,请执行以下操作:</p>
+<ol>
+<li>添加支持 Vulkan 1.1 且符合其他 Android 1.1 要求的 Vulkan 驱动程序(请务必查看 9 API 级别文档),或更新现有 Vulkan 1.0 驱动程序。</li>
+<li>您可能需要更新内核 GPU 驱动程序,具体取决于您的实现。</li>
+<li>确保 <code>PackageManager#hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, 0x401000)</code> 返回 <code>true</code>,方法是将如下所示的规则添加到相关的 <code>device.mk</code> 文件:<p><code>
+PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:
+$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml
+</code></p></li>
+</ol>
+
+<h4>自定义 Vulkan 1.1</h4>
+<p>依赖于 Vulkan 1.1 的应用与不提供 Vulkan 1.1 支持的设备不兼容。有些应用可能不需要 Vulkan 1.1,但会在具有 Vulkan 1.1 时提供额外的功能或性能。</p>
+
<h2 id="wsi">窗口系统集成 (WSI)</h2>
<p>窗口系统集成 (WSI) 扩展程序 <code>VK_KHR_surface</code>、<code>VK_KHR_android_surface</code> 和 <code>VK_KHR_swapchain</code> 由 Android 平台实现并存在于 <code>libvulkan.so</code> 中。<code>VkSurfaceKHR</code> 和 <code>VkSwapchainKHR</code> 对象以及与 <code>ANativeWindow</code> 的所有互动都由 Android 平台处理,不会提供给驱动程序。WSI 实现依赖于必须受驱动程序支持的 <code>VK_ANDROID_native_buffer</code> 扩展程序(如下所述);此扩展程序仅由 WSI 实现使用,不会提供给应用。</p>
@@ -197,6 +231,10 @@ VkResult VKAPI vkQueueSignalReleaseImageANDROID(
如果图像是使用 <code>VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID</code> 创建的,则驱动程序必须允许反复调用 <code>vkQueueSignalReleaseImageANDROID</code>,而不会干预对 <code>vkAcquireImageANDROID</code> 的调用。
<h2 id="validation">验证</h2>
-<p>OEM 可以使用 CTS 测试其 Vulkan 实现,其中包括使用 Vulkan 运行时的 <a href="/devices/graphics/cts-integration.html">drawElements 质量计划 (dEQP)</a> 测试。</p>
+<p>OEM 可以使用 CTS 测试其 Vulkan 实现,其中包括:</p>
+<ul>
+<li><code>CtsDeqpTestCases</code> 模块中的 <a href="/devices/graphics/cts-integration.html">drawElements 质量计划 (dEQP)</a> 测试,其中包括针对 Vulkan 1.0 和 1.1 的功能 API 测试。</li>
+<li><code>CtsGraphicsTestCases</code> 模块,用于测试设备是否针对所支持的 Vulkan 功能进行了正确的配置。</li>
+</ul>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-infrastructure.html b/zh-cn/devices/tech/connect/wifi-infrastructure.html
new file mode 100644
index 00000000..cbb7b005
--- /dev/null
+++ b/zh-cn/devices/tech/connect/wifi-infrastructure.html
@@ -0,0 +1,123 @@
+<html devsite><head>
+
+ <meta name="book_path" value="/_book.yaml"/>
+
+ <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+<!--
+ Copyright 2018 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.
+-->
+
+<h1 id="wi-fi_infrastructure_features" class="page-title">WLAN 基础架构功能</h1>
+
+<p>Android WLAN 框架可帮助用户连接到优质 WLAN 网络(在有可用 WLAN 网络且需要连接到这类网络的情况下)。Android 可通过多种方式来实现这一点:</p>
+
+<ul>
+<li><strong>打开网络通知</strong>:在有可用的优质开放 WLAN 网络时通知用户<em></em></li>
+<li><strong>自动开启 WLAN</strong>:当用户靠近之前保存的某个网络时,重新启用 WLAN</li>
+<li><strong>连接到开放网络</strong>:自动将用户连接到优质的开放 WLAN 网络<em></em></li>
+<li><strong>标记</strong>:显示与可用网络的质量相关的信息</li>
+</ul>
+
+<p>上述功能均通过 AOSP 代码实现,您无需明确启用或配置这些功能。</p>
+
+<h2 id="open_network_notification">打开网络通知</h2>
+
+<p>只要出现以下情况,“打开网络通知”<em></em>功能便会向用户发出通知:</p>
+
+<ul>
+<li>WLAN 已启用</li>
+<li>设备未连接到 WLAN 网络</li>
+<li>有<strong>开放</strong>且 <strong>RSSI 足够高</strong>(与内部 WLAN 选择算法使用的 RSSI 阈值相同)的 WLAN 网络<em></em>时</li>
+</ul>
+
+<p>用户可在设置应用中通过以下路径启用或停用该功能:</p>
+
+<p><strong>设置</strong> &gt; <strong>网络和互联网</strong> &gt; <strong>WLAN</strong> &gt; <strong>WLAN 偏好设置</strong> &gt;
+<strong>打开网络通知</strong></p>
+
+<figure>
+ <img src="/devices/tech/connect/images/open-network-notification.png" alt="打开网络通知功能" class="screenshot" width="350"/>
+ <figcaption><strong>图 1.</strong> 打开网络通知功能</figcaption>
+</figure>
+
+<h2 id="turn_on_wi-fi_automatically">自动开启 WLAN</h2>
+
+<p>用户可能会出于各种原因(例如,连接到不稳定的网络时)停用 WLAN,但在回家后可能忘记重新启用 WLAN,从而导致体验不佳(例如,无法控制家居自动化设备)。<em></em><em></em>“自动开启 WLAN”功能解决了这一问题:只要设备靠近<strong>已保存</strong>(即用户过去明确连接过)且 <strong>RSSI 足够高</strong>的 WLAN 网络,便会自动重新启用 WLAN。</p>
+
+<p>用户可在设置应用中通过以下路径启用或停用该功能:</p>
+
+<p><strong>设置</strong> &gt; <strong>网络和互联网</strong> &gt; <strong>WLAN</strong> &gt; <strong>WLAN 偏好设置</strong> &gt; <strong>自动开启 WLAN</strong></p>
+
+<figure>
+ <img src="/devices/tech/connect/images/auto-wifi.png" alt="自动开启 WLAN" class="screenshot" width="350"/>
+ <figcaption><strong>图 2.</strong> “自动开启 WLAN”功能</figcaption>
+</figure>
+
+<p>必须启用“WLAN 扫描”(针对位置信息)才能使该功能正常运行。如果未启用“WLAN 扫描”功能,则系统会提示用户允许启用此功能。之所以需要启用“WLAN 扫描”功能,是因为系统要根据扫描结果来判断设备是否位于符合重新启用 WLAN 连接条件的 WLAN 网络附近。</p>
+
+<p>该功能可避免在用户停用 WLAN 后立即重新启用,即使设备检测到品质过硬的已保存 WLAN 网络也是如此。例如,如果用户在办公室并已连接到办公室的 WLAN(已保存<em></em>的网络),然后停用 WLAN,则该功能将不会重新启用 WLAN,直到用户位于具有其他已保存网络(符合重新启用条件)的其他环境为止。</p>
+
+<h2 id="auto_connect_to_open_networks">自动连接到开放网络</h2>
+
+<p>“连接到开放网络”功能可自动将设备连接到可用的高品质网络。<em></em>相关条件如下:</p>
+
+<ul>
+<li>WLAN 已启用</li>
+<li>设备未连接到 WLAN 网络</li>
+<li>有<strong>开放</strong>且优质<em></em>(根据外部网络评分服务提供方<em></em>的报告判断)的 WLAN 网络(请参见下一节)</li>
+</ul>
+
+<p>用户可在设置应用中通过以下路径启用或停用该功能:</p>
+
+<p><strong>设置</strong> &gt; <strong>网络和互联网</strong> &gt; <strong>WLAN</strong> &gt; <strong>WLAN 偏好设置</strong> &gt; <strong>连接到开放网络</strong></p>
+
+<figure>
+ <img src="/devices/tech/connect/images/connect-open-networks.png" alt="连接到开放网络" class="screenshot" width="350"/>
+ <figcaption><strong>图 3.</strong> “连接到开放网络”功能和“网络评分服务提供方”菜单</figcaption>
+</figure>
+
+<p>如果未选择外部网络评分服务提供方<em></em>,“连接到开放网络”<em></em>功能便会停用。用户可以使用“网络评分服务提供方”菜单选择任何可用的网络评分服务提供方。</p>
+
+<h3 id="external_network_rating_provider">外部网络评分服务提供方</h3>
+
+<p>为了帮助用户确定优质<em></em> WLAN 网络需要符合哪些因素条件,Android 支持可提供开放 WLAN 网络质量相关信息的外部网络评分服务提供方<em></em>(也称为“网络评分器”<em></em>)。例如,网络评分器可能会使用历史效果数据(如“此 AP 过去的效果非常好,值得立即一试”)来判断特定 WLAN 网络的质量是否良好。</p>
+
+<p>用户可通过以下路径访问可用的网络评分服务提供方列表:
+<strong>设置</strong> &gt; <strong>网络和互联网</strong> &gt; <strong>WLAN</strong> &gt; <strong>WLAN 偏好设置</strong> &gt; <strong>高级</strong> &gt; <strong>网络评分服务提供方</strong>菜单。用户可以从中选择一个服务方,也可以不选择。如果没有可用的服务方或没有进行选择,“连接到开放网络”功能便会停用。<em></em></p>
+
+<p>您无需提供外部网络评分服务提供方。要创建提供方,请执行以下操作:</p>
+
+<ul>
+<li>实现 <code>NetworkScoreManager</code> 中记录的 API。</li>
+<li>外部网络评分服务提供方必须是特权应用。</li>
+<li>通过更新产品叠加层配置文件(位于 <code>frameworks/base/core/res/res/values/config.xml</code> 中)中的 <code>config_defaultNetworkRecommendationProviderPackage</code> 键,将您的系统配置为使用自定义实现。</li>
+</ul>
+
+<p>如果您不想包含默认的网络评分服务提供方功能,则可以选择不设置默认提供方属性,然后在 AOSP 中隐藏<strong>网络评分服务提供方</strong>屏幕。</p>
+
+<h3 id="wi-fi_network_badging">WLAN 网络标记</h3>
+
+<p>WLAN 选择器还会根据网络评分服务提供方提供的信息<em></em>,添加与可用 WLAN 网络的质量相关的信息,从而帮助用户手动选择 WLAN 网络。对于具有可用信息(由外部网络评分服务提供方提供)的网络,其名称下方会显示相应的速度信息。</p>
+
+<figure>
+ <img src="/devices/tech/connect/images/wifi-network-quality.png" alt="WLAN 网络质量" class="screenshot" width="350"/>
+ <figcaption><strong>图 4.</strong> 包含网络质量相关信息的 WLAN 网络</figcaption>
+</figure>
+
+<p>由于该功能需要用到外部网络评分服务提供方,因此如果没有可用的提供方或未选择提供方,该功能便无法使用,而且不会显示速度/质量信息。</p>
+
+</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/tech/ota/nonab/inside_packages.html b/zh-cn/devices/tech/ota/nonab/inside_packages.html
index 21b2004f..781165b3 100644
--- a/zh-cn/devices/tech/ota/nonab/inside_packages.html
+++ b/zh-cn/devices/tech/ota/nonab/inside_packages.html
@@ -70,11 +70,11 @@ finish_up();</b>
tgt_size</i>, <i>patch1_sha1</i>, <i>patch1_blob</i>, [...])</code></dt>
<dd>将二进制补丁程序应用于 src_file 以生成 tgt_file。<i></i><i></i>如果设定的目标文件与源文件相同,则传递“-”作为 tgt_file。tgt_sha1 和 tgt_size 分别是目标文件的预期最终 SHA1 哈希值和文件大小。<i></i><i></i><i></i>其余参数必须成对出现:一个 SHA1 哈希值(40 个字符的十六进制字符串)和一个 Blob。如果源文件当前的内容具有给定的 SHA1,该 Blob 即为要应用的补丁程序。
<p>打补丁以一种安全的方式完成,该方式可保证目标文件要么具有所需的 SHA1 哈希值和大小,要么不发生变化,而不会处于不可恢复的中间状态。如果在打补丁过程中进程中断,目标文件可能会处于中间状态;这时缓存分区中会存在一个副本,重新启动更新便可成功更新文件。</p>
-<p>支持特殊语法将 MTD(内存技术设备)分区的内容作为文件处理,以便为引导分区这样的原始分区打补丁。由于 MTD 分区没有文件结束标记,因此要读取该分区,您必须知道您要读取的数据量。您可以使用字符串“MTD:partition:size_1:sha1_1:size_2:sha1_2”作为文件名来读取给定的分区。<i></i><i></i><i></i><i></i><i></i>您必须至少指定一个(size,sha-1)对;如果您希望读取的内容有多种可能,则可以指定多个对。<i></i></p></dd>
+<p>支持特殊语法将 MTD(内存技术设备)分区的内容作为文件处理,以便为引导分区这样的原始分区打补丁。由于 MTD 分区没有文件结束标记,因此要读取该分区,您必须知道您要读取的数据量。您可以使用字符串“MTD:partition:size_1:sha1_1:size_2:sha1_2”作为文件名来读取给定的分区。<i></i><i></i><i></i><i></i><i></i>您必须至少指定一个 (size, sha-1) 对;如果您希望读取的内容有多种可能,则可以指定多个对。<i></i></p></dd>
<dt><code>apply_patch_check(<i>filename</i>, <i>sha1</i>[, <i>sha1</i>, ...])
</code></dt>
-<dd>如果 filename 的内容或缓存分区中的临时副本(如果存在)中的内容具有与给定的 sha1 值之一相等的 SHA1 校验和,则返回 True。sha1 值指定为 40 位十六进制数字。<i></i><i></i><i></i>该函数不同于 <code>sha1_check(read_file(<i>filename</i>),
-<i>sha1</i> [, ...])</code>,因为它知道要检查缓存分区副本,因此即使文件被中断的 <code>apply_patch() update</code> 损坏,<code>apply_patch_check()</code> 也将成功。</dd>
+<dd>如果 filename 的内容或缓存分区中的临时副本(如果存在)中的内容具有与指定的 sha1 值之一相等的 SHA1 校验和,则返回 True。sha1 值指定为 40 位十六进制数字。<i></i><i></i><i></i>该函数不同于 <code>sha1_check(read_file(<i>filename</i>),
+<i>sha1</i> [, ...])</code>,因为它知道要检查缓存分区副本,因此即使文件被中断的 <code>apply_patch_check()</code> 损坏,<code>apply_patch() update</code> 也将成功。</dd>
<dt><code>apply_patch_space(<i>bytes</i>)</code></dt>
<dd>如果至少有 bytes 个字节的暂存空间可用于打二进制补丁程序,则返回 True。<i></i></dd>
<dt><code>concat(<i>expr</i>[, <i>expr</i>, ...])</code></dt>
diff --git a/zh-cn/devices/tech/power/device.html b/zh-cn/devices/tech/power/device.html
index 7b6be756..6e5f5cbe 100644
--- a/zh-cn/devices/tech/power/device.html
+++ b/zh-cn/devices/tech/power/device.html
@@ -1,5 +1,5 @@
<html devsite><head>
- <title>测量设备功率</title>
+ <title>测量设备电耗</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
@@ -52,7 +52,7 @@ BATTERY_PROPERTY_CAPACITY Remaining battery capacity as an integer perce
BATTERY_PROPERTY_ENERGY_COUNTER Remaining energy in nanowatt-hours
</pre>
-<p>大多数属性都是从内核中类似于 power_supply 名称的子系统属性中读取的。但是,特定设备的确切属性、属性值解析和更新频率取决于:</p>
+<p>大多数属性都是从具有类似名称的内核 power_supply 子系统属性中读取的。但是,特定设备的确切属性、属性值解析度和更新频率取决于:</p>
<ul>
<li>电量计硬件,如 Summit SMB347 或 Maxim MAX17050。</li>
@@ -64,7 +64,7 @@ BATTERY_PROPERTY_ENERGY_COUNTER Remaining energy in nanowatt-hours
<h2 id="maxim-fuel">Maxim 电量计</h2>
-<p>在确定电池在长时间内的荷电状态时,Maxim 电量计(MAX17050,BC15)可校正库仑计数器的偏移测量结果。对于在短时间内进行的测量(如耗电量计量测试),该电量计不会进行校正,使得当电流测量值过小时偏移成为主要误差源(尽管任何时长都无法完全消除偏移误差)。</p>
+<p>在确定电池在长时间内的荷电状态时,Maxim 电量计(MAX17050,BC15)可校正库仑计数器的偏移测量结果。对于在短时间内进行的测量(如耗电量计量测试),该电量计不会进行校正,因此当电流测量值过小时,偏移会成为主要误差源(尽管任何时长都无法完全消除偏移误差)。</p>
<p>对于典型的 10 毫欧感应电阻设计,电流偏移量应小于 1.5 毫安,这意味着任何测量结果误差均为 +/- 1.5 毫安(电路板布局也会对该误差产生影响)。例如,当测量强电流(200 毫安)时,您将会获得以下结果:</p>
@@ -81,8 +81,8 @@ BATTERY_PROPERTY_ENERGY_COUNTER Remaining energy in nanowatt-hours
<p>对于 +/-100 微安的相对测量结果,所需测量时间取决于:</p>
<ul>
-<li><b>ADC 采样噪声</b>。具有正常出厂配置的 MAX17050 由于噪声而产生 +/-1.5 毫安的样本变差,每 175.8 毫秒输出一个样本。对于 1 分钟的测试间隙,您将会获得大约 +/-100 微安的噪声,对于 6 分钟的测试间隙,您将会获得小于 100 微安、3-sigma 的纯粹噪声(或 33 微安、1-sigma 的噪声)。</li>
-<li><b>由负载变化引起的样本混叠</b>。差异会放大误差,因此对于具有负载固有差异的样本,请考虑采用较长的测试间隙。</li>
+<li><b>ADC 采样噪声</b>。具有正常出厂配置的 MAX17050 由于噪声而产生 +/-1.5 毫安的样本变差,每 175.8 毫秒输出一个样本。对于 1 分钟的测试窗口,您将会获得大约 +/-100 微安的噪声,对于 6 分钟的测试窗口,您将会获得小于 100 微安、3-sigma 的纯粹噪声(或 33 微安、1-sigma 的噪声)。</li>
+<li><b>由负载变化引起的样本混叠</b>。差异会放大误差,因此对于具有负载固有差异的样本,请考虑采用较长的测试窗口。</li>
</ul>
<h2 id="nexus-devices">支持的 Nexus 设备</h2>
diff --git a/zh-cn/devices/tech/settings/settings-guidelines.html b/zh-cn/devices/tech/settings/settings-guidelines.html
index 00caeaa4..e905bf19 100644
--- a/zh-cn/devices/tech/settings/settings-guidelines.html
+++ b/zh-cn/devices/tech/settings/settings-guidelines.html
@@ -33,7 +33,7 @@
<p><img src="images/settings-guidelines01.png" width="250" class="screenshot"/></p>
-<p><strong>图 1</strong>:各项设置及其当前值显示在顶层屏幕中</p>
+<p><strong>图 1.</strong> 各项设置及其当前值显示在顶层屏幕中</p>
<h3 id="organize_items_intuitively">直观地整理项目</h3>
@@ -41,7 +41,7 @@
<p><img src="images/settings-guidelines02.png" width="250" class="screenshot"/></p>
-<p><strong>图 2</strong>:常用设置位于屏幕顶部</p>
+<p><strong>图 2.</strong> 常用设置位于屏幕顶部</p>
<h3 id="make_settings_easy_to_find">让设置易于查找</h3>
@@ -56,7 +56,7 @@
</tr>
</tbody></table>
-<p><strong>图 3 和图 4</strong>:“默认通知提示音”同时显示在“通知”屏幕和“提示音”屏幕中</p>
+<p><strong>图 3 和图 4.</strong>“默认通知提示音”同时显示在“通知”屏幕和“提示音”屏幕中</p>
<h3 id="use_a_clear_title_and_status">使用清晰的标题和状态</h3>
@@ -88,7 +88,7 @@
<p><img src="images/settings-guidelines05.png" width="250" class="screenshot"/></p>
-<p><strong>图 5</strong>:设置列表示例</p>
+<p><strong>图 5.</strong> 设置列表示例</p>
<h3 id="list_view">列表视图</h3>
@@ -96,7 +96,7 @@
<p><img src="images/settings-guidelines06.png" width="250" class="screenshot"/></p>
-<p><strong>图 6</strong>:列表视图的示例</p>
+<p><strong>图 6.</strong> 列表视图示例</p>
<h3 id="entity_screen">实体屏幕</h3>
@@ -106,11 +106,11 @@
<p><img src="images/settings-guidelines07.png" width="250" class="screenshot"/></p>
-<p><strong>图 7</strong>:“应用信息”中使用的实体屏幕的示例</p>
+<p><strong>图 7.</strong> “应用信息”中使用的实体屏幕的示例</p>
<p><img src="images/settings-guidelines08.png" width="250" class="screenshot"/></p>
-<p><strong>图 8</strong>:“存储空间”中使用的实体屏幕的示例</p>
+<p><strong>图 8.</strong> “存储空间”中使用的实体屏幕的示例</p>
<h3 id="master_setting">主设置</h3>
@@ -122,11 +122,11 @@
<p><img src="images/settings-guidelines09.png" width="250" class="screenshot"/></p>
-<p><strong>图 9</strong>:“应用通知”屏幕中使用的主设置的示例(关闭主开关会针对此应用关闭整个功能)</p>
+<p><strong>图 9.</strong> “应用通知”屏幕中使用的主设置的示例(关闭主开关会针对此应用关闭整个功能)</p>
<p><img src="images/settings-guidelines10.png" width="250" class="screenshot"/></p>
-<p><strong>图 10</strong>:“应用通知”屏幕中使用的主设置的示例(主开关已关闭)</p>
+<p><strong>图 10.</strong> “应用通知”屏幕中使用的主设置的示例(主开关已关闭)</p>
<h3 id="radio_button_selection_screen">单选按钮选择屏幕</h3>
@@ -136,11 +136,11 @@
<p><img src="images/settings-guidelines11.png" width="250" class="screenshot"/></p>
-<p><strong>图 11</strong>:不应在设置列表中使用单选按钮</p>
+<p><strong>图 11.</strong> 不得在设置列表中使用单选按钮</p>
<p><img src="images/settings-guidelines12.png" width="250" class="screenshot"/></p>
-<p><strong>图 12</strong>:关于如何在设置中正确使用单选按钮的示例</p>
+<p><strong>图 12.</strong> 关于如何在设置中正确使用单选按钮的示例</p>
<h2 id="components">组件</h2>
@@ -148,17 +148,17 @@
<p>从 Android 8.0 开始,操作工具栏中会显示搜索、帮助以及其他相关操作。不建议使用溢出菜单,因为用户可能无法发现这些菜单中隐藏的操作。</p>
-<p><strong>对于没有任何特定于屏幕的操作的工具栏</strong>:显示搜索和帮助操作。</p>
+<p><strong>对于没有任何特定于屏幕的操作的工具栏。</strong> 显示搜索和帮助操作。</p>
<p><img src="images/settings-guidelines13.png" width="250" class="screenshot"/></p>
-<p><strong>图 13</strong>:包含搜索和帮助操作的工具栏</p>
+<p><strong>图 13.</strong> 包含搜索和帮助操作的工具栏</p>
<p><strong>对于包含一项操作的工具栏</strong>:将该操作显示在搜索前面。</p>
<p><img src="images/settings-guidelines14.png" width="250" class="screenshot"/></p>
-<p><strong>图 14</strong>:在搜索和帮助操作前面包含一项操作的工具栏</p>
+<p><strong>图 14.</strong> 在搜索和帮助操作前面包含一项操作的工具栏</p>
<p><strong>对于包含多项操作的工具栏</strong>:考虑将主要操作放置在搜索前面,同时将高级操作放在溢出菜单中。</p>
@@ -166,7 +166,7 @@
<p><img src="images/settings-guidelines15.png" width="250" class="screenshot"/></p>
-<p><strong>图 15</strong>:包含操作溢出菜单的工具栏</p>
+<p><strong>图 15.</strong> 包含操作溢出菜单的工具栏</p>
<h3 id="entity_header">实体标头</h3>
@@ -174,13 +174,13 @@
<p><img src="images/settings-guidelines16.png" width="250" class="screenshot"/></p>
-<p><strong>图 16</strong>:实体标头</p>
+<p><strong>图 16.</strong> 实体标头</p>
<p>图标和标题 (App1) 部分将在标头(应用信息)下滚动。</p>
<p><img src="images/settings-guidelines17.png" width="250" class="screenshot"/></p>
-<p><strong>图 17</strong>:图中的应用信息标题属于工具栏的一部分,而屏幕的其余部分将在其下滚动</p>
+<p><strong>图 17.</strong> 图中的应用信息标题属于工具栏的一部分,而屏幕的其余部分将在其下滚动</p>
<h3 id="menu_link">菜单链接</h3>
@@ -192,15 +192,15 @@
<p><img src="images/settings-guidelines18.png" width="250" class="screenshot"/></p>
-<p><strong>图 18</strong>:带有图标、标题和辅助文本的菜单链接</p>
+<p><strong>图 18.</strong> 带有图标、标题和辅助文本的菜单链接</p>
<p><img src="images/settings-guidelines19.png" width="250" class="screenshot"/></p>
-<p><strong>图 19</strong>:带有标题和辅助文本的菜单链接</p>
+<p><strong>图 19.</strong> 带有标题和辅助文本的菜单链接</p>
<p><img src="images/settings-guidelines20.png" width="250" class="screenshot"/></p>
-<p><strong>图 20</strong>:仅带有标题的菜单链接</p>
+<p><strong>图 20.</strong> 仅带有标题的菜单链接</p>
<p><strong>带有图标、标题、辅助文本,且右侧带有单独触摸目标的菜单链接</strong></p>
@@ -208,7 +208,7 @@
<p><img src="images/settings-guidelines21.png" width="250" class="screenshot"/></p>
-<p><strong>图 21</strong>:点按两次的目标菜单示例</p>
+<p><strong>图 21.</strong> 点按两次的目标菜单示例</p>
<p><strong>带有图标、标题、辅助文本和统计信息/数字/警报图标的菜单链接</strong></p>
@@ -218,7 +218,7 @@
<p><img src="images/settings-guidelines22.png" width="250" class="screenshot"/></p>
-<p><strong>图 22</strong>:带有图标、标题、统计信息和图表的示例菜单</p>
+<p><strong>图 22.</strong> 带有图标、标题、统计信息和图表的示例菜单</p>
<h3 id="grouping_dividers">分组和分隔线</h3>
@@ -228,7 +228,7 @@
<p><img src="images/settings-guidelines23.png" width="250" class="screenshot"/></p>
-<p><strong>图 23</strong>:使用分隔符分组的设置</p>
+<p><strong>图 23.</strong> 使用分隔符分组的设置</p>
<h3 id="switch">开关</h3>
@@ -236,13 +236,13 @@
<p><img src="images/settings-guidelines24.png" width="250" class="screenshot"/></p>
-<p><strong>图 24</strong>:带有图标、标题和辅助文本的开关</p>
+<p><strong>图 24.</strong> 带有图标、标题和辅助文本的开关</p>
<p><strong>带有标题和辅助文本的开关</strong></p>
<p><img src="images/settings-guidelines25.png" width="250" class="screenshot"/></p>
-<p><strong>图 25</strong>:带有标题和辅助文本的开关</p>
+<p><strong>图 25.</strong> 带有标题和辅助文本的开关</p>
<p><strong>仅带有标题的开关</strong></p>
@@ -250,7 +250,7 @@
<p><img src="images/settings-guidelines26.png" width="250" class="screenshot"/></p>
-<p><strong>图 26</strong>:仅带有标题的开关</p>
+<p><strong>图 26.</strong> 仅带有标题的开关</p>
<h3 id="list_item_switch">列表项 + 开关</h3>
@@ -260,7 +260,7 @@
<p><img src="images/settings-guidelines27.png" width="250" class="screenshot"/></p>
-<p><strong>图 27</strong>:列表项和开关</p>
+<p><strong>图 27.</strong> 列表项和开关</p>
<h3 id="slider">滑块</h3>
@@ -268,19 +268,19 @@
<p><img src="images/settings-guidelines28.png" width="250" class="screenshot"/></p>
-<p><strong>图 28</strong>:滑块</p>
+<p><strong>图 28.</strong> 滑块</p>
-<h3 id="on_screen_button">屏幕按钮</h3>
+<h3 id="on-screen_button">屏幕按钮</h3>
<p>正面操作使用主题背景颜色,而负面操作则显示为灰色。正面操作包括打开应用、安装应用、添加新项目等。负面操作包括清除数据、卸载应用、删除项目等。</p>
<p><img src="images/settings-guidelines29.png" width="250" class="screenshot"/></p>
-<p><strong>图 29</strong>:灰色的“卸载”和“强行停止”按钮</p>
+<p><strong>图 29.</strong> 灰色的“卸载”和“强行停止”按钮</p>
<p><img src="images/settings-guidelines30.png" width="250" class="screenshot"/></p>
-<p><strong>图 30</strong>:蓝色的“立即开启”按钮</p>
+<p><strong>图 30.</strong> 蓝色的“立即开启”按钮</p>
<h3 id="progressive_disclosure_advanced">渐进式披露(高级)</h3>
@@ -290,9 +290,9 @@
<p><img src="images/settings-guidelines31.png" width="250" class="screenshot"/></p>
-<p><strong>图 31</strong>:在“显示”屏幕中使用的高级设置</p>
+<p><strong>图 31.</strong> 在“显示”屏幕中使用的高级设置</p>
-<h3 id="drop_down_menu">下拉菜单</h3>
+<h3 id="drop-down_menu">下拉菜单</h3>
<p>可以使用下拉菜单,但理想情况下,您应改为使用对话框或单选按钮选择屏幕。建议使用此方法来简化设置,因为目前有三种不同的模式可用于单项选择。</p>
@@ -300,7 +300,7 @@
<p><img src="images/settings-guidelines32.png" width="250" class="screenshot"/></p>
-<p><strong>图 32</strong>:下拉菜单</p>
+<p><strong>图 32.</strong> 下拉菜单</p>
<h3 id="checkbox">复选框</h3>
@@ -315,7 +315,7 @@
<p><img src="images/settings-guidelines33.png" width="250" class="screenshot"/></p>
-<p><strong>图 33</strong>:复选框用于减少该屏幕中的开关数量</p>
+<p><strong>图 33.</strong> 复选框用于减少该屏幕中的开关数量</p>
<h3 id="links">链接</h3>
@@ -323,7 +323,7 @@
<p><img src="images/settings-guidelines34.png" width="250" class="screenshot"/></p>
-<p><strong>图 34</strong>:设置中使用的链接</p>
+<p><strong>图 34.</strong> 设置中使用的链接</p>
<h3 id="footer">页脚</h3>
@@ -331,7 +331,7 @@
<p><img src="images/settings-guidelines35.png" width="250" class="screenshot"/></p>
-<p><strong>图 35</strong>:页脚文本</p>
+<p><strong>图 35.</strong> 页脚文本</p>
<h2 id="patterns">模式</h2>
@@ -343,11 +343,11 @@
<p><img src="images/settings-guidelines36.png" width="250" class="screenshot"/></p>
-<p><strong>图 36</strong>:显示存储空间的示例</p>
+<p><strong>图 36.</strong> 显示存储空间的示例</p>
<p><img src="images/settings-guidelines37.png" width="250" class="screenshot"/></p>
-<p><strong>图 37</strong>:显示网络的示例</p>
+<p><strong>图 37.</strong> 显示网络的示例</p>
<h3 id="user_education">用户培训</h3>
@@ -355,7 +355,7 @@
<p><img src="images/settings-guidelines38.png" width="250" class="screenshot"/></p>
-<p><strong>图 38</strong>:使用动画和页脚文本的设置</p>
+<p><strong>图 38.</strong> 使用动画和页脚文本的设置</p>
<h3 id="forms">表单</h3>
@@ -365,7 +365,7 @@
<p><img src="images/settings-guidelines39.png" width="250" class="screenshot"/></p>
-<p><strong>图 39</strong>:包含普通对话框的表单</p>
+<p><strong>图 39.</strong> 包含普通对话框的表单</p>
<h3 id="search_results">搜索结果</h3>
@@ -373,6 +373,6 @@
<p><img src="images/settings-guidelines40.png" width="250" class="screenshot"/></p>
-<p><strong>图 40</strong>:搜索结果</p>
+<p><strong>图 40.</strong> 搜索结果</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/tech/test_infra/tradefed/full_example.html b/zh-cn/devices/tech/test_infra/tradefed/full_example.html
index 566e0805..938f4be3 100644
--- a/zh-cn/devices/tech/test_infra/tradefed/full_example.html
+++ b/zh-cn/devices/tech/test_infra/tradefed/full_example.html
@@ -161,7 +161,7 @@ Hello, TF World! I have device 004ad9880810a548
<p>您应该可以看到显示设备序列号的新输出消息。</p>
<h2 id="sendresults">发送测试结果 (D)</h2>
-<p><code>IRemoteTest</code> 会对提供给 <code>#run</code> 方法的 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html">ITestInvocationListener</a> 实例调用相关方法,从而报告结果。TF 框架本身负责报告每个调用的开始位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationStarted(com.android.tradefed.build.IBuildInfo)">ITestInvocationListener#invocationStarted</a>)和结束位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationEnded(long)">ITestInvocationListener#invocationEnded</a>)。</p>
+<p><code>IRemoteTest</code> 会对提供给 <code>#run</code> 方法的 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html"></a> 实例调用相关方法,从而报告结果。TF 框架本身负责报告每个调用的开始位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationStarted(com.android.tradefed.build.IBuildInfo)">ITestInvocationListener#invocationStarted</a>)和结束位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationEnded(long)">ITestInvocationListener#invocationEnded</a>)。</p>
<p><b>测试运行</b>是测试的逻辑集合。要报告测试结果,<code>IRemoteTest</code> 负责报告测试运行的开始之处,每个测试的开始和结束之处以及测试运行的结束之处。</p>
diff --git a/zh-cn/security/keystore/tags.html b/zh-cn/security/keystore/tags.html
index bdcf71fb..7a13ebf7 100644
--- a/zh-cn/security/keystore/tags.html
+++ b/zh-cn/security/keystore/tags.html
@@ -22,8 +22,8 @@
<p>本页提供了一些对 Keymaster HAL 实现人员很有帮助的详细信息。
其中介绍了 HAL 中的每个标记、提供相应标记的 Keymaster 版本以及相应标记是否可重复使用。除非标记说明中另有注明,否则以下所有标记都是在密钥生成期间用于指定密钥特性。</p>
-<p>对于 Keymaster 3,标记在 <code>platform/hardware/interfaces/keymaster/3.0/types.hal</code> 中定义。对于 Keymaster 2 及更低版本,标记是在 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware">
-hardware/libhardware/include/hardware/keymaster_defs.h</a></code> 中定义的。</p>
+<p>对于 Keymaster 4,标记是在 <code>platform/hardware/interfaces/keymaster/<var>keymaster-version</var>/types.hal</code> 中定义的;例如,Keymaster 3 为 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/3.0/types.hal" class="external">3.0/types.hal</a>,Keymaster 4 为 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/4.0/types.hal" class="external">4.0/types.hal</a>。对于 Keymaster 2 及更低版本,标记是在 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware" class="external">
+platform/hardware/libhardware/include/hardware/keymaster_defs.h</a></code> 中定义的。</p>
<p>要了解具体函数,请参阅 <a href="/security/keystore/implementer-ref">Keymaster 函数</a>页面。</p>
@@ -31,7 +31,7 @@ hardware/libhardware/include/hardware/keymaster_defs.h</a></code> 中定义的
<h2 id="active_datetime">Tag::ACTIVE_DATETIME</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定相应密钥变为有效状态的日期和时间。在此之前,尝试使用相应密钥时,操作会失败并显示 <code>ErrorCode::KEY_NOT_YET_VALID</code>。</p>
@@ -40,7 +40,7 @@ hardware/libhardware/include/hardware/keymaster_defs.h</a></code> 中定义的
<h2 id="algorithm">Tag::ALGORITHM</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定与相应密钥配合使用的加密算法。</p>
@@ -69,28 +69,28 @@ typedef enum {
<h2 id="all_applications">Tag::ALL_APPLICATIONS</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>预留以供日后使用。</p>
<h2 id="allow_while_on_body">Tag::ALLOW_WHILE_ON_BODY</h2>
-<p><strong>版本</strong>:2、3</p>
+<p><strong>版本</strong>:2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>此标记仅适用于配备贴身传感器的 Android Wear 设备。目前,TEE 并不能提供对贴身传感器的安全访问,贴身传感器也不是非常安全,因此这应该是一项完全由软件强制执行的功能。</p>
<h2 id="all_users">Tag::ALL_USERS</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>预留以供日后使用。</p>
<h2 id="application_data">Tag::APPLICATION_DATA</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定任何时候使用相应密钥时必需的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
@@ -101,7 +101,7 @@ typedef enum {
<h2 id="application_id">Tag::APPLICATION_ID</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定任何时候使用相应密钥时必需的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
@@ -112,7 +112,7 @@ typedef enum {
<h2 id="associated_data">Tag::ASSOCIATED_DATA</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于提供进行 AES-GCM 加密或解密时使用的“相关数据”。可以将此标记提供给 <a href="/security/keystore/implementer-ref#update">update</a>,以便指定在计算 GCM 标记时使用的未加密/解密的数据。</p>
@@ -120,7 +120,7 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_application_id">Tag::ATTESTATION_APPLICATION_ID</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于识别已发起密钥认证的可能的应用集。</p>
@@ -128,22 +128,22 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_challenge">Tag::ATTESTATION_CHALLENGE</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于在认证时提供质询。</p>
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_brand">Tag::ATTESTATION_ID_BRAND</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
-<p>提供设备的品牌名称,与 Android 中的 <code>Build.BRAND</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
+<p>提供设备的品牌名称(与 Android 中的 <code>Build.BRAND</code> 返回的值相同)。仅在请求认证该设备的标识符时才会设置此字段。</p>
<p>如果该设备不支持 ID 认证(或者之前已调用 <code>destroyAttestationIds()</code> 且该设备无法再证明其 ID),则任何包含该标记的密钥认证请求都会失败并显示 <code>ErrorCode::CANNOT_ATTEST_IDS</code>。</p>
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_device">Tag::ATTESTATION_ID_DEVICE</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>提供设备的设备名称,与 Android 中的 <code>Build.DEVICE</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
@@ -151,7 +151,7 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_imei">Tag::ATTESTATION_ID_IMEI</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?是</p>
<p>为设备上的所有无线装置提供 IMEI。仅在请求认证该设备的标识符时才会设置此字段。</p>
@@ -159,7 +159,7 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_manufacturer">Tag::ATTESTATION_ID_MANUFACTURER</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>提供设备的制造商名称,与 Android 中的 <code>Build.MANUFACTURER</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
@@ -167,7 +167,7 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_meid">Tag::ATTESTATION_ID_MEID</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?是</p>
<p>为设备上的所有无线装置提供 MEID。仅在请求认证该设备的标识符时才会设置此字段。</p>
@@ -175,7 +175,7 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_model">Tag::ATTESTATION_ID_MODEL</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>提供设备的型号名称,与 Android 中的 <code>Build.MODEL</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
@@ -184,7 +184,7 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_product">Tag::ATTESTATION_ID_PRODUCT</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>提供设备的产品名称,与 Android 中的 <code>Build.PRODUCT</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
@@ -192,7 +192,7 @@ typedef enum {
<p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
<h2 id="attestation_id_serial">Tag::ATTESTATION_ID_SERIAL</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>提供设备的序列号。仅在请求认证该设备的标识符时才会设置此字段。</p>
@@ -201,7 +201,7 @@ typedef enum {
<h2 id="auth_timeout">Tag::AUTH_TIMEOUT</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定授权在多长时间内使用相应密钥(以秒数计,从通过身份验证开始算起)。如果 <a href="#user_secure_id">Tag::USER_SECURE_ID</a> 存在而此标记不存在,那么每次使用相应密钥时都需要通过身份验证(要详细了解各项操作的身份验证流程,请参阅 <a href="/security/keystore/implementer-ref#begin">begin</a>)。</p>
@@ -210,16 +210,16 @@ typedef enum {
<h2 id="auth_token">Tag::AUTH_TOKEN</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
-<p>用于向 <a href="/security/keystore/authentication/#authentication_token_format">begin</a>、<a href="/security/keystore/implementer-ref#begin">update</a> 或 <a href="/security/keystore/implementer-ref#update">finish</a> 提供<a href="/security/keystore/implementer-ref#finish">身份验证令牌</a>,以便向要求用户通过身份验证的密钥操作(密钥带有 <a href="#user_secure_id">Tag::USER_SECURE_ID</a>)证明相应用户已通过身份验证。</p>
+<p>用于向 <a href="/security/keystore/implementer-ref#begin">begin</a>、<a href="/security/keystore/implementer-ref#update">update</a> 或 <a href="/security/keystore/implementer-ref#finish">finish</a> 提供<a href="/security/keystore/authentication/#authentication_token_format">身份验证令牌</a>,以便向要求用户通过身份验证的密钥操作(密钥带有 <a href="#user_secure_id">Tag::USER_SECURE_ID</a>)证明相应用户已通过身份验证。</p>
<p>此标记的值是一个包含 <code>hw_auth_token_t</code> 结构的 Blob。</p>
<h2 id="blob_usage_requirements">Tag::BLOB_USAGE_REQUIREMENTS</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定要使用生成的密钥所必需的系统环境条件。</p>
@@ -247,7 +247,7 @@ typedef enum {
<h2 id="block_mode">Tag::BLOCK_MODE</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?是</p>
<p>用于指定可与相应密钥配合使用的分块加密模式。
@@ -278,9 +278,20 @@ typedef enum {
<p>此标记可重复使用;对于 AES 密钥操作,请在 <a href="/security/keystore/implementer-ref#begin">bigin</a> 的 <code>additionalParams</code> 参数中指定模式。
如果指定的模式不在相应密钥的关联模式之列,操作会失败并显示 <code>ErrorCode::INCOMPATIBLE_BLOCK_MODE</code>。</p>
+<h2 id="boot_patchlevel">Tag::BOOT_PATCHLEVEL</h2>
+<p><strong>版本</strong>:4</p>
+<p>Tag::BOOT_PATCHLEVEL 用于指定可与秘钥配合使用的启动映像(内核)安全补丁程序级别。该标记一定不会发送至 keymaster TA,而是由 TA 添加到由硬件强制执行的授权列表中。任何试图将秘钥与不同于当前运行的系统补丁程序级别的 <code>Tag::BOOT_PATCHLEVEL</code> 配合使用的行为,都会导致 <code>begin()</code>、<code>getKeyCharacteristics()</code> 或 <code>exportKey()</code> 返回 <code>ErrorCode::KEY_REQUIRES_UPGRADE</code>。如需了解详情,请参阅 <code>upgradeKey()</code>。
+</p>
+<p>该标记的值是形式为 YYYYMMDD 的整数,其中 YYYY 表示上次更新时间的四位数年份,MM 表示上次更新时间的两位数月份,DD 表示上次更新时间的两位数日期。例如,对于上次更新时间为 2018 年 6 月 5 日的 Android 设备上生成的密钥,其值将表示为 20180605。如果日期未知,则可以替换为 00。
+</p>
+<p>在每次启动期间,引导加载程序都必须将启动映像的补丁程序级别提供给安全环境(相应机制是由实现定义的)。
+</p>
+<p>必须由硬件强制执行。
+</p>
+
<h2 id="bootloader_only">Tag::BOOTLOADER_ONLY</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定仅引导加载程序可以使用该密钥。</p>
@@ -291,7 +302,7 @@ typedef enum {
<h2 id="caller_nonce">Tag::CALLER_NONCE</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定调用程序可以为需要随机数的操作提供随机数。</p>
@@ -302,14 +313,14 @@ typedef enum {
<h2 id="creation_datetime">Tag::CREATION_DATETIME</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定相应密钥的创建日期和时间(以距 1970 年 1 月 1 日的毫秒数计)。此标记为可选标记,仅供参考。</p>
<h2 id="digest">Tag::DIGEST</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?是</p>
<p>用于指定可与相应密钥配合使用以执行签名和验证操作的摘要算法。此标记与 RSA 密钥、ECDSA 密钥和 HMAC 密钥有关。</p>
@@ -348,7 +359,7 @@ keymaster_digest_t;
<h2 id="ec_curve">Tag::EC_CURVE</h2>
-<p><strong>版本</strong>:2、3</p>
+<p><strong>版本</strong>:2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>在 Keymaster 1 中,用于 EC 密钥的曲线从指定密钥的大小推测而来。为了在今后提高灵活性,Keymaster 2 引入了一种明确的方法来指定曲线。EC 密钥生成请求可包含 <code>Tag::EC_CURVE</code> 和/或 <code>Tag::KEY_SIZE</code>。</p>
@@ -383,7 +394,7 @@ P_521 = 3,
<h2 id="include_unique_id">Tag::INCLUDE_UNIQUE_ID</h2>
-<p><strong>版本</strong>:2、3</p>
+<p><strong>版本</strong>:2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>在密钥生成期间指定此标记,以指示所生成密钥的认证证书应包含一个范围限定于应用且受时间限制的设备唯一 ID(由 <a href="#unique_id">Tag::UNIQUE_ID</a> 指定)。</p>
@@ -392,7 +403,7 @@ P_521 = 3,
<h2 id="key_size">Tag::KEY_SIZE</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定相应密钥的大小(以位数计,按适用于相应密钥算法的一般方式衡量)。例如,对于 RSA 密钥,<code>Tag::KEY_SIZE</code> 用于指定公开模数的大小。对于 AES 密钥,此标记用于指定密钥私密材料的长度。</p>
@@ -400,7 +411,7 @@ P_521 = 3,
<h2 id="mac_length">Tag::MAC_LENGTH</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于提供 MAC 或 GCM 身份验证标记的请求长度(以位数计)。</p>
@@ -409,7 +420,7 @@ P_521 = 3,
<h2 id="max_uses_per_boot">Tag::MAX_USES_PER_BOOT</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定在两次系统重启之间可以使用相应密钥的最大次数。这是另一种限制密钥使用次数的机制。</p>
@@ -421,7 +432,7 @@ P_521 = 3,
<h2 id="min_mac_length">Tag::MIN_MAC_LENGTH</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>此标记适用于支持 GCM 模式的 HMAC 密钥和 AES 密钥,用于指定可通过相应密钥请求或验证的 MAC 的最小长度。</p>
@@ -430,7 +441,7 @@ P_521 = 3,
<h2 id="min_seconds_between_ops">Tag::MIN_SECONDS_BETWEEN_OPS</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定至少间隔多长时间才能再次将密钥用于允许的操作。在不限制密钥使用次数可能会给暴力破解攻击以可乘之机的环境中,可以使用此标记来限制密钥的使用次数。</p>
@@ -441,7 +452,7 @@ P_521 = 3,
<h2 id="no_auth_required">Tag::NO_AUTH_REQUIRED</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定无需进行身份验证即可使用相应密钥。此标记与 <a href="#user_secure_id">Tag::USER_SECURE_ID</a> 互斥。</p>
@@ -450,7 +461,7 @@ P_521 = 3,
<h2 id="nonce">Tag::NONCE</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于提供或返回进行 AES GCM、CBC 或 CTR 加密/解密时使用的随机数或初始化矢量 (IV)。在加密和解密操作期间,可以将此标记提供给 <a href="/security/keystore/implementer-ref#begin">begin</a>。仅当相应密钥带有 <a href="#caller_nonce">Tag::CALLER_NONCE</a> 时,此标记才会提供给 <a href="/security/keystore/implementer-ref#begin">begin</a>。如果未提供此标记,Keymaster 将随机生成适当的随机数或 IV 并通过 begin 将其返回。</p>
@@ -459,7 +470,7 @@ P_521 = 3,
<h2 id="origin">Tag::ORIGIN</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定相应密钥是在哪里创建的(如果知道)。在生成或导入密钥期间可以不指定此标记,但此标记必须要由 Trustlet 添加到密钥特性中。</p>
@@ -500,7 +511,7 @@ typedef enum {
<h2 id="origination_expire_datetime">Tag::ORIGINATION_EXPIRE_DATETIME</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定相应密钥无法再用于签名和加密目的的过期日期和时间。在此之后,如果尝试使用提供给 <a href="/security/keystore/implementer-ref#begin">begin</a> 的带 <a href="#purpose">KeyPurpose::SIGN</a> 或 <a href="#purpose">KeyPurpose::ENCRYPT</a> 的密钥,操作会失败并显示 <code>ErrorCode::KEY_EXPIRED</code>。</p>
@@ -509,7 +520,7 @@ typedef enum {
<h2 id="os_patchlevel">Tag::OS_PATCHLEVEL</h2>
-<p><strong>版本</strong>:2、3</p>
+<p><strong>版本</strong>:2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>该标记一定不会发送至 keymaster TA,而是由 TA 添加到由硬件强制执行的授权列表中。</p>
@@ -520,7 +531,7 @@ typedef enum {
<h2 id="os_version">Tag::OS_VERSION</h2>
-<p><strong>版本</strong>:2、3</p>
+<p><strong>版本</strong>:2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>该标记一定不会发送至 keymaster TA,而是由 TA 添加到由硬件强制执行的授权列表中。</p>
@@ -529,7 +540,7 @@ typedef enum {
<h2 id="padding">Tag::PADDING</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?是</p>
<p>用于指定可与相应密钥配合使用的填充模式。此标记与 RSA 密钥和 AES 密钥有关。</p>
@@ -574,7 +585,7 @@ typedef enum {
<h2 id="purpose">Tag::PURPOSE</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?是</p>
<p>用于指定相应密钥可用于哪些目的。</p>
@@ -607,7 +618,7 @@ typedef enum {
<h2 id="reset_since_id_rotation">Tag::RESET_SINCE_ID_ROTATION</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定设备自上次唯一 ID 旋转以来是否恢复出厂设置。用于密钥认证。</p>
@@ -615,7 +626,7 @@ typedef enum {
<h2 id="rollback_resistant">Tag::ROLLBACK_RESISTANT</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于表明相应密钥可抗回滚,也就是说,当通过 <a href="/security/keystore/implementer-ref#delete_key">deleteKey</a> 或 <a href="/security/keystore/implementer-ref#delete_all_keys">deleteAllKeys</a> 删除相应密钥后,可保证相应密钥已被永久删除且无法再使用。如果密钥不带此标记,那么在被删除后,可能能够从备份中恢复。</p>
@@ -624,14 +635,14 @@ typedef enum {
<h2 id="root_of_trust">Tag::ROOT_OF_TRUST</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定“信任根”,即经过验证的启动程序在验证操作系统是否已启动时使用的密钥(如果有)。<em></em>在任何情况下,都不可以通过密钥特性将此标记提供给 Keymaster,也不可以通过密钥特性从 Keymaster 返回此标记。</p>
<h2 id="rsa_public_exponent">Tag::RSA_PUBLIC_EXPONENT</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于为 RSA 密钥对指定公开指数的值。此标记仅与 RSA 密钥有关,而且是所有 RSA 密钥都必需的标记。</p>
@@ -640,7 +651,7 @@ typedef enum {
<h2 id="unique_id">Tag::UNIQUE_ID</h2>
-<p><strong>版本</strong>:3</p>
+<p><strong>版本</strong>:3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于在认证时提供唯一 ID。</p>
@@ -648,7 +659,7 @@ typedef enum {
<h2 id="usage_expire_datetime">Tag::USAGE_EXPIRE_DATETIME</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定相应密钥无法再用于验证和解密目的的过期日期和时间。在此之后,如果尝试使用提供给 <a href="/security/keystore/implementer-ref#begin">begin</a> 的带 <a href="#purpose">KeyPurpose::VERIFY</a> 或 <a href="#purpose">KeyPurpose::DECRYPT</a> 的密钥,操作会失败并显示 <code>ErrorCode::KEY_EXPIRED</code>。</p>
@@ -657,7 +668,7 @@ typedef enum {
<h2 id="user_auth_type">Tag::USER_AUTH_TYPE</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定可以使用哪些类型的用户身份验证程序来授权使用相应密钥。请求 Keymaster 执行所用密钥带有此标记的操作时,要为 Keymaster 提供一个身份验证令牌,并且该令牌的 <code>authenticator_type</code> 字段需与此标记中的值一致。例如,<code>(ntoh(token.authenticator_type) &amp; auth_type_tag_value) != 0</code>,其中 <code>ntoh</code> 是一个函数,用于将按网络字节序保存的整数转换成按主机字节序保存的整数,而 <code>auth_type_tag_value</code> 是此标记的值。</p>
@@ -687,7 +698,7 @@ typedef enum {
<h2 id="user_secure_id">Tag::USER_SECURE_ID</h2>
-<p><strong>版本</strong>:1、2、3</p>
+<p><strong>版本</strong>:1、2、3、4</p>
<p><strong>是否可重复使用</strong>?否</p>
<p>用于指定只能在某个安全的用户身份验证状态下使用相应密钥。此标记与 <a href="#no_auth_required">Tag::NO_AUTH_REQUIRED</a> 互斥。</p>
@@ -696,4 +707,14 @@ typedef enum {
<p>此标记可重复使用。如果提供的值中有任何一个与身份验证令牌中的任何政策状态值一致,身份验证程序即会授权使用相应密钥。否则,操作会失败并显示 <code>ErrorCode::KEY_USER_NOT_AUTHENTICATED</code>。</p>
+<h2 id="vendor_patchlevel">Tag::VENDOR_PATCHLEVEL</h2>
+<p><strong>版本</strong>:4</p>
+<p>此标记用于指定可与秘钥配合使用的供应商映像安全补丁程序级别。该标记一定不会发送至 keymaster TA,而是由 TA 添加到由硬件强制执行的授权列表中。任何试图将秘钥与不同于当前运行的系统补丁程序级别的 <code>Tag::VENDOR_PATCHLEVEL</code> 配合使用的行为,一定会导致 <code>begin()</code>、<code>getKeyCharacteristics()</code> 或 <code>exportKey()</code> 返回 <code>ErrorCode::KEY_REQUIRES_UPGRADE</code>。如需了解详情,请参阅 <code>upgradeKey()</code>。
+</p>
+<p>该标记的值是形式为 YYYYMMDD 的整数,其中 YYYY 表示上次更新时间的四位数年份,MM 表示上次更新时间的两位数月份,DD 表示上次更新时间的两位数日期。例如,对于上次更新时间为 2018 年 6 月 5 日的 Android 设备上生成的密钥,其值将表示为 20180605。</p>
+<p>IKeymasterDevice HAL 必须从系统属性 <code>ro.vendor.build.security_patch</code> 读取当前供应商补丁程序级别,并在 HAL 首次加载时将其传递给安全环境(相应机制是由实现定义的)。在下次启动完成前,安全环境不得接受其他补丁程序级别。
+</p>
+<p>必须由硬件强制执行。
+</p>
+
</body></html> \ No newline at end of file
diff --git a/zh-cn/setup/build/jack.html b/zh-cn/setup/build/jack.html
index 5871e50b..2ad70ba9 100644
--- a/zh-cn/setup/build/jack.html
+++ b/zh-cn/setup/build/jack.html
@@ -48,7 +48,7 @@
<h2 id="using_jack">Jack 编译服务器</h2>
-<aside class="note"><strong>注意</strong>:以下说明仅适用于在 Android 6.x 中使用 Jack 的情况;如需关于在 Android 7.x 和 8.x 中使用 Jack 的说明,请参阅 <a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md" class="external">Jack 服务器文档</a>。</aside>
+<aside class="note"><strong>注意</strong>:以下说明仅适用于在 Android 6.x 中使用 Jack 的情况;如需关于在 Android 7.x 和 8.x 中使用 Jack 的说明,请参阅<a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md" class="external">Jack 服务器文档</a>。</aside>
<p>首次使用 Jack 时,它会在您的计算机上启动一个本地 Jack 编译服务器。该服务器:</p>
diff --git a/zh-cn/setup/community.html b/zh-cn/setup/community.html
index 94a5487c..3f2b9bf3 100644
--- a/zh-cn/setup/community.html
+++ b/zh-cn/setup/community.html
@@ -198,7 +198,7 @@
<li>垃圾内容:我们非常讨厌垃圾内容,这种心情正如我们崇尚礼貌和尊重一样强烈,因此我们保留限制垃圾讨论内容的权利。<em></em>如果有人发布纯属垃圾的内容,我们会立即并永久禁止发布者使用相应论坛。
</li>
</ul>
-<p>友善是最重要的规则。请谨记:在任何情况下,我们的社区都不欢迎不尊重他人和粗鲁的行为。我们没有制定正式的政策来对付捣乱者,也希望永远都不需要制定这样的政策。不过,我们承诺会尽最大努力保证公平,并且我们始终会先尝试警告对方,警告无果后再禁止其使用相应论坛。</p>
+<p>友善是最重要的规则。请谨记:在任何情况下,我们的社区都不欢迎不尊重他人和粗鲁的行为。我们没有制定正式的政策来对付捣乱者,也希望永远都不需要制定这样的政策。不过,我们承诺会尽最大努力保证公平,并且始终会先尝试警告对方,警告无果后再禁止其使用相应论坛。</p>
<h3 id="contacting">与管理员联系</h3>
<p>如果您发现有人言行粗鲁,请制止他们。您也是相应论坛的一份子,因此您不必因为他人的无礼行为不是针对您而予以容忍。切记要有礼有节!请勿火上浇油。</p>
@@ -246,7 +246,7 @@
</ul>
<h2 id="for-business-inquiries">关于 Google 移动服务许可方面的问题</h2>
-<p>请通过 <a href="https://www.android.com/gms/contact/">GMS 联系</a>表单咨询有关 <a href="https://www.android.com/gms/">Google 移动服务</a>许可方面的问题。其他非 GMS 合作伙伴关系问询可发送至 <a href="mailto:android-partnerships@google.com">android-partnerships@google.com</a>。</p>
+<p>请通过 <a href="https://www.android.com/gms/">GMS 联系</a>表单咨询关于 <a href="https://www.android.com/gms/contact/">Google 移动服务</a>许可的问题。其他非 GMS 合作伙伴关系问询可发送至 <a href="mailto:android-partnerships@google.com">android-partnerships@google.com</a>。</p>
<p>我们会阅读收到的每封邮件,但无法一一进行回复。如果我们能够提供帮助,一定会与您联系!</p>