aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Partner Docs <noreply@android.com>2018-02-05 15:59:34 -0800
committerClay Murphy <claym@google.com>2018-02-05 16:04:12 -0800
commit89fb11b03292b58e124e81d6c6b9599696ba0218 (patch)
treef1be46b8204c78a4f1577890b055b07d37218119
parent4a76a4ad28bff6942fd2309be4a1cb8d5a602b11 (diff)
downloadsource.android.com-89fb11b03292b58e124e81d6c6b9599696ba0218.tar.gz
Docs: Changes to source.android.com
- 184600583 Update build numbers for Feb 2018 releases by Android Partner Docs <noreply@android.com> - 184590745 Remove extraneous and unclosed paragraph tags from Dalvik... by Clay Murphy <claym@google.com> - 184587224 Add information for wahoo (taimen/walleye) and easel. by Android Partner Docs <noreply@android.com> - 184576403 Removing migration file erroneously copied from Android r... by Clay Murphy <claym@google.com> - 184540868 Publish Feb 2018 Android & Pixel bulletins by Danielle Roberts <daroberts@google.com> - 184535876 Devsite localized content from translation request 8f7814... by Android Partner Docs <noreply@android.com> - 184359747 Devsite localized content from translation request 20f76f... by Android Partner Docs <noreply@android.com> - 184171494 Devsite localized content from translation request f8441e... by Android Partner Docs <noreply@android.com> - 184171240 Devsite localized content from translation request d07053... by Android Partner Docs <noreply@android.com> - 184171185 Devsite localized content from translation request fe3ff1... by Android Partner Docs <noreply@android.com> - 184171175 Devsite localized content from translation request d203cd... by Android Partner Docs <noreply@android.com> - 184063043 Add link to new Kernel section by Clay Murphy <claym@google.com> - 183935448 Change Opera to Vewd TV based on external feedback by Danielle Roberts <daroberts@google.com> - 183862107 Devsite localized content from translation request 5b7f62... by Android Partner Docs <noreply@android.com> PiperOrigin-RevId: 184600583 Change-Id: I1d2b3c0dba6acb25a1949d995a6d04f603af97f0
-rw-r--r--en/compatibility/source/devsite_template.html27
-rw-r--r--en/devices/tech/dalvik/dalvik-bytecode.html701
-rw-r--r--en/devices/tv/index.html143
-rw-r--r--en/security/_toc.yaml4
-rw-r--r--en/security/bulletin/2018-02-01.html642
-rw-r--r--en/security/bulletin/2018.html16
-rw-r--r--en/security/bulletin/index.html16
-rw-r--r--en/security/bulletin/pixel/2018-02-01.html627
-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.html131
-rw-r--r--en/setup/build-numbers.html30
-rw-r--r--en/setup/building-kernels.html20
-rw-r--r--zh-cn/_index.yaml15
-rw-r--r--zh-cn/compatibility/cts/setup.html18
-rw-r--r--zh-cn/devices/architecture/hidl-cpp/functions.html3
-rw-r--r--zh-cn/devices/architecture/hidl-cpp/index.html2
-rw-r--r--zh-cn/devices/architecture/hidl/hashing.html2
-rw-r--r--zh-cn/devices/architecture/hidl/types.html6
-rw-r--r--zh-cn/devices/architecture/hidl/versioning.html4
-rw-r--r--zh-cn/devices/architecture/kernel/modular-kernels.html12
-rw-r--r--zh-cn/devices/architecture/vndk/build-system.html296
-rw-r--r--zh-cn/devices/architecture/vndk/deftool.html19
-rw-r--r--zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html30
-rw-r--r--zh-cn/devices/architecture/vndk/enabling.html144
-rw-r--r--zh-cn/devices/architecture/vndk/extensions.html6
-rw-r--r--zh-cn/devices/architecture/vndk/index.html52
-rw-r--r--zh-cn/devices/architecture/vndk/linker-namespace.html759
-rw-r--r--zh-cn/devices/audio/aaudio.html14
-rw-r--r--zh-cn/devices/audio/terminology.html2
-rw-r--r--zh-cn/devices/sensors/hal-interface.html12
-rw-r--r--zh-cn/devices/sensors/report-modes.html2
-rw-r--r--zh-cn/devices/sensors/sensor-types.html9
-rw-r--r--zh-cn/devices/sensors/versioning.html4
-rw-r--r--zh-cn/devices/tech/admin/enterprise-telephony.html2
-rw-r--r--zh-cn/devices/tech/datausage/kernel-overview.html6
-rw-r--r--zh-cn/devices/tech/debug/libfuzzer.html25
-rw-r--r--zh-cn/devices/tech/display/night-light.html3
-rw-r--r--zh-cn/devices/tech/ota/ab_implement.html2
-rw-r--r--zh-cn/devices/tech/perf/boot-times.html3
-rw-r--r--zh-cn/devices/tech/vts/performance.html6
-rw-r--r--zh-cn/security/bulletin/2016-05-01.html62
-rw-r--r--zh-cn/security/bulletin/2016-11-01.html103
-rw-r--r--zh-cn/security/bulletin/2017-02-01.html150
-rw-r--r--zh-cn/security/bulletin/2017-03-01.html55
-rw-r--r--zh-cn/security/bulletin/2017-06-01.html17
-rw-r--r--zh-cn/security/bulletin/pixel/2017-12-01.html18
-rw-r--r--zh-cn/setup/building-kernels.html2
48 files changed, 3450 insertions, 802 deletions
diff --git a/en/compatibility/source/devsite_template.html b/en/compatibility/source/devsite_template.html
deleted file mode 100644
index e2b1ca01..00000000
--- a/en/compatibility/source/devsite_template.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<html devsite>
- <head>
- <title>{{title}}</title>
- <meta name="project_path" value="{{project_path}}" />
- <meta name="book_path" value="{{book_path}}" />
- </head>
- <body>
- <!--
- Copyright 2017 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.
- -->
-
-{{body_html}}
- </body>
-</html>
-
diff --git a/en/devices/tech/dalvik/dalvik-bytecode.html b/en/devices/tech/dalvik/dalvik-bytecode.html
index 8e18c0e8..16eac23c 100644
--- a/en/devices/tech/dalvik/dalvik-bytecode.html
+++ b/en/devices/tech/dalvik/dalvik-bytecode.html
@@ -184,28 +184,28 @@
<tr>
<td>01 12x</td>
<td>move vA, vB</td>
- <td><code>A:</code> destination register (4 bits)<br/>
+ <td><code>A:</code> destination register (4 bits)<br>
<code>B:</code> source register (4 bits)</td>
<td>Move the contents of one non-object register to another.</td>
</tr>
<tr>
<td>02 22x</td>
<td>move/from16 vAA, vBBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> source register (16 bits)</td>
<td>Move the contents of one non-object register to another.</td>
</tr>
<tr>
<td>03 32x</td>
<td>move/16 vAAAA, vBBBB</td>
- <td><code>A:</code> destination register (16 bits)<br/>
+ <td><code>A:</code> destination register (16 bits)<br>
<code>B:</code> source register (16 bits)</td>
<td>Move the contents of one non-object register to another.</td>
</tr>
<tr>
<td>04 12x</td>
<td>move-wide vA, vB</td>
- <td><code>A:</code> destination register pair (4 bits)<br/>
+ <td><code>A:</code> destination register pair (4 bits)<br>
<code>B:</code> source register pair (4 bits)</td>
<td>Move the contents of one register-pair to another.
<p class="note"><strong>Note:</strong>
@@ -218,7 +218,7 @@
<tr>
<td>05 22x</td>
<td>move-wide/from16 vAA, vBBBB</td>
- <td><code>A:</code> destination register pair (8 bits)<br/>
+ <td><code>A:</code> destination register pair (8 bits)<br>
<code>B:</code> source register pair (16 bits)</td>
<td>Move the contents of one register-pair to another.
<p class="note"><strong>Note:</strong>
@@ -229,7 +229,7 @@
<tr>
<td>06 32x</td>
<td>move-wide/16 vAAAA, vBBBB</td>
- <td><code>A:</code> destination register pair (16 bits)<br/>
+ <td><code>A:</code> destination register pair (16 bits)<br>
<code>B:</code> source register pair (16 bits)</td>
<td>Move the contents of one register-pair to another.
<p class="note"><strong>Note:</strong>
@@ -240,21 +240,21 @@
<tr>
<td>07 12x</td>
<td>move-object vA, vB</td>
- <td><code>A:</code> destination register (4 bits)<br/>
+ <td><code>A:</code> destination register (4 bits)<br>
<code>B:</code> source register (4 bits)</td>
<td>Move the contents of one object-bearing register to another.</td>
</tr>
<tr>
<td>08 22x</td>
<td>move-object/from16 vAA, vBBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> source register (16 bits)</td>
<td>Move the contents of one object-bearing register to another.</td>
</tr>
<tr>
<td>09 32x</td>
<td>move-object/16 vAAAA, vBBBB</td>
- <td><code>A:</code> destination register (16 bits)<br/>
+ <td><code>A:</code> destination register (16 bits)<br>
<code>B:</code> source register (16 bits)</td>
<td>Move the contents of one object-bearing register to another.</td>
</tr>
@@ -327,7 +327,7 @@
<tr>
<td>12 11n</td>
<td>const/4 vA, #+B</td>
- <td><code>A:</code> destination register (4 bits)<br/>
+ <td><code>A:</code> destination register (4 bits)<br>
<code>B:</code> signed int (4 bits)</td>
<td>Move the given literal value (sign-extended to 32 bits) into
the specified register.</td>
@@ -335,7 +335,7 @@
<tr>
<td>13 21s</td>
<td>const/16 vAA, #+BBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> signed int (16 bits)</td>
<td>Move the given literal value (sign-extended to 32 bits) into
the specified register.</td>
@@ -343,14 +343,14 @@
<tr>
<td>14 31i</td>
<td>const vAA, #+BBBBBBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> arbitrary 32-bit constant</td>
<td>Move the given literal value into the specified register.</td>
</tr>
<tr>
<td>15 21h</td>
<td>const/high16 vAA, #+BBBB0000</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> signed int (16 bits)</td>
<td>Move the given literal value (right-zero-extended to 32 bits) into
the specified register.</td>
@@ -358,7 +358,7 @@
<tr>
<td>16 21s</td>
<td>const-wide/16 vAA, #+BBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> signed int (16 bits)</td>
<td>Move the given literal value (sign-extended to 64 bits) into
the specified register-pair.</td>
@@ -366,7 +366,7 @@
<tr>
<td>17 31i</td>
<td>const-wide/32 vAA, #+BBBBBBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> signed int (32 bits)</td>
<td>Move the given literal value (sign-extended to 64 bits) into
the specified register-pair.</td>
@@ -374,7 +374,7 @@
<tr>
<td>18 51l</td>
<td>const-wide vAA, #+BBBBBBBBBBBBBBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> arbitrary double-width (64-bit) constant</td>
<td>Move the given literal value into
the specified register-pair.</td>
@@ -382,7 +382,7 @@
<tr>
<td>19 21h</td>
<td>const-wide/high16 vAA, #+BBBB000000000000</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> signed int (16 bits)</td>
<td>Move the given literal value (right-zero-extended to 64 bits) into
the specified register-pair.</td>
@@ -390,7 +390,7 @@
<tr>
<td>1a 21c</td>
<td>const-string vAA, string@BBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> string index</td>
<td>Move a reference to the string specified by the given index into the
specified register.</td>
@@ -398,7 +398,7 @@
<tr>
<td>1b 31c</td>
<td>const-string/jumbo vAA, string@BBBBBBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> string index</td>
<td>Move a reference to the string specified by the given index into the
specified register.</td>
@@ -406,7 +406,7 @@
<tr>
<td>1c 21c</td>
<td>const-class vAA, type@BBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> type index</td>
<td>Move a reference to the class specified by the given index into the
specified register. In the case where the indicated type is primitive,
@@ -441,7 +441,7 @@
<tr>
<td>1f 21c</td>
<td>check-cast vAA, type@BBBB</td>
- <td><code>A:</code> reference-bearing register (8 bits)<br/>
+ <td><code>A:</code> reference-bearing register (8 bits)<br>
<code>B:</code> type index (16 bits)</td>
<td>Throw a <code>ClassCastException</code> if the reference in the
given register cannot be cast to the indicated type.
@@ -454,8 +454,8 @@
<tr>
<td>20 22c</td>
<td>instance-of vA, vB, type@CCCC</td>
- <td><code>A:</code> destination register (4 bits)<br/>
- <code>B:</code> reference-bearing register (4 bits)<br/>
+ <td><code>A:</code> destination register (4 bits)<br>
+ <code>B:</code> reference-bearing register (4 bits)<br>
<code>C:</code> type index (16 bits)</td>
<td>Store in the given destination register <code>1</code>
if the indicated reference is an instance of the given type,
@@ -468,7 +468,7 @@
<tr>
<td>21 12x</td>
<td>array-length vA, vB</td>
- <td><code>A:</code> destination register (4 bits)<br/>
+ <td><code>A:</code> destination register (4 bits)<br>
<code>B:</code> array reference-bearing register (4 bits)</td>
<td>Store in the given destination register the length of the indicated
array, in entries</td>
@@ -476,7 +476,7 @@
<tr>
<td>22 21c</td>
<td>new-instance vAA, type@BBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> type index</td>
<td>Construct a new instance of the indicated type, storing a
reference to it in the destination. The type must refer to a
@@ -485,8 +485,8 @@
<tr>
<td>23 22c</td>
<td>new-array vA, vB, type@CCCC</td>
- <td><code>A:</code> destination register (4 bits)<br/>
- <code>B:</code> size register<br/>
+ <td><code>A:</code> destination register (4 bits)<br>
+ <code>B:</code> size register<br>
<code>C:</code> type index</td>
<td>Construct a new array of the indicated type and size. The type
must be an array type.</td>
@@ -495,8 +495,8 @@
<td>24 35c</td>
<td>filled-new-array {vC, vD, vE, vF, vG}, type@BBBB</td>
<td>
- <code>A:</code> array size and argument word count (4 bits)<br/>
- <code>B:</code> type index (16 bits)<br/>
+ <code>A:</code> array size and argument word count (4 bits)<br>
+ <code>B:</code> type index (16 bits)<br>
<code>C..G:</code> argument registers (4 bits each)
</td>
<td>Construct an array of the given type and size, filling it with the
@@ -512,9 +512,9 @@
<tr>
<td>25 3rc</td>
<td>filled-new-array/range {vCCCC .. vNNNN}, type@BBBB</td>
- <td><code>A:</code> array size and argument word count (8 bits)<br/>
- <code>B:</code> type index (16 bits)<br/>
- <code>C:</code> first argument register (16 bits)<br/>
+ <td><code>A:</code> array size and argument word count (8 bits)<br>
+ <code>B:</code> type index (16 bits)<br>
+ <code>C:</code> first argument register (16 bits)<br>
<code>N = A + C - 1</code></td>
<td>Construct an array of the given type and size, filling it with
the supplied contents. Clarifications and restrictions are the same
@@ -524,7 +524,7 @@
<td>26 31t</td>
<td>fill-array-data vAA, +BBBBBBBB <i>(with supplemental data as specified
below in "<code>fill-array-data-payload</code> Format")</i></td>
- <td><code>A:</code> array reference (8 bits)<br/>
+ <td><code>A:</code> array reference (8 bits)<br>
<code>B:</code> signed "branch" offset to table data pseudo-instruction
(32 bits)
</td>
@@ -538,7 +538,7 @@
<tr>
<td>27 11x</td>
<td>throw vAA</td>
- <td><code>A:</code> exception-bearing register (8 bits)<br/></td>
+ <td><code>A:</code> exception-bearing register (8 bits)<br></td>
<td>Throw the indicated exception.</td>
</tr>
<tr>
@@ -555,7 +555,7 @@
<tr>
<td>29 20t</td>
<td>goto/16 +AAAA</td>
- <td><code>A:</code> signed branch offset (16 bits)<br/></td>
+ <td><code>A:</code> signed branch offset (16 bits)<br></td>
<td>Unconditionally jump to the indicated instruction.
<p class="note"><strong>Note:</strong>
The branch offset must not be <code>0</code>. (A spin
@@ -566,14 +566,14 @@
<tr>
<td>2a 30t</td>
<td>goto/32 +AAAAAAAA</td>
- <td><code>A:</code> signed branch offset (32 bits)<br/></td>
+ <td><code>A:</code> signed branch offset (32 bits)<br></td>
<td>Unconditionally jump to the indicated instruction.</td>
</tr>
<tr>
<td>2b 31t</td>
<td>packed-switch vAA, +BBBBBBBB <i>(with supplemental data as
specified below in "<code>packed-switch-payload</code> Format")</i></td>
- <td><code>A:</code> register to test<br/>
+ <td><code>A:</code> register to test<br>
<code>B:</code> signed "branch" offset to table data pseudo-instruction
(32 bits)
</td>
@@ -587,7 +587,7 @@
<td>2c 31t</td>
<td>sparse-switch vAA, +BBBBBBBB <i>(with supplemental data as
specified below in "<code>sparse-switch-payload</code> Format")</i></td>
- <td><code>A:</code> register to test<br/>
+ <td><code>A:</code> register to test<br>
<code>B:</code> signed "branch" offset to table data pseudo-instruction
(32 bits)
</td>
@@ -598,15 +598,15 @@
</tr>
<tr>
<td>2d..31 23x</td>
- <td>cmp<i>kind</i> vAA, vBB, vCC<br/>
- 2d: cmpl-float <i>(lt bias)</i><br/>
- 2e: cmpg-float <i>(gt bias)</i><br/>
- 2f: cmpl-double <i>(lt bias)</i><br/>
- 30: cmpg-double <i>(gt bias)</i><br/>
+ <td>cmp<i>kind</i> vAA, vBB, vCC<br>
+ 2d: cmpl-float <i>(lt bias)</i><br>
+ 2e: cmpg-float <i>(gt bias)</i><br>
+ 2f: cmpl-double <i>(lt bias)</i><br>
+ 30: cmpg-double <i>(gt bias)</i><br>
31: cmp-long
</td>
- <td><code>A:</code> destination register (8 bits)<br/>
- <code>B:</code> first source register or pair<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
+ <code>B:</code> first source register or pair<br>
<code>C:</code> second source register or pair</td>
<td>Perform the indicated floating point or <code>long</code> comparison,
setting <code>a</code> to <code>0</code> if <code>b == c</code>,
@@ -626,16 +626,16 @@
</tr>
<tr>
<td>32..37 22t</td>
- <td>if-<i>test</i> vA, vB, +CCCC<br/>
- 32: if-eq<br/>
- 33: if-ne<br/>
- 34: if-lt<br/>
- 35: if-ge<br/>
- 36: if-gt<br/>
- 37: if-le<br/>
- </td>
- <td><code>A:</code> first register to test (4 bits)<br/>
- <code>B:</code> second register to test (4 bits)<br/>
+ <td>if-<i>test</i> vA, vB, +CCCC<br>
+ 32: if-eq<br>
+ 33: if-ne<br>
+ 34: if-lt<br>
+ 35: if-ge<br>
+ 36: if-gt<br>
+ 37: if-le<br>
+ </td>
+ <td><code>A:</code> first register to test (4 bits)<br>
+ <code>B:</code> second register to test (4 bits)<br>
<code>C:</code> signed branch offset (16 bits)</td>
<td>Branch to the given destination if the given two registers' values
compare as specified.
@@ -648,15 +648,15 @@
</tr>
<tr>
<td>38..3d 21t</td>
- <td>if-<i>test</i>z vAA, +BBBB<br/>
- 38: if-eqz<br/>
- 39: if-nez<br/>
- 3a: if-ltz<br/>
- 3b: if-gez<br/>
- 3c: if-gtz<br/>
- 3d: if-lez<br/>
- </td>
- <td><code>A:</code> register to test (8 bits)<br/>
+ <td>if-<i>test</i>z vAA, +BBBB<br>
+ 38: if-eqz<br>
+ 39: if-nez<br>
+ 3a: if-ltz<br>
+ 3b: if-gez<br>
+ 3c: if-gtz<br>
+ 3d: if-lez<br>
+ </td>
+ <td><code>A:</code> register to test (8 bits)<br>
<code>B:</code> signed branch offset (16 bits)</td>
<td>Branch to the given destination if the given register's value compares
with 0 as specified.
@@ -675,50 +675,50 @@
</tr>
<tr>
<td>44..51 23x</td>
- <td><i>arrayop</i> vAA, vBB, vCC<br/>
- 44: aget<br/>
- 45: aget-wide<br/>
- 46: aget-object<br/>
- 47: aget-boolean<br/>
- 48: aget-byte<br/>
- 49: aget-char<br/>
- 4a: aget-short<br/>
- 4b: aput<br/>
- 4c: aput-wide<br/>
- 4d: aput-object<br/>
- 4e: aput-boolean<br/>
- 4f: aput-byte<br/>
- 50: aput-char<br/>
+ <td><i>arrayop</i> vAA, vBB, vCC<br>
+ 44: aget<br>
+ 45: aget-wide<br>
+ 46: aget-object<br>
+ 47: aget-boolean<br>
+ 48: aget-byte<br>
+ 49: aget-char<br>
+ 4a: aget-short<br>
+ 4b: aput<br>
+ 4c: aput-wide<br>
+ 4d: aput-object<br>
+ 4e: aput-boolean<br>
+ 4f: aput-byte<br>
+ 50: aput-char<br>
51: aput-short
</td>
<td><code>A:</code> value register or pair; may be source or dest
- (8 bits)<br/>
- <code>B:</code> array register (8 bits)<br/>
+ (8 bits)<br>
+ <code>B:</code> array register (8 bits)<br>
<code>C:</code> index register (8 bits)</td>
<td>Perform the identified array operation at the identified index of
the given array, loading or storing into the value register.</td>
</tr>
<tr>
<td>52..5f 22c</td>
- <td>i<i>instanceop</i> vA, vB, field@CCCC<br/>
- 52: iget<br/>
- 53: iget-wide<br/>
- 54: iget-object<br/>
- 55: iget-boolean<br/>
- 56: iget-byte<br/>
- 57: iget-char<br/>
- 58: iget-short<br/>
- 59: iput<br/>
- 5a: iput-wide<br/>
- 5b: iput-object<br/>
- 5c: iput-boolean<br/>
- 5d: iput-byte<br/>
- 5e: iput-char<br/>
+ <td>i<i>instanceop</i> vA, vB, field@CCCC<br>
+ 52: iget<br>
+ 53: iget-wide<br>
+ 54: iget-object<br>
+ 55: iget-boolean<br>
+ 56: iget-byte<br>
+ 57: iget-char<br>
+ 58: iget-short<br>
+ 59: iput<br>
+ 5a: iput-wide<br>
+ 5b: iput-object<br>
+ 5c: iput-boolean<br>
+ 5d: iput-byte<br>
+ 5e: iput-char<br>
5f: iput-short
</td>
<td><code>A:</code> value register or pair; may be source or dest
- (4 bits)<br/>
- <code>B:</code> object register (4 bits)<br/>
+ (4 bits)<br>
+ <code>B:</code> object register (4 bits)<br>
<code>C:</code> instance field reference index (16 bits)</td>
<td>Perform the identified object instance field operation with
the identified field, loading or storing into the value register.
@@ -728,24 +728,24 @@
</tr>
<tr>
<td>60..6d 21c</td>
- <td>s<i>staticop</i> vAA, field@BBBB<br/>
- 60: sget<br/>
- 61: sget-wide<br/>
- 62: sget-object<br/>
- 63: sget-boolean<br/>
- 64: sget-byte<br/>
- 65: sget-char<br/>
- 66: sget-short<br/>
- 67: sput<br/>
- 68: sput-wide<br/>
- 69: sput-object<br/>
- 6a: sput-boolean<br/>
- 6b: sput-byte<br/>
- 6c: sput-char<br/>
+ <td>s<i>staticop</i> vAA, field@BBBB<br>
+ 60: sget<br>
+ 61: sget-wide<br>
+ 62: sget-object<br>
+ 63: sget-boolean<br>
+ 64: sget-byte<br>
+ 65: sget-char<br>
+ 66: sget-short<br>
+ 67: sput<br>
+ 68: sput-wide<br>
+ 69: sput-object<br>
+ 6a: sput-boolean<br>
+ 6b: sput-byte<br>
+ 6c: sput-char<br>
6d: sput-short
</td>
<td><code>A:</code> value register or pair; may be source or dest
- (8 bits)<br/>
+ (8 bits)<br>
<code>B:</code> static field reference index (16 bits)</td>
<td>Perform the identified object static field operation with the identified
static field, loading or storing into the value register.
@@ -755,16 +755,16 @@
</tr>
<tr>
<td>6e..72 35c</td>
- <td>invoke-<i>kind</i> {vC, vD, vE, vF, vG}, meth@BBBB<br/>
- 6e: invoke-virtual<br/>
- 6f: invoke-super<br/>
- 70: invoke-direct<br/>
- 71: invoke-static<br/>
+ <td>invoke-<i>kind</i> {vC, vD, vE, vF, vG}, meth@BBBB<br>
+ 6e: invoke-virtual<br>
+ 6f: invoke-super<br>
+ 70: invoke-direct<br>
+ 71: invoke-static<br>
72: invoke-interface
</td>
<td>
- <code>A:</code> argument word count (4 bits)<br/>
- <code>B:</code> method reference index (16 bits)<br/>
+ <code>A:</code> argument word count (4 bits)<br>
+ <code>B:</code> method reference index (16 bits)<br>
<code>C..G:</code> argument registers (4 bits each)
</td>
<td>Call the indicated method. The result (if any) may be stored
@@ -808,16 +808,16 @@
</tr>
<tr>
<td>74..78 3rc</td>
- <td>invoke-<i>kind</i>/range {vCCCC .. vNNNN}, meth@BBBB<br/>
- 74: invoke-virtual/range<br/>
- 75: invoke-super/range<br/>
- 76: invoke-direct/range<br/>
- 77: invoke-static/range<br/>
+ <td>invoke-<i>kind</i>/range {vCCCC .. vNNNN}, meth@BBBB<br>
+ 74: invoke-virtual/range<br>
+ 75: invoke-super/range<br>
+ 76: invoke-direct/range<br>
+ 77: invoke-static/range<br>
78: invoke-interface/range
</td>
- <td><code>A:</code> argument word count (8 bits)<br/>
- <code>B:</code> method reference index (16 bits)<br/>
- <code>C:</code> first argument register (16 bits)<br/>
+ <td><code>A:</code> argument word count (8 bits)<br>
+ <code>B:</code> method reference index (16 bits)<br>
+ <code>C:</code> first argument register (16 bits)<br>
<code>N = A + C - 1</code></td>
<td>Call the indicated method. See first <code>invoke-<i>kind</i></code>
description above for details, caveats, and suggestions.
@@ -831,30 +831,30 @@
</tr>
<tr>
<td>7b..8f 12x</td>
- <td><i>unop</i> vA, vB<br/>
- 7b: neg-int<br/>
- 7c: not-int<br/>
- 7d: neg-long<br/>
- 7e: not-long<br/>
- 7f: neg-float<br/>
- 80: neg-double<br/>
- 81: int-to-long<br/>
- 82: int-to-float<br/>
- 83: int-to-double<br/>
- 84: long-to-int<br/>
- 85: long-to-float<br/>
- 86: long-to-double<br/>
- 87: float-to-int<br/>
- 88: float-to-long<br/>
- 89: float-to-double<br/>
- 8a: double-to-int<br/>
- 8b: double-to-long<br/>
- 8c: double-to-float<br/>
- 8d: int-to-byte<br/>
- 8e: int-to-char<br/>
+ <td><i>unop</i> vA, vB<br>
+ 7b: neg-int<br>
+ 7c: not-int<br>
+ 7d: neg-long<br>
+ 7e: not-long<br>
+ 7f: neg-float<br>
+ 80: neg-double<br>
+ 81: int-to-long<br>
+ 82: int-to-float<br>
+ 83: int-to-double<br>
+ 84: long-to-int<br>
+ 85: long-to-float<br>
+ 86: long-to-double<br>
+ 87: float-to-int<br>
+ 88: float-to-long<br>
+ 89: float-to-double<br>
+ 8a: double-to-int<br>
+ 8b: double-to-long<br>
+ 8c: double-to-float<br>
+ 8d: int-to-byte<br>
+ 8e: int-to-char<br>
8f: int-to-short
</td>
- <td><code>A:</code> destination register or pair (4 bits)<br/>
+ <td><code>A:</code> destination register or pair (4 bits)<br>
<code>B:</code> source register or pair (4 bits)</td>
<td>Perform the identified unary operation on the source register,
storing the result in the destination register.</td>
@@ -862,42 +862,42 @@
<tr>
<td>90..af 23x</td>
- <td><i>binop</i> vAA, vBB, vCC<br/>
- 90: add-int<br/>
- 91: sub-int<br/>
- 92: mul-int<br/>
- 93: div-int<br/>
- 94: rem-int<br/>
- 95: and-int<br/>
- 96: or-int<br/>
- 97: xor-int<br/>
- 98: shl-int<br/>
- 99: shr-int<br/>
- 9a: ushr-int<br/>
- 9b: add-long<br/>
- 9c: sub-long<br/>
- 9d: mul-long<br/>
- 9e: div-long<br/>
- 9f: rem-long<br/>
- a0: and-long<br/>
- a1: or-long<br/>
- a2: xor-long<br/>
- a3: shl-long<br/>
- a4: shr-long<br/>
- a5: ushr-long<br/>
- a6: add-float<br/>
- a7: sub-float<br/>
- a8: mul-float<br/>
- a9: div-float<br/>
- aa: rem-float<br/>
- ab: add-double<br/>
- ac: sub-double<br/>
- ad: mul-double<br/>
- ae: div-double<br/>
+ <td><i>binop</i> vAA, vBB, vCC<br>
+ 90: add-int<br>
+ 91: sub-int<br>
+ 92: mul-int<br>
+ 93: div-int<br>
+ 94: rem-int<br>
+ 95: and-int<br>
+ 96: or-int<br>
+ 97: xor-int<br>
+ 98: shl-int<br>
+ 99: shr-int<br>
+ 9a: ushr-int<br>
+ 9b: add-long<br>
+ 9c: sub-long<br>
+ 9d: mul-long<br>
+ 9e: div-long<br>
+ 9f: rem-long<br>
+ a0: and-long<br>
+ a1: or-long<br>
+ a2: xor-long<br>
+ a3: shl-long<br>
+ a4: shr-long<br>
+ a5: ushr-long<br>
+ a6: add-float<br>
+ a7: sub-float<br>
+ a8: mul-float<br>
+ a9: div-float<br>
+ aa: rem-float<br>
+ ab: add-double<br>
+ ac: sub-double<br>
+ ad: mul-double<br>
+ ae: div-double<br>
af: rem-double
</td>
- <td><code>A:</code> destination register or pair (8 bits)<br/>
- <code>B:</code> first source register or pair (8 bits)<br/>
+ <td><code>A:</code> destination register or pair (8 bits)<br>
+ <code>B:</code> first source register or pair (8 bits)<br>
<code>C:</code> second source register or pair (8 bits)</td>
<td>Perform the identified binary operation on the two source registers,
storing the result in the destination register.
@@ -912,42 +912,42 @@
</tr>
<tr>
<td>b0..cf 12x</td>
- <td><i>binop</i>/2addr vA, vB<br/>
- b0: add-int/2addr<br/>
- b1: sub-int/2addr<br/>
- b2: mul-int/2addr<br/>
- b3: div-int/2addr<br/>
- b4: rem-int/2addr<br/>
- b5: and-int/2addr<br/>
- b6: or-int/2addr<br/>
- b7: xor-int/2addr<br/>
- b8: shl-int/2addr<br/>
- b9: shr-int/2addr<br/>
- ba: ushr-int/2addr<br/>
- bb: add-long/2addr<br/>
- bc: sub-long/2addr<br/>
- bd: mul-long/2addr<br/>
- be: div-long/2addr<br/>
- bf: rem-long/2addr<br/>
- c0: and-long/2addr<br/>
- c1: or-long/2addr<br/>
- c2: xor-long/2addr<br/>
- c3: shl-long/2addr<br/>
- c4: shr-long/2addr<br/>
- c5: ushr-long/2addr<br/>
- c6: add-float/2addr<br/>
- c7: sub-float/2addr<br/>
- c8: mul-float/2addr<br/>
- c9: div-float/2addr<br/>
- ca: rem-float/2addr<br/>
- cb: add-double/2addr<br/>
- cc: sub-double/2addr<br/>
- cd: mul-double/2addr<br/>
- ce: div-double/2addr<br/>
+ <td><i>binop</i>/2addr vA, vB<br>
+ b0: add-int/2addr<br>
+ b1: sub-int/2addr<br>
+ b2: mul-int/2addr<br>
+ b3: div-int/2addr<br>
+ b4: rem-int/2addr<br>
+ b5: and-int/2addr<br>
+ b6: or-int/2addr<br>
+ b7: xor-int/2addr<br>
+ b8: shl-int/2addr<br>
+ b9: shr-int/2addr<br>
+ ba: ushr-int/2addr<br>
+ bb: add-long/2addr<br>
+ bc: sub-long/2addr<br>
+ bd: mul-long/2addr<br>
+ be: div-long/2addr<br>
+ bf: rem-long/2addr<br>
+ c0: and-long/2addr<br>
+ c1: or-long/2addr<br>
+ c2: xor-long/2addr<br>
+ c3: shl-long/2addr<br>
+ c4: shr-long/2addr<br>
+ c5: ushr-long/2addr<br>
+ c6: add-float/2addr<br>
+ c7: sub-float/2addr<br>
+ c8: mul-float/2addr<br>
+ c9: div-float/2addr<br>
+ ca: rem-float/2addr<br>
+ cb: add-double/2addr<br>
+ cc: sub-double/2addr<br>
+ cd: mul-double/2addr<br>
+ ce: div-double/2addr<br>
cf: rem-double/2addr
</td>
<td><code>A:</code> destination and first source register or pair
- (4 bits)<br/>
+ (4 bits)<br>
<code>B:</code> second source register or pair (4 bits)</td>
<td>Perform the identified binary operation on the two source registers,
storing the result in the first source register.
@@ -964,18 +964,18 @@
</tr>
<tr>
<td>d0..d7 22s</td>
- <td><i>binop</i>/lit16 vA, vB, #+CCCC<br/>
- d0: add-int/lit16<br/>
- d1: rsub-int (reverse subtract)<br/>
- d2: mul-int/lit16<br/>
- d3: div-int/lit16<br/>
- d4: rem-int/lit16<br/>
- d5: and-int/lit16<br/>
- d6: or-int/lit16<br/>
+ <td><i>binop</i>/lit16 vA, vB, #+CCCC<br>
+ d0: add-int/lit16<br>
+ d1: rsub-int (reverse subtract)<br>
+ d2: mul-int/lit16<br>
+ d3: div-int/lit16<br>
+ d4: rem-int/lit16<br>
+ d5: and-int/lit16<br>
+ d6: or-int/lit16<br>
d7: xor-int/lit16
</td>
- <td><code>A:</code> destination register (4 bits)<br/>
- <code>B:</code> source register (4 bits)<br/>
+ <td><code>A:</code> destination register (4 bits)<br>
+ <code>B:</code> source register (4 bits)<br>
<code>C:</code> signed int constant (16 bits)</td>
<td>Perform the indicated binary op on the indicated register (first
argument) and literal value (second argument), storing the result in
@@ -988,21 +988,21 @@
</tr>
<tr>
<td>d8..e2 22b</td>
- <td><i>binop</i>/lit8 vAA, vBB, #+CC<br/>
- d8: add-int/lit8<br/>
- d9: rsub-int/lit8<br/>
- da: mul-int/lit8<br/>
- db: div-int/lit8<br/>
- dc: rem-int/lit8<br/>
- dd: and-int/lit8<br/>
- de: or-int/lit8<br/>
- df: xor-int/lit8<br/>
- e0: shl-int/lit8<br/>
- e1: shr-int/lit8<br/>
+ <td><i>binop</i>/lit8 vAA, vBB, #+CC<br>
+ d8: add-int/lit8<br>
+ d9: rsub-int/lit8<br>
+ da: mul-int/lit8<br>
+ db: div-int/lit8<br>
+ dc: rem-int/lit8<br>
+ dd: and-int/lit8<br>
+ de: or-int/lit8<br>
+ df: xor-int/lit8<br>
+ e0: shl-int/lit8<br>
+ e1: shr-int/lit8<br>
e2: ushr-int/lit8
</td>
- <td><code>A:</code> destination register (8 bits)<br/>
- <code>B:</code> source register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
+ <code>B:</code> source register (8 bits)<br>
<code>C:</code> signed int constant (8 bits)</td>
<td>Perform the indicated binary op on the indicated register (first
argument) and literal value (second argument), storing the result
@@ -1021,42 +1021,43 @@
<td>fa 45cc</td>
<td>invoke-polymorphic {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH</td>
<td>
- <code>A:</code> argument word count (4 bits) <br/>
- <code>B:</code> method reference index (16 bits) <br/>
- <code>C:</code> receiver (16 bits) <br/>
- <code>D..G:</code> argument registers (4 bits each) <br/>
+ <code>A:</code> argument word count (4 bits) <br>
+ <code>B:</code> method reference index (16 bits) <br>
+ <code>C:</code> receiver (16 bits) <br>
+ <code>D..G:</code> argument registers (4 bits each) <br>
<code>H:</code> prototype reference index (16 bits)
</td>
<td>
Invoke the indicated signature polymorphic method. The result (if any) may be stored
with an appropriate <code>move-result*</code> variant as the immediately
- subsequent instruction.
- <p> The method reference must be to a signature polymorphic method, such as
+ subsequent instruction.<br><br>
+ The method reference must be to a signature polymorphic method, such as
<code>java.lang.invoke.MethodHandle.invoke</code> or
- <code>java.lang.invoke.MethodHandle.invokeExact</code>.
- <p> The receiver must be an object supporting the signature polymorphic method being invoked.
- <p> The prototype reference describes the argument types provided
- and the expected return type.
- <p> The <code>invoke-polymorphic</code> bytecode may raise exceptions when it
- executes. The exceptions are described in the API documentation
- for the signature polymorphic method being invoked.
- <p> Present in Dex files from version <code>038</code> onwards.
+ <code>java.lang.invoke.MethodHandle.invokeExact</code>.<br><br>
+ The receiver must be an object supporting the signature polymorphic
+ method being invoked.<br><br>
+ The prototype reference describes the argument types provided
+ and the expected return type.<br><br>
+ The <code>invoke-polymorphic</code> bytecode may raise exceptions when it
+ executes. The exceptions are described in the API documentation
+ for the signature polymorphic method being invoked.<br><br>
+ Present in Dex files from version <code>038</code> onwards.
</td>
</tr>
<tr>
<td>fb 4rcc</td>
<td>invoke-polymorphic/range {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH</td>
<td>
- <code>A:</code> argument word count (8 bits) <br/>
- <code>B:</code> method reference index (16 bits) <br/>
- <code>C:</code> receiver (16 bits) <br/>
- <code>H:</code> prototype reference index (16 bits) <br/>
+ <code>A:</code> argument word count (8 bits) <br>
+ <code>B:</code> method reference index (16 bits) <br>
+ <code>C:</code> receiver (16 bits) <br>
+ <code>H:</code> prototype reference index (16 bits) <br>
<code>N = A + C - 1</code>
</td>
<td>
Invoke the indicated method handle. See the <code>invoke-polymorphic</code>
- description above for details.
- <p> Present in Dex files from version <code>038</code> onwards.
+ description above for details.<br><br>
+ Present in Dex files from version <code>038</code> onwards.
</td>
</tr>
<tr>
@@ -1070,38 +1071,41 @@
<td> Resolves and invokes the indicated call site.
The result from the invocation (if any) may be stored with an
appropriate <code>move-result*</code> variant as the immediately
- subsequent instruction.
+ subsequent instruction.<br><br>
- <p> This instruction executes in two phases: call site
- resolution and call site invocation.
+ This instruction executes in two phases: call site
+ resolution and call site invocation.<br><br>
- <p> Call site resolution checks whether the indicated
- call site has an associated <code>java.lang.invoke.CallSite</code> instance.
- If not, the bootstrap linker method for the indicated call site is
- invoked using arguments present in the DEX file
- (see <a href="dex-format.html#call-site-item">call_site_item</a>). The
- bootstrap linker method returns
- a <code>java.lang.invoke.CallSite</code> instance that will then
- be associated with the indicated call site if no association
- exists. Another thread may have already made the association first,
- and if so execution of the instruction continues with the
- first associated <code>java.lang.invoke.CallSite</code> instance.
+ Call site resolution checks whether the indicated
+ call site has an associated <code>java.lang.invoke.CallSite</code> instance.
+ If not, the bootstrap linker method for the indicated call site is
+ invoked using arguments present in the DEX file
+ (see <a href="dex-format.html#call-site-item">call_site_item</a>). The
+ bootstrap linker method returns
+ a <code>java.lang.invoke.CallSite</code> instance that will then
+ be associated with the indicated call site if no association
+ exists. Another thread may have already made the association first,
+ and if so execution of the instruction continues with the
+ first associated <code>java.lang.invoke.CallSite</code> instance.<br><br>
- <p> Call site invocation is made on the <code>java.lang.invoke.MethodHandle</code> target of the
- resolved <code>java.lang.invoke.CallSite</code> instance. The target is invoked as if
- executing <code>invoke-polymorphic</code> (described above)
- using the method handle and arguments to
- the <code>invoke-custom</code> instruction as the arguments to an
- exact method handle invocation.
+ Call site invocation is made on the
+ <code>java.lang.invoke.MethodHandle</code> target of the resolved
+ <code>java.lang.invoke.CallSite</code> instance. The target is invoked as
+ if executing <code>invoke-polymorphic</code> (described above) using the
+ method handle and arguments to the <code>invoke-custom</code> instruction
+ as the arguments to an exact method handle invocation.<br><br>
- <p> Exceptions raised by the bootstrap linker method are wrapped
- in a <code>java.lang.BootstrapMethodError</code>. A <code>BootstrapMethodError</code> is also raised if:
+ Exceptions raised by the bootstrap linker method are wrapped
+ in a <code>java.lang.BootstrapMethodError</code>. A
+ <code>BootstrapMethodError</code> is also raised if:
<ul>
- <li>the bootstrap linker method fails to return a <code>java.lang.invoke.CallSite</code> instance.</li>
- <li>the returned <code>java.lang.invoke.CallSite</code> has a <code>null</code> method handle target.</li>
+ <li>the bootstrap linker method fails to return a
+ <code>java.lang.invoke.CallSite</code> instance.</li>
+ <li>the returned <code>java.lang.invoke.CallSite</code> has a
+ <code>null</code> method handle target.</li>
<li>the method handle target is not of the requested type.</li>
</ul>
- <p> Present in Dex files from version <code>038</code> onwards.
+ Present in Dex files from version <code>038</code> onwards.
</td>
</tr>
<tr>
@@ -1114,30 +1118,31 @@
<code>N = A + C - 1</code>
</td>
<td>
- Resolve and invoke a call site. See the <code>invoke-custom</code> description above for details.
- <p> Present in Dex files from version <code>038</code> onwards.
+ Resolve and invoke a call site. See the <code>invoke-custom</code>
+ description above for details.<br><br>
+ Present in Dex files from version <code>038</code> onwards.
</td>
</tr>
<tr>
<td>fe 21c</td>
<td>const-method-handle vAA, method_handle@BBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> method handle index (16 bits)</td>
<td>
Move a reference to the method handle specified by the given index into the
- specified register.
- <p> Present in Dex files from version <code>039</code> onwards.
+ specified register.<br><br>
+ Present in Dex files from version <code>039</code> onwards.
</td>
</tr>
<tr>
<td>ff 21c</td>
<td>const-method-type vAA, proto@BBBB</td>
- <td><code>A:</code> destination register (8 bits)<br/>
+ <td><code>A:</code> destination register (8 bits)<br>
<code>B:</code> method prototype reference (16 bits)</td>
<td>
Move a reference to the method prototype specified by the given index into the
- specified register.
- <p> Present in Dex files from version <code>039</code> onwards.
+ specified register.<br><br>
+ Present in Dex files from version <code>039</code> onwards.
</td>
</tr>
</tbody>
@@ -1276,56 +1281,56 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
<tbody>
<tr>
<td>neg-int</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
int32 result = -a;
</td>
<td>Unary twos-complement.</td>
</tr>
<tr>
<td>not-int</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
int32 result = ~a;
</td>
<td>Unary ones-complement.</td>
</tr>
<tr>
<td>neg-long</td>
- <td>int64 a;<br/>
+ <td>int64 a;<br>
int64 result = -a;
</td>
<td>Unary twos-complement.</td>
</tr>
<tr>
<td>not-long</td>
- <td>int64 a;<br/>
+ <td>int64 a;<br>
int64 result = ~a;
</td>
<td>Unary ones-complement.</td>
</tr>
<tr>
<td>neg-float</td>
- <td>float a;<br/>
+ <td>float a;<br>
float result = -a;
</td>
<td>Floating point negation.</td>
</tr>
<tr>
<td>neg-double</td>
- <td>double a;<br/>
+ <td>double a;<br>
double result = -a;
</td>
<td>Floating point negation.</td>
</tr>
<tr>
<td>int-to-long</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
int64 result = (int64) a;
</td>
<td>Sign extension of <code>int32</code> into <code>int64</code>.</td>
</tr>
<tr>
<td>int-to-float</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
float result = (float) a;
</td>
<td>Conversion of <code>int32</code> to <code>float</code>, using
@@ -1334,21 +1339,21 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>int-to-double</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
double result = (double) a;
</td>
<td>Conversion of <code>int32</code> to <code>double</code>.</td>
</tr>
<tr>
<td>long-to-int</td>
- <td>int64 a;<br/>
+ <td>int64 a;<br>
int32 result = (int32) a;
</td>
<td>Truncation of <code>int64</code> into <code>int32</code>.</td>
</tr>
<tr>
<td>long-to-float</td>
- <td>int64 a;<br/>
+ <td>int64 a;<br>
float result = (float) a;
</td>
<td>Conversion of <code>int64</code> to <code>float</code>, using
@@ -1357,7 +1362,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>long-to-double</td>
- <td>int64 a;<br/>
+ <td>int64 a;<br>
double result = (double) a;
</td>
<td>Conversion of <code>int64</code> to <code>double</code>, using
@@ -1366,7 +1371,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>float-to-int</td>
- <td>float a;<br/>
+ <td>float a;<br>
int32 result = (int32) a;
</td>
<td>Conversion of <code>float</code> to <code>int32</code>, using
@@ -1378,7 +1383,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>float-to-long</td>
- <td>float a;<br/>
+ <td>float a;<br>
int64 result = (int64) a;
</td>
<td>Conversion of <code>float</code> to <code>int64</code>, using
@@ -1390,7 +1395,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>float-to-double</td>
- <td>float a;<br/>
+ <td>float a;<br>
double result = (double) a;
</td>
<td>Conversion of <code>float</code> to <code>double</code>, preserving
@@ -1399,7 +1404,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>double-to-int</td>
- <td>double a;<br/>
+ <td>double a;<br>
int32 result = (int32) a;
</td>
<td>Conversion of <code>double</code> to <code>int32</code>, using
@@ -1409,7 +1414,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>double-to-long</td>
- <td>double a;<br/>
+ <td>double a;<br>
int64 result = (int64) a;
</td>
<td>Conversion of <code>double</code> to <code>int64</code>, using
@@ -1419,7 +1424,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>double-to-float</td>
- <td>double a;<br/>
+ <td>double a;<br>
float result = (float) a;
</td>
<td>Conversion of <code>double</code> to <code>float</code>, using
@@ -1428,7 +1433,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>int-to-byte</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
int32 result = (a &lt;&lt; 24) &gt;&gt; 24;
</td>
<td>Truncation of <code>int32</code> to <code>int8</code>, sign
@@ -1437,7 +1442,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>int-to-char</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
int32 result = a &amp; 0xffff;
</td>
<td>Truncation of <code>int32</code> to <code>uint16</code>, without
@@ -1446,7 +1451,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>int-to-short</td>
- <td>int32 a;<br/>
+ <td>int32 a;<br>
int32 result = (a &lt;&lt; 16) &gt;&gt; 16;
</td>
<td>Truncation of <code>int32</code> to <code>int16</code>, sign
@@ -1455,35 +1460,35 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>add-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a + b;
</td>
<td>Twos-complement addition.</td>
</tr>
<tr>
<td>sub-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a - b;
</td>
<td>Twos-complement subtraction.</td>
</tr>
<tr>
<td>rsub-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = b - a;
</td>
<td>Twos-complement reverse subtraction.</td>
</tr>
<tr>
<td>mul-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a * b;
</td>
<td>Twos-complement multiplication.</td>
</tr>
<tr>
<td>div-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a / b;
</td>
<td>Twos-complement division, rounded towards zero (that is, truncated to
@@ -1493,7 +1498,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>rem-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a % b;
</td>
<td>Twos-complement remainder after division. The sign of the result
@@ -1504,70 +1509,70 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>and-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a &amp; b;
</td>
<td>Bitwise AND.</td>
</tr>
<tr>
<td>or-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a | b;
</td>
<td>Bitwise OR.</td>
</tr>
<tr>
<td>xor-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a ^ b;
</td>
<td>Bitwise XOR.</td>
</tr>
<tr>
<td>shl-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a &lt;&lt; (b &amp; 0x1f);
</td>
<td>Bitwise shift left (with masked argument).</td>
</tr>
<tr>
<td>shr-int</td>
- <td>int32 a, b;<br/>
+ <td>int32 a, b;<br>
int32 result = a &gt;&gt; (b &amp; 0x1f);
</td>
<td>Bitwise signed shift right (with masked argument).</td>
</tr>
<tr>
<td>ushr-int</td>
- <td>uint32 a, b;<br/>
+ <td>uint32 a, b;<br>
int32 result = a &gt;&gt; (b &amp; 0x1f);
</td>
<td>Bitwise unsigned shift right (with masked argument).</td>
</tr>
<tr>
<td>add-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a + b;
</td>
<td>Twos-complement addition.</td>
</tr>
<tr>
<td>sub-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a - b;
</td>
<td>Twos-complement subtraction.</td>
</tr>
<tr>
<td>mul-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a * b;
</td>
<td>Twos-complement multiplication.</td>
</tr>
<tr>
<td>div-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a / b;
</td>
<td>Twos-complement division, rounded towards zero (that is, truncated to
@@ -1577,7 +1582,7 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>rem-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a % b;
</td>
<td>Twos-complement remainder after division. The sign of the result
@@ -1588,80 +1593,80 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>and-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a &amp; b;
</td>
<td>Bitwise AND.</td>
</tr>
<tr>
<td>or-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a | b;
</td>
<td>Bitwise OR.</td>
</tr>
<tr>
<td>xor-long</td>
- <td>int64 a, b;<br/>
+ <td>int64 a, b;<br>
int64 result = a ^ b;
</td>
<td>Bitwise XOR.</td>
</tr>
<tr>
<td>shl-long</td>
- <td>int64 a;<br/>
- int32 b;<br/>
+ <td>int64 a;<br>
+ int32 b;<br>
int64 result = a &lt;&lt; (b &amp; 0x3f);
</td>
<td>Bitwise shift left (with masked argument).</td>
</tr>
<tr>
<td>shr-long</td>
- <td>int64 a;<br/>
- int32 b;<br/>
+ <td>int64 a;<br>
+ int32 b;<br>
int64 result = a &gt;&gt; (b &amp; 0x3f);
</td>
<td>Bitwise signed shift right (with masked argument).</td>
</tr>
<tr>
<td>ushr-long</td>
- <td>uint64 a;<br/>
- int32 b;<br/>
+ <td>uint64 a;<br>
+ int32 b;<br>
int64 result = a &gt;&gt; (b &amp; 0x3f);
</td>
<td>Bitwise unsigned shift right (with masked argument).</td>
</tr>
<tr>
<td>add-float</td>
- <td>float a, b;<br/>
+ <td>float a, b;<br>
float result = a + b;
</td>
<td>Floating point addition.</td>
</tr>
<tr>
<td>sub-float</td>
- <td>float a, b;<br/>
+ <td>float a, b;<br>
float result = a - b;
</td>
<td>Floating point subtraction.</td>
</tr>
<tr>
<td>mul-float</td>
- <td>float a, b;<br/>
+ <td>float a, b;<br>
float result = a * b;
</td>
<td>Floating point multiplication.</td>
</tr>
<tr>
<td>div-float</td>
- <td>float a, b;<br/>
+ <td>float a, b;<br>
float result = a / b;
</td>
<td>Floating point division.</td>
</tr>
<tr>
<td>rem-float</td>
- <td>float a, b;<br/>
+ <td>float a, b;<br>
float result = a % b;
</td>
<td>Floating point remainder after division. This function is different
@@ -1671,35 +1676,35 @@ round-to-nearest and gradual underflow, except where stated otherwise.</p>
</tr>
<tr>
<td>add-double</td>
- <td>double a, b;<br/>
+ <td>double a, b;<br>
double result = a + b;
</td>
<td>Floating point addition.</td>
</tr>
<tr>
<td>sub-double</td>
- <td>double a, b;<br/>
+ <td>double a, b;<br>
double result = a - b;
</td>
<td>Floating point subtraction.</td>
</tr>
<tr>
<td>mul-double</td>
- <td>double a, b;<br/>
+ <td>double a, b;<br>
double result = a * b;
</td>
<td>Floating point multiplication.</td>
</tr>
<tr>
<td>div-double</td>
- <td>double a, b;<br/>
+ <td>double a, b;<br>
double result = a / b;
</td>
<td>Floating point division.</td>
</tr>
<tr>
<td>rem-double</td>
- <td>double a, b;<br/>
+ <td>double a, b;<br>
double result = a % b;
</td>
<td>Floating point remainder after division. This function is different
diff --git a/en/devices/tv/index.html b/en/devices/tv/index.html
index 1b2fa230..2d330c20 100644
--- a/en/devices/tv/index.html
+++ b/en/devices/tv/index.html
@@ -25,8 +25,13 @@
<img style="float: right; margin: 0px 15px 15px 15px;" src="images/ape_fwk_hal_tv.png" alt="Android TV HAL icon"/>
-<p>The Android TV Input Framework (TIF) simplifies delivery of live content to Android TV. The Android TIF provides a standard API for manufacturers to create input modules for controlling Android TV, and enables live TV search and recommendations via metadata published by the TV Input.</p>
-<p>The framework does not seek to implement TV standards or regional requirements, but does make it easier for device manufacturers to meet regional digital TV broadcast standards without re-implementation. Documentation in this section might also be useful to third-party app developers who want to create custom TV Inputs.</p>
+<p>The Android TV Input Framework (TIF) simplifies delivery of live content to Android TV. The
+Android TIF provides a standard API for manufacturers to create input modules for controlling
+Android TV, and enables live TV search and recommendations via metadata published by the TV Input.</p>
+<p>The framework does not seek to implement TV standards or regional requirements, but does make it
+easier for device manufacturers to meet regional digital TV broadcast standards without
+re-implementation. Documentation in this section might also be useful to third-party app
+developers who want to create custom TV Inputs.</p>
<h2 id="components">Components</h2>
@@ -39,11 +44,14 @@ parties through the TV Input Manager.</p>
<p>The TV Input Framework consists of:</p>
<ul>
- <li>TV Provider (<code>com.android.providers.tv.TvProvider</code>): a database of channels, programs, and associated permissions
+ <li>TV Provider (<code>com.android.providers.tv.TvProvider</code>): a database of channels,
+ programs, and associated permissions
<li>TV App (<code>com.android.tv.TvActivity</code>): the app that handles user interaction
- <li>TV Input Manager (<code>android.media.tv.TvInputManager</code>): allows the TV Inputs to communicate with the TV App
+ <li>TV Input Manager (<code>android.media.tv.TvInputManager</code>): allows the TV Inputs to
+ communicate with the TV App
<li>TV Input: an app representing physical or virtual tuners and input ports
- <li>TV Input HAL (<code>tv_input</code> module): a hardware definition that allows system TV Inputs to access
+ <li>TV Input HAL (<code>tv_input</code> module): a hardware definition that allows system TV
+ Inputs to access
TV-specific hardware when implemented
<li>Parental Control: the technology to allow blocking of channels and programs
<li>HDMI-CEC: the technology to allow remote control of various devices over HDMI
@@ -64,7 +72,8 @@ detailed view of the Android TV Input Framework architecture.</p>
replaced by a third-party app.
<li>The TV App displays the AV content from the TV Input.
<li>The TV App cannot talk directly with the TV Inputs. The TV Input Manager
-identifies the state of TV Inputs for the TV App. See <em>TV Input Manager</em> below for more details about these limitations.
+identifies the state of TV Inputs for the TV App. See <em>TV Input Manager</em> below for more
+details about these limitations.
</ol>
<h2 id="permissions">Permissions</h2>
@@ -81,7 +90,8 @@ and can READ/WRITE only to matching package rows.
<li>Third-party TV inputs can either display their own content or content from a
device manufacturer’s passthrough TV inputs, like HDMI1. They can’t display
content from non-passthrough TV inputs, like a built-in or IPTV tuner.
- <li><code>TV_INPUT_HARDWARE</code> permission for a hardware TV Input app, signals the TV Input Manager Service
+ <li><code>TV_INPUT_HARDWARE</code> permission for a hardware TV Input app, signals the TV Input
+ Manager Service
to notify the TV Input service on boot to call the TV Input Manager Service and
add its TV Inputs. This permission allows a hardware TV Input app to support
multiple TV Inputs per TV Input service, as well as being able to dynamically
@@ -99,7 +109,9 @@ accessing any other TV Inputs’ channels and programs. </p>
<p>The TV Provider maps "broadcast genre" to "canonical genre" internally. TV
Inputs are responsible for populating "broadcast genre" with the value in the
underlying broadcast standard, and the "canonical genre" field will
-automatically be populated with the correct associated genre from <code>android.provider.TvContract.Genres</code>. For example, with broadcast standard ATSC A/65 and program with genre 0x25
+automatically be populated with the correct associated genre from
+<code>android.provider.TvContract.Genres</code>. For example, with broadcast
+standard ATSC A/65 and program with genre 0x25
(meaning “Sports”), the TV Input will populate the “broadcast genre” with the
String “Sports” and TV Provider will populate the “canonical genre” field with
the mapped value <code>android.provider.TvContract.Genres.SPORTS</code>.</p>
@@ -115,7 +127,8 @@ database. </em></p>
<p>Passthrough TV inputs do not store channels and programs. </p>
<p>In addition to the standard fields for channels and programs, the TV Provider
-database also offers a BLOB type field, <code>COLUMN_INTERNAL_PROVIDER_DATA</code>, in each table that TV Inputs may use to store arbitrary data. That BLOB data
+database also offers a BLOB type field, <code>COLUMN_INTERNAL_PROVIDER_DATA</code>,
+in each table that TV Inputs may use to store arbitrary data. That BLOB data
can include custom information, such as frequency of the associated tuner, and
may be provided in a protocol buffer or another form. A Searchable field is
available to make certain channels unavailable in search (such as to meet
@@ -123,31 +136,41 @@ country-specific requirements for content protection).</p>
<h3 id="tv_provider_database_field_examples">Database field examples</h3>
-<p>The TV Provider supports structured data in channel (<code>android.provider.TvContract.Channels</code>) and program (<code>android.provider.TvContract.Programs</code>) tables. These tables are populated and accessed by TV Inputs and system apps
+<p>The TV Provider supports structured data in channel
+(<code>android.provider.TvContract.Channels</code>) and program
+(<code>android.provider.TvContract.Programs</code>) tables. These tables are
+populated and accessed by TV Inputs and system apps
like the TV App. These tables have four types of fields:</p>
<ul>
- <li><strong>Display: </strong>Display fields contain information that apps may want to make visible to the
-user, like a channel’s name (<code>COLUMN_DISPLAY_NAME</code>) or number (<code>COLUMN_DISPLAY_NUMBER</code>), or the title of the program being viewed.
- <li><strong>Metadata:</strong> There are three fields for identifying content, according to relevant
-standards, like a channel’s transport stream ID (<code>COLUMN_TRANSPORT_STREAM_ID</code>), original network ID (<code>COLUMN_ORIGINAL_NETWORK_ID</code>) and service id (<code>COLUMN_SERVICE_ID</code>).
+ <li><strong>Display: </strong>Display fields contain information that apps may
+ want to make visible to the user, like a channel’s name (<code>COLUMN_DISPLAY_NAME</code>)
+ or number (<code>COLUMN_DISPLAY_NUMBER</code>), or the title of the program being viewed.
+ <li><strong>Metadata:</strong> There are three fields for identifying content, according
+ to relevant standards, like a channel’s transport stream ID
+ (<code>COLUMN_TRANSPORT_STREAM_ID</code>), original network ID
+ (<code>COLUMN_ORIGINAL_NETWORK_ID</code>) and service id (<code>COLUMN_SERVICE_ID</code>).
<li><strong>Internal data</strong>: Fields that are for the custom use of TV Inputs.<br>
- Some fields, like <code>COLUMN_INTERNAL_PROVIDER_DATA</code>, are customizable BLOB fields where a TV Input can store arbitrary metadata
-about their channel or program.
- <li><strong>Flag: </strong>Flag fields represent whether a channel should be restricted from search,
-browse, or viewing. This can be set only at the channel level. All programs
+ Some fields, like <code>COLUMN_INTERNAL_PROVIDER_DATA</code>, are customizable BLOB
+ fields where a TV Input can store arbitrary metadata about their channel or program.
+ <li><strong>Flag: </strong>Flag fields represent whether a channel should be restricted
+ from search, browse, or viewing. This can be set only at the channel level. All programs
defer to the setting on the channel.
<ul>
- <li><code>COLUMN_SEARCHABLE</code>: Restricting search from some channels may be a requirement in certain
-regions. <code>COLUMN_SEARCHABLE = 0</code> means the channel should not be exposed in search results.
- <li><code>COLUMN_BROWSABLE</code>: Visible to system applications only. Restricting channel from being browsed
-by applications. <code>COLUMN_BROWSABLE = 0</code> means the channel should not be included in the channel list.
- <li><code>COLUMN_LOCKED</code>: Visible to system applications only. Restricting channel from being viewed by
-invalid accounts without entering PIN code. <code>COLUMN_LOCKED = 1</code> means the channel should be protected by parental control.
+ <li><code>COLUMN_SEARCHABLE</code>: Restricting search from some channels may be a requirement
+ in certain regions. <code>COLUMN_SEARCHABLE = 0</code> means the channel should not be exposed
+ in search results.
+ <li><code>COLUMN_BROWSABLE</code>: Visible to system applications only. Restricting channel from
+ being browsed by applications. <code>COLUMN_BROWSABLE = 0</code> means the channel should not be
+ included in the channel list.
+ <li><code>COLUMN_LOCKED</code>: Visible to system applications only. Restricting channel from
+ being viewed by invalid accounts without entering PIN code. <code>COLUMN_LOCKED = 1</code> means
+ the channel should be protected by parental control.
</ul>
</ul>
-<p>For a more exhaustive list of the fields, see <code>android/frameworks/base/media/java/android/media/tv/TvContract.java</code></p>
+<p>For a more exhaustive list of the fields, see
+<code>android/frameworks/base/media/java/android/media/tv/TvContract.java</code></p>
<h3 id="permissions_and_access_control">Permissions and access control</h3>
@@ -156,13 +179,14 @@ fields are directly accessible to users; they see only what the TV App, System
apps, or TV Inputs surface.</p>
<ul>
- <li>Each row has <code>PACKAGE_NAME</code>, the package (app) that owns that row, checked on Query, Insert, Update via
-TvProvider.java.
+ <li>Each row has <code>PACKAGE_NAME</code>, the package (app) that owns that row, checked on
+ Query, Insert, Update via TvProvider.java.
A TV Input may access only the information it wrote and is
cordoned off from the information provided by other TV Inputs.
<li>READ, WRITE permissions via AndroidManifest.xml (requires user consent) to
determine available channels.
- <li>Only <code>signatureOrSystem</code> apps can acquire <code>ACCESS_ALL_EPG_DATA</code> permission to access the entire database.
+ <li>Only <code>signatureOrSystem</code> apps can acquire <code>ACCESS_ALL_EPG_DATA</code>
+ permission to access the entire database.
</ul>
<h2 id="tv_input_manager">TV Input Manager</h2>
@@ -180,13 +204,16 @@ installed TV Inputs so apps may:</p>
<p>For sessions, a TV Input may be tuned by the TV App only to URIs it has added
to the TV Provider database, except for passthrough TV Inputs which can be
-tuned to using <code>TvContract.buildChannelUriForPassthroughInput()</code>. A TV Input may also have its volume set. TV Inputs provided and signed by the
+tuned to using <code>TvContract.buildChannelUriForPassthroughInput()</code>.
+A TV Input may also have its volume set. TV Inputs provided and signed by the
device manufacturer (signature apps) or other apps installed in the system
partition will have access to the entire TV Provider database. This access can
be used to construct apps to browse and search across all available TV channels
and programs.</p>
-<p>An app may create and register a <code>TvInputCallback</code> with the <code>android.media.tv.TvInputManager</code> to be called back on a TV Input’s state change or on the addition or removal
+<p>An app may create and register a <code>TvInputCallback</code> with the
+<code>android.media.tv.TvInputManager</code> to be called back on a TV Input’s
+state change or on the addition or removal
of a TV Input. For example, a TV App can react when a TV Input is disconnected
by displaying it as disconnected and preventing its selection.</p>
@@ -216,8 +243,9 @@ new input can be selected within the TV App.</p>
<p>In this example, the TV Input provided by the device manufacturer is trusted
and has full access to the TV Provider. As a passthrough TV Input, it does not
register any channels or programs with the TV Provider. To obtain the URI used
-to reference the passthrough input, use the <code>android.media.tv.TvContract</code> utility method <code>buildChannelUriForPassthroughInput(String inputId)</code>. The TV App communicates with the TV Input Manager to reach the HDMI TV
-Input. </p>
+to reference the passthrough input, use the <code>android.media.tv.TvContract</code>
+utility method <code>buildChannelUriForPassthroughInput(String inputId)</code>.
+The TV App communicates with the TV Input Manager to reach the HDMI TV Input.</p>
<h3 id=built-in_tuner_example>Built-in tuner example</h3>
@@ -250,18 +278,25 @@ the TV while the manufacturer-provided HDMI TV Input renders the video.</p>
specific TV Input for picture in picture (PIP) display. Those button presses
are interpreted by the hardware driver supplied by the device manufacturer,
converting hardware scancodes to Android keycodes and passing them to the
-standard Android <a href="/devices/input/overview.html">input pipeline</a> <code>InputReader</code> and <code>InputDispatcher</code> functions as <a href="http://developer.android.com/reference/android/view/KeyEvent.html">KeyEvents</a>. These in turn trigger events on the TV App if it is in focus. </p>
+standard Android <a href="/devices/input/overview.html">input pipeline</a>
+<code>InputReader</code> and <code>InputDispatcher</code> functions as
+<a href="http://developer.android.com/reference/android/view/KeyEvent.html">KeyEvents</a>.
+These in turn trigger events on the TV App if it is in focus. </p>
-<p>Only system TV Inputs are eligible to receive <code>InputEvents</code>, and only if they have the <code>RECEIVE_INPUT_EVENT</code> system permission. The TV Input is responsible to determine which InputEvents
-to consume and should allow the TV App to handle the keys it does not need to
-consume.</p>
+<p>Only system TV Inputs are eligible to receive <code>InputEvents</code>, and only if
+they have the <code>RECEIVE_INPUT_EVENT</code> system permission. The TV Input is
+responsible to determine which InputEvents to consume and should allow the TV App to
+handle the keys it does not need to consume.</p>
<p>The TV App is responsible for knowing which system TV Input is active, meaning
-selected by the user, and to disambiguate incoming <code>KeyEvents</code> and route them to the correct TV Input Manager session, calling <code>dispatchInputEvent()</code> to pass on the event to the associated TV Input. </p>
+selected by the user, and to disambiguate incoming <code>KeyEvents</code> and route them to the
+correct TV Input Manager session, calling <code>dispatchInputEvent()</code> to pass on the event
+to the associated TV Input.</p>
<h3 id="mheg-5_input_example">MHEG-5 input example</h3>
-<p>The following diagram shows a more detailed view of how <code>KeyEvents</code> are routed through the Android TIF.</p>
+<p>The following diagram shows a more detailed view of how <code>KeyEvents</code> are
+routed through the Android TIF.</p>
<img src="images/TIF_MHEG5_app.png" alt="Android TV Red button example">
<p class="img-caption"><strong>Figure 7.</strong> Android TV Red button example</p>
@@ -278,11 +313,14 @@ related web pages or sports scores.</p>
<ol>
<li>The TV App is in focus and receives all keys.
- <li><code>KeyEvents</code> (e.g. the Red button) is passed to the active TV Input as <code>InputEvents.</code>
- <li>The system TV Input integrates with MHEG-5 stack and has the <code>RECEIVE_INPUT_EVENT</code> system permission.
+ <li><code>KeyEvents</code> (e.g. the Red button) is passed to the active TV Input as
+ <code>InputEvents.</code>
+ <li>The system TV Input integrates with MHEG-5 stack and has the
+ <code>RECEIVE_INPUT_EVENT</code> system permission.
<li>On receiving activation keycode (e.g. Red button), the TV Input activates
broadcast app.
- <li>TV input consumes <code>KeyEvents</code> as <code>InputEvents</code> and the broadcast app is the focus and handles <code>InputEvents</code> until dismissed.
+ <li>TV input consumes <code>KeyEvents</code> as <code>InputEvents</code> and the broadcast
+ app is the focus and handles <code>InputEvents</code> until dismissed.
</ol>
<p class="note"><strong>Note</strong>: Third-party TV inputs never receive keys. </p>
@@ -394,13 +432,17 @@ inputs.</p>
<img src="images/LiveChannels_Add_channel.png" alt="Add channels from your source">
<p class="img-caption"><strong>Figure 11.</strong> Add channels from your source</p>
-<p>In addition a notification card is shown at the top of the TV App menu after a new TvInput is installed, to take the user directly to the Setup:</p>
+<p>In addition a notification card is shown at the top of the TV App menu after a
+new TvInput is installed, to take the user directly to the Setup:</p>
<img src="images/LiveChannels_set_up_sources.png" alt="Notification that shows new channel sources are available.">
-<p class="img-caption"><strong>Figure 12.</strong> Notification that shows new channel sources are available.</p>
+<p class="img-caption"><strong>Figure 12.</strong> Notification that shows new channel
+sources are available.</p>
-<p>If the user takes action through the notification, they can select to set up their sources as seen in Figure 10.</p>
-<p>See <a href="http://developer.android.com/training/tv/tif/tvinput.html#setup">Define Your TV Input Service</a>
+<p>If the user takes action through the notification, they can select to set up their
+sources as seen in Figure 10.</p>
+<p>See <a href="http://developer.android.com/training/tv/tif/tvinput.html#setup">Define
+Your TV Input Service</a>
for developer expectations in this area.</p>
<h4 id=customize_the_channel_list>Customize the channel list</h4>
@@ -432,7 +474,9 @@ is that users are able to find the channels they have installed. </p>
<p>Manufacturers must implement the TV App to include search results for global
search requests in order to ensure the best user experience. Live TV provides an
-implementation (see <a href="https://android.googlesource.com/platform/packages/apps/TV/+/android-live-tv/src/com/android/tv/search/TvProviderSearch.java">com.android.tv.search.TvProviderSearch</a>) which provides results from third-party inputs (required for platform
+implementation (see
+<a href="https://android.googlesource.com/platform/packages/apps/TV/+/android-live-tv/src/com/android/tv/search/TvProviderSearch.java">com.android.tv.search.TvProviderSearch</a>)
+which provides results from third-party inputs (required for platform
compatibility) as well as built-in inputs.</p>
<h4 id="time-shifting">Time shifting</h4>
@@ -526,7 +570,8 @@ Recording</a> article.
Running this against Live TV may be a useful way to see the EPG,
Search, Parental Control, and other requirements in the context of third-party
inputs.
- <li> See <a href="http://developer.android.com/training/tv/tif/tvinput.html#setup">Define Your TV Input Service</a>
+ <li> See <a href="http://developer.android.com/training/tv/tif/tvinput.html#setup">Define Your
+ TV Input Service</a>
for developer expectations in this area.
</ul>
@@ -636,7 +681,7 @@ different source.
<li> The TV Input Manager service generates an intent for the TV App to switch the
source.
<li> The TV App then creates a TV Input Manager Session for the TV Input being
-switched to and calls <code>setMain</code> on that session.
+switched to and calls <code>setMain</code> on that session.
<li> The TV Input Manager Session passes this information on to the HDMI TV Input.
<li> The HDMI TV input requests to set sideband surface.
<li> The TV Input Manager Service generates a corresponding routing control command
@@ -654,7 +699,7 @@ the broadcast app, for example:</p>
<ul>
<li> MHEG: native stack
<li> Teletext: native stack
- <li> HbbTV: webkit modification by Opera browser
+ <li> HbbTV: HbbTV solution from Vewd Software
</ul>
<p>In the Android L release, Android TV expects device manufacturers to use systems
diff --git a/en/security/_toc.yaml b/en/security/_toc.yaml
index db2c1df6..72de9f34 100644
--- a/en/security/_toc.yaml
+++ b/en/security/_toc.yaml
@@ -45,6 +45,8 @@ toc:
section:
- title: 2018 Bulletins
section:
+ - title: February
+ path: /security/bulletin/2018-02-01
- title: January
path: /security/bulletin/2018-01-01
- title: Index
@@ -125,6 +127,8 @@ toc:
path: /security/bulletin/pixel/index
- title: 2018 Bulletins
section:
+ - title: February
+ path: /security/bulletin/pixel/2018-02-01
- title: January
path: /security/bulletin/pixel/2018-01-01
- title: Index
diff --git a/en/security/bulletin/2018-02-01.html b/en/security/bulletin/2018-02-01.html
new file mode 100644
index 00000000..2b479ed8
--- /dev/null
+++ b/en/security/bulletin/2018-02-01.html
@@ -0,0 +1,642 @@
+<html devsite>
+ <head>
+ <title>Android Security Bulletin—February 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 February 5, 2018</em></p>
+
+
+<p>
+The Android Security Bulletin contains details of security vulnerabilities
+affecting Android devices. Security patch levels of 2018-02-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">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/index.html">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-02-01">February 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/index.html">Android
+security platform</a> and service protections such as <a
+href="https://www.android.com/play-protect">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">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">Google Mobile Services</a>, and is
+especially important for users who install apps from outside of Google
+Play.</li>
+</ul>
+<h2 id="2018-02-01-details">2018-02-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-02-01 patch level. Vulnerabilities are
+grouped under the component that 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, like 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="media-framework">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="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-13228</td>
+ <td>A-69478425</td>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13231</td>
+ <td>A-67962232</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13232</td>
+ <td>A-68953950</td>
+ <td>ID</td>
+ <td>High</td>
+ <td>5.1.1, 6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td rowspan="2">CVE-2017-13230</td>
+ <td rowspan="2">A-65483665</td>
+ <td>DoS</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>5.1.1, 6.0, 6.0.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13233</td>
+ <td>A-62851602</td>
+ <td>DoS</td>
+ <td>High</td>
+ <td>5.1.1, 6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13234</td>
+ <td>A-68159767</td>
+ <td>DoS</td>
+ <td>High</td>
+ <td>5.1.1, 6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+</table>
+
+
+<h3 id="system">System</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to execute commands normally limited to privileged processes.</p>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-13236</td>
+ <td>A-68217699</td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>8.0, 8.1</td>
+ </tr>
+</table>
+
+<h2 id="2018-02-05-details">2018-02-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-02-05 patch level. Vulnerabilities are
+grouped under the component that 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,
+like 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="htc-components">HTC components</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to obtain unauthorized access to data.</p>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-13238</td>
+ <td>A-64610940<a href="#asterisk">*</a></td>
+ <td>ID</td>
+ <td>High</td>
+ <td>Bootloader</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13247</td>
+ <td>A-71486645<a href="#asterisk">*</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Bootloader</td>
+ </tr>
+</table>
+
+
+<h3 id="kernel-components">Kernel components</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to execute arbitrary code within the context of a privileged
+process.</p>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-15265</td>
+ <td>A-67900971<br />
+ <a
+href="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/sound/?h=v4.4.103&id=23709ae9b61429502fcd4686e7a97333f3b3544a">
+Upstream kernel</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>ALSA</td>
+ </tr>
+ <tr>
+ <td>CVE-2015-9016</td>
+ <td>A-63083046<br />
+ <a
+href="https://github.com/torvalds/linux/commit/0048b4837affd153897ed1222283492070027aa9">
+Upstream kernel</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Multi-queue block IO</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17770</td>
+ <td>A-65853158<a href="#asterisk">*</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Kernel</td>
+ </tr>
+</table>
+
+
+<h3 id="nvidia-components">NVIDIA components</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to execute arbitrary code within the context of a privileged
+process.</p>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-6279</td>
+ <td>A-65023166<a href="#asterisk">*</a><br />
+ N-CVE-2017-6279</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Media framework</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-6258</td>
+ <td>A-38027496<a href="#asterisk">*</a><br />
+ N-CVE-2017-6258</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Media framework</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-components">Qualcomm components</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="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-15817</td>
+ <td>A-68992394<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/prima/commit/?id=8ba78e506e5002cdae525dd544dbf1df0ccce1ef">
+QC-CR#2076603 [2]</a> [<a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/prima/commit/?id=fe43c2b64ac81199de17efc258e95546cb0546f1">
+2</a>]</td>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>WLan</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17760</td>
+ <td>A-68992416<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=71331327ac389bff7d5af2707c4325e5b7949013">
+QC-CR#2082544 [2]</a> [<a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=a6afff2717791ceb281354833d4489123ae62605">
+2</a>]</td>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>WLan</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-11041</td>
+ <td>A-35269676<a href="#asterisk">*</a><br />
+ QC-CR#2053101</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Media framework</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17767</td>
+ <td>A-64750179<a href="#asterisk">*</a><br />
+ QC-CR#2115779</td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Media framework</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17765</td>
+ <td>A-68992445<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=66e561b0c7fff54e8cacd87d2b7d9bb3eef4f13b">
+QC-CR#2115112</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>WLan</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17762</td>
+ <td>A-68992439<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=41ee23cd0972ef2ed47dd76eb7cd44a0268e4f9f">
+QC-CR#2114426</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>WLan</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14884</td>
+ <td>A-68992429<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=0ce15ef4075719a82858b7324690be7011cab832">
+QC-CR#2113052</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>WLan</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15829</td>
+ <td>A-68992397<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=c1b60e554e158bfcf6932ed2c543c309236e0f79">
+QC-CR#2097917</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Graphics_Linux</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15820</td>
+ <td>A-68992396<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=7599c5b7d87248b4772d6c4b70ccb922704c8095">
+QC-CR#2093377</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>Graphics_Linux</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17764</td>
+ <td>A-68992443<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=f451565c052a0322565225515f46be677c0d1b18">
+QC-CR#2114789</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>WLan</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17761</td>
+ <td>A-68992434<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=13e3a516935a0dd90a7bc39e51c30c1592c548b7">
+QC-CR#2114187</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>WLan</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. The severity assessment of these issues is provided directly by
+Qualcomm.</p>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-14910</td>
+ <td>A-62212114<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">Check
+and update your Android version</a>.</p>
+<ul>
+<li>Security patch levels of 2018-02-01 or later address all issues associated
+ with the 2018-02-01 security patch level.</li>
+<li>Security patch levels of 2018-02-05 or later address all issues associated
+ with the 2018-02-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-02-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-02-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-02-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-02-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 Nexus devices available from the <a
+href="https://developers.google.com/android/nexus/drivers">Google Developer
+site</a>.
+</p>
+<p>
+<strong>6. Why are security vulnerabilities split between this bulletin and
+device/partner security bulletins, such as the Pixel / Nexus bulletin?</strong>
+</p>
+<p>
+Security vulnerabilities that are documented in this security bulletin are
+required in order to declare the latest security patch level on Android devices.
+Additional security vulnerabilities that are documented in the device/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">Samsung</a>, <a
+href="https://lgsecurity.lge.com/security_updates.html">LGE</a>, or <a
+href="/security/bulletin/pixel/">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>February 5, 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 268ef054..b1b9ccc4 100644
--- a/en/security/bulletin/2018.html
+++ b/en/security/bulletin/2018.html
@@ -37,6 +37,22 @@ 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-02-01.html">February 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/2018-02-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>February 2018</td>
+ <td>2018-02-01<br>
+ 2018-02-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/2018-01-01.html">January 2018</a></td>
<td>Coming soon
<!--
diff --git a/en/security/bulletin/index.html b/en/security/bulletin/index.html
index cc6a14a6..e87d468b 100644
--- a/en/security/bulletin/index.html
+++ b/en/security/bulletin/index.html
@@ -68,6 +68,22 @@ 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-02-01.html">February 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/2018-02-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/2018-02-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>February 5, 2018</td>
+ <td>2018-02-01<br>
+ 2018-02-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/2018-01-01.html">January 2018</a></td>
<td>Coming soon
<!--
diff --git a/en/security/bulletin/pixel/2018-02-01.html b/en/security/bulletin/pixel/2018-02-01.html
new file mode 100644
index 00000000..695ffd4b
--- /dev/null
+++ b/en/security/bulletin/pixel/2018-02-01.html
@@ -0,0 +1,627 @@
+<html devsite>
+ <head>
+ <title>Pixel&hairsp;/&hairsp;Nexus Security Bulletin—February 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 February 5, 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">supported
+Google Pixel and Nexus devices</a> (Google devices). For Google devices,
+security patch levels of 2018-02-05 or later address all issues in this
+bulletin and all issues in the <a href="/security/bulletin/2018-02-01">February
+2018 Android Security Bulletin</a>. To learn how to check a device's security
+patch level, see <a href="https://support.google.com/pixelphone/answer/4457705">Check
+and update your Android version</a>.</p>
+<p>
+All supported Google devices will receive an update to the 2018-02-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/nexus/images">Google Developer
+site</a>.
+</p>
+<h2 id="announcements">Announcements</h2>
+<p>In addition to the security vulnerabilities described in the
+<a href="/security/bulletin/2018-02-01">February 2018 Android Security Bulletin</a>,
+Pixel and Nexus 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 that 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="https://source.android.com/security/overview/updates-resources.html#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,
+like 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>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-13239</td>
+ <td>A-66244132</td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>8.0</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13240</td>
+ <td>A-68694819</td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>8.0, 8.1</td>
+ </tr>
+</table>
+
+
+<h3 id="media-framework">Media framework</h3>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-13241</td>
+ <td>A-69065651</td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>5.1.1, 6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td rowspan="2">CVE-2017-13229</td>
+ <td rowspan="2">A-68160703</td>
+ <td>RCE</td>
+ <td>Moderate</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>5.1.1, 6.0, 6.0.1</td>
+ </tr>
+ <tr>
+ <td rowspan="2">CVE-2017-13235</td>
+ <td rowspan="2">A-68342866</td>
+ <td>NSI</td>
+ <td>NSI</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>DoS</td>
+ <td>High</td>
+ <td>5.1.1, 6.0, 6.0.1</td>
+ </tr>
+</table>
+
+
+<h3 id="system">System</h3>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-13242</td>
+ <td>A-62672248</td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13243</td>
+ <td>A-38258991</td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>5.1.1, 6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0</td>
+ </tr>
+</table>
+
+
+<h3 id="kernel-components">Kernel components</h3>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-13244</td>
+ <td>A-62678986<a href="#asterisk">*</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Easel</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13245</td>
+ <td>A-64315347<a href="#asterisk">*</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Audio driver</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-1000405</td>
+ <td>A-69934280<br />
+ <a
+href="https://github.com/torvalds/linux/commit/a8f97366452ed491d13cf1e44241bc0b5740b1f0">
+Upstream kernel</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Page management</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-13246</td>
+ <td>A-36279469<a href="#asterisk">*</a></td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>Network driver</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-components">Qualcomm components</h3>
+
+<table>
+ <col width="17%">
+ <col width="19%">
+ <col width="9%">
+ <col width="14%">
+ <col width="39%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-15859</td>
+ <td>A-65468985<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=88dcc44ea8fbe158d1dee3ea197e47794bf4449d">
+QC-CR#2059715</a></td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>qcacld-2.0</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17769</td>
+ <td>A-65172622<a href="#asterisk">*</a><br />
+ QC-CR#2110256</td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>qdsp6v2</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-9723</td>
+ <td>A-68992479<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=e83ebd2098009b0d336ffab11e00f739902bd5d9">
+QC-CR#2007828</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>synaptics_dsx_htc touchscreen driver</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14881</td>
+ <td>A-68992478<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=81ea9c34f575422a78015535c619500c34b8a69c">
+QC-CR#2087492</a> [<a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=1e14c7342bbb55f4ff761cf8cb7374750620c903">2</a>]</td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>ipa driver</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14877</td>
+ <td>A-68992473<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=ca395c15c49cf6463a39d197b6a9331d183d94cb">
+QC-CR#2057803</a> [<a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=c2fd287bf16dc5e9f98145ba91083bdc56dfc01f">2</a>]</td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>ipa driver</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15826</td>
+ <td>A-68992471<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=5ac3e9d038a7ee7edf77dde2dffae6f8ba528848">
+QC-CR#2100085</a> [<a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=46db8f8292f71d0086140ae90bce5ae8ff161cb1">2</a>]</td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>MDSS rotator</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14876</td>
+ <td>A-68992468<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=f26dbd9d9491333766ba383044064b1304127ac0">
+QC-CR#2054041</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>MSM camera_v2 driver</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14892</td>
+ <td>A-68992455<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=a3bed71777c133cfec78b5140877c6ba109961a0">
+QC-CR#2096407</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>qdsp6v2</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17766</td>
+ <td>A-68992448<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=a37d8a78f5bd0e9a2c91de46721a6d80bd229a43">
+QC-CR#2115366</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>WiFi</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15823</td>
+ <td>A-68992447<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=49c1ce19c8a4689c33e6e8f17ab77d77fae6ff93">
+QC-CR#2115365</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>WiFi</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15852</td>
+ <td>A-36730614<a href="#asterisk">*</a><br />
+ QC-CR#2046770</td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Framebuffer</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15846</td>
+ <td>A-67713103<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=9fdbd92ec9196ba3629f68f4c22342aa6eedc960">
+QC-CR#2083314</a> [<a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=9c18cc5551afc7318f57571611252fa80e1753a0">2</a>]</td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Camera</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14883</td>
+ <td>A-68992426<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=3de34af4e2ca91e1a2260deb380b81620a631c85">
+QC-CR#2112832</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Power</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-11043</td>
+ <td>A-68992421<br />
+ <a
+href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=befd1f713a72b992ee63970b7e3d1d7a32ba5a01">
+QC-CR#2091584</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>WiFi</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14875</td>
+ <td>A-68992465<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=755261330733bb2440907a8407ed691c99451ddc">
+QC-CR#2042147</a></td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>Camera</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-14891</td>
+ <td>A-68992453<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=736667bf08b03fdca824e88b901c2dbdd6703a0c">
+QC-CR#2096006</a></td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>KGSL</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-17771</td>
+ <td>A-38196031<br />
+ <a
+href="https://source.codeaurora.org/quic/la//kernel/msm-4.4/commit/?id=a452045792bc09548b4e1b940aa8adfed822b51c">
+QC-CR#2003798</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Camera driver</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-11087</td>
+ <td>A-34735194<a href="#asterisk">*</a><br />
+ QC-CR#2053869</td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>Media framework</td>
+ </tr>
+</table>
+
+<h2 id="functional-updates">Functional updates</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;
+and a summary of the issue.
+</p>
+
+<table>
+ <tr>
+ <th>References</th>
+ <th>Category</th>
+ <th>Improvements</th>
+ <th>Devices</th>
+ </tr>
+ <tr>
+ <td>A-68863351</td>
+ <td>UX</td>
+ <td>Improved icons in Settings app.</td>
+ <td>All</td>
+ </tr>
+ <tr>
+ <td>A-68198663</td>
+ <td>Bluetooth</td>
+ <td>Improved Bluetooth call quality for some headsets.</td>
+ <td>Pixel, Pixel XL, Pixel 2, Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-68317240</td>
+ <td>Wi-Fi</td>
+ <td>Improved Wi-Fi uplink performance.</td>
+ <td>Pixel 2, Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-69263786</td>
+ <td>Camera</td>
+ <td>Improved Camera performance in certain light conditions.</td>
+ <td>Pixel 2, Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-67844294</td>
+ <td>Android Auto</td>
+ <td>Improved Android Auto Projected performance for some cars.</td>
+ <td>Pixel 2, Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-69349260</td>
+ <td>App Compatibility</td>
+ <td>Improved RSA key parsing from byte arrays.</td>
+ <td>All</td>
+ </tr>
+ <tr>
+ <td>A-68832228</td>
+ <td>Power</td>
+ <td>Improved battery performance on some Pixel 2XL devices.</td>
+ <td>Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-69797895</td>
+ <td>Mobile Data</td>
+ <td>Improved data performance for Telus users in certain network
+environments.</td>
+ <td>Pixel 2</td>
+ </tr>
+ <tr>
+ <td>A-68368139</td>
+ <td>Stability</td>
+ <td>Improved device stability after booting in certain situations.</td>
+ <td>Pixel 2, Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>A-68874871</td>
+ <td>Audio</td>
+ <td>Improved routing when switching audio outputs.</td>
+ <td>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-02-05 or later address all issues associated with
+the 2018-02-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">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 Nexus devices available from the <a
+href="https://developers.google.com/android/nexus/drivers">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 in order 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>February 5, 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 7a5bae85..8ead20bd 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-02-01.html">February 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/pixel/2018-02-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>February 2018</td>
+ <td>2018-02-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/pixel/2018-01-01.html">January 2018</a></td>
<td>Coming soon
<!--
diff --git a/en/security/bulletin/pixel/index.html b/en/security/bulletin/pixel/index.html
index 1b3c5895..08183ad4 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-02-01.html">February 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/pixel/2018-02-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>February 5, 2018</td>
+ <td>2018-02-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/pixel/2018-01-01.html">January 2018</a></td>
<td>Coming soon
<!--
diff --git a/en/security/overview/acknowledgements.html b/en/security/overview/acknowledgements.html
index 936c3d82..0f5f91d0 100644
--- a/en/security/overview/acknowledgements.html
+++ b/en/security/overview/acknowledgements.html
@@ -36,6 +36,137 @@ Rewards</a> program.</p>
<h2 id="2018">2018</h2>
<p>In 2018, the security acknowledgements are listed by month. In prior years,
acknowledgements were listed together.</p>
+
+
+<h4 id="feb-2018">February</h4>
+
+<table>
+ <col width="70%">
+ <col width="30%">
+ <tr>
+ <th>Researchers</th>
+ <th>CVEs</th>
+ </tr>
+ <tr>
+ <td>Aaron Willey, autoprime (<a
+href="https://twitter.com/utoprime?lang=en">@utoprime</a>), and Tyler Montgomery
+(<a href="https://twitter.com/tylerfixer">@tylerfixer</a>) of Team Codefire
+ </td>
+ <td>CVE-2017-13238
+ </td>
+ </tr>
+ <tr>
+ <td>Cusas (华为公司的cusas)
+ </td>
+ <td>CVE-2017-13235
+ </td>
+ </tr>
+ <tr>
+ <td>Elphet and Gong Guang of
+Alpha Team, Qihoo 360 Technology Co. Ltd.
+ </td>
+ <td>CVE-2017-13229
+ </td>
+ </tr>
+ <tr>
+ <td>En He (<a href="https://twitter.com/heeeeen4x">@heeeeen4x</a>) and Bo Liu
+of <a href="http://www.ms509.com">MS509Team</a>
+ </td>
+ <td>CVE-2017-13242
+ </td>
+ </tr>
+ <tr>
+ <td>Gal Beniamini of Google
+ </td>
+ <td>CVE-2017-13236
+ </td>
+ </tr>
+ <tr>
+ <td>Hao Chen and Guang Gong of Alpha Team, Qihoo 360 Technology Co. Ltd.
+ </td>
+ <td>CVE-2017-13245
+ </td>
+ </tr>
+ <tr>
+ <td>Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>), <a
+href="mailto:shaodacheng2016@gmail.com">Dacheng Shao</a> and Mingjian Zhou (<a
+href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>) of <a
+href="http://c0reteam.org">C0RE Team</a>
+ </td>
+ <td>CVE-2017-6258
+ </td>
+ </tr>
+ <tr>
+ <td>Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>), Mingjian
+Zhou (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>) of <a
+href="http://c0reteam.org">C0RE Team</a>
+ </td>
+ <td>CVE-2017-17767, CVE-2017-6279
+ </td>
+ </tr>
+ <tr>
+ <td>Mingjian Zhou (周明建) (<a
+href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>) of <a
+href="http://c0reteam.org">C0RE Team</a>
+ </td>
+ <td>CVE-2017-13241, CVE-2017-13231
+ </td>
+ </tr>
+ <tr>
+ <td>Nightwatch Cybersecurity Research
+ </td>
+ <td>CVE-2017-13243
+ </td>
+ </tr>
+ <tr>
+ <td><a href="mailto:jiych.guru@gmail.com">Niky1235</a> (<a
+href="https://twitter.com/jiych_guru">@jiych_guru</a>)
+ </td>
+ <td>CVE-2017-13230, CVE-2017-13234
+ </td>
+ </tr>
+ <tr>
+ <td>Outware
+ </td>
+ <td>CVE-2017-13239
+ </td>
+ </tr>
+ <tr>
+ <td>Qidan He (<a
+href="https://twitter.com/flanker_hqd?lang=en">@flanker_hqd</a>) of PDD Security
+Team
+ </td>
+ <td>CVE-2017-13246
+ </td>
+ </tr>
+ <tr>
+ <td>Xiling Gong of Tencent Security Platform Department
+ </td>
+ <td>CVE-2017-15852
+ </td>
+ </tr>
+ <tr>
+ <td>Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>) of
+IceSword Lab, Qihoo 360 Technology Co. Ltd.
+ </td>
+ <td>CVE-2017-17770
+ </td>
+ </tr>
+ <tr>
+ <td>ZhangBo of Tencent Security Platform Department
+ </td>
+ <td>CVE-2015-9016
+ </td>
+ </tr>
+ <tr>
+ <td><a href="http://weibo.com/ele7enxxh">Zinuo Han</a> from Chengdu Security
+Response Center of Qihoo 360 Technology Co. Ltd.
+ </td>
+ <td>CVE-2017-13232
+ </td>
+ </tr>
+</table>
+
<h4 id="january-2018">January</h4>
<table>
diff --git a/en/setup/build-numbers.html b/en/setup/build-numbers.html
index 2054199f..f0ba4a2e 100644
--- a/en/setup/build-numbers.html
+++ b/en/setup/build-numbers.html
@@ -213,6 +213,36 @@ site:</p>
</thead>
<tbody>
<tr>
+ <td>OPM5.171019.015</td>
+ <td>android-8.1.0_r14</td>
+ <td>Oreo</td>
+ <td>Nexus 5X, Nexus 6P</td>
+ </tr>
+ <tr>
+ <td>OPM3.171019.014</td>
+ <td>android-8.1.0_r13</td>
+ <td>Oreo</td>
+ <td>Nexus 5X, Nexus 6P</td>
+ </tr>
+ <tr>
+ <td>OPM1.171019.019</td>
+ <td>android-8.1.0_r12</td>
+ <td>Oreo</td>
+ <td>Pixel 2</td>
+ </tr>
+ <tr>
+ <td>OPM1.171019.018</td>
+ <td>android-8.1.0_r11</td>
+ <td>Oreo</td>
+ <td>Pixel 2 XL</td>
+ </tr>
+ <tr>
+ <td>OPM1.171019.016</td>
+ <td>android-8.1.0_r10</td>
+ <td>Oreo</td>
+ <td>Pixel, Pixel XL, Pixel C</td>
+ </tr>
+ <tr>
<td>OPM5.171019.014</td>
<td>android-8.1.0_r9</td>
<td>Oreo</td>
diff --git a/en/setup/building-kernels.html b/en/setup/building-kernels.html
index 527e1d4a..cd03c612 100644
--- a/en/setup/building-kernels.html
+++ b/en/setup/building-kernels.html
@@ -23,7 +23,7 @@
-<p>This page details how to build only the kernel. The following instructions
+<p>This page details how to build only the <a href="/devices/architecture/kernel/">kernel</a>. The following instructions
assume you have not downloaded all of AOSP; if you have already done so, you can
skip the <code>git clone</code> steps except the step that downloads the kernel
sources.</p>
@@ -41,6 +41,24 @@ sources.</p>
<th>Build configuration</th>
</tr>
<tr>
+ <td>taimen</td>
+ <td>device/google/wahoo-kernel</td>
+ <td>kernel/msm</td>
+ <td>wahoo_defconfig</td>
+ </tr>
+ <tr>
+ <td>walleye</td>
+ <td>device/google/wahoo-kernel</td>
+ <td>kernel/msm</td>
+ <td>wahoo_defconfig</td>
+ </tr>
+ <tr>
+ <td>easel</td>
+ <td>N/A</td>
+ <td>kernel/arm64</td>
+ <td>mnh_prod_defconfig</td>
+ </tr>
+ <tr>
<td>marlin</td>
<td>device/google/marlin-kernel</td>
<td>kernel/msm</td>
diff --git a/zh-cn/_index.yaml b/zh-cn/_index.yaml
index 643b85d3..d33ce9fe 100644
--- a/zh-cn/_index.yaml
+++ b/zh-cn/_index.yaml
@@ -48,12 +48,19 @@ landing_page:
description: |
Android 是一个支持多种移动设备的开源软件堆栈以及对应的由 Google 领导的开源项目。此网站和 Android 开源项目 (AOSP) 代码库可为您提供所需信息和源代码,供您创建定制的 Android 堆栈版本,将设备和配件移植到 Android 平台,同时确保您的设备符合兼容性要求。<br /><br />
- 此外,我们还希望确保 Android 平台不存在一个集中瓶颈(意即没有任何行业参与者可一手限制或控制其他参与者的创新)。这样,我们就可以针对消费类商品打造一个完整的高品质操作系统,并支持对源代码进行定制和移植。<br /><br />
+ 此外,我们还希望确保 Android 平台不存在一个集中瓶颈(意即没有任何行业参与者可一手限制或控制其他参与者的创新)。这样,我们就可以针对消费类商品打造一个完整的高品质操作系统,并支持对源代码进行定制和移植。而现在,本网站已在中国发布,网址为 <a href="https://source.android.google.cn/">source.android.google.cn</a>。<br /><br />
欢迎您向我们的 AOSP 文档网站贡献力量。随着生态系统不断变化,我们需要您的帮助来保持内容与时俱进。您可以按照我们的 <a href="https://android.googlesource.com/platform/docs/source.android.com/+/master/README.txt">README</a> 中的说明直接对源文件进行修正,也可以使用任意页面底部的<a href="https://issuetracker.google.com/issues/new?component=191476">网站反馈</a>链接来报告错误以及提出改进建议。如需详细了解所有更新,请参阅网站的<a href="https://android.googlesource.com/platform/docs/source.android.com/+log/master?pretty=full&no-merges">更改日志</a>。
image_path: /images/android_stack.png
- heading: 新闻
items:
+ - heading: ART DEX 字节码方面的改进
+ description: >
+ Android 运行时 (ART) 现在包含 <code>const-method-handle</code> 和 <code>const-method-type</code>
+ 的字节码文档,以及对 <code>invoke-polymorphic</code> 的更新。
+ buttons:
+ - label: 2018 年 1 月 19 日
+ path: /devices/tech/dalvik/dalvik-bytecode
- heading: 1 月安全公告
description: >
2018 年 1 月的 Android 和 Pixel/Nexus 安全公告已经发布,其中提供了与 1 月安全更新补丁相关的信息。
@@ -66,12 +73,6 @@ landing_page:
buttons:
- label: 2017 年 12 月 5 日
path: /setup/site-updates#Dec-2017
- - heading: HIDL 参考资料更新
- description: >
- HAL 接口描述语言 (HIDL) 的参考资料已更新,以体现 Android 8.1 版本的相关变化。
- buttons:
- - label: 2017 年 12 月 5 日
- path: /reference/hidl/
- classname: devsite-landing-row-100 tf-row-centered
items:
- buttons:
diff --git a/zh-cn/compatibility/cts/setup.html b/zh-cn/compatibility/cts/setup.html
index cf3a406a..b1f16d44 100644
--- a/zh-cn/compatibility/cts/setup.html
+++ b/zh-cn/compatibility/cts/setup.html
@@ -76,17 +76,17 @@ export PATH=$PATH:$HOME/android-sdk-linux/build-tools/&lt;version&gt;
<h3 id="user_builds">用户版本</h3>
-<p>兼容的设备会被定义为具有 user/release-key 签名版本的设备,因此您的设备应基于<a href="/setup/build-numbers.html">代号、标签和版本号</a>中已知兼容的用户版本(Android 4.0 及更高版本)运行系统映像。<br />
+<p>兼容的设备被定义为具有 user/release-key 签名版本的设备,因此您的设备应运行基于<a href="/setup/build-numbers.html">代号、标签和版本号</a>中已知兼容的用户版本(Android 4.0 及更高版本)的系统映像。<br />
</p><p class="caution"><strong>注意:</strong>使用 CTS 确认最终系统映像的 Android 兼容性时,您必须在具有用户版本的设备上执行 CTS。</p>
-<h3 id="first-api-level">第一个 API 级别版本属性</h3>
+<h3 id="first-api-level">初始 API 级别版本属性</h3>
-<p>特定的 CTS 要求取决于设备最初搭载的版本。例如,如果设备最初搭载的是较低的版本,则不符合适用于搭载较高版本的设备的系统要求。</p>
+<p>某些 CTS 要求取决于设备最初搭载的版本。例如,如果设备最初搭载的是较低的版本,则不必遵循适用于搭载较高版本的设备的系统要求。</p>
-<p>为了保证在 CTS 中可读取到这些信息,设备制造商可以定义编译时属性:<code>ro.product.first_api_level</code>。该属性的值是以商业化形式发布该设备时所采用的第一个 API 级别。</p>
+<p>为了保证在 CTS 中可读取到这些信息,设备制造商可以定义编译时属性:<code>ro.product.first_api_level</code>。该属性的值是以商业化形式发布该设备时所采用的初始 API 级别。</p>
-<p>原始设备制造商 (OEM) 可以将 <code>PRODUCT_PROPERTY_OVERRIDES</code> 添加到其 device.mk 文件以设置这项属性,具体如以下示例所示:</p>
+<p>OEM 可以将 <code>PRODUCT_PROPERTY_OVERRIDES</code> 添加到其 device.mk 文件以设置这项属性,具体如以下示例所示:</p>
<pre class="devsite-click-to-copy">
#ro.product.first_api_level indicates the first api level, device has been commercially launched on.
@@ -95,12 +95,12 @@ ro.product.first_api_level=21
</pre>
<aside class="note">
-<b>注意:</b>对于产品的第一个版本,ro.product.first_api_level 属性应取消设置 (0);而对于所有后续版本,该属性应设置为正确的 API 级别值。通过这种方式,该属性可以正确识别新产品,而且我们不会丢失任何关于产品第一个 API 级别的信息(0 值意味着 ro.product.first_api_level = Build.VERSION.SDK_INT)。
+<b>注意:</b>对于产品的第一个版本,ro.product.first_api_level 属性应取消设置 (0);而对于所有后续版本,该属性应设置为正确的 API 级别值。通过这种方式,该属性可以正确标识新产品,而且我们不会丢失任何关于产品初始 API 级别的信息(值为 0 意味着 ro.product.first_api_level = Build.VERSION.SDK_INT)。
</aside>
<h3 id="cts-shim-apps">CTS Shim 应用</h3>
-<p>Android 7.0 包含以下预编译的应用(通过<a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/CtsShim/build/">此来源</a>编译),这些应用不包含除清单以外的任何代码:</p>
+<p>Android 7.0 包含以下预编译的应用(根据<a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/CtsShim/build/">此处的源代码</a>编译),这些应用不包含除清单以外的任何代码:</p>
<ul>
<li><code><a href="https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r1/packages/CtsShim/CtsShim.apk">
@@ -115,14 +115,14 @@ ro.product.first_api_level=21
<h3 id="storage_requirements">存储空间要求</h3>
<p>CTS 媒体压力测试要求将视频剪辑存放在外部存储设备 (<code>/sdcard</code>) 上。大部分剪辑来自 <a href="https://peach.blender.org/">Big Buck Bunny</a>,其版权归 Blender Foundation 所有并采用 <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 许可</a>。</p>
-<p>所需空间取决于设备支持的最大视频播放分辨率(要查看所需分辨率的平台版本,请参阅兼容性定义文档中的第 5 部分)。请注意,被测设备的视频播放功能将通过 <code>android.media.CamcorderProfile</code> API(针对早期 Android 版本)和 <code>android.media.MediaCodecInfo.CodecCapabilities</code> API(针对 Android 5.0)进行检测。</p>
+<p>所需空间取决于设备支持的最高视频播放分辨率(要查看所需分辨率支持的平台版本,请参阅兼容性定义文档中的第 5 部分)。请注意,被测设备的视频播放功能将通过 <code>android.media.CamcorderProfile</code> API(针对早期 Android 版本)和 <code>android.media.MediaCodecInfo.CodecCapabilities</code> API(针对 Android 5.0)进行检测。</p>
<p>以下是按最大视频播放分辨率列出的存储空间要求:</p>
<ul>
<li>480x360:98 MB</li><li>720x480:193 MB</li><li>1280x720:606 MB</li><li>1920x1080:1863 MB</li></ul>
<h3 id="screen_storage">屏幕和存储空间</h3>
<ol>
-<li>任何没有嵌入式屏幕的设备都需要连接到屏幕。</li>
+<li>任何没有嵌入式屏幕的设备一律需要连接到屏幕。</li>
<li>如果设备具有存储卡插槽,请插入空的 SD 卡。<em>请使用支持超高速 (UHS) 总线且具有 SDHC 或 SDXC 容量的 SD 卡,或使用至少具有 Class 10 速度的 SD 卡,以确保设备能够通过 CTS。</em>
<p class="warning"><strong>警告:</strong>CTS 可能会修改/清空插入设备的 SD 卡上的数据。</p>
</li>
diff --git a/zh-cn/devices/architecture/hidl-cpp/functions.html b/zh-cn/devices/architecture/hidl-cpp/functions.html
index f55119ef..af7e3aba 100644
--- a/zh-cn/devices/architecture/hidl-cpp/functions.html
+++ b/zh-cn/devices/architecture/hidl-cpp/functions.html
@@ -25,8 +25,7 @@
<h2 id="parameters">函数参数</h2>
<p><code>.hal</code> 文件中列出的参数会映射到 C++ 数据类型。未映射到基元 C++ 类型的参数会通过常量引用进行传递。</p>
-<p>对于具有返回值(具有 <code>generates</code> 语句)的每个 HIDL 函数,该函数的 C++ 参数列表中都有一个附加参数:使用 HIDL 函数的返回值调用的回调函数。
-不过也有<strong>一个例外</strong>:如果 <code>generates</code> 子句包含直接映射到 C++ 基元的单个参数,则使用回调省略(回调会被移除,而返回值则会通过正常的 <code>return</code> 语句从函数返回)。<em></em></p>
+<p>对于具有返回值(具有 <code>generates</code> 语句)的每个 HIDL 函数,该函数的 C++ 参数列表中都有一个附加参数:使用 HIDL 函数的返回值调用的回调函数。不过也有<strong>一个例外</strong>:如果 <code>generates</code> 子句包含直接映射到 C++ 基元的单个参数,则使用回调省略(回调会被移除,而返回值则会通过正常的 <code>return</code> 语句从函数返回)。<em></em></p>
<h2 id="return-values">函数返回值</h2>
<p>以下函数具有返回值。</p>
diff --git a/zh-cn/devices/architecture/hidl-cpp/index.html b/zh-cn/devices/architecture/hidl-cpp/index.html
index 94f68046..78725664 100644
--- a/zh-cn/devices/architecture/hidl-cpp/index.html
+++ b/zh-cn/devices/architecture/hidl-cpp/index.html
@@ -70,7 +70,7 @@ hidl-gen -o $LOC -Landroidbp-impl -randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport $PACKAGE
</pre>
-<p>为了让 HAL 在直通模式下发挥作用(对于旧版设备),您必须具有 HIDL_FETCH_IModuleName 函数<em></em>(位于 <code>/system/lib(64)?/hw/android.hardware.package@3.0-impl($OPTIONAL_IDENTIFIER).so</code> 下),其中 <code>$OPTIONAL_IDENTIFIER</code> 是一个用于标识直通实现的字符串。直通模式要求会通过上述命令自动满足,这些命令也可用于创建 <code>android.hardware.nfc@1.0-impl</code> 目标,但是可以使用扩展。例如,<code>android.hardware.nfc@1.0-impl-foo</code> 就是使用 <code>-foo</code> 来区分它自己。</p>
+<p>为了让 HAL 在直通模式下发挥作用(对于旧版设备),您必须将 HIDL_FETCH_IModuleName 函数<em></em>置于 <code>/system/lib(64)?/hw/android.hardware.package@3.0-impl($OPTIONAL_IDENTIFIER).so</code> 中,其中 <code>$OPTIONAL_IDENTIFIER</code> 是用于标识直通实现的字符串。直通模式要求会通过上述命令自动满足,这些命令也可用于创建 <code>android.hardware.nfc@1.0-impl</code> 目标,但是可以使用扩展。例如,<code>android.hardware.nfc@1.0-impl-foo</code> 就是使用 <code>-foo</code> 来区分它自己。</p>
<p>接下来,使用相应功能填写存根并设置守护进程。守护进程代码(支持直通)示例:</p>
diff --git a/zh-cn/devices/architecture/hidl/hashing.html b/zh-cn/devices/architecture/hidl/hashing.html
index 538184dd..a028e3d9 100644
--- a/zh-cn/devices/architecture/hidl/hashing.html
+++ b/zh-cn/devices/architecture/hidl/hashing.html
@@ -73,7 +73,7 @@ f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallback
<li>如果接口与哈希匹配,则编译会继续进行。</li>
<li>如果接口与哈希不匹配,则编译会暂停,因为这意味着之前发布的接口会被更改。
<ul>
-<li>要进行不影响 ABI 的更改(请参阅 <a href="#abi-stability">ABI 稳定性</a>),必须先修改 <code>current.txt</code> 文件,然后编译才能继续进行。</li>
+<li>如要进行不影响 ABI 的更改(请参阅 <a href="#abi-stability">ABI 稳定性</a>),请务必先修改 <code>current.txt</code> 文件,然后编译才能继续进行。</li>
<li>所有其他更改都应在接口的 minor 或 major 版本升级中进行。</li>
</ul></li></ul></li></ul>
diff --git a/zh-cn/devices/architecture/hidl/types.html b/zh-cn/devices/architecture/hidl/types.html
index 9cc36e17..d84117dc 100644
--- a/zh-cn/devices/architecture/hidl/types.html
+++ b/zh-cn/devices/architecture/hidl/types.html
@@ -48,9 +48,9 @@ Point[3] triangle; // sized array
</ul>
<h2 id="represent">数据表示法</h2>
-<p>采用 <a href="http://en.cppreference.com/w/cpp/language/data_members#Standard_layout">Standard-Layout</a>(plain-old-data 类型相关要求的子集)的 <code>struct</code> 或 <code>union</code> 在生成的 C++ 代码中具有一致的内存布局,这是依靠 <code>struct</code> 和 <code>union</code> 成员上的显式对齐属性实现的。</p>
+<p>采用<a href="http://en.cppreference.com/w/cpp/language/data_members#Standard_layout">标准布局</a>(plain-old-data 类型相关要求的子集)的 <code>struct</code> 或 <code>union</code> 在生成的 C++ 代码中具有一致的内存布局,这是依靠 <code>struct</code> 和 <code>union</code> 成员上的显式对齐属性实现的。</p>
-<p>基元 HIDL 类型以及 <code>enum</code> 和 <code>bitfield</code> 类型(始终从基元类型派生而来)会映射到标准 C++ 类型(例如 <a href="http://en.cppreference.com/w/cpp/types/integer">cstdint</a> 中的 <code>std::uint32_t</code>)。</p>
+<p>基本的 HIDL 类型以及 <code>enum</code> 和 <code>bitfield</code> 类型(始终从基本类型派生而来)会映射到标准 C++ 类型,例如 <a href="http://en.cppreference.com/w/cpp/types/integer">cstdint</a> 中的 <code>std::uint32_t</code>。</p>
<p>由于 Java 不支持无符号的类型,因此无符号的 HIDL 类型会映射到相应的有符号 Java 类型。结构体会映射到 Java 类;数组会映射到 Java 数组;Java 目前不支持联合。<em></em><em></em><em></em>字符串在内部以 UTF8 格式存储。<em></em>由于 Java 仅支持 UTF16 字符串,因此发送到或来自 Java 实现的字符串值会进行转换;在重新转换回来后,字符串值可能不会与原来的值完全相同,这是因为字符集并非总能顺畅映射。</p>
@@ -125,7 +125,7 @@ get(string fqName, string name) generates (interface service);
<p><code>pointer</code> 类型仅供 HIDL 内部使用。</p>
<h2 id="bitfield">bitfield &lt;T&gt; 类型模板</h2>
-<p><code>bitfield&lt;T&gt;</code>(其中的 <code>T</code> <a href="#enum">是用户定义的枚举</a>)表明值是在 <code>T</code> 中定义的枚举值的按位“或”值。在生成的代码中,<code>bitfield&lt;T&gt;</code> 会显示为 T 的基础类型。例如:</p>
+<p><code>bitfield&lt;T&gt;</code>(其中的 <code>T</code> 是<a href="#enum">用户定义的枚举</a>)表明值是在 <code>T</code> 中定义的枚举值的按位“或”值。在生成的代码中,<code>bitfield&lt;T&gt;</code> 会显示为 T 的基础类型。例如:</p>
<pre class="prettyprint">
enum Flag : uint8_t {
diff --git a/zh-cn/devices/architecture/hidl/versioning.html b/zh-cn/devices/architecture/hidl/versioning.html
index dfd46848..a651175a 100644
--- a/zh-cn/devices/architecture/hidl/versioning.html
+++ b/zh-cn/devices/architecture/hidl/versioning.html
@@ -130,7 +130,7 @@ interface IQuux {
<p><code>Bar</code> 的完全限定名称为 <code>android.hardware.example@1.0::IQuux.Foo.Bar</code>。</p>
-<p>在上述两种情况下,只有在 <code>Foo</code> 的声明范围内才能使用 <code>Bar</code> 来引用 <code>Bar</code>。在软件包级或接口级,必须通过 <code>Foo</code>:<code>Foo.Bar</code> 来引用 <code>Bar</code>(如上述方法 <code>doSomething</code> 的声明中所述)。或者,您可以更详细地将该方法声明为:</p>
+<p>在上述两种情况下,只有在 <code>Foo</code> 的声明范围内才能使用 <code>Bar</code> 来引用 <code>Bar</code>。在软件包级或接口级,必须通过 <code>Foo</code>:<code>Foo.<code>Bar</code> 来引用 Bar</code>,如上述方法 <code>doSomething</code> 的声明中所示。或者,您可以更详细地将该方法声明为:</p>
<pre class="prettyprint">
// IQuux.hal
@@ -379,7 +379,7 @@ interface IQuux <strong>extends @1.0::IQuux</strong> {
<p>在 <code>IQuux</code> 声明中的 <code>extends @1.0::IQuux</code> 内,我们指定了被继承的 <code>IQuux</code> 的版本(需要澄清说明,因为 <code>IQuux</code> 用于声明接口和从接口继承)。由于声明只是名称(会继承位于声明位置处的所有软件包和版本属性),因此澄清说明必须位于基接口的名称中;我们可能也使用了完全限定的 UDT,但这样做是多余的。</p>
-<p>新接口 <code>IQuux</code> 不会重新声明它从 <code>@1.0::IQuux</code> 继承的方法 <code>fromFooToBar()</code>;它只会列出它添加的新方法 <code>fromBarToFoo()</code>。在 HIDL 中,<strong>不得</strong>在子接口中重新声明继承的方法,所以对于 <code>IQuux</code> 来说,不得显式声明 <code>fromFooToBar()</code>。</p>
+<p>新接口 <code>IQuux</code> 不会重新声明它从 <code>@1.0::IQuux</code> 继承的方法 <code>fromFooToBar()</code>;它只会列出它添加的新方法 <code>fromBarToFoo()</code>。在 HIDL 中,<strong>不得</strong>在子接口中重新声明继承的方法,所以对于 <code>IQuux</code> 来说,它不会是显式声明 <code>fromFooToBar()</code> 的选项。</p>
<aside class="key-point"><strong>要点</strong>:在 HIDL 中,每个从基类继承的方法都必须在继承类中显式实现。如果方法实现需要回退到相关基类,则回退必须位于实现中。</aside>
diff --git a/zh-cn/devices/architecture/kernel/modular-kernels.html b/zh-cn/devices/architecture/kernel/modular-kernels.html
index 70260466..5d3b69b4 100644
--- a/zh-cn/devices/architecture/kernel/modular-kernels.html
+++ b/zh-cn/devices/architecture/kernel/modular-kernels.html
@@ -27,7 +27,7 @@
<ul>
<li>对于独立的 SoC 和 OEM/ODM 内核开发的平台支持。Android O 建议以设备中的内核模块的形式构建和推出所有板专属代码。因此:
<ul>
- <li>所有平台都应支持<a href="https://www.devicetree.org/" class="external">设备树</a>或<a href="http://www.uefi.org/acpi/specs" class="external">高级配置与电源接口 (ACPI)</a>,以描述所有不可检测的设备。</li>
+ <li>所有平台都应支持<a href="https://www.devicetree.org/" class="external">设备树</a>或<a href="http://www.uefi.org/acpi/specs" class="external">高级配置与电源接口 (ACPI)</a>,以便描述所有不可检测的设备。</li>
<li>对于基于设备树的平台,应将板专属设备节点作为<a href="/devices/architecture/dto/index.html">叠加层</a>添加到内核设备树中。</li>
</ul>
</li>
@@ -127,7 +127,7 @@ CONFIG_MODULE_SIG_FORCE=y
<li>SoC 供应商内核模块不应依赖 ODM 内核模块。</li>
</ul>
-<p>在 Android 7.x 及更早版本中,<code>/vendor</code> 和 <code>/odm</code> 分区<strong>未</strong>提前装载。在 Android 8.0 中,为使模块能够从这些分区加载,已进行相关配置,以便为<a href="/devices/tech/ota/ab_updates">非 A/B 和 A/B 设备</a>提前装载分区。这还确保了在 Android 和充电模式下均装载分区。</p>
+<p>在 Android 7.x 及更早版本中,<code>/vendor</code> 和 <code>/odm</code> 分区<strong>不会</strong>提前装载。在 Android 8.0 中,为使模块能够从这些分区加载,已进行相关配置,以便为<a href="/devices/tech/ota/ab_updates">非 A/B 和 A/B 设备</a>提前装载分区。这还确保了在 Android 和充电模式下均装载分区。</p>
<h3 id="android-build-system-support">Android 编译系统支持</h3>
<p>在 <code>BoardConfig.mk</code> 中,Android 编译系统定义了 <code>BOARD_VENDOR_KERNEL_MODULES</code> 变量,该变量提供了用于供应商映像的内核模块的完整列表。此变量中列出的模块会被复制到位于 <code>/lib/modules/</code> 的供应商映像中,在 Android 中装载后会显示在 <code>/vendor/lib/modules</code> 中(根据上述要求)。下面是一个供应商内核模块的配置示例:</p>
@@ -196,7 +196,8 @@ on early-init
<ol>
<li>设备节点路径必须在 <code>fstab</code> 和设备树条目中使用其 by-name 符号链接。<em></em>例如,确保对分区进行命名且设备节点为 <code>/dev/block/…./by-name/{system,vendor,odm}</code>,而不是使用 <code>/dev/block/mmcblk0pX</code> 指定分区。
</li>
-<li>在设备配置中(即 <code>device/<em>oem</em>/<em>project</em>/device.mk</code> 中)为产品 <code>PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION</code> 和 <code>CUSTOM_IMAGE_VERITY_BLOCK_DEVICE</code> 指定的路径必须与 <code>fstab</code>/设备树条目中指定 by-name 的相应块设备节点相匹配。<em></em>例如:<pre class="prettyprint">
+<li>在产品的设备配置中(即 <code>device/<em>oem</em>/<em>project</em>/device.mk</code> 中)为产品 <code>PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION</code> 和 <code>CUSTOM_IMAGE_VERITY_BLOCK_DEVICE</code> 指定的路径必须与 <code>fstab</code>/设备树条目中指定 by-name 的相应块设备节点相匹配。<em></em>例如:
+<pre class="prettyprint">
PRODUCT_SYSTEM_VERITY_PARTITION := /dev/block/…./by-name/system
PRODUCT_VENDOR_VERITY_PARTITION := /dev/block/…./by-name/vendor
CUSTOM_IMAGE_VERITY_BLOCK_DEVICE := /dev/block/…./by-name/odm
@@ -360,7 +361,8 @@ fstab 条目采取以下形式:</p>
<ul>
<li>很多分区都是在 vbmeta 条目中指定的,因为这些分区<a href="https://android.googlesource.com/platform/external/avb/#The-VBMeta-struct">受 AVB 保护</a>。</li>
<li>请务必包含所有 AVB 分区,即使仅提前装载了 <code>/vendor</code> 也是如此。</li>
-<li>请务必为 A/B 分区添加 <strong><code>slotselect</code></strong>。<pre class="prettyprint">
+<li>请务必为 A/B 分区添加 <strong><code>slotselect</code></strong>。
+<pre class="prettyprint">
/ {
vbmeta {
compatible = "android,vbmeta";
@@ -402,7 +404,7 @@ fstab 条目采取以下形式:</p>
<li>分区大小取决于板。
<ul>
<li>DT 叠加层分区大小取决于设备以及主 SoC 内核 DT Blob 上所需的更改量。</li>
- <li>DTBO 分区的大小是构建 SoC 内核所需的更改数的函数。选择分区大小时需要为未来更新留出空间(通常,8MB 大小的分区已绰绰有余)。</li>
+ <li>DTBO 分区的大小是编译 SoC 内核所需的更改数量对应的函数。选择分区大小时需要为未来更新留出空间(通常,8MB 大小的分区已绰绰有余)。</li>
</ul>
</li>
</ul>
diff --git a/zh-cn/devices/architecture/vndk/build-system.html b/zh-cn/devices/architecture/vndk/build-system.html
new file mode 100644
index 00000000..6c88a0ce
--- /dev/null
+++ b/zh-cn/devices/architecture/vndk/build-system.html
@@ -0,0 +1,296 @@
+<html devsite><head>
+ <title>VNDK 编译系统支持</title>
+ <meta name="project_path" value="/_project.yaml"/>
+ <meta name="book_path" value="/_book.yaml"/>
+ </head>
+ <body>
+ <!--
+ Copyright 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<p>编译系统在 Android 8.1 中具有内置的 VNDK 支持。如果启用了 VNDK 支持,编译系统就会检查各模块之间的依赖关系,为供应商模块编译特定于供应商的变体,并自动将这些模块安装到指定目录中。</p>
+
+<p>以下示例演示了基本概念:</p>
+
+<p><img src="../images/treble_vndk_androidbp.png" alt="具有 vendor_available:true 和 vndk.enabled:true 的 libexample"/></p>
+<figcaption><strong>图 1.</strong> 启用 VNDK 支持。</figcaption>
+
+<p><code>Android.bp</code> 模块定义定义了一个名为 <code>libexample</code> 的库。<code>vendor_available</code> 属性表示框架模块和供应商模块均可能依赖于 <code>libexample</code>。在本示例中,框架可执行文件 <code>/system/bin/foo</code> 和供应商可执行文件 <code>/vendor/bin/bar</code> 均依赖于 <code>libexample</code>,并且在其 <code>shared_libs</code> 属性中具有 <code>libexample</code>。</p>
+
+<p>如果框架模块和供应商模块均使用 <code>libexample</code>,则编译 <code>libexample</code> 的两个变体。核心变体(以 <code>libexample</code> 命名)由框架模块使用,供应商变体(以 <code>libexample.vendor</code> 命名)由供应商模块使用。</p>
+
+<p>这两个变体将安装到不同的目录中。核心变体将安装到 <code>/system/lib[64]/libexample.so</code> 中。供应商变体将安装到 <code>/system/lib[64]/vndk/libexample.so</code> 中,因为 <code>vndk.enabled</code> 为 <code>true</code>。</p>
+
+<p>有关更多详情,请参阅<a href="#module-definition">模块定义</a>。</p>
+
+<h2 id="configuration">配置</h2>
+
+<p>要为产品设备启用完整编译系统支持,请将 <code>BOARD_VNDK_VERSION</code> 添加到 <code>BoardConfig.mk</code>:</p>
+
+<pre class="prettyprint">BOARD_VNDK_VERSION := current</pre>
+
+<h3 id="migration-notes">迁移备注</h3>
+
+<p>将 <code>BOARD_VNDK_VERSION</code> 添加到 <code>BoardConfig.mk</code> 会产生全局效应。如果是在 <code>BoardConfig.mk</code> 中定义,系统会检查所有模块。没有将违规模块列入黑名单或白名单的机制。建议您在清除所有不必要的依赖项后再添加 <code>BOARD_VNDK_VERSION</code>。</p>
+
+<p>在迁移过程中,您可以通过在环境变量中设置 <code>BOARD_VNDK_VERSION</code> 来测试和编译模块:</p>
+
+<pre class="prettyprint">$ BOARD_VNDK_VERSION=current m module_name.vendor</pre>
+
+<p>而另一个副作用是,默认的全局标头搜索路径会被移除。<em></em>如果启用 <code>BOARD_VNDK_VERSION</code>,则在默认情况下,系统不会添加以下默认标头搜索路径:</p>
+
+<ul>
+ <li>frameworks/av/include</li>
+ <li>frameworks/native/include</li>
+ <li>frameworks/native/opengl/include</li>
+ <li>hardware/libhardware/include</li>
+ <li>hardware/libhardware_legacy/include</li>
+ <li>hardware/ril/include</li>
+ <li>libnativehelper/include</li>
+ <li>libnativehelper/include_deprecated</li>
+ <li>system/core/include</li>
+ <li>system/media/audio/include</li>
+</ul>
+
+<p>如果某个模块依赖于这些目录中的标头,则其作者必须明确指定与 <code>header_libs</code>、<code>static_libs</code> 和/或 <code>shared_libs</code> 的依赖关系。</p>
+
+<h2 id="module-definition">模块定义</h2>
+
+<p>要使用 <code>BOARD_VNDK_VERSION</code> 编译 Android,开发者必须在 <code>Android.mk</code> 或 <code>Android.bp</code> 中修改其模块定义。本小节介绍了不同种类的模块定义,一些与 VNDK 相关的模块属性,以及在编译系统中实现的依赖性检查。</p>
+
+<h3 id="vendor-modules">供应商模块</h3>
+
+<p>供应商模块是特定于供应商的可执行文件或共享库(必须将这些模块安装到供应商分区中)。在 <code>Android.bp</code> 文件中,供应商模块必须将供应商或专有属性设置为 <code>true</code>。在 <code>Android.mk</code> 文件中,供应商模块必须将 <code>LOCAL_VENDOR_MODULE</code> 或 <code>LOCAL_PROPRIETARY_MODULE</code> 设置为 <code>true</code>。</p>
+
+<p>如果定义了 <code>BOARD_VNDK_VERSION</code>,则编译系统不允许在供应商模块和框架模块之间建立依赖关系。在以下情况下,编译系统会发出错误:</p>
+
+<ul>
+ <li>不具有 <code>vendor:true</code> 的模块依赖于具有 <code>vendor:true</code> 的模块,或</li>
+
+ <li>具有 <code>vendor:true</code> 的模块依赖于既不具有 <code>vendor:true</code> 也不具有 <code>vendor_available:true</code> 的非 <code>llndk_library</code> 模块。</li>
+</ul>
+
+<p>前面提到的依赖性检查适用于 <code>Android.bp</code> 中的 <code>header_libs</code>、<code>static_libs</code> 和 <code>shared_libs</code>,也适用于 <code>Android.mk</code> 中的 <code>LOCAL_HEADER_LIBRARIES</code>、<code>LOCAL_STATIC_LIBRARIES</code> 和 <code>LOCAL_SHARED_LIBRARIES</code>。</p>
+
+<h3 id="ll-ndk">LL-NDK</h3>
+
+<p>LL-NDK 共享库是具有稳定 ABI 的共享库。框架模块和供应商模块均具有相同的最新实现。对于每个 LL-NDK 共享库,<code>Android.bp</code> 文件中都有 <code>llndk_library</code> 模块定义:</p>
+
+<pre class="prettyprint">llndk_library {
+ name: "libvndksupport",
+ symbol_file: "libvndksupport.map.txt",
+}</pre>
+
+<p>该模块定义指定了模块名称和符号文件,后者描述了应该对供应商模块可见的符号。例如:</p>
+
+<pre class="prettyprint">LIBVNDKSUPPORT {
+ global:
+ android_load_sphal_library; # vndk
+ android_unload_sphal_library; # vndk
+ local:
+ *;
+};</pre>
+
+<p>编译系统会根据符号文件为供应商模块生成存根共享库。如果启用了 <code>BOARD_VNDK_VERSION</code>,供应商模块将与这些存根共享库建立关联。</p>
+
+<p>只有在满足以下条件时,存根共享库中才会包含符号:</p>
+
+<ul>
+ <li>它未在以 <code>_PRIVATE</code> 或 <code>_PLATFORM</code> 结尾的部分中定义。</li>
+
+ <li>它不含 <code>#platform-only</code> 标记,并且</li>
+
+ <li>它不含 <code>#introduce*</code> 标记或者该标记与目标匹配。</li>
+</ul>
+
+<aside class="note"><strong>注意</strong>:供应商不得定义自己的 LL-NDK 共享库,因为供应商模块无法在常规系统映像 (GSI) 中找到它们。<em></em></aside>
+
+<h3 id="vndk">VNDK</h3>
+
+<p>在 <code>Android.bp</code> 文件中,<code>cc_library</code>、<code>cc_library_static</code>、<code>cc_library_shared</code> 和 <code>cc_library_headers</code> 模块定义支持三个与 VNDK 相关的属性:<code>vendor_available</code>、<code>vndk.enabled</code> 和 <code>vndk.support_system_process</code>。</p>
+
+<p>如果 <code>vendor_available</code> 或 <code>vndk.enabled</code> 为 <code>true</code>,则可以编译两个变体(核心变体和供应商变体)。<em></em><em></em>核心变体应被视为框架模块,而供应商变体应被视为供应商模块。如果某些框架模块依赖于此模块,则会编译核心变体。如果某些供应商模块依赖于此模块,则会编译供应商变体。</p>
+
+<p>编译系统会强制执行以下依赖性检查:</p>
+
+<ul>
+ <li>核心变体始终供框架专用,无法供供应商模块访问。</li>
+
+ <li>供应商变体始终无法供框架模块访问。</li>
+
+ <li>供应商变体的所有依赖项(在 <code>header_libs</code>、<code>static_libs</code> 和/或 <code>shared_libs</code> 中指定)必须是 <code>llndk_library</code> 或具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块。</li>
+
+ <li>如果 <code>vendor_available</code> 为 <code>true</code>(Android 8.1 的唯一有效值),则所有供应商模块均可访问供应商变体。</li>
+
+ <li>在 AOSP master 中,如果 <code>vendor_available</code> 为 <code>false</code>,则供应商变体只能供其他 VNDK 或 VNDK-SP 模块访问(即,具有 <code>vendor:true</code> 的模块无法与 <code>vendor_available:false</code> 模块相关联)。</li>
+</ul>
+
+<p><code>cc_library</code> 或 <code>cc_library_shared</code> 的默认安装路径由以下规则确定:</p>
+
+<ul>
+ <li>
+ 将核心变体安装到 <code>/system/lib[64]</code> 中。
+ </li>
+
+ <li>
+ 供应商变体安装路径可能会有所不同:
+
+ <ul>
+ <li>
+ 如果 <code>vndk.enabled</code> 为 <code>false</code>,则将供应商变体安装到 <code>/vendor/lib[64]</code> 中。
+ </li>
+
+ <li>
+ 如果 <code>vndk.enabled</code> 为 <code>true</code>,则 <code>vndk.support_system_process</code> 可以是 <code>true</code> 或 <code>false</code>。
+
+ <ul>
+ <li>
+ 如果 <code>vndk.support_system_process</code> 为 <code>false</code>,则将供应商变体安装到 <code>/system/lib[64]/vndk</code> 中。
+ </li>
+
+ <li>
+ 反之,将供应商变体安装到 <code>/system/lib[64]/vndk-sp</code> 中。
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+</ul>
+
+<p>下表对编译系统处理供应商变体的方式进行了总结:</p>
+
+<table>
+ <tbody><tr>
+ <th rowspan="2"><p><code>vendor_available</code></p></th>
+ <th colspan="2"><p><code>vndk</code></p></th>
+ <th rowspan="2"><p><code>Vendor variant descriptions</code></p></th>
+ </tr>
+
+ <tr>
+ <th><p><code>enabled</code></p></th>
+ <th><p><code>support_same_process</code></p></th>
+ </tr>
+
+ <tr>
+ <td rowspan="4"><p><code>true</code></p></td>
+ <td rowspan="2"><p><code>false</code></p></td>
+ <td><p><code>false</code></p></td>
+ <td>
+ <p>供应商变体是 VND-ONLY<em></em></p>
+ <p>共享库将安装到 <code>/vendor/lib[64]</code> 中。</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td><p><code>true</code></p></td>
+ <td><p><em></em>无效(编译错误)</p></td>
+ </tr>
+
+ <tr>
+ <td rowspan="2"><p><code>true</code></p></td>
+ <td><p><code>false</code></p></td>
+ <td>
+ <p>供应商变体是 VNDK<em></em>。</p>
+ <p>共享库将安装到 <code>/system/lib[64]/vndk</code> 中。</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td><p><code>true</code></p></td>
+ <td>
+ <p>供应商变体是 VNDK-SP<em></em>。</p>
+ <p>共享库将安装到 <code>/system/lib[64]/vndk-sp</code> 中。</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td rowspan="4"><p><code>false</code></p></td>
+ <td rowspan="2"><p><code>false</code></p></td>
+ <td><p><code>false</code></p></td>
+ <td><p>没有供应商变体。此模块为 FWK-ONLY。<em></em></p></td>
+ </tr>
+
+ <tr>
+ <td><p><code>true</code></p></td>
+ <td><p><em></em>无效(编译错误)</p></td>
+ </tr>
+
+ <tr>
+ <td rowspan="2"><p><code>true</code></p></td>
+ <td><p><code>false</code></p></td>
+ <td>
+ <p>供应商变体是 VNDK-Indirect。<em></em></p>
+ <p>共享库将安装到 <code>/system/lib[64]/vndk</code> 中。</p>
+ <p>这些变体不得由供应商模块直接使用。</p>
+ <p>AOSP master(而非 Android 8.1)中的新设置。</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td><p><code>true</code></p></td>
+ <td>
+ <p>供应商变体是 VNDK-SP-Indirect-Private。<em></em></p>
+ <p>共享库将安装到 <code>/system/lib[64]/vndk-sp</code> 中。</p>
+ <p>这些变体不得由供应商模块直接使用。</p>
+ <p>AOSP master(而非 Android 8.1)中的新设置。</p>
+ </td>
+ </tr>
+</tbody></table>
+
+<aside class="note"><strong>注意</strong>:供应商可以为其模块设置 <code>vendor_available</code>。但是,供应商既不得设置 <code>vndk.enabled</code> 也不得设置 <code>vndk.support_system_process</code>,因为供应商模块无法在 GSI 中找到它们。</aside>
+
+<h3 id="conditional-compilation">条件编译</h3>
+
+<p>如果核心变体和供应商变体之间存在一些细微差异,您可以使用 <code>target.vendor</code> 为条件编译指定不同的选项。例如:</p>
+
+<pre class="prettyprint">cc_library {
+ name: "libconditional_example",
+ srcs: ["fwk.c", "both.c"],
+ shared_libs: ["libfwk_only", "libboth"],
+ target: {
+ vendor: {
+ exclude_srcs: ["fwk.c"],
+ exclude_shared_libs: ["libfwk_only"],
+ cflags: ["-DVENDOR_VARIANT=1"],
+ cppflags: ["-DVENDOR_VARIANT=1"],
+ },
+ },
+}</pre>
+
+<p>在本示例中,<code>libconditional_example</code> 的核心变体包含 <code>fwk.c</code> 和 <code>both.c</code> 的代码,并且依赖于共享库 <code>libfwk_only</code> 和 <code>libboth</code>。</p>
+
+<p>另一方面,<code>libconditional_example</code> 的供应商变体仅包含 <code>both.c</code> 中的代码,因为 <code>fwk.c</code> 已被 <code>exclude_srcs</code> 属性排除。同样,<code>libconditional_example</code> 仅依赖于共享库 <code>libboth</code>,因为 <code>libfwk_only</code> 已被 <code>exclude_shared_libs</code> 属性排除。<code>cflags</code> 和 <code>cppflags</code> 也可以指定特定于供应商的选项。</p>
+
+<h3 id="product-packages">产品包</h3>
+
+<p>在 Android 编译系统中,变量 <code>PRODUCT_PACKAGES</code> 指定应安装到设备中的可执行文件、共享库或软件包。指定模块的传递依赖项也会隐式安装到设备中。</p>
+
+<p>如果启用了 <code>BOARD_VNDK_VERSION</code>,具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块会得到特殊处理。如果框架模块依赖于具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块,则核心变体将纳入传递安装集中。同样,如果供应商模块依赖于具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块,则供应商变体将纳入传递安装集中。</p>
+
+<p>当相关依赖项对编译系统不可见时(例如,可以在运行时使用 <code>dlopen()</code> 打开的共享库),您应该在 <code>PRODUCT_PACKAGES</code> 中指定模块名称来明确安装这些模块。</p>
+
+<p>如果某个模块具有 <code>vendor_available</code> 或 <code>vndk.enabled</code>,则模块名称代表该模块的核心变体。要在 <code>PRODUCT_PACKAGES</code> 中明确指定供应商变体,请将 <code>.vendor</code> 后缀附加到模块名称上。例如:</p>
+
+<pre class="prettyprint">cc_library {
+ name: "libexample",
+ srcs: ["example.c"],
+ vendor_available: true,
+}</pre>
+
+<p>在本示例中,<code>libexample</code> 代表 <code>/system/lib[64]/libexample.so</code>,<code>libexample.vendor</code> 代表 <code>/vendor/lib[64]/libexample.so</code>。要安装 <code>/vendor/lib[64]/libexample.so</code>,请将 <code>libexample.vendor</code> 添加到 <code>PRODUCT_PACKAGES</code>:</p>
+
+<pre class="prettyprint">PRODUCT_PACKAGES += libexample.vendor</pre>
+
+</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/architecture/vndk/deftool.html b/zh-cn/devices/architecture/vndk/deftool.html
index 629f1bad..27977b58 100644
--- a/zh-cn/devices/architecture/vndk/deftool.html
+++ b/zh-cn/devices/architecture/vndk/deftool.html
@@ -21,13 +21,14 @@
-->
<p>
-VNDK 定义工具可帮助供应商将其源代码树迁移到 Android O 环境。该工具会先扫描系统映像及供应商映像中的二进制文件,然后解析依赖关系。若有模块依赖关系图为依据,该工具还可检测出不符合 VNDK 概念的行为,以及为在分区之间移动模块提供洞见/建议。如果指定了 AOSP 系统映像,VNDK 定义工具便可将您的系统映像与 AOSP 系统映像进行比较,从而确定扩展后的库。
+VNDK 定义工具可帮助供应商将其源代码树迁移到 Android 8.0 环境。该工具会先扫描系统映像及供应商映像中的二进制文件,然后解析依赖关系。若有模块依赖关系图为依据,该工具还可检测出不符合 VNDK 概念的行为,以及为在分区之间移动模块提供洞见/建议。如果指定了常规系统映像 (GSI),VNDK 定义工具便可将您的系统映像与 GSI 进行比较,从而确定扩展后的库。
</p>
<p>
本部分将介绍 VNDK 定义工具常用的 3 个命令:
</p>
<ul>
-<li><code>vndk</code>:为 Android O 中的编译系统临时解决方法计算 VNDK_SP_LIBRARIES、VNDK_SP_EXT_LIBRARIES 和 EXTRA_VENDOR_LIBRARIES。</li>
+<li><code>vndk</code>:为 Android 8.0 及更高版本中的编译系统临时解决方法计算 VNDK_SP_LIBRARIES、VNDK_SP_EXT_LIBRARIES 和 EXTRA_VENDOR_LIBRARIES。
+</li>
<li><code>check-dep</code>:检查是否有违规模块依赖关系(从供应商模块指向不符合条件的框架共享库)。</li>
<li><code>deps</code>:显示共享库与可执行文件之间的依赖关系。</li>
</ul>
@@ -57,7 +58,7 @@ VNDK 定义工具可帮助供应商将其源代码树迁移到 Android O 环境
<tr>
<td><code>--aosp-system</code>
</td>
- <td>指向一个包含将会存放在 AOSP 系统映像中的文件的目录。
+ <td>指向一个包含将会存放在常规系统映像 (GSI) 中的文件的目录。
</td>
</tr>
<tr>
@@ -238,21 +239,13 @@ endif # ifneq ($(filter $(YOUR_DEVICE_NAME),$(TARGET_DEVICE)),)
</tr>
<tr>
<td>LL-NDK</td>
- <td>可由框架模块和供应商模块使用的低级 NDK 库。</td>
+ <td>可由框架模块和供应商模块使用的共享库(具有稳定的 ABI/API)。</td>
</tr>
<tr>
<td>LL-NDK-Indirect</td>
<td>LL-NDK 库的私有依赖项。供应商模块不得直接访问此类库。</td>
</tr>
<tr>
- <td>SP-NDK</td>
- <td>可由框架模块和供应商模块使用的 Same-Process NDK 库。</td>
- </tr>
- <tr>
- <td>SP-NDK-Indirect</td>
- <td>SP-NDK 库的私有依赖项。供应商模块不得直接访问此类库。</td>
- </tr>
- <tr>
<td>VNDK-SP</td>
<td>SP-HAL 框架共享库依赖项。</td>
</tr>
@@ -291,7 +284,7 @@ endif # ifneq ($(filter $(YOUR_DEVICE_NAME),$(TARGET_DEVICE)),)
</tr>
<tr>
<td>SP-HAL-Dep</td>
- <td>SP-HAL 供应商共享库依赖项(也称为 SP-HAL 依赖项,不包括 LL-NDK、SP-NDK 和 VNDK-SP)</td>
+ <td>SP-HAL 供应商共享库依赖项(也称为 SP-HAL 依赖项,不包括 LL-NDK 和 VNDK-SP)</td>
</tr>
<tr>
<td>VND-ONLY</td>
diff --git a/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html b/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html
index b05f4424..8ca5a352 100644
--- a/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html
+++ b/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html
@@ -20,12 +20,12 @@
limitations under the License.
-->
-<p>本页面将介绍运行 Android O 的设备的目录布局,以及 VNDK 规则和关联的 sepolicy。</p>
+<p>本页面将介绍运行 Android 8.0 或更高版本系统的设备的目录布局,以及 VNDK 规则和关联的 sepolicy。</p>
<h2 id="directory">目录布局</h2>
<p><em></em>退化目录布局由以下目录组成:</p>
<ul>
-<li><code>/system/lib[64]</code> 包含所有框架共享库,具体包括 LL-NDK、SP-NDK、VNDK 和框架专用库(包括 LL-NDK-Indirect、SP-NDK-Indirect 以及一些与 VNDK-SP 中的库同名的库)。</li>
+<li><code>/system/lib[64]</code> 包含所有框架共享库,具体包括 LL-NDK、VNDK 和框架专用库(包括 LL-NDK-Indirect 和一些与 VNDK-SP 中的库同名的库)。</li>
<li><code>/system/lib[64]/vndk-sp</code> 包含适用于 Same-Process HAL 的 VNDK-SP 库。</li>
<li><code>/vendor/lib[64]</code> 包含扩展后的 VNDK 库(DXUA 或 DXUX VNDK 库)、Same-Process HAL 实现和其他供应商共享库。</li>
<li><code>/vendor/lib[64]/vndk-sp</code> 可能会包含 VNDK-SP 库所使用的其他库。</li>
@@ -39,18 +39,18 @@
<ul>
<li>框架进程不得从供应商分区加载非 SP-HAL 共享库(Android O 中并未严格地强制实施此规则,但未来版本中会这么做)。
</li>
-<li>供应商进程不得从系统分区加载非 LL-NDK 库、非 SP-NDK 库、非 VNDK-SP 库和非 VNDK 库(Android O 中并未严格地强制实施此规则,但未来版本中会这么做)。</li>
+<li>供应商进程不得从系统分区加载非 LL-NDK 库、非 VNDK-SP 库和非 VNDK 库(Android O 中并未严格地强制实施此规则,但未来版本中会这么做)。</li>
-<p class="note"><strong>注意</strong>:要想从未来版本(比 Android O 更高的版本)的 Framework-Only OTA 中受益,就不得在搭载 Android O 的设备中违反此规则。</p>
+<aside class="note"><strong>注意</strong>:要想从未来版本(比 Android 8.0 更高的版本)仅针对框架的 OTA 中受益,就不得在搭载 Android 8.0 出厂的设备中违反此规则。</aside>
<li>已安装的 VNDK 库必须是由 Google 定义的合格 VNDK 库的子集。</li>
-<li>SP-HAL 和 SP-HAL-Dep 的外部依赖项必须仅限于 LL-NDK 库、SP-NDK 库或由 Google 定义的 VNDK-SP 库。
+<li>SP-HAL 和 SP-HAL-Dep 的外部依赖项必须仅限于 LL-NDK 库或由 Google 定义的 VNDK-SP 库。
<ul>
- <li>SP-HAL 共享库的依赖项必须仅限于 LL-NDK 库、SP-NDK 库、SP-NDK 库、由 Google 定义的 VNDK-SP 库、其他 SP-HAL 库和/或可标记为 SP-HAL-Dep 库的其他供应商共享库。</li>
- <li>只有当供应商共享库不是 AOSP 库,且其依赖项仅限于 LL-NDK 库、SP-NDK 库、由 Google 定义的 VNDK-SP 库、SP-HAL 库和/或其他 SP-HAL-Dep 库时,才可标记为 SP-HAL-Dep 库。</li>
+ <li>SP-HAL 共享库的依赖项必须仅限于 LL-NDK 库、由 Google 定义的 VNDK-SP 库、其他 SP-HAL 库和/或可标记为 SP-HAL-Dep 库的其他供应商共享库。</li>
+ <li>只有当供应商共享库不是 AOSP 库,且其依赖项仅限于 LL-NDK 库、由 Google 定义的 VNDK-SP 库、SP-HAL 库和/或其他 SP-HAL-Dep 库时,才可标记为 SP-HAL-Dep 库。</li>
</ul>
</li>
-<li>VNDK-SP 必须保持独立。在 Android O 中,<code>libRS_internal.so</code> 会被系统以特殊方式处理,但在未来版本中,其处理方式会被重新考虑。</li>
+<li>VNDK-SP 必须保持独立。在 Android 8.0 中,系统以一种特殊方式处理 <code>libRS_internal.so</code>,但在未来版本中,其处理方式会被重新考虑。</li>
<li>不得通过非 HIDL 接口(包括但不限于 Binder、套接字、共享内存、文件等)进行框架-供应商通信。</li>
<li>系统分区必须足够大,以便容纳所有符合条件的 VNDK 库的两个副本,以及不符合条件的框架共享库的一个副本。</li>
</ul>
@@ -80,18 +80,6 @@
<td>是</td>
</tr>
<tr>
- <td>SP-NDK</td>
- <td>系统</td>
- <td>是</td>
- <td>是</td>
- </tr>
- <tr>
- <td>SP-NDK-Indirect</td>
- <td>系统</td>
- <td>是</td>
- <td>是</td>
- </tr>
- <tr>
<td>VNDK-SP/VNDK-SP-Indirect/VNDK-SP-Indirect-Private</td>
<td>系统</td>
<td>是</td>
@@ -147,6 +135,6 @@
</tr>
</tbody></table>
-<p>LL-NDK-Indirect、SP-NDK-Indirect、VNDK-SP-Indirect 和 VNDK-SP-Indirect-Private 必须从这两个域中都可访问,因为非 <code>coredomain</code> 会间接访问这些库。同样,SP-HAL-Dep 必须可从 <code>coredomain</code> 访问,因为 SP-HAL 依赖该域。</p>
+<p>LL-NDK-Indirect、VNDK-SP-Indirect 和 VNDK-SP-Indirect-Private 必须从这两个域中都可访问,因为非 <code>coredomain</code> 会间接访问这些库。同样,SP-HAL-Dep 必须可从 <code>coredomain</code> 访问,因为 SP-HAL 依赖该域。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/architecture/vndk/enabling.html b/zh-cn/devices/architecture/vndk/enabling.html
new file mode 100644
index 00000000..ecca086c
--- /dev/null
+++ b/zh-cn/devices/architecture/vndk/enabling.html
@@ -0,0 +1,144 @@
+<html devsite><head>
+ <title>启用 VNDK</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
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<p>为了将供应商模块与系统模块分开考虑,VNDK 需要对代码库进行一些更改。请按照以下指南在供应商/OEM 代码库中启用 VNDK。</p>
+
+<h2 id="build-system-libraries">编译系统库</h2>
+<p>编译系统包含多种类型的对象,其中包括库(共享、静态或标头)和二进制文件:</p>
+
+<img src="../images/treble_vndk_build_system_libraries.png"/>
+<figcaption><strong>图 1.</strong> 编译系统库。</figcaption>
+
+<ul>
+<li><strong>核心</strong>:由系统映像在系统映像上使用。<code>vendor</code>、<code>vendor_available</code>、<code>vndk</code> 或 <code>vndk-sp</code> 库不能使用此类库。
+<pre class="prettyprint">
+cc_library {
+ name: "libThatIsCore",
+ ...
+}
+</pre>
+</li>
+
+<li><strong>仅限供应商</strong>(或 <code>proprietary</code>):由供应商映像在供应商映像上使用。
+<pre class="prettyprint">
+cc_library {
+ name: "libThatIsVendorOnly",
+ proprietary: true,
+ # or: vendor: true, # (for things in AOSP)
+ ...
+}
+
+</pre></li>
+
+<li><strong>vendor_available</strong>:由供应商映像在供应商映像上使用(可能包含 <code>core</code> 的重复项)。
+<pre class="prettyprint">
+cc_library {
+ name: "libThatIsVendorAvailable",
+ vendor_available: true,
+ ...
+}
+</pre>
+</li>
+
+<li><strong>vndk</strong>:由供应商映像在系统映像上使用(<code>vendor_available</code> 的子集)。
+<pre class="prettyprint">
+cc_library {
+ name: "libThatIsVndk",
+ vendor_available: true,
+ vndk: {
+ enabled: true,
+ }
+ ...
+}
+</pre>
+</li>
+
+<li><strong>vndk-sp</strong>:由系统映像在系统映像上间接使用(<code>core</code> 的子集)。
+<pre class="prettyprint">
+cc_library {
+ name: "libThatIsVndkSp",
+ vendor_available: true,
+ vndk: {
+ enabled: true,
+ support_system_process: true,
+ }
+ ...
+}
+</pre>
+</li>
+
+<li><strong>llndk</strong>:同时由系统映像和供应商映像使用。
+<pre class="prettyprint">
+llndk_library {
+ name: "libThasIsLlndk",
+}
+</pre>
+</li>
+</ul>
+
+<p>当 lib 被标记为 <code>vendor_available:true</code> 时,它将编译两次:</p>
+<ul>
+<li>一次是为平台编译(因此被安装到 <code>/system/lib</code> 中)。</li>
+<li>一次是为供应商编译(因此被安装到 <code>/vendor/lib</code>、<code>/system/lib/vndk</code> 或 <code>/system/lib/vndk-sp</code> 中)。</li>
+</ul>
+
+<p>libs 的供应商版本是使用 <code>-D__ANDROID_VNDK__</code> 编译的。您可以使用此标记停用在 Android 未来版本中可能会发生显著变化的专用系统组件。此外,不同的库会导出一组不同的标头(例如 <code>liblog</code>)。可以在 <code>Android.bp</code> 文件中指定相应目标的供应商变体特有的选项:</p>
+<pre class="prettyprint">target: { vendor: { … } }</pre>
+
+<h2 id="enabling">为代码库启用 VNDK</h2>
+<p>要为代码库启用 VNDK,请执行以下操作:</p>
+<ol>
+<li>通过计算 <code>vendor.img</code> 和 <code>system.img</code> 分区的所需大小来确定是否符合资格。</li>
+<li>启用 <code>BOARD_VNDK_VERSION=current</code>。您可以添加到 <code>BoardConfig.mk</code>,也可以直接通过它编译组件(即 <code>m -j BOARD_VNDK_VERSION=current <var>MY-LIB</var></code>)。</li>
+</ol>
+<p>在启用 <code>BOARD_VNDK_VERSION=current</code> 后,编译系统会强制执行以下依赖项和标头要求。</p>
+
+<h3 id="managing-dependencies">管理依赖项</h3>
+<p>如果 <code>vendor</code> 对象依赖的 <code>core</code> 组件在 <code>vndk</code> 中不存在或未以 <code>vendor</code> 对象的形式出现,则必须使用下列选项之一解析该对象:</p>
+<ul>
+<li>可以移除依赖项。</li>
+<li>如果 <code>core</code> 组件归 <code>vendor</code> 所有,则可以将其标记为 <code>vendor_available</code> 或 <code>vendor</code>。</li>
+<li>构成 <code>vndk</code> 核心对象部分的更改可以在上游提交给 Google。</li>
+</ul>
+<p>此外,如果 <code>core</code> 组件依赖于 <code>vendor</code> 组件,则必须使 <code>vendor</code> 组件成为 <code>core</code> 组件,<strong>或者</strong>必须以其他方式移除依赖项(例如,通过移除依赖项或将其移到 <code>vendor</code> 组件中)。</p>
+
+<h3 id="managing-headers">管理标头</h3>
+<p>必须移除全局标头依赖项,编译系统才能知道在编译标头时是否带 <code>-D__ANDROID_VNDK__</code>。例如,诸如 <code>utils/StrongPointer.h</code> 之类的 libutils 标头仍可以使用标头库 <a href="https://android.googlesource.com/platform/system/core/+/master/libutils/include/utils" class="external"><code>libutils_headers</code></a> 来访问。
+</p>
+
+<p>某些标头(例如 <code>unistd.h</code>)无法再以传递方式包含在内,但可以包含在本地。</p>
+
+<p>最后,<code>private/android_filesystem_config.h</code> 的公共部分已移至 <code>cutils/android_filesystem_config.h</code>。要管理这些标头,请执行下列操作之一:</p>
+
+<ul>
+<li>通过将所有 <code>AID_*</code> 宏替换为 <code><a href="http://man7.org/linux/man-pages/man3/getgrnam.3.html" class="external">getgrnam</a></code>/<code><a href="http://man7.org/linux/man-pages/man3/getpwnam.3.html" class="external">getpwnam</a></code> 调用(如果可能),移除 <code>private/android_filesystem_config.h</code> 的依赖项。例如:
+
+<ul>
+<li><code>(uid_t)AID_WIFI</code> 会变为 <code>getpwnam("wifi")-&gt;pw_uid</code>。</li>
+<li><code>(gid_t)AID_SDCARD_R</code> 会变为 <code>getgrnam("sdcard_r")-&gt;gr_gid</code>。</li>
+</ul>
+如需了解详情,请参阅 <code><a href="https://android.googlesource.com/platform/system/core/+/master/libcutils/include/private/android_filesystem_config.h" class="external">private/android_filesystem_config.h</a></code>。
+</li>
+<li>对于硬编码的 AIS,请添加 <code>cutils/android_filesystem_config.h</code>。</li>
+</ul>
+
+</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/architecture/vndk/extensions.html b/zh-cn/devices/architecture/vndk/extensions.html
index 1a75be47..0bfc5c04 100644
--- a/zh-cn/devices/architecture/vndk/extensions.html
+++ b/zh-cn/devices/architecture/vndk/extensions.html
@@ -94,13 +94,13 @@
<h2 id="vndk-extension-mechanism">VNDK 扩展机制</h2>
<p>
-由于同名的 AOSP 库不包含扩展功能,因此依赖扩展功能的供应商模块将无法正常工作。如果供应商模块直接或间接依赖扩展功能,则供应商应将 DAUX、DXUA 和 DXUX 共享库复制到供应商分区(供应商进程始终都会先在供应商分区中查找共享库)。但是,由于不得复制 LL-NDK 和 SP-NDK 库,因此供应商模块不得依赖由修改后的 LL-NDK 和 SP-NDK 库定义的扩展功能。
+由于同名的 AOSP 库不包含扩展功能,因此依赖扩展功能的供应商模块将无法正常工作。如果供应商模块直接或间接依赖扩展功能,则供应商应将 DAUX、DXUA 和 DXUX 共享库复制到供应商分区(供应商进程始终都会先在供应商分区中查找共享库)。但是,由于不得复制 LL-NDK 库,因此供应商模块不得依赖由修改后的 LL-NDK 库定义的扩展功能。
</p>
<p>
-当系统分区被 AOSP 系统映像覆盖时,如果相应的 AOSP 库可以提供相同的功能,且供应商模块可以继续正常工作,DAUA 共享库便可保留在系统分区上。
+当系统分区被常规系统映像 (GSI) 覆盖时,如果相应的 AOSP 库可以提供相同的功能,且供应商模块可以继续正常工作,DAUA 共享库便可保留在系统分区上。
</p>
<p>
-简易替换非常重要,因为 AOSP 系统映像中未经修改的 VNDK 库将会在名称冲突时与修改后的共享库关联。如果以 API/ABI 不兼容的方式修改 AOSP 库,那么 AOSP 系统映像中的 AOSP 库可能会无法进行关联或会出现未定义的行为。
+简易替换非常重要,因为 GSI 中未经修改的 VNDK 库将会在名称冲突时与修改后的共享库关联。如果以 API/ABI 不兼容的方式修改 AOSP 库,那么 GSI 中的 AOSP 库可能会无法进行关联或会出现未定义的行为。
</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/architecture/vndk/index.html b/zh-cn/devices/architecture/vndk/index.html
index 646d36be..8d8bd521 100644
--- a/zh-cn/devices/architecture/vndk/index.html
+++ b/zh-cn/devices/architecture/vndk/index.html
@@ -23,16 +23,16 @@
<p>供应商原生开发套件 (VNDK) 是专门用来让供应商实现其 HAL 的一组库。VNDK 包含在 <code>system.img</code> 中,并在运行时与供应商代码动态关联。</p>
<h2 id="why-vndk">为何要使用 VNDK?</h2>
-<p>Android O 支持 Framework-Only 更新,在此类更新中,系统分区可以升级到最新版本,而供应商分区保持不变。这意味着在不同时间编译的二进制文件必须能够相互配合使用;VNDK 为 Android 版本迭代时发生的 API/ABI 变更所导致的问题提供了解决途径。</p>
+<p>Android 8.0 及更高版本支持框架专用更新,在此类更新中,系统分区可以升级到最新版本,而供应商分区保持不变。这意味着在不同时间编译的二进制文件必须能够相互配合使用;VNDK 为 Android 版本迭代时发生的 API/ABI 变更所导致的问题提供了解决途径。</p>
-<p>Framework-Only 更新面临着以下挑战:</p>
+<p>框架专用更新面临着以下挑战:</p>
<ul>
-<li><strong>框架模块与供应商模块之间的依赖关系</strong>。在 Android O 之前的版本中,两种模块可以互相关联。但是,来自供应商模块的依赖关系对框架模块开发施加了不必要的限制。</li>
-<li><strong>AOSP 库的扩展</strong>。Android O 要求所有 Android 设备在系统分区被替换为标准 AOSP 系统映像时,都可以通过 CTS 测试。不过,当供应商扩展 AOSP 库以提高性能或为其 HIDL 实现添加额外的功能时,使用标准 AOSP 系统映像来刷写系统分区可能会破坏供应商的 HIDL 实现(有关如何防止此类破坏的指南,请参阅 <a href="/devices/architecture/vndk/extensions.html">VNDK 扩展</a>)。</li>
+<li><strong>框架模块与供应商模块之间的依赖关系</strong>。在 Android 8.0 之前的版本中,两种模块可以互相关联。但是,来自供应商模块的依赖关系对框架模块开发施加了不必要的限制。</li>
+<li><strong>AOSP 库的扩展</strong>。Android 8.0 及更高版本要求所有 Android 设备在系统分区被替换为标准常规系统映像 (GSI) 时,都可以通过 CTS 测试。不过,当供应商扩展 AOSP 库以提高性能或为其 HIDL 实现添加额外的功能时,使用标准 GSI 来刷写系统分区可能会破坏供应商的 HIDL 实现(有关如何防止此类破坏的指南,请参阅 <a href="/devices/architecture/vndk/extensions.html">VNDK 扩展</a>)。</li>
</ul>
-<p>为了克服这些挑战,Android O 引入了几项技术,例如 VNDK(如本部分中所述)、<a href="/devices/architecture/hidl/index.html">HIDL</a>、hwbinder、<a href="/devices/architecture/dto/index.html">设备树叠加层</a>和 sepolicy 叠加层。</p>
+<p>为了克服这些挑战,Android 8.0 引入了几项技术,例如 VNDK(如本部分中所述)、<a href="/devices/architecture/hidl/index.html">HIDL</a>、hwbinder、<a href="/devices/architecture/dto/index.html">设备树叠加层</a>和 sepolicy 叠加层。</p>
<h2 id="resources">VNDK 资源</h2>
<p>本部分包含以下 VNDK 资源:</p>
@@ -40,15 +40,16 @@
<li><em><a href="#vndk-concepts">VNDK 概念</a></em>(参见下文)介绍了框架共享库、Same-Process HAL (SP-HAL) 和 VNDK 术语。
</li>
<li><em><a href="/devices/architecture/vndk/extensions.html">VNDK 扩展</a></em>对供应商专属更改进行了分类。例如,具有供应商模块所依赖的扩展功能的库必须复制到供应商分区中,但禁止进行 ABI 不兼容的更改。</li>
-<li><em><a href="/devices/architecture/vndk/deftool.html">VNDK 定义工具</a></em>可帮助您将源代码树迁移到 Android O。</li>
+<li><em><a href="/devices/architecture/vndk/build-system.html">VNDK 编译系统支持</a></em>介绍了与 VNDK 相关的编译系统配置和模块定义语法。</li>
+<li><em><a href="/devices/architecture/vndk/deftool.html">VNDK 定义工具</a></em>可帮助您将源代码树迁移到 Android 8.0 及更高版本。</li>
<li><em><a href="/devices/architecture/vndk/linker-namespace.html">链接器命名空间</a></em>提供对共享库关联的精细控制。
</li>
-<li><em><a href="/devices/architecture/vndk/dir-rules-sepolicy.html">目录、规则和 sepolicy</a></em> 定义了运行 Android O 的设备的目录布局,以及 VNDK 规则和关联的 sepolicy。</li>
+<li><em><a href="/devices/architecture/vndk/dir-rules-sepolicy.html">目录、规则和 sepolicy</a></em> 定义了运行 Android 8.0 及更高版本的设备的目录布局,以及 VNDK 规则和关联的 sepolicy。</li>
<li><em><a href="../images/vndk_design_android_o.pdf">Android O 中的 VDNK 设计</a></em>演示文稿阐述了 Android O 中使用的 VDNK 基本概念。</li>
</ul>
<h2 id="concepts">VNDK 概念</h2>
-<p>在理想的 Android O 环境中,框架进程不加载供应商共享库,所有供应商进程仅加载供应商共享库(和一部分框架共享库),而框架进程与供应商进程之间的通信由 HIDL 和硬件 binder 控制。</p>
+<p>在理想的 Android 8.0 及更高版本环境中,框架进程不加载供应商共享库,所有供应商进程仅加载供应商共享库(和一部分框架共享库),而框架进程与供应商进程之间的通信由 HIDL 和硬件 binder 控制。</p>
<p>这样的环境存在以下可能:来自框架共享库的稳定、公共 API 可能不足以满足供应商模块开发者的需求(尽管 API 在不同的 Android 版本之间会有所变化),要防止出现这种情况,供应商进程需要能够访问一部分框架共享库。此外,由于性能要求可能会导致折中方案,因此必须区别对待某些对响应时间要求严格的 HAL。</p>
@@ -65,10 +66,10 @@
<p>根据共享库的特性不同,使用的方法也有差异。因此,框架共享库可分为以下三个子类别:</p>
<ul>
-<li><em></em><em></em><em></em>LL-NDK 和 SP-NDK 是已知稳定的框架共享库。它们的开发者致力于保持其 API/ABI 的稳定性。
+<li><em></em><em></em>LL-NDK 库是已知稳定的框架共享库。它们的开发者致力于保持其 API/ABI 的稳定性。
<ul>
- <li>LL-NDK 包含以下库:<code>libandroid_net.so</code>、<code>libc.so</code>、<code>libstdc++.so</code>、<code>libdl.so</code>、<code>liblog.so</code>、<code>libm.so</code>、<code>libz.so</code> 和 <code>libvndksupport.so</code>。</li>
- <li>SP-NDK 包含以下库:<code>libEGL.so</code>、<code>libGLESv1_CM.so</code>、<code>libGLESv2.so</code>、<code>libGLESv3.so</code>、<code>libvulkan.so</code>、<code>libnativewindow.so</code> 和 <code>libsync.so</code>。</li>
+ <li>LL-NDK 包含以下库:<code>libEGL.so</code>、<code>libGLESv1_CM.so</code>、<code>libGLESv2.so</code>、<code>libGLESv3.so</code>、<code>libandroid_net.so</code>、<code>libc.so</code>、<code>libdl.so</code>、<code>liblog.so</code>、<code>libm.so</code>、<code>libnativewindow.so</code>、<code>libsync.so</code> 和 <code>libvndksupport.so</code>
+</li>
</ul>
</li>
<li><em></em><em></em>符合条件的 VNDK 库 (VNDK) 是指可以安全复制两次的框架共享库。<em></em><em></em>框架模块和供应商模块可以与其各自的库副本相关联。框架共享库只有满足以下条件才能成为符合条件的 VNDK 库:
@@ -92,15 +93,16 @@
<h3 id="sp-hal">Same-Process HAL (SP-HAL)</h3>
<p>
-<em></em><em></em><em></em><em></em>Same-Process HAL (SP-HAL) 是一组预先确定的 HAL,作为供应商共享库进行实现,并被加载到框架进程中。SP-HAL 由链接器命名空间(控制共享库可见的库和符号)进行隔离。SP-HAL 必须仅依赖于 LL-NDK、SP-NDK 和 VNDK-SP。<em></em><em></em><em></em></p>
+<em></em><em></em><em></em><em></em>Same-Process HAL (SP-HAL) 是一组预先确定的 HAL,作为供应商共享库进行实现,并被加载到框架进程中。SP-HAL 由链接器命名空间(控制共享库可见的库和符号)进行隔离。SP-HAL 必须仅依赖于 LL-NDK 和 VNDK-SP<em></em><em></em>。</p>
<p>VNDK-SP 是一部分预定义的符合条件的 VNDK 库。我们会仔细审查 VNDK-SP 库,以确保将 VNDK-SP 库双重加载到框架进程中不会导致问题。SP-HAL 和 VNDK-SP 均由 Google 定义。</p>
<p>以下库是经过批准的 SP-HAL:</p>
<ul>
-<li><code>libGLESv2_${driver}.so</code></li>
<li><code>libGLESv1_CM_${driver}.so</code></li>
+<li><code>libGLESv2_${driver}.so</code></li>
+<li><code>libGLESv3_${driver}.so</code></li>
<li><code>libEGL_${driver}.so</code></li>
<li><code>vulkan.${driver}.so</code></li>
<li><code>android.hardware.renderscript@1.0-impl.so</code></li>
@@ -123,7 +125,9 @@
<li><code>libhidlbase.so</code></li>
<li><code>libhidltransport.so</code></li>
<li><code>libhwbinder.so</code></li>
+<li><code>libion.so</code></li>
<li><code>libutils.so</code></li>
+<li><code>libz.so</code></li>
</ul>
<p>
@@ -171,4 +175,26 @@
<code>/vendor/bin/android.hardware.camera.provider@2.4-service</code>)产生的进程。
</ul>
+<aside class="note"><strong>注意</strong>:常规系统映像 (GSI) 代表根据相应分支(与版本分支类似,但修正了一些错误或进行了一些泛化)编译并由 Google 发布的标准 Android 系统映像。<em></em></aside>
+
+<h2 id="document-history">文档历史记录</h2>
+
+<p>本部分跟踪了对 VNDK 文档的更改。</p>
+
+<h3 id="changes-81">Android 8.1 的变化</h3>
+
+<ul>
+ <li>SP-NDK 库已合并到 LL-NDK 库中。</li>
+
+ <li>在 RS 命名空间部分中将 <code>libui.so</code> 替换为 <code>libft2.so</code>。包含 <code>libui.so</code> 会出错。</li>
+
+ <li>将 <code>libGLESv3.so</code> 和 <code>libandroid_net.so</code> 添加到 LL-NDK 库中。</li>
+
+ <li>将 <code>libion.so</code> 添加到 VNDK-SP 库中。</li>
+
+ <li>从 LL-NDK 库中移除 <code>libstdc++.so</code>。改用 <code>libc++.so</code>。某些版本的独立工具链可以将 <code>-lstdc++</code> 添加到默认链接器标记中。要停用默认设置,请将 <code>-nodefaultlibs -lc -lm -ldl</code> 添加到 <code>LDFLAGS</code> 中。</li>
+
+ <li>将 <code>libz.so</code> 从 LL-NDK 移到 VNDK-SP 库中。在某些配置中,<code>libz.so</code> 可能仍是 LL-NDK。但是,应该没有明显的差异。</li>
+</ul>
+
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/architecture/vndk/linker-namespace.html b/zh-cn/devices/architecture/vndk/linker-namespace.html
index 2b7a5c81..f5ecb407 100644
--- a/zh-cn/devices/architecture/vndk/linker-namespace.html
+++ b/zh-cn/devices/architecture/vndk/linker-namespace.html
@@ -20,104 +20,699 @@
limitations under the License.
-->
-<p>链接器命名空间是一种控制共享库搜索路径以及打开目录中库的权限的机制。</p>
-
-<h2 id="framework-processes">框架进程</h2>
-<h3 id="default-namespace">默认命名空间</h3>
-<p>搜索路径和允许的路径:</p>
-<ol>
-<li><code>/system/lib[64]</code></li>
-<li><code>/vendor/lib[64]</code> # 在 Android O 中已弃用(仅适用于旧版模块)</li>
-</ol>
-
-<h3 id="sp-hal-namespace">SP-HAL 命名空间</h3>
-<p>搜索路径和允许的路径:</p>
-<ol>
-<li><code>/vendor/lib[64]/egl</code></li>
-<li><code>/vendor/lib[64]/hw</code></li>
-<li><code>/vendor/lib[64]</code></li>
-</ol>
-
-<p>从其他命名空间导入的共享库:</p>
+<p>动态链接器解决了 Treble VNDK 设计中的两个难题:</p>
+
<ul>
-<li>由<strong>默认</strong>命名空间导出的库:
- <ul>
- <li>LL-NDK:<code>libc.so</code>、<code>libm.so</code>、<code>libdl.so</code>、<code>libstdc++.so</code>、<code>liblog.so, libz.so</code></li>
- <li>SP-NDK:<code>libEGL.so</code>、<code>libGLESv1_CM.so</code>、<code>libGLESv2.so</code>、<code>libnativewindow.so</code>、<code>libsync.so</code>、<code>libvndksupport.so</code></li>
- </ul>
-</li>
-<li>由 <strong>vndk</strong> 命名空间导出的库:<code>android.hardware.renderscript@1.0.so</code>、<code>android.hardware.graphics.allocator@2.0.so</code>、<code>android.hardware.graphics.mapper@2.0.so</code>、<code>android.hardware.graphics.common@1.0.so</code>、<code>libhwbinder.so</code>、<code>libbase.so</code>、<code>libcutils.so</code>、<code>libhardware.so</code>、<code>libhidlbase.so</code>、<code>libhidltransport.so</code>、<code>libutils.so</code>、<code>libc++.so</code>
-</li>
-<li>由 <strong>rs</strong> 命名空间导出的库:<code>libRS_internal.so</code>
-</li>
+ <li>将 SP-HAL 共享库及其依赖项(包括 VNDK-SP 库)加载到框架进程中。应该有一些防止出现符号冲突的机制。</li>
+
+ <li><code>dlopen()</code> 和 <code>android_dlopen_ext()</code> 可能会引入一些在编译时不可见的运行时依赖关系,这些依赖关系使用静态分析很难检测到。</li>
</ul>
-<h3 id="vndk-vndk-sp-namespace">VNDK (VNDK-SP) 命名空间</h3>
-<p>搜索路径:</p>
-<ol>
-<li><code>/vendor/lib[64]/vndk-sp</code></li>
-<li><code>/system/lib[64]/vndk-sp</code></li>
-<li><code>/vendor/lib[64]</code></li>
-</ol>
+<p>这两个难题可以通过链接器命名空间机制来解决。<em></em>链接器命名空间机制由动态链接器提供,可以隔离不同链接器命名空间中的共享库,以确保具有相同库名称和不同符号的库不会发生冲突。</p>
-<p>允许的路径:</p>
-<ul>
-<li><code>/vendor/lib[64]/vndk-sp</code></li>
-<li><code>/system/lib[64]/vndk-sp</code></li>
-<li><code>/vendor/lib[64]</code></li>
-<li><code>/vendor/lib[64]/hw</code></li>
-<li><code>/vendor/lib[64]/egl</code></li>
-</ul>
+<p>另一方面,链接器命名空间机制可提供相应的灵活性,从而将由一个链接器命名空间导出的某些共享库用于另一个链接器命名空间。这些导出的共享库可能会成为对其他程序公开的应用编程接口,同时在其链接器命名空间中隐藏实现细节。</p>
+
+<p>例如,<code>/system/lib[64]/libcutils.so</code> 和 <code>/system/lib[64]/vndk-sp/libutils.so</code> 是两个共享库。这两个库可能有不同的符号。它们将加载到不同的链接器命名空间中,以便框架模块可以依赖于 <code>/system/lib[64]/libcutils.so</code>,SP-HAL 共享库可以依赖于 <code>/system/lib[64]/vndk-sp/libcutils.so</code>。</p>
+
+<p>另一方面,<code>/system/lib[64]/libc.so</code> 是由一个链接器命名空间导出而后又被导入到许多链接器命名空间中的公共库。<code>/system/lib[64]/libc.so</code> 的依赖项(例如 <code>libnetd_client.so</code>)将被加载到 <code>/system/lib[64]/libc.so</code> 所在的命名空间中。其他命名空间将无法访问这些依赖项。这种机制会在提供公共接口的同时封装实现细节。</p>
+
+<h2 id="how-does-it-work">工作原理</h2>
+
+<p>动态链接器负责加载 <code>DT_NEEDED</code> 条目中指定的共享库,或由 <code>dlopen()</code> 或 <code>android_dlopen_ext()</code> 的参数指定的共享库。在这两种情况下,动态链接器都会找出调用程序所在的链接器命名空间,并尝试将相关依赖项加载到同一个链接器命名空间中。如果动态链接器无法将共享库加载到指定的链接器命名空间中,它会向关联的链接器命名空间索取导出的共享库。</p>
+
+<h2 id="configuration-file-format">配置文件格式</h2>
+
+<p>配置文件格式取决于 INI 文件格式。典型的配置文件如下所示:</p>
+
+<pre class="prettyprint">
+dir.system = /system/bin
+dir.vendor = /vendor/bin
+
+[system]
+additional.namespaces = sphal
+
+namespace.default.isolated = true
+namespace.default.search.paths = /system/${LIB}:/vendor/${LIB}
+namespace.default.permitted.paths = /system/${LIB}:/vendor/${LIB}
+
+namespace.sphal.isolated = true
+namespace.sphal.visible = true
+namespace.sphal.search.paths = /vendor/${LIB}
+namespace.sphal.permitted.paths = /vendor/${LIB}
+namespace.sphal.links = default
+namespace.sphal.link.default.shared_libs = libc.so:libm.so
+
+[vendor]
+namespace.default.isolated = false
+namespace.default.search.paths = /vendor/${LIB}:/system/${LIB}
+namespace.default.permitted.paths = /vendor/${LIB}:/system/${LIB}
+</pre>
+
+<p>首先,<code>ld.config.txt</code> 的开头有几个 <code>dir.${section}</code> 属性:</p>
+
+<pre class="prettyprint">
+dir.${section} = /path/to/bin/directory
+</pre>
+
+<p>这些属性决定了将应用于相应进程的一系列规则。<em></em>例如,如果主可执行文件位于 <code>/system/bin</code> 中,则会应用 <code>[system]</code> 中的规则。<em></em>同样,如果主可执行文件位于 <code>/vendor/bin</code> 中,则会应用 <code>[vendor]</code> 中的规则。</p>
+
+<p>其次,除了 <code>default</code> 链接器命名空间外,<code>addition.namespaces</code> 还为每个部分指定了将由动态链接器创建的额外链接器命名空间(用英文逗号分隔):</p>
+
+<pre class="prettyprint">
+additional.namespaces = namespace1,namespace2,namespace3
+</pre>
+
+<p>在上述示例中,动态链接器为 <code>/system/bin</code> 中的可执行文件创建了两个链接器命名空间(<code>default</code> 和 <code>sphal</code>)。</p>
+
+<p>再次,对于每个链接器命名空间,可以配置以下属性:</p>
+
+<pre class="prettyprint">
+namespace.${name}.search.paths = /path1/${LIB}:/path2/${LIB}
+namespace.${name}.permitted.paths = /path1:/path2
+namespace.${name}.isolated = true|false
+namespace.${name}.links = namespace1,namespace2
+namespace.${name}.link.${other}.shared_libs = lib1.so:lib2.so
+namespace.${name}.visible = true|false
+</pre>
+
+<p><code>namespace.${name}.search.paths</code> 表示将附加到库名称前面的目录。各目录之间用英文冒号隔开。
+<code>${LIB}</code> 是一个特殊的占位符。如果相应进程正在运行 32 位可执行文件,则 <code>${LIB}</code> 将被替换为 <code>lib</code>。同样,如果相应进程正在运行 64 位可执行文件,则 <code>${LIB}</code> 将被替换为 <code>lib64</code>。</p>
+
+<p>在上述示例中,如果 <code>/system/bin</code> 中的 64 位可执行文件与 <code>libexample.so</code> 相关联,则动态链接器会首先搜索 <code>/system/lib64/libexample.so</code>。如果找不到 <code>/system/lib64/libexample.so</code>,则动态链接器会搜索 <code>/vendor/lib64/libexample.so</code>。</p>
+
+<p>如果 <code>namespace.${name}.isolated</code> 为 <code>true</code>,则动态链接器仅会加载 <code>namespace.${name}.search.paths</code> 中指定目录下的共享库,或 <code>namespace.${name}.permitted.paths</code> 中指定目录下的共享库。</p>
+
+<p>在上述示例中,在 <code>sphal</code> 链接器命名空间中加载的共享库将无法关联到 <code>/system/lib[64]</code> 中的共享库,因为 <code>namespace.sphal.isolated</code> 为 <code>true</code> 并且 <code>/system/lib[64]</code> 既不在 <code>namespace.sphal.permitted.paths</code> 中也不在 <code>namespace.sphal.search.paths</code> 中。</p>
+
+<p><code>namespace.${name}.links</code> 指定了 <code>${name}</code> 链接器命名空间关联到的链接器命名空间列表(以英文逗号分隔)。</p>
+
+<p>在上述示例中,<code>namespace.sphal.links</code> 指定 <code>sphal</code> 链接器命名空间关联到 <code>default</code> 链接器命名空间。</p>
+
+<p><code>namespace.${name}.link.${other}.shared_libs</code> 会关联两个链接器命名空间,并指定可能会利用后备链接的共享库名称(用英文冒号分隔)。如果某个共享库无法加载到 <code>${name}</code> 链接器命名空间中,并且其名称位于 <code>namespace.${name}.link.${other}.shared_libs</code> 中,则动态链接器会尝试从 <code>${other}</code> 链接器命名空间导入该库。</p>
+
+<p>在上述示例中,<code>namespace.sphal.link.default.shared_libs</code> 指定 <code>libc.so</code> 和 <code>libm.so</code> 可以由 <code>default</code> 链接器命名空间导出。如果在 <code>sphal</code> 链接器命名空间中加载的共享库关联到 <code>libc.so</code>,并且动态链接器在 <code>/vendor/lib[64]</code> 中找不到 <code>libc.so</code>,则动态链接器会遍历后备链接,并查找由 <code>default</code> 链接器命名空间导出的 <code>libc.so</code>。</p>
+
+<p>如果 <code>namespace.${name}.visible</code> 为 <code>true</code>,该程序将能够获取链接器命名空间句柄,该句柄随后可传递到 <code>android_dlopen_ext()</code>。</p>
+
+<p>在上述示例中,<code>namespace.sphal.visible</code> 为 <code>true</code>,以便 <code>android_load_sphal_library()</code> 可以明确要求动态链接器加载 <code>sphal</code> 链接器命名空间中的共享库。</p>
+
+<h2 id="linker-namespace-isolation">链接器命名空间隔离</h2>
+
+<p><code>android-src/system/core/rootdir/etc</code> 中有三种配置。系统会根据 <code>BoardConfig.mk</code> 中 <code>PRODUCT_FULL_TREBLE</code>、<code>BOARD_VNDK_VERSION</code> 和 <code>BOARD_VNDK_RUNTIME_DISABLE</code> 的值选择不同的配置:</p>
+
+<table>
+ <tbody><tr>
+ <th><code>PRODUCT_FULL_TREBLE</code></th>
+ <th><code>BOARD_VNDK_VERSION</code> / <code>BOARD_VNDK_RUNTIME_DISABLE</code></th>
+ <th>选择的配置</th>
+ </tr>
+
+ <tr>
+ <td><code>false</code></td>
+ <td><em>any</em></td>
+ <td><code>ld.config.legacy.txt</code></td>
+ </tr>
+
+ <tr>
+ <td rowspan="2"><code>true</code></td>
+ <td><code>current</code> 和 empty<em></em></td>
+ <td><code>ld.config.txt.in</code></td>
+ </tr>
+
+ <tr>
+ <td><em></em>empty 或 <code>true</code></td>
+ <td><code>ld.config.txt</code></td>
+ </tr>
+</tbody></table>
+
+<p><code>android-src/system/core/rootdir/etc/ld.config.txt</code> 会隔离 SP-HAL 和 VNDK-SP 共享库。在 Android 8.0 及更高版本中,当 <code>PRODUCT_FULL_TREBLE</code> 为 <code>true</code> 时,该配置必须是动态链接器配置。</p>
+
+<p><code>android-src/system/core/rootdir/etc/ld.config.txt.in</code> 也会隔离 SP-HAL 和 VNDK-SP 共享库。此外,<code>ld.config.txt.in</code> 还提供全面的动态链接器隔离。它可确保系统分区中的模块不依赖于供应商分区中的共享库,反之亦然。</p>
+
+<p>在 Android 8.1 中,<code>ld.config.txt.in</code> 是默认配置,并且我们强烈建议启用全面的动态链接器隔离。但是,如果在 Android 8.1 中需要清理的依赖项太多,您可以将 <code>BOARD_VNDK_RUNTIME_DISABLE</code> 添加到 <code>BoardConfig.mk</code> 中:</p>
+
+<pre class="prettyprint">
+BOARD_VNDK_RUNTIME_DISABLE := true
+</pre>
+
+<p>如果 <code>BOARD_VNDK_RUNTIME_DISABLE</code> 为 <code>true</code>,则会安装 <code>android-src/system/core/rootdir/etc/ld.config.txt</code>。</p>
+
+<h3 id="ld.config.txt">ld.config.txt</h3>
+
+<p>从 Android 8.0 开始,动态链接器将配置为隔离 SP-HAL 和 VNDK-SP 共享库,以使其符号不会与其他框架共享库发生冲突。链接器命名空间之间的关系如下所示:</p>
+
+<img src="../images/treble_vndk_linker_namespace1.png" alt="ld.config.txt 中描绘的链接器命名空间图表"/>
+ <figcaption><strong>图 2.</strong> 链接器命名空间隔离 (<code>ld.config.txt</code>)。</figcaption>
+
+<p><em></em><em></em>LL-NDK 和 VNDK-SP 代表以下共享库:
+</p>
-<p>从其他命名空间导入的共享库:</p>
<ul>
-<li>由<strong>默认</strong>命名空间导出的库:
- <ul>
- <li>LL-NDK:<code>libc.so</code>、<code>libm.so</code>、<code>libdl.so</code>、<code>libstdc++.so</code>、<code>liblog.so</code>、<code> libz.so</code>
- </li><li>SP-NDK:<code>libEGL.so</code>、<code>libnativewindow.so</code>、<code>libsync.so</code>、<code>libvndksupport.so</code>
- </li>
+ <li>
+ <em>LL-NDK</em>
+
+ <ul>
+ <li><code>libEGL.so</code></li>
+ <li><code>libGLESv1_CM.so</code></li>
+ <li><code>libGLESv2.so</code></li>
+ <li><code>libc.so</code></li>
+ <li><code>libdl.so</code></li>
+ <li><code>liblog.so</code></li>
+ <li><code>libm.so</code></li>
+ <li><code>libnativewindow.so</code></li>
+ <li><code>libstdc++.so</code>(不在 <code>ld.config.txt.in</code> 中)</li>
+ <li><code>libsync.so</code></li>
+ <li><code>libvndksupport.so</code></li>
+ <li><code>libz.so</code>(已移到 <code>ld.config.txt.in</code> 中的 VNDK-SP)<em></em></li>
</ul>
-</li>
+ </li>
+
+ <li>
+ <em>VNDK-SP</em>
+
+ <ul>
+ <li><code>android.hardware.graphics.common@1.0.so</code></li>
+ <li><code>android.hardware.graphics.allocator@2.0.so</code></li>
+ <li><code>android.hardware.graphics.mapper@2.0.so</code></li>
+ <li><code>android.hardware.renderscript@1.0.so</code></li>
+ <li><code>android.hidl.memory@1.0.so</code></li>
+ <li><code>libbase.so</code></li>
+ <li><code>libc++.so</code></li>
+ <li><code>libcutils.so</code></li>
+ <li><code>libhardware.so</code></li>
+ <li><code>libhidlbase.so</code></li>
+ <li><code>libhidlmemory.so</code></li>
+ <li><code>libhidltransport.so</code></li>
+ <li><code>libhwbinder.so</code></li>
+ <li><code>libion.so</code></li>
+ <li><code>libutils.so</code></li>
+ </ul>
+ </li>
</ul>
-<h3 id="rs-namespace">RS 命名空间</h3>
-<p>此特殊命名空间允许 <code>libRS_internal.so</code> 使用 <code>libmediandk.so</code>,从 SP-HAL 命名空间或 VNDK-SP 命名空间则无法访问此项(这是 Android O 中的一项缓和机制)。</p>
+<p>下表列出了框架进程的命名空间配置(摘自 <code>ld.config.txt</code> 中的 <code>[system]</code> 部分):</p>
+
+<table>
+ <tbody><tr>
+ <th>命名空间</th>
+ <th>属性</th>
+ <th>值</th>
+ </tr>
+
+ <tr>
+ <td rowspan="3"><code>default</code></td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/system/${LIB}</code><br />
+ <code>/vendor/${LIB}</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/system/${LIB}</code><br />
+ <code>/vendor/${LIB}</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>false</code></td>
+ </tr>
+
+ <tr>
+ <td rowspan="8"><code>sphal</code></td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/egl</code><br />
+ <code>/vendor/${LIB}/hw</code><br />
+ <code>/vendor/${LIB}</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}</code><br />
+ <code>/system/${LIB}/vndk-sp/hw</code> (Android 8.1)
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>visible</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>links</code></td>
+ <td><code>default,vndk,rs</code></td>
+ </tr>
+ <tr>
+ <td><code>link.default.shared_libs</code></td>
+ <td><em>LL-NDK</em></td>
+ </tr>
+ <tr>
+ <td><code>link.vndk.shared_libs</code></td>
+ <td><em>VNDK-SP</em></td>
+ </tr>
+ <tr>
+ <td><code>link.rs.shared_libs</code></td>
+ <td><code>libRS_internal.so</code></td>
+ </tr>
+
+ <tr>
+ <td rowspan="6"><code>vndk</code>(适用于 VNDK-SP)</td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/vndk-sp</code><br />
+ <code>/system/${LIB}/vndk-sp</code><br />
+ <code>/vendor/${LIB}</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/egl</code><br />
+ <code>/vendor/${LIB}/hw</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>visible</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>links</code></td>
+ <td><code>default</code></td>
+ </tr>
-<p>搜索路径:</p>
-<ol>
-<li><code>/vendor/lib[64]/vndk-sp</code></li>
-<li><code>/system/lib[64]/vndk-sp</code></li>
-<li><code>/vendor/lib[64]</code></li>
-</ol>
+ <tr>
+ <td><code>link.default.shared_libs</code></td>
+ <td><em>LL-NDK</em></td>
+ </tr>
+
+ <tr>
+ <td rowspan="7"><code>rs</code>(适用于 Renderscript)</td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/vndk-sp</code><br />
+ <code>/system/${LIB}/vndk-sp</code><br />
+ <code>/vendor/${LIB}</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}</code><br />
+ <code>/data</code>(适用于已编译的 RS 内核)
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>visible</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>links</code></td>
+ <td><code>default,vndk</code></td>
+ </tr>
+
+ <tr>
+ <td><code>link.default.shared_libs</code></td>
+ <td>
+ <em>LL-NDK</em><br />
+ <code>libmediandk.so</code><br />
+ <code>libft2.so</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>link.vndk.shared_libs</code></td>
+ <td><em>VNDK-SP</em></td>
+ </tr>
+</tbody></table>
+
+<p>下表列出了供应商进程的命名空间配置(摘自 <code>ld.config.txt</code> 中的 <code>[vendor]</code> 部分):</p>
+
+<table>
+ <tbody><tr>
+ <th>命名空间</th>
+ <th>属性</th>
+ <th>值</th>
+ </tr>
+
+ <tr>
+ <td rowspan="2"><code>default</code></td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}</code><br />
+ <code>/vendor/${LIB}/vndk-sp</code><br />
+ <code>/system/${LIB}/vndk-sp</code><br />
+ <code>/system/${LIB}</code>(已弃用)
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>false</code></td>
+ </tr>
+</tbody></table>
+
+<p>更多详情可以在 <code>android-src/system/core/rootdir/etc/ld.config.txt</code> 中找到。</p>
+
+<h3 id="ld.config.txt.in">ld.config.txt.in</h3>
+
+<p><code>ld.config.txt.in</code> 会隔离系统分区和供应商分区之间的共享库依赖关系。下文概述了该配置文件与上一小节中提到的 <code>ld.config.txt</code> 相比有哪些不同:</p>
-<p>允许的路径:</p>
<ul>
-<li><code>/vendor/lib[64]/vndk-sp</code></li>
-<li><code>/system/lib[64]/vndk-sp</code></li>
-<li><code>/vendor/lib[64]</code></li>
-<li><code>/data</code> # 共享库由 RS CPU 参考实现进行 JIT 编译</li>
+ <li>
+ 框架进程
+
+ <ul>
+ <li>系统会隔离 <code>default</code> 命名空间。只有当共享库位于搜索路径中指定的目录下或允许的路径中指定的目录下时,才能将其加载到 <code>default</code> 命名空间中。</li>
+
+ <li><code>default</code> 命名空间的允许路径已更改为有限集(<code>/vendor/lib[64]</code>、<code>/system/lib[64]/vndk</code> 和 <code>/system/lib[64]/vndk-sp</code> 已被排除)。</li>
+ </ul>
+ </li>
+
+ <li>
+ 供应商进程
+
+ <ul>
+ <li>系统会创建两个命名空间(<code>default</code> 和 <code>system</code>)。</li>
+
+ <li>系统会隔离 <code>default</code> 命名空间。只有当共享库位于搜索路径中指定的目录下或允许的路径中指定的目录下时,才能将其加载到默认命名空间中。</li>
+
+ <li><code>default</code> 命名空间的允许路径是 <code>/vendor</code>、<code>/system/lib[64]/vndk</code> 和 <code>/system/lib[64]/vndk-sp</code>。</li>
+
+ <li><code>default</code> 命名空间与 <code>system</code> 命名空间相关联。<code>default</code> 命名空间可以关联到在 <code>system</code> 命名空间中加载的 LL-NDK 库。</li>
+ </ul>
+ </li>
</ul>
-<p>从其他命名空间导入的共享库:</p>
+<p>链接器命名空间之间的关系如下图所示:</p>
+
+<img src="../images/treble_vndk_linker_namespace2.png" alt="ld.config.txt.in 中描绘的链接器命名空间图表"/>
+ <figcaption><strong>图 2.</strong> 链接器命名空间隔离 (<code>ld.config.txt.in</code>)。</figcaption>
+
+<p>在上图中,LL-NDK 和 VNDK-SP 代表以下共享库:<em></em><em></em></p>
+
<ul>
-<li>由<strong>默认</strong>命名空间导出的库
- <ul>
- <li>LL-NDK:<code>libc.so</code>、<code>libm.so</code>、<code>libdl.so</code>、<code>libstdc++.so</code>、<code>liblog.so</code></li>
- <li>SP-NDK:<code>libEGL.so</code>、<code>libGLESv1_CM.so</code>、<code>libGLESv2.so</code>、<code>libnativewindow.so</code>、<code>libsync.so</code>、<code>libvndksupport.so</code></li>
- <li>其他库:<code>libmediandk.so</code>、<code>libui.so</code></li>
- </ul>
-</li>
-<li>由 <strong>vndk</strong> 命名空间导出的库:<code>android.hardware.renderscript@1.0.so</code>、<code>android.hardware.graphics.allocator@2.0.so</code>、<code>android.hardware.graphics.mapper@2.0.so</code>、<code>android.hardware.graphics.common@1.0.so</code>、<code>libhwbinder.so</code>、<code>libbase.so</code>、<code>libcutils.so</code>、<code>libhardware.so</code>、<code>libhidlbase.so</code>、<code>libhidltransport.so</code>、<code>libutils.so</code>、<code>libc++.so</code></li>
+ <li>
+ <em>LL-NDK</em>
+
+ <ul>
+ <li><code>libEGL.so</code></li>
+ <li><code>libGLESv1_CM.so</code></li>
+ <li><code>libGLESv2.so</code></li>
+ <li><code>libGLESv3.so</code></li>
+ <li><code>libandroid_net.so</code></li>
+ <li><code>libc.so</code></li>
+ <li><code>libdl.so</code></li>
+ <li><code>liblog.so</code></li>
+ <li><code>libm.so</code></li>
+ <li><code>libnativewindow.so</code></li>
+ <li><code>libsync.so</code></li>
+ <li><code>libvndksupport.so</code></li>
+ </ul>
+ </li>
+
+ <li>
+ <em>VNDK-SP</em>
+
+ <ul>
+ <li><code>android.hardware.graphics.common@1.0.so</code></li>
+ <li><code>android.hardware.graphics.allocator@2.0.so</code></li>
+ <li><code>android.hardware.graphics.mapper@2.0.so</code></li>
+ <li><code>android.hardware.renderscript@1.0.so</code></li>
+ <li><code>android.hidl.memory@1.0.so</code></li>
+ <li><code>libRSCpuRef.so</code></li>
+ <li><code>libRSDriver.so</code></li>
+ <li><code>libRS_internal.so</code></li>
+ <li><code>libbase.so</code></li>
+ <li><code>libbcinfo.so</code></li>
+ <li><code>libc++.so</code></li>
+ <li><code>libcutils.so</code></li>
+ <li><code>libhardware.so</code></li>
+ <li><code>libhidlbase.so</code></li>
+ <li><code>libhidlmemory.so</code></li>
+ <li><code>libhidltransport.so</code></li>
+ <li><code>libhwbinder.so</code></li>
+ <li><code>libion.so</code></li>
+ <li><code>libutils.so</code></li>
+ <li><code>libz.so</code></li>
+ </ul>
+ </li>
</ul>
-<h2 id="vendor-processes">供应商进程</h2>
-<h3 id="default-linker-namespace">默认链接器命名空间</h3>
-<p>搜索路径和允许的路径:</p>
-<ol>
-<li><code>/vendor/lib[64]</code></li>
-<li><code>/vendor/lib[64]/vndk-sp</code></li>
-<li><code>/system/lib[64]/vndk-sp</code></li>
-<li><code>/system/lib[64]</code> # 适用于已退化的 VNDK 库</li>
-</ol>
+<p>下表列出了框架进程的命名空间配置(摘自 <code>ld.config.txt.in</code> 中的 <code>[system]</code> 部分):</p>
+
+<table>
+ <tbody><tr>
+ <th>命名空间</th>
+ <th>属性</th>
+ <th>值</th>
+ </tr>
+
+ <tr>
+ <td rowspan="3"><code>default</code></td>
+ <td><code>search.paths</code></td>
+ <td><code>/system/${LIB}</code></td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/system/${LIB}/drm</code><br />
+ <code>/system/${LIB}/hw</code><br />
+ <code>/system/framework</code><br />
+ <code>/system/app</code><br />
+ <code>/system/priv-app</code><br />
+ <code>/vendor/app</code><br />
+ <code>/vendor/framework</code><br />
+ <code>/oem/app</code><br />
+ <code>/data</code><br />
+ <code>/mnt/expand
+ </code></td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td rowspan="8"><code>sphal</code></td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/egl</code><br />
+ <code>/vendor/${LIB}/hw</code><br />
+ <code>/vendor/${LIB}</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}</code><br />
+ <code>/system/${LIB}/vndk-sp/hw</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>visible</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>links</code></td>
+ <td><code>default,vndk,rs</code></td>
+ </tr>
+
+ <tr>
+ <td><code>link.default.shared_libs</code></td>
+ <td><em>LL-NDK</em></td>
+ </tr>
+
+ <tr>
+ <td><code>link.vndk.shared_libs</code></td>
+ <td><em>VNDK-SP</em></td>
+ </tr>
+
+ <tr>
+ <td><code>link.rs.shared_libs</code></td>
+ <td><code>libRS_internal.so</code></td>
+ </tr>
+
+ <tr>
+ <td rowspan="6"><code>vndk</code>(适用于 VNDK-SP)</td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/vndk-sp</code><br />
+ <code>/system/${LIB}/vndk-sp</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/egl</code><br />
+ <code>/vendor/${LIB}/hw</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>visible</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>links</code></td>
+ <td><code>default</code></td>
+ </tr>
+
+ <tr>
+ <td><code>link.default.shared_libs</code></td>
+ <td><em>LL-NDK</em></td>
+ </tr>
+
+ <tr>
+ <td rowspan="7"><code>rs</code>(适用于 Renderscript)</td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/vndk-sp</code><br />
+ <code>/system/${LIB}/vndk-sp</code><br />
+ <code>/vendor/${LIB}</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}</code><br />
+ <code>/data</code>(适用于已编译的 RS 内核)
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>visible</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>links</code></td>
+ <td><code>default,vndk</code></td>
+ </tr>
+
+ <tr>
+ <td><code>link.default.shared_libs</code></td>
+ <td>
+ <em>LL-NDK</em><br />
+ <code>libmediandk.so</code><br />
+ <code>libft2.so</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>link.vndk.shared_libs</code></td>
+ <td><em>VNDK-SP</em></td>
+ </tr>
+</tbody></table>
+
+<p>下表列出了供应商进程的命名空间配置(摘自 <code>ld.config.txt.in</code> 中的 <code>[vendor]</code> 部分):</p>
+
+<table>
+ <tbody><tr>
+ <th>命名空间</th>
+ <th>属性</th>
+ <th>值</th>
+ </tr>
+
+ <tr>
+ <td rowspan="5"><code>default</code></td>
+ <td><code>search.paths</code></td>
+ <td>
+ <code>/vendor/${LIB}/hw</code><br />
+ <code>/vendor/${LIB}/egl</code><br />
+ <code>/vendor/${LIB}</code><br />
+ <code>/vendor/${LIB}/vndk</code><br />
+ <code>/system/${LIB}/vndk</code><br />
+ <code>/vendor/${LIB}/vndk-sp</code><br />
+ <code>/system/${LIB}/vndk-sp</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td>
+ <code>/vendor</code><br />
+ <code>/system/${LIB}/vndk</code><br />
+ <code>/system/${LIB}/vndk-sp</code>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>isolated</code></td>
+ <td><code>true</code></td>
+ </tr>
+
+ <tr>
+ <td><code>links</code></td>
+ <td><code>system</code></td>
+ </tr>
+
+ <tr>
+ <td><code>link.system.shared_libs</code></td>
+ <td><em>LL-NDK</em></td>
+ </tr>
+
+ <tr>
+ <td rowspan="2"><code>system</code></td>
+ <td><code>search.paths</code></td>
+ <td><code>/system/${LIB}</code></td>
+ </tr>
+
+ <tr>
+ <td><code>permitted.paths</code></td>
+ <td><code>/system/${LIB}</code></td>
+ </tr>
+</tbody></table>
+
+<p>更多详情可以在 <code>android-src/system/core/rootdir/etc/ld.config.txt.in</code> 中找到。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/audio/aaudio.html b/zh-cn/devices/audio/aaudio.html
index 56d79e2f..06195d65 100644
--- a/zh-cn/devices/audio/aaudio.html
+++ b/zh-cn/devices/audio/aaudio.html
@@ -245,7 +245,10 @@ PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2
</pre>
<p>
-您也可以在设备启动后替换这些值。例如,要为 MMAP 启用“自动”模式,请输入以下内容:</p>
+您也可以在设备启动后替换这些值。
+您需要重新启动 audioserver 才能使更改生效。
+例如,要为 MMAP 启用“自动”模式,请输入以下内容:
+</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb root
@@ -253,15 +256,20 @@ adb root
<pre class="devsite-terminal devsite-click-to-copy">
adb shell setprop aaudio.mmap_policy 2
</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell killall audioserver
+</pre>
<p>
-<code>ndk/sysroot/usr/include/aaudio/AAudioTesting.h</code> 中提供了一些函数,可让您替换使用 MMAP 路径的政策:</p>
+<code>ndk/sysroot/usr/include/aaudio/AAudioTesting.h</code> 中提供了一些函数,可让您替换使用 MMAP 路径的政策:
+</p>
<pre class="prettyprint">aaudio_result_t AAudio_setMMapPolicy(aaudio_policy_t policy);
</pre>
<p>
-要确定某个流是否使用 MMAP 路径,请调用:</p>
+要了解某个流是否使用 MMAP 路径,请调用:
+</p>
<pre class="prettyprint">bool AAudioStream_isMMapUsed(AAudioStream* stream);
</pre>
diff --git a/zh-cn/devices/audio/terminology.html b/zh-cn/devices/audio/terminology.html
index c53b2eac..910c1415 100644
--- a/zh-cn/devices/audio/terminology.html
+++ b/zh-cn/devices/audio/terminology.html
@@ -121,7 +121,7 @@ PCM 和 DSD 均代表按独立序列划分的多个声道。由于我们很难
<dt>无损</dt>
<dd>
-可在编码和解码的过程中保持位精度的<a href="http://en.wikipedia.org/wiki/Lossless_compression">无损数据压缩算法</a>;使用这种算法时,如果对之前编码的数据进行解码,得到的结果与原始数据相当。无损音频内容分发格式包括 <a href="http://en.wikipedia.org/wiki/Compact_disc">CD</a>、<a href="http://en.wikipedia.org/wiki/WAV">WAV</a> 中的 PCM,以及 <a href="http://en.wikipedia.org/wiki/FLAC">FLAC</a> 等。制作过程可能会导致位深或采样率相较于<a href="http://en.wikipedia.org/wiki/Audio_mastering">母版</a>有所下降;可保持母版的解析度和位精确度的分发格式属于高解析度音频的范畴。
+可在编码和解码的过程中保持位精度的<a href="http://en.wikipedia.org/wiki/Lossless_compression">无损数据压缩算法</a>;使用这种算法时,如果对之前编码的数据进行解码,得到的结果与原始数据相当。无损音频内容分发格式的示例包括 <a href="http://en.wikipedia.org/wiki/Compact_disc">CD</a>、<a href="http://en.wikipedia.org/wiki/WAV">WAV</a> 中的 PCM,以及 <a href="http://en.wikipedia.org/wiki/FLAC">FLAC</a> 等。制作过程可能会导致位深或采样率相较于<a href="http://en.wikipedia.org/wiki/Audio_mastering">母版</a>有所下降;可保持母版的解析度和位精确度的分发格式属于高解析度音频的范畴。
</dd>
<dt>有损</dt>
diff --git a/zh-cn/devices/sensors/hal-interface.html b/zh-cn/devices/sensors/hal-interface.html
index aceead37..7496eeb7 100644
--- a/zh-cn/devices/sensors/hal-interface.html
+++ b/zh-cn/devices/sensors/hal-interface.html
@@ -49,7 +49,7 @@
<pre class="prettyprint">int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int
enabled);</pre>
<p>激活或禁用传感器。</p>
-<p><code>sensor_handle</code> 是要激活/禁用的传感器的句柄。传感器的句柄由其 <code>handle</code> 结构的 <a href="#sensor_t">handle</a> 字段定义。</p>
+<p><code>sensor_handle</code> 是要激活/禁用的传感器的句柄。传感器的句柄由其 <a href="#sensor_t">sensor_t</a> 结构的 <code>handle</code> 字段定义。</p>
<p><code>enabled</code> 设为 1 时启用传感器,设为 0 时则停用传感器。</p>
<p>单次传感器在接收到事件后会自动自行禁用,并且必须仍接受通过调用 <code>activate(...,
enabled=0)</code> 进行禁用。</p>
@@ -131,7 +131,7 @@ int (*setDelay)(
<p>刷写异步发生(即该函数必须立即返回)。如果实现将一个 FIFO 用于多个传感器,则刷写该 FIFO,并且仅为指定传感器添加刷写完成事件。</p>
<p>如果指定传感器没有 FIFO(无法缓冲),或者如果 FIFO 在调用时为空,则 <code>flush</code> 仍必须操作成功并为该传感器发送刷写完成事件。这适用于除单次传感器以外的所有传感器。</p>
<p>当调用 <code>flush</code> 时,即使该传感器的 FIFO 中已经存在刷写事件,也必须另外创建一个刷写事件并将其添加到 FIFO 的末尾,并且必须刷写 FIFO。<code>flush</code> 调用的次数必须等于创建的刷写完成事件数。</p>
-<p><code>flush</code> 不适用于<a href="report-modes.html#one-shot">单次</a>传感器。如果 <code>sensor_handle</code> 指的是单次传感器,则 <code>flush</code> 必须返回 <code>-EINVAL</code>,并且不生成任何刷写完成元数据事件。</p>
+<p><code>flush</code> 不适用于<a href="report-modes.html#one-shot">单次</a>传感器。如果 <code>sensor_handle</code> 指向的是单次传感器,则 <code>flush</code> 必须返回 <code>-EINVAL</code>,并且不生成任何刷写完成元数据事件。</p>
<p>如果操作成功,该函数返回 0;如果指定的传感器是单次传感器或未启用,则返回 <code>-EINVAL</code>;其他情况,返回表示错误的负数。</p>
<h2 id="poll">poll()</h2>
<pre class="prettyprint">int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
@@ -147,9 +147,9 @@ int (*setDelay)(
<p>当传感器禁用时,将调用 <code>activate(..., enable=0)</code>。</p>
<p>在进行上述调用的同时,会反复调用 <code>poll</code> 函数来请求数据。甚至在没有传感器激活的情况下,也可以调用 <code>poll</code>。</p>
<h2 id="sensors_module_t">sensors_module_t</h2>
-<p><code>sensors_module_t</code> 是用于为传感器创建 Android 硬件模块的类型。HAL 的实现必须定义一个该类型的对象 <code>HAL_MODULE_INFO_SYM</code>,以暴露 <a href="#get_sensors_list_list">get_sensors_list</a> 函数。要了解详情,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> 中关于 <code>sensors_module_t</code> 的定义和 <code>hw_module_t</code> 的定义。</p>
+<p><code>sensors_module_t</code> 是用于为传感器创建 Android 硬件模块的类型。HAL 的实现必须定义一个该类型的对象 <code>HAL_MODULE_INFO_SYM</code>,以暴露 <a href="#get_sensors_list_list">get_sensors_list</a> 函数。要了解详情,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> 中 <code>sensors_module_t</code> 的定义以及 <code>hw_module_t</code> 的定义。</p>
<h2 id="sensors_poll_device_t_sensors_poll_device_1_t">sensors_poll_device_t/sensors_poll_device_1_t</h2>
-<p><code>sensors_poll_device_1_t</code> 包含上文定义的方法的剩余部分:<code>activate</code>、<code>batch</code>、<code>flush</code> 和 <code>poll</code>。其 <code>common</code> 字段(类型为 <a href="/devices/halref/structhw__device__t.html">hw_device_t</a>)可定义 HAL 的版本号。</p>
+<p><code>sensors_poll_device_1_t</code> 包含上文定义的方法的剩余部分:<code>activate</code>、<code>batch</code>、<code>flush</code> 和 <code>poll</code>。它的 <code>common</code> 字段(类型为 <a href="/devices/halref/structhw__device__t.html">hw_device_t</a>)可定义 HAL 的版本号。</p>
<h2 id="sensor_t">sensor_t</h2>
<p><code>sensor_t</code> 表示 <a href="index.html">Android 传感器</a>。以下是 sensor_t 的一些重要字段:</p>
<p><strong>name</strong>:表示传感器的用户可见字符串。该字符串通常包括底层传感器的部件名称、传感器的类型以及是否为唤醒传感器。例如,“LIS2HH12 Accelerometer”、“MAX21000 Uncalibrated Gyroscope”、“BMP280 Wake-up Barometer”、“MPU6515 Game Rotation Vector”。</p>
@@ -157,7 +157,7 @@ int (*setDelay)(
<p><strong>type</strong>:传感器的类型。要详细了解传感器类型的解释,请参阅<a href="index.html">什么是 Android 传感器?</a>; 要了解官方传感器类型,请参阅<a href="sensor-types.html">传感器类型</a>。对于非官方传感器类型,<code>type</code> 必须以 <code>SENSOR_TYPE_DEVICE_PRIVATE_BASE</code> 开头。</p>
<p><strong>stringType</strong>:传感器的类型(以字符串表示)。如果传感器为官方类型,则设置为 <code>SENSOR_STRING_TYPE_*</code>。如果传感器为制造商特定类型,<code>stringType</code> 必须以制造商的反向域名开头。<em></em>例如,由 Fictional-Company 的 Cool-product 团队定义的传感器(比如 unicorn 检测器)可以使用 <code>stringType=”com.fictional_company.cool_product.unicorn_detector”</code>。
<code>stringType</code> 用于唯一标识非官方传感器类型。要详细了解传感器类型和字符串类型,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a>。</p>
-<p><strong>requiredPermission</strong>:代表应用要查看传感器、注册到传感器和接收传感器数据所必须具备的权限的字符串。空字符串表明应用不需要获取该传感器的任何访问权限。<a href="sensor-types.html#heart_rate">心率监测器</a>等传感器类型具有强制性的 <code>requiredPermission</code>。提供敏感用户信息(例如心率)的所有传感器必须受到权限保护。</p>
+<p><strong>requiredPermission</strong>:代表应用要查看传感器、注册到传感器和接收传感器数据所必须具备的权限的字符串。空字符串表明应用不需要获取该传感器的任何访问权限。部分传感器类型(例如<a href="sensor-types.html#heart_rate">心率监测器</a>)具有强制性的 <code>requiredPermission</code>。提供敏感用户信息(例如心率)的所有传感器必须受到权限保护。</p>
<p><strong>flags</strong>:传感器的标记,用于定义传感器的报告模式以及传感器是否为唤醒传感器。例如,对于单次唤醒传感器,标记为 <code>flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP</code>。当前版本的 HAL 中未使用的标记位必须等于 0。</p>
<p><strong>maxRange</strong>:传感器可报告的最大值,单位与已报告值单位相同。传感器必须能够报告 <code>[-maxRange; maxRange]</code> 范围内(未过载)的值。请注意,这意味着从常规意义上来说传感器的总范围是 <code>2*maxRange</code>。当传感器报告几条轴上的值时,该范围适用于每条轴。例如,“+/- 2g”加速度计会报告 <code>maxRange = 2*9.81 = 2g</code>。</p>
<p><strong>resolution</strong>:传感器可测量出的最小差值。该字段通常基于 <code>maxRange</code> 和测量值的位数计算得出。</p>
@@ -166,7 +166,7 @@ int (*setDelay)(
<p><strong>maxDelay</strong>:对于连续和变化模式传感器,指对应于传感器支持的最慢速率的采样周期(以微秒为单位)。要详细了解该值是如何使用的,请参阅 <a href="#sampling_period_ns">sampling_period_ns</a>。请注意,<code>maxDelay</code> 以微秒为单位,而 <code>sampling_period_ns</code> 以纳秒为单位。对于特殊和单次传感器,<code>maxDelay</code> 必须为 0。</p>
<p><strong>fifoReservedEventCount</strong>:硬件 FIFO 中为该传感器保留的事件数。如果该传感器有专属的 FIFO,则 <code>fifoReservedEventCount</code> 是该专属 FIFO 的大小。如果该 FIFO 与其他传感器共用,则 <code>fifoReservedEventCount</code> 是为该传感器保留的 FIFO 部分的大小。对于大多数共享 FIFO 的系统以及没有硬件 FIFO 的系统,该值为 0。</p>
<p><strong>fifoMaxEventCount</strong>:FIFO 中可为该传感器存储的最大事件数。该值总是大于或等于 <code>fifoReservedEventCount</code>。该值用于估计在假设不激活任何其他传感器的情况下,以特定速率注册到传感器时 FIFO 多快会被填满。对于没有硬件 FIFO 的系统,<code>fifoMaxEventCount</code> 为 0。要了解详情,请参阅<a href="batching.html">批量处理</a>。</p>
-<p>对于官方传感器类型的传感器,一些字段会被框架覆盖。例如,<a href="sensor-types.html#accelerometer">加速度计</a>传感器被强制使用连续报告模式,而<a href="sensor-types.html#heart_rate">心率</a>监测器被强制受 <code>SENSOR_PERMISSION_BODY_SENSORS</code> 权限的保护。</p>
+<p>对于官方传感器类型的传感器,一些字段会被框架覆盖。例如,<a href="sensor-types.html#accelerometer">加速度计</a>传感器被强制使用连续报告模式,而<a href="sensor-types.html#heart_rate">心率</a>监测器则被强制受 <code>SENSOR_PERMISSION_BODY_SENSORS</code> 权限的保护。</p>
<h2 id="sensors_event_t">sensors_event_t</h2>
<p>由 Android 传感器生成并通过 <a href="#poll">poll</a> 函数报告的传感器事件属于 <code>type sensors_event_t</code>。以下是 <code>sensors_event_t</code> 的一些重要字段:</p>
<p><strong>version</strong>:必须是 <code>sizeof(struct sensors_event_t)</code></p>
diff --git a/zh-cn/devices/sensors/report-modes.html b/zh-cn/devices/sensors/report-modes.html
index 2781dcfe..773e2655 100644
--- a/zh-cn/devices/sensors/report-modes.html
+++ b/zh-cn/devices/sensors/report-modes.html
@@ -37,6 +37,6 @@
<p>单次传感器有时称为触发传感器。</p>
<p>传递给 <code>batch</code> 函数的 <code>sampling_period_ns</code> 和 <code>max_report_latency_ns</code> 参数会被忽略。来自单次事件的事件不可存储在硬件 FIFO 中;这些事件在生成后必须立即报告。</p>
<h2 id="special">特殊模式</h2>
-<p>有关何时生成事件的详细信息,请参阅各个<a href="sensor-types.html">传感器类型说明</a>。</p>
+<p>有关何时生成事件的详细信息,请参阅各<a href="sensor-types.html">传感器类型说明</a>。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/sensors/sensor-types.html b/zh-cn/devices/sensors/sensor-types.html
index e4a8701c..c015a5b2 100644
--- a/zh-cn/devices/sensors/sensor-types.html
+++ b/zh-cn/devices/sensors/sensor-types.html
@@ -127,7 +127,7 @@
<li>出厂(或在线)尺度补偿</li>
<li>在线偏差校准(以去除漂移)</li>
</ul>
-<p>陀螺仪还通过 <code>sensors_event_t.gyro.status</code> 报告其预测的读数精度。要详细了解此字段的可能值,请参阅 <a href="https://developer.android.com/reference/android/hardware/SensorManager.html">SensorManager</a> 的 <a href="https://developer.android.com/reference/android/hardware/SensorManager.html#SENSOR_STATUS_ACCURACY_HIGH"><code>SENSOR_STATUS_*</code></a>常量。</p>
+<p>陀螺仪还通过 <code>sensors_event_t.gyro.status</code> 报告其预测的读数精度。要详细了解此字段的可能值,请参阅 <a href="https://developer.android.com/reference/android/hardware/SensorManager.html">SensorManager</a> 的 <a href="https://developer.android.com/reference/android/hardware/SensorManager.html#SENSOR_STATUS_ACCURACY_HIGH"><code>SENSOR_STATUS_*</code></a> 常量。</p>
<p>陀螺仪不能基于磁力计和加速度计进行模拟,因为这样将导致局部一致性和响应速度降低。它必须基于常见的陀螺仪芯片。</p>
<h3 id="heart_rate">心率传感器</h3>
<p>报告模式:<em><a href="report-modes.html#on-change">按变化模式</a></em></p>
@@ -213,7 +213,7 @@
<td><p>连续模式</p></td>
</tr>
<tr>
- <td><p><a href="#linear_acceleration">线性加速度传感器</a></p></td>
+ <td><p><a href="#linear_acceleration">线性加速器</a></p></td>
<td><p>活动类</p></td>
<td><p>加速度计、陀螺仪(如有)或磁力计(如果陀螺仪不存在)</p></td>
<td><p>连续模式</p></td>
@@ -274,7 +274,7 @@
</tbody></table>
<p><img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/> = 低功耗传感器</p>
<h2 id="activity_composite_sensors">活动复合传感器</h2>
-<h3 id="linear_acceleration">线性加速度传感器</h3>
+<h3 id="linear_acceleration">线性加速器</h3>
<p>底层物理传感器:加速度计和(如有)陀螺仪(如果陀螺仪不存在,则使用磁力计)</p>
<p>报告模式:<em><a href="report-modes.html#continuous">连续模式</a></em></p>
<p><code>getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)</code> 返回一个非唤醒传感器<em></em></p>
@@ -487,7 +487,6 @@
<p>仅实现该传感器的唤醒版本。</p>
<p><code>getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)</code> 返回一个唤醒传感器<em></em></p>
<p>快览手势传感器可短暂开启屏幕,方便用户使用特定动作浏览屏幕内容。当该传感器被触发时,设备将短暂开启屏幕,让用户可以在设备处于锁定且非互动状态(低电耗模式)时浏览通知或其他内容,然后屏幕将再次关闭。用户可在设备设置中禁用这种行为(当该传感器被触发时,短暂开启屏幕)。更改设置不会影响传感器的行为:仅改变当该传感器被触发时,Android 框架是否短暂开启屏幕。未指定待检测的实际手势,可由设备制造商进行选择。</p>
-<p>该传感器必须具备低功耗特性,因为它可能全天候开启。
- 每个传感器事件在 <code>sensors_event_t.data[0]</code> 中均报告 1。</p>
+<p>该传感器必须具备低功耗特性,因为它可能全天候开启。每个传感器事件在 <code>sensors_event_t.data[0]</code> 中均报告 1。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/sensors/versioning.html b/zh-cn/devices/sensors/versioning.html
index 7a7dae59..ab569769 100644
--- a/zh-cn/devices/sensors/versioning.html
+++ b/zh-cn/devices/sensors/versioning.html
@@ -107,9 +107,9 @@ SENSOR_FLAG_CONTINUOUS_MODE,
<p>如果您不实施批处理,只是从 1.0 升级到 1.3,请将此字段设置为:</p>
-<p><code>SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE</code> - <a href="/devices/sensors/report-modes.html#one-shot">单次模式</a>传感器</p>
+<p><code>SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE</code> - <a href="/devices/sensors/report-modes.html#one-shot">单次</a>传感器</p>
-<p><code>SENSOR_FLAG_CONTINUOUS_MODE</code> - <a href="/devices/sensors/report-modes.html#continuous">连续模式</a>传感器;<code>SENSOR_FLAG_ON_CHANGE_MODE</code> - <a href="/devices/sensors/report-modes.html#on-change">变化模式</a>传感器(<a href="#proximity">近程</a>传感器除外);<code>SENSOR_FLAG_SPECIAL_REPORTING_MODE</code> - <a href="/devices/sensors/report-modes.html#special">特殊</a>报告模式传感器(<a href="/devices/sensors/sensor-types.html#tilt_detector">倾斜探测器</a>传感器除外)。</p>
+<p><code>SENSOR_FLAG_CONTINUOUS_MODE</code> - <a href="/devices/sensors/report-modes.html#continuous">连续</a>传感器;<code>SENSOR_FLAG_ON_CHANGE_MODE</code> - <a href="/devices/sensors/report-modes.html#on-change">中断</a>传感器(<a href="#proximity">近程</a>传感器除外);<code>SENSOR_FLAG_SPECIAL_REPORTING_MODE</code> - <a href="/devices/sensors/report-modes.html#special">特殊</a>报告模式传感器(<a href="/devices/sensors/sensor-types.html#tilt_detector">倾斜探测器</a>传感器除外)。</p>
<p><code>SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE</code> - <a href="/devices/sensors/sensor-types.html#proximity">近程</a>传感器和 Android 官方<a href="/devices/sensors/sensor-types.html#tilt_detector">倾斜探测器</a>传感器。</p>
diff --git a/zh-cn/devices/tech/admin/enterprise-telephony.html b/zh-cn/devices/tech/admin/enterprise-telephony.html
index a7e4ef63..0ac0e758 100644
--- a/zh-cn/devices/tech/admin/enterprise-telephony.html
+++ b/zh-cn/devices/tech/admin/enterprise-telephony.html
@@ -52,7 +52,7 @@ Android 开放源代码项目 (AOSP) 在拨号器、通讯录和短信应用的
<h3 id="cross-profile-contact-search">跨资料联系人搜索</h3>
<p>
-跨资料联系人搜索应使用 Enterprise Contacts API(<code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code> 等)来实现。该 API 可在 Android EMM 开发者网站上的 <a href="http://developer.android.com/preview/features/afw.html#contacts">EMM 开发者概览</a>中找到。
+跨资料联系人搜索应使用 Enterprise Contacts API(<code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code> 等)来实现。该 API 的相关信息可在 Android EMM 开发者网站上的 <a href="http://developer.android.com/preview/features/afw.html#contacts">EMM 开发者概览</a>中找到。
</p>
<h3 id="work-profile-contact-badging">工作资料联系人标记</h3>
diff --git a/zh-cn/devices/tech/datausage/kernel-overview.html b/zh-cn/devices/tech/datausage/kernel-overview.html
index 66acf377..0266e3a0 100644
--- a/zh-cn/devices/tech/datausage/kernel-overview.html
+++ b/zh-cn/devices/tech/datausage/kernel-overview.html
@@ -20,10 +20,10 @@
limitations under the License.
-->
-<p>基于应用/授权数据使用情况的监控和跟踪功能依赖于 Android 3.0 的 Linux 内核 (<code>kernel/net/netfilter/xt_qtaguid</code>) 中的 xt_qtaguid 模块来实现。框架 (<code>system/core/libcutils/qtaguid.c</code>) 中的套接字标记功能的实现主要依赖于从内核模块 <code>xt_qtaguid</code> 中导出到 <code>/proc/net/xt_qtaguid/ctrl</code> 接口的存在。</p>
+<p>基于应用/授权数据使用情况的监控和跟踪功能依赖于 Android 3.0 的 Linux 内核 (<code>kernel/net/netfilter/xt_qtaguid</code>) 中的 xt_qtaguid 模块来实现。框架 (<code>system/core/libcutils/qtaguid.c</code>) 中的套接字标记功能的实现主要依赖于从内核模块 <code>xt_qtaguid</code> 中导出到 <code>/proc/net/xt_qtaguid/ctrl</code> 的接口的存在。</p>
<p><code>quota2</code> netfilter 模块(最初是属于 <code>xtables-addons</code>)可支持设置指定的配额限制的功能;此外,经过扩展后,该模块还可支持在达到特定配额限制时通知用户空间。一旦达到配额限制,<code>quota2</code> 模块将丢弃所有的后续网络流量。该框架还可以指定额外的规则来限制应用的后台数据流量(请参阅 <code>com.android.server.NetworkManagementSocketTagger.setKernelCounterSet</code> 和 <code>android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND</code>)。</p>
<h1 id="how-does-it-work">工作原理</h1>
-<p><code>qtaguid</code> netfilter 模块使用隶属于应用的专属 UID,基于单个套接字对每款应用的网络流量进行跟踪。系统中有两个标签组件与套接字相关联。第一个是 UID,用来唯一标识进行数据传输的应用(Linux 允许将每个网络套接字的所有权与调用应用的 UID 相关联)。第二个标签组件用于支持附加于流量上的开发者指定的类别描述。应用可使用这些应用级别标签,将流量归类到若干子类别。</p>
-<p>当应用以服务(如下载管理器、媒体流式传输服务等)的方式提供网络数据传输时,可通过调用 <code>TrafficStats.setThreadStatsUid()</code> 函数将网络数据传输的所有权与发出请求的应用的 UID 相关联。发出调用的应用必须具备“<code>android.permission.MODIFY_NETWORK_ACCOUNTING</code>”权限才能重新分配网络流量的所有权。</p>
+<p><code>qtaguid</code> netfilter 模块使用应用的专属 UID,按套接字对每个应用的网络流量进行跟踪。系统中有两个标签组件与套接字相关联。第一个是 UID,用来明确标识进行数据传输的应用(Linux 允许将每个网络套接字的所有权与调用应用的 UID 相关联)。第二个标签组件用于支持附加于流量上的开发者指定的类别描述。应用可使用这些应用级标签,将流量归类到若干子类别。</p>
+<p>当应用以服务(如下载管理器、媒体流式传输服务等)的方式传输网络数据时,可通过调用 <code>TrafficStats.setThreadStatsUid()</code> 函数将传输作业的所有权与发出请求的应用的 UID 相关联。调用程序必须具备“<code>android.permission.MODIFY_NETWORK_ACCOUNTING</code>”权限才能重新分配网络流量的所有权。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/tech/debug/libfuzzer.html b/zh-cn/devices/tech/debug/libfuzzer.html
index 3bd133aa..870e629e 100644
--- a/zh-cn/devices/tech/debug/libfuzzer.html
+++ b/zh-cn/devices/tech/debug/libfuzzer.html
@@ -20,7 +20,7 @@
limitations under the License.
-->
<p>
-模糊测试(只是将可能无效的数据、异常数据或随机数据作为输入内容提供给程序)是在大型软件系统中查找错误的一种非常有效的方式,也是软件开发生命周期的重要组成部分。
+模糊测试(将可能无效的数据、异常数据或随机数据作为输入内容提供给程序)是在大型软件系统中查找错误的一种非常有效的方式,也是软件开发生命周期的重要组成部分。
</p>
<p>
Android 编译系统通过从 LLVM 编译器基础架构项目纳入 <a href="http://llvm.org/docs/LibFuzzer.html">libFuzzer 项目</a>来支持模糊测试。LibFuzzer 会与被测函数相关联,并会处理在模糊测试会话期间出现的所有输入选择、变更和崩溃报告。LLVM 的排错程序用于协助内存损坏检测以及提供代码覆盖率指标。
@@ -32,11 +32,10 @@ Android 编译系统通过从 LLVM 编译器基础架构项目纳入 <a href="ht
<p>
为了确保映像能够在设备上正常运行,请按照以下设置和编译示例进行操作。
</p>
-<aside class="note"><strong>提示</strong>:要详细了解设置信息,请参阅<a href="/setup/requirements">下载和编译</a>部分。
-请按照说明<a href="/setup/initializing">设置</a>您的编译环境,<a href="/setup/downloading">下载</a>源代码,然后编译 Android(借助 <a href="/setup/building.html#build-the-code">make 命令</a>)。</aside>
+<aside class="note"><strong>提示</strong>:要详细了解设置信息,请参阅<a href="/setup/requirements">下载和编译</a>部分。请按照说明<a href="/setup/initializing">设置</a>您的编译环境,<a href="/setup/downloading">下载</a>源代码,然后编译 Android(借助 <a href="/setup/building.html#build-the-code">make 命令</a>)。</aside>
-<p>使用标准的 Android 编译系统刷写您的设备后,请按照说明刷写 <a href="/devices/tech/debug/asan.html#sanitize_target">AddressSanitizer 编译</a>,然后通过使用 <code>SANITIZE_TARGET='address
-coverage'</code>(而非 <code>SANITIZE_TARGET='address'</code>)来开启覆盖率。
+<p>向您的设备中刷入标准 Android 编译版本后,请按照说明刷入 <a href="/devices/tech/debug/asan.html#sanitize_target">AddressSanitizer 编译版本</a>,然后使用 <code>SANITIZE_TARGET='address
+coverage'</code>(而非 <code>SANITIZE_TARGET='address'</code>)来开启覆盖率指标。
</p>
<h4 id="setup-example">设置示例</h4>
<p>
@@ -64,18 +63,18 @@ coverage'</code>(而非 <code>SANITIZE_TARGET='address'</code>)来开启覆
要创建支持可重现模糊测试会话的插桩系统映像,您需要完成具有两个步骤的编译过程。
</p>
<p>
-首先,请执行完整的 Android 编译,并将其刷写到设备。接下来,以现有编译为起点,编译 Android 的插桩版本。编译系统要足够复杂,以便只编译所需的二进制文件并将其放在正确的位置。
+首先,请执行完整的 Android 编译过程,并将编译得到的版本刷入设备。接下来,以现有编译版本为起点,编译 Android 的插桩版本。编译系统会根据情况只编译所需的二进制文件并将其放在正确的位置。
</p>
<ol>
<li>通过执行以下命令来执行初始编译:
<pre class="devsite-terminal devsite-click-to-copy">make -j$(nproc)</pre></li>
<li>要刷写设备,请在启动设备后使用<a href="/source/running.html#booting-into-fastboot-mode">相应的键组合</a>进入 fastboot 模式。</li>
-<li>解锁引导加载程序,并使用下列命令刷写新编译的映像(<code>-w</code> 选项可用于擦除用户数据,以确保干净的初始状态)。
+<li>解锁引导加载程序,并使用下列命令刷入新编译的映像(<code>-w</code> 选项可用于擦除用户数据,以确保干净的初始状态)。
<pre class="prettyprint"><code class="devsite-terminal">fastboot oem unlock</code>
<code class="devsite-terminal">fastboot flashall -w</code>
</pre></li>
-<li>执行插桩编译,并将修改后的二进制文件刷写到设备:
+<li>执行插桩编译,并将修改后的二进制文件刷入设备:
<pre class="prettyprint"><code class="devsite-terminal">make -j$(nproc) SANITIZE_TARGET='address coverage'</code>
<code class="devsite-terminal">fastboot flash userdata</code>
<code class="devsite-terminal">fastboot flashall</code></pre>
@@ -149,7 +148,7 @@ Include $(BUILD_FUZZ_TEST)
</pre></li>
</ol>
<p>
-完成这些步骤之后,您便会得到一个编译好的模糊测试工具。模糊测试工具的默认位置(本例中为 Pixel 编译)为 <code>out/target/product/sailfish/data/nativetest/fuzzers/fuzz_me_fuzzer/fuzz_me_fuzzer</code>
+完成这些步骤之后,您便会得到一个编译好的模糊测试工具。模糊测试工具的默认位置(本例中为 Pixel 版本)为 <code>out/target/product/sailfish/data/nativetest/fuzzers/fuzz_me_fuzzer/fuzz_me_fuzzer</code>
</p>
<h2 id="run-your-fuzzer">运行您的模糊测试工具</h2>
<p>
@@ -168,7 +167,7 @@ Include $(BUILD_FUZZ_TEST)
<pre class="devsite-terminal devsite-click-to-copy">adb shell /data/tmp/fuzz_me_fuzzer/fuzz_me_fuzzer /data/tmp/fuzz_me_fuzzer/corpus</pre>
</li></ol>
<p>
-执行此操作后,系统将输出类似于下方示例输出的内容。
+执行此操作后,系统将输出类似于下方示例的内容。
</p>
<aside class="note"><strong>提示</strong>:要详细了解如何读取 libFuzzer 输出,请参阅 <a href="http://llvm.org/docs/LibFuzzer.html">LibFuzzer 文档</a>。
</aside>
@@ -230,10 +229,10 @@ Base64: RlVa
<pre class="prettyprint"> Data[3] == 'Z'; // :(
</pre>
<p>
-如果数据长度为 3,则这属于简单的出界读取。
+如果数据长度为 3,会导致出界读取错误。
</p>
<p>
-运行模糊测试工具后,输出常常会导致系统崩溃,而攻击性输入则会保存到语料库中,并被指定一个 ID。在本示例输出中,ID 为 <code>crash-0eb8e4ed029b774d80f2b66408203801cb982a60</code>。
+运行模糊测试工具后,输出常常会导致崩溃,而导致问题的输入则会保存到语料库中,并被指定一个 ID。在本示例输出中,ID 为 <code>crash-0eb8e4ed029b774d80f2b66408203801cb982a60</code>。
</p>
<p>
要检索崩溃信息,请运行以下命令(先指定好您的崩溃 ID):</p>
@@ -241,7 +240,7 @@ Base64: RlVa
/data/tmp/fuzz_me_fuzzer/corpus/<var>CRASH_ID</var></pre>
<p>
-要详细了解 libFuzzer,请参阅<a href="http://llvm.org/docs/LibFuzzer.html">上游文档</a>。由于 Android 的 libFuzzer 是上游之后的几个版本,请检查 <a href="https://android.googlesource.com/platform/external/llvm/+/master/lib/Fuzzer/">external/llvm/lib/Fuzzer</a> 以确保接口支持您正尝试执行的操作。
+要详细了解 libFuzzer,请参阅<a href="http://llvm.org/docs/LibFuzzer.html">上游文档</a>。由于 Android 的 libFuzzer 比上游低了几个版本,因此请检查 <a href="https://android.googlesource.com/platform/external/llvm/+/master/lib/Fuzzer/">external/llvm/lib/Fuzzer</a> 以确保接口支持您正尝试执行的操作。
</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/tech/display/night-light.html b/zh-cn/devices/tech/display/night-light.html
index 242bbcc7..f47cee12 100644
--- a/zh-cn/devices/tech/display/night-light.html
+++ b/zh-cn/devices/tech/display/night-light.html
@@ -28,8 +28,7 @@
</p>
<h2 id="implementation">实现</h2>
<p>
-设备制造商可以使用以下路径中定义的下列标记来启用该功能的默认实现:
-<code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml">
+设备制造商可以使用以下路径中定义的下列标记来启用该功能的默认实现:<code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml">
/android/frameworks/base/core/res/res/values/config.xml</a></code>
</p><pre class="devsite-click-to-copy">
diff --git a/zh-cn/devices/tech/ota/ab_implement.html b/zh-cn/devices/tech/ota/ab_implement.html
index 55c5789c..52761929 100644
--- a/zh-cn/devices/tech/ota/ab_implement.html
+++ b/zh-cn/devices/tech/ota/ab_implement.html
@@ -23,7 +23,7 @@
<p>想要实现 A/B 系统更新的原始设备制造商 (OEM) 和 SoC 供应商必须确保其引导加载程序实现 boot_control HAL,并将<a href="#kernel">正确的参数</a>传递到内核。</p>
<h2 id="bootcontrol">实现启动控件 HAL</h2>
-<p>支持 A/B 更新的引导加载程序必须在 <code>boot_control</code> 实现 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/boot_control.h" class="external">hardware/libhardware/include/hardware/boot_control.h</a></code> HAL。您可以使用 <code><a href="https://android.googlesource.com/platform/system/extras/+/master/bootctl/" class="external">system/extras/bootctl</a></code> 实用工具和 <code><a href="https://android.googlesource.com/platform/system/extras/+/refs/heads/master/tests/bootloader/" class="external">system/extras/tests/bootloader/</a></code> 来测试实现。
+<p>支持 A/B 更新的引导加载程序必须在 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/boot_control.h" class="external">hardware/libhardware/include/hardware/boot_control.h</a></code> 实现 <code>boot_control</code> HAL。您可以使用 <code><a href="https://android.googlesource.com/platform/system/extras/+/master/bootctl/" class="external">system/extras/bootctl</a></code> 实用工具和 <code><a href="https://android.googlesource.com/platform/system/extras/+/refs/heads/master/tests/bootloader/" class="external">system/extras/tests/bootloader/</a></code> 来测试实现。
</p>
<p>您还必须实现状态机,如下所示:</p>
diff --git a/zh-cn/devices/tech/perf/boot-times.html b/zh-cn/devices/tech/perf/boot-times.html
index 9b07cb30..907addf3 100644
--- a/zh-cn/devices/tech/perf/boot-times.html
+++ b/zh-cn/devices/tech/perf/boot-times.html
@@ -454,8 +454,7 @@ Android 8.0 支持在装载用户数据分区之前,及早启动动画。然
</p>
<ul>
-<li><strong>使用简洁的正则表达式 (regex)</strong>。在为 <code>file_contexts</code> 中的 <code>sys/devices</code> 匹配 SELinux 政策时,格式糟糕的正则表达式可能会导致大量开销。例如,正则表达式 <code>/sys/devices/.*abc.*(/.*)?</code> 错误地强制扫描包含“abc”的所有 <code>/sys/devices</code> 子目录,导致 <code>/sys/devices/abc</code> 和 <code>/sys/devices/xyz/abc</code> 都成为匹配项。
-如果将此正则表达式修正为 <code>/sys/devices/[^/]*abc[^/]*(/.*)?</code> ,则只有 <code>/sys/devices/abc</code> 会成为匹配项。
+<li><strong>使用简洁的正则表达式 (regex)</strong>。在为 <code>file_contexts</code> 中的 <code>sys/devices</code> 匹配 SELinux 政策时,格式糟糕的正则表达式可能会导致大量开销。例如,正则表达式 <code>/sys/devices/.*abc.*(/.*)?</code> 错误地强制扫描包含“abc”的所有 <code>/sys/devices</code> 子目录,导致 <code>/sys/devices/abc</code> 和 <code>/sys/devices/xyz/abc</code> 都成为匹配项。如果将此正则表达式修正为 <code>/sys/devices/[^/]*abc[^/]*(/.*)?</code> ,则只有 <code>/sys/devices/abc</code> 会成为匹配项。
</li><li><strong>将标签移动到 </strong><a href="https://selinuxproject.org/page/FileStatements#genfscon">genfscon</a>。这一现有的 SELinux 功能会将文件匹配前缀传递到 SELinux 二进制文件的内核中,而内核会将这些前缀应用于内核生成的文件系统。这也有助于修复错误标记的内核创建的文件,从而防止用户空间进程之间可能出现的争用情况(试图在重新标记之前访问这些文件)。</li>
</ul>
diff --git a/zh-cn/devices/tech/vts/performance.html b/zh-cn/devices/tech/vts/performance.html
index 31eaa4e5..125f2dc0 100644
--- a/zh-cn/devices/tech/vts/performance.html
+++ b/zh-cn/devices/tech/vts/performance.html
@@ -117,8 +117,8 @@
<p>吞吐量测试是针对 binder/hwbinder 事务吞吐量而运行的。在未过载的系统中,延迟气泡很少,而且只要迭代的次数足够多,就可以消除其影响。</p>
<ul>
-<li><strong>binder</strong> 吞吐量测试位于 <code>system/libhwbinder/vts/performance/Benchmark_binder.cpp</code> 中。</li>
-<li><strong>hwbinder</strong> 吞吐量测试位于 <code>system/libhwbinder/vts/performance/Benchmark.cpp</code> 中。</li>
+<li><strong>binder</strong> 吞吐量测试位于 <code>system/libhwbinder/vts/performance/Benchmark_binder.cpp</code> 下。</li>
+<li><strong>hwbinder</strong> 吞吐量测试位于 <code>system/libhwbinder/vts/performance/Benchmark.cpp</code> 下。</li>
</ul>
<h3 id="throughput-results">测试结果</h3>
@@ -335,7 +335,7 @@ SCHED_OTHER 0</div>
<ul>
<li><font style="color:orange">服务线程</font>使用 <code>SCHED_OTHER</code> 优先级创建,且与 <code>pid
8674</code> 一起在 <code>CPU:1</code> 中运行。</li>
-<li>随后,由 <code>fifo-caller</code> 启动<font style="color:blue">第一个事务</font>。为处理该事务,hwbinder 会将服务器 (<code>pid: 8674 tid: 8676</code>) 的优先级升级到 99,并使用瞬态调度类别(输出为 <code>???</code>)对其进行标记。接下来,调度程序会将服务器进程置于 <code>CPU:0</code> 中,以运行该进程并将它与其客户端使用的同一 CPU 进行同步。</li>
+<li>随后,<font style="color:blue">第一个事务</font>由 <code>fifo-caller</code> 启动。为处理该事务,hwbinder 会将服务器 (<code>pid: 8674 tid: 8676</code>) 的优先级升级到 99,并使用瞬态调度类别(输出为 <code>???</code>)对其进行标记。接下来,调度程序会将服务器进程置于 <code>CPU:0</code> 中,以运行该进程并将它与其客户端使用的同一 CPU 进行同步。</li>
<li><font style="color:green">第二个事务</font>调用程序的优先级为 <code>SCHED_OTHER</code>。服务器自行降级并为优先级为 <code>SCHED_OTHER</code> 的调用程序提供服务。</li>
</ul>
diff --git a/zh-cn/security/bulletin/2016-05-01.html b/zh-cn/security/bulletin/2016-05-01.html
index 0dc35ec3..c58c1975 100644
--- a/zh-cn/security/bulletin/2016-05-01.html
+++ b/zh-cn/security/bulletin/2016-05-01.html
@@ -24,14 +24,14 @@
<p>Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除了公告之外,我们还通过无线下载 (OTA) 更新的方式发布了针对 Nexus 设备的安全更新。我们还在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上发布了 Nexus 固件映像。2016 年 5 月 1 日(或之后)的安全补丁程序级别均已解决本文所列的这些问题(请参阅 <a href="https://support.google.com/nexus/answer/4457705">Nexus 文档</a>中提供的相关说明,了解如何检查安全补丁程序级别)。</p>
-<p>我们的合作伙伴在 2016 年 4 月 4 日(或之前)就已收到本公告中说明的这些问题的相关通知。我们已在 Android 开放源代码项目 (AOSP) 代码库中发布了针对相关问题的源代码补丁程序(如果适用)。</p>
+<p>我们的合作伙伴在 2016 年 4 月 4 日(或之前)就已收到本公告中说明的这些问题的相关通知。我们已在 Android 开源项目 (AOSP) 代码库中发布了针对相关问题的源代码补丁程序(如果适用)。</p>
<p>这些问题中危险性最高的是一个严重程度为“严重”的安全漏洞,它可能会导致在处理媒体文件的过程中,可通过电子邮件、网页和彩信等多种方式在受影响的设备上执行远程代码。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响设备造成的影响大小(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。
</p>
<p>我们尚未收到用户因这些新报告的问题而遭到主动攻击或这些问题遭到滥用的报告。请参阅 <a href="#mitigations">Android 和 Google 服务缓解措施</a>部分,详细了解 <a href="/security/enhancements/index.html">Android 安全平台防护功能</a>和服务防护功能(如 SafetyNet),这些功能可提高 Android 平台的安全性。</p>
-<p>我们建议所有用户在自己的设备上接受这些更新。</p>
+<p>我们建议所有用户都在自己的设备上接受这些更新。</p>
<h2 id="announcements">公告</h2>
@@ -47,7 +47,7 @@
<ul>
<li>新版 Android 平台中的增强功能让攻击者更加难以利用 Android 上存在的许多问题。我们建议所有用户都尽可能更新到最新版 Android。</li>
<li>Android 安全团队会积极利用<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_2015_Report_Final.pdf">“验证应用”和 SafetyNet</a> 来监控滥用行为,这些功能会在发现<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用</a>时向用户发出警告。在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,“验证应用”在默认情况下处于启用状态。对于安装来自 Google Play 以外的应用的用户来说,这项功能尤为重要。虽然 Google Play 中禁止提供设备 Root 应用,但用户可能会尝试安装 Root 应用,而“验证应用”会在检测到这类应用(无论应用来自何处)时向用户发出警告。另外,“验证应用”会尝试识别并阻止用户安装会利用提权漏洞的已知恶意应用。如果用户已安装此类应用,那么“验证应用”将会通知用户并尝试移除所检测到的应用。</li>
- <li>由于已做了适当更新,因此 Google 环聊和 Messenger 应用不会自动将媒体内容传递给 mediaserver 这类进程。</li>
+ <li>由于已做了适当更新,因此 Google 环聊和 Messenger 应用不会自动将媒体内容传递给 Mediaserver 这类进程。</li>
</ul>
<h2 id="acknowledgements">致谢</h2>
@@ -55,19 +55,10 @@
<p>非常感谢以下研究人员做出的贡献:</p>
<ul>
- <li>Google Chrome 安全团队的 Abhishek Arya、Oliver Chang 和 Martin Barbella:CVE-2016-2454</li><li><a href="https://www.e2e-assure.com">e2e-assure</a> 的 Andy Tyler (<a href="https://twitter.com/ticarpi">@ticarpi</a>):CVE-2016-2457
- </li><li><a href="http://c0reteam.org">C0RE 团队</a>的 Chiachih Wu (<a href="https://twitter.com/chiachih_wu">@chiachih_wu</a>) 和 Xuxian Jiang:CVE-2016-2441、CVE-2016-2442
- </li><li>Dzmitry Lukyanenka (<a href="http://www.linkedin.com/in/dzima">www.linkedin.com/in/dzima</a>):CVE-2016-2458
- </li><li>Gal Beniamini:CVE-2016-2431</li><li>奇虎 360 科技有限公司 Vulpecker 团队的 Hao Chen:CVE-2016-2456</li><li>Mandiant(FireEye 旗下的一家公司)的 Jake Valletta:CVE-2016-2060</li><li>奇虎 360 科技有限公司 IceSword 实验室的 Jianqiang Zhao (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>) 和 pjf (<a href="http://weibo.com/jfpan">weibo.com/jfpan</a>):CVE-2016-2434、CVE-2016-2435、CVE-2016-2436、CVE-2016-2441、CVE-2016-2442、CVE-2016-2444、CVE-2016-2445、CVE-2016-2446
- </li><li><a href="http://www.search-lab.hu">Search-Lab Ltd.</a> 的 Imre Rad:CVE-2016-4477
- </li><li>Google 的 Jeremy C. Joslin:CVE-2016-2461</li><li>Google 的 Kenny Root:CVE-2016-2462</li><li>腾讯科恩实验室 (<a href="https://twitter.com/keen_lab">@keen_lab</a>) 的 Marco Grassi (<a href="https://twitter.com/marcograss">@marcograss</a>):CVE-2016-2443
- </li><li>Michał Bednarski (<a href="https://github.com/michalbednarski">https://github.com/michalbednarski</a>):CVE-2016-2440
- </li><li><a href="http://c0reteam.org">C0RE 团队</a>的 Mingjian Zhou (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)、Chiachih Wu (<a href="https://twitter.com/chiachih_wu">@chiachih_wu</a>) 和 Xuxian Jiang:CVE-2016-2450、CVE-2016-2448、CVE-2016-2449、CVE-2016-2451、CVE-2016-2452
- </li><li>趋势科技的 Peter Pi (<a href="https://twitter.com/heisecode">@heisecode</a>):CVE-2016-2459、CVE-2016-2460
- </li><li>阿里巴巴的 Weichao Sun (<a href="https://twitter.com/sunblate">@sunblate</a>):CVE-2016-2428、CVE-2016-2429
- </li><li> <a href="http://c0reteam.org">C0RE 团队</a>的 <a href="mailto:computernik@gmail.com">Yuan-Tsung Lo</a>、<a href="mailto:zlbzlb815@163.com">Lubo Zhang</a>、Chiachih Wu (<a href="https://twitter.com/chiachih_wu">@chiachih_wu</a>) 和 Xuxian Jiang:CVE-2016-2437
- </li><li>百度 X-Lab 的 Yulong Zhang 和 Tao (Lenx) Wei:CVE-2016-2439</li><li>Android 安全团队的 Zach Riggle (<a href="https://twitter.com/ebeip90">@ebeip90</a>):CVE-2016-2430
-</li></ul>
+ <li>Google Chrome 安全团队的 Abhishek Arya、Oliver Chang 和 Martin Barbella:CVE-2016-2454</li><li><a href="https://www.e2e-assure.com">e2e-assure</a> 的 Andy Tyler (<a href="https://twitter.com/ticarpi">@ticarpi</a>):CVE-2016-2457</li><li><a href="http://c0reteam.org">C0RE 团队</a>的 Chiachih Wu (<a href="https://twitter.com/chiachih_wu">@chiachih_wu</a>) 和 Xuxian Jiang:CVE-2016-2441、CVE-2016-2442</li><li>Dzmitry Lukyanenka (<a href="http://www.linkedin.com/in/dzima">www.linkedin.com/in/dzima</a>):CVE-2016-2458
+ </li><li>Gal Beniamini:CVE-2016-2431</li><li>奇虎 360 科技有限公司 Vulpecker 团队的 Hao Chen:CVE-2016-2456</li><li>Mandiant(FireEye 旗下的一家公司)的 Jake Valletta:CVE-2016-2060</li><li>奇虎 360 科技有限公司 IceSword 实验室的 Jianqiang Zhao (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>) 和 pjf (<a href="http://weibo.com/jfpan">weibo.com/jfpan</a>):CVE-2016-2434、CVE-2016-2435、CVE-2016-2436、CVE-2016-2441、CVE-2016-2442、CVE-2016-2444、CVE-2016-2445、CVE-2016-2446</li><li><a href="http://www.search-lab.hu">Search-Lab Ltd.</a> 的 Imre Rad:CVE-2016-4477
+ </li><li>Google 的 Jeremy C. Joslin:CVE-2016-2461</li><li>Google 的 Kenny Root:CVE-2016-2462</li><li>腾讯科恩实验室 (<a href="https://twitter.com/keen_lab">@keen_lab</a>) 的 Marco Grassi (<a href="https://twitter.com/marcograss">@marcograss</a>):CVE-2016-2443</li><li>Michał Bednarski (<a href="https://github.com/michalbednarski">https://github.com/michalbednarski</a>):CVE-2016-2440
+ </li><li><a href="http://c0reteam.org">C0RE 团队</a>的 Mingjian Zhou (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)、Chiachih Wu (<a href="https://twitter.com/chiachih_wu">@chiachih_wu</a>) 和 Xuxian Jiang:CVE-2016-2450、CVE-2016-2448、CVE-2016-2449、CVE-2016-2451、CVE-2016-2452</li><li>趋势科技的 Peter Pi (<a href="https://twitter.com/heisecode">@heisecode</a>):CVE-2016-2459、CVE-2016-2460</li><li>阿里巴巴的 Weichao Sun (<a href="https://twitter.com/sunblate">@sunblate</a>):CVE-2016-2428、CVE-2016-2429</li><li> <a href="http://c0reteam.org">C0RE 团队</a>的 <a href="mailto:computernik@gmail.com">Yuan-Tsung Lo</a>、<a href="mailto:zlbzlb815@163.com">Lubo Zhang</a>、Chiachih Wu (<a href="https://twitter.com/chiachih_wu">@chiachih_wu</a>) 和 Xuxian Jiang:CVE-2016-2437</li><li>百度 X-Lab 的 Yulong Zhang 和 Tao (Lenx) Wei:CVE-2016-2439</li><li>Android 安全团队的 Zach Riggle (<a href="https://twitter.com/ebeip90">@ebeip90</a>):CVE-2016-2430</li></ul>
<h2 id="security_vulnerability_details">安全漏洞详情</h2>
@@ -146,7 +137,7 @@ Debuggerd 中的提权漏洞</h3>
<h3 id="elevation_of_privilege_vulnerability_in_qualcomm_trustzone">
Qualcomm TrustZone 中的提权漏洞</h3>
-<p>Qualcomm TrustZone 组件中的提权漏洞可让安全的本地恶意应用通过 TrustZone 内核执行任意代码。由于该漏洞有可能会造成本地设备永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。</p>
+<p>Qualcomm TrustZone 组件中的提权漏洞可让安全的本地恶意应用通过 TrustZone 内核执行任意代码。由于该漏洞有可能会对本地设备造成永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。</p>
<table>
<colgroup><col width="19%" />
<col width="16%" />
@@ -214,7 +205,7 @@ Qualcomm WLAN 驱动程序中的提权漏洞</h3>
<h3 id="elevation_of_privilege_vulnerability_in_nvidia_video_driver">
NVIDIA 视频驱动程序中的提权漏洞</h3>
-<p>NVIDIA 视频驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会造成本地设备永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。</p>
+<p>NVIDIA 视频驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。</p>
<table>
<colgroup><col width="19%" />
<col width="16%" />
@@ -311,7 +302,7 @@ NVIDIA 视频驱动程序中的提权漏洞</h3>
<td>Google 内部</td>
</tr>
</tbody></table>
-<p>*针对该问题的补丁程序位于 <a href="https://github.com/torvalds/linux/commit/b5a663aa426f4884c71cd8580adae73f33570f0d">Linux 上游</a>代码中。</p>
+<p>* 针对该问题的补丁程序位于 <a href="https://github.com/torvalds/linux/commit/b5a663aa426f4884c71cd8580adae73f33570f0d">Linux 上游</a>代码中。</p>
<h3 id="information_disclosure_vulnerability_in_qualcomm_tethering_controller">
Qualcomm 网络共享控制器中的信息披露漏洞</h3>
@@ -338,7 +329,7 @@ Qualcomm 网络共享控制器中的信息披露漏洞</h3>
<td>2016 年 3 月 23 日</td>
</tr>
</tbody></table>
-<p>*针对该问题的补丁程序未在 AOSP 中发布。受影响设备的最新驱动程序中应包含相应更新。</p>
+<p>* 针对该问题的补丁程序未在 AOSP 中发布。受影响设备的最新驱动程序中应包含相应更新。</p>
<h3 id="remote_code_execution_vulnerability_in_bluetooth">
蓝牙中的远程代码执行漏洞</h3>
@@ -430,7 +421,7 @@ Qualcomm Buspm 驱动程序中的提权漏洞</h3>
<td>2015 年 12 月 30 日</td>
</tr>
</tbody></table>
-<p>*针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
+<p>* 针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
<h3 id="elevation_of_privilege_vulnerability_in_qualcomm_mdp_driver">
Qualcomm MDP 驱动程序中的提权漏洞</h3>
@@ -457,7 +448,7 @@ Qualcomm MDP 驱动程序中的提权漏洞</h3>
<td>2016 年 1 月 5 日</td>
</tr>
</tbody></table>
-<p>*针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
+<p>* 针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
<h3 id="eop_in_qualcomm_wi-fi_driver">
Qualcomm WLAN 驱动程序中的提权漏洞</h3>
@@ -612,7 +603,9 @@ Mediaserver 中的提权漏洞</h3>
</tr>
<tr>
<td>CVE-2016-2452</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/44749eb4f273f0eb681d0fa013e3beef754fa687">27662364</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/65756b4082cd79a2d99b2ccb5b392291fd53703f">2</a>] [<a href="https://android.googlesource.com/platform/frameworks/av/+/daa85dac2055b22dabbb3b4e537597e6ab73a866">3</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/44749eb4f273f0eb681d0fa013e3beef754fa687">27662364</a>
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/65756b4082cd79a2d99b2ccb5b392291fd53703f">2</a>]
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/daa85dac2055b22dabbb3b4e537597e6ab73a866">3</a>]</td>
<td>高</td>
<td><a href="#nexus_devices">所有 Nexus 设备</a></td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1</td>
@@ -672,7 +665,7 @@ Qualcomm 硬件编解码器中的远程拒绝服务漏洞</h3>
<td>2015 年 12 月 16 日</td>
</tr>
</tbody></table>
-<p>*针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
+<p>* 针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
<h3 id="elevation_of_privilege_vulnerability_in_conscrypt">
Conscrypt 中的提权漏洞</h3>
@@ -695,7 +688,8 @@ Conscrypt 中的提权漏洞</h3>
</tr>
<tr>
<td>CVE-2016-2461</td>
- <td><a href="https://android.googlesource.com/platform/external/conscrypt/+/50d0447566db4a77d78d592f1c1b5d31096fac8f">27324690</a> [<a href="https://android.googlesource.com/platform/external/conscrypt/+/1638945d4ed9403790962ec7abed1b7a232a9ff8">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/external/conscrypt/+/50d0447566db4a77d78d592f1c1b5d31096fac8f">27324690</a>
+[<a href="https://android.googlesource.com/platform/external/conscrypt/+/1638945d4ed9403790962ec7abed1b7a232a9ff8">2</a>]</td>
<td>中</td>
<td><a href="#nexus_devices">所有 Nexus 设备</a></td>
<td>6.0、6.0.1</td>
@@ -765,7 +759,7 @@ MediaTek WLAN 驱动程序中的提权漏洞</h3>
<td>2016 年 2 月 19 日</td>
</tr>
</tbody></table>
-<p>*针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
+<p>* 针对该问题的补丁程序未在 AOSP 中发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
<h3 id="elevation_of_privilege_vulnerability_in_wi-fi">
WLAN 中的提权漏洞</h3>
@@ -817,7 +811,8 @@ AOSP 邮件中的信息披露漏洞</h3>
</tr>
<tr>
<td>CVE-2016-2458</td>
- <td><a href="https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/a55168330d9326ff2120285763c818733590266a">27335139</a> [<a href="https://android.googlesource.com/platform/packages/apps/Email/+/2791f0b33b610247ef87278862e66c6045f89693">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/a55168330d9326ff2120285763c818733590266a">27335139</a>
+[<a href="https://android.googlesource.com/platform/packages/apps/Email/+/2791f0b33b610247ef87278862e66c6045f89693">2</a>]</td>
<td>中</td>
<td><a href="#nexus_devices">所有 Nexus 设备</a></td>
<td>5.0.2、5.1.1、6.0、6.0.1</td>
@@ -887,27 +882,30 @@ Mediaserver 中的信息披露漏洞</h3>
<td>2016 年 3 月 17 日</td>
</tr>
</tbody></table>
-<p>*针对该问题的补丁程序位于 <a href="https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/fs/pipe.c?id=b381fbc509052d07ccf8641fd7560a25d46aaf1e">Linux 上游</a>代码中。</p>
+<p>* 针对该问题的补丁程序位于 <a href="https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/fs/pipe.c?id=b381fbc509052d07ccf8641fd7560a25d46aaf1e">Linux 上游</a>代码中。</p>
<h2 id="common_questions_and_answers">常见问题和解答</h2>
<p>本部分针对阅读本公告后可能产生的常见问题提供了相应的解答。</p>
-<p><strong>1. 如何确定我的设备已经更新了相关安全补丁程序,因此不受这些问题影响?</strong></p>
+<p><strong>1. 如何确定我的设备是否已更新到解决了这些问题的版本?</strong></p>
<p>2016 年 5 月 1 日(或之后)的安全补丁程序级别均已解决本文所列的这些问题(请参阅 <a href="https://support.google.com/nexus/answer/4457705">Nexus 文档</a>中提供的相关说明,了解如何检查安全补丁程序级别)。提供这些更新的设备制造商应将补丁程序字符串级别设为 [ro.build.version.security_patch]:[2016-05-01]</p>
-<p id="nexus_devices"><strong>2. 如何确定每个问题会影响哪些 Nexus 设备?</strong></p>
+<p id="nexus_devices"><strong>2. 如何确定各个问题都会影响哪些 Nexus 设备?</strong></p>
<p>在<a href="#security_vulnerability_details">安全漏洞详情</a>部分,每个表均包含“已更新的 Nexus 设备”列,其中列出了已针对每个问题更新过的受影响的 Nexus 设备系列。此列有以下几种情形:</p>
<ul>
- <li> <strong>所有 Nexus 设备</strong>:如果某个问题会影响所有 Nexus 设备,则相应表的“已更新的 Nexus 设备”列中会显示“所有 Nexus 设备”。<em></em>“所有 Nexus 设备”包含下列<a href="https://support.google.com/nexus/answer/4457705#nexus_devices">受支持的设备</a>:Nexus 5、Nexus 5X、Nexus 6、Nexus 6P、Nexus 7 (2013)、Nexus 9、Android One、Nexus Player 和 Pixel C。</li><li> <strong>部分 Nexus 设备</strong>:如果某个问题仅会影响部分 Nexus 设备,则“已更新的 Nexus 设备”列中会列出受影响的 Nexus 设备。<em></em></li>
+ <li> <strong>所有 Nexus 设备</strong>:如果某个问题会影响所有 Nexus 设备,则相应表的“已更新的 Nexus 设备”列中会显示“所有 Nexus 设备”。<em></em>
+“所有 Nexus 设备”包含下列<a href="https://support.google.com/nexus/answer/4457705#nexus_devices">受支持的设备</a>:Nexus 5、Nexus 5X、Nexus 6、Nexus 6P、Nexus 7 (2013)、Nexus 9、Android One、Nexus Player 和 Pixel C。
+ </li><li> <strong>部分 Nexus 设备</strong>:如果某个问题仅会影响部分 Nexus 设备,则“已更新的 Nexus 设备”列中会列出受影响的 Nexus 设备。<em></em></li>
<li> <strong>无 Nexus 设备</strong>:如果某个问题不会影响任何 Nexus 设备,则相应表的“已更新的 Nexus 设备”列中会显示“无”。<em></em></li>
</ul>
<p><strong>3. 本公告中为何包含 CVE-2015-1805?</strong></p>
-<p>CVE-2015-1805 之所以会包含在本公告中,是因为 <a href="/security/advisory/2016-03-18.html">Android 安全公告 - 2016 年 3 月 18 日</a>的发布时间与 4 月份公告的发布时间非常接近。由于时间紧迫,设备制造商可以选择采用并发布 <a href="2016-04-02.html">Nexus 安全公告 - 2016 年 4 月</a>中的修复程序(安全补丁程序级别为 2016 年 4 月 1 日),其中并不包含针对 CVE-2015-1805 的修复程序。由于必须修复此问题才能使用 2016 年 5 月 1 日的安全补丁程序级别,因此我们又在本公告中列出了此问题。</p>
+<p>CVE-2015-1805 之所以会包含在本公告中,是因为 <a href="/security/advisory/2016-03-18.html">Android 安全公告 - 2016 年 3 月 18 日</a>的发布时间与 4 月份公告的发布时间非常接近。由于时间紧迫,设备制造商可以选择采用并发布 <a href="2016-04-02.html">Nexus 安全公告 - 2016 年 4 月</a>中的修复程序(安全补丁程序级别为 2016 年 4 月 1 日),其中并不包含针对 CVE-2015-1805 的修复程序。
+由于必须修复此问题才能使用 2016 年 5 月 1 日的安全补丁程序级别,因此我们又在本公告中列出了此问题。</p>
<h2 id="revisions">修订版本</h2>
<ul>
diff --git a/zh-cn/security/bulletin/2016-11-01.html b/zh-cn/security/bulletin/2016-11-01.html
index 45fce546..e20246d7 100644
--- a/zh-cn/security/bulletin/2016-11-01.html
+++ b/zh-cn/security/bulletin/2016-11-01.html
@@ -20,11 +20,11 @@
limitations under the License.
-->
-<p><em>发布时间:2016 年 11 月 7 日 | 更新时间:2016 年 11 月 21 日</em></p>
+<p><em>发布时间:2016 年 11 月 7 日 | 更新时间:2016 年 12 月 21 日</em></p>
<p>
-Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除了公告之外,我们还通过无线下载 (OTA) 更新的方式发布了针对 Google 设备的安全更新。我们还在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>发布了 Google 设备固件映像。2016 年 11 月 6 日(或之后)的安全补丁程序级别均已解决所有这些问题。请参阅 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">Pixel 和 Nexus 更新时间表</a>,了解如何检查设备的安全补丁程序级别。</p>
+Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除了公告之外,我们还通过无线下载 (OTA) 更新的方式发布了针对 Google 设备的安全更新。我们还在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上发布了 Google 设备固件映像。2016 年 11 月 6 日(或之后)的安全补丁程序级别均已解决所有这些问题。请参阅 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">Pixel 和 Nexus 更新时间表</a>,了解如何检查设备的安全补丁程序级别。</p>
<p>
-我们的合作伙伴在 2016 年 10 月 20 日(或之前)就已收到本公告中说明的这些问题的相关通知。我们已在 Android 开放源代码项目 (AOSP) 代码库中发布了针对相关问题的源代码补丁程序(如果适用)。本公告还提供了 AOSP 之外的补丁程序的链接。
+我们的合作伙伴在 2016 年 10 月 20 日(或之前)就已收到本公告中说明的这些问题的相关通知。我们已在 Android 开源项目 (AOSP) 代码库中发布了针对相关问题的源代码补丁程序(如果适用)。本公告还提供了 AOSP 之外的补丁程序的链接。
</p>
<p>
这些问题中危险性最高的是一个严重程度为“严重”的安全漏洞,它可能会导致在处理媒体文件的过程中,可通过电子邮件、网页和彩信等多种方式在受影响的设备上执行远程代码。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响设备造成的影响大小(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。</p>
@@ -36,15 +36,15 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
<ul>
<li>由于我们推出了 Pixel 和 Pixel XL 设备,因此我们将改用“Google 设备”(而不是“Nexus 设备”)这个术语代表 <a href="#google-devices">Google 支持的所有设备</a>。
</li>
- <li>本公告有 3 个安全补丁程序级别,目的是让 Android 合作伙伴能够灵活地、更快速地修复所有 Android 设备上类似的一系列漏洞。如需了解详情,请参阅<a href="#common-questions-and-answers">常见问题和解答</a>:
+ <li>本公告有 3 个安全补丁程序级别,目的是为 Android 合作伙伴提供相应的灵活性,以便更快速地修复所有 Android 设备上类似的一系列漏洞。如需了解详情,请参阅<a href="#common-questions-and-answers">常见问题和解答</a>:
<ul>
<li><strong>2016-11-01</strong>:部分安全补丁程序级别。此安全补丁程序级别表明与 2016-11-01(以及之前的所有安全补丁程序级别)相关的所有问题均已得到解决。</li>
- <li><strong>2016-11-05</strong>:完整的安全补丁程序级别。此安全补丁程序级别表明与 2016-11-01 和 2016-11-05(以及之前的所有安全补丁程序级别)相关的所有问题均已得到解决。</li>
+ <li><strong>2016-11-05</strong>:完整安全补丁程序级别。此安全补丁程序级别表明与 2016-11-01 和 2016-11-05(以及之前的所有安全补丁程序级别)相关的所有问题均已得到解决。</li>
<li><strong>补充安全补丁程序级别</strong>
- <p>补充安全补丁程序级别仅针对特定设备,可解决我们在确定修复程序补丁程序级别后又公开披露的问题。在 2016-12-01 安全补丁程序级别发布之前,这些最新披露的漏洞并非必须解决。
+ <p>补充安全补丁程序级别仅针对特定设备,用于解决我们在确定修复程序补丁程序级别后又公开披露的问题。在 2016-12-01 安全补丁程序级别发布之前,这些最新披露的漏洞并非必须解决。
</p>
<ul>
- <li><strong>2016-11-06</strong>:此安全补丁程序级别表明该设备已解决所有与 2016-11-05 和 CVE-2016-5195 相关的问题(已于 2016 年 10 月 19 日公开披露)。</li>
+ <li><strong>2016-11-06</strong>:此安全补丁程序级别表明该设备已解决所有与 2016-11-05 和 CVE-2016-5195(已于 2016 年 10 月 19 日公开披露)相关的问题。</li>
</ul>
</li>
</ul>
@@ -54,11 +54,11 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
<h2 id="mitigations">Android 和 Google 服务缓解措施</h2>
<p>
-本部分总结了 <a href="/security/enhancements/index.html">Android 安全平台</a>和服务防护功能(如 SafetyNet)提供的缓解措施。这些功能可降低 Android 上的安全漏洞被成功利用的可能性。</p>
+本部分总结了 <a href="/security/enhancements/index.html">Android 安全平台</a>和服务防护功能(如 SafetyNet)提供的缓解措施。这些功能可降低 Android 上的安全漏洞被成功利用的风险。</p>
<ul>
<li>新版 Android 平台中的增强功能让攻击者更加难以利用 Android 上存在的许多问题。我们建议所有用户都尽可能更新到最新版 Android。</li>
- <li>Android 安全团队会积极利用<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_2015_Report_Final.pdf">“验证应用”和 SafetyNet</a> 来监控滥用行为,这些功能会在发现<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用</a>时向用户发出警告。在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,“验证应用”在默认情况下处于启用状态。对于安装来自 Google Play 以外的应用的用户来说,这项功能尤为重要。虽然 Google Play 中禁止提供设备 Root 应用,但用户可能会尝试安装 Root 应用,而“验证应用”会在检测到这类应用(无论应用来自何处)时向用户发出警告。另外,“验证应用”会尝试识别并阻止用户安装会利用提权漏洞的已知恶意应用。如果用户已安装此类应用,那么“验证应用”将会通知用户并尝试移除所检测到的应用。</li>
- <li>由于已做了适当更新,因此 Google 环聊和 Messenger 应用不会自动将媒体内容传递给 mediaserver 这类进程。</li>
+ <li>Android 安全团队会积极利用<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_2015_Report_Final.pdf">“验证应用”和 SafetyNet</a> 来监控滥用行为,这些功能会在发现<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用</a>时向用户发出警告。在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,“验证应用”在默认情况下处于启用状态。对于安装来自 Google Play 之外的应用的用户来说,这项功能尤为重要。虽然 Google Play 中禁止提供设备 Root 应用,但用户可能会尝试安装 Root 应用,而“验证应用”会在检测到这类应用(无论应用来自何处)时向用户发出警告。另外,“验证应用”会尝试识别并阻止用户安装会利用提权漏洞的已知恶意应用。如果用户已安装此类应用,那么“验证应用”将会通知用户并尝试移除所检测到的应用。</li>
+ <li>由于已做了适当更新,因此 Google 环聊和 Messenger 应用不会自动将媒体内容传递给 Mediaserver 这类进程。</li>
</ul>
<h2 id="acknowledgements">致谢</h2>
<p>
@@ -98,7 +98,7 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
此外,还要感谢 Android 安全团队的 Zach Riggle 对本公告中的几个问题做出的贡献。</p>
<h2 id="2016-11-01-details">2016-11-01 安全补丁程序级别 - 漏洞详情</h2>
-<p>我们在下面提供了 2016-11-01 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。在适用的情况下,我们会将 Bug ID 链接到解决问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还通过 Bug ID 后面的数字链接到了更多参考信息。</p>
+<p>我们在下面提供了 2016-11-01 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。在适用的情况下,我们会将 Bug ID 链接到解决相应问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。</p>
<h3 id="rce-in-mediaserver">Mediaserver 中的远程代码执行漏洞</h3>
<p>
@@ -157,7 +157,7 @@ libzipfile 中的提权漏洞可让本地恶意应用通过特许进程执行任
</tr>
</tbody></table>
<p>
-* 运行 Android 7.0 或更高版本且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
+* 搭载 Android 7.0(或更高版本)且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
</p>
<h3 id="rce-in-skia">Skia 中的远程代码执行漏洞</h3>
<p>
@@ -216,7 +216,7 @@ libjpeg 中的远程代码执行漏洞可让攻击者使用特制文件通过非
</tr>
</tbody></table>
<p>
-* 运行 Android 7.0 或更高版本且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
+* 搭载 Android 7.0(或更高版本)且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
</p>
<h3 id="rce-in-android-runtime">Android Runtime 中的远程代码执行漏洞</h3>
<p>
@@ -247,7 +247,7 @@ Android Runtime 库中的远程代码执行漏洞可让攻击者使用特制有
</tr>
</tbody></table>
<p>
-* 运行 Android 7.0 或更高版本且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
+* 搭载 Android 7.0(或更高版本)且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
</p>
<h3 id="eop-in-mediaserver">Mediaserver 中的提权漏洞</h3>
<p>
@@ -270,8 +270,10 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6704</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/c6c446f9e022adf20064e65a17574804f8af8e7d">A-30229821</a> [<a href="https://android.googlesource.com/platform/hardware/qcom/audio/+/9cb9810ecb63c8ff55ecf4bc77431dc5b0688b5f">2</a>] [<a href="https://android.googlesource.com/platform/system/media/+/a6274f03b4dfe1c3a22af51e3a17ea56a314e747">3</a>]
- </td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/c6c446f9e022adf20064e65a17574804f8af8e7d">
+A-30229821</a>
+[<a href="https://android.googlesource.com/platform/hardware/qcom/audio/+/9cb9810ecb63c8ff55ecf4bc77431dc5b0688b5f">2</a>]
+[<a href="https://android.googlesource.com/platform/system/media/+/a6274f03b4dfe1c3a22af51e3a17ea56a314e747">3</a>]</td>
<td>高</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -279,8 +281,9 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6705</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/3a03fa24d21f97e84e796ac5ef14b3f434c0e8f1">A-30907212</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/bd04b47d38a89f1dada1c6da2ef4a3d235c166b8">2</a>]
- </td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/3a03fa24d21f97e84e796ac5ef14b3f434c0e8f1">
+A-30907212</a>
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/bd04b47d38a89f1dada1c6da2ef4a3d235c166b8">2</a>]</td>
<td>高</td>
<td>所有</td>
<td>5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -385,7 +388,7 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tbody></table>
<h3 id="id-in-download-manager">下载管理器中的信息披露漏洞</h3>
<p>
-下载管理器中的信息披露漏洞可让本地恶意应用绕过将应用数据与其他应用分离开来的操作系统防护功能。由于该漏洞可用于获取相应应用无法获取的数据,因此我们将其严重程度评为“高”。
+下载管理器中的信息披露漏洞可让本地恶意应用绕过将应用数据与其他应用隔离开来的操作系统防护功能。由于该漏洞可用于获取相应应用无法获取的数据,因此我们将其严重程度评为“高”。
</p>
<table>
<colgroup><col width="18%" />
@@ -404,8 +407,9 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6710</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/base/+/9fab683c9598d234dd8461335c276ed3e37c91e8">A-30537115</a> [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/243e62949f7208d3b82eda3ee4ec22d3dbc1fb19">2</a>]
- </td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/9fab683c9598d234dd8461335c276ed3e37c91e8">
+A-30537115</a>
+[<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/243e62949f7208d3b82eda3ee4ec22d3dbc1fb19">2</a>]</td>
<td>高</td>
<td>所有</td>
<td>5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -441,7 +445,7 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
</tbody></table>
<p>
-* 运行 Android 7.0 或更高版本且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
+* 搭载 Android 7.0(或更高版本)且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
</p>
<h3 id="dos-in-openjdk">OpenJDK 中的拒绝服务漏洞</h3>
<p>
@@ -528,11 +532,11 @@ Mediaserver 中的远程拒绝服务漏洞可让攻击者使用特制文件挂
</tr>
</tbody></table>
<p>
-* 运行 Android 7.0 或更高版本且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
+* 搭载 Android 7.0(或更高版本)且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
</p>
<h3 id="eop-in-framework-apis">Framework API 中的提权漏洞</h3>
<p>
-Framework API 中的提权漏洞可让本地恶意应用在未经用户许可的情况下录制音频。由于该漏洞允许在本地绕过用户互动要求(通常需要用户发起或用户许可才能使用相应功能),因此我们将其严重程度评为“中”。
+Framework API 中的提权漏洞可让本地恶意应用在未经用户许可的情况下录制音频。由于该漏洞允许在本地绕过用户互动要求(访问通常需要由用户发起或许可才能使用的功能),因此我们将其严重程度评为“中”。
</p>
<table>
<colgroup><col width="18%" />
@@ -561,7 +565,7 @@ Framework API 中的提权漏洞可让本地恶意应用在未经用户许可的
</tbody></table>
<h3 id="eop-in-aosp-launcher">AOSP 启动器中的提权漏洞</h3>
<p>
-AOSP 启动器中的提权漏洞可让本地恶意应用在未经用户同意的情况下创建具有提权的快捷方式。由于该漏洞允许在本地绕过用户互动要求(通常需要用户发起或用户许可才能使用相应功能),因此我们将其严重程度评为“中”。
+AOSP 启动器中的提权漏洞可让本地恶意应用在未经用户同意的情况下创建具有特权的快捷方式。由于该漏洞允许在本地绕过用户互动要求(访问通常需要由用户发起或许可才能使用的功能),因此我们将其严重程度评为“中”。
</p>
<table>
<colgroup><col width="18%" />
@@ -619,7 +623,7 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tbody></table>
<h3 id="eop-in-account-manager-service">帐号管理器服务中的提权漏洞</h3>
<p>
-帐号管理器服务中的提权漏洞可让本地恶意应用在没有用户互动的情况下检索敏感信息。由于该漏洞允许在本地绕过用户互动要求(通常需要用户发起或用户许可才能使用相应功能),因此我们将其严重程度评为“中”。
+帐号管理器服务中的提权漏洞可让本地恶意应用在不进行用户互动的情况下检索敏感信息。由于该漏洞允许在本地绕过用户互动要求(访问通常需要由用户发起或许可才能使用的功能),因此我们将其严重程度评为“中”。
</p>
<table>
<colgroup><col width="18%" />
@@ -648,7 +652,7 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tbody></table>
<h3 id="eop-in-bluetooth">蓝牙中的提权漏洞</h3>
<p>
-蓝牙组件中的提权漏洞可让本地恶意应用在未经用户同意的情况下与任何蓝牙设备配对。由于该漏洞允许在本地绕过用户互动要求(通常需要用户发起或用户许可才能使用相应功能),因此我们将其严重程度评为“中”。
+蓝牙组件中的提权漏洞可让本地恶意应用在未经用户同意的情况下与任何蓝牙设备配对。由于该漏洞允许在本地绕过用户互动要求(访问通常需要由用户发起或许可才能使用的功能),因此我们将其严重程度评为“中”。
</p>
<table>
<colgroup><col width="18%" />
@@ -667,8 +671,9 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6719</td>
- <td><a href="https://android.googlesource.com/platform/packages/apps/Bluetooth/+/e1b6db10e913c09d0b695368336137f6aabee462">A-29043989</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/b1dc1757071ba46ee653d68f331486e86778b8e4">2</a>]
- </td>
+ <td><a href="https://android.googlesource.com/platform/packages/apps/Bluetooth/+/e1b6db10e913c09d0b695368336137f6aabee462">
+A-29043989</a>
+[<a href="https://android.googlesource.com/platform/frameworks/base/+/b1dc1757071ba46ee653d68f331486e86778b8e4">2</a>]</td>
<td>中</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -696,7 +701,11 @@ Mediaserver 中的信息披露漏洞可让本地恶意应用获取超出其权
</tr>
<tr>
<td>CVE-2016-6720</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/0f177948ae2640bfe4d70f8e4248e106406b3b0a">A-29422020</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/2c75e1c3b98e4e94f50c63e2b7694be5f948477c">2</a>] [<a href="https://android.googlesource.com/platform/frameworks/av/+/7c88b498fda1c2b608a9dd73960a2fd4d7b7e3f7">3</a>] [<a href="https://android.googlesource.com/platform/frameworks/av/+/640b04121d7cd2cac90e2f7c82b97fce05f074a5">4</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/0f177948ae2640bfe4d70f8e4248e106406b3b0a">
+A-29422020</a>
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/2c75e1c3b98e4e94f50c63e2b7694be5f948477c">2</a>]
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/7c88b498fda1c2b608a9dd73960a2fd4d7b7e3f7">3</a>]
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/640b04121d7cd2cac90e2f7c82b97fce05f074a5">4</a>]</td>
<td>中</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -740,8 +749,9 @@ Mediaserver 中的信息披露漏洞可让本地恶意应用获取超出其权
</tr>
<tr>
<td>CVE-2016-6723</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/base/+/d5b0d0b1df2e1a7943a4bb2034fd21487edd0264">A-30100884</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/31f351160cdfd9dbe9919682ebe41bde3bcf91c6">2</a>]
- </td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/d5b0d0b1df2e1a7943a4bb2034fd21487edd0264">
+A-30100884</a>
+[<a href="https://android.googlesource.com/platform/frameworks/base/+/31f351160cdfd9dbe9919682ebe41bde3bcf91c6">2</a>]</td>
<td>中</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -778,10 +788,10 @@ Mediaserver 中的信息披露漏洞可让本地恶意应用获取超出其权
</tr>
</tbody></table>
<h2 id="2016-11-05-details">2016-11-05 安全补丁程序级别 - 漏洞详情</h2>
-<p>我们在下面提供了 2016-11-05 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。在适用的情况下,我们会将 Bug ID 链接到解决问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还通过 Bug ID 后面的数字链接到了更多参考信息。</p>
+<p>我们在下面提供了 2016-11-05 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。在适用的情况下,我们会将 Bug ID 链接到解决相应问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。</p>
<h3 id="rce-in-qualcomm-crypto-driver">Qualcomm 加密驱动程序中的远程代码执行漏洞</h3>
<p>
-Qualcomm 加密驱动程序中的远程代码执行漏洞可让远程攻击者通过内核执行任意代码。由于该漏洞可用于通过内核执行远程代码,因此我们将其严重程度评为“严重”。
+Qualcomm 加密驱动程序中的远程代码执行漏洞可让远程攻击者通过内核执行任意代码。由于该漏洞可用于通过内核远程执行代码,因此我们将其严重程度评为“严重”。
</p>
<table>
<colgroup><col width="19%" />
@@ -983,7 +993,7 @@ Qualcomm 引导加载程序中的提权漏洞可让本地恶意应用通过内
</p>
<h3 id="eop-in-nvidia-gpu-driver">NVIDIA GPU 驱动程序中的提权漏洞</h3>
<p>
-NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会造成本地设备永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
+NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会造成本地设备永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
</p>
<table>
<colgroup><col width="19%" />
@@ -1104,8 +1114,7 @@ NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执
</tr>
</tbody></table>
<h3 id="eop-in-kernel-ion-subsystem-1">内核 ION 子系统中的提权漏洞</h3>
-<p>
-内核 ION 子系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会造成本地设备永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
+<p>内核 ION 子系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会造成本地设备永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
</p>
<table>
<colgroup><col width="19%" />
@@ -1222,11 +1231,11 @@ NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执
</tbody></table>
<p>
-* 运行 Android 7.0 或更高版本且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
+* 搭载 Android 7.0(或更高版本)且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
</p>
<h3 id="rce-in-webview">WebView 中的远程代码执行漏洞</h3>
<p>
-WebView 中的远程代码执行漏洞可让远程攻击者在用户导航到网站时执行任意代码。由于该漏洞可用于在非特许进程中执行远程代码,因此我们将其严重程度评为“高”。
+WebView 中的远程代码执行漏洞可让远程攻击者在用户导航到网站时执行任意代码。由于该漏洞可用于在非特许进程中远程执行代码,因此我们将其严重程度评为“高”。
</p>
<table>
<colgroup><col width="18%" />
@@ -1253,11 +1262,11 @@ WebView 中的远程代码执行漏洞可让远程攻击者在用户导航到网
</tr>
</tbody></table>
<p>
-* 运行 Android 7.0 或更高版本且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
+* 搭载 Android 7.0(或更高版本)且已安装所有可用更新的受支持的 Google 设备不受此漏洞的影响。
</p>
<h3 id="rce-in-freetype">Freetype 中的远程代码执行漏洞</h3>
<p>
-Freetype 中的远程代码执行漏洞可让本地恶意应用加载特制字体,以通过非特许进程破坏内存。由于该漏洞可用于在使用 Freetype 的应用中执行远程代码,因此我们将其严重程度评为“高”。
+Freetype 中的远程代码执行漏洞可让本地恶意应用加载特制字体,以通过非特许进程破坏内存。由于该漏洞可用于在使用 Freetype 的应用中远程执行代码,因此我们将其严重程度评为“高”。
</p>
<table>
<colgroup><col width="18%" />
@@ -1276,8 +1285,9 @@ Freetype 中的远程代码执行漏洞可让本地恶意应用加载特制字
</tr>
<tr>
<td>CVE-2014-9675</td>
- <td><a href="https://android.googlesource.com/platform/external/freetype/+/f720f0dbcf012d6c984dbbefa0875ef9840458c6">A-24296662</a> [<a href="https://android.googlesource.com/platform/external/pdfium/+/96f965ff7411f1edba72140fd70740e63cabec71">2</a>]
- </td>
+ <td><a href="https://android.googlesource.com/platform/external/freetype/+/f720f0dbcf012d6c984dbbefa0875ef9840458c6">
+A-24296662</a>
+[<a href="https://android.googlesource.com/platform/external/pdfium/+/96f965ff7411f1edba72140fd70740e63cabec71">2</a>]</td>
<td>高</td>
<td>无*</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1</td>
@@ -1732,7 +1742,8 @@ Qualcomm 组件(包括 GPU 驱动程序、电源驱动程序、SMSM 点对点
<tr>
<td>CVE-2016-5195</td>
<td>A-32141528<br />
-<a href="https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=9691eac5593ff1e2f82391ad327f21d90322aec1">上游内核</a> [<a href="https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=e45a502bdeae5a075257c4f061d1ff4ff0821354">2</a>]</td>
+<a href="https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=9691eac5593ff1e2f82391ad327f21d90322aec1">上游内核</a>
+[<a href="https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=e45a502bdeae5a075257c4f061d1ff4ff0821354">2</a>]</td>
<td>严重</td>
<td>3.10、3.18</td>
<td>2016 年 10 月 12 日</td>
@@ -1759,10 +1770,10 @@ Qualcomm 组件(包括 GPU 驱动程序、电源驱动程序、SMSM 点对点
<ul>
<li>[ro.build.version.security_patch]:[2016-11-01]</li>
<li>[ro.build.version.security_patch]:[2016-11-05]</li>
- <li>[ro.build.version.security_patch]:[2016-11-06]。</li>
+ <li>[ro.build.version.security_patch]:[2016-11-06].</li>
</ul>
<p>
-<strong>2. 为何此公告有 3 个安全补丁程序级别?</strong>
+<strong>2. 为何本公告会有 3 个安全补丁程序级别?</strong>
</p>
<p>
本公告有 3 个安全补丁程序级别,目的是让 Android 合作伙伴能够灵活地、更快速地修复所有 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
diff --git a/zh-cn/security/bulletin/2017-02-01.html b/zh-cn/security/bulletin/2017-02-01.html
index dbe2d3fe..f817d487 100644
--- a/zh-cn/security/bulletin/2017-02-01.html
+++ b/zh-cn/security/bulletin/2017-02-01.html
@@ -22,10 +22,10 @@
<p><em>发布时间:2017 年 2 月 6 日 | 更新时间:2017 年 2 月 8 日</em></p>
<p>
-Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除了公告之外,我们还通过无线下载 (OTA) 方式发布了针对 Google 设备的安全更新。我们还在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上发布了 Google 设备固件映像。2017 年 2 月 5 日(或之后)的安全补丁程序级别均已解决所有这些问题。请参阅 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">Pixel 和 Nexus 更新时间表</a>,了解如何检查设备的安全补丁程序级别。
+Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除了公告之外,我们还通过无线下载 (OTA) 更新的方式发布了针对 Google 设备的安全更新。我们还在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上发布了 Google 设备固件映像。2017 年 2 月 5 日(或之后)的安全补丁程序级别均已解决所有这些问题。请参阅 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">Pixel 和 Nexus 更新时间表</a>,了解如何检查设备的安全补丁程序级别。
</p>
<p>
-我们的合作伙伴在 2017 年 1 月 3 日(或之前)就已收到本公告中说明的这些问题的相关通知。我们已在 Android 开放源代码项目 (AOSP) 代码库中发布了针对相关问题的源代码补丁程序,并在本公告中提供了相应链接。
+我们的合作伙伴在 2017 年 1 月 3 日(或之前)就已收到本公告中说明的这些问题的相关通知。我们已在 Android 开源项目 (AOSP) 代码库中发布了针对相关问题的源代码补丁程序,并在本公告中提供了相应链接。
本公告还提供了 AOSP 之外的补丁程序的链接。
</p>
<p>
@@ -40,7 +40,7 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
<h2 id="announcements">公告</h2>
<ul>
<li>本公告有两个安全补丁程序级别字符串,目的是让 Android 合作伙伴能够灵活地、更快速地修复所有 Android 设备上类似的一系列漏洞。如需了解详情,请参阅<a href="#common-questions-and-answers">常见问题和解答</a>:
- <ul>
+<ul>
<li><strong>2017-02-01</strong>:部分安全补丁程序级别字符串。此安全补丁程序级别字符串表明与 2017-02-01(以及之前的所有安全补丁程序级别字符串)相关的所有问题均已得到解决。</li>
<li><strong>2017-02-05</strong>:完整的安全补丁程序级别字符串。此安全补丁程序级别字符串表明与 2017-02-01 和 2017-02-05(以及之前的所有安全补丁程序级别字符串)相关的所有问题均已得到解决。</li>
</ul>
@@ -49,10 +49,10 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
</ul>
<h2 id="mitigations">Android 和 Google 服务缓解措施</h2>
-<p>本部分总结了 <a href="/security/enhancements/index.html">Android 安全平台</a>和服务防护功能(如 SafetyNet)提供的缓解措施。这些功能可降低 Android 上的安全漏洞被成功利用的可能性。</p>
+<p>本部分概括总结了 <a href="/security/enhancements/index.html">Android 安全平台</a>和服务防护功能(如 SafetyNet)提供的缓解措施。这些功能可降低 Android 上的安全漏洞被成功利用的可能性。</p>
<ul>
<li>新版 Android 平台中的增强功能让攻击者更加难以利用 Android 上存在的许多问题。我们建议所有用户都尽可能更新到最新版 Android。</li>
- <li>Android 安全团队会积极利用<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_2015_Report_Final.pdf">“验证应用”和 SafetyNet</a> 来监控滥用行为,这些功能会在发现<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用时向用户发出警告。</a>在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,“验证应用”在默认情况下处于启用状态。对于安装来自 Google Play 以外的应用的用户来说,这项功能尤为重要。虽然 Google Play 中禁止提供设备 Root 应用,但用户可能会尝试安装 Root 应用,而“验证应用”会在检测到这类应用(无论应用来自何处)时向用户发出警告。另外,“验证应用”会尝试识别并阻止用户安装会利用提权漏洞的已知恶意应用。如果用户已安装此类应用,那么“验证应用”将会通知用户并尝试移除所检测到的应用。</li>
+ <li>Android 安全团队会积极利用<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_2015_Report_Final.pdf">“验证应用”和 SafetyNet</a> 来监控滥用行为,这些功能会在发现<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用</a>时向用户发出警告。在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,“验证应用”在默认情况下处于启用状态。对于安装来自 Google Play 以外的应用的用户来说,这项功能尤为重要。虽然 Google Play 中禁止提供设备 Root 应用,但用户可能会尝试安装 Root 应用,而“验证应用”会在检测到这类应用(无论应用来自何处)时向用户发出警告。另外,“验证应用”会尝试识别并阻止用户安装会利用提权漏洞的已知恶意应用。如果用户已安装此类应用,那么“验证应用”将会通知用户并尝试移除所检测到的应用。</li>
<li>由于已做了适当更新,因此 Google 环聊和 Messenger 应用不会自动将媒体内容传递给 mediaserver 这类进程。</li>
</ul>
<h2 id="acknowledgements">致谢</h2>
@@ -97,7 +97,8 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
</ul>
<h2 id="2017-02-01-details">2017-02-01 安全补丁程序级别 - 漏洞详情</h2>
-<p>我们在下面提供了 2017-02-01 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。在适用的情况下,我们会将 Bug ID 链接到解决相应问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。</p>
+<p>
+我们在下面提供了 2017-02-01 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。在适用的情况下,我们会将 Bug ID 链接到解决相应问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。</p>
<h3 id="rce-in-surfaceflinger">Surfaceflinger 中的远程代码执行漏洞</h3>
<p>
@@ -151,9 +152,10 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
</tr>
<tr>
<td>CVE-2017-0406</td>
- <td><a href="https://android.googlesource.com/platform/external/libhevc/+/fed702734d86801cc86b4865a57e2f2028c4b575">A-32915871</a> [<a href="https://android.googlesource.com/platform/external/libhevc/+/df7b56457184600e3d2b7cbac87ebe7001f7cb48">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/external/libhevc/+/fed702734d86801cc86b4865a57e2f2028c4b575">A-32915871</a>
+[<a href="https://android.googlesource.com/platform/external/libhevc/+/df7b56457184600e3d2b7cbac87ebe7001f7cb48">2</a>]</td>
<td>严重</td>
- <td>全部</td>
+ <td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 14 日</td>
</tr>
@@ -161,7 +163,7 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
<td>CVE-2017-0407</td>
<td><a href="https://android.googlesource.com/platform/external/libhevc/+/7546c106004910a4583b2d7d03c6498ecf383da7">A-32873375</a></td>
<td>严重</td>
- <td>全部</td>
+ <td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 12 日</td>
</tr>
@@ -191,7 +193,7 @@ libgdx 中的远程代码执行漏洞可让攻击者使用特制文件通过非
<td>CVE-2017-0408</td>
<td><a href="https://android.googlesource.com/platform/external/libgdx/+/e6da772e70c9754966aabf4ddac73bb99eb1742b">A-32769670</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>7.1.1</td>
<td>2016 年 11 月 9 日</td>
</tr>
@@ -221,7 +223,7 @@ libstagefright 中的远程代码执行漏洞可让攻击者使用特制文件
<td>CVE-2017-0409</td>
<td><a href="https://android.googlesource.com/platform/external/libavc/+/72886b6964f6539908c8e127cd13c3091d2e5a8b">A-31999646</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
<td>Google 内部</td>
</tr>
@@ -251,7 +253,7 @@ Java.Net 库中的提权漏洞可让恶意网页内容在未获取用户明确
<td>CVE-2016-5552</td>
<td><a href="https://android.googlesource.com/platform/libcore/+/4b3f2c6c5b84f80fae8eeeb46727811e055715ea">A-31858037</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>7.0、7.1.1</td>
<td>2016 年 9 月 30 日</td>
</tr>
@@ -281,7 +283,7 @@ Framework API 中的提权漏洞可让本地恶意应用通过特许进程执行
<td>CVE-2017-0410</td>
<td><a href="https://android.googlesource.com/platform/frameworks/native/+/b4d6b292bce7d82c93fd454078dedf5a1302b9fa">A-31929765</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 10 月 2 日</td>
</tr>
@@ -289,7 +291,7 @@ Framework API 中的提权漏洞可让本地恶意应用通过特许进程执行
<td>CVE-2017-0411</td>
<td><a href="https://android.googlesource.com/platform/frameworks/base/+/203725e4d58e16334d84998c1483c374f541ed9f">A-33042690</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/31a06019d13d7b00ca35fc8512191c643acb8e84">2</a>]</td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>7.0、7.1.1</td>
<td>2016 年 11 月 21 日</td>
</tr>
@@ -297,7 +299,7 @@ Framework API 中的提权漏洞可让本地恶意应用通过特许进程执行
<td>CVE-2017-0412</td>
<td><a href="https://android.googlesource.com/platform/frameworks/base/+/203725e4d58e16334d84998c1483c374f541ed9f">A-33039926</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/31a06019d13d7b00ca35fc8512191c643acb8e84">2</a>]</td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>7.0、7.1.1</td>
<td>2016 年 11 月 21 日</td>
</tr>
@@ -327,7 +329,7 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
<td>CVE-2017-0415</td>
<td><a href="https://android.googlesource.com/platform/frameworks/native/+/2e16d5fac149dab3c3e8f1b2ca89f45cf55a7b34">A-32706020</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 4 日</td>
</tr>
@@ -357,7 +359,7 @@ Audioserver 中的提权漏洞可让本地恶意应用通过特许进程执行
<td>CVE-2017-0416</td>
<td><a href="https://android.googlesource.com/platform/frameworks/av/+/b0bcddb44d992e74140a3f5eedc7177977ea8e34">A-32886609</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/321ea5257e37c8edb26e66fe4ee78cca4cd915fe">2</a>]</td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>Google 内部</td>
</tr>
@@ -365,15 +367,16 @@ Audioserver 中的提权漏洞可让本地恶意应用通过特许进程执行
<td>CVE-2017-0417</td>
<td><a href="https://android.googlesource.com/platform/frameworks/av/+/b0bcddb44d992e74140a3f5eedc7177977ea8e34">A-32705438</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 7 日</td>
</tr>
<tr>
<td>CVE-2017-0418</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/b0bcddb44d992e74140a3f5eedc7177977ea8e34">A-32703959</a> [<a href="https://android.googlesource.com/platform/hardware/libhardware/+/534098cb29e1e4151ba2ed83d6a911d0b6f48522">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/b0bcddb44d992e74140a3f5eedc7177977ea8e34">A-32703959</a>
+[<a href="https://android.googlesource.com/platform/hardware/libhardware/+/534098cb29e1e4151ba2ed83d6a911d0b6f48522">2</a>]</td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 7 日</td>
</tr>
@@ -381,7 +384,7 @@ Audioserver 中的提权漏洞可让本地恶意应用通过特许进程执行
<td>CVE-2017-0419</td>
<td><a href="https://android.googlesource.com/platform/frameworks/av/+/a155de4d70e0b9ac8fc02b2bdcbb2e8e6cca46ff">A-32220769</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 10 月 15 日</td>
</tr>
@@ -411,7 +414,7 @@ AOSP 邮件中的信息披露漏洞可让本地恶意应用绕过将应用数据
<td>CVE-2017-0420</td>
<td><a href="https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/2073799a165e6aa15117f8ad76bb0c7618b13909">A-32615212</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 9 月 12 日</td>
</tr>
@@ -441,7 +444,7 @@ AOSP 短信中的信息披露漏洞可让本地恶意应用绕过将应用数据
<td>CVE-2017-0413</td>
<td><a href="https://android.googlesource.com/platform/packages/apps/Messaging/+/74059eb379ea07b9c7f46bf2112a60de8e4cfc8e">A-32161610</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 10 月 13 日</td>
</tr>
@@ -449,7 +452,7 @@ AOSP 短信中的信息披露漏洞可让本地恶意应用绕过将应用数据
<td>CVE-2017-0414</td>
<td><a href="https://android.googlesource.com/platform/packages/apps/Messaging/+/30ab77f42d20c33c0aa9e6ffd2b164d096db32dd">A-32807795</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 10 日</td>
</tr>
@@ -479,7 +482,7 @@ Framework API 中的信息披露漏洞可让本地恶意应用绕过将应用数
<td>CVE-2017-0421</td>
<td><a href="https://android.googlesource.com/platform/frameworks/base/+/858064e946dc8dbf76bff9387e847e211703e336">A-32555637</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>Google 内部</td>
</tr>
@@ -511,7 +514,7 @@ Bionic DNS 中的拒绝服务漏洞可让远程攻击者使用特制网络数据
<td>CVE-2017-0422</td>
<td><a href="https://android.googlesource.com/platform/bionic/+/dba3df609436d7697305735818f0a840a49f1a0d">A-32322088</a></td>
<td>高</td>
- <td>全部</td>
+ <td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 10 月 20 日</td>
</tr>
@@ -541,7 +544,7 @@ Bionic DNS 中的拒绝服务漏洞可让远程攻击者使用特制网络数据
<td>CVE-2017-0423</td>
<td><a href="https://android.googlesource.com/platform/packages/apps/Bluetooth/+/4c1f39e1cf203cb9db7b85e75b5fc32ec7132083">A-32612586</a></td>
<td>中</td>
- <td>全部</td>
+ <td>所有</td>
<td>5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 2 日</td>
</tr>
@@ -571,7 +574,7 @@ AOSP 短信中的信息披露漏洞可让远程攻击者使用特制文件获取
<td>CVE-2017-0424</td>
<td><a href="https://android.googlesource.com/platform/packages/apps/Messaging/+/e9b7e3a6b7a8886693d298401a20788816a5afdc">A-32322450</a></td>
<td>中</td>
- <td>全部</td>
+ <td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 10 月 20 日</td>
</tr>
@@ -601,7 +604,7 @@ Audioserver 中的信息披露漏洞可让本地恶意应用获取超出其权
<td>CVE-2017-0425</td>
<td><a href="https://android.googlesource.com/platform/frameworks/av/+/a155de4d70e0b9ac8fc02b2bdcbb2e8e6cca46ff">A-32720785</a></td>
<td>中</td>
- <td>全部</td>
+ <td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
<td>2016 年 11 月 7 日</td>
</tr>
@@ -629,16 +632,18 @@ Audioserver 中的信息披露漏洞可让本地恶意应用获取超出其权
</tr>
<tr>
<td>CVE-2017-0426</td>
- <td><a href="https://android.googlesource.com/platform/system/sepolicy/+/ae46511bfa62b56938b3df824bb2ee737dceaa7a">A-32799236</a> [<a href="https://android.googlesource.com/platform/system/core/+/0e7324e9095a209d4f06ba00812b2b2976fe2846">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/system/sepolicy/+/ae46511bfa62b56938b3df824bb2ee737dceaa7a">A-32799236</a>
+[<a href="https://android.googlesource.com/platform/system/core/+/0e7324e9095a209d4f06ba00812b2b2976fe2846">2</a>]</td>
<td>中</td>
- <td>全部</td>
+ <td>所有</td>
<td>7.0、7.1.1</td>
<td>Google 内部</td>
</tr>
</tbody></table>
<h2 id="2017-02-05-details">2017-02-05 安全补丁程序级别 - 漏洞详情</h2>
-<p>我们在下面提供了 2017-02-05 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。如果有解决 Bug ID 所对应问题的公开更改记录(如 AOSP 代码更改列表),我们也提供了相应链接。如果某个 Bug 有多条相关的更改记录,我们还通过 Bug ID 后面的数字链接到了更多参考信息。</p>
+<p>
+我们在下面提供了 2017-02-05 补丁程序级别涵盖的每个安全漏洞的详细信息,其中包括问题描述、严重程度阐述以及一个包含 CVE、相关参考信息、严重程度、已更新的 Google 设备、已更新的 AOSP 版本(如果适用)及报告日期的表格。在适用的情况下,我们会将 Bug ID 链接到解决相应问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。</p>
<h3 id="rce-in-qualcomm-crypto-driver">Qualcomm 加密驱动程序中的远程代码执行漏洞</h3>
<p>
@@ -673,7 +678,7 @@ Qualcomm 加密驱动程序中的远程代码执行漏洞可让远程攻击者
<h3 id="eop-in-kernel-file-system">内核文件系统中的提权漏洞</h3>
<p>
-内核文件系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会造成本地设备永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
+内核文件系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
</p>
<table>
@@ -703,7 +708,7 @@ Qualcomm 加密驱动程序中的远程代码执行漏洞可让远程攻击者
<h3 id="eop-in-nvidia-gpu-driver">NVIDIA GPU 驱动程序中的提权漏洞</h3>
<p>
-NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会造成本地设备永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
+NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
</p>
<table>
@@ -740,7 +745,7 @@ NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执
<h3 id="eop-in-kernel-networking-subsystem">内核网络子系统中的提权漏洞</h3>
<p>
-内核网络子系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
+内核网络子系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
</p>
<table>
@@ -768,7 +773,7 @@ NVIDIA GPU 驱动程序中的提权漏洞可让本地恶意应用通过内核执
<h3 id="eop-in-broadcom-wi-fi-driver">Broadcom WLAN 驱动程序中的提权漏洞</h3>
<p>
-Broadcom WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
+Broadcom WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。
</p>
<table>
@@ -786,7 +791,8 @@ Broadcom WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
</tr>
<tr>
<td>CVE-2017-0430</td>
- <td>A-32838767*<br />B-RB#107459</td>
+ <td>A-32838767*<br />
+B-RB#107459</td>
<td>严重</td>
<td>Nexus 6、Nexus 6P、Nexus 9、Pixel C、Nexus Player</td>
<td>Google 内部</td>
@@ -852,7 +858,8 @@ MediaTek 驱动程序中的提权漏洞可让本地恶意应用通过内核执
</tr>
<tr>
<td>CVE-2017-0432</td>
- <td>A-28332719*<br />M-ALPS02708925</td>
+ <td>A-28332719*<br />
+M-ALPS02708925</td>
<td>高</td>
<td>无**</td>
<td>2016 年 4 月 21 日</td>
@@ -923,7 +930,9 @@ Qualcomm 安全执行环境通讯器驱动程序中的提权漏洞可让本地
<tr>
<td>CVE-2016-8480</td>
<td>A-31804432<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=0ed0f061bcd71940ed65de2ba46e37e709e31471">QC-CR#1086186</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd70f6025a7bbce89af7a7abf4c40a219fdea406">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=0ed0f061bcd71940ed65de2ba46e37e709e31471">
+QC-CR#1086186</a>
+[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd70f6025a7bbce89af7a7abf4c40a219fdea406">2</a>]</td>
<td>高</td>
<td>Nexus 5X、Nexus 6、Nexus 6P、Android One、Pixel、Pixel XL</td>
<td>2016 年 9 月 28 日</td>
@@ -950,21 +959,24 @@ Qualcomm 声音驱动程序中的提权漏洞可让本地恶意应用通过内
</tr>
<tr>
<td>CVE-2016-8481</td>
- <td>A-31906415*<br />QC-CR#1078000</td>
+ <td>A-31906415*<br />
+QC-CR#1078000</td>
<td>高</td>
<td>Nexus 5X、Nexus 6P、Pixel、Pixel XL</td>
<td>2016 年 10 月 1 日</td>
</tr>
<tr>
<td>CVE-2017-0435</td>
- <td>A-31906657*<br />QC-CR#1078000</td>
+ <td>A-31906657*<br />
+QC-CR#1078000</td>
<td>高</td>
<td>Nexus 5X、Nexus 6P、Pixel、Pixel XL</td>
<td>2016 年 10 月 1 日</td>
</tr>
<tr>
<td>CVE-2017-0436</td>
- <td>A-32624661*<br />QC-CR#1078000</td>
+ <td>A-32624661*<br />
+QC-CR#1078000</td>
<td>高</td>
<td>Nexus 5X、Nexus 6P、Pixel、Pixel XL</td>
<td>2016 年 11 月 2 日</td>
@@ -995,7 +1007,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2017-0437</td>
<td>A-32402310<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">QC-CR#1092497</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">
+QC-CR#1092497</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 10 月 25 日</td>
@@ -1003,7 +1016,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2017-0438</td>
<td>A-32402604<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">QC-CR#1092497</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">
+QC-CR#1092497</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 10 月 25 日</td>
@@ -1011,7 +1025,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2017-0439</td>
<td>A-32450647<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=81b6b5538d3227ed4b925fcceedb109abb2a4c61">QC-CR#1092059</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=81b6b5538d3227ed4b925fcceedb109abb2a4c61">
+QC-CR#1092059</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 10 月 25 日</td>
@@ -1019,7 +1034,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2016-8419</td>
<td>A-32454494<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=9ba50d536227666a5b6abd51f2b122675d950488">QC-CR#1087209</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=9ba50d536227666a5b6abd51f2b122675d950488">
+QC-CR#1087209</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 10 月 26 日</td>
@@ -1027,7 +1043,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2016-8420</td>
<td>A-32451171<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=c6597e015a7ce5ee71d3725fc55e64fc50923f4e">QC-CR#1087807</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=c6597e015a7ce5ee71d3725fc55e64fc50923f4e">
+QC-CR#1087807</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 10 月 26 日</td>
@@ -1035,7 +1052,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2016-8421</td>
<td>A-32451104<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=61a5cdb9adc96645583f528ac923e6e59f3abbcb">QC-CR#1087797</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=61a5cdb9adc96645583f528ac923e6e59f3abbcb">
+QC-CR#1087797</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 10 月 26 日</td>
@@ -1043,7 +1061,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2017-0440</td>
<td>A-33252788<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=10f0051f7b3b9a7635b0762a8cf102f595f7a268">QC-CR#1095770</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=10f0051f7b3b9a7635b0762a8cf102f595f7a268">
+QC-CR#1095770</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 11 月 11 日</td>
@@ -1051,7 +1070,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2017-0441</td>
<td>A-32872662<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=da87131740351b833f17f05dfa859977bc1e7684">QC-CR#1095009</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=da87131740351b833f17f05dfa859977bc1e7684">
+QC-CR#1095009</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 11 月 11 日</td>
@@ -1059,7 +1079,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2017-0442</td>
<td>A-32871330<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">QC-CR#1092497</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">
+QC-CR#1092497</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 11 月 13 日</td>
@@ -1067,7 +1088,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2017-0443</td>
<td>A-32877494<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">QC-CR#1092497</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=1f0b036dc74ccb6e9f0a03a540efdb0876f5ca77">
+QC-CR#1092497</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 11 月 13 日</td>
@@ -1075,7 +1097,8 @@ Qualcomm WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
<tr>
<td>CVE-2016-8476</td>
<td>A-32879283<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=bfe8035bce6fec72ed1d064b94529fce8fb09799">QC-CR#1091940</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=bfe8035bce6fec72ed1d064b94529fce8fb09799">
+QC-CR#1091940</a></td>
<td>高</td>
<td>Nexus 5X、Pixel、Pixel XL</td>
<td>2016 年 11 月 14 日</td>
@@ -1176,7 +1199,8 @@ NVIDIA 视频驱动程序中的信息披露漏洞可让本地恶意应用获取
</tr>
<tr>
<td>CVE-2017-0448</td>
- <td>A-32721029*<br />N-CVE-2017-0448</td>
+ <td>A-32721029*<br />
+N-CVE-2017-0448</td>
<td>高</td>
<td>Nexus 9</td>
<td>2016 年 11 月 7 日</td>
@@ -1206,7 +1230,8 @@ Broadcom WLAN 驱动程序中的提权漏洞可让本地恶意应用通过内核
</tr>
<tr>
<td>CVE-2017-0449</td>
- <td>A-31707909*<br />B-RB#32094</td>
+ <td>A-31707909*<br />
+B-RB#32094</td>
<td>中</td>
<td>Nexus 6、Nexus 6P</td>
<td>2016 年 9 月 23 日</td>
@@ -1297,7 +1322,8 @@ Qualcomm 安全执行环境通讯器中的信息披露漏洞可让本地恶意
<tr>
<td>CVE-2016-8414</td>
<td>A-31704078<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=320970d3da9b091e96746424c44649a91852a846">QC-CR#1076407</a></td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=320970d3da9b091e96746424c44649a91852a846">
+QC-CR#1076407</a></td>
<td>中</td>
<td>Nexus 5X、Nexus 6P、Android One、Pixel、Pixel XL</td>
<td>2016 年 9 月 23 日</td>
@@ -1325,7 +1351,9 @@ Qualcomm 声音驱动程序中的信息披露漏洞可让本地恶意应用获
<tr>
<td>CVE-2017-0451</td>
<td>A-31796345<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=59f55cd40b5f44941afc78b78e5bf81ad3dd723e">QC-CR#1073129</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=35346beb2d8882115f698ab22a96803552b5c57e">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=59f55cd40b5f44941afc78b78e5bf81ad3dd723e">
+QC-CR#1073129</a>
+[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=35346beb2d8882115f698ab22a96803552b5c57e">2</a>]</td>
<td>中</td>
<td>Nexus 5X、Nexus 6P、Android One、Pixel、Pixel XL</td>
<td>2016 年 9 月 27 日</td>
@@ -1347,23 +1375,23 @@ Qualcomm 声音驱动程序中的信息披露漏洞可让本地恶意应用获
<li><code>[ro.build.version.security_patch]:[2017-02-05]</code></li>
</ul>
-<p><strong>2.为何本公告会有 2 个安全补丁程序级别?</strong></p>
+<p><strong>2. 为何本公告会有 2 个安全补丁程序级别?</strong></p>
-<p>本公告有 2 个安全补丁程序级别,目的是让 Android 合作伙伴能够灵活地、更快速地修复所有 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。</p>
+<p>本公告有 2 个安全补丁程序级别,目的是让 Android 合作伙伴能够灵活地、更快速地修复所有 Android 设备上一系列类似漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。</p>
<ul>
<li>使用 2017 年 2 月 1 日安全补丁程序级别的设备必须包含该安全补丁程序级别对应的所有问题的修复方案,以及针对之前的安全公告中报告的所有问题的修复方案。</li>
<li>使用 2017 年 2 月 5 日或更新的安全补丁程序级别的设备必须包含此(以及之前的)安全公告中的所有适用补丁程序。</li>
</ul>
<p>我们建议合作伙伴在一次更新中汇总要解决的所有问题的修复方案。</p>
<p><strong>3. 如何确定各个问题都会影响哪些 Google 设备?</strong></p>
-<p>在 <a href="#2017-02-01-details">2017-02-01</a> 和 <a href="#2017-02-05-details">2017-02-05</a> 安全漏洞详情部分,每个表均包含“已更新的 Google 设备”列,其中列出了已针对每个问题更新过的受影响的 Google 设备。<em></em>此列有以下几种情形:
+<p>在 <a href="#2017-02-01-details">2017-02-01</a> 和 <a href="#2017-02-05-details">2017-02-05</a> 安全漏洞详情部分,每个表均包含“已更新的 Google 设备”列,其中列出了已针对每个问题更新过的受影响 Google 设备。<em></em>此列有以下几种情形:
</p>
<ul>
<li><strong>所有 Google 设备</strong>:如果某个问题会影响所有 Nexus 和 Pixel 设备,则相应表的“已更新的 Google 设备”列中会显示“所有”。<em></em>“所有”包含下列<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的设备</a>:Nexus 5X、Nexus 6、Nexus 6P、Nexus 9、Android One、Nexus Player、Pixel C、Pixel 和 Pixel XL。</li>
<li><strong>部分 Google 设备</strong>:如果某个问题仅会影响部分 Google 设备,则“已更新的 Google 设备”列中会列出受影响的 Google 设备。<em></em></li>
<li><strong>无 Google 设备</strong>:如果某个问题不会影响任何运行 Android 7.0 的 Google 设备,则相应表的“已更新的 Google 设备”列中会显示“无”。<em></em></li>
</ul>
-<p><strong>4. “参考信息”列中的条目对应的是什么内容?</strong></p>
+<p><strong>4.“参考信息”列中的条目对应的是什么内容?</strong></p>
<p>漏洞详情表的“参考信息”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>这些前缀的含义如下:</p>
<table>
<tbody><tr>
diff --git a/zh-cn/security/bulletin/2017-03-01.html b/zh-cn/security/bulletin/2017-03-01.html
index 4c49bff8..c9f16049 100644
--- a/zh-cn/security/bulletin/2017-03-01.html
+++ b/zh-cn/security/bulletin/2017-03-01.html
@@ -24,7 +24,7 @@
<p>Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除了公告之外,我们还通过无线下载 (OTA) 更新的方式发布了针对 Google 设备的安全更新。我们还在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上发布了 Google 设备固件映像。2017 年 3 月 5 日(或之后)的安全补丁程序级别均已解决所有这些问题。请参阅 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">Pixel 和 Nexus 更新时间表</a>,了解如何检查设备的安全补丁程序级别。</p>
<p>我们的合作伙伴在 2017 年 2 月 6 日(或之前)就已收到本公告中说明的这些问题的相关通知。我们已在 Android 开源项目 (AOSP) 代码库中发布了针对相关问题的源代码补丁程序,并在本公告中提供了相应链接。本公告还提供了 AOSP 之外的补丁程序的链接。</p>
<p>这些问题中危险性最高的是一个严重程度为“严重”的安全漏洞,它可能会导致在处理媒体文件的过程中,可通过电子邮件、网页和彩信等多种方式在受影响的设备上执行远程代码。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响设备造成的影响大小(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。</p>
-<p>我们尚未收到用户因这些新报告的问题而遭到主动攻击或这些问题遭到滥用的报告。请参阅 <a href="#mitigations">Android 和 Google 服务缓解措施</a>部分,详细了解 <a href="/security/enhancements/index.html">Android 安全平台防护功能</a>和服务防护功能(如 <a href="https://developer.android.com/training/safetynet/index.html">SafetyNet</a>),这些功能可提高 Android 平台的安全性。</p>
+<p>我们尚未收到用户因这些新报告的问题而遭到主动攻击或这些问题遭到滥用的报告。请参阅 <a href="#mitigations">Android 和 Google 服务缓解措施</a>部分,详细了解 <a href="/security/enhancements/index.html">Android 安全平台防护功能</a>和服务防护功能(如 <a href="https://developer.android.com/training/safetynet/index.html">SafetyNet</a>);这些功能可提高 Android 平台的安全性。</p>
<p>我们建议所有用户都在自己的设备上接受这些更新。</p>
<h2 id="announcements">公告</h2>
<ul>
@@ -49,11 +49,20 @@
</li><li>阿里巴巴移动安全团队的 Baozeng Ding、Chengming Yang、Peng Xiao 和 Yang Song:CVE-2017-0506
</li><li>阿里巴巴移动安全团队的 Baozeng Ding、Ning You、Chengming Yang、Peng Xiao 和 Yang Song:CVE-2017-0463
</li><li>Android 安全团队的 Billy Lau:CVE-2017-0335、CVE-2017-0336、CVE-2017-0338、CVE-2017-0460
-</li><li><a href="mailto:derrek.haxx@gmail.com">derrek</a> (<a href="https://twitter.com/derrekr6">@derrekr6</a>):CVE-2016-8413、CVE-2016-8477、CVE-2017-0531</li><li><a href="mailto:derrek.haxx@gmail.com">derrek</a> (<a href="https://twitter.com/derrekr6">@derrekr6</a>) 和 <a href="mailto:sbauer@plzdonthack.me">Scott Bauer</a> (<a href="https://twitter.com/ScottyBauer1">@ScottyBauer1</a>):CVE-2017-0521</li><li>腾讯科恩实验室 (<a href="https://twitter.com/returnsme">@keen_lab</a>) 的 Di Shen (<a href="https://twitter.com/keen_lab">@returnsme</a>):CVE-2017-0334、CVE-2017-0456、CVE-2017-0457、CVE-2017-0525</li><li><a href="https://twitter.com/heeeeen4x">MS509Team</a> 的 En He (<a href="http://www.ms509.com">@heeeeen4x</a>) 和 Bo Liu:CVE-2017-0490</li><li>奇虎 360 科技有限公司 IceSword 实验室的 Gengjia Chen (<a href="https://twitter.com/chengjia4574">@chengjia4574</a>) 和 <a href="http://weibo.com/jfpan">pjf</a>:CVE-2017-0500、CVE-2017-0501、CVE-2017-0502、CVE-2017-0503、CVE-2017-0509、CVE-2017-0524、CVE-2017-0529、CVE-2017-0536</li><li>奇虎 360 科技有限公司 Alpha 团队的 Hao Chen 和 Guang Gong:CVE-2017-0453、CVE-2017-0461、CVE-2017-0464
+</li><li><a href="mailto:derrek.haxx@gmail.com">derrek</a> (<a href="https://twitter.com/derrekr6">@derrekr6</a>):CVE-2016-8413、CVE-2016-8477、CVE-2017-0531
+</li><li><a href="mailto:derrek.haxx@gmail.com">derrek</a> (<a href="https://twitter.com/derrekr6">@derrekr6</a>) 和 <a href="mailto:sbauer@plzdonthack.me">Scott Bauer</a> (<a href="https://twitter.com/ScottyBauer1">@ScottyBauer1</a>):CVE-2017-0521
+</li><li>腾讯科恩实验室 (<a href="https://twitter.com/keen_lab">@keen_lab</a>) 的 Di Shen (<a href="https://twitter.com/returnsme">@returnsme</a>):CVE-2017-0334、CVE-2017-0456、CVE-2017-0457、CVE-2017-0525
+</li><li><a href="http://www.ms509.com">MS509Team</a> 的 En He (<a href="https://twitter.com/heeeeen4x">@heeeeen4x</a>) 和 Bo Liu:CVE-2017-0490
+</li><li>奇虎 360 科技有限公司 IceSword 实验室的 Gengjia Chen (<a href="https://twitter.com/chengjia4574">@chengjia4574</a>) 和 <a href="http://weibo.com/jfpan">pjf</a>:CVE-2017-0500、CVE-2017-0501、CVE-2017-0502、CVE-2017-0503、CVE-2017-0509、CVE-2017-0524、CVE-2017-0529、CVE-2017-0536
+</li><li>奇虎 360 科技有限公司 Alpha 团队的 Hao Chen 和 Guang Gong:CVE-2017-0453、CVE-2017-0461、CVE-2017-0464
</li><li>索尼移动通信股份有限公司的 Hiroki Yamamoto 和 Fang Chen:CVE-2017-0481
</li><li>IBM X-Force 安全研究员 Sagi Kedmi 和 Roee Hay:CVE-2017-0510
-</li><li><a href="https://twitter.com/Jioun_dai">奇虎 360 天眼实验室</a>的 Jianjun Dai (<a href="https://skyeye.360safe.com">@Jioun_dai</a>):CVE-2017-0478</li><li>奇虎 360 IceSword 实验室的 Jianqiang Zhao (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>) 和 <a href="http://weibo.com/jfpan">pjf</a>:CVE-2016-8416、CVE-2016-8478、CVE-2017-0458、CVE-2017-0459、CVE-2017-0518、CVE-2017-0519、CVE-2017-0533、CVE-2017-0534</li><li><a href="mailto:zlbzlb815@163.com">C0RE 团队</a>的 <a href="mailto:segfault5514@gmail.com">Lubo Zhang</a>、<a href="mailto:computernik@gmail.com">Tong Lin</a>、<a href="http://c0reteam.org">Yuan-Tsung Lo</a> 和 Xuxian Jiang:CVE-2016-8479</li><li>Google 的 Makoto Onuki:CVE-2017-0491
-</li><li><a href="https://twitter.com/Mingjian_Zhou">C0RE 团队</a>的 Mingjian Zhou (<a href="mailto:arnow117@gmail.com">@Mingjian_Zhou</a>)、<a href="http://c0reteam.org">Hanxiang Wen</a> 和 Xuxian Jiang:CVE-2017-0479、CVE-2017-0480</li><li>Nathan Crandall (<a href="https://twitter.com/natecray">@natecray</a>):CVE-2017-0535
+</li><li><a href="https://skyeye.360safe.com">奇虎 360 天眼实验室</a>的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>):CVE-2017-0478
+</li><li>奇虎 360 IceSword 实验室的 Jianqiang Zhao (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>) 和 <a href="http://weibo.com/jfpan">pjf</a>:CVE-2016-8416、CVE-2016-8478、CVE-2017-0458、CVE-2017-0459、CVE-2017-0518、CVE-2017-0519、CVE-2017-0533、CVE-2017-0534
+</li><li><a href="http://c0reteam.org">C0RE 团队</a>的 <a href="mailto:zlbzlb815@163.com">Lubo Zhang</a>、<a href="mailto:segfault5514@gmail.com">Tong Lin</a>、<a href="mailto:computernik@gmail.com">Yuan-Tsung Lo</a> 和 Xuxian Jiang:CVE-2016-8479
+</li><li>Google 的 Makoto Onuki:CVE-2017-0491
+</li><li><a href="http://c0reteam.org">C0RE 团队</a>的 Mingjian Zhou (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)、<a href="mailto:arnow117@gmail.com">Hanxiang Wen</a> 和 Xuxian Jiang:CVE-2017-0479、CVE-2017-0480
+</li><li>Nathan Crandall (<a href="https://twitter.com/natecray">@natecray</a>):CVE-2017-0535
</li><li>特斯拉汽车公司产品安全团队的 Nathan Crandall (<a href="https://twitter.com/natecray">@natecray</a>):CVE-2017-0306
</li><li>百度安全实验室的丁鹏飞、包沉浮和韦韬:CVE-2016-8417
</li><li>腾讯科恩实验室的何淇丹 (<a href="https://twitter.com/flanker_hqd">@flanker_hqd</a>):CVE-2017-0337、CVE-2017-0476
@@ -61,13 +70,18 @@
</li><li>蚂蚁金服巴斯光年安全实验室的 Quhe 和 wanchouchou:CVE-2017-0522
</li><li>DarkMatter 安全通信部门的 <a href="mailto:keun-o.park@darkmatter.ae">Sahara</a>:CVE-2017-0528
</li><li>加利福尼亚大学圣巴巴拉分校 Shellphish Grill 团队的 salls (<a href="https://twitter.com/chris_salls">@chris_salls</a>):CVE-2017-0505
-</li><li><a href="mailto:sbauer@plzdonthack.me">Scott Bauer</a> (<a href="https://twitter.com/ScottyBauer1">@ScottyBauer1</a>):CVE-2017-0504、CVE-2017-0516</li><li>Sean Beaupre (beaups):CVE-2017-0455
+</li><li><a href="mailto:sbauer@plzdonthack.me">Scott Bauer</a> (<a href="https://twitter.com/ScottyBauer1">@ScottyBauer1</a>):CVE-2017-0504、CVE-2017-0516
+</li><li>Sean Beaupre (beaups):CVE-2017-0455
</li><li>趋势科技的 Seven Shen (<a href="https://twitter.com/lingtongshen">@lingtongshen</a>):CVE-2017-0452
</li><li>富士通的 Shinichi Matsumoto:CVE-2017-0498
-</li><li><a href="mailto:smarques84@gmail.com">ByteRev</a> 的 <a href="http://www.byterev.com">Stéphane Marques</a>:CVE-2017-0489</li><li>Google 的 Svetoslav Ganov:CVE-2017-0492
-</li><li><a href="mailto:segfault5514@gmail.com">C0RE 团队</a>的 <a href="mailto:computernik@gmail.com">Tong Lin</a>、<a href="http://c0reteam.org">Yuan-Tsung Lo</a> 和 Xuxian Jiang:CVE-2017-0333</li><li><a href="https://twitter.com/vysea">趋势科技</a>的<a href="http://blog.trendmicro.com/trendlabs-security-intelligence/category/mobile">移动威胁响应团队</a>的 V.E.O (<a href="http://www.trendmicro.com">@VYSEa</a>):CVE-2017-0466、CVE-2017-0467、CVE-2017-0468、CVE-2017-0469、CVE-2017-0470、CVE-2017-0471、CVE-2017-0472、CVE-2017-0473、CVE-2017-0482、CVE-2017-0484、CVE-2017-0485、CVE-2017-0486、CVE-2017-0487、CVE-2017-0494、CVE-2017-0495</li><li>蚂蚁金服巴斯光年安全实验室的吴潍浠 (<a href="https://twitter.com/wish_wu">@wish_wu</a>):CVE-2017-0477
+</li><li><a href="http://www.byterev.com">ByteRev</a> 的 <a href="mailto:smarques84@gmail.com">Stéphane Marques</a>:CVE-2017-0489
+</li><li>Google 的 Svetoslav Ganov:CVE-2017-0492
+</li><li><a href="http://c0reteam.org">C0RE 团队</a>的 <a href="mailto:segfault5514@gmail.com">Tong Lin</a>、<a href="mailto:computernik@gmail.com">Yuan-Tsung Lo</a> 和 Xuxian Jiang:CVE-2017-0333
+</li><li><a href="http://www.trendmicro.com">趋势科技</a>的<a href="http://blog.trendmicro.com/trendlabs-security-intelligence/category/mobile">移动威胁响应团队</a>的 V.E.O (<a href="https://twitter.com/vysea">@VYSEa</a>):CVE-2017-0466、CVE-2017-0467、CVE-2017-0468、CVE-2017-0469、CVE-2017-0470、CVE-2017-0471、CVE-2017-0472、CVE-2017-0473、CVE-2017-0482、CVE-2017-0484、CVE-2017-0485、CVE-2017-0486、CVE-2017-0487、CVE-2017-0494、CVE-2017-0495
+</li><li>蚂蚁金服巴斯光年安全实验室的吴潍浠 (<a href="https://twitter.com/wish_wu">@wish_wu</a>):CVE-2017-0477
</li><li>奇虎 360 科技有限公司 Vulpecker 团队的 Yu Pan:CVE-2017-0517、CVE-2017-0532
-</li><li><a href="mailto:computernik@gmail.com">C0RE 团队</a>的 <a href="http://c0reteam.org">Yuan-Tsung Lo</a> 和 Xuxian Jiang:CVE-2017-0526、CVE-2017-0527</li><li><a href="https://twitter.com/nikos233__">C0RE 团队</a>的 Yuqi Lu (<a href="mailto:vancouverdou@gmail.com">@nikos233</a>)、<a href="mailto:shaodacheng2016@gmail.com">Wenke Dou</a>、<a href="https://twitter.com/Mingjian_Zhou">Dacheng Shao</a>、Mingjian Zhou (<a href="http://c0reteam.org">@Mingjian_Zhou</a>) 和 Xuxian Jiang:CVE-2017-0483</li>
+</li><li><a href="http://c0reteam.org">C0RE 团队</a>的 <a href="mailto:computernik@gmail.com">Yuan-Tsung Lo</a> 和 Xuxian Jiang:CVE-2017-0526、CVE-2017-0527
+</li><li><a href="http://c0reteam.org">C0RE 团队</a>的 Yuqi Lu (<a href="https://twitter.com/nikos233__">@nikos233</a>)、<a href="mailto:vancouverdou@gmail.com">Wenke Dou</a>、<a href="mailto:shaodacheng2016@gmail.com">Dacheng Shao</a>、Mingjian Zhou (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>) 和 Xuxian Jiang:CVE-2017-0483</li>
<li>奇虎 360 科技有限公司成都安全响应中心的 Zinuo Han (<a href="https://weibo.com/ele7enxxh">weibo.com/ele7enxxh</a>):CVE-2017-0475、CVE-2017-0497
</li></ul>
@@ -124,7 +138,8 @@
<tr>
<td>CVE-2017-0466</td>
<td><a href="https://android.googlesource.com/platform/external/libavc/+/c4f152575bd6d8cc6db1f89806e2ba1fd1bb314f">A-33139050</a>
-[<a href="https://android.googlesource.com/platform/external/libavc/+/ec9ab83ac437d31f484a86643e2cc66db8efae4c">2</a>]</td>
+[<a href="https://android.googlesource.com/platform/external/libavc/+/ec9ab83ac437d31f484a86643e2cc66db8efae4c">2</a>]
+</td>
<td>严重</td>
<td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
@@ -133,7 +148,8 @@
<tr>
<td>CVE-2017-0467</td>
<td><a href="https://android.googlesource.com/platform/external/libavc/+/c4f152575bd6d8cc6db1f89806e2ba1fd1bb314f">A-33250932</a>
-[<a href="https://android.googlesource.com/platform/external/libavc/+/fd9a12f9fdd9dd3e66c59dd7037e864b948085f7">2</a>]</td>
+[<a href="https://android.googlesource.com/platform/external/libavc/+/fd9a12f9fdd9dd3e66c59dd7037e864b948085f7">2</a>]
+</td>
<td>严重</td>
<td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
@@ -142,7 +158,8 @@
<tr>
<td>CVE-2017-0468</td>
<td><a href="https://android.googlesource.com/platform/external/libavc/+/0e8b1dff88e08b9d738d2360f05b96108e190995">A-33351708</a>
-[<a href="https://android.googlesource.com/platform/external/libavc/+/fd9a12f9fdd9dd3e66c59dd7037e864b948085f7">2</a>]</td>
+[<a href="https://android.googlesource.com/platform/external/libavc/+/fd9a12f9fdd9dd3e66c59dd7037e864b948085f7">2</a>]
+</td>
<td>严重</td>
<td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
@@ -359,7 +376,8 @@
<tr>
<td>CVE-2017-0479</td>
<td><a href="https://android.googlesource.com/platform/frameworks/av/+/22e26d8ee73488c58ba3e7928e5da155151abfd0">A-32707507</a>
-[<a href="https://android.googlesource.com/platform/frameworks/av/+/8415635765380be496da9b4578d8f134a527d86b">2</a>]</td>
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/8415635765380be496da9b4578d8f134a527d86b">2</a>]
+</td>
<td>高</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
@@ -368,7 +386,8 @@
<tr>
<td>CVE-2017-0480</td>
<td><a href="https://android.googlesource.com/platform/frameworks/av/+/22e26d8ee73488c58ba3e7928e5da155151abfd0">A-32705429</a>
-[<a href="https://android.googlesource.com/platform/frameworks/av/+/8415635765380be496da9b4578d8f134a527d86b">2</a>]</td>
+[<a href="https://android.googlesource.com/platform/frameworks/av/+/8415635765380be496da9b4578d8f134a527d86b">2</a>]
+</td>
<td>高</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0、7.1.1</td>
@@ -509,7 +528,8 @@
<td>CVE-2017-0490</td>
<td><a href="https://android.googlesource.com/platform/packages/apps/CertInstaller/+/1166ca8adba9b49c9185dad11b28b02e72124d95">A-33178389</a>
[<a href="https://android.googlesource.com/platform/packages/apps/CertInstaller/+/1ad3b1e3256a226be362de1a4959f2a642d349b7">2</a>]
-[<a href="https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/41c42f5bb544acf8bede2d05c6325657d92bd83c">3</a>]</td>
+[<a href="https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/41c42f5bb544acf8bede2d05c6325657d92bd83c">3</a>]
+</td>
<td>中</td>
<td>所有</td>
<td>6.0、6.0.1、7.0、7.1.1</td>
@@ -710,7 +730,8 @@
<tr>
<td>CVE-2017-0498</td>
<td><a href="https://android.googlesource.com/platform/frameworks/base/+/1c4d535d0806dbeb6d2fa5cea0373cbd9ab6d33b">A-30352311</a>
-[<a href="https://android.googlesource.com/platform/frameworks/base/+/5f621b5b1549e8379aee05807652d5111382ccc6">2</a>]</td>
+[<a href="https://android.googlesource.com/platform/frameworks/base/+/5f621b5b1549e8379aee05807652d5111382ccc6">2</a>]
+</td>
<td>中</td>
<td>所有</td>
<td>5.1.1、6.0、6.0.1、7.0、7.1.1</td>
@@ -873,7 +894,7 @@
<p>* 针对该问题的补丁程序未公开发布。<a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中包含相应更新。</p>
<h3 id="eop-in-kernel-ion-subsystem">内核 ION 子系统中的提权漏洞</h3>
-<p>内核 ION 子系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久性损害,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。</p>
+<p>内核 ION 子系统中的提权漏洞可让本地恶意应用通过内核执行任意代码。由于该漏洞有可能会对本地设备造成永久损坏,而用户可能需要通过重写操作系统来修复设备,因此我们将其严重程度评为“严重”。</p>
<table>
<colgroup><col width="19%" />
@@ -2034,7 +2055,7 @@
</ul>
<p>我们建议合作伙伴在一次更新中汇总要解决的所有问题的修复方案。</p>
<p><strong>3. 如何确定各个问题都会影响哪些 Google 设备?</strong></p>
-<p>在 <a href="#2017-03-01-details">2017-03-01</a> 和 <a href="#2017-03-05-details">2017-03-05</a> 安全漏洞详情部分,每个表均包含“已更新的 Google 设备”列,其中列出了已针对每个问题更新过的受影响 Google 设备系列。<em></em>此列有以下几种情形:</p>
+<p>在 <a href="#2017-03-01-details">2017-03-01</a> 和 <a href="#2017-03-05-details">2017-03-05</a> 安全漏洞详情部分,每个表均包含“已更新的 Google 设备”列,其中列出了已针对每个问题更新过的受影响的 Google 设备系列。<em></em>此列有以下几种情形:</p>
<ul>
<li><strong>所有 Google 设备</strong>:如果某个问题会影响所有 Nexus 和 Pixel 设备,则相应表的“已更新的 Google 设备”列中会显示“所有”。<em></em>“所有”包含下列<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的设备</a>:Nexus 5X、Nexus 6、Nexus 6P、Nexus 9、Android One、Nexus Player、Pixel C、Pixel 和 Pixel XL。</li>
<li><strong>部分 Google 设备</strong>:如果某个问题仅会影响部分 Google 设备,则“已更新的 Google 设备”列中会列出受影响的 Google 设备。<em></em></li>
diff --git a/zh-cn/security/bulletin/2017-06-01.html b/zh-cn/security/bulletin/2017-06-01.html
index 08cb8ed8..0be759e1 100644
--- a/zh-cn/security/bulletin/2017-06-01.html
+++ b/zh-cn/security/bulletin/2017-06-01.html
@@ -27,7 +27,7 @@
<p>这些问题中危险性最高的是媒体框架中的一个严重程度为“严重”的安全漏洞,在系统处理媒体文件和数据时,该漏洞可让远程攻击者使用特制文件破坏内存。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响设备造成的影响大小(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。</p>
-<p>我们尚未收到用户因这些新报告的问题而遭到主动攻击或这些问题遭到滥用的报告。请参阅 <a href="#mitigations">Android 和 Google Play 保护机制缓解措施</a>部分,详细了解 <a href="/security/enhancements/index.html">Android 安全平台防护功能</a>和 <a href="https://www.android.com/play-protect">Google Play 保护机制</a>,这些功能可提高 Android 平台的安全性。</p>
+<p>我们尚未收到用户因这些新报告的问题而遭到主动攻击或这些问题遭到滥用的报告。请参阅 <a href="#mitigations">Android 和 Google Play 保护机制缓解措施</a>部分,详细了解 <a href="/security/enhancements/index.html">Android 安全平台防护功能</a>和 <a href="https://www.android.com/play-protect">Google Play 保护机制</a>;这些功能可提高 Android 平台的安全性。</p>
<p>我们建议所有用户都在自己的设备上接受这些更新。</p>
@@ -45,7 +45,8 @@
</ul>
<h2 id="mitigations">Android 和 Google Play 保护机制缓解措施</h2>
-<p>本部分总结了 <a href="/security/enhancements/index.html">Android 安全平台</a>和服务防护功能(如 <a href="https://www.android.com/play-protect">Google Play 保护机制</a>)提供的缓解措施。这些功能可降低 Android 上的安全漏洞被成功利用的可能性。</p>
+<p>本部分总结了 <a href="/security/enhancements/index.html">Android 安全平台</a>和服务防护功能(如 <a href="https://www.android.com/play-protect">Google Play 保护机制</a>)提供的缓解措施。
+这些功能可降低 Android 上的安全漏洞被成功利用的可能性。</p>
<ul>
<li>新版 Android 平台中的增强功能让攻击者更加难以利用 Android 上存在的许多问题。我们建议所有用户都尽可能更新到最新版 Android。</li>
<li>Android 安全团队会积极利用 <a href="https://www.android.com/play-protect">Google Play 保护机制</a>来监控滥用行为,并会在发现<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用</a>时向用户发出警告。在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,Google Play 保护机制在默认情况下处于启用状态。对于安装来自 Google Play 以外的应用的用户来说,这项功能尤为重要。</li>
@@ -1055,7 +1056,7 @@
</tr>
<tr>
<td>CVE-2017-0645、CVE-2017-0639</td>
- <td><a href="https://twitter.com/heeeeen4x">MS509Team</a> 的 En He (<a href="http://www.ms509.com">@heeeeen4x</a>) 和 Bo Liu</td>
+ <td><a href="http://www.ms509.com">MS509Team</a> 的 En He (<a href="https://twitter.com/heeeeen4x">@heeeeen4x</a>) 和 Bo Liu</td>
</tr>
<tr>
<td>CVE-2017-0649</td>
@@ -1075,7 +1076,7 @@
</tr>
<tr>
<td>CVE-2017-7368</td>
- <td><a href="mailto:zlbzlb815@163.com">C0RE 团队</a>的 Lubo Zhang (<a href="mailto:computernik@gmail.com">zlbzlb815@163.com</a>)、Yuan-Tsung Lo (<a href="http://c0reteam.org">computernik@gmail.com</a>) 和 Xuxian Jiang</td>
+ <td><a href="http://c0reteam.org">C0RE 团队</a>的 Lubo Zhang (<a href="mailto:zlbzlb815@163.com">zlbzlb815@163.com</a>)、Yuan-Tsung Lo (<a href="mailto:computernik@gmail.com">computernik@gmail.com</a>) 和 Xuxian Jiang</td>
</tr>
<tr>
<td>CVE-2017-8242</td>
@@ -1087,7 +1088,7 @@
</tr>
<tr>
<td>CVE-2017-0648</td>
- <td>HCL 科技公司 <a href="https://twitter.com/roeehay">Aleph 研究团队</a>的 Roee Hay (<a href="https://alephsecurity.com/">@roeehay</a>)</td>
+ <td>HCL 科技公司 <a href="https://alephsecurity.com/">Aleph 研究团队</a>的 Roee Hay (<a href="https://twitter.com/roeehay">@roeehay</a>)</td>
</tr>
<tr>
<td>CVE-2017-7369、CVE-2017-6249、CVE-2017-6247、CVE-2017-6248</td>
@@ -1099,7 +1100,7 @@
</tr>
<tr>
<td>CVE-2017-0640</td>
- <td><a href="https://twitter.com/vysea">趋势科技</a>的<a href="http://blog.trendmicro.com/trendlabs-security-intelligence/category/mobile/">移动威胁响应团队</a>的 V.E.O (<a href="http://www.trendmicro.com">@VYSEa</a>)</td>
+ <td><a href="http://www.trendmicro.com">趋势科技</a>的<a href="http://blog.trendmicro.com/trendlabs-security-intelligence/category/mobile/">移动威胁响应团队</a>的 V.E.O (<a href="https://twitter.com/vysea">@VYSEa</a>)</td>
</tr>
<tr>
<td>CVE-2017-8236</td>
@@ -1115,7 +1116,7 @@
</tr>
<tr>
<td>CVE-2017-0651</td>
- <td><a href="mailto:computernik@gmail.com">C0RE 团队</a>的 Yuan-Tsung Lo (<a href="http://c0reteam.org">computernik@gmail.com</a>) 和 Xuxian Jiang</td>
+ <td><a href="http://c0reteam.org">C0RE 团队</a>的 Yuan-Tsung Lo (<a href="mailto:computernik@gmail.com">computernik@gmail.com</a>) 和 Xuxian Jiang</td>
</tr>
<tr>
<td>CVE-2017-8241</td>
@@ -1208,7 +1209,7 @@
<td>Broadcom 参考编号</td>
</tr>
</tbody></table>
-<p id="asterisk"><strong>5. “参考信息”列中的“Android Bug ID”旁边的 <a href="#asterisk">*</a> 表示什么意思?<em></em></strong></p>
+<p id="asterisk"><strong>5.“参考信息”列中的“Android Bug ID”旁边的 <a href="#asterisk">*</a> 表示什么意思?<em></em></strong></p>
<p>如果“参考信息”列的“Android Bug ID”旁边标有 <a href="#asterisk">*</a>,则表示相应问题未公开发布。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上提供的 Nexus 设备的最新二进制驱动程序中通常包含针对此问题的更新。</p>
diff --git a/zh-cn/security/bulletin/pixel/2017-12-01.html b/zh-cn/security/bulletin/pixel/2017-12-01.html
index 851b78ad..9e7af510 100644
--- a/zh-cn/security/bulletin/pixel/2017-12-01.html
+++ b/zh-cn/security/bulletin/pixel/2017-12-01.html
@@ -28,7 +28,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
所有受支持的 Google 设备都会收到 2017-12-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
</p>
<p class="note">
-<strong>注意</strong>:Google 设备固件映像可在 <a href="//developers.google.com/android/nexus/images">Google Developers 网站</a>上获取。
+<strong>注意</strong>:Google 设备固件映像可在 <a href="//developers.google.com/android/nexus/images">Google Developers 网站</a>上找到。
</p>
<h2 id="announcements">公告</h2>
<p>
@@ -36,7 +36,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
</p>
<h2 id="security-patches">安全补丁程序</h2>
<p>
-漏洞列在受其影响的组件下,其中包括问题描述,以及一个包含 CVE、相关参考信息、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开放源代码项目 (AOSP) 版本(如果适用)的表格。在适用的情况下,我们会将 Bug ID 链接到解决相应问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。
+漏洞列在受其影响的组件下,其中包括问题描述,以及一个包含 CVE、相关参考信息、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)的表格。在适用的情况下,我们会将 Bug ID 链接到解决相应问题的公开更改记录(如 AOSP 代码更改列表)。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到了更多参考信息。
</p>
<h3 id="media-framework">媒体框架</h3>
@@ -299,7 +299,8 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-11030</td>
<td>A-64431967<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=89e6c2d38405cdeefaa278cbf6d18791f255ee5e">QC-CR#2034255</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=2be7caec635de9fcf0d2145f858635e9366f0f4f">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=89e6c2d38405cdeefaa278cbf6d18791f255ee5e">QC-CR#2034255</a>
+[<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=2be7caec635de9fcf0d2145f858635e9366f0f4f">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>显示屏</td>
@@ -352,7 +353,8 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-9722</td>
<td>A-64453224<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=ab0ae43628cff92d10792b762667ddfaf243d796">QC-CR#2034239</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd7e77fbab7e2b7e737a10d5300e826572fee82f">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=ab0ae43628cff92d10792b762667ddfaf243d796">QC-CR#2034239</a>
+[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd7e77fbab7e2b7e737a10d5300e826572fee82f">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>显示屏</td>
@@ -400,7 +402,8 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-11045</td>
<td>A-65468993<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=6c815ebc37f49e4e3edb10def9c45f2fd9362a84">QC-CR#2060377</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=2a657721dd71aec745534af9f8712537b83c410e">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=6c815ebc37f49e4e3edb10def9c45f2fd9362a84">QC-CR#2060377</a>
+[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=2a657721dd71aec745534af9f8712537b83c410e">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>相机</td>
@@ -440,7 +443,8 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-11033</td>
<td>A-64453422<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=b54141365805ae1a5254bff5442e1a103d3701d0">QC-CR#2031930</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=fd98387b3d30da51773ad7597bb9febb87c70394">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=b54141365805ae1a5254bff5442e1a103d3701d0">QC-CR#2031930</a>
+ [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=fd98387b3d30da51773ad7597bb9febb87c70394">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>内核</td>
@@ -577,7 +581,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<td>拒绝服务</td>
</tr>
<tr>
- <td>N/A</td>
+ <td>无</td>
<td>没有分类</td>
</tr>
</tbody></table>
diff --git a/zh-cn/setup/building-kernels.html b/zh-cn/setup/building-kernels.html
index a7fe8e6b..06918547 100644
--- a/zh-cn/setup/building-kernels.html
+++ b/zh-cn/setup/building-kernels.html
@@ -20,7 +20,7 @@
limitations under the License.
-->
-<p>本页详细介绍了如何仅编译内核。以下说明假设您尚未下载整个 AOSP;如果您已完成下载,则可以跳过 <code>git clone</code> 对应的步骤,但下载内核源代码的步骤除外。</p>
+<p>本页详细介绍了如何仅编译<a href="/devices/architecture/kernel/">内核</a>。以下说明假设您尚未下载整个 AOSP;如果您已完成下载,则可以跳过 <code>git clone</code> 对应的步骤,但下载内核源代码的步骤除外。</p>
<p>本部分中的所有示例均使用 <a href="/setup/devices.html#hikey-boards">hikey</a> 内核。</p>