Docs: Changes to source.android.com

  - 218879518 Add Configuration tuning section to Wi-Fi debug page by Kenneth Lau <[email protected]>
  - 218712036 Devsite localized content from translation request 1008371. by Android Partner Docs <[email protected]>
  - 218712025 Devsite localized content from translation request 1005928. by Android Partner Docs <[email protected]>
  - 218712020 Devsite localized content from translation request 1007339. by Android Partner Docs <[email protected]>
  - 218684781 Fix formatting by Android Partner Docs <[email protected]>
  - 218542171 Update acknowledgement for CVE-2017-13270 by Danielle Roberts <[email protected]>
  - 218533117 Update RFoV zip file to 1.3 by Kenneth Lau <[email protected]>
  - 218530006 Devsite localized content from translation request 1008213. by Android Partner Docs <[email protected]>
  - 218529978 Devsite localized content from translation request 1002445. by Android Partner Docs <[email protected]>
  - 218529963 Devsite localized content from translation request 972165. by Android Partner Docs <[email protected]>
  - 218437924 Add a note about Hardware requirements if downloading a m... by Christina Nguyen <[email protected]>
  - 218368944 Fix broken link. by Mark Hecomovich <[email protected]>
  - 218359370 Devsite localized content from translation request 1008218. by Android Partner Docs <[email protected]>
  - 218359361 Devsite localized content from translation request 1007771. by Android Partner Docs <[email protected]>
  - 218359349 Devsite localized content from translation request 1007338. by Android Partner Docs <[email protected]>
  - 218258283 Add Pixel 2, Pixel 2 XL, Pixel 3 and Pixel 3 XL to the ru... by Android Partner Docs <[email protected]>
  - 218229160 Improve link text. by Mark Hecomovich <[email protected]>
  - 218221208 Add Dr. Rick O'Rang loopback app to SAC. by Mark Hecomovich <[email protected]>
  - 218204284 AOSP source requires more disk space nowadays, update the... by Android Partner Docs <[email protected]>
  - 218185116 Automated g4 rollback of changelist 217173674. by Android Partner Docs <[email protected]>
  - 218179268 Devsite localized content from translation request 980063. by Android Partner Docs <[email protected]>
  - 217957597 Publish localized bulletins by Danielle Roberts <[email protected]>
  - 217908051 Devsite localized content from translation request 1003354. by Android Partner Docs <[email protected]>
  - 217893115 Devsite localized content from translation request 964303. by Android Partner Docs <[email protected]>
  - 217893097 Devsite localized content from translation request 1005895. by Android Partner Docs <[email protected]>
  - 217889812 Fix typo in library name by Christina Nguyen <[email protected]>
  - 217886741 Automated g4 rollback of changelist 217699000. by Android Partner Docs <[email protected]>
  - 217779012 Update Sensor Fusion zip file from revision 1.4 to 1.5 by Kenneth Lau <[email protected]>
  - 217765958 Update build numbers for pi dr1 releases by Android Partner Docs <[email protected]>
  - 217750196 Devsite localized content from translation request 1001123. by Android Partner Docs <[email protected]>
  - 217743339 Devsite localized content from translation request 990059. by Android Partner Docs <[email protected]>
  - 217743327 Devsite localized content from translation request 1003746. by Android Partner Docs <[email protected]>
  - 217743322 Devsite localized content from translation request 1007147. by Android Partner Docs <[email protected]>
  - 217699000 Updating the links in the USB audio interface section to ... by Android Partner Docs <[email protected]>
  - 217645344 Changed headings to sentence case by Android Partner Docs <[email protected]>
  - 217556428 Devsite localized content from translation request 1004748. by Android Partner Docs <[email protected]>
  - 217556410 Devsite localized content from translation request 1004737. by Android Partner Docs <[email protected]>
  - 217547197 Automated g4 rollback of changelist 213015576. by Android Partner Docs <[email protected]>
  - 217352540 Devsite localized content from translation request 999860. by Android Partner Docs <[email protected]>
  - 217352528 Devsite localized content from translation request 999858. by Android Partner Docs <[email protected]>
  - 217304729 Devsite localized content from translation request 1001062. by Android Partner Docs <[email protected]>
  - 217303399 Delete _freeze.yaml file to publish: by Christina Nguyen <[email protected]>
  - 217227763 Fix the hyper link for Vulkan Implementor's Guide by Android Partner Docs <[email protected]>
  - 217175480 Devsite localized content from translation request 1001099. by Android Partner Docs <[email protected]>
  - 217175474 Devsite localized content from translation request 1002304. by Android Partner Docs <[email protected]>
  - 217175455 Devsite localized content from translation request 999876. by Android Partner Docs <[email protected]>
  - 217173674 The USB Audio CTS Verifier Tests page is updated to add t... by Android Partner Docs <[email protected]>
  - 216872776 Devsite localized content from translation request 999606. by Android Partner Docs <[email protected]>
  - 216866964 Add test group to android source whitelist by Android Partner Docs <[email protected]>
  - 216863256 Create temporary files to test whitelists on source.andro... by Android Partner Docs <[email protected]>
  - 216770677 Update content license to android by Danielle Roberts <[email protected]>
  - 216755328 Update broken link to point to correct path. by Christina Nguyen <[email protected]>
  - 216746846 Updates to intsan by Danielle Roberts <[email protected]>
  - 216721226 Devsite localized content from translation request 976999. by Android Partner Docs <[email protected]>
  - 216714261 Devsite localized content from translation request 995323. by Android Partner Docs <[email protected]>
  - 216713954 Devsite localized content from translation request 969253. by Android Partner Docs <[email protected]>
  - 216713937 Devsite localized content from translation request 1003362. by Android Partner Docs <[email protected]>
  - 216713923 Devsite localized content from translation request 999285. by Android Partner Docs <[email protected]>
  - 216625979 Devsite localized content from translation request 972168. by Android Partner Docs <[email protected]>
  - 216623489 Publish Enterprise Security report by Danielle Roberts <[email protected]>
  - 216557488 Fix try > tray typo in managed profile by Danielle Roberts <[email protected]>
  - 216555020 Devsite localized content from translation request 1001113. by Android Partner Docs <[email protected]>
  - 216555003 Devsite localized content from translation request 998044. by Android Partner Docs <[email protected]>
  - 216553118 Add ADB to the developer tools bug component table. by Android Partner Docs <[email protected]>
  - 216552360 Add Janet to Android OWNERS file by Christina Nguyen <[email protected]>
  - 216547801 [SAC Bug] Update CTS/CTS-Verifier/CTS_Instant downloads f... by Android Partner Docs <[email protected]>
  - 216436716 Updated ro.product.first_api_level requirement to differe... by Christina Nguyen <[email protected]>
  - 216374672 Devsite localized content from translation request 995326. by Android Partner Docs <[email protected]>
  - 216260547 Change "Assembly" to "Details" in left nav by Kenneth Lau <[email protected]>
  - 216255124 Update images and components for Sensor Fusion Box by Kenneth Lau <[email protected]>
  - 216225168 Devsite localized content from translation request 1056411. by Android Partner Docs <[email protected]>
  - 216225159 Devsite localized content from translation request 977320. by Android Partner Docs <[email protected]>
  - 215985064 Fix links on the Accessories for Android page by Kenneth Lau <[email protected]>
  - 215983993 Fix errors in EuiccManager/EuiccCardManager sample code by Kenneth Lau <[email protected]>

PiperOrigin-RevId: 218879518
Change-Id: Idaf13561fe53a45d8a10d7965ff7a5ee26ef9802
diff --git a/OWNERS.android b/OWNERS.android
index 7ac3365..2022d43 100644
--- a/OWNERS.android
+++ b/OWNERS.android
@@ -5,6 +5,7 @@
 [email protected]
 [email protected]
 [email protected]
+# [email protected]
 [email protected]
 # [email protected]
 [email protected]
diff --git a/en/compatibility/_toc-tests.yaml b/en/compatibility/_toc-tests.yaml
index 7460532..e631cc6 100644
--- a/en/compatibility/_toc-tests.yaml
+++ b/en/compatibility/_toc-tests.yaml
@@ -33,7 +33,7 @@
       path: /compatibility/cts/camera-its-box-assembly
     - title: Sensor Fusion Box Quick Start
       path: /compatibility/cts/sensor-fusion-quick-start
-    - title: Sensor Fusion Box Assembly
+    - title: Sensor Fusion Box Details
       path: /compatibility/cts/sensor-fusion-box-assembly
   - title: Secure Element
     path: /compatibility/cts/secure-element
diff --git a/en/compatibility/cts/camera-its-box-assembly.html b/en/compatibility/cts/camera-its-box-assembly.html
index 2b4e7b9..f6336f1 100644
--- a/en/compatibility/cts/camera-its-box-assembly.html
+++ b/en/compatibility/cts/camera-its-box-assembly.html
@@ -53,7 +53,7 @@
 
 <h3>Required tools</h3>
 <p>Before getting started, ensure you have
-<a href="camera_its_iab_tech_drawings.zip">downloaded the technical
+<a href="rfov_its_box_assembly_1_3.zip">downloaded the technical
 drawings</a> for the ITS-in-a box and have the following tools available:</p>
 <ul>
 <li>Phillips head screwdriver</li>
diff --git a/en/compatibility/cts/camera_its_iab_tech_drawings.zip b/en/compatibility/cts/camera_its_iab_tech_drawings.zip
deleted file mode 100644
index ddf25da..0000000
--- a/en/compatibility/cts/camera_its_iab_tech_drawings.zip
+++ /dev/null
Binary files differ
diff --git a/en/compatibility/cts/downloads.html b/en/compatibility/cts/downloads.html
index ebc2265..16798cd 100644
--- a/en/compatibility/cts/downloads.html
+++ b/en/compatibility/cts/downloads.html
@@ -31,102 +31,102 @@
 <h2 id="android-90">Android 9</h2>
 <p>Android 9 is the release of the development milestone code-named P.
 The source code for the following tests, including tests for instant apps, can be synced with the
-'android-cts-9.0_r2' tag in the open-source tree.</p>
+'android-cts-9.0_r3' tag in the open-source tree.</p>
 <ul>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-9.0_r2-linux_x86-arm.zip">Android
-9.0 R2 Compatibility Test Suite (CTS) - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-9.0_r3-linux_x86-arm.zip">Android
+9.0 R3 Compatibility Test Suite (CTS) - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-9.0_r2-linux_x86-x86.zip">Android
-9.0 R2 Compatibility Test Suite (CTS) - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-9.0_r3-linux_x86-x86.zip">Android
+9.0 R3 Compatibility Test Suite (CTS) - x86</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r2-linux_x86-arm.zip">Android
-9.0 R2 CTS Verifier - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r3-linux_x86-arm.zip">Android
+9.0 R3 CTS Verifier - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r2-linux_x86-x86.zip">Android
-9.0 R2 CTS Verifier - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r3-linux_x86-x86.zip">Android
+9.0 R3 CTS Verifier - x86</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r2-linux_x86-arm.zip">Android
-9.0 R2 CTS for Instant Apps - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r3-linux_x86-arm.zip">Android
+9.0 R3 CTS for Instant Apps - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r2-linux_x86-x86.zip">Android
-9.0 R2 CTS for Instant Apps - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r3-linux_x86-x86.zip">Android
+9.0 R3 CTS for Instant Apps - x86</a></li>
 </ul>
 
 <h2 id="android-81">Android 8.1</h2>
 <p>Android 8.1 is the release of the development milestone code-named Oreo-MR1.
 The source code for the following tests can be synced with the
-'android-cts-8.1_r9' tag in the open-source tree.</p>
+'android-cts-8.1_r10' tag in the open-source tree.</p>
 <ul>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-8.1_r9-linux_x86-arm.zip">Android
-8.1 R9 Compatibility Test Suite (CTS) - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-8.1_r10-linux_x86-arm.zip">Android
+8.1 R10 Compatibility Test Suite (CTS) - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-8.1_r9-linux_x86-x86.zip">Android
-8.1 R9 Compatibility Test Suite (CTS) - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-8.1_r10-linux_x86-x86.zip">Android
+8.1 R10 Compatibility Test Suite (CTS) - x86</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r9-linux_x86-arm.zip">Android
-8.1 R9 CTS Verifier - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r10-linux_x86-arm.zip">Android
+8.1 R10 CTS Verifier - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r9-linux_x86-x86.zip">Android
-8.1 R9 CTS Verifier - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r10-linux_x86-x86.zip">Android
+8.1 R10 CTS Verifier - x86</a></li>
 </ul>
 
 <h2 id="android-80">Android 8.0</h2>
 <p>Android 8.0 is the release of the development milestone code-named Oreo.
 The source code for the following tests can be synced with the
-'android-cts-8.0_r13' tag in the open-source tree.</p>
+'android-cts-8.0_r14' tag in the open-source tree.</p>
 <ul>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-8.0_r13-linux_x86-arm.zip">Android
-8.0 R13 Compatibility Test Suite (CTS) - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-8.0_r14-linux_x86-arm.zip">Android
+8.0 R14 Compatibility Test Suite (CTS) - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-8.0_r13-linux_x86-x86.zip">Android
-8.0 R13 Compatibility Test Suite (CTS) - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-8.0_r14-linux_x86-x86.zip">Android
+8.0 R14 Compatibility Test Suite (CTS) - x86</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r13-linux_x86-arm.zip">Android
-8.0 R13 CTS Verifier - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r14-linux_x86-arm.zip">Android
+8.0 R14 CTS Verifier - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r13-linux_x86-x86.zip">Android
-8.0 R13 CTS Verifier - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r14-linux_x86-x86.zip">Android
+8.0 R14 CTS Verifier - x86</a></li>
 </ul>
 
 <h2 id="android-71">Android 7.1</h2>
 <p>Android 7.1 is the release of the development milestone code-named Nougat-MR1.
 The source code for the following tests can be synced with the
-'android-cts-7.1_r21' tag in the open-source tree.</p>
+'android-cts-7.1_r22' tag in the open-source tree.</p>
 <ul>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-7.1_r21-linux_x86-arm.zip">Android
-7.1 R21 Compatibility Test Suite (CTS) - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-7.1_r22-linux_x86-arm.zip">Android
+7.1 R22 Compatibility Test Suite (CTS) - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-7.1_r21-linux_x86-x86.zip">Android
-7.1 R21 Compatibility Test Suite (CTS) - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-7.1_r22-linux_x86-x86.zip">Android
+7.1 R22 Compatibility Test Suite (CTS) - x86</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r21-linux_x86-arm.zip">Android
-7.1 R21 CTS Verifier - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r22-linux_x86-arm.zip">Android
+7.1 R22 CTS Verifier - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r21-linux_x86-x86.zip">Android
-7.1 R21 CTS Verifier - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r22-linux_x86-x86.zip">Android
+7.1 R22 CTS Verifier - x86</a></li>
 </ul>
 
 <h2 id="android-70">Android 7.0</h2>
 <p>Android 7.0 is the release of the development milestone code-named Nougat.
 The source code for the following tests can be synced with the
-'android-cts-7.0_r25' tag in the open-source tree.</p>
+'android-cts-7.0_r26' tag in the open-source tree.</p>
 <ul>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-7.0_r25-linux_x86-arm.zip">Android
-7.0 R25 Compatibility Test Suite (CTS) - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-7.0_r26-linux_x86-arm.zip">Android
+7.0 R26 Compatibility Test Suite (CTS) - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-7.0_r25-linux_x86-x86.zip">Android
-7.0 R25 Compatibility Test Suite (CTS) - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-7.0_r26-linux_x86-x86.zip">Android
+7.0 R26 Compatibility Test Suite (CTS) - x86</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r25-linux_x86-arm.zip">Android
-7.0 R25 CTS Verifier - ARM</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r26-linux_x86-arm.zip">Android
+7.0 R26 CTS Verifier - ARM</a></li>
 <li><a
-href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r25-linux_x86-x86.zip">Android
-7.0 R25 CTS Verifier - x86</a></li>
+href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r26-linux_x86-x86.zip">Android
+7.0 R26 CTS Verifier - x86</a></li>
 </ul>
 
 <h2 id="android-60">Android 6.0</h2>
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_abs_pieces.png b/en/compatibility/cts/images/sensor_fusion_assembly_abs_pieces.png
index f5687a0..168a48e 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_abs_pieces.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_abs_pieces.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_assembled_fixture.png b/en/compatibility/cts/images/sensor_fusion_assembly_assembled_fixture.png
index bec5fc0..4200aa7 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_assembled_fixture.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_assembled_fixture.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_checkerboard.png b/en/compatibility/cts/images/sensor_fusion_assembly_checkerboard.png
index b08e378..b1aac4a 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_checkerboard.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_checkerboard.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_clamp.png b/en/compatibility/cts/images/sensor_fusion_assembly_clamp.png
index bfb213f..90c1fe0 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_clamp.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_clamp.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_clamp_attachment_drawing.png b/en/compatibility/cts/images/sensor_fusion_assembly_clamp_attachment_drawing.png
new file mode 100644
index 0000000..d09373b
--- /dev/null
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_clamp_attachment_drawing.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_exterior_bolts.png b/en/compatibility/cts/images/sensor_fusion_assembly_exterior_bolts.png
index 4564e86..8f85ebe 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_exterior_bolts.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_exterior_bolts.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_handle_pieces.png b/en/compatibility/cts/images/sensor_fusion_assembly_handle_pieces.png
index c6a877a..e23d5fb 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_handle_pieces.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_handle_pieces.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_interior_wall_lights.png b/en/compatibility/cts/images/sensor_fusion_assembly_interior_wall_lights.png
index b1f6d8e..d73c638 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_interior_wall_lights.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_interior_wall_lights.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_light_strips_diffusers.png b/en/compatibility/cts/images/sensor_fusion_assembly_light_strips_diffusers.png
index 24ff8bf..d5c011b 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_light_strips_diffusers.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_light_strips_diffusers.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes.png b/en/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes.png
new file mode 100644
index 0000000..cf88fac
--- /dev/null
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_phone_mount_servo.png b/en/compatibility/cts/images/sensor_fusion_assembly_phone_mount_servo.png
new file mode 100644
index 0000000..416d47c
--- /dev/null
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_phone_mount_servo.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_screws.png b/en/compatibility/cts/images/sensor_fusion_assembly_screws.png
new file mode 100644
index 0000000..4728979
--- /dev/null
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_screws.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_servo_servo_plate.png b/en/compatibility/cts/images/sensor_fusion_assembly_servo_servo_plate.png
index 277dbc1..2b35215 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_servo_servo_plate.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_servo_servo_plate.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_servo_shaft.png b/en/compatibility/cts/images/sensor_fusion_assembly_servo_shaft.png
index 7bca41f..327d961 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_servo_shaft.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_servo_shaft.png
Binary files differ
diff --git a/en/compatibility/cts/images/sensor_fusion_assembly_strips_taped_back.png b/en/compatibility/cts/images/sensor_fusion_assembly_strips_taped_back.png
index 04ba3f1..0941469 100644
--- a/en/compatibility/cts/images/sensor_fusion_assembly_strips_taped_back.png
+++ b/en/compatibility/cts/images/sensor_fusion_assembly_strips_taped_back.png
Binary files differ
diff --git a/en/compatibility/cts/rfov_its_box_assembly_1_3.zip b/en/compatibility/cts/rfov_its_box_assembly_1_3.zip
new file mode 100644
index 0000000..3888460
--- /dev/null
+++ b/en/compatibility/cts/rfov_its_box_assembly_1_3.zip
Binary files differ
diff --git a/en/compatibility/cts/sensor-fusion-box-assembly.md b/en/compatibility/cts/sensor-fusion-box-assembly.md
index c104f46..ba236e5 100644
--- a/en/compatibility/cts/sensor-fusion-box-assembly.md
+++ b/en/compatibility/cts/sensor-fusion-box-assembly.md
@@ -14,9 +14,9 @@
     limitations under the License.
 -->
 
-# Sensor Fusion Box Assembly
+# Sensor Fusion Box Details
 
-This page provides step-by-step instructions for assembling a Sensor Fusion
+This page provides information on how to purchase or assemble a Sensor Fusion
 Box. The Sensor Fusion Box is used in the CameraITS sensor_fusion test and
 multi-camera sync test. It provides a consistent test environment for measuring
 timestamp accuracy of camera and other sensors for Android phones. It consists
@@ -33,190 +33,190 @@
 * *Acu Spec, Inc.*  
   990 Richard Ave, Ste 103, Santa Clara, CA 95050  
   [email protected]  
-* *MYWAY, Inc*  
+* *MYWAY DESIGN*  
   4F., No. 163, Fu Ying Rd., New Taipei City, Taiwan  
-  [email protected]
+  [email protected]  
+  http://www.myway.tw/
 
 ## Building a Sensor Fusion Box
 
 This section includes step-by-step instructions for assembling a Sensor Fusion
-Box from laser-cut plastic components (shown in Figure 1):
+Box from laser-cut acrylonitrile butadiene styrene (ABS) components (shown in
+Figure 1):
 
-<img src="/compatibility/cts/images/sensor_fusion_assembly_box_cad_drawing.png" width="700" alt="CAD drawing of Sensor Fusion Box components">  
-**Figure 1.** CAD drawing of Sensor Fusion Box components
+<img src="/compatibility/cts/images/sensor_fusion_assembly_box_cad_drawing.png" width="700" alt="CAD drawing of Sensor Fusion Box components" class="screenshot">  
+**Figure 1.** Mechanical drawing of Sensor Fusion Box components
 
 ### Required tools
 
 Before starting, ensure you have downloaded the technical drawings for the
 Sensor Fusion Box (included in the
-[Sensor Fusion Box zip file](/compatibility/cts/sensor_fusion_1.4.zip)) and
+[Sensor Fusion Box zip file](/compatibility/cts/sensor_fusion_1.5.zip)) and
 have the following tools available:
 
 * Phillips head screwdriver
+* Hex keys
 * Power drill set
 * Exacto knife
 * Tape
 
 ### Step 1: Apply vinyl stickers
 
-After creating the plastic components with a laser cutter, you can apply vinyl
-stickers to the plastic box components:
+After creating the ABS components with a laser
+cutter, apply vinyl stickers to the plastic box to get the proper color control
+on the interior of the test box:
 
-1. Apply vinyl on the smooth side of the ABS (acrylonitrile butadiene styrene)
-   as shown in **Figure 2**. For helpful tips on applying vinyl, refer to
+1. Apply vinyl on the smooth side of the ABS
+   as shown in Figure 2. For helpful tips on applying vinyl, refer to
    [wikiHow](https://www.wikihow.com/Install-a-Vinyl-Graphic){: .external}.
-1. Cut out the necessary holes on the vinyl.
+1. Cut out the necessary holes on the vinyl with the exacto knife.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_abs_pieces.png" width="350" alt="BS pieces">  
     **Figure 2.** ABS pieces with vinyl applied on the smooth side (interior of
     the box)
 
-### Step 2: Attach servo
+### Step 2: Prepare phone mount and attach servo mount
 
-To attach the servo:
+To prepare the phone mount to attach to the servo:
 
-1. Tap three holes on the phone fixture with ¼" - 20, and make countersink
-   holes on the back of the phone fixture:
-    <table class="columns">
-      <tr>
-        <td><img src="/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes1.png" width="250" alt="Phone fixture tap holes"></td>
-        <td><img src="/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes2.png" width="250" alt="Phone fixture countersink holes"></td>
-      </tr>
-    </table>
-    **Figure 3.** Phone fixture with tap and countersink holes shown
+1. Tap 16 holes on the phone fixture with ¼" - 20 and make countersink
+   holes on the back of the phone fixture.
 
-1. With the large shaft that came with the servo, drill pilot holes with #43
-   drill bit (2.26 mm) into the last holes from each side so 4-40 screws could
-   grab onto them:
+    <img src="/compatibility/cts/images/sensor_fusion_assembly_phone_fixture_holes.png" width="350" alt="Phone fixture holes">  
+    **Figure 3.** Phone fixture with tap and countersink holes
+
+1. With the large shaft that came with the servo, drill pilot holes with a #43
+   drill bit (2.26 mm) into the last holes from each side so 4-40 screws can be
+   inserted through the holes.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_shaft.png" width="350" alt="Servo shaft">  
     **Figure 4.** Servo shaft with pilot holes at each end
 
-1. Apply the flat-head 4-40 screws on the front of the phone fixture and
-   tighten the shaft:
+1. Insert and tighten the flat-head 4-40 screws as shown in figure 5 on the
+   front of the phone fixture and tighten the shaft as shown in figure 6.
 
-    <img src="/compatibility/cts/images/sensor_fusion_assembly_shaft_screws.png" width="350" alt="Shaft and screws">  
-    **Figure 5.** Phone fixture front with shaft and screws shown
+    <img src="/compatibility/cts/images/sensor_fusion_assembly_screws.png" width="350" alt="Shaft and screws">  
+    **Figure 5.** Flat-head 4-40 screws
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_shaft.png" width="350" alt="Shaft">  
     **Figure 6.** Shaft on the back of fixture, tightened by screws applied
     from the front
 
-### Step 3: Attach clamp & rails
+### Step 3: Attach phone clamps
 
-To attach the clamp and rails:
+To attach the phone clamps:
 
-1. Apply nylon thumb screws, rubber adhesive, and wire to the aluminum clamp:
+1. Apply nylon thumb screws, rubber adhesive, and wire spring to the aluminum
+   clamp.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_clamp.png" width="350" alt="Clamp with rubber adhesive">  
-    **Figure 7.** Clamp with rubber adhesive, thumb screws and wire
+    **Figure 7.** Clamp with rubber adhesive, thumb screws and wire spring
 
 1. Screw the phone clamps' thumb screws into the tapped holes of the phone
-   fixture.
+   fixture as shown in figure 8. You can adjust the location of the phone mounts
+   depending on the size of the phones as shown in figure 9.
 
-    * CAD Drawing:
+    * Mechanical drawing:
 
-        <img src="/compatibility/cts/images/sensor_fusion_assembly_clamp_attachment_cad_drawing.png" width="450" alt="CAD drawing of clamp attachment">  
-        **Figure 8.** CAD drawing of clamp attachment to phone fixture
+        <img src="/compatibility/cts/images/sensor_fusion_assembly_clamp_attachment_drawing.png" width="600" alt="CAD drawing of clamp attachment" class="screenshot">  
+        **Figure 8.** Mechanical drawing of clamp attachment to phone fixture
 
-    * Actual clamp attachment to phone fixture:
+    * Phone mounts attachment to phone fixture:
 
         <img src="/compatibility/cts/images/sensor_fusion_assembly_assembled_fixture.png" width="350" alt="Assembled phone fixture">  
         **Figure 9.** Assembled phone fixture
 
-1. Fix rails on top and bottom of box towards the front. The figure below shows
-   6-32 screws on pre-tapped holes, but you can use self-tapping screws instead
-   if desired.
+### Step 4: Assemble sliding door rail
 
-    <img src="/compatibility/cts/images/sensor_fusion_assembly_fixed_rail.png" width="350" alt="Fixed rail">  
-    **Figure 10.** Fixed rail on top and bottom of box
+1. Fix sliding panel rails on the top and bottom of the box towards the front.
+   Figure 10 shows 6-32 screws on pre-tapped holes. Alternatively, you can use
+   self-tapping screws.
 
-### Step 4: Attach lighting
+    <img src="/compatibility/cts/images/sensor_fusion_assembly_fixed_rail.png" width="450" alt="Fixed rail">  
+    **Figure 10.** Fixed sliding panel rail on top and bottom of box
+
+### Step 5: Attach lighting
 
 To attach the light brackets and diffuser:
 
-1. Stack two handle pieces and connect using 6-32 screws (or use self-tapping
-   screws):
+1. Stack two handle pieces on top of each other and assemble them using 6-32
+   screws (or use self-tapping screws).
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_handle_pieces.png" width="450" alt="Handle pieces and assembly">  
     **Figure 11.** Sensor fusion box handle pieces and assembly
 
-1. Prepare four 4-40 screws and nuts to fix the mounting bracket from the
-   lighting kit to the wall of the box:
+1. Prepare four 4-40 screws, nuts, and acorn nuts to fix the mounting bracket
+   from the lighting kit to the wall of the box.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_interior_wall_screws.png" width="350" alt="Screws and bracket on interior wall">  
-    **Figure 12.** Screws and light bracket on the interior wall of the box  
+    **Figure 12.** 4-40 screws and light bracket on the interior wall of the box  
     <img src="/compatibility/cts/images/sensor_fusion_assembly_exterior_bolts.png" width="350" alt="Exterior with bolts applied">  
-    **Figure 13.** Bolts applied to the screws from the exterior of the box
+    **Figure 13.** Bolts and acorn bolts applied to the screws from the exterior
+    of the box
 
-1. Snap the lights into the brackets (can be a tight fit):
-
-    <img src="/compatibility/cts/images/sensor_fusion_assembly_interior_wall_lights.png" width="450" alt="Lights on interior wall">  
-    **Figure 14.** Lights fixed to the interior wall with brackets
-
-1. Cut the light diffuser to an appropriate size to wrap the light strips:
+1. Cut the light diffuser to an appropriate size to wrap the light strips.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_light_strips_diffusers.png" width="350" alt="Light strips and diffusers">  
-    **Figure 15.** Light strips and light diffusers
+    **Figure 14.** Light strips and light diffusers
 
-1. Wrap the light diffuser around the strip and tape it at the back:
+1. Wrap the light diffuser around the strip and tape it at the back.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_strips_taped_back.png" width="350" alt="Strips and diffusers taped from back">  
-    **Figure 16.** Light strips and light diffusers taped from the back
+    **Figure 15.** Light strips and light diffusers taped from the back
 
-### Step 5: Attach phone fixture to servo plate
+1. Snap the lights into the brackets (can be a tight fit).
+
+    <img src="/compatibility/cts/images/sensor_fusion_assembly_interior_wall_lights.png" width="450" alt="Lights on interior wall">  
+    **Figure 16.** Lights not mounted in brackets (left). Lights mounted in brackets (right).
+
+### Step 6: Attach phone fixture to servo plate
 
 To attach the phone fixture to the servo plate:
 
-1.  Prepare four 6-32 screws and servo plate to fix the servo onto the wall.
-    The screws go from inside and fix themselves onto the servo plate that is
-    on the exterior of the wall.
+1.  Prepare four 6-32 screws and a servo plate to fix the servo onto the wall.
+    Fix the servo onto the interior wall and insert the screws from the inside
+    into the servo plate on the exterior wall.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_servo_plate.png" width="450" alt="Servo and servo plate">  
     **Figure 17.** Servo and servo plate held in place with 6-32 screws
 
 1.  Secure phone fixture onto the servo with nylocks (pushing the center of the
-    shaft into the servo's rotation center):
+    shaft into the servo's rotation center).
 
-    <img src="/compatibility/cts/images/sensor_fusion_assembly_phone_fixture.png" width="450" alt="Phone fixture on servo">  
-    **Figure 18.** Phone fixture on servo
+    <img src="/compatibility/cts/images/sensor_fusion_assembly_phone_mount_servo.png" width="450" alt="Phone fixture on servo">  
+    **Figure 18.** Phone mount fixed on servo shaft with nylocks
 
-1.  Screw the phone fixture onto the servo with its servo screw:
+1.  Screw the phone fixture onto the servo with its servo screw.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_screw.png" width="350" alt="Phone fixture on servo with screw">  
     **Figure 19.** Securing phone fixture onto servo with servo screw
 
-### Step 6: Final assembly
+### Step 7: Final assembly
 
-To complete final assembly of the Sensor Fusion Box:
+To complete assembly of the Sensor Fusion Box:
 
 1.  Secure servo control box on the left of the servo with 4-40 screws from the
-    outside and fastened from the inside with nuts:
+    outside and fasten from the inside with nuts.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_servo_on_wall.png" width="450" alt="Servo control box on wall">  
     **Figure 20.** Secure servo control box onto the wall
 
 1. Tape the box together, then screw the parts together (you might need to
-   pre-drill some holes in some parts).
+   pre-drill holes in some parts).
 
-    * CAD drawing:
-
-        <img src="/compatibility/cts/images/sensor_fusion_assembly_complete_box_drawing.png" width="450" alt="Complete box CAD drawing">  
-        **Figure 21.** CAD drawing of complete Sensor Box
-
-    * Actual Sensor Fusion Box:
+    * Assembled Sensor Fusion Box:
 
         <img src="/compatibility/cts/images/sensor_fusion_assembly_taped_box.png" width="450" alt="Taped box">  
-        **Figure 22.** Taped box with motor assembly and servo control box and
+        **Figure 21.** Taped box with motor assembly and servo control box and
         screw detail
 
 1. Print out a colored copy of the checkerboard (included in the [Sensor Fusion
-   Box zip file](/compatibility/cts/sensor_fusion_1.4.zip)) on A3 (or 11 x 17
-   inch paper), and tape it on the opposite wall of the phone fixture.
+   Box zip file](/compatibility/cts/sensor_fusion_1.5.zip)) on A3 (or 11 x 17
+   inch) paper, and tape it on the opposite wall of the phone fixture.
 
-  Make sure the red dot in the center of the checkerboard is directly facing
-  the camera when placed on the fixture, as shown below:
+   Make sure the red dot in the center of the checkerboard is directly facing
+   the camera when placed on the fixture, as shown below.
 
     <img src="/compatibility/cts/images/sensor_fusion_assembly_checkerboard.png" width="350" alt="Checkerboard">  
-    **Figure 23.** Checkerboard printed and taped to the opposite wall of phone
+    **Figure 22.** Checkerboard printed and taped to the opposite wall of phone
     fixture
diff --git a/en/compatibility/cts/sensor-fusion-quick-start.html b/en/compatibility/cts/sensor-fusion-quick-start.html
index e189d10..6ade551 100644
--- a/en/compatibility/cts/sensor-fusion-quick-start.html
+++ b/en/compatibility/cts/sensor-fusion-quick-start.html
@@ -109,7 +109,7 @@
             <p> The upside-down thumb screw provides back support while the
               other screw tightens the grip by turning right. For more help,
               refer to the video on loading the phone (included in the 
-              <a href="/compatibility/cts/sensor_fusion_1.4.zip">Sensor
+              <a href="/compatibility/cts/sensor_fusion_1.5.zip">Sensor
               Fusion Box zip file</a>). </p>
           </li>
           <li>Use a zip tie to hold the phone USB cord to the fixture plate and
@@ -193,7 +193,7 @@
   </ol>
   <p>
     For more help, refer to the video of the sensor fusion box running (included
-    in the <a href=/compatibility/cts/sensor_fusion_1.4.zip>Sensor Fusion Box
+    in the <a href=/compatibility/cts/sensor_fusion_1.5.zip>Sensor Fusion Box
     zip file</a>).
   </p>
 </body>
diff --git a/en/compatibility/cts/sensor_fusion_1.4.zip b/en/compatibility/cts/sensor_fusion_1.5.zip
similarity index 83%
rename from en/compatibility/cts/sensor_fusion_1.4.zip
rename to en/compatibility/cts/sensor_fusion_1.5.zip
index ef14055..a35275b 100644
--- a/en/compatibility/cts/sensor_fusion_1.4.zip
+++ b/en/compatibility/cts/sensor_fusion_1.5.zip
Binary files differ
diff --git a/en/compatibility/cts/setup.html b/en/compatibility/cts/setup.html
index 6efc82d..7961778 100644
--- a/en/compatibility/cts/setup.html
+++ b/en/compatibility/cts/setup.html
@@ -171,18 +171,32 @@
 this property, as shown in the following example: </p>
 
 <pre class="devsite-click-to-copy">
-#ro.product.first_api_level indicates the first api level, device has been commercially launched on.
+#ro.product.first_api_level indicates the first api level that the device has
+been commercially launched on.
 PRODUCT_PROPERTY_OVERRIDES +=\
 ro.product.first_api_level=21
 </pre>
 
-<aside class="note">
-  <b>Note:</b> The property <code>ro.product.first_api_level</code> should be unset (removed)
-  for the first build of a product, and set to the correct API level value for all subsequent
-  builds. This way the property can correctly identify a new product, and we have lost no
-  information about the first API level of the product. If the flag is unset, Android will assign
-  <code>Build.VERSION.SDK_INT</code> to <code>ro.product.first_api_level</code>.
-</aside>
+<h4 id="android-9-higher">First API level for Android 9 and higher</h4>
+
+  <p>
+    For devices launched with Android 9 or higher, set the property
+    <code>ro.product.first_api_level</code> to a valid value found on
+    <a href="/setup/start/build-numbers">Codenames, Tags, and Build Numbers</a>.
+  </p>
+
+<h4 id="android-8x-lower">First API level for Android 8.x and lower</h4>
+
+  <p>
+    For devices launched on Android 8.x or lower, unset (remove) the property
+    <code>ro.product.first_api_level</code> for the first build of the
+    product. For all subsequent builds, set
+    <code>ro.product.first_api_level</code> to the correct API level value.
+    This allows the property to correctly identify a new product and preserves
+    information about the first API level of the product. If the flag is
+    unset, Android assigns <code>Build.VERSION.SDK_INT</code> to
+    <code>ro.product.first_api_level</code>.
+  </p>
 
 <h3 id=cts-shim-apps>CTS Shim apps</h3>
 
diff --git a/en/devices/_toc-connectivity.yaml b/en/devices/_toc-connectivity.yaml
index aebb3dd..75374a7 100644
--- a/en/devices/_toc-connectivity.yaml
+++ b/en/devices/_toc-connectivity.yaml
@@ -77,5 +77,5 @@
     path: /devices/tech/connect/wifi-aware
   - title: Wi-Fi Round Trip Time (RTT)
     path: /devices/tech/connect/wifi-rtt
-  - title: Testing and Debugging
+  - title: Testing, Debugging, and Tuning Wi-Fi
     path: /devices/tech/connect/wifi-debug
diff --git a/en/devices/accessories/index.html b/en/devices/accessories/index.html
index 787309c..a8173ed 100644
--- a/en/devices/accessories/index.html
+++ b/en/devices/accessories/index.html
@@ -29,7 +29,7 @@
 <div class="layout-content-row">
 
   <div class="layout-content-col span-6">
-        <h4 id="audio-accessories">Audio accessories</h4>
+        <h2 id="audio-accessories">Audio accessories</h2>
         <p>Android supports local on-device audio and remote off-device audio
         over a wired 3.5 mm headset jack, USB connection, or Bluetooth.
         Manufacturers should see the <a
@@ -37,16 +37,16 @@
         specifications</a>, while users can learn how to <a
         href="https://support.google.com/nexus/answer/6127700">record and play
         back audio using USB host mode</a>.</p>
-        <p><a href="audio.html">&raquo; Audio Accessories</a></p>
+        <p><a href="/devices/accessories/audio">&raquo; Audio Accessories</a></p>
   </div>
 
   <div class="layout-content-col span-6">
-        <h4 id="custom-accessories">Custom accessories</h4>
+        <h2 id="custom-accessories">Custom accessories</h2>
         <p>What do you want to connect to your Android device? Alarm clock?
         Keyboard? Thermostat? Robot? Learn how to connect existing equipment or
         your own unique hardware to Android using the Android Open Accessory
         (AOA) protocol.</p>
-        <p><a href="custom.html">&raquo; Custom Accessories</a></p>
+        <p><a href="/devices/accessories/custom">&raquo; Custom Accessories</a></p>
  </div>
 
 </div>
diff --git a/en/devices/architecture/vndk/linker-namespace.html b/en/devices/architecture/vndk/linker-namespace.html
index 040d844..b0d8251 100644
--- a/en/devices/architecture/vndk/linker-namespace.html
+++ b/en/devices/architecture/vndk/linker-namespace.html
@@ -45,7 +45,7 @@
 hiding their implementation details within their linker namespaces.</p>
 
 <p>For example, <code>/system/lib[64]/libcutils.so</code> and
-<code>/system/lib[64]/vndk-sp-${VER}/libutils.so</code> are two shared
+<code>/system/lib[64]/vndk-sp-${VER}/libcutils.so</code> are two shared
 libraries. These two libraries may have different symbols. They will be loaded
 into different linker namespaces so that framework modules can depend on
 <code>/system/lib[64]/libcutils.so</code> and SP-HAL shared libraries can
diff --git a/en/devices/audio/latency/loopback.html b/en/devices/audio/latency/loopback.html
index bef46c6..af1ca6d 100644
--- a/en/devices/audio/latency/loopback.html
+++ b/en/devices/audio/latency/loopback.html
@@ -31,7 +31,7 @@
 that we call the "Dr. Rick O'Rang audio loopback dongle."
 The Chrome hardware team designed this circuit and plug for functional testing;
 however it has many other uses too.  The Android audio team uses it to measure
-<a href="latency_measure.html#measuringRoundTrip">round-trip audio latency</a>,
+<a href="measure.html#measuringRoundTrip">round-trip audio latency</a>,
 via the Larsen effect (feedback loop).
 </p>
 
diff --git a/en/devices/audio/latency/measure.html b/en/devices/audio/latency/measure.html
index 44cba6c..a9612ed 100644
--- a/en/devices/audio/latency/measure.html
+++ b/en/devices/audio/latency/measure.html
@@ -102,6 +102,17 @@
   by itself because of the nature of the test, but it can be useful for
   calibrating other tests, and for establishing an upper bound.</p>
 
+  <p>This method does not break down the
+  component times, which is important when the output latency
+  and input latency are independent. So this method is not recommended for measuring
+  precise output latency or input latency values in isolation, but might be useful
+  for establishing rough estimates.</p>
+
+  <p>
+  Output latency to on-device speaker can be significantly larger than
+  output latency to headset connector. This is due to speaker correction and protection.
+  </p>
+
 <p>To conduct this test:</p>
 <ol>
   <li>Run an app that captures audio from the microphone and immediately plays the
@@ -112,25 +123,25 @@
   <li>Measure the time between feedback pulses to get the sum of the output latency, input latency, and application overhead.</li>
 </ol>
 
-  <p>This method does not break down the
-  component times, which is important when the output latency
-  and input latency are independent. So this method is not recommended for measuring
-  precise output latency or input latency values in isolation, but might be useful
-  for establishing rough estimates.</p>
+<p>Here are some resources for getting an app for the Larsen test:</p>
 
-  <p>
-  Output latency to on-device speaker can be significantly larger than
-  output latency to headset connector.  This is due to speaker correction and protection.
-  </p>
-
-<p>
-We have published an example implementation at
+<ul>
+<li>
+The Dr. Rick O'Rang loopback app is an Android app for audio feedback testing. You can
+<a href="https://play.google.com/store/apps/details?id=org.drrickorang.loopback"> download the app from Google Play</a>
+or  <a href="https://www.google.com/url?q=https://github.com/gkasten/drrickorang/tree/master/LoopbackApp&sa=D&usg=AFQjCNFT8D7QTkhLdkZSNyvhmoU5yt_zvg">
+get the source code from GitHub</a>.
+</li>
+<li>
+We also published an example implementation at
 <a href="https://android.googlesource.com/platform/frameworks/wilhelm/+/master/tests/examples/slesTestFeedback.cpp">slesTestFeedback.cpp</a>.
 This is a command-line app and is built using the platform build environment;
 however it should be straightforward to adopt the code for other environments.
 You will also need the <a href="avoiding_pi.html#nonBlockingAlgorithms">non-blocking</a> FIFO code
 located in the <code>audio_utils</code> library.
-</p>
+</li>
+</ul>
+
 
 <h3 id="loopback">Audio Loopback Dongle</h3>
 
diff --git a/en/devices/audio/warmup.html b/en/devices/audio/warmup.html
index 7c37cd6..a12841f 100644
--- a/en/devices/audio/warmup.html
+++ b/en/devices/audio/warmup.html
@@ -32,7 +32,7 @@
 <p>This document describes how to measure audio warmup time and possible ways to decrease
 warmup time.</p>
 
-<h2 id="measuringOutput">Measuring Output Warmup</h2>
+<h2 id="measuringOutput">Measuring output warmup</h2>
 
 <p>
   AudioFlinger's FastMixer thread automatically measures output warmup
@@ -86,7 +86,7 @@
 </ol>
 
 
-<h2 id="measuringInput">Measuring Input Warmup</h2>
+<h2 id="measuringInput">Measuring input warmup</h2>
 
 <p>
   There are currently no tools provided for measuring audio input warmup.
@@ -96,7 +96,7 @@
 </p>
 
 
-<h2 id="reducing">Reducing Warmup Time</h2>
+<h2 id="reducing">Reducing warmup time</h2>
 
 <p>
   Warmup time can usually be reduced by a combination of:
diff --git a/en/devices/graphics/arch-vulkan.html b/en/devices/graphics/arch-vulkan.html
index 75baa7a..47c553c 100644
--- a/en/devices/graphics/arch-vulkan.html
+++ b/en/devices/graphics/arch-vulkan.html
@@ -113,7 +113,7 @@
 Contains Android's Vulkan loader, as well as some Vulkan-related tools useful to
 platform developers.</li>
 
-<li><a href="https://android.googlesource.com/platform/frameworks/native/+/master/vulkan/doc/implementors_guide/implementors_guide.html">Vulkan
+<li><a href="/devices/graphics/implement-vulkan.html">Vulkan
 Implementor's Guide</a>. Intended for GPU IHVs writing Vulkan drivers for
 Android and OEMs integrating those drivers for specific devices. It describes
 how a Vulkan driver interacts with the system, how GPU-specific tools should be
diff --git a/en/devices/tech/admin/managed-profiles.html b/en/devices/tech/admin/managed-profiles.html
index 17df9a6..eddf536 100644
--- a/en/devices/tech/admin/managed-profiles.html
+++ b/en/devices/tech/admin/managed-profiles.html
@@ -197,7 +197,7 @@
   devices.
   </p>
 
-  <h3 id="ux-changes-app-try">UX changes for devices with an app try</h3>
+  <h3 id="ux-changes-app-tray">UX changes for devices with an app tray</h3>
 
     <p>
       The managed profile UX changes for Launcher 3 in Android
diff --git a/en/devices/tech/config/namespaces_libraries.html b/en/devices/tech/config/namespaces_libraries.html
index 5dae4b0..8670d00 100644
--- a/en/devices/tech/config/namespaces_libraries.html
+++ b/en/devices/tech/config/namespaces_libraries.html
@@ -66,7 +66,7 @@
     for libraries from silicon vendors</li>
   <li><code>/system/lib</code> (for 32-bit) and <code>/system/lib64</code> (for 64-bit)
     for libraries from device manufacturers</li>
-<ul>
+</ul>
 
 <p>The .txt files are:</p>
 <ul>
diff --git a/en/devices/tech/connect/esim-euicc-api.md b/en/devices/tech/connect/esim-euicc-api.md
index 87dd7c8..e5bafcb 100644
--- a/en/devices/tech/connect/esim-euicc-api.md
+++ b/en/devices/tech/connect/esim-euicc-api.md
@@ -86,7 +86,7 @@
 Gets the instance of `EuiccManager` through `Context#getSystemService`.
 
 ```
-EuiccManager mgr = context.getSystemService(Context.EUICC_SERVICE);
+EuiccManager mgr = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
 ```
 
 #### Check enabled (public)
@@ -245,5 +245,5 @@
 
 ### Constants
 
-To see a list of the the `public` constants in `EuiccManager`, see
+To see a list of the `public` constants in `EuiccManager`, see
 [Constants](https://developer.android.com/reference/android/telephony/euicc/EuiccManager#constants){: .external}.
diff --git a/en/devices/tech/connect/esim-overview.md b/en/devices/tech/connect/esim-overview.md
index 8c24b16..0aa91fc 100644
--- a/en/devices/tech/connect/esim-overview.md
+++ b/en/devices/tech/connect/esim-overview.md
@@ -86,7 +86,7 @@
 `EuiccManager` through `Context#getSystemService`:
 
 ```
-EuiccManager mgr = context.getSystemService(Context.EUICC_SERVICE);
+EuiccManager mgr = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
 ```
 
 You should check whether eSIM is supported on the device before performing any
@@ -419,7 +419,7 @@
 `Context#getSystemService`:
 
 ```
-EuiccCardManager cardMgr = context.getSystemService(Context.EUICC_CARD_SERVICE);
+EuiccCardManager cardMgr = (EuiccCardManager) context.getSystemService(Context.EUICC_CARD_SERVICE);
 ```
 
 Then, to get all the profiles on the eUICC:
diff --git a/en/devices/tech/connect/wifi-debug.md b/en/devices/tech/connect/wifi-debug.md
index eff986d..c778fdc 100644
--- a/en/devices/tech/connect/wifi-debug.md
+++ b/en/devices/tech/connect/wifi-debug.md
@@ -19,9 +19,9 @@
   limitations under the License.
 -->
 
-# Testing and Debugging
+# Testing, Debugging, and Tuning Wi-Fi
 
-This page describes how to test and debug the Wi-Fi implementation using the
+This page describes how to test, debug, and tune the Wi-Fi implementation using the
 tools provided in AOSP.
 
 ## Testing
@@ -72,7 +72,7 @@
 device-under-test to be associated with an Access Point at the start of the test
 run.
 
-## Enhanced logging options
+## Enhanced logging options for debugging
 
 Android {{ androidPVersionNumber }} improves Wi-Fi logging to make it easier to
 debug Wi-Fi issues. In Android {{ androidPVersionNumber }}, driver/firmware ring
@@ -110,3 +110,56 @@
 1.  Inspect the bugreport zip file and verify that
     `/lshal-debug/[email protected]__IWifi_default.txt` holds the
     archived firmware logs.
+
+## Configuration tuning
+
+To control the signal strength at which a device associates to or
+disassociates from a network, the Wi-Fi framework uses the *entry* and *exit*
+RSSI thresholds.
+
+The *entry* and *exit* thresholds are stored as overloadable configuration
+parameters with the following names (where the `bad` parameter refers to the
+*exit* RSSI threshold):
+
+*   `config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz`
+*   `config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz`
+*   `config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz`
+*   `config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz`
+
+The parameters are stored in
+`<root>/frameworks/base/core/res/res/values/config.xml` and may be overloaded
+using the overlay file
+`<root>/device/<dev_dir>/overlay/frameworks/base/core/res/res/values/config.xml`.
+
+Note: The `bad` configuration parameters (for 2.4GHz and 5GHz bands) were
+introduced pre-Android 8.1. The `entry` configuration parameters were introduced
+in Android 8.1 with the default values equal to the corresponding bad
+parameters. These defaults result in pre-Android 8.1 behavior where no
+hysteresis is used in network selection. To take advantage of the hysteresis
+functionality introduced in Android 8.1, set the `entry` parameters to 3dB or
+more above the `bad` parameters using the overlay file specified above.
+
+You can test new thresholds by configuring the device using adb commands.
+(Alternatively, you can create a build with new overlays but using adb commands
+provide a faster testing turnaround.)
+
+```
+% adb shell settings put global wifi_score_params \
+                             [rssi2|rssi5]=<bad>:<entry>:<low>:<good>
+```
+
+For example, the following command configures new threshold parameters (the
+values used in this sample command are the configured defaults in the AOSP
+codebase):
+
+```
+% adb shell settings put global wifi_score_params \
+                       rssi2=-85:-85:-73:-60,rssi5=-82:-82:-70:-57
+```
+
+To restore the built-in parameter values (i.e. remove the overrides) use the
+following adb command:
+
+```
+% adb shell settings delete global wifi_score_params
+```
diff --git a/en/devices/tech/debug/intsan.html b/en/devices/tech/debug/intsan.html
index 98bc653..55b53ae 100644
--- a/en/devices/tech/debug/intsan.html
+++ b/en/devices/tech/debug/intsan.html
@@ -33,9 +33,10 @@
 UBSan to cover more components</a> and improved build system support for it.
 </p>
 <p>
-If a signed or unsigned integer overflows, overflow sanitization is designed to
-safely abort process execution by instrumenting arithmetic instructions which
-may overflow. These sanitizers can mitigate an entire class of memory corruption
+This is designed to add checks around arithmetic
+operations&hairsp;/&hairsp;instructions—which might
+overflow—to safely abort a process if an overflow does happen.
+These sanitizers can mitigate an entire class of memory corruption
 and information disclosure vulnerabilities where the root cause is an integer
 overflow, such as the original Stagefright vulnerability.
 </p>
@@ -200,8 +201,8 @@
 href="https://clang.llvm.org/docs/LanguageExtensions.html#checked-arithmetic-builtins">__builtin_*_overflow</a>
 functions (<a
 href="https://android-review.googlesource.com/c/platform/frameworks/av/+/588160">example</a>)
-<li>Disabling sanitization the function via an attribute (<a
-href="https://android-review.googlesource.com/c/platform/frameworks/base/+/531720">example</a>)
+<li>Disabling sanitization in the function by specifying the <code>no_sanitize</code> attribute
+(<a href="https://android-review.googlesource.com/c/platform/frameworks/base/+/531720">example</a>)
 <li>Disabling sanitization of a function or source file via a blacklist file (<a
 href="https://android-review.googlesource.com/c/platform/frameworks/base/+/574222">example</a>)</li></ul>
 <p>
@@ -212,13 +213,14 @@
 </p>
 <p>
 Common patterns that may result in benign overflows include:
-</p><ul>
-<li>Implicit casts where an unsigned overflow occurs before being cast to a
-signed type (<a
+</p>
+<ul>
+<li><a href="http://www.cplusplus.com/doc/tutorial/typecasting/" class="external">Implicit
+casts</a> where an unsigned overflow occurs before being cast to a signed type (<a
 href="https://android-review.googlesource.com/c/platform/frameworks/av/+/574011">example</a>)
 <li>Linked list deletions which decrements the loop index on deletion (<a
 href="https://android-review.googlesource.com/c/platform/frameworks/base/+/588158">example</a>)
-<li>Assigning an unsigned type to -1 as shorthand for the max value (<a
+<li>Assigning an unsigned type to -1 instead of specifying the actual max value (<a
 href="https://android-review.googlesource.com/c/platform/frameworks/native/+/574088/1/services/surfaceflinger/Layer.cpp">example</a>)
 <li>Loops which decrement an unsigned integer in the condition (<a
 href="https://android-review.googlesource.com/c/platform/frameworks/native/+/573763/1/services/inputflinger/InputReader.cpp">example</a>,
diff --git a/en/devices/tech/power/platform_mgmt.html b/en/devices/tech/power/platform_mgmt.html
index 97ddd57..eb95be1 100644
--- a/en/devices/tech/power/platform_mgmt.html
+++ b/en/devices/tech/power/platform_mgmt.html
@@ -201,7 +201,7 @@
 optimizing applications</a>.
 <p><strong>OR</strong></p>
 <li>Are exempted from Doze and App Standby. For details, see
-<a href="#exempt-apps">Exempting applications</a>.</li>
+<a href="/devices/tech/power/mgmt#exempt-apps">Exempting applications</a>.</li>
 </ul>
 </li>
 <li>Confirm the necessary services are exempted from Doze.</li>
diff --git a/en/license.html b/en/license.html
index d9eaad8..b6142ed 100644
--- a/en/license.html
+++ b/en/license.html
@@ -5,6 +5,12 @@
     <meta name="book_path" value="/_book.yaml" />
   </head>
   <body>
+    <style>
+      devsite-content-footer {
+        display: none;
+      }
+    </style>
+
   <!--
       Copyright 2017 The Android Open Source Project
 
diff --git a/en/security/bulletin/2018.html b/en/security/bulletin/2018.html
index b172b8e..19d6791 100644
--- a/en/security/bulletin/2018.html
+++ b/en/security/bulletin/2018.html
@@ -38,15 +38,13 @@
  </tr>
  <tr>
     <td><a href="/security/bulletin/2018-10-01.html">October 2018</a></td>
-    <td>Coming soon
-     <!--
+    <td>
      <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
-     -->
     </td>
     <td>October 1, 2018</td>
     <td>2018-10-01<br>
diff --git a/en/security/bulletin/index.html b/en/security/bulletin/index.html
index 512e1e8..954084d 100644
--- a/en/security/bulletin/index.html
+++ b/en/security/bulletin/index.html
@@ -70,15 +70,13 @@
  </tr>
  <tr>
     <td><a href="/security/bulletin/2018-10-01.html">October 2018</a></td>
-    <td>Coming soon
-     <!--
+    <td>
      <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
      <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
-     -->
     </td>
     <td>October 1, 2018</td>
     <td>2018-10-01<br>
diff --git a/en/security/bulletin/pixel/2018.html b/en/security/bulletin/pixel/2018.html
index a9df99c..c8975ba 100644
--- a/en/security/bulletin/pixel/2018.html
+++ b/en/security/bulletin/pixel/2018.html
@@ -40,15 +40,13 @@
  </tr>
  <tr>
     <td><a href="/security/bulletin/pixel/2018-10-01.html">October 2018</a></td>
-    <td>Coming soon
-     <!--
+    <td>
      <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
-     -->
     </td>
     <td>October 1, 2018</td>
     <td>2018-10-05</td>
diff --git a/en/security/bulletin/pixel/index.html b/en/security/bulletin/pixel/index.html
index bc54cfb..0d348f7 100644
--- a/en/security/bulletin/pixel/index.html
+++ b/en/security/bulletin/pixel/index.html
@@ -60,15 +60,13 @@
  </tr>
  <tr>
     <td><a href="/security/bulletin/pixel/2018-10-01.html">October 2018</a></td>
-    <td>Coming soon
-     <!--
+    <td>
      <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
      <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
-     -->
     </td>
     <td>October 1, 2018</td>
     <td>2018-10-05</td>
diff --git a/en/security/images/enterprise-whitepaper-cover.png b/en/security/images/enterprise-whitepaper-cover.png
new file mode 100644
index 0000000..c00ddb7
--- /dev/null
+++ b/en/security/images/enterprise-whitepaper-cover.png
Binary files differ
diff --git a/en/security/images/gpp.png b/en/security/images/gpp.png
new file mode 100644
index 0000000..2918273
--- /dev/null
+++ b/en/security/images/gpp.png
Binary files differ
diff --git a/en/security/overview/acknowledgements.html b/en/security/overview/acknowledgements.html
index 90a9adb..cb24c0b 100644
--- a/en/security/overview/acknowledgements.html
+++ b/en/security/overview/acknowledgements.html
@@ -766,6 +766,10 @@
    <td>CVE-2017-13269</td>
   </tr>
   <tr>
+   <td>Sang Shin Jung of Deja vu Security</td>
+   <td>CVE-2017-13270</td>
+  </tr>
+  <tr>
    <td>Tamir Zahavi-Brunner
    (<a href="https://twitter.com/tamir_zb">&#64;tamir_zb</a>) of Zimperium zLabs Team</td>
    <td>CVE-2017-13253</td>
diff --git a/en/security/overview/reports.html b/en/security/overview/reports.html
index dfb5f7a..b66ff7d 100644
--- a/en/security/overview/reports.html
+++ b/en/security/overview/reports.html
@@ -20,11 +20,36 @@
       See the License for the specific language governing permissions and
       limitations under the License.
   -->
-<p>Sometimes the Android Security team publishes reports or whitepapers. Here are some of the most recent.</p>
+<p>Sometimes the Android Security team publishes reports or white papers.
+Here are some of the most recent.</p>
+
+<h2 id="enterprise-2018">Android Enterprise Security White Paper</h2>
+
+
+<p>This security white paper outlines the approach Android takes to mobile
+security for enterprise customers, and details the strengths of the Android
+platform, the range of management APIs available to enforce control, and the
+role of Google Play Protect in detecting threats.</p>
+<p>
+<a href="/security/reports/Google_Android_Enterprise_Security_Whitepaper_2018.pdf"
+   class="button"
+   class="gc-analytics-event"
+   data-category="AOSP"
+   data-label="Enterprise"
+   data-action="download"
+   >Download this white paper</a></p>
+
+<a href="/security/reports/Google_Android_Enterprise_Security_Whitepaper_2018.pdf"
+   class="gc-analytics-event"
+   data-category="AOSP"
+   data-label="Enterprise"
+   ><img src="/security/images/enterprise-whitepaper-cover.png" class="screenshot"></a>
+
+
 <h2 id="yir-2017">Year in Review 2017</h2>
 
 
-<p>This covers everything that Google did for Android security in 2017.</p>
+<p>This report covers everything that Google did for Android security in 2017.</p>
 <p>
 <a href="/security/reports/Google_Android_Security_2017_Report_Final.pdf"
    class="button"
@@ -42,7 +67,7 @@
 
 <h2 id="yir-2016">Year in Review 2016</h2>
 
-<p>This covers everything that Google did for Android security in 2016.</p>
+<p>This report covers everything that Google did for Android security in 2016.</p>
 <p><a href="/security/reports/Google_Android_Security_2016_Report_Final.pdf"
    class="button"
    class="gc-analytics-event"
@@ -60,7 +85,7 @@
 
 <h2 id="yir-2015">Year in Review 2015</h2>
 
-<p>This covers everything that Google did for Android security in 2015.</p>
+<p>This report covers everything that Google did for Android security in 2015.</p>
 <p><a href="/security/reports/Google_Android_Security_2015_Report_Final.pdf"
    class="button"
    class="gc-analytics-event"
@@ -78,7 +103,7 @@
 
 <h2 id="yir-2014">Year in Review 2014</h2>
 
-<p>This covers everything that Google did for Android security in 2014.</p>
+<p>This report covers everything that Google did for Android security in 2014.</p>
 <p><a href="/security/reports/Google_Android_Security_2014_Report_Final.pdf"
    class="button"
    class="gc-analytics-event"
@@ -94,9 +119,28 @@
    ><img src="/security/images/yir-2014.png" class="screenshot"></a>
 
 
+<h2 id="keeping-harmful-apps-out-of-play">Keeping Harmful Apps out of Google
+  Play</h2>
+
+<p>This white paper covers some of the ways the Android Security Team reviews and
+detects apps that pose a potential security risk to users or their data.</p>
+<p><a href="/security/reports/Android_WhitePaper_Final_02092016.pdf"
+   class="button"
+   class="gc-analytics-event"
+   data-category="AOSP"
+   data-label="GPP"
+   data-action="download"
+   >Download this white paper</a></p>
+
+<a href="/security/reports/Android_WhitePaper_Final_02092016.pdf"
+   class="gc-analytics-event"
+   data-category="AOSP"
+   data-label="GPP"
+   ><img src="/security/images/gpp.png" class="screenshot"></a>
+
 <h2 id="PHA-classifications">Classifications for Potentially Harmful Applications</h2>
 
-<p>This covers the Android Security Team’s taxonomy for classifying apps that
+<p>This report covers the Android Security Team’s taxonomy for classifying apps that
 pose a potential security risk to users or their data.</p>
 <p><a href="/security/reports/Google_Android_Security_PHA_classifications.pdf"
    class="button"
diff --git a/en/setup/build/building.html b/en/setup/build/building.html
index b2446ee..4c4fa5b 100644
--- a/en/setup/build/building.html
+++ b/en/setup/build/building.html
@@ -24,7 +24,7 @@
 
 
 <p>The following instructions to build the Android source tree apply to all
-branches, except <code>master</code>. The basic sequence of build commands
+branches, including <code>master</code>. The basic sequence of build commands
 is as follows.</p>
 
 <h2 id="obtaining-proprietary-binaries">Obtain proprietary binaries</h2>
@@ -44,9 +44,11 @@
 AOSP release branches from <a
 href="https://developers.google.com/android/drivers" class="external">Google's
 drivers</a>. These binaries add access to additional hardware capabilities
-with non-open source code. When building the <code>master</code> branch for
-a device, the binaries are part of the Android source tree and will be in the
-<code>vendor/</code> hierarchy.</p>
+with non-open source code. To build the AOSP master branch, use the
+<a href="https://developers.google.com/android/blobs-preview" class="external">
+Binaries Preview</a> instead. When building the master branch for a device, use
+the binaries for the <a href="/setup/start/build-numbers.html">most recent
+numbered release</a> or with the most recent date.</p>
 
 <h3 id="extracting-proprietary-binaries">Extract proprietary binaries</h3>
 
diff --git a/en/setup/build/requirements.html b/en/setup/build/requirements.html
index 36df7fe..9fd8581 100644
--- a/en/setup/build/requirements.html
+++ b/en/setup/build/requirements.html
@@ -37,8 +37,11 @@
     higher versions, including the master branch. You can compile older versions
     on 32-bit systems.
   </li>
-  <li>At least 100GB of free disk space to checkout the code and an extra 150GB
+  <li>At least 250GB of free disk space to checkout the code and an extra 150GB
     to build it. If you conduct multiple builds, you will need even more space.
+    <aside class="note"><strong>Note:</strong> If you are checking out a mirror
+      you will need more space as full Android Open Source Project (AOSP) mirrors
+      contain all Git repositories that have ever been used.</aside>
   </li>
   <li>If you are running Linux in a virtual machine, you need at
     least 16GB of RAM/swap.
diff --git a/en/setup/build/running.html b/en/setup/build/running.html
index d293e64..4650d2c 100644
--- a/en/setup/build/running.html
+++ b/en/setup/build/running.html
@@ -48,6 +48,26 @@
 </thead>
 <tbody>
 <tr>
+<td>Pixel 3 XL</td>
+<td>crosshatch</td>
+<td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em>.</td>
+</tr>
+<tr>
+<td>Pixel 3</td>
+<td>blueline</td>
+<td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em>.</td>
+</tr>
+<tr>
+<td>Pixel 2 XL</td>
+<td>taimen</td>
+<td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em>.</td>
+</tr>
+<tr>
+<td>Pixel 2</td>
+<td>walleye</td>
+<td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em>.</td>
+</tr>
+<tr>
 <td>Pixel XL</td>
 <td>marlin</td>
 <td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em>.</td>
@@ -298,6 +318,26 @@
 </thead>
 <tbody>
 <tr>
+<td>Pixel 3 XL</td>
+<td>crosshatch</td>
+<td>aosp_crosshatch-userdebug</td>
+</tr>
+<tr>
+<td>Pixel 3</td>
+<td>blueline</td>
+<td>aosp_blueline-userdebug</td>
+</tr>
+<tr>
+<td>Pixel 2 XL</td>
+<td>taimen</td>
+<td>aosp_taimen-userdebug</td>
+</tr>
+<tr>
+<td>Pixel 2</td>
+<td>walleye</td>
+<td>aosp_walleye-userdebug</td>
+</tr>
+<tr>
 <td>Pixel XL</td>
 <td>marlin</td>
 <td>aosp_marlin-userdebug</td>
diff --git a/en/setup/contribute/report-bugs.html b/en/setup/contribute/report-bugs.html
index 2b31206..2a2a3ea 100644
--- a/en/setup/contribute/report-bugs.html
+++ b/en/setup/contribute/report-bugs.html
@@ -221,6 +221,12 @@
    <th>File a bug</th>
   </tr>
   <tr>
+   <td><a href="https://issuetracker.google.com/issues?q=componentid:192795">ADB</a></td>
+   <td></td>
+   <td><a href="https://issuetracker.google.com/issues/new?component=192795">
+   <i class="material-icons">bug_report</i></a></td>
+  </tr>
+  <tr>
    <td><a href="https://issuetracker.google.com/issues?q=componentid:192633%2B">Android
 Studio</a></td>
    <td><a href="https://developer.android.com/studio/report-bugs.html#studio-bugs">Android
diff --git a/en/setup/images/Android_greenrobot.ai b/en/setup/images/Android_greenrobot.ai
new file mode 100644
index 0000000..eb5d903
--- /dev/null
+++ b/en/setup/images/Android_greenrobot.ai
Binary files differ
diff --git a/en/setup/images/Android_greenrobot.eps b/en/setup/images/Android_greenrobot.eps
new file mode 100644
index 0000000..36eca26
--- /dev/null
+++ b/en/setup/images/Android_greenrobot.eps
Binary files differ
diff --git a/en/setup/images/Android_greenrobot.png b/en/setup/images/Android_greenrobot.png
new file mode 100644
index 0000000..0cb9b00
--- /dev/null
+++ b/en/setup/images/Android_greenrobot.png
Binary files differ
diff --git a/en/setup/images/Android_greenrobot.svg b/en/setup/images/Android_greenrobot.svg
new file mode 100644
index 0000000..8c71a30
--- /dev/null
+++ b/en/setup/images/Android_greenrobot.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 293.2 344.3" style="enable-background:new 0 0 293.2 344.3;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#79C257;}
+</style>
+<title>Android_greenrobot</title>
+<path class="st0" d="M286.4,135c0-11.2-9.2-20.4-20.4-20.4s-20.4,9.2-20.4,20.4v85c0,11.2,9.2,20.4,20.4,20.4s20.4-9.2,20.4-20.4
+	V135z"/>
+<path class="st0" d="M48.4,135c0-11.2-9.2-20.4-20.4-20.4S7.6,123.8,7.6,135v85c0,11.2,9.2,20.4,20.4,20.4s20.4-9.2,20.4-20.4V135z"
+	/>
+<g>
+	<path class="st0" d="M191.6,37.8l14.4-26c0.8-1.4,0.3-3.2-1.1-3.9c-0.4-0.2-0.9-0.4-1.4-0.4c-1,0-2,0.5-2.5,1.5l-14.6,26.3
+		C174.5,30,161.1,27,147,27c-14.1,0-27.5,3-39.4,8.3L93.1,9c-0.8-1.4-2.5-1.9-3.9-1.1c-1.4,0.8-1.9,2.5-1.1,3.9l14.4,26
+		C74.7,52.2,56,79.5,56,110.9h182C238,79.5,219.3,52.2,191.6,37.8z M105,77.6c-4.2,0-7.6-3.4-7.6-7.6s3.4-7.6,7.6-7.6
+		s7.6,3.4,7.6,7.6S109.2,77.6,105,77.6z M189,77.6c-4.2,0-7.6-3.4-7.6-7.6s3.4-7.6,7.6-7.6s7.6,3.4,7.6,7.6S193.2,77.6,189,77.6z"/>
+	<path class="st0" d="M56,118.1V250c0,12.2,9.8,22,22,22h14.6v45c0,11.2,9.2,20.4,20.4,20.4s20.4-9.2,20.4-20.4v-45h27.2v45
+		c0,11.2,9.2,20.4,20.4,20.4s20.4-9.2,20.4-20.4v-45H216c12.2,0,22-9.8,22-22V118.1H56z"/>
+</g>
+</svg>
diff --git a/en/setup/start/brands.html b/en/setup/start/brands.html
new file mode 100644
index 0000000..f6d9945
--- /dev/null
+++ b/en/setup/start/brands.html
@@ -0,0 +1,164 @@
+<html devsite>
+  <head>
+    <title>Brand Guidelines</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>
+  The "Android" name, the Android logo, the "Google Play" brand, and other
+  Google trademarks are property of Google LLC and
+  not part of the assets available through the Android Open Source Project.
+</p>
+
+<p>If you are interested in using these brands to indicate their association
+with your device, adhere to the guidelines on this page. These guidelines
+correspond to and complement the
+<a href="https://developer.android.com/distribute/tools/promote/brand.html">Brand
+Guidelines for Android App Developers</a> and
+<a href="https://www.google.com/permissions/">Google Brand Permissions</a>.</p>
+
+<h2 id="brand-android">Android</h2>
+
+<p>
+  The use of "Android" on a hardware device and packaging or marketing
+  materials related to that hardware device is restricted to
+  <a href="/compatibility/index.html">Android compatible</a> devices only.
+</p>
+
+<ul>
+  <li>Android&trade; should have a trademark symbol the first time it appears in
+  a creative.</li>
+  <li>"Android" should always be capitalized and is never plural or possessive.
+  </li>
+  <li>“Android” should never be used in the name of your product or as the
+  primary or dominant mark on your packaging or device.</li>
+  <li>"Android” should be used only as a term to refer to the operating system
+  (OS) of your device. If you are unsure whether your use meets our guidelines,
+  follow this simple test: If you can replace "Android" with "the Android
+  platform" and the text still makes sense, then you may use this term.
+  <ul>
+    <li><span style="color:red">Incorrect</span>: "Android XBrand Phone"</li>
+    <li><span style="color:green">Correct</span>: "XBrand phone on Android"</li>
+  </ul>
+  </li>
+  <li>You may use “with Android” in plain black text with your logo. If used
+  with your logo, "with Android" should be no larger than 90% of your logo’s
+  size. The first or most prominent instance of this use should be followed by
+  a &trade; symbol.</li>
+  <li>Android may be used <em>only as a descriptor</em>, as long as it is
+  followed by a proper generic term. It cannot be framed as the product name or
+  brand of your device.
+  <ul>
+    <li><span style="color:red">Incorrect</span>: "Android XBrand Phone"</li>
+    <li><span style="color:green">Correct</span>: "Android mobile device"</li>
+  </ul>
+  </li>
+  <li>
+    Google reserves the right to require Android and/or Google branding on
+    compatible devices and any related materials, which includes but is not
+    limited to packaging, boot-up sequence, and marketing materials.
+  </li>
+  <li>
+  <p><strong>Any use of the Android name must include this attribution in your
+  communication</strong>:</p>
+  <blockquote><em>Android is a trademark of Google LLC.</em></blockquote></p>
+  </li>
+</ul>
+
+<h4>Acceptable examples</h4>
+<img src="../images/JB-TM-example.png" alt="Jelly Bean trademark example" />
+<img src="../images/8100-TM-example.png" alt="8100 series trademark example" />
+
+<h4>Unacceptable example</h4>
+<img src="../images/XBrand-TM-example.jpg" alt="XBrand trademark example" />
+
+<h3 id="logo-android">Android logo</h3>
+<p>Unless expressly authorized by Google through written agreement, the Android
+logo and custom typeface may not be used (with or without the Android robot).</p>
+<img alt="No Logo" src="../images/android_logo_new_crossed_out.png">
+<img alt="No Logo" src="https://developer.android.com/images/brand/android_logo_no.png">
+
+<h3 id="robot-android">Android robot</h3>
+
+<div class="wrap">
+<div class="col-4">
+  <img alt="android-robot" style="float:left;margin-right:10px" width="100" src="/setup/images/Android_greenrobot.png">
+  <p style="padding-top:20px">
+  <a href="/setup/images/Android_greenrobot.ai">.ai</a><br />
+  <a href="/setup/images/Android_greenrobot.eps">.eps</a><br />
+  <a href="/setup/images/Android_greenrobot.png">.png</a><br />
+  <a href="/setup/images/Android_greenrobot.svg">.svg</a>
+  </p>
+</div>
+<div class="col-8">
+<p style="padding-top:20px">The Android robot can be used, reproduced, and
+modified freely in marketing communications with proper attribution. For
+details, refer to
+<a href="https://developer.android.com/distribute/tools/promote/brand.html">App
+Developers Brand Guidelines</a> and the
+<a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons
+license</a>.</p>
+</div>
+</div>
+
+<div class="wrap" style="padding-top:20px">
+<div class="col-4" style="align:center">
+<img alt="no-peace-robot" style="width:30%;height:30%" src="../images/No_PeaceBot_200.jpg">
+</div>
+<div class="col-8">
+<p style="padding-top:20px">The Android Peace Robot or any variation of the
+Android Peace Robot (such as the Android robot with a peace sign) may not be
+used in partner marketing.</p>
+</div>
+</div>
+
+<div style="clear:both"></div>
+<h2 id="brand-google_play">Google Play</h2>
+
+<p>Use of the “Google Play” name and the Google Play Store icon on the
+packaging of the hardware, marketing materials of the hardware, or the hardware
+itself is allowed only on devices
+<a href="/setup/start/faqs.html#if-my-device-is-compatible-does-it-automatically-have-access-to-google-play-and-branding">licensed
+to access Google Play</a>. For a list of devices licensed to use Google Play,
+refer to
+<a href="https://support.google.com/googleplay/answer/1727131">Supported
+devices</a>.</p>
+
+
+<h2>Other brands</h2>
+<p><a href="https://www.android.com/auto/">Android Auto</a>,
+<a href="https://www.android.com/tv/">Android TV</a>, and
+<a href="https://wearos.google.com">Wear OS by Google</a> are brands owned by
+Google. These brands require Google proprietary software that runs on top of
+Android and is available only through a license with Google. For information on
+how to request a license, see
+<a href="/compatibility/contact-us.html">Contact Us</a>.
+
+<h2 id="Questions">Questions</h2>
+
+<p>For additional brand usage information, contact the Android Partner
+Marketing team by submitting the <a
+href="https://support.google.com/contact/partner_brand_approval">Partner
+Brand Inquiry Form</a>.</p>
+
+  </body>
+</html>
diff --git a/en/setup/start/build-numbers.html b/en/setup/start/build-numbers.html
index 7f1408e..30ed868 100644
--- a/en/setup/start/build-numbers.html
+++ b/en/setup/start/build-numbers.html
@@ -240,6 +240,18 @@
   </thead>
   <tbody>
     <tr>
+      <td>PD1A.180720.031</td>
+      <td>android-9.0.0_r12</td>
+      <td>Pie</td>
+      <td>Pixel 3 XL, Pixel 3</td>
+    </tr>
+    <tr>
+      <td>PD1A.180720.030</td>
+      <td>android-9.0.0_r11</td>
+      <td>Pie</td>
+      <td>Pixel 3 XL, Pixel 3</td>
+    </tr>
+    <tr>
       <td>PPR2.181005.003</td>
       <td>android-9.0.0_r10</td>
       <td>Pie</td>
diff --git a/en/whitelist/_book.yaml b/en/whitelist/_book.yaml
new file mode 100644
index 0000000..5c59d5d
--- /dev/null
+++ b/en/whitelist/_book.yaml
@@ -0,0 +1,129 @@
+upper_tabs:
+- name: Set up
+  lower_tabs:
+    other:
+    - name: Overview
+      contents:
+      - title: Overview
+        path: /setup/
+    - name: Start
+      contents:
+      - include: /setup/_toc-start.yaml
+    - name: Download
+      contents:
+      - include: /setup/_toc-download.yaml
+    - name: Build
+      contents:
+      - include: /setup/_toc-build.yaml
+    - name: Create
+      contents:
+      - include: /setup/_toc-create.yaml
+    - name: Contribute
+      contents:
+      - include: /setup/_toc-contribute.yaml
+    - name: Contact
+      contents:
+      - include: /setup/_toc-contact.yaml
+- name: Design
+  lower_tabs:
+    other:
+    - name: Overview
+      contents:
+      - include: /compatibility/_toc-purpose.yaml
+    - name: Architecture
+      contents:
+      - include: /compatibility/_toc-architecture.yaml
+    - name: Compatibility
+      contents:
+      - include: /compatibility/_toc-compatibility.yaml
+    - name: Display
+      contents:
+      - include: /compatibility/_toc-display.yaml
+    - name: Settings
+      contents:
+      - include: /compatibility/_toc-settings.yaml
+    - name: Tests
+      contents:
+      - include: /compatibility/_toc-tests.yaml
+- name: Secure
+  lower_tabs:
+    other:
+    - name: Overview
+      contents:
+      - include: /security/_toc-overview.yaml
+    - name: Bulletins
+      contents:
+      - include: /security/_toc-bulletins.yaml
+    - name: Features
+      contents:
+      - include: /security/_toc-features.yaml
+    - name: Dynamic Analysis
+      contents:
+      - include: /security/_toc-fuzz.yaml
+- name: Develop
+  lower_tabs:
+    other:
+    - name: Audio
+      contents:
+      - include: /devices/_toc-audio.yaml
+    - name: Camera
+      contents:
+      - include: /devices/_toc-camera.yaml
+    - name: Connectivity
+      contents:
+      - include: /devices/_toc-connectivity.yaml
+    - name: Graphics
+      contents:
+      - include: /devices/_toc-graphics.yaml
+    - name: Interaction
+      contents:
+      - include: /devices/_toc-interaction.yaml
+    - name: Media
+      contents:
+      - include: /devices/_toc-media.yaml
+    - name: Storage
+      contents:
+      - include: /devices/_toc-storage.yaml
+- name: Configure
+  lower_tabs:
+    other:
+    - name: ART
+      contents:
+      - include: /devices/_toc-runtime.yaml
+    - name: Data
+      contents:
+      - include: /devices/_toc-data.yaml
+    - name: Enterprise
+      contents:
+      - include: /devices/_toc-enterprise.yaml
+    - name: Performance
+      contents:
+      - include: /devices/_toc-performance.yaml
+    - name: Permissions
+      contents:
+      - include: /devices/_toc-permissions.yaml
+    - name: Power
+      contents:
+      - include: /devices/_toc-power.yaml
+    - name: Updates
+      contents:
+      - include: /devices/_toc-update.yaml
+- name: Reference
+  lower_tabs:
+    other:
+    - name: Overview
+      contents:
+      - title: Overview
+        path: /reference/
+    - name: HIDL
+      contents:
+      - include: /reference/hidl/_toc.yaml
+    - name: HAL
+      contents:
+      - include: /reference/hal/_toc.yaml
+    - name: Trade Federation
+      contents:
+      - include: /reference/tradefed/_toc.yaml
+- name: Whitelist
+  whitelist: /whitelist/
+  path: /whitelist/
diff --git a/en/whitelist/_whitelist.yaml b/en/whitelist/_whitelist.yaml
new file mode 100644
index 0000000..25dc087
--- /dev/null
+++ b/en/whitelist/_whitelist.yaml
@@ -0,0 +1,4 @@
+whitelist:
+- group: [email protected]
+- group: [email protected]
+- email: [email protected]
diff --git a/en/whitelist/index.md b/en/whitelist/index.md
new file mode 100644
index 0000000..6c2dd50
--- /dev/null
+++ b/en/whitelist/index.md
@@ -0,0 +1,6 @@
+Project: /_project.yaml
+Book: /whitelist/_book.yaml
+
+# Test page
+
+I am a test page.
diff --git a/ja/security/bulletin/2018-07-01.html b/ja/security/bulletin/2018-07-01.html
index d2f88ab..28f51a8 100644
--- a/ja/security/bulletin/2018-07-01.html
+++ b/ja/security/bulletin/2018-07-01.html
@@ -30,7 +30,7 @@
 下記の問題のうち最も重大度の高いものは、メディア フレームワークに重大なセキュリティの脆弱性があるため、リモートの攻撃者が特別に細工したファイルを使用して、特権プロセス内で任意のコードを実行するおそれがあることです。<a href="/security/overview/updates-resources.html#severity">重大度の評価</a>は、攻撃対象の端末でその脆弱性が悪用された場合の影響に基づくもので、プラットフォームやサービスでのリスク軽減策が開発目的または不正な回避により無効となっていることを前提としています。
 </p>
 <p>
-この新たに報告された問題によって実際のユーザー端末が不正使用された報告はありません。<a href="#mitigations">Android セキュリティ プラットフォームの保護</a>や Google Play プロテクトについて詳しくは、<a href="/security/enhancements/index.html">Android と Google サービスでのリスク軽減策</a>をご覧ください。こうした保護により、Android プラットフォームのセキュリティが改善されます。
+この新たに報告された問題によって実際のユーザー端末が不正使用された報告はありません。Android プラットフォームのセキュリティの向上に役立つ <a href="/security/enhancements/index.html">Android セキュリティ プラットフォームの保護</a>や Google Play プロテクトについて詳しくは、<a href="#mitigations">Android と Google サービスでのリスク軽減策</a>をご覧ください。
 </p>
 <p class="note">
 <strong>注:</strong> 最新の無線(OTA)アップデートと Google 端末のファームウェア イメージについての情報は、<a href="/security/bulletin/pixel/2018-07-01.html">2018 年 7 月の Pixel / Nexus のセキュリティに関する公開情報</a>でご覧いただけます。
@@ -38,7 +38,7 @@
 
 <h2 id="mitigations">Android と Google サービスでのリスク軽減策</h2>
 <p>
-ここでは、<a href="/security/enhancements/index.html">Android セキュリティ プラットフォーム</a>の保護と <a href="https://www.android.com/play-protect">Google Play プロテクト</a>のようなサービスの保護によるリスクの軽減について概説します。こうした機能は、Android でセキュリティの脆弱性が悪用される可能性を減らします。
+ここでは、<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 上の多くの問題について悪用が困難になります。Google では、すべてのユーザーに対し、できる限り最新バージョンの Android に更新することをおすすめしています。</li>
diff --git a/ja/security/bulletin/2018-08-01.html b/ja/security/bulletin/2018-08-01.html
index 5b0e756..2786776 100644
--- a/ja/security/bulletin/2018-08-01.html
+++ b/ja/security/bulletin/2018-08-01.html
@@ -26,10 +26,10 @@
 <p>
 Android パートナーには、情報公開の 1 か月前までにすべての問題が通知されます。Android オープンソース プロジェクト(AOSP)のレポジトリに、下記の問題に対するソースコードのパッチをリリースしています。また、この公開情報では、これらのパッチへのリンクに加え、AOSP 以外のパッチへのリンクも掲載しています。</p>
 <p>
-システムの最も重大な脆弱性により、リモートの攻撃者が特別に細工したファイルを使用して、特権プロセス内で任意のコードを実行するおそれがあります。<a href="/security/overview/updates-resources.html#severity">重大度の評価</a>は、攻撃対象の端末でその脆弱性が悪用された場合の影響に基づくもので、プラットフォームやサービスでのリスク軽減策が開発目的または不正な回避により無効となっていることを前提としています。
+下記の問題のうち最も重大度の高いものは、リモートの攻撃者が特別に細工したファイルを使用して、特権プロセス内で任意のコードを実行するおそれのある重大なセキュリティの脆弱性です。<a href="/security/overview/updates-resources.html#severity">重大度の評価</a>は、攻撃対象の端末でその脆弱性が悪用された場合の影響に基づくもので、プラットフォームやサービスでのリスク軽減策が開発目的または不正な回避により無効となっていることを前提としています。
 </p>
 <p>
-この新たに報告された問題によって実際のユーザー端末が不正使用された報告はありません。<a href="/security/enhancements/index.html">Android セキュリティ プラットフォームの保護</a>や Google Play プロテクトについて詳しくは、<a href="#mitigations">Android と Google サービスでのリスク軽減策</a>をご覧ください。こうした保護により、Android プラットフォームのセキュリティが改善されます。
+この新たに報告された問題によって実際のユーザー端末が不正使用された報告はありません。Android プラットフォームのセキュリティの向上に役立つ <a href="/security/enhancements/index.html">Android セキュリティ プラットフォームでの保護</a>や Google Play プロテクトについて詳しくは、<a href="#mitigations">Android と Google サービスでのリスク軽減策</a>をご覧ください。
 </p>
 <p class="note">
 <strong>注:</strong> 最新の無線(OTA)アップデートと Google 端末のファームウェア イメージについての情報は、<a href="/security/bulletin/pixel/2018-08-01.html">2018 年 8 月の Pixel / Nexus のセキュリティに関する公開情報</a>でご覧いただけます。
@@ -37,7 +37,7 @@
 
 <h2 id="mitigations">Android と Google サービスでのリスク軽減策</h2>
 <p>
-ここでは、<a href="/security/enhancements/index.html">Android セキュリティ プラットフォーム</a>の保護と <a href="https://www.android.com/play-protect">Google Play プロテクト</a>のようなサービスの保護によるリスクの軽減について概説します。こうした機能は、Android でセキュリティの脆弱性が悪用される可能性を減らします。
+ここでは、<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 上の多くの問題について悪用が困難になります。Google では、すべてのユーザーに対し、できる限り最新バージョンの Android に更新することをおすすめしています。</li>
@@ -245,7 +245,7 @@
 
 <h2 id="2018-08-05-details">セキュリティ パッチレベル 2018-08-05 の脆弱性の詳細</h2>
 <p>
-ここでは、パッチレベル 2018-08-05 に該当するセキュリティ脆弱性の各項目の詳細を説明します。影響を受けるコンポーネントごとに脆弱性を分類し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources.html#severity">重大度</a>、コンポーネント(該当する場合)、更新対象の AOSP バージョン(該当する場合)などの詳細を記載しています。該当する場合は、バグ ID の欄に、その問題に対処した一般公開されている変更(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に記載した番号に、追加の参照へのリンクを設定しています。</p>
+ここでは、パッチレベル 2018-08-05 に該当するセキュリティ脆弱性の各項目の詳細を説明します。影響を受けるコンポーネントごとに脆弱性を分類し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources.html#severity">重大度</a>、コンポーネント(該当する場合)、更新対象の AOSP バージョン(該当する場合)などの詳細を記載しています。該当する場合は、バグ ID の欄に、その問題に対処した一般公開されている変更(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に番号を併記して、追加の参照先へのリンクを設定しています。</p>
 
 <h3 id="kernel-components">カーネル コンポーネント</h3>
 <p>カーネル コンポーネントの最も重大な脆弱性により、悪意のあるローカルアプリによって特権プロセス内で任意のコードが実行されるおそれがあります。</p>
@@ -275,8 +275,7 @@
   <tr>
     <td>CVE-2018-9465</td>
     <td>A-69164715<br />
-        <a href="https://patchwork.kernel.org/patch/10058587/">アップストリーム
-カーネル</a></td>
+        <a href="https://patchwork.kernel.org/patch/10058587/">アップストリーム カーネル</a></td>
     <td>EoP</td>
     <td>高</td>
     <td>binder</td>
@@ -337,7 +336,7 @@
 </tbody></table>
 
 <h3 id="qualcomm-closed-source-components">Qualcomm クローズドソース コンポーネント</h3>
-<p>Qualcomm コンポーネントに影響する脆弱性は次のとおりです。詳細については、該当する Qualcomm AMSS のセキュリティに関する公開情報またはセキュリティ アラートをご覧ください。この一連の問題の重大度は Qualcomm から直接提供されたものです。</p>
+<p>Qualcomm コンポーネントに影響する脆弱性は次のとおりです。詳細については、該当する Qualcomm AMSS のセキュリティに関する公開情報やセキュリティ アラートをご覧ください。この一連の問題の重大度は Qualcomm から直接提供されたものです。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -610,7 +609,7 @@
 <strong>6. セキュリティの脆弱性が、この公開情報と端末やパートナーのセキュリティに関する公開情報(Pixel / Nexus のセキュリティに関する公開情報など)に分けられているのはなぜですか?</strong>
 </p>
 <p>
-Android 搭載端末の最新のセキュリティ パッチレベルを宣言するためには、このセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処が必要です。それ以外の、端末やパートナーのセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処は必要ありません。<a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>、<a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> などの Android 搭載端末やチップセットのメーカーには、自社の端末に関して他にも修正がある場合は、自社のセキュリティ関連のウェブサイトや <a href="/security/bulletin/pixel/" class="external">Pixel / Nexus</a> のセキュリティに関する公開情報にその情報を掲載することが推奨されています。
+Android 搭載端末の最新のセキュリティ パッチレベルを宣言するためには、このセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処が必要です。それ以外の、端末やパートナーのセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処は必要ありません。<a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>、<a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> などの Android 搭載端末やチップセットのメーカーは、自社の端末に関して他にも修正がある場合、その情報を自社のセキュリティ関連のウェブサイトや <a href="/security/bulletin/pixel/" class="external">Pixel / Nexus</a> のセキュリティに関する公開情報に掲載することが推奨されています。
 </p>
 
 <h2 id="versions">バージョン</h2>
diff --git a/ja/security/bulletin/2018-09-01.html b/ja/security/bulletin/2018-09-01.html
index 9192afc..2f925b3 100644
--- a/ja/security/bulletin/2018-09-01.html
+++ b/ja/security/bulletin/2018-09-01.html
@@ -75,7 +75,7 @@
    <td><a href="https://android.googlesource.com/platform/libcore/+/518e8d27de9f32eb86bc3090ee2759ea93b9fb93" class="external">A-110955991</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -100,21 +100,21 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/623b2b604c4ffcd48f137379d6934537510665bf" class="external">A-109824443</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9470</td>
    <td><a href="https://android.googlesource.com/platform/external/neven/+/86a561f79f97baa38e240f6296fe1192fa4a5c9c" class="external">A-78290481</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9471</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/eabaff1c7f02906e568997bdd7dc43006655387e" class="external">A-77599679</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -164,15 +164,14 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/586b9102f322731d604e6280143e16cb6f1c9f76" class="external">A-77600398</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9440</td>
-   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/8033f4a227e03f97a0f1d9975dc24bcb4ca61f74" class="external">A-77823362</a>
-[<a href="https://android.googlesource.com/platform/frameworks/av/+/2870acaa4c58cf59758a74b6390615a421f14268" class="external">2</a>]</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/8033f4a227e03f97a0f1d9975dc24bcb4ca61f74" class="external">A-77823362</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/2870acaa4c58cf59758a74b6390615a421f14268" class="external">2</a>]</td>
    <td>DoS</td>
    <td>中</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -197,21 +196,21 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/43cd528a444d0cc5bbf3beb22cd583289bcf7334" class="external">A-79266386</a></td>
    <td>EoP</td>
    <td>重大</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9478</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217522</a></td>
    <td>EoP</td>
    <td>重大</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9479</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217770</a></td>
    <td>EoP</td>
    <td>重大</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9456</td>
@@ -232,63 +231,63 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757168</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9481</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757435</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9482</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757986</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9483</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d3689fb0ddcdede16c13250a7a30ca76b113c9c1" class="external">A-110216173</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9484</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d5b44f6522c3294d6f5fd71bc6670f625f716460" class="external">A-79488381</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9485</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bdbabb2ca4ebb4dc5971d3d42cb12f8048e23a23" class="external">A-80261585</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9486</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bc6aef4f29387d07e0c638c9db810c6c1193f75b" class="external">A-80493272</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9487</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/cf6784bfbf713aaa54d8da77e9481b3f02784246" class="external">A-69873852</a></td>
    <td>DoS</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9488</td>
    <td><a href="https://android.googlesource.com/platform/system/sepolicy/+/d4e094e2b1a47c1fea1799d9fade19e953a7ca1b" class="external">A-110107376</a></td>
    <td>EoP</td>
    <td>中</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -313,14 +312,14 @@
    <td><a href="https://android.googlesource.com/platform/system/libhidl/+/93484b9b015d47c0f7e5f4449a214b2fed8bed4f" class="external">A-79376389</a></td>
    <td>RCE</td>
    <td>重大</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9427</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/29d991fac25b261a72ce73f96c9df594ea5b9242" class="external">A-77486542</a></td>
    <td>RCE</td>
    <td>重大</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -397,7 +396,7 @@
   </tr>
   <tr>
     <td>CVE-2018-11816</td>
-    <td>A-63527106 <br />
+    <td>A-63527106<br />
 QC-CR#2119840<a href="#asterisk">*</a></td>
     <td>N/A</td>
     <td>高</td>
@@ -429,7 +428,7 @@
   </tr>
   <tr>
     <td>CVE-2018-11898</td>
-    <td>A-111128799 <br />
+    <td>A-111128799<br />
 	<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=dc657f502adb3038784b7488d2f183ed31b6aac3">QC-CR#2233036</a></td>
     <td>N/A</td>
     <td>高</td>
@@ -437,7 +436,7 @@
   </tr>
   <tr>
     <td>CVE-2017-15825</td>
-    <td>A-68992460 <br />
+    <td>A-68992460<br />
 	<a href="https://source.codeaurora.org/quic/la/kernel/lk/commit/?id=252e22c9adb9b59c36e59e00d8b43013facec4d6">QC-CR#2096455</a></td>
     <td>N/A</td>
     <td>中</td>
@@ -445,7 +444,7 @@
   </tr>
   <tr>
     <td>CVE-2018-11270</td>
-    <td>A-109741697 <br />
+    <td>A-109741697<br />
 	<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=d475e1aba3f8be3b135199014549ff9d5c315e1d">QC-CR#2205728</a></td>
     <td>N/A</td>
     <td>中</td>
@@ -755,7 +754,7 @@
 <strong>6. セキュリティの脆弱性が、この公開情報と端末やパートナーのセキュリティに関する公開情報(Pixel / Nexus のセキュリティに関する公開情報など)に分けられているのはなぜですか?</strong>
 </p>
 <p>
-このセキュリティに関する公開情報に掲載されているセキュリティの脆弱性については、Android 搭載端末の最新のセキュリティ パッチレベルを公表するにあたって、対処が必須となります。それ以外の、端末やパートナーのセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処は、セキュリティ パッチレベルの公表には必要ありません。<a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>、<a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> などの Android 搭載端末やチップセットのメーカーは、自社の端末に関して他にも修正がある場合、その情報を自社のセキュリティ関連のウェブサイトや <a href="/security/bulletin/pixel/" class="external">Pixel / Nexus</a> のセキュリティに関する公開情報に掲載することが推奨されています。
+このセキュリティに関する公開情報に掲載されているセキュリティの脆弱性については、Android 搭載端末の最新のセキュリティ パッチレベルを公表するにあたって、対処が必須となります。それ以外の、端末やパートナーのセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処は、セキュリティ パッチレベルの公表には必要ありません。<a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>、<a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a>、LGE などの Android 搭載端末やチップセットのメーカーは、自社の端末に関して他にも修正がある場合、その情報を自社のセキュリティ関連のウェブサイトや <a href="/security/bulletin/pixel/" class="external">Pixel / Nexus</a> のセキュリティに関する公開情報に掲載することが推奨されています。
 </p>
 
 <h2 id="versions">バージョン</h2>
diff --git a/ja/security/bulletin/2018-10-01.html b/ja/security/bulletin/2018-10-01.html
new file mode 100644
index 0000000..241b6bf
--- /dev/null
+++ b/ja/security/bulletin/2018-10-01.html
@@ -0,0 +1,443 @@
+<html devsite><head>
+    <title>Android のセキュリティに関する公開情報 - 2018 年 10 月</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>2018 年 10 月 1 日公開 | 2018 年 10 月 1 日更新</em></p>
+
+<p>Android のセキュリティに関する公開情報には、Android 搭載端末に影響を与えるセキュリティの脆弱性の詳細を掲載しています。セキュリティ パッチレベル 2018-10-05 以降では、下記のすべての問題に対処しています。端末のセキュリティ パッチレベルを確認する方法については、<a href="https://support.google.com/pixelphone/answer/4457705" class="external">Android のバージョンを確認して更新する</a>をご覧ください。
+</p>
+<p>
+Android パートナーには、情報公開の 1 か月前までにすべての問題が通知されます。Android オープンソース プロジェクト(AOSP)リポジトリに、下記の問題に対するソースコードのパッチをリリースしています。AOSP 以外のパッチへのリンクも掲載しています。</p>
+<p>
+下記の問題のうち最も重要なのは、フレームワークの重大なセキュリティの脆弱性です。この脆弱性が原因となり、リモートの攻撃者が特別に細工したファイルを使って、特権プロセス内で任意のコードを実行できるようになるおそれがあります。<a href="/security/overview/updates-resources.html#severity">重大度の評価</a>は、攻撃対象の端末でその脆弱性が悪用された場合の影響に基づくもので、プラットフォームやサービスでのリスク軽減策が開発目的または不正な回避により無効となっていることを前提としています。
+</p>
+<p>
+この新たに報告された問題によって実際のユーザー端末が不正使用された報告はありません。Android プラットフォームのセキュリティの向上に役立つ <a href="/security/enhancements/">Android セキュリティ プラットフォームの保護</a>や Google Play プロテクトについて詳しくは、<a href="#mitigations">Android と Google サービスでのリスク軽減策</a>をご覧ください。
+</p>
+<p class="note">
+<strong>注:</strong> 最新の無線(OTA)アップデートと Google 端末のファームウェア イメージについての情報は、<a href="/security/bulletin/pixel/2018-10-01">2018 年 10 月の Pixel / Nexus のセキュリティに関する公開情報</a>でご覧いただけます。
+</p>
+
+<h2 id="mitigations">Android と Google サービスでのリスク軽減策</h2>
+<p>
+ここでは、<a href="/security/enhancements/">Android セキュリティ プラットフォーム</a>や <a href="https://www.android.com/play-protect" class="external">Google Play プロテクト</a>のようなサービスでの保護によってリスクを軽減する手段について概説します。こうした機能は、Android でセキュリティの脆弱性が悪用される可能性を減らすものです。
+</p>
+<ul>
+<li>Android 上の多くの問題の悪用は、Android プラットフォームの最新版で機能が強化されるほど困難になります。Google では、すべてのユーザーに対し、できる限り最新バージョンの Android に更新することをおすすめしています。</li>
+<li>Android セキュリティ チームは、<a href="https://www.android.com/play-protect" class="external">Google Play プロテクト</a>によって脆弱性の悪用を積極的に監視しており、<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">害を及ぼすおそれのあるアプリ</a>についてユーザーに警告しています。Google Play プロテクトは、<a href="http://www.android.com/gms" class="external">Google モバイル サービス</a>を搭載した端末でデフォルトで有効になっており、Google Play 以外からアプリをインストールするユーザーにとっては特に重要です。</li>
+</ul>
+<h2 id="2018-10-01-details">セキュリティ パッチレベル 2018-10-01 の脆弱性の詳細</h2>
+<p>
+ここでは、パッチレベル 2018-10-01 に該当するセキュリティ脆弱性の各項目の詳細を説明します。脆弱性は、影響を受けるコンポーネントごとに分類しています。問題の内容について説明し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources.html#severity">重大度</a>、更新対象の AOSP バージョン(該当する場合)を表にまとめています。該当する場合は、バグ ID の欄に、その問題の対処法として一般公開されている変更内容(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に記載した番号に、追加の参照へのリンクを設定しています。</p>
+
+<h3 id="framework">フレームワーク</h3>
+<p>システムの最も重大な脆弱性により、リモートの攻撃者が特別に細工したファイルを使用して、特権プロセス内で任意のコードを実行するおそれがあります。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参照</th>
+    <th>タイプ</th>
+    <th>重大度</th>
+    <th>更新対象の AOSP バージョン</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9490</td>
+   <td><a href="https://android.googlesource.com/platform/external/chromium-libpac/+/948d4753664cc4e6b33cc3de634ac8fd5f781382">A-111274046</a>
+      [<a href="https://android.googlesource.com/platform/external/v8/+/a24543157ae2cdd25da43e20f4e48a07481e6ceb">2</a>]</td>
+   <td>EoP</td>
+   <td>重大</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9491</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/2b4667baa5a2badbdfec1794156ee17d4afef37c">A-111603051</a></td>
+   <td>RCE</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9492</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/962fb40991f15be4f688d960aa00073683ebdd20">A-111934948</a></td>
+   <td>EoP</td>
+   <td>高</td>
+   <td>8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9493</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/462aaeaa616e0bb1342e8ef7b472acc0cbc93deb">A-111085900</a>
+      [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/e7364907439578ce5334bce20bb03fef2e88b107">2</a>]
+      [<a href="https://android.googlesource.com/platform/frameworks/base/+/ebc250d16c747f4161167b5ff58b3aea88b37acf">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9452</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/54f661b16b308cf38d1b9703214591c0f83df64d">A-78464361</a>
+       [<a href="https://android.googlesource.com/platform/frameworks/base/+/3b6f84b77c30ec0bab5147b0cffc192c86ba2634">2</a>]</td>
+   <td>DoS</td>
+   <td>中</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="media-framework">メディア フレームワーク</h3>
+<p>メディア フレームワークの最も重大な脆弱性により、リモートの攻撃者が特別に細工したファイルを使用して、特権プロセス内で任意のコードを実行するおそれがあります。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参照</th>
+    <th>タイプ</th>
+    <th>重大度</th>
+    <th>更新対象の AOSP バージョン</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9473</td>
+   <td><a href="https://android.googlesource.com/platform/external/libhevc/+/9f0fb67540d2259e4930d9bd5f1a1a6fb95af862">A-65484460</a></td>
+   <td>RCE</td>
+   <td>重大</td>
+   <td>8.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9496</td>
+   <td><a href="https://android.googlesource.com/platform/external/libxaac/+/04e8cd58f075bec5892e369c8deebca9c67e855c">A-110769924</a></td>
+   <td>RCE</td>
+   <td>重大</td>
+   <td>9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9497</td>
+   <td><a href="https://android.googlesource.com/platform/external/libmpeg2/+/bef16671c891e16f25a7b174bc528eea109357be">A-74078669</a></td>
+   <td>RCE</td>
+   <td>重大</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9498</td>
+   <td><a href="https://android.googlesource.com/platform/external/skia/+/77c955200ddd1761d6ed7a6c1578349fedbb55e4">A-78354855</a></td>
+   <td>RCE</td>
+   <td>重大</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9499</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/bf7a67c33c0f044abeef3b9746f434b7f3295bb1">A-79218474</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="system">システム</h3>
+<p>システムの最も重大な脆弱性により、近くにいる攻撃者が特権プロセス内で任意のコードを実行するおそれがあります。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参照</th>
+    <th>タイプ</th>
+    <th>重大度</th>
+    <th>更新対象の AOSP バージョン</th>
+  </tr>
+  <tr>
+   <td>CVE-2017-13283</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/ebc284cf3a59ee5cf7c06af88c2f3bcd0480e3e9">A-78526423</a></td>
+   <td>RCE</td>
+   <td>重大</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9476</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/dd28d8ddf2985d654781770c691c60b45d7f32b4">A-109699112</a></td>
+   <td>EoP</td>
+   <td>重大</td>
+   <td>8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9504</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/11fb7aa03437eccac98d90ca2de1730a02a515e2">A-110216176</a></td>
+   <td>RCE</td>
+   <td>重大</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9501</td>
+   <td><a href="https://android.googlesource.com/platform/packages/apps/Settings/+/5e43341b8c7eddce88f79c9a5068362927c05b54">A-110034419</a></td>
+   <td>EoP</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9502</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-111936792</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9503</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-80432928</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9505</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/5216e6120160b28d76e9ee4dff9995e772647511">A-110791536</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9506</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/830cb39cb2a0f1bf6704d264e2a5c5029c175dd7">A-111803925</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9507</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/30cec963095366536ca0b1306089154e09bfe1a9">A-111893951</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9508</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/e8bbf5b0889790cf8616f4004867f0ff656f0551">A-111936834</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9509</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/198888b8e0163bab7a417161c63e483804ae8e31">A-111937027</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9510</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/6e4b8e505173f803a5fc05abc09f64eef89dc308">A-111937065</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9511</td>
+   <td><a href="https://android.googlesource.com/platform/system/netd/+/931418b16c7197ca2df34c2a5609e49791125abe">A-111650288</a></td>
+   <td>DoS</td>
+   <td>高</td>
+   <td>9</td>
+  </tr>
+</tbody></table>
+
+<h2 id="2018-10-05-details">セキュリティ パッチレベル 2018-10-05 の脆弱性の詳細</h2>
+<p>
+ここでは、パッチレベル 2018-10-05 に該当するセキュリティ脆弱性の各項目の詳細を説明します。影響を受けるコンポーネントごとに脆弱性を分類し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources.html#severity">重大度</a>、コンポーネント(該当する場合)、更新対象の AOSP バージョン(該当する場合)などの詳細を記載しています。該当する場合は、バグ ID の欄に、その問題の対処法として一般公開されている変更内容(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に続く番号で、追加の参照先へのリンクを示します。</p>
+
+<h3 id="kernel-components">カーネル コンポーネント</h3>
+<p>カーネル コンポーネントの最も重大な脆弱性により、悪意のあるローカルアプリによって特権プロセス内で任意のコードが実行されるおそれがあります。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参照</th>
+    <th>タイプ</th>
+    <th>重大度</th>
+    <th>コンポーネント</th>
+  </tr>
+  <tr>
+    <td>CVE-2018-9513</td>
+    <td>A-111081202<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>Fork</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9514</td>
+    <td>A-111642636<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>sdcardfs</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9515</td>
+    <td>A-111641492<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>sdcardfs</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">一般的な質問と回答</h2>
+<p>上記の公開情報に対する一般的な質問についての回答は以下のとおりです。</p>
+<p><strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?</strong></p>
+<p>端末のセキュリティ パッチレベルを確認する方法については、<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Android のバージョンを確認して更新する</a>をご覧ください。</p>
+<ul>
+<li>セキュリティ パッチレベル 2018-10-01 以降では、セキュリティ パッチレベル 2018-10-01 に関連するすべての問題に対処しています。</li>
+<li>セキュリティ パッチレベル 2018-10-05 以降では、セキュリティ パッチレベル 2018-10-05、およびそれ以前のすべてのパッチレベルに関連するすべての問題に対処しています。</li>
+</ul>
+<p>このアップデートを組み込んだ端末メーカーは、パッチレベル文字列を以下に設定する必要があります。</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2018-10-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-10-05]</li>
+</ul>
+<p><strong>2. この公開情報に 2 つのセキュリティ パッチレベルがあるのはなぜですか?</strong></p>
+<p>
+この公開情報では、2 つのセキュリティ パッチレベルを定義しています。これは、すべての Android 搭載端末で同様の問題が発生する一部の脆弱性をサブセットとし、Android パートナーが迅速かつ柔軟に修正できるようにするためです。Android パートナーは、この公開情報に掲載されている問題をすべて修正し、最新のセキュリティ パッチレベルを使用することが推奨されています。
+</p>
+<ul>
+<li>2018-10-01 のセキュリティ パッチレベルを使用する端末では、そのセキュリティ パッチレベルに関連するすべての問題と、それ以前のセキュリティに関する公開情報で報告されたすべての問題の修正を含める必要があります。</li>
+<li>2018-10-05 以降のセキュリティ パッチレベルを使用する端末には、今回(およびそれ以前)のセキュリティに関する公開情報に掲載された、該当するすべてのパッチを組み込む必要があります。</li>
+</ul>
+<p>
+パートナーは、対処する問題すべてについて、修正を 1 つのアップデートにまとめて提供することが推奨されます。
+</p>
+<p id="type">
+<strong>3. 「タイプ<em></em>」列の項目はどういう意味ですか?</strong>
+</p>
+<p>
+脆弱性の詳細の表で「タイプ<em></em>」列に記載した項目は、セキュリティの脆弱性の分類を示しています。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>略語</th>
+   <th>定義</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>リモートコード実行</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>権限昇格</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>情報開示</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>サービス拒否</td>
+  </tr>
+  <tr>
+   <td>N/A</td>
+   <td>該当する分類なし</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>4. 「参照<em></em>」列の項目はどういう意味ですか?</strong>
+</p>
+<p>
+脆弱性の詳細の表で「参照<em></em>」列に記載した項目には、その参照番号が属す組織を示す接頭辞が含まれる場合があります。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>接頭辞</th>
+   <th>参照</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android バグ ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm の参照番号</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek の参照番号</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA の参照番号</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom の参照番号</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>5. 「参照<em></em>」列の Android バグ ID の横にある「*」はどういう意味ですか?</strong>
+</p>
+<p>
+公開されていない問題には、「参照」列の Android バグ ID の横に「*」を付けています。<em></em>この問題のアップデートは、<a href="https://developers.google.com/android/drivers" class="external">Google デベロッパー サイト</a>から入手できる Pixel / Nexus 端末用最新バイナリ ドライバに通常含まれています。
+</p>
+<p>
+<strong>6. セキュリティの脆弱性が、この公開情報と端末やパートナーのセキュリティに関する公開情報(Pixel / Nexus のセキュリティに関する公開情報など)に分けられているのはなぜですか?</strong>
+</p>
+<p>
+このセキュリティに関する公開情報に掲載されているセキュリティの脆弱性については、Android 搭載端末の最新のセキュリティ パッチレベルを公表するにあたって、対処が必須となります。それ以外の、端末やパートナーのセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処は、セキュリティ パッチレベルの公表には必要ありません。<a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>、<a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> などの Android 搭載端末やチップセットのメーカーは、自社の端末に関して他にも修正がある場合、その情報を自社のセキュリティ関連のウェブサイトや <a href="/security/bulletin/pixel/" class="external">Pixel / Nexus</a> のセキュリティに関する公開情報に掲載することが推奨されています。
+</p>
+
+<h2 id="versions">バージョン</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>バージョン</th>
+   <th>日付</th>
+   <th>メモ</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>情報公開</td>
+  </tr>
+  <tr>
+   <td>1.1</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>公開情報を改訂し AOSP リンクを追加</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/ja/security/bulletin/2018.html b/ja/security/bulletin/2018.html
index a1201a4..bd8db35 100644
--- a/ja/security/bulletin/2018.html
+++ b/ja/security/bulletin/2018.html
@@ -34,6 +34,22 @@
     <th>セキュリティ パッチレベル</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
+    <td>準備中
+     <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
diff --git a/ja/security/bulletin/index.html b/ja/security/bulletin/index.html
index ad129ab..2cec513 100644
--- a/ja/security/bulletin/index.html
+++ b/ja/security/bulletin/index.html
@@ -56,6 +56,22 @@
     <th>セキュリティ パッチレベル</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
+    <td>準備中
+     <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
diff --git a/ja/security/bulletin/pixel/2018-02-01.html b/ja/security/bulletin/pixel/2018-02-01.html
index 4631862..5d804ff 100644
--- a/ja/security/bulletin/pixel/2018-02-01.html
+++ b/ja/security/bulletin/pixel/2018-02-01.html
@@ -31,8 +31,7 @@
 <strong>注:</strong> Google 端末のファームウェア イメージは、<a href="https://developers.google.com/android/nexus/images">Google デベロッパー サイト</a>で入手できます。
 </p>
 <h2 id="announcements">お知らせ</h2>
-<p>
-<a href="/security/bulletin/2018-02-01">2018 年 2 月の Android のセキュリティに関する公開情報</a>に掲載されているセキュリティの脆弱性に加えて、Pixel 端末と Nexus 端末には、下記のセキュリティの脆弱性に対するパッチも含まれています。パートナーには少なくとも 1 か月前に下記の問題が通知されており、パートナーは端末のアップデートにこうしたパッチを組み込むことができます。</p>
+<p><a href="/security/bulletin/2018-02-01">2018 年 2 月の Android のセキュリティに関する公開情報</a>に掲載されているセキュリティの脆弱性に加えて、Pixel 端末と Nexus 端末には、下記のセキュリティの脆弱性に対するパッチも含まれています。パートナーには少なくとも 1 か月前に下記の問題が通知されており、パートナーは端末のアップデートにこうしたパッチを組み込むことができます。</p>
 
 <h2 id="security-patches">セキュリティ パッチ</h2>
 <p>
@@ -470,7 +469,7 @@
 
 <h2 id="common-questions-and-answers">一般的な質問と回答</h2>
 <p>
-上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+上記の公開情報に対する一般的な質問についての回答は以下のとおりです。
 </p>
 <p>
 <strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
diff --git a/ja/security/bulletin/pixel/2018-03-01.html b/ja/security/bulletin/pixel/2018-03-01.html
index 5fc7734..48fa054 100644
--- a/ja/security/bulletin/pixel/2018-03-01.html
+++ b/ja/security/bulletin/pixel/2018-03-01.html
@@ -549,7 +549,7 @@
 
 <h2 id="common-questions-and-answers">一般的な質問と回答</h2>
 <p>
-上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+上記の公開情報に対する一般的な質問についての回答は以下のとおりです。
 </p>
 <p>
 <strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
diff --git a/ja/security/bulletin/pixel/2018-04-01.html b/ja/security/bulletin/pixel/2018-04-01.html
index fca2034..70d0f19 100644
--- a/ja/security/bulletin/pixel/2018-04-01.html
+++ b/ja/security/bulletin/pixel/2018-04-01.html
@@ -565,7 +565,7 @@
   <tr>
    <td>A-65490850</td>
    <td>UI</td>
-   <td>ビデオ通話中に Wi-Fi の受信可能範囲に入った場合、またはその範囲から出た場合の通知を調整</td>
+   <td>ビデオ通話中に Wi-Fi を受信できる範囲に入った場合、またはその範囲から出た場合の通知を調整</td>
    <td>Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
@@ -630,7 +630,7 @@
   </tr>
   <tr>
    <td>A-67882977</td>
-   <td>認証</td>
+   <td>証明書</td>
    <td>証明書を更新</td>
    <td>Pixel、Pixel XL</td>
   </tr>
@@ -647,7 +647,7 @@
   <tr>
    <td>A-68217064</td>
    <td>パフォーマンス</td>
-   <td>電波の弱いエリアでの Wi-Fi 通話へのハンドオーバを改善</td>
+   <td>電波の弱いエリアでの Wi-Fi 通話へのハンドオーバーを改善</td>
    <td>Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
@@ -678,7 +678,7 @@
     <td>A-68923696<br />
        A-68922470<br />
        A-68940490</td>
-   <td>認証</td>
+   <td>証明書</td>
    <td>サービスの継続的な提供のために証明書をアップグレード</td>
    <td>Nexus 5X、Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
   </tr>
@@ -874,7 +874,7 @@
 
 <h2 id="common-questions-and-answers">一般的な質問と回答</h2>
 <p>
-上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+上記の公開情報に対する一般的な質問についての回答は以下のとおりです。
 </p>
 <p>
 <strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
diff --git a/ja/security/bulletin/pixel/2018-05-01.html b/ja/security/bulletin/pixel/2018-05-01.html
index d4cc567..cf53d36 100644
--- a/ja/security/bulletin/pixel/2018-05-01.html
+++ b/ja/security/bulletin/pixel/2018-05-01.html
@@ -464,7 +464,7 @@
 
 <h2 id="common-questions-and-answers">一般的な質問と回答</h2>
 <p>
-上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+上記の公開情報に対する一般的な質問についての回答は以下のとおりです。
 </p>
 <p>
 <strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
diff --git a/ja/security/bulletin/pixel/2018-06-01.html b/ja/security/bulletin/pixel/2018-06-01.html
index cbd758f..11858e0 100644
--- a/ja/security/bulletin/pixel/2018-06-01.html
+++ b/ja/security/bulletin/pixel/2018-06-01.html
@@ -645,7 +645,7 @@
   </tr>
   <tr>
     <td>CVE-2018-5857</td>
-    <td>A-62536960 <a href="#asterisk">*</a> <br />
+    <td>A-62536960<a href="#asterisk">*</a><br />
         QC-CR#2169403</td>
     <td>EoP</td>
     <td>中</td>
@@ -727,13 +727,13 @@
    <th>端末</th>
   </tr>
   <tr>
-   <td> A-74413120</td>
+   <td>A-74413120</td>
    <td>Bluetooth</td>
    <td>BLE のパフォーマンスを改善</td>
    <td>すべて</td>
   </tr>
   <tr>
-   <td>A-76022834 </td>
+   <td>A-76022834</td>
    <td>パフォーマンス</td>
    <td>電波が弱いエリアでのアンテナ切り替え動作を改善</td>
    <td>Pixel 2、Pixel 2 XL</td>
@@ -768,7 +768,7 @@
 
 <h2 id="common-questions-and-answers">一般的な質問と回答</h2>
 <p>
-上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+上記の公開情報に対する一般的な質問についての回答は以下のとおりです。
 </p>
 <p>
 <strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
diff --git a/ja/security/bulletin/pixel/2018-07-01.html b/ja/security/bulletin/pixel/2018-07-01.html
index bdf4fe6..177587e 100644
--- a/ja/security/bulletin/pixel/2018-07-01.html
+++ b/ja/security/bulletin/pixel/2018-07-01.html
@@ -351,7 +351,7 @@
 
 <h2 id="common-questions-and-answers">一般的な質問と回答</h2>
 <p>
-上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+上記の公開情報に対する一般的な質問についての回答は以下のとおりです。
 </p>
 <p>
 <strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
diff --git a/ja/security/bulletin/pixel/2018-08-01.html b/ja/security/bulletin/pixel/2018-08-01.html
index 9234b50..fb8e7a5 100644
--- a/ja/security/bulletin/pixel/2018-08-01.html
+++ b/ja/security/bulletin/pixel/2018-08-01.html
@@ -37,7 +37,8 @@
 
 <h2 id="security-patches">セキュリティ パッチ</h2>
 <p>
-脆弱性は、影響を受けるコンポーネントごとに分類しています。問題の内容について説明し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources.html#severity">重大度</a>、更新対象の AOSP(Android オープンソース プロジェクト)バージョン(該当する場合)を表にまとめています。該当する場合は、バグ ID の欄に、その問題に対処した一般公開されている変更(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に続く番号で、追加の参照先へのリンクを示します。</p>
+脆弱性は、影響を受けるコンポーネントごとに分類しています。問題の内容について説明し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources.html#severity">重大度</a>、更新対象の AOSP(Android オープンソース プロジェクト)バージョン(該当する場合)を表にまとめています。
+該当する場合は、バグ ID の欄に、その問題の対処法として一般公開されている変更内容(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に続く番号で、追加の参照先へのリンクを示します。</p>
 
 <h3 id="framework">フレームワーク</h3>
 
@@ -411,7 +412,7 @@
 
 <h2 id="common-questions-and-answers">一般的な質問と回答</h2>
 <p>
-上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+上記の公開情報に対する一般的な質問についての回答は以下のとおりです。
 </p>
 <p>
 <strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
@@ -495,7 +496,7 @@
 公開されていない問題には、「参照」列の Android バグ ID の横に「*」を付けています。<em></em>この問題のアップデートは、通常、<a href="https://developers.google.com/android/nexus/drivers" class="external">Google デベロッパー サイト</a>から入手できる Pixel / Nexus 端末用最新バイナリ ドライバに含まれています。
 </p>
 <p>
-<strong>5。セキュリティの脆弱性が、この公開情報と「Android のセキュリティに関する公開情報」に分けられているのはなぜですか?</strong>
+<strong>5. セキュリティの脆弱性が、この公開情報と「Android のセキュリティに関する公開情報」に分けられているのはなぜですか?</strong>
 </p>
 <p>
 Android 搭載端末の最新のセキュリティ パッチレベルを宣言するためには、Android のセキュリティに関する公開情報に掲載されているセキュリティの脆弱性への対処が必要です。それ以外の、この公開情報などに掲載されているセキュリティの脆弱性への対処は必要ありません。
diff --git a/ja/security/bulletin/pixel/2018-09-01.html b/ja/security/bulletin/pixel/2018-09-01.html
index c6eec19..fcfb6e0 100644
--- a/ja/security/bulletin/pixel/2018-09-01.html
+++ b/ja/security/bulletin/pixel/2018-09-01.html
@@ -23,7 +23,8 @@
 <p><em>2018 年 9 月 4 日公開</em></p>
 
 <p>
-Pixel / Nexus のセキュリティに関する公開情報には、<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">サポート対象の Google Pixel 端末と Nexus 端末</a>(Google 端末)に影響を与えるセキュリティの脆弱性や機能強化の詳細を掲載しています。Google 端末では、セキュリティ パッチレベル 2018-09-05 以降において、この公開情報に掲載されているすべての問題と、2018 年 9 月の Android のセキュリティに関する公開情報に掲載されているすべての問題に対処しています。端末のセキュリティ パッチレベルを確認する方法については、<a href="https://support.google.com/pixelphone/answer/4457705" class="external">Android のバージョンを確認して更新する</a>をご覧ください。
+Pixel / Nexus のセキュリティに関する公開情報には、<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">サポート対象の Google Pixel 端末と Nexus 端末</a>(Google 端末)に影響を与えるセキュリティの脆弱性や機能強化の詳細を掲載しています。
+Google 端末では、セキュリティ パッチレベル 2018-09-05 以降において、この公開情報に掲載されているすべての問題と、2018 年 9 月の Android のセキュリティに関する公開情報に掲載されているすべての問題に対処しています。端末のセキュリティ パッチレベルを確認する方法については、<a href="https://support.google.com/pixelphone/answer/4457705" class="external">Android のバージョンを確認して更新する</a>をご覧ください。
 </p>
 <p>
 パッチレベル 2018-09-05 へのアップデートは、サポート対象のすべての Google 端末に送信されます。Google ではすべてのユーザーに対し、ご利用の端末にこのようなアップデートを適用することをおすすめしています。
@@ -37,7 +38,8 @@
 
 <h2 id="security-patches">セキュリティ パッチ</h2>
 <p>
-脆弱性は、影響を受けるコンポーネントごとに分類しています。問題の内容について説明し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources#severity">重大度</a>、更新対象の AOSP(Android オープンソース プロジェクト)バージョン(該当する場合)を表にまとめています。該当する場合は、バグ ID の欄に、その問題に対処した一般公開されている変更(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に番号を併記して、追加の参照先へのリンクを設定しています。</p>
+脆弱性は、影響を受けるコンポーネントごとに分類しています。問題の内容について説明し、CVE、関連する参照先、<a href="#type">脆弱性のタイプ</a>、<a href="/security/overview/updates-resources#severity">重大度</a>、更新対象の AOSP(Android オープンソース プロジェクト)バージョン(該当する場合)を表にまとめています。
+該当する場合は、バグ ID の欄に、その問題の対処法として一般公開されている変更内容(AOSP の変更の一覧など)へのリンクがあります。複数の変更が同じバグに関係する場合は、バグ ID の後に番号を併記して、追加の参照先へのリンクを設定しています。</p>
 
 <h3 id="kernel-components">カーネル コンポーネント</h3>
 
@@ -113,9 +115,7 @@
   <tr>
     <td>CVE-2018-11273</td>
     <td>A-109741750<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=789d4d21c3f1818dcbf74da4a051598e8f53676c">
-QC-CR#2204285</a>
-	[<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=f34f6271362484c1f87f4176e72a3bfb80ee7711">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=789d4d21c3f1818dcbf74da4a051598e8f53676c">QC-CR#2204285</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=f34f6271362484c1f87f4176e72a3bfb80ee7711">2</a>]</td>
     <td>N/A</td>
     <td>中</td>
     <td>オーディオ</td>
@@ -131,8 +131,7 @@
   <tr>
     <td>CVE-2018-11281</td>
     <td>A-109741734<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=4bc7311e9ea9145a615184626cc43a8b92e7619c">QC-CR#2191541</a>
-	[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=c9861d16283cb4279de98a6695e0a4e6ea0230cb">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=4bc7311e9ea9145a615184626cc43a8b92e7619c">QC-CR#2191541</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=c9861d16283cb4279de98a6695e0a4e6ea0230cb">2</a>]</td>
     <td>N/A</td>
     <td>中</td>
     <td>データ HLOS - LNX</td>
diff --git a/ja/security/bulletin/pixel/2018-10-01.html b/ja/security/bulletin/pixel/2018-10-01.html
new file mode 100644
index 0000000..f2d57ad
--- /dev/null
+++ b/ja/security/bulletin/pixel/2018-10-01.html
@@ -0,0 +1,187 @@
+<html devsite><head>
+    <title>Pixel / Nexus のセキュリティに関する公開情報 — 2018 年 10 月</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>2018 年 10 月 1 日公開</em></p>
+
+<p>
+Pixel / Nexus のセキュリティに関する公開情報には、<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">サポート対象の Google Pixel 端末と Nexus 端末</a>(Google 端末)に影響を与えるセキュリティの脆弱性や機能強化の詳細を掲載しています。
+Google 端末では、セキュリティ パッチレベル 2018-10-05 以降において、この公開情報に掲載されているすべての問題と、2018 年 10 月の Android のセキュリティに関する公開情報に掲載されているすべての問題に対処しています。端末のセキュリティ パッチレベルを確認する方法については、<a href="https://support.google.com/pixelphone/answer/4457705" class="external">Android のバージョンを確認して更新する</a>をご覧ください。
+</p>
+<p>
+パッチレベル 2018-10-05 へのアップデートは、サポート対象のすべての Google 端末に送信されます。ご利用の端末で上記の更新を行うことをすべてのユーザーにおすすめします。
+</p>
+<p class="note">
+<strong>注:</strong> Google 端末のファームウェア イメージは、<a href="https://developers.google.com/android/images" class="external">Google デベロッパー サイト</a>で入手できます。
+</p>
+
+<h2 id="announcements">お知らせ</h2>
+
+<p>2018 年 10 月の Pixel / Nexus のセキュリティに関する公開情報に Pixel または Nexus のセキュリティ パッチはありません。
+</p>
+
+<h2 id="functional-patches">機能パッチ</h2>
+<p>
+影響を受ける Pixel 端末には、セキュリティ関連以外の機能の問題に対処する下記のアップデートが組み込まれています。関連する参照先、影響を受けるカテゴリ(Bluetooth やモバイルデータなど)、改善内容、影響を受ける端末を下記の表にまとめています。
+</p>
+
+<table>
+  <tbody><tr>
+   <th>参照</th>
+   <th>カテゴリ</th>
+   <th>改善内容</th>
+   <th>端末</th>
+  </tr>
+  <tr>
+   <td>A-112486006</td>
+   <td>メディア</td>
+   <td>特定の保護されたメディア形式のパフォーマンスを改善</td>
+   <td>Pixel 2、Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-112529920</td>
+   <td>電源</td>
+   <td>Pixel 端末の高速充電動作を改善</td>
+   <td>Pixel、Pixel XL</td>
+  </tr>
+  <tr>
+   <td>A-79643956</td>
+   <td>安定性</td>
+   <td>Android Auto 使用時の安定性を改善</td>
+   <td>Pixel 2、Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-111467967</td>
+   <td>性能</td>
+   <td>マップのナビ使用時のコール フィルタリング動作を変更</td>
+   <td>すべて</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">一般的な質問と回答</h2>
+<p>
+上記の公開情報に対する一般的な質問とその回答について、以下をご確認ください。
+</p>
+<p>
+<strong>1. 上記の問題に対処するように端末が更新されているかどうかを確かめるには、どうすればよいですか?
+</strong>
+</p>
+<p>
+セキュリティ パッチレベル 2018-10-05 以降では、セキュリティ パッチレベル 2018-10-05、およびそれ以前のすべてのパッチレベルに関連するすべての問題に対処しています。端末のセキュリティ パッチレベルを確認する方法については、<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Pixel および Nexus のアップデート スケジュール</a>に記載されている手順をご覧ください。
+</p>
+<p id="type">
+<strong>2. 「タイプ<em></em>」列の項目はどういう意味ですか?</strong>
+</p>
+<p>
+脆弱性の詳細の表で「タイプ<em></em>」列に記載した項目は、セキュリティの脆弱性の分類を示しています。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>略語</th>
+   <th>定義</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>リモートコード実行</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>権限昇格</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>情報開示</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>サービス拒否</td>
+  </tr>
+  <tr>
+   <td>N/A</td>
+   <td>該当する分類なし</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>3. 「参照<em></em>」列の項目はどういう意味ですか?</strong>
+</p>
+<p>
+脆弱性の詳細の表で「参照<em></em>」列に記載した項目には、その参照番号が属す組織を示す接頭辞が含まれる場合があります。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>接頭辞</th>
+   <th>参照</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android バグ ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm の参照番号</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek の参照番号</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA の参照番号</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom の参照番号</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>4. 「参照<em></em>」列の Android バグ ID の横にある「*」はどういう意味ですか?</strong>
+</p>
+<p>
+公開されていない問題には、「参照」列の Android バグ ID の横に「*」を付けています。<em></em>この問題のアップデートは、通常、<a href="https://developers.google.com/android/nexus/drivers" class="external">Google デベロッパー サイト</a>から入手できる Pixel / Nexus 端末用最新バイナリ ドライバに含まれています。
+</p>
+<p>
+<strong>5。セキュリティの脆弱性が、この公開情報と「Android のセキュリティに関する公開情報」に分けられているのはなぜですか?</strong>
+</p>
+<p>
+Android のセキュリティに関する公開情報に掲載されているセキュリティの脆弱性については、Android 搭載端末の最新のセキュリティ パッチレベルを公表するにあたって、対処が必須となります。それ以外の、この公開情報などに掲載されているセキュリティの脆弱性への対処は、セキュリティ パッチレベルの公表には必要ありません。
+</p>
+<h2 id="versions">バージョン</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>バージョン</th>
+   <th>日付</th>
+   <th>メモ</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>情報公開</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/ja/security/bulletin/pixel/2018.html b/ja/security/bulletin/pixel/2018.html
index 9f57b5c..f35b94b 100644
--- a/ja/security/bulletin/pixel/2018.html
+++ b/ja/security/bulletin/pixel/2018.html
@@ -34,6 +34,21 @@
     <th>セキュリティ パッチレベル</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
+    <td>準備中
+     <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /
diff --git a/ja/security/bulletin/pixel/index.html b/ja/security/bulletin/pixel/index.html
index 40b9d61..5b72d3d 100644
--- a/ja/security/bulletin/pixel/index.html
+++ b/ja/security/bulletin/pixel/index.html
@@ -43,6 +43,21 @@
     <th>セキュリティ パッチレベル</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
+    <td>準備中
+     <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /
diff --git a/ko/security/bulletin/2018-07-01.html b/ko/security/bulletin/2018-07-01.html
index cd924e2..a3653af 100644
--- a/ko/security/bulletin/2018-07-01.html
+++ b/ko/security/bulletin/2018-07-01.html
@@ -72,7 +72,7 @@
 <li>Android 플랫폼 최신 버전의 향상된 기능으로 Android의 여러 문제를
 악용하기가 더욱 어려워졌습니다. 가능하다면 모든 사용자는 최신 버전의 Android로
 업데이트하는 것이 좋습니다.</li>
-<li>Android 보안팀에서는 <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">Google Play 프로텍트</a>를 통해 악용사례를 모니터링하고 <a href="https://www.android.com/play-protect">잠재적으로 위험한 애플리케이션</a>에 관해 사용자에게 경고를 보냅니다. Google Play 프로텍트는
+<li>Android 보안팀에서는 <a href="https://www.android.com/play-protect">Google Play 프로텍트</a>를 통해 악용사례를 모니터링하고 <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">잠재적으로 위험한 애플리케이션</a>에 관해 사용자에게 경고를 보냅니다. Google Play 프로텍트는
 <a href="http://www.android.com/gms">Google 모바일 서비스</a>가 적용된 기기에 기본적으로 사용 설정되어 있으며
 Google Play 외부에서 가져온 앱을 설치하는 사용자에게
 특히 중요합니다.</li>
diff --git a/ko/security/bulletin/2018-08-01.html b/ko/security/bulletin/2018-08-01.html
index 9cc2435..0ca2b1c 100644
--- a/ko/security/bulletin/2018-08-01.html
+++ b/ko/security/bulletin/2018-08-01.html
@@ -52,7 +52,7 @@
 <p class="note">
 <strong>참고:</strong> Google 기기의 최신 무선 업데이트(OTA)
 및 펌웨어 이미지 관련 정보는
-<a href="/security/bulletin/pixel/2018-08-01.html">2018년 6월
+<a href="/security/bulletin/pixel/2018-08-01.html">2018년 8월
 Pixel&amp;hairsp;/&amp;hairsp;Nexus 보안 게시판</a>
 을 참조하세요.
 </p>
@@ -70,7 +70,7 @@
 <li>Android 플랫폼 최신 버전의 향상된 기능으로 Android의 여러 문제를
 악용하기가 더욱 어려워졌습니다. 가능하다면 모든 사용자는 최신 버전의 Android로
 업데이트하는 것이 좋습니다.</li>
-<li>Android 보안팀에서는 <a href="https://www.android.com/play-protect" class="external">Google Play 프로텍트</a>를 통해 악용사례를 모니터링하고 <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">잠재적으로 위험한 애플리케이션</a>에 관해 사용자에게 경고를 보냅니다. Google Play 프로텍트는 <a href="http://www.android.com/gms" class="external">Google 모바일 서비스</a>가 적용된 기기에
+<li>Android 보안팀에서는 <a href="https://www.android.com/play-protect" class="external">Google Play 프로텍트</a>를 통해 악용사례를 적극적으로 모니터링하고 <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">잠재적으로 위험한 애플리케이션</a>에 관해 사용자에게 경고를 보냅니다. Google Play 프로텍트는 <a href="http://www.android.com/gms" class="external">Google 모바일 서비스</a>가 적용된 기기에
 기본적으로
 사용 설정되어 있으며 Google Play 외부에서 가져온 앱을 설치하는 사용자에게
 특히 중요합니다.</li>
@@ -296,7 +296,7 @@
 <p>
 다음 섹션에서는 2018-08-05 패치 수준에 적용되는 각 보안
 취약성에 관해 자세히 알아볼 수 있습니다. 취약성은
-영향을 받는 구성요소 아래에 분류되어 있으며
+영향을 받는 구성요소 아래에 그룹화되어 있으며
 CVE, 관련 참조, <a href="#type">취약성 유형</a>,
 <a href="/security/overview/updates-resources.html#severity">심각도</a>,
 구성요소(해당하는 경우), 업데이트된 AOSP 버전(해당하는 경우)과 같은 세부정보가 포함되어 있습니다. 가능한
@@ -706,9 +706,9 @@
 필요하지 않습니다. Android 기기 및 칩셋 제조업체는 <a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">삼성</a>, <a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> 또는
 <a href="/security/bulletin/pixel/" class="external">Pixel&amp;hairsp;/&amp;hairsp;Nexus</a> 보안 게시판과 같은 자체
 보안 웹사이트를
-통해 기기의
-다른 수정사항이 있는지를
-설명하는 것이 좋습니다.
+통해 기기와 관련된
+다른 수정사항이 있는지
+기록하는 것이 좋습니다.
 </p>
 
 <h2 id="versions">버전</h2>
@@ -719,7 +719,7 @@
   </colgroup><tbody><tr>
    <th>버전</th>
    <th>날짜</th>
-   <th>참고</th>
+   <th>참고사항</th>
   </tr>
   <tr>
    <td>1.0</td>
diff --git a/ko/security/bulletin/2018-09-01.html b/ko/security/bulletin/2018-09-01.html
index a083dbb..33299ae 100644
--- a/ko/security/bulletin/2018-09-01.html
+++ b/ko/security/bulletin/2018-09-01.html
@@ -51,7 +51,7 @@
 <p class="note">
 <strong>참고:</strong> Google 기기의 최신 무선 업데이트(OTA)
 및 펌웨어 이미지 관련 정보는
-<a href="/security/bulletin/pixel/2018-09-01">2018년 6월
+<a href="/security/bulletin/pixel/2018-09-01">2018년 9월
 Pixel&amp;hairsp;/&amp;hairsp;Nexus 보안 게시판</a>
 을 참조하세요.
 </p>
@@ -68,7 +68,7 @@
 <li>Android 플랫폼 최신 버전의 향상된 기능으로 Android의 여러 문제를
 악용하기가 더욱 어려워졌습니다. 가능하다면 모든 사용자는 최신 버전의 Android로
 업데이트하는 것이 좋습니다.</li>
-<li>Android 보안팀에서는 <a href="https://www.android.com/play-protect" class="external">Google Play 프로텍트</a>를 통해 악용사례를 모니터링하고 <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">잠재적으로 위험한 애플리케이션</a>에 관해 사용자에게 경고를 보냅니다. Google Play 프로텍트는 <a href="http://www.android.com/gms" class="external">Google 모바일 서비스</a>가 적용된 기기에
+<li>Android 보안팀에서는 <a href="https://www.android.com/play-protect" class="external">Google Play 프로텍트</a>를 통해 악용사례를 적극적으로 모니터링하고 <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">잠재적으로 위험한 애플리케이션</a>에 관해 사용자에게 경고를 보냅니다. Google Play 프로텍트는 <a href="http://www.android.com/gms" class="external">Google 모바일 서비스</a>가 적용된 기기에
 기본적으로
 사용 설정되어 있으며 Google Play 외부에서 가져온 앱을 설치하는 사용자에게
 특히 중요합니다.</li>
@@ -117,7 +117,7 @@
    <td><a href="https://android.googlesource.com/platform/libcore/+/518e8d27de9f32eb86bc3090ee2759ea93b9fb93" class="external">A-110955991</a></td>
    <td>EoP</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -144,21 +144,21 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/623b2b604c4ffcd48f137379d6934537510665bf" class="external">A-109824443</a></td>
    <td>EoP</td>
    <td>높음</td>
-   <td>7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9470</td>
    <td><a href="https://android.googlesource.com/platform/external/neven/+/86a561f79f97baa38e240f6296fe1192fa4a5c9c" class="external">A-78290481</a></td>
    <td>EoP</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9471</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/eabaff1c7f02906e568997bdd7dc43006655387e" class="external">A-77599679</a></td>
    <td>EoP</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -212,7 +212,7 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/586b9102f322731d604e6280143e16cb6f1c9f76" class="external">A-77600398</a></td>
    <td>EoP</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9440</td>
@@ -220,7 +220,7 @@
 [<a href="https://android.googlesource.com/platform/frameworks/av/+/2870acaa4c58cf59758a74b6390615a421f14268" class="external">2</a>]</td>
    <td>DoS</td>
    <td>보통</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -247,21 +247,21 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/43cd528a444d0cc5bbf3beb22cd583289bcf7334" class="external">A-79266386</a></td>
    <td>EoP</td>
    <td>심각</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9478</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217522</a></td>
    <td>EoP</td>
    <td>심각</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9479</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217770</a></td>
    <td>EoP</td>
    <td>심각</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9456</td>
@@ -282,63 +282,63 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757168</a></td>
    <td>ID</td>
    <td>높음</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9481</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757435</a></td>
    <td>ID</td>
    <td>높음</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9482</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757986</a></td>
    <td>ID</td>
    <td>높음</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9483</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d3689fb0ddcdede16c13250a7a30ca76b113c9c1" class="external">A-110216173</a></td>
    <td>ID</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9484</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d5b44f6522c3294d6f5fd71bc6670f625f716460" class="external">A-79488381</a></td>
    <td>ID</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9485</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bdbabb2ca4ebb4dc5971d3d42cb12f8048e23a23" class="external">A-80261585</a></td>
    <td>ID</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9486</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bc6aef4f29387d07e0c638c9db810c6c1193f75b" class="external">A-80493272</a></td>
    <td>ID</td>
    <td>높음</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9487</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/cf6784bfbf713aaa54d8da77e9481b3f02784246" class="external">A-69873852</a></td>
    <td>DoS</td>
    <td>높음</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9488</td>
    <td><a href="https://android.googlesource.com/platform/system/sepolicy/+/d4e094e2b1a47c1fea1799d9fade19e953a7ca1b" class="external">A-110107376</a></td>
    <td>EoP</td>
    <td>보통</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -365,14 +365,14 @@
    <td><a href="https://android.googlesource.com/platform/system/libhidl/+/93484b9b015d47c0f7e5f4449a214b2fed8bed4f" class="external">A-79376389</a></td>
    <td>RCE</td>
    <td>심각</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9427</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/29d991fac25b261a72ce73f96c9df594ea5b9242" class="external">A-77486542</a></td>
    <td>RCE</td>
    <td>심각</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -860,9 +860,9 @@
 필요하지 않습니다. Android 기기 및 칩셋 제조업체는 <a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">삼성</a>, <a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> 또는
 <a href="/security/bulletin/pixel/" class="external">Pixel&amp;hairsp;/&amp;hairsp;Nexus</a> 보안 게시판과 같은 자체
 보안 웹사이트를
-통해 기기의
-다른 수정사항이 있는지를
-설명하는 것이 좋습니다.
+통해 기기와 관련된
+다른 수정사항이 있는지
+기록하는 것이 좋습니다.
 </p>
 
 <h2 id="versions">버전</h2>
diff --git a/ko/security/bulletin/2018-10-01.html b/ko/security/bulletin/2018-10-01.html
new file mode 100644
index 0000000..7013377
--- /dev/null
+++ b/ko/security/bulletin/2018-10-01.html
@@ -0,0 +1,533 @@
+<html devsite><head>
+    <title>Android 보안 게시판—2018년 10월</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>20168년 10월 1일 게시됨 | 2018년 10월 1일 업데이트됨</em></p>
+
+<p>
+Android 보안 게시판은 Android 기기에 영향을 미치는 보안 취약성
+세부정보를 다룹니다. 이러한 문제는 2018-10-05 보안 패치 수준 이상에서
+모두 해결되었습니다. 기기의 보안 패치 수준을 확인하는 방법은
+<a href="https://support.google.com/pixelphone/answer/4457705" class="external">Android 버전 확인 및 업데이트</a>를 참조하세요.
+</p>
+<p>
+Android 파트너에게는 게시되기 최소 한 달 전에 모든 문제 관련 알림이
+전달되었습니다. 이러한 문제를 해결하기 위한 소스 코드 패치는
+Android 오픈소스 프로젝트(AOSP) 저장소에 배포되었으며 이 게시판에도 링크되어 있습니다.
+이 게시판에는 AOSP 외부의 패치 링크도 포함되어 있습니다.</p>
+<p>
+이러한 문제 중 가장 심각한 것은 프레임워크의 심각한 보안 취약성으로,
+특별히 제작된 파일을 사용하는 원격 공격자가 권한이 설정된 프로세스의 컨텍스트
+내에서 임의의 코드를 실행할 수 있습니다. <a href="/security/overview/updates-resources.html#severity">심각도
+평가</a>는
+개발 목적으로 플랫폼 및 서비스 완화를 사용할 수 없거나 우회에 성공한 경우 취약성 악용으로 인해
+대상 기기가 받는 영향을
+기준으로 합니다.
+</p>
+<p>
+실제 고객이 새로 보고된 이러한 문제로 인해 악용당했다는 신고는
+접수되지 않았습니다. Android 플랫폼의 보안을 개선하는
+<a href="/security/enhancements/">Android 보안 플랫폼 보호</a> 및 Google Play 프로텍트에 관해
+자세히 알아보려면 <a href="#mitigations">Android 및 Google Play 프로텍트 완화</a>
+섹션을 참조하세요.
+</p>
+<p class="note">
+<strong>참고:</strong> Google 기기의
+최신 무선 업데이트(OTA) 및 펌웨어 이미지 관련 정보는
+<a href="/security/bulletin/pixel/2018-10-01">2018년 10월
+Pixel&amp;hairsp;/&amp;hairsp;Nexus 보안 게시판</a>
+을 참조하세요.
+</p>
+
+<h2 id="mitigations">Android 및 Google 서비스 완화</h2>
+<p>
+다음은
+<a href="https://www.android.com/play-protect" class="external">Google Play 프로텍트</a>와 같은
+<a href="/security/enhancements/">Android 보안 플랫폼</a> 및 서비스 보호 기능에서
+제공하는 완화에 관한 요약입니다. 이러한 기능을 통해
+Android에서 보안 취약성이 악용될 가능성을 줄입니다.
+</p>
+<ul>
+<li>Android 플랫폼 최신 버전의 향상된 기능으로 Android의 여러 문제를
+악용하기가 더욱 어려워졌습니다. 가능하다면 모든 사용자는 최신 버전의 Android로
+업데이트하는 것이 좋습니다.</li>
+<li>Android 보안팀에서는 <a href="https://www.android.com/play-protect" class="external">Google Play 프로텍트</a>를 통해 악용사례를 적극적으로 모니터링하고 <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">잠재적으로 위험한 애플리케이션</a>에 관해 사용자에게 경고를 보냅니다. Google Play 프로텍트는 <a href="http://www.android.com/gms" class="external">Google 모바일 서비스</a>가 적용된 기기에
+기본적으로
+사용 설정되어 있으며 Google Play 외부에서 가져온 앱을 설치하는 사용자에게
+특히 중요합니다.</li>
+</ul>
+<h2 id="2018-10-01-details">2018-10-01 보안 패치 수준 취약성 세부정보</h2>
+<p>
+다음 섹션에서는 2018-10-01 패치 수준에 적용되는
+각 보안 취약성에 관해 자세히 알아볼 수 있습니다. 취약성은 영향을 받는
+구성요소 아래에 분류되어 있습니다. 여기에는
+문제 설명 및 CVE, 관련 참조,
+<a href="#type">취약성 유형</a>,
+<a href="/security/overview/updates-resources.html#severity">심각도</a>,
+업데이트된 AOSP 버전(해당하는 경우)이 포함된 표가 제시됩니다. 가능한 경우 AOSP 변경사항 목록과 같이 문제를
+해결한 공개 변경사항을 버그 ID에 연결합니다. 하나의
+버그와 관련된 변경사항이 여러 개인 경우 추가 참조가 버그 ID
+다음에 오는 번호에 연결됩니다.
+</p>
+
+<h3 id="framework">프레임워크</h3>
+<p>이 섹션의 가장 심각한 취약성으로 인해 특별히 제작된 파일을 사용하는
+원격 공격자가 권한이 설정된 프로세스의 컨텍스트 내에서 임의의 코드를
+실행할 수 있습니다.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>참조</th>
+    <th>유형</th>
+    <th>심각도</th>
+    <th>업데이트된 AOSP 버전</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9490</td>
+   <td><a href="https://android.googlesource.com/platform/external/chromium-libpac/+/948d4753664cc4e6b33cc3de634ac8fd5f781382">A-111274046</a>
+      [<a href="https://android.googlesource.com/platform/external/v8/+/a24543157ae2cdd25da43e20f4e48a07481e6ceb">2</a>]</td>
+   <td>EoP</td>
+   <td>심각</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9491</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/2b4667baa5a2badbdfec1794156ee17d4afef37c">A-111603051</a></td>
+   <td>RCE</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9492</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/962fb40991f15be4f688d960aa00073683ebdd20">A-111934948</a></td>
+   <td>EoP</td>
+   <td>높음</td>
+   <td>8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9493</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/462aaeaa616e0bb1342e8ef7b472acc0cbc93deb">A-111085900</a>
+      [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/e7364907439578ce5334bce20bb03fef2e88b107">2</a>]
+      [<a href="https://android.googlesource.com/platform/frameworks/base/+/ebc250d16c747f4161167b5ff58b3aea88b37acf">3</a>]</td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9452</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/54f661b16b308cf38d1b9703214591c0f83df64d">A-78464361</a>
+       [<a href="https://android.googlesource.com/platform/frameworks/base/+/3b6f84b77c30ec0bab5147b0cffc192c86ba2634">2</a>]</td>
+   <td>DoS</td>
+   <td>보통</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="media-framework">미디어 프레임워크</h3>
+<p>이 섹션의 가장 심각한 취약성으로 인해 특별히 제작된 파일을 사용하는
+원격 공격자가 권한이 설정된 프로세스의 컨텍스트 내에서 임의의 코드를
+실행할 수 있습니다.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>참조</th>
+    <th>유형</th>
+    <th>심각도</th>
+    <th>업데이트된 AOSP 버전</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9473</td>
+   <td><a href="https://android.googlesource.com/platform/external/libhevc/+/9f0fb67540d2259e4930d9bd5f1a1a6fb95af862">A-65484460</a></td>
+   <td>RCE</td>
+   <td>심각</td>
+   <td>8.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9496</td>
+   <td><a href="https://android.googlesource.com/platform/external/libxaac/+/04e8cd58f075bec5892e369c8deebca9c67e855c">A-110769924</a></td>
+   <td>RCE</td>
+   <td>심각</td>
+   <td>9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9497</td>
+   <td><a href="https://android.googlesource.com/platform/external/libmpeg2/+/bef16671c891e16f25a7b174bc528eea109357be">A-74078669</a></td>
+   <td>RCE</td>
+   <td>심각</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9498</td>
+   <td><a href="https://android.googlesource.com/platform/external/skia/+/77c955200ddd1761d6ed7a6c1578349fedbb55e4">A-78354855</a></td>
+   <td>RCE</td>
+   <td>심각</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9499</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/bf7a67c33c0f044abeef3b9746f434b7f3295bb1">A-79218474</a></td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="system">시스템</h3>
+<p>이 섹션의 가장 심각한 취약성으로 인해 인접한 공격자가 권한이
+설정된 프로세스의 컨텍스트 내에서 임의의 코드를 실행할 수
+있습니다.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>참조</th>
+    <th>유형</th>
+    <th>심각도</th>
+    <th>업데이트된 AOSP 버전</th>
+  </tr>
+  <tr>
+   <td>CVE-2017-13283</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/ebc284cf3a59ee5cf7c06af88c2f3bcd0480e3e9">A-78526423</a></td>
+   <td>RCE</td>
+   <td>심각</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9476</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/dd28d8ddf2985d654781770c691c60b45d7f32b4">A-109699112</a></td>
+   <td>EoP</td>
+   <td>심각</td>
+   <td>8.0, 8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9504</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/11fb7aa03437eccac98d90ca2de1730a02a515e2">A-110216176</a></td>
+   <td>RCE</td>
+   <td>심각</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9501</td>
+   <td><a href="https://android.googlesource.com/platform/packages/apps/Settings/+/5e43341b8c7eddce88f79c9a5068362927c05b54">A-110034419</a></td>
+   <td>EoP</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9502</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-111936792</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9503</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-80432928</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9505</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/5216e6120160b28d76e9ee4dff9995e772647511">A-110791536</a></td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9506</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/830cb39cb2a0f1bf6704d264e2a5c5029c175dd7">A-111803925</a></td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9507</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/30cec963095366536ca0b1306089154e09bfe1a9">A-111893951</a></td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9508</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/e8bbf5b0889790cf8616f4004867f0ff656f0551">A-111936834</a></td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9509</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/198888b8e0163bab7a417161c63e483804ae8e31">A-111937027</a></td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9510</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/6e4b8e505173f803a5fc05abc09f64eef89dc308">A-111937065</a></td>
+   <td>ID</td>
+   <td>높음</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9511</td>
+   <td><a href="https://android.googlesource.com/platform/system/netd/+/931418b16c7197ca2df34c2a5609e49791125abe">A-111650288</a></td>
+   <td>DoS</td>
+   <td>높음</td>
+   <td>9</td>
+  </tr>
+</tbody></table>
+
+<h2 id="2018-10-05-details">2018-10-05 보안 패치 수준 취약성 세부정보</h2>
+<p>
+다음 섹션에서는 2018-10-05 패치 수준에 적용되는
+각 보안 취약성에 관해 자세히 알아볼 수 있습니다. 취약성은
+영향을 받는 구성요소 아래에 분류되어 있으며
+CVE, 관련 참조, <a href="#type">취약성 유형</a>,
+<a href="/security/overview/updates-resources.html#severity">심각도</a>,
+구성요소(해당하는 경우), 업데이트된 AOSP 버전(해당하는 경우)과 같은 세부정보가 포함되어 있습니다. 가능한 경우
+AOSP 변경사항 목록과 같이 문제를 해결한 공개 변경사항을 버그 ID에
+연결합니다. 하나의 버그와 관련된 변경사항이 여러 개인 경우
+추가 참조가 버그 ID 다음에 오는 번호에 연결됩니다.
+</p>
+
+<h3 id="kernel-components">커널 구성요소</h3>
+<p>이 섹션의 가장 심각한 취약성으로 인해 로컬 악성 애플리케이션이
+권한이 설정된 프로세스의 컨텍스트 내에서 임의의 코드를 실행할 수
+있습니다.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>참조</th>
+    <th>유형</th>
+    <th>심각도</th>
+    <th>구성요소</th>
+  </tr>
+  <tr>
+    <td>CVE-2018-9513</td>
+    <td>A-111081202<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>높음</td>
+    <td>포크</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9514</td>
+    <td>A-111642636<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>높음</td>
+    <td>sdcardfs</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9515</td>
+    <td>A-111641492<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>높음</td>
+    <td>sdcardfs</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">일반적인 질문 및 답변</h2>
+<p>이 섹션에서는 게시판을 읽은 뒤 제기될 수 있는 일반적인 질문의 답변을
+제시합니다.</p>
+<p><strong>1. 내 기기가 업데이트되어 이 문제가 해결되었는지 어떻게 알 수
+있나요?</strong></p>
+<p>기기의 보안 패치 수준을 확인하는 방법은
+<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Android 버전 확인 및 업데이트</a>를 참조하세요.</p>
+<ul>
+<li>2018-10-01 보안 패치 수준과 관련된 모든 문제는 2018-10-01
+보안 패치 수준 이상에서 해결됩니다.</li>
+<li>2018-10-05 보안 패치 수준 및 그 이전의 모든 패치 수준과 관련된
+문제는 2018-10-05 보안 패치 수준 이상에서 모두 해결됩니다.</li>
+</ul>
+<p>이 업데이트를 포함하는 기기 제조업체는 패치 문자열 수준을 다음과 같이
+설정해야 합니다.</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2018-10-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-10-05]</li>
+</ul>
+<p><strong>2. 이 게시판에 두 가지 보안 패치 수준이 있는 이유가 무엇인가요?</strong></p>
+<p>
+이 게시판에는 Android 파트너가 모든 Android 기기에서 유사하게 발생하는
+취약성 문제의 일부를 더욱 빠르고 유연하게 해결할 수 있도록 두 가지
+보안 패치 수준이 포함되어 있습니다. Android 파트너는 이 게시판에 언급된
+문제를 모두 수정하고 최신 보안 패치 수준을 사용하는 것이 좋습니다.
+</p>
+<ul>
+<li>2018-10-01 보안 패치 수준을 사용하는 기기는 이 보안 패치
+수준과 관련된 모든 문제와 이전 보안 게시판에 보고된
+모든 문제의 수정사항을 포함해야 합니다.</li>
+<li>2018-10-05 이후의 보안 패치 수준을 사용하는 기기는
+이 보안 게시판과 이전 게시판의 모든 관련 패치를
+포함해야 합니다.</li>
+</ul>
+<p>
+파트너는 해결하는 모든 문제의 수정사항을 단 한 번의 업데이트에서
+번들로 묶는 것이 좋습니다.
+</p>
+<p id="type">
+<strong>3. <em>유형</em> 열의 항목은 무엇을 의미하나요?</strong>
+</p>
+<p>
+취약성 세부정보 표의 <em>유형</em> 열에 있는 항목은
+보안 취약성 분류를 참조합니다.
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>약어</th>
+   <th>정의</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>원격 코드 실행</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>권한 승격</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>정보 공개</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>서비스 거부</td>
+  </tr>
+  <tr>
+   <td>N/A</td>
+   <td>분류 없음</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>4. <em>참조</em> 열의 항목은 무엇을 의미하나요?</strong>
+</p>
+<p>
+취약성 세부정보 표의 <em>참조</em> 열에 있는 항목은
+참조 값이 속한 조직을 나타내는 접두어를 포함할 수
+있습니다.
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>접두어</th>
+   <th>참조</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android 버그 ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm 참조 번호</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek 참조 번호</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA 참조 번호</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom 참조 번호</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>5. <em>참조</em> 열에서 Android 버그 ID 옆에 있는 * 표시는
+무엇을 의미하나요?</strong>
+</p>
+<p>
+공개되지 않은 문제는 <em>참조</em> 열의 Android 버그 ID 옆에 * 표시가
+있습니다. 일반적으로 이러한 문제에 관한 업데이트는
+<a href="https://developers.google.com/android/drivers" class="external">Google 개발자 사이트</a>에서 제공하는
+Pixel&amp;hairsp;/&amp;hairsp;Nexus
+기기용
+최신 바이너리 드라이버에 포함되어 있습니다.
+</p>
+<p>
+<strong>6. 보안 취약성이 이 게시판과 Pixel / Nexus 게시판과 같은
+기기&amp;hairsp;/&amp;hairsp;파트너 보안 게시판에 나뉘어져 있는
+이유가 무엇인가요?</strong>
+</p>
+<p>
+이 보안 게시판에 설명되어 있는 보안 취약성은
+Android 기기의 최신 보안 패치 수준을 선언하는 데 필요합니다. 기기&amp;hairsp;/&amp;hairsp;파트너
+보안 게시판에 설명된 추가 보안 취약성은 보안 패치 수준을 선언하는 데
+필요하지 않습니다. Android 기기 및 칩셋 제조업체는 <a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">삼성</a>, <a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> 또는
+<a href="/security/bulletin/pixel/" class="external">Pixel&amp;hairsp;/&amp;hairsp;Nexus</a> 보안 게시판과 같은 자체
+보안 웹사이트를
+통해 기기와 관련된
+다른 수정사항이 있는지
+기록하는 것이 좋습니다.
+</p>
+
+<h2 id="versions">버전</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>버전</th>
+   <th>날짜</th>
+   <th>참고사항</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018년 10월 1일</td>
+   <td>게시판이 게시됨</td>
+  </tr>
+  <tr>
+   <td>1.1</td>
+   <td>2018년 10월 1일</td>
+   <td>게시판이 수정되어 AOSP 링크 포함됨</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/ko/security/bulletin/2018.html b/ko/security/bulletin/2018.html
index b0f8257..3cc5ef5 100644
--- a/ko/security/bulletin/2018.html
+++ b/ko/security/bulletin/2018.html
@@ -34,6 +34,22 @@
     <th>보안 패치 수준</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018년 10월</a></td>
+    <td>출시 예정
+     <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018년 10월 1일</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018년 9월</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html?hl=ko">한국어</a> /
diff --git a/ko/security/bulletin/index.html b/ko/security/bulletin/index.html
index 90a5716..25252e9 100644
--- a/ko/security/bulletin/index.html
+++ b/ko/security/bulletin/index.html
@@ -20,10 +20,8 @@
       limitations under the License.
   -->
 
-<p>월간 기기 업데이트는 Android 사용자의 안전을 유지하고 기기를 보호하는 데
-중요한 수단입니다. 이 페이지에는 사용 가능한 Android 보안 게시판이 포함되어
-있으며 이 게시판에서는 Android를 실행하는 기기에 영향을 줄 수 있는 발생
-가능한 문제 관련 해결 방법을 제공합니다. 다음과 같은 일부 Android 기기 및
+<p>월간 기기 업데이트는 Android 사용자의 안전을 유지하고 기기를 보호하는
+중요한 수단입니다. 이 페이지에는 Android를 실행하는 기기에 영향을 주는 발생 가능한 문제에 대한 해결 방법을 제공하는 Android 보안 게시판에 대해 알려드립니다. 다음과 같은 Android 기기 및
 칩셋 제조업체에서도 자사 제품과 관련된 보안 취약성 세부정보를 게시할 수 있습니다.</p>
 <ul>
   <li><a href="/security/bulletin/pixel/">Google</a></li>
@@ -37,7 +35,7 @@
 <h3 id="notification">알림</h3>
 <p>새로운 Android 게시판이 게시될 때 알림을 받으려면
 <a href="https://groups.google.com/forum/#!forum/android-security-updates">Android
-보안 업데이트 그룹</a>에 가입하여 이메일 전달 환경설정을 모든
+Security Updates 그룹</a>에 가입하여 이메일 전달 환경설정을 모든
 업데이트 수신으로 설정하세요.
 </p>
 
@@ -51,7 +49,7 @@
       AOSP에 병합되며 AOSP에서 바로 이용할 수 있습니다.</li>
   <li>업스트림 Linux 커널 수정사항은 출시된 후 즉시 게시판에 직접 연결되며
       게시판에서 바로 이용할 수 있습니다.</li>
-  <li>SOC 제조업체의 수정사항은 제조업체로부터 직접 받을 수 있습니다.</li>
+  <li>SOC 제조업체의 수정사항은 제조업체로부터 직접 제공됩니다.</li>
 </ul>
 <h3 id="bulletins">게시판</h3>
 
@@ -67,6 +65,22 @@
     <th>보안 패치 수준</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018년 10월</a></td>
+    <td>출시 예정
+     <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018년 10월 1일</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018년 9월</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html?hl=ko">한국어</a> /
@@ -584,7 +598,7 @@
       <a href="/security/bulletin/2015-08-01.html?hl=zh-tw">中文 (台灣)</a>
     </td>
     <td>2015년 8월 13일</td>
-    <td>N/A</td>
+    <td>해당 없음</td>
  </tr>
 </tbody></table>
 
diff --git a/ko/security/bulletin/pixel/2018-01-01.html b/ko/security/bulletin/pixel/2018-01-01.html
index e055726..5df4ad5 100644
--- a/ko/security/bulletin/pixel/2018-01-01.html
+++ b/ko/security/bulletin/pixel/2018-01-01.html
@@ -146,7 +146,7 @@
    <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libhevc/+/7c9be319a279654e55a6d757265f88c61a16a4d5">A-65034175</a></td>
    <td>ID</td>
    <td>보통</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
    <td>DoS</td>
@@ -158,7 +158,7 @@
    <td rowspan="2"><a href="https://android.googlesource.com/platform/external/aac/+/8e3be529372892e20ccf196809bc73276c822189">A-65280786</a></td>
    <td>ID</td>
    <td>보통</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
    <td>DoS</td>
@@ -170,7 +170,7 @@
    <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libavc/+/e86d3cfd2bc28dac421092106751e5638d54a848">A-63122634</a></td>
    <td>ID</td>
    <td>보통</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
    <td>DoS</td>
@@ -182,7 +182,7 @@
    <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libavc/+/42cf02965b11c397dd37a0063e683cef005bc0ae">A-64380237</a></td>
    <td>ID</td>
    <td>보통</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
    <td>DoS</td>
@@ -194,7 +194,7 @@
    <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libmpeg2/+/29a78a11844fc027fa44be7f8bd8dc1cf8bf89f6">A-64550583</a></td>
    <td>ID</td>
    <td>보통</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
    <td>DoS</td>
diff --git a/ko/security/bulletin/pixel/2018-03-01.html b/ko/security/bulletin/pixel/2018-03-01.html
index c372bb2..e0ce4c0 100644
--- a/ko/security/bulletin/pixel/2018-03-01.html
+++ b/ko/security/bulletin/pixel/2018-03-01.html
@@ -35,7 +35,7 @@
 업데이트됩니다. 모든 고객은 기기에서 이 업데이트를 수락하는 것이 좋습니다.
 </p>
 <p class="note">
-<strong>참고:</strong> Google 기기 펌웨어 이미지는 <a href="https://developers.google.com/android/nexus/images"> Google
+<strong>참고:</strong> Google 기기 펌웨어 이미지는 <a href="https://developers.google.com/android/nexus/images">Google
 개발자 사이트</a>
 에 있습니다.
 </p>
diff --git a/ko/security/bulletin/pixel/2018-04-01.html b/ko/security/bulletin/pixel/2018-04-01.html
index e06ddb0..80d105f 100644
--- a/ko/security/bulletin/pixel/2018-04-01.html
+++ b/ko/security/bulletin/pixel/2018-04-01.html
@@ -120,7 +120,7 @@
     <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libavc/+/3e3e81ede5229c5a9c6b7bf6a63844ecf07ae3ae">A-70897454</a></td>
     <td>ID</td>
     <td>보통</td>
-    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
     <td>DoS</td>
@@ -132,7 +132,7 @@
     <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libhevc/+/daaece3e79db33f6c473bb54a39933d387a9bf95">A-71766721</a></td>
     <td>ID</td>
     <td>보통</td>
-    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
     <td>DoS</td>
@@ -144,7 +144,7 @@
     <td rowspan="2"><a href="https://android.googlesource.com/platform/frameworks/av/+/12e25a753f4b6f0aa935e54bae66023bd8321598">A-72117051</a></td>
     <td>ID</td>
     <td>보통</td>
-    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1 </td>
+    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
   </tr>
   <tr>
     <td>DoS</td>
@@ -255,7 +255,7 @@
     <td>CVE-2017-17449</td>
     <td>A-70980949<br />
         <a href="https://lkml.org/lkml/2017/12/5/950">업스트림 커널</a></td>
-    <td>ID </td>
+    <td>ID</td>
     <td>보통</td>
     <td>netlink tap</td>
   </tr>
diff --git a/ko/security/bulletin/pixel/2018-06-01.html b/ko/security/bulletin/pixel/2018-06-01.html
index 604e9d5..2ae4284 100644
--- a/ko/security/bulletin/pixel/2018-06-01.html
+++ b/ko/security/bulletin/pixel/2018-06-01.html
@@ -38,7 +38,7 @@
 업데이트됩니다. 모든 고객은 기기에서 이 업데이트를 수락하는 것이 좋습니다.
 </p>
 <p class="note">
-<strong>참고:</strong> Google 기기 펌웨어 이미지는<a href="https://developers.google.com/android/images"> Google
+<strong>참고:</strong> Google 기기 펌웨어 이미지는 <a href="https://developers.google.com/android/images">Google
 개발자 사이트</a>
 에 있습니다.
 </p>
@@ -267,7 +267,7 @@
     <td>CVE-2018-9384</td>
     <td>A-74356909<br />
         <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c02433dd6de32f042cf3ffe476746b1115b8c096">Upstream kernel</a></td>
-    <td>ID </td>
+    <td>ID</td>
     <td>보통</td>
     <td>커널</td>
   </tr>
@@ -524,7 +524,7 @@
     <td>CVE-2017-15824</td>
     <td>A-68163089<a href="#asterisk">*</a><br />
         QC-CR#2107596</td>
-    <td>ID </td>
+    <td>ID</td>
     <td>보통</td>
     <td>EDK2 부트로더</td>
   </tr>
@@ -532,7 +532,7 @@
     <td>CVE-2018-5897</td>
     <td>A-70528036<a href="#asterisk">*</a><br />
         QC-CR#2172685</td>
-    <td>ID </td>
+    <td>ID</td>
     <td>보통</td>
     <td>diag</td>
   </tr>
@@ -566,7 +566,7 @@
     <td>A-68992463<br />
         <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=6ad7ccfee4f78d23b4b8f5ebda0eef54dced32e3">
 QC-CR#2107596</a></td>
-    <td>ID </td>
+    <td>ID</td>
     <td>보통</td>
     <td>부트로더</td>
   </tr>
@@ -593,7 +593,7 @@
     <td>A-74237664<br />
         <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=4cc54a30958d2a8d989364aa45a27fde3dd17352">
 QC-CR#2146949</a></td>
-    <td>EoP </td>
+    <td>EoP =</td>
     <td>보통</td>
     <td>WLAN</td>
   </tr>
@@ -601,7 +601,7 @@
     <td>CVE-2016-5342, CVE-2016-5080</td>
     <td>A-72232294<a href="#asterisk">*</a><br />
         QC-CR#1032174</td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>WLAN 드라이버</td>
   </tr>
@@ -609,7 +609,7 @@
     <td>CVE-2018-5899</td>
     <td>A-71638332<a href="#asterisk">*</a><br />
         QC-CR#1040612</td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>WLAN 드라이버</td>
   </tr>
@@ -618,7 +618,7 @@
     <td>A-71501675<br />
         <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c9c8de8000ff32f8d1e24e697d861d92d8ed0b7a">
 QC-CR#2127348</a></td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>부트로더</td>
   </tr>
@@ -627,7 +627,7 @@
     <td>A-71501674<br />
         <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=a95ca8e2eeb8a030e977f033cff122cad408158c">
 QC-CR#2127341</a></td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>부트로더</td>
   </tr>
@@ -636,7 +636,7 @@
     <td>A-71501672<br />
         <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=5388803fa6d004382f4a857056ce06d963698d9c">
 QC-CR#2127312</a></td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>부트로더</td>
   </tr>
@@ -645,7 +645,7 @@
     <td>A-71501669<br />
         <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c8415f6f2271008aef5056689950236df627d9b1">
 QC-CR#2127305</a></td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>부트로더</td>
   </tr>
@@ -653,7 +653,7 @@
     <td>CVE-2018-5898</td>
     <td>A-71363804<a href="#asterisk">*</a><br />
         QC-CR#2173850</td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>QC 오디오 드라이버</td>
   </tr>
@@ -661,7 +661,7 @@
     <td>CVE-2018-5832</td>
     <td>A-69065862<a href="#asterisk">*</a><br />
         QC-CR#2149998</td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>Camerav2</td>
   </tr>
@@ -678,7 +678,7 @@
     <td>A-74237782<br />
         <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=e569b915a246627d0449016408a9c0d388ee4ab4">
 QC-CR#2143070</a></td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>DSP_Services</td>
   </tr>
@@ -687,7 +687,7 @@
     <td>A-72957546<br />
         <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=782cd411398e3cf2aca1615ab2649df0c46920ee">
 QC-CR#2062648</a></td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>DSP_Services</td>
   </tr>
@@ -740,7 +740,8 @@
 
 <h2 id="functional-patches">기능 패치</h2>
 <p>
-다음 업데이트는 영향을 받은 Pixel 기기에서 Pixel 기기의 보안과 관련되지 않은 기능 문제를 해결하기 위해 포함되었습니다. 표에는 관련 참조,
+다음 업데이트는 영향을 받은 Pixel 기기에서 Pixel 기기의 보안과 관련되지 않은 기능
+문제를 해결하기 위해 포함되었습니다. 표에는 관련 참조,
 블루투스나 모바일 데이터 등 영향을 받은 카테고리, 개선 사항, 영향을 받은 기기가
 포함되어 있습니다.
 </p>
diff --git a/ko/security/bulletin/pixel/2018-08-01.html b/ko/security/bulletin/pixel/2018-08-01.html
index f4b707f..e460922 100644
--- a/ko/security/bulletin/pixel/2018-08-01.html
+++ b/ko/security/bulletin/pixel/2018-08-01.html
@@ -35,7 +35,8 @@
 업데이트됩니다. 모든 고객은 기기에서 이 업데이트를 수락하는 것이 좋습니다.
 </p>
 <p class="note">
-<strong>참고:</strong> Google 기기 펌웨어 이미지는 <a href="https://developers.google.com/android/images" class="external">Google 개발자 사이트</a>
+<strong>참고:</strong> Google 기기 펌웨어 이미지는 <a href="https://developers.google.com/android/images" class="external">Google
+개발자 사이트</a>
 에 있습니다.
 </p>
 
@@ -52,7 +53,7 @@
 문제 설명 및 CVE, 관련 참조,
 <a href="#type">취약성 유형</a>,
 <a href="/security/overview/updates-resources.html#severity">심각도</a>,
-업데이트된 AOSP 버전(해당하는 경우)이 포함된 표가 제시됩니다.
+업데이트된 Android 오픈소스 프로젝트(AOSP) 버전(해당하는 경우)이 포함된 표가 제시됩니다.
 가능한 경우 AOSP 변경사항 목록과 같이 문제를 해결한 공개 변경사항을 버그 ID에
 연결합니다. 하나의 버그와 관련된 변경사항이 여러 개인 경우
 추가 참조가 버그 ID 다음에 오는 번호에 연결됩니다.
@@ -206,7 +207,7 @@
     <td>A-77902350<br />
         <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b71812168571fa55e44cdd0254471331b9c4c4c6">
 업스트림 커널</a></td>
-    <td>EoP </td>
+    <td>EoP</td>
     <td>보통</td>
     <td>넷필터</td>
   </tr>
@@ -541,7 +542,7 @@
   </colgroup><tbody><tr>
    <th>버전</th>
    <th>날짜</th>
-   <th>참고</th>
+   <th>참고사항</th>
   </tr>
   <tr>
    <td>1.0</td>
diff --git a/ko/security/bulletin/pixel/2018-09-01.html b/ko/security/bulletin/pixel/2018-09-01.html
index 0678773..0ec377f 100644
--- a/ko/security/bulletin/pixel/2018-09-01.html
+++ b/ko/security/bulletin/pixel/2018-09-01.html
@@ -24,8 +24,7 @@
 
 <p>
 Pixel&amp;hairsp;/&amp;hairsp;Nexus 보안 게시판에서는 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">지원되는
-Google Pixel 및 Nexus 기기</a>(Google 기기)에 영향을 미치는
-보안 취약성 및 기능 개선을 자세히 다룹니다.
+Google Pixel 및 Nexus 기기</a>(Google 기기)에 영향을 미치는 보안 취약성 및 기능 개선을 자세히 다룹니다.
 Google 기기의 경우 2018-09-05 보안 패치 수준 이상에서 이 게시판에 언급된 모든 문제와 2018년 9월 Android 보안 게시판의
 모든 문제를
 해결했습니다. 기기의 보안 패치 수준을 확인하는 방법은 <a href="https://support.google.com/pixelphone/answer/4457705" class="external">Android 버전 확인 및 업데이트</a>를 참조하세요.
@@ -43,7 +42,9 @@
 <h2 id="announcements">공지사항</h2>
 <p>2018년 9월 Android 보안 게시판
 에 설명된 보안 취약성 외에도
-Google 기기에는 아래 설명된 보안 취약성과 관련된 패치도 포함되어 있습니다. 파트너에게는 적어도 1개월 전에 이러한 문제와 관련해 알림이 전송되었으며 파트너는 이러한 패치를 기기 업데이트의 일부로 포함하도록 선택할 수 있습니다.</p>
+Google 기기에는 아래 설명된 보안 취약성과 관련된 패치도 포함되어 있습니다. 파트너에게는 적어도 1개월 전에 이러한
+문제와 관련해 알림이 전송되었으며 파트너는 이러한 패치를 기기 업데이트의
+일부로 포함하도록 선택할 수 있습니다.</p>
 
 <h2 id="security-patches">보안 패치</h2>
 <p>
@@ -85,7 +86,7 @@
     <td>A-69808833<a href="#asterisk">*</a></td>
     <td>EoP</td>
     <td>보통</td>
-    <td>이젤</td>
+    <td>Easel</td>
   </tr>
   <tr>
     <td>CVE-2018-9516</td>
@@ -93,7 +94,7 @@
         <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=717adfdaf14704fd3ec7fa2c04520c0723247eac">업스트림 커널</a></td>
     <td>EoP</td>
     <td>보통</td>
-    <td>HID 디버그 드라이버</td>
+    <td>HID 디버그 드라이브</td>
   </tr>
   <tr>
     <td>CVE-2018-9518</td>
@@ -215,7 +216,8 @@
 
 <h2 id="functional-patches">기능 패치</h2>
 <p>
-다음 업데이트는 영향을 받은 Pixel 기기에서 Pixel 기기의 보안과 관련되지 않은 기능 문제를 해결하기 위해 포함되었습니다. 표에는 관련 참조,
+다음 업데이트는 영향을 받은 Pixel 기기에서 Pixel 기기의 보안과 관련되지 않은 기능
+문제를 해결하기 위해 포함되었습니다. 표에는 관련 참조,
 블루투스나 모바일 데이터 등 영향을 받은 카테고리, 개선 사항, 영향을 받은 기기가
 포함되어 있습니다.
 </p>
diff --git a/ko/security/bulletin/pixel/2018-10-01.html b/ko/security/bulletin/pixel/2018-10-01.html
new file mode 100644
index 0000000..0d29c3d
--- /dev/null
+++ b/ko/security/bulletin/pixel/2018-10-01.html
@@ -0,0 +1,211 @@
+<html devsite><head>
+    <title>Pixel / Nexus 보안 게시판—2018년 10월</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>2018년 10월 2일 게시됨</em></p>
+
+<p>
+Pixel&amp;hairsp;/&amp;hairsp;Nexus 보안 게시판에서는 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">지원되는
+Google Pixel 및 Nexus 기기</a>(Google 기기)에 영향을 미치는
+보안 취약성 및 기능 개선을 자세히 다룹니다.
+Google 기기의 경우 2018-10-05 보안 패치 수준 이상에서 이 게시판에 언급된 모든 문제와 2018년 10월 Android 보안 게시판의
+모든 문제를
+해결했습니다. 기기의 보안 패치 수준을 확인하는 방법은 <a href="https://support.google.com/pixelphone/answer/4457705" class="external">Android 버전 확인 및 업데이트</a>를 참조하세요.
+</p>
+<p>
+지원되는 모든 Google 기기는 2018-10-05 패치 수준으로
+업데이트됩니다. 모든 고객은 기기에서 이 업데이트를 수락하는 것이 좋습니다.
+</p>
+<p class="note">
+<strong>참고:</strong> Google 기기 펌웨어 이미지는 <a href="https://developers.google.com/android/images" class="external">Google
+개발자 사이트</a>
+에 있습니다.
+</p>
+
+<h2 id="announcements">공지사항</h2>
+
+<p>2018년 Pixel&amp;hairsp;/&amp;hairsp;Nexus
+   보안 게시판에 Pixel 또는 Nexus 보안 패치가 없습니다.
+</p>
+
+<h2 id="functional-patches">기능 패치</h2>
+<p>
+다음 업데이트는 영향을 받은 Pixel 기기에서 Pixel 기기의 보안과 관련되지 않은 기능 문제를 해결하기 위해 포함되었습니다. 표에는 관련 참조,
+블루투스나 모바일 데이터 등 영향을 받은 카테고리, 개선 사항, 영향을 받은 기기가
+포함되어 있습니다.
+</p>
+
+<table>
+  <tbody><tr>
+   <th>참조</th>
+   <th>카테고리</th>
+   <th>개선 사항</th>
+   <th>기기</th>
+  </tr>
+  <tr>
+   <td>A-112486006</td>
+   <td>미디어</td>
+   <td>특정 보호된 미디어 형식의 성능 개선</td>
+   <td>Pixel 2, Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-112529920</td>
+   <td>힘</td>
+   <td>Pixel 기기의 급속 충전 동작 개선</td>
+   <td>Pixel, Pixel XL</td>
+  </tr>
+  <tr>
+   <td>A-79643956</td>
+   <td>안정성</td>
+   <td>Android Auto 사용 시 안정성 개선</td>
+   <td>Pixel 2, Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-111467967</td>
+   <td>성능</td>
+   <td>지도/내비게이션 사용 시 선택 통화 동작 수정</td>
+   <td>모두</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">일반적인 질문 및 답변</h2>
+<p>
+이 섹션에서는 게시판을 읽은 뒤 제기될 수 있는 일반적인 질문의 답변을
+제시합니다.
+</p>
+<p>
+<strong>1. 내 기기가 업데이트되어 이 문제가 해결되었는지 어떻게 알 수 있나요?
+</strong>
+</p>
+<p>
+2018-10-05 보안 패치 수준 및 그 이전의 모든 패치 수준과 관련된
+문제는 2018-10-05 보안 패치 수준 이상에서 모두 해결됩니다. 기기의
+보안 패치 수준을 확인하는 방법을 알아보려면 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Pixel 및 Nexus 업데이트 일정</a>의 안내를 참조하세요.
+</p>
+<p id="type">
+<strong>2. <em>유형</em> 열의 항목은 무엇을 의미하나요?</strong>
+</p>
+<p>
+취약성 세부정보 표의 <em>유형</em> 열에 있는 항목은
+보안 취약성 분류를 참조합니다.
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>약어</th>
+   <th>정의</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>원격 코드 실행</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>권한 승격</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>정보 공개</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>서비스 거부</td>
+  </tr>
+  <tr>
+   <td>N/A</td>
+   <td>분류 없음</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>3. <em>참조</em> 열의 항목은 무엇을 의미하나요?</strong>
+</p>
+<p>
+취약성 세부정보 표의 <em>참조</em> 열에 있는 항목은
+참조 값이 속한 조직을 나타내는 접두어를 포함할 수
+있습니다.
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>접두어</th>
+   <th>참조</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android 버그 ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm 참조 번호</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek 참조 번호</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA 참조 번호</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom 참조 번호</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>4. <em>참조</em> 열에서 Android 버그 ID 옆에 있는 * 표시는
+무엇을 의미하나요?</strong>
+</p>
+<p>
+공개되지 않은 문제는 <em>참조</em> 열의 Android 버그 ID 옆에 * 표시가
+있습니다. 일반적으로 이러한 문제에 관한 업데이트는 <a href="https://developers.google.com/android/nexus/drivers" class="external">Google
+개발자 사이트</a>에서 제공되는 Pixel / Nexus 기기용 최신 바이너리
+드라이버에 포함되어 있습니다.
+</p>
+<p>
+<strong>5 보안 취약성이 이 게시판과 Android 보안 게시판에 나뉘어져 있는 이유가
+무엇인가요?</strong>
+</p>
+<p>
+Android 보안 게시판에 설명되어 있는 보안 취약성은
+Android 기기의 최신 보안 패치 수준을 선언하는 데
+필요합니다. 이 게시판에 설명된 것과 같은 추가적인 보안 취약성은
+보안 패치 수준을 선언하는 데 필요하지 않습니다.
+</p>
+<h2 id="versions">버전</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>버전</th>
+   <th>날짜</th>
+   <th>참고사항</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018년 10월 1일</td>
+   <td>게시판이 게시됨</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/ko/security/bulletin/pixel/2018.html b/ko/security/bulletin/pixel/2018.html
index 3e798eb..91f0ebf 100644
--- a/ko/security/bulletin/pixel/2018.html
+++ b/ko/security/bulletin/pixel/2018.html
@@ -37,6 +37,21 @@
     <th>보안 패치 수준</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018년 10월</a></td>
+    <td>출시 예정
+     <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018년 10월 1일</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018년 9월</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html?hl=ko">한국어</a> /
diff --git a/ko/security/bulletin/pixel/index.html b/ko/security/bulletin/pixel/index.html
index 535ede9..a84bf38 100644
--- a/ko/security/bulletin/pixel/index.html
+++ b/ko/security/bulletin/pixel/index.html
@@ -57,6 +57,21 @@
     <th>보안 패치 수준</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018년 10월</a></td>
+    <td>출시 예정
+     <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018년 10월 1일</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018년 9월</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html?hl=ko">한국어</a> /
diff --git a/ru/security/bulletin/2018-07-01.html b/ru/security/bulletin/2018-07-01.html
index c963234..0724da9 100644
--- a/ru/security/bulletin/2018-07-01.html
+++ b/ru/security/bulletin/2018-07-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Android – июль 2018 г.</title>
+    <title>Бюллетень по безопасности Android – июль 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -35,7 +35,7 @@
 У нас нет информации о том, что обнаруженные уязвимости эксплуатировались. В разделе <a href="#mitigations">Предотвращение атак</a> рассказывается, как <a href="/security/enhancements/index.html">платформа безопасности</a> и Google Play Защита помогают снизить вероятность атак на Android.
 </p>
 <p class="note">
-<strong>Примечание.</strong> Информация о последних автоматических обновлениях (OTA) и образах встроенного ПО для устройств Google содержится в <a href="/security/bulletin/pixel/2018-07-01.html">бюллетене по безопасности Pixel  и Nexus</a> за июль 2018 года.
+<strong>Примечание.</strong> Информация о последних автоматических обновлениях (OTA) и образах встроенного ПО для устройств Google содержится в <a href="/security/bulletin/pixel/2018-07-01.html">бюллетене по безопасности Pixel  и Nexus</a> за июль 2018 года.
 </p>
 
 <h2 id="mitigations">Предотвращение атак</h2>
diff --git a/ru/security/bulletin/2018-08-01.html b/ru/security/bulletin/2018-08-01.html
index 25e043e..b790158 100644
--- a/ru/security/bulletin/2018-08-01.html
+++ b/ru/security/bulletin/2018-08-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Android – август 2018 г.</title>
+    <title>Бюллетень по безопасности Android – август 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -35,12 +35,12 @@
 У нас нет информации о том, что обнаруженные уязвимости эксплуатировались. В разделе <a href="#mitigations">Предотвращение атак</a> рассказывается, как <a href="/security/enhancements/index.html">платформа безопасности</a> и Google Play Защита помогают снизить вероятность атак на Android.
 </p>
 <p class="note">
-<strong>Примечание.</strong> Информация о последних автоматических обновлениях (OTA) и образах встроенного ПО для устройств Google содержится в <a href="/security/bulletin/pixel/2018-08-01.html">бюллетене по безопасности Pixel  и Nexus</a> за август 2018 г.
+<strong>Примечание.</strong> Информация о последних автоматических обновлениях (OTA) и образах встроенного ПО для устройств Google содержится в <a href="/security/bulletin/pixel/2018-08-01.html">бюллетене по безопасности Pixel  и Nexus</a> за август 2018 г.
 </p>
 
 <h2 id="mitigations">Предотвращение атак</h2>
 <p>
-Ниже рассказано о том, как <a href="/security/enhancements/index.html">платформа безопасности</a> и средства защиты сервисов, например <a href="https://www.android.com/play-protect">Google Play Защита</a>,
+Ниже рассказывается, как <a href="/security/enhancements/index.html">платформа безопасности</a> и средства защиты сервисов, например <a href="https://www.android.com/play-protect">Google Play Защита</a>,
 позволяют снизить вероятность атак на Android.
 </p>
 <ul>
@@ -566,7 +566,7 @@
   </tr>
 </tbody></table>
 <p>
-<strong>4. На что указывают записи в столбце <em>Ссылки</em>?</strong>
+<strong>4. Что означает информация в столбце <em>Ссылки</em>?</strong>
 </p>
 <p>
 В таблицах с описанием уязвимостей есть столбец <em>Ссылки</em>. Каждая запись в нем может содержать префикс, указывающий на источник ссылки, а именно:
@@ -600,10 +600,10 @@
   </tr>
 </tbody></table>
 <p id="asterisk">
-<strong>5. Что означает символ * рядом с идентификатором ошибки Android в столбце <em>Ссылки</em>?</strong>
+<strong>5. Что означает символ * рядом с идентификатором ошибки Android в столбце <em>Ссылки</em>?</strong>
 </p>
 <p>
-Символ * означает, что исправление для уязвимости не опубликовано.<em></em> Необходимое обновление содержится в последних бинарных драйверах для устройств Pixel и Nexus, которые можно скачать на <a href="https://developers.google.com/android/drivers" class="external">сайте Google Developers</a>.
+Символ * означает, что исправление для уязвимости не опубликовано.<em></em> Необходимое обновление содержится в последних бинарных драйверах для устройств Pixel и Nexus, которые можно скачать на <a href="https://developers.google.com/android/drivers" class="external">сайте Google Developers</a>.
 </p>
 <p>
 <strong>6. Почему теперь одни уязвимости описываются в этих бюллетенях, а другие – в бюллетенях по безопасности Pixel  и Nexus, а также в остальных бюллетенях партнеров?</strong>
diff --git a/ru/security/bulletin/2018-09-01.html b/ru/security/bulletin/2018-09-01.html
index 7ef663c..bd39185 100644
--- a/ru/security/bulletin/2018-09-01.html
+++ b/ru/security/bulletin/2018-09-01.html
@@ -47,7 +47,7 @@
 </ul>
 <h2 id="2018-09-01-details">Описание уязвимостей (обновление системы безопасности 2018-09-01)</h2>
 <p>
-В этом разделе вы найдете подробную информацию обо всех уязвимостях, устраненных в обновлении системы безопасности 2018-09-01. Проблемы сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, идентификаторы ошибки содержат ссылку на опубликованное изменение (например, список AOSP). Дополнительные ссылки перечислены в квадратных скобках.
+В этом разделе вы найдете подробную информацию обо всех уязвимостях, устраненных в обновлении системы безопасности 2018-09-01. Проблемы сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, идентификаторы ошибки содержат ссылку на опубликованное изменение (например, список AOSP). Когда несколько изменений относятся к одной ошибке, дополнительные ссылки перечислены в квадратных скобках.
 </p>
 
 <h3 id="android-runtime">Android Runtime</h3>
@@ -78,7 +78,7 @@
    <td><a href="https://android.googlesource.com/platform/libcore/+/518e8d27de9f32eb86bc3090ee2759ea93b9fb93" class="external">A-110955991</a></td>
    <td>ПП</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -103,21 +103,21 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/623b2b604c4ffcd48f137379d6934537510665bf" class="external">A-109824443</a></td>
    <td>ПП</td>
    <td>Высокий</td>
-   <td>7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9470</td>
    <td><a href="https://android.googlesource.com/platform/external/neven/+/86a561f79f97baa38e240f6296fe1192fa4a5c9c" class="external">A-78290481</a></td>
    <td>ПП</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9471</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/eabaff1c7f02906e568997bdd7dc43006655387e" class="external">A-77599679</a></td>
    <td>ПП</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -167,14 +167,14 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/586b9102f322731d604e6280143e16cb6f1c9f76" class="external">A-77600398</a></td>
    <td>ПП</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9440</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/8033f4a227e03f97a0f1d9975dc24bcb4ca61f74" class="external">A-77823362</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/2870acaa4c58cf59758a74b6390615a421f14268" class="external">2</a>]</td>
    <td>ОО</td>
    <td>Средний</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -199,21 +199,21 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/43cd528a444d0cc5bbf3beb22cd583289bcf7334" class="external">A-79266386</a></td>
    <td>ПП</td>
    <td>Критический</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9478</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217522</a></td>
    <td>ПП</td>
    <td>Критический</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9479</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217770</a></td>
    <td>ПП</td>
    <td>Критический</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9456</td>
@@ -234,63 +234,63 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757168</a></td>
    <td>РИ</td>
    <td>Высокий</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9481</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757435</a></td>
    <td>РИ</td>
    <td>Высокий</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9482</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757986</a></td>
    <td>РИ</td>
    <td>Высокий</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9483</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d3689fb0ddcdede16c13250a7a30ca76b113c9c1" class="external">A-110216173</a></td>
    <td>РИ</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9484</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d5b44f6522c3294d6f5fd71bc6670f625f716460" class="external">A-79488381</a></td>
    <td>РИ</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9485</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bdbabb2ca4ebb4dc5971d3d42cb12f8048e23a23" class="external">A-80261585</a></td>
    <td>РИ</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9486</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bc6aef4f29387d07e0c638c9db810c6c1193f75b" class="external">A-80493272</a></td>
    <td>РИ</td>
    <td>Высокий</td>
-   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9487</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/cf6784bfbf713aaa54d8da77e9481b3f02784246" class="external">A-69873852</a></td>
    <td>ОО</td>
    <td>Высокий</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9488</td>
    <td><a href="https://android.googlesource.com/platform/system/sepolicy/+/d4e094e2b1a47c1fea1799d9fade19e953a7ca1b" class="external">A-110107376</a></td>
    <td>ПП</td>
    <td>Средний</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -315,14 +315,14 @@
    <td><a href="https://android.googlesource.com/platform/system/libhidl/+/93484b9b015d47c0f7e5f4449a214b2fed8bed4f" class="external">A-79376389</a></td>
    <td>УВК</td>
    <td>Критический</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
   <tr>
    <td>CVE-2018-9427</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/29d991fac25b261a72ce73f96c9df594ea5b9242" class="external">A-77486542</a></td>
    <td>УВК</td>
    <td>Критический</td>
-   <td>8.0, 8.1, 9.0</td>
+   <td>8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
@@ -352,7 +352,7 @@
     <td><a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/544294737dfc3b585465302f1f784a311659a37c#" class="external">A-111084083</a></td>
     <td>РИ</td>
     <td>Высокий</td>
-    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+    <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
   </tr>
 </tbody></table>
 
diff --git a/ru/security/bulletin/2018-10-01.html b/ru/security/bulletin/2018-10-01.html
new file mode 100644
index 0000000..d2dddd1
--- /dev/null
+++ b/ru/security/bulletin/2018-10-01.html
@@ -0,0 +1,439 @@
+<html devsite><head>
+    <title>Бюллетень по безопасности Android – октябрь 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>Опубликовано 1 октября 2018 г. | Обновлено 1 октября 2018 г.</em></p>
+
+<p>
+В этом бюллетене содержится информация об уязвимостях в защите устройств Android. Все актуальные проблемы, перечисленные здесь, устранены в исправлении от 5 октября 2018 года или более новом. Информацию о том, как проверить обновления системы безопасности, можно найти в <a href="https://support.google.com/pixelphone/answer/4457705" class="external">Справочном центре</a>.
+</p>
+<p>
+Мы сообщили партнерам обо всех проблемах по крайней мере за месяц до выхода бюллетеня. Исправления уязвимостей доступны в хранилище Android Open Source Project (AOSP).
+В бюллетене также приведены ссылки на исправления вне AOSP.</p>
+<p>
+Самая серьезная из проблем – критическая уязвимость в Framework, которая позволяет злоумышленнику выполнять произвольный код в контексте привилегированного процесса с помощью специально созданного файла. <a href="/security/overview/updates-resources.html#severity">Уровень серьезности</a> зависит от того, какой ущерб будет нанесен устройству при атаке с использованием уязвимости, если средства защиты будут отключены разработчиком или взломаны.
+</p>
+<p>
+У нас нет информации о том, что обнаруженные уязвимости эксплуатировались. В разделе <a href="#mitigations">Предотвращение атак</a> рассказывается, как <a href="/security/enhancements/">платформа безопасности</a> и Google Play Защита помогают снизить вероятность атак на Android.
+</p>
+<p class="note">
+<strong>Примечание.</strong> Информация о последних автоматических обновлениях (OTA) и образах встроенного ПО для устройств Google содержится в <a href="/security/bulletin/pixel/2018-10-01">бюллетене по безопасности Pixel  и Nexus</a> за октябрь 2018 г.
+</p>
+
+<h2 id="mitigations">Предотвращение атак</h2>
+<p>
+Ниже рассказывается, как <a href="/security/enhancements/">платформа безопасности</a> и средства защиты сервисов, например <a href="https://www.android.com/play-protect" class="external">Google Play Защита,</a> позволяют снизить вероятность атак на Android.
+</p>
+<ul>
+<li>В новых версиях Android сложнее использовать многие уязвимости, поэтому мы рекомендуем всем пользователям своевременно обновлять систему.</li>
+<li>Команда, отвечающая за безопасность Android, с помощью <a href="https://www.android.com/play-protect" class="external">Google Play Защиты</a> активно отслеживает злоупотребления и предупреждает пользователей об установке <a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">потенциально опасных приложений</a>. Google Play Защита включена по умолчанию на всех телефонах и планшетах, использующих <a href="http://www.android.com/gms" class="external">сервисы Google для мобильных устройств</a>. Она особенно важна, если устанавливается ПО из сторонних источников.</li>
+</ul>
+<h2 id="2018-10-01-details">Описание уязвимостей (обновление системы безопасности 2018-10-01)</h2>
+<p>
+В этом разделе вы найдете подробную информацию обо всех уязвимостях, устраненных в обновлении системы безопасности 2018-10-01. Проблемы сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, идентификаторы ошибки содержат ссылку на опубликованное изменение (например, список AOSP). Когда несколько изменений относятся к одной ошибке, дополнительные ссылки перечислены в квадратных скобках.
+</p>
+
+<h3 id="framework">Framework</h3>
+<p>Самая серьезная уязвимость позволяет злоумышленнику выполнять произвольный код в контексте привилегированного процесса с помощью специально созданного файла.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>Ссылки</th>
+    <th>Тип</th>
+    <th>Уровень серьезности</th>
+    <th>Обновленные версии AOSP</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9490</td>
+   <td><a href="https://android.googlesource.com/platform/external/chromium-libpac/+/948d4753664cc4e6b33cc3de634ac8fd5f781382">A-111274046</a> [<a href="https://android.googlesource.com/platform/external/v8/+/a24543157ae2cdd25da43e20f4e48a07481e6ceb">2</a>]</td>
+   <td>ПП</td>
+   <td>Критический</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9491</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/2b4667baa5a2badbdfec1794156ee17d4afef37c">A-111603051</a></td>
+   <td>УВК</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9492</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/962fb40991f15be4f688d960aa00073683ebdd20">A-111934948</a></td>
+   <td>ПП</td>
+   <td>Высокий</td>
+   <td>8.0, 8.1, 9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9493</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/462aaeaa616e0bb1342e8ef7b472acc0cbc93deb">A-111085900</a> [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/e7364907439578ce5334bce20bb03fef2e88b107">2</a>] [<a href="https://android.googlesource.com/platform/frameworks/base/+/ebc250d16c747f4161167b5ff58b3aea88b37acf">3</a>]</td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9452</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/54f661b16b308cf38d1b9703214591c0f83df64d">A-78464361</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/3b6f84b77c30ec0bab5147b0cffc192c86ba2634">2</a>]</td>
+   <td>ОО</td>
+   <td>Средний</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+</tbody></table>
+
+<h3 id="media-framework">Media Framework</h3>
+<p>Самая серьезная уязвимость позволяет злоумышленнику выполнять произвольный код в контексте привилегированного процесса с помощью специально созданного файла.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>Ссылки</th>
+    <th>Тип</th>
+    <th>Уровень серьезности</th>
+    <th>Обновленные версии AOSP</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9473</td>
+   <td><a href="https://android.googlesource.com/platform/external/libhevc/+/9f0fb67540d2259e4930d9bd5f1a1a6fb95af862">A-65484460</a></td>
+   <td>УВК</td>
+   <td>Критический</td>
+   <td>8.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9496</td>
+   <td><a href="https://android.googlesource.com/platform/external/libxaac/+/04e8cd58f075bec5892e369c8deebca9c67e855c">A-110769924</a></td>
+   <td>УВК</td>
+   <td>Критический</td>
+   <td>9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9497</td>
+   <td><a href="https://android.googlesource.com/platform/external/libmpeg2/+/bef16671c891e16f25a7b174bc528eea109357be">A-74078669</a></td>
+   <td>УВК</td>
+   <td>Критический</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9498</td>
+   <td><a href="https://android.googlesource.com/platform/external/skia/+/77c955200ddd1761d6ed7a6c1578349fedbb55e4">A-78354855</a></td>
+   <td>УВК</td>
+   <td>Критический</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9499</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/bf7a67c33c0f044abeef3b9746f434b7f3295bb1">A-79218474</a></td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+</tbody></table>
+
+<h3 id="system">Система</h3>
+<p>Самая серьезная уязвимость позволяет находящемуся поблизости злоумышленнику выполнять произвольный код в контексте привилегированного процесса.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>Ссылки</th>
+    <th>Тип</th>
+    <th>Уровень серьезности</th>
+    <th>Обновленные версии AOSP</th>
+  </tr>
+  <tr>
+   <td>CVE-2017-13283</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/ebc284cf3a59ee5cf7c06af88c2f3bcd0480e3e9">A-78526423</a></td>
+   <td>УВК</td>
+   <td>Критический</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9476</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/dd28d8ddf2985d654781770c691c60b45d7f32b4">A-109699112</a></td>
+   <td>ПП</td>
+   <td>Критический</td>
+   <td>8.0, 8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9504</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/11fb7aa03437eccac98d90ca2de1730a02a515e2">A-110216176</a></td>
+   <td>УВК</td>
+   <td>Критический</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9501</td>
+   <td><a href="https://android.googlesource.com/platform/packages/apps/Settings/+/5e43341b8c7eddce88f79c9a5068362927c05b54">A-110034419</a></td>
+   <td>ПП</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9502</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-111936792</a> [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>] [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9503</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-80432928</a> [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>] [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9505</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/5216e6120160b28d76e9ee4dff9995e772647511">A-110791536</a></td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9506</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/830cb39cb2a0f1bf6704d264e2a5c5029c175dd7">A-111803925</a></td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9507</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/30cec963095366536ca0b1306089154e09bfe1a9">A-111893951</a></td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9508</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/e8bbf5b0889790cf8616f4004867f0ff656f0551">A-111936834</a></td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9509</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/198888b8e0163bab7a417161c63e483804ae8e31">A-111937027</a></td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9510</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/6e4b8e505173f803a5fc05abc09f64eef89dc308">A-111937065</a></td>
+   <td>РИ</td>
+   <td>Высокий</td>
+   <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9511</td>
+   <td><a href="https://android.googlesource.com/platform/system/netd/+/931418b16c7197ca2df34c2a5609e49791125abe">A-111650288</a></td>
+   <td>ОО</td>
+   <td>Высокий</td>
+   <td>9.0</td>
+  </tr>
+</tbody></table>
+
+<h2 id="2018-10-05-details">Описание уязвимостей (обновление системы безопасности 2018-10-05)</h2>
+<p>
+В этом разделе вы найдете подробную информацию обо всех уязвимостях, устраненных в обновлении системы безопасности 2018-10-05. Проблемы сгруппированы по компонентам, которые они затрагивают. Для каждого приведена таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, идентификаторы ошибки содержат ссылку на опубликованное изменение (например, список AOSP). Когда несколько изменений относятся к одной ошибке, дополнительные ссылки перечислены в квадратных скобках.
+</p>
+
+<h3 id="kernel-components">Компоненты ядра</h3>
+<p>Самая серьезная уязвимость позволяет локальному вредоносному ПО выполнять произвольный код в контексте привилегированного процесса.</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>Ссылки</th>
+    <th>Тип</th>
+    <th>Уровень серьезности</th>
+    <th>Компонент</th>
+  </tr>
+  <tr>
+    <td>CVE-2018-9513</td>
+    <td>A-111081202<a href="#asterisk">*</a></td>
+    <td>ПП</td>
+    <td>Высокий</td>
+    <td>fork</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9514</td>
+    <td>A-111642636<a href="#asterisk">*</a></td>
+    <td>ПП</td>
+    <td>Высокий</td>
+    <td>SDCardFS</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9515</td>
+    <td>A-111641492<a href="#asterisk">*</a></td>
+    <td>ПП</td>
+    <td>Высокий</td>
+    <td>SDCardFS</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">Часто задаваемые вопросы</h2>
+<p>В этом разделе мы отвечаем на вопросы, которые могут возникнуть после прочтения бюллетеня.</p>
+<p><strong>1. Как определить, установлено ли на устройство обновление, в котором устранены перечисленные проблемы?</strong></p>
+<p>Информацию о том, как проверить обновления системы безопасности, можно найти в <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Справочном центре</a>.</p>
+<ul>
+<li>В исправлении от 1 октября 2018 года или более новом устранены все проблемы, связанные с обновлением 2018-10-01.</li>
+<li>В исправлении от 5 октября 2018 года или более новом устранены все проблемы, связанные с обновлением 2018-10-05.</li>
+</ul>
+<p>Производители устройств, позволяющие установить эти обновления, должны присвоить им один из этих уровней:</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2018-10-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-10-05]</li>
+</ul>
+<p><strong>2. Почему в этом бюллетене говорится о двух обновлениях системы безопасности?</strong></p>
+<p>
+Мы включили в этот бюллетень сведения о двух обновлениях, чтобы помочь нашим партнерам как можно скорее устранить уязвимости, затрагивающие все устройства Android. Рекомендуем партнерам Android исправить все вышеперечисленные проблемы и установить последнее обновление системы безопасности.
+</p>
+<ul>
+<li>На устройствах с установленным обновлением 2018-10-01 должны быть исправлены все проблемы, упомянутые в соответствующем разделе этого бюллетеня, а также в предыдущих выпусках.</li>
+<li>На устройствах с установленным обновлением 2018-10-05 или более новым должны быть исправлены все проблемы, упомянутые в этом бюллетене и предыдущих выпусках.</li>
+</ul>
+<p>
+Рекомендуем партнерам собрать все исправления проблем в одно обновление.
+</p>
+<p id="type">
+<strong>3. Что означают сокращения в столбце <em>Тип</em>?</strong>
+</p>
+<p>
+В этом столбце указан тип уязвимости по следующей классификации:<em></em>
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>Сокращение</th>
+   <th>Описание</th>
+  </tr>
+  <tr>
+   <td>УВК</td>
+   <td>Удаленное выполнение кода</td>
+  </tr>
+  <tr>
+   <td>ПП</td>
+   <td>Повышение привилегий</td>
+  </tr>
+  <tr>
+   <td>РИ</td>
+   <td>Раскрытие информации</td>
+  </tr>
+  <tr>
+   <td>ОО</td>
+   <td>Отказ в обслуживании</td>
+  </tr>
+  <tr>
+   <td>Н/Д</td>
+   <td>Классификация недоступна</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>4. Что означает информация в столбце <em>Ссылки</em>?</strong>
+</p>
+<p>
+В таблицах с описанием уязвимостей есть столбец <em>Ссылки</em>. Каждая запись в нем может содержать префикс, указывающий на источник ссылки, а именно:
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>Префикс</th>
+   <th>Значение</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Идентификатор ошибки Android</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Ссылочный номер Qualcomm</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>Ссылочный номер MediaTek</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>Ссылочный номер NVIDIA</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Ссылочный номер Broadcom</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>5. Что означает символ * рядом с идентификатором ошибки Android в столбце <em>Ссылки</em>?</strong>
+</p>
+<p>
+Символ * означает, что исправление для уязвимости не опубликовано.<em></em> Необходимое обновление содержится в последних бинарных драйверах для устройств Pixel и Nexus, которые можно скачать на <a href="https://developers.google.com/android/drivers" class="external">сайте Google Developers</a>.
+</p>
+<p>
+<strong>6. Почему теперь одни уязвимости описываются в этих бюллетенях, а другие – в бюллетенях по безопасности Pixel  и Nexus, а также в остальных бюллетенях партнеров?</strong>
+</p>
+<p>
+В этом бюллетене описаны уязвимости, которые были устранены в последнем обновлении системы безопасности для устройств Android. Решать дополнительные проблемы, перечисленные в бюллетенях по безопасности партнеров, для этого не потребовалось. Мы рекомендуем производителям чипсетов и устройств Android рассказывать об исправлениях для своих устройств в бюллетенях по безопасности на собственных сайтах, например <a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>, <a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a>, а также <a href="/security/bulletin/pixel/" class="external">Pixel  и Nexus</a>.
+</p>
+
+<h2 id="versions">Версии</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>Версия</th>
+   <th>Дата</th>
+   <th>Примечания</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>1 октября 2018 г.</td>
+   <td>Бюллетень опубликован.</td>
+  </tr>
+  <tr>
+   <td>1.1</td>
+   <td>1 октября 2018 г.</td>
+   <td>Добавлены ссылки на AOSP.</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/ru/security/bulletin/2018.html b/ru/security/bulletin/2018.html
index 49e044c..60b2c16 100644
--- a/ru/security/bulletin/2018.html
+++ b/ru/security/bulletin/2018.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетени по безопасности Android за 2018 г.</title>
+    <title>Бюллетени по безопасности Android за 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -34,7 +34,22 @@
     <th>Обновление системы безопасности</th>
  </tr>
  <tr>
-    <td><a href="/security/bulletin/2018-09-01.html">Сентябрь 2018 г.</a></td>
+    <td><a href="/security/bulletin/2018-10-01.html">Октябрь 2018 г.</a></td>
+    <td>Готовится к публикации <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>1 октября 2018 г.</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2018-09-01.html">Сентябрь 2018 г.</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
 <a href="/security/bulletin/2018-09-01.html?hl=ja">日本語</a> /
diff --git a/ru/security/bulletin/index.html b/ru/security/bulletin/index.html
index 6aabbb7..0aac331 100644
--- a/ru/security/bulletin/index.html
+++ b/ru/security/bulletin/index.html
@@ -56,7 +56,22 @@
     <th>Обновление системы безопасности</th>
  </tr>
  <tr>
-    <td><a href="/security/bulletin/2018-09-01.html">Сентябрь 2018 г.</a></td>
+    <td><a href="/security/bulletin/2018-10-01.html">Октябрь 2018 г.</a></td>
+    <td>Готовится к публикации <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>1 октября 2018 г.</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2018-09-01.html">Сентябрь 2018 г.</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
 <a href="/security/bulletin/2018-09-01.html?hl=ja">日本語</a> /
diff --git a/ru/security/bulletin/pixel/2018-01-01.html b/ru/security/bulletin/pixel/2018-01-01.html
index 7674154..c887433 100644
--- a/ru/security/bulletin/pixel/2018-01-01.html
+++ b/ru/security/bulletin/pixel/2018-01-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – январь 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – январь 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
diff --git a/ru/security/bulletin/pixel/2018-02-01.html b/ru/security/bulletin/pixel/2018-02-01.html
index d055c68..af5888c 100644
--- a/ru/security/bulletin/pixel/2018-02-01.html
+++ b/ru/security/bulletin/pixel/2018-02-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – февраль 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – февраль 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
diff --git a/ru/security/bulletin/pixel/2018-03-01.html b/ru/security/bulletin/pixel/2018-03-01.html
index f10934c..9b14b13 100644
--- a/ru/security/bulletin/pixel/2018-03-01.html
+++ b/ru/security/bulletin/pixel/2018-03-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – март 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – март 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
diff --git a/ru/security/bulletin/pixel/2018-04-01.html b/ru/security/bulletin/pixel/2018-04-01.html
index 4ad1187..4f47300 100644
--- a/ru/security/bulletin/pixel/2018-04-01.html
+++ b/ru/security/bulletin/pixel/2018-04-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – апрель 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – апрель 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -36,7 +36,7 @@
 
 <h2 id="security-patches">Обновления системы безопасности</h2>
 <p>
-Уязвимости сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="https://source.android.com/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, мы приводим основную ссылку на опубликованное изменение, связанное с идентификатором ошибки (например, список AOSP), и дополнительные ссылки в квадратных скобках.
+Уязвимости сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="https://source.android.com/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, мы приводим основную ссылку на опубликованное изменение, связанное с идентификатором ошибки (например, список AOSP), Дополнительные ссылки перечислены в квадратных скобках.
 </p>
 
 <h3 id="framework">Framework</h3>
diff --git a/ru/security/bulletin/pixel/2018-05-01.html b/ru/security/bulletin/pixel/2018-05-01.html
index 7e1262f..9f2dc2e 100644
--- a/ru/security/bulletin/pixel/2018-05-01.html
+++ b/ru/security/bulletin/pixel/2018-05-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – май 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – май 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
diff --git a/ru/security/bulletin/pixel/2018-06-01.html b/ru/security/bulletin/pixel/2018-06-01.html
index 15f8093..8c6a2f7 100644
--- a/ru/security/bulletin/pixel/2018-06-01.html
+++ b/ru/security/bulletin/pixel/2018-06-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – июнь 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – июнь 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -36,7 +36,7 @@
 <p>Помимо исправлений уязвимостей, описанных в бюллетене по безопасности Android за июнь 2018 года, обновления для устройств Pixel и Nexus содержат также исправления проблем, перечисленных ниже. Мы сообщили партнерам об этих проблемах не менее месяца назад. Они могут включить эти исправления в свои обновления безопасности.</p>
 <h2 id="security-patches">Обновления системы безопасности</h2>
 <p>
-Уязвимости сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="https://source.android.com/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, идентификаторы ошибки содержат ссылку на опубликованное изменение (например, список AOSP). Дополнительные ссылки перечислены в квадратных скобках.
+Уязвимости сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="https://source.android.com/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, мы приводим основную ссылку на опубликованное изменение, связанное с идентификатором ошибки (например, список AOSP), Дополнительные ссылки перечислены в квадратных скобках.
 </p>
 
 <h3 id="framework">Framework</h3>
@@ -812,7 +812,7 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3. На что указывают записи в столбце <em>Ссылки</em>?</strong>
+<strong>3. Что означает информация в столбце <em>Ссылки</em>?</strong>
 </p>
 <p>
 В таблицах с описанием уязвимостей есть столбец <em>Ссылки</em>. Каждая запись в нем может содержать префикс, указывающий на источник ссылки, а именно:
diff --git a/ru/security/bulletin/pixel/2018-07-01.html b/ru/security/bulletin/pixel/2018-07-01.html
index 9ee4c05..60d88ef 100644
--- a/ru/security/bulletin/pixel/2018-07-01.html
+++ b/ru/security/bulletin/pixel/2018-07-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – июль 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – июль 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -38,7 +38,7 @@
 
 <h2 id="security-patches">Обновления системы безопасности</h2>
 <p>
-Уязвимости сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="https://source.android.com/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, идентификаторы ошибки содержат ссылку на опубликованное изменение (например, список AOSP). Дополнительные ссылки перечислены в квадратных скобках.
+Уязвимости сгруппированы по компонентам, которые они затрагивают. Для каждого приведены описание и таблица с CVE, ссылками, <a href="#type">типом</a>, <a href="https://source.android.com/security/overview/updates-resources.html#severity">уровнем серьезности</a>, а также версиями AOSP (при наличии). Где возможно, мы приводим основную ссылку на опубликованное изменение, связанное с идентификатором ошибки (например, список AOSP), Дополнительные ссылки перечислены в квадратных скобках.
 </p>
 
 <h3 id="framework">Framework</h3>
@@ -395,7 +395,7 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3. На что указывают записи в столбце <em>Ссылки</em>?</strong>
+<strong>3. Что означает информация в столбце <em>Ссылки</em>?</strong>
 </p>
 <p>
 В таблицах с описанием уязвимостей есть столбец <em>Ссылки</em>. Каждая запись в нем может содержать префикс, указывающий на источник ссылки, а именно:
diff --git a/ru/security/bulletin/pixel/2018-08-01.html b/ru/security/bulletin/pixel/2018-08-01.html
index 168b6bf..b5b4218 100644
--- a/ru/security/bulletin/pixel/2018-08-01.html
+++ b/ru/security/bulletin/pixel/2018-08-01.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетень по безопасности Pixel и Nexus – август 2018 г.</title>
+    <title>Бюллетень по безопасности Pixel и Nexus – август 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -30,7 +30,7 @@
 Обновление системы безопасности 2018-08-05 получат все поддерживаемые устройства Google. Мы настоятельно рекомендуем пользователям установить это обновление.
 </p>
 <p class="note">
-<strong>Примечание.</strong> Образы встроенного ПО для устройств Google можно найти на сайте <a href="https://developers.google.com/android/images" class="external">Google Developers</a>.
+<strong>Примечание.</strong> Образы встроенного ПО для устройств Google можно найти на <a href="https://developers.google.com/android/images" class="external">сайте Google Developers</a>.
 </p>
 
 <h2 id="announcements">Новости</h2>
@@ -449,7 +449,7 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3. На что указывают записи в столбце <em>Ссылки</em>?</strong>
+<strong>3. Что означает информация в столбце <em>Ссылки</em>?</strong>
 </p>
 <p>
 В таблицах с описанием уязвимостей есть столбец <em>Ссылки</em>. Каждая запись в нем может содержать префикс, указывающий на источник ссылки, а именно:
@@ -483,7 +483,7 @@
   </tr>
 </tbody></table>
 <p id="asterisk">
-<strong>4. Что означает символ * рядом с идентификатором ошибки Android в столбце <em>Ссылки</em>?</strong>
+<strong>4. Что означает символ * рядом с идентификатором ошибки Android в столбце <em>Ссылки</em>?</strong>
 </p>
 <p>
 Символ * означает, что исправление для уязвимости не опубликовано.<em></em> Необходимое обновление содержится в последних бинарных драйверах для устройств Pixel и Nexus, которые можно скачать на <a href="https://developers.google.com/android/nexus/drivers" class="external">сайте Google Developers</a>.
diff --git a/ru/security/bulletin/pixel/2018-09-01.html b/ru/security/bulletin/pixel/2018-09-01.html
index b0f8d05..937b860 100644
--- a/ru/security/bulletin/pixel/2018-09-01.html
+++ b/ru/security/bulletin/pixel/2018-09-01.html
@@ -20,11 +20,11 @@
       limitations under the License.
   -->
 
-<p><em>Опубликовано 4 сентября 2018 г.</em></p>
+<p><em>Опубликовано 4 сентября 2018 г.</em></p>
 
 <p>
 В этом бюллетене содержится информация об уязвимостях в защите и улучшениях функциональных возможностей <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">поддерживаемых устройств Pixel и Nexus</a> (устройства Google).
-Все проблемы, перечисленные здесь и в бюллетене по безопасности Android за сентябрь 2018 года, устранены в исправлении от 5 сентября 2018 года или более новом. Информацию о том, как проверить обновления системы безопасности, можно найти в статье <a href="https://support.google.com/pixelphone/answer/4457705" class="external">Справочного центра</a>.
+Все проблемы, перечисленные здесь и в бюллетене по безопасности Android за сентябрь 2018 года, устранены в исправлении от 5 сентября 2018 года или более новом. Информацию о том, как проверить обновления системы безопасности, можно найти в статье <a href="https://support.google.com/pixelphone/answer/4457705" class="external">Справочного центра</a>.
 </p>
 <p>
 Обновление системы безопасности 2018-09-05 получат все поддерживаемые устройства Google. Мы настоятельно рекомендуем пользователям установить это обновление.
@@ -34,7 +34,7 @@
 </p>
 
 <h2 id="announcements">Объявления</h2>
-<p>Помимо исправлений уязвимостей, описанных в бюллетене по безопасности Android за сентябрь 2018 года, обновления для устройств Google содержат также исправления проблем, перечисленных ниже. Мы сообщили партнерам об этих проблемах по крайней мере месяц назад. Они могут включить их исправления в свои обновления устройств.</p>
+<p>Помимо исправлений уязвимостей, описанных в бюллетене по безопасности Android за сентябрь 2018 года, обновления для устройств Google содержат также исправления проблем, перечисленных ниже. Мы сообщили партнерам об этих проблемах по крайней мере месяц назад. Они могут включить их исправления в свои обновления устройств.</p>
 
 <h2 id="security-patches">Обновления системы безопасности</h2>
 <p>
@@ -135,7 +135,7 @@
         <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=4bc7311e9ea9145a615184626cc43a8b92e7619c">QC-CR#2191541</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=c9861d16283cb4279de98a6695e0a4e6ea0230cb">2</a>]</td>
     <td>Н/Д</td>
     <td>Средний</td>
-    <td>Data HLOS – LNX</td>
+    <td>Данные HLOS – LNX</td>
   </tr>
   <tr>
     <td>CVE-2018-11293</td>
@@ -211,7 +211,7 @@
    <td>A-110489408</td>
    <td>Батарея</td>
    <td>Улучшена зарядка батареи в демонстрационном режиме.</td>
-   <td>Pixel 2, Pixel 2 XL</td>
+   <td>Pixel 2, Pixel 2 XL</td>
   </tr>
   <tr>
    <td>A-111455307</td>
@@ -273,7 +273,7 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3. На что указывают записи в столбце <em>Ссылки</em>?</strong>
+<strong>3. Что означает информация в столбце <em>Ссылки</em>?</strong>
 </p>
 <p>
 В таблицах с описанием уязвимостей есть столбец <em>Ссылки</em>. Каждая запись в нем может содержать префикс, указывающий на источник ссылки, а именно:
diff --git a/ru/security/bulletin/pixel/2018-10-01.html b/ru/security/bulletin/pixel/2018-10-01.html
new file mode 100644
index 0000000..bcbfa06
--- /dev/null
+++ b/ru/security/bulletin/pixel/2018-10-01.html
@@ -0,0 +1,187 @@
+<html devsite><head>
+    <title>Бюллетень по безопасности Pixel и Nexus – октябрь 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>Опубликовано 1 октября 2018 г.</em></p>
+
+<p>
+В этом бюллетене содержится информация об уязвимостях в защите и улучшениях функциональных возможностей <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">поддерживаемых устройств Pixel и Nexus</a> (устройства Google).
+Все проблемы, перечисленные здесь и в бюллетене по безопасности Android за октябрь 2018 года, устранены в исправлении от 5 октября 2018 года или более новом. Информацию о том, как проверить обновления системы безопасности, можно найти в статье <a href="https://support.google.com/pixelphone/answer/4457705" class="external">Справочного центра</a>.
+</p>
+<p>
+Обновление системы безопасности 2018-10-05 получат все поддерживаемые устройства Google. Мы настоятельно рекомендуем пользователям установить это обновление.
+</p>
+<p class="note">
+<strong>Примечание.</strong> Образы встроенного ПО для устройств Google можно найти на <a href="https://developers.google.com/android/images" class="external">сайте Google Developers</a>.
+</p>
+
+<h2 id="announcements">Новости</h2>
+
+<p>В бюллетене по безопасности Pixel и Nexus за октябрь 2018 года не содержится обновлений системы безопасности для устройств Pixel и Nexus.
+</p>
+
+<h2 id="functional-patches">Улучшения функциональных возможностей</h2>
+<p>
+В эти обновления включены исправления проблем, касающихся функциональных возможностей устройств Pixel. Они не связаны с уязвимостями в защите. В таблице приведены ссылки, категория обновления, например Bluetooth или мобильный Интернет, и описание улучшения, а также сведения об устройствах, для которых предназначены исправления.
+</p>
+
+<table>
+  <tbody><tr>
+   <th>Ссылки</th>
+   <th>Категория</th>
+   <th>Описание</th>
+   <th>Устройства</th>
+  </tr>
+  <tr>
+   <td>A-112486006</td>
+   <td>Мультимедиа</td>
+   <td>Повышена производительность некоторых защищенных форматов мультимедиа.</td>
+   <td>Pixel 2, Pixel 2XL</td>
+  </tr>
+  <tr>
+   <td>A-112529920</td>
+   <td>Питание</td>
+   <td>Улучшена функция быстрой зарядки.</td>
+   <td>Pixel, Pixel XL</td>
+  </tr>
+  <tr>
+   <td>A-79643956</td>
+   <td>Стабильность</td>
+   <td>Повышена стабильность работы при использовании Android Auto.</td>
+   <td>Pixel 2, Pixel 2XL</td>
+  </tr>
+  <tr>
+   <td>A-111467967</td>
+   <td>Производительность</td>
+   <td>Изменено управление входящими вызовами при использовании навигации в Google Картах.</td>
+   <td>Все</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">Часто задаваемые вопросы</h2>
+<p>
+В этом разделе мы отвечаем на вопросы, которые могут возникнуть после прочтения бюллетеня.
+</p>
+<p>
+<strong>1. Как определить, установлено ли на устройство обновление, в котором устранены перечисленные проблемы?
+</strong>
+</p>
+<p>
+В исправлении от 5 октября 2018 года или более новом устранены все проблемы, связанные с обновлением 2018-10-05. Информацию о том, как проверить обновления системы безопасности, можно найти в статье <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Справочного центра</a>.
+</p>
+<p id="type">
+<strong>2. Что означают сокращения в столбце <em>Тип</em>?</strong>
+</p>
+<p>
+В этом столбце указан тип уязвимости по следующей классификации:<em></em>
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>Сокращение</th>
+   <th>Описание</th>
+  </tr>
+  <tr>
+   <td>УВК</td>
+   <td>Удаленное выполнение кода</td>
+  </tr>
+  <tr>
+   <td>ПП</td>
+   <td>Повышение привилегий</td>
+  </tr>
+  <tr>
+   <td>РИ</td>
+   <td>Раскрытие информации</td>
+  </tr>
+  <tr>
+   <td>ОО</td>
+   <td>Отказ в обслуживании</td>
+  </tr>
+  <tr>
+   <td>Н/Д</td>
+   <td>Классификация недоступна</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>3. Что означает информация в столбце <em>Ссылки</em>?</strong>
+</p>
+<p>
+В таблицах с описанием уязвимостей есть столбец <em>Ссылки</em>. Каждая запись в нем может содержать префикс, указывающий на источник ссылки, а именно:
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>Префикс</th>
+   <th>Значение</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Идентификатор ошибки Android</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Ссылочный номер Qualcomm</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>Ссылочный номер MediaTek</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>Ссылочный номер NVIDIA</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Ссылочный номер Broadcom</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>4. Что означает символ * рядом с идентификатором ошибки Android в столбце <em>Ссылки</em>?</strong>
+</p>
+<p>
+Символ * означает, что исправление для уязвимости не опубликовано.<em></em> Необходимое обновление содержится в последних бинарных драйверах для устройств Pixel и Nexus, которые можно скачать на <a href="https://developers.google.com/android/nexus/drivers" class="external">сайте Google Developers</a>.
+</p>
+<p>
+<strong>5. Почему теперь одни уязвимости описываются в этом бюллетене, а другие – в бюллетенях по безопасности Android?</strong>
+</p>
+<p>
+В бюллетене по безопасности Android описаны уязвимости, которые необходимо устранить в последнем обновлении системы безопасности для устройств Android. Исправление дополнительных проблем, перечисленных здесь, для выпуска этого обновления не требуется.
+</p>
+<h2 id="versions">Версии</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>Версия</th>
+   <th>Дата</th>
+   <th>Примечания</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>1 октября 2018 г.</td>
+   <td>Бюллетень опубликован.</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/ru/security/bulletin/pixel/2018.html b/ru/security/bulletin/pixel/2018.html
index 6b0418c..c064311 100644
--- a/ru/security/bulletin/pixel/2018.html
+++ b/ru/security/bulletin/pixel/2018.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Бюллетени по безопасности Pixel и Nexus за 2018 г.</title>
+    <title>Бюллетени по безопасности Pixel и Nexus за 2018 г.</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -34,7 +34,21 @@
     <th>Обновление системы безопасности</th>
  </tr>
  <tr>
-    <td><a href="/security/bulletin/pixel/2018-09-01.html">Сентябрь 2018 г.</a></td>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">Октябрь 2018 г.</a></td>
+    <td>Готовится к публикации <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>1 октября 2018 г.</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2018-09-01.html">Сентябрь 2018 г.</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /
 <a href="/security/bulletin/pixel/2018-09-01.html?hl=ja">日本語</a> /
diff --git a/ru/security/bulletin/pixel/index.html b/ru/security/bulletin/pixel/index.html
index cad046a..8dbcb24 100644
--- a/ru/security/bulletin/pixel/index.html
+++ b/ru/security/bulletin/pixel/index.html
@@ -43,7 +43,21 @@
     <th>Обновление системы безопасности</th>
  </tr>
  <tr>
-    <td><a href="/security/bulletin/pixel/2018-09-01.html">Сентябрь 2018 г.</a></td>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">Октябрь 2018 г.</a></td>
+    <td>Готовится к публикации <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>1 октября 2018 г.</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2018-09-01.html">Сентябрь 2018 г.</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /
 <a href="/security/bulletin/pixel/2018-09-01.html?hl=ja">日本語</a> /
diff --git a/zh-cn/_book.yaml b/zh-cn/_book.yaml
index 385b7f6..574cea4 100644
--- a/zh-cn/_book.yaml
+++ b/zh-cn/_book.yaml
@@ -836,6 +836,8 @@
           title: 蓝牙服务
         - path: /devices/bluetooth/ble
           title: 蓝牙低功耗
+        - path: /devices/bluetooth/asha
+          title: 将 BLE 用于助听器
         - path: /devices/bluetooth/ble_advertising
           title: BLE 广播
         - path: /devices/bluetooth/verifying_debugging
diff --git a/zh-cn/_index.yaml b/zh-cn/_index.yaml
index fe114e0..6b0c5b9 100644
--- a/zh-cn/_index.yaml
+++ b/zh-cn/_index.yaml
@@ -7,7 +7,7 @@
       path: /setup/downloading
   rows:
   - items:
-    - heading: 8.1 接口和架构
+    - heading: 9 接口和架构
       description: >
         使用简单的 HIDL 接口移植到最新的 Android 平台,打造深受用户青睐的设备。<style>.devsite-feedback-button
         {
@@ -24,7 +24,7 @@
         </style>
       buttons:
       - label: 了解 Treble
-        path: /devices/architecture/treble
+        path: /devices/architecture/
       image_path: /images/landing_icon-porting.png
     - heading: 保障 Android 安全至关重要
       description: >
@@ -33,7 +33,7 @@
       buttons:
       - label: 实现安全性
         path: /security/
-    - heading: 确保兼容性,支持各类应用
+    - heading: 设计兼容设备
       description: >
         提供与其他 Android 设备一致的体验,并能安装更多应用。
       image_path: /images/landing_icon-compatibility.png
@@ -54,25 +54,25 @@
       image_path: /images/android_stack.png
   - heading: 新闻
     items:
-    - heading: 7 月安全公告
+    - heading: Android 9 文档
+      description: >
+        Android 9 已发布!该网站提供有关在最新版 Android 中实现功能、改进措施和增强功能的文档。
+      buttons:
+      - label: 2018 年 8 月 6 日
+        path: /setup/start/p-release-notes
+    - heading: 网站更新
+      description: >
+        本网站经过了全新改版,可让您更轻松地浏览、搜索和阅读日益增多的信息。查看重新整理后的版块和全新导航。
+      buttons:
+      - label: 2018 年 8 月 6 日
+        path: /setup/start/site-updates
+    - heading: 8 月安全公告
       description: >-
-        2018 年 7 月的 Android 和 Pixel/Nexus 安全公告已经发布,一同发布的还有相关修复程序的链接以及用于
-        7 月安全更新补丁的新版本号。
+        2018 年 8 月的 Android 和 Pixel/Nexus 安全公告已经发布,一同发布的还有相关修复程序的链接以及用于
+        8 月安全更新补丁的新版本号。
       buttons:
-      - label: 2018 年 7 月 3 日
-        path: /security/bulletin/2018-07-01
-    - heading: 相机 HAL
-      description: >
-        相机硬件抽象层 (HAL) 文档已更新,其中包含对相机 HIDL 接口的引用。
-      buttons:
-      - label: 2018 年 5 月 23 日
-        path: /devices/camera/
-    - heading: 引导加载程序说明
-      description: >
-        Android 为实现与 Android 编译团队使用的启动映像相匹配的引导加载程序提供了指导。
-      buttons:
-      - label: 2018 年 5 月 15 日
-        path: /devices/bootloader/
+      - label: 2018 年 8 月 6 日
+        path: /security/bulletin/2018-08-01
   - classname: devsite-landing-row-100 tf-row-centered
     items:
     - buttons:
diff --git a/zh-cn/compatibility/cts/camera-wfov-box-assembly.html b/zh-cn/compatibility/cts/camera-wfov-box-assembly.html
index 320a56d..891c2c1 100644
--- a/zh-cn/compatibility/cts/camera-wfov-box-assembly.html
+++ b/zh-cn/compatibility/cts/camera-wfov-box-assembly.html
@@ -46,7 +46,7 @@
 
 <p>WFoV 盒装 ITS 由一部被测设备 (DUT)、一台图表平板电脑、一个内部照明系统和一个根据 CAD 图纸激光切割而成的塑料盒组成(如图 1 所示)。</p>
 
-<p><img src="/compatibility/cts/images/wfov-cad-wfov-box.png" alt="WFoV 盒装 ITS 的 CAD 图纸" width="800"/></p>
+<p><img src="/compatibility/cts/images/wfov-cad-wfov-box.png" alt="WFoV 盒装 ITS 的 CAD 图纸" width="800"/> </p>
 
 <p><strong>图 1. </strong> WFoV 盒装 ITS 的机械制图</p>
 
@@ -70,7 +70,7 @@
 <ol>
 <li><p>将彩色乙烯基膜贴在丙烯腈-丁二烯-苯乙烯树脂 (ABS) 的光滑面上,并剪出必要的开口(如图 1 所示)。确保在盒子的平板电脑侧贴上带有大矩形开口的白色乙烯基膜,在盒子的移动设备侧贴上带有圆形开口的黑色乙烯基膜。有关详情,请参阅 <a href="https://www.wikihow.com/Install-a-Vinyl-Graphic" class="external">wikiHow</a>。</p>
 
-<p><img src="/compatibility/cts/images/wfov-abs-pieces.png" alt="光滑面上贴有乙烯基膜的 ABS 元件" width="500"/></p>
+<p><img src="/compatibility/cts/images/wfov-abs-pieces.png" alt="光滑面上贴有乙烯基膜的 ABS 元件" width="500"/> </p>
 
 <p><strong>图 2. </strong> 光滑面上贴有乙烯基膜的 ABS 元件(盒内部)</p></li>
 </ol>
@@ -82,45 +82,45 @@
 <ol>
 <li><p>查看照明框架结构的机械制图。</p>
 
-<p><img src="/compatibility/cts/images/wfov-cad-light-frame.png" alt="带 LED 灯条的照明框架结构" width="800"/></p>
+<p><img src="/compatibility/cts/images/wfov-cad-light-frame.png" alt="带 LED 灯条的照明框架结构" width="800"/> </p>
 
 <p><strong>图 3. </strong> 带 LED 灯条的照明框架结构</p></li>
 <li><p>找到塑料挡光板、灯座、LED 灯条和束线带并放在一起。</p>
 
-<p><img src="/compatibility/cts/images/wfov-parts.png" alt="挡光板、灯座、LED 灯条和束线带" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-parts.png" alt="挡光板、灯座、LED 灯条和束线带" width="350"/> </p>
 
 <p><strong>图 4. </strong> 挡光板、灯座、LED 灯条和束线带</p></li>
 <li><p>将塑料挡光板卡入灯座(如图 5 所示),应做到紧密贴合。</p>
 
-<p><img src="/compatibility/cts/images/wfov-light-mounts.png" alt="安装在灯座上的塑料挡光板" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-light-mounts.png" alt="安装在灯座上的塑料挡光板" width="350"/> </p>
 
 <p><strong>图 5. </strong> 安装在灯座上的塑料挡光板</p></li>
 <li><p>将灯座安装到侧板上(如图 6 所示)。完成后,灯光将照向盒子内部正面的几个角。</p>
 
-<p><img src="/compatibility/cts/images/wfov-side-panels-baffles.png" alt="安装到侧板上的挡光板和灯座" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-side-panels-baffles.png" alt="安装到侧板上的挡光板和灯座" width="350"/> </p>
 
 <p><strong>图 6. </strong> 安装到侧板上的挡光板和灯座</p></li>
 <li><p>组装侧板。(可选:打磨挡光板边缘,以更好地贴合。)</p>
 
-<p><img src="/compatibility/cts/images/wfov-assembled-side-panels.png" alt="组装好并用螺丝固定到位的侧板" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-assembled-side-panels.png" alt="组装好并用螺丝固定到位的侧板" width="350"/> </p>
 
 <p><strong>图 7. </strong> 组装好并用螺丝固定到一起的侧板</p></li>
 <li><p>将 LED 灯条缠绕在面向侧板的一侧,放置在用于固定的孔之间。(可选:在 LED 灯条背面贴上胶带,以便更轻松地缠绕。)</p>
 
-<p><img src="/compatibility/cts/images/wfov-light-strip.png" alt="缠绕在挡光板周围的 LED 灯条" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-light-strip.png" alt="缠绕在挡光板周围的 LED 灯条" width="350"/> </p>
 
 <p><strong>图 8. </strong> 缠绕在挡光板周围的 LED 灯条</p></li>
 <li><p>用灯条缠绕挡光板两次,使用束线带固定灯条,然后将两端贴靠在一起。</p>
 
-<p><img src="/compatibility/cts/images/wfov-zip-ties.png" alt="将 LED 灯条固定到位的束线带" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-zip-ties.png" alt="将 LED 灯条固定到位的束线带" width="350"/> </p>
 
 <p><strong>图 9. </strong> 将 LED 灯条固定到位的束线带</p>
 
-<p><img src="/compatibility/cts/images/wfov-lights-exiting.png" alt="缠绕在挡光板周围的 LED 灯条" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-lights-exiting.png" alt="缠绕在挡光板周围的 LED 灯条" width="350"/> </p>
 
 <p><strong>图 10. </strong> 缠绕挡光板两次并从侧面出口伸出去的 LED 灯条</p>
 
-<p><img src="/compatibility/cts/images/wfov-zip-ties-facing-up.png" alt="束线带位于朝上的一侧" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-zip-ties-facing-up.png" alt="束线带位于朝上的一侧" width="350"/> </p>
 
 <p><strong>图 11. </strong> 束线带位于朝上的一侧。LED 灯条位于另一侧。</p></li>
 </ol>
@@ -132,22 +132,22 @@
 <ol>
 <li><p>查看平板电脑底座的机械制图。</p>
 
-<p><img src="/compatibility/cts/images/wfov-cad-mounts.png" alt="平板电脑底座的机械制图" width="800"/></p>
+<p><img src="/compatibility/cts/images/wfov-cad-mounts.png" alt="平板电脑底座的机械制图" width="800"/> </p>
 
 <p><strong>图 12. </strong> 平板电脑底座的机械制图</p></li>
 <li><p>找到图 13 所示的各部件并放在一起。</p>
 
-<p><img src="/compatibility/cts/images/wfov-mount-parts.png" alt="平板电脑底座和手机底座部件" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-mount-parts.png" alt="平板电脑底座和手机底座部件" width="350"/> </p>
 
 <p><strong>图 13. </strong> 平板电脑底座和手机底座以及螺丝、柱塞、乙烯基帽和螺母</p></li>
 <li><p>将推入式乙烯基帽切去其长度的 ⅓,然后推入到柱塞的末端。这样做可确保柱塞装置能够缩回并锁定。</p>
 
-<p><img src="/compatibility/cts/images/wfov-plunger.png" alt="带有推入式螺帽(经过调整)的柱塞" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-plunger.png" alt="带有推入式螺帽(经过调整)的柱塞" width="350"/> </p>
 
 <p><strong>图 14. </strong> 带有推入式螺帽(经过调整)的柱塞</p></li>
 <li><p>用螺丝将柱塞固定到底座上。</p>
 
-<p><img src="/compatibility/cts/images/wfov-mounts-with-plungers.png" alt="已安装柱塞的平板电脑底座和手机底座" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-mounts-with-plungers.png" alt="已安装柱塞的平板电脑底座和手机底座" width="350"/> </p>
 
 <p><strong>图 15. </strong> 已安装柱塞的平板电脑底座和手机底座</p></li>
 </ol>
@@ -159,27 +159,27 @@
 <ol>
 <li><p>找到前孔板并放在一起,然后用螺丝将带有方形开口的较小板固定到较大板的上方(如图 16 所示)。</p>
 
-<p><img src="/compatibility/cts/images/wfov-aperture-plates.png" alt="组装好的孔板" width="500"/></p>
+<p><img src="/compatibility/cts/images/wfov-aperture-plates.png" alt="组装好的孔板" width="500"/> </p>
 
 <p><strong>图 16. </strong> 使用 4-40 螺丝固定到一起的前孔板</p></li>
 <li><p>用胶带将前板和后板与盒子的其余部分粘合。</p>
 
-<p><img src="/compatibility/cts/images/wfov-box.png" alt="侧面用螺丝固定到一起的 WFoV 盒" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-box.png" alt="侧面用螺丝固定到一起的 WFoV 盒" width="350"/> </p>
 
 <p><strong>图 17. </strong> 侧边用螺丝固定到一起且前后板用胶带粘合的 WFoV 盒</p></li>
 <li><p>检查电源适配器是否为 12V,5A。如果电压低于 12V,则不会正常运行;如果电流低于 5A,则可能会影响灯的亮度。</p>
 
-<p><img src="/compatibility/cts/images/wfov-power-adapter.png" alt="电源适配器(12V,5A)" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-power-adapter.png" alt="电源适配器(12V,5A)" width="350"/> </p>
 
 <p><strong>图 18. </strong> 电源适配器(12V,5A)</p></li>
 <li><p>使用数字勒克斯测试仪测试 LED 灯的勒克斯值,确保它们处于适当的水平。本例中使用的是 <a href="https://www.contempoviews.com/" class="external">Contempo Views</a> 的 YF-1065。</p>
 
-<p><img src="/compatibility/cts/images/wfov-yf1065.png" alt="Contempo Views 的 YF-1065" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-yf1065.png" alt="Contempo Views 的 YF-1065" width="350"/> </p>
 
 <p><strong>图 19. </strong> Contempo Views 的 YF-1065</p></li>
 <li><p>将测光表放置在平板电脑侧,然后将其调到 2000 勒克斯,以测量光度。勒克斯值应在约 100 到 130 之间。对于测试而言,如果勒克斯值明显低于这一范围,则说明光线过暗,可能导致测试失败。</p>
 
-<p><img src="/compatibility/cts/images/wfov-lux-meter.png" alt="勒克斯计" width="350"/></p>
+<p><img src="/compatibility/cts/images/wfov-lux-meter.png" alt="勒克斯计" width="350"/> </p>
 
 <p><strong>图 20. </strong> 用勒克斯计测量平板电脑底座所在侧的光的强度</p></li>
 <li><p>根据测量的勒克斯值,执行相应的步骤:</p>
@@ -190,11 +190,11 @@
 </ul></li>
 <li><p>用螺丝和螺母将手机底座安装到孔板上,将平板电脑底座安装到另一侧。</p>
 
-<p><img src="/compatibility/cts/images/wfov-attached-mounts.png" alt="手机底座和平板电脑底座" width="500"/></p>
+<p><img src="/compatibility/cts/images/wfov-attached-mounts.png" alt="手机底座和平板电脑底座" width="500"/> </p>
 
 <p><strong>图 21. </strong> 手机底座(左)和平板电脑底座(右)</p>
 
-<p><img src="/compatibility/cts/images/wfov-assembled-box.png" alt="组装好的 WFoV 盒" width="500"/></p>
+<p><img src="/compatibility/cts/images/wfov-assembled-box.png" alt="组装好的 WFoV 盒" width="500"/> </p>
 
 <p><strong>图 22. </strong> 组装好的 WFoV 盒:后视图(左)和前视图(右)</p></li>
 </ol>
diff --git a/zh-cn/compatibility/cts/interpret.html b/zh-cn/compatibility/cts/interpret.html
index 33ce786..56e23f4 100644
--- a/zh-cn/compatibility/cts/interpret.html
+++ b/zh-cn/compatibility/cts/interpret.html
@@ -29,7 +29,7 @@
 
 <p>在 zip 压缩包中,testResult.xml 文件会包含实际的结果。在任何网络浏览器(推荐使用与 HTML 5 技术兼容的浏览器)中打开此文件,即可查看测试结果。</p>
 
-<p>使用 Chrome 浏览器时,如果 testResult.xml 显示空白页,请<a href="https://www.chromium.org/developers/how-tos/run-chromium-with-flags">更改浏览器配置</a>以启用 --allow-file-access-from-files 命令行标记。<em></em></p>
+<p>使用 Chrome 浏览器时,如果 testResult.xml 显示空白页,请<a href="https://www.chromium.org/developers/how-tos/run-chromium-with-flags">更改浏览器配置</a>以启用 --allow-file-access-from-files<em></em> 命令行标记。</p>
 
 <h3 id="reading-the-test-results">阅读测试结果</h3>
 
@@ -38,7 +38,7 @@
 <ul>
   <li>CTS v1 适用于 Android 6.0 及更早版本</li><li>CTS v2 适用于 Android 7.0 及更高版本</li></ul>
 
-<p class="note"><strong>注意</strong>:所提供的结果旨在帮助您确保软件在整个开发过程中始终兼容,并且可作为通用格式来说明您的设备与其他方的兼容性状态。</p>
+<p class="note"><strong>注意</strong>:所提供的结果旨在帮助您确保软件在整个开发过程中始终兼容,并且可作为通用格式向其他方说明您的设备的兼容性状态。</p>
 
 <h4 id="device-information">设备信息</h4>
 
@@ -67,7 +67,7 @@
 
 <p>接下来是所执行的实际测试的详细信息。该报告会列出测试包、测试套件、测试用例和执行的测试。它会显示测试执行结果:通过、失败、超时或未执行。如果测试失败,则该报告会提供详细信息以供诊断原因。</p>
 
-<p>此外,为了确保简洁性,故障的堆栈跟踪信息会包含在 XML 文件中,但不会包含在报告中;使用文本编辑器查看 XML 文件可了解有关测试失败的详细信息(搜索与失败的测试对应的 &lt;Test&gt; 标记,并在其中查找 &lt;StackTrace&gt; 标记)。<em></em><em></em></p>
+<p>此外,为了确保简洁性,失败的测试的堆栈跟踪信息会包含在 XML 文件中,但不会包含在报告中;使用文本编辑器查看 XML 文件可了解有关测试失败的详细信息(搜索与失败的测试对应的 &lt;Test&gt; 标记,并在其中查找 &lt;StackTrace&gt; 标记)。<em></em><em></em></p>
 
   <section class="expandable">
     <h4 class="showalways">显示 CTS v1 测试报告示例</h4>
diff --git a/zh-cn/compatibility/cts/run.html b/zh-cn/compatibility/cts/run.html
index 0135248..5af1293 100644
--- a/zh-cn/compatibility/cts/run.html
+++ b/zh-cn/compatibility/cts/run.html
@@ -258,7 +258,7 @@
     </tr>
     <tr>
       <td><code>-- module/-m &lt;test_module_name&gt; -- test &lt;test_name&gt; </code></td>
-      <td>运行指定的模块并进行测试。例如,<code>run cts -m Gesture --test android.gesture.cts.GestureTest#testGetStrokes</code> 会运行指定的程序包、类或测试。</td>
+      <td>运行指定的模块并进行测试。例如,<code>run cts -m Gesture --test android.gesture.cts.GestureTest#testGetStrokes</code> 会运行指定的包、类或测试。</td>
     </tr>
     <tr>
       <td><code>--retry</code></td>
diff --git a/zh-cn/compatibility/cts/setup.html b/zh-cn/compatibility/cts/setup.html
index 9cb3095..d547d79 100644
--- a/zh-cn/compatibility/cts/setup.html
+++ b/zh-cn/compatibility/cts/setup.html
@@ -100,14 +100,21 @@
 <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.
+#ro.product.first_api_level indicates the first api level that the device has
+been commercially launched on.
 PRODUCT_PROPERTY_OVERRIDES +=\
 ro.product.first_api_level=21
 </pre>
 
-<aside class="note">
-  <b>注意</b>:对于产品的第一个版本,<code>ro.product.first_api_level</code> 属性应处于未设置状态 (removed);而对于所有后续版本,该属性应设置为正确的 API 级别值。通过这种方式,该属性可以正确标识新产品,而且我们不会丢失任何关于产品初始 API 级别的信息。如果标记处于未设置状态,则 Android 会将 <code>Build.VERSION.SDK_INT</code> 分配给 <code>ro.product.first_api_level</code>。
-</aside>
+<h4 id="android-9-higher">Android 9 及更高版本的初始 API 级别</h4>
+
+  <p>对于搭载 Android 9 或更高版本的设备,请将属性 <code>ro.product.first_api_level</code> 设置为在<a href="/setup/start/build-numbers">代号、标记和细分版本号</a>上找到的有效值。
+  </p>
+
+<h4 id="android-8x-lower">Android 8.x 及更低版本的初始 API 级别</h4>
+
+  <p>对于搭载 Android 8.x 或更低版本的设备,请为产品的第一个版本取消设置(移除)属性 <code>ro.product.first_api_level</code>。对于所有后续版本,请将 <code>ro.product.first_api_level</code> 设置为正确的 API 级别值。这样一来,该属性便可以正确标识新产品,关于产品初始 API 级别的信息也将得以保留。如果标记处于未设置状态,则 Android 会将 <code>Build.VERSION.SDK_INT</code> 分配给 <code>ro.product.first_api_level</code>。
+  </p>
 
 <h3 id="cts-shim-apps">CTS Shim 应用</h3>
 
@@ -129,8 +136,8 @@
     <p>这个小程序适用于配有 eSE(嵌入式安全元件)、SIM 或 SD 的设备。要详细了解 Open Mobile API 测试用例和访问控制测试用例,请参阅<a href="/compatibility/cts/secure-element">安全元件的 CTS 测试</a>。</p>
 
 <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>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>以下是按最大视频播放分辨率列出的存储空间要求:</p>
 <ul>
   <li>480x360: 98MB
diff --git a/zh-cn/compatibility/cts/usb-audio.html b/zh-cn/compatibility/cts/usb-audio.html
index 271dc23..dd76d46 100644
--- a/zh-cn/compatibility/cts/usb-audio.html
+++ b/zh-cn/compatibility/cts/usb-audio.html
@@ -21,7 +21,7 @@
   -->
 
 <p>
-针对 <a href="/devices/audio/usb">Android USB 音频</a>的几项 <a href="/compatibility/cts/">Android 兼容性测试套件 (CTS)</a> 测试需要人为干预并连接 USB 音频外设。我们为此实现了额外的 CTS 验证程序测试。
+针对 <a href="/devices/audio/usb">Android USB 音频</a>的几项 <a href="/compatibility/cts/">Android 兼容性测试套件 (CTS)</a> 测试需要人工干预,并且要求以物理方式连接 USB 音频外设。我们为此实现了额外的 CTS 验证程序测试。
 本文档介绍了这些测试的要求和协议。
 </p>
 
diff --git a/zh-cn/compatibility/index.html b/zh-cn/compatibility/index.html
index a247c9c..47efeaf 100644
--- a/zh-cn/compatibility/index.html
+++ b/zh-cn/compatibility/index.html
@@ -29,11 +29,11 @@
 <p>尽管如此,但为了让用户在使用其他 Android 设备时能够获得一致的体验,请在设计和自定义您的实现时考虑以下既定标准。</p>
 
 <ol>
-<li><p>查看<a href="/devices/architecture/">架构</a>中的 Android 平台开发基本原则,尤其是 Android 8.0 中引入的 <a href="/devices/architecture/hidl/">HIDL</a> 格式。</p></li>
+<li><p>查看<a href="/devices/architecture/">架构</a>中的 Android 平台开发基本原则,尤其是 Android 8.0 中引入的<a href="/devices/architecture/hidl/">HIDL</a> 格式。</p></li>
 <li><p>确保根据 <a href="/compatibility/cdd">Android 兼容性定义文档</a>(Android 的核心规范)的相关要求,设备属于<a href="/compatibility/overview">兼容性</a>设备。</p></li>
-<li><p>要获取界面方面的帮助,请参阅<a href="/devices/tech/display/">显示</a>功能和<a href="/devices/tech/settings/settings-guidelines">设置</a>指南。</p></li>
+<li><p>参阅<a href="/devices/tech/display/">显示</a>功能和<a href="/devices/tech/settings/settings-guidelines">设置</a>指南,获取界面方面的帮助。</p></li>
 <li><p>利用所有可用的<a href="/compatibility/tests">测试</a>调试和改进您的 Android 设备。</p></li>
-<li><p>在开发面向用户的应用时,请熟悉<a href="https://developer.android.com/design/" class="external">应用设计</a>原则和 <a href="https://material.io/design/" class="external">Material Design</a> 技术。</p></li>
+<li><p>在开发面向用户的应用时,请先熟悉一下<a href="https://developer.android.com/design/" class="external">应用设计</a>原则和 <a href="https://material.io/design/" class="external">Material Design</a> 技术。</p></li>
 </ol>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/compatibility/vts/performance.html b/zh-cn/compatibility/vts/performance.html
index 99e2300..579b2af 100644
--- a/zh-cn/compatibility/vts/performance.html
+++ b/zh-cn/compatibility/vts/performance.html
@@ -117,8 +117,10 @@
 <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>
@@ -289,7 +291,8 @@
 
 </dl>
 
-<p class="note"><strong>注意</strong>:后台负荷可能会影响延迟测试中的吞吐量结果和 <code>other_ms</code> 元组。只要后台负荷的优先级低于 <code>RT-fifo</code>,就可能只有 <code>fifo_ms</code> 会显示类似的结果。</p>
+<p class="note"><strong>注意:</strong>后台负荷可能会影响延迟测试中的吞吐量结果和
+<code>other_ms</code> 元组。只要后台负荷的优先级低于 <code>fifo_ms</code>,就可能只有 <code>RT-fifo</code> 会显示类似的结果。</p>
 
 <h4 id="pair-values">指定对值</h4>
 <p>每个客户端进程都会与其专用的服务器进程配对,且每一对都可能会独立调度到任何 CPU。不过,只要同步标记是 <code>honor</code>,事务期间应该就不会出现 CPU 迁移的情况。</p>
@@ -333,9 +336,9 @@
 </pre>
 
 <ul>
-<li><font style="color:orange">服务线程</font>使用 <code>SCHED_OTHER</code> 优先级创建,且与 <code>pid
+<li><font style="color:orange">服务线程</font>按 <code>SCHED_OTHER</code> 优先级而创建,且与 <code>pid
 8674</code> 一起在 <code>CPU:1</code> 中运行。</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>随后,由 <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:green">第二个事务</font>调用程序的优先级为 <code>SCHED_OTHER</code>。服务器自行降级并为优先级为 <code>SCHED_OTHER</code> 的调用程序提供服务。</li>
 </ul>
 
diff --git a/zh-cn/devices/architecture/hal.html b/zh-cn/devices/architecture/hal.html
index 4b3f199..f9c6942 100644
--- a/zh-cn/devices/architecture/hal.html
+++ b/zh-cn/devices/architecture/hal.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>硬件抽象层 (HAL)</title>
+    <title>旧版 HAL</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -20,7 +20,7 @@
       limitations under the License.
   -->
 
-<p>HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现。借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统。HAL 实现会被封装成模块,并由 Android 系统适时地加载。</p>
+<p>HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现。借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统。本页面介绍了自 Android 8.0 开始已不再支持的旧版架构。对于 Android 8.0 及更高版本,请参阅 <a href="/devices/architecture/hal-types/">HAL 类型</a>。</p>
 
 <img src="../images/ape_fwk_hal.png"/>
 
@@ -87,6 +87,4 @@
 <p>HAL 实现会内置在模块 (<code>.so</code>) 文件中,并由 Android 适时地动态链接。您可以为每个 HAL 实现创建 <code>Android.mk</code> 文件并指向源文件,从而编译模块。一般来说,您的共享库必须以特定格式命名,以方便找到并正确加载。各模块的命名方案略有不同,但它们都遵循以下通用模式:<code>&lt;module_type&gt;.&lt;device_name&gt;</code>。
 </p>
 
-<p>要详细了解如何为每个 HAL 设置模块编译,请参阅本网站“移植”部分中特定于 HAL 的文档。</p>
-
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/architecture/hidl-cpp/index.html b/zh-cn/devices/architecture/hidl-cpp/index.html
index 8b8e583..367d646 100644
--- a/zh-cn/devices/architecture/hidl-cpp/index.html
+++ b/zh-cn/devices/architecture/hidl-cpp/index.html
@@ -70,7 +70,7 @@
     -randroid.hidl:system/libhidl/transport $PACKAGE
 </pre>
 
-<p>为了让 HAL 在直通模式下发挥作用(对于旧版设备),您必须具备 <em>HIDL_FETCH_IModuleName</em> 函数(位于 <code>/system/lib(64)?/hw/[email protected]($OPTIONAL_IDENTIFIER).so</code> 下),其中 <code>$OPTIONAL_IDENTIFIER</code> 是一个标识直通实现的字符串。直通模式要求会通过上述命令自动满足,这些命令也会创建 <code>[email protected]</code> 目标,但是可以使用任何扩展。例如,<code>[email protected]</code> 就是使用 <code>-foo</code> 区分自身。</p>
+<p>为了让 HAL 在直通模式下发挥作用(对于旧版设备),您必须具备 HIDL_FETCH_IModuleName <em></em>函数(位于 <code>/(system|vendor|...)/lib(64)?/hw/[email protected]($OPTIONAL_IDENTIFIER).so</code> 下),其中 <code>$OPTIONAL_IDENTIFIER</code> 是一个标识直通实现的字符串。直通模式要求会通过上述命令自动满足,这些命令也会创建 <code>[email protected]</code> 目标,但是可以使用任何扩展。例如,<code>[email protected]</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 045aefd..1663c87 100644
--- a/zh-cn/devices/architecture/hidl/hashing.html
+++ b/zh-cn/devices/architecture/hidl/hashing.html
@@ -45,7 +45,7 @@
 822998d7...74d63b8c [email protected]::IFoo
 </pre>
 
-<p class="note"><strong>注意</strong>:为了便于跟踪各个哈希的来源,Google 将 HIDL <code>current.txt</code> 文件分为不同的部分:第一部分列出在 Android O 中发布的接口文件中,第二部分列出在 Android O MR1 中发布的接口文件中。<em></em><em></em>我们强烈建议在您的 <code>current.txt</code> 文件中使用类似布局。</p>
+<p class="note"><strong>注意</strong>:为了便于跟踪各个哈希的来源,Google 将 HIDL <code>current.txt</code> 文件分为不同的部分:第一部分列出在 Android O 中发布的接口文件,第二部分列出在 Android O MR1 中发布的接口文件。<em></em><em></em>我们强烈建议在您的 <code>current.txt</code> 文件中使用类似布局。</p>
 
 <h2 id="hidl-gen">使用 hidl-gen 添加哈希</h2>
 <p>您可以手动将哈希添加到 <code>current.txt</code> 文件中,也可以使用 <code>hidl-gen</code> 添加。以下代码段提供了可与 <code>hidl-gen</code> 搭配使用来管理 <code>current.txt</code> 文件的命令示例(哈希已缩短):</p>
@@ -73,7 +73,7 @@
 <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/threading.html b/zh-cn/devices/architecture/hidl/threading.html
index 71da861..259b055 100644
--- a/zh-cn/devices/architecture/hidl/threading.html
+++ b/zh-cn/devices/architecture/hidl/threading.html
@@ -29,12 +29,12 @@
 <h2 id="binderized">绑定式 HAL 中的线程</h2>
 <p>为了处理传入的 RPC 调用(包括从 HAL 到 HAL 用户的异步回调)和终止通知,系统会为使用 HIDL 的每个进程关联一个线程池。如果单个进程实现了多个 HIDL 接口和/或终止通知处理程序,则所有这些接口和/或处理程序会共享其线程池。当进程接收从客户端传入的方法调用时,它会从线程池中选择一个空闲线程,并在该线程上执行调用。如果没有空闲的线程,它将会阻塞,直到有可用线程为止。</p>
 
-<p>如果服务器只有一个线程,则传入服务器的调用将按顺序完成。具有多个线程的服务器可以不按顺序完成调用,即使客户端只有一个线程也是如此。不过,对于特定的界面目标,<code>oneway</code> 调用要保证按顺序进行(请参阅<a href="#model">服务器线程模型</a>)。对于托管了多个界面的多线程服务器,对不同界面的多项 <code>oneway</code> 调用可能会并行处理,也可能会与其他阻塞调用并行处理。</p>
+<p>如果服务器只有一个线程,则传入服务器的调用将按顺序完成。具有多个线程的服务器可以不按顺序完成调用,即使客户端只有一个线程也是如此。不过,对于特定的接口对象,<code>oneway</code> 调用会保证按顺序进行(请参阅<a href="#model">服务器线程模型</a>)。对于托管了多个界面的多线程服务器,对不同界面的多项 <code>oneway</code> 调用可能会并行处理,也可能会与其他阻塞调用并行处理。</p>
 
-<p>系统会在同一个 hwbinder 线程中发送多个嵌套调用。例如,如果进程 (A) 通过 hwbinder 线程对进程 (B) 进行同步调用,然后进程 (B) 对进程 (A) 进行同步回调,则系统会在 (A) 中的原始 hwbinder 线程(在原始调用中已被屏蔽)上执行该调用。这种优化使单个线程服务器能够处理嵌套调用,但是对于需要在其他 IPC 调用序列中传输调用的情况,这种优化并不适用。例如,如果进程 (B) 进行了 binder/vndbinder 调用,并调用了进程 (C),然后进程 (C) 回调进程 (A),则系统无法在进程 (A) 中的原始线程上处理该调用。</p>
+<p>系统会在同一个 hwbinder 线程中发送多个嵌套调用。例如,如果进程 (A) 通过 hwbinder 线程对进程 (B) 进行同步调用,然后进程 (B) 对进程 (A) 进行同步回调,则系统会在 (A) 中的原始 hwbinder 线程(在原始调用中已被屏蔽)上执行该调用。这种优化使单个线程服务器能够处理嵌套调用,但是对于需要在其他 IPC 调用序列中传输调用的情况,这种优化并不适用。例如,如果进程 (B) 进行了 binder/vndbinder 调用,并在此过程中调用了进程 (C),然后进程 (C) 回调进程 (A),则系统无法在进程 (A) 中的原始线程上处理该调用。</p>
 
 <h2 id="model">服务器线程模型</h2>
-<p>(直通模式除外)HIDL 接口的服务器实现位于不同于客户端的进程中,并且需要一个或多个线程等待传入的方法调用。这些线程构成服务器的线程池;服务器可以决定它希望在其线程池中运行多少线程,并且可以利用一个线程的线程池规模,以便按顺序处理其接口上的所有调用。如果服务器的线程池中有多个线程,则服务器可以在其任何接口上接收同时传入的调用(在 C++ 中,这意味着必须谨慎锁定共享数据)。</p>
+<p>(直通模式除外)HIDL 接口的服务器实现位于不同于客户端的进程中,并且需要一个或多个线程等待传入的方法调用。这些线程构成服务器的线程池;服务器可以决定它希望在其线程池中运行多少线程,并且可以利用一个线程大小的线程池来按顺序处理其接口上的所有调用。如果服务器的线程池中有多个线程,则服务器可以在其任何接口上接收同时传入的调用(在 C++ 中,这意味着必须小心锁定共享数据)。</p>
 
 <p>传入同一接口的单向调用会按顺序进行处理。如果多线程客户端在接口 <code>IFoo</code> 上调用 <code>method1</code> 和 <code>method2</code>,并在接口 <code>IBar</code> 上调用 <code>method3</code>,则 <code>method1</code> 和 <code>method2</code> 将始终按顺序运行,但 <code>method3</code> 可以与 <code>method1</code> 和 <code>method2</code> 并行运行。</p>
 
@@ -45,11 +45,11 @@
 <li>当系统从服务器调用回调时,通过同步回调传回数据的服务器方法可以立即解除对客户端的阻塞。</li>
 </ul>
 
-<p>对于第二种方式,在调用回调之后执行的服务器函数中的任何代码都可以并行运行,同时服务器会处理来自客户端的后续调用。这包括服务器函数以及在函数结束时执行的自动析构函数中的代码。如果服务器的线程池中有多个线程,则即使调用仅从一个单一客户端线程传入,也会出现并行处理问题。(如果一个进程提供的任意 HAL 需要多个线程,则所有 HAL 都将具有多个线程,因为线程池是按进程共享的。)</p>
+<p>对于第二种方式,在调用回调之后执行的服务器函数中的任何代码都可以并行运行,同时服务器会处理来自客户端的后续调用。这包括服务器函数中的代码,以及在函数结束时执行的自动析构函数中的代码。如果服务器的线程池中有多个线程,那么即使仅从一个单一客户端线程传入调用,也会出现并行处理问题。(如果一个进程提供的任意 HAL 需要多个线程,则所有 HAL 都将具有多个线程,因为线程池是按进程共享的。)</p>
 
-<p>当服务器调用所提供的回调时,transport 可以立即调用客户端上已实现的回调,并解除对客户端的阻塞。客户端会继续与服务器实现在调用回调之后所执行的任何任务(可能包括正在运行的析构函数)并行运行。回调后,服务器函数中的代码不会再阻塞客户端(但前提是服务器线程池中有足够多的线程来处理传入的调用),但可以与来自客户端的未来调用并行执行(除非服务器线程池中只有一个线程)。</p>
+<p>当服务器调用所提供的回调时,transport 可以立即调用客户端上已实现的回调,并解除对客户端的阻塞。客户端会继续与服务器实现在调用回调之后所执行的任何任务(可能包括正在运行的析构函数)并行运行。回调后,只要服务器线程池中有足够多的线程来处理传入的调用,服务器函数中的代码就不会再阻塞客户端,但可以与来自客户端的未来调用并行执行(除非服务器线程池中只有一个线程)。</p>
 
-<p>除了同步回调外,来自单线程客户端的 <code>oneway</code> 调用也可以由线程池中具有多个线程的服务器并行处理,但前提是在不同的接口上执行这些 <code>oneway</code> 调用。同一接口上的 <code>oneway</code> 调用始终按顺序处理。</p>
+<p>除了同步回调外,来自单线程客户端的 <code>oneway</code> 调用也可以由线程池中具有多个线程的服务器并行处理,但前提是要在不同的接口上执行这些 <code>oneway</code> 调用。同一接口上的 <code>oneway</code> 调用一律按顺序处理。</p>
 
 <p class="note"><strong>注意</strong>:我们强烈建议服务器函数在调用回调函数后立即返回。</p>
 
@@ -80,9 +80,9 @@
 </li>
 </ul>
 
-<p>如果成功的话,客户端以参数形式传递的回调函数始终会被服务器在函数本身返回之前调用。回调是在进行函数调用的同一线程上执行,所以在函数调用期间,实现人员必须谨慎地持有锁(并尽可能彻底避免持有锁)。不含 <code>generates</code> 语句或 <code>oneway</code> 关键字的函数仍处于阻塞状态;在服务器返回 <code>Return&lt;void&gt;</code> 对象之前,客户端将一直处于阻塞状态。</p>
+<p>如果成功的话,客户端以参数形式传递的回调函数始终会在函数本身返回之前被服务器调用。回调是在进行函数调用的同一线程上执行,所以在函数调用期间,实现人员必须谨慎地持有锁(并尽可能彻底避免持有锁)。不含 <code>generates</code> 语句或 <code>oneway</code> 关键字的函数仍处于阻塞状态;在服务器返回 <code>Return&lt;void&gt;</code> 对象之前,客户端将一直处于阻塞状态。</p>
 
 <h3 id="oneway">单向调用</h3>
-<p>如果某个函数标记有 <code>oneway</code>,则客户端会立即返回,而不会等待服务器完成其函数调用。从表面(整体)上看,这意味着函数调用只用了一半的时间,因为它执行了一半的代码,但是当编写性能敏感型实现时,这会带来一些调度方面的影响。通常,使用单向调用会导致被调用程序继续被调度,而使用正常的同步调用会使调度程序立即从被调用程序转移到调用程序进程。这就是 binder 中的性能优化。对于必须在具有高优先级的目标进程中执行单向调用的服务,可以更改接收服务的调度策略。在 C++ 中,使用 <code>libhidltransport</code> 的 <code>setMinSchedulerPolicy</code> 方法并在 <code>sched.h</code> 中定义调度程序优先级和策略可确保所有对服务的调用至少以设置的调度策略和优先级运行。</p>
+<p>如果某个函数标记有 <code>oneway</code>,则客户端会立即返回,而不会等待服务器完成其函数调用。从表面(整体)上看,这意味着函数调用只用了一半的时间,因为它执行了一半的代码,但是当编写性能敏感型实现时,这会带来一些调度方面的影响。通常,使用单向调用会导致调用程序继续被调度,而使用正常的同步调用会使调度程序立即从调用程序转移到被调用程序进程。这就是 binder 中的性能优化。对于必须在具有高优先级的目标进程中执行单向调用的服务,可以更改接收服务的调度策略。在 C++ 中,使用 <code>libhidltransport</code> 的 <code>setMinSchedulerPolicy</code> 方法,并在 <code>sched.h</code> 中定义调度程序优先级和策略可确保所有对服务的调用至少以设置的调度策略和优先级运行。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/architecture/hidl/versioning.html b/zh-cn/devices/architecture/hidl/versioning.html
index c8010bf..a48fc3c 100644
--- a/zh-cn/devices/architecture/hidl/versioning.html
+++ b/zh-cn/devices/architecture/hidl/versioning.html
@@ -84,7 +84,7 @@
 <li>如有必要,可以是不透明数据(如公钥、ID 等)。</li>
 </ul>
 
-<p>如果使用不透明数据,则只能在 HIDL 接口的一侧读取相关数据。例如,如果 <code>vendor.img</code> 代码为 <code>system.img</code> 上的某个组件提供了一项字符串消息或 <code>vec&lt;uint8_t&gt;</code> 数据,则这项数据不能由 <code>system.img</code> 自行解析,只能传回到 <code>vendor.img</code> 进行解读。<strong>将值从 <code>vendor.img</code> 传递到 <code>system.img</code> 上的供应商代码或其他设备时,相关数据的格式及其解读方式必须准确描述,并且仍是相应接口的一部分。</strong></p>
+<p>如果使用不透明数据,则只能在 HIDL 接口的一侧读取相关数据。例如,如果 <code>vendor.img</code> 代码为 <code>system.img</code> 上的某个组件提供了一项字符串消息或 <code>vec&lt;uint8_t&gt;</code> 数据,则这项数据不能由 <code>system.img</code> 自行解析,只能传回到 <code>vendor.img</code> 进行解读。<strong>将值从 <code>vendor.img</code> 传递到 <code>system.img</code> 上的供应商代码或其他设备时,相关数据的格式及其解读方式必须准确描述,并且仍是相应接口的一部分</strong>。</p>
 
 <h3 id="structuring-guidelines">准则</h3>
 
@@ -118,7 +118,7 @@
 <ul>
 <li><code><var>PACKAGE</var></code> 是 HIDL 软件包的点分隔名称(例如,<code>android.hardware.nfc</code>)。</li>
 <li><code><var>VERSION</var></code> 是软件包的点分隔 major.minor 版本格式(例如,<code>1.0</code>)。</li>
-<li><code><var>UDT</var></code> 是 HIDL UDT 的点分隔名称。由于 HIDL 支持嵌套式 UDT,并且 HIDL 接口可以包含 UDT(一种嵌套式声明类型),因此采用点来访问名称。</li>
+<li><code><var>UDT</var></code> 是 HIDL UDT 的点分隔名称。由于 HIDL 支持嵌套式 UDT,并且 HIDL 接口可以包含 UDT(一种嵌套式声明),因此采用点来访问名称。</li>
 </ul>
 
 <p>例如,如果以下嵌套式声明是在 <code>1.0</code> 版本的软件包 <code>android.hardware.example</code> 内的通用类型文件中定义的:</p>
@@ -417,7 +417,7 @@
 enum Color : @1.0::Brightness { HW_GREEN, RAINBOW };
 </pre>
 
-<p>除非方法有必要使用新名称,否则应采用与其扩展的内容相似的名称。例如,<code>@1.1::IFoo</code> 中的方法 <code>foo_1_1</code> 可以取代 <code>@1.0::IFoo</code> 中 <code>foo</code> 方法的功能。</p>
+<p>如果方法可以有新的语义名称(例如 <code>fooWithLocation</code>),则首选该名称。否则,它应采用与其扩展的内容相似的名称。例如,如果没有更好的备用名称,则 <code>@1.1::IFoo</code> 中的方法 <code>foo_1_1</code> 可以取代 <code>@1.0::IFoo</code> 中 <code>foo</code> 方法的功能。</p>
 
 <h2 id="package-ext">软件包级版本编号</h2>
 <p>HIDL 版本编号在软件包级进行;软件包一经发布,便不可再改变(它的一套接口和 UDT 无法更改)。软件包可通过多种方式彼此建立关系,所有这些关系都可通过接口级继承和构建 UDT 的组合(按构成)来表示。
diff --git a/zh-cn/devices/architecture/kernel/android-common.html b/zh-cn/devices/architecture/kernel/android-common.html
index 2a80411..ea17b20 100644
--- a/zh-cn/devices/architecture/kernel/android-common.html
+++ b/zh-cn/devices/architecture/kernel/android-common.html
@@ -33,27 +33,27 @@
 <h2 id="list-of-kernels">通用内核列表</h2>
 <p>要查看 Android 通用内核列表,请访问 <a href="https://android.googlesource.com/kernel/common/" class="external">https://android.googlesource.com/kernel/common/</a>(如下所示)。</p>
 <p><img src="../images/android-diffs.png"/></p>
-<p class="img-caption"><strong>图 1.</strong> Android 通用内核列表。</p>
+<p class="img-caption"><strong>图 1. </strong> Android 通用内核列表</p>
 
 <h3 id="differences-lts">与 LTS 的区别</h3>
-<p>与 LTS (4.4.40) 相比,Android 通用内核更改了 679 行,插入了 56172 行并删除了 3340 行(截止 2017 年 2 月)。</p>
+<p>与 LTS (4.14.0) 相比,Android 通用内核更改了 355 行,插入了 32266 行,并删除了 1546 行(截至 2018 年 2 月)。</p>
 
 <p><img src="../images/kernel_lts_diff.png"/></p>
-<p class="img-caption"><strong>图 2.</strong> 各个版本的 Android 特定代码。</p>
+<p class="img-caption"><strong>图 2. </strong> 各个版本的 Android 特定代码</p>
 
 <p>最大的特性包括:</p>
 <ul>
-<li>13.8% SoC (arch/arm64, arch/x86)</li>
-<li>9.2% USB (drivers/usb)</li>
-<li>8.2% Energy Aware Scheduling (kernel/sched)</li>
-<li>8.2% Atomic Display Framework (drivers/video/adf)</li>
-<li>8.0% 网络 (net/netfilter)</li>
-<li>6.2% sdcardfs (fs/sdcardfs)</li>
-<li>5.0% Verity (drivers/md)</li>
-<li>3.7% 输入 (drivers/input/misc)</li>
-<li>3.3% FIQ 调试程序 (drivers/staging/android/fiq_debugger)</li>
-<li>2.4% Cpufreq (drivers/cpufreq)</li>
-<li>2.2% Goldfish 模拟器 (drivers/platform/goldfish)</li>
+<li>19.8% Energy Aware Scheduling (kernel/sched)</li>
+<li>13.8% 网络 (net/netfilter)</li>
+<li>13.5% Sdcardfs (fs/sdcardfs)</li>
+<li>9.4% USB (drivers/usb)</li>
+<li>7.2% SoC (arch/arm64, arch/x86)</li>
+<li>6.2% f2fs(fs/f2fs - 从上游向后移植)</li>
+<li>6.1% 输入 (drivers/input/misc)</li>
+<li>5.4% FIQ 调试程序 (drivers/staging/android/fiq_debugger)</li>
+<li>3.6% Goldfish 模拟器 (drivers/platform/goldfish)</li>
+<li>3.4% Verity (drivers/md)</li>
+<li>11.6% 其他</li>
 </ul>
 
 <h2 id="requirements">要求</h2>
@@ -86,7 +86,8 @@
 <p>所有 AOSP 通用内核都会定期接受测试,并且测试结果将公开发布。具体而言:</p>
 <ul>
 <li>在 LTS 更新或其他补丁程序合并之后,将会运行 VTS 以及一部分 CTS,相关结果将在 <a href="https://qa-reports.linaro.org/lkft" class="external">https://qa-reports.linaro.org/lkft</a> 上公布。</li>
-<li>为持续测试各种架构和版本中的编译/启动中断,将会运行 <code>kernelci</code>,相关结果将在 <a href="https://kernelci.org/job/android/" class="external">https://kernelci.org/job/android</a> 上公布。</li>
+<li>为持续测试各种架构和版本中的编译/启动中断,将会运行 <code>kernelci</code>,相关结果将在 <a href="https://kernelci.org/job/android/" class="external">https://kernelci.org/job/android</a> 上公布。
+</li>
 </ul>
 
 <h3 id="branch-hierarchy">分支层次结构 (android-4.4)</h3>
diff --git a/zh-cn/devices/architecture/kernel/releases.html b/zh-cn/devices/architecture/kernel/releases.html
index 918af70..a9b72bc 100644
--- a/zh-cn/devices/architecture/kernel/releases.html
+++ b/zh-cn/devices/architecture/kernel/releases.html
@@ -34,7 +34,7 @@
 <p>
 这种新的稳定版本流程在采用一年之后,很多不同的 Linux 用户都表示希望延长对内核的支持,而不只是几个月时间。因此,长期支持 (LTS) 内核版本应运而生,第一个 LTS 内核 (2.6.16) 在 2006 年诞生。从那时起,每年都会选择一个新的 LTS 内核,并且内核社区会为该内核提供最少 2 年的维护支持。
 </p>
-<p>在撰写本文之时,LTS 内核版本为 4.4.y 和 4.9.y,并且每周发布一个新内核。为了满足某些用户和发行方的需求,内核开发者会额外维护一些较旧的内核,但会延长发布周期。如需有关所有长期稳定内核、内核负责方以及维护时长的信息,请访问 <a href="https://www.kernel.org/category/releases.html" class="external">kernel.org 版本</a>页面。</p>
+<p>在撰写本文之时,LTS 内核版本为 4.4.y、4.9.y 和 4.14.y,并且每周发布一个新内核。为了满足某些用户和发行方的需求,内核开发者会额外维护一些较旧的内核,但会延长发布周期。如需有关所有长期稳定内核、内核负责方以及维护时长的信息,请访问 <a href="https://www.kernel.org/category/releases.html" class="external">kernel.org 版本</a>页面。</p>
 <p>
 LTS 内核版本每天平均会接纳 6-8 个补丁程序,而常规稳定内核版本每天则接纳 10-15 个补丁程序。考虑到相应开发内核版本的当前时间和其他外部不定因素,每个版本的补丁程序数量也会有所不同。LTS 内核的版本越旧,对应的补丁程序数量就越少,这是因为很多最新的错误修复程序与旧版内核无关。不过,内核版本越旧,向后移植那些需要采纳的更改就越难,这是因为代码库发生了变化。因此,虽然采纳的总体补丁程序数量比较少,但维护 LTS 内核所需的工作量要高于维护常规稳定内核所需的工作量。
 </p>
@@ -49,7 +49,7 @@
 </li><li>可以是新的设备 ID 或硬件 quirk,但不可以添加主要新功能。
 </li><li>必须已合并到 Linus Torvalds 树中。</li>
 </ul>
-<aside class="note"><strong>注意</strong>:有关哪些补丁程序可添加到稳定内核版本的规则完整列表,请参阅 <code><a href="https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html" class="external">Documentation/process/stable_kernel_rules.rst</a></code> 内核文件。</aside>
+<aside class="note"><strong>注意</strong>:有关哪些补丁程序可添加到稳定内核版本的完整规则列表,请参阅 <code><a href="https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html" class="external">Documentation/process/stable_kernel_rules.rst</a></code> 内核文件。</aside>
 
 <p>最后一条规则“必须已合并到 Linus Torvalds 树中”可防止内核社区遗漏修复程序。该社区不希望那些不在 Linus Torvalds 树中的修复程序进入稳定内核版本,以使升级的任何用户都绝不会遇到回归问题。这样可避免给维护稳定开发分支的其他项目人员带来诸多问题。</p>
 
@@ -69,7 +69,7 @@
 内核社区收到安全问题的报告时,便会尽快进行修复并将相应代码公开推送到开发树和稳定版本。如上所述,这些更改几乎从来都不会被描述为“安全修复程序”,而是看起来与内核的其他错误修复程序别无二致。这样做是为了让相关方能够在问题报告者将相应问题公诸于世之前更新其系统。
 </p>
 
-<p>要详细了解如何向内核社区报告安全错误以使其尽快得到解决和修复,请参阅《Linux 内核用户和管理员指南》(<a href="https://www.kernel.org">www.kernel.org</a>) 中的<a href="https://www.kernel.org/doc/html/latest/admin-guide/security-bugs.html" class="external">安全错误</a>部分。<em></em></p>
+<p>要详细了解如何向内核社区报告安全错误以使其尽快得到解决和修复,请参阅《Linux 内核用户和管理员指南》(<a href="https://www.kernel.org/doc/html/latest/admin-guide/security-bugs.html" class="external">www.kernel.org</a>) 中的“安全错误”<em></em>部分。<a href="https://www.kernel.org"></a></p>
 
 <p>
 由于内核团队不会公布安全错误,因此 Linux 内核相关问题的 CVE 编号通常在修复程序合并到稳定开发分支后的几周、几个月甚或几年后发布。
diff --git a/zh-cn/devices/architecture/kernel/reqs-interfaces.html b/zh-cn/devices/architecture/kernel/reqs-interfaces.html
index bdb6a2f..4bd688d 100644
--- a/zh-cn/devices/architecture/kernel/reqs-interfaces.html
+++ b/zh-cn/devices/architecture/kernel/reqs-interfaces.html
@@ -3,6 +3,7 @@
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
+
   <body>
   <!--
       Copyright 2017 The Android Open Source Project
@@ -20,43 +21,10 @@
       limitations under the License.
   -->
 
-<p>本页介绍了 Android 正常运行所需的一系列 Linux 内核接口。<a href="/devices/tech/vts/index.html">供应商测试套件 (VTS)</a> 会测试这些接口是否存在以及是否正确无误。这些接口的数量将随时间的推移不断增加,包含越来越多的 Android 内核接口。</p>
+<p>本页介绍了 Android 正常运行所需的一系列 Linux 内核接口。<a href="/devices/tech/vts/index.html">供应商测试套件 (VTS)</a> 会测试这些接口是否存在并正确无误。这些接口的数量将与日俱增,包含越来越多的 Android 内核接口。</p>
 
 <h2 id="system-calls">系统调用</h2>
-<p>系统调用提供的签名和语义应与上游 Linux 内核中的签名和语义相同。</p>
-
-<p>根据 <code>bionic/libc/SYSCALLS.txt</code>,Bionic 所需的 ARM64 系统调用如下:</p>
-
-<table>
-<tbody><tr>
-<td class="devsite-click-to-copy">accept4、acct、adjtimex、bind、brk、capget、capset、chdir、chroot、clock_adjtime、clock_getres、clock_gettime、clock_nanosleep、clock_settime、close、connect、delete_module、dup3、dup、epoll_create1、epoll_ctl、epoll_pwait、eventfd2、execve、exit、exit_group、faccessat、fadvise64、fallocate、fchdir、fchmodat、fchmod、fchownat、fchown、fcntl、fdatasync、fgetxattr、flistxattr、flock、fremovexattr、fsetxattr、fstat、newfstatat、fstatfs、fsync、ftruncate、getcpu、getcwd、getdents64、getegid、geteuid、getgid、getgroups、getitimer、getpeername、getpgid、getpid、getppid、getpriority、getresgid、getresuid、getrlimit、getrusage、getsid、getsockname、getsockopt、gettimeofday、getuid、getxattr、init_module、inotify_add_watch、inotify_init1、inotify_rm_watch、ioctl、kill、syslog、lgetxattr、linkat、listen、listxattr、llistxattr、lremovexattr、lseek、lsetxattr、madvise、mincore、mkdirat、mknodat、mlockall、mlock、mmap、mount、mprotect、mremap、msync、munlockall、munlock、munmap、nanosleep、openat、personality、pipe2、ppoll、prctl、pread64、preadv、prlimit64、process_vm_readv、process_vm_writev、pselect6、ptrace、pwrite64、pwritev、quotactl、readahead、readlinkat、read、readv、reboot、recvfrom、recvmmsg、recvmsg、removexattr、renameat、rt_sigaction、rt_sigpending、rt_sigprocmask、rt_sigqueueinfo、rt_sigsuspend、rt_sigtimedwait、sched_getaffinity、sched_getparam、sched_get_priority_max、sched_get_priority_min、sched_getscheduler、sched_rr_get_interval、sched_setaffinity、sched_setparam、sched_setscheduler、sched_yield、sendfile、sendmmsg、sendmsg、sendto、setdomainname、setfsgid、setfsuid、setgid、setgroups、sethostname、setitimer、setns、setpgid、setpriority、setregid、setresgid、setresuid、setreuid、setrlimit、setsid、setsockopt、set_tid_address、settimeofday、setuid、setxattr、shutdown、sigaltstack、signalfd4、socketpair、socket、splice、statfs、swapoff、swapon、symlinkat、sync_file_range、sync、sysinfo、tee、tgkill、timer_create、timer_delete、timerfd_create、timerfd_gettime、timerfd_settime、timer_getoverrun、timer_gettime、timer_settime、times、truncate、umask、umount2、uname、unlinkat、unshare、utimensat、vmsplice、wait4、waitid、write、writev</td>
-</tr></tbody></table>
-
-<p>根据 <code>bionic/libc/SYSCALLS.txt</code>,Bionic 所需的 ARM32 系统调用如下:</p>
-
-<table>
-<tbody><tr>
-<td class="devsite-click-to-copy">accept4、acct、adjtimex、arm_fadvise64_64、bind、brk、cacheflush、capget、capset、chdir、chroot、clock_adjtime、clock_getres、clock_gettime、clock_nanosleep、clock_settime、close、connect、delete_module、dup3、dup、epoll_create1、epoll_ctl、epoll_pwait、eventfd2、execve、exit、exit_group、faccessat、fallocate、fchdir、fchmodat、fchmod、fchownat、fchown32、fcntl64、fdatasync、fgetxattr、flistxattr、flock、fremovexattr、fsetxattr、fstat64、fstatat64、fstatfs64、fsync、ftruncate64、getcpu、getcwd、getdents64、getegid32、geteuid32、getgid32、getgroups32、getitimer、getpeername、getpgid、getpid、getppid、getpriority、getresgid32、getresuid32、ugetrlimit、getrusage、getsid、getsockname、getsockopt、gettimeofday、getuid32、getxattr、init_module、inotify_add_watch、inotify_init1、inotify_rm_watch、ioctl、kill、syslog、lgetxattr、linkat、listen、listxattr、llistxattr、_llseek、lremovexattr、lseek、lsetxattr、madvise、mincore、mkdirat、mknodat、mlockall、mlock、mmap2、mount、mprotect、mremap、msync、munlockall、munlock、munmap、nanosleep、openat、personality、pipe2、ppoll、prctl、pread64、preadv、prlimit64、process_vm_readv、process_vm_writev、pselect6、ptrace、pwrite64、pwritev、quotactl、readahead、readlinkat、read、readv、reboot、recvfrom、recvmmsg、recvmsg、removexattr、renameat、rt_sigaction、rt_sigpending、rt_sigprocmask、rt_sigqueueinfo、rt_sigsuspend、rt_sigtimedwait、sched_getaffinity、sched_getparam、sched_get_priority_max、sched_get_priority_min、sched_getscheduler、sched_rr_get_interval、sched_setaffinity、sched_setparam、sched_setscheduler、sched_yield、sendfile64、sendfile、sendmmsg、sendmsg、sendto、setdomainname、setfsgid、setfsuid、setgid32、setgroups32、sethostname、setitimer、setns、setpgid、setpriority、setregid32、setresgid32、setresuid32、setreuid32、setrlimit、setsid、setsockopt、set_tid_address、settimeofday、set_tls、setuid32、setxattr、shutdown、sigaction、sigaltstack、signalfd4、socketpair、socket、splice、statfs64、swapoff、swapon、symlinkat、sync_file_range2、sync、sysinfo、tee、tgkill、timer_create、timer_delete、timerfd_create、timerfd_gettime、timerfd_settime、timer_getoverrun、timer_gettime、timer_settime、times、truncate64、truncate、umask、umount2、uname、unlinkat、unshare、utimensat、vmsplice、wait4、waitid、write、writev</td>
-</tr></tbody></table>
-
-<p>通过绕过 Bionic,可进行下列系统调用:</p>
-
-<table>
-  <tbody><tr>
-   <th style="width:20%">所有架构</th>
-   <td>gettid、futex、clone、rt_sigreturn、rt_tgsigqueueinfo、restart_syscall、getrandom、perf_event_open、syncfs、tkill、seccomp</td>
-  </tr>
-  <tr>
-   <th>arm</th>
-   <td>vfork、sigreturn、pipe、access、stat64、lstat64、open、getdents、eventfd、epoll_wait、readlink、epoll_create、creat、unlink</td>
-  </tr>
-  <tr>
-   <th>arm64</th>
-   <td>pivot_root、ioprio_get、ioprio_set</td>
-  </tr>
-</tbody></table>
-
-<aside class="note"><strong>注意</strong>:未来的版本中将添加 x86 和 x86_64 系统调用。</aside>
+<p>所有系统调用提供的签名和语义应与同一版本的上游 Linux 内核中的签名和语义相同。</p>
 
 <h3 id="prctl">prctl</h3>
 <p>除了用于受支持的内核版本的上游 <code>prctl</code> 指令外,Android 还依赖于其他 <code>prctl</code> 指令;这些指令的实现可以在 android-common 内核中找到。</p>
@@ -72,92 +40,272 @@
 <h3 id="procfs">procfs</h3>
 <table>
   <tbody><tr>
-   <th>路径</th>
+   <th>接口</th>
    <th>说明</th>
   </tr>
   <tr>
-   <td><code>/proc/cmdline</code></td>
+  <td>/proc/asound/</td>
+  <td>用于显示当前已配置 ALSA 驱动程序列表的只读文件。</td>
+  </tr>
+  <tr>
+   <td>/proc/cmdline</td>
    <td>包含传递到内核的命令行参数的只读文件。
    </td>
   </tr>
   <tr>
-   <td><code>/proc/config.gz</code></td>
+   <td>/proc/config.gz</td>
    <td>包含内核编译配置的只读文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/cpuinfo</code></td>
+   <td>/proc/cpuinfo</td>
    <td>包含架构对应的 CPU 详细信息的只读文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/kmsg</code></td>
+    <td>/proc/diskstats</td>
+    <td>用于显示块设备的 I/O 统计信息的只读文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/filesystems</td>
+    <td>列出内核当前支持的文件系统的只读文件。</td>
+  </tr>
+  <tr>
+  </tr><tr>
+   <td>/proc/kmsg</td>
    <td>实时显示内核信息的只读文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/meminfo</code></td>
+    <td>/proc/loadavg</td>
+    <td>用于显示特定时间段内平均 CPU 负载和 I/O 负载的只读文件。</td>
+  </tr>
+  <tr>
+   <td>/proc/meminfo</td>
    <td>显示内存子系统详细信息的只读文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/modules</code></td>
+    <td>/proc/misc</td>
+    <td>列出在其他主要设备上注册的其他驱动程序的只读文件。</td>
+  </tr>
+  <tr>
+   <td>/proc/modules</td>
    <td>包含已加载内核模块的相关信息的只读文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/mounts</code></td>
+   <td>/proc/mounts</td>
  <td>指向 <code>/proc/self/mounts</code>(一个只读文件,列出了已装载的文件系统的相关信息)的符号链接。</td>
   </tr>
   <tr>
-   <td><code>/proc/net/xt_qtaguid/ctrl</code></td>
+    <td>/proc/net</td>
+    <td>包含各种网络堆栈参数的目录。</td>
+  </tr>
+  <tr>
+   <td>/proc/net/xt_qtaguid/</td>
    <td>提供已标记的套接字相关信息的读写文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/self/maps</code></td>
-   <td>包含当前映射的内存区域和权限的只读文件。</td>
+    <td>/proc/pagetypeinfo</td>
+    <td>包含页面分配器信息的只读文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/stat</code></td>
+   <td>/proc/stat</td>
    <td>包含各种内核和系统统计信息的只读文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/sys/kernel/kptr_restrict</code></td>
+    <td>/proc/swaps</td>
+    <td>用于显示交换空间利用情况的只读文件。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong>。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/abi/swp</td>
+    <td>用于确定已弃用 ARM 指令 SWP 的行为的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/fs/pipe-max-size</td>
+    <td>用于报告单个管道缓冲区的大小上限(以字节为单位)的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/fs/protected_hardlinks</td>
+    <td>用于控制硬链接的创建行为的读写文件。
+    </td>
+  </tr>
+  <tr>
+    <td>/proc/sys/fs/protected_symlinks</td>
+    <td>用于控制符号链接的创建行为的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/fs/suid_dumpable</td>
+    <td>读写文件,用于控制 SetUID 或其他受保护/被污染的二进制文件的内核转储模式。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/core_pattern</td>
+    <td>用于指定内核转储文件名模式的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/core_pipe_limit</td>
+    <td>读写文件,用于定义多少并行崩溃进程可以同时传输给用户应用。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/dmesg_restrict</td>
+    <td>用于控制无特权的用户是否可以访问 dmesg 的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/domainname</td>
+    <td>包含系统的 YP/NIS 域名的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/hostname</td>
+    <td>用于确定系统的主机名的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/hung_task_timeout_secs</td>
+    <td>读写文件,用于控制超时(用于确定任务何时变为无响应状态且应被视为挂起)。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong>。</td>
+  </tr>
+  <tr>
+   <td>/proc/sys/kernel/kptr_restrict</td>
    <td>决定内核指针是否印在 <code>proc</code> 文件和其他接口中的读写文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/sys/kernel/randomize_va_space</code></td>
-   <td>决定系统的地址布局随机化政策的读写文件。</td>
+    <td>/proc/sys/kernel/modules_disabled</td>
+    <td>用于控制是否可以加载内核模块的读写文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/sys/vm/mmap_min_addr</code></td>
+    <td>/proc/sys/kernel/panic_on_oops</td>
+    <td>用于控制出现异常状况时内核的行为的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/perf_event_max_sample_rate</td>
+    <td>用于控制性能事件的采样率上限的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/perf_event_paranoid</td>
+    <td>用于控制无特权用户对性能事件系统的使用情况的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/pid_max</td>
+    <td>包含 PID 分配封装值的读写文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/sys/kernel/random/boot_id</td>
+    <td>包含每次启动时的新随机 ID 的只读文件。</td>
+  </tr>
+  <tr>
+   <td>/proc/sys/kernel/randomize_va_space</td>
+   <td>用于确定系统的地址布局随机化政策的读写文件。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/kernel/sched_child_runs_first</td>
+  <td>读写文件,用于控制新派生的任务在调度安排上是否优先于其父级任务。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/kernel/sched_latency_ns</td>
+  <td>读写文件,包含任务在被调度安排之前可能产生的最长延迟时间(以纳秒为单位)。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/kernel/sched_rt_period_us</td>
+  <td>读写文件,包含系统级 RT 执行限制使用的周期长度(以微秒为单位)。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/kernel/sched_rt_runtime_us</td>
+  <td>读写文件,包含系统可执行 RT 任务的时间长度(相对于 sched_rt_period_us)。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/kernel/sched_tunable_scaling</td>
+  <td>读写文件,用于控制调度程序是否应根据 CPU 数量自动调整 sched_latency_ns。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/kernel/sched_wakeup_granularity_ns</td>
+  <td>读写文件,包含任务 A 的虚拟运行时必须比任务 B 多出多少(以纳秒为单位),任务 B 才能抢占它的相关信息。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/kernel/sysrq</td>
+  <td>读写文件,用于控制允许通过 sysrq 键调用的函数。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/net/*</td>
+  <td>包含各种网络堆栈参数的目录。</td>
+  </tr>
+  <tr>
+  <td>/proc/sysrq-trigger</td>
+  <td>可用于启动 sysrq 函数的只写文件。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/vm/dirty_background_ratio</td>
+  <td>读写文件,包含后台内核刷写程序线程开始写出脏数据的页数,以占总可用内存(包括空闲页面和可回收页面)的百分比的形式表示。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/vm/dirty_expire_centisecs</td>
+  <td>读写文件,定义脏数据何时可以被内核刷写程序线程写出。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/vm/drop_caches</td>
+  <td>读写文件,可用于强制内核删除已清除的缓存。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/vm/extra_free_kbytes</td>
+  <td>读写文件,可用于保留启动后台回收 (kswapd) 的阈值和启动直接回收(通过分配进程)的阈值之间的额外可用内存。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong>。</td>
+  </tr>
+  <tr>
+  <td>/proc/sys/vm/max_map_count</td>
+  <td>读写文件,包含进程可以具有的内存映射区域数上限。</td>
+  </tr>
+
+  <tr>
+   <td>/proc/sys/vm/mmap_min_addr</td>
    <td>读写文件,用于确定可进行 <code>mmap</code> 调用的最小地址。</td>
   </tr>
   <tr>
-   <td><code>/proc/sys/vm/mmap_rnd_bits</code></td>
-   <td>读写文件,会指定 <code>mmap</code> 调用的地址中的随机性程度。</td>
+   <td>/proc/sys/vm/mmap_rnd_bits</td>
+   <td>读写文件,用于指定 <code>mmap</code> 调用的地址中的随机性程度。</td>
   </tr>
   <tr>
-   <td><code>/proc/sys/vm/mmap_rnd_compat_bits</code></td>
-   <td>读写文件,会指定 <code>mmap</code> 调用的地址中的随机性程度。</td>
+   <td>/proc/sys/vm/mmap_rnd_compat_bits</td>
+   <td>读写文件,用于指定 <code>mmap</code> 调用的地址中的随机性程度。</td>
   </tr>
   <tr>
-   <td><code>/proc/sys/vm/overcommit_memory</code></td>
+   <td>/proc/sys/vm/overcommit_memory</td>
    <td>确定内核虚拟内存记录模式的读写文件。</td>
   </tr>
   <tr>
-   <td><code>/proc/uid_cputime/remove_uid_range</code></td>
+    <td>/proc/sys/vm/page-cluster</td>
+    <td>读写文件,用于控制一次可从交换中读取的连续页面数上限。</td>
+  </tr>
+  <tr>
+   <td>/proc/uid_cputime/remove_uid_range</td>
    <td>只写文件,向其中写入数据时,会移除 <code>/proc/uid_cputime/show_uid_stat</code> 中显示的 UID。</td>
   </tr>
   <tr>
-   <td><code>/proc/uid_cputime/show_uid_stat</code></td>
+   <td>/proc/uid_cputime/show_uid_stat</td>
    <td>只读文件,包含 UID 进程在用户空间和内核空间中花费的时间。</td>
   </tr>
   <tr>
-   <td><code>/proc/version</code></td>
-   <td>只读文件,包含描述内核版本的字符串。</td>
+  <td>/proc/uid_io/stats</td>
+  <td>只读文件,包含系统中每个 UID 的 I/O 统计信息列表</td>
   </tr>
   <tr>
-   <td><code>/proc/vmallocinfo</code></td>
-   <td>只读文件,包含 <code>vmalloc</code> 进行分配的范围。</td>
+  <td>/proc/uid_procstat/set</td>
+  <td>只写文件,用于将 UID 配置为前台或后台。</td>
   </tr>
   <tr>
-   <td><code>/proc/zoneinfo</code></td>
+  <td>/proc/uid_time_in_state</td>
+  <td>只读文件,包含每个 UID 的进程以每种可用频率执行的时间。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong>。</td>
+  </tr>
+  <tr>
+  <td>/proc/uptime</td>
+  <td>显示系统运行时间的只读文件。</td>
+  </tr>
+  <tr>
+   <td>/proc/version</td>
+   <td>包含描述内核版本的字符串的只读文件。</td>
+  </tr>
+  <tr>
+   <td>/proc/vmallocinfo</td>
+   <td>包含 <code>vmalloc</code> 进行分配的范围的只读文件。</td>
+  </tr>
+  <tr>
+    <td>/proc/vmstat</td>
+    <td>包含来自内核的虚拟内存统计信息的只读文件。
+    </td>
+  </tr>
+  <tr>
+   <td>/proc/zoneinfo</td>
    <td>包含内存区域相关信息的只读文件。</td>
   </tr>
 </tbody></table>
@@ -166,27 +314,27 @@
 
 <table>
   <tbody><tr>
-   <th>路径</th>
+   <th>接口</th>
    <th>说明</th>
   </tr>
   <tr>
-   <td><code>/dev/ashmem</code></td>
+   <td>/dev/ashmem</td>
    <td>匿名的共享内存设备文件。</td>
   </tr>
   <tr>
-   <td><code>/dev/binder</code></td>
+   <td>/dev/binder</td>
    <td>Binder 设备文件。</td>
   </tr>
   <tr>
-   <td><code>/dev/hwbinder</code></td>
+   <td>/dev/hwbinder</td>
    <td>硬件 binder 设备文件。</td>
   </tr>
   <tr>
-   <td><code>/dev/tun</code></td>
+   <td>/dev/tun</td>
    <td>通用 TUN/TAP 设备文件。</td>
   </tr>
   <tr>
-   <td><code>/dev/xt_qtaguid</code></td>
+   <td>/dev/xt_qtaguid</td>
    <td>QTAGUID netfilter 设备文件。</td>
   </tr>
 </tbody></table>
@@ -194,21 +342,44 @@
 <h3 id="sysfs">sysfs</h3>
 <table>
   <tbody><tr>
-   <th>路径</th>
+   <th>接口</th>
    <th>说明</th>
   </tr>
   <tr>
-   <td><code>/sys/devices/system/cpu/online</code></td>
-   <td>显示当前在线的 CPU 范围的只读文件。</td>
+  <td>/sys/class/net/*/mtu</td>
+  <td>包含每个接口的最大传输单元的读写文件。</td>
   </tr>
   <tr>
-   <td><code>/sys/kernel/wakeup_reasons/last_resume_reason</code></td>
-   <td>只读文件,会显示系统为什么退出最后一个挂起实例的文字说明。</td>
+  <td>/sys/class/rtc/*/hctosys</td>
+  <td>只读文件,显示特定 rtc 是否在启动和恢复时提供系统时间。</td>
   </tr>
   <tr>
-   <td><code>/sys/devices/system/cpu/kernel_max</code></td>
-   <td>只读文件,会显示内核支持的最大 CPU 指标。
-   </td>
+  <td>/sys/devices/system/cpu/</td>
+  <td>包含 CPU 配置和频率相关信息的目录。</td>
+  </tr>
+  <tr>
+  <td>/sys/kernel/ipv4</td>
+  <td>用于配置 TCP 套接字缓冲区大小的读写文件的目录。</td>
+  </tr>
+  <tr>
+  <td>/sys/kernel/wakeup_reasons</td>
+  <td>包含上次暂停时间和恢复原因的只读文件的目录。</td>
+  </tr>
+  <tr>
+  <td>/sys/power/state</td>
+  <td>用于控制系统休眠状态的读写文件。</td>
+  </tr>
+  <tr>
+  <td>/sys/power/wake_lock</td>
+  <td>包含有效唤醒锁定的读写文件。</td>
+  </tr>
+  <tr>
+  <td>/sys/power/wake_unlock</td>
+  <td>包含非有效唤醒锁定的读写文件。</td>
+  </tr>
+  <tr>
+  <td>/sys/power/wakeup_count</td>
+  <td>读写文件,可用于将系统置于休眠状态(同时将唤醒事件的并行就位考虑在内)。</td>
   </tr>
 </tbody></table>
 
@@ -222,16 +393,16 @@
    <th>说明</th>
   </tr>
   <tr>
-   <td><code>/sys/fs/selinux/checkreqprot</code></td>
+   <td>/sys/fs/selinux/checkreqprot</td>
    <td>读/写文件,包含可用于确定如何在 <code>mmap</code> 和 <code>mprotect</code> 调用中检查 SElinux 保护的二进制标记。
    </td>
   </tr>
   <tr>
-   <td><code>/sys/fs/selinux/null</code></td>
+   <td>/sys/fs/selinux/null</td>
    <td>供 SElinux 使用的读/写空设备。</td>
   </tr>
   <tr>
-   <td><code>/sys/fs/selinux/policy</code></td>
+   <td>/sys/fs/selinux/policy</td>
    <td>只读文件,包含了二进制文件形式的 SElinux 政策。</td>
   </tr>
 </tbody></table>
diff --git a/zh-cn/devices/architecture/vndk/deftool.html b/zh-cn/devices/architecture/vndk/deftool.html
index 27977b5..f16dfc0 100644
--- a/zh-cn/devices/architecture/vndk/deftool.html
+++ b/zh-cn/devices/architecture/vndk/deftool.html
@@ -20,53 +20,49 @@
       limitations under the License.
   -->
 
-<p>
-VNDK 定义工具可帮助供应商将其源代码树迁移到 Android 8.0 环境。该工具会先扫描系统映像及供应商映像中的二进制文件,然后解析依赖关系。若有模块依赖关系图为依据,该工具还可检测出不符合 VNDK 概念的行为,以及为在分区之间移动模块提供洞见/建议。如果指定了常规系统映像 (GSI),VNDK 定义工具便可将您的系统映像与 GSI 进行比较,从而确定扩展后的库。
-</p>
-<p>
-本部分将介绍 VNDK 定义工具常用的 3 个命令:
-</p>
+<p>VNDK 定义工具可帮助供应商将其源代码树迁移到 Android 8.0 环境。该工具会先扫描系统映像及供应商映像中的二进制文件,然后解析依赖项。若有模块依赖项图为依据,该工具还可检测出不符合 VNDK 概念的行为,以及为在分区之间移动模块提供分析数据/建议。如果指定了常规系统映像 (GSI),VNDK 定义工具便可将您的系统映像与 GSI 进行比较,从而确定扩展后的库。</p>
+
+<p>本部分将介绍 VNDK 定义工具常用的 3 个命令:</p>
+
 <ul>
-<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>
+  <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>
 
 <p>要详细了解高级命令用法,请参阅 VNDK 定义工具代码库中的 <a href="https://android.googlesource.com/platform/development/+/master/vndk/tools/definition-tool/README.md" class="external">README.md</a> 文件。</p>
 
 <h2 id="vndk">vndk</h2>
-<p><code>vndk</code> 子命令会从系统分区和供应商分区加载共享库和可执行文件,然后解析模块依赖关系,从而确定必须被复制到 <code>/system/lib[64]/vndk-sp</code> 和 <code>/vendor/lib[64]</code> 的库。<code>vndk</code> 子命令包含以下选项:</p>
+
+<p><code>vndk</code> 子命令会从系统分区和供应商分区加载共享库和可执行文件,然后解析模块依赖项,从而确定必须被复制到 <code>/system/lib[64]/vndk-sp-${VER}</code> 和 <code>/vendor/lib[64]</code> 的库。<code>vndk</code> 子命令包含以下选项:</p>
 
 <table>
-  <tbody><tr>
-   <th>选项</th>
-   <th>说明</th>
-  </tr>
-  <tr>
-   <td><code>--system</code>
-   </td>
-   <td>指向一个包含将会存放在系统分区中的文件的目录。
-   </td>
-  </tr>
-  <tr>
-   <td><code>--vendor</code>
-   </td>
-   <td>指向一个包含将会存放在供应商分区中的文件的目录。
-   </td>
-  </tr>
-  <tr>
-   <td><code>--aosp-system</code>
-   </td>
-   <td>指向一个包含将会存放在常规系统映像 (GSI) 中的文件的目录。
-   </td>
-  </tr>
-  <tr>
-   <td><code>--load-extra-deps</code>
-   </td>
-   <td>指向一个描述隐式依赖项(例如 <code>dlopen()</code>)的文件。
-   </td>
-  </tr>
+ <tbody><tr>
+  <th>选项</th>
+  <th>说明</th>
+ </tr>
+
+ <tr>
+  <td><code>--system</code></td>
+  <td>指向一个包含将会存放在系统分区中的文件的目录。</td>
+ </tr>
+
+ <tr>
+  <td><code>--vendor</code></td>
+  <td>指向一个包含将会存放在供应商分区中的文件的目录。</td>
+ </tr>
+
+ <tr>
+  <td><code>--aosp-system</code></td>
+  <td>指向一个包含将会存放在常规系统映像 (GSI) 中的文件的目录。</td>
+ </tr>
+
+ <tr>
+  <td><code>--load-extra-deps</code></td>
+  <td>指向一个描述隐式依赖项(例如 <code>dlopen()</code>)的文件。</td>
+ </tr>
 </tbody></table>
 
 <p>例如,要计算 VNDK 库集,请运行以下 <code>vndk</code> 子命令:</p>
@@ -83,38 +79,36 @@
 
 <pre class="prettyprint">/system/lib/libart.so: /system/lib/libart-compiler.so</pre>
 
-<p>通过此行,VNDK 定义工具可得知 <code>libart.so</code> 依赖 <code>libart-compiler.so</code>。
-</p>
+<p>通过此行,VNDK 定义工具可得知 <code>libart.so</code> 依赖 <code>libart-compiler.so</code>。</p>
 
 <h3 id="installation-destination">安装目标位置</h3>
+
 <p>VNDK 定义工具会列出以下类别的库及相应的安装目录:</p>
 
 <table>
-  <tbody><tr>
-   <th>类别</th>
-   <th>目录</th>
-  </tr>
-  <tr>
-   <td>vndk_sp
-   </td>
-   <td>必须安装到 <code>/system/lib[64]/vndk-sp</code>
-   </td>
-  </tr>
-  <tr>
-   <td>vndk_sp_ext
-   </td>
-   <td>必须安装到 <code>/vendor/lib[64]/vndk-sp</code>
-   </td>
-  </tr>
-  <tr>
-   <td>extra_vendor_libs
-   </td>
-   <td>必须安装到 <code>/vendor/lib[64]</code>
-   </td>
-  </tr>
+ <tbody><tr>
+  <th>类别</th>
+  <th>目录</th>
+ </tr>
+
+ <tr>
+  <td>vndk_sp</td>
+  <td>必须安装到 <code>/system/lib[64]/vndk-sp-${VER}</code></td>
+ </tr>
+
+ <tr>
+  <td>vndk_sp_ext</td>
+  <td>必须安装到 <code>/vendor/lib[64]/vndk-sp</code></td>
+ </tr>
+
+ <tr>
+  <td>extra_vendor_libs</td>
+  <td>必须安装到 <code>/vendor/lib[64]</code></td>
+ </tr>
 </tbody></table>
 
 <h3 id="build-system-templates">编译系统模板</h3>
+
 <p>在收集了 VNDK 定义工具的输出信息之后,供应商可以创建一个 <code>Android.mk</code> 并填充 <code>VNDK_SP_LIBRARIES</code>、<code>VNDK_SP_EXT_LIBRARIES</code> 和 <code>EXTRA_VENDOR_LIBRARIES</code>,以自动执行相应进程,将库复制到指定的安装目标位置。</p>
 
 <pre class="prettyprint">ifneq ($(filter $(YOUR_DEVICE_NAME),$(TARGET_DEVICE)),)
@@ -183,6 +177,7 @@
 </pre>
 
 <h2 id="check-dep">check-dep</h2>
+
 <p><code>check-dep</code> 子命令会扫描供应商模块并检查其依赖关系。如果它检测到违规行为,就会显示违规的依赖库和符号用法:</p>
 
 <pre class="prettyprint">
@@ -211,85 +206,95 @@
 <p><code>check-dep</code> 子命令包含以下选项:</p>
 
 <table>
-  <tbody><tr>
-   <th style="width:25%">选项</th>
-   <th>说明</th>
-  </tr>
-  <tr>
-   <td><code>--tag-file</code>
-   </td>
-   <td>必须引用一个符合条件的库标记文件(如下文所述),即一个由 Google 提供的描述框架共享库类别的电子表格。
-   </td>
-  </tr>
-  <tr>
-   <td><code>--module-info</code>
-   </td>
-   <td>指向由 Android 编译系统生成的 <code>module-info.json</code>。该选项可帮助 VNDK 定义工具将二进制模块与源代码关联。
-   </td>
-  </tr>
+ <tbody><tr>
+  <th style="width:25%">选项</th>
+  <th>说明</th>
+ </tr>
+
+ <tr>
+  <td><code>--tag-file</code></td>
+  <td>必须引用一个符合条件的库标记文件(如下文所述),即一个由 Google 提供的描述框架共享库类别的电子表格。</td>
+ </tr>
+
+ <tr>
+  <td><code>--module-info</code></td>
+  <td>指向由 Android 编译系统生成的 <code>module-info.json</code>。该选项可帮助 VNDK 定义工具将二进制模块与源代码关联。</td>
+ </tr>
 </tbody></table>
 
 <h3 id="eligible-library-tag-file">符合条件的库标记文件</h3>
+
 <p>Google 会提供一个符合条件的 VNDK 电子表格(例如 <code>eligible-list.csv</code>),该电子表格会标记可由供应商模块使用的框架共享库:</p>
 
 <table>
-  <tbody><tr>
-   <th style="width:25%">标记</th>
-   <th>说明</th>
-  </tr>
-  <tr>
-   <td>LL-NDK</td>
-   <td>可由框架模块和供应商模块使用的共享库(具有稳定的 ABI/API)。</td>
-  </tr>
-  <tr>
-   <td>LL-NDK-Indirect</td>
-   <td>LL-NDK 库的私有依赖项。供应商模块不得直接访问此类库。</td>
-  </tr>
-  <tr>
-   <td>VNDK-SP</td>
-   <td>SP-HAL 框架共享库依赖项。</td>
-  </tr>
-  <tr>
-   <td>VNDK-SP-Indirect</td>
-   <td>SP-HAL 无法直接访问但其他供应商模块(SP-HAL 和 SP-HAL-Dep 除外)可以访问的 VNDK-SP 依赖项</td>
-  </tr>
-  <tr>
-   <td>VNDK-SP-Indirect-Private</td>
-   <td>所有供应商模块都无法直接访问的 VNDK-SP 依赖项。</td>
-  </tr>
-  <tr>
-   <td>VNDK</td>
-   <td>面向供应商模块(SP-HAL 和 SP-HAL-Dep 除外)提供的框架共享库。</td>
-  </tr>
-  <tr>
-   <td>FWK-ONLY</td>
-   <td>供应商模块不得(直接或间接)访问、仅限框架使用的共享库。</td>
-  </tr>
-  <tr>
-   <td>FWK-ONLY-RS</td>
-   <td>供应商模块不得访问(RS 用途除外)、仅限框架使用的共享库。</td>
-  </tr>
+ <tbody><tr>
+  <th style="width:25%">标记</th>
+  <th>说明</th>
+ </tr>
+
+ <tr>
+  <td>LL-NDK</td>
+  <td>可由框架模块和供应商模块使用的共享库(具有稳定的 ABI/API)。</td>
+ </tr>
+
+ <tr>
+  <td>LL-NDK-Private</td>
+  <td>LL-NDK 库的私有依赖项。供应商模块不得直接访问此类库。</td>
+ </tr>
+
+ <tr>
+  <td>VNDK-SP</td>
+  <td>SP-HAL 框架共享库依赖项。</td>
+ </tr>
+
+ <tr>
+  <td>VNDK-SP-Private</td>
+  <td>所有供应商模块都无法直接访问的 VNDK-SP 依赖项。</td>
+ </tr>
+
+ <tr>
+  <td>VNDK</td>
+  <td>面向供应商模块(SP-HAL 和 SP-HAL-Dep 除外)提供的框架共享库。</td>
+ </tr>
+
+ <tr>
+  <td>VNDK-Private</td>
+  <td>所有供应商模块都无法直接访问的 VNDK 依赖项。</td>
+ </tr>
+
+ <tr>
+  <td>FWK-ONLY</td>
+  <td>供应商模块不得(直接或间接)访问、仅限框架使用的共享库。</td>
+ </tr>
+
+ <tr>
+  <td>FWK-ONLY-RS</td>
+  <td>供应商模块不得访问(RS 用途除外)、仅限框架使用的共享库。</td>
+ </tr>
 </tbody></table>
 
 <p>下表描述了适用于供应商共享库的标记:</p>
 
 <table>
-  <tbody><tr>
-   <th style="width:25%">标记</th>
-   <th>说明</th>
-  </tr>
-  <tr>
-   <td>SP-HAL</td>
-   <td>Same-Process HAL 实现共享库。</td>
-  </tr>
-  <tr>
-   <td>SP-HAL-Dep</td>
-   <td>SP-HAL 供应商共享库依赖项(也称为 SP-HAL 依赖项,不包括 LL-NDK 和 VNDK-SP)</td>
-  </tr>
-  <tr>
-   <td>VND-ONLY</td>
-   <td>框架模块不可见且不得访问的共享库。所复制的扩展后 VNDK 库也将被标记为 VND-ONLY。</td>
-  </tr>
+ <tbody><tr>
+  <th style="width:25%">标记</th>
+  <th>说明</th>
+ </tr>
+
+ <tr>
+  <td>SP-HAL</td>
+  <td>Same-Process HAL 实现共享库。</td>
+ </tr>
+
+ <tr>
+  <td>SP-HAL-Dep</td>
+  <td>SP-HAL 供应商共享库依赖项(也称为 SP-HAL 依赖项,不包括 LL-NDK 和 VNDK-SP)。</td>
+ </tr>
+
+ <tr>
+  <td>VND-ONLY</td>
+  <td>框架模块不可见且不得访问的共享库。所复制的扩展后 VNDK 库也将被标记为 VND-ONLY。</td>
+ </tr>
 </tbody></table>
 
 <p>标记之间的关系:</p>
@@ -298,6 +303,7 @@
 <figcaption><strong>图 1.</strong> 标记之间的关系。</figcaption>
 
 <h2 id="deps">deps</h2>
+
 <p>为了对库依赖项进行调试,<code>deps</code> 子命令会显示以下模块依赖关系:</p>
 
 <pre class="prettyprint">
@@ -316,7 +322,7 @@
 
 <p>此输出信息表明:<code>ld-android.so</code> 没有依赖项,而 <code>libc.so</code> 依赖 <code>libdl.so</code>。</p>
 
-<p>如果指定了 <code>--revert</code> 选项,<code>deps</code> 子命令就会显示<strong>库的使用情况</strong>(反向依赖关系):</p>
+<p>如果指定了 <code>--revert</code> 选项,<code>deps</code> 子命令就会显示<strong>库的使用情况</strong>(反向依赖项):</p>
 
 <pre class="prettyprint">
 <code class="devsite-terminal">./vndk_definition_tool.py deps \</code>
diff --git a/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html b/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html
index 8ca5a35..4a41cc8 100644
--- a/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html
+++ b/zh-cn/devices/architecture/vndk/dir-rules-sepolicy.html
@@ -25,7 +25,7 @@
 <h2 id="directory">目录布局</h2>
 <p><em></em>退化目录布局由以下目录组成:</p>
 <ul>
-<li><code>/system/lib[64]</code> 包含所有框架共享库,具体包括 LL-NDK、VNDK 和框架专用库(包括 LL-NDK-Indirect 和一些与 VNDK-SP 中的库同名的库)。</li>
+<li><code>/system/lib[64]</code> 包含所有框架共享库,具体包括 LL-NDK、VNDK 和框架专用库(包括 LL-NDK-Private 和一些与 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>
@@ -74,19 +74,19 @@
    <td>是</td>
   </tr>
   <tr>
-   <td>LL-NDK-Indirect</td>
+   <td>LL-NDK-Private</td>
    <td>系统</td>
    <td>是</td>
    <td>是</td>
   </tr>
   <tr>
-   <td>VNDK-SP/VNDK-SP-Indirect/VNDK-SP-Indirect-Private</td>
+   <td>VNDK-SP/VNDK-SP-Private</td>
    <td>系统</td>
    <td>是</td>
    <td>是</td>
   </tr>
   <tr>
-   <td>VNDK-SP-Ext/VNDK-SP-Indirect-Ext</td>
+   <td>VNDK-SP-Ext</td>
    <td>供应商</td>
    <td>是</td>
    <td>是</td>
@@ -135,6 +135,6 @@
   </tr>
 </tbody></table>
 
-<p>LL-NDK-Indirect、VNDK-SP-Indirect 和 VNDK-SP-Indirect-Private 必须从这两个域中都可访问,因为非 <code>coredomain</code> 会间接访问这些库。同样,SP-HAL-Dep 必须可从 <code>coredomain</code> 访问,因为 SP-HAL 依赖该域。</p>
+<p>LL-NDK-Private 和 VNDK-SP-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
index 87cafc0..30aada3 100644
--- a/zh-cn/devices/architecture/vndk/enabling.html
+++ b/zh-cn/devices/architecture/vndk/enabling.html
@@ -38,7 +38,7 @@
 </pre>
 </li>
 
-<li><strong>vendor-only</strong>(或 <code>proprietary</code>):位于供应商映像中,由供应商映像使用。
+<li><strong>vendor-only</strong>(或 <code>proprietary</code>)。位于供应商映像中,由供应商映像使用。
 <pre class="prettyprint">
 cc_library {
     name: "libThatIsVendorOnly",
diff --git a/zh-cn/devices/architecture/vndk/extensions.html b/zh-cn/devices/architecture/vndk/extensions.html
index 0bfc5c0..80f28f3 100644
--- a/zh-cn/devices/architecture/vndk/extensions.html
+++ b/zh-cn/devices/architecture/vndk/extensions.html
@@ -23,84 +23,101 @@
 <p>Android 设备制造商会出于各种原因而更改 AOSP 库的源代码。一些供应商会为了提高性能而重新实现 AOSP 库中的函数,另一些供应商则会向 AOSP 库添加新钩子、新 API 或新功能。本部分将介绍一些准则,以说明如何在不破坏 CTS/VTS 的前提下扩展 AOSP 库。</p>
 
 <h2 id="drop-in-replacement">简易替换</h2>
+
 <p>所有修改后的共享库都必须与其 AOSP 副本保持<strong>二进制兼容</strong>,且可以<strong>简易替换</strong>该副本。所有现有的 AOSP 用户都必须能在不进行重新编译的情况下使用修改后的共享库。此要求有以下几点含义:</p>
+
 <ul>
-<li>不得移除 AOSP 函数。</li>
-<li>不得更改面向用户提供的结构。</li>
-<li>不得强化函数的前提条件。</li>
-<li>函数必须提供等效功能。</li>
-<li>不得削弱函数的后置条件。</li>
+ <li>不得移除 AOSP 函数。</li>
+ <li>不得更改面向用户提供的结构。</li>
+ <li>不得强化函数的前提条件。</li>
+ <li>函数必须提供等效功能。</li>
+ <li>不得削弱函数的后置条件。</li>
 </ul>
 
 <h2 id="extended-module-classifications">扩展后的模块分类</h2>
+
 <p>按模块所<strong>定义</strong>和<strong>使用</strong>的功能对其进行分类。</p>
+
 <p class="note"><strong>注意</strong>:此处之所以使用“功能”一词而未使用 API/ABI,是因为可在不更改任何 API/ABI 的情况下添加功能。<em></em></p>
 
 <p>根据模块中定义的功能,可将模块分为 <strong>DA 模块</strong>和 <strong>DX 模块</strong>:</p>
+
 <ul>
-<li><em></em>Defining-only-AOSP 模块(DA 模块)不会定义 AOSP 副本中未包含的新功能。
- <ul>
- <li><em>示例 1:</em> 一个未经修改且完整无缺的 AOSP 库即是一个 DA 模块。</li>
- <li><em>示例 2:</em> 如果供应商使用 SIMD 指令重写 <code>libcrypto.so</code> 中的函数(不添加新函数),那么修改后的 <code>libcrypto.so</code> 将是一个 DA 模块。
+ <li>
+  <em></em>Defining-only-AOSP 模块(DA 模块)不会定义 AOSP 副本中未包含的新功能。
+
+  <ul>
+   <li><em>示例 1:</em> 一个未经修改且完整无缺的 AOSP 库即是一个 DA 模块。</li>
+
+   <li><em>示例 2:</em> 如果供应商使用 SIMD 指令重写 <code>libcrypto.so</code> 中的函数(不添加新函数),那么修改后的 <code>libcrypto.so</code> 将是一个 DA 模块。
+   </li>
+  </ul>
  </li>
- </ul>
-</li>
-<li><em></em>Defining-Extension 模块(DX 模块)要么会定义新功能,要么没有 AOSP 副本。
- <ul>
- <li><em>示例 1:</em> 如果供应商向 <code>libjpeg.so</code> 添加一个 helper 函数以访问某些内部数据,那么修改后的 <code>libjpeg.so</code> 将是一个 DX 库,而这个新增函数将是该库的扩展部分。</li>
- <li><em>示例 2:</em> 如果供应商定义了一个名为 <code>libfoo.so</code> 的非 AOSP 库,那么 <code>libfoo.so</code> 将是一个 DX 库。</li>
- </ul>
-</li>
+
+ <li>
+  <em></em>Defining-Extension 模块(DX 模块)要么会定义新功能,要么没有 AOSP 副本。
+
+  <ul>
+   <li><em>示例 1:</em> 如果供应商向 <code>libjpeg.so</code> 添加一个 helper 函数以访问某些内部数据,那么修改后的 <code>libjpeg.so</code> 将是一个 DX 库,而这个新增函数将是该库的扩展部分。</li>
+
+   <li><em>示例 2:</em> 如果供应商定义了一个名为 <code>libfoo.so</code> 的非 AOSP 库,那么 <code>libfoo.so</code> 将是一个 DX 库。</li>
+  </ul>
+ </li>
 </ul>
 
 <p>根据模块所使用的功能,可将模块分为 <strong>UA 模块</strong>和 <strong>UX 模块</strong>。</p>
+
 <ul>
-<li><em></em>Using-only-AOSP(UA 模块)仅会在其实现过程中使用 AOSP 功能。它们不依赖任何非 AOSP 扩展功能。
- <ul>
- <li><em>示例 1:</em> 一个未经修改且完整无缺的 AOSP 库即是一个 UA 模块。</li>
- <li><em>示例 2:</em> 如果修改后的共享库 <code>libjpeg.so</code> 仅依赖其他 AOSP API,那么它将是一个 UA 模块。</li>
- </ul>
-</li>
-<li><em></em>Using-Extension 模块(UX 模块)会在其实现过程中依赖某些非 AOSP 功能。
- <ul>
- <li><em>示例 1:</em> 如果修改后的 <code>libjpeg.so</code> 依赖另一个名为 <code>libjpeg_turbo2.so</code> 的非 AOSP 库,那么修改后的 <code>libjpeg.so</code> 将是一个 UX 模块。</li>
- <li><em>示例 2:</em> 如果供应商向其修改后的 <code>libexif.so</code> 添加了一个新函数,并且其修改后的 <code>libjpeg.so</code> 使用 <code>libexif.so</code> 中的这个新增函数,那么修改后的 <code>libjpeg.so</code> 将是一个 UX 模块。</li>
- </ul>
-</li>
+ <li>
+  <em></em>Using-only-AOSP(UA 模块)仅会在其实现过程中使用 AOSP 功能。它们不依赖任何非 AOSP 扩展功能。
+
+  <ul>
+   <li><em>示例 1:</em> 一个未经修改且完整无缺的 AOSP 库即是一个 UA 模块。</li>
+
+   <li><em>示例 2:</em> 如果修改后的共享库 <code>libjpeg.so</code> 仅依赖于其他 AOSP API,那么它将是一个 UA 模块。</li>
+  </ul>
+ </li>
+
+ <li>
+  <em></em>Using-Extension 模块(UX 模块)会在其实现过程中依赖某些非 AOSP 功能。
+
+  <ul>
+   <li><em>示例 1:</em> 如果修改后的 <code>libjpeg.so</code> 依赖另一个名为 <code>libjpeg_turbo2.so</code> 的非 AOSP 库,那么修改后的 <code>libjpeg.so</code> 将是一个 UX 模块。</li>
+
+   <li><em>示例 2:</em> 如果供应商向其修改后的 <code>libexif.so</code> 添加了一个新函数,并且其修改后的 <code>libjpeg.so</code> 使用 <code>libexif.so</code> 中的这个新增函数,那么修改后的 <code>libjpeg.so</code> 将是一个 UX 模块。</li>
+  </ul>
+ </li>
 </ul>
 
 <p>定义的功能和使用的功能相互独立:</p>
+
 <table>
-  <tbody><tr>
-   <td rowspan="2" colspan="2" class="columns"></td>
-   <th colspan="2">使用的功能</th>
-  </tr>
-  <tr>
-   <td>Only AOSP (UA)</td>
-   <td>Extended (UX)</td>
-  </tr>
-  <tr>
-   <th rowspan="2">定义的功能</th>
-   <td>Only AOSP (DA)</td>
-   <td>DAUA</td>
-   <td>DAUX</td>
-  </tr>
-  <tr>
-   <td>Extended (DX)</td>
-   <td>DXUA</td>
-   <td>DXUX</td>
-  </tr>
+ <tbody><tr>
+  <td rowspan="2" colspan="2" class="columns"></td>
+  <th colspan="2">使用的功能</th>
+ </tr>
+ <tr>
+  <td>Only AOSP (UA)</td>
+  <td>Extended (UX)</td>
+ </tr>
+ <tr>
+  <th rowspan="2">定义的功能</th>
+  <td>Only AOSP (DA)</td>
+  <td>DAUA</td>
+  <td>DAUX</td>
+ </tr>
+ <tr>
+  <td>Extended (DX)</td>
+  <td>DXUA</td>
+  <td>DXUX</td>
+ </tr>
 </tbody></table>
 
 <h2 id="vndk-extension-mechanism">VNDK 扩展机制</h2>
-<p>
-由于同名的 AOSP 库不包含扩展功能,因此依赖扩展功能的供应商模块将无法正常工作。如果供应商模块直接或间接依赖扩展功能,则供应商应将 DAUX、DXUA 和 DXUX 共享库复制到供应商分区(供应商进程始终都会先在供应商分区中查找共享库)。但是,由于不得复制 LL-NDK 库,因此供应商模块不得依赖由修改后的 LL-NDK 库定义的扩展功能。
-</p>
-<p>
-当系统分区被常规系统映像 (GSI) 覆盖时,如果相应的 AOSP 库可以提供相同的功能,且供应商模块可以继续正常工作,DAUA 共享库便可保留在系统分区上。
-</p>
-<p>
-简易替换非常重要,因为 GSI 中未经修改的 VNDK 库将会在名称冲突时与修改后的共享库关联。如果以 API/ABI 不兼容的方式修改 AOSP 库,那么 GSI 中的 AOSP 库可能会无法进行关联或会出现未定义的行为。
-</p>
+<p>由于同名的 AOSP 库不包含扩展功能,因此依赖扩展功能的供应商模块将无法正常工作。如果供应商模块直接或间接依赖扩展功能,则供应商应将 DAUX、DXUA 和 DXUX 共享库复制到供应商分区(供应商进程始终都会先在供应商分区中查找共享库)。但是,由于不得复制 LL-NDK 库,因此供应商模块不得依赖由修改后的 LL-NDK 库定义的扩展功能。</p>
+
+<p>当系统分区被常规系统映像 (GSI) 覆盖时,如果相应的 AOSP 库可以提供相同的功能,且供应商模块可以继续正常工作,DAUA 共享库便可保留在系统分区上。</p>
+
+<p>简易替换非常重要,因为 GSI 中未经修改的 VNDK 库将会在名称冲突时与修改后的共享库关联。如果以 API/ABI 不兼容的方式修改 AOSP 库,那么 GSI 中的 AOSP 库可能会无法进行关联或会出现未定义的行为。</p>
 
 </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 f5ecb40..3306c28 100644
--- a/zh-cn/devices/architecture/vndk/linker-namespace.html
+++ b/zh-cn/devices/architecture/vndk/linker-namespace.html
@@ -23,22 +23,22 @@
 <p>动态链接器解决了 Treble VNDK 设计中的两个难题:</p>
 
 <ul>
- <li>将 SP-HAL 共享库及其依赖项(包括 VNDK-SP 库)加载到框架进程中。应该有一些防止出现符号冲突的机制。</li>
+ <li>将 SP-HAL 共享库及其依赖项(包括 VNDK-SP 库)加载到框架进程中。这种情况下应该有一些防止出现符号冲突的机制。</li>
 
- <li><code>dlopen()</code> 和 <code>android_dlopen_ext()</code> 可能会引入一些在编译时不可见的运行时依赖关系,这些依赖关系使用静态分析很难检测到。</li>
+ <li><code>dlopen()</code> 和 <code>android_dlopen_ext()</code> 可能会引入一些在编译时不可见的运行时依赖项,这些依赖项使用静态分析很难检测到。</li>
 </ul>
 
 <p>这两个难题可以通过链接器命名空间机制来解决。<em></em>链接器命名空间机制由动态链接器提供,可以隔离不同链接器命名空间中的共享库,以确保具有相同库名称和不同符号的库不会发生冲突。</p>
 
 <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]/libcutils.so</code> 和 <code>/system/lib[64]/vndk-sp-${VER}/libutils.so</code> 是两个共享库。这两个库可能有不同的符号。它们将加载到不同的链接器命名空间中,以便框架模块可以依赖于 <code>/system/lib[64]/libcutils.so</code>,而 SP-HAL 共享库则可以依赖于 <code>/system/lib[64]/vndk-sp-${VER}/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>
+<p>动态链接器负责加载 <code>DT_NEEDED</code> 条目中指定的共享库,或由 <code>dlopen()</code> 或 <code>android_dlopen_ext()</code> 的参数指定的共享库。在这两种情况下,动态链接器都会找出调用程序所在的链接器命名空间,并尝试将相关依赖项加载到同一个链接器命名空间中。如果动态链接器无法将共享库加载到指定的链接器命名空间中,它会向关联的链接器命名空间索取导出的共享库。<em></em></p>
 
 <h2 id="configuration-file-format">配置文件格式</h2>
 
@@ -74,7 +74,7 @@
 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>/system/bin</code> 中,则会应用 <code>[system]</code> 中的规则。<em></em>同样,如果主可执行文件位于 <code>/vendor/bin</code> 中,则会应用 <code>[vendor]</code> 中的规则。<em></em></p>
 
 <p>其次,除了 <code>default</code> 链接器命名空间外,<code>addition.namespaces</code> 还为每个部分指定了将由动态链接器创建的额外链接器命名空间(用英文逗号分隔):</p>
 
@@ -92,6 +92,7 @@
 namespace.${name}.isolated = true|false
 namespace.${name}.links = namespace1,namespace2
 namespace.${name}.link.${other}.shared_libs = lib1.so:lib2.so
+namespace.${name}.link.${other}.allow_all_shared_libs = true
 namespace.${name}.visible = true|false
 </pre>
 
@@ -108,64 +109,115 @@
 
 <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.${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}.link.${other}.allow_all_shared_libs</code> 为 <code>true</code>,则所有共享库名称均可以利用后备链接。如果某个共享库无法加载到 <code>${name}</code> 链接器命名空间中,则动态链接器会尝试从 <code>${other}</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>
+<p><code>${android-src}/system/core/rootdir/etc</code> 中有三种配置。系统会根据 <code>BoardConfig.mk</code> 中 <code>PRODUCT_TREBLE_LINKER_NAMESPACES</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><code>PRODUCT_TREBLE_</code><br /><code>LINKER_NAMESPACES</code></th>
+  <th><code>BOARD_VNDK_</code><br /><code>VERSION</code></th>
+  <th><code>BOARD_VNDK_</code><br /><code>RUNTIME_DISABLE</code></th>
   <th>选择的配置</th>
+  <th>VTS 要求</th>
+ </tr>
+
+ <tr>
+  <td rowspan="3"><code>true</code></td>
+  <td rowspan="2"><code>current</code></td>
+  <td><em>empty</em></td>
+  <td><code>ld.config.txt</code></td>
+  <td>搭载 Android P 的设备的必要配置。</td>
+ </tr>
+
+ <tr>
+  <td><code>true</code></td>
+  <td rowspan="2"><code>ld.config.vndk_lite.txt</code></td>
+  <td rowspan="2">搭载 Android 8.x 的设备的必要配置。</td>
+ </tr>
+
+ <tr>
+  <td><em>empty</em></td>
+  <td><em>any</em></td>
  </tr>
 
  <tr>
   <td><code>false</code></td>
   <td><em>any</em></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>
+  <td>适用于不支持 Treble 的设备</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.vndk_lite.txt</code> 会隔离 SP-HAL 和 VNDK-SP 共享库。在 Android 8.0 及更高版本中,当 <code>PRODUCT_TREBLE_LINKER_NAMESPACES</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><code>${android-src}/system/core/rootdir/etc/ld.config.txt</code> 也会隔离 SP-HAL 和 VNDK-SP 共享库。此外,<code>ld.config.txt</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>
+<p>在 Android 8.1 中,<code>ld.config.txt</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>
+<p>如果 <code>BOARD_VNDK_RUNTIME_DISABLE</code> 为 <code>true</code>,则会安装 <code>${android-src}/system/core/rootdir/etc/ld.config.vndk_lite.txt</code>。</p>
 
 <h3 id="ld.config.txt">ld.config.txt</h3>
 
-<p>从 Android 8.0 开始,动态链接器将配置为隔离 SP-HAL 和 VNDK-SP 共享库,以使其符号不会与其他框架共享库发生冲突。链接器命名空间之间的关系如下所示:</p>
+<p><code>ld.config.txt</code> 会隔离系统分区和供应商分区之间的共享库依赖项。下文概述了该配置文件与上一小节中提到的 <code>ld.config.txt</code> 相比有哪些不同:</p>
 
-<img src="../images/treble_vndk_linker_namespace1.png" alt="ld.config.txt 中描绘的链接器命名空间图表"/>
- <figcaption><strong>图 2.</strong> 链接器命名空间隔离 (<code>ld.config.txt</code>)。</figcaption>
+<ul>
+ <li>
+  <p>框架进程</p>
 
-<p><em></em><em></em>LL-NDK 和 VNDK-SP 代表以下共享库:
-</p>
+  <ul>
+   <li>创建了四个命名空间(<code>default</code>、<code>vndk</code>、<code>sphal</code> 和 <code>rs</code>)。</li>
+
+   <li>系统会隔离所有命名空间。</li>
+
+   <li>将系统共享库加载到 <code>default</code> 命名空间中。</li>
+
+   <li>将 SP-HAL 加载到 <code>sphal</code> 命名空间中。</li>
+
+   <li>将 VNDK-SP 共享库加载到 <code>vndk</code> 命名空间中。</li>
+  </ul>
+ </li>
+
+ <li>
+  <p>供应商进程</p>
+
+  <ul>
+   <li>创建了三个命名空间(<code>default</code>、<code>vndk</code> 和 <code>system</code>)。</li>
+
+   <li>系统会隔离 <code>default</code> 命名空间。</li>
+
+   <li>将供应商共享库加载到 <code>default</code> 命名空间中。</li>
+
+   <li>将 VNDK 和 VNDK-SP 共享库加载到 <code>vndk</code> 命名空间中。</li>
+
+   <li>将 LL-NDK 及其依赖项加载到 <code>system</code> 命名空间中。</li>
+  </ul>
+ </li>
+</ul>
+
+<p>链接器命名空间之间的关系如下图所示:</p>
+
+<img src="../images/treble_vndk_linker_namespace3.png" alt="ld.config.txt 中描绘的链接器命名空间图表"/>
+<figcaption>
+ <strong>图 1.</strong> 链接器命名空间隔离 (<code>ld.config.txt</code>)
+</figcaption>
+
+<p>在上图中,LL-NDK 和 VNDK-SP 代表以下共享库:<em></em><em></em></p>
 
 <ul>
  <li>
@@ -175,15 +227,17 @@
    <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>libstdc++.so</code>(不在 <code>ld.config.txt.in</code> 中)</li>
+   <li><code>libneuralnetworks.so</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>
+   <li><code>libvulkan.so</code></li>
   </ul>
  </li>
 
@@ -192,11 +246,14 @@
 
   <ul>
    <li><code>[email protected]</code></li>
-   <li><code>[email protected]</code></li>
    <li><code>[email protected]</code></li>
    <li><code>[email protected]</code></li>
    <li><code>[email protected]</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>
@@ -206,6 +263,7 @@
    <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>
@@ -224,29 +282,43 @@
   <td><code>search.paths</code></td>
   <td>
    <code>/system/${LIB}</code><br />
-   <code>/vendor/${LIB}</code>
+   <code>/product/${LIB}</code>
   </td>
  </tr>
 
  <tr>
   <td><code>permitted.paths</code></td>
   <td>
-   <code>/system/${LIB}</code><br />
-   <code>/vendor/${LIB}</code>
-  </td>
+   <code>/system/${LIB}/drm</code><br />
+   <code>/system/${LIB}/extractors</code><br />
+   <code>/system/${LIB}/hw</code><br />
+   <code>/product/${LIB}</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/priv-app</code><br />
+   <code>/oem/app</code><br />
+   <code>/odm/priv-app</code><br />
+   <code>/oem/app</code><br />
+   <code>/product/framework</code><br />
+   <code>/product/app</code><br />
+   <code>/product/priv-app</code><br />
+   <code>/data</code><br />
+   <code>/mnt/expand
+  </code></td>
  </tr>
 
  <tr>
   <td><code>isolated</code></td>
-  <td><code>false</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>/odm/${LIB}</code><br />
    <code>/vendor/${LIB}</code>
   </td>
  </tr>
@@ -254,8 +326,8 @@
  <tr>
   <td><code>permitted.paths</code></td>
   <td>
-   <code>/vendor/${LIB}</code><br />
-   <code>/system/${LIB}/vndk-sp/hw</code> (Android 8.1)
+   <code>/odm/${LIB}</code><br />
+   <code>/vendor/${LIB}</code>
   </td>
  </tr>
 
@@ -273,34 +345,40 @@
   <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 rowspan="7"><code>vndk</code>(适用于 VNDK-SP)</td>
   <td><code>search.paths</code></td>
   <td>
+   <code>/odm/${LIB}/vndk-sp</code><br />
    <code>/vendor/${LIB}/vndk-sp</code><br />
-   <code>/system/${LIB}/vndk-sp</code><br />
-   <code>/vendor/${LIB}</code>
+   <code>/system/${LIB}/vndk-sp-${VER}</code>
   </td>
  </tr>
 
  <tr>
   <td><code>permitted.paths</code></td>
   <td>
+   <code>/odm/${LIB}/hw</code><br />
+   <code>/odm/${LIB}/egl</code><br />
+   <code>/vendor/${LIB}/hw</code><br />
    <code>/vendor/${LIB}/egl</code><br />
-   <code>/vendor/${LIB}/hw</code>
+   <code>/system/${LIB}/vndk-sp-${VER}/hw</code>
   </td>
  </tr>
 
@@ -316,7 +394,7 @@
 
  <tr>
   <td><code>links</code></td>
-  <td><code>default</code></td>
+  <td><code>default</code>、<code>sphal</code></td>
  </tr>
 
  <tr>
@@ -325,11 +403,18 @@
  </tr>
 
  <tr>
+  <td><code>link.default.allow_all_shared_libs</code></td>
+  <td><code>true</code></td>
+ </tr>
+
+ <tr>
   <td rowspan="7"><code>rs</code>(适用于 Renderscript)</td>
   <td><code>search.paths</code></td>
   <td>
+   <code>/odm/${LIB}/vndk-sp</code><br />
    <code>/vendor/${LIB}/vndk-sp</code><br />
-   <code>/system/${LIB}/vndk-sp</code><br />
+   <code>/system/${LIB}/vndk-sp-${VER}</code><br />
+   <code>/odm/${LIB}</code><br />
    <code>/vendor/${LIB}</code>
   </td>
  </tr>
@@ -337,6 +422,7 @@
  <tr>
   <td><code>permitted.paths</code></td>
   <td>
+   <code>/odm/${LIB}</code><br />
    <code>/vendor/${LIB}</code><br />
    <code>/data</code>(适用于已编译的 RS 内核)
   </td>
@@ -382,60 +468,105 @@
  </tr>
 
  <tr>
-  <td rowspan="2"><code>default</code></td>
+  <td rowspan="7"><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>(已弃用)
+   <code>/odm/${LIB}</code><br />
+   <code>/vendor/${LIB}</code>
   </td>
  </tr>
 
  <tr>
+  <td><code>permitted.paths</code></td>
+  <td>
+   <code>/odm</code><br />
+   <code>/vendor</code><br />
+  </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>system</code>、<code>vndk</code></td>
+ </tr>
+
+ <tr>
+  <td><code>link.system.shared_libs</code></td>
+  <td><em>LL-NDK</em></td>
+ </tr>
+
+ <tr>
+  <td><code>link.vndk.shared_libs</code></td>
+  <td><em>VNDK</em>、<em>VNDK-SP</em>(供应商可用)</td>
+ </tr>
+
+ <tr>
+  <td rowspan="5"><code>vndk</code></td>
+  <td><code>search.paths</code></td>
+  <td>
+   <code>/odm/${LIB}/vndk</code><br />
+   <code>/odm/${LIB}/vndk-sp</code><br />
+   <code>/vendor/${LIB}/vndk</code><br />
+   <code>/vendor/${LIB}/vndk-sp</code><br />
+   <code>/system/${LIB}/vndk-${VER}</code><br />
+   <code>/system/${LIB}/vndk-sp-${VER}</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>、<code>default</code></td>
+ </tr>
+
+ <tr>
+  <td><code>link.system.shared_libs</code></td>
+  <td><em>LL-NDK</em></td>
+ </tr>
+
+ <tr>
+  <td><code>link.default.allow_all_shared_libs</code></td>
+  <td><code>true</code></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>isolated</code></td>
   <td><code>false</code></td>
  </tr>
 </tbody></table>
 
-<p>更多详情可以在 <code>android-src/system/core/rootdir/etc/ld.config.txt</code> 中找到。</p>
+<p>更多详情请见 <code>${android-src}/system/core/rootdir/etc/ld.config.txt</code>。</p>
 
-<h3 id="ld.config.txt.in">ld.config.txt.in</h3>
+<h3 id="ld.config.vndk_lite.txt">ld.config.vndk_lite.txt</h3>
 
-<p><code>ld.config.txt.in</code> 会隔离系统分区和供应商分区之间的共享库依赖关系。下文概述了该配置文件与上一小节中提到的 <code>ld.config.txt</code> 相比有哪些不同:</p>
+<p>从 Android 8.0 开始,动态链接器将配置为隔离 SP-HAL 和 VNDK-SP 共享库,以使其符号不会与其他框架共享库发生冲突。链接器命名空间之间的关系如下所示:</p>
 
-<ul>
- <li>
-  框架进程
+<img src="../images/treble_vndk_linker_namespace1.png" alt="ld.config.vndk_lite.txt 中描绘的链接器命名空间图表"/>
+<figcaption>
+ <strong>图 2.</strong> 链接器命名空间隔离 (<code>ld.config.vndk_lite.txt</code>)
+</figcaption>
 
-  <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>
-
-<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>
+<p><em></em><em></em>LL-NDK 和 VNDK-SP 代表以下共享库:
+</p>
 
 <ul>
  <li>
@@ -445,15 +576,15 @@
    <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>libstdc++.so</code>(不在 <code>ld.config.txt</code> 中)</li>
    <li><code>libsync.so</code></li>
    <li><code>libvndksupport.so</code></li>
+   <li><code>libz.so</code>(已移到 <code>ld.config.txt</code> 中的 VNDK-SP)<em></em></li>
   </ul>
  </li>
 
@@ -462,15 +593,10 @@
 
   <ul>
    <li><code>[email protected]</code></li>
-   <li><code>[email protected]</code></li>
    <li><code>[email protected]</code></li>
    <li><code>[email protected]</code></li>
    <li><code>[email protected]</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>
@@ -480,12 +606,11 @@
    <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>
 
-<p>下表列出了框架进程的命名空间配置(摘自 <code>ld.config.txt.in</code> 中的 <code>[system]</code> 部分):</p>
+<p>下表列出了框架进程的命名空间配置(摘自 <code>ld.config.vndk_lite.txt</code> 中的 <code>[system]</code> 部分):</p>
 
 <table>
  <tbody><tr>
@@ -495,38 +620,26 @@
  </tr>
 
  <tr>
-  <td rowspan="3"><code>default</code></td>
+  <td rowspan="2"><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>
+   <code>/system/${LIB}</code><br />
+   <code>/odm/${LIB}</code><br />
+   <code>/vendor/${LIB}</code><br />
+   <code>/product/${LIB}</code>
+  </td>
  </tr>
 
  <tr>
   <td><code>isolated</code></td>
-  <td><code>true</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>/odm/${LIB}</code><br />
    <code>/vendor/${LIB}</code>
   </td>
  </tr>
@@ -534,8 +647,8 @@
  <tr>
   <td><code>permitted.paths</code></td>
   <td>
-   <code>/vendor/${LIB}</code><br />
-   <code>/system/${LIB}/vndk-sp/hw</code>
+   <code>/odm/${LIB}</code><br />
+   <code>/vendor/${LIB}</code>
   </td>
  </tr>
 
@@ -553,17 +666,14 @@
   <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>
@@ -573,16 +683,20 @@
   <td rowspan="6"><code>vndk</code>(适用于 VNDK-SP)</td>
   <td><code>search.paths</code></td>
   <td>
+   <code>/odm/${LIB}/vndk-sp</code><br />
    <code>/vendor/${LIB}/vndk-sp</code><br />
-   <code>/system/${LIB}/vndk-sp</code>
+   <code>/system/${LIB}/vndk-sp-${VER}</code>
   </td>
  </tr>
 
  <tr>
   <td><code>permitted.paths</code></td>
   <td>
+   <code>/odm/${LIB}/hw</code><br />
+   <code>/odm/${LIB}/egl</code><br />
+   <code>/vendor/${LIB}/hw</code><br />
    <code>/vendor/${LIB}/egl</code><br />
-   <code>/vendor/${LIB}/hw</code>
+   <code>/system/${LIB}/vndk-sp-${VER}/hw</code><br />
   </td>
  </tr>
 
@@ -610,8 +724,10 @@
   <td rowspan="7"><code>rs</code>(适用于 Renderscript)</td>
   <td><code>search.paths</code></td>
   <td>
+   <code>/odm/${LIB}/vndk-sp</code><br />
    <code>/vendor/${LIB}/vndk-sp</code><br />
-   <code>/system/${LIB}/vndk-sp</code><br />
+   <code>/system/${LIB}/vndk-sp-${VER}</code><br />
+   <code>/odm/${LIB}</code><br />
    <code>/vendor/${LIB}</code>
   </td>
  </tr>
@@ -619,6 +735,7 @@
  <tr>
   <td><code>permitted.paths</code></td>
   <td>
+   <code>/odm/${LIB}</code><br />
    <code>/vendor/${LIB}</code><br />
    <code>/data</code>(适用于已编译的 RS 内核)
   </td>
@@ -654,7 +771,7 @@
  </tr>
 </tbody></table>
 
-<p>下表列出了供应商进程的命名空间配置(摘自 <code>ld.config.txt.in</code> 中的 <code>[vendor]</code> 部分):</p>
+<p>下表列出了供应商进程的命名空间配置(摘自 <code>ld.config.vndk_lite.txt</code> 中的 <code>[vendor]</code> 部分):</p>
 
 <table>
  <tbody><tr>
@@ -664,55 +781,72 @@
  </tr>
 
  <tr>
-  <td rowspan="5"><code>default</code></td>
+  <td rowspan="2"><code>default</code></td>
   <td><code>search.paths</code></td>
   <td>
-   <code>/vendor/${LIB}/hw</code><br />
-   <code>/vendor/${LIB}/egl</code><br />
+   <code>/odm/${LIB}</code><br />
+   <code>/odm/${LIB}/vndk</code><br />
+   <code>/odm/${LIB}/vndk-sp</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>
+   <code>/system/${LIB}/vndk-${VER}</code><br />
+   <code>/system/${LIB}/vndk-sp-${VER}</code><br />
+   <code>/system/${LIB}</code>(已弃用)<br />
+   <code>/product/${LIB}</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>
+  <td><code>false</code></td>
  </tr>
 </tbody></table>
 
-<p>更多详情可以在 <code>android-src/system/core/rootdir/etc/ld.config.txt.in</code> 中找到。</p>
+<p>更多详情请见 <code>${android-src}/system/core/rootdir/etc/ld.config.vndk_lite.txt</code>。</p>
+
+<h2 id="document-history">文档历史记录</h2>
+
+<h3 id="changes-p">Android P 变更</h3>
+
+<ul>
+ <li><p>在 Android P 中,<code>vndk</code> 链接器命名空间已添加到供应商进程,而且 VNDK 共享库已与默认链接器命名空间隔离开。</p></li>
+
+ <li><p>将 <code>PRODUCT_FULL_TREBLE</code> 替换为更具体的 <code>PRODUCT_TREBLE_LINKER_NAMESPACES</code>。</p></li>
+
+ <li>
+  <p>Android P 更改了以下动态链接器配置文件的名称:</p>
+
+  <table>
+   <tbody><tr>
+    <th>Android 8.x</th>
+    <th>Android P</th>
+    <th>说明</th>
+   </tr>
+
+   <tr>
+    <td>ld.config.txt.in</td>
+    <td>ld.config.txt</td>
+    <td>对于具有运行时链接器命名空间隔离的设备</td>
+   </tr>
+
+   <tr>
+    <td>ld.config.txt</td>
+    <td>ld.config.vndk_lite.txt</td>
+    <td>对于具有 VNDK-SP 链接器命名空间隔离的设备</td>
+   </tr>
+
+   <tr>
+    <td>ld.config.legacy.txt</td>
+    <td>ld.config.legacy.txt</td>
+    <td>对于搭载 Android 7.x 及更早版本的旧版设备</td>
+   </tr>
+  </tbody></table>
+ </li>
+
+ <li><p>移除 <code>[email protected]</code>。</p></li>
+
+ <li><p>添加了 <code>product</code> 和 <code>odm</code> 分区。</p></li>
+</ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/architecture/vndk/renderscript.html b/zh-cn/devices/architecture/vndk/renderscript.html
index d9c34ac..32dea1e 100644
--- a/zh-cn/devices/architecture/vndk/renderscript.html
+++ b/zh-cn/devices/architecture/vndk/renderscript.html
@@ -20,32 +20,52 @@
       limitations under the License.
   -->
 
-<p><em></em>RenderScript 是用于在 Android 上以高性能运行计算密集型任务的框架。RenderScript 专为数据并行计算而设计,不过串行工作负载也可以从中受益。RenderScript 运行时可以并行安排设备上可用的多个处理器(如多核 CPU 和 GPU)上的工作负载,使开发者能够专注于表达算法而不是调度工作。RenderScript 对于专注于图像处理、计算摄影或计算机视觉的应用来说尤其有用。</p>
-
-<p>Android O 设备使用以下 RenderScript 框架和供应商 HAL:
+<p>
+  <em></em>RenderScript 是用于在 Android 上以高性能运行计算密集型任务的框架。RenderScript 专为数据并行计算而设计,不过串行工作负载也可以从中受益。RenderScript 运行时可以并行安排设备上可用的多个处理器(如多核 CPU 和 GPU)上的工作负载,使开发者能够专注于表达算法而不是调度工作。RenderScript 对于专注于图像处理、计算摄影或计算机视觉的应用来说尤其有用。
 </p>
+
+<p>
+  运行 Android 8.0 及更高版本的设备使用以下 RenderScript 框架和供应商 HAL:
+</p>
+
 <img src="../images/treble_rs_linking.png"/>
-<figcaption><strong>图 1.</strong> 与内部库相关联的供应商代码。
+<figcaption>
+  <strong>图 1.</strong> 与内部库相关联的供应商代码
 </figcaption>
 
-<p>与 Android 7.x 及更早版本中的 RenderScript 之间的区别包括:</p>
+<p>
+  与 Android 7.x 及更低版本中的 RenderScript 之间的区别包括:
+</p>
+
 <ul>
-<li>一个进程中有两组 RenderScript 内部库的实例。一组用于 CPU 备用路径,直接来源于 <code>/system/lib</code>;另一组用于 GPU 路径,来源于 <code>/system/lib/vndk-sp</code>。</li>
-<li><code>/system/lib</code> 中的 RS 内部库是作为平台的一部分构建的,会随着 <code>system.img</code> 的升级而更新。不过,<code>/system/lib/vndk-sp</code> 中的库是面向供应商构建的,不会随着 <code>system.img</code> 的升级而更新(虽然可以针对安全修复程序进行更新,但其 ABI 仍然保持不变)。</li>
-<li>供应商代码(RS HAL、RS 驱动程序和 bcc 插件)与位于 <code>/system/lib/vndk-sp</code> 的 RenderScript 内部库相关联。它们无法与 <code>/system/lib</code> 中的库相关联,因为该目录中的库是面向平台构建的,可能与供应商代码不兼容(即,符号可能会被移除)。如此一来可能会导致仅针对框架的 OTA 无法实现。</li>
+  <li>一个进程中有两组 RenderScript 内部库的实例。一组用于 CPU 备用路径,直接来源于 <code>/system/lib</code>;另一组用于 GPU 路径,来源于 <code>/system/lib/vndk-sp</code>。</li>
+  <li><code>/system/lib</code> 中的 RS 内部库是作为平台的一部分构建的,会随着 <code>system.img</code> 的升级而更新。不过,<code>/system/lib/vndk-sp</code> 中的库是面向供应商构建的,不会随着 <code>system.img</code> 的升级而更新(虽然可以针对安全修复程序进行更新,但其 ABI 仍然保持不变)。</li>
+  <li>供应商代码(RS HAL、RS 驱动程序和 <code>bcc plugin</code>)与位于 <code>/system/lib/vndk-sp</code> 的 RenderScript 内部库相关联。它们无法与 <code>/system/lib</code> 中的库相关联,因为该目录中的库是面向平台构建的,可能与供应商代码不兼容(即,符号可能会被移除)。如此一来可能会导致仅针对框架的 OTA 无法实现。</li>
 </ul>
 
-<p>有关详情,请参阅 developer.android.com 上的 <a href="https://developer.android.com/guide/topics/renderscript/compute.html" class="external">Renderscript</a>。</p>
+<p>
+  有关详情,请参阅 developer.android.com 上的 <a href="https://developer.android.com/guide/topics/renderscript/compute.html" class="external">Renderscript</a>。
+</p>
 
 <h2 id="design">设计</h2>
-<p>以下部分详细介绍了 Android O 中的 RenderScript 设计。</p>
+
+<p>
+  以下部分详细介绍了 Android 8.0 及更高版本中的 RenderScript 设计。
+</p>
 
 <h3 id="renderscript-libs-available-to-vendors">供应商可使用的 RenderScript 库</h3>
-<p>本部分列出了向供应商代码开放且可与之关联的 RenderScript 库(称为供应商 NDK,适用于 Same-Process HAL 或 VNDK-SP)。此外,本部分还详细介绍了虽然与 RenderScript 无关但也已向供应商代码提供的其他库。</p>
 
-<p>虽然以下库的列表可能会因 Android 版本而异,但对于特定的 Android 版本来说是不变的;有关可用库的最新列表,请参阅 <code>/system/etc/ld.config.txt</code>。</p>
+<p>
+  本部分列出了向供应商代码开放且可与之关联的 RenderScript 库(称为供应商 NDK,适用于 Same-Process HAL 或 VNDK-SP)。此外,本部分还详细介绍了虽然与 RenderScript 无关但也已向供应商代码提供的其他库。
+</p>
 
-<aside class="note"><strong>注意</strong>:任何供应商代码都无法使用下面未列出的库;也就是说,供应商的 bcc 插件无法使用 <code>libLLVM.so</code>,因为以下列表中不包含该库。</aside>
+<p>
+  虽然以下库的列表可能会因 Android 版本而异,但对于特定的 Android 版本来说是不变的;有关可用库的最新列表,请参阅 <code>/system/etc/ld.config.txt</code>。
+</p>
+
+<aside class="note">
+  <strong>注意</strong>:任何供应商代码都无法使用下面未列出的库;也就是说,供应商的 <code>bcc plugin</code> 无法使用 <code>libLLVM.so</code>,因为以下列表中不包含该库。
+</aside>
 
 <table>
 <tbody><tr>
@@ -89,95 +109,155 @@
 </tbody></table>
 
 <h3 id="linker-namespace-configuration">链接器命名空间配置</h3>
-<p>系统会在运行时使用链接器命名空间,强制实施关联限制,阻止供应商代码使用 VNDK-SP 中未包含的库(有关详情,请参阅 <a href="/devices/architecture/images/vndk_design_android_o.pdf">Android O 中的 VNDK 设计</a>演示文稿)。</p>
 
-<p><em></em>在运行 Android O 的设备上,除 RenderScript 之外的所有 Same-Process HAL (SP-HA) 都会在链接器命名空间 <code>sphal</code> 中加载。RenderScript 将被加载到 RenderScript 专用的命名空间 <code>rs</code> 中,该位置对 RenderScript 库的限制稍微宽松些。由于 RS 实现需要加载编译后的位码,因此系统会将 <code>/data/*/*.so</code> 添加到 <code>rs</code> 命名空间的路径中(不允许其他 SP-HAL 从该数据分区加载库)。</p>
+<p>
+  系统会在运行时使用链接器命名空间,强制实施关联限制,阻止供应商代码使用 VNDK-SP 中未包含的库(有关详情,请参阅 <a href="/devices/architecture/images/VNDK.pdf">VNDK 设计</a>演示文稿)。
+</p>
 
-<p>此外,<code>rs</code> 命名空间可以提供比其他命名空间更多的库。<code>libmediandk.so</code> 和 <code>libft2.so</code> 会暴露给 <code>rs</code> 命名空间,因为 <code>libRS_internal.so</code> 有一个对这些库的内部依赖项。</p>
+<p>
+  <em></em>在运行 Android 8.0 及更高版本的设备上,除 RenderScript 之外的所有 Same-Process HAL (SP-HA) 都会在链接器命名空间 <code>sphal</code> 中加载。RenderScript 将被加载到 RenderScript 专用的命名空间 <code>rs</code> 中,该位置对 RenderScript 库的限制稍微宽松些。由于 RS 实现需要加载编译后的位码,因此系统会将 <code>/data/*/*.so</code> 添加到 <code>rs</code> 命名空间的路径中(不允许其他 SP-HAL 从该数据分区加载库)。
+</p>
+
+<p>
+  此外,<code>rs</code> 命名空间所允许的库要比其他命名空间提供的库多。<code>libmediandk.so</code> 和 <code>libft2.so</code> 将可用于 <code>rs</code> 命名空间,因为 <code>libRS_internal.so</code> 有一个对这些库的内部依赖项。
+</p>
 
 <img src="../images/treble_rs_namespace.png"/>
-<figcaption><strong>图 2.</strong> 链接器的命名空间配置。
+<figcaption>
+  <strong>图 2.</strong> 链接器的命名空间配置
 </figcaption>
 
 <h3 id="loading-drivers">加载驱动程序</h3>
 
 <h4>CPU 备用路径</h4>
-<p>根据在创建 RS 上下文时是否存在 <code>RS_CONTEXT_LOW_LATENCY</code> 位,可以选择 CPU 或 GPU 路径。选择 CPU 路径时,系统会直接从默认链接器命名空间(提供了 RS 库的平台版本)对 <code>libRS_internal.so</code>(RS 框架的主要实现)执行 <code>dlopen</code> 处理。</p>
 
-<p>采用 CPU 备用路径时,系统根本不会使用来自供应商的 RS HAL 实现,而是通过空的 <code>mVendorDriverName</code> 创建一个 <code>RsContext</code> 对象。系统会对 <code>libRSDriver.so</code> 执行 <code>dlopen</code> 处理(默认情况下),且驱动程序库会从 <code>default</code> 名称空间加载,因为调用程序 (<code>libRS_internal.so</code>) 也会在 <code>default</code> 命名空间中加载。</p>
-
-<img src="../images/treble_rs_cpu_fallback.png"/>
-<figcaption><strong>图 4.</strong> CPU 备用路径。</figcaption>
-
-<h4 id="gpu-path">GPU 路径</h4>
-<p>对于 GPU 路径来说,系统会通过不同的方式加载 <code>libRS_internal.so</code>。首先,<code>libRS.so</code> 使用 <code>[email protected]</code>(及其底层的 <code>libhidltransport.so</code>)将 <code>[email protected]</code>(一种 RS HAL 的供应商实现)加载到一个不同的链接器命名空间(名称为 <code>sphal</code>)。然后,RS HAL 在另一个名称为 <code>rs</code> 的链接器命名空间中对 <code>libRS_internal.so</code> 执行 <code>dlopen</code> 处理。</p>
-
-<p>供应商可以通过设置编译时标记 <code>OVERRIDE_RS_DRIVER</code> 来提供自己的 RS 驱动程序,该标记嵌入在 RS HAL 实现 (<code>hardware/interfaces/renderscript/1.0/default/Context.cpp</code>) 中。然后,系统会在 GPU 路径的 RS 上下文中对该驱动程序名称执行 <code>dlopen</code> 处理。
+<p>
+  根据在创建 RS 上下文时是否存在 <code>RS_CONTEXT_LOW_LATENCY</code> 位,可以选择 CPU 或 GPU 路径。选择 CPU 路径时,系统会直接从默认链接器命名空间(提供了 RS 库的平台版本)对 <code>libRS_internal.so</code>(RS 框架的主要实现)执行 <code>dlopen</code> 处理。
 </p>
 
-<p><code>RsContext</code> 对象的创建被委派给 RS HAL 实现。HAL 使用 <code>rsContextCreateVendor()</code> 函数(并将驱动程序的名称用作参数)来回调 RS 框架。然后,RS 框架会在 <code>RsContext</code> 进行初始化时加载指定的驱动程序。在这种情况下,驱动程序库会加载到 <code>rs</code> 命名空间中,因为 <code>RsContext</code> 对象是在 <code>rs</code> 命名空间内创建的,而且 <code>/vendor/lib</code> 位于该命名空间的搜索路径中。</p>
+<p>
+  采用 CPU 备用路径时,系统根本不会使用来自供应商的 RS HAL 实现,而是通过空的 <code>mVendorDriverName</code> 创建一个 <code>RsContext</code> 对象。系统会对 <code>libRSDriver.so</code> 执行 <code>dlopen</code> 处理(默认情况下),且驱动程序库会从 <code>default</code> 名称空间加载,因为调用程序 (<code>libRS_internal.so</code>) 也会在 <code>default</code> 命名空间中加载。
+</p>
+
+<img src="../images/treble_rs_cpu_fallback.png"/>
+<figcaption>
+  <strong>图 4.</strong> CPU 备用路径
+</figcaption>
+
+<h4 id="gpu-path">GPU 路径</h4>
+
+<p>
+  对于 GPU 路径来说,系统会通过不同的方式加载 <code>libRS_internal.so</code>。首先,<code>libRS.so</code> 使用 <code>[email protected]</code>(及其底层的 <code>libhidltransport.so</code>)将 <code>[email protected]</code>(一种 RS HAL 的供应商实现)加载到一个不同的链接器命名空间(名称为 <code>sphal</code>)。然后,RS HAL 在另一个名称为 <code>rs</code> 的链接器命名空间中对 <code>libRS_internal.so</code> 执行 <code>dlopen</code> 处理。
+</p>
+
+<p>
+  供应商可以通过设置编译时标记 <code>OVERRIDE_RS_DRIVER</code> 来提供自己的 RS 驱动程序,该标记嵌入在 RS HAL 实现 (<code>hardware/interfaces/renderscript/1.0/default/Context.cpp</code>) 中。然后,系统会在 GPU 路径的 RS 上下文中对该驱动程序名称执行 <code>dlopen</code> 处理。
+</p>
+
+<p>
+  <code>RsContext</code> 对象的创建被委派给 RS HAL 实现。HAL 使用 <code>rsContextCreateVendor()</code> 函数(并将驱动程序的名称用作参数)来回调 RS 框架。然后,RS 框架会在 <code>RsContext</code> 进行初始化时加载指定的驱动程序。在这种情况下,驱动程序库会加载到 <code>rs</code> 命名空间中,因为 <code>RsContext</code> 对象是在 <code>rs</code> 命名空间内创建的,而且 <code>/vendor/lib</code> 位于该命名空间的搜索路径中。
+</p>
 
 <img src="../images/treble_rs_gpu_fallback.png"/>
-<figcaption><strong>图 5.</strong> GPU 备用路径。</figcaption>
+<figcaption>
+  <strong>图 5.</strong> GPU 备用路径
+</figcaption>
 
-<p>从 <code>default</code> 命名空间转换为 <code>sphal</code> 命名空间时,<code>libhidltransport.so</code> 使用 <code>android_load_sphal_library()</code> 函数来明确指示动态链接器从 <code>sphal</code> 命名空间加载 <code>-impl.so</code> 库。</p>
+<p>
+  从 <code>default</code> 命名空间转换为 <code>sphal</code> 命名空间时,<code>libhidltransport.so</code> 使用 <code>android_load_sphal_library()</code> 函数来明确指示动态链接器从 <code>sphal</code> 命名空间加载 <code>-impl.so</code> 库。
+</p>
 
-<p>从 <code>sphal</code> 命名空间转换为 <code>rs</code> 命名空间时,加载由 <code>/system/etc/ld.config.txt</code> 中的以下行间接完成:</p>
+<p>
+  从 <code>sphal</code> 命名空间转换为 <code>rs</code> 命名空间时,加载由 <code>/system/etc/ld.config.txt</code> 中的以下行间接完成:
+</p>
 
 <pre class="prettyprint">
 namespace.sphal.link.rs.shared_libs = libRS_internal.so
 </pre>
 
-<p>此行指定了以下规则:如果无法从 <code>sphal</code> 命名空间找到/加载目标库(这种情况一直会出现,因为 <code>sphal</code> 命名空间不会搜索 <code>libRS_internal.so</code> 所在的 <code>/system/lib/vndk-sp</code>),动态链接器应该从 <code>rs</code> 命名空间加载 <code>libRS_internal.so</code>。借助此配置,对 <code>libRS_internal.so</code> 进行简单的 <code>dlopen()</code> 调用就足以实现命名空间转换。</p>
+<p>
+  此行指定了以下规则:如果无法从 <code>sphal</code> 命名空间找到/加载目标库(这种情况一直会出现,因为 <code>sphal</code> 命名空间不会搜索 <code>libRS_internal.so</code> 所在的 <code>/system/lib/vndk-sp</code>),动态链接器应该从 <code>rs</code> 命名空间加载 <code>libRS_internal.so</code>。借助此配置,对 <code>libRS_internal.so</code> 进行简单的 <code>dlopen()</code> 调用就足以实现命名空间转换。
+</p>
 
 <h3 id="loading-bcc-plugin">加载 bcc 插件</h3>
-<p><code>bcc plugin</code> 是由供应商提供的加载到 <code>bcc</code> 编译器中的库。由于 <code>bcc</code> 是 <code>/system/bin</code> 目录中的系统进程,因此 <code>bcc plugin</code> 可以被视为 SP-HAL(即,可以直接加载到系统进程中而无需 Binder 化的供应商 HAL)。作为 SP-HAL,<code>bcc-plugin</code> 库具有以下特点:</p>
+
+<p>
+  <code>bcc plugin</code> 是由供应商提供的加载到 <code>bcc</code> 编译器中的库。由于 <code>bcc</code> 是 <code>/system/bin</code> 目录中的系统进程,因此 <code>bcc plugin</code> 可以被视为 SP-HAL(即,可以直接加载到系统进程中而无需 Binder 化的供应商 HAL)。作为 SP-HAL,<code>bcc-plugin</code> 库具有以下特点:
+</p>
+
 <ul>
-<li>无法与框架专用库(如 <code>libLLVM.so</code>)相关联。</li>
-<li>只能与面向供应商的 VNDK-SP 库相关联。</li>
+  <li>无法与框架专用库(如 <code>libLLVM.so</code>)相关联。</li>
+  <li>只能与面向供应商的 VNDK-SP 库相关联。</li>
 </ul>
 
-<p>此限制是通过使用 <code>android_sphal_load_library()</code> 函数将 bcc 插件加载到 <code>sphal</code> 命名空间来强制实施的。在之前的 Android 版本中,插件名称是使用 <code>-load</code> 选项指定的,而库是由 <code>libLLVM.so</code> 使用简单的 <code>dlopen()</code> 加载的。在 Android O 中,该名称在 <code>-plugin</code> 选项中指定,而库则直接由 <code>bcc</code> 本身加载。此选项可使开放源代码 LLVM 项目支持非 Android 专用路径。</p>
+<p>
+  此限制是通过使用 <code>android_sphal_load_library()</code> 函数将 <code>bcc plugin</code> 加载到 <code>sphal</code> 命名空间来强制实施的。在之前的 Android 版本中,插件名称是使用 <code>-load</code> 选项指定的,而库是由 <code>libLLVM.so</code> 使用简单的 <code>dlopen()</code> 加载的。在 Android 8.0 及更高版本中,该名称在 <code>-plugin</code> 选项中指定,而库则直接由 <code>bcc</code> 本身加载。此选项可使开放源代码 LLVM 项目支持非 Android 专用路径。
+</p>
 
 <img src="../images/treble_rs_bcc_plugin_old.png"/>
-<figcaption><strong>图 6.</strong> 加载 bcc 插件 - Android 7.x 及更早版本。</figcaption>
+<figcaption>
+  <strong>图 6.</strong> 加载 bcc 插件 - Android 7.x 及更低版本
+</figcaption>
 <br />
 <br />
 <img src="../images/treble_rs_bcc_plugin_new.png"/>
-<figcaption><strong>图 7. </strong>加载 bcc 插件 - Android O。</figcaption>
+  <figcaption><strong>图 7.</strong> 加载 bcc 插件 - Android 8.0 及更高版本
+</figcaption>
 
 <h3 id="search-paths-for-ld-mc">ld.mc 的搜索路径</h3>
-<p>在执行 <code>ld.mc</code> 时,系统会将某些 RS 运行时库作为输入提供给链接器。来自应用的 RS 位码会与运行时库相关联,当转换后的位码被加载到某个应用进程中时,会再次与运行时库动态关联。</p>
+
+<p>
+  在执行 <code>ld.mc</code> 时,系统会将某些 RS 运行时库作为输入提供给链接器。来自应用的 RS 位码会与运行时库相关联,当转换后的位码被加载到某个应用进程中时,会再次与运行时库动态关联。
+</p>
 
 <p>运行时库包括:</p>
+
 <ul>
-<li><code>libcompiler_rt.so</code></li>
-<li><code>libm.so</code></li>
-<li><code>libc.so</code></li>
-<li>RS 驱动程序(<code>libRSDriver.so</code> 或 <code>OVERRIDE_RS_DRIVER</code>)</li>
+  <li><code>libcompiler_rt.so</code></li>
+  <li><code>libm.so</code></li>
+  <li><code>libc.so</code></li>
+  <li>RS 驱动程序(<code>libRSDriver.so</code> 或 <code>OVERRIDE_RS_DRIVER</code>)</li>
 </ul>
 
-<p>在将编译后的位码加载到应用进程中时,我们必须提供与 <code>ld.mc</code> 所使用的完全相同的库。否则,编译后的位码可能无法找到它被关联时可供使用的那个符号。</p>
+<p>
+  在将编译后的位码加载到应用进程中时,请提供与 <code>ld.mc</code> 所使用的完全相同的库。否则,编译后的位码可能无法找到它被关联时可供使用的那个符号。
+</p>
 
-<p>为此,RS 框架在执行 <code>ld.mc</code> 时会针对运行时库使用不同的搜索路径,具体取决于 RS 框架本身是从 <code>/system/lib</code> 中还是 <code>/system/lib/vndk-sp</code> 中加载的。通过读取 RS 框架库的任意符号的地址,并使用 <code>dladdr()</code> 获取映射到该地址的文件路径,可以确定 RS 框架的加载位置。</p>
+<p>
+  为此,RS 框架在执行 <code>ld.mc</code> 时会针对运行时库使用不同的搜索路径,具体取决于 RS 框架本身是从 <code>/system/lib</code> 中还是 <code>/system/lib/vndk-sp</code> 中加载的。通过读取 RS 框架库的任意符号的地址,并使用 <code>dladdr()</code> 获取映射到该地址的文件路径,可以确定 RS 框架的加载位置。
+</p>
 
 <h3 id="selinux-policy">SELinux 政策</h3>
-<p>由于 Android O 中的 SELinux 政策发生了变化,您在 <code>vendor</code> 分区中标记额外的文件时必须遵循特定规则(通过 <code>neverallows</code> 强制实施):</p>
+
+<p>
+  由于 Android 8.0 及更高版本中的 SELinux 政策发生了变化,您在 <code>neverallows</code> 分区中标记额外的文件时必须遵循特定规则(通过 <code>vendor</code> 强制实施):
+</p>
+
 <ul>
-<li><code>vendor_file</code> 必须是 <code>vendor</code> 分区中所有文件的默认标签。平台政策要求使用此标签来访问直通式 HAL实现。</li>
-<li>通过供应商 SEPolicy 在 <code>vendor</code> 分区中添加的所有新 <code>exec_types</code> 均必须具有 <code>vendor_file_type</code> 属性。这一规则将通过 <code>neverallows</code> 强制实施。</li>
-<li>为了避免与将来的平台/框架更新发生冲突,请避免在 <code>vendor</code> 分区中标记除 <code>exec_types</code> 之外的文件。
-</li><li>AOSP 标识的 Same-Process HAL 的所有库依赖项均必须标记为 <code>same_process_hal_file</code>。</li>
+  <li><code>vendor_file</code> 必须是 <code>vendor</code> 分区中所有文件的默认标签。平台政策要求使用此标签来访问直通式 HAL 实现。</li>
+  <li>通过供应商 SEPolicy 在 <code>vendor</code> 分区中添加的所有新 <code>exec_types</code> 均必须具有 <code>vendor_file_type</code> 属性。这一规则将通过 <code>neverallows</code> 强制实施。</li>
+  <li>为了避免与将来的平台/框架更新发生冲突,请避免在 <code>vendor</code> 分区中标记除 <code>exec_types</code> 之外的文件。
+  </li>
+  <li>AOSP 标识的 Same-Process HAL 的所有库依赖项均必须标记为 <code>same_process_hal_file</code>。</li>
 </ul>
 
-<aside class="note"><strong>注意</strong>:要详细了解 Android 8.0 SELinux,请参阅 <a href="/security/selinux/images/SELinux_Treble.pdf">SELinux for Android 8.0</a>。</aside>
+<p>
+  要详细了解 SELinux 政策,请参阅 <a href="/security/selinux/">Android 中的安全增强型 Linux</a>。
+</p>
 
 <h3 id="abi-compatibility-for-bitcode">位码的 ABI 兼容性</h3>
-<p>如果没有添加新的 API(意味着无 HAL 版本递增),RS 框架将继续使用现有的 GPU (HAL 1.0) 驱动程序。</p>
 
-<p>对于不会影响位码的 HAL 小更改 (HAL 1.1),RS 框架应该回退到 CPU 以支持这些新添加的 API,并在其他地方继续使用 GPU (HAL 1.0) 驱动程序。</p>
+<p>
+  如果没有添加新的 API(意味着无 HAL 版本递增),RS 框架将继续使用现有的 GPU (HAL 1.0) 驱动程序。
+</p>
 
-<p>对于会影响位码编译/关联的 HAL 大更改 (HAL 2.0),RS 框架应选择不加载供应商提供的 GPU 驱动程序,而是使用 CPU 或 Vulkan 路径以实现加速。</p>
+<p>
+  对于不会影响位码的 HAL 小更改 (HAL 1.1),RS 框架应该回退到 CPU 以支持这些新添加的 API,并在其他地方继续使用 GPU (HAL 1.0) 驱动程序。
+</p>
+
+<p>
+  对于会影响位码编译/关联的 HAL 大更改 (HAL 2.0),RS 框架应选择不加载供应商提供的 GPU 驱动程序,而是使用 CPU 或 Vulkan 路径以实现加速。
+</p>
 
 <p>RenderScript 位码的使用发生在以下三个阶段:</p>
 
@@ -188,70 +268,101 @@
 </tr>
 <tr>
 <td><em>编译</em></td>
-<td><ul>
-<li><code>bcc</code> 的输入位码 (.bc) 的格式必须是 <code>LLVM 3.2</code>,且 <code>bcc</code> 必须向后兼容现有的(旧版)应用。</li>
-<li>不过,.bc 中的元数据可能会发生变化(可能会有新的运行时函数,例如分配设置器和获取器、数学函数等)。部分运行时函数位于 <code>libclcore.bc</code> 中,部分位于 LibRSDriver 或供应商同类驱动程序中。</li>
-<li>对于新运行时函数或重大元数据更改,必须递增位码 API 级别。HAL 版本也必须递增,否则供应商驱动程序将无法使用它。</li>
-<li>供应商可能有自己的编译器,不过针对 <code>bcc</code> 的总结/要求也适用于这些编译器。</li>
-</ul></td>
+<td>
+  <ul>
+    <li><code>bcc</code> 的输入位码 (.bc) 的格式必须是 <code>LLVM 3.2</code>,且 <code>bcc</code> 必须向后兼容现有的(旧版)应用。</li>
+    <li>不过,.bc 中的元数据可能会发生变化(可能会有新的运行时函数,例如分配设置器和获取器、数学函数等)。部分运行时函数位于 <code>libclcore.bc</code> 中,部分位于 LibRSDriver 或供应商同类驱动程序中。</li>
+    <li>对于新运行时函数或重大元数据更改,必须递增位码 API 级别。HAL 版本也必须递增,否则供应商驱动程序将无法使用它。</li>
+    <li>供应商可能有自己的编译器,不过针对 <code>bcc</code> 的总结/要求也适用于这些编译器。</li>
+  </ul>
+</td>
 </tr>
 <tr>
-<td><em>关联</em></td>
-<td><ul>
-<li>编译后的 .o 将与供应商驱动程序相关联,例如 <code>libRSDriver_foo.so</code> 和 <code>libcompiler_rt.so</code>。CPU 路径将与 <code>libRSDriver.so</code> 相关联。</li>
-<li>如果 .o 需要来自 <code>libRSDriver_foo</code> 的新运行时 API,则供应商驱动程序必须进行更新,以便为其提供支持。</li>
-<li>某些供应商可能有自己的链接器,不过适用于 <code>ld.mc</code> 的参数也适用于这些链接器。</li>
-</ul></td>
+<td><em>链接</em></td>
+<td>
+  <ul>
+    <li>编译后的 .o 将与供应商驱动程序相关联,例如 <code>libRSDriver_foo.so</code> 和 <code>libcompiler_rt.so</code>。CPU 路径将与 <code>libRSDriver.so</code> 相关联。</li>
+    <li>如果 .o 需要来自 <code>libRSDriver_foo</code> 的新运行时 API,则供应商驱动程序必须进行更新,以便为其提供支持。</li>
+    <li>某些供应商可能有自己的链接器,不过适用于 <code>ld.mc</code> 的参数也适用于这些链接器。</li>
+  </ul>
+</td>
 </tr>
 <tr>
 <td><em>加载</em></td>
-<td><ul>
-<li><code>libRSCpuRef</code> 会加载共享对象。如果此接口发生更改,则需要递增 HAL 版本。</li>
-<li>供应商可以依赖 <code>libRSCpuRef</code> 加载共享对象,也可以实现自己的对象。</li>
-</ul></td>
+<td>
+  <ul>
+    <li><code>libRSCpuRef</code> 会加载共享对象。如果此接口发生更改,则需要递增 HAL 版本。</li>
+    <li>供应商可以依赖 <code>libRSCpuRef</code> 加载共享对象,也可以实现自己的对象。</li>
+  </ul>
+</td>
 </tr>
 </tbody></table>
 
-<p>除了 HAL 之外,运行时 API 和导出的符号也是接口。从 Android 7.0 (API 24) 开始,这两种接口均未发生更改,目前也没有在 Android O 及更高版本中对其做出更改的计划。但是,如果接口发生更改,HAL 版本也会进行升级。</p>
+<p>
+  除了 HAL 之外,运行时 API 和导出的符号也是接口。从 Android 7.0 (API 24) 开始,这两种接口均未发生更改,目前也没有在 Android 8.0 及更高版本中对其做出更改的计划。但是,如果接口发生更改,HAL 版本也会进行递增。
+</p>
 
 <h2 id="vendor-implementations">供应商实现</h2>
-<p>Android O 需要对 GPU 驱动程序做出一些更改,以便 GPU 驱动程序能够正常运行。</p>
+
+<p>
+  Android 8.0 及更高版本需要对 GPU 驱动程序做出一些更改,以便 GPU 驱动程序能够正常运行。
+</p>
 
 <h3 id="driver-modules">驱动程序模块</h3>
+
 <ul>
-<li>驱动程序模块不得依赖<a href="#renderscript-libs-available-to-vendors">此列表</a>中未包含的任何系统库。</li>
-<li>驱动程序必须提供自己的 <code>[email protected]_{NAME}</code>,或者将默认实现 <code>[email protected]</code> 声明为其依赖项。</li>
-<li>CPU 实现 <code>libRSDriver.so</code> 就是关于如何移除非 VNDK-SP 依赖项的一个很好的例子。</li>
+  <li>驱动程序模块不得依赖<a href="#renderscript-libs-available-to-vendors">此列表</a>中未包含的任何系统库。</li>
+  <li>驱动程序必须提供自己的 <code>[email protected]_{NAME}</code>,或者将默认实现 <code>[email protected]</code> 声明为其依赖项。</li>
+  <li>CPU 实现 <code>libRSDriver.so</code> 就是关于如何移除非 VNDK-SP 依赖项的一个很好的例子。</li>
 </ul>
 
 <h3 id="bitcode-compiler">位码编译器</h3>
-<p>您可以通过以下两种方式为供应商驱动程序编译 RenderScript 位码:</p>
+
+<p>
+  您可以通过以下两种方式为供应商驱动程序编译 RenderScript 位码:
+</p>
+
 <ol>
-<li>在 <code>/vendor/bin/</code> 中调用供应商专用的 RenderScript 编译器(GPU 编译的首选方法)。与其他驱动程序模块类似,供应商编译器二进制文件不能依赖<a href="#renderscript-libs-available-to-vendors">面向供应商的 RenderScript 库</a>列表中未包含的任何系统库。</li>
-<li>使用供应商提供的 bcc 插件调用系统 bcc:<code>/system/bin/bcc</code>。<code>bcc plugin</code> 不能依赖<a href="#renderscript-libs-available-to-vendors">面向供应商的 RenderScript 库</a>列表中未包含的任何系统库。</li>
+  <li>在 <code>/vendor/bin/</code> 中调用供应商专用的 RenderScript 编译器(GPU 编译的首选方法)。与其他驱动程序模块类似,供应商编译器二进制文件不能依赖<a href="#renderscript-libs-available-to-vendors">面向供应商的 RenderScript 库</a>列表中未包含的任何系统库。</li>
+  <li>使用供应商提供的 <code>bcc plugin</code> 调用系统 bcc:<code>/system/bin/bcc</code>;此插件不能依赖<a href="#renderscript-libs-available-to-vendors">面向供应商的 RenderScript 库</a>列表中未包含的任何系统库。</li>
 </ol>
 
-<p>如果供应商 <code>bcc plugin</code> 需要干扰 CPU 编译,并且它对 <code>libLLVM.so</code> 的依赖性无法轻松移除,那么供应商应将 <code>bcc</code>(以及包括 <code>libLLVM.so</code> 和 <code>libbcc.so</code> 在内的所有非 LL-NDK 依赖项)复制到 <code>/vendor</code> 分区。</p>
+<p>
+  如果供应商 <code>bcc plugin</code> 需要干预 CPU 编译,并且它对 <code>libLLVM.so</code> 的依赖无法轻松解除,那么供应商应将 <code>bcc</code>(以及包括 <code>libLLVM.so</code> 和 <code>libbcc.so</code> 在内的所有非 LL-NDK 依赖项)复制到 <code>/vendor</code> 分区。
+</p>
 
-<p>此外,供应商还需要做出以下更改:</p>
+<p>
+  此外,供应商还需要做出以下更改:
+</p>
+
 <img src="../images/treble_rs_vendor_driver.png"/>
-<figcaption><strong>图 8.</strong> 对供应商驱动程序的更改。</figcaption>
+<figcaption>
+  <strong>图 8.</strong> 供应商驱动程序更改
+</figcaption>
+
 <ol>
-<li>将 <code>libclcore.bc</code> 复制到 <code>/vendor</code> 分区。这样可以确保 <code>libclcore.bc</code>、<code>libLLVM.so</code> 和 <code>libbcc.so</code> 保持同步。</li>
-<li>通过从 RS HAL 实现中设置 <code>RsdCpuScriptImpl::BCC_EXE_PATH</code> 来更改 <code>bcc</code> 可执行文件的路径。</li>
+  <li>将 <code>libclcore.bc</code> 复制到 <code>/vendor</code> 分区。这样可以确保 <code>libclcore.bc</code>、<code>libLLVM.so</code> 和 <code>libbcc.so</code> 保持同步。</li>
+  <li>在 RS HAL 实现中设置 <code>RsdCpuScriptImpl::BCC_EXE_PATH</code> 来更改 <code>bcc</code> 可执行文件的路径。
+  </li>
 </ol>
 
-<aside class="note"><strong>注意</strong>:在 Android O 中,对 <code>/vendor/bin/*</code> 进程的限制并未完全实现。从理论上讲,可以只将 <code>bcc</code> 复制到 <code>/vendor/bin/ </code>而不复制其依赖项,但并不建议您这样做。
+<aside class="note">
+  <strong>注意</strong>:对 <code>/vendor/bin/*</code> 进程的限制并未完全实现。从理论上讲,可以只将 <code>bcc</code> 复制到 <code>/vendor/bin/</code> 而不复制其依赖项,但并不建议您这样做。
 </aside>
 
 <h3 id="selinux-policy">SELinux 政策</h3>
-<p>SELinux 政策会影响驱动程序和编译器可执行文件。所有驱动程序模块必须在设备的 <code>file_contexts</code> 中标记为 <code>same_process_hal_file</code>。例如:</p>
+
+<p>
+  SELinux 政策会影响驱动程序和编译器可执行文件。所有驱动程序模块必须在设备的 <code>file_contexts</code> 中标记为 <code>same_process_hal_file</code>。例如:
+</p>
 
 <pre class="prettyprint">
 /vendor/lib(64)?/libRSDriver_EXAMPLE\.so     u:object_r:same_process_hal_file:s0
 </pre>
 
-<p>编译器可执行文件必须能够由应用进程调用,bcc 的供应商副本 (<code>/vendor/bin/bcc</code>) 也是如此。例如:</p>
+<p>
+  编译器可执行文件必须能够由应用进程调用,bcc 的供应商副本 (<code>/vendor/bin/bcc</code>) 也是如此。例如:
+</p>
 
 <pre class="prettyprint">
 device/vendor_foo/device_bar/sepolicy/file.te:
@@ -265,12 +376,18 @@
 </pre>
 
 <h3 id="legacy-devices">旧版设备</h3>
-<p>旧版设备是指满足以下条件的设备:</p>
+
+<p>
+  旧版设备是指满足以下条件的设备:
+</p>
+
 <ol>
-<li><em></em>PRODUCT_SHIPPING_API_LEVEL 低于 26。</li>
-<li><em></em>PRODUCT_FULL_TREBLE_OVERRIDE 未定义。</li>
+  <li><em></em>PRODUCT_SHIPPING_API_LEVEL 低于 26。</li>
+  <li><em></em>PRODUCT_FULL_TREBLE_OVERRIDE 未定义。</li>
 </ol>
 
-<p>将旧版设备的系统升级到 Android O 时,不会强制执行本文档中详细说明的限制,这意味着驱动程序可以继续与 <code>/system/lib[64]</code> 中的库相关联。不过,由于与 <code>OVERRIDE_RS_DRIVER</code> 相关的架构变更,您必须将 <code>[email protected]</code> 安装到 <code>/vendor</code> 分区;如果无法做到这一点,RenderScript 运行时会被强制回退到 CPU 路径。</p>
+<p>
+  将旧版设备的系统升级到 Android 8.0 及更高版本时,不会强制执行这些限制,这意味着驱动程序可以继续与 <code>/system/lib[64]</code> 中的库相关联。不过,由于与 <code>OVERRIDE_RS_DRIVER</code> 相关的架构变更,您必须将 <code>[email protected]</code> 安装到 <code>/vendor</code> 分区;如果无法做到这一点,RenderScript 运行时会被强制回退到 CPU 路径。
+</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/architecture/vndk/snapshot-generate.html b/zh-cn/devices/architecture/vndk/snapshot-generate.html
new file mode 100644
index 0000000..f230e23
--- /dev/null
+++ b/zh-cn/devices/architecture/vndk/snapshot-generate.html
@@ -0,0 +1,335 @@
+<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 快照是一组适用于 Android 版本的 VNDK-core 和 VNDK-SP 库。如果 system.img 包含 vendor.img 所需的相应 VNDK 快照,那么,您只能升级系统分区。
+</p>
+
+<aside class="note"><strong>注意</strong>:本页提供了关于编译和更新 VNDK 快照的设计细节。要详细了解 VNDK 快照的背景、定义和用例,请参阅 <a href="/devices/architecture/vndk/snapshot-design">VNDK 快照设计</a>。
+</aside>
+
+<p>
+正式的 VNDK 快照是在 Android 编译服务器上自动编译而成,并签入 Android 源代码树的 <code>/prebuilts/vndk</code> 中。为了便于开发,您可以在本地编译 VNDK 快照。arm、arm64、x86 和 x86_64 TARGET_ARCH 架构支持 VNDK 快照。
+</p>
+
+<h2 id="snapshot-build-artifacts">快照编译工件</h2>
+
+<p>
+Android 编译服务器使用以下编译参数和编译命令,生成适用于 VNDK 快照的编译工件。
+</p>
+
+<h3 id="build-parameters">编译参数</h3>
+
+<p>
+编译目标名称为 <code>vndk</code>,编译目标配置如下所示:
+</p>
+
+<ul>
+  <li>TARGET_PRODUCT=aosp_{TARGET_ARCH}_ab</li>
+  <li>TARGET_BUILD_VARIANT=user</li>
+  <li>TARGET_ARCH。与常规系统映像 (GSI) 目标架构(arm、arm64、x86、x86_64)相同。</li>
+  <li>TARGET_ARCH_VARIANT。对于快照 v27 (Android 8.1),变体包含热门配置(如下所示);未来版本可能会包含其他 arch/cpu 变体。</li>
+</ul>
+
+<table>
+<thead>
+<tr>
+<th>TARGET_PRODUCT</th>
+<th>TARGET_ARCH</th>
+<th>TARGET_ARCH_VARIANT</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>aosp_arm_ab</td>
+<td>arm</td>
+<td>armv7-a-neon</td>
+</tr>
+<tr>
+<td>aosp_arm64_ab</td>
+<td>arm64</td>
+<td>armv8-a</td>
+</tr>
+<tr>
+<td>aosp_x86_ab</td>
+<td>x86</td>
+<td>x86</td>
+</tr>
+<tr>
+<td>aosp_x86_64_ab</td>
+<td>x86_64</td>
+<td>x86_64</td>
+</tr>
+</tbody>
+</table>
+
+<h3 id="build-commands">编译命令</h3>
+
+<p>
+对于正式快照,Android 9 在 <a href="https://android.googlesource.com/platform/build/+/master/core/tasks/vndk.mk">vndk.mk</a> 中引入了新的虚拟目标 (<code>vndk</code>),该目标会编译 VNDK 快照并将其输出到 <code>$DIST_DIR</code> 中。快照的 ZIP 文件采用 <code>android-vndk-{TARGET_ARCH}.zip</code> 格式。例如:
+</p>
+
+<pre class="prettyprint">
+$ lunch aosp_&lt;ARCH&gt;_ab-user
+$ make -j vndk dist [BOARD_VNDK_VERSION=current]
+</pre>
+
+<p>
+Android 编译服务器通过以下命令使用 <a href="https://android.googlesource.com/platform/development/+/master/vndk/snapshot/build.sh">build.sh</a> 脚本来编译所有受支持的架构类型:
+</p>
+
+<pre class="prettyprint">
+$ DIST_DIR=%dist_dir% development/vndk/snapshot/build.sh
+</pre>
+
+<p>
+Android 版本的 VNDK 快照由 <code>&lt;Android Version&gt;-release</code> 分支生成。
+</p>
+
+<h3 id="build-locally">在本地编译</h3>
+
+<p>
+在开发过程中,您可以通过以下命令,从本地源代码树中编译 VNDK 快照:</p>
+
+<ul>
+  <li>要一次编译所有受支持的架构,请通过以下命令执行编译脚本 (<code>build.sh</code>):<pre class="prettyprint">
+$ cd $ANDROID_BUILD_TOP
+$ development/vndk/snapshot/build.sh
+</pre>
+  </li>
+  <li>要编译某个特定的 TARGET_ARCH,请执行以下命令:
+
+<pre class="prettyprint">
+$ lunch aosp_&lt;ARCH&gt;_ab-user
+$ m -j vndk dist
+</pre>
+  </li>
+</ul>
+
+<p>
+相应的 <code>android-vndk-&lt;ARCH&gt;.zip</code> 文件会在 <code>$DIST_DIR</code> 下创建。
+</p>
+
+<h2 id="snapshot-files">快照文件</h2>
+
+<p>
+VNDK 快照包含以下文件:
+</p>
+
+<ul>
+  <li>VNDK-core 和 VNDK-SP 共享库的供应商变体。
+    <ul>
+    <li>无需 LL-NDK 共享库,因为这类库是向后兼容的。</li>
+    <li>对于 64 位目标,TARGET_ARCH 和 TARGET_2ND_ARCH 库都将被编译并包含在内。</li>
+    </ul>
+  </li>
+  <li>VNDK-core、VNDK-SP、LL-NDK 和 VNDK-private 库的列表位于 <code>[vndkcore|vndksp|llndk|vndkprivate].libraries.txt</code>。</li>
+  <li>链接器配置文件为 <code>ld.config.txt</code>。</li>
+  <li>许可文件。</li>
+  <li><code>module_paths.txt</code>。记录所有 VNDK 库的模块路径;检查 GPL 项目是否已在指定 Android 源代码树中发布源代码时,需要用到这种文件。</li>
+</ul>
+
+<p>
+对于指定 VNDK 快照 ZIP 文件 <code>android-vndk-{TARGET_ARCH}.zip</code>,系统会根据 ABI 位数将 VNDK 预编译库分组到名为 <code>arch-{TARGET_ARCH}-{TARGET_ARCH_VARIANT}</code> 的单独目录中。例如,对于 <code>android-vndk-arm64.zip</code>,64 位库会位于 <code>arch-arm64-armv8-a</code> 下,而 32 位库则位于 <code>arch-arm-armv8-a</code> 下。
+</p>
+
+<h3 id="example-snapshot-dir-structure">示例:VNDK 快照目录结构</h3>
+
+<p>
+以下示例展示了 arm64 (<code>TARGET_ARCH=arm64</code>) VNDK 快照 ZIP 文件 (<code>android-vndk-arm64.zip</code>) 的目录结构。
+</p>
+
+<img src="/devices/architecture/images/vndk_snapshot_directory.png"/>
+<figcaption><strong>图 1. </strong>VNDK 快照目录结构(示例)</figcaption>
+
+<h2 id="upload-vndk-snapshots">上传 VNDK 快照</h2>
+
+<p>
+VNDK 快照将签入 <code>/prebuilts/vndk/v&lt;VER&gt;</code> 下的源代码树,其中 <code>&lt;VER&gt;</code> 为 VNDK 快照的版本(遵循相应 Android 版本的 SDK 版本)。例如,O MR1 VNDK 快照的版本为 27。
+</p>
+
+<h3 id="using-update-py">使用 update.py 脚本</h3>
+
+<p>
+<code>update.py</code> 脚本 (<code>/development/vndk/snapshot/update.py)</code> 可自动将预编译的 VNDK 快照添加到源代码树中。此脚本将执行以下任务:</p>
+
+<ol>
+  <li>在 <code>/prebuilts/vndk/v&lt;VER&gt;</code> 中,使用 <code>repo start</code> 创建新的 git 分支。</li>
+  <li>获取 VNDK 快照编译软件工件并将其解压缩。</li>
+  <li>运行 <code>gen_buildfiles.py</code> 以自动生成编译文件(<code>Android.mk</code>、<code>Android.bp</code>)。</li>
+  <li>运行 <code>check_gpl_license.py</code> 以验证根据通用公共许可证 (GPL) 获得许可的预编译库是否在当前源代码树中发布了源代码。</li>
+  <li>使用 <code>git commit</code> 提交新的更改。</li>
+</ol>
+
+<h3 id="using-local-snapshots">使用本地编译的 VNDK 快照</h3>
+
+<p>
+在开发过程中,您可以使用本地编译的 VNDK 快照进行测试。在指定 <code>--local</code> 选项的情况下,<code>update.py</code> 会从本地 <code>$DIST_DIR</code>(而非 Android 编译服务器中)提取 VNDK 快照编译工件。用法如下:
+</p>
+
+<pre class="prettyprint">
+$ python update.py &lt;VER&gt; --local
+</pre>
+
+<p>
+例如,要使用本地编译软件工件更新 O MR1 VNDK 快照,请运行以下命令:
+</p>
+
+<pre class="prettyprint">
+$ python update.py 27 --local
+</pre>
+
+<p>
+由于本地模式仅用于测试,因此该脚本将跳过 GPL 许可检查和 git commit 步骤。
+</p>
+
+<h3 id="dir-structure-prebuilts">prebuilts/vndk 的目录结构</h3>
+
+<img src="/devices/architecture/images/vndk_snapshot_prebuilt.png"/>
+<figcaption><strong>图 2. </strong>Prebuilts/vndk 目录结构</figcaption>
+
+<h2 id="install-vndk-snapshot">安装 VNDK 快照</h2>
+
+<p>
+系统映像在编译时使用 <code>BOARD_VNDK_VERSION</code>、<code>PRODUCT_EXTRA_VNDK_VERSIONS</code> 和 <code>ro.vndk.version</code> 中的信息安装 VNDK 快照库。您可以使用以下选项之一控制从 <code>/prebuilts/vndk/v&lt;VER&gt;</code> 中安装哪些 VNDK 快照:
+</p>
+
+<ul>
+  <li><strong>选项 1</strong>:<code>BOARD_VNDK_VERSION</code>。使用快照模块编译当前供应商模块,并仅安装供应商模块所需的快照模块。</li>
+  <li><strong>选项 2</strong>:<code>PRODUCT_EXTRA_VNDK_VERSIONS</code>。无论当前供应商模块有哪些,都安装 VNDK 快照模块。这将安装 <code>PRODUCT_EXTRA_VNDK_VERSIONS</code> 中列出的预编译 VNDK 快照,而不会在编译时将其与任何其他模块相关联。</li>
+</ul>
+
+<h3 id="set-board-vndk">设置 BOARD_VNDK_VERSION</h3>
+
+<p>
+  <code>BOARD_VNDK_VERSION</code> 显示的是当前供应商模块需要编译的 VNDK 版本。如果 <code>BOARD_VNDK_VERSION</code> 在 <code>/prebuilts/vndk</code> 目录中有可用的 VNDK 快照版本,则系统会安装 <code>BOARD_VNDK_VERSION</code> 中指明的 VNDK 快照。如果目录中的 VNDK 快照不可用,则会出现编译错误。
+</p>
+
+<p>
+定义 <code>BOARD_VNDK_VERSION</code> 也会启用要安装的 VNDK 模块。供应商模块会在编译时与 <code>BOARD_VNDK_VERSION</code> 中定义的 VNDK 快照版本相关联(此操作不会在系统源代码中编译当前的 VNDK 模块)。从代码库中下载完整的源代码树时,系统源代码和供应商源代码均基于相同的 Android 版本。
+</p>
+
+<aside class="note"><strong>注意</strong>:供应商模块使用的是系统源代码树的当前 VNDK 版本,因此,您必须将 <code>BOARD_VNDK_VERSION</code> 设置为 <code>current</code>。
+</aside>
+
+<h3 id="set-product-extra">设置 PRODUCT_EXTRA_VNDK_VERSIONS</h3>
+
+<p>
+  <code>PRODUCT_EXTRA_VNDK_VERSIONS</code> 列出了要安装的其他 VNDK 版本。正常情况下,当前的供应商分区只需一个 VNDK 快照就足够了。不过,在某些情况下,您可能需要在一个系统映像中提供多个快照。例如,常规系统映像 (GSI) 具有多个快照,以通过一个系统映像支持多个供应商版本。设置 <code>PRODUCT_EXTRA_VNDK_VERSIONS</code> 后,除了 <code>BOARD_VNDK_VERSION</code> 中的 VNDK 版本之外,您还可以安装 VNDK 快照模块。
+</p>
+
+<p>
+如果 <code>PRODUCT_EXTRA_VNDK_VERSIONS</code> 具有特定的版本列表,则编译系统会在 <code>prebuilts/vndk</code> 目录中查找版本列表的预编译快照。如果编译系统找到所有列出的快照,便会将这些快照文件安装到每个 <code>out/target/product/&lt;board&gt;/system/lib[64]/vndk[-sp]-${VER}</code> 中。缺少某些版本会导致出现编译错误。
+</p>
+
+<p>
+VNDK 模块将不会在编译时与供应商模块相关联,但在运行时可能会使用该模块(如果供应商分区中的供应商模块需要某个已安装的 VNDK 版本)。<code>PRODUCT_EXTRA_VNDK_VERSIONS</code> 仅在指定了 <code>BOARD_VNDK_VERSION</code> 的情况下才有效。例如,要将 O MR1 VNDK 快照安装到 system.img 中,请运行以下命令:
+</p>
+
+<pre class="prettyprint">
+$ m -j PRODUCT_EXTRA_VNDK_VERSIONS=27
+</pre>
+
+<h3 id="platform-vndk">PLATFORM_VNDK_VERSION</h3>
+
+<p>
+  <code>PLATFORM_VNDK_VERSION</code> 在系统源代码中指定了当前 VNDK 模块的 VNDK 版本。系统会通过以下方式自动设置该值:
+</p>
+
+<ul>
+  <li>在版本发布之前,将 <code>PLATFORM_VNDK_VERSION</code> 设置为 <code>PLATFORM_VERSION_CODENAME</code>。</li>
+  <li>在发布时,将 <code>PLATFORM_SDK_VERSION</code> 复制到 <code>PLATFORM_VNDK_VERSION</code> 中。</li>
+</ul>
+
+<p>
+发布 Android 版本后,当前的 VNDK 库会被安装到 <code>/system/lib[64]/vndk-$SDK_VER</code> 和 <code>/system/lib[64]/vndk-sp-$SDK_VER</code>,其中 <code>$SDK_VER</code> 是存储在 <code>PLATFORM_VNDK_VERSION</code> 中的版本。
+</p>
+
+<h3 id="namespace-config">命名空间配置</h3>
+
+<p>
+供应商模块使用 <code>/etc/ld.config.${VER}.txt</code>(其中 <code>${VER}</code> 是从 <code>ro.vndk.version</code> 属性中获得的)中的命名空间配置来搜索所需的共享库。命名空间配置中包含带有版本编号的 VNDK 目录,该目录使用以下语法:
+</p>
+
+<ul>
+  <li><code>/system/${LIB}/vndk-%VNDK_VER%</code></li>
+  <li><code>/system/${LIB}/vndk-sp-%VNDK_VER%</code></li>
+</ul>
+
+<p>
+  <code>%VNDK_VER%</code> 在编译时会被替换为 <code>PLATFORM_VNDK_VERSION</code>,这样一来,系统映像便能够为每个 VNDK 版本提供多个快照。
+</p>
+
+<p>
+如果将 <code>BOARD_VNDK_VERSION</code> 设置为 <code>current</code>,则 <code>PLATFORM_VNDK_VERSION</code> 将存储在 <code>ro.vndk.version</code> 中;否则,<code>BOARD_VNDK_VERSION </code> 将存储在 <code>ro.vndk.version</code> 中。<code>PLATFORM_VNDK_VERSION</code> 在 Android 版本发布时会被设置为 SDK 版本;在发布之前,由字母和数字组成的 Android 代码名称会用于 <code>PLATFORM_VNDK_VERSION</code>。</p>
+
+<h3 id="summary-vndk-version-settings">VNDK 版本设置摘要</h3>
+
+<p>
+下表总结了 VNDK 版本设置。
+</p>
+
+<table>
+<thead>
+<tr>
+<th width="15%">供应商<br />版本</th>
+<th>开发板<br />版本</th>
+<th>SDK<br />版本</th>
+<th>平台<br />版本</th>
+<th>版本<br />属性</th>
+<th>安装目录</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td rowspan="2">当前的 VNDK 模块</td>
+<td rowspan="2"><code>current</code></td>
+<td>之前</td>
+<td>&lt;CODE_NAME&gt;</td>
+<td>&lt;CODE_NAME&gt;</td>
+<td>/system/lib[64]/vndk[-sp]-&lt;CODE_NAME&gt;</td>
+</tr>
+<tr>
+<td>之后</td>
+<td>&lt;SDK_ver&gt;</td>
+<td>&lt;SDK_ver&gt;</td>
+<td>/system/lib[64]/vndk[-sp]-&lt;SDK_ver&gt;</td>
+</tr>
+<tr>
+<td>预编译的快照模块</td>
+<td>&lt;VNDK_ver&gt;<br />(用于快照)</td>
+<td>之前或之后</td>
+<td>&lt;CODE_NAME&gt;<br />或 &lt;SDK_ver&gt;</td>
+<td>&lt;VNDK_ver&gt;</td>
+<td>/system/lib[64]/vndk[-sp]-&lt;VNDK_ver&gt;</td>
+</tr>
+</tbody>
+</table>
+
+<ul>
+  <li><strong>开发板版本</strong> (<code>BOARD_VNDK_VERSION</code>):供应商模块需要编译的 VNDK 版本。如果供应商模块可与当前系统模块相关联,则将其设置为 <code>current</code>。</li>
+  <li><strong>平台版本</strong> (<code>PLATFORM_VNDK_VERSION</code>):当前系统模块正在编译的 VNDK 版本(仅在 <code>BOARD_VNDK_VERSION</code> 为当前版本时编译)。</li>
+  <li><strong>版本属性</strong> (<code>ro.vndk.version</code>):一种属性,用于指定 vendor.img 中的二进制文件和库需要运行的 VNDK 版本。该属性存储在<code> /vendor/default.prop</code> 下的 vendor.img 中。</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/audio/attributes.html b/zh-cn/devices/audio/attributes.html
index 3b28b5f..78db170 100644
--- a/zh-cn/devices/audio/attributes.html
+++ b/zh-cn/devices/audio/attributes.html
@@ -3,6 +3,7 @@
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
+
   <body>
   <!--
       Copyright 2017 The Android Open Source Project
@@ -20,58 +21,84 @@
       limitations under the License.
   -->
 
-<p>音频播放器支持定义音频系统如何处理指定来源的导向、音量和焦点决策的属性。应用可以将属性附加到音频播放(例如流式传输服务播放的音乐或新电子邮件通知)上,然后将音频源的属性传递给框架,此时音频系统会使用这些属性做出混音决策并将系统状态通知给应用。</p>
+<p>
+音频播放器支持定义音频系统如何处理指定来源的导向、音量和焦点决策的属性。应用可以将属性附加到音频播放(例如流式传输服务播放的音乐或新电子邮件通知)上,然后将音频源的属性传递给框架,此时音频系统会使用这些属性做出混音决策并将系统状态通知给应用。
+</p>
 
-<p class="note"><strong>注意</strong>:应用还可以将属性附加到音频录制(例如在视频录制中截取的音频)上,但此功能不会在公共 API 中提供。</p>
+<aside class="note"><strong>注意</strong>:应用还可以将属性附加到音频录制(例如在视频录制中截取的音频)上,但此功能不会在公共 API 中提供。
+</aside>
 
-<p>在 Android 4.4 及更早版本中,框架仅使用音频流类型做出混音决策。但是,基于流类型做出这些决策太过于限制,无法在多个应用和设备上产生优质输出。例如,在移动设备上,某些应用(例如 Google 地图)基于 STREAM_MUSIC 流类型播放驾驶方向;但是,在采用投影仪模式(例如 Android Auto)的移动设备上,应用不能将驾驶方向与其他媒体流混合在一起播放。</p>
+<p>
+在 Android 4.4 及更早版本中,框架仅使用音频流类型做出混音决策。不过,基于流类型做出这些决策过于受限,无法在多个应用和设备上产生优质输出。例如,在移动设备上,某些应用(例如 Google 地图)基于 STREAM_MUSIC 流类型播放驾驶方向;但是,在采用投影仪模式(例如 Android Auto)的移动设备上,应用不能将驾驶方向与其他媒体流混合在一起播放。
+</p>
 
-<p>现在,应用可以使用<a href="http://developer.android.com/reference/android/media/AudioAttributes.html">音频属性 API</a> 为音频系统提供有关特定音频源的详细信息:</p>
+<p>
+应用可以使用<a href="http://developer.android.com/reference/android/media/AudioAttributes.html" class="external">音频属性 API</a> 为音频系统提供有关特定音频源的详细信息,包括用法(播放来源的原因)、内容类型(播放来源的类型)、标记(来源的播放方式)以及上下文(Android 9 中的新变化)。语法如下所示:
+</p>
+
+<pre class="prettyprint">
+AudioAttributes {
+    mUsage
+    mContentType
+    mSource
+    mFlags
+    mTags / mFormattedTags / mBundle    (key value pairs)
+}
+</pre>
 
 <ul>
-<li><b>用法</b>。指定播放来源的原因,并控制导向、焦点和音量决策。</li>
-<li><b>内容类型</b>。指定播放来源的类型(音乐、电影、语音、发音、未知)。</li>
-<li><b>标记</b>。指定来源的播放方式。包括对可听性强制执行(一些国家/地区要求发出相机快门提示音)和硬件音频/视频同步的支持。</li>
+  <li><strong>用法</strong>。指定播放来源的原因,并控制导向、焦点和音量决策。</li>
+  <li><strong>内容类型</strong>。指定播放来源的类型(音乐、电影、语音、发音、未知)。</li>
+  <li><strong>上下文</strong>。提取到 Audio HAL 的用法值。</li><li><strong>标记</strong>。指定来源的播放方式。包括对可听性强制执行(一些国家/地区要求发出相机快门提示音)和硬件音频/视频同步的支持。</li>
 </ul>
 
-<p>对于动态处理,应用必须区分电影、音乐和语音内容。关于数据本身的信息也可能非常重要,例如响度和峰值采样值。</p>
+<p>
+对于动态处理,应用必须区分电影、音乐和语音内容。关于数据本身的信息也可能非常重要,例如响度和峰值采样值。
+</p>
 
 <h2 id="using">使用属性</h2>
 
-<p>用法指定了在何种环境中使用相关流类型,并提供有关播放相关声音的原因以及该声音用法的信息。用法信息比流类型信息更丰富,并且使平台或导向策略可以优化音量或导向决策。</p>
+<p>
+用法指定了在何种上下文中使用相关流类型,并提供有关播放相应声音的原因以及该声音用法的信息。用法信息比流类型信息更丰富,并且可让平台或导向策略优化音量或导向决策。
+</p>
 
-<p>为任何实例提供以下用法值之一:</p>
+<p>
+为任何实例提供以下用法值之一:
+</p>
 
 <ul>
-<li><code>USAGE_UNKNOWN</code></li>
-<li><code>USAGE_MEDIA</code></li>
-<li><code>USAGE_VOICE_COMMUNICATION</code></li>
-<li><code>USAGE_VOICE_COMMUNICATION_SIGNALLING</code></li>
-<li><code>USAGE_ALARM</code></li>
-<li><code>USAGE_NOTIFICATION</code></li>
-<li><code>USAGE_NOTIFICATION_RINGTONE</code></li>
-<li><code>USAGE_NOTIFICATION_COMMUNICATION_INSTANT</code></li>
-<li><code>USAGE_NOTIFICATION_COMMUNICATION_DELAYED</code></li>
-<li><code>USAGE_NOTIFICATION_EVENT</code></li>
-<li><code>USAGE_ASSISTANCE_ACCESSIBILITY</code></li>
-<li><code>USAGE_ASSISTANCE_NAVIGATION_GUIDANCE</code></li>
-<li><code>USAGE_ASSISTANCE_SONIFICATION</code></li>
-<li><code>USAGE_GAME</code></li>
+<li>USAGE_UNKNOWN</li>
+<li>USAGE_MEDIA</li>
+<li>USAGE_VOICE_COMMUNICATION</li>
+<li>USAGE_VOICE_COMMUNICATION_SIGNALLING</li>
+<li>USAGE_ALARM</li>
+<li>USAGE_NOTIFICATION</li>
+<li>USAGE_NOTIFICATION_TELEPHONY_RINGTONE</li>
+<li>USAGE_NOTIFICATION_COMMUNICATION_REQUEST</li>
+<li>USAGE_NOTIFICATION_COMMUNICATION_INSTANT</li>
+<li>USAGE_NOTIFICATION_COMMUNICATION_DELAYED</li>
+<li>USAGE_NOTIFICATION_EVENT</li>
+<li>USAGE_ASSISTANCE_ACCESSIBILITY</li>
+<li>USAGE_ASSISTANCE_NAVIGATION_GUIDANCE</li>
+<li>USAGE_ASSISTANCE_SONIFICATION</li>
+<li>USAGE_GAME</li>
+<li>USAGE_VIRTUAL_SOURCE</li>
+<li>USAGE_ASSISTANT</li>
 </ul>
 
-<p>音频属性用法值是互斥的。有关示例,请参阅 <code>
-<a href="http://developer.android.com/reference/android/media/AudioAttributes.html#USAGE_MEDIA">
-USAGE_MEDIA</a></code> 和 <code>
-<a href="http://developer.android.com/reference/android/media/AudioAttributes.html#USAGE_ALARM">
-USAGE_ALARM</a></code> 定义;有关异常,请参阅 <code>
-<a href="http://developer.android.com/reference/android/media/AudioAttributes.Builder.html">
-AudioAttributes.Builder</a></code> 定义。</p>
+<p>
+音频属性用法值是互斥的。有关示例,请参阅 <code><a href="http://developer.android.com/reference/android/media/AudioAttributes.html#USAGE_MEDIA" class="external">USAGE_MEDIA</a></code> 和 <code><a href="http://developer.android.com/reference/android/media/AudioAttributes.html#USAGE_ALARM" class="external">USAGE_ALARM</a></code> 定义;有关例外情况,请参阅 <code><a href="http://developer.android.com/reference/android/media/AudioAttributes.Builder.html" class="external">AudioAttributes.Builder</a></code> 定义。
+</p>
 
 <h2 id="content-type">内容类型</h2>
 
-<p>内容类型定义了声音是什么,并指明内容的常规类别,如电影、语音或提示音/铃声。音频框架使用内容类型信息来选择性地配置音频处理后块。尽管提供内容类型是可选的,但只要内容类型已知,您就应该包含类型信息,例如针对电影流式传输服务使用 <code>CONTENT_TYPE_MOVIE</code>,或针对音乐播放应用使用 <code>CONTENT_TYPE_MUSIC</code>。</p>
+<p>
+内容类型定义了声音是什么,并指明内容的常规类别,如电影、语音或提示音/铃声。音频框架使用内容类型信息来选择性地配置音频处理后块。尽管提供内容类型是可选的,但只要内容类型已知,您就应该包含类型信息,例如针对电影流式传输服务使用 <code>CONTENT_TYPE_MOVIE</code>,或针对音乐播放应用使用 <code>CONTENT_TYPE_MUSIC</code>。
+</p>
 
-<p>为任何实例提供以下内容类型值之一:</p>
+<p>
+为任何实例提供以下内容类型值之一:
+</p>
 
 <ul>
 <li><code>CONTENT_TYPE_UNKNOWN</code>(默认)</li>
@@ -81,24 +108,100 @@
 <li><code>CONTENT_TYPE_SPEECH</code></li>
 </ul>
 
-<p>音频属性内容类型值是互斥的。有关内容类型的详细信息,请参阅<a href="http://developer.android.com/reference/android/media/AudioAttributes.html">音频属性 API</a>。</p>
+<p>
+音频属性内容类型值是互斥的。有关内容类型的详细信息,请参阅<a href="http://developer.android.com/reference/android/media/AudioAttributes.html" class="external">音频属性 API</a>。
+</p>
+
+<h2 id="contexts">上下文</h2>
+
+<p>
+Android 中的每段声音都由相应的应用和声音生成的原因来识别;Android 设备会使用这些信息来确定如何呈现声音。在 Android 8.x 及更低版本中,应用可以使用旧版流类型(如 <code>AudioSystem.STREAM_MUSIC</code>)或 <code>AudioAttributes</code> 报告声音生成的原因。在 Android 9 中,<code>AudioAttributes.usage</code> 值在 HAL 级别被提取为上下文<em></em>。
+</p>
+
+<table>
+<thead>
+<tr>
+<th>HAL 音频上下文</th>
+<th>AudioAttributes 用法</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>MUSIC</td>
+<td>MEDIA</td>
+</tr>
+<tr>
+<td>VOICE_COMMAND</td>
+<td>USAGE_ASSISTANT</td>
+</tr>
+<tr>
+<td>NAVIGATION</td>
+<td>ASSISTANCE_NAVIGATION_GUIDANCE</td>
+</tr>
+<tr>
+<td>CALL</td>
+<td>VOICE_COMMUNICATION</td>
+</tr>
+<tr>
+<td>RINGTONE</td>
+<td>NOTIFICATION_RINGTONE</td>
+</tr>
+<tr>
+<td>NOTIFICATION</td>
+<td>NOTIFICATION</td>
+</tr>
+<tr>
+<td>ALARM</td>
+<td>ALARM</td>
+</tr>
+<tr>
+<td>SYSTEM_SOUND</td>
+<td>ASSISTANCE_SONIFICATION</td>
+</tr>
+<tr>
+<td>UNKNOWN</td>
+<td>UNKNOWN</td>
+</tr>
+</tbody>
+</table>
+
+<p>
+您可以为任何实例提供以下 <code>CONTEXT_NUMBER</code> 值之一:
+</p>
+
+<ul>
+<li>MUSIC_CONTEXT           // 音乐播放</li>
+<li>NAVIGATION_CONTEXT      // 导航路线</li>
+<li>VOICE_COMMAND_CONTEXT   // 语音指令会话</li>
+<li>CALL_RING_CONTEXT       // 语音呼叫响铃</li>
+<li>CALL_CONTEXT            // 语音通话</li>
+<li>ALARM_CONTEXT           // Android 闹钟铃声</li>
+<li>NOTIFICATION_CONTEXT    // 通知</li>
+<li>SYSTEM_SOUND_CONTEXT    // 用户交互声音(按钮点击声音等)</li>
+</ul>
 
 <h2 id="flags">标记</h2>
 
-<p>标记会指定音频框架如何对音频播放应用效果。请为一个实例提供以下一个或多个标记:</p>
+<p>
+标记会指定音频框架如何对音频播放应用效果。请为一个实例提供以下一个或多个标记:
+</p>
 
 <ul>
-<li><code>FLAG_AUDIBILITY_ENFORCED</code>。请求系统确保声音的可听性。用于满足旧版 <code>STREAM_SYSTEM_ENFORCED</code> 的需求(如强制要求发出相机快门提示音)。</li>
-<li><code>HW_AV_SYNC</code>。请求系统选择支持硬件 A/V 同步的输出流。</li>
+  <li><code>FLAG_AUDIBILITY_ENFORCED</code>。向系统发出请求,以确保声音的可听性。用于满足旧版 <code>STREAM_SYSTEM_ENFORCED</code> 的需求(如强制要求发出相机快门提示音)。
+  </li>
+  <li><code>HW_AV_SYNC</code>。向系统发出请求,以选择支持硬件 A/V 同步的输出流。</li>
 </ul>
 
-<p>音频属性标记是非专有的(可以组合使用)。要详细了解这些标记,请参阅<a href="http://developer.android.com/reference/android/media/AudioAttributes.html">音频属性 API</a>。</p>
+<p>
+音频属性标记是非专有的(可以组合使用)。要详细了解这些标记,请参阅<a href="http://developer.android.com/reference/android/media/AudioAttributes.html" class="external">音频属性 API</a>。
+</p>
 
 <h2 id="example">示例</h2>
 
-<p>在此示例中,AudioAttributes.Builder 定义了一个新的 AudioTrack 实例将使用的音频属性:</p>
+<p>
+在以下示例中,<code>AudioAttributes.Builder</code> 定义了将由一个新的 <code>AudioTrack</code> 实例使用的 <code>AudioAttributes</code>:</p>
 
-<pre class="devsite-click-to-copy">
+<pre class="prettyprint">
 AudioTrack myTrack = new AudioTrack(
   new AudioAttributes.Builder()
  .setUsage(AudioAttributes.USAGE_MEDIA)
@@ -109,15 +212,21 @@
 
 <h2 id="compatibility">兼容性</h2>
 
-<p>应用开发者在为 Android 5.0 创建或更新应用时应使用音频属性。但是,应用并非必须要利用这些属性;它们可以仅处理旧版流类型,或者一直不了解属性(例如对其播放的内容一无所知的常规媒体播放器)。</p>
+<p>
+应用开发者在为 Android 5.0 或更高版本创建或更新应用时,应使用音频属性。不过,应用并非必须要利用这些属性;它们可以仅处理旧版流类型,或一直不知道属性(即,对其播放的内容一无所知的常规媒体播放器)。
+</p>
 
-<p>在此类情况下,框架通过自动将旧版音频流类型转换为音频属性,保持对旧设备和 Android 版本的向后兼容性。但是,框架不会针对各个设备、制造商或 Android 版本强制要求或保证具备这种映射。</p>
+<p>
+在此类情况下,框架通过自动将旧版音频流类型转换为音频属性,保持对旧设备和 Android 版本的向后兼容性。不过,框架不会针对各个设备、制造商或 Android 版本强制要求或保证具备这种映射。
+</p>
 
-<p>兼容性映射:</p>
+<p>
+兼容性映射:
+</p>
 
 <table>
 <tbody><tr>
-  <th>Android 5.0</th>
+  <th>Android 5.0 及更高版本</th>
   <th>Android 4.4 及更早版本</th>
 </tr>
 <tr>
@@ -209,6 +318,31 @@
 </tr>
 </tbody></table>
 
-<p class="note"><strong>注意</strong>:@hide 流在框架内部使用,不是公共 API 的一部分。</p>
+<aside class="note"><strong>注意</strong>:@hide 流在框架内部使用,不是公共 API 的一部分。
+</aside>
+
+<h2 id="deprecated">已弃用的流类型</h2>
+
+<p>
+Android 9 弃用了以下用于汽车的流类型:
+</p>
+
+<ul>
+<li>STREAM_DEFAULT</li>
+<li>STREAM_VOICE_CALL</li>
+<li>STREAM_SYSTEM</li>
+<li>STREAM_RING</li>
+<li>STREAM_MUSIC</li>
+<li>STREAM_ALARM</li>
+<li>STREAM_NOTIFICATION</li>
+<li>STREAM_BLUETOOTH_SCO</li>
+<li>STREAM_SYSTEM_ENFORCED</li>
+<li>STREAM_DTMF</li>
+<li>STREAM_TTS</li>
+<li>STREAM_ACCESSIBILITY</li>
+</ul>
+
+<p>有关详情,请参阅<a href="/devices/automotive/audio">汽车音频</a>。
+</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/audio/highres-effects.html b/zh-cn/devices/audio/highres-effects.html
new file mode 100644
index 0000000..f18d0f9
--- /dev/null
+++ b/zh-cn/devices/audio/highres-effects.html
@@ -0,0 +1,111 @@
+<html devsite><head>
+  <title>高解析度音效</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>Android 9 版本包括以下针对高解析度音频的改进:</p>
+
+  <ul>
+    <li>音效处理从 int16 转换为浮动格式,后者是 AudioFlinger 中所剩不多的 int16 通道之一。这项音效处理更改需要提供自定义音效的供应商完成实现工作。下文将介绍相关实现工作。</li>
+
+    <li>以下改进无需合作伙伴处理任何实现事宜:
+
+      <ul>
+        <li>客户端的同时输出音轨数量从 14 增加到 40,因为对 Android 8.x 中的应用而言,有限的客户端 AudioTrack 已经成为一个需要解决的问题。</li>
+
+        <li>客户端/服务器的最大内存从 4MB 增加到 32MB(具体取决于设备总内存),以允许同时存在更多高解析度音轨。</li>
+
+        <li>混合音轨总数从 32 增加到 256,以防止应用和系统界面之间出现资源争用情况。</li>
+      </ul>
+    </li>
+  </ul>
+
+  <h2 id="output-effect-changes">输出音效变化</h2>
+
+  <p>在 Android 9 版本之前,音效链处理是以立体声 int16 样本格式实现的。这种方法存在以下几项限制:</p>
+
+  <ul>
+    <li>所有输出音效都强制从浮点音频数据转换为 int16,而这会导致精确度失真。</li>
+
+    <li>输出音效遭到通道数大于 2 的输出接收器的拒绝。</li>
+  </ul>
+
+  <p>在 Android 9 版本中,音效链处理通道进行了升级,以支持多通道浮动格式。要点如下:</p>
+
+  <ul>
+    <li>Android 软件音效已经改用立体声浮动格式。</li>
+
+    <li>格式适配器支持旧版音效,可根据需要将浮动格式转换为 int16。</li>
+  </ul>
+
+  <h2 id="implementing-output-effects">实现输出音效</h2>
+
+  <p><code>frameworks/av/media/libeffects</code> 下提供了输出音效的参考实现。</p>
+
+  <p>实现自己的自定义输出音效的合作伙伴应针对 Android 9 版本执行以下操作:</p>
+
+  <ul>
+    <li>更新输出音效以支持多通道浮动格式:
+
+      <ul>
+        <li>不再需要 Int16 处理支持。</li>
+
+        <li>支持的输出通道数为 2-8 个(出于未来兼容性方面的考虑,通道数可以为 1-30 个)。</li>
+
+        <li>对于插入音效,支持与输出通道数一致的输入通道数。对于辅助音效,输入通道数将仍为 1(单声道)。</li>
+
+        <li>支持通道位置掩码(规范)和 (1 &lt;&lt; n) - 1 的通道索引掩码。</li>
+      </ul>
+    </li>
+
+    <li>如果您必须继续支持旧版供应商输出音效且无法更新它们,请按如下方式验证旧代码:
+
+      <ul>
+        <li>旧版输出(插入)音效<strong>必须拒绝</strong> <code>EFFECT_CMD_SET_CONFIG</code> 中不受支持的配置。
+
+        <ul>
+            <li>检查格式是否为 int16。</li>
+
+            <li>检查输入和输出通道掩码是否为立体声。</li>
+
+            <li>如果不是,则返回 <code>-EINVAL</code>。</li>
+          </ul>
+        </li>
+
+        <li>旧版输出(辅助)音效由 AudioFlinger 配置,具有单声道输入通道掩码,并可能具有多通道输出通道掩码(具体取决于输出接收器是否为多通道)。它们<strong>必须拒绝</strong> <code>
+          EFFECT_CMD_SET_CONFIG</code> 中不受支持的配置。
+
+          <ul>
+            <li>检查格式是否为 int16。</li>
+
+            <li>检查输入通道掩码是否为单声道,输出通道掩码是否为立体声。</li>
+
+            <li>如果不是,则返回 <code>-EINVAL</code>。</li>
+          </ul>
+        </li>
+
+        <li>验证旧代码。请勿假定旧代码可正常运行!</li>
+      </ul>
+    </li>
+  </ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/audio/index.html b/zh-cn/devices/audio/index.html
index 67dddb7..3bcbb33 100644
--- a/zh-cn/devices/audio/index.html
+++ b/zh-cn/devices/audio/index.html
@@ -26,7 +26,6 @@
 Android 的音频硬件抽象层 (HAL) 可将 <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> 中特定于音频的较高级别的框架 API 连接到底层音频驱动程序和硬件。本部分介绍了有关提升性能的实现说明和提示。
 </p>
 
-<h2 id="Architecture">音频架构</h2>
 <p>
 Android 音频架构定义了音频功能的实现方式,并指出实现中所涉及的相关源代码。
 </p>
diff --git a/zh-cn/devices/audio/latency/measure.html b/zh-cn/devices/audio/latency/measure.html
index 6c20121..4f918e5 100644
--- a/zh-cn/devices/audio/latency/measure.html
+++ b/zh-cn/devices/audio/latency/measure.html
@@ -25,7 +25,7 @@
 
 <h2 id="measuringOutput">测量输出延迟</h2>
 
-<p>有多种技术可用于测量输出延迟,这些技术的准确度和运行难易程度各不相同,具体情况如下所述。此外,要查看示例测试环境,请参阅<a href="testing_circuit.html">测试电路</a>。
+<p>有多种技术可用于测量输出延迟,这些技术的准确度和运行难易程度各不相同,具体情况如下所述。此外,要查看示例测试环境,请参阅<a href="/devices/audio/latency/testing_circuit.html">测试电路</a>。
 </p>
 
 <h3 id="ledTest">LED 和示波器测试</h3>
@@ -45,7 +45,7 @@
 
 <ol>
   <li>运行一个定期使 LED 闪烁并同时输出音频的应用。
-  <p class="note"><strong>注意</strong>:要获得实用的结果,请务必在测试应用中使用正确的 API,以便运用快速音频输出路径。有关背景信息,请参阅<a href="latency_design.html">降低延迟的设计</a>。</p>
+  <p class="note"><strong>注意</strong>:要获得实用的结果,请务必在测试应用中使用正确的 API,以便运用快速音频输出路径。有关背景信息,请参阅<a href="/devices/audio/latency/design.html">降低延迟的设计</a>。</p>
   </li>
   <li>在 LED 旁边放置一个光传感器。</li>
   <li>将双通道示波器的探头连接到有线耳机插孔(线路输出)和光传感器。</li>
@@ -80,7 +80,8 @@
 
 <h3 id="loopback">音频环回软件狗</h3>
 
-<p><a href="loopback.html">Dr. Rick O'Rang 音频环回软件狗</a>可用于测量耳机连接器的往返延迟,非常方便。下图演示了向循环中注入一次脉冲然后使反馈循环振荡的结果。振荡的周期就是往返延迟。此处并未指定具体设备、软件版本和测试条件。因此,不应对显示的结果进行外推。
+<p>
+<a href="/devices/audio/latency/loopback.html">Dr. Rick O'Rang 音频环回软件狗</a>可用于测量耳机连接器的往返延迟,非常方便。下图演示了向循环中注入一次脉冲然后使反馈循环振荡的结果。振荡的周期就是往返延迟。此处并未指定具体设备、软件版本和测试条件。因此,不应对显示的结果进行外推。
 </p>
 
 <img src="/devices/audio/images/round_trip.png" alt="往返测量" id="figure1"/>
diff --git a/zh-cn/devices/audio/latency/measurements.html b/zh-cn/devices/audio/latency/measurements.html
index f61d99f..8e3c35f 100644
--- a/zh-cn/devices/audio/latency/measurements.html
+++ b/zh-cn/devices/audio/latency/measurements.html
@@ -20,7 +20,7 @@
       limitations under the License.
   -->
 
-<p><a href="http://en.wikipedia.org/wiki/Latency_%28engineering%29">延迟时间</a>是一项重要的系统性能指标。<a href="latency.html">音频延迟时间</a>指标有多种类型,其中一个很实用且易于理解的指标是<a href="latency_measure.html#measuringRoundTrip">往返延迟时间</a>。根据该指标的定义,往返延迟时间是指音频信号进入移动设备的输入组件,由应用处理器上运行的应用进行处理,然后从输出组件传出,这整个过程所花费的时间。</p>
+<p><a href="http://en.wikipedia.org/wiki/Latency_%28engineering%29">延迟时间</a>是一项重要的系统性能指标。<a href="latency.html">音频延迟时间</a>指标有多种类型,其中一个很实用且易于理解的指标是<a href="/devices/audio/latency/measure.html#measuringRoundTrip">往返延迟时间</a>。根据该指标的定义,往返延迟时间是指音频信号进入移动设备的输入组件,由应用处理器上运行的应用进行处理,然后从输出组件传出,这整个过程所花费的时间。</p>
 
 <img src="/devices/audio/images/round_trip_on_device.png" alt="设备上的往返音频延迟时间" id="figure1"/>
 <p class="img-caption"><strong>图 1. </strong> 设备上的往返音频延迟时间:T<sub>output</sub> - T<sub>input</sub></p>
@@ -41,7 +41,7 @@
 
 <h2 id="how">如何测量</h2>
 
-<p>我们使用 <a href="loopback.html">Dr. Rick O'Rang 音频环回软件狗</a>和<a href="latency_measure.html#larsenTest">音频反馈(拉尔森效应)测试</a>得出了本页列出的测量结果。测量假设应用信号处理技术的算法延迟时间为零,并且计算延迟时间接近零。</p>
+<p>我们使用 <a href="/devices/audio/latency/loopback.html">Dr. Rick O'Rang 音频环回软件狗</a>和<a href="/devices/audio/latency/measure.html#larsenTest">音频反馈(拉尔森效应)测试</a>得出了本页列出的测量结果。测量假设应用信号处理技术的算法延迟时间为零,并且计算延迟时间接近零。</p>
 
 <p>我们通过耳机连接器来测量往返延迟时间有以下几个原因:</p>
 <img src="/devices/audio/images/round_trip_via_headset_connector.png" alt="通过耳机连接器测量的往返延迟时间" id="figure2"/>
@@ -52,7 +52,7 @@
 <li>设备上的换能器都很小,为了实现它们的小尺寸则需要牺牲频率响应。出于补偿目的,换能器会应用数字信号处理技术,但这会增加设备上路径的算法延迟时间。</li>
 </ul>
 
-<p>在有些情况下,设备上的麦克风和扬声器延迟时间确实会带来影响,但这通常是针对单向延迟而不是往返延迟。<em></em><a href="latency_measure.html#measuringOutput">测量输出设备延迟时间</a>和<a href="latency_measure.html#measuringInput">测量输入设备延迟时间</a>中介绍了测量单向延迟时间的相关技巧。</p>
+<p>在有些情况下,设备上的麦克风和扬声器延迟时间确实会带来影响,但这通常是针对单向延迟而不是往返延迟。<em></em><a href="/devices/audio/latency/measure.html#measuringOutput">测量输出设备延迟时间</a>和<a href="/devices/audio/latency/measure.html#measuringInput">测量输入设备延迟时间</a>中介绍了测量单向延迟时间的相关技巧。</p>
 
 <h2 id="examples">测量结果示例</h2>
 
diff --git a/zh-cn/devices/audio/terminology.html b/zh-cn/devices/audio/terminology.html
index 8da8ce9..7f23022 100644
--- a/zh-cn/devices/audio/terminology.html
+++ b/zh-cn/devices/audio/terminology.html
@@ -136,7 +136,7 @@
 
 <dt>多声道</dt>
 <dd>
-请参阅“环绕声”。<em></em>严格来讲,“立体声”指多个声道,可以视为多声道;不过,由于这种用法会令人感到困惑,因此请避免使用。<em></em>
+请参阅“环绕声”。<em></em>严格来讲,“立体声”指多个声道,可以视为多声道;不过,由于这种用法容易产生混淆,因此请避免使用。<em></em>
 </dd>
 
 <dt>静音</dt>
diff --git a/zh-cn/devices/automotive/audio/audio-hal.html b/zh-cn/devices/automotive/audio/audio-hal.html
new file mode 100644
index 0000000..74a90f5
--- /dev/null
+++ b/zh-cn/devices/automotive/audio/audio-hal.html
@@ -0,0 +1,185 @@
+<html devsite><head>
+    <title>实现音频 HAL</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>
+汽车音频实现依赖标准 <a href="/devices/audio/implement">Android 音频 HAL</a>,其中包括以下内容:
+</p>
+
+<ul>
+  <li><code><strong>IDevice</strong></code> (<code>hardware/interfaces/audio/2.0/IDevice.hal</code>)。创建输入流和输出流、处理主音量和静音,以及使用:<ul>
+    <li><code>createAudioPatch</code> 在设备之间创建 external-external 补丁程序。</li>
+    <li><code>IDevice.setAudioPortConfig()</code> 为各个物理音频流提供音量。</li>
+  </ul>
+  </li><li><code><strong>IStream</strong></code> (<code>hardware/interfaces/audio/2.0/IStream.hal</code>)。连同它的输入和输出变体一起,管理进出硬件的实际样本音频流。</li>
+</ul>
+
+<h2 id="automotive-device-types">车载设备类型</h2>
+
+<p>
+以下设备类型与汽车平台相关:</p>
+
+<table>
+<thead>
+<tr>
+<th>设备类型</th>
+<th>说明</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>AUDIO_DEVICE_OUT_BUS</td>
+<td>Android 的主要输出(Android 的所有音频均通过这种方式提供给车辆)。用作消除各个上下文的信息流歧义的地址。</td>
+</tr>
+<tr>
+<td>AUDIO_DEVICE_OUT_TELEPHONY_TX</td>
+<td>用于传输路由到手机无线装置的音频。</td>
+</tr>
+<tr>
+<td>AUDIO_DEVICE_IN_BUS</td>
+<td>用于尚未进行分类的输入。</td>
+</tr>
+<tr>
+<td>AUDIO_DEVICE_IN_FM_TUNER</td>
+<td>仅用于广播无线装置输入。</td>
+</tr>
+<tr>
+<td>AUDIO_DEVICE_IN_TV_TUNER</td>
+<td>可用于电视设备(如果存在)。</td>
+</tr>
+<tr>
+<td>AUDIO_DEVICE_IN_LINE</td>
+<td>用于 AUX 输入耳机插孔。</td>
+</tr>
+<tr>
+<td>AUDIO_DEVICE_IN_BLUETOOTH_A2DP</td>
+<td>通过蓝牙接收到的音乐。</td>
+</tr>
+<tr>
+<td>AUDIO_DEVICE_IN_TELEPHONY_RX</td>
+<td>用于从手机无线装置接收到与通话相关联的音频。</td>
+</tr>
+</tbody>
+</table>
+
+<h2 id="route-audio-sources">路由音频源</h2>
+
+<p>
+您应使用 <code>AudioRecord</code> 或相关 Android 机制来捕获大多数音频源。接下来,可为数据分配 <a href="/devices/audio/attributes">AudioAttributes</a> 并通过 <code>AndroidTrack</code> 播放数据,只需依赖默认的 Android 路由逻辑或通过显式调用 <code>AudioRecord</code> 和/或 <code>AudioTrack</code> 对象上的 <code>setPreferredDevice()</code> 即可。
+</p><p>
+
+</p><p>
+对于与外部混音器之间有专用硬件连接的来源或具有极为严苛的延迟要求的来源而言,您可以使用 <code>createAudioPatch()</code> 和 <code>releaseAudioPatch()</code> 来启用和停用外部设备之间的路由(在样本传输过程中无需使用 <code>AudioFlinger</code>)。
+</p>
+
+<h2 id="configure-audio-devices">配置音频设备</h2>
+
+<p>
+Android 可见的音频设备必须在 <code>system/etc/audio_policy_configuration.xml</code> 中进行定义,其中包括以下组件:
+</p>
+
+<ul>
+  <li><strong>module name</strong>。支持“primary”(用于汽车用例)、“A2DP”、“remote_submix”和“USB”。模块名称和相应音频驱动程序应编译到 <code>audio.primary.$(variant).so</code> 中。</li>
+  <li><strong>devicePorts</strong>。包含可从此模块访问的所有输入和输出设备(包括永久连接的设备和可移除设备)的设备描述符列表。
+  <ul>
+    <li>对于每种输出设备,您可以定义增益控制(包含以 millibel 为单位的 min/value/step/default 值,其中 1 millibel = 1/100 分贝 = 1/1000 贝尔)。</li>
+      <li><code>devicePort</code> 上的地址属性可用于查找设备(即使多个设备的设备类型与 <code>AUDIO_DEVICE_OUT_BUS</code> 相同)。</li>
+  </ul>
+  </li><li><strong>mixPorts</strong>。包含由音频 HAL 提供的所有输出流和输入流的列表。每个 <code>mixPort</code> 都可被视为传输到 Android <code>AudioService</code> 的物理音频流。</li>
+  <li><strong>routes</strong>。定义输入和输出设备之间或音频流和设备之间可能存在的连接的列表。</li>
+</ul>
+
+<p>
+以下示例定义了输出设备 <code>bus0_phone_out</code>,其中所有 Android 音频流都通过 <code>mixer_bus0_phone_out</code> 完成混音。路由将 <code>mixer_bus0_phone_out</code> 的输出流传递到 <code>device bus0_phone_out</code>。
+</p>
+
+<pre class="prettyprint">
+&lt;audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"&gt;
+    &lt;modules&gt;
+        &lt;module name="primary" halVersion="3.0"&gt;
+            &lt;attachedDevices&gt;
+                &lt;item&gt;bus0_phone_out&lt;/item&gt;
+&lt;defaultOutputDevice&gt;bus0_phone_out&lt;/defaultOutputDevice&gt;
+            &lt;mixPorts&gt;
+                &lt;mixPort name="mixport_bus0_phone_out"
+                         role="source"
+                         flags="AUDIO_OUTPUT_FLAG_PRIMARY"&gt;
+                    &lt;profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+                            samplingRates="48000"
+                            channelMasks="AUDIO_CHANNEL_OUT_STEREO"/&gt;
+                &lt;/mixPort&gt;
+            &lt;/mixPorts&gt;
+            &lt;devicePorts&gt;
+                &lt;devicePort tagName="bus0_phone_out"
+                            role="sink"
+                            type="AUDIO_DEVICE_OUT_BUS"
+                            address="BUS00_PHONE"&gt;
+                    &lt;profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+                            samplingRates="48000"
+                            channelMasks="AUDIO_CHANNEL_OUT_STEREO"/&gt;
+                    &lt;gains&gt;
+                        &lt;gain name="" mode="AUDIO_GAIN_MODE_JOINT"
+                                minValueMB="-8400"
+                                maxValueMB="4000"
+                                defaultValueMB="0"
+                                stepValueMB="100"/&gt;
+                    &lt;/gains&gt;
+                &lt;/devicePort&gt;
+            &lt;/devicePorts&gt;
+            &lt;routes&gt;
+                &lt;route type="mix" sink="bus0_phone_out"
+                       sources="mixport_bus0_phone_out"/&gt;
+            &lt;/routes&gt;
+        &lt;/module&gt;
+    &lt;/modules&gt;
+&lt;/audioPolicyConfiguration&gt;
+</pre>
+
+<h2 id="device-ports">指定 devicePorts</h2>
+
+<p>
+汽车平台应该为每个输入到 Android 和从 Android 输出的物理音频流指定 <code>devicePort</code>。对于输出音频流,<code>devicePorts</code> 的类型应为 <code>AUDIO_DEVICE_OUT_BUS</code>,并采用整数(即总线 0、总线 1 等)编址。<code>mixPort</code> 与 <code>devicePorts</code> 的数量之比应为 1:1,并应允许指定可以路由到每个总线的数据格式。
+</p>
+
+<p>
+汽车实现可以使用多个输入设备类型,包括 <code>FM_TUNER</code>(保留以用于广播无线装置输入)、<code>MIC</code> 设备(用于处理麦克风输入)和 <code>TYPE_AUX_LINE</code>(用于表示模拟线输入)。所有其他输入流都会分配到 <code>AUDIO_DEVICE_IN_BUS</code>,并在通过 <code>AudioManager.getDeviceList()</code> 调用枚举设备时被发现。各个来源可根据其 <code>AudioDeviceInfo.getProductName()</code> 进行区分。
+  </p><p>
+
+</p><p>
+您还可以将外部设备定义为端口,然后通过音频 HAL 的 <code>IDevice::createAudioPatch</code> 方法(通过新的 <code>CarAudioManager</code> 入口点提供)使用这些端口与外部硬件互动。
+</p>
+
+<p>
+如果存在基于总线的音频驱动程序,则必须将 <code>audioUseDynamicRouting</code> 标记设置为 <code>true</code>:
+</p>
+
+<pre class="prettyprint">
+&lt;resources&gt;
+    &lt;bool name="audioUseDynamicRouting"&gt;true&lt;/bool&gt;
+&lt;/resources&gt;
+</pre>
+
+<p>
+有关详情,请参阅 <code>device/generic/car/emulator/audio/overlay/packages/services/Car/service/res/values/config.xml</code>。
+</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/automotive/camera-hal.html b/zh-cn/devices/automotive/camera-hal.html
index d8f6d91..45f4299 100644
--- a/zh-cn/devices/automotive/camera-hal.html
+++ b/zh-cn/devices/automotive/camera-hal.html
@@ -352,7 +352,7 @@
 
 <ul>
 <li><strong>环绕视图</strong>。为了解决车辆的车身周围有多个相机时的用例,Google 正在考虑增强 EVS 应用,将来自多个并发相机的视频转换成适合狭小空间操作(例如在狭窄的空间中停车)的 3D 演示。</li>
-<li><strong>用户输入</strong>。在 Android 8.0 中,应用负责从内核设备获取和解析输入事件。通过与 dev/event# 内核设备进行互动,可以在启动周期早期读取用户输入,并且从这些流读取事件不会影响 Android InputFlinger 监测这些相同输入流的能力。为了解决输入事件用例的相关问题,Google 正在考虑采用支持单触摸事件的简单 EVS 接口。</li>
+<li><strong>用户输入</strong>。在 Android 8.0 中,应用负责从内核设备获取和解析输入事件。通过与 dev/event# 内核设备进行互动,可以在启动周期早期读取用户输入,并且从这些流读取事件不会影响 Android InputFlinger 监测这些相同输入流的能力。为了解决输入事件用例的相关问题,Google 正在考虑采用支持单轻触事件的简单 EVS 接口。</li>
 </ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/automotive/properties.html b/zh-cn/devices/automotive/properties.html
index 0a9e203..908ea3b 100644
--- a/zh-cn/devices/automotive/properties.html
+++ b/zh-cn/devices/automotive/properties.html
@@ -59,60 +59,100 @@
 <p>属性可以是只读、只写(用于将信息传递到车载 HAL 一级),也可以是能够读取和写入(对大多数属性而言支持读写是可选的)。每个属性都由 int32 键唯一标识,且具有预定义的类型 (<code>value_type</code>):</p>
 
 <ul>
-<li><code>INT32</code>(和数组)、<code>INT64</code>、<code>BOOLEAN</code>、<code>FLOAT</code>(和数组)、字符串、字节。</li>
-<li>区域类型除了值之外还有区域。</li>
+<li><code>BYTES</code></li>
+<li><code>BOOLEAN</code></li>
+<li><code>FLOAT</code></li>
+<li><code>FLOAT[]</code></li>
+<li><code>INT32</code></li>
+<li><code>INT32[]</code></li>
+<li><code>INT64</code></li>
+<li><code>INT64[]</code></li>
+<li><code>STRING</code></li>
+</ul>
+<p>区域属性可能具有多个值,具体取决于属性所支持的区域数量。</p>
+
+<h2 id="area_type">区域类型</h2>
+<p>车载 HAL 定义了多种区域类型:</p>
+<ul>
+<li><code>GLOBAL</code>
+<br />此属性是单一实例,不具备多个区域。</li>
+<li><code>WINDOW</code>
+<br />基于车窗的区域,使用 <code>VehicleAreaWindow</code> 枚举。</li>
+<li><code>MIRROR</code>
+<br />基于车镜的区域,使用 <code>VehicleAreaMirror</code> 枚举。</li>
+<li><code>SEAT</code>
+<br />基于座椅的区域,使用 <code>VehicleAreaSeat</code> 枚举。</li>
+<li><code>DOOR</code>
+<br />基于车门的区域,使用 <code>VehicleAreaDoor</code> 枚举。</li>
+<li><code>WHEEL</code>
+<br />基于车轮的区域,使用 <code>VehicleAreaWheel</code> 枚举。</li>
+</ul>
+<p>每个区域属性都必须使用预定义的区域类型。每种区域类型都有一组在区域类型的枚举中定义的位标记。例如,SEAT 区域定义了 VehicleAreaSeat 枚举:</p>
+<ul>
+<li><code>ROW_1_LEFT = 0x0001</code></li>
+<li><code>ROW_1_CENTER = 0x0002</code></li>
+<li><code>ROW_1_RIGHT = 0x0004</code></li>
+<li><code>ROW_2_LEFT = 0x0010</code></li>
+<li><code>ROW_2_CENTER = 0x0020</code></li>
+<li><code>ROW_2_RIGHT = 0x0040</code></li>
+<li><code>ROW_3_LEFT = 0x0100</code></li>
+<li>…</li>
 </ul>
 
-<h2 id-="zone_type">区域类型</h2>
-<p>车载 HAL 定义了 3 种区域类型:</p>
+<h2 id="area_id">区域 ID</h2>
+<p>区域属性通过区域 ID 进行处理。每个区域属性都可以支持一个或多个区域 ID。区域 ID 由其各自枚举中的一个或多个标记组成。例如,使用 <code>VehicleAreaSeat</code> 的属性可能会使用以下区域 ID:</p>
 <ul>
-<li><code>vehicle_zone</code>
-<br />基于排的区域。</li>
-<li><code>vehicle_seat</code>
-<br />基于座位的区域。</li>
-<li><code>vehicle_window</code>
-<br />基于窗户的区域。</li>
+<li><code>ROW_1_LEFT | ROW_1_RIGHT</code>
+<br />区域 ID 适用于两个前排座椅。</li>
+<li><code>ROW_2_LEFT</code>
+<br />仅适用于左后座椅。</li>
+<li><code>ROW_2_RIGHT</code>
+<br />仅适用于右后座椅。</li>
 </ul>
-<p>每个区域属性都应使用预定义的区域类型。如有必要,您可以为每个属性使用自定义区域类型(有关详情,请参阅<a href="#prop_custom">处理自定义属性</a>)。</p>
+
+<h2 id="status">属性状态</h2>
+<p>每个属性值都随附一个 <code>VehiclePropertyStatus</code> 值。该值指示相应属性的当前状态:
+</p><ul>
+<li><code>AVAILABLE</code>
+<br />属性可用,且值有效。</li>
+<li><code>UNAVAILABLE</code>
+<br />属性值目前不可用。该值用于受支持属性的暂时停用的功能。</li>
+<li><code>ERROR</code>
+<br />该属性有问题。</li>
+</ul>
+<aside class="note"><strong>注意</strong>:如果车辆不支持某个属性,则不应将其包含在 VHAL 中。您不得将属性状态永久性设置为 <code>UNAVAILABLE</code> 来表示不受支持的属性。</aside>
 
 <h2 id="prop_config">配置属性</h2>
 <p>使用 <code>vehicle_prop_config_t</code> 为每个属性提供配置信息。具体信息包括:</p>
 <ul>
 <li><code>access</code>(r、w、rw)</li>
-<li><code>change_mode</code>(表示监视属性的方式:变化模式还是连续模式)</li>
-<li><code>min_value</code>(int32、float、int64)、<code>max_value</code>(int32、float、int64)</li>
-<li><code>min_sample_rate</code>、<code>max_sample_rate</code></li>
-<li><code>permission_model</code></li>
+<li><code>changeMode</code>(表示监视属性的方式:变化模式还是连续模式)</li>
+<li><code>areaConfigs</code>(areaId、最小值和最大值)</li>
+<li><code>configArray</code>(其他配置参数)</li>
+<li><code>configString</code>(以字符串的形式传递的其他信息)</li>
+<li><code>minSampleRate</code>、<code>max_sample_rate</code></li>
 <li><code>prop</code>(属性 ID、int)</li>
-<li><code>value_type</code></li>
-<li><code>zone_flags</code>(将受支持的区域表示为位标记)</li>
 </ul>
-<p>此外,某些属性具有表示功能的具体配置标记。</p>
 
 <h2 id="zone_prop">处理区域属性</h2>
-<p>区域属性相当于多个属性的集合,其中每个子属性都可由指定的区域值访问。</p>
+<p>区域属性相当于多个属性的集合,其中每个子属性都可由指定的区域 ID 值访问。</p>
 <ul>
-<li>区域属性的 <code>get</code> 调用始终包含请求中的区域,因此,只应返回所请求区域的当前值。</li>
-<li>区域属性的 <code>set</code> 调用始终包含请求中的区域,因此,只应更改所请求的区域。</li>
-<li><code>subscribe</code> 调用包括所有已订阅区域的标记。不应报告来自未订阅区域的事件。</li>
+<li>区域属性的 <code>get</code> 调用始终包含请求中的区域 ID,因此,系统只会返回所请求的区域 ID 的当前值。如果属性是全局属性,则区域 ID 为 0。</li>
+<li>区域属性的 <code>set</code> 调用始终包含请求中的区域 ID,因此只有请求的区域 ID 会发生更改。</li>
+<li><code>subscribe</code> 调用将针对相应属性的所有区域 ID 生成事件。</li>
 </ul>
 
 <h3 id="get">Get 调用</h3>
-<p>在初始化期间,由于尚未收到匹配的车辆网络消息,属性的值可能不可用。在这种情况下,<code>get</code> 调用应该返回 <code>-EAGAIN</code>。某些属性(如 HVAC)具有独立的电源开/关属性。这种属性的 <code>get</code> 的调用(关机时)应返回特殊值 <code>(VEHICLE_INT_OUT_OF_RANGE_OFF/VEHICLE_FLOAT_OUT_OF_RANGE_OFF)</code>,而不是返回错误。</p>
-<p>此外,某些属性(如 HVAC 温度)可以用某个值来表示其处于最大功率模式,而不是特定的温度值。在这种情况下,请使用特殊值表示这种状态。</p>
-<ul>
-<li>VEHICLE_INT_OUT_OF_RANGE_MAX/MIN</li>
-<li>VEHICLE_FLOAT_OUT_OF_RANGE_MAX/MIN</li>
-</ul>
+<p>在初始化期间,由于尚未收到匹配的车辆网络消息,属性的值可能不可用。在这种情况下,<code>get</code> 调用应该返回 <code>-EAGAIN</code>。某些属性(如 HVAC)具有独立的电源开/关属性。这种属性的 <code>get</code> 的调用(关闭电源时)应返回 <code>UNAVAILABLE</code> 状态,而不是返回错误。</p>
 
 <p>示例:获取 HVAC 温度</p>
-<img src="../images/vehicle_hvac_get.png" alt="车载 HAL get 获取 HVAC 的示例"/>
+<img src="../images/vehicle_hvac_get.png" alt="车载 HAL 获取 HVAC 的示例"/>
 <p class="img-caption"><strong>图 1</strong>. 获取 HVAC 温度(CS = CarService、VNS = VehicleNetworkService、VHAL = 车载 HAL)</p>
 
 <h3 id="set">Set 调用</h3>
 <p><code>set</code> 调用属于异步操作,涉及进行所请求更改之后的事件通知。在典型的操作中,<code>set</code> 调用会导致在车辆网络中发出更改请求。拥有该属性的电子控制单元 (ECU) 执行更改后,更新后的值通过车辆网络返回,而车载 HAL 会将更新后的值作为事件发送给车辆网络服务 (VNS)。</p>
 <p>某些 <code>set</code> 调用可能要求准备好初始数据,而这些数据在初始化期间可能尚不可用。在这种情况下,<code>set</code> 调用应该返回 <code>-EAGAIN</code>。某些具有独立的电源开/关的属性应在属性关闭且无法设置时返回 <code>-ESHUTDOWN</code>。</p>
-<p>在 <code>set</code> 生效之前,<code>get</code> 不一定会返回所设置的值。例外情况是更改模式为 <code>VEHICLE_PROP_CHANGE_MODE_ON_SET.</code> 的属性。此属性仅在被 Android 之外的外部组件(如 <code>VEHICLE_PROPERTY_UNIX_TIME</code> 等时钟属性)设置时才通知更改。</p>
+<p>在 <code>set</code> 生效之前,<code>get</code> 不一定会返回所设置的值。</p>
 
 <p>示例:设置 HVAC 温度</p>
 <img src="../images/vehicle_hvac_set.png" alt="车载 HAL 设置 HVAC 的示例"/>
@@ -121,53 +161,111 @@
 <h2 id="prop_custom">处理自定义属性</h2>
 <p>为了满足合作伙伴的特定需求,车载 HAL 允许使用针对系统应用的自定义属性。在使用自定义属性时,请遵循以下指南:</p>
 <ul>
-<li>键值应该在 [<code>VEHICLE_PROPERTY_CUSTOM_START,
-VEHICLE_PROPERTY_CUSTOM_END</code>] 范围内。其他范围会预留以供将来的扩展功能使用;使用这种范围可能会导致将来的 Android 版本中出现冲突。</li>
-<li>仅使用定义的 <code>value_type</code>。BYTES 类型允许传递原始数据,因此,在大多数情况下是足够的。通过自定义属性频繁发送大数据可能会减缓整个车辆网络的访问速度,因此,在添加大量需要 HAL 处理的数据时要小心谨慎。</li>
-<li>将访问策略添加到 <code>vendor_vns_policy.xml</code>(否则所有访问都将被拒)。</li>
-<li>通过 <code>VendorExtensionManager</code>(适用于 Java 组件)或 Vehicle Network Service API(适用于本机)访问。请勿修改其他汽车 API,因为这样做可能会在将来导致兼容性问题。</li>
+<li>应使用以下字段生成属性 ID:
+  <ul>
+    <li><code>VehiclePropertyGroup:VENDOR</code>
+      <br /><code>VENDOR</code> 组仅用于自定义属性。</li>
+    <li><code>VehicleArea</code>
+      <br />选择适当的区域类型。</li>
+    <li><code>VehiclePropertyType</code>
+      <br />选择适当的数据类型。BYTES 类型允许传递原始数据,因此,在大多数情况下是足够的。通过自定义属性频繁发送大数据可能会减缓整个车辆网络的访问速度,因此,在添加大量需要 HAL 处理的数据时要小心谨慎。</li>
+    <li>属性 ID
+      <br />为自定义属性选择一个四位半字节 ID。</li>
+  </ul></li>
+<li>通过 <code>CarPropertyManager</code>(适用于 Java 组件)或 Vehicle Network Service API(适用于本机)访问。请勿修改其他汽车 API,因为这样做可能会在将来导致兼容性问题。</li>
 </ul>
 
 <h2 id="prop_hvac">处理 HVAC 属性</h2>
-<p>您可以使用车载 HAL 控制 HVAC,具体方法是设置与 HVAC 相关的属性。大多数 HVAC 属性都是区域属性,但也有一些非区域(全局)属性。定义的示例属性包括:</p>
+<p>
+  您可以使用车载 HAL 控制 HVAC,具体方法是设置与 HVAC 相关的属性。大多数 HVAC 属性都是区域属性,但也有一些是非区域(全局)属性。定义的示例属性包括:</p>
+
 <ul>
-<li><code>VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET</code>
-<br />按区域设置温度。</li>
-<li><code>VEHICLE_PROPERTY_HVAC_RECIRC_ON</code>
-<br />按区域控制再循环。</li>
+  <li><code>VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET</code>
+  <br />按区域设置温度。</li>
+  <li><code>VEHICLE_PROPERTY_HVAC_RECIRC_ON</code>
+  <br />按区域控制再循环。</li>
 </ul>
-<p>有关 HVAC 属性的完整列表,请在 <code>vehicle.h</code> 中搜索 <code>VEHICLE_PROPERTY_HVAC_*</code>。</p>
+
+<p>
+  有关 HVAC 属性的完整列表,请在 <code>types.hal</code> 中搜索 <code>VEHICLE_PROPERTY_HVAC_*</code>。
+</p>
+
+<p>
+  当 HVAC 属性使用 <code>VehicleAreaSeat</code> 时,需遵守将区域 HVAC 属性映射到区域 ID 的其他规则。汽车中的每个可用座椅都必须是区域 ID 数组中某个区域 ID 的一部分。
+</p>
+
+<p>
+  示例 1:某辆汽车有两个前排座椅 <code>(ROW_1_LEFT, ROW_1_RIGHT)</code> 和三个后排座椅 <code>(ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT)</code>。有两个温度控制单元,分别位于驾驶员侧和乘客侧。
+</p>
+
+<ul>
+  <li><code>HVAC_TEMPERATURE SET</code> 的区域 ID 的有效映射集是:
+  <ul>
+    <li><code>ROW_1_LEFT | ROW_2_LEFT</code></li>
+    <li><code>ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT</code></li>
+    </ul>
+  </li>
+  <li>同一硬件配置的替代映射是:
+  <ul>
+    <li><code>ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER</code></li>
+    <li><code>ROW_1_RIGHT | ROW_2_RIGHT</code></li>
+  </ul>
+  </li>
+</ul>
+
+<p>
+  示例 2:某辆汽车有三排座位,第一排两个座椅 <code>(ROW_1_LEFT, ROW_1_RIGHT)</code>、第二排三个座椅 <code>(ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT)</code>,第三排三个座椅 <code>(ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT)</code>。有三个温度控制单元,分别位于驾驶员侧、乘客侧和后侧。将 <code>HVAC_TEMPERATURE_SET</code> 映射到区域 ID 的合理方法是三元素数组:
+</p>
+
+<ul>
+  <li><code>ROW_1_LEFT</code></li>
+  <li><code>ROW_1_RIGHT</code></li>
+  <li><code>ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER
+  | ROW_3_RIGHT</code></li>
+</ul>
 
 <h2 id="prop_sensor">处理传感器属性</h2>
-<p>车载 HAL 传感器属性表示真实的传感器数据或策略信息,如驾驶状态。某些传感器信息(如驾驶状态和日间/夜间模式)不限制任何应用的访问,因为这些数据是构建安全车载应用所必需的。其他传感器信息(如车辆速度)更为敏感,需要用户可以管理的特定权限。</p>
-<p>支持的传感器属性包括:</p>
+
+<p>
+  车载 HAL 传感器属性表示真实的传感器数据或策略信息(如驾驶状态)。任何应用都可以不受限制地访问某些传感器信息(如驾驶状态和日间/夜间模式),因为这些数据是构建安全车载应用所必需的。其他传感器信息(如车辆速度)较为敏感,需要获取用户可管理的特定权限才能查看。
+</p>
+
+<p>
+  支持的传感器属性包括:
+</p>
+
 <ul>
-<li><code>DRIVING_STATUS</code>
-<br />应该支持。表示在当前驾驶状态下允许的操作。此信息用于在驾驶过程中屏蔽不安全的应用。</li>
-<li><code>NIGHT_MODE</code>
-<br />应该支持。确定日间/夜间显示模式。</li>
-<li><code>GEAR_SELECTION/CURRENT_GEAR</code>
-<br />驾驶员选择的挡位与实际挡位。</li>
-<li><code>VEHICLE_SPEED</code>
-<br />车速。受权限保护。</li>
-<li><code>ODOMETER</code>
-<br />当前里程表读数。受权限保护。
-</li>
-<li><code>FUEL_LEVEL</code>
-<br />当前油位 (%)。</li>
-<li><code>FUEL_LEVEL_LOW</code>
-<br />油位是否较低(布尔值)。</li>
+  <li><code>NIGHT_MODE</code>
+  <br />应该支持。确定日间/夜间显示模式。</li>
+  <li><code>GEAR_SELECTION/CURRENT_GEAR</code>
+  <br />驾驶员选择的挡位与实际挡位。</li>
+  <li><code>VEHICLE_SPEED</code>
+  <br />车速。受权限保护。</li>
+  <li><code>ODOMETER</code>
+  <br />当前里程表读数。受权限保护。
+  </li>
+  <li><code>FUEL_LEVEL</code>
+  <br />当前油位 (%)。</li>
+  <li><code>FUEL_LEVEL_LOW</code>
+  <br />油位是否较低(布尔值)。</li>
 </ul>
 
 <h2 id="vms">车载地图服务 (VMS)</h2>
 
-<p>Android 8.1 引入了对车载地图服务 (VMS) 的支持,这是一种仅用于 Android Automotive 实现的新车辆属性。
-VMS 可用于支持常见车辆功能(例如高级驾驶辅助系统 (<a href="https://en.wikipedia.org/wiki/Advanced_driver-assistance_systems" class="external">ADAS</a>))的内置车载地图服务。
+<p>
+  车载地图服务 (VMS) 提供了一种可通过发布/订阅接口在客户端之间交换地图数据的机制,旨在支持常见的车辆功能,例如高级驾驶辅助系统 (<a href="https://en.wikipedia.org/wiki/Advanced_driver-assistance_systems" class="external">ADAS</a>)。
+  客户端可能包括通过 Vehicle HAL 或 Android 特权应用中的 VMS 属性进行交互的车载系统。在 VMS 上共享的数据仅限用于地图数据,供车载系统和支持的应用使用。
+</p>
 
-</p><aside class="note"><strong>注意</strong>:有关 Automotive 兼容性要求的详细信息,请参阅 <a href="https://source.android.com/compatibility/android-cdd#2_5_automotive_requirements">Automotive 要求</a>。</aside>
+<p>VMS 仅适用于 Android Automotive 实现;AOSP 不包含发布或订阅 VMS 的默认客户端。
+</p>
 
-<p>VMS 属性是一种复杂的数据类型,它可以表示在 Android Automotive 实现与负责管理车载地图数据的底层车辆硬件之间交换的地图数据。</p>
+<p>
+  对于 Vehicle HAL 中的 VMS 属性,<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/automotive/vehicle/2.0/types.hal#3216" class="external">VmsMessageType</a> 枚举中的<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/automotive/vehicle/2.0/types.hal" class="external">车载 HAL 2.0</a> 中对消息类型和数据结构进行了说明,其中列出了受支持的 VMS 消息的类型。此枚举用作车辆属性整数数组中的第一个整数,并用于确定消息其余部分的解码方式。
+</p>
 
-<p>AOSP 不包含 VMS 的默认实现,它目前只以属性和相关枚举的形式存在。<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/automotive/vehicle/2.0/types.hal#3216">VMSMessageType</a> 枚举中的<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/automotive/vehicle/2.0/types.hal">车载 HAL 2.0</a> 中对消息类型和数据结构进行了说明,其中列出了受支持的 VMS 消息的类型。此枚举用作车辆属性整数数组中的第一个整数,并用于确定消息其余部分的解码方式。</p>
+<aside class="note">
+  <strong>注意</strong>:有关 Automotive 兼容性要求的详细信息,请参阅 <a href="/compatibility/android-cdd#2_5_automotive_requirements">Automotive 要求</a>。
+</aside>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/bootloader/partitions-images.html b/zh-cn/devices/bootloader/partitions-images.html
index 5592d75..c7f248e 100644
--- a/zh-cn/devices/bootloader/partitions-images.html
+++ b/zh-cn/devices/bootloader/partitions-images.html
@@ -69,7 +69,7 @@
 启动映像应包含通过未经修改的 <code>mkbootimg</code> 组合在一起的内核和 RAM 磁盘。
 </p>
 <p>
-您可以在以下位置找到 <code>mkbootimg</code>:<code><a href="https://android.googlesource.com/platform/system/core/+/master/mkbootimg">system/core/mkbootimg</a></code>
+您可以在以下位置找到 <code>mkbootimg</code> 实现:<code><a href="https://android.googlesource.com/platform/system/core/+/master/mkbootimg">system/core/mkbootimg</a></code>
 </p>
 <p>
 引导加载程序会读取由 mkbootimg 生成的 <code><a href="https://android.googlesource.com/platform/system/core/+/master/mkbootimg/bootimg.h">bootimg.h</a></code> 标头文件,并更新内核标头以使其包含正在被刷写的 RAM 磁盘的正确位置和大小、内核基址、命令行参数等。然后,引导加载程序会将启动映像中指定的命令行附加到引导加载程序生成的命令行的末尾。
diff --git a/zh-cn/devices/bootloader/product-partitions.html b/zh-cn/devices/bootloader/product-partitions.html
new file mode 100644
index 0000000..bb6d433
--- /dev/null
+++ b/zh-cn/devices/bootloader/product-partitions.html
@@ -0,0 +1,139 @@
+<html devsite><head>
+  <title>构建 product 分区</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>
+  Android 9​ 支持使用 Android 编译系统构建 <code>/product</code> 分区。之前,Android 8.x 强制将系统芯片 (SoC) 专属组件从 <code>/system</code> 分区分隔到了 <code>/vendor</code> 分区,不会为从 Android 编译系统构建的原始设备制造商 (OEM) 专属组件提供专用空间。
+</p>
+
+<h2 id="product-partitions">product 分区简介</h2>
+
+<p>
+许多原始设备制造商 (OEM) 会自定义 AOSP 系统映像,以实施自己的功能并满足运营商的要求。不过,如果进行这类自定义,则无法针对多个软件 SKU 使用单个系统映像,因为映像必须各不相同,才能支持不同的语言区域、运营商等;如果使用单独的 <code>/product</code> 分区来包含自定义项,则可以无法针对多个软件 SKU 使用单个系统映像(<code>/system</code> 分区会托管可在众多软件 SKU 之间共享的通用代码)。<code>/vendor</code> 分区会继续托管 SoC 专用板级 (BSP) 代码,这类代码可以基于指定 SoC 在多台设备之间共享。</p>
+
+<p>
+使用单独的分区存在一些弊端,例如,难以管理磁盘空间(应该预留一定的空间满足未来增长的空间需求),以及难以在各分区之间<a href="/devices/architecture/vndk/abi-stability">维护稳定的应用二进制接口 (ABI)</a>。在决定使用 <code>/product</code> 分区之前,请花些时间考虑一下您独特的 AOSP 实现和可行的缓解策略(例如,在<a href="/devices/tech/ota/">无线下载 (OTA) 更新</a>期间对设备进行重新分区,这不是由 Google 完成的,而是由某些原始设备制造商(OEM) 完成的)。
+</p>
+
+<h3 id="legacy-oem">旧式 /oem 与 /product</h3>
+
+<p>
+新 <code>/product</code> 分区与旧式 <code>/oem</code> 分区之间没有共通性:</p>
+
+<table>
+  <tbody><tr>
+  <th>分区</th>
+  <th>属性</th>
+  </tr>
+  <tr>
+  <td><code>/oem</code></td>
+  <td>
+  <ul>
+    <li>不可更新;通常在出厂时刷写一次。</li>
+    <li>根据品牌信息和颜色等细微差异进行构建。不同的 <code>/oem</code> 分区内容不会使其成为不同的产品软件。</li>
+    <li>系统分区不依赖于 <code>/oem</code>(仅当在其中找到特定文件时才使用该分区)。</li>
+    <li>切勿在系统上使用除公共 API 之外的 API。</li>
+  </ul>
+  </td>
+  </tr>
+  <tr>
+  <td><code>/product</code></td>
+  <td>
+   <ul>
+    <li>可更新</li>
+    <li>搭配系统图像(该分区与系统映像一起更新)</li>
+    <li>按产品或产品系列构建。</li>
+    <li>系统分区可以依赖于 <code>/product</code> 分区。</li>
+    <li>可以使用非公共 API,因为它们同时更新。</li>
+  </ul>
+  </td>
+  </tr>
+  </tbody></table>
+
+<p>
+出于这些原因,Android 9 支持新的 <code>/product</code> 分区,同时也针对依赖于旧式 <code>/oem</code> 分区的设备保留了对该分区的支持。
+</p>
+
+<h3 id="product-components">/product 组件</h3>
+
+<p>
+<code>/product</code> 分区包含以下组件:
+</p>
+
+<ul>
+  <li>产品专用的系统属性 (<code>/product/build.prop</code>)</li>
+  <li>产品专用的 RRO (<code>/product/overlay/*.apk</code>)</li>
+  <li>产品专用的应用 (<code>/product/app/*.apk</code>)</li>
+  <li>产品专用的特权应用 (<code>/product/priv-app/*.apk</code>)</li>
+  <li>产品专用的内容库 (<code>/product/lib/*</code>)</li>
+  <li>产品专用的 Java 库 (<code>/product/framework/*.jar</code>)</li>
+  <li>产品专用的 Android 框架系统配置(<code>/product/etc/sysconfig/*</code> 和 <code>/product/etc/permissions/*</code>)</li>
+  <li>产品专用的媒体文件 (<code>/product/media/audio/*</code>)</li>
+  <li>产品专用的 <code>bootanimation</code> 文件</li>
+</ul>
+
+<h3 id="custom-images">不得使用 custom_images</h3>
+
+<p>
+您不能使用 <code>custom_images</code>,因为它们缺乏对以下各项的支持:
+</p>
+
+<ul>
+  <li><strong>将模块安装到特定目标分区中</strong>。
+  <code>custom_images</code> 支持将软件工件复制到映像中,但无法将模块安装到特定分区中(通过将其目标分区指定为编译规则的一部分)。</li>
+  <li><strong>Soong 支持</strong>。无法使用 Soong 编译系统构建 <code>custom_images</code>。</li>
+  <li>OTA 更新支持。<code>custom_images</code> 用作出厂 ROM 映像,无法执行 OTA 更新。</li>
+</ul>
+
+<h3 id="maintaining-abis">维护分区之间的 ABI</h3>
+
+<p>
+Android 9 中的 <code>/product</code> 分区是 <code>/system</code> 分区的扩展。由于 <code>/product</code> 和 <code>/system</code> 分区之间的 ABI 稳定性较弱,因此必须同时升级这两者,而且 ABI 应基于系统 SDK。如果系统 SDK 不涵盖 <code>/product</code> 和 <code>/system</code> 之间的所有 API 表面,则 OEM 负责在这两个分区之间维护自己的 ABI。
+</p>
+
+<p><code>/product</code> 分区和 <code>/system</code> 分区可以相互依赖。不过,在没有 <code>/product</code> 分区的情况下,对<a href="/setup/build/gsi">常规系统映像 (GSI) </a>的测试必须能够正常运行。
+</p>
+
+<p><code>/product</code> 分区不能对 <code>/vendor</code> 分区有任何依赖,而且 <code>/product</code> 分区和 <code>/vendor</code> 分区之间不允许有任何直接交互(由 SEpolicy 强制执行)。
+</p>
+
+<h2 id="implementing-product-partitions">实现 product 分区</h2>
+
+<p>
+实现新 product 分区之前,请查阅 <a href="https://android-review.googlesource.com/q/topic:product_partition+(status:open+OR+status:merged)" class="external">AOSP 中的相关 product 分区变化</a>。然后,为了设置 <code>/product</code>,请添加以下板或产品编译标记:
+</p>
+
+<ul>
+  <li><code>BOARD_USES_PRODUCTIMAGE</code></li>
+  <li><code>BOARD_PRODUCTIMAGE_PARTITION_SIZE</code></li>
+  <li><code>BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE</code></li>
+  <li><code>PRODUCT_PRODUCT_PROPERTIES for /product/build.prop</code>,应该在 <code>$(call inherit-product path/to/device.mk)</code> 内,例如 <code>PRODUCT_PRODUCT_PROPERTIES += product.abc=ok</code>。
+   </li>
+ </ul>
+
+<h3 id="enabling-verified-boot">启用验证启动</h3>
+
+<p>
+为了防止 <code>/product</code> 分区被恶意软件篡改,您应该为该分区启用 <a href="https://android.googlesource.com/platform/external/avb/" class="external">Android 验证启动 (AVB)</a>(就像为 <code>/vendor</code> 和 <code>/system</code> 分区启用一样)。要启用 AVB,请添加以下编译标记:<code>BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS</code>
+</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/bootloader/system-as-root.html b/zh-cn/devices/bootloader/system-as-root.html
new file mode 100644
index 0000000..20dd250
--- /dev/null
+++ b/zh-cn/devices/bootloader/system-as-root.html
@@ -0,0 +1,253 @@
+<html devsite><head>
+  <title>System-as-root</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>搭载 Android 9 的所有新设备都必须使用 system-as-root(<code>BOARD_BUILD_SYSTEM_ROOT_IMAGE</code> 必须为 <code>true</code>),它可以将 <code>ramdisk.img</code> 合并到 <code>system.img</code>,而后者会反过来再作为 rootfs 进行装载。对于要升级到 Android 9 的设备,使用 system-as-root 并非强制要求。本文档介绍了 system-as-root、列出了 dm-verity 支持的内核要求(包括所依赖的内核补丁程序),还提供了一些设置示例。</p>
+
+  <h2 id="about-system-only-otas">关于系统专用 OTA</h2>
+
+  <p>当前 Android 生态系统支持<a href="/devices/tech/ota/ab/ab_faqs#how-did-ab-affect-the-2016-pixel-partition-sizes">两种类型的分区布局</a>:</p>
+
+  <ul>
+    <li>在 A/B 分区架构中,<code>system</code> 分区作为 rootfs 装载。</li>
+
+    <li>在非 A/B 分区架构中,<code>/boot</code> 分区中的 <code>ramdisk.img</code> 会被加载到内存中(反过来再作为 rootfs 进行装载),而 <code>system</code> 分区则在 <code>/system</code> 中装载。</li>
+  </ul>
+
+  <p>在 Android 8.0 中进行的架构更改(在 <a href="/devices/architecture/#hidl">Project Treble</a> 项目中)支持系统专用 OTA(其中 <code>system.img</code> 可在不更改其他分区的情况下跨主要 Android 版本进行更新)。不过,对于非 A/B 设备来说,由于 <code>ramdisk.img</code> 位于 <code>/boot</code> 分区中,因此它无法使用 Android 8.x 架构通过系统专用 OTA 进行更新。这样一来,旧的 <code>ramdisk.img</code> 可能不适用于新的 <code>system.img</code>,具体原因如下:</p>
+
+  <ul>
+    <li><code>ramdisk.img</code> 中较旧的 <code>/init</code> 可能无法解析 <code>/system</code> 上的 *.rc 文件。</li>
+
+    <li>ramdisk 包含 <code>/init.rc</code>,它也可能已过期(相较于新 <code>/system</code> 所要求的)。</li>
+  </ul>
+
+  <p>为确保系统专用 OTA 按预期运行,Android 9 中<strong>必须使用</strong> system-as-root。非 A/B 设备必须从 ramdisk 分区布局切换到 system-as-root 分区布局;A/B 设备已被要求使用 system-as-root,因此无需做出改动。</p>
+
+  <h2 id="about-ab-nonab-devices">关于 A/B 设备和非 A/B 设备</h2>
+
+  <p>A/B 设备和非 A/B 设备的分区详情如下:</p>
+
+  <table>
+    <tbody><tr>
+      <th>A/B 设备</th>
+
+      <th>非 A/B 设备</th>
+    </tr>
+    <tr>
+      <td>每个分区(userdata 除外)都包含两个副本(插槽):<ul>
+          <li>/boot_a</li>
+
+          <li>/boot_b</li>
+
+          <li>/system_a</li>
+
+          <li>/system_b</li>
+
+          <li>/vendor_a</li>
+
+          <li>/vendor_b</li>
+
+          <li>…</li>
+        </ul>
+      </td>
+
+      <td>每个分区都包含一个副本,无其他备份分区。
+
+        <ul>
+          <li>/boot</li>
+
+          <li>/system</li>
+
+          <li>/vendor</li>
+
+          <li>…</li>
+        </ul>
+      </td>
+    </tr>
+  </tbody></table>
+
+  <p>要详细了解 A/B 设备和非 A/B 设备,请参阅 <a href="/devices/tech/ota/ab_updates">A/B(无缝)系统更新</a>。</p>
+
+  <h2 id="about-system-as-root">关于 system-as-root</h2>
+
+  <p>在 Android 9 中,非 A/B 设备应采用 system-as-root,以便通过系统专用 OTA 进行更新。</p>
+
+<aside class="note"><strong>注意</strong>:如果设备使用的是 A/B 分区架构,则无需做出任何改动。</aside>
+
+  <p>与将 <code>/boot</code> 改编为 <a href="/devices/tech/ota/ab_implement#recovery">recovery</a> 分区的 A/B 设备不同,<strong>非 A/B 设备必须使 <code>/recovery</code> 分区单独存在,因为它们没有后备插槽分区</strong>(例如,从 <code>boot_a</code> → <code>boot_b</code>)。如果在非 A/B 设备上移除 <code>/recovery</code> 并使其与 A/B 架构类似,那么在 <code>/boot</code> 分区更新失败时,恢复模式可能会遭到破坏。因此,对于非 A/B 设备来说,<code>/recovery</code> 分区<strong>必须</strong>作为单独的分区存在(不同于非 A/B 设备的 <code>/boot</code>),这意味着恢复映像将继续延迟更新(即如同 <a href="/devices/tech/ota/nonab/#life-ota-update">pre-9</a> 设备中那样)。</p>
+
+  <p>非 A/B 设备在使用 Android 9 前后的分区布局差异:</p>
+
+  <table>
+    <tbody><tr>
+      <th>组件</th>
+
+      <th>映像</th>
+
+      <th>ramdisk(9 之前)</th>
+
+      <th>system-as-root(9 之后)</th>
+    </tr>
+
+    <tr>
+      <td rowspan="3"><strong>映像内容</strong>
+      </td>
+
+      <td>boot.img</td>
+
+      <td>包含内核和 ramdisk.img:<pre class="prettyprint">
+
+ramdisk.img
+  -/
+    - init.rc
+    - init
+    - etc -&gt; /system/etc
+    - system/ (mount point)
+    - vendor/ (mount point)
+    - odm/ (mount point)
+    ...</pre>
+      </td>
+
+      <td>仅包含正常启动内核。</td>
+    </tr>
+
+    <tr>
+      <td>recovery.img</td>
+
+      <td colspan="2">包含恢复内核和 recovery-ramdisk.img。</td>
+    </tr>
+
+    <tr>
+      <td>system.img</td>
+
+      <td>包含以下内容:<pre class="prettyprint">
+
+system.img
+  -/
+    - bin/
+    - etc
+    - vendor -&gt; /vendor
+    - ...</pre>
+      </td>
+
+      <td>包含原始 system.img 和 ramdisk.img 的合并内容:<pre class="prettyprint">
+
+system.img
+  -/
+    - init.rc
+    - init
+    - etc -&gt; /system/etc
+    - system/
+      - bin/
+      - etc/
+      - vendor -&gt; /vendor
+      - ...
+    - vendor/ (mount point)
+    - odm/ (mount point)
+    ...</pre>
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>分区布局</strong>
+      </td>
+
+      <td>无</td>
+
+      <td>
+        <ol>
+          <li>/boot</li>
+
+          <li>/system</li>
+
+          <li>/recovery</li>
+
+          <li>/vendor 等</li>
+        </ol>
+      </td>
+
+      <td>
+        <ol>
+          <li>/boot</li>
+
+          <li>/system</li>
+
+          <li>/recovery</li>
+
+          <li>/vendor 等</li>
+        </ol>
+      </td>
+    </tr>
+  </tbody></table>
+
+  <h2 id="setting-up-dm-verity">设置 dm-verity</h2>
+
+  <p>在 system-as-root 中,内核必须使用 <a href="https://www.kernel.org/doc/Documentation/device-mapper/verity.txt" class="external">dm-verity</a> 在 <strong><code>/</code></strong>(装载点)下装载 <code>system.img</code>。AOSP 支持 <code>system.img</code> 的下列 dm-verity 实现:</p>
+
+  <ol>
+    <li>对于 <a href="/security/verifiedboot/">vboot 1.0</a>,内核必须在 <code>/system</code> 上解析 Android 专用<a href="/security/verifiedboot/dm-verity#metadata">元数据</a>,然后转换为 <a href="https://www.kernel.org/doc/Documentation/device-mapper/verity.txt" class="external">dm-verity 参数</a>以设置 dm-verity。需要这些<a href="/devices/tech/ota/ab_implement#kernel">内核补丁程序</a>。</li>
+
+    <li>对于 vboot 2.0 (<a href="https://android.googlesource.com/platform/external/avb/" class="external">AVB</a>),引导加载程序必须先整合 <a href="https://android.googlesource.com/platform/external/avb/+/master/libavb/" class="external">external/avb/libavb</a>,external/avb/libavb 随后会解析 <code>/system</code> 的<a href="https://android.googlesource.com/platform/external/avb/+/master/libavb/avb_hashtree_descriptor.h" class="external">哈希树描述符</a>),然后将其转换为 <a href="https://www.kernel.org/doc/Documentation/device-mapper/verity.txt" class="external">dm-verity 参数</a>,最后再通过内核命令行将这些参数传递给内核(<code>/system</code> 的哈希树描述符可能位于 <code>/vbmeta</code> 或 <code>/system</code> 本身上)。<br />
+      <br />需要下列内核补丁程序:<ul>
+        <li><a href="https://android-review.googlesource.com/#/c/kernel/common/+/158491/" class="external">https://android-review.googlesource.com/#/c/kernel/common/+/158491/</a>
+        </li>
+
+        <li><a href="https://android-review.googlesource.com/q/hashtag:avb-kernel-patch-4.4" class="external">内核 4.4 补丁程序</a>、<a href="https://android-review.googlesource.com/q/hashtag:avb-kernel-patch-4.9" class="external">内核 4.9 补丁程序</a>等<aside class="note"><strong>注意</strong>:您也可以在 <a href="https://android.googlesource.com/platform/external/avb/+/master/contrib/linux/" class="external">external/avb/contrib/linux/</a>{4.4,4.9,etc.}/* 上找到上述 AVB 专用内核补丁程序文件。
+</aside>
+        </li>
+      </ul>
+    </li>
+  </ol>
+
+  <p>下面是来自真实设备的示例,显示的是内核命令行中 system-as-root 的 dm-verity 相关设置:</p>
+
+  <p><strong><em>vboot 1.0</em></strong>
+  </p>
+
+  <pre class="prettyprint">ro root=/dev/dm-0 rootwait skip_initramfs init=/init
+dm="system none ro,0 1 android-verity /dev/sda34"
+veritykeyid=id:7e4333f9bba00adfe0ede979e28ed1920492b40f</pre>
+
+  <p><strong><em>vboot 2.0 (AVB)</em></strong>
+  </p>
+
+  <pre class="prettyprint">
+ro root=/dev/dm-0 rootwait  skip_initramfs init=/init
+
+dm="1 vroot none ro 1,0 5159992 verity 1
+PARTUUID=00000016-0000-0000-0000-000000000000
+PARTUUID=00000016-0000-0000-0000-000000000000 4096 4096 644999 644999
+sha1 d80b4a8be3b58a8ab86fad1b498640892d4843a2
+8d08feed2f55c418fb63447fec0d32b1b107e42c 10 restart_on_corruption
+ignore_zero_blocks use_fec_from_device
+PARTUUID=00000016-0000-0000-0000-000000000000 fec_roots 2 fec_blocks
+650080 fec_start 650080"
+  </pre>
+
+  <h2 id="device-specific-folders">特定于设备的根文件夹</h2>
+
+<p>借助 system-as-root,在设备上刷写<a href="/setup/build/gsi">常规系统映像 (GSI)</a> 之后(以及在运行<a href="/compatibility/vts/">供应商测试套件</a>测试之前),任何通过 <code>BOARD_ROOT_EXTRA_FOLDERS</code> 添加的特定于设备的根文件夹都将消失,因为整个根目录内容已被 system-as-root GSI 取而代之。如果存在对特定于设备的根文件夹的依赖性(例如此类文件夹用作装载点),则移除这些文件夹可能会导致设备无法启动。</p>
+
+  <p>要避免出现此问题,请不要使用 <code>BOARD_ROOT_EXTRA_FOLDERS</code> 来添加特定于设备的根文件夹(此类文件夹将来可能会被弃用)。如果您需要指定特定于设备的装载点,请使用 <code>/mnt/vendor/&lt;mount point&gt;</code>(已在这些<a href="https://android-review.googlesource.com/q/topic:vmount" class="external">更改列表</a>中添加)。这些特定于供应商的装载点可在 <code>fstab</code> 设备树(适用于第一阶段的装载)和 <code>/vendor/etc/fstab.{ro.hardware}</code> 文件中直接指定,而无需进行额外设置(因为 <code>fs_mgr</code> 将在 <code>/mnt/vendor/*</code> 下自动创建它们)。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/bootloader/unlock-trusty.html b/zh-cn/devices/bootloader/unlock-trusty.html
index 6eefdfc..f96f3e2 100644
--- a/zh-cn/devices/bootloader/unlock-trusty.html
+++ b/zh-cn/devices/bootloader/unlock-trusty.html
@@ -30,7 +30,7 @@
 除非<code> fastboot flashing get_unlock_ability </code>为“1”,否则设备应拒绝 <code>fastboot flashing unlock</code> 命令。如果 <code>get_unlock_ability</code> 为“0”,则用户需要启动进入主屏幕,依次转到<em></em>“设置”&gt;“系统”&gt; <a href="https://developer.android.com/studio/debug/dev-options.html">开发者选项</a>菜单并启用 <strong>OEM 解锁</strong>选项,将 <code>unlock_ability</code> 设置为“1”。该标记在重新启动后以及恢复出厂设置后应保持不变。
 </p>
 <p>
-发送 <code>fastboot flashing unlock</code> 命令后,设备应提示用户,警告他们可能会遇到非官方映像的问题。确认后,应恢复出厂设置,以防止未经授权的数据访问。即使引导加载程序无法正确重新格式化设备,也应将设备恢复出厂设置。只有在恢复出厂设置后,才能设置持久性标记,以便重新刷写设备。
+发送 <code>fastboot flashing unlock</code> 命令后,设备应提示用户,警告他们非官方映像可能会有问题。确认后,应恢复出厂设置,以防止未经授权的数据访问。即使引导加载程序无法正确重新格式化设备,也应将设备恢复出厂设置。只有在恢复出厂设置后,才能设置持久性标记,以便重新刷写设备。
 </p>
 <p>
 <code>fastboot flashing lock</code> 命令会重新锁定设备并使其恢复出厂设置,以便将来尝试刷写/解锁设备时需要再次恢复出厂设置。
diff --git a/zh-cn/devices/graphics/arch-gameloops.html b/zh-cn/devices/graphics/arch-gameloops.html
index ca89666..245c286 100644
--- a/zh-cn/devices/graphics/arch-gameloops.html
+++ b/zh-cn/devices/graphics/arch-gameloops.html
@@ -77,6 +77,6 @@
 
 <p>当绘图代码唤醒时,它就会抓住锁,获取块的当前位置,释放锁,然后进行绘制。您无需基于帧间增量时间进行分数移动,只需要有一个移动对象的线程,以及另一个在绘制开始时随地绘制对象的线程。</p>
 
-<p>对于任何复杂度的场景,都请创建一个即将发生的事件的列表(按唤醒时间排序),并使绘图代码保持休眠状态,直到该发生下一个事件为止。</p>
+<p>对于任何复杂度的场景,都需要创建一个即将发生的事件的列表(按唤醒时间排序),并使绘图代码保持休眠状态,直到该发生下一个事件为止。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/graphics/implement-vulkan.html b/zh-cn/devices/graphics/implement-vulkan.html
index ffa64fd..900b3b5 100644
--- a/zh-cn/devices/graphics/implement-vulkan.html
+++ b/zh-cn/devices/graphics/implement-vulkan.html
@@ -90,7 +90,8 @@
 <ol>
 <li>添加支持 Vulkan 1.1 且符合其他 Android 1.1 要求的 Vulkan 驱动程序(请务必查看 9 API 级别文档),或更新现有 Vulkan 1.0 驱动程序。</li>
 <li>您可能需要更新内核 GPU 驱动程序,具体取决于您的实现。</li>
-<li>确保 <code>PackageManager#hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, 0x401000)</code> 返回 <code>true</code>,方法是将如下所示的规则添加到相关的 <code>device.mk</code> 文件:<p><code>
+<li>确保 <code>PackageManager#hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, 0x401000)</code> 返回 <code>true</code>,方法是将如下所示的规则添加到相应的 <code>device.mk</code> 文件:
+<p><code>
 PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:
 $(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml
 </code></p></li>
diff --git a/zh-cn/devices/index.html b/zh-cn/devices/index.html
index b3ae2e7..b6fd855 100644
--- a/zh-cn/devices/index.html
+++ b/zh-cn/devices/index.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Android 接口和架构</title>
+    <title>开发 Android 设备</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -20,10 +20,6 @@
       limitations under the License.
   -->
 
-<p>Android 可让您自由实现自己的设备规格和驱动程序。硬件抽象层 (HAL) 提供了一种用于在 Android 平台堆叠和硬件之间创建软件钩的标准方法。Android 操作系统也是开放源代码系统,因此您可以贡献自己的接口和增强功能。</p>
-
-<p>在将 Android 移植到您的硬件之前,请花点时间了解 <a href="/devices/architecture/index.html">Android 系统架构</a>。由于您的驱动程序和 HAL 会与 Android 进行交互,因此了解 Android 的结构可帮助您浏览 Android 开放源代码项目 (AOSP) 源代码树中的多个代码层。当您熟悉基本的 Android 架构后,请查看本部分中特定于接口的文档,以了解具体的 HAL 以及如何为您的设备编译这些 HAL。</p>
-
-<p>为了保持较高的质量水平并提供一致的用户体验,Android 会要求所有实现都符合<a href="/compatibility/cdd.html">兼容性定义文档 (CDD)</a> 中规定的要求,而且所有设备都必须通过<a href="/compatibility/cts.html">兼容性测试套件 (CTS)</a> 中的测试。有关 Android 兼容性计划的详细信息,请参阅<a href="/compatibility/index.html">兼容性</a>。</p>
+<p>欢迎使用面向 Android 平台的开发说明文档。您可以在其中找到关于实现特殊 Android 接口的说明。使用上面的横向菜单可以深入了解特定的子标签和部分。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/input/input-device-configuration-files.html b/zh-cn/devices/input/input-device-configuration-files.html
index d8b54ca..30d2180 100644
--- a/zh-cn/devices/input/input-device-configuration-files.html
+++ b/zh-cn/devices/input/input-device-configuration-files.html
@@ -81,7 +81,7 @@
 <p>以下属性在所有输入设备类之间通用。</p>
 <p>如需了解每个类所使用的特殊属性,请参阅各个输入设备类的文档。</p>
 <h4 id="deviceinternal"><code>device.internal</code></h4>
-<p><em></em>定义:<code>device.internal</code> = <code>0</code> | <code>1</code></p>
+<p>定义:<em></em><code>device.internal</code> = <code>0</code> | <code>1</code></p>
 <p>指定输入设备属于内置组件,还是外部连接(很可能可拆卸)的外围设备。</p>
 <ul>
 <li>
diff --git a/zh-cn/devices/input/key-layout-files.html b/zh-cn/devices/input/key-layout-files.html
index af94e9a..1e70e6a 100644
--- a/zh-cn/devices/input/key-layout-files.html
+++ b/zh-cn/devices/input/key-layout-files.html
@@ -92,7 +92,7 @@
 <pre class="devsite-click-to-copy">
 axis 0x05 invert BRAKE
 </pre>
-<p>在上述示例中,如果 <code>ABS_RZ</code> 的值为 <code>2</code>,则 <code>AXIS_BRAKE</code> 会被设为 <code>-2</code>。</p>
+<p>在上述示例中,如果 <code>ABS_RZ</code> 的值为 <code>2</code>,则 <code>AXIS_BRAKE</code> 设置为 <code>-2</code>。</p>
 
 <h4 id="center-flat-option">中心平面选项</h4>
 <p>由于存在噪声,即使在操纵杆未被使用时,操纵杆设备也可能会报告输入事件。这种噪声通常来自左侧杆和/或右侧杆,会导致驱动程序报告接近 0 的位置值。“中心平面”值用于指定预期会从处于静止状态的控制杆获得的噪声量。</p>
@@ -153,7 +153,7 @@
 # This is an example of a key layout file for a touch device with capacitive buttons.
 
 key 139    MENU           VIRTUAL
-key 102    HOME           VIRTUAL
+key 172    HOME           VIRTUAL
 key 158    BACK           VIRTUAL
 key 217    SEARCH         VIRTUAL
 </pre>
@@ -219,7 +219,7 @@
 <li>为触摸屏或电容式按钮输入设备提供按键布局文件,并为每个按键设置 <code>VIRTUAL</code> 标记。
 <pre class="devsite-click-to-copy">
 key 139    MENU           VIRTUAL
-key 102    HOME           VIRTUAL
+key 172    HOME           VIRTUAL
 key 158    BACK           VIRTUAL
 key 217    SEARCH         VIRTUAL
 </pre>
diff --git a/zh-cn/devices/input/touch-devices.html b/zh-cn/devices/input/touch-devices.html
index da3143d..83143aa 100644
--- a/zh-cn/devices/input/touch-devices.html
+++ b/zh-cn/devices/input/touch-devices.html
@@ -69,7 +69,7 @@
 <p>如果设置了 <code>touch.deviceType</code> 属性,则将按照指示设置设备类型。</p>
 </li>
 <li>
-<p><em></em>如果输入设备报告存在 <code>INPUT_PROP_DIRECT</code> 输入属性(通过 <code>EVIOCGPROP</code> ioctl),则设备类型将设置为触摸屏。该条件假设直接输入触摸设备已连接到同样处于连接状态的显示屏。</p>
+<p>如果输入设备报告存在 <code>INPUT_PROP_DIRECT</code> 输入属性(通过 <code>EVIOCGPROP</code> ioctl),则设备类型将设置为触摸屏。<em></em>该条件假设直接输入触摸设备已连接到同样处于连接状态的显示屏。</p>
 </li>
 <li>
 <p><em></em>如果输入设备报告存在 <code>INPUT_PROP_POINTER</code> 输入属性(通过 <code>EVIOCGPROP</code> ioctl),则设备类型将设置为指控设备。</p>
@@ -109,7 +109,7 @@
 </ul>
 <h2 id="tools-and-tool-types">工具和工具类型</h2>
 <p>“工具”是指用于和触摸设备进行交互的手指、触控笔或其他装置。<em></em>有些触摸设备可以区分不同类型的工具。</p>
-<p>在 Android 的其他位置(和在 <code>MotionEvent</code> API 中一样),“工具”通常被称为“指针”。<em></em><em></em></p>
+<p>在 Android 的其他位置(和在 <code>MotionEvent</code> API 中一样),“工具”通常称为“指针”。<em></em><em></em></p>
 <p>支持以下工具类型:</p>
 <ul>
 <li>
@@ -161,10 +161,10 @@
 <p><code>ABS_Y</code>:(必需)报告工具的 Y 坐标。<em></em></p>
 </li>
 <li>
-<p><code>ABS_PRESSURE</code>:(可选)报告应用于工具尖端的物理压力或触摸点的信号强度。<em></em></p>
+<p><code>ABS_PRESSURE</code>:(可选)报告应用于工具尖端的物理压力或触摸区域的信号强度。<em></em></p>
 </li>
 <li>
-<p><code>ABS_TOOL_WIDTH</code>:(可选)报告触摸点或工具本身的横截面积或宽度。<em></em></p>
+<p><code>ABS_TOOL_WIDTH</code>:(可选)报告触摸区域或工具本身的横截面积或宽度。<em></em></p>
 </li>
 <li>
 <p><code>ABS_DISTANCE</code>:(可选)报告工具与触摸设备表面之间的距离。<em></em></p>
@@ -196,13 +196,13 @@
 <p><code>ABS_MT_POSITION_Y</code>:(必需)报告工具的 Y 坐标。<em></em></p>
 </li>
 <li>
-<p><code>ABS_MT_PRESSURE</code>:(可选)报告应用于工具尖端的物理压力或触摸点的信号强度。<em></em></p>
+<p><code>ABS_MT_PRESSURE</code>:(可选)报告应用于工具尖端的物理压力或触摸区域的信号强度。<em></em></p>
 </li>
 <li>
-<p><code>ABS_MT_TOUCH_MAJOR</code>:(可选)报告触摸点的横截面积或触摸点间较长尺寸的长度。<em></em></p>
+<p><code>ABS_MT_TOUCH_MAJOR</code>:(可选)报告触摸区域的横截面积或触摸区域较长尺寸的长度。<em></em></p>
 </li>
 <li>
-<p><code>ABS_MT_TOUCH_MINOR</code>:(可选)报告触摸点间较短尺寸的长度。<em></em>如果 <code>ABS_MT_TOUCH_MAJOR</code> 报告区域测量,则不应使用此轴。</p>
+<p><code>ABS_MT_TOUCH_MINOR</code>:(可选)报告触摸区域较短尺寸的长度。<em></em>如果 <code>ABS_MT_TOUCH_MAJOR</code> 报告区域测量,则不应使用此轴。</p>
 </li>
 <li>
 <p><code>ABS_MT_WIDTH_MAJOR</code>:(可选)报告工具本身的横截面积或工具本身较长尺寸的长度。<em></em>如果工具本身的尺寸未知,则不应使用此轴。</p>
@@ -272,7 +272,7 @@
 <p>报告倾斜信息为可选项,但建议用于触控笔设备。<em></em></p>
 </li>
 <li>
-<p>如果工具类型是由 <code>ABS_MT_TOOL_TYPE</code> 报告的,则会取代 <code>BTN_TOOL_*</code> 报告的任何工具类型信息。如果根本没有可用的工具类型信息,则工具类型将默认为 <code>MotionEvent.TOOL_TYPE_FINGER</code>。</p>
+<p>如果工具类型是由 <code>ABS_MT_TOOL_TYPE</code> 报告的,则会取代 <code>BTN_TOOL_*</code> 报告的任何工具类型信息。如果根本没有任何工具类型信息,则工具类型将默认为 <code>MotionEvent.TOOL_TYPE_FINGER</code>。</p>
 </li>
 <li>
 <p>根据以下条件确定工具的活动状态:</p>
@@ -348,7 +348,7 @@
 <p>如果没有触摸工具,但至少有一个悬停工具,则 <code>InputReader</code> 会向 <code>InputDispatcher</code> 发出悬停事件通知。</p>
 </li>
 <li>
-<p><em></em>如果触摸设备类型是指控设备,则 <code>InputReader</code> 会执行指针手势检测,相应地移动指针和相关点,并向 <code>InputDispatcher</code> 发出指针事件通知。</p>
+<p><em></em>如果触摸设备类型是指控设备,则 <code>InputReader</code> 会执行指针手势检测,相应地移动指针和相关点,并通知 <code>InputDispatcher</code> 指针事件。</p>
 </li>
 <li>
 <p><code>InputDispatcher</code> 使用 <code>WindowManagerPolicy</code> 来确定是否应该调度这些事件,以及它们是否应该唤醒设备。然后,<code>InputDispatcher</code> 将事件传递给相应的应用。</p>
@@ -831,7 +831,7 @@
 <p>按键布局文件:<code>/system/usr/keylayout/touchyfeely.kl</code>。</p>
 <pre class="devsite-click-to-copy">key 158 BACK
 key 139 MENU
-key 102 HOME
+key 172 HOME
 key 217 SEARCH
 </pre>
 <p>按键字符映射文件:<code>/system/usr/keychars/touchyfeely.kcm</code>。</p>
diff --git a/zh-cn/devices/sensors/index.html b/zh-cn/devices/sensors/index.html
index d9ab996..c0df6fd 100644
--- a/zh-cn/devices/sensors/index.html
+++ b/zh-cn/devices/sensors/index.html
@@ -110,7 +110,7 @@
         <ul>
           <li><a href="/compatibility/android-cdd.pdf">https://source.android.com/compatibility/android-cdd.pdf</a></li>
           <li>查看有关传感器的部分。</li>
-          <li>CDD 的要求很宽松,因此满足 CDD 要求不足以确保传感器的质量很高。</li>
+          <li>CDD 的要求很宽松,因此满足 CDD 要求并不是确保高质量传感器的充分条件。</li>
         </ul>
       </li>
     </ul>
diff --git a/zh-cn/devices/sensors/power-use.html b/zh-cn/devices/sensors/power-use.html
index ddbe194..a4e97dc 100644
--- a/zh-cn/devices/sensors/power-use.html
+++ b/zh-cn/devices/sensors/power-use.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>耗电量</title>
+    <title>功耗</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -34,10 +34,9 @@
 <p>对于低功耗复合传感器类型(如步测器),必须使其在硬件中执行处理流程。</p>
 <p>有关具体的功耗要求,请参阅 CDD。建议进行 CTS 测试,以便验证这些功耗要求。</p>
 <h2 id="power_measurement_process">功耗测量过程</h2>
-<p>功耗测量过程功耗的测量对象是电池。对于以毫瓦计的值,我们使用电池的额定电压,这意味着电压为 4 伏且电流为 1 毫安时必须计为 4 毫瓦。</p>
+<p>功耗的测量对象是电池。对于以毫瓦计的值,我们使用电池的额定电压,这意味着电压为 4 伏且电流为 1 毫安时必须计为 4 毫瓦。</p>
 <p>在 SoC 处于休眠状态时测量功耗,并且计算 SoC 处于休眠状态时几秒钟内的平均值,以便将来自传感器芯片的周期性功耗峰值考虑在内。</p>
 <p>对于单次唤醒传感器,在传感器未触发时测量功耗(因此不会唤醒 SoC)。同样,对于其他传感器,在传感器数据存储在硬件 FIFO 中时测量功耗,因此 SoC 不会被唤醒。</p>
-<p>当没有传感器处于启用状态时,通常以增量形式测量功耗。
-  当有多个传感器处于启用状态时,功耗增量不得大于各个已启用传感器的功耗之和。如果加速度计的电流为 0.5 毫安,步测器的电流也为 0.5 毫安,则同时启用这两者所消耗的电流必须小于 0.5 + 0.5 = 1 毫安。</p>
+<p>当没有传感器处于启用状态时,通常以增量形式测量功耗。当有多个传感器处于启用状态时,功耗增量不得大于各个已启用传感器的功耗之和。如果加速度计的电流为 0.5 毫安,步测器的电流也为 0.5 毫安,则同时启用这两者所消耗的电流必须小于 0.5 + 0.5 = 1 毫安。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/sensors/sensor-stack.html b/zh-cn/devices/sensors/sensor-stack.html
index 9682e89..a20448f 100644
--- a/zh-cn/devices/sensors/sensor-stack.html
+++ b/zh-cn/devices/sensors/sensor-stack.html
@@ -79,7 +79,7 @@
 <p>传感器驱动程序可与物理设备进行交互。在某些情况下,HAL 实现和驱动程序是同一软件实体。在其他情况下,硬件集成者会要求传感器芯片制造商提供相应驱动程序,但是它们是用于编写 HAL 实现的驱动程序。</p>
 <p>在所有情况下,HAL 实现和内核驱动程序都由硬件制造商负责提供,Android 不提供首选编写方式。</p>
 <h2 id="sensor_hub">传感器中枢</h2>
-<p>设备的传感器堆栈可视需要添加传感器中枢。在 SoC 可以处于暂停模式时,传感器中枢对执行一些低功耗的低级计算任务非常有用。例如,计步功能或传感器融合功能可以在这些芯片上执行。此外,它也是实施传感器批处理以及为传感器事件添加硬件 FIFO 的理想位置。如需更多信息,请参阅<a href="batching.html">批处理</a>。</p>
+<p>设备的传感器堆栈可视需要添加传感器中枢。在 SoC 可以处于暂停模式时,传感器中枢对执行一些低功耗的低级计算任务非常有用。例如,计步功能或传感器融合功能可以在这些芯片上执行。此外,它也是实施传感器批处理以及为传感器事件添加硬件 FIFO 的理想位置。有关详情,请参阅<a href="batching.html">批处理</a>。</p>
 
 <p class="note"><strong>注意</strong>:要开发采用新传感器或 LED 的新 ContextHub 功能,您还可以使用连接到 HiKey 或 HiKey960 开发板的 <a href="/setup/devices.html#neonkey">Neonkey SensorHub</a>。</p>
 
diff --git a/zh-cn/devices/sensors/versioning.html b/zh-cn/devices/sensors/versioning.html
index aedbc48..6dc4714 100644
--- a/zh-cn/devices/sensors/versioning.html
+++ b/zh-cn/devices/sensors/versioning.html
@@ -107,7 +107,7 @@
 
 <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>
 
diff --git a/zh-cn/devices/tech/admin/ota-updates.html b/zh-cn/devices/tech/admin/ota-updates.html
new file mode 100644
index 0000000..b1dbf81
--- /dev/null
+++ b/zh-cn/devices/tech/admin/ota-updates.html
@@ -0,0 +1,114 @@
+<html devsite><head>
+    <title>企业 OTA 更新</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>
+<a href="https://source.android.com/compatibility/android-cdd#11_updatable_software">Android 兼容性定义文档 (CDD) 可更新软件</a>要求设备实现 <a href="https://developer.android.com/reference/android/app/admin/SystemUpdatePolicy.html" class="external"><code>SystemUpdatePolicy</code></a> 类。<code>SystemUpdatePolicy</code> 可让设备所有者 (DO) 应用(如果存在)控制系统更新的安装。
+    </p>
+
+    <p>
+Android 9 允许设备所有者推迟无线 (OTA) 更新最多 90 天,增强了设备所有者控制更新的能力。此功能专注于企业所有、单一用途 (COSU) 解决方案,可让所有者在重要时段(如节假日)暂停在设备上运行的操作系统版本。
+    </p>
+
+    <h2 id="system-update-policy">系统更新政策</h2>
+
+      <p>
+为遵守 CDD 的要求,OTA 客户端必须实施行为政策。DO 可以设置下列政策,设备系统更新子系统必须遵守这些政策:</p>
+
+      <ul>
+        <li>
+          <a href="https://developer.android.com/reference/android/app/admin/SystemUpdatePolicy.html#TYPE_INSTALL_AUTOMATIC" class="external"><code>TYPE_INSTALL_AUTOMATIC</code></a>
+        </li>
+        <li>
+          <a href="https://developer.android.com/reference/android/app/admin/SystemUpdatePolicy.html#TYPE_INSTALL_WINDOWED" class="external"><code>TYPE_INSTALL_WINDOWED</code></a>
+        </li>
+        <li>
+          <a href="https://developer.android.com/reference/android/app/admin/SystemUpdatePolicy.html#TYPE_POSTPONE" class="external"><code>TYPE_POSTPONE</code></a>
+        </li>
+      </ul>
+
+    <h2 id="implementing-installation-options">
+实现安装选项</h2>
+
+      <p>
+Android 9 引入了专为系统更新客户端设计的 @SystemApi <code>SystemUpdatePolicy.InstallationOption</code>。
+        <code>SystemUpdatePolicy.InstallationOption</code> 会充当政策的封装容器类。根据当前系统更新政策,某个安装选项会告知客户端如何针对传入的系统更新执行操作,以及相应操作的有效时长。安装选项可以是下列项之一:</p>
+
+      <ul>
+        <li>
+          <code>TYPE_INSTALL_AUTOMATIC</code> - 传入的系统更新在可用后会立即安装,且无需用户干预。相应设备会自动重启。
+        </li>
+        <li>
+          <code>TYPE_POSTPONE</code> - 传入的系统更新最多可延迟 30 天。用户无法手动安装更新。设备制造商可以选择是否屏蔽安全补丁程序。
+        </li>
+        <li>
+          <code>TYPE_PAUSE</code> - 传入的系统更新可无限期延迟,除非另行通知。用户无法手动安装更新。<code>TYPE_PAUSE</code> 会延迟所有更新,包括安全补丁程序。
+        </li>
+      </ul>
+
+      <p>
+系统更新客户端可以使用 <code>SystemUpdatePolicy.getInstallationOptionAt(long <var>when</var>)</code> 查询 <code>SystemUpdatePolicy.InstallationOption</code>,其中“when”表示查询安装选项的时间(从公元纪年开始计算的毫秒数)。<var></var>系统更新客户端可以使用 <code>SystemUpdatePolicy.getInstallationOptionAt(long <var>when</var>)</code> 方法,在有效时间结束前针对返回的选项执行操作。在返回的选项失效后,客户端可以使用新的时间戳为最近的选项执行另一次查询。
+      </p>
+
+    <p>
+系统更新客户端必须监听 <code>DevicePolicyManager.ACTION_SYSTEM_UPDATE_POLICY_CHANGED</code> 广播,以随时了解整个政策的更新情况。
+    </p>
+
+  <h2 id="validating-the-type_pause-policy">
+验证 <code>TYPE_PAUSE</code> 政策</h2>
+
+    <p>
+您可以手动验证 <code>TYPE_PAUSE</code> 选项是否能在 OTA 系统上正常运行。
+    </p>
+
+    <h3 id="policy-type_pause-in-effect">
+政策 <code>TYPE_PAUSE</code> 生效</h3>
+
+      <p>
+要验证 <code>TYPE_PAUSE</code> 政策是否还能发挥作用,请执行以下操作:</p>
+
+      <ol>
+        <li>设置自动政策并指定 <code>TYPE_PAUSE</code>。</li>
+        <li>当系统时钟处于暂停期时,推送 OTA 更新。
+        </li>
+        <li>确认设备未进行 OTA 更新,且用户无法手动安装更新。
+        </li>
+        <li>如果设备为 A/B 设备,请重新启动设备,并确认重启操作不会触发自动安装更新的过程。
+        </li>
+      </ol>
+
+    <h3 id="policy-type_pause-is-expired">
+政策 <code>TYPE_PAUSE</code> 过期</h3>
+
+      <p>
+要验证过期的 <code>TYPE_PAUSE</code> 政策是否还能发挥作用,请执行以下操作:</p>
+
+      <ol>
+        <li>设置自动政策并指定 <code>TYPE_PAUSE</code>。</li>
+        <li>当系统时钟处于暂停期时,推送 OTA 更新。
+        </li>
+        <li>等待暂停期结束。
+        </li>
+        <li>验证设备是否会自动重新启动,以及 OTA 更新是否会在设备重启后进行。
+        </li>
+      </ol>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/config/carrier.html b/zh-cn/devices/tech/config/carrier.html
index 920579f..998425b 100644
--- a/zh-cn/devices/tech/config/carrier.html
+++ b/zh-cn/devices/tech/config/carrier.html
@@ -120,7 +120,7 @@
 <h3 id="declare_a_class_that_overrides_android_service_carrier_carrierservice">声明一个替换 android.service.carrier.CarrierService 的类</h3>
 
 <ol>
-  <li>替换 <code>onLoadConfig</code> 以根据传递的 <code>service.carrier. CarrierIdentifier</code> 对象返回您希望提供的值。
+  <li>替换 <code>onLoadConfig</code> 以根据传递的 <code>service.carrier.CarrierIdentifier</code> 对象返回您希望提供的值。
   </li><li>添加逻辑以在运营商配置可能随时间发生改变的情况(例如,当用户向其帐号添加额外服务时)下调用 <code>notifyConfigChangedForSubId</code>
 </li></ol>
 
diff --git a/zh-cn/devices/tech/connect/block-numbers.html b/zh-cn/devices/tech/connect/block-numbers.html
index b2b77c2..8fd3839 100644
--- a/zh-cn/devices/tech/connect/block-numbers.html
+++ b/zh-cn/devices/tech/connect/block-numbers.html
@@ -112,7 +112,7 @@
 </p>
 
 <p>
-<em></em>如果设备在之前出厂时就具备了呼叫/短信限制功能,请调整相应功能,以便所有严格匹配的被屏蔽电话号码都存储在 <code>BlockedNumberProvider,</code> 中,并且围绕该提供程序发生的行为也能满足 Android 兼容性定义文档 (CDD) 中针对此功能列出的要求。
+如果设备在之前出厂时就具备了呼叫/短信限制功能,请调整相应功能,<em></em>以便所有严格匹配的被屏蔽电话号码都存储在 <code>BlockedNumberProvider,</code> 中,并且围绕该提供程序发生的行为也能满足 Android 兼容性定义文档 (CDD) 中针对此功能列出的要求。
 </p>
 
 <p>
@@ -172,8 +172,7 @@
 </pre>
 
 <p>
-在运行 <code>$ adb root</code> 之后,可以使用 <code>adb</code> 命令来操作 <code>BlockedNumberProvider</code>。例如:
-</p>
+在运行 <code>$ adb root</code> 之后,可以使用 <code>adb</code> 命令来操作 <code>BlockedNumberProvider</code>。例如:</p>
 <pre class="devsite-click-to-copy">
 <code class="devsite-terminal">adb root</code>
 <code class="devsite-terminal">adb shell content query --uri content://com.android.blockednumber/blocked</code>
diff --git a/zh-cn/devices/tech/connect/carrier-wifi.html b/zh-cn/devices/tech/connect/carrier-wifi.html
new file mode 100644
index 0000000..52f4edd
--- /dev/null
+++ b/zh-cn/devices/tech/connect/carrier-wifi.html
@@ -0,0 +1,98 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="carrier_wi_fi" class="page-title">运营商 WLAN</h1>
+
+<p>运营商 WLAN 是 Android 9 中引入的一项功能,该功能可让设备自动连接到运营商实现的 WLAN 网络。在高度拥塞或信号覆盖范围较小的区域(如体育场或地铁站),运营商 WLAN 可用于改善用户的连接体验和分载流量。</p>
+
+<h2 id="implementation">实现</h2>
+
+<p>要实现运营商 WLAN,设备制造商和运营商必须执行以下操作。</p>
+
+<h3 id="manufacturers">制造商</h3>
+
+<p>在运营商配置管理器中,为每个运营商配置以下参数:</p>
+
+<ul>
+<li><a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#1542">KEY_CARRIER_WIFI_STRING_ARRAY</a>:以 Base64 编码的 WLAN SSID。</li>
+<li><a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#1746">IMSI_KEY_AVAILABILITY_INT</a>:标识用于 IMSI 加密的密钥适用于 WLAN 还是 EPDG,或两者都适用。</li>
+<li><a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#1739">IMSI_KEY_DOWNLOAD_URL_STRING</a>:从中下载 proto(包含用于 IMSI 加密的运营商公钥)的网址。</li>
+</ul>
+
+<h3 id="carriers">运营商</h3>
+
+<p>要实现运营商 WLAN,运营商必须支持加密的 IMSI 并提供一个公钥。</p>
+
+<h4 id="support_encrypted_imsi">支持加密的 IMSI</h4>
+
+<p>更改 WLAN 网络配置以确保可处理加密的 IMSI。EAP-SIM 中使用的身份格式为:</p>
+
+<p><code>Prefix | [IMSI || Encrypted IMSI] | @realm | {, Key Identifier AVP}</code></p>
+
+<p>其中“|”(单竖线)表示串联,“||”(双竖线)表示专有值,“{}”(大括号)表示可选值,领域是根据 3GGP 规范 (TS23.003) 从指定 MNC/MCC 派生的 3GPP 网络域名。</p>
+
+<p><code>Prefix</code> 值包括:</p>
+
+<ul>
+<li>“<code>\0</code>”:加密身份</li>
+<li>“<code>0</code>”:EAP-AKA 身份</li>
+<li>“<code>1</code>”:EAP-SIM 身份</li>
+<li>“<code>6</code>”:EAP-AKA' 身份</li>
+</ul>
+
+<p><code>Encrypted IMSI</code> 的格式为:</p>
+
+<p><code>Base64{RSA_Public_Key_Encryption{eapPrefix | IMSI}}</code></p>
+
+<p>其中“|”表示串联。</p>
+
+<p><code>eapPrefix</code> 值包括:</p>
+
+<ul>
+<li>“<code>0</code>”- EAP-AKA 身份</li>
+<li>“<code>1</code>”- EAP-SIM 身份</li>
+<li>“<code>6</code>”- EAP-AKA' 身份</li>
+</ul>
+
+<h4 id="provide_public_key">提供公钥</h4>
+
+<p>提供托管运营商证书的公开网址,其中:</p>
+
+<ol>
+<li>公钥(和到期日期)可从证书中提取</li>
+<li>信息采用如下所示的 JSON 格式:</li>
+</ol>
+<pre class="prettyprint"><code>{
+"carrier-keys" : [ {
+  "key-identifier" : "CertificateSerialNumber=5xxe06d4",
+  "certificate" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----",
+  "key-type" : "WLAN"
+} ]
+}
+</code></pre>
+<h2 id="customization">自定义</h2>
+
+<p>运营商 WLAN 默认处于关闭状态(除非在运营商配置管理器中针对每个运营商对其进行配置)。如果该功能处于开启状态,则设备会自动尝试连接到网络。在初次尝试时,系统会发送一条通知。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/data-plans.html b/zh-cn/devices/tech/connect/data-plans.html
new file mode 100644
index 0000000..09a065a
--- /dev/null
+++ b/zh-cn/devices/tech/connect/data-plans.html
@@ -0,0 +1,75 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="implementing_data_plans" class="page-title">实现流量套餐</h1>
+
+<p>Android 9 可让运营商直接在“设置”应用中向用户提供权威的套餐详情,以减少用户的困惑和支持来电次数。在运行 Android 4.0 或更高版本的设备上,用户可以在“设置”应用中手动配置特定于运营商的流量套餐详情,例如,设置警告和上限以管理其流量用量。</p>
+
+<h2 id="configuration_by_carrier">运营商配置</h2>
+
+<p>要配置流量套餐,运营商可以使用 <a href="https://developer.android.com/reference/android/telephony/SubscriptionPlan.Builder"><code>SubscriptionPlan</code> API</a> 向其现有 Android 应用中添加功能。这些 API 用于支持各种类型的流量套餐,其中包括可续费和不可续费套餐以及随时间而变化的套餐。</p>
+
+<p>以下是如何配置按月续费的常见流量套餐类型的示例:</p>
+<pre class="prettyprint"><code>SubscriptionManager sm =
+    context.getSystemService(SubscriptionManager.class);
+sm.setSubscriptionPlans(subId, Lists.newArrayList(
+    SubscriptionPlan.Builder.createRecurringMonthly(
+            ZonedDateTime.parse("2016-12-03T10:00:00Z"))
+        .setTitle("G-Mobile")
+        .setDataLimit(4_000_000_000L,
+            SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)
+        .setDataUsage(200_493_293L, dataUsageTimestamp)
+        .build()));
+</code></pre>
+<p>只有当应用符合以下某项条件时,设备才允许其配置流量套餐:</p>
+
+<ul>
+<li>SIM 卡已明确指定可对其进行管理的应用(如 <a href="https://developer.android.com/reference/android/telephony/SubscriptionManager.html#canManageSubscription(android.telephony.SubscriptionInfo)"><code>SubscriptionManager.canManageSubscription()</code></a> 中所定义)。</li>
+<li>运营商已通过 <code>CarrierConfigManager</code> 推送 <a href="https://developer.android.com/reference/android/telephony/CarrierConfigManager#KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING"><code>KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING</code></a> 值,以指明可管理其流量套餐的应用。</li>
+<li>设备在系统映像中内置了一个具有 <code>MANAGE_SUBSCRIPTION_PLANS</code> 权限的应用。</li>
+</ul>
+
+<p>若符合前两个条件,则运营商应用可由用户直接安装,而无需在出厂前预安装在系统映像中。操作系统强制要求(且 CDD 要求)所有已配置的流量套餐详情一律受到保护,且仅供最初向操作系统提供相应详情的运营商应用使用。</p>
+
+<p>针对运营商应用的一项建议是,使用空闲维护服务以便每天更新流量套餐详情,但运营商可以自由选择使用各种机制(例如通过运营商内部短信来接收流量套餐详情)。建议通过使用 <a href="https://developer.android.com/reference/android/app/job/JobInfo.Builder#setRequiresDeviceIdle(boolean)"><code>setRequiresDeviceIdle()</code></a> 和 <a href="https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiresCharging(boolean)"><code>setRequiresCharging()</code></a> 的 <code>JobScheduler</code> 作业来实现空闲维护服务。</p>
+
+<h2 id="usage_by_os">操作系统使用情况</h2>
+
+<p>操作系统通过以下方式使用由 SubscriptionPlan API 提供的流量套餐详情:</p>
+
+<ul>
+<li>通过“设置”应用来显示套餐详情,以向用户显示准确的流量用量数据,并提供<a href="https://developer.android.com/reference/android/telephony/SubscriptionManager.html#ACTION_MANAGE_SUBSCRIPTION_PLANS">指向运营商应用的直接深层链接</a>以获得升级/追加销售的机会。</li>
+<li>系统会根据套餐详情自动配置流量用量警告和上限通知阈值;用量达到上限的 90% 时便会发出警告提醒。</li>
+<li>如果运营商暂时提示网络<a href="https://developer.android.com/reference/android/telephony/SubscriptionManager.html#setSubscriptionOverrideCongested(int, boolean, long)">“拥挤”</a>,操作系统将延迟可进行时移的 JobScheduler 作业,从而减少运营商网络的负载。</li>
+<li>如果运营商暂时提示网络<a href="https://developer.android.com/reference/android/telephony/SubscriptionManager#setSubscriptionOverrideUnmetered(int, boolean, long)">“不按流量计费”</a>,操作系统会将移动网络连接报告为“不按流量计费”,直到运营商清除替换内容或达到超时值(如果提供)。</li>
+<li>通过将用户当前的流量用量与总体流量上限进行比较,操作系统会估算用户在结算周期结束时的正常流量用量,并适当分配 10% 的剩余流量以改善用户体验,例如让应用使用来自多个途径的流量。</li>
+</ul>
+
+<h2 id="customization_and_validation">自定义和验证</h2>
+
+<p>Android 的“设置”应用将显示由运营商配置的所有流量套餐详情,从而确保用户可以看到最准确的运营商关系状态,并为用户提供进入运营商应用的途径以升级其套餐。建议您选择可自定义“设置”应用的设备制造商,以便继续显示相关详情。</p>
+
+<p>上述 <code>SubscriptionManager</code> API 由 <code>android.telephony.cts.SubscriptionManagerTest</code> 进行测试,这样可确保流量套餐详情可由运营商应用来配置,且更改得以应用于整个操作系统。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/data-saver.html b/zh-cn/devices/tech/connect/data-saver.html
index d02846a..18c2baf 100644
--- a/zh-cn/devices/tech/connect/data-saver.html
+++ b/zh-cn/devices/tech/connect/data-saver.html
@@ -49,7 +49,7 @@
 
 <img src="/devices/tech/connect/images/data-saver-use.png" width="397" alt="关闭/开启流量节省程序"/>
 <p class="img-caption">
-  <strong>图 1.</strong> 关闭/打开流量节省程序</p>
+  <strong>图 1.</strong> 关闭/开启流量节省程序</p>
 
 <img src="/devices/tech/connect/images/data-battery-saver.png" width="641" alt="省电模式和流量节省程序同时开启"/>
 <p class="img-caption">
diff --git a/zh-cn/devices/tech/connect/esim-euicc-api.html b/zh-cn/devices/tech/connect/esim-euicc-api.html
new file mode 100644
index 0000000..98c87a4
--- /dev/null
+++ b/zh-cn/devices/tech/connect/esim-euicc-api.html
@@ -0,0 +1,188 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="euicc_apis" class="page-title">eUICC API</h1>
+
+<p>在 Android 9 中,配置文件管理 API(公共 API 和 @SystemApi)通过 <code>EuiccManager</code> 类提供。eUICC 通信 API(仅限 @SystemApi)通过 <code>EuiccCardManager</code> 类提供。</p>
+
+<h2 id="about_euicc">eUICC 简介</h2>
+
+<p>运营商可以构建使用 EuiccManager 管理配置文件的运营商应用(如图 1 所示)。运营商应用不需要是系统应用,但需要拥有 eUICC 配置文件授予的运营商权限。<a href="/devices/tech/connect/esim-overview#making-an-lpa-app">LPA 应用</a>(LUI 和 LPA 后端)需要是系统应用(即包含在系统映像中)才能调用 @SystemApi。</p>
+
+<p><img src="/devices/tech/connect/images/carrier-oem-lpa.png" alt="安装了运营商应用和 OEM LPA 的 Android 手机"/></p>
+
+<p><strong>图 1.</strong> 安装了运营商应用和 OEM LPA 的 Android 手机</p>
+
+<p>除了实现用于调用 <code>EuiccCardManager</code> 以及与 eUICC 通信的逻辑之外,LPA 应用还必须实现以下各项:</p>
+
+<ul>
+<li>SM-DP+ 客户端(与 SM-DP+ 服务器进行通信以进行身份验证并下载配置文件)</li>
+<li>[可选] SM-DS,以获得更多潜在的可下载配置文件</li>
+<li>通知处理,以向服务器发送通知,从而更新配置文件状态</li>
+<li>[可选] 插槽管理(包括在 eSIM 卡和 pSIM 卡逻辑之间切换)。如果手机只有一个 eSIM 卡芯片,则此项为可选项。</li>
+<li>eSIM 卡 OTA</li>
+</ul>
+
+<p>虽然 Android 手机上可以有多个 LPA 应用,但根据每个应用的 <code>AndroidManifest.xml</code> 文件中定义的优先级,只能选择一个 LPA 作为实际运行的 LPA。</p>
+
+<h2 id="using_euiccmanager">使用 EuiccManager</h2>
+
+<p>LPA API 通过 <code>EuiccManager</code>(在软件包 <code>android.telephony.euicc</code> 下)公开提供。运营商应用可以获得 <code>EuiccManager</code> 的实例,并调用 <code>EuiccManager</code> 中的方法,以获取 eUICC 信息并将订阅(在 GSMA RSP 文档中称为配置文件)作为 SubscriptionInfo 实例进行管理。</p>
+
+<p>要调用公共 API(包括下载、切换和删除订阅操作),运营商应用必须具有所需的权限。运营商权限由移动运营商添加到配置文件元数据中。eUICC API 会相应地强制执行运营商权限规则。</p>
+
+<p>Android 平台不处理配置文件政策规则。如果政策规则是在配置文件元数据中声明的,则 LPA 可以选择如何处理配置文件下载和安装过程。例如,第三方 OEM LPA 可以使用特殊错误代码处理政策规则(错误代码会从 OEM LPA 传递到平台,然后平台会再将其传递到 OEM LUI)。</p>
+
+<h3 id="apis">API</h3>
+
+<p>您可以在 <a href="https://developer.android.com/reference/android/telephony/euicc/EuiccManager"><code>EuiccManager</code> 参考文档</a>和 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/euicc/EuiccManager.java"><code>EuiccManager.java</code></a> 中找到以下 API。</p>
+
+<h4 id="get_instance_public">获取实例(公共)</h4>
+
+<p>通过 <code>Context#getSystemService</code> 获取 <code>EuiccManager</code> 的实例。</p>
+<pre class="prettyprint"><code>EuiccManager mgr = context.getSystemService(Context.EUICC_SERVICE);
+</code></pre>
+<h4 id="check_enabled_public">检查启用情况(公共)</h4>
+
+<p>检查是否已启用嵌入式订阅。您应在访问 LPA API 之前完成这项检查。</p>
+<pre class="prettyprint"><code>boolean isEnabled = mgr.isEnabled();
+if (!isEnabled) {
+    return;
+}
+</code></pre>
+<h4 id="get_eid_public">获取 EID(公共)</h4>
+
+<p>获取用于标识 eUICC 硬件的 EID。如果 eUICC 尚未就绪,IED 可能为 null。调用程序必须具备运营商权限或 <code>READ_PRIVILEGED_PHONE_STATE</code> 权限。</p>
+<pre class="prettyprint"><code>String eid = mgr.getEid();
+if (eid == null) {
+  // Handle null case.
+}
+</code></pre>
+<h4 id="get_euiccinfo_public">获取 EuiccInfo(公共)</h4>
+
+<p>获取有关 eUICC 的信息,其中包含操作系统版本。</p>
+<pre class="prettyprint"><code>EuiccInfo info = mgr.getEuiccInfo();
+String osVer = info.getOsVersion();
+</code></pre>
+<h4 id="download_subscription_public">下载订阅(公共)</h4>
+
+<p>下载指定订阅(在 GSMA RSP 文档中称为“配置文件”)。您可以通过激活码创建订阅。例如,您可以从 QR 码中解析激活码。下载订阅是一项异步操作。</p>
+
+<p>调用程序必须具有 <code>WRITE_EMBEDDED_SUBSCRIPTIONS</code> 权限或针对目标订阅的运营商权限。</p>
+<pre class="prettyprint"><code>// Register receiver.
+String action = "download_subscription";
+BroadcastReceiver receiver =
+        new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (!action.equals(intent.getAction())) {
+                    return;
+                }
+                resultCode = getResultCode();
+                detailedCode = intent.getIntExtra(
+                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
+                    0 /* defaultValue*/);
+                resultIntent = intent;
+            }
+        };
+context.registerReceiver(
+        receiver,
+        new IntentFilter(action),
+        "example.broadcast.permission" /* broadcastPermission*/, null /* handler */);
+
+// Download subscription asynchronously.
+DownloadableSubscription sub =
+        DownloadableSubscription.forActivationCode(code /* encodedActivationCode*/);
+Intent intent = new Intent(action);
+PendingIntent callbackIntent = PendingIntent.getBroadcast(
+        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+mgr.downloadSubscription(sub, true /* switchAfterDownload */, callbackIntent);
+</code></pre>
+<h4 id="switch_subscription_public">切换订阅(公开)</h4>
+
+<p>切换为(启用)指定订阅。调用程序必须具有 <code>WRITE_EMBEDDED_SUBSCRIPTIONS</code> 权限或针对当前启用的订阅和目标订阅的运营商权限。</p>
+<pre class="prettyprint"><code>// Register receiver.
+String action = "switch_to_subscription";
+BroadcastReceiver receiver =
+        new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (!action.equals(intent.getAction())) {
+                    return;
+                }
+                resultCode = getResultCode();
+                detailedCode = intent.getIntExtra(
+                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE, 0 /* defaultValue*/);
+                resultIntent = intent;
+            }
+        };
+context.registerReceiver(receiver, new IntentFilter(action),
+        "example.broadcast.permission" /* broadcastPermission*/, null /* handler */);
+
+// Switch to a subscription asynchronously.
+Intent intent = new Intent(action);
+PendingIntent callbackIntent = PendingIntent.getBroadcast(
+        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+mgr.switchToSubscription(1 /* subscriptionId */, callbackIntent);
+</code></pre>
+<h4 id="delete_subscription_public">删除订阅(公共)</h4>
+
+<p>删除具有订阅 ID 的订阅。如果相应订阅当前处于有效状态,则应先予以停用。调用程序必须具有 <code>WRITE_EMBEDDED_SUBSCRIPTIONS</code> 权限或针对目标订阅的运营商权限。</p>
+<pre class="prettyprint"><code>// Register receiver.
+String action = "delete_subscription";
+BroadcastReceiver receiver =
+        new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (!action.equals(intent.getAction())) {
+                    return;
+                }
+                resultCode = getResultCode();
+                detailedCode = intent.getIntExtra(
+                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
+                    0 /* defaultValue*/);
+                resultIntent = intent;
+            }
+        };
+context.registerReceiver(receiver, new IntentFilter(action),
+        "example.broadcast.permission" /* broadcastPermission*/,
+        null /* handler */);
+
+// Delete a subscription asynchronously.
+Intent intent = new Intent(action);
+PendingIntent callbackIntent = PendingIntent.getBroadcast(
+        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+mgr.deleteSubscription(1 /* subscriptionId */, callbackIntent);
+</code></pre>
+<h4 id="start_resolution_activity_public">启动解决活动(公共)</h4>
+
+<p>启动一项活动以修正可由用户修正的错误。如果操作返回 <code>EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR</code>,则可以调用此方法,以提示用户解决相应问题。对于特定错误,此方法只能调用一次。</p>
+<pre class="prettyprint"><code>...
+mgr.startResolutionActivity(getActivity(), 0 /* requestCode */, resultIntent, callbackIntent);
+</code></pre>
+<h3 id="constants">常量</h3>
+
+<p>要查看 <code>EuiccManager</code> 中的 <code>public</code> 常量列表,请参阅<a href="https://developer.android.com/reference/android/telephony/euicc/EuiccManager#constants">常量</a>。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/esim-modem-requirements.html b/zh-cn/devices/tech/connect/esim-modem-requirements.html
new file mode 100644
index 0000000..2736f48
--- /dev/null
+++ b/zh-cn/devices/tech/connect/esim-modem-requirements.html
@@ -0,0 +1,80 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="modem_requirements_for_esim_support" class="page-title">针对 eSIM 支持的调制解调器要求</h1>
+
+<p>本页总结了支持 eSIM 芯片或可卸载 eSIM 4FF 卡所需的调制解调器功能。</p>
+
+<h2 id="general_requirements">常规要求</h2>
+
+<p>以下是针对常规 eSIM 支持的调制解调器要求。只有在调制解调器满足下列所有要求时,LPA 才可正常发挥作用。</p>
+
+<h3 id="handle_the_default_boot_profile_correctly">正确处理默认启动配置文件</h3>
+
+<p>如果未在 eSIM 卡上启用操作或测试配置文件,则系统会启用默认启动配置文件。调制解调器应将已启用默认启动配置文件的 eSIM 卡识别为有效的 SIM 卡。调制解调器应将相应的卡报告至上层,且不应关闭 SIM 卡电源。</p>
+
+<h3 id="send_terminal_capabilities_correctly">正确发送终端功能</h3>
+
+<p>在打开 ISD-R 的逻辑信道时,调制解调器应向 eSIM 卡发送正确的终端功能。终端功能必须根据 ETSI TS 102 221 进行编码,以便支持 eUICC 卡功能:“本地配置文件管理”和“配置文件下载”。</p>
+
+<h3 id="implement_setsimpower_api_in_radio_hal_v11">在 Radio HAL v1.1 中实现 setSimPower API</h3>
+
+<p>调制解调器应该支持 <a href="https://source.android.com/reference/hidl/android/hardware/radio/1.1/IRadio#setsimcardpower_1_1">setSimPower</a> API。</p>
+
+<h3 id="implement_getsimslotsstatus_api_in_iradioconfig_hal_v10">在 IRadioConfig HAL v1.0 中实现 getSimSlotsStatus API</h3>
+
+<p>调制解调器应该支持 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/radio/config/1.0/IRadioConfig.hal#51">getSimSlotsStatus</a> API,此 API 会指出插槽中是否有 eSIM 卡。</p>
+
+<h3 id="implement_geticccardstatus_api_in_iradio_hal_v12">在 IRadio HAL v1.2 中实现 getIccCardStatus API</h3>
+
+<p>调制解调器应提供在 <a href="https://source.android.com/reference/hidl/android/hardware/radio/1.0/IRadio#getIccCardStatus">getIccCardStatus</a> API 中指定的 ATR 和卡状态的插槽 ID。v1.0 中首次引入了此 API(名为 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/radio/1.2/types.hal#341">CardStatus</a>),v1.2 中对此 API 进行了更改以包含 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/radio/1.2/types.hal#351">ATR</a>。</p>
+
+<h3 id="optional_support_esim_os_ota">(可选)支持 eSIM 卡操作系统 OTA</h3>
+
+<p>由于 eSIM 卡操作系统 OTA 未进行标准化,因此这项要求取决于提供 eSIM 卡操作系统的供应商。调制解调器应该支持 eSIM 卡操作系统 OTA 的所有要求,例如切换到直通模式并确保 eSIM 卡在 OTA 过程中一直处于通电状态。</p>
+
+<h2 id="logging_requirements">日志记录要求</h2>
+
+<p>以下是正确调试 eSIM 卡问题的一般调制解调器日志记录要求。</p>
+
+<h3 id="provide_pc_based_tools_to_capture_detailed_modem_logs">提供基于 PC 的工具以捕获详细的调制解调器日志</h3>
+
+<p>日志记录应捕获移动数据网络 RAT(4G、3G、2G)和 IMS(SIP、RTP、RTCP、XCAP)的所有 OTA 数据包。受 ESP 保护的 SIP 数据包应在没有 ESP 的情况下记录。OTA 解析器应符合 3GPP 规范的要求。</p>
+
+<p>日志记录应该支持捕获所有网络接口上的 IP 数据包。</p>
+
+<p>日志记录应该支持捕获调试日志和协议层信息,包括协议层状态、无线装置功率测量、网络单元信息、数据包 TX/RX 统计信息、层间消息传递、处理器间通信、SIM 卡功能和 APDU 日志记录,以及 RIL 日志记录。</p>
+
+<h3 id="on_device_logging">设备上的日志记录</h3>
+
+<p>设备软件应该支持设备上的调制解调器日志捕获机制。</p>
+
+<h3 id="log_config_support">日志配置支持</h3>
+
+<p>设备软件应该支持不同的调制解调器日志记录配置(级别、模块)。设备上的日志记录和基于 PC 工具的日志记录都应该支持这些配置。</p>
+
+<h3 id="android_bug_report">Android 错误报告</h3>
+
+<p>错误报告应该包含调制解调器日志、供应商 RIL 日志、应急签名日志和 Android 日志。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/esim-overview.html b/zh-cn/devices/tech/connect/esim-overview.html
new file mode 100644
index 0000000..d754bc6
--- /dev/null
+++ b/zh-cn/devices/tech/connect/esim-overview.html
@@ -0,0 +1,314 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="implementing_esim" class="page-title">实现 eSIM</h1>
+
+<p>嵌入式 SIM(又称 eSIM 或 eUICC)是一种最新技术,可让移动用户在没有实体 SIM 卡的情况下,下载运营商配置文件并激活运营商服务。该技术是由 GSMA 推动的全球规范,支持在任何移动设备上进行远程 SIM 配置。从 Android 9 开始,Android 框架提供了用于访问 eSIM 和管理 eSIM 上的订阅配置文件的标准 API。借助这些 eUICC API,第三方可以在支持 eSIM 的 Android 设备上开发自己的运营商应用和 Local Profile Assistant (LPA)。<em></em></p>
+
+<p>LPA 是一款独立的系统应用,应包含在 Android 编译映像中。对 eSIM 上配置文件的管理通常由 LPA 完成,因为它充当着 SM-DP+(用来准备、存储配置文件包并将其交付给设备的远程服务)和 eUICC 芯片之间的桥梁。LPA APK 可以选择性地包含一个界面组件(又称 LPA 界面或 LUI),以便为最终用户提供一个中心位置来管理所有嵌入式订阅配置文件。Android 框架可自动发现可用性最高的 LPA 并与之连接,然后通过 LPA 实例路由所有 eUICC 操作。</p>
+
+<p><img src="/devices/tech/connect/images/rsp-architecture.png" alt="简化的远程 SIM 配置 (RSP) 架构"/></p>
+
+<p><strong>图 1.</strong> 简化的远程 SIM 配置 (RSP) 架构</p>
+
+<p>有兴趣开发运营商应用的移动网络运营商可以参阅 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/euicc/EuiccManager.java">EuiccManager</a> 中的 API,其中介绍了高级配置文件管理操作(例如 <code>downloadSubscription()</code>、<code>switchToSubscription()</code> 和 <code>deleteSubscription()</code>)。<em></em></p>
+
+<p>如果您是有兴趣自行开发 LPA 系统应用的原始设备制造商 (OEM),那么您必须为 Android 框架扩展 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/service/euicc/EuiccService.java">EuiccService</a> 以连接到您的 LPA 服务。此外,您还应使用 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/euicc/EuiccCardManager.java">EuiccCardManager</a> 中的 API,这些 API 提供了基于 GSMA 远程 SIM 配置 (RSP) v2.0 的 ES10x 函数。此类函数用于向 eUICC 芯片发出命令(例如 <code>prepareDownload()</code>、<code>loadBoundProfilePackage()</code>、<code>retrieveNotificationList()</code> 和 <code>resetMemory()</code>)。</p>
+
+<p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/euicc/EuiccManager.java">EuiccManager</a> 中的 API 需要一个正确实现的 LPA 应用才能正常运行,且 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/euicc/EuiccCardManager.java">EuiccCardManager</a> API 的调用程序必须是 LPA。这是 Android 框架的强制要求。</p>
+
+<h2 id="making_a_carrier_app">开发运营商应用</h2>
+
+<p>借助 Android 9 中的 eUICC API,移动网络运营商可以开发运营商品牌的应用,以便直接管理其配置文件。这包括下载和删除运营商所拥有的订阅配置文件,以及切换到运营商所拥有的配置文件。</p>
+
+<h3 id="euiccmanager">EuiccManager</h3>
+
+<p><code>EuiccManager</code> 是应用与 LPA 交互的主入口点。这包括可下载、删除及切换到运营商所拥有的订阅的运营商应用。此外,这还包括 LUI 系统应用,该应用可提供用于管理所有嵌入式订阅的中心位置/界面,且可以是与提供 <code>EuiccService</code> 的应用不同的应用。<em></em></p>
+
+<p>要使用公共 API,运营商应用必须先通过 <code>Context#getSystemService</code> 获取 <code>EuiccManager</code> 的实例:</p>
+<pre class="prettyprint"><code>EuiccManager mgr = context.getSystemService(Context.EUICC_SERVICE);
+</code></pre>
+<p>在执行任何 eSIM 操作之前,您应检查设备是否支持 eSIM。如果系统已指定 android.hardware.telephony.euicc 功能且存在 LPA 软件包,<code>EuiccManager#isEnabled()</code> 通常会返回 true。</p>
+<pre class="prettyprint"><code>boolean isEnabled = mgr.isEnabled();
+if (!isEnabled) {
+    return;
+}
+</code></pre>
+<p>要获取有关 eUICC 硬件和 eSIM 操作系统版本的信息,请执行以下命令:</p>
+<pre class="prettyprint"><code>EuiccInfo info = mgr.getEuiccInfo();
+String osVer = info.getOsVersion();
+</code></pre>
+<p>很多 API(例如 <code>downloadSubscription()</code> 和 <code>switchToSubscription()</code>)都会使用 <code>PendingIntent</code> 回调,因为回调操作可能需要数秒甚至几分钟的时间才能完成。系统会使用 <code>EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_</code> 空间中的结果代码发送 <code>PendingIntent</code>,该代码提供了由框架指定的错误代码,以及传播自 LPA 的任意详细结果代码 <code>EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE</code>,这使得运营商应用可以通过跟踪来完成日志记录/调试操作。<code>PendingIntent</code> 必须是 <code>BroadcastReceiver</code>。</p>
+
+<p>要下载指定的 <code>DownloadableSubscription</code>(通过激活码或二维码创建),请执行以下命令:<em></em></p>
+<pre class="prettyprint"><code>// Register receiver.
+static final String ACTION_DOWNLOAD_SUBSCRIPTION = "download_subscription";
+static final String LPA_DECLARED_PERMISSION
+    = "com.your.company.lpa.permission.BROADCAST";
+BroadcastReceiver receiver =
+        new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (!action.equals(intent.getAction())) {
+                    return;
+                }
+                resultCode = getResultCode();
+                detailedCode = intent.getIntExtra(
+                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
+                    0 /* defaultValue*/);
+                resultIntent = intent;
+            }
+        };
+context.registerReceiver(receiver,
+        new IntentFilter(ACTION_DOWNLOAD_SUBSCRIPTION),
+        LPA_DECLARED_PERMISSION /* broadcastPermission*/,
+        null /* handler */);
+
+// Download subscription asynchronously.
+DownloadableSubscription sub = DownloadableSubscription
+        .forActivationCode(code /* encodedActivationCode*/);
+Intent intent = new Intent(action);
+PendingIntent callbackIntent = PendingIntent.getBroadcast(
+        getContext(), 0 /* requestCode */, intent,
+        PendingIntent.FLAG_UPDATE_CURRENT);
+mgr.downloadSubscription(sub, true /* switchAfterDownload */,
+        callbackIntent);
+</code></pre>
+<p>要切换到某条订阅内容(已指定订阅 ID),请执行以下命令:</p>
+<pre class="prettyprint"><code>// Register receiver.
+static final String ACTION_SWITCH_TO_SUBSCRIPTION = "switch_to_subscription";
+static final String LPA_DECLARED_PERMISSION
+    = "com.your.company.lpa.permission.BROADCAST";
+BroadcastReceiver receiver =
+        new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (!action.equals(intent.getAction())) {
+                    return;
+                }
+                resultCode = getResultCode();
+                detailedCode = intent.getIntExtra(
+                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
+                    0 /* defaultValue*/);
+                resultIntent = intent;
+            }
+        };
+context.registerReceiver(receiver,
+        new IntentFilter(ACTION_SWITCH_TO_SUBSCRIPTION),
+        LPA_DECLARED_PERMISSION /* broadcastPermission*/,
+        null /* handler */);
+
+// Switch to a subscription asynchronously.
+Intent intent = new Intent(action);
+PendingIntent callbackIntent = PendingIntent.getBroadcast(
+        getContext(), 0 /* requestCode */, intent,
+        PendingIntent.FLAG_UPDATE_CURRENT);
+mgr.switchToSubscription(1 /* subscriptionId */, callbackIntent);
+</code></pre>
+<p>有关 <code>EuiccManager</code> API 和代码示例的完整列表,请参阅 <a href="/devices/tech/connect/esim-euicc-api">eUICC API</a>。</p>
+
+<h3 id="resolvable_errors">可解决的错误</h3>
+
+<p>有时,系统无法完成 eSIM 操作,但用户可以直接解决由此导致的错误。例如,如果配置文件元数据提示需要运营商确认码,则 <code>downloadSubscription</code> 可能会失败。<em></em>或者,如果运营商应用具备目标配置文件的运营商权限(即运营商拥有该配置文件),但它不具备当前所启用配置文件的运营商权限(因此需要征得用户的同意),<code>switchToSubscription</code> 可能也会失败。</p>
+
+<p>在这些情况下,调用程序使用 <code>EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR</code> 进行回调。回调 <code>Intent</code> 将包含内部 extra,以便在调用程序将其传递给 <a href="https://developer.android.com/reference/android/telephony/euicc/EuiccManager.html#startResolutionActivity(android.app.Activity, int, android.content.Intent, android.app.PendingIntent)"><code>EuiccManager#startResolutionActivity</code></a> 时,可以通过 LUI 请求解决问题。再次以确认码为例,<a href="https://developer.android.com/reference/android/telephony/euicc/EuiccManager.html#startResolutionActivity(android.app.Activity, int, android.content.Intent, android.app.PendingIntent)"><code>EuiccManager#startResolutionActivity</code></a> 会触发屏幕显示 LUI 来让用户输入确认码,输入完成后,下载操作即会恢复。这种方法使得运营商应用能够完全控制在何时显示该界面,同时也为 LPA/LUI 提供了一种扩展方法,用于在将来添加处理“用户可恢复问题”的新方法(无需客户端应用做出更改)。</p>
+
+<p>Android 9 在 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/service/euicc/EuiccService.java"><code>EuiccService</code></a> 中定义了 LUI 应处理的上述可修正的错误:</p>
+<pre class="prettyprint"><code>/**
+ * Alert the user that this action will result in an active SIM being
+ * deactivated. To implement the LUI triggered by the system, you need to define
+ * this in AndroidManifest.xml.
+ */
+public static final String ACTION_RESOLVE_DEACTIVATE_SIM =
+        "android.service.euicc.action.RESOLVE_DEACTIVATE_SIM";
+/**
+ * Alert the user about a download/switch being done for an app that doesn't
+ * currently have carrier privileges.
+ */
+public static final String ACTION_RESOLVE_NO_PRIVILEGES =
+        "android.service.euicc.action.RESOLVE_NO_PRIVILEGES";
+
+/** Ask the user to input carrier confirmation code. */
+public static final String ACTION_RESOLVE_CONFIRMATION_CODE =
+        "android.service.euicc.action.RESOLVE_CONFIRMATION_CODE";
+</code></pre>
+<h3 id="carrier_privileges">运营商权限</h3>
+
+<p>如果您是打算自行开发运营商应用(调用 <code>EuiccManager</code> 以将配置文件下载到设备上)的运营商,那么您的配置文件应在元数据中包含与您的运营商应用相对应的运营商权限规则。这是因为属于不同供应商的订阅配置文件可在同一设备的 eUICC 中共存,但每个运营商应用只能访问相应运营商拥有的配置文件。例如,运营商 A 应该无法下载、启用或停用运营商 B 拥有的配置文件。</p>
+
+<p>为确保某个配置文件仅供其所有者访问,Android 采用了一种机制向配置文件所有者的应用(即运营商应用)授予特殊权限。Android 平台会加载存储在配置文件的访问规则文件 (ARF) 中的证书,并向由这些证书签名的应用授予权限,以允许其调用 <code>EuiccManager</code> API。详细流程如下所述:</p>
+
+<ol>
+<li>运营商签署运营商应用 APK;<a href="https://developer.android.com/studio/command-line/apksigner">apksigner</a> 工具将公钥证书附加到 APK。</li>
+<li><p>运营商/SM-DP+ 准备配置文件及其元数据,其中的 ARF 包含以下内容:</p>
+
+<ol>
+<li>运营商应用的公钥证书的签名(SHA-1 或 SHA-256)(必需)</li>
+<li>运营商应用的软件包名称(可选)</li>
+</ol></li>
+<li><p>运营商应用尝试通过 <code>EuiccManager</code> API 执行 eUICC 操作。</p></li>
+<li><p>Android 平台会验证调用程序应用证书的 SHA-1 或 SHA-256 哈希是否与从目标配置文件的 ARF 中获取的证书签名相匹配。如果运营商应用的软件包名称包含在该 ARF 中,那么它也必须与调用程序应用的软件包名称相匹配。</p></li>
+<li><p>对签名和软件包名称(如果包含)进行验证后,系统便会通过目标配置文件向调用程序应用授予运营商权限。</p></li>
+</ol>
+
+<p>由于配置文件元数据可在配置文件之外使用(以便 LPA 在下载配置文件之前通过 SM-DP+ 检索配置文件元数据,或在配置文件停用后通过 ISD-R 进行检索),因此,它应当包含与该配置文件相同的运营商权限规则。</p>
+
+<p>eUICC 操作系统和 SM-DP+ 必须支持配置文件元数据中的专有标记 <strong>BF76</strong>。标记内容应与 <a href="/devices/tech/config/uicc">UICC 运营商权限</a>中指定的 ARA(访问规则小程序)所返回的运营商权限规则相同:</p>
+<pre class="prettyprint"><code>RefArDo ::= [PRIVATE 2] SEQUENCE {  -- Tag E2
+    refDo [PRIVATE 1] SEQUENCE {  -- Tag E1
+        deviceAppIdRefDo [PRIVATE 1] OCTET STRING (SIZE(20|32)),  -- Tag C1
+        pkgRefDo [PRIVATE 10] OCTET STRING (SIZE(0..127)) OPTIONAL  -- Tag CA
+    },
+    arDo [PRIVATE 3] SEQUENCE {  -- Tag E3
+        permArDo [PRIVATE 27] BIT STRING (SIZE(8))  -- Tag DB
+    }
+}
+</code></pre>
+<p>要详细了解应用签名,请参阅<a href="https://developer.android.com/studio/publish/app-signing">为您的应用签名</a>。要详细了解运营商权限,请参阅 <a href="/devices/tech/config/uicc">UICC 运营商权限</a>。</p>
+
+<h2 id="making_an_lpa_app">开发 LPA 应用</h2>
+
+<p>您可以实现自己的 LPA,但必须将其与 Android Euicc API 连接起来。以下部分简要概述了如何开发 LPA 应用,以及如何将其与 Android 系统集成。</p>
+
+<h3 id="hardwaremodem_requirements">硬件/调制解调器要求</h3>
+
+<p>eUICC 芯片上的 LPA 和 eSIM 操作系统必须支持最低 2.0 或 2.2 版的 GSMA RSP(远程 SIM 配置)。您还应当安排使用具有与之匹配的 RSP 版本的 SM-DP+ 和 SM-DS 服务器。要详细了解 RSP 架构,请参阅 <a href="https://www.gsma.com/newsroom/all-documents/sgp-21-rsp-architecture-v2-2/">GSMA SGP.21 RSP 架构规范</a>。</p>
+
+<p>此外,要与 Android 9 中的 eUICC API 集成,设备调制解调器应发送支持已编码的 eUICC 功能的终端功能(本地配置文件管理和配置文件下载)。它还需要实现以下 API:</p>
+
+<ul>
+<li>IRadio HAL v1.1:setSimPower</li>
+<li>IRadio HAL v1.2:getIccCardStatus</li>
+<li>IRadioConfig HAL v1.0:getSimSlotsStatus</li>
+</ul>
+
+<p>调制解调器应将已启用默认启动配置文件的 eSIM 卡识别为有效 SIM 卡,并使该 SIM 卡保持正常使用状态。</p>
+
+<p>有关调制解调器要求的完整列表,请参阅 <a href="/devices/tech/connect/esim-modem-reqs">eSIM 支持的调制解调器要求</a>。</p>
+
+<h3 id="euiccservice">EuiccService</h3>
+
+<p>LPA 由两个独立的组件组成(可在同一 APK 中实现):LPA 后端和 LPA 界面或 LUI。</p>
+
+<p>要实现 LPA 后端,您必须扩展 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/service/euicc/EuiccService.java"><code>EuiccService</code></a> 并在清单文件中声明此服务。该服务必须请求获得 <code>android.permission.BIND_EUICC_SERVICE</code> 系统权限,以确保只有该系统才能与之绑定。该服务还必须包含具有 <code>android.service.euicc.EuiccService</code> 操作的 intent 过滤器。如果设备上存在多个实现,则应将 intent 过滤器的优先级设置为非零值。例如:</p>
+<pre class="prettyprint"><code>&lt;service
+    android:name=".EuiccServiceImpl"
+    android:permission="android.permission.BIND_EUICC_SERVICE"&gt;
+    &lt;intent-filter android:priority="100"&gt;
+        &lt;action android:name="android.service.euicc.EuiccService" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/service&gt;
+</code></pre>
+<p>Android 框架从内部确定处于活跃状态的 LPA,并视需要与其交互以支持 Android eUICC API。系统会针对具有 <code>android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS</code> 权限的所有应用查询 <code>PackageManager</code>,而该权限为 <code>android.service.euicc.EuiccService</code> 操作指定了一项服务。系统将选择优先级最高的服务,如果未找到任何服务,则会停用 LPA 支持。</p>
+
+<p>要实现 LUI,您必须为以下操作提供操作组件:</p>
+
+<ul>
+<li><code>android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS</code></li>
+<li><code>android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION</code></li>
+</ul>
+
+<p>与服务一样,每个操作组件都必须获得 <code>android.permission.BIND_EUICC_SERVICE</code> 系统权限,而且都应当包含具有适当操作的 intent 过滤器、<code>android.service.euicc.category.EUICC_UI</code> 类别以及非零优先级。选择这些操作组件的实现与选择 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/service/euicc/EuiccService.java"><code>EuiccService</code></a> 实现所使用的逻辑是类似的。例如:</p>
+<pre class="prettyprint"><code>&lt;activity android:name=".MyLuiActivity"
+          android:exported="true"
+          android:permission="android.permission.BIND_EUICC_SERVICE"&gt;
+    &lt;intent-filter android:priority="100"&gt;
+        &lt;action android:name=
+             "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS" /&gt;
+        &lt;action android:name=
+             "android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.service.euicc.category.EUICC_UI" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</code></pre>
+<p>这意味着,实现这些屏幕的界面的 APK 可以与实现 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/service/euicc/EuiccService.java"><code>EuiccService</code></a> 的 APK 不同。使用单个 APK 还是多个 APK(例如一个用于实现 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/service/euicc/EuiccService.java"><code>EuiccService</code></a>,另一个用于提供 LUI 操作组件)取决于设计时的选择。</p>
+
+<h3 id="euicccardmanager">EuiccCardManager</h3>
+
+<p><code>EuiccCardManager</code> 是用于与 eSIM 芯片进行通信的接口。它可提供 ES10 函数(如 GSMA RSP 规范中所述)并处理低级 APDU 请求/响应命令以及 ASN.1 解析。
+<code>EuiccCardManager</code> 是一种系统 API,只能由具有系统权限的应用进行调用。</p>
+
+<p><img src="/devices/tech/connect/images/carrier-app-euicc-apis.png" alt="运营商应用、LPA 和 Euicc API"/></p>
+
+<p><strong>图 2.</strong> 运营商应用和 LPA 同时使用 Euicc API</p>
+
+<p>通过 <code>EuiccCardManager</code> 实现的配置文件操作 API 要求调用程序是 LPA。这是 Android 框架的强制要求。这意味着调用程序必须扩展 <code>EuiccService</code> 并在清单文件中得以声明(如前几部分所述)。</p>
+
+<p>与 <code>EuiccManager</code> 类似,要使用 <code>EuiccCardManager</code> API,您的 LPA 必须先通过 <code>Context#getSystemService</code> 获取 <code>EuiccCardManager</code> 的实例:</p>
+<pre class="prettyprint"><code>EuiccCardManager cardMgr = context.getSystemService(Context.EUICC_CARD_SERVICE);
+</code></pre>
+<p>接下来,要获取 eUICC 上的所有配置文件,请执行以下命令:</p>
+<pre class="prettyprint"><code>ResultCallback&lt;EuiccProfileInfo[]&gt; callback =
+       new ResultCallback&lt;EuiccProfileInfo[]&gt;() {
+           @Override
+           public void onComplete(int resultCode,
+                   EuiccProfileInfo[] result) {
+               if (resultCode == EuiccCardManagerReflector.RESULT_OK) {
+                   // handle result
+               } else {
+                   // handle error
+               }
+           }
+       };
+
+cardMgr.requestAllProfiles(eid, AsyncTask.THREAD_POOL_EXECUTOR, callback);
+</code></pre>
+<p>在内部,<code>EuiccCardManager</code> 会通过 AIDL 接口绑定到 <code>EuiccCardController</code>(在电话进程中运行),而且每个 <code>EuiccCardManager</code> 方法均可以通过不同的专用 AIDL 接口从电话进程接收回调。使用 <code>EuiccCardManager</code> API 时,调用程序 (LPA) 必须通过所调用的回调提供 <a href="https://developer.android.com/reference/java/util/concurrent/Executor"><code>Executor</code></a>。该 <code>Executor</code> 可以在单个线程上运行,也可以在线程池上运行,具体取决于您的选择。</p>
+
+<p>大多数 <code>EuiccCardManager</code> API 都具有相同的使用模式。例如,要将绑定的配置文件包加载到 eUICC,请执行以下命令:</p>
+<pre class="prettyprint"><code>...
+cardMgr.loadBoundProfilePackage(eid, boundProfilePackage,
+        AsyncTask.THREAD_POOL_EXECUTOR, callback);
+</code></pre>
+<p>要切换为具有指定 ICCID 的其他配置文件,请执行以下命令:</p>
+<pre class="prettyprint"><code>...
+cardMgr.switchToProfile(eid, iccid, true /* refresh */,
+        AsyncTask.THREAD_POOL_EXECUTOR, callback);
+</code></pre>
+<p>要通过 eUICC 芯片获取默认的 SM-DP+ 地址,请执行以下命令:</p>
+<pre class="prettyprint"><code>...
+cardMgr.requestDefaultSmdpAddress(eid, AsyncTask.THREAD_POOL_EXECUTOR,
+        callback);
+</code></pre>
+<p>要检索指定通知事件的通知列表,请执行以下命令:</p>
+<pre class="prettyprint"><code>...
+cardMgr.listNotifications(eid,
+        EuiccNotification.Event.INSTALL
+              | EuiccNotification.Event.DELETE /* events */,
+        AsyncTask.THREAD_POOL_EXECUTOR, callback);
+</code></pre>
+<h2 id="validation">验证</h2>
+
+<p>AOSP 未附带 LPA 实现,因此,您不应在所有 Android 版本中都提供 LPA 支持(并非每款手机都支持 eSIM)。因此,我们没有提供端到端的 CTS 测试用例。不过,AOSP 中提供了基本的测试用例,以确保公开的 eUICC API 在 Android 版本中有效。</p>
+
+<p>您应该确保版本通过以下 CTS 测试用例(针对公共 API):</p>
+
+<p><a href="https://android.googlesource.com/platform/cts/+/master/tests/tests/telephony/src/android/telephony/">https://android.googlesource.com/platform/cts/+/master/tests/tests/telephony/src/android/telephony/</a></p>
+
+<p>实现运营商应用的运营商应该执行其常规的内部质量保证周期测试,以确保所有实现的功能都能正常运行。运营商应用至少应能够列出同一运营商拥有的所有订阅配置文件,下载并安装配置文件,激活配置文件上的服务,在配置文件之间切换以及删除配置文件。</p>
+
+<p>如果您目前正在开发自己的 LPA,则应进行更严格的测试。您应与调制解调器供应商、eUICC 芯片或 eSIM 操作系统供应商、SM-DP+ 供应商以及运营商进行合作,以解决相关问题并确保 LPA 在 RSP 架构中的互操作性。进行大量的手动测试是必不可少的。为获得最佳测试覆盖率,您应遵循 <a href="https://www.gsma.com/newsroom/all-documents/sgp-23-v1-2-rsp-test-specification/">GSMA SGP.23 RSP 测试计划</a>。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/ims.html b/zh-cn/devices/tech/connect/ims.html
new file mode 100644
index 0000000..b1087a6
--- /dev/null
+++ b/zh-cn/devices/tech/connect/ims.html
@@ -0,0 +1,182 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="implementing_ims" class="page-title">实现 IMS</h1>
+
+<p>Android 9 引入了一个名为 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/ims/">ImsService</a> 的新 SystemApi 接口,可帮助您实现 IP 多媒体子系统 (IMS)。ImsService API 是 Android 平台与供应商(即运营商提供的 IMS 实现)之间明确定义的接口。</p>
+
+<p><img src="/devices/tech/connect/images/imsservice.png" alt="ImsService 概览" width/></p>
+
+<p><strong>图 1.</strong> ImsService 概览</p>
+
+<p>通过使用 ImsService 接口,IMS 实现者可以向平台提供重要的信号信息(例如 IMS 注册信息、基于 IMS 集成的短信以及 MmTel 功能集成),以提供语音通话和视频通话功能。ImsService API 也是一种 Android System API,这意味着您可以直接针对 Android SDK(而不是来源)构建这种 API。预安装在设备上的 IMS 应用也可以配置为可通过 Play 商店更新。</p>
+
+<h2 id="examples_and_source">示例和来源</h2>
+
+<p>为了便于进行测试和开发,Android 在 AOSP 中提供了一个应用,它可以实现 ImsService API 的某些部分。您可以在以下位置找到该应用:<a href="https://android.googlesource.com/platform/packages/services/Telephony/+/master/testapps/ImsTestService/">/testapps/ImsTestService</a>。</p>
+
+<p>您可以在 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/ims/ImsService.java">ImsService</a> 和该 API 的其他类中找到关于 ImsService API 的文档。</p>
+
+<h2 id="implementation">实现</h2>
+
+<p>ImsService API 是一种高级 API,它可以让您通过多种方式实现 IMS(具体取决于可用的硬件)。例如,根据 IMS 实现是完全在应用处理器上进行,还是部分或完全分流到调制解调器,实现也会发生相应的变化。Android 不提供用于分流到基带处理器的公共 HAL,因此您必须使用调制解调器的 HAL 扩展来进行所有的分流。</p>
+
+<h3 id="compatibility_with_older_ims_implementations">与较早的 IMS 实现之间的兼容性</h3>
+
+<p>尽管 Android 9 包含 ImsService API,但使用较早的 IMS 实现的设备无法支持该 API。对于这类设备,较早的 AIDL 接口和封装容器类已迁移至 <code>android.telephony.ims.compat</code> 命名空间。升级到 Android 9 后,旧款设备必须执行以下操作才能继续支持旧版 API。</p>
+
+<ul>
+<li>更改 ImsService 实现的命名空间,以从 <code>android.telephony.ims.compat</code> 命名空间 API 进行扩展。</li>
+<li>修改 AndroidManifest.xml 中的 ImsService 服务定义,以使用 <code>android.telephony.ims.compat.ImsService</code> intent-filter 操作(而不是 <code>android.telephony.ims.ImsService</code> 操作)。</li>
+</ul>
+
+<p>随后,框架将使用 Android 9 中提供的兼容性层绑定到 ImsService,以支持传统的 <code>ImsService</code> 实现。</p>
+
+<h3 id="imsservice_registration_with_the_framework">向框架注册 ImsService</h3>
+
+<p>ImsService API 是作为服务实现的,Android 框架会绑定到该服务以便与 IMS 实现进行通信。要向框架注册实现了 ImsService 的应用,您必须执行以下 3 个步骤:首先,ImsService 实现必须使用相关应用的 <code>AndroidManifest.xml</code> 向平台自行注册;其次,它必须定义实现支持哪种 IMS 功能(MmTel 还是 RCS);最后,它必须在运营商配置或设备叠加层中验证为受信任的 IMS 实现。</p>
+
+<h4 id="service_definition">服务定义</h4>
+
+<p>IMS 应用可使用以下格式将 <code>service</code> 条目添加到清单中,从而向框架注册 ImsService:</p>
+<pre class="prettyprint"><code>&lt;service
+    android:name="com.egcorp.ims.EgImsService"
+    android:directBootAware="true"
+    Android:persistent="true"
+    ...
+    android:permission="android.permission.BIND_IMS_SERVICE" &gt;
+    ...
+    &lt;intent-filter&gt;
+        &lt;action android:name="android.telephony.ims.ImsService" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/service&gt;
+</code></pre>
+<p><code>AndroidManifest.xml</code> 中的 <code>service</code> 定义对以下属性进行了定义,这些属性是正确运行所必需的属性:</p>
+
+<ul>
+<li><code>directBootAware="true"</code>:允许在文件系统被解密之前找到并绑定 <code>service</code>。这意味着 ImsService 不得在访问文件系统时打开任何加密文件。要详细了解文件级加密 (FBE),请参阅<a href="/security/encryption/file-based">文件级加密</a>。</li>
+<li><code>persistent="true"</code>:允许此服务永久运行,不因系统回收内存而终止。只有在相应的应用作为系统应用进行构建时,此属性才有效。</li>
+<li><code>permission="android.permission.BIND_IMS_SERVICE"</code>:确保只有被授予 <code>BIND_IMS_SERVICE</code> 权限的进程才能绑定到相应的应用。这样可以防止将恶意应用绑定到该服务,因为框架只会向系统应用授予这项权限。</li>
+</ul>
+
+<p>此外,该服务还必须指定 <code>intent-filter</code> 元素以及操作 <code>android.telephony.ims.ImsService</code>。这样一来,框架便可以找到 <code>ImsService</code>。</p>
+
+<h3 id="ims_feature_specification">IMS 功能规范</h3>
+
+<p>在 AndroidManifest.xml 中将 ImsService 定义为 Android 服务后,ImsService 必须定义它支持的 IMS 功能。Android 目前支持 MmTel 和 RCS 功能,不过只有 MmTel 集成到了框架中。虽然框架中没有集成 RCS API,但将其声明为 ImsService 的功能仍有诸多好处。</p>
+
+<p>下面列出了 <code>android.telephony.ims.ImsFeature</code> 中定义的 ImsService 可以提供的有效功能,并举例说明了为什么 IMS 应用希望实现所有这些功能或其中某个功能。在对各个功能进行定义后,此页面还概述了 <code>ImsService</code> 如何声明它为每个 SIM 卡插槽定义的功能集。</p>
+
+<h4 id="feature_mmtel">FEATURE_MMTEL</h4>
+
+<p><code>ImsService</code> 可实现 IMS MMTEL 功能,该功能包含对所有 IMS 媒体(IR.92 和 IR.94 规范)的支持(紧急连接到 IMS PDN 以进行紧急呼叫的情况除外)。任何希望支持 MMTEL 功能的 <code>ImsService</code> 实现都应该扩展 <code>android.telephony.ims.MmTelFeature</code> 基类,并在 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/ims/ImsService.java#335"><code>ImsService#createMmTelFeature</code></a> 中返回自定义 <code>MmTelFeature</code> 实现。</p>
+
+<h4 id="feature_emergency_mmtel">FEATURE_EMERGENCY_MMTEL</h4>
+
+<p>声明这项功能只会向可紧急连接到 IMS PDN 以获取紧急服务的平台发送信号。如果不为您的 <code>ImsService</code> 声明此功能,平台将始终默认将电路域回落用于紧急服务。要定义此功能,您必须先定义 <code>FEATURE_MMTEL</code> 功能。</p>
+
+<h4 id="feature_rcs">FEATURE_RCS</h4>
+
+<p>ImsService API 不实现任何 IMS RCS 功能,但 <code>android.telephony.ims.RcsFeature</code> 基类仍然非常有用。检测到软件包应提供 RCS 时,框架会自动绑定到 ImsService 并调用 <code>ImsService#createRcsFeature</code>。如果取出与 RCS 服务相关联的 SIM 卡,则框架会自动调用 <code>RcsFeature#onFeatureRemoved</code>,然后清除与 RCS 功能相关联的 <code>ImsService</code>。此功能可以移除某些 RCS 功能必须提供的自定义检测/绑定逻辑。</p>
+
+<h4 id="registration_of_supported_features">注册受支持的功能</h4>
+
+<p>电话框架会先绑定到 ImsService,以使用 <code>ImsService#querySupportedImsFeatures</code> API 查询它支持的功能。在框架计算出 ImsService 将会支持的功能之后,它会调用 ImsService 将负责的各项功能的 <code>ImsService#create[...]Feature</code>。如果 IMS 应用支持的功能发生更改,您可以使用 <code>ImsService#onUpdateSupportedImsFeatures</code> 向框架发出信号,以重新计算受支持的功能。有关 ImsService 的初始化和绑定的更多信息,请参见下图。</p>
+
+<p><img src="/devices/tech/connect/images/imsservice-sequence.png" alt="ImsService 初始化和绑定"/></p>
+
+<p><strong>图 2</strong>:ImsService 初始化和绑定</p>
+
+<h3 id="framework_detection_and_verification_of_imsservices">ImsService 的框架检测和验证</h3>
+
+<p>在 AndroidManifest.xml 中对 ImsService 进行正确定义后,必须将平台配置为适时(安全地)绑定到 ImsService。框架可绑定到以下两种 ImsService:</p>
+
+<ol>
+<li>运营商“替换”ImsService:这类 ImsService 会预先加载到设备上,但与一个或多个手机运营商相关联,并且只有在插入匹配的 SIM 卡时才会绑定。该类型是使用 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#301"><code>key_config_ims_package_override</code></a> CarrierConfig 密钥配置的。</li>
+<li>设备“默认”ImsService:该类型是由原始设备制造商 (OEM) 加载到设备上的默认 ImsService。当运营商 ImsService 不可用时,它应该能够在任何情况下提供 IMS 服务。在设备没有插入 SIM 卡或插入的 SIM 卡没有安装运营商 ImsService 的情况下,这种 ImsService 非常有用。该类型是在设备叠加层 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml#2517"><code>config_ims_package</code></a> 密钥中进行定义的。</li>
+</ol>
+
+<p>这两种类型的 ImsService 实现必须是系统应用,或必须驻留在 /system/priv-app/ 文件夹中,以授予相应的由用户授予的权限(即电话、麦克风、位置、相机和通讯录权限)。通过验证 IMS 实现的软件包名称是否与上文定义的 CarrierConfig 或设备叠加层值匹配,仅绑定受信任的应用。</p>
+
+<h2 id="customization">自定义</h2>
+
+<p>ImsService 允许通过更新(使用 <code>ImsService#onUpdateSupportedImsFeatures</code> 方法)以动态的形式启用或停用它支持的 IMS 功能(MMTEL 和 RCS)。这样会触发框架重新计算要绑定哪些 ImsService 以及它们支持哪些功能。如果 IMS 应用在没有任何受支持的功能的情况下更新框架,则在手机重新启动或插入与 IMS 应用匹配的新 SIM 卡之前,ImsService 将处于未绑定状态。</p>
+
+<h3 id="binding_priority_for_multiple_imsservice">多个 ImsService 的绑定优先级</h3>
+
+<p>框架不支持绑定到设备上预装的所有可能的 ImsService,并将按以下顺序绑定到 ImsService(每个 SIM 插槽最多可绑定两个 ImsService,每个功能一个 ImsService):</p>
+
+<ol>
+<li>由 CarrierConfig 值 <code>key_config_ims_package_override</code> 定义的 ImsService 软件包名称(插入 SIM 卡的情况下)。</li>
+<li>在 <code>config_ims_package</code> 的设备叠加层值中定义的 ImsService 软件包名称,包括没有 SIM 卡插入的情况。此 ImsService 必须支持 Emergency MmTel 功能。</li>
+</ol>
+
+<p>您必须在 CarrierConfig 中为每个将使用 ImsService 软件包的运营商定义您 ImsService 的软件包名称;如果您的 ImsService 是默认类型,则应在设备叠加层中定义(如上所述)。</p>
+
+<p>下面我们针对每种功能进行详细介绍。单 SIM 卡设备可提供两种 IMS 功能:MMTel 和 RCS。框架将尝试按照上文中所述的顺序为每种功能进行绑定;如果相应功能不适用于运营商配置替换中定义的 ImsService,则框架将回退到您的默认 ImsService。例如,下表说明了框架将使用哪种 IMS 功能(假设三个 IMS 应用实现了某个系统上安装的具有以下功能的 ImsService):</p>
+
+<ul>
+<li>运营商 A ImsService 支持 RCS</li>
+<li>运营商 B ImsService 支持 RCS 和 MMTel</li>
+<li>OEM ImsService 支持 RCS、MMTel 和 Emergency MMTel</li>
+</ul>
+
+<table>
+<thead>
+<tr>
+<th><strong>已插入 SIM 卡</strong></th>
+<th><strong>RCS 功能</strong></th>
+<th><strong>MMTel 功能</strong></th>
+<th><strong>紧急 MMTel 功能</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>运营商 A</td>
+<td>运营商 A</td>
+<td>OEM</td>
+<td>OEM</td>
+</tr>
+<tr>
+<td>运营商 B</td>
+<td>运营商 B</td>
+<td>运营商 B</td>
+<td>OEM</td>
+</tr>
+<tr>
+<td>没有 SIM 卡</td>
+<td>OEM</td>
+<td>OEM</td>
+<td>OEM</td>
+</tr>
+</tbody>
+</table>
+
+<h2 id="validation">验证</h2>
+
+<p>ImsService API 包括一个 GTS 测试套件,可验证框架中 ImsService API 的功能以及 IMS 应用服务绑定逻辑。<code>GtsImsServiceTestCases</code> GTS APK 可以作为 GTS 测试套件的一部分运行,以确保 API 表面在所有 Android 9 实现中一致地运行。</p>
+
+<p>由于 IMS 规范非常多且使用的是特殊验证设备,因此测试套件中不包含用于自行验证 IMS 实现的工具。这些测试只能验证电话框架是否正确响应 ImsService API。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/index.html b/zh-cn/devices/tech/connect/index.html
index 7f7bb92..cea1414 100644
--- a/zh-cn/devices/tech/connect/index.html
+++ b/zh-cn/devices/tech/connect/index.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>确保网络连接正常</title>
+    <title>连接</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -20,6 +20,8 @@
       limitations under the License.
   -->
 
-<p>按照本部分中的说明进行操作以确保您的 Android 设备正确联网。</p>
+<p>本部分介绍了标准 Android 连接协议的实现,以及相关功能(包括蓝牙、NFC、WLAN、电话等)的使用方法。</p>
+
+<p>请按照本部分中的说明进行操作,以确保正确连接您的 Android 设备。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/tethering-offload.html b/zh-cn/devices/tech/connect/tethering-offload.html
new file mode 100644
index 0000000..9db85c7
--- /dev/null
+++ b/zh-cn/devices/tech/connect/tethering-offload.html
@@ -0,0 +1,73 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="tethering_hardware_offload" class="page-title">网络共享硬件分流</h1>
+
+<p>通过将网络共享流量(借助 USB、WLAN)分流到硬件,网络共享分流可让设备节省电量并提高性能。通过在调制解调器和外围设备之间提供直接路径,并绕过应用处理器,可以分流网络共享流量。</p>
+
+<h2 id="specifications">规范</h2>
+
+<p>从 Android 8.1 开始,设备可以使用网络共享分流将 IPv4、IPv6 或 IPv4+IPv6 转发分流到硬件。</p>
+
+<p>分流功能不需要分流所有数据包。框架能够处理软件中的任何数据包。控制数据包通常是在软件中处理。由于 IPv4 端口在网络共享流量和设备流量之间共享,因此必须在软件中处理 IPv4 会话设置/拆解数据包(例如,SYN/SYN+ACK、FIN),以便内核可以构建流程状态。框架提供了控制平面和状态机,还为硬件提供了有关上游和下游接口/前缀的信息。</p>
+
+<p>对于 IPv4,硬件允许 IPv4 网络地址转换 (NAT) 会话设置数据包到达 CPU。内核会创建 NAT 条目,HAL 实现会观察框架提供的文件描述符中的条目,并在硬件中处理这些流程。这意味着 HAL 实现不需要 <code>CAP_NET_*</code>,因为 HAL 会从框架中获取打开的 <code>NF_NETLINK_CONNTRACK</code> 套接字。硬件会定期将当前活动流程的 NAT 状态更新发送给框架,框架会刷新相应的内核连接跟踪状态条目。</p>
+
+<p>对于 IPv6,框架会编制一个不得将流量分流到的 IPv6 目标前缀的列表。所有其他网络共享数据包都可以分流。</p>
+
+<p><code>NetworkStatsService</code> 数据流量使用情况轮询会使框架向硬件请求流量统计信息,以便计算数据流量使用量。框架还会通过 HAL 向硬件传达数据流量使用限制。</p>
+
+<h2 id="hardware_requirements">硬件要求</h2>
+
+<p>要实现网络共享分流,您的硬件必须能够在调制解调器和 WLAN/USB 之间转发 IP 数据包,而无需通过主处理器发送流量。</p>
+
+<h2 id="implementation">实现</h2>
+
+<p>要启用网络共享分流功能,您必须同时实现配置 HAL (<code>IOffloadConfig</code>) 和控制 HAL (<code>IOffloadControl</code>)。</p>
+
+<h3 id="config_hal_ioffloadconfig">配置 HAL:<code>IOffloadConfig</code></h3>
+
+<p><a href="/reference/hidl/android/hardware/tetheroffload/config/1.0/IOffloadConfig"><code>IOffloadConfig</code></a> HAL 会启动网络共享分流实现。框架会为 HAL 实现提供预先连接的 <code>NF_NETLINK_CONNTRACK</code> 套接字,以供该实现观察 IPv4 流程。只有转发的流程必须加速。</p>
+
+<h3 id="control_hal_ioffloadcontrol">控制 HAL:<code>IOffloadControl</code></h3>
+
+<p><a href="/reference/hidl/android/hardware/tetheroffload/control/1.0/IOffloadControl"><code>IOffloadControl</code></a> HAL 会控制分流实现。必须实现以下方法:</p>
+
+<ul>
+<li>启动/停止分流硬件:使用 <code>initOffload/stopOffload</code>,并使用 <code>setLocalPrefixes</code> 让本地 IP 地址或其他网络免予分流。</li>
+<li>设置上游接口、IPv4 地址和 IPv6 网关:使用 <code>setUpstreamParameters</code>,并使用 <code>addDownstream/removeDownstream</code> 配置下游 IP 地址范围。</li>
+<li>计算数据流量使用量:使用 <code>getForwardedStats/setDataLimit</code>。</li>
+</ul>
+
+<p>您的供应商 HAL 还必须通过 <code>ITetheringOffloadCallback</code> 接口发送回调,该接口会通知框架:</p>
+
+<ul>
+<li>分流等异步事件被启动和停止 (OffloadCallbackEvent)</li>
+<li>NAT 超时更新,必须定期发送这些更新以表明特定 IPv4 流程包含流量且不得由内核关闭</li>
+</ul>
+
+<h2 id="validation">验证</h2>
+
+<p>要验证网络共享分流的实现,请使用手动或自动测试验证网络共享和 WLAN 热点是否按预期方式工作。<a href="/compatibility/vts/">供应商测试套件 (VTS)</a> 包含针对网络共享分流 HAL 的测试。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/third-party-call-apps.html b/zh-cn/devices/tech/connect/third-party-call-apps.html
new file mode 100644
index 0000000..8db627b
--- /dev/null
+++ b/zh-cn/devices/tech/connect/third-party-call-apps.html
@@ -0,0 +1,104 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="supporting_third_party_calling_apps" class="page-title">支持第三方通话应用</h1>
+
+<p>Android 9 提供的 API 可更好地支持第三方通话应用。第三方通话应用通常借助电话 API(例如 <code>PHONE_STATE</code> 广播)与运营商通话共存。因此,第三方通话应用必须礼让运营商通话,而且通常会默默拒绝应用中的来电,或者终止正在进行的通话,以便为运营商通话“让路”。</p>
+
+<p>Android 9 中的 API 支持在运行第三方应用的同时进行运营商通话。这使得在运营商通话过程中接听第三方来电成为可能。该框架要负责确保,在用户进行第三方应用通话时使运营商通话处于呼叫保持状态。</p>
+
+<p>在 Android 9 中,建议您使用第三方通话应用来实现自行管理的 <code>ConnectionService</code> API。要详细了解如何使用此 API 构建通话应用,请参阅<a href="https://developer.android.com/guide/topics/connectivity/telecom/selfManaged">构建通话应用</a>。</p>
+
+<p>借助自行管理的 <code>ConnectionService</code> API,开发者还可以选择使其应用中的通话记录显示在系统的通话记录中(请参阅 <a href="https://developer.android.com/reference/android/telecom/PhoneAccount#EXTRA_LOG_SELF_MANAGED_CALLS"><code>EXTRA_LOG_SELF_MANAGED_CALLS</code></a>)。根据 <a href="/compatibility/android-cdd#7_4_data_connectivity">Android 兼容性定义文档 (CDD)</a>(第 7.4.1.2 节)中的要求,您应确保自己的拨号器/电话应用能够显示此类通话记录条目,并显示接入相应通话的第三方通话应用的名称(要查看有关 AOSP 拨号器应用如何满足此要求的示例,请参阅<a href="#call_log_entries_from_3p_calling_apps">源自第三方通话应用的通话记录条目</a>)。</p>
+
+<p>应用需要在其连接中设置 <a href="https://developer.android.com/reference/android/telecom/Connection.html#CAPABILITY_SUPPORT_HOLD"><code>CAPABILITY_SUPPORT_HOLD</code></a> 和 <a href="https://developer.android.com/reference/android/telecom/Connection.html#CAPABILITY_HOLD"><code>CAPABILITY_HOLD</code></a>。但在某些情况下,应用可能无法使通话处于呼叫保持状态。该框架包含了应对此类情形的规定。</p>
+
+<h2 id="scenarios">场景</h2>
+
+<p>您应当修改自己的拨号器应用以应对以下场景。</p>
+
+<h3 id="handling_incoming_calls_which_disconnect_an_ongoing_call">处理导致正在进行的通话中断的来电</h3>
+
+<p>如果正在进行的第三方通话(例如 SuperCaller 通话)不支持呼叫保持,而此时用户接到移动网络来电(例如通过运营商 FooCom),您的拨号器/电话应用应提示用户:接听移动网络来电将终止正在进行的第三方通话。</p>
+
+<p>这种用户体验非常重要,因为该框架可能不支持对第三方通话应用的通话进行呼叫保持。接听新的移动网络来电会导致正在进行的第三方通话中断。</p>
+
+<p>请参阅以下界面示例:</p>
+
+<figure id="incoming-call-3p-call-app">
+  <img src="/devices/tech/connect/images/incoming-call-3p-call-app.png" width="250" class="screenshot" alt="导致正在进行的第三方通话中断的来电"/>
+  <figcaption><strong>图 1.</strong> 导致正在进行的第三方通话中断的来电</figcaption>
+</figure>
+
+<p>您的拨号器应用可通过检查<a href="https://developer.android.com/reference/android/telecom/Call.Details.html#getExtras()">通话 extra</a> 来判断某个来电是否会导致其他通话中断。请务必将 <a href="https://developer.android.com/reference/android/telecom/Connection.html#EXTRA_ANSWERING_DROPS_FG_CALL"><code>EXTRA_ANSWERING_DROPS_FG_CALL</code></a> 设置为 <code>TRUE</code>,并将 <a href="https://developer.android.com/reference/android/telecom/Connection.html#EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME"><code>EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME</code></a> 设置为接听移动网络来电时其通话会被中断的应用的名称。</p>
+
+<h3 id="call_log_entries_from_3p_calling_apps">源自第三方通话应用的通话记录条目</h3>
+
+<p>第三方通话应用的开发者可以选择让其应用中的通话记录显示在系统的通话记录中(请参阅 <a href="https://developer.android.com/reference/android/telecom/PhoneAccount#EXTRA_LOG_SELF_MANAGED_CALLS"><code>EXTRA_LOG_SELF_MANAGED_CALLS</code></a>)。这意味着通话记录中可以包含有关非移动网络通话的条目。</p>
+
+<p>当 AOSP 拨号器应用显示与第三方通话应用相关的通话记录条目时,发生通话的应用的名称将显示在通话记录中,如下图所示:</p>
+
+<figure id="call-log-entry-3p">
+  <img src="/devices/tech/connect/images/call-log-entry-3p.png" width="400" class="screenshot" alt="第三方通话应用中的通话记录条目"/>
+  <figcaption><strong>图 2.</strong> 拨号器应用上显示的通话记录条目(包含第三方通话应用的名称)</figcaption>
+</figure>
+
+<p>要确定与通话记录条目相关联的应用的名称,请使用通话记录提供程序中的 <a href="https://developer.android.com/reference/android/provider/CallLog.Calls.html#PHONE_ACCOUNT_COMPONENT_NAME"><code>PHONE_ACCOUNT_COMPONENT_NAME</code></a> 和 <a href="https://developer.android.com/reference/android/provider/CallLog.Calls.html#PHONE_ACCOUNT_ID"><code>PHONE_ACCOUNT_ID</code></a> 列创建一个 <a href="https://developer.android.com/reference/android/telecom/PhoneAccountHandle.html#PhoneAccountHandle(android.content.ComponentName, java.lang.String)"><code>PhoneAccountHandle</code></a> 实例,以用于识别通话记录条目的来源。查询 <a href="https://developer.android.com/reference/android/telecom/TelecomManager.html#getPhoneAccount(android.telecom.PhoneAccountHandle)"><code>TelecomManager</code></a> 以获取相应 PhoneAccount 的详细信息。<br />要确定某条通话记录条目是否源自第三方通话应用,请检查 <a href="https://developer.android.com/reference/android/telecom/PhoneAccount.html#getCapabilities()"><code>PhoneAccount</code> 功能</a>,查看是否已设置 <a href="https://developer.android.com/reference/android/telecom/PhoneAccount.html#CAPABILITY_SELF_MANAGED"><code>CAPABILITY_SELF_MANAGED</code></a>。</p>
+
+<p>返回的 <code>PhoneAccount</code> 的 <a href="https://developer.android.com/reference/android/telecom/PhoneAccount.html#getLabel()"><code>getLabel</code></a> 方法将返回与相关通话记录条目(源自第三方通话应用)相关联的应用的名称。</p>
+
+<h2 id="validation">验证</h2>
+
+<p>要测试您的设备是否支持第三方通话应用,请使用 Telecomm 测试应用,该应用可实现自行管理的 ConnectionService API。该应用位于 <a href="https://android.googlesource.com/platform/packages/services/Telecomm/+/master/testapps/"><code>/packages/services/Telecomm/testapps/</code></a> 中。</p>
+
+<ol>
+<li><p>使用以下命令从 Android 源代码代码库的根目录构建测试应用:</p>
+
+<p><code>mmma packages/services/Telecomm/testapps/</code></p></li>
+<li><p>使用 <code>adb install -g -r &lt;apk path&gt;</code> 安装编译 APK。然后,将自行管理的示例图标添加到您的启动器中。</p></li>
+<li><p>点按该图标以打开测试应用。</p></li>
+</ol>
+
+<h3 id="handling_incoming_calls_which_disconnect_an_ongoing_call_2">处理导致正在进行的通话中断的来电</h3>
+
+<p>请按照以下步骤操作,以验证某个来电是否会导致正在进行的第三方通话中断。</p>
+
+<figure id="test-app-3p-call">
+  <img src="/devices/tech/connect/images/test-app-3p-call.png" width="250" class="screenshot" alt="适用于第三方通话应用的测试应用"/>
+  <figcaption><strong>图 3.</strong> 测试应用,以及自行管理的 ConnectionService API 的示例实现</figcaption>
+</figure>
+
+<ol>
+<li>取消选中 <strong>Holdable</strong> 选项。</li>
+<li>点按 <strong>OUTGOING</strong> 以启动新的去电示例。</li>
+<li>点按 <strong>ACTIVE</strong> 按钮以激活通话。</li>
+<li>用另一部手机拨打被测设备的电话号码。在这一场景中,您的拨号器会显示一个应用的名称,而该应用将中断其通话。</li>
+<li>操作完成后,在测试应用中点按 <strong>DISCONNECT</strong> 按钮。</li>
+</ol>
+
+<h3 id="call_log_entries_from_3p_calling_apps_2">源自第三方通话应用的通话记录条目</h3>
+
+<p>完成上述步骤后,测试应用会在系统通话记录中添加一条通话记录。要确认设备是否记录了源自第三方通话应用的通话记录,请打开您的拨号器应用并确认相应通话显示在系统通话记录中。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-aware.html b/zh-cn/devices/tech/connect/wifi-aware.html
index 102cc97..8e6ca80 100644
--- a/zh-cn/devices/tech/connect/wifi-aware.html
+++ b/zh-cn/devices/tech/connect/wifi-aware.html
@@ -1,85 +1,106 @@
 <html devsite><head>
-    <title>WLAN 感知</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
+  <meta name="book_path" value="/_book.yaml"/>
 
-          http://www.apache.org/licenses/LICENSE-2.0
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
 
-      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.
-  -->
+<!--
+  Copyright 2018 The Android Open Source Project
 
-<p>
-Android 8.1 (O MR1) 版本中的 <a href="https://developer.android.com/guide/topics/connectivity/wifi-aware.html">WLAN 感知</a>功能支持多个设备直接通过 WLAN 进行互连(无需连接到互联网或移动网络)。此功能是基于 <a href="https://www.wi-fi.org/">WLAN 联盟</a> <a href="https://www.wi-fi.org/discover-wi-fi/wi-fi-aware">WLAN 感知规范</a>(2.0 版)构建的,它支持在断开网络的情况下,在可信设备与应用之间轻松共享高吞吐量数据。
-</p>
+  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
 
-<h2 id="examples-and-source">示例和源代码</h2>
+      http://www.apache.org/licenses/LICENSE-2.0
 
-<p>
-要使用此功能,设备制造商应采用在 Android 开源项目 (AOSP) 中提供的 WLAN 硬件接口设计语言 (HIDL)。在 Android 8.0 (O) 版本中,HIDL 取代了之前使用的硬件抽象层 (HAL) 结构,以便通过指定收集到接口和软件包的类型和方法调用来简化实现流程。
-</p>
+  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>
-借助 WLAN HIDL 使用 WLAN 感知功能:hardware/interfaces/wifi/1.0。WLAN 感知 HAL 表面非常大;<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/wifi/1.0/README-NAN.md">hardware/interfaces/wifi/1.0/README-NAN.md</a> 文件描述了当前使用的子集。
-</p>
+<h1 id="wi_fi_aware" class="page-title">WLAN 感知</h1>
 
-<p>
-您可以参考旧版 WLAN HAL 来了解它与新 HIDL 接口之间的关系:<a href="https://android.googlesource.com/platform/hardware/libhardware_legacy/+/master/include/hardware_legacy/wifi_nan.h">hardware/libhardware_legacy/+/master/include/hardware_legacy/wifi_nan.h</a>。
-</p>
+<p>通过 Android 8.0 中新增的 <a href="https://developer.android.com/guide/topics/connectivity/wifi-aware.html">WLAN 感知</a>功能,支持设备可以直接使用 WLAN 感知协议发现其他设备、与其他设备进行互连,以及将覆盖范围扩展到其他设备(Android 9 中新增的功能),而无需连接到互联网或移动网络。此功能是基于 <a href="https://www.wi-fi.org/">WLAN 联盟</a> (WFA) <a href="https://www.wi-fi.org/discover-wi-fi/wi-fi-aware">WLAN 感知规范</a>(2.0 版)构建的,它支持在断开网络的情况下,在可信设备与应用之间轻松共享高吞吐量数据。</p>
+
+<h2 id="examples_and_source">示例和来源</h2>
+
+<p>要使用此功能,设备制造商应采用在 Android 开源项目 (AOSP) 中提供的 WLAN <a href="/devices/architecture/hidl">硬件接口设计语言 (HIDL)</a>。HIDL 取代了之前使用的<a href="/devices/architecture/hal">硬件抽象层 (HAL)</a> 结构,以便通过指定收集到接口和软件包的类型和方法调用来简化实现流程。</p>
+
+<p>借助 WLAN HIDL 使用 WLAN 感知功能:hardware/interfaces/wifi/1.2。WLAN 感知 HAL 表面非常大;<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/wifi/">hardware/interfaces/wifi/1.2/README-NAN.md</a> 文件描述了框架当前使用的子集。</p>
+
+<p>您可以参考旧版 WLAN HAL 来了解它与新 HIDL 接口之间的关系:<a href="https://android.googlesource.com/platform/hardware/libhardware_legacy/+/master/include/hardware_legacy/wifi_nan.h">hardware/libhardware_legacy/+/master/include/hardware_legacy/wifi_nan.h</a>。</p>
 
 <h2 id="implementation">实现</h2>
 
-<p>
-设备制造商需要提供框架和 HAL/固件支持:</p>
-<ul>
-  <li>框架:
-  <ul>
-    <li>AOSP 代码</li>
-    <li>启用感知功能:需要功能标记和 HIDL 编译标记</li>
-  </ul>
-    </li><li>WLAN 感知 (NAN) HAL 支持(意味着固件支持)</li>
+<p>设备制造商需要提供框架和 HAL/固件支持:</p>
 
+<ul>
+<li>框架:
+<ul>
+<li>AOSP 代码</li>
+<li>启用感知功能:需要功能标记和 HIDL 编译标记</li>
+</ul></li>
+<li>WLAN 感知 (NAN) HAL 支持(意味着固件支持)</li>
 </ul>
 
-<p>
-为实现此功能,设备制造商需采用 WLAN HIDL,另外还要启用两个功能标记:</p>
+<p>为实现此功能,设备制造商需采用 WLAN HIDL,另外还要启用两个功能标记:</p>
 
-<p>
-在 <code>BoardConfig.mk</code> 中,添加此标记可指示 WLAN HIDL 包含 WLAN 感知功能:<code>WIFI_HIDL_FEATURE_AWARE := true</code>
-</p>
+<ul>
+<li><p>在位于 <code>device/&lt;oem&gt;/&lt;device&gt;</code> 的 <code>BoardConfig.mk</code> 或 BoardConfig-common.mk 中,添加以下标记:</p>
+<pre class="prettyprint"><code>WIFI_HIDL_FEATURE_AWARE := true
+</code></pre></li>
+<li><p>在位于 <code>device/&lt;oem&gt;/&lt;device&gt;</code> 的 <code>device.mk</code> 中,修改 <code>PRODUCT_COPY_FILES</code> 环境变量,以便纳入对 WLAN 感知功能的支持:</p>
+<pre class="prettyprint"><code>PRODUCT_COPY_FILES +=
+frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
+</code></pre></li>
+</ul>
 
-<p>
-在 <code>device.mk</code> 中,修改 <code>PRODUCT_COPY_FILES</code> 环境变量以提供对 WLAN 感知功能的支持:
-<code>PRODUCT_COPY_FILES +=
-frameworks/native/data/etc/android.hardware.wifi.aware.xml:system/etc/permissions/android.hardware.wifi.aware.xml</code>
-</p>
+<p>WLAN 感知功能包括使用 IEEE 802.11mc 协议(又称为往返时间 (RTT))将覆盖范围扩展到对等设备。WLAN 感知的这一子功能取决于支持 WLAN RTT 功能的设备,即它要求设备支持 WLAN 感知和 WLAN RTT。有关详情,请参阅 <a href="/devices/tech/connect/wifi/rtt">WLAN RTT</a>。</p>
 
-<p>
-否则,实现此功能所需的所有内容都会包含在 AOSP 中。</p>
+<p>除此以外,实现此功能所需的所有内容都会包含在 AOSP 中。</p>
+
+<h2 id="mac_randomization">随机分配 MAC 地址</h2>
+
+<p>Android 要求随机分配 WLAN 感知发现 (NMI) 和数据接口 (NDP) 的 MAC 地址,而且随机分配的 MAC 地址不应与设备的真实 MAC 地址相同。MAC 地址必须满足以下条件:</p>
+
+<ul>
+<li>每当启用或重新启用 WLAN 感知时进行随机分配。</li>
+<li><p>WLAN 感知功能启用后,必须按照由 <code>NanConfigRequest.macAddressRandomizationIntervalSec</code> HIDL 参数配置的有规律的间隔随机分配 MAC 地址。框架将时间间隔默认配置为 30 分钟。</p>
+<aside class="note"><strong>注意</strong>:<span>根据 WLAN 感知规范,配置 NDP 后,随机分配可能会被暂停。</span></aside></li>
+</ul>
 
 <h2 id="validation">验证</h2>
 
-<p>
-这项功能有适用的 Android 兼容性测试套件 (CTS) 测试。CTS 会检测何时启用了这项功能,并会自动包含相关测试。
-</p>
+<p>Android 提供了一组单元测试、集成测试 (ACTS)、<a href="/compatibility/cts">兼容性测试套件 (CTS)</a> 测试和 <a href="/compatibility/cts/verifier">CTS 验证程序</a>测试,以验证 WLAN 感知功能。您也可以使用<a href="/devices/tech/test_infra/tradefed/fundamentals/vts">供应商测试套件 (VTS)</a> 来测试 WLAN 感知功能。</p>
 
-<p>
-您也可以使用<a href="/devices/tech/test_infra/tradefed/fundamentals/vts">供应商测试套件 (VTS) </a>和 <a href="https://android.googlesource.com/platform/tools/test/connectivity/+/master/acts/tests/google/wifi/">acts/sl4a</a>(用于执行扩展程序集成测试的测试套件)来测试此功能。
-</p>
+<h3 id="unit_tests">单元测试</h3>
 
-<p>
-acts/sl4a 测试套件(在 <a href="https://android.googlesource.com/platform/tools/test/connectivity/+/master/acts/tests/google/wifi/aware/README.md">tools/test/connectivity/acts/tests/google/wifi/aware/README.md</a> 中有相应说明)提供了功能测试、性能测试和压力测试。
-</p>
+<p>WLAN 感知软件包测试:</p>
+
+<p>服务测试:</p>
+<pre class="prettyprint"><code>% ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh -e package
+com.android.server.wifi.aware
+</code></pre>
+<p>Manager 测试:</p>
+<pre class="prettyprint"><code>% ./frameworks/base/wifi/tests/runtests.sh -e package android.net.wifi.aware
+</code></pre>
+<h3 id="integration_tests_acts">集成测试 (ACTS)</h3>
+
+<p><code>acts/sl4a</code> 测试套件(在 <code>tools/test/connectivity/acts/tests/google/wifi/aware/README.md</code> 中有相应说明)提供了功能测试、性能测试和压力测试。</p>
+
+<h3 id="compatibility_test_suite_cts">兼容性测试套件 (CTS)</h3>
+
+<p>使用 CTS 测试来验证 WLAN 感知功能。CTS 会检测何时启用了这项功能,并会自动包含相关测试。</p>
+
+<p>可以使用以下方法触发 CTS 测试:</p>
+<pre class="prettyprint"><code>% atest SingleDeviceTest
+</code></pre>
+<h3 id="cts_verifier_tests">CTS 验证程序测试</h3>
+
+<p>CTS 验证程序测试使用以下两种设备验证 WLAN 感知行为:测试设备和已知良好的设备。<em></em>要运行测试,请打开 CTS 验证程序并转到“WLAN 感知测试”部分。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-debug.html b/zh-cn/devices/tech/connect/wifi-debug.html
new file mode 100644
index 0000000..af7d2c3
--- /dev/null
+++ b/zh-cn/devices/tech/connect/wifi-debug.html
@@ -0,0 +1,92 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="testing_and_debugging" class="page-title">测试和调试</h1>
+
+<p>本文将介绍如何使用 ASOP 中提供的工具测试和调试 WLAN 实现。</p>
+
+<h2 id="testing">测试</h2>
+
+<p>为了测试 WLAN 框架,AOSP 提供了一系列单元测试、集成测试 (ACTS) 和 CTS 测试。</p>
+
+<h3 id="unit_tests">单元测试</h3>
+
+<p>AOSP 包括针对默认 WLAN 框架的功能测试和单元测试:这两项测试均适用于 WLAN Manager(应用端代码)和 WLAN 服务。</p>
+
+<p>WLAN Manager 测试:</p>
+
+<ul>
+<li>位于 <code>frameworks/base/wifi/tests</code> 中</li>
+<li><p>使用以下 shell 可执行文件运行(有关更多执行选项,请参阅文件):</p>
+<pre class="prettyprint"><code>% ./frameworks/base/wifi/tests/runtest.sh
+</code></pre></li>
+</ul>
+
+<p>WLAN 服务测试:</p>
+
+<ul>
+<li>位于 <code>frameworks/opt/net/wifi/tests/wifitest</code> 中</li>
+<li><p>使用以下 shell 可执行文件运行(有关更多执行选项,请参阅文件):</p>
+<pre class="prettyprint"><code>% ./frameworks/opt/net/wifi/tests/wifitests/runtest.sh
+</code></pre></li>
+</ul>
+
+<h3 id="android_comms_test_suite">Android 通讯测试套件</h3>
+
+<p>Android 通讯测试套件 (ACTS) 用于执行对连接堆栈(例如 WLAN、蓝牙和移动网络服务)的自动测试。该测试工具需要 adb 和 Python,您可以在以下位置找到它:<code>tools/test/connectivity/acts</code>。</p>
+
+<p>您可以在以下位置找到针对 WLAN 的 ACTS 测试:<code>tools/test/connectivity/acts/tests/google/wifi</code>,而且同一目录下还包含以下示例测试配置:<code>example_config.json</code>。</p>
+
+<h3 id="cts_tests">CTS 测试</h3>
+
+<p><a href="/compatibility/cts/">兼容性测试套件</a> (CTS) 包括针对 WLAN 框架的测试。这些测试位于以下位置:<code>cts/tests/tests/net/src/android/net/wifi</code>。WLAN CTS 测试要求在测试开始运行时将受测设备与接入点相关联。</p>
+
+<h2 id="enhanced_logging_options">增强型日志记录选项</h2>
+
+<p>Android 9 改进了 WLAN 日志记录功能,以便更轻松地调试 WLAN 问题。在 Android 9 中,驱动程序/固件环形缓冲区可以始终处于开启状态。在检测到错误状态时,可能会自动触发错误报告(仅限 userdebug 和 eng 版本)。如果您使用的是最新 WLAN HAL(1.2 版),则固件调试缓冲区存储在 HAL 中而不是框架内,以节省 IPC 费用。</p>
+
+<h3 id="implementation">实现</h3>
+
+<p>有关参考实现,请参阅供应商 HAL 中的<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/wifi/">默认实现</a>。</p>
+
+<p>您可以通过将资源 <code>config_wifi_enable_wifi_firmware_debugging</code> 设置为 false 来停用固件日志记录。</p>
+
+<h3 id="integration_test_acts">集成测试 (ACTS)</h3>
+
+<p>您可以在以下位置找到集成测试:<code>/tools/test/connectivity/acts/tests/google/wifi/WifiDiagnosticsTest.py</code>。</p>
+
+<p>对于 userdebug 版本,已验证的固件转储会保留在闪存中相应的 tombstone 目录下。在创建错误报告时,Dumpstate 就是从此目录中收集的。</p>
+
+<h3 id="manual_test">手动测试</h3>
+
+<p>运行以下手动测试,以验证 <a href="https://source.android.com/devices/tech/debug/#debuggerd">tombstone 目录</a>中的旧文件是否已被删除。</p>
+
+<ol>
+<li>开启 WLAN。</li>
+<li>连接到网络。</li>
+<li>生成<a href="setup/contribute/read-bug-reports">错误报告</a>。</li>
+<li>检查 bugreport zip 文件并验证 <code>/lshal-debug/[email protected]__IWifi_default.txt</code> 中是否包含已归档的固件日志。</li>
+</ol>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-hal.html b/zh-cn/devices/tech/connect/wifi-hal.html
new file mode 100644
index 0000000..be4be71
--- /dev/null
+++ b/zh-cn/devices/tech/connect/wifi-hal.html
@@ -0,0 +1,67 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="wi_fi_hal" class="page-title">WLAN HAL</h1>
+
+<p>WLAN 框架具有三个 WLAN HAL 表面,分别由三个不同的 HIDL 软件包表示:</p>
+
+<ul>
+<li>供应商 HAL:Android 专用命令的 HAL 表面。HIDL 文件位于 <code>hardware/interfaces/wifi/1.x</code> 中。</li>
+<li>客户端 HAL:<strong>wpa_supplicant</strong> 的 HAL 表面。HIDL 文件位于 <code>hardware/interfaces/supplicant/1.x</code> 中。</li>
+<li>Hostapd HAL:<strong>hostapd</strong> 的 HAL 表面。HIDL 文件位于 <code>hardware/interfaces/hostapd/1.x</code> 中。</li>
+</ul>
+
+<h2 id="vendor_hal">供应商 HAL</h2>
+
+<p>供应商 HAL 提供 Android 专用命令。供应商 HAL 对于基础架构 Station (STA) 和 Soft AP (SAP) 模式的正常运行而言是可选的(不是必需的)。不过,对于 <a href="/devices/tech/connect/wifi-aware">WLAN 感知</a>和 <a href="/devices/tech/connect/wifi-rtt">WLAN RTT</a> 服务而言,供应商 HAL 是必需的。</p>
+
+<p>在 HIDL 之前(即 Android 8.0 版本之前),Android 使用的是现在称为“旧版 HAL”的 HAL 机制。<em></em>Android 源代码目前使用在旧版 HAL 之上运行的 shim 来提供 HIDL 默认实现。</p>
+
+<p>旧版 HAL 标头位于 <code>hardware/libhardware_legacy/include/hardware_legacy/</code> 中。基于旧版 HAL 的实现位于 <code>hardware/interfaces/wifi/1.2/default</code> 中。</p>
+
+<h2 id="supplicant_hal">客户端 HAL</h2>
+
+<p>客户端 HAL 为 <strong>wpa_supplicant</strong> 守护进程提供 HIDL 接口。</p>
+
+<p>wpa_supplicant 源代码位于 <code>external/wpa_supplicant_8/wpa_supplicant</code> 中。提供 HIDL 接口的 wpa_supplicant 代码位于 <code>hidl</code> 子目录中。</p>
+
+<h2 id="hostapd_hal">Hostapd HAL</h2>
+
+<p>Hostapd HAL 为 <strong>hostapd</strong> 守护进程提供 HIDL 接口。</p>
+
+<p>hostapd 源代码位于 <code>external/wpa_supplicant_8/hostapd</code> 中。提供 HIDL 接口的 hostapd 代码位于 <code>hidl</code> 子目录中。</p>
+
+<h2 id="wi_fi_multi_interface_concurrency">WLAN 多接口并发</h2>
+
+<p>不同的 Android 设备可以并行支持不同的 WLAN 接口组合。受支持的组合在 HAL 中定义,并提供给框架。规范格式在 <code>android/hardware/interfaces/wifi/1.0/IWifiChip.hal</code> 中定义。例如,一台设备可以支持一个 STA 和一个 NAN(<a href="https://developer.android.com/guide/topics/connectivity/wifi-aware">WLAN 感知</a>)类型或点对点(<a href="https://developer.android.com/guide/topics/connectivity/wifip2p">WLAN 直连</a>)类型的接口(但不能同时支持这两种接口)。这可以表示为:</p>
+
+<p><code>[{STA} &lt;= 1, {NAN,P2P} &lt;= 1]</code></p>
+
+<p>并发规范格式非常灵活,且是通用格式。它可以表示框架尚不支持的组合。参考 HAL 具有适合多种组合的配置,这些配置可通过编译标记进行启用。有关配置说明,请参阅:</p>
+
+<ul>
+<li><a href="/devices/tech/connect/wifi-sta-ap-concurrency">WLAN STA/AP 并发</a></li>
+<li><a href="/devices/tech/connect/wifi-aware">WLAN 感知</a></li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-infrastructure.html b/zh-cn/devices/tech/connect/wifi-infrastructure.html
index cbb7b00..3a1725e 100644
--- a/zh-cn/devices/tech/connect/wifi-infrastructure.html
+++ b/zh-cn/devices/tech/connect/wifi-infrastructure.html
@@ -5,6 +5,7 @@
   <meta name="project_path" value="/_project.yaml"/>
 </head>
 <body>
+
 <!--
   Copyright 2018 The Android Open Source Project
 
@@ -28,7 +29,7 @@
 <ul>
 <li><strong>打开网络通知</strong>:在有可用的优质开放 WLAN 网络时通知用户<em></em></li>
 <li><strong>自动开启 WLAN</strong>:当用户靠近之前保存的某个网络时,重新启用 WLAN</li>
-<li><strong>连接到开放网络</strong>:自动将用户连接到优质的开放 WLAN 网络<em></em></li>
+<li><strong>连接到开放网络</strong>:自动将用户连接到优质开放 WLAN 网络<em></em></li>
 <li><strong>标记</strong>:显示与可用网络的质量相关的信息</li>
 </ul>
 
@@ -73,12 +74,12 @@
 
 <h2 id="auto_connect_to_open_networks">自动连接到开放网络</h2>
 
-<p>“连接到开放网络”功能可自动将设备连接到可用的高品质网络。<em></em>相关条件如下:</p>
+<p>“连接到开放网络”功能在 Android 8.0 及更高版本中提供,可自动将设备连接到可用的优质网络。<em></em>相关条件如下:</p>
 
 <ul>
 <li>WLAN 已启用</li>
 <li>设备未连接到 WLAN 网络</li>
-<li>有<strong>开放</strong>且优质<em></em>(根据外部网络评分服务提供方<em></em>的报告判断)的 WLAN 网络(请参见下一节)</li>
+<li>有<strong>开放</strong>且优质<em></em>(根据外部网络评分服务提供方<em></em>的报告判断)的 WLAN 网络(请参见下一节)。</li>
 </ul>
 
 <p>用户可在设置应用中通过以下路径启用或停用该功能:</p>
diff --git a/zh-cn/devices/tech/connect/wifi-overview.html b/zh-cn/devices/tech/connect/wifi-overview.html
new file mode 100644
index 0000000..b2ea569
--- /dev/null
+++ b/zh-cn/devices/tech/connect/wifi-overview.html
@@ -0,0 +1,68 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="overview" class="page-title">概览</h1>
+
+<p>Android 提供默认 Android 框架实现,其中包括对各种 WLAN 协议和模式的支持,这些协议和模式包括:</p>
+
+<ul>
+<li>WLAN 基础架构 (STA)</li>
+<li>网络共享模式或仅限本地模式下的 WLAN 热点 (Soft AP)</li>
+<li>WLAN 直连(点对点)</li>
+<li>WLAN 感知 (NAN)</li>
+<li>WLAN RTT (IEEE 802.11mc FTM)</li>
+</ul>
+
+<p>使用 WLAN 服务的应用通过 Binder 直接与各种 WLAN 服务进行通信。WLAN 服务在系统服务中运行,并通过 HIDL 与 HAL 进行通信。下图显示了 Android WLAN 堆栈的常规结构。</p>
+
+<p><img src="/devices/tech/connect/images/wifi-arch.png" alt="WLAN 架构"/></p>
+
+<p><strong>图 1. </strong> Android WLAN 架构</p>
+
+<h2 id="application_framework">应用框架</h2>
+
+<p>应用代码位于应用框架级别,它使用各种 <a href="https://developer.android.com/reference/android/net/wifi/package-summary">android.net.wifi</a> API 与 WLAN 框架和硬件进行交互。此代码在内部通过 Binder IPC 机制调用 WLAN 进程。</p>
+
+<h2 id="wi_fi_services">WLAN 服务</h2>
+
+<p>WLAN 服务在系统服务中运行,这类服务位于 <code>frameworks/opt/net/wifi</code> 中。WLAN 服务通过 HIDL 与 WLAN HAL 进行通信。</p>
+
+<p>WLAN 服务有很多种:</p>
+
+<ul>
+<li>WLAN 服务:用于控制 WLAN 基础架构模式(包括 STA 和 AP)的主要机制。</li>
+<li>WLAN 点对点服务:管理 WLAN 直连模式。</li>
+<li>WLAN 感知服务:管理 WLAN 感知模式。</li>
+<li>WLAN RTT 服务:管理 IEEE 802.11mc FTM 功能。</li>
+</ul>
+
+<p>此外,WLAN 框架还包括一个独立的进程 <strong>wificond</strong>,此进程位于 <code>system/connectivity/wificond</code> 中。<strong>wificond</strong> 进程通过标准 <code>nl80211</code> 命令与 WLAN 驱动程序进行通信。</p>
+
+<h2 id="wi_fi_hals">WLAN HAL</h2>
+
+<p>WLAN 框架具有三个 WLAN HAL 表面,分别由三个不同的 HIDL 软件包表示:供应商 HAL、客户端 HAL 和 Hostapd HAL。</p>
+
+<p>要详细了解各种 HAL 的实现,请参阅 <a href="/devices/tech/connect/wifi-hal">WLAN HAL</a>。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-rtt.html b/zh-cn/devices/tech/connect/wifi-rtt.html
new file mode 100644
index 0000000..504d9d6
--- /dev/null
+++ b/zh-cn/devices/tech/connect/wifi-rtt.html
@@ -0,0 +1,115 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="wi_fi_rtt_ieee_80211mc" class="page-title">WLAN RTT (IEEE 802.11mc)</h1>
+
+<p>Android 9 中的 <a href="https://developer.android.com/reference/android/net/wifi/rtt/package-summary">WLAN 往返时间 (RTT)</a> 功能允许设备测量与其他支持设备的距离:无论它们是接入点 (AP) 还是 WLAN 感知对等设备(如果设备支持 <a href="/devices/tech/connect/wifi-aware">WLAN 感知</a>)。此功能基于 IEEE 802.11mc 协议,使应用能够使用准确性更高的定位功能和增强的感知功能。</p>
+
+<h2 id="examples_and_source">示例和来源</h2>
+
+<p>要使用此功能,请采用在 Android 开源项目 (AOSP) 中提供的 WLAN 硬件接口设计语言 (HIDL)。在 Android 8.0 中,HIDL 取代了之前使用的硬件抽象层 (HAL) 结构,以便通过指定收集到接口和软件包的类型和方法调用来简化实现流程。</p>
+
+<p>借助 WLAN HIDL 使用 WLAN RTT 功能:<code>hardware/interfaces/wifi/1.0</code> 或更高版本。</p>
+
+<p>您可以参考旧版 WLAN HAL 来了解它与新 HIDL 接口之间的关系:<a href="https://android.googlesource.com/platform/hardware/libhardware_legacy/+/master/include/hardware_legacy/rtt.h">hardware/libhardware_legacy/+/master/include/hardware_legacy/rtt.h</a>。</p>
+
+<h2 id="implementation">实现</h2>
+
+<p>要实现 WLAN RTT,您必须提供框架和 HAL/固件支持:</p>
+
+<ul>
+<li><p>框架:</p>
+
+<ul>
+<li>AOSP 代码</li>
+<li>启用 WLAN RTT:需要功能标记</li>
+</ul></li>
+<li><p>WLAN RTT (IEEE 802.11mc) HAL 支持(意味着固件支持)</p></li>
+</ul>
+
+<p>要实现此功能,请采用 WLAN HIDL,另外还要启用功能标记:</p>
+
+<ul>
+<li><p>在位于 <code>device/&lt;oem&gt;/&lt;device&gt;</code> 的 <code>device.mk</code> 中,修改 <code>PRODUCT_COPY_FILES</code> 环境变量,以便支持 WLAN RTT 功能:</p>
+<pre class="prettyprint"><code>PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.wifi.rtt.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.rtt.xml
+</code></pre></li>
+</ul>
+
+<p>除此以外,实现此功能所需的所有内容都会包含在 AOSP 中。</p>
+
+<h2 id="mac_randomization">随机分配 MAC 地址</h2>
+
+<p>为加强隐私保护,在 WLAN RTT 事务期间使用的 MAC 地址必须是随机分配的地址,即不得与 WLAN 接口的原生 MAC 地址一致。不过,有一种例外情况:如果某个设备与 AP 相关联,则此设备可能会使用与其相关联的 MAC 地址来处理与此 AP 或其他 AP 之间的任何 RTT 事务。</p>
+
+<h2 id="validation">验证</h2>
+
+<p>这项功能有适用的 Android 兼容性测试套件 (CTS) 测试。CTS 会检测何时启用了这项功能,并会自动包含相关测试。您也可以使用<a href="/devices/tech/test_infra/tradefed/fundamentals/vts">供应商测试套件 (VTS)</a> 和 <a href="https://android.googlesource.com/platform/tools/test/connectivity/+/master/acts/tests/google/wifi/">acts/sl4a</a>(用于执行扩展程序集成测试的测试套件)来测试此功能。</p>
+
+<h3 id="unit_tests">单元测试</h3>
+
+<p>使用以下测试执行 WLAN RTT 软件包测试:</p>
+
+<p>服务测试:</p>
+<pre class="prettyprint"><code>% ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh -e package
+com.android.server.wifi.rtt
+</code></pre>
+<p>Manager 测试:</p>
+<pre class="prettyprint"><code>% ./frameworks/base/wifi/tests/runtests.sh -e package android.net.wifi.rtt
+</code></pre>
+<h3 id="integration_acts_tests">集成 (ACTS) 测试</h3>
+
+<p>acts/sl4a 测试套件(在 <code>/tools/test/connectivity/acts/tests/google/wifi/rtt/README.md</code> 中有相应说明)提供了功能测试、性能测试和压力测试。</p>
+
+<h3 id="cts">CTS</h3>
+
+<p>这项功能有适用的 Android 兼容性测试套件 (CTS) 测试。CTS 会检测何时启用了这项功能,并会自动包含相关测试。支持 WLAN RTT (IEEE 802.11mc) 的接入点必须位于被测设备的覆盖范围内。</p>
+
+<p>您可以使用以下命令触发 CTS 测试:</p>
+<pre class="prettyprint"><code>% atest WifiRttTest
+</code></pre>
+<h2 id="calibration">校准</h2>
+
+<p>为了确保 WLAN RTT 能够正常运行,802.11mc 协议中返回的距离的精确度应在关键绩效指标 (KPI) 范围内(理想情况下)。对于所列带宽出现的 90% 的 CDF 错误,针对距离估算值建议的 KPI 具有以下容差:</p>
+
+<ul>
+<li>80MHz:2 米</li>
+<li>40MHz:4 米</li>
+<li>20MHz:8 米</li>
+</ul>
+
+<p>为确保正确实现功能,您必须进行校准测试。</p>
+
+<p>您可以通过以下方式来实现这项测试:通过不断增加距离,比较地面真实距离和 RTT 估算距离。如果真实距离和 RTT 估算距离基本一致,则您应该针对已知已进行 RTT 校准的设备验证解决方案。距离校准应在下列条件下进行测试:</p>
+
+<ol>
+<li>大型开放实验室或没有大量金属物体(金属物体可能会导致多路径异常高发)的走廊。</li>
+<li>视线 (LOS) 路线/路径至少要延长 25 米。</li>
+<li>从路线一端到另一端以每次增加 0.5 米的方式标记。</li>
+<li>选择一个位于路线一端的位置来安装支持 RTT 的接入点(位于地面以上 20 厘米处);一个可移动支架(也位于地面上方 20 厘米处),用于沿路线移动 Android 手机(或接受测试的其他 Android 移动设备),可移动支架应与每隔 0.5 米出现的标记对齐。注意:这项重复性任务可由小型机器人来完成,也可以由人工操作员来完成。</li>
+<li>每个标记处应记录 50 个距离结果,同时应记录相应标记距离接入点的距离。应在每个标记位置处计算统计信息(例如距离均值和方差)。</li>
+</ol>
+
+<p>您可以根据第 5 步中的结果绘制一个图表,其中 X 轴为地面真实距离,Y 轴为估算距离,以及一条估算出的最合适的回归路线。理想的设备校准会产生一条梯度为 1.0 的线,且 Y 轴的偏差为 0.0 米。如果这些值的偏差落在相应带宽的 KPI 范围内,则这些偏差是可接受的。如果结果超过 KPI 范围,则应该重新校准设备功能,以使结果符合 KPI 规范。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-sta-ap-concurrency.html b/zh-cn/devices/tech/connect/wifi-sta-ap-concurrency.html
new file mode 100644
index 0000000..0b28ca5
--- /dev/null
+++ b/zh-cn/devices/tech/connect/wifi-sta-ap-concurrency.html
@@ -0,0 +1,67 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="wi_fi_staap_concurrency" class="page-title">WLAN STA/AP 并发</h1>
+
+<p>Android 9 引入了可让设备同时在 STA 和 AP 模式下运行的功能。对于支持双频并发 (DBS) 的设备,此功能让一些新功能得以实现,例如在用户想要启用热点 (softAP) 时不会中断 STA WLAN。</p>
+
+<h2 id="examples_and_source">示例和来源</h2>
+
+<p>默认的 AOSP Android 框架代码支持 WLAN STA/AP 并发。<a href="/devices/tech/connect/wifi-hal">WLAN HAL</a> 中介绍的参考 HAL 实现也支持 WLAN STA/AP 并发。下文“实现”部分中介绍的 <code>WIFI_HIDL_FEATURE_DUAL_INTERFACE</code> 编译时标记会启用接口并发规范(指示 STA 和 AP 的并发支持)。</p>
+
+<h2 id="implementation">实现</h2>
+
+<p>要在设备上实现 WLAN STA/AP 并发,请执行以下操作:</p>
+
+<ol>
+<li><p>开启编译时标记以在 HAL 中启用对这两个接口的支持。该标记位于 <code>device/&lt;oem&gt;/&lt;device&gt;/BoardConfig-common.mk</code> 中。</p>
+
+<ul>
+<li><strong>WIFI_HIDL_FEATURE_DUAL_INTERFACE := true</strong></li>
+</ul></li>
+<li><p>显示两个网络接口:</p>
+
+<ul>
+<li><strong>wlan0</strong> 和 <strong>wlan1</strong></li>
+</ul></li>
+</ol>
+<aside class="note"><strong>注意</strong>:<span>为了避免出现性能问题,请仅在采用支持多个独立硬件 MAC(无线链路)的 WLAN 芯片的设备上使用此功能。</span></aside>
+<h2 id="validation">验证</h2>
+
+<p>要验证该功能是否按预期正常运行,请同时执行集成测试 (ACTS) 和手动测试。</p>
+
+<p>ACTS 文件 <code>WifiStaApConcurrencyTest.py</code>(位于 <code>tools/test/connectivity/acts/tests/google/wifi</code> 中)包含一组可以启动不同 STA 和 AP 组合的测试。</p>
+
+<p>要手动验证此功能,请从界面中单独开启和关闭 STA 和 AP 接口。</p>
+
+<p>如果 AP 和 STA 位于同一子网上,则被测设备 (DUT) 上可能会出现路由问题。为避免冲突,请尝试将 AP 移动到其他子网。</p>
+
+<p>如果 STA 和 AP 位于同一频段但却在不同的频道上,则一些 WLAN 芯片供应商会将无线置于分时共享模式。这种做法会导致性能急剧下降。为了解决此问题,芯片可以使用 Channel Switch Avoidance (CSA) 以便:</p>
+
+<ul>
+<li>将 AP 移动到 STA 所在的频道</li>
+<li>将 AP 移动到非 STA 所在的频段</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/dalvik/dex-format.html b/zh-cn/devices/tech/dalvik/dex-format.html
index 3791cda..c726114 100644
--- a/zh-cn/devices/tech/dalvik/dex-format.html
+++ b/zh-cn/devices/tech/dalvik/dex-format.html
@@ -292,7 +292,7 @@
 <tr>
   <td>ACC_STATIC</td>
   <td>0x8</td>
-  <td><super>*</super><code>static</code>:未通过外部 <code>this</code> 引用进行构建</td>
+  <td><super>*</super><code>static</code>:无法进行外部 <code>this</code> 引用</td>
   <td><code>static</code>:对定义类全局可见</td>
   <td><code>static</code>:不采用 <code>this</code> 参数</td>
 </tr>
@@ -412,7 +412,7 @@
 </tbody>
 </table>
 
-<p><super>*</super> 仅允许用于 <code>InnerClass</code> 注释,且一律不得在 <code>class_def_item</code> 中使用。</p>
+<p><super>*</super>仅允许用于 <code>InnerClass</code> 注释,且一律不得在 <code>class_def_item</code> 中使用。</p>
 
 <h3 id="mutf-8">MUTF-8(修改后的 UTF-8)编码</h3>
 
@@ -429,7 +429,7 @@
 
 <p>后两项说明,MUTF-8 既可在字符串中包含代码点 <code>U+0000</code>,同时仍可将其作为 C 样式的 Null 终止字符串进行操作。<i></i></p>
 
-<p>不过,特殊编码 <code>U+0000</code> 意味着,与一般 UTF-8 不同的是,针对一对 MUTF-8 字符串调用标准 C 函数 <code>strcmp()</code> 的结果并不一定表示不相等字符串的带有正确符号的比较结果。<i></i>当需要考虑排序问题(而不仅仅是相等问题)时,用于比较 MUTF-8 字符串的最简单方法是对其字符进行逐个解码,然后比较解码后的值(不过,也许会有更智能的实现方法)。</p>
+<p>不过,特殊编码 <code>U+0000</code> 意味着,与一般 UTF-8 不同的是,针对一对 MUTF-8 字符串调用标准 C 函数 <code>strcmp()</code> 的结果并不一定表示不相等字符串的带正确符号比较结果。<i></i>当需要考虑排序问题(而不仅仅是相等问题)时,用于比较 MUTF-8 字符串的最简单方法是对其字符进行逐个解码,然后比较解码后的值(不过,也许会有更智能的实现方法)。</p>
 
 <p>有关字符编码的详情,请参阅 <a href="http://unicode.org">Unicode 标准</a>。实际上,MUTF-8 比 UTF-8 本身更接近相对而言不太为人熟知的编码 <a href="http://www.unicode.org/reports/tr26/">CESU-8</a>。</p>
 
@@ -694,7 +694,7 @@
 
 <h3 id="simplename"><i>SimpleName</i></h3>
 
-<p><i></i>SimpleName 是其他内容的名称语法的基础。<code>.dex</code> 格式在这方面具有相当大的宽容度(比大多数常见源语言更大)。简而言之,一个简单的名称包含任意低 ASCII 范围的字母字符或数字、几个特定的低 ASCII 范围的符号,以及不属于控件、空格或特殊字符的大多数非 ASCII 代码点。请注意,代理代码点(位于 <code>U+d800</code> … <code>U+dfff</code> 范围内)本身不会被视为有效名称字符,但 Unicode 补充字符会被视为有效字符(由 SimpleNameChar 规则的最终替代方案表示),它们应在文件中表示为 MUTF-8 编码中的代理代码点对。<i></i><i></i></p>
+<p><i></i>SimpleName 是其他内容的名称语法的基础。<code>.dex</code> 格式在这方面具有相当大的宽容度(比大多数常见源语言更大)。简而言之,一个简单的名称包含任意低 ASCII 范围的字母字符或数字、几个特定的低 ASCII 范围的符号,以及不属于控件、空格或特殊字符的大多数非 ASCII 代码点。请注意,代理代码点(位于 <code>U+d800</code>…<code>U+dfff</code> 范围内)本身不会被视为有效名称字符,但 Unicode 补充字符会被视为有效字符(由 SimpleNameChar 规则的最终替代方案表示),它们应在文件中表示为 MUTF-8 编码中的代理代码点对。<i></i><i></i></p>
 
 <table class="bnf">
   <tbody><tr><td colspan="2" class="def"><i>SimpleName</i> →</td></tr>
@@ -1360,7 +1360,7 @@
   <td>data</td>
   <td>ubyte[]</td>
   <td>一系列 MUTF-8 代码单元(又称八位字节),后跟一个值为 <code>0</code> 的字节。请参阅上文中的“MUTF-8(修改后的 UTF-8)编码”,了解有关该数据格式的详情和讨论。
-    <p class="note"><strong>注意</strong>:在 UTF-16 中进行 Unicode 常规编码时,字符串可以包含(编码形式的)UTF-16 代理代码单元(即 <code>U+d800</code> … <code>U+dfff</code>),这些代码单元既可以单独出现,也可以乱序显示。在适用的情况下,可以进阶使用字符串来拒绝这类无效编码。</p>
+    <p class="note"><strong>注意</strong>:将 Unicode 常规地编码为 UTF-16 时,字符串可以包含(编码形式的)UTF-16 代理代码单元(即 <code>U+d800</code>…<code>U+dfff</code>),这些代码单元既可以单独出现,也可以乱序显示。在适用的情况下,可以进阶使用字符串来拒绝这类无效编码。</p>
   </td>
 </tr>
 </tbody>
@@ -1670,6 +1670,21 @@
   <td>0x05</td>
   <td>方法句柄是实例方法调用器</td>
 </tr>
+<tr>
+  <td>METHOD_HANDLE_TYPE_INVOKE_CONSTRUCTOR</td>
+  <td>0x06</td>
+  <td>方法句柄是构造函数方法调用器</td>
+</tr>
+<tr>
+  <td>METHOD_HANDLE_TYPE_INVOKE_DIRECT</td>
+  <td>0x07</td>
+  <td>方法句柄是直接方法调用器</td>
+</tr>
+<tr>
+  <td>METHOD_HANDLE_TYPE_INVOKE_INTERFACE</td>
+  <td>0x08</td>
+  <td>方法句柄是接口方法调用器</td>
+</tr>
 </tbody>
 </table>
 
@@ -2573,7 +2588,7 @@
 <h3 id="dalvik-innerclass">dalvik.annotation.InnerClass</h3>
 <h4>在类中显示</h4>
 
-<p><code>InnerClass</code> 注释会附加到已在其他类定义的词法作用域中定义的各个类。具有此注释的所有类还必须具有 <code>EnclosingClass</code> 注释或 <code>EnclosingMethod</code> 注释。<i></i><i></i></p>
+<p><code>InnerClass</code> 注释会附加到已在其他类定义的词法作用域中定义的各个类。<i></i><i></i>具有此注释的所有类还必须具有 <code>EnclosingClass</code> 注释或 <code>EnclosingMethod</code> 注释。</p>
 
 <table class="format">
 <thead>
@@ -2663,7 +2678,9 @@
     <li>0x0010:final,表示该参数被声明为 final</li>
     <li>0x1000:synthetic,表示该参数由编译器引入</li>
     <li>0x8000:mandated,表示该参数是合成参数,但同样由语言规范所暗示</li>
-  </ul>如果任何位在此集合之外进行设置,则运行时会抛出 <code>java.lang.reflect.MalformedParametersException</code>。
+  </ul>
+
+如果任何位在此集合之外进行设置,则运行时会抛出 <code>java.lang.reflect.MalformedParametersException</code>。
   </td>
 </tr>
 </tbody>
@@ -2674,7 +2691,7 @@
 
 <p><code>Signature</code> 注释会附加到各个类、字段或方法(按照比 <code>type_id_item</code> 所表示的类型更复杂的类型进行定义)。<code>.dex</code> 格式不定义签名的格式;它仅仅能够表示源语言成功实现该语言的语义所需要的任何签名。因此,签名通常不会通过虚拟机实现进行解析(或验证)。这些签名只会传递给更高级别的 API 和工具(如调试程序)。因此,每次使用签名时都应该记录下来,以免就只接收有效签名作出任何假设,从而明确防止出现句法无效的签名。</p>
 
-<p>由于签名字符串往往包含很多重复内容,因此 <code>Signature</code> 注释会被定义为字符串的数组,其中的重复元素会自然地引用相同的基本数据,而签名则被视为该数组中所有字符串的连接。<i></i>对于如何将签名分割成单独的字符串,则没有任何规则;这完全取决于生成 <code>.dex</code> 文件的工具。</p>
+<p>由于签名字符串往往包含很多重复内容,因此 <code>Signature</code> 注释会被定义为字符串数组,其中的重复元素会自然地引用相同的基本数据,而签名则被视为该数组中所有字符串的连接。<i></i>对于如何将签名分割成单独的字符串,则没有任何规则;这完全取决于生成 <code>.dex</code> 文件的工具。</p>
 
 <table class="format">
 <thead>
diff --git a/zh-cn/devices/tech/dalvik/index.html b/zh-cn/devices/tech/dalvik/index.html
index 928243e..c0e72a5 100644
--- a/zh-cn/devices/tech/dalvik/index.html
+++ b/zh-cn/devices/tech/dalvik/index.html
@@ -70,7 +70,7 @@
 
 <h4 id="Crash_Reports">优化了异常和崩溃报告中的诊断详细信息</h4>
 
-<p>当发生运行时异常时,ART 会为您提供尽可能多的上下文和详细信息。ART 会提供 <code><a href="http://developer.android.com/reference/java/lang/ClassCastException.html">java.lang.ClassCastException</a></code>、<code><a href="http://developer.android.com/reference/java/lang/ClassNotFoundException.html">java.lang.ClassNotFoundException</a></code> 和 <code><a href="http://developer.android.com/reference/java/lang/NullPointerException.html">java.lang.NullPointerException</a></code> 的更多异常详细信息(较高版本的 Dalvik 会提供 <code><a href="http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html">java.lang.ArrayIndexOutOfBoundsException</a></code> 和 <code><a href="http://developer.android.com/reference/java/lang/ArrayStoreException.html">java.lang.ArrayStoreException</a></code> 的更多异常详细信息,这些信息现在包括数组大小和超出范围的偏移量;ART 也提供这类信息)。</p>
+<p>当发生运行时异常时,ART 会为您提供尽可能多的上下文和详细信息。ART 会提供 <code><a href="http://developer.android.com/reference/java/lang/ClassCastException.html">java.lang.ClassCastException</a></code>、<code><a href="http://developer.android.com/reference/java/lang/ClassNotFoundException.html">java.lang.ClassNotFoundException</a></code> 和 <code><a href="http://developer.android.com/reference/java/lang/NullPointerException.html">java.lang.NullPointerException</a></code> 的更多异常详细信息(较高版本的 Dalvik 会提供 <code><a href="http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html">java.lang. ArrayIndexOutOfBoundsException</a></code> 和 <code><a href="http://developer.android.com/reference/java/lang/ArrayStoreException.html">java.lang.ArrayStoreException</a></code> 的更多异常详细信息,这些信息现在包括数组大小和超出范围的偏移量;ART 也提供这类信息)。</p>
 
 <p>例如,<code><a href="http://developer.android.com/reference/java/lang/NullPointerException.html">java.lang.NullPointerException</a></code> 现在会显示有关应用尝试处理 null 指针时所执行操作的信息(例如应用尝试写入的字段或尝试调用的方法)。一些典型示例如下:</p>
 
diff --git a/zh-cn/devices/tech/datausage/index.html b/zh-cn/devices/tech/datausage/index.html
index 8bce4d8..aeb3dfb 100644
--- a/zh-cn/devices/tech/datausage/index.html
+++ b/zh-cn/devices/tech/datausage/index.html
@@ -20,8 +20,8 @@
       limitations under the License.
   -->
 
-<p>Android 4.0 引入了新功能,可帮助用户了解和控制他们的设备如何使用网络数据。这项新功能可监测数据的整体使用情况,并支持将会触发通知或停用移动数据(当数据用量超出特定配额时)的警告或限制阈值。</p>
-<p>该功能还会跟踪每个应用的数据使用情况,这样一来,用户就可以在“设置”应用中直观地了解过往的数据使用情况。用户还可以限制特定应用在后台运行时的数据使用方式。</p>
+<p>Android 可帮助用户了解和控制设备使用网络流量的方式。这项新功能可监测流量的整体使用情况,并支持将会触发通知或停用移动数据(当数据用量超出特定配额时时)的警告或限制阈值。</p>
+<p>该功能还会跟踪每个应用的流量消耗情况,这样一来,用户就可以在<a href="/devices/tech/settings/settings-guidelines">设置</a>应用中直观地了解过往的流量消耗情况。用户还可以限制特定应用在后台运行时的流量使用方式。</p>
 <p>本部分中的文档面向系统集成商和移动运营商,目的是向他们说明将 Android 移植到特定设备时应注意的技术细节。这些细节在下文中有总结,若要进一步讨论,请前往 <a href="mailto:[email protected]">android-porting</a> 论坛。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/datausage/kernel-changes.html b/zh-cn/devices/tech/datausage/kernel-changes.html
index fcf47b4..7754537 100644
--- a/zh-cn/devices/tech/datausage/kernel-changes.html
+++ b/zh-cn/devices/tech/datausage/kernel-changes.html
@@ -4,6 +4,7 @@
     <meta name="book_path" value="/_book.yaml"/>
   </head>
   <body>
+
   <!--
       Copyright 2017 The Android Open Source Project
 
@@ -31,7 +32,8 @@
 <p>关于内核配置的几条注释:</p>
 <ul>
 <li>xt_qtaguid 伪装成 xt_owner 并依赖于 xt_socket,而它本身则依赖于连接跟踪器。</li>
-<li>连接跟踪器无法处理大型 SIP 数据包,因此必须禁用。</li>
+<li>我们将从 Android 9 版本开始逐步取消对 xt_qtaguid 的支持。有关详情,请参阅 <a href="ebpf-traffic-monitor">eBPF 流量监控</a>。
+</li><li>连接跟踪器无法处理大型 SIP 数据包,因此必须停用。</li>
 <li>经过修改的 xt_quota2 使用 NFLOG 支持来通知用户空间。</li>
 </ul>
 
diff --git a/zh-cn/devices/tech/debug/cfi.html b/zh-cn/devices/tech/debug/cfi.html
new file mode 100644
index 0000000..bb3ecc3
--- /dev/null
+++ b/zh-cn/devices/tech/debug/cfi.html
@@ -0,0 +1,108 @@
+<html devsite><head>
+    <title>控制流完整性</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>
+从 2016 年开始,Android 上大约 86% 的漏洞与内存安全相关。大多数漏洞被攻击者所利用,他们会改变应用的正常控制流,获取遭利用的应用的所有权限来执行任意恶意活动。
+<a href="https://clang.llvm.org/docs/ControlFlowIntegrity.html">控制流完整性 (CFI)</a> 是一种安全机制,它不允许更改已编译二进制文件的原始控制流图,因而执行此类攻击变得异常困难。
+</p>
+<p>
+在 Android 8.1 中,我们在媒体堆栈中启用了 LLVM 的 CFI 实现。在 Android 9 中,我们在更多组件以及内核中启用了 CFI。系统 CFI 默认处于启用状态,但内核 CFI 需要您手动启用。</p>
+<p>
+LLVM 的 CFI 需要使用<a href="https://llvm.org/docs/LinkTimeOptimization.html">链接时优化 (LTO)</a> 进行编译。LTO 会一直保留对象文件的 LLVM 位码表示法直至链接时,以便编译器更好地推断可以执行哪些优化。启用 LTO 可缩减最终二进制文件的大小并提高性能,但会增加编译时间。在 Android 上进行测试时,结合使用 LTO 和 CFI 对代码大小和性能开销的影响微乎其微;在少数情况下,这两者都会有所改善。
+</p>
+<p>
+有关 CFI 以及如何处理其他前向控制检查的更多技术详情,请参阅 <a href="https://clang.llvm.org/docs/ControlFlowIntegrityDesign.html">LLVM 设计文档</a>。
+</p>
+
+<h2 id="examples">示例和来源</h2>
+<p>
+CFI 由编译器提供,在编译期间将插桩添加到二进制文件中。我们支持 Clang 工具链中的 CFI 和 AOSP 中的 Android 编译系统。</p>
+<p>
+对于 Arm64 设备位于 <code><a href="https://android.googlesource.com/platform/build/+/master/target/product/cfi-common.mk">/platform/build/target/product/cfi-common.mk</a></code> 的一组组件,默认情况下,CFI 是启用的。在一组媒体组件的 makefiles/blueprint 文件中,例如 <code><a href="https://android.googlesource.com/platform/frameworks/av/+/master/media/libmedia/Android.bp#117">/platform/frameworks/av/media/libmedia/Android.bp</a></code> 和 <code><a href="https://android.googlesource.com/platform/frameworks/av/+/master/cmds/stagefright/Android.mk#188">/platform/frameworks/av/cmds/stagefright/Android.mk</a></code>,它也是直接启用的。
+
+</p><h2 id="system-cfi">实现系统 CFI</h2>
+<p>
+如果您使用 Clang 和 Android 编译系统,则 CFI 默认处于启用状态。CFI 有助于确保 Android 用户安全无虞,因此请勿将其停用。
+</p>
+<p>
+事实上,我们强烈建议您针对更多组件启用 CFI。理想对象是特权原生代码,或处理不受信任的用户输入的原生代码。如果您使用 Clang 和 Android 编译系统,则可以通过向 makefile 或 blueprint 文件中添加几行代码以在新组件中启用 CFI。
+</p>
+
+<h3 id="cf-in-mk">在 makefile 中启用 CFI</h3>
+<p>
+要在 makefile(例如 <code><a href="https://android.googlesource.com/platform/frameworks/av/+/master/cmds/stagefright/Android.mk#188">/platform/frameworks/av/cmds/stagefright/Android.mk</a></code>)中启用 CFI,请添加以下几行代码:</p><pre class="prettyprint">LOCAL_SANITIZE := cfi
+# Optional features
+LOCAL_SANITIZE_DIAG := cfi
+LOCAL_SANITIZE_BLACKLIST := cfi_blacklist.txt</pre>
+<ul>
+  <li><code>LOCAL_SANITIZE</code> 在编译过程中将 CFI 指定为排错程序。</li>
+  <li><code>LOCAL_SANITIZE_DIAG</code> 打开 CFI 的诊断模式。诊断模式会在崩溃期间在 logcat 中输出额外的调试信息,这在开发和测试编译时很有用。不过,请务必对正式版编译移除诊断模式。</li>
+  <li><code>LOCAL_SANITIZE_BLACKLIST</code> 支持组件针对个别函数或源代码文件选择性地停用 CFI 插桩。在万不得已时,您可以使用黑名单来修复可能以其他方式存在的任何用户会遇到的问题。如需了解详情,请参阅<a href="#disabling-cfi">停用 CFI</a>。</li>
+</ul>
+<h3 id="cfi-in-bp">在 blueprint 文件中启用 CFI</h3>
+<p>
+要在 blueprint 文件(例如 <code><a href="https://android.googlesource.com/platform/frameworks/av/+/master/media/libmedia/Android.bp#117">/platform/frameworks/av/media/libmedia/Android.bp</a></code>)中启用 CFI,请添加以下几行代码:</p>
+
+<pre class="prettyprint">   sanitize: {
+        cfi: true,
+        diag: {
+            cfi: true,
+        },
+        blacklist: "cfi_blacklist.txt",
+    },</pre>
+
+<h3 id="troubleshooting">问题排查</h3>
+<p>
+如果您在新组件中启用 CFI,则可能会遇到以下问题:函数类型不匹配错误和汇编代码类型不匹配错误。<em></em><em></em>
+</p>
+<p>
+如果发生函数类型不匹配错误,则可能是因为 CFI 将间接调用限制为仅跳转到如下函数:与调用中使用的静态类型具有相同的动态类型。CFI 将虚拟和非虚拟成员函数调用限制为仅跳转到如下对象:用于发出调用的对象的静态类型派生类。也就是说,如果您的代码违反这些假设中的任何一个,CFI 添加的插桩将终止。例如,堆栈轨迹显示 SIGABRT,logcat 则包含一行与发现不匹配的控制流完整性有关的信息。
+</p>
+<p>
+为修复此问题,请确保被调用函数具有静态声明的类型。以下是两个示例 CL:</p>
+<ul>
+<li><strong>蓝牙</strong>:<a href="https://android-review.googlesource.com/c/platform/system/bt/+/532377">/c/platform/system/bt/+/532377</a></li>
+<li><strong>NFC</strong>:<a href="https://android-review.googlesource.com/c/platform/system/nfc/+/527858">/c/platform/system/nfc/+/527858</a></li>
+</ul>
+<p>
+另一个可能的问题是尝试在包含要汇编的间接调用的代码中启用 CFI。由于未指定汇编代码的类型,因此这会导致类型不匹配。
+</p>
+<p>
+为修复此问题,请为每个汇编调用创建原生代码封装容器,并为封装容器提供与调用指针相同的函数签名。然后,封装容器便可直接调用汇编代码。由于直接分支不由 CFI 进行插桩测试(它们不能在运行时重新定向,因此不会产生安全风险),因此这样做可以修复此问题。
+</p>
+<p>
+如果存在太多汇编函数且无法全部修复这些函数,您还可以将包含要汇编的间接调用的所有函数加入黑名单。我们建议不要采用这种做法,因为这样做会停用对这些函数进行 CFI 检查的功能,从而面临被攻击的风险。
+</p>
+<h3 id="disabling-cfi">停用 CFI</h3>
+<p>
+我们并未监测到任何性能开销,因此您不需要停用 CFI。不过,如果用户会受到影响,您可以通过在编译时提供排错程序黑名单文件,针对个别函数或源代码文件有选择性地停用 CFI。该黑名单会指示编译器停用指定位置的 CFI 插桩。
+</p>
+<p>
+Android 编译系统为 Make 和 Soong 提供对每个组件黑名单(允许您选择不接收 CFI 插桩的源代码文件或个别函数)的支持。有关黑名单文件格式的更多详情,请参阅<a href="https://clang.llvm.org/docs/ControlFlowIntegrity.html#blacklist">上游 Clang 文档</a>。
+</p>
+
+<h2 id="validation">验证</h2>
+<p>
+目前没有专门针对 CFI 的 CTS 测试。不过,您可以确保无论是否启用 CFI,CTS 测试均能通过,从而确定 CFI 不会影响设备。
+</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/debug/gdb.html b/zh-cn/devices/tech/debug/gdb.html
index 7f17247..7ef3867 100644
--- a/zh-cn/devices/tech/debug/gdb.html
+++ b/zh-cn/devices/tech/debug/gdb.html
@@ -24,14 +24,16 @@
 
 <h2 id="running">调试运行中的应用或进程</h2>
 
-<p>要连接到已在运行的应用或本机守护进程,请配合使用 <code>gdbclient</code> 和 PID。例如,要调试 PID 为 1234 的进程,请运行:</p>
+<p>要连接到已在运行的应用或本机守护进程,请配合使用 <code>gdbclient.py</code> 和 PID。例如,要调试 PID 为 1234 的进程,请运行:</p>
 
 <pre class="devsite-terminal devsite-click-to-copy">
-gdbclient 1234
+gdbclient.py -p 1234
 </pre>
 
 <p>此脚本会设置端口转发,在设备上启动相应的 <code>gdbserver</code>,在主机上启动相应的 <code>gdb</code>,配置 <code>gdb</code> 以找出符号,然后将 <code>gdb</code> 连接到远程 <code>gdbserver</code>。</p>
 
+<aside class="note"><strong>注意</strong>:在 Android 6 及更早版本中,该脚本是一个名为 <code>gdbclient</code> 的 Shell 脚本,而不是名为 <code>gdbclient.py</code> 的 Python 脚本。</aside>
+
 <h2 id="starts">调试本机进程启动</h2>
 
 <p>要在进程启动时对其进行调试,请使用 <code>gdbserver</code> 或 <code>gdbserver64</code>(适用于 64 位进程)。例如:</p>
@@ -49,7 +51,7 @@
 <p>接着,从 <code>gdbserver</code> 输出内容中找到应用 PID,并在另一个终端窗口中使用:</p>
 
 <pre class="devsite-terminal devsite-click-to-copy">
-gdbclient <var>APP_PID</var>
+gdbclient.py -p <var>APP_PID</var>
 </pre>
 
 <p>最后,在 <code>gdb</code> 提示处输入 <strong>continue</strong>。</p>
@@ -64,7 +66,7 @@
 <p>要调试应用启动,请使用“设置”中的开发者选项,指示应用等待附加 Java 调试程序:</p>
 
 <ol>
-<li><em></em>请依次转到“设置”&gt;“开发者选项”&gt;“选择调试应用”,并从列表中选择您的应用,然后按<strong>等待调试程序</strong>。</li>
+<li><em></em>依次转到“设置”&gt;“开发者选项”&gt;“选择调试应用”,并从列表中选择您的应用,然后按<strong>等待调试程序</strong>。</li>
 
 <li>启动应用,您可以从启动器启动,也可以在命令行中运行以下命令来启动:<pre class="devsite-terminal devsite-click-to-copy">
 am start -a android.intent.action.MAIN -n <var>APP_NAME</var>/.<var>APP_ACTIVITY</var>
@@ -95,7 +97,7 @@
 </pre>
 
 <p>在寻常崩溃输出的结尾处,<code>debuggerd</code> 会提供有关如何使用以下命令来连接 <code>gdb</code> 的说明:</p><pre class="devsite-terminal devsite-click-to-copy">
-gdbclient <var>PID</var>
+gdbclient.py -p <var>PID</var>
 </pre>
 
 <h2 id="symbols">无符号调试</h2>
diff --git a/zh-cn/devices/tech/debug/index.html b/zh-cn/devices/tech/debug/index.html
index 4bcf752..19584ac 100644
--- a/zh-cn/devices/tech/debug/index.html
+++ b/zh-cn/devices/tech/debug/index.html
@@ -22,9 +22,9 @@
 
 <p>本部分总结了开发平台级功能时,可用于调试、跟踪和分析原生 Android 平台代码的实用工具和相关命令。</p>
 
-<p class="note"><strong>注意</strong>:本部分和本网站其他部分的页面建议您使用 <code>adb</code> 和 <code>setprop</code> 参数一起调试 Android 的特定领域。请注意,在 Android 操作系统的 O 版本之前,属性名称的长度上限为 32 个字符。也就是说,要创建一个包含应用名称的 wrap 属性,您需要截断该名称以使其符合字符数限制。在 Android O 及更高版本中,此字符数上限值要大得多,应该不需要截断。</p>
+<p class="note"><strong>注意</strong>: 本部分和本网站其他部分的页面建议您配合使用 <code>adb</code> 和 <code>setprop</code> 参数来调试 Android 的某些方面。请注意,在 Android 操作系统的 O 版本之前,属性名称的长度上限为 32 个字符。也就是说,要创建一个包含应用名称的 wrap 属性,您需要截断该名称以使其符合字符数限制。在 Android O 及更高版本中,此字符数上限值要大得多,应该不需要截断。</p>
 
-<p>本页面介绍了与崩溃转储有关的基本信息(可以在 logcat 输出中找到)。其他页面更详细地介绍了如何<a href="/devices/tech/debug/native-crash.html">诊断原生代码崩溃问题</a>,通过 <a href="https://developer.android.com/studio/command-line/dumpsys.html"><code>dumpsys</code></a> 了解系统服务状况,查看<a href="/devices/tech/debug/native-memory.html">本机内存</a>、<a href="https://developer.android.com/studio/command-line/dumpsys.html#network">网络</a>和 <a href="https://developer.android.com/studio/command-line/dumpsys.html#procstats">RAM</a> 使用情况,使用 <a href="/devices/tech/debug/asan.html">AddressSanitizer</a> 检测原生代码中的内存错误,评估<a href="/devices/tech/debug/eval_perf.html">性能问题</a>(包括 <a href="/devices/tech/debug/systrace">systrace</a>),以及使用 <a href="/devices/tech/debug/gdb.html">GNU 调试程序 (GDB)</a> 和其他调试工具。</p>
+<p>本页面介绍了与崩溃转储有关的基本信息(可以在 logcat 输出中找到)。其他页面更详细地介绍了如何<a href="/devices/tech/debug/native-crash.html">诊断原生代码崩溃问题</a>,通过 <a href="https://developer.android.com/studio/command-line/dumpsys.html"> <code>dumpsys</code></a> 了解系统服务状况,查看<a href="/devices/tech/debug/native-memory.html">本地内存</a>、<a href="https://developer.android.com/studio/command-line/dumpsys.html#network">网络</a>和<a href="https://developer.android.com/studio/command-line/dumpsys.html#procstats">内存</a>使用情况,使用 <a href="/devices/tech/debug/asan.html">AddressSanitizer</a> 检测原生代码中的内存错误,评估<a href="/devices/tech/debug/eval_perf.html">性能问题</a>(包括 <a href="/devices/tech/debug/systrace">systrace</a>),以及使用 <a href="/devices/tech/debug/gdb.html">GNU 调试程序 (GDB)</a> 和其他调试工具。</p>
 
 <h2 id="debuggerd">崩溃转储</h2>
 
@@ -64,7 +64,7 @@
 
 <p>假设您有可用的未剥离二进制文件,则可以将堆栈粘贴到 <code>development/scripts/stack</code> 中,从而获取更详细的展开信息(包含行号信息):</p>
 
-<p class="key-point"><strong>提示</strong>:为方便起见,如果您已运行 <code>lunch</code>,<code>stack</code> 将自动包含在您的 $PATH 中,因此您无需提供完整路径。</p>
+<p class="key-point"><strong>提示</strong>:为方便起见,如果您已运行 <code>lunch</code>,<code>stack</code> 将自动包含在您的 $PATH 中,因此您无需提供完整的路径。</p>
 
 <pre class="devsite-terminal devsite-click-to-copy">
 development/scripts/stack
@@ -129,4 +129,144 @@
 <p>您也可以使用 <code>debuggerd</code> 工具从正在运行的进程获取堆栈转储。
 在命令行中,使用进程 ID (PID) 调用 <code>debuggerd</code>,以将完整的 tombstone 转储至 <code>stdout</code>。要确切获取进程中每个线程的堆栈,请添加 <code>-b</code> 或 <code>--backtrace</code> 标记。</p>
 
+<h2 id="complex">理解复杂的展开信息</h2>
+
+<p>当应用崩溃时,堆栈往往会非常复杂。以下详细示例突出显示了诸多复杂性:</p>
+
+<pre class="devsite-click-to-copy">
+    #00 pc 00000000007e6918  /system/priv-app/Velvet/Velvet.apk (offset 0x346b000)
+    #01 pc 00000000001845cc  /system/priv-app/Velvet/Velvet.apk (offset 0x346b000)
+    #02 pc 00000000001847e4  /system/priv-app/Velvet/Velvet.apk (offset 0x346b000)
+    #03 pc 00000000001805c0  /system/priv-app/Velvet/Velvet.apk (offset 0x346b000) (Java_com_google_speech_recognizer_AbstractRecognizer_nativeRun+176)
+</pre>
+
+<p>框架 #00-#03 来自原生 JNI 代码,该代码以未压缩的形式存储在 APK 中(以节省磁盘空间),而不是提取到单独的 <code>.so</code> 文件中。Android 9 中的堆栈展开程序不需要提取的 <code>.so</code> 文件也能够应对这种常见的 Android 特定情况。</p>
+
+<p>框架 #00-#02 没有符号名称,因为开发者已将其剥离。</p>
+
+<p>框架 #03 显示了有符号可用的情况,在这种情况下,展开程序会使用这些符号。</p>
+
+<pre class="devsite-click-to-copy">
+    #04 pc 0000000000117550  /data/dalvik-cache/arm64/system@priv-app@[email protected]@classes.dex (offset 0x108000) (com.google.speech.recognizer.AbstractRecognizer.nativeRun+160)
+</pre>
+
+<p>框架 #04 是预先编译的 Java 代码。旧的展开程序会在此终止,无法通过 Java 展开。</p>
+
+<pre class="devsite-click-to-copy">
+    #05 pc 0000000000559f88  /system/lib64/libart.so (art_quick_invoke_stub+584)
+    #06 pc 00000000000ced40  /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+    #07 pc 0000000000280cf0  /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
+    #08 pc 000000000027acac  /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&amp;, art::Instruction const*, unsigned short, art::JValue*)+948)
+    #09 pc 000000000052abc0  /system/lib64/libart.so (MterpInvokeDirect+296)
+    #10 pc 000000000054c614  /system/lib64/libart.so (ExecuteMterpImpl+14484)
+</false,></pre>
+
+<p>框架 #05-#10 来自 ART 解释器实现。Android 9 之前的版本中的堆栈展开程序会显示这些框架,而不含框架 #11 的上下文(说明解释器正在解释哪些代码)。如果您要对 ART 本身进行调试,这些框架会非常有用。如果您要调试某个应用,则可以忽略这些框架。某些工具(如 <code>simpleperf</code>)会自动忽略这些框架。</p>
+
+<pre class="devsite-click-to-copy">
+    #11 pc 00000000001992d6  /system/priv-app/Velvet/Velvet.apk (offset 0x26cf000) (com.google.speech.recognizer.AbstractRecognizer.run+18)
+</pre>
+
+<p>框架 #11 是正在解释的 Java 代码。</p>
+
+<pre class="devsite-click-to-copy">
+    #12 pc 00000000002547a8  /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+    #13 pc 000000000025a328  /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&amp;, art::ShadowFrame*, art::JValue*)+216)
+    #14 pc 000000000027ac90  /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&amp;, art::Instruction const*, unsigned short, art::JValue*)+920)
+    #15 pc 0000000000529880  /system/lib64/libart.so (MterpInvokeVirtual+584)
+    #16 pc 000000000054c514  /system/lib64/libart.so (ExecuteMterpImpl+14228)
+</false,></pre>
+
+<p>框架 #12-#16 更像是解释器实现本身。</p>
+
+<pre class="devsite-click-to-copy">
+    #17 pc 00000000002454a0  /system/priv-app/Velvet/Velvet.apk (offset 0x1322000) (com.google.android.apps.gsa.speech.e.c.c.call+28)
+</pre>
+
+<p>框架 #17 更像是正在解释的 Java 代码。该 Java 方法与解释器框架 #12-#16 相对应。</p>
+
+<pre class="devsite-click-to-copy">
+    #18 pc 00000000002547a8  /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+    #19 pc 0000000000519fd8  /system/lib64/libart.so (artQuickToInterpreterBridge+1032)
+    #20 pc 00000000005630fc  /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
+</pre>
+
+<p>框架 #18-#20 更像是虚拟机本身,可用于编码以将代码从编译的 Java 代码转换为解释的 Java 代码。</p>
+
+<pre class="devsite-click-to-copy">
+    #21 pc 00000000002ce44c  /system/framework/arm64/boot.oat (offset 0xdc000) (java.util.concurrent.FutureTask.run+204)
+</pre>
+
+<p>框架 #21 是编译的 Java 方法,可调用框架 #17 中的 Java 方法。</p>
+
+<pre class="devsite-click-to-copy">
+    #22 pc 0000000000559f88  /system/lib64/libart.so (art_quick_invoke_stub+584)
+    #23 pc 00000000000ced40  /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+    #24 pc 0000000000280cf0  /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
+    #25 pc 000000000027acac  /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&amp;, art::Instruction const*, unsigned short, art::JValue*)+948)
+    #26 pc 0000000000529880  /system/lib64/libart.so (MterpInvokeVirtual+584)
+    #27 pc 000000000054c514  /system/lib64/libart.so (ExecuteMterpImpl+14228)
+</false,></pre>
+
+<p>框架 #22-#27 是解释器实现,可执行从解释的代码到编译方法的方法调用。</p>
+
+<pre class="devsite-click-to-copy">
+    #28 pc 00000000003ed69e  /system/priv-app/Velvet/Velvet.apk (com.google.android.apps.gsa.shared.util.concurrent.b.e.run+22)
+</pre>
+
+<p>框架 #28 是正在解释的 Java 代码。</p>
+
+<pre class="devsite-click-to-copy">
+    #29 pc 00000000002547a8  /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+    #30 pc 0000000000519fd8  /system/lib64/libart.so (artQuickToInterpreterBridge+1032)
+    #31 pc 00000000005630fc  /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
+</pre>
+
+<p>框架 #29-#31 是编译代码和解释代码之间的另一种转换。</p>
+
+<pre class="devsite-click-to-copy">
+    #32 pc 0000000000329284  /system/framework/arm64/boot.oat (offset 0xdc000) (java.util.concurrent.ThreadPoolExecutor.runWorker+996)
+    #33 pc 00000000003262a0  /system/framework/arm64/boot.oat (offset 0xdc000) (java.util.concurrent.ThreadPoolExecutor$Worker.run+64)
+    #34 pc 00000000002037e8  /system/framework/arm64/boot.oat (offset 0xdc000) (java.lang.Thread.run+72)
+</pre>
+
+<p>框架 #32-#34 是可直接相互调用的编译 Java 框架。在此例中,原生调用堆栈与 Java 调用堆栈是相同的。</p>
+
+<pre class="devsite-click-to-copy">
+    #35 pc 0000000000559f88  /system/lib64/libart.so (art_quick_invoke_stub+584)
+    #36 pc 00000000000ced40  /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+    #37 pc 0000000000280cf0  /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
+    #38 pc 000000000027acac  /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&amp;, art::Instruction const*, unsigned short, art::JValue*)+948)
+    #39 pc 0000000000529f10  /system/lib64/libart.so (MterpInvokeSuper+1408)
+    #40 pc 000000000054c594  /system/lib64/libart.so (ExecuteMterpImpl+14356)
+</false,></pre>
+
+<p>框架 #35-#40 是解释器本身。</p>
+
+<pre class="devsite-click-to-copy">
+    #41 pc 00000000003ed8e0  /system/priv-app/Velvet/Velvet.apk (com.google.android.apps.gsa.shared.util.concurrent.b.i.run+20)
+</pre>
+
+<p>框架 #41 是正在解释的 Java 代码。</p>
+
+<pre class="devsite-click-to-copy">
+    #42 pc 00000000002547a8  /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+    #43 pc 0000000000519fd8  /system/lib64/libart.so (artQuickToInterpreterBridge+1032)
+    #44 pc 00000000005630fc  /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
+    #45 pc 0000000000559f88  /system/lib64/libart.so (art_quick_invoke_stub+584)
+    #46 pc 00000000000ced40  /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+    #47 pc 0000000000460d18  /system/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&amp;, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
+    #48 pc 0000000000461de0  /system/lib64/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&amp;, _jobject*, _jmethodID*, jvalue*)+424)
+    #49 pc 000000000048ccb0  /system/lib64/libart.so (art::Thread::CreateCallback(void*)+1120)
+</pre>
+
+<p>框架 #42-#49 是虚拟机本身。这次,它是开始在新线程上运行 Java 的代码。</p>
+
+<pre class="devsite-click-to-copy">
+    #50 pc 0000000000082e24  /system/lib64/libc.so (__pthread_start(void*)+36)
+    #51 pc 00000000000233bc  /system/lib64/libc.so (__start_thread+68)
+</pre>
+
+<p>框架 #50-#51 是所有线程实际应启动的方式。这是 <code>libc</code> 新线程启动代码。便利提示:如果您看到这些框架,即表示您拥有的展开信息有效且完整。只要您未在堆栈的底部看到这些框架,就应怀疑您查看的堆栈是否被截断或损坏;如果堆栈未采用这种方式,切勿盲目地认为它正确无误。</p>
+
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/debug/kcfi.html b/zh-cn/devices/tech/debug/kcfi.html
new file mode 100644
index 0000000..0a2e554
--- /dev/null
+++ b/zh-cn/devices/tech/debug/kcfi.html
@@ -0,0 +1,70 @@
+<html devsite><head>
+    <title>内核控制流完整性</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>
+<a href="https://clang.llvm.org/docs/ControlFlowIntegrity.html">控制流完整性 (CFI)</a> 是一种安全机制,它不允许更改已编译二进制文件的原始控制流图,因而执行此类攻击变得异常困难。
+</p>
+<p>
+在 Android 9 中,我们在更多组件以及内核中启用了 LLVM 的 CFI 实现。<a href="/devices/tech/debug/cfi">系统 CFI</a> 默认处于启用状态,但内核 CFI 需要您手动启用。</p>
+<p>
+LLVM 的 CFI 需要使用<a href="https://llvm.org/docs/LinkTimeOptimization.html">链接时优化 (LTO)</a> 进行编译。LTO 会一直保留对象文件的 LLVM 位码表示法直至链接时,以便编译器更好地推断可以执行哪些优化。启用 LTO 可缩减最终二进制文件的大小并提高性能,但会增加编译时间。在 Android 上进行测试时,结合使用 LTO 和 CFI 对代码大小和性能开销的影响微乎其微;在少数情况下,这两者都会有所改善。
+</p>
+<p>
+有关 CFI 以及如何处理其他前向控制检查的更多技术详情,请参阅 <a href="https://clang.llvm.org/docs/ControlFlowIntegrityDesign.html">LLVM 设计文档</a>。
+</p>
+<h2 id="implementation">实现</h2>
+<p>
+Android 通用内核 4.9 和 4.14 版本中提供对内核 CFI 的支持。如果您的内核基于 4.9 或 4.14 版本且使用 Clang 进行构建,那么您可以启用它。要启用 kCFI,您需要复制相关修补程序并更新内核配置文件。
+</p>
+<h3 id="copy-kcfi-patches">复制 kCFI 补丁程序</h3>
+<p>
+将以下更改添加到您的内核:
+</p>
+<ul>
+<li><a href="https://android-review.googlesource.com/q/topic:android-4.9-cfi">4.9 版本</a></li>
+<li><a href="https://android-review.googlesource.com/q/topic:android-4.14-cfi">4.14 版本</a></li>
+</ul>
+
+<h3 id="enable-kcfi">启用 kCFI</h3>
+<p>
+复制相关更改后,您需要在内核配置文件中启用 kCFI,例如 <code>/kernel/<var>PROJECT</var>/+/<var>BRANCH</var>/arch/arm64/configs/<var>PROJECT</var>_defconfig</code>。
+</p>
+<p>
+要启用 kCFI,请添加以下行:
+</p>
+
+<pre class="prettyprint">CONFIG_LTO_CLANG=y
+CONFIG_CFI_CLANG=y</pre>
+
+<h3 id="troubleshooting">问题排查</h3>
+<p>
+启用 kCFI 后,修正其驱动程序可能存在的任何类型不匹配错误。通过不兼容的函数指针调用 indirect 函数,将导致 CFI 故障。当检测到 CFI 故障时,内核会输出一条警告,其中包括被调用的函数和导致故障的堆栈轨迹。您可以通过确保函数指针始终与调用的函数属于同一类型来修正此问题。
+</p>
+<p>
+要协助调试 CFI 故障,请启用 <code>CONFIG_CFI_PERMISSIVE</code>,它会输出警告(而不会导致内核崩溃)。切勿在正式版中使用宽容模式。
+</p>
+
+<h2 id="validation">验证</h2>
+<p>
+目前没有专门针对 CFI 的 CTS 测试。不过,您可以确保无论是否启用 CFI,CTS 测试均能通过,从而确定 CFI 不会影响设备。
+</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 6b720f8..91d9aad 100644
--- a/zh-cn/devices/tech/debug/libfuzzer.html
+++ b/zh-cn/devices/tech/debug/libfuzzer.html
@@ -169,7 +169,7 @@
 <p>
 执行此操作后,系统将输出类似于下方示例的内容。
 </p>
-<aside class="note"><strong>提示</strong>:要详细了解如何读取 libFuzzer 输出,请参阅 <a href="http://llvm.org/docs/LibFuzzer.html">LibFuzzer 文档</a>。
+<aside class="note"><strong>提示</strong>:要详细了解如何理解 libFuzzer 输出,请参阅 <a href="http://llvm.org/docs/LibFuzzer.html">LibFuzzer 文档</a>。
 </aside>
 
 <pre class="prettyprint">
diff --git a/zh-cn/devices/tech/debug/native-crash.html b/zh-cn/devices/tech/debug/native-crash.html
index afa17e5..968187e 100644
--- a/zh-cn/devices/tech/debug/native-crash.html
+++ b/zh-cn/devices/tech/debug/native-crash.html
@@ -20,33 +20,38 @@
       limitations under the License.
   -->
 
-<p>如果您之前从未遇到过原生代码崩溃问题,请从<a href="/devices/tech/debug/index.html">调试原生 Android 平台代码</a>着手。
+<p>
+以下部分包括原生代码崩溃的常见类型、对示例崩溃转储的分析以及有关 tombstone 的讨论。每种崩溃类型都包括示例 <code>debuggerd</code> 输出,其中突出显示的关键证据可以帮助您区分特定类型的崩溃问题。
 </p>
 
-<h2 id="crashtypes">原生代码崩溃问题的类型</h2>
-<p>以下部分详细介绍了最常见的几类原生代码崩溃问题。每类崩溃问题都包含一段 <code>debuggerd</code> 输出示例,其中的关键证据可以帮助您区分特定类型的崩溃问题(以橙色斜体突出显示)。
-</p>
-<h3 id="abort">中止</h3>
-<p>
-中止操作很有趣,因为这是刻意而为。执行中止操作可通过多种不同的方法(包括调用 <code><a href="http://man7.org/linux/man-pages/man3/abort.3.html">abort(3)</a></code>、使 <code><a href="http://man7.org/linux/man-pages/man3/assert.3.html">assert(3)</a></code> 失败、使用 Android 特有的严重记录类型之一)来实现,但所有这些方法都涉及到调用 <code>abort</code>。一般来说,<code>abort</code> 调用会向调用线程发出 SIGABRT 信号,因此为了识别这种情况,您需要在 <code>debuggerd</code> 输出中查找以下两项内容:<code>libc.so</code> 中显示“abort”的帧,以及 SIGABRT 信号。</p>
+<aside class="tip">
+  <strong>提示</strong>:如果您之前从未遇到过原生代码崩溃问题,请从<a href="/devices/tech/debug/index.html">调试原生 Android 平台代码</a>着手。
+</aside>
+
+<h2 id="abort">中止</h2>
 
 <p>
-如上文所述,您可能会看到明确的“中止消息”行。不过,您还应该查看 <code>logcat</code> 输出,了解此线程在刻意终止自身之前所记录的内容,因为与 assert(3) 或高级别的严重记录设备不同的是,abort(3) 不接受任何消息。
+中止操作很有趣,因为这是刻意而为。执行中止操作可通过多种不同的方法(包括调用 <code><a href="http://man7.org/linux/man-pages/man3/abort.3.html" class="external">abort(3)</a></code>、使 <code><a href="http://man7.org/linux/man-pages/man3/assert.3.html" class="external">assert(3)</a></code> 失败、使用 Android 特有的严重记录类型之一)来实现,但所有这些方法都涉及到调用 <code>abort</code>。<code>abort</code> 调用会向调用线程发出 SIGABRT 信号,因此为了识别这种情况,您需要在 <code>debuggerd</code> 输出中查找以下两项内容:<code>libc.so</code> 中显示“abort”的帧,以及 SIGABRT 信号。
 </p>
 
 <p>
-当前版本的 Android 内嵌了 <code><a href="http://man7.org/linux/man-pages/man2/tgkill.2.html">tgkill(2)</a></code> 系统调用,因此它们的堆栈是最容易读取的,因为对 abort(3) 进行的调用位于最顶端:
+您可能会看到明确的“中止消息”行。不过,您还应该查看 <code>logcat</code> 输出,了解此线程在刻意终止自身之前所记录的内容,因为与 <code>assert(3)</code> 或高级别的严重记录设备不同的是,<code>abort(3)</code> 不接受任何消息。
 </p>
+
+<p>
+当前版本的 Android 内嵌了 <code><a href="http://man7.org/linux/man-pages/man2/tgkill.2.html" class="external">tgkill(2)</a></code> 系统调用,因此它们的堆栈是最容易读取的,因为对 abort(3) 进行的调用位于最顶端:
+</p>
+
 <pre class="devsite-click-to-copy">
 pid: 4637, tid: 4637, name: crasher  &gt;&gt;&gt; crasher &lt;&lt;&lt;
-signal 6 (<i style="color:Orange">SIGABRT</i>), code -6 (SI_TKILL), fault addr --------
-<i style="color:Orange">Abort message</i>: 'some_file.c:123: some_function: assertion "false" failed'
+signal 6 (<em style="color:Orange">SIGABRT</em>), code -6 (SI_TKILL), fault addr --------
+<em style="color:Orange">Abort message</em>: 'some_file.c:123: some_function: assertion "false" failed'
     r0  00000000  r1  0000121d  r2  00000006  r3  00000008
     r4  0000121d  r5  0000121d  r6  ffb44a1c  r7  0000010c
     r8  00000000  r9  00000000  r10 00000000  r11 00000000
     ip  ffb44c20  sp  ffb44a08  lr  eace2b0b  pc  eace2b16
 backtrace:
-    #00 pc 0001cb16  /system/lib/<i style="color:Orange">libc.so</i> (<i style="color:Orange">abort</i>+57)
+    #00 pc 0001cb16  /system/lib/<em style="color:Orange">libc.so</em> (<em style="color:Orange">abort</em>+57)
     #01 pc 0001cd8f  /system/lib/libc.so (__assert2+22)
     #02 pc 00001531  /system/bin/crasher (do_action+764)
     #03 pc 00002301  /system/bin/crasher (main+68)
@@ -55,11 +60,12 @@
 </pre>
 
 <p>
-在原始中止调用(此处为帧 4)与实际发送信号(此处为帧 0)之间,较低版本的 Android 需要遵循复杂的路径。特别是在 32 位 ARM 上运行的 Android,它在 <code>__libc_android_abort</code>(此处为帧 3)上添加了另外的平台序列 <code>raise</code>/<code>pthread_kill</code>/<code>tgkill</code>:</p>
+在原始中止调用(此处为帧 4)与实际发送信号(此处为帧 0)之间,较低版本的 Android 需要遵循复杂的路径。特别是在 32 位 ARM 上运行的 Android,它会将 <code>__libc_android_abort</code>(此处为帧 3)添加到其他平台的 <code>raise</code>/<code>pthread_kill</code>/<code>tgkill</code> 序列:</p>
+
 <pre class="devsite-click-to-copy">
 pid: 1656, tid: 1656, name: crasher  &gt;&gt;&gt; crasher &lt;&lt;&lt;
-signal 6 (<i style="color:Orange">SIGABRT</i>), code -6 (SI_TKILL), fault addr --------
-<i style="color:Orange">Abort message</i>: 'some_file.c:123: some_function: assertion "false" failed'
+signal 6 (<em style="color:Orange">SIGABRT</em>), code -6 (SI_TKILL), fault addr --------
+<em style="color:Orange">Abort message</em>: 'some_file.c:123: some_function: assertion "false" failed'
     r0 00000000  r1 00000678  r2 00000006  r3 f70b6dc8
     r4 f70b6dd0  r5 f70b6d80  r6 00000002  r7 0000010c
     r8 ffffffed  r9 00000000  sl 00000000  fp ff96ae1c
@@ -69,27 +75,32 @@
     #01 pc 00041ed1  /system/lib/libc.so (pthread_kill+32)
     #02 pc 0001bb87  /system/lib/libc.so (raise+10)
     #03 pc 00018cad  /system/lib/libc.so (__libc_android_abort+34)
-    #04 pc 000168e8  /system/lib/<i style="color:Orange">libc.so</i> (<i style="color:Orange">abort</i>+4)
+    #04 pc 000168e8  /system/lib/<em style="color:Orange">libc.so</em> (<em style="color:Orange">abort</em>+4)
     #05 pc 0001a78f  /system/lib/libc.so (__libc_fatal+16)
     #06 pc 00018d35  /system/lib/libc.so (__assert2+20)
     #07 pc 00000f21  /system/xbin/crasher
     #08 pc 00016795  /system/lib/libc.so (__libc_init+44)
     #09 pc 00000abc  /system/xbin/crasher
 </pre>
+
 <p>
 您可以使用 <code>crasher
-abort</code> 重现此类崩溃问题的实例。
+  abort</code> 来重现这类崩溃问题的实例。
 </p>
-<h3 id="nullpointer">纯 Null 指针解引用</h3>
-<p>这是典型的原生代码崩溃问题,虽然它只是下一类崩溃问题的特殊情况,但值得单独说明,因为这类崩溃问题通常无需细细思量。
-</p>
+
+<h2 id="nullpointer">纯 Null 指针解引用</h2>
+
 <p>
-在以下示例中,尽管崩溃函数在 <code>libc.so</code> 中,但由于字符串函数仅在指定给它们的指针处进行操作,因此您可以推断出在调用 <code><a href="http://man7.org/linux/man-pages/man3/strlen.3.html">strlen(3)</a></code>strlen(3) 时指定的是 Null 指针;对于此类崩溃问题,应直接找调用代码的作者加以解决。在这种情况下,帧 #01 是不良调用程序。
+这是典型的原生代码崩溃问题,虽然它只是下一类崩溃问题的特殊情况,但值得单独说明,因为这类崩溃问题通常无需细细思量。
+</p>
+
+<p>
+在以下示例中,尽管崩溃函数在 <code>libc.so</code> 中,但由于字符串函数仅在指定给它们的指针处进行操作,因此您可以推断出在调用 <code><a href="http://man7.org/linux/man-pages/man3/strlen.3.html" class="external">strlen(3)</a></code> 时指定的是 Null 指针;对于这类崩溃问题,应直接找调用代码的作者加以解决。在这种情况下,帧 #01 是不良调用程序。
 </p>
 
 <pre class="devsite-click-to-copy">
 pid: 25326, tid: 25326, name: crasher  &gt;&gt;&gt; crasher &lt;&lt;&lt;
-signal 11 (<i style="color:Orange">SIGSEGV</i>), code 1 (SEGV_MAPERR), <i style="color:Orange">fault addr 0x0</i>
+signal 11 (<em style="color:Orange">SIGSEGV</em>), code 1 (SEGV_MAPERR), <em style="color:Orange">fault addr 0x0</em>
     r0 00000000  r1 00000000  r2 00004c00  r3 00000000
     r4 ab088071  r5 fff92b34  r6 00000002  r7 fff92b40
     r8 00000000  r9 00000000  sl 00000000  fp fff92b2c
@@ -103,10 +114,16 @@
     #04 pc 000177a1  /system/lib/libc.so (__libc_init+48)
     #05 pc 000010e4  /system/xbin/crasher (_start+96)
 </pre>
-<p>您可以使用 <code>crasher
-strlen-NULL</code> 重现此类崩溃问题的实例。</p>
-<h3 id="lowaddress">低地址 Null 指针解引用</h3>
-<p>在许多情况下,故障地址不会为 0,而是其他一些小数字。两位或三位地址尤其常见,而六位地址几乎肯定不是 Null 指针解引用 - 这需要 1 MiB 的偏移量。通常,当您有代码将 Null 指针解引用为看似有效的结构时,就会发生这种情况。常见的函数是 <code><a href="http://man7.org/linux/man-pages/man3/fprintf.3.html">fprintf(3)</a></code>(或任何其他使用 FILE* 的函数)和 <code><a href="http://man7.org/linux/man-pages/man3/readdir.3.html">readdir(3)</a></code>,因为代码通常无法检查到底是 <code><a href="http://man7.org/linux/man-pages/man3/fopen.3.html">fopen(3)</a></code> 调用先成功还是 <code><a href="http://man7.org/linux/man-pages/man3/opendir.3.html">opendir(3)</a></code> 调用先成功。
+
+<p>
+您可以使用 <code>crasher
+  strlen-NULL</code> 重现这类崩溃问题的实例。
+</p>
+
+<h2 id="lowaddress">低地址 Null 指针解引用</h2>
+
+<p>
+在许多情况下,故障地址将不会是 0,而是其他一些小数字。两位或三位地址尤其常见,而六位地址几乎肯定不是 Null 指针解引用(它需要 1 MiB 的偏移量)。通常,当您的代码将 Null 指针解引用为看似有效的结构时,就会出现这种情况。常见的函数是 <code><a href="http://man7.org/linux/man-pages/man3/fprintf.3.html" class="external">fprintf(3)</a></code>(或任何使用 FILE* 的其他函数)和 <code><a href="http://man7.org/linux/man-pages/man3/readdir.3.html" class="external">readdir(3)</a></code>,因为代码通常无法检查到底是 <code><a href="http://man7.org/linux/man-pages/man3/fopen.3.html" class="external">fopen(3)</a></code> 调用先成功还是 <code><a href="http://man7.org/linux/man-pages/man3/opendir.3.html" class="external">opendir(3)</a></code> 调用先成功。
 </p>
 
 <p>
@@ -115,7 +132,7 @@
 
 <pre class="devsite-click-to-copy">
 pid: 25405, tid: 25405, name: crasher  &gt;&gt;&gt; crasher &lt;&lt;&lt;
-signal 11 (<i style="color:Orange">SIGSEGV</i>), code 1 (SEGV_MAPERR), <i style="color:Orange">fault addr 0xc</i>
+signal 11 (<em style="color:Orange">SIGSEGV</em>), code 1 (SEGV_MAPERR), <em style="color:Orange">fault addr 0xc</em>
     r0 0000000c  r1 00000000  r2 00000000  r3 3d5f0000
     r4 00000000  r5 0000000c  r6 00000002  r7 ff8618f0
     r8 00000000  r9 00000000  sl 00000000  fp ff8618dc
@@ -130,8 +147,10 @@
     #05 pc 000177a1  /system/lib/libc.so (__libc_init+48)
     #06 pc 00001110  /system/xbin/crasher (_start+96)
 </pre>
+
 <p>
-在此示例中,崩溃问题的直接原因是 <code><a href="http://man7.org/linux/man-pages/man3/pthread_mutex_lock.3p.html">pthread_mutex_lock(3)</a></code> 曾尝试访问地址 0xc(帧 0)。但是 <code>pthread_mutex_lock</code> 执行的第一项操作是解引用指定给它的 <code>pthread_mutex_t*</code> 的 <code>state</code> 元素。如果您查看源代码,则会发现该元素在结构中的偏移量为零,这表示指定给 <code>pthread_mutex_lock</code> 的指针 0xc 无效。从帧 1 可以看出,<code>readdir</code> 将该指针指定给它,这会从指定的 <code>DIR*</code> 中提取 <code>mutex_</code> 字段。通过查看该结构,您会发现 <code>struct DIR</code> 中 <code>mutex_</code> 的偏移量为 <code>sizeof(int) + sizeof(size_t) + sizeof(dirent*)</code>,在 32 位设备上即 4 + 4 + 4 = 12 = 0xc,由此找到错误所在:调用程序向 <code>readdir</code> 传递了一个 Null 指针。此时,您可以将该堆栈粘贴到堆栈工具中,以找出这个问题在 logcat 中的发生位置。<em></em></p>
+在此示例中,崩溃问题的直接原因是 <code><a href="http://man7.org/linux/man-pages/man3/pthread_mutex_lock.3p.html" class="external">pthread_mutex_lock(3)</a></code> 曾尝试访问地址 0xc(帧 0)。但是 <code>pthread_mutex_lock</code> 执行的第一项操作是解引用指定给它的 <code>pthread_mutex_t*</code> 的 <code>state</code> 元素。如果您查看源代码,则会发现该元素在结构中的偏移量为零,这表示指定给 <code>pthread_mutex_lock</code> 的指针 0xc 无效。从帧 1 可以看出,<code>readdir</code> 会将该指针指定给它,这会从指定的 <code>DIR*</code> 中提取 <code>mutex_</code> 字段。通过查看该结构,您会发现 <code>struct DIR</code> 中 <code>mutex_</code> 的偏移量为 <code>sizeof(int) + sizeof(size_t) + sizeof(dirent*)</code>,在 32 位设备上表示为 4 + 4 + 4 = 12 = 0xc,这样便可以找到错误所在:调用程序向 <code>readdir</code> 传递了一个 Null 指针。此时,您可以将该堆栈粘贴到堆栈工具中,以找出这个问题在 logcat 中的发生位置。<em></em>
+</p>
 
 <pre class="prettyprint">
   struct DIR {
@@ -143,19 +162,26 @@
     long current_pos_;
   };
 </pre>
-<p>在大多数情况下,实际上您可以跳过此分析。一个充分的低位故障地址通常意味着您可以跳过堆栈中的任意 <code>libc.so</code> 帧,并直接归咎于调用的代码。不过,情况并非总是如此,这些例外将是您用作展示的绝佳机会。
+
+<p>
+其实在大多数情况下,您可以跳过此分析。一个充分的低位故障地址通常意味着您可以跳过堆栈中的任意 <code>libc.so</code> 帧,并直接归咎于调用的代码。不过,情况并非总是如此,这些例外将是您用作展示的绝佳机会。
 </p>
+
 <p>
 您可以使用 <code>crasher
-fprintf-NULL</code> 或 <code>crasher readdir-NULL</code> 重现此类崩溃问题的实例。
+  fprintf-NULL</code> 或 <code>crasher readdir-NULL</code> 重现此类崩溃问题的实例。
 </p>
-<h3 id="fortify">FORTIFY 失败</h3>
-<p>FORTIFY 失败是中止的一种特殊情况,当 C 库检测到可能导致安全漏洞的问题时,就会发生 FORTIFY 失败。很多 C 库函数已得到加强;它们需要一个额外的参数来确定缓冲区的实际大小,并在运行时检查您尝试执行的操作是否真的适合。<em></em>以下示例显示代码尝试使用 <code>read(fd, buf, 32)</code> 读入实际上只有 10 字节长的缓冲区…
+
+<h2 id="fortify">FORTIFY 失败</h2>
+
+<p>
+FORTIFY 失败是中止的一种特殊情况,当 C 库检测到可能导致安全漏洞的问题时,就会发生 FORTIFY 失败。很多 C 库函数已得到加强;它们需要一个额外的参数来确定缓冲区的实际大小,并在运行时检查您尝试执行的操作是否真的合理。<em></em>以下示例显示了代码尝试使用 <code>read(fd, buf, 32)</code> 读入实际上只有 10 字节长的缓冲区…
 </p>
+
 <pre class="devsite-click-to-copy">
 pid: 25579, tid: 25579, name: crasher  &gt;&gt;&gt; crasher &lt;&lt;&lt;
 signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
-Abort message: '<i style="color:Orange">FORTIFY: read: prevented 32-byte write into 10-byte buffer'</i>
+Abort message: '<em style="color:Orange">FORTIFY: read: prevented 32-byte write into 10-byte buffer</em>'
     r0 00000000  r1 000063eb  r2 00000006  r3 00000008
     r4 ff96f350  r5 000063eb  r6 000063eb  r7 0000010c
     r8 00000000  r9 00000000  sl 00000000  fp ff96f49c
@@ -164,24 +190,29 @@
 backtrace:
     #00 pc 00049f0c  /system/lib/libc.so (tgkill+12)
     #01 pc 00019cdf  /system/lib/libc.so (abort+50)
-    #02 pc 0001e197  /system/lib/libc.so (<i style="color:Orange">__fortify_fatal</i>+30)
+    #02 pc 0001e197  /system/lib/libc.so (<em style="color:Orange">__fortify_fatal</em>+30)
     #03 pc 0001baf9  /system/lib/libc.so (__read_chk+48)
     #04 pc 0000165b  /system/xbin/crasher (do_action+534)
     #05 pc 000021e5  /system/xbin/crasher (main+100)
     #06 pc 000177a1  /system/lib/libc.so (__libc_init+48)
     #07 pc 00001110  /system/xbin/crasher (_start+96)
 </pre>
+
 <p>
 您可以使用 <code>crasher
-fortify</code> 重现此类崩溃问题的实例。
+  fortify</code> 来重现这类崩溃问题的实例。
 </p>
-<h3 id="stackcorruption">-fstack-protector 检测到的堆栈损坏</h3>
-<p>编译器的 <code>-fstack-protector</code> 选项会在具有栈上缓冲区的函数中插入检查机制,以防止缓冲区溢出。默认情况下,此选项会为平台代码而非应用启用。如果启用此选项,编译器会向<a href="https://en.wikipedia.org/wiki/Function_prologue">函数序言</a>添加指令,以在堆栈上写入刚刚超过上一局部值的随机值,并向函数结尾添加指令以进行回读并确认是否发生更改。如果该值已更改,则已被缓冲区溢出覆盖,因此该结尾会调用 <code>__stack_chk_fail</code> 来记录消息和中止。
+
+<h2 id="stackcorruption">-fstack-protector 检测到的堆栈损坏</h2>
+
+<p>
+编译器的 <code>-fstack-protector</code> 选项会在具有栈上缓冲区的函数中插入检查机制,以防止缓冲区溢出。默认情况下,系统会为平台代码(而非应用)启用此选项。启用此选项后,编译器会向<a href="https://en.wikipedia.org/wiki/Function_prologue" class="external">函数序言</a>添加指令,以在堆栈上写入刚刚超过上一局部值的随机值,并向函数结尾添加指令以进行回读并确认是否发生更改。如果该值已更改,则表示该值已被缓冲区溢出覆盖,因此该结尾会调用 <code>__stack_chk_fail</code> 来记录消息和中止。
 </p>
+
 <pre class="devsite-click-to-copy">
 pid: 26717, tid: 26717, name: crasher  &gt;&gt;&gt; crasher &lt;&lt;&lt;
 signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
-<i style="color:Orange">Abort message: 'stack corruption detected'</i>
+<em style="color:Orange">Abort message: 'stack corruption detected'</em>
     r0 00000000  r1 0000685d  r2 00000006  r3 00000008
     r4 ffd516d8  r5 0000685d  r6 0000685d  r7 0000010c
     r8 00000000  r9 00000000  sl 00000000  fp ffd518bc
@@ -191,27 +222,33 @@
     #00 pc 00049f0c  /system/lib/libc.so (tgkill+12)
     #01 pc 00019cdf  /system/lib/libc.so (abort+50)
     #02 pc 0001e07d  /system/lib/libc.so (__libc_fatal+24)
-    #03 pc 0004863f  /system/lib/libc.so (<i style="color:Orange">__stack_chk_fail</i>+6)
+    #03 pc 0004863f  /system/lib/libc.so (<em style="color:Orange">__stack_chk_fail</em>+6)
     #04 pc 000013ed  /system/xbin/crasher (smash_stack+76)
     #05 pc 00001591  /system/xbin/crasher (do_action+280)
     #06 pc 00002219  /system/xbin/crasher (main+100)
     #07 pc 000177a1  /system/lib/libc.so (__libc_init+48)
     #08 pc 00001144  /system/xbin/crasher (_start+96)
 </pre>
-<p>您可以通过回溯中是否出现 <code>__stack_chk_fail</code> 以及特定中止消息将此中止与其他类型的中止区分开来。
+
+<p>
+您可以通过回溯中是否出现 <code>__stack_chk_fail</code> 以及特定的中止消息,将此中止与其他类型的中止区分开来。
 </p>
+
 <p>
 您可以使用 <code>crasher
-smash-stack</code> 重现此类崩溃问题的实例。
+  smash-stack</code> 来重现这类崩溃问题的实例。
 </p>
-<h3 id="seccomp">来自不允许的系统调用的 Seccomp SIGSYS</h3>
+
+<h2 id="seccomp">来自不允许的系统调用的 Seccomp SIGSYS</h2>
+
 <p>
-<a href="https://en.wikipedia.org/wiki/Seccomp">seccomp</a> 系统(具体是指 seccomp-bpf)会限制对系统调用的访问权限。要查看更多针对平台开发者的 seccomp 相关信息,请参阅博文 <a href="https://android-developers.googleblog.com/2017/07/seccomp-filter-in-android-o.html">Android O 中的 Seccomp 过滤器</a>。调用受限系统调用的线程将收到信号 SIGSYS 及代码 SYS_SECCOMP。系统调用编号将与架构一起显示在原因行中。需要注意的是,系统调用编号会因架构而异。例如,readlinkat(2) 系统调用在 x86 系统上的编号为 305,而在 x86-64 系统上的编号则为 267。在 arm 和 arm64 平台上,调用编号也不一样。因为系统调用编号因架构而异,所以在通常情况下,使用堆栈跟踪来找出不允许的系统调用比在标头中寻找系统调用编号更容易。
+<a href="https://en.wikipedia.org/wiki/Seccomp" class="external">seccomp</a> 系统(具体是指 seccomp-bpf)会限制对系统调用的访问权限。要查看更多针对平台开发者的 seccomp 相关信息,请参阅博文 <a href="https://android-developers.googleblog.com/2017/07/seccomp-filter-in-android-o.html" class="external">Android O 中的 Seccomp 过滤器</a>。调用受限系统调用的线程将收到信号 SIGSYS 及代码 SYS_SECCOMP。系统调用编号将与架构一起显示在原因行中。需要注意的是,系统调用编号会因架构而异。例如,<code>readlinkat(2)</code> 系统调用在 x86 系统上的编号为 305,而在 x86-64 系统上的编号则为 267。在 arm 和 arm64 平台上,调用编号也不一样。因为系统调用编号因架构而异,所以在通常情况下,使用堆栈轨迹来找出不允许的系统调用比在标头中寻找系统调用编号更容易。
 </p>
+
 <pre class="devsite-click-to-copy">
 pid: 11046, tid: 11046, name: crasher  &gt;&gt;&gt; crasher &lt;&lt;&lt;
-signal 31 (SIGSYS), code 1 (<i style="color:Orange">SYS_SECCOMP</i>), fault addr --------
-<i style="color:Orange">Cause: seccomp prevented call to disallowed arm system call 99999
+signal 31 (SIGSYS), code 1 (<em style="color:Orange">SYS_SECCOMP</em>), fault addr --------
+<em style="color:Orange">Cause: seccomp prevented call to disallowed arm system call 99999</em>
     r0 cfda0444  r1 00000014  r2 40000000  r3 00000000
     r4 00000000  r5 00000000  r6 00000000  r7 0001869f
     r8 00000000  r9 00000000  sl 00000000  fp fffefa58
@@ -223,7 +260,8 @@
     #02 pc 00002699  /system/bin/crasher (main+68)
     #03 pc 0007c60d  /system/lib/libc.so (__libc_init+48)
     #04 pc 000011b0  /system/bin/crasher (_start_main+72)
-</i></pre><i style="color:Orange">
+</pre>
+
 <p>
 您可以根据信号行中是否出现 <code>SYS_SECCOMP</code> 以及原因行中的说明,将不允许的系统调用与其他崩溃问题区分开来。
 </p>
@@ -232,11 +270,15 @@
 seccomp</code> 重现此类崩溃问题的实例。
 </p>
 
-<h2 id="crashdump">崩溃转储</h2>
+<h2 id="crashdump">调查崩溃转储</h2>
 
-<p>如果您现在没有正在调查的特定崩溃问题,则平台来源包括用于测试 <code>debuggerd</code> 的工具,名为 crasher。如果您在 <code>system/core/debuggerd/</code> 中 <code>mm</code>,则您的路径中会出现 <code>crasher</code> 和 <code>crasher64</code>(您可以借助后者测试 64 位崩溃问题)。根据您提供的命令行参数,crasher 崩溃的方式多种多样。使用 <code>crasher --help</code> 可查看当前支持的选择。</p>
+<p>
+如果您现在没有正在调查的特定崩溃问题,则平台来源包括用于测试 <code>debuggerd</code> 的工具,名为 crasher。如果您在 <code>system/core/debuggerd/</code> 中 <code>mm</code>,则您的路径中会出现 <code>crasher</code> 和 <code>crasher64</code>(您可以借助后者测试 64 位崩溃问题)。根据您提供的命令行参数,crasher 崩溃的方式多种多样。使用 <code>crasher --help</code> 可查看当前支持的选择。
+</p>
 
-<p>为了介绍崩溃转储中的各个方面,我们来看看以下崩溃转储示例:</p>
+<p>
+为了介绍崩溃转储中的各个方面,我们来看看以下崩溃转储示例:
+</p>
 
 <pre class="devsite-click-to-copy">
 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
@@ -265,44 +307,57 @@
 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
 </pre>
 
-<p>如果您要搜索原生代码崩溃问题的日志,则带有空格的星号行很有帮助。字符串“*** ***”很少出现在日志中,除了在原生代码崩溃问题开始的时候。</p>
+<p>
+如果您要搜索原生代码崩溃问题的日志,则带有空格的星号行很有帮助。字符串“*** ***”很少出现在日志中,除了在原生代码崩溃问题开始的时候。
+</p>
 
 <pre class="devsite-click-to-copy">
 Build fingerprint:
 'Android/aosp_flounder/flounder:5.1.51/AOSP/enh08201009:eng/test-keys'
 </pre>
 
-<p>您可以通过指纹准确识别崩溃问题发生的版本号。这与 <code>ro.build.fingerprint</code> 系统属性完全相同。</p>
+<p>
+您可以通过指纹准确识别崩溃问题发生的版本号。这与 <code>ro.build.fingerprint</code> 系统属性完全相同。
+</p>
 
 <pre class="devsite-click-to-copy">
 Revision: '0'
 </pre>
 
-<p>revision 指的是硬件,而不是软件。通常情况下不使用 revision,但使用 revision 有助于您自动忽略由不良硬件导致的已知错误。这与 <code>ro.revision</code> 系统属性完全相同。</p>
+<p>
+Revision 指的是硬件,而不是软件。通常情况下不使用 revision,但使用 revision 有助于您自动忽略由不良硬件导致的已知错误。这与 <code>ro.revision</code> 系统属性完全相同。
+</p>
 
 <pre class="devsite-click-to-copy">
 ABI: 'arm'
 </pre>
 
-<p>ABI 是 arm、arm64、mips、mips64、x86 或 x86-64 之一。这对上面提到的 <code>stack</code> 脚本最有用,这样它就知道要使用的工具链。</p>
+<p>
+ABI 是 arm、arm64、mips、mips64、x86 或 x86-64 之一。这对上面提到的 <code>stack</code> 脚本最有用,这样它就知道要使用的工具链。
+</p>
 
 <pre class="devsite-click-to-copy">
 pid: 1656, tid: 1656, name: crasher &gt;&gt;&gt; crasher &lt;&lt;&lt;
 </pre>
 
-<p>此行可标识崩溃进程中的特定线程。在这种情况下,它是进程的主线程,因此进程 ID 和线程 ID 一致。第一个名称是线程名称,在 &gt;&gt;&gt; 和 &lt;&lt;&lt; 中间的名称是进程名称。对于应用,进程名称通常是完全限定的文件包名称(如 com.facebook.katana),这在提交错误或尝试在 Google Play 中查找相应应用时很有用。在查找崩溃问题之前的相关日志行方面,pid 和 tid 也很有用。</p>
+<p>
+此行可标识崩溃进程中的特定线程。在这种情况下,它是进程的主线程,因此进程 ID 和线程 ID 一致。第一个名称是线程名称,在 &gt;&gt;&gt; 和 &lt;&lt;&lt; 中间的名称是进程名称。对于应用,进程名称通常是完全限定的文件包名称(如 com.facebook.katana),这在提交错误或尝试在 Google Play 中查找相应应用时很有用。在查找崩溃问题之前的相关日志行方面,pid 和 tid 也很有用。
+</p>
 
 <pre class="devsite-click-to-copy">
 signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
 </pre>
 
-<p>您可从该行得知接收的信号 (SIGABRT) 以及有关如何接收该信号的更多信息 (SI_TKILL)。<code>debuggerd</code> 报告的信号是 SIGABRT、SIGBUS、SIGFPE、SIGILL、SIGSEGV 和 SIGTRAP。信号专用的代码因特定信号而异。</p>
+<p>
+您可从该行得知接收的信号 (SIGABRT) 以及有关如何接收该信号的更多信息 (SI_TKILL)。<code>debuggerd</code> 报告的信号是 SIGABRT、SIGBUS、SIGFPE、SIGILL、SIGSEGV 和 SIGTRAP。信号专用的代码因特定信号而异。
+</p>
 
 <pre class="devsite-click-to-copy">
 Abort message: 'some_file.c:123: some_function: assertion "false" failed'
 </pre>
 
-<p>并非所有崩溃问题都会有中止消息行,但发生中止时,会出现该消息行。这是从此 pid/tid 的最后一行严重 logcat 输出中自动收集而来的,而在有意中止的情况下,这可以解释该程序自行终止的原因。</p>
+<p>并非所有崩溃问题都会有中止消息行,但发生中止时,会出现该消息行。这是从此 pid/tid 的最后一行严重 logcat 输出中自动收集而来的,而在有意中止的情况下,这可以解释该程序自行终止的原因。
+</p>
 
 <pre class="devsite-click-to-copy">
 r0 00000000 r1 00000678 r2 00000006 r3 f70b6dc8
@@ -311,7 +366,9 @@
 ip 00000006 sp ff96ad18 lr f700ced5 pc f700dc98 cpsr 400b0010
 </pre>
 
-<p>寄存器转储显示收到信号时 CPU 寄存器的内容。(本区段在各 ABI 之间变化很大。)这些内容的有用程度取决于确切的崩溃问题。</p>
+<p>
+寄存器转储显示收到信号时 CPU 寄存器的内容。(本区段在各 ABI 之间变化很大。)这些内容的有用程度取决于确切的崩溃问题。
+</p>
 
 <pre class="devsite-click-to-copy">
 backtrace:
@@ -327,18 +384,24 @@
     #09 pc 00000abc /system/xbin/crasher
 </pre>
 
-<p>您可以通过回溯得知崩溃问题发生时我们所处的代码位置。第一列是帧号(与 gdb 的样式一致,其中最底下的帧是 0)。PC 值与共享库的位置(而非绝对地址)相关。下一列是映射区域的名称(通常是共享库或可执行文件,但可能不适用于经过 JIT 编译的代码)。最后,如果有符号,则会显示与 PC 值对应的符号以及到该符号的偏移量(以字节为单位)。您可以结合使用此符号和 <code>objdump(1)</code> 来找到相应的编译器指令。</p>
+<p>
+您可以通过回溯得知崩溃问题发生时我们所处的代码位置。第一列是帧号(与 gdb 的样式一致,其中最底下的帧是 0)。PC 值与共享库的位置(而非绝对地址)相关。下一列是映射区域的名称(通常是共享库或可执行文件,但可能不适用于经过 JIT 编译的代码)。最后,如果有符号,则会显示与 PC 值对应的符号以及到该符号的偏移量(以字节为单位)。您可以结合使用此符号和 <code>objdump(1)</code> 来找到相应的编译器指令。
+</p>
 
-<h2 id="tombstones">Tombstone</h2>
+<h2 id="tombstones">读取 tombstone</h2>
 
 <pre class="devsite-click-to-copy">
 Tombstone written to: /data/tombstones/tombstone_06
 </pre>
 
-<p>您可由此得知 <code>debuggerd</code> 写入额外信息的位置。
-<code>debuggerd</code> 会保留最多 10 个 tombstone,从编号 00 至 09 循环并根据需要覆盖现有 tombstone。</p>
+<p>
+您可由此得知 <code>debuggerd</code> 写入额外信息的位置。
+  <code>debuggerd</code> 会保留最多 10 个 tombstone,从编号 00 至 09 循环并根据需要覆盖现有 tombstone。
+</p>
 
-<p>Tombstone 包含与崩溃转储相同的信息,还包含一些其他信息。例如,它包含所有线程(不仅仅是崩溃线程)的回溯、浮点寄存器、原始堆栈转储,以及寄存器中地址附近的内存转储。<i></i>最有用的是,它还包含完整的内存映射(类似于 <code>/proc/<i>pid</i>/maps</code>)。以下是 32 位 ARM 进程崩溃的示例(带注释):</p>
+<p>
+Tombstone 包含与崩溃转储相同的信息,还包含一些其他信息。例如,它包含所有线程(不仅仅是崩溃线程)的回溯、浮点寄存器、原始堆栈转储,以及寄存器中地址附近的内存转储。<em></em>最有用的是,它还包含完整的内存映射(类似于 <code>/proc/<var>pid</var>/maps</code>)。以下是 32 位 ARM 进程崩溃的示例(带注释):
+</p>
 
 <pre class="devsite-click-to-copy">
 memory map: (fault address prefixed with ---&gt;)
@@ -346,7 +409,9 @@
 b9527db01b5cf8f5402f899f64b9b121)
 </pre>
 
-<p>这里需要注意两点。第一点是该行带有前缀“---&gt;”。当您的崩溃问题不仅仅是 Null 指针解引用时,这些映射最有用。如果故障地址较小,则其很可能是 Null 指针解引用的某个变体。否则,通过查看故障地址周围的映射,您通常可以了解发生的问题。通过查看映射可识别的一些可能存在的问题包括:</p>
+<p>
+这里需要注意两点。第一点是该行带有前缀“---&gt;”。当您的崩溃问题不仅仅是 Null 指针解引用时,这些映射最有用。如果故障地址较小,则其很可能是 Null 指针解引用的某个变体。否则,通过查看故障地址周围的映射,您通常可以了解发生的问题。通过查看映射可识别的一些可能存在的问题包括:
+</p>
 
 <ul>
 <li>读/写延伸到内存块末尾之外。</li>
@@ -356,7 +421,9 @@
 <li>尝试写入代码(如上例所述)。</li>
 </ul>
 
-<p>需要注意的第二点是,可执行文件和共享库文件将在 Android M 和更高版本中显示 BuildId(如果有),因此您可以确切地看到崩溃代码的版本。(从 Android M 开始,平台二进制文件默认包含 BuildId。NDK r12 和更高版本还会自动将 <code>-Wl,--build-id</code> 传递到链接器。)</p>
+<p>
+需要注意的第二点是,可执行文件和共享库文件将在 Android 6.0 和更高版本中显示 BuildId(如果有),因此您可以确切地看到崩溃代码的版本。从 Android 6.0 开始,平台二进制文件默认包含 BuildId。NDK r12 和更高版本还会自动将 <code>-Wl,--build-id</code> 传递到链接器。
+</p>
 
 <pre class="devsite-click-to-copy">
 ab163000-ab163fff r--      3000      1000  /system/xbin/crasher
@@ -364,7 +431,9 @@
 f6c80000-f6d7ffff rw-         0    100000  [anon:libc_malloc]
 </pre>
 
-<p>在 Android 上,该堆不一定是单个区域。堆区域将被标记为 <code>[anon:libc_malloc]</code>。</p>
+<p>
+在 Android 上,该堆不一定是单个区域。堆区域将被标记为 <code>[anon:libc_malloc]</code>。
+</p>
 
 <pre class="devsite-click-to-copy">
 f6d82000-f6da1fff r--         0     20000  /dev/__properties__/u:object_r:logd_prop:s0
@@ -392,7 +461,9 @@
 f6f33000-f6f33fff rw-      e000      1000  /system/lib/liblog.so
 </pre>
 
-<p>通常,共享库会有 3 个相邻条目。一个是可读且可执行条目(代码),一个是只读条目(只读数据),还有一个是读写条目(可变数据)。第一列显示映射的地址范围,第二列显示权限(采用常规 Unix <code>ls(1)</code> 样式),第三列显示到文件的偏移量(十六进制),第四列显示区域大小(十六进制),第五列显示文件(或其他区域名称)。</p>
+<p>
+通常,共享库会有 3 个相邻条目。一个是可读且可执行条目(代码),一个是只读条目(只读数据),还有一个是读写条目(可变数据)。第一列显示映射的地址范围,第二列显示权限(采用常规 Unix <code>ls(1)</code> 样式),第三列显示到文件的偏移量(十六进制),第四列显示区域大小(十六进制),第五列显示文件(或其他区域名称)。
+</p>
 
 <pre class="devsite-click-to-copy">
 f6f34000-f6f53fff r-x         0     20000  /system/lib/libm.so (BuildId: 76ba45dcd9247e60227200976a02c69b)
@@ -423,7 +494,7 @@
 </pre>
 
 <p>
-请注意,从 Android 5.0 (Lollipop) 开始,C 库会对其大部分匿名的映射区域进行命名,因此无名区域将会有所减少。
+从 Android 5.0 开始,C 库会对其大部分匿名的映射区域进行命名,因此无名区域将会有所减少。
 </p>
 
 <pre class="devsite-click-to-copy">
@@ -431,7 +502,7 @@
 </pre>
 
 <p>
-名为 <code>[stack:<i>tid</i>]</code> 的区域是指定线程的堆栈。
+名为 <code>[stack:<var>tid</var>]</code> 的区域是指定线程的堆栈。
 </p>
 
 <pre class="devsite-click-to-copy">
@@ -445,6 +516,8 @@
 ffff0000-ffff0fff r-x         0      1000  [vectors]
 </pre>
 
-<p>您看到的是 <code>[vector]</code> 还是 <code>[vdso]</code> 取决于架构。ARM 使用 [vector],而所有其他架构均使用 <a href="http://man7.org/linux/man-pages/man7/vdso.7.html">[vdso]</a>。</p>
+<p>
+您看到的是 <code>[vector]</code> 还是 <code>[vdso]</code> 取决于架构。ARM 使用 <code>[vector]</code>,而所有其他架构均使用 <a href="http://man7.org/linux/man-pages/man7/vdso.7.html" class="external"><code>[vdso]</code></a>。
+</p>
 
-</i></body></html>
\ No newline at end of file
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/display/display-cutouts.html b/zh-cn/devices/tech/display/display-cutouts.html
new file mode 100644
index 0000000..3dfe0fc
--- /dev/null
+++ b/zh-cn/devices/tech/display/display-cutouts.html
@@ -0,0 +1,237 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="display_cutouts" class="page-title">刘海屏</h1>
+
+<p>Android 9 新增了对在设备上实现不同类型刘海屏的支持。通过刘海屏,您可以打造沉浸式全面屏体验,同时继续在设备前端为重要传感器留出空间。</p>
+
+<p><img src="/devices/tech/display/images/top-center-cutout.png" alt="顶部中间刘海屏" width="250px"/></p>
+
+<p><strong>图 1. </strong> 顶部中间刘海屏</p>
+
+<p>Android 9 支持以下类型的刘海屏:</p>
+
+<ul>
+<li>顶部中间刘海屏:刘海屏位于顶部边缘的中间位置</li>
+<li>顶部非中间刘海屏:刘海屏位于边角处或稍微偏离中心的位置</li>
+<li>底部刘海屏:刘海屏位于底部</li>
+<li>双刘海屏:一个刘海屏位于顶部,一个位于底部</li>
+</ul>
+
+<h2 id="examples_and_source">示例和来源</h2>
+
+<p>以下窗口管理器代码 (<a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/policy/PhoneWindowManager.java">frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java</a>) 显示了如何在未设置 <code>LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS</code> 的情况下将显示屏框架嵌入安全区域。</p>
+<pre class="prettyprint lang-java"><code>// Ensure that windows with a DEFAULT or NEVER display cutout mode are laid out in
+// the cutout safe zone.
+if (cutoutMode != LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS) {
+    final Rect displayCutoutSafeExceptMaybeBars = mTmpDisplayCutoutSafeExceptMaybeBarsRect;
+    displayCutoutSafeExceptMaybeBars.set(displayFrames.mDisplayCutoutSafe);
+    if (layoutInScreen &amp;&amp; layoutInsetDecor &amp;&amp; !requestedFullscreen
+            &amp;&amp; cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT) {
+        // At the top we have the status bar, so apps that are
+        // LAYOUT_IN_SCREEN | LAYOUT_INSET_DECOR but not FULLSCREEN
+        // already expect that there's an inset there and we don't need to exclude
+        // the window from that area.
+        displayCutoutSafeExceptMaybeBars.top = Integer.MIN_VALUE;
+    }
+    if (layoutInScreen &amp;&amp; layoutInsetDecor &amp;&amp; !requestedHideNavigation
+            &amp;&amp; cutoutMode == LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT) {
+        // Same for the navigation bar.
+        switch (mNavigationBarPosition) {
+            case NAV_BAR_BOTTOM:
+                displayCutoutSafeExceptMaybeBars.bottom = Integer.MAX_VALUE;
+                break;
+            case NAV_BAR_RIGHT:
+                displayCutoutSafeExceptMaybeBars.right = Integer.MAX_VALUE;
+                break;
+            case NAV_BAR_LEFT:
+                displayCutoutSafeExceptMaybeBars.left = Integer.MIN_VALUE;
+                break;
+        }
+    }
+    if (type == TYPE_INPUT_METHOD &amp;&amp; mNavigationBarPosition == NAV_BAR_BOTTOM) {
+        // The IME can always extend under the bottom cutout if the navbar is there.
+        displayCutoutSafeExceptMaybeBars.bottom = Integer.MAX_VALUE;
+    }
+    // Windows that are attached to a parent and laid out in said parent already avoid
+    // the cutout according to that parent and don't need to be further constrained.
+    // Floating IN_SCREEN windows get what they ask for and lay out in the full screen.
+    // They will later be cropped or shifted using the displayFrame in WindowState,
+    // which prevents overlap with the DisplayCutout.
+    if (!attachedInParent &amp;&amp; !floatingInScreenWindow) {
+        mTmpRect.set(pf);
+        pf.intersectUnchecked(displayCutoutSafeExceptMaybeBars);
+        parentFrameWasClippedByDisplayCutout |= !mTmpRect.equals(pf);
+    }
+    // Make sure that NO_LIMITS windows clipped to the display don't extend under the
+    // cutout.
+    df.intersectUnchecked(displayCutoutSafeExceptMaybeBars);
+}
+</code></pre>
+<p>SystemUI 在刘海屏区域呈现,且需要确定可以绘制的位置。
+<a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java">frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java</a> 提供了一个视图示例,它确定了刘海屏的位置、刘海屏大小,以及从导航栏嵌入是否可以避开刘海屏区域。</p>
+
+<p>通过覆盖 <code>onApplyWindowInsets()</code>,视图可以确定刘海屏的位置,并相应地更新其布局。</p>
+<pre class="prettyprint lang-java"><code>@Override
+    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+        if (updateOrientationAndCutout(mLastOrientation)) {
+            updateLayoutForCutout();
+            requestLayout();
+        }
+        return super.onApplyWindowInsets(insets);
+    }
+</code></pre>
+<p>这些方法概述了各种类型的刘海屏(即顶部中间刘海屏、顶部非中间刘海屏、底部刘海屏和双刘海屏)在状态栏中的处理方式。</p>
+
+<h2 id="requirements">要求</h2>
+
+<p>要确保刘海屏不会对应用造成负面影响,您必须确保:</p>
+
+<ul>
+<li>在竖屏模式下,状态栏的高度至少与刘海屏的高度持平</li>
+<li>在全屏模式和横屏模式下,刘海屏区域必须显示遮幅式黑边</li>
+</ul>
+
+<p>您的设备最多可以在每个短边处(顶部和底部)各设一个刘海屏。</p>
+
+<p>有关详情,请参阅 <a href="/compatibility/android-cdd">CDD</a>。</p>
+<aside class="note"><strong>注意</strong>:<span>对于面向 Android 8.0 或更低版本的应用,您可以为用户提供一个可使全屏或横屏应用延伸至刘海屏区域的选项(例如导航栏中的切换开关)。由于这样做可能会导致内容被切断,因此 <code>layoutInDisplayCutoutMode</code> 活动主题属性已反向移植到 Android 8.1,以允许应用选择停用该选项。如果您设置了该属性,则可能无法显示特殊的模式切换开关。</span></aside>
+<h2 id="implementation">实现</h2>
+
+<p>要在设备上实现刘海屏,您必须为系统界面配置以下值。</p>
+
+<table>
+<thead>
+<tr>
+<th>值</th>
+<th>说明</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>
+quick_qs_offset_height
+</code>
+</td>
+<td><p>定义“快捷设置”面板的上外边距。时钟和电池图标显示在该面板上方的空间。</p>
+<p>在 values-land 中,将此值设置为 <code>status_bar_height_landscape</code>,在纵屏模式下,将此值设置为默认值 48dp 或刘海屏高度(以较大者为准)。可以根据需要选择高于刘海屏的高度。</p></td>
+</tr>
+<tr>
+<td><code>
+quick_qs_total_height
+</code>
+</td>
+<td><p>展开通知栏时,“超快设置”面板(收起的“快捷设置”面板)的总高度(其中包括包含时钟图标的面板上方的空间)。</p>
+<p>
+受“快捷设置”面板的布局方式限制,“超快设置”面板(包括偏移量)的总高度必须是静态已知的,因此必须由同一增量 <code>quick_qs_offset_height</code> 调整此值。在 Values-land 中,此值默认为 152dp,在纵屏模式下,此值默认为 176dp。</p></td>
+</tr>
+<tr>
+<td><code>
+status_bar_height_portrait
+</code>
+</td>
+<td><p>从框架的角度而言,状态栏的默认高度。</p>
+<p>在大多数设备上,此值默认为 24dp。如果设备上有刘海屏,则将此值设置为刘海屏的高度。可以根据需要选择高于刘海屏的高度。</p></td>
+</tr>
+<tr>
+<td><code>
+status_bar_height_landscape
+</code>
+</td>
+<td><p>状态栏在横屏模式下的高度。由于仅支持在设备的短边上显示刘海屏,因此此值始终是未经更改的状态栏高度。</p>
+<p>在没有刘海屏的设备上,此值等同于 <code>status_bar_height_portrait</code>。如果设备上有刘海屏,则将此值保留为默认的状态栏高度。</p></td>
+</tr>
+<tr>
+<td><code>
+config_mainBuiltInDisplayCutout
+</code>
+</td>
+<td><p>用于定义刘海屏形状的路径。这是一个可由 <code>android.util.PathParser</code> 解析的字符串,并且是向系统定义刘海屏大小和形状的方式。</p>
+<p>可在路径中指定 <code>@dp</code> 以便模拟针对不同设备的形状。由于实际的刘海屏具有精确的像素尺寸,因此在定义硬件刘海屏的路径时,请勿使用 <code>@dp</code> 指定符。</p></td>
+</tr>
+<tr>
+<td><code>
+config_fillMainBuiltinDisplayCutout
+</code>
+</td>
+<td><p>一个确定是否在软件中绘制刘海屏路径(在上文中进行了定义)的布尔值。可用于模拟刘海屏,或填充实际刘海屏,以实现抗锯齿。</p>
+<p>如果为 true,则系统会以黑色填充 <code>config_mainBuiltInDisplayCutout</code>。</p></td>
+</tr>
+</tbody>
+</table>
+
+<p>有关默认定义,请参阅以下 <code>dimens</code> 文件:</p>
+
+<ul>
+<li><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values-land/dimens.xml"><code>core/res/res/values-land/dimens.xml</code></a></li>
+<li><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/dimens.xml"><code>core/res/res/values/dimens.xml</code></a></li>
+</ul>
+
+<p>模拟刘海屏的示例叠加层:</p>
+<pre class="prettyprint"><code>&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+
+    &lt;!-- The bounding path of the cutout region of the main built-in display.
+         Must either be empty if there is no cutout region, or a string that is parsable by
+         {@link android.util.PathParser}.
+
+         The path is assumed to be specified in display coordinates with pixel units and in
+         the display's native orientation, with the origin of the coordinate system at the
+         center top of the display.
+
+         To facilitate writing device-independent emulation overlays, the marker `@dp` can be
+         appended after the path string to interpret coordinates in dp instead of px units.
+         Note that a physical cutout should be configured in pixels for the best results.
+         --&gt;
+    &lt;string translatable="false" name="config_mainBuiltInDisplayCutout"&gt;
+        M 0,0
+        L -48, 0
+        L -44.3940446283, 36.0595537175
+        C -43.5582133885, 44.4178661152 -39.6, 48.0 -31.2, 48.0
+        L 31.2, 48.0
+        C 39.6, 48.0 43.5582133885, 44.4178661152 44.3940446283, 36.0595537175
+        L 48, 0
+        Z
+        @dp
+    &lt;/string&gt;
+
+    &lt;!-- Whether the display cutout region of the main built-in display should be forced to
+         black in software (to avoid aliasing or emulate a cutout that is not physically existent).
+     --&gt;
+    &lt;bool name="config_fillMainBuiltInDisplayCutout"&gt;true&lt;/bool&gt;
+
+    &lt;!-- Height of the status bar --&gt;
+    &lt;dimen name="status_bar_height_portrait"&gt;48dp&lt;/dimen&gt;
+    &lt;dimen name="status_bar_height_landscape"&gt;28dp&lt;/dimen&gt;
+    &lt;!-- Height of area above QQS where battery/time go (equal to status bar height if &gt; 48dp) --&gt;
+    &lt;dimen name="quick_qs_offset_height"&gt;48dp&lt;/dimen&gt;
+    &lt;!-- Total height of QQS (quick_qs_offset_height + 128) --&gt;
+    &lt;dimen name="quick_qs_total_height"&gt;176dp&lt;/dimen&gt;
+
+&lt;/resources&gt;
+</code></pre>
+<h2 id="validation">验证</h2>
+
+<p>要验证刘海屏的实现,请在以下位置运行 CTS 测试:<a href="https://android.googlesource.com/platform/cts/+/master/tests/">tests/framework/base/windowmanager/src/android/server/wm</a>。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/display/rotate-suggestions.html b/zh-cn/devices/tech/display/rotate-suggestions.html
new file mode 100644
index 0000000..8ba6095
--- /dev/null
+++ b/zh-cn/devices/tech/display/rotate-suggestions.html
@@ -0,0 +1,130 @@
+<html devsite><head>
+    <title>旋转建议</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>
+在 Android 8.0 中,用户可以通过“快捷设置”图块或“显示”设置,在自动屏幕旋转模式和纵向旋转模式之间切换。在 Android P 中,我们对纵向旋转模式进行了更新,以便通过固定当前屏幕旋转来避免发生意外旋转(即使设备位置发生变化)。用户可以根据需要手动触发旋转,只需按一下导航栏中的新按钮即可。我们将纵向模式重命名为“旋转锁定”,它会在自动屏幕旋转模式关闭时启用。自动屏幕旋转模式没有任何变化。
+</p>
+<p>
+当设备处于旋转锁定模式时,用户可以将其屏幕锁定为顶层的可见 Activity 支持的任何旋转方式(假设当前存在系统限制)。如果顶层 Activity 可以在自动屏幕旋转模式下以多种旋转方式呈现,则应在旋转锁定模式下提供相同的选项(根据 Activity 的 <code>screenOrientation</code> 设置,会有一些例外情况)。
+</p>
+<p>
+旋转锁定模式的工作原理是:当设备旋转方式发生变化时,在导航栏中显示一个按钮。为此,即使自动屏幕旋转模式处于关闭状态,设备的屏幕方向传感器也必须一直保持启用状态。点按此按钮可有效设定用户旋转偏好设置:<code>Settings.System.USER_ROTATION</code>。WindowManager 会使用此偏好设置以及有关顶层 Activity 和系统状态的其他详细信息来更改系统的旋转方式。移动到另一个 Activity 时,在确定以何种旋转方式呈现系统时,WindowManager 会继续使用用户旋转偏好设置。
+</p>
+
+<figure>
+  <img src="images/rotate-btn-quickstep.gif" alt="此 GIF 图片显示了屏幕处于纵向方向的横向放置的手机。出现一个图标,询问用户是否要将屏幕方向更改为横向。"/>
+  <figcaption><strong>图 1</strong>. 启用“在主屏幕按钮上向上滑动”手势后的旋转建议按钮</figcaption>
+</figure>
+
+<p>
+在多个 Activity 之间移动时,应遵循用户旋转偏好设置。不过,由于大多数手机用户只希望在短时间内暂时处于横屏模式,因此我们添加了自然屏幕方向偏差。只要系统旋转方式更改为设备的自然屏幕方向,用户旋转偏好设置就会重置为设备的自然屏幕方向。<em></em>对于大多数手机而言,设备的自然屏幕方向是纵向 (0º)。当用户使用仅纵向显示的应用、锁定手机或返回到启动器工作区时,系统通常会重置用户旋转偏好设置。
+</p>
+<p>
+在过去十年间,用户与屏幕旋转方式的互动没有发生太大变化。鉴于用户之前在导航栏中查找旋转选项和按钮的经历,他们可能会发现此功能难以找到。因此,我们向旋转按钮添加了介绍模式,它此模式会在旋转按钮出现时将其突出显示。介绍模式行为仅发生在用户进行前几次按钮互动时,之后便会停用。
+</p>
+<h2 id="source">来源</h2>
+<p>
+Android P 中已添加对旋转建议的支持。大部分更改都包含在下列文件中。
+</p>
+<ul>
+ <li><code>services/.../server/policy/PhoneWindowManager.java</code>:
+  <ul>
+   <li>使用 <code>WindowOrientationListener</code> 的输出的钩子(<code>MyOrientationListener</code>,负责监控传感器以确定设备屏幕是否已旋转)</li>
+   <li>使 <code>WindowOrientationListener</code> 保持有效状态(即使自动屏幕旋转模式已停用)(请参见 <code>needSensorRunningLp()</code>)</li>
+   <li>在考虑用户旋转偏好设置、顶层 Activity <code>screenOrientation</code> 设置和系统状态的情况下,计算系统旋转方式(请参见 <code>rotationForOrientationLw()</code>)</li>
+   <li>确定顶层 Activity 是否可以旋转到指定的旋转状态(请参见 <code>isRotationChoicePossible()</code>)</li>
+  </ul>
+ </li>
+ <li><code>SystemUI/.../statusbar/phone/NavigationBarFragment</code>:
+  <ul>
+   <li>确定导航栏按钮是否应在接收到来自 <code>PhoneWindowManager</code> 的旋转建议回调时显示(请参见 <code>onRotationProposal()</code>)</li>
+   <li>确定何时隐藏旋转导航栏按钮(请参见对 <code>setRotateSuggestionButtonState(false)</code> 的调用)</li>
+   <li>处理按钮超时,包括导航栏处于隐藏状态时(通常在全屏模式下)的特殊情况</li>
+   <li>在返回到设备的自然屏幕方向时重置用户偏好设置 (<code>mRotationWatcher</code>)</li>
+   <li>为 <code>NavigationBarView</code> 中应用的导航栏按钮动画选择适当样式(请参见 <code>onRotationProposal()</code>)</li>
+   <li>添加介绍模式逻辑,包括专门的动画(请参见对 <code>Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED</code> 的引用)</li>
+   <li>实现 disable2 旋转标记(请参见 <code>disable()</code>)</li>
+  </ul>
+ </li>
+ <li><code>SystemUI/.../statusbar/phone/NavigationBarView.java</code>:
+  <ul>
+   <li>设置按钮图标动画样式,使其与将要进行的旋转相匹配(请参见 <code>updateRotateSuggestionButtonStyle()</code>)</li>
+   <li>处理按钮可见性更改(请参见 <code>setRotateButtonVisibility()</code>),其中包括在某些无障碍服务处于有效状态时隐藏旋转按钮的逻辑(用来计算最右侧导航栏按钮堆栈排名)</li>
+  </ul>
+ </li>
+ <li><code>SystemUI/res/layout/menu_ime.xml</code>:
+  <ul>
+   <li>为旋转按钮添加新的 <code>KeyButtonView</code>,使其叠加在菜单和 IME/键盘选择器上方,但位于无障碍按钮的下方</li>
+  </ul>
+ </li>
+ <li><code>SystemUI/res/drawable/ic_sysbar_rotate_button.xml</code>:
+  <ul>
+   <li>复杂的 <code>AnimatedVectorDrawable</code>,用于为旋转导航栏按钮添加动画效果</li>
+   <li>样式设置(位于 <code>SystemUI/res/values/styles.xml</code> 中)用于设置旋转的开始角度和结束角度,以便使用相同的可绘制资源,为各种开始和结束角度的旋转添加动画效果</li>
+   <li>图标的色调调节通过 <code>TintedKeyButtonDrawable</code> 进行设置</li>
+  </ul>
+ </li>
+</ul>
+
+<h2 id="implementation">实现</h2>
+<p>
+Android P 包含了所有必要的更改,以获取适用于使用软件导航键(返回、主屏幕等)的设备的旋转建议。
+</p>
+<p>
+如果设备制造商打造的设备采用的是硬件导航键且希望实现此功能,则需要设计和实现他们自己的系统界面或停用该功能。当设备保持在与当前系统旋转方向呈 90º 或 180º 的位置且可供快速访问时,建议让任何引入的表面都易于使用。因此,不建议像对 IME/键盘选择器使用通知一样对该功能使用通知。
+</p>
+<p>
+使用此功能的硬件要求与使用自动屏幕旋转的要求相同。
+</p>
+<p>
+为确保实现的一致性,当自动屏幕旋转处于关闭状态时,如果系统出于任何原因更改为设备的自然旋转,则用户旋转偏好设置 (<code>Settings.System.USER_ROTATION</code>) 需重置为设备的自然旋转。提供的实现就是这样做的(请参见 <code>NavigationBarFragment.mRotationWatcher</code>)。
+</p>
+<p>
+<code>StatusBarManager.disable2</code> 中有一个新标记,可暂时阻止旋转建议显示。请参见 <code>StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS</code>。所有实现都必须有此标记,因为关键系统应用(包括设置向导)需要用到此标记。提供的实现支持此标记(请参见 <code>NavigationBarFragment.disable()</code>)。
+</p>
+<p>
+我们强烈建议您启用该功能并遵循 AOSP 实现(如果可能)。我们的目标是确保用户在使用不同的设备时可获得相似的屏幕旋转体验,从而体现出当前大多数手机上提供的自动屏幕旋转和纵向锁定的体验一致性。
+</p>
+
+<h2 id="customization">自定义</h2>
+<p>
+由于旋转建议仅在旋转锁定模式(自动屏幕旋转处于关闭状态)下显示,因此您可以选择让自动屏幕旋转默认处于关闭状态,从而选择是否让该功能在新安装的应用中默认处于开启状态。请参阅 <code>SettingsProvider/res/values/defaults.xml</code> 中的 <code>def_accelerometer_rotation</code>,以进行默认设置更改。
+</p>
+<p>
+用户可以通过“快捷设置”或“显示”设置中的旋转图块,轻松更改自动屏幕旋转的启用状态(无论默认设置如何)。
+</p>
+
+<h2 id="validation">验证</h2>
+<p>
+对于测试,您可以通过更改门槛 <code>Settings.Secure</code> 值来关闭和开启该功能。要想实现这一点,最简单的方法是从特权 adb 实例运行以下命令:</p>
+
+<pre class="prettyprint">adb shell settings put secure show_rotation_suggestions &lt;x&gt;
+</pre>
+<p>
+将 x 设置为 <code>0</code>,表示关闭该功能;将其设置为 <code>1</code>,表示开启该功能。
+
+</p><p>
+对于测试,您可以通过更改关联的 <code>Settings.Secure</code> 值来重置引入模式。要想实现这一点,最简单的方法是从特权 adb 实例运行以下命令:</p>
+
+<pre class="prettyprint">adb shell settings put secure num_rotation_suggestions_accepted 0</pre>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/display/synched-app-transitions.html b/zh-cn/devices/tech/display/synched-app-transitions.html
new file mode 100644
index 0000000..2f0ef2a
--- /dev/null
+++ b/zh-cn/devices/tech/display/synched-app-transitions.html
@@ -0,0 +1,52 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="implementing_synchronized_app_transitions" class="page-title">实现同步应用转换</h1>
+
+<p>同步应用转换是 Android 9 中的一项功能,可以改进现有的应用转换架构。当用户打开、关闭应用或在应用之间切换时,SystemUI 或启动器(主屏幕)进程会发送逐帧控制动画的请求,同时保证在视图动画和窗口动画之间进行同步。SystemUI 或启动器在动画过程中绘制新帧时,会在动画应用表面请求一个不同的转换,此转换可以确定应用在屏幕上的组成形式,并标记要与 SystemUI 或启动器目前正在绘制的帧同步的请求(表面事务)。</p>
+
+<p>此过程可以实现无法在 Android 8.x 及更低版本中实现的新应用转换动画。例如,您可以通过<a href="/devices/tech/display/images/app-launch-animation.mp4">应用启动动画</a>将主屏幕图标无缝转换到应用表面,并可以通过<a href="/devices/tech/display/images/notification-launch-animation.mp4">通知启动动画</a>将通知转换到应用表面。</p>
+
+<h2 id="examples_and_source">示例和来源</h2>
+
+<p>请参阅以下参考来了解这项功能。</p>
+
+<ul>
+<li><p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ActivityOptions.java"><code>ActivityOptions.makeRemoteAnimation</code></a></p></li>
+<li><p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/"><code>RemoteAnimationAdapter</code></a></p></li>
+<li><p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/"><code>RemoteAnimationRunner</code></a></p></li>
+<li><p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/Activity.java#7869"><code>Activity.registerRemoteAnimations</code></a></p></li>
+</ul>
+
+<p>有关通知启动动画的参考实现,请参阅 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/src/com/android/systemui/statusbar/notification/"><code>ActivityLaunchAnimator.java</code></a>。</p>
+
+<h2 id="implementation">实现</h2>
+
+<p>您可以根据需要在启动器/系统界面上实现这项功能,也可以在 SystemUI/Launcher3 中使用 AOSP 实现。</p>
+<aside class="note"><strong>注意</strong>:<span>这项功能会增加 GPU 和 CPU 在动画期间的负载。</span></aside>
+<h2 id="validation">验证</h2>
+
+<p>要验证动画效果,请衡量控制应用(即 SystemUI 或启动器)在动画期间的性能(如<a href="https://developer.android.com/training/testing/performance">测试界面性能</a>中所述)。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/display/textclassifier.html b/zh-cn/devices/tech/display/textclassifier.html
index 0a2e20e..b4f4d23 100644
--- a/zh-cn/devices/tech/display/textclassifier.html
+++ b/zh-cn/devices/tech/display/textclassifier.html
@@ -1,9 +1,10 @@
 <html devsite><head>
-    <title>实现 TEXTCLASSIFIER</title>
+    <title>实现文本分类</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
   <body>
+
   <!--
       Copyright 2017 The Android Open Source Project
 
@@ -20,10 +21,102 @@
       limitations under the License.
   -->
 
-<h2 id="overview">概览</h2>
+<p>文本分类使用机器学习技术协助开发者对文本进行分类。</p>
+
+<h2>Android 9 版本的文本分类增强功能</h2>
+
+<p>Android 9 借助新的文本分类程序服务扩展了 <a href="#8_1release">Android 8.1 中引入的文本分类框架</a>。建议原始设备制造商 (OEM) 使用文本分类程序服务提供文本分类系统支持。文本分类程序服务可以是任何系统 APK 的一部分,且可以根据需要进行更新。</p>
+
+<p>Android 9 包含系统会使用的默认文本分类程序服务实现 (<a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/view/textclassifier/TextClassifierImpl.java"><code>TextClassifierImpl</code></a>)(除非您将其替换为自定义文本分类程序服务实现)。</p>
+
+<h3>实现自定义文本分类程序服务</h3>
+<p>下文介绍了如何实现您开发的自定义文本分类程序服务。</p>
+
+<h4>扩展 android.service.textclassifier.TextClassifierService</h4>
+<p></p><pre class="prettyprint">
+public final class TextClassifierServiceImpl
+        extends TextClassifierService {
+
+    // Returns TextClassifierImpl.
+    private final TextClassifier tc = getLocalTextClassifier();
+
+    @Override
+    public void onSuggestSelection(
+            @Nullable TextClassificationSessionId sessionId,
+            @NonNull TextSelection.Request request,
+            @NonNull CancellationSignal cancellationSignal,
+            @NonNull Callback&lt;TextSelection&gt; callback) {
+        CompletableFuture.supplyAsync(
+                () -&gt; tc.suggestSelection(request))
+                .thenAccept(r -&gt; callback.onSuccess(r));
+    }
+
+    @Override
+    public void onClassifyText(
+            @Nullable TextClassificationSessionId sessionId,
+		@NonNull TextClassification.Request request,
+		@NonNull CancellationSignal cancellationSignal,
+		@NonNull Callback&lt;TextClassification&gt; callback) {
+        ...
+    }
+
+    @Override
+    public void onGenerateLinks(
+            @Nullable TextClassificationSessionId sessionId,
+            @NonNull TextLinks.Request request,
+            @NonNull CancellationSignal cancellationSignal,
+            @NonNull Callback&lt;TextLinks&gt; callback) {
+        ...
+    }
+    ...
+}
+</pre>
+<p></p>
+
+<h4>在 Android 清单中定义该服务</h4>
+
+<p><em>[AndroidManifest.xml]</em></p>
+<p></p><pre class="prettyprint">
+&lt;service android:name=".TextClassifierServiceImpl"
+  android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE"&gt;
+    &lt;intent-filter&gt;
+      &lt;action android:name=
+        "android.service.textclassifier.TextClassifierService"/&gt;
+    &lt;/intent-filter&gt;
+&lt;/service&gt;
+</pre><p></p>
 
 <p>
-Android 8.1 引入了 TextClassfier API,该 API 可以使用机器学习技术来协助开发者对文本进行分类:</p>
+请注意,该服务必须具有 <code>android.permission.BIND_TEXTCLASSIFIER_SERVICE</code> 权限,还必须指定 <code>android.service.textclassifier.TextClassifierService</code> Intent 操作。</p>
+
+<h4>在配置叠加层设置系统默认文本分类程序服务</h4>
+<p>[<em>config.xml</em>]</p>
+<p></p><pre class="prettyprint">
+&lt;string name="config_defaultTextClassifierPackage" translatable="false"&gt;com.example.textclassifierservice&lt;/string&gt;</pre><p></p>
+
+<h4>将文本分类程序服务编译到系统映像中</h4>
+<p>您的自定义文本分类程序服务可以是编译到系统映像中的独立 APK,也可以是其他系统 APK 的一部分。系统使用 <code>PackageManager.MATCH_SYSTEM_ONLY</code> 解析服务。
+</p>
+
+<h3>测试</h3>
+
+<p>在 <code>android.view.textclassifier.cts</code> 中运行测试</p>
+
+<h3>Android 9 中的其他文本分类更改</h3>
+
+<p>请参阅<a href="https://source.android.com/devices/tech/display/textclassifier#inspecting-installed-language-modules">检查已安装的语言模块</a>。</p>
+<p>Android 9 模型文件与 Android 8.x 模型文件不兼容。</p>
+<p>Android 9 模型文件的命名模式如下:<code>texclassifier.[language-code].model</code>(例如 <code>textclassifier.en.model</code>),而 Android 8.x 的命名模式则为 <code>textclassifier.smartselection.en.model</code>。</p>
+
+<h3>获取最新的文本分类模型文件</h3>
+<p>要获取最新的模型,可以运行以下脚本(该脚本可以更新源代码树中的 TextClassifier 模型):</p>
+
+<p></p><pre class="devsite-terminal devsite-click-to-copy">
+<a href="https://android.googlesource.com/platform/external/libtextclassifier/+/master/models/">external/libtextclassifier/models/</a>update.sh</pre><p></p>
+
+<h2 id="8_1release">Android 8.1 版文本分类</h2>
+
+<p>Android 8.1 引入了 TextClassfier API 来实现文本分类</p>
 
 <pre class="prettyprint">TextClassificationManager tcm =
     context.getSystemService(TextClassificationManager.class);
@@ -50,14 +143,14 @@
   <b>图 1.</b> TEXTCLASSIFIER 的用法。
 </p>
 
-<h2 id="textclassifier-neural-net-models">TextClassifier 神经网络模型</h2>
+<h3 id="textclassifier-neural-net-models">TextClassifier 神经网络模型</h3>
 <p>
 Android 开源项目 (AOSP) 具有多个用于文本分类的神经网络模型。每个模型文件都已针对单一语言进行训练。您可以选择安装任何组合的模型。模型会在以下位置进行定义:</p>
 <p>
 <code>external/libtextclassifier/Android.mk</code>
 </p>
 
-<h2 id="pre-installing-language-models-on-devices">在设备上预安装语言模型</h2>
+<h3 id="pre-installing-language-models-on-devices">在设备上预安装语言模型</h3>
 <p>
 您可以指定一组语言模型并将其安装在设备上:</p>
 
@@ -83,7 +176,7 @@
     textclassifier.smartselection.bundle1
 </pre>
 
-<h2 id="inspecting-installed-language-modules">检查已安装的语言模块</h2>
+<h3 id="inspecting-installed-language-modules">检查已安装的语言模块</h3>
 <p>
 使用 ADB 命令列出目录下的文件:</p>
 
@@ -94,7 +187,7 @@
 -rw-r--r-- 1 root root ... textclassifier.smartselection.fr.model
 </pre>
 
-<h2 id="gservices-model-updates">模型更新</h2>
+<h3 id="gservices-model-updates">模型更新</h3>
 
 <p>
 要更新模型,您可以将新模型作为系统映像的一部分来更新,也可以通过使用系统 <code>API ACTION_UPDATE_SMART_SELECTION</code> intent 触发更新的系统组件来进行动态更新。通过广播该系统 API intent,框架得以更新当前所设置语言的语言模型。模型自身包含支持的语言和版本号,因此会使用最新的合适模型。
@@ -104,7 +197,7 @@
 因此,您无需预加载所有语言的模型,因为这些模型可以稍后再添加。如果未找到指定语言的模型文件,则文本分类将返回空操作值。
 </p>
 
-<h2 id="compatibility-test-suite-tests">兼容性测试套件测试</h2>
+<h3 id="compatibility-test-suite-tests">兼容性测试套件测试</h3>
 <p>
 您可以在以下位置找到相关的 Android 兼容性测试套件 (CTS) 测试:</p>
 <p>
diff --git a/zh-cn/devices/tech/health/deprecation.html b/zh-cn/devices/tech/health/deprecation.html
new file mode 100644
index 0000000..45c85d6
--- /dev/null
+++ b/zh-cn/devices/tech/health/deprecation.html
@@ -0,0 +1,66 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+    Copyright 2018 The Android Open Source Project
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<h1 id="deprecating_health10" class="page-title">弃用 [email protected]</h1>
+
+<p>在根据标准 <a href="/devices/architecture/vintf/fcm#hal-version-deprecation">HAL 弃用时间表</a>彻底弃用 [email protected] 之前,框架将继续支持 [email protected]。弃用 [email protected](即从<a href="https://source.android.com/devices/architecture/vintf/comp-matrices">框架兼容性矩阵</a>中移除相关条目)后,也必须从系统中移除 <code>healthd</code> 和 <code>libbatterymonitor</code>,以免 healthd 出现未知行为。由于 [email protected] 是可选 HAL,且 [email protected] 的所有 <code>healthd</code> 依赖项都受 NULL 检查的保护,因此弃用不得被任何事项打断。</p>
+
+<p>根据弃用时间表,当 Android 移除旧版代码路径(healthd、[email protected])时,[email protected] HAL 便会被弃用。此外,Android 还会移除以下内容:</p>
+
+<ol>
+<li>框架中的 healthd 依赖项</li>
+<li>healthd</li>
+<li>系统中的 [email protected] HAL 定义库</li>
+<li>框架兼容性矩阵中的 [email protected] 条目</li>
+</ol>
+
+<h2 id="removing_healthd">移除 healthd</h2>
+
+<p>对于搭载 Android 9 以及升级至 Android 9 且在新的供应商映像中提供 Health 2.0 HAL 的设备,我们建议从系统映像中移除 <code>healthd</code>,以便节省磁盘空间以及加快启动速度。</p>
+
+<p>为此,请执行以下操作:</p>
+
+<ol>
+<li><p>从系统映像中移除 <code>healthd</code> 和 <code>healthd.rc</code>,方法是在 Soong 中向特定于设备的实现中添加以下行:</p>
+<pre class="prettyprint"><code>```
+cc_binary {
+    name: "[email protected]_name"
+    overrides: ["healthd"],
+    // ...
+}
+```
+
+Or, if the module is in Make:
+
+```yaml
+LOCAL_MODULE_NAME := \
+    [email protected]_name
+LOCAL_OVERRIDES_MODULES := healthd
+```
+</code></pre>
+<p>如果已安装默认实现 <code>[email protected]</code>,则改为实现特定于设备的 <code>[email protected]_name</code>。有关详情,请参阅<a href="/devices/tech/health/implementation">实现 Health</a>。</p></li>
+<li><p>将以下行添加到 <code>BoardConfig.mk</code>,以从框架清单中移除备份实例。这样可以确保框架清单正确反映设备上的 HAL,并让相关 VTS 测试可以顺利通过。</p>
+<pre class="prettyprint lang-make"><code>DEVICE_FRAMEWORK_MANIFEST_FILE += \
+    system/libhidl/vintfdata/manifest_healthd_exclude.xml
+</code></pre></li>
+</ol>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/health/implementation.html b/zh-cn/devices/tech/health/implementation.html
new file mode 100644
index 0000000..5e05a34
--- /dev/null
+++ b/zh-cn/devices/tech/health/implementation.html
@@ -0,0 +1,153 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+    Copyright 2018 The Android Open Source Project
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<h1 id="implementing_health" class="page-title">实现“运行状况”</h1>
+
+<p>所有 <code>healthd</code> 代码均已重构为 [email protected] 和 <code>libhealthservice</code>,然后均已经过修改以实现 [email protected] HAL。这两个库通过 [email protected] 进行静态关联,这使得 [email protected] 能够完成之前由 <code>healthd</code> 完成的作业(即运行 <code>healthd_mainloop</code> 并完成轮询)。在 init 中,[email protected] 会将接口 <code>IHealth</code> 的实现注册到 <code>hwservicemanager</code>。在升级搭载 Android 8.x 供应商映像和 Android 9 框架的设备时,供应商映像可能不提供 [email protected] 服务。这项服务是按照<a href="/devices/architecture/vintf/fcm#hal-version-deprecation">弃用时间表</a>强制执行的。</p>
+
+<p>为了解决此问题:</p>
+
+<ol>
+<li><code>healthd</code> 会将 <code>IHealth</code> 注册到 <code>hwservicemanager</code>(尽管它是系统守护进程)。<code>IHealth</code> 会被添加到系统清单中(实例名称为“backup”)。</li>
+<li>框架和 <code>storaged</code> 会通过 <code>healthd</code>(而不是 <code>hwbinder</code>)与 <code>binder</code> 进行通信。</li>
+<li>框架和 <code>storaged</code> 的代码会进行更改,以获取实例“default”(如果有),然后获取“backup”。
+<ul>
+<li>C++ 客户端代码会使用 <code>libhealthhalutils</code> 中定义的逻辑。</li>
+<li>Java 客户端代码会使用 <code>HealthServiceWrapper</code> 中定义的逻辑。</li>
+</ul></li>
+<li>在广泛推出 IHealth/default 实例且弃用 Android 8.1 供应商映像后,就可以弃用 IHealth/backup 实例和 <code>healthd</code> 了。如需了解详情,请参阅<a href="/devices/tech/health/deprecation">弃用 [email protected]</a>。</li>
+</ol>
+
+<h2 id="board_specific_build_variables_for_healthd">针对 healthd 的板级编译变量</h2>
+
+<p><code>BOARD_PERIODIC_CHORES_INTERVAL_*</code> 是用于编译 <code>healthd</code> 的板级变量。板级值用于分隔系统编译部分和供应商编译部分,<strong>无法</strong>针对系统模块定义进行定义。在 [email protected] 中,供应商可以在 <code>healthd_mode_ops-&gt;init</code> 中覆盖这两个值(方法是弃用 <code>[email protected].&lt;device&gt;</code> 中的 <code>libhealthservice</code> 依赖项并重新实现此函数)。</p>
+
+<h2 id="static_implementation_library">静态实现库</h2>
+
+<p>与其他 HAL 实现库不同,实现库 [email protected] 是一个<strong>静态</strong>库,[email protected]、charger、recovery 和旧版 healthd 均关联到此库。</p>
+
+<p>[email protected] 会实现 <code>IHealth</code>(如上所述),并旨在封装 <code>libbatterymonitor</code> 和 <code>libhealthd.<var>BOARD</var></code>。这些 [email protected] 用户不得直接使用 <code>BatteryMonitor</code> 或 <code>libhealthd</code> 中的函数,而应该将这些调用替换为对 <code>Health</code> 类的调用(即实现 <code>IHealth</code> 接口)。为了进一步进行泛化,<code>healthd_common</code> 代码也会包含在 [email protected] 中。新的 <code>healthd_common</code> 包含 [email protected]、charger 和 <code>healthd</code> 之间公用代码的剩余部分,并会调用 IHealth 方法(而不是 BatteryMonitor)。</p>
+
+<h2 id="implementing_health_20_service">实现 Health 2.0 服务</h2>
+
+<p>在为设备实现 [email protected] 服务时,如果默认实现:</p>
+
+<ul>
+<li>足以用于设备,则直接使用 <code>[email protected]</code>。</li>
+<li><p>不足以用于设备,则创建 <code>[email protected].(device)</code> 可执行文件并包括:</p>
+<pre class="prettyprint"><code>#include &lt;health2/service.h&gt;
+int main() { return health_service_main(); }
+</code></pre></li>
+</ul>
+
+<p>然后:</p>
+
+<ul>
+<li><p>如果板级 <code>libhealthd:</code></p>
+
+<ul>
+<li>确实存在,则与其关联。</li>
+<li>不存在,则提供针对 <code>healthd_board_init</code> 和 <code>healthd_board_battery_update</code> 函数的空实现。</li>
+</ul></li>
+<li><p>如果板级 <code>BOARD_PERIODIC_CHORES_INTERVAL_*</code> 变量:</p>
+
+<ul>
+<li>已定义,则创建设备特定的 <code>HealthServiceCommon.cpp</code>(从 <code>hardware/interfaces/health/2.0/utils/libhealthservice</code> 中复制),并在 <code>healthd_mode_service_2_0_init</code> 中对其进行自定义。</li>
+<li>未定义,则静态关联到 <code>libhealthservice</code>。</li>
+</ul></li>
+<li><p>如果设备:</p>
+
+<ul>
+<li>应该实现 <code>getStorageInfo</code> 和 <code>getDiskStats</code> API,则在 <code>get_storage_info</code> 和 <code>get_disk_stats</code> 函数中提供实现。</li>
+<li>不应该实现这些 API,则静态关联到 <code>libstoragehealthdefault</code>。</li>
+</ul></li>
+<li><p>更新必要的 SELinux 权限。</p></li>
+</ul>
+
+<p>如需了解详情,请参阅 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/health/2.0/README">hardware/interfaces/health/2.0/README</a>。</p>
+
+<h2 id="health_clients">Health 客户端</h2>
+
+<p>[email protected] 具有以下客户端:</p>
+
+<ul>
+<li><strong>charger</strong>。<code>libbatterymonitor</code> 和 <code>healthd_common</code> 代码的使用情况信息封装在 [email protected] 中。</li>
+<li><strong>recovery</strong>。<code>libbatterymonitor</code> 的链接封装在 [email protected] 中。对 <code>Health</code> 实现类的调用取代了对 <code>BatteryMonitor</code> 的所有调用。</li>
+<li><p><strong>BatteryManager</strong>。<code>BatteryManager.queryProperty(int id)</code> 是 <code>IBatteryPropertiesRegistrar.getProperty</code>(由 <code>healthd</code> 提供并直接读取 <code>/sys/class/power_supply</code>)的唯一客户端。</p>
+
+<p>出于安全方面的考虑,不允许应用直接调用 Health HAL。在 Android 9 中,Binder 服务 <code>IBatteryPropertiesRegistrar</code> 由 <code>BatteryService</code>(而非 <code>healthd</code>)提供,<code>BatteryService</code> 会将调用委派给 Health HAL 以检索请求的信息。</p></li>
+<li><p><strong>BatteryService</strong>。在 Android 9 中,<code>BatteryService</code> 使用 <code>HealthServiceWrapper</code> 来确定要使用的 Health 服务实例(来自供应商的“default”实例或来自 healthd 的“backup”实例)。然后,它通过 <code>IHealth.registerCallback</code> 侦听 Health 事件。</p></li>
+<li><p><strong>Storaged</strong>。在 Android 9 中,<code>storaged</code> 使用 <code>libhealthhalutils</code> 来确定要使用的 Health 服务实例(来自供应商的“default”实例或来自 healthd 的“backup”实例)。然后,它通过 <code>IHealth.registerCallback</code> 侦听 Health 事件并检索存储信息。</p></li>
+</ul>
+
+<h2 id="selinux_changes">SELinux 变更</h2>
+
+<p>新的 [email protected] HAL 包括以下 SELinux 变更:</p>
+
+<ul>
+<li>将 [email protected] 添加到 <code>file_contexts</code>。</li>
+<li>允许 <code>system_server</code> 和 <code>storaged</code> 使用 <code>hal_health</code>。</li>
+<li>允许 <code>system_server</code> (<code>BatteryService</code>) 注册 <code>batteryproperties_service</code> (<code>IBatteryPropertiesRegistrar</code>)。</li>
+<li>允许 <code>healthd</code> 提供 <code>hal_health</code>。</li>
+<li>移除允许 <code>system_server</code>/<code>storaged</code> 通过 Binder 调用 <code>healthd</code> 的规则。</li>
+<li>移除允许 <code>healthd</code> 注册 <code>batteryproperties_service</code> (<code>IBatteryPropertiesRegistrar</code>) 的规则。</li>
+</ul>
+
+<p>对于具有自己实现的设备,一些供应商 SELinux 变更可能是必须的。例如:</p>
+<pre class="prettyprint"><code># device/&lt;manufacturer&gt;/&lt;device&gt;/sepolicy/vendor/file_contexts
+/vendor/bin/hw/android\.hardware\.health@2\.0-service.&lt;device&gt; u:object_r:hal_health_default_exec:s0
+
+# device/&lt;manufacturer&gt;/&lt;device&gt;/sepolicy/vendor/hal_health_default.te
+# Add device specific permissions to hal_health_default domain, especially
+# if it links to board-specific libhealthd or implements storage APIs.
+</code></pre>
+<h2 id="kernel_interfaces">内核接口</h2>
+
+<p><code>healthd</code> 守护进程和默认实现 <code>[email protected]</code> 会访问以下内核接口以检索电池信息:</p>
+
+<ul>
+<li><code>/sys/class/power_supply/*/capacity</code></li>
+<li><code>/sys/class/power_supply/*/charge_counter</code></li>
+<li><code>/sys/class/power_supply/*/charge_full</code></li>
+<li><code>/sys/class/power_supply/*/current_avg</code></li>
+<li><code>/sys/class/power_supply/*/current_max</code></li>
+<li><code>/sys/class/power_supply/*/current_now</code></li>
+<li><code>/sys/class/power_supply/*/cycle_count</code></li>
+<li><code>/sys/class/power_supply/*/health</code></li>
+<li><code>/sys/class/power_supply/*/online</code></li>
+<li><code>/sys/class/power_supply/*/present</code></li>
+<li><code>/sys/class/power_supply/*/status</code></li>
+<li><code>/sys/class/power_supply/*/technology</code></li>
+<li><code>/sys/class/power_supply/*/temp</code></li>
+<li><code>/sys/class/power_supply/*/type</code></li>
+<li><code>/sys/class/power_supply/*/voltage_max</code></li>
+<li><code>/sys/class/power_supply/*/voltage_now</code></li>
+</ul>
+
+<p>默认情况下,使用 <code>libbatterymonitor</code> 的任何设备特定的 Health HAL 实现都会访问这些内核接口(除非它们在 <code>healthd_board_init(struct healthd_config*)</code> 中被覆盖)。</p>
+
+<p>如果这些文件缺失或者无法从 <code>healthd</code> 或默认服务访问这些文件(例如,文件是一个指向供应商专用文件夹的符号链接,因 SELinux 政策配置错误而拒绝访问),则文件无法访问。因此,即使使用的是默认实现,也可能需要进行其他的供应商特定 SELinux 变更。</p>
+
+<h2 id="testing">测试</h2>
+
+<p>Android 9 包括专门为 [email protected] HAL 编写的新 <a href="/compatibility/vts">VTS 测试</a>。如果设备声明在设备清单中提供 [email protected] HAL,则该设备必须通过相应的 VTS 测试。这些测试是为“default”实例(确保设备正确实现 HAL)和“backup”实例(确保 <code>healthd</code> 在被移除之前继续正常发挥作用)编写的。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/health/index.html b/zh-cn/devices/tech/health/index.html
new file mode 100644
index 0000000..fea95b9
--- /dev/null
+++ b/zh-cn/devices/tech/health/index.html
@@ -0,0 +1,133 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+    Copyright 2018 The Android Open Source Project
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<h1 id="health" class="page-title">运行状况</h1>
+
+<p>Android 9 引入了从 [email protected] HAL 升级的主要版本 <code>android.hardware.health</code> HAL 2.0。新版 HAL 具有以下优势:</p>
+
+<ul>
+<li>框架代码和供应商代码之间的区别更清楚。</li>
+<li>弃用了不必要的 <code>healthd</code> 守护进程。</li>
+<li>供应商对运行状况信息报告进行自定义的自由度更高。</li>
+<li>更多设备运行状况信息(不仅包括电池信息)。</li>
+</ul>
+
+<h2 id="requirements">要求</h2>
+
+<p>搭载 Android 9 的设备必须提供 2.0 HAL(而不得提供 1.0 HAL)。未搭载 Android 9 但计划将供应商映像更新为 Target Framework Compatibility Matrix 版本 3(Android 9 中发布的版本)的设备必须移除现有的 1.0 HAL 实现,并提供 2.0 HAL。</p>
+
+<p>AOSP 包含多个帮助程序库,旨在帮助您实现 2.0 HAL 以及完成从旧版 1.0 HAL 的过渡。</p>
+
+<h2 id="terminology">术语</h2>
+
+<ul>
+<li><strong>[email protected]</strong>:<code>[email protected]</code> 的缩写,指的是 Android 8.0 中发布的运行状况 HIDL 的 1.0 版 HAL。</li>
+<li><strong>[email protected]</strong>:<code>[email protected]</code> 的缩写,指的是 Android 9 中发布的运行状况 HIDL 的 2.0 版 HAL。</li>
+<li><strong>charger</strong>:在关机模式充电过程中运行的可执行文件,用于显示手机充电动画。</li>
+<li><strong>recovery</strong>:在恢复模式下运行的可执行文件,必须检索电池信息。</li>
+<li><strong>healthd</strong>:在 Android 中运行的旧版守护进程,用于检索与运行状况相关的信息并将其提供给框架。</li>
+<li><strong>storaged</strong>:在 Android 中运行的守护进程,用于检索存储信息并将其提供给框架。</li>
+</ul>
+
+<h2 id="health_in_android_8x">Android 8.x 中的运行状况</h2>
+
+<p>在 Android 8.x 中,运行状况组件的工作原理详情如下图所示:</p>
+
+<p><img src="images/health-component-1.png" width="512" alt="Android 8.x 中的运行状况"/></p>
+
+<p><strong>图 1</strong>. Android 8.x 中的运行状况</p>
+
+<p>在此图中:</p>
+
+<ul>
+<li>框架通过一 (1) 次 Binder 调用和一 (1) 次 hwbinder 调用与硬件进行通信。</li>
+<li><code>healthd</code> 静态链接到 <code>libhealthd_android</code>、<code>libbatterymonitor</code> 和 <code>libbatteryservice</code>。</li>
+<li>[email protected] 静态链接到 <code>libhealthd.<var>BOARD</var></code>。</li>
+</ul>
+
+<p>每个开发板都可以自定义不同的 <code>libhealthd.<var>BOARD</var></code>;charger、[email protected] 和 recovery 链接到哪个开发板是在编译时确定的。</p>
+
+<p>对于其他模式:</p>
+
+<p><img src="images/health-1-charging-recovery.png" width alt="Android 8.x 中的关机模式充电和恢复模式"/></p>
+
+<p><strong>图 2.</strong> Android 8.x 中的运行状况、关机模式充电和恢复模式</p>
+
+<ul>
+<li>charger 静态链接到 <code>libhealthd.<var>BOARD</var></code>、<code>libhealthd_charger</code> 和 <code>libbatterymonitor</code>。</li>
+<li>recovery 静态链接到 <code>libhealthd.<var>BOARD</var></code> 和 <code>libbatterymonitor</code>。</li>
+</ul>
+
+<h2 id="health_in_android">Android 9 中的运行状况</h2>
+
+<p>在 Android 9 中,运行状况组件的工作原理详情如下图所示:
+<img src="images/health-component-2.png" width="553" alt="Android 9 中的运行状况"/></p>
+
+<p><strong>图 3</strong>. Android 9 中的运行状况</p>
+
+<p>该框架尝试从 <code>hwservicemanager</code> 中检索 [email protected] 服务。如果检索失败,它将调用 [email protected](在 Android 8.x 中提供)。同时,它还会保留原有代码路径,以便 Android 9 系统映像与 Android 8.x 供应商映像兼容。该框架不会同时从两个 HAL 中检索信息,因为设备上只能存在一个服务版本(1.0 或 2.0)。</p>
+<aside class="note"><strong>注意</strong>:<span>对于原有代码路径,流程/库将一直保留到 [email protected] <a href="/devices/architecture/vintf/fcm#hal-version-deprecation">被弃用</a>。</span></aside>
+<p>对于其他模式:</p>
+
+<p><img src="images/health-2-charging-recovery.png" width="397" alt="Android 9 中的关机模式充电和恢复模式"/></p>
+
+<p><strong>图 4.</strong> Android 9 中的运行状况、关机模式充电和恢复模式</p>
+
+<h2 id="hal_interface">HAL 接口</h2>
+
+<p>[email protected] HAL 为框架提供了与旧版 healthd 守护进程相同的功能。此外,它还提供了与 healthd 以前作为 Binder 服务提供的 API 类似的 API(即 <a href="https://android.googlesource.com/platform/frameworks/base/+/2392cbd888212f61a242058f749bcc39d495bf4b/core/java/android/os/IBatteryPropertiesRegistrar.aidl">IBatteryPropertiesRegistrar</a>)。</p>
+
+<p>主界面 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/de542acbbf46812cfb53d231ecb50048baf8780e/health/2.0/IHealth.hal">IHealth</a> 提供以下函数:</p>
+
+<ul>
+<li><code>registerCallback</code>,用于替换 <code>IBatteryPropertiesRegistrar.registerListener</code></li>
+<li><code>unregisterCallback</code>,用于替换 <code>IBatteryPropertiesRegistrar.unregisterListener</code></li>
+<li><code>update</code>,用于替换 <code>IBatteryPropertiesRegistrar.scheduleUpdate</code></li>
+<li><code>IBatteryPropertiesRegistrar.getProperties</code> 将由以下内容替换:
+<ul>
+<li><code>getChargeCounter</code></li>
+<li><code>getCurrentNow</code></li>
+<li><code>getCurrentAverage</code></li>
+<li><code>getCapacity</code></li>
+<li><code>getEnergyCounter</code></li>
+<li><code>getChargeStatus</code></li>
+<li><code>getHealthInfo</code></li>
+</ul></li>
+</ul>
+
+<p>此外,<code>IHealth</code> 还为 <code>storaged</code> 提供了以下新 API,以检索特定于供应商的存储相关信息:</p>
+
+<ul>
+<li><code>getStorageInfo</code></li>
+<li><code>getDiskStats</code></li>
+</ul>
+
+<p>通过回调和 <code>getHealthInfo</code> 返回一个新结构 <code>@2.0::HealthInfo</code>,此结构包含可通过 [email protected] HAL 访问的所有设备运行状况信息,包括:</p>
+
+<ul>
+<li>充电信息(交流电/USB/无线、电流、电压等)</li>
+<li>电池信息(状态、电池电量、电流、电压、充电、技术等)</li>
+<li>存储信息(存储设备信息、磁盘统计信息)</li>
+</ul>
+
+<p>要详细了解如何实现运行状况服务,请参阅<a href="/devices/tech/health/implementation">实现运行状况</a>。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/ota/nonab/device_code.html b/zh-cn/devices/tech/ota/nonab/device_code.html
index 3658138..390690c 100644
--- a/zh-cn/devices/tech/ota/nonab/device_code.html
+++ b/zh-cn/devices/tech/ota/nonab/device_code.html
@@ -72,7 +72,7 @@
 
 <h2 id="recovery-ui">恢复界面</h2>
 <p>要支持配备不同可用硬件(物理按钮、LED、屏幕等)的设备,您可以自定义恢复界面以显示状态,并访问每台设备上已隐藏的手动操作功能。</p>
-<p>您的目标是构建一个包含几个 C++ 对象的小型静态库,以提供设备专属功能。默认情况下系统会使用 <code>
+<p>您的目标是构建一个包含几个 C++ 对象的小型静态库,以提供设备专属功能。默认情况下,系统会使用 <code>
 <b>bootable/recovery/default_device.cpp</b></code> 文件,当您编写此文件的设备专属版本时,可以从复制该文件入手。</p>
 
 <pre class="devsite-click-to-copy">
@@ -553,7 +553,7 @@
 }
 </pre>
 
-<p>要将函数挂接到 edify 解释器中,请提供函数 <code>Register_<i>foo</i></code>(其中 foo 是包含此代码的静态库的名称)。<i></i>调用 <code>RegisterFunction()</code> 即可注册各个扩展函数。按照惯例,您需要对设备专属函数 <code><i>device</i>.<i>whatever</i></code> 进行命名,以免与将来添加的内置函数发生冲突。</p>
+<p>要将函数挂接到 edify 解释器中,请提供函数 <code>Register_<i>foo</i></code>(其中 foo 是包含该代码的静态库的名称)。<i></i>调用 <code>RegisterFunction()</code> 即可注册各个扩展函数。按照惯例,您需要对设备专属函数 <code><i>device</i>.<i>whatever</i></code> 进行命名,以免与将来添加的内置函数发生冲突。</p>
 
 <pre class="prettyprint">
 void Register_librecovery_updater_tardis() {
@@ -700,7 +700,7 @@
 </code> 对象(增量包置于设备上的编译版本)。</li>
 <li><b>info.output_zip</b>:正在创建的更新包;为进行写入而打开的 <code>zipfile.ZipFile
 </code> 对象。使用 common.ZipWriteStr(info.output_zip、filename、data)将文件添加到更新包。<i></i><i></i></li>
-<li><b>info.script</b>:可以附加命令的目标脚本对象。调用 <code>info.script.AppendExtra(<i>script_text</i>)</code>) 以将文本输出到脚本中。请确保输出文本以英文分号结尾,这样就不会遇到随后发出 (emit) 的命令。</li>
+<li><b>info.script</b>:可以附加命令的目标脚本对象。调用 <code>info.script.AppendExtra(<i>script_text</i>)</code> 以将文本输出到脚本中。请确保输出文本以英文分号结尾,这样就不会遇到随后发出 (emit) 的命令。</li>
 </ul>
 
 <p>有关 info 对象的详细信息,请参阅<a href="http://docs.python.org/library/zipfile.html">针对 ZIP 归档的 Python 软件基础文档</a>。</p>
diff --git a/zh-cn/devices/tech/ota/nonab/inside_packages.html b/zh-cn/devices/tech/ota/nonab/inside_packages.html
index 781165b..cdef290 100644
--- a/zh-cn/devices/tech/ota/nonab/inside_packages.html
+++ b/zh-cn/devices/tech/ota/nonab/inside_packages.html
@@ -74,7 +74,7 @@
 <dt><code>apply_patch_check(<i>filename</i>, <i>sha1</i>[, <i>sha1</i>, ...])
 </code></dt>
 <dd>如果 filename 的内容或缓存分区中的临时副本(如果存在)中的内容具有与指定的 sha1 值之一相等的 SHA1 校验和,则返回 True。sha1 值指定为 40 位十六进制数字。<i></i><i></i><i></i>该函数不同于 <code>sha1_check(read_file(<i>filename</i>),
-<i>sha1</i> [, ...])</code>,因为它知道要检查缓存分区副本,因此即使文件被中断的 <code>apply_patch_check()</code> 损坏,<code>apply_patch() update</code> 也将成功。</dd>
+<i>sha1</i> [, ...])</code>,因为它知道要检查缓存分区副本,因此即使文件被中断的 <code>apply_patch() update</code> 损坏,<code>apply_patch_check()</code> 也将成功。</dd>
 <dt><code>apply_patch_space(<i>bytes</i>)</code></dt>
 <dd>如果至少有 bytes 个字节的暂存空间可用于打二进制补丁程序,则返回 True。<i></i></dd>
 <dt><code>concat(<i>expr</i>[, <i>expr</i>, ...])</code></dt>
diff --git a/zh-cn/devices/tech/ota/reduce_size.html b/zh-cn/devices/tech/ota/reduce_size.html
index d6e4e4c..458ac07 100644
--- a/zh-cn/devices/tech/ota/reduce_size.html
+++ b/zh-cn/devices/tech/ota/reduce_size.html
@@ -25,7 +25,7 @@
 
 <p>有时,Android OTA 包含的变更文件并非源于代码变更,而是编译系统造成的。在不同时间、不同目录或不同机器上编译相同的代码时可能会发生上述情况,产生大量变更文件。这些多余的文件不仅会增加 OTA 的大小,还会导致难以确定 OTA 中发生变更的代码。</p>
 
-<p>为了使 OTA 的内容更加透明,我们对 AOSP 编译系统做了多项改动,目的是消除多次编译之间不必要的文件变更,以此减小 OTA 的大小。这样做是为了减小 OTA 的大小,使其只包含与 OTA 中所含补丁程序相关的文件。AOSP 还包括<a href="#the_build_diff_tool">编译 diff 工具</a>(可过滤出常见的编译相关文件变更,并提供更清晰的编译文件 diff)以及<a href="#block-mapping-tool">块映射工具</a>(可协助您确保块分配的一致性)。</p>
+<p>为了使 OTA 的内容更加透明,我们对 AOSP 编译系统做了多项改动,目的是消除多次编译之间不必要的文件变更,以此减小 OTA 的大小。这样做是为了减小 OTA 的大小,使其只包含与 OTA 中所含补丁程序相关的文件。AOSP 还包括<a href="#the_build_diff_tool">编译 diff 工具</a>(可过滤出常见的与编译相关的文件变更,并提供更清晰的编译文件 diff)以及<a href="#block-mapping-tool">块映射工具</a>(可协助您确保块分配的一致性)。</p>
 
 <p>编译系统可能会通过多种方式创建不必要的文件 diff。下文讨论了其中一些问题和解决方案,并尽可能提供了 AOSP 中的修复示例。</p>
 
@@ -34,9 +34,9 @@
 <p><strong>问题</strong>:文件系统在请求目录中的文件列表时,并不保证文件顺序,尽管对于同一个检出,文件顺序通常是相同的。<code>ls</code> 等工具在默认情况下会对结果进行排序,但 <code>find</code> 和 <code>make</code> 等命令使用的通配符函数却不会对结果进行排序。用户在使用这类工具之前,务必要对输出进行排序。
 </p>
 
-<p><strong>解决方案</strong>:用户在使用支持通配符的 <code>find</code> 和 <code>make</code> 等工具之前,务必要对这些命令的输出进行排序。要在 <code>Android.mk</code> 文件中使用 <code>$(wildcard)</code> 或 <code>$(shell find)</code>,也应该进行排序。有些工具(如 Java)确实会对输入进行排序,因此有必要先对排序进行验证。</p>
+<p><strong>解决方案</strong>:用户在使用支持通配符的 <code>find</code> 和 <code>make</code> 等工具之前,必须对这些命令的输出进行排序。要在 <code>Android.mk</code> 文件中使用 <code>$(wildcard)</code> 或 <code>$(shell find)</code>,也应该进行排序。有些工具(如 Java)确实会对输入进行排序,因此有必要先对排序进行验证。</p>
 
-<p><strong>示例</strong>:多处问题在核心编译系统中通过内置的 <code>all-*-files-under</code> 宏得到修正,其中包括 <code>all-cpp-files-under</code>(一些定义分散在其他 makefile 中)。有关详情,请参阅以下 CL:</p>
+<p><strong>示例</strong>:很多问题在核心编译系统中通过内置的 <code>all-*-files-under</code> 宏(其中包括 <code>all-cpp-files-under</code>,因为一些定义分散在其他 makefile 中)得到了修正。有关详情,请参阅以下 CL:</p>
 
 <ul>
   <li><a href="https://android.googlesource.com/platform/build/+/4d66adfd0e6d599d8502007e4ea9aaf82e95569f" class="external">https://android.googlesource.com/platform/build/+/4d66adfd0e6d599d8502007e4ea9aaf82e95569f</a>
@@ -118,7 +118,7 @@
 
 <h2 id="the_build_diff_tool">使用编译 diff 工具</h2>
 
-<p>对于无法消除编译相关文件变更的情况,AOSP 纳入了编译 diff 工具 <code><a href="https://android.googlesource.com/platform/build/+/master/tools/releasetools/target_files_diff.py" class="external">target_files_diff.py</a></code>,以用于比较两个文件包。该工具会在两个编译之间执行递归 diff,从而排除常见的编译相关文件变更,例如:</p>
+<p>对于无法消除与编译相关的文件变更的情况,AOSP 纳入了编译 diff 工具 <code><a href="https://android.googlesource.com/platform/build/+/master/tools/releasetools/target_files_diff.py" class="external">target_files_diff.py</a></code>,以用于比较两个文件包。该工具会在两个编译之间执行递归 diff,从而排除常见的编译相关文件变更,例如:</p>
 
 <ul>
   <li>编译输出中的预期变更(例如,由于版本号变更所导致)。</li>
diff --git a/zh-cn/devices/tech/perf/apk-caching.html b/zh-cn/devices/tech/perf/apk-caching.html
new file mode 100644
index 0000000..3f9d32b
--- /dev/null
+++ b/zh-cn/devices/tech/perf/apk-caching.html
@@ -0,0 +1,220 @@
+<html devsite><head>
+    <title>APK 缓存</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>
+本文档介绍了如何设计 APK 缓存解决方案,以在支持 A/B 分区的设备上快速安装预加载的应用。
+</p>
+
+<p>
+原始设备制造商 (OEM) 可以将预加载应用和热门应用放置在 APK 缓存中(对于<a href="/devices/tech/ota/ab_updates">采用 A/B 分区</a>的新设备而言,这种缓存会存储在通常为空的 B 分区中),而且这样不会影响面向用户的任何数据空间。新设备或最近恢复出厂设置的设备上有 APK 缓存时,用户基本上可以立即开始使用,而无需从 Google Play 下载 APK 文件。
+</p>
+
+<h2 id="use-cases">用例</h2>
+
+<ul>
+<li>将预加载应用存储在 B 分区,以实现更快捷的设置
+</li><li>将热门应用存储在 B 分区,以实现更快速的恢复
+</li></ul>
+
+<h2 id="prerequisites">前提条件</h2>
+
+<p>
+要使用此功能,设备需要满足以下条件:
+</p>
+
+<ul>
+<li>安装了 Android 8.1 (O MR1) 版本
+</li><li>实现了 A/B 分区</li>
+</ul>
+
+<p>
+您只能在首次启动期间复制预加载内容。这是因为,在支持 A/B 系统更新的设备上,B 分区不会真正存储系统映像文件,而是存储预加载内容(例如零售演示模式资源、OAT 文件和 APK 缓存)。将资源复制到 /data 分区(此操作在首次启动期间完成)后,<a href="/devices/tech/ota/">无线 (OTA) 更新</a>就会将 B 分区用于下载系统映像的已更新版本。
+</p>
+
+<p>
+因此,APK 缓存无法通过 OTA 进行更新;只能在出厂时预加载到设备上。恢复出厂设置只会影响 /data 分区。系统的 B 分区中仍会有预加载内容,直到系统下载 OTA 映像为止。恢复出厂设置后,系统会再次进行首次启动。这意味着,如果将 OTA 映像下载到 B 分区,然后将设备恢复出厂设置,那么 APK 缓存将无法使用。
+</p>
+
+<h2 id="implementation">实现</h2>
+
+<h3 id="approach-1-content-on-system_other-partition">方法 1. system_other 分区上的内容</h3>
+
+<p>
+<strong>优点</strong>:预加载内容不会在恢复出厂设置后丢失,系统会在重新启动后从 B 分区复制这些内容。
+</p>
+
+<p>
+<strong>缺点</strong>:B 分区上需要有可用空间。在恢复出厂设置后进行启动时,需要额外时间来复制预加载内容。
+</p>
+
+<p>
+为了在首次启动期间复制预加载内容,系统会调用 <code>/system/bin/preloads_copy.sh</code> 中的脚本。系统会通过单个参数(<code>system_b</code> 分区的只读装载点的路径)调用该脚本:
+</p>
+
+<p>
+要实现此功能,请完成以下特定于设备的更改。以下是 Marlin 设备的示例:</p>
+
+<ol>
+  <li>将执行复制操作的脚本添加到 <code>device-common.mk</code> 文件(在本例中是 <code>device/google/marlin/device-common.mk</code>),如下所示:
+
+<pre class="devsite-click-to-copy">
+# Script that copies preloads directory from system_other to data partition
+PRODUCT_COPY_FILES += \
+    device/google/marlin/preloads_copy.sh:system/bin/preloads_copy.sh
+</pre>
+
+在以下位置查找示例脚本源代码:<a href="https://android.googlesource.com/device/google/marlin/+/master/preloads_copy.sh">device/google/marlin/preloads_copy.sh</a>
+</li>
+
+<li>修改 <code>init.common.rc</code> 文件,以让其创建必要的<code> /data/preloads</code> 目录和子目录:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir /data/preloads 0775 system system</code>
+<code class="devsite-terminal">mkdir /data/preloads/media 0775 system system</code>
+<code class="devsite-terminal">mkdir /data/preloads/demo 0775 system system</code>
+</pre>
+
+在以下位置查找示例 <code>init</code> 文件源代码:<a href="https://android.googlesource.com/device/google/marlin/+/master/init.common.rc">device/google/marlin/init.common.rc</a>
+</li>
+
+<li>在文件 <code>preloads_copy.te</code> 中定义新的 SELinux 域:
+
+<pre class="devsite-click-to-copy">
+type preloads_copy, domain, coredomain;
+type preloads_copy_exec, exec_type, vendor_file_type, file_type;
+
+init_daemon_domain(preloads_copy)
+
+allow preloads_copy shell_exec:file rx_file_perms;
+allow preloads_copy toolbox_exec:file rx_file_perms;
+allow preloads_copy preloads_data_file:dir create_dir_perms;
+allow preloads_copy preloads_data_file:file create_file_perms;
+allow preloads_copy preloads_media_file:dir create_dir_perms;
+allow preloads_copy preloads_media_file:file create_file_perms;
+
+# Allow to copy from /postinstall
+allow preloads_copy system_file:dir r_dir_perms;
+</pre>
+
+在以下位置查找示例 SELinux 域文件:<a href="https://android.googlesource.com/device/google/marlin/+/master/sepolicy/preloads_copy.te">/device/google/marlin/+/master/sepolicy/preloads_copy.te</a>
+</li>
+
+<li>在新的 <code><device>/sepolicy/file_contexts</device></code> 文件中注册该域:
+
+<pre class="devsite-click-to-copy">
+/system/bin/preloads_copy\.sh     u:object_r:preloads_copy_exec:s0
+</pre>
+
+在以下位置查找示例 SELinux 上下文描述文件:<a href="https://android.googlesource.com/device/google/marlin/+/master/sepolicy/preloads_copy.te">device/google/marlin/sepolicy/preloads_copy.te</a>
+</li>
+
+<li>在编译时,您必须将具有预加载内容的目录复制到 <code>system_other</code> 分区:
+<pre class="devsite-click-to-copy">
+# Copy contents of preloads directory to system_other partition
+PRODUCT_COPY_FILES += \
+    $(call find-copy-subdir-files,*,vendor/google_devices/marlin/preloads,system_other/preloads)
+</pre>
+
+这是 Makefile 中的更改示例,完成这项更改后,就可以将 APK 缓存资源从供应商的 Git 代码库(在本例中是 vendor/google_devices/marlin/preloads)复制到 system_other 分区上的相应位置;稍后,在设备首次启动时,APK 缓存资源便会复制到 /data/preloads。此脚本会在编译时运行,以准备 system_other 映像。它希望将预加载内容放置到 vendor/google_devices/marlin/preloads 中。OEM 可以自由选择实际的代码库名称/路径。
+</li>
+
+<li>APK 缓存位于 <code>/data/preloads/file_cache</code>,布局如下:
+
+<pre>
+/data/preloads/file_cache/
+    app.package.name.1/
+          file1
+          fileN
+    app.package.name.N/
+</pre>
+
+这是设备上的最终目录结构。只要最终文件结构与上述结构相同,OEM 就可以自由选择任何实现方法。
+</li>
+</ol>
+
+<h3 id="approach-2-content-on-user-data-image">方法 2. 在设备出厂时刷写的用户数据映像上的内容</h3>
+
+<p>
+此替代方式假设预加载内容已包含在 <code>/data</code> 分区上的 <code>/data/preloads</code> 目录中。
+</p>
+
+<p>
+<strong>优点</strong>:开箱即用,无需进行设备自定义即可在首次启动时复制文件。预加载内容已位于 <code>/data</code> 分区。
+</p>
+
+<p>
+<strong>缺点</strong>:预加载内容会在恢复出厂设置后丢失。虽然这对部分 OEM 来说是可以接受的,但对于在完成质量控制检查后要对设备恢复出厂设置的 OEM 来说,这种方法并不总是行得通。
+</p>
+
+<p>
+将一种新的 @SystemApi 方法 <code>getPreloadsFileCache()</code> 添加到了 <code>android.content.Context</code>。该方法会返回预加载缓存中某个应用专属目录的绝对路径。
+</p>
+
+<p>
+添加了新方法 <code>IPackageManager.deletePreloadsFileCache</code>,它允许删除预加载目录以回收所有空间。此方法只能由具有 SYSTEM_UID 的应用(即系统服务器或设置)进行调用。
+</p>
+
+<h2 id="app-preparation">应用准备</h2>
+
+<p>
+只有特权应用才可以访问预加载缓存目录。要获得访问权限,应用必须安装在<code> /system/priv-app</code> 目录中。
+</p>
+
+<h2 id="validation">验证</h2>
+
+<ul>
+<li>首次启动后,设备的 <code>/data/preloads/file_cache</code> 目录中应该包含相关内容。
+</li><li>如果设备的存储空间不足,则必须删除 <code>file_cache/</code> 目录中的内容。</li>
+</ul>
+
+<p>使用示例 <a href="https://android.googlesource.com/platform/development/+/master/samples/apkcachetest/">ApkCacheTest</a> 应用测试 APK 缓存。</p>
+
+<ol>
+<li>通过在根目录下运行以下命令来编译应用:<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">make ApkCacheTest</code>
+</pre>
+</li>
+
+<li>将应用安装为特权应用(请注意,只有特权应用可以访问 APK 缓存)。这需要一台已取得 root 权限的设备:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root &amp;&amp; adb remount</code>
+<code class="devsite-terminal">adb shell mkdir /system/priv-app/ApkCacheTest</code>
+<code class="devsite-terminal">adb push $ANDROID_PRODUCT_OUT/data/app/ApkCacheTest/ApkCacheTest.apk /system/priv-app/ApkCacheTest/</code>
+<code class="devsite-terminal">adb shell stop &amp;&amp; adb shell start</code>
+</pre>
+</li>
+
+<li>如果需要,模拟文件缓存目录及其内容(此操作也需要 Root 权限):
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell mkdir -p /data/preloads/file_cache/com.android.apkcachetest</code>
+<code class="devsite-terminal">adb shell restorecon -r /data/preloads</code>
+<code class="devsite-terminal">adb shell "echo "Test File" &gt; /data/preloads/file_cache/com.android.apkcachetest/test.txt"</code>
+</pre>
+</li>
+
+<li>测试应用。安装应用并创建测试 <code>file_cache</code> 目录之后,打开 ApkCacheTest 应用。该应用中应该会显示一个 <code>test.txt</code> 文件及其内容。请参见以下屏幕截图,了解这些结果在界面上的显示方式。
+
+<p><img src="/devices/tech/perf/images/apk_cache_test_results.png"/></p>
+<figcaption><strong>图 1.</strong> ApkCacheTest 结果</figcaption>
+</li>
+</ol>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/perf/boot-times.html b/zh-cn/devices/tech/perf/boot-times.html
index 0a25c23..1e7de63 100644
--- a/zh-cn/devices/tech/perf/boot-times.html
+++ b/zh-cn/devices/tech/perf/boot-times.html
@@ -320,10 +320,10 @@
 使用以下脚本来帮助分析启动性能。
 </p>
 <ul>
-<li><code>packages/services/Car/tools/bootanalyze/bootanalyze.py</code>:负责衡量启动时间,并详细分析启动过程中的重要步骤。
-</li><li><code>packages/services/Car/tools/io_analysis/check_file_read.py
+<li><code>system/extras/boottime_tools/bootanalyze/bootanalyze.py</code>:负责衡量启动时间,并详细分析启动过程中的重要步骤。
+</li><li><code>system/extras/boottime_tools/io_analysis/check_file_read.py
 boot_trace</code>:提供每个文件的访问信息。
-</li><li><code>packages/services/Car/tools/io_analysis/check_io_trace_all.py
+</li><li><code>system/extras/boottime_tools/io_analysis/check_io_trace_all.py
 boot_trace</code>:提供系统级细分信息。</li>
 </ul>
 
diff --git a/zh-cn/devices/tech/perf/compatibility-wal.html b/zh-cn/devices/tech/perf/compatibility-wal.html
new file mode 100644
index 0000000..672c54d
--- /dev/null
+++ b/zh-cn/devices/tech/perf/compatibility-wal.html
@@ -0,0 +1,54 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="compatibility_wal_write_ahead_logging_for_apps" class="page-title">应用的兼容性 WAL(预写日志记录)</h1>
+
+<p>Android 9 引入了 <a href="https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html" class="external">SQLiteDatabase</a> 的一种特殊模式,称为“兼容性 WAL(预写日志记录)”,它允许数据库使用 <code>journal_mode=WAL</code>,同时保留每个数据库最多创建一个连接的行为。</p>
+
+<p>默认情况下,系统会为应用的数据库启用兼容性 WAL,除非应用已执行以下任一操作:</p>
+
+<ol>
+<li class="external">通过调用 <a href="https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#enableWriteAheadLogging()" class="external"><code>SQLiteDatabase.enableWriteAheadLogging</code></a> 或 <a href="https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#disableWriteAheadLogging()"><code>disableWriteAheadLogging</code></a> 启用或停用了预写日志记录</li>
+<li>通过调用以下内容明确请求了 journal 模式:<code>SQLiteDatabase.OpenParams.setJournalMode(String mode)</code></li>
+</ol>
+
+<p>启用 WAL journal 模式可显著提升性能并减少写入量。例如,在 ext4 文件系统中,WAL 可将写入速度提高 4 倍。</p>
+
+<p>兼容性 WAL 默认处于启用状态,且无需任何额外的实现操作。</p>
+<aside class="note"><strong>注意</strong>:<span>对于使用 <a href="https://developer.android.com/topic/libraries/architecture/room">Room</a> 的应用,系统会默认启用完全预写日志记录模式(而非兼容性 WAL)。这适用于运行 API 16 或更高版本且未被归为<a href="https://developer.android.com/reference/android/app/ActivityManager.html#isLowRamDevice()">低内存设备</a>的设备。要了解详情,请参阅 <a href="https://developer.android.com/reference/androidx/room/RoomDatabase.JournalMode#AUTOMATIC"><code>RoomDatabase.JournalMode AUTOMATIC</code></a>。</span></aside>
+<h2 id="disabling_compatibility_wal">停用兼容性 WAL</h2>
+
+<p>要停用兼容性 WAL 模式,请覆盖 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml" class="external"><code>db_compatibility_wal_supported</code></a> 配置资源。</p>
+
+<p>例如:</p>
+<pre class="prettyprint"><code>&lt;bool name="db_compatibility_wal_supported"&gt;false&lt;/bool&gt;
+</code></pre>
+<p>如果对于某些配置而言,WAL journal 模式的性能与原有回滚 journal 模式相比没有提升,您可能想为这种配置停用兼容性 WAL。例如,在 F2FS 文件系统中,虽然 SQLite 支持原子写入且 DELETE journal 性能与 WAL 类似,但 WAL 可以将写入量提高 10% 到 15%。</p>
+
+<h2 id="validation">验证</h2>
+
+<p>要验证兼容性 WAL 模式,请从 CtsDatabaseTestCases 模块运行 <a href="https://android.googlesource.com/platform/cts/+/master/tests/tests/database" class="external">CTS 测试</a>。CTS 测试将在启用兼容性 WAL 后验证预期行为。</p>
+<aside class="note"><strong>注意</strong>:<span>CTS 测试仅在兼容性 WAL 模式停用的情况下才会通过。</span></aside>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/perf/lmkd.html b/zh-cn/devices/tech/perf/lmkd.html
new file mode 100644
index 0000000..e19b514
--- /dev/null
+++ b/zh-cn/devices/tech/perf/lmkd.html
@@ -0,0 +1,154 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="lmkd_in_userspace" class="page-title">用户空间中的 LMKD</h1>
+
+<p>本文档介绍了 Android 9 中新增的用户空间 lowmemorykiller 守护进程 (<code>lmkd</code>) 功能及其配置方法。</p>
+
+<p>过去,Android 使用内核中的 lowmemorykiller 驱动程序来缓解内存压力(通过终止非必需进程)。此机制非常严格,具体取决于硬编码值。此外,从内核版本 4.12 开始,lowmemorykiller 驱动程序会从上游内核中排除。</p>
+
+<p>用户空间 <code>lmkd</code> 进程可实现相同的功能,但它是通过现有的内核机制来检测和估测内存压力。该进程使用内核生成的 vmpressure 事件来获取关于内存压力级别的通知。此外,它还可以使用内存 cgroup 功能来限制分配给相应进程的内存资源(根据每个进程的重要性)。</p>
+
+<h1 id="how_to_switch_to_userspace_lmkd" class="page-title">如何改用用户空间 lmkd</h1>
+
+<p>从 Android 9 开始,用户空间 <code>lmkd</code> 会在未检测到内核 lowmemorykiller 驱动程序时激活。请注意,用户空间 <code>lmkd</code> 要求内核支持内存 cgroup。因此,要改用用户空间 <code>lmkd</code>,您应使用以下配置设置编译内核:</p>
+<pre class="prettyprint"><code>CONFIG_ANDROID_LOW_MEMORY_KILLER=n
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+</code></pre>
+<h1 id="lmkd_kill_strategies" class="page-title">lmkd 终止策略</h1>
+
+<p><code>lmkd</code> 支持基于以下各项的新终止策略:vmpressure 事件、其严重性和其他提示(如交换利用率),以及旧模式(在该模式下,<code>lmkd</code> 会像内核 lowmemorykiller 驱动程序一样做出终止决策)。</p>
+
+<p>内存不足的设备和高性能设备的新终止策略有所不同。对于内存不足的设备,一般情况下,系统会选择承受较大的内存压力;对于高性能设备,如果存在内存压力,则属于异常情况,应及时修复,以免影响整体性能。<code>ro.config.low_ram</code> 属性允许选择其中一种模式。有关如何设置此属性的说明,请参阅<a href="/devices/tech/perf/low-ram">低内存配置</a>。</p>
+
+<p>在旧模式下,<code>lmkd</code> 终止决策是基于可用内存和文件缓存阈值做出的。您可以将 <code>ro.lmk.use_minfree_levels</code> 属性设置为 <code>true</code>,从而启用此模式。</p>
+
+<h1 id="configuring_lmkd_for_specific_device" class="page-title">为特定设备配置 lmkd</h1>
+
+<p>使用以下属性配置 <code>lmkd</code>:</p>
+
+<table>
+  <tbody><tr>
+   <th>属性</th>
+   <th>使用情况</th>
+   <th>默认值</th>
+  </tr>
+  <tr>
+   <td><code>ro.config.low_ram</code>
+   </td>
+   <td>在内存不足的设备和高性能设备之间进行选择。
+   </td>
+   <td><code>false</code>
+   </td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.use_minfree_levels</code>
+   </td>
+   <td>使用可用内存和文件缓存阈值来决定何时终止。此模式与内核 lowmemorykiller 驱动程序之前的工作原理相同。
+   </td>
+   <td><code>false</code>
+   </td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.low</code>
+   </td>
+   <td>可在低 vmpressure 级别下被终止的进程的最低 oom_adj 得分。
+   </td>
+   <td><code>1001</code><br />(已停用)</td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.medium</code>
+   </td>
+   <td>可在中等 vmpressure 级别下被终止的进程的最低 oom_adj 得分。
+   </td>
+   <td><code>800</code><br />(已缓存或非必需服务)</td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.critical</code>
+   </td>
+   <td>可在临界 vmpressure 级别下被终止的进程的最低 oom_adj 得分。
+   </td>
+   <td><code>0</code><br />(任何进程)</td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.critical_upgrade</code>
+   </td>
+   <td>能够升级到临界级别。
+   </td>
+   <td><code>false</code>
+   </td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.upgrade_pressure</code>
+   </td>
+   <td>由于系统交换次数过多,将在该级别升级 vmpressure 事件的 mem_pressure 上限。
+   </td>
+   <td><code>100</code><br />(已停用)</td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.downgrade_pressure</code>
+   </td>
+   <td>由于仍有足够的可用内存,将在该级别忽略 vmpressure 事件的 mem_pressure* 下限。
+   </td>
+   <td><code>100</code><br />(已停用)</td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.kill_heaviest_task</code>
+   </td>
+   <td>终止符合条件的最重要任务(最佳决策)与任何符合条件的任务(快速决策)。</td>
+   <td><code>true</code>
+   </td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.kill_timeout_ms</code>
+   </td>
+   <td>从某次终止后到其他终止完成之前的持续时间(以毫秒为单位)。
+   </td>
+   <td><code>0</code><br />(已停用)</td>
+  </tr>
+  <tr>
+   <td><code>ro.lmk.debug</code>
+   </td>
+   <td>启用 <code>lmkd</code> 调试日志。
+   </td>
+   <td><code>false</code>
+   </td>
+  </tr>
+</tbody></table>
+
+<p>*注意:*mem_pressure = 内存使用量/RAM_and_swap 使用量(以百分比的形式表示)</p>
+
+<p>以下是设备配置示例:</p>
+<pre class="prettyprint"><code>PRODUCT_PROPERTY_OVERRIDES += \
+    ro.lmk.low=1001 \
+    ro.lmk.medium=800 \
+    ro.lmk.critical=0 \
+    ro.lmk.critical_upgrade=false \
+    ro.lmk.upgrade_pressure=100 \
+    ro.lmk.downgrade_pressure=100 \
+    ro.lmk.kill_heaviest_task=true
+</code></pre>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/perf/pgo.html b/zh-cn/devices/tech/perf/pgo.html
new file mode 100644
index 0000000..6decf82
--- /dev/null
+++ b/zh-cn/devices/tech/perf/pgo.html
@@ -0,0 +1,340 @@
+<html devsite><head>
+  <title>使用配置文件引导的优化 (PGO)</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>Android 编译系统支持在具有<a href="https://android.googlesource.com/platform/build/soong/">蓝图</a>编译规则的原生 Android 模块上使用 Clang 的<a href="https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization">配置文件引导优化 (PGO)</a>。本页面介绍了 Clang PGO、如何持续生成和更新用于 PGO 的配置文件,以及如何将 PGO 集成到编译系统(包含用例)。</p>
+
+  <h2 id="about-clang-pgo">Clang PGO 简介</h2>
+
+  <p>Clang 可以使用两类配置文件来执行配置文件引导的优化:</p>
+
+  <ul>
+    <li><strong>基于插桩的配置文件</strong>是从插桩的目标程序生成的。这些配置文件很详细,且会产生很高的运行时开销。</li>
+
+    <li><strong>基于采样的配置文件</strong>通常通过对硬件计数器进行采样生成。此类配置文件产生的运行时开销较低,并且无需对二进制文件进行任何插桩或修改即可收集。详细程度不如基于插桩的配置文件。</li>
+  </ul>
+
+  <p>所有配置文件都应该从执行应用的典型行为的代表性工作负载生成。虽然 Clang 同时支持基于 AST (<code>-fprofile-instr-generate</code>) 和基于 LLVM IR (<code>-fprofile-generate)</code>) 配置文件,但 Android 仅针对基于插桩的 PGO 支持基于 LLVM IR 的配置文件。</p>
+
+  <p>需要为配置文件集合编译以下标记:</p>
+
+  <ul>
+    <li><code>-fprofile-generate</code>,适用于基于 IR 的插桩。借助此选项,后端可使用加权最小生成树方法来减少插桩点的数量,并优化它们在低权重边缘的放置(对于链接步骤也使用此选项)。Clang 驱动程序会自动将分析运行时 (<code>libclang_rt.profile-<em>arch</em>-android.a</code>) 传递给链接器。该库包含可在程序退出时将配置文件写入磁盘的例程。</li>
+
+    <li><code>-gline-tables-only</code>,适用于基于采样的配置文件收集,可生成最少的调试信息。</li>
+  </ul>
+
+  <p>配置文件可用于 PGO(分别针对基于插桩的配置文件和基于采样的配置文件使用 <code>-fprofile-instr-use=<em>pathname</em></code> 和 <code>-fprofile-sample-use=<em>pathname</em></code>)。</p>
+
+  <p><strong>注意</strong>:当对代码进行更改时,如果 Clang 无法再使用配置文件数据,则会生成一条 <code>-Wprofile-instr-out-of-date</code> 警告。</p>
+
+  <h2 id="using-pgo">使用 PGO</h2>
+
+  <p>要使用 PGO,请按以下步骤操作:</p>
+
+  <ol>
+    <li>通过将 <code>-fprofile-generate</code> 传递给编译器和链接器,使用插桩编译库/可执行文件。</li>
+
+    <li>通过在插桩二进制文件上运行代表性工作负载来收集配置文件。</li>
+
+    <li>使用 <code>llvm-profdata</code> 实用程序对配置文件进行后处理(有关详情,请参阅<a href="#handling-llvm-profile-files">处理 LLVM 配置文件</a>)。</li>
+
+    <li>通过将 <code>-fprofile-use=&lt;&gt;.profdata</code> 传递给编译器和链接器,使用配置文件应用 PGO。</li>
+  </ol>
+
+  <p>对于 Android 中的 PGO,应离线收集配置文件并随代码签入,以确保编译可重现。无论代码如何变化,配置文件都可一直使用,但必须定期(或在 Clang 发出配置文件过时的警告时)重新生成。</p>
+
+  <h3 id="collecting-profiles">收集配置文件</h3>
+
+  <p>Clang 可以使用通过以下方式收集的配置文件:使用库的插桩编译运行基准,或在运行基准时对硬件计数器进行采样。目前,Android 不支持使用基于采样的配置文件收集,因此您必须使用插桩编译收集配置文件:</p>
+
+  <ol>
+    <li>确定一个基准以及由该基准统一执行的一组库。</li>
+
+    <li>将 <code>pgo</code> 属性添加到该基准和各个库(请参阅下文了解详情)。</li>
+
+    <li>使用以下命令生成包含这些库的插桩副本的 Android 编译:
+<pre class="prettyprint">make ANDROID_PGO_INSTRUMENT=benchmark</pre>
+    </li>
+  </ol>
+
+  <p><code><em>benchmark</em></code> 是占位符,用于标识在编译时插桩的库集合。实际的代表性输入(也可能是链接到进行基准化的库的其他可执行文件)并非专用于 PGO,不在本文档的讨论范围内。</p>
+
+  <ol>
+    <li>在设备上刷写或同步插桩编译。</li>
+
+    <li>运行基准以收集配置文件。</li>
+
+    <li>使用下文中介绍的 <code>llvm-profdata</code> 工具对配置文件进行后处理,并使其做好签入源代码树的准备。</li>
+  </ol>
+
+  <h3 id="using-profiles-during-build">在编译时使用配置文件</h3>
+
+  <p>将配置文件签入 Android 树中的 <code>toolchain/pgo-profiles</code>。名称应与库的 <code>pgo</code> 属性的 <code>profile_file</code> 子属性中指定的名称一致。编译库时,编译系统会自动将配置文件传递到 Clang。您可以将 <code>ANDROID_PGO_DISABLE_PROFILE_USE</code> 环境变量设置为 <strong><code>true</code></strong>,以暂时停用 PGO 并衡量其性能优势。</p>
+
+  <p>要指定额外的产品专用配置文件目录,请将其附加到 <code>BoardConfig.mk</code> 中的 <code>PGO_ADDITIONAL_PROFILE_DIRECTORIES</code> make 变量。如果指定了其他路径,则这些路径中的配置文件将替换 <code>toolchain/pgo-profiles</code> 中的配置文件。</p>
+
+  <p>当使用 <code>make</code> 的 <code>dist</code> 目标生成版本映像时,编译系统会将缺失的配置文件的名称写入 <code>$DIST_DIR/pgo_profile_file_missing.txt</code>。您可以检查此文件,看看哪些配置文件遭到了意外删除(以静默方式停用 PGO)。</p>
+
+  <h2 id="enabling-pgo-in-android-bp-files">在 Android.bp 文件中启用 PGO</h2>
+
+  <p>要在 <code>Android.bp</code> 文件中为原生模块启用 PGO,只需指定 <code>pgo</code> 属性即可。此属性具有以下子属性:</p>
+
+  <table>
+    <tbody><tr>
+      <th><strong>属性</strong>
+      </th>
+
+      <th><strong>说明</strong>
+      </th>
+    </tr>
+
+    <tr>
+      <td><code>instrumentation</code>
+      </td>
+
+      <td>对于使用插桩方法的 PGO,设置为 <code>true</code>。默认值为 <code>false</code>。</td>
+    </tr>
+
+    <tr>
+      <td><code>sampling</code>
+      </td>
+
+      <td><strong>当前不受支持。</strong> 对于使用采样方法的 PGO,设置为 <code>true</code>。默认值为 <code>false</code>。</td>
+    </tr>
+
+    <tr>
+      <td><code>benchmarks</code>
+      </td>
+
+      <td>字符串列表。如果该列表中的任何基准是在 <code>ANDROID_PGO_INSTRUMENT</code> 编译选项中指定的,则说明此模块是专为分析而构建的。</td>
+    </tr>
+
+    <tr>
+      <td><code>profile_file</code>
+      </td>
+
+      <td>要与 PGO 结合使用的配置文件(相对于 <code>toolchain/pgo-profile</code>)。编译系统通过将此文件添加到 <code>$DIST_DIR/pgo_profile_file_missing.txt</code> 来警告此文件不存在,除非将<em></em> <code>enable_profile_use</code> 属性设置为 <code>false</code> <strong>或者</strong>将 <code>ANDROID_PGO_NO_PROFILE_USE</code> 编译变量设置为 <code>true</code>。</td>
+    </tr>
+
+    <tr>
+      <td><code>enable_profile_use</code>
+      </td>
+
+      <td>如果在编译期间不应使用配置文件,则设置为 <code>false</code>。可在引导期间用来启用配置文件收集或暂时停用 PGO。默认值为 <code>true</code>。</td>
+    </tr>
+
+    <tr>
+      <td><code>cflags</code>
+      </td>
+
+      <td>在插桩编译期间使用的其他标记的列表。</td>
+    </tr>
+  </tbody></table>
+
+  <p>包含 PGO 的模块示例:</p>
+
+<pre class="prettyprint">cc_library {
+    name: "libexample",
+    srcs: [
+        "src1.cpp",
+        "src2.cpp",
+    ],
+    static: [
+        "libstatic1",
+        "libstatic2",
+    ],
+    shared: [
+        "libshared1",
+    ]
+    pgo: {
+        instrumentation: true,
+        benchmarks: [
+            "benchmark1",
+            "benchmark2",
+        ],
+        profile_file: "example.profdata",
+    }
+}
+</pre>
+
+  <p>如果基准 <code>benchmark1</code> 和 <code>benchmark2</code> 为 <code>libstatic1</code>、<code>libstatic2</code> 或 <code>libshared1</code> 库执行代表性行为,则这些库的 <code>pgo</code> 属性也可以包括这些基准。<code>Android.bp</code> 中的 <code>defaults</code> 模块可以包含一组库的常见 <code>pgo</code> 规范,以避免针对多个模块重复相同的编译规则。</p>
+
+  <p>要为某个架构选择不同的配置文件或有选择性地停用 PGO,请按架构指定 <code>profile_file</code>、<code>enable_profile_use</code> 和 <code>cflags</code> 属性。具体示例(架构目标以<strong>粗体</strong>显示)如下所示:</p>
+
+<pre class="prettyprint">cc_library {
+    name: "libexample",
+    srcs: [
+          "src1.cpp",
+          "src2.cpp",
+    ],
+    static: [
+          "libstatic1",
+          "libstatic2",
+    ],
+    shared: [
+          "libshared1",
+    ],
+    pgo: {
+         instrumentation: true,
+         benchmarks: [
+              "benchmark1",
+              "benchmark2",
+         ],
+    }
+
+    <strong>target: {
+         android_arm: {
+              pgo: {
+                   profile_file: "example_arm.profdata",
+              }
+         },
+         android_arm64: {
+              pgo: {
+                   profile_file: "example_arm64.profdata",
+              }
+         }
+    }
+}</strong>
+</pre>
+
+  <p>要在执行基于插桩的分析期间解析对分析运行时库的引用,请将编译标记 <code>-fprofile-generate</code> 传递至链接器。使用 PGO 插桩的静态库、所有共享库以及任何直接依赖于静态库的二进制文件也必需针对 PGO 进行插桩。不过,此类共享库或可执行文件不需要使用 PGO 配置文件,而且它们的 <code>enable_profile_use</code> 属性可以设置为 <code>false</code>。除此限制外,您可以将 PGO 应用于任何静态库、共享库或可执行文件。</p>
+
+  <h2 id="handling-llvm-profile-files">处理 LLVM 配置文件</h2>
+
+  <p>执行插桩库或可执行文件会在 <code>/data/local/tmp</code> 中生成一个名为 <code>default_<em>unique_id</em>_0.profraw</code> 的配置文件(其中 <code><em>unique_id</em></code> 是一个数字哈希值,对此库来说是唯一的)。如果此文件已存在,则分析运行时会在写入配置文件时将新老配置文件合并。要更改配置文件的位置,请在运行时设置 <code>LLVM_PROFILE_FILE</code> 环境变量。</p>
+
+  <p>然后使用 <code><a href="https://llvm.org/docs/CommandGuide/llvm-profdata.html">llvm-profdata</a></code> 实用程序将 <code>.profraw</code> 文件转换(可能会合并多个 <code>.profraw</code> 文件)为 <code>.profdata</code> 文件:</p>
+
+  <pre class="prettyprint">
+  llvm-profdata merge -output=profile.profdata &lt;.profraw and/or .profdata files&gt;</pre>
+
+  <p>然后,可以将 <code><em>profile.profdata</em></code> 签入源代码树,以供在编译时使用。</p>
+
+  <p>如果某个基准运行期间加载了多个插桩二进制文件/库,则每个库都会生成一个单独的<code>.profraw</code> 文件(包含单独的唯一 ID)。通常,所有这些文件都可以合并为一个 <code>.profdata</code> 文件,并用于 PGO 编译。如果某个库由另一个基准执行,则必须使用来自两个基准的配置文件优化该库。在这种情况下,<code>llvm-profdata</code> 的 <code>show</code> 选项非常有用:</p>
+
+  <pre class="prettyprint">
+  llvm-profdata merge -output=default_unique_id.profdata default_unique_id_0.profraw
+llvm-profdata show -all-functions default_unique_id.profdata</pre>
+
+  <p>要将 unique_id<em></em> 映射到各个库,请针对相应库独有的函数名称搜索各个 unique_id <em></em>的 <code>show</code> 输出。</p>
+
+  <h2 id="case-study-pgo-for-art">案例研究:适用于 ART 的 PGO</h2>
+
+  <p><em>该案例研究将 ART 作为一个相关的示例;但是,它并不能准确描述为 ART 或其相互依赖关系分析的一系列实际库。</em>
+  </p>
+
+  <p>ART 中的 <code>dex2oat</code> 预编译器依赖 <code>libart-compiler.so</code>,后者则依赖 <code>libart.so</code>。ART 运行时主要在 <code>libart.so</code> 中实现。编译器和运行时的基准有所不同:</p>
+
+  <table>
+    <tbody><tr>
+      <th><strong>基准</strong>
+      </th>
+
+      <th><strong>分析的库</strong>
+      </th>
+    </tr>
+
+    <tr>
+      <td><code>dex2oat</code>
+      </td>
+
+      <td><code>dex2oat</code>(可执行文件)、<code>libart-compiler.so</code>、<code>libart.so</code></td>
+    </tr>
+
+    <tr>
+      <td><code>art_runtime</code>
+      </td>
+
+      <td><code>libart.so</code>
+      </td>
+    </tr>
+  </tbody></table>
+
+  <ol>
+    <li>将以下 <code>pgo</code> 属性添加到 <code>dex2oat</code>、<code>libart-compiler.so</code>:
+
+      <pre class="prettyprint">    pgo: {
+        instrumentation: true,
+        benchmarks: ["dex2oat",],
+        profile_file: "dex2oat.profdata",
+    }</pre>
+    </li>
+
+    <li>将以下 <code>pgo</code> 属性添加到 <code>libart.so</code>:
+
+      <pre class="prettyprint">    pgo: {
+        instrumentation: true,
+        benchmarks: ["art_runtime", "dex2oat",],
+        profile_file: "libart.profdata",
+    }</pre>
+    </li>
+
+    <li>使用以下命令为 <code>dex2oat</code> 和 <code>art_runtime</code> 基准创建插桩编译:
+
+      <pre class="prettyprint">    make ANDROID_PGO_INSTRUMENT=dex2oat
+    make ANDROID_PGO_INSTRUMENT=art_runtime</pre>
+    </li>
+
+  <p>或者,使用以下命令创建一个包含所有插桩库的插桩编译:
+</p>
+
+  <pre class="prettyprint">    make ANDROID_PGO_INSTRUMENT=dex2oat,art_runtime
+    (or)
+    make ANDROID_PGO_INSTRUMENT=ALL</pre>
+
+  <p>第二个命令会编译<strong>所有</strong>启用 PGO 的模块,以进行分析。</p>
+
+    <li>运行执行 <code>dex2oat</code> 和 <code>art_runtime</code> 的基准以获得:
+
+    <ul>
+
+    <li>三个来自 <code>dex2oat</code> 的 <code>.profraw</code> 文件(<code>dex2oat_exe.profdata</code>、<code>dex2oat_libart-compiler.profdata</code> 和 <code>dexeoat_libart.profdata</code>),这三个文件均使用<a href="#handling-llvm-profile-files">处理 LLVM 配置文件</a>中说明的方法标识。</li>
+
+    <li>一个 <code>art_runtime_libart.profdata</code>。</li>
+    </ul>
+    </li>
+
+    <li>使用以下命令为 <code>dex2oat</code> 可执行文件和 <code>libart-compiler.so</code> 生成一个通用的 profdata 文件:
+
+      <pre class="prettyprint">llvm-profdata merge -output=dex2oat.profdata \
+    dex2oat_exe.profdata dex2oat_libart-compiler.profdata</pre>
+    </li>
+
+    <li>通过合并来自两个基准的配置文件,获取 <code>libart.so</code> 的配置文件:
+
+      <pre class="prettyprint">llvm-profdata merge -output=libart.profdata \
+    dex2oat_libart.profdata art_runtime_libart.profdata</pre>
+
+  <p>来自两个配置文件的 <code>libart.so</code> 的原始计数可能是不同的,因为不同基准的测试用例数量以及运行时长存在差异。在这种情况下,您可以使用以下加权合并命令:</p>
+
+  <pre class="prettyprint">llvm-profdata merge -output=libart.profdata \
+    -weighted-input=2,dex2oat_libart.profdata \
+    -weighted-input=1,art_runtime_libart.profdata</pre>
+
+  <p>上述命令将两倍的权重分配给来自 <code>dex2oat</code> 的配置文件。实际权重应取决于领域知识或实验。</p>
+    </li>
+
+    <li>将配置文件 <code>dex2oat.profdata</code> 和 <code>libart.profdata</code> 签入 <code>toolchain/pgo-profiles</code>,以供在编译时使用。</li>
+  </ol>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/power/app_mgmt.html b/zh-cn/devices/tech/power/app_mgmt.html
new file mode 100644
index 0000000..c871951
--- /dev/null
+++ b/zh-cn/devices/tech/power/app_mgmt.html
@@ -0,0 +1,308 @@
+<html devsite><head>
+    <title>应用电耗管理</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>
+    在 Android 9 及更高版本中,平台可以对应用进行监控,以了解应用是否存在对设备的电池续航时间造成负面影响的行为。平台会使用和评估设置规则以提供用户体验流程,让用户可以选择限制违反规则的应用。
+  </p>
+
+  <p>
+    在 Android 8.0 及更低版本中,系统通过一些功能(例如低电耗模式、应用待机模式、后台限制和后台位置限制)对这类应用进行了限制。不过,一些应用仍存在不良行为(<a href="https://developer.android.com/topic/performance/vitals/" class="external">Android Vitals</a> 中对部分这类行为进行了说明)。Android 9 引入了一个操作系统基础架构,此基础架构可以根据设置规则(随时间不断更新)检测和限制应用。
+  </p>
+
+  <h2 id="app-restrictions">后台限制</h2>
+
+    <p>
+      用户可以选择限制应用,或者系统可能会提示用户其检测到对设备运行状况有不利影响的应用。
+    </p>
+
+    <p>
+受限应用:
+</p>
+
+    <ul>
+      <li>仍然可以由用户启动。</li>
+      <li>无法在后台运行作业/闹铃或使用网络。</li>
+      <li>无法运行前台服务。</li>
+      <li>可以由用户更改为不受限应用。</li>
+    </ul>
+
+    <p>
+      设备实现者可以向应用添加额外限制以:</p>
+
+    <ul>
+      <li>限制应用自动重启。</li>
+      <li>限制绑定服务(风险极高)。</li>
+    </ul>
+
+    <p>
+      在后台运行的受限应用不应该消耗任何设备资源,例如内存、CPU 和电量。如果用户未主动使用后台受限应用,则这些应用不应该影响设备的运行状况。不过,如果用户启动后台受限应用,则这类应用应全功能运行。
+    </p>
+
+  <h3 id="using-customg-restrictions">使用自定义实现</h3>
+
+    <p>
+      设备实现者可以继续使用他们的自定义方法对应用设置限制。
+    </p>
+
+    <aside class="caution"><strong>注意</strong>:后续版本可能会破坏设备实现者的自定义设置。我们建议采用 AOSP 中的 Android 9 应用限制架构。
+</aside>
+
+  <h3 id="integrating-app-restrictions">集成应用限制</h3>
+
+    <p>
+      下面的部分概述了如何针对您的设备定义和集成应用限制。如果您使用的是 Android 8.x 或更低版本中的应用限制方法,请仔细阅读下面的部分,了解 Android 9 中的变更。
+    </p>
+
+      <h4 id="set-appopsmanager-flag">设置 AppOpsManager 标记</h4>
+
+        <p>
+          限制应用时,应在 <code>AppOpsManager</code> 中设置适当的标记。下面是 <code>packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryUtils.java</code> 中的一个示例代码段:
+</p>
+
+<pre class="prettyprint">   public void setForceAppStandby(int uid, String packageName,
+            int mode) {
+        final boolean isPreOApp = isPreOApp(packageName);
+        if (isPreOApp) {
+       // Control whether app could run in the background if it is pre O app
+            mAppOpsManager.setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, uid, packageName, mode);
+        }
+       // Control whether app could run jobs in the background
+        mAppOpsManager.setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, packageName, mode);
+    }
+</pre>
+
+      <h4 id="ensure-isbackgroundrestricted-returns-true">
+        确保 <code>isBackgroundRestricted</code> 返回 <code>true</code>
+      </h4>
+
+        <p>
+          限制应用时,应确保 <code>ActivityManager.isBackgroundRestricted()</code> 返回 <code>true</code>。
+        </p>
+
+      <h4>记录限制原因</h4>
+
+        <p>
+          限制应用时,应记录限制原因。下面是 <code>packages/apps/Settings/src/com/android/settings/fuelgauge/batterytip/actions/RestrictAppAction.java</code> 中日志记录的一个示例代码段:
+</p>
+
+<pre class="prettyprint">mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName,AppOpsManager.MODE_IGNORED);
+if (CollectionUtils.isEmpty(appInfo.anomalyTypes)) {
+  // Only log context if there is no anomaly type
+  mMetricsFeatureProvider.action(mContext,
+    MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, packageName,
+    Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT,metricsKey));
+            } else {
+  // Log ALL the anomaly types
+  for (int type : appInfo.anomalyTypes) {
+    mMetricsFeatureProvider.action(mContext,
+      MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, packageName,
+      Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, metricsKey),
+      Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE, type));
+  }
+</pre>
+
+        <p>
+          应将 <code>type</code> 替换成 <code>AnomalyType</code> 中的值。
+        </p>
+
+        <p>
+          设备实现者可以使用 <code>src/com/android/settings/fuelgauge/batterytip/StatsManagerConfig.java</code> 中定义的常量:
+        </p>
+
+<pre class="prettyprint">public @interface AnomalyType {
+        // This represents an error condition in the anomaly detection.
+        int NULL = -1;
+         // The anomaly type does not match any other defined type.
+        int UNKNOWN_REASON = 0;
+         // The application held a partial (screen off) wake lock for a period of time that
+         // exceeded the threshold with the screen off when not charging.
+        int EXCESSIVE_WAKELOCK_ALL_SCREEN_OFF = 1;
+         // The application exceeded the maximum number of wakeups while in the background
+         // when not charging.
+        int EXCESSIVE_WAKEUPS_IN_BACKGROUND = 2;
+         // The application did unoptimized Bluetooth scans too frequently when not charging.
+        int EXCESSIVE_UNOPTIMIZED_BLE_SCAN = 3;
+         // The application ran in the background for a period of time that exceeded the
+         // threshold.
+        int EXCESSIVE_BACKGROUND_SERVICE = 4;
+         // The application exceeded the maximum number of wifi scans when not charging.
+        int EXCESSIVE_WIFI_SCAN = 5;
+         // The application exceed the maximum number of flash writes
+        int EXCESSIVE_FLASH_WRITES = 6;
+         // The application used more than the maximum memory, while not spending any time
+         // in the foreground.
+        int EXCESSIVE_MEMORY_IN_BACKGROUND = 7;
+         // The application exceeded the maximum percentage of frames with a render rate of
+         // greater than 700ms.
+        int EXCESSIVE_DAVEY_RATE = 8;
+         // The application exceeded the maximum percentage of frames with a render rate
+         // greater than 16ms.
+        int EXCESSIVE_JANKY_FRAMES = 9;
+         // The application exceeded the maximum cold start time - the app has not been
+         // launched since last system start, died or was killed.
+        int SLOW_COLD_START_TIME = 10;
+         // The application exceeded the maximum hot start time - the app and activity are
+         // already in memory.
+        int SLOW_HOT_START_TIME = 11;
+         // The application exceeded the maximum warm start time - the app was already in
+         // memory but the activity wasn't created yet or was removed from memory.
+        int SLOW_WARM_START_TIME = 12;
+         // The application exceeded the maximum number of syncs while in the background.
+        int EXCESSIVE_BACKGROUND_SYNCS = 13;
+         // The application exceeded the maximum number of gps scans while in the background.
+        int EXCESSIVE_GPS_SCANS_IN_BACKGROUND = 14;
+         // The application scheduled more than the maximum number of jobs while not charging.
+        int EXCESSIVE_JOB_SCHEDULING = 15;
+         // The application exceeded the maximum amount of mobile network traffic while in
+         // the background.
+        int EXCESSIVE_MOBILE_NETWORK_IN_BACKGROUND = 16;
+         // The application held the WiFi lock for more than the maximum amount of time while
+         // not charging.
+        int EXCESSIVE_WIFI_LOCK_TIME = 17;
+         // The application scheduled a job that ran longer than the maximum amount of time.
+        int JOB_TIMED_OUT = 18;
+         // The application did an unoptimized Bluetooth scan that exceeded the maximum
+         // time while in the background.
+        int LONG_UNOPTIMIZED_BLE_SCAN = 19;
+         // The application exceeded the maximum ANR rate while in the background.
+        int BACKGROUND_ANR = 20;
+         // The application exceeded the maximum crash rate while in the background.
+        int BACKGROUND_CRASH_RATE = 21;
+         // The application exceeded the maximum ANR-looping rate.
+        int EXCESSIVE_ANR_LOOPING = 22;
+         // The application exceeded the maximum ANR rate.
+        int EXCESSIVE_ANRS = 23;
+         // The application exceeded the maximum crash rate.
+        int EXCESSIVE_CRASH_RATE = 24;
+         // The application exceeded the maximum crash-looping rate.
+        int EXCESSIVE_CRASH_LOOPING = 25;
+         // The application crashed because no more file descriptors were available.
+        int NUMBER_OF_OPEN_FILES = 26;
+    }
+</pre>
+
+        <p>
+          如果用户或系统移除了应用的限制,则您必须记录移除限制的原因。下面是 <code>packages/apps/Settings/src/com/android/settings/fuelgauge/batterytip/actions/UnrestrictAppAction.java</code> 中日志记录的一个示例代码段:
+</p>
+
+<pre class="prettyprint">   public void handlePositiveAction(int metricsKey) {
+        final AppInfo appInfo = mUnRestrictAppTip.getUnrestrictAppInfo();
+        // Clear force app standby, then app can run in the background
+        mBatteryUtils.setForceAppStandby(appInfo.uid, appInfo.packageName,
+                AppOpsManager.MODE_ALLOWED);
+        mMetricsFeatureProvider.action(mContext,
+                MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, appInfo.packageName,
+                Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, metricsKey));
+    }
+</pre>
+
+    <h3 id="testing-app-restrictions">测试应用限制</h3>
+
+      <p>
+        要在 Android 9.x 或更高版本中测试应用限制的行为,请使用下列命令之一:</p>
+
+      <ul>
+        <li>对应用设置应用限制:
+<pre class="devsite-terminal devsite-click-to-copy">appops set <var>package-name</var> RUN_ANY_IN_BACKGROUND ignore</pre>
+        </li>
+        <li>移除应用限制并恢复默认行为:
+<pre class="devsite-terminal devsite-click-to-copy">appops set <var>package-name</var> RUN_ANY_IN_BACKGROUND allow</pre>
+        </li>
+        <li>让后台应用立即进入闲置状态:
+<pre class="devsite-terminal devsite-click-to-copy">am make-uid-idle [--user <var>user-id</var> | all | current] <var>package-name</var></pre>
+        </li>
+        <li>在短期内将软件包添加到 <code>tempwhitelist</code> 中:
+<pre class="devsite-terminal devsite-click-to-copy">cmd deviceidle tempwhitelist [-u <var>user</var>] [-d <var>duration</var>] [package <var>package-name</var>]</pre>
+        </li>
+        <li>向用户白名单中添加软件包或从中移除软件包:
+<pre class="devsite-terminal devsite-click-to-copy">cmd deviceidle whitelist [+/-]<var>package-name</var></pre>
+        </li>
+        <li>查看 jobscheduler 和闹铃管理器的内部状态:
+<pre class="devsite-click-to-copy"><code class="devsite-terminal">dumpsys jobscheduler</code>
+<code class="devsite-terminal">dumpsys alarm</code></pre>
+        </li>
+      </ul>
+
+    <h2 id="app-standby">应用待机模式</h2>
+
+      <p>
+        对于用户未主动使用的应用,应用待机模式会延迟其后台网络活动和作业,从而延长电池续航时间。
+      </p>
+
+      <h3 id="app-standby-life">应用待机模式生命周期</h3>
+
+        <p>
+          平台检测到未活动的应用,并使其进入应用待机模式,直到用户开始主动与相应应用互动为止。
+        </p>
+
+<table>
+  <tbody>
+    <tr>
+      <th width="46%">检测</th>
+      <th width="23%">应用待机模式期间</th>
+      <th width="31%">退出</th>
+    </tr>
+    <tr>
+    <td>
+      <p>
+        当设备未充电<strong>且</strong>用户在特定的时钟时间内以及特定的屏幕开启时间内未直接或间接地启动某个应用时,平台会检测到该应用处于未活动状态(当前台应用访问另一个应用中的服务时,便会间接启动该应用)。
+      </p>
+    </td>
+    <td>
+      <p>
+        平台会阻止应用访问网络(一天多次),从而延迟应用同步和其他作业。
+      </p>
+    </td>
+    <td>
+      <p>当出现以下情况时,平台会使应用退出应用待机模式:</p>
+      <ul>
+        <li>应用变成活动状态。</li>
+        <li>设备接通电源并充电。</li>
+      </ul>
+    </td>
+  </tr>
+  </tbody>
+</table>
+
+<p>处于活动状态的应用不受应用待机模式影响。如果应用具有以下特点,则表示其处于活动状态:</p>
+<ul>
+  <li>有目前在前台运行的进程(作为活动或前台服务,或者正在被其他活动或前台服务使用),例如通知侦听器、无障碍服务、动态壁纸等等。
+</li>
+  <li>有用户要查看的通知,例如锁定屏幕或通知栏中的通知。
+  </li>
+  <li>明确由用户启动。</li>
+</ul>
+
+<p>如果某个应用在一段时间内未发生上述活动,则表示该应用处于非活动状态。
+</p>
+
+<h3 id="testing_app_standby">测试应用待机模式</h3>
+<p>您可以使用以下 <code>adb</code> 命令手动测试应用待机模式:</p>
+
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell dumpsys battery unplug</code>
+<code class="devsite-terminal">adb shell am set-idle <var>package-name</var> true</code>
+<code class="devsite-terminal">adb shell am set-idle <var>package-name</var> false</code>
+<code class="devsite-terminal">adb shell am get-idle <var>package-name</var></code>
+</pre>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/power/batteryless.html b/zh-cn/devices/tech/power/batteryless.html
new file mode 100644
index 0000000..88b9cfd
--- /dev/null
+++ b/zh-cn/devices/tech/power/batteryless.html
@@ -0,0 +1,103 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+
+<!--
+  Copyright 2018 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<h1 id="supporting_batteryless_devices" class="page-title">支持无电池设备</h1>
+
+<p>本页将介绍 Android 如何应对具有可拆卸电池或无内置电池的产品。无内置电池设备会改为连接到外部电源,例如其他设备上的交流电源插座或 USB 端口。</p>
+
+<h2 id="is_a_battery_present">是否有电池?</h2>
+
+<p>应用可以使用以下代码来检测设备当前是否有电池:</p>
+<pre class="prettyprint"><code>```
+final Intent batteryInfo = registerReceiver(null, new
+IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+
+return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
+```
+</code></pre>
+<h2 id="batteryless_device_behavior">无电池设备行为</h2>
+
+<p>如果 Android 未检测出产品的电池设备,则会使用以下与电池相关的默认值。请注意,在 Android 9 版本中,默认值发生了变化。下表显示了不同之处。</p>
+
+<table>
+  <tbody><tr>
+   <th>电池状态</th>
+   <th>Android 9 及更高版本</th>
+   <th>Android 8.1 及更低版本</th>
+  </tr>
+  <tr>
+   <td><em>存在</em>
+   </td>
+   <td>false</td>
+   <td>true</td>
+  </tr>
+  <tr>
+   <td><em>状态</em>
+   </td>
+   <td>未知</td>
+   <td>正在充电</td>
+  </tr>
+  <tr>
+   <td><em>剩余电量</em>
+   </td>
+   <td>0</td>
+   <td>100%</td>
+  </tr>
+  <tr>
+   <td><em>运行状况</em>
+   </td>
+   <td>未知</td>
+   <td>良好</td>
+  </tr>
+  <tr>
+   <td><em>交流充电器在线状态</em>
+   </td>
+   <td>未修改</td>
+   <td>强制为 true</td>
+  </tr>
+</tbody></table>
+
+<p>制造商可以使用内核 <a href="https://www.kernel.org/doc/Documentation/power/power_supply_class.txt" class="external">power_supply</a> 驱动程序或 <a href="/devices/tech/health/">Health HAL</a> 更改默认设置。</p>
+
+<h3 id="android_and_higher">Android 9 及更高版本</h3>
+
+<p>Android 9 针对无电池设备移除了一些以前的代码;这类设备在默认情况下假定电池存在,充电率为 100%,运行状况良好,且热敏电阻温度读数正常。</p>
+
+<p>处理这项信息的大多数框架 API 会继续像以前那样处理常见情况:系统将被视为“正在充电”<em></em>(即未使用电池电量运行),且不会被视为电量不足。如果界面上显示有电池图标,则它会附带一个感叹号,电量百分比将显示为 0%。但是设备不会因电池电量不足而关闭,而且需要充电或需要电池电量充足的作业也会予以安排。</p>
+
+<h3 id="android_81_and_lower">Android 8.1 及更低版本</h3>
+
+<p>由于电池状态未知,Android 框架 API 会认为系统“正在充电”<em></em>(即未使用电池电量运行),而且不会认为电量不足。如果界面上显示有电池图标,则它会附带一个感叹号,电量百分比将显示为 0%。但是设备不会因电池电量不足而关闭,而且需要充电或需要电池电量充足的作业也会予以安排。</p>
+
+<h2 id="implementation">实现</h2>
+
+<p>如上所述,Android 9 原始代码可在您的设备上正常运行,但建议您对内核或 HAL 进行更改,以准确反映产品的电源和电池状态。如果 Android 9 及更高版本未检测到 <a href="https://www.kernel.org/doc/Documentation/power/power_supply_class.txt" class="external">Linux power supply 类</a>充电器设备,则在默认情况下,所有充电器类型(交流、USB、无线)的状态都将为“离线”<em></em>。如前所述,如果所有充电器都处于离线状态,但未检测到电池设备,则系统仍会被视为“正在充电”,也就是说,系统正在使用外部电源(而不是电池电量)运行。</p>
+
+<p>如果您的产品没有电池,且会始终连接到电源,那么,您最好针对交流电源或 USB 电源(其在线 <em></em><code>sysfs</code> 属性会设置为 <code>true</code>)实现 Linux 内核 power_supply 类<em></em>充电器驱动程序。或者,您也可以在 Health HAL 中为设备配置交流充电器在线属性。为此,请按照<a href="/devices/tech/health/implementation">实现 Health 2.0</a> 中的说明实现 Health HAL。</p>
+
+<p>此自定义 Health HAL 会实现 <code>Health::getHealthInfo()</code> 的自定义版本,而该版本会修改 <code>BatteryProperties.chargerAcOnline = true</code> 的值。</p>
+
+<p>首先,请将文件 <code><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/health/2.0/default/Health.cpp">hardware/interfaces/health/2.0/default/Health.cpp</a></code> 复制到您自己的 Health HAL 实现,并根据 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/health/2.0/README">Health 2.0 README</a> 对其进行修改。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/power/component.html b/zh-cn/devices/tech/power/component.html
index bb06865..f9c382a 100644
--- a/zh-cn/devices/tech/power/component.html
+++ b/zh-cn/devices/tech/power/component.html
@@ -146,7 +146,7 @@
 
 <p><code>wifi.on</code> 值测量 Wi-Fi 在启用但未主动发送或接收数据的状态下的功耗。该值通常是测量系统挂起(休眠)状态下启用/禁用 Wi-Fi 之间产生的电流增量。</p>
 
-<p><code>wifi.scan</code> 值可用于测量 WLAN 接入点扫描过程中的功耗。应用可以使用 WifiManager 类 <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html"><code>startScan()</code>API</a> 来触发 WLAN 扫描。您也可以依次打开“设置”&gt;“WLAN”,这样 WLAN 每隔几秒钟就会执行一次接入点扫描,而且扫描过程中功耗会明显上升,但您必须从这些测量值中减去屏幕功耗。</p>
+<p><code>wifi.scan</code> 值可用于测量 WLAN 接入点扫描过程中的功耗。应用可以使用 WifiManager 类<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html"> <code>startScan()</code>API</a> 来触发 WLAN 扫描。您也可以依次打开“设置”&gt;“WLAN”,这样 WLAN 每隔几秒钟就会执行一次接入点扫描,而且扫描过程中功耗会明显上升,但您必须从这些测量值中减去屏幕功耗。</p>
 
 <p class="note">
 <strong>注意</strong>:请使用受控设置(如 <a href="http://en.wikipedia.org/wiki/Iperf">iperf</a>)生成网络收发流量。</p>
diff --git a/zh-cn/devices/tech/power/mgmt.html b/zh-cn/devices/tech/power/mgmt.html
index 74e3e3c..bfa4234 100644
--- a/zh-cn/devices/tech/power/mgmt.html
+++ b/zh-cn/devices/tech/power/mgmt.html
@@ -20,221 +20,34 @@
       limitations under the License.
   -->
 
-<p>电池续航时间是用户长期以来一直关注的问题。为了延长电池续航时间,Android 不断添加新功能和优化功能,以帮助平台优化应用和设备在非充电状态下的行为。</p>
+<p>电池续航时间是用户长期以来一直关注的问题。为了延长电池续航时间,Android 不断添加新功能,以帮助平台优化应用和设备在非充电状态下的行为。</p>
 <p>Android 提供以下电池续航时间增强功能:</p>
 
 <ul>
-<li><a href="#app-standby">应用待机模式</a>。平台会使未使用的应用进入应用待机模式,从而暂时限制此类应用访问网络,并延迟其同步和作业。</li>
-<li><a href="#doze">低电耗模式</a>。如果用户长时间没有主动使用其设备(处于静止状态且屏幕已关闭),则平台会使设备进入深度休眠状态(定期恢复正常操作)。此外,当用户关闭设备屏幕但仍处于移动状态时,Android 7.0 及更高版本还会启用低电耗模式,以触发一系列轻度优化。
-</li>
-<li><a href="#exempt-apps">豁免</a>。默认情况下,在设备上预装的系统应用和云消息传递服务通常能够获得豁免,不会进入应用待机模式和低电耗模式(尽管应用开发者可以特意将这样的设置运用到其应用上)。用户可以通过“设置”菜单豁免应用。</li>
+  <li>
+    <a href="/devices/tech/power/app_mgmt#app-restrictions">应用限制</a>。平台可以提示哪些应用会对电池续航时间产生不利影响,以便用户可以对这些应用施加限制,防止它们消耗资源。默认情况下,应用不会在后台受到限制。
+  </li>
+  <li><a href="/devices/tech/power/app_mgmt#app-standby">应用待机模式</a>。平台会使未使用的应用进入应用待机模式,从而暂时限制此类应用访问网络,并延迟其同步和作业。
+  </li>
+  <li>
+    <a href="/devices/tech/power/platform_mgmt#doze">低电耗模式</a>。如果用户长时间没有主动使用其设备(处于静止状态且屏幕已关闭),则平台会使设备进入深度休眠状态(定期恢复正常操作)。此外,当用户关闭设备屏幕但仍处于移动状态时,Android 7.0 及更高版本还会启用低电耗模式,以触发一系列轻度优化。
+  </li>
+  <li>
+    <a href="#exempt-apps">豁免</a>。默认情况下,预加载的系统应用和云消息传递服务通常能够获得豁免,不会进入应用待机模式和低电耗模式。应用开发者可以使用 Intent 将这些设置应用于其应用。用户可以在“设置”菜单中豁免无需进入应用待机和低电耗节电模式的应用。
+  </li>
 </ul>
 
-<p>下列部分对这些增强功能进行了具体说明。</p>
-
-<h2 id="app-standby">应用待机模式</h2>
-<p>对于用户未主动使用的应用,应用待机模式会延迟其后台网络活动和作业,从而延长电池续航时间。</p>
-
-<h3 id="app-standby-life">应用待机模式生命周期</h3>
-<p>平台检测到未活动的应用,并使其进入应用待机模式,直到用户开始主动与相应应用互动为止。</p>
-
-<table>
-<tbody>
-<tr>
-<th width="46%">检测</th>
-<th width="23%">应用待机模式期间</th>
-<th width="31%">退出</th>
-</tr>
-
-<tr>
-<td><p>当设备未充电<strong>且</strong>用户在特定的时钟时间内以及特定的屏幕开启时间内未直接或间接地启动某个应用时,平台会检测到该应用处于未活动状态(当前台应用访问另一个应用中的服务时,便会间接启动该应用)。</p></td>
-<td><p>平台会阻止应用访问网络(一天多次),从而延迟应用同步和其他作业。</p></td>
-<td><p>当出现以下情况时,平台会使应用退出应用待机模式:</p>
-<ul>
-<li>应用变成活动状态。</li>
-<li>设备接通电源并充电。</li>
-</ul>
-</td>
-</tr>
-</tbody>
-</table>
-
-<p>处于活动状态的应用不受应用待机模式影响。如果应用具有以下特点,则表示其处于活动状态:</p>
-<ul>
-<li>有目前在前台运行的进程(作为活动或前台服务,或者正在被其他活动或前台服务使用),例如通知侦听器、无障碍服务、动态壁纸等等。</li>
-<li>有用户要查看的通知,例如锁定屏幕或通知栏中的通知。</li>
-<li>明确由用户启动。</li>
-</ul>
-<p>如果某个应用在一段时间内未发生上述活动,则表示该应用处于非活动状态。
-</p>
-
-<h3 id="testing_app_standby">测试应用待机模式</h3>
-<p>您可以使用以下 <code>adb</code> 命令手动测试应用待机模式:</p>
-
-<pre class="devsite-click-to-copy">
-<code class="devsite-terminal">adb shell dumpsys battery unplug</code>
-<code class="devsite-terminal">adb shell am set-idle packageName true</code>
-<code class="devsite-terminal">adb shell am set-idle packageName false</code>
-<code class="devsite-terminal">adb shell am get-idle packageName</code>
-</pre>
-
-<h2 id="doze">低电耗模式</h2>
-
-<p>当用户长时间未使用设备时,低电耗模式会延迟应用后台 CPU 和网络活动,从而延长电池续航时间。</p>
-
-<p>处于低电耗模式的闲置设备会定期进入维护时段,在此期间,应用可以完成待进行的活动(同步、作业等)。然后,低电耗模式会使设备重新进入较长时间的休眠状态,接着进入下一个维护时段。在达到几个小时的休眠时间上限之前,平台会周而复始地重复低电耗模式休眠/维护的序列,且每一次都会延长闲置的时长。处于低电耗模式的设备始终可以感知到动作,且会在检测到动作时立即退出低电耗模式。</p>
-
-<p>每当用户关闭设备屏幕时,即使仍处于移动状态,Android 7.0 及更高版本都会延长设备处于低电耗模式的时间,以触发一系列轻度优化,从而延长电池续航时间。</p>
-
-<p>默认情况下,系统服务(如电话)可能已预加载且获得豁免,不会进入低电耗模式。用户还可以在“设置”菜单中豁免特定的应用,使其不进入低电耗模式。低电耗模式在 AOSP 中默认处于<strong>停用</strong>状态;要详细了解如何启用低电耗模式,请参阅<a href="#integrate-doze">集成低电耗模式</a>。
-</p>
-
-<h3 id="doze-reqs">低电耗模式的要求</h3>
-<p>要支持低电耗模式,设备必须具有云消息传递服务,例如,<a href="https://firebase.google.com/docs/cloud-messaging/">Firebase 云消息传递 (FCM)</a>。这样,设备才知道何时从低电耗模式中唤醒。</p>
-
-<p>此外,要全面支持低电耗模式,相应设备还必须具有<a href="/devices/sensors/sensor-types.html#significant_motion">大幅度动作检测器 (SMD)</a>;不过,Android 7.0 及更高版本中的轻度低电耗模式不要求具有 SMD。如果某台设备上启用了低电耗模式,且:</p>
-<ul>
-<li>该设备具有 SMD,则系统会进行全面的低电耗模式优化(包括轻度优化)。</li>
-<li>该设备没有 SMD,则系统仅会进行轻度低电耗模式优化。</li>
-</ul>
-
-<h3 id="doze-life">低电耗模式生命周期</h3>
-
-<p>当平台检测到设备处于闲置状态时,便会使其进入低电耗模式,并在一个或多个满足退出条件的活动发生时使设备退出低电耗模式。</p>
-
-<table>
-<tbody>
-<tr>
-<th width="20%">检测</th>
-<th width="60%">低电耗模式期间</th>
-<th width="20%">退出</th>
-</tr>
-<tr>
-<td><p>当设备具有以下特点时,平台会检测到其处于闲置状态:</p>
-<ul>
-<li>设备是静止的(使用大幅度动作检测器检测)。</li>
-<li>设备屏幕已关闭一段时间。</li>
-</ul>
-<p>当设备连接到充电器时,不会进入低电耗模式。
-</p>
-</td>
-<td><p>平台会尝试使系统处于休眠状态,定期进入维护时段并恢复正常操作,然后使设备返回休眠状态并在更长的重复时间内处于休眠状态。在休眠期间,设备会受到以下限制:</p>
-<ul>
-<li>应用无法访问网络。</li>
-<li>应用唤醒锁定被忽略。</li>
-<li>闹钟被延迟。闹钟响铃以及使用 <code>setAndAllowWhileIdle()</code> 设置的闹钟(当设备处于低电耗模式时,限于每个应用每 15 分钟 1 次)除外。此豁免适用于必须显示活动提醒通知的应用(如日历)。</li>
-<li>无法执行 WLAN 扫描。</li>
-<li>SyncAdapter 同步和 JobScheduler 作业被延迟,直到下一个维护时段才能恢复。</li>
-<li>接收短信和彩信的应用被暂时列入白名单,以便它们可以完成处理任务。</li>
-</ul>
-</td>
-<td><p>当平台检测到以下情况时,会使设备退出低电耗模式:</p>
-<ul>
-<li>用户与设备互动。</li>
-<li>设备移动。</li>
-<li>设备屏幕打开。</li>
-<li>AlarmClock 即将响铃。</li>
-</ul>
-<p>通知不会使设备退出低电耗模式。</p>
-</td>
-</tr>
-</tbody>
-</table>
-
-<p>在屏幕关闭期间、设备处于闲置状态之前,Android 7.0 及更高版本通过启用轻度休眠模式来延长设备处于低电耗模式的时间。</p>
-
-<p><img src="/devices/tech/images/doze_lightweight.png"/></p>
-<figcaption><strong>图 1.</strong> 非静止和静止设备的低电耗模式。</figcaption>
-
-<table>
-<tbody>
-<tr>
-<th>操作</th>
-<th>低电耗模式</th>
-<th>轻度低电耗模式</th>
-</tr>
-<tr>
-<td>触发因素</td>
-<td>屏幕关闭、电池供电、静止</td>
-<td>屏幕关闭、电池供电(未插电)</td>
-</tr>
-<tr>
-<td>时间</td>
-<td>随维护时段依次增加</td>
-<td>随维护时段反复持续 N 分钟</td>
-</tr>
-<tr>
-<td>限制</td>
-<td>无法进行网络访问、唤醒锁定和 GPS/WLAN 扫描。闹钟和作业/同步被延迟。</td>
-<td>无法进行网络访问。作业/同步被延迟(维护时段除外)。
-</td>
-</tr>
-<tr>
-<td>行为</td>
-<td>仅接收优先级较高的推送通知消息。</td>
-<td>接收所有实时消息(即时消息、致电等)。优先级较高的推送通知消息可以暂时访问网络。</td>
-</tr>
-<tr>
-<td>退出</td>
-<td>动作、屏幕开启或闹钟响铃。</td>
-<td>屏幕开启。</td>
-</tr>
-</tbody>
-</table>
-
-<h3 id="doze-interactions">与应用待机模式相集成</h3>
-<ul>
-<li>设备处于低电耗模式的时间不会计入应用待机模式。</li>
-<li>当设备处于低电耗模式时,闲置应用一天至少可以执行一次正常操作。</li>
-</ul>
-
-<h3 id="integrate-doze">集成低电耗模式</h3>
-
-<p>启用低电耗模式时,支持 <a href="/devices/sensors/sensor-types.html#significant_motion">SENSOR_TYPE_SIGNIFICANT_MOTION</a> 的设备会执行全面的低电耗模式优化(包括轻度优化);没有 SMD 的设备仅执行轻度低电耗模式优化。Android 会自动选择适当的低电耗模式优化,无需供应商配置。</p>
-
-<p>要为设备启用低电耗模式,请执行以下任务:</p>
-
-<ol>
-<li>确认设备已安装云消息传递服务。</li>
-<li>在设备叠加配置文件 <code>overlay/frameworks/base/core/res/res/values/config.xml</code> 中,将 <code>config_enableAutoPowerModes</code> 设置为 <strong>true</strong>:<pre class="devsite-click-to-copy">
-&lt;bool name="config_enableAutoPowerModes"&gt;true&lt;/bool&gt;
-</pre>
-在 AOSP 中,该参数默认设为 false(已停用低电耗模式)。<br />
-</li>
-<li>确认预加载的应用和服务满足以下要求:<ul>
-<li>遵循<a href="https://developer.android.com/training/monitoring-device-state/doze-standby.html">节电优化指南</a>。有关详情,请参阅<a href="#test-apps">测试和优化应用</a>。
-<p><strong>或</strong></p>
-</li><li>获得豁免,不会进入低电耗模式和应用待机模式。有关详情,请参阅<a href="#exempt-apps">豁免应用</a>。</li>
-</ul>
-</li>
-<li>确认必要的服务已获得豁免,不会进入低电耗模式。</li>
-</ol>
-
-<h4 id="doze-tips">技巧</h4>
-<ul>
-<li>如果可能,请使用 FCM 进行<a href="https://firebase.google.com/docs/cloud-messaging/http-server-ref#send-downstream">下游消息传递</a>。</li>
-<li>如果您的用户必须立即看到通知,请使用 <a href="https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message">FCM 高优先级消息</a>。</li>
-<li>在初始<a href="https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages">消息有效负载</a>内提供充足的信息(以避免不必要的后续网络访问)。</li>
-<li>使用 <a href="http://developer.android.com/reference/android/app/AlarmManager.html#setAndAllowWhileIdle(int,%20long,%20android.app.PendingIntent)">setAndAllowWhileIdle()</a> 和 <a href="http://developer.android.com/reference/android/app/AlarmManager.html#setExactAndAllowWhileIdle(int,%20long,%20android.app.PendingIntent)">setExactAndAllowWhileIdle()</a> 设置重要闹钟。
-</li>
-</ul>
-
-<h4 id="test-apps">测试和优化应用</h4>
-<p>在低电耗模式中测试所有应用(尤其是预加载的应用)。有关详情,请参阅<a href="https://developer.android.com/training/monitoring-device-state/doze-standby.html#testing_doze_and_app_standby">测试低电耗模式和应用待机模式</a>。</p>
-
-<aside class="note"><strong>注意</strong>:彩信/短信/电话服务独立于低电耗模式发挥作用,即使设备处于低电耗模式,此类服务也一定会唤醒客户端应用。</aside>
-
 <h2 id="exempt-apps">豁免应用</h2>
 <p>您可以豁免应用,使其不受低电耗模式和应用待机模式的影响。豁免功能可能适用于下列情况:</p>
 <ul>
-<li>使用非 FCM 云消息传递平台的原始设备制造商 (OEM)</li>
+<li>使用除 <a href="https://firebase.google.com/docs/cloud-messaging/" class="external">Firebase 云消息传递</a> (FCM) 以外的云消息传递平台的设备制造商。</li>
 <li>使用非 FCM 云消息传递平台的运营商</li>
 <li>使用非 FCM 云消息传递平台的第三方应用</li>
 </ul>
 
-<p class="warning"><strong>警告</strong>:请勿为了规避测试和优化而豁免应用。不必要的豁免会削弱低电耗模式和应用待机模式的优势,且有损于用户体验,因此我们强烈建议尽可能不要进行此类豁免(因为这样做会让应用破坏平台对耗电量的有益控制)。如果用户开始对这些应用的耗电量感到不满,则会导致令人失望的糟糕体验(和针对该应用的负面用户评价)并引发客户支持问题。出于这些原因,我们强烈建议您不要豁免第三方应用,而仅豁免云消息传递服务或功能相似的应用。</p>
+<p class="warning"><strong>警告</strong>:请勿为了规避测试和优化而豁免应用。不必要的豁免会削弱低电耗模式和应用待机模式的优势,且有损于用户体验,因此我们强烈建议尽可能不要进行此类豁免(因为这样做会让应用破坏平台对耗电量的有益控制)。如果用户开始对这些应用的耗电量感到不满,则会导致令人失望的糟糕体验(和针对该应用的负面评价)并引发客户支持问题。出于这些原因,我们强烈建议您不要豁免第三方应用,而仅豁免云消息传递服务或功能相似的应用。</p>
 
-<p>豁免的应用默认在“设置”&gt;“应用和通知”&gt;“特殊应用权限”&gt;“电池优化”中的一个视图内列出。<em></em>该列表用于豁免应用,使其不会进入低电耗模式和应用待机模式。为使用户清楚知道哪些应用已被豁免,“设置”菜单<strong>必须</strong>显示所有豁免的应用。</p>
+<p>默认情况下,豁免的应用会在“设置”&gt;“应用和通知”&gt;“特殊应用权限”&gt;“电池优化”中列出。<em></em>该列表用于豁免应用,使其不会进入低电耗模式和应用待机模式。为使用户清楚知道哪些应用已被豁免,“设置”菜单<strong>必须</strong>显示所有豁免的应用。</p>
 
 <p>用户可以依次转到“设置”&gt;“应用和通知”&gt;“应用名称”&gt;“电池”&gt;“电池优化”,然后选择要关闭(或重新开启)优化的应用,以此来手动豁免应用。<em></em><var></var>不过,用户无法取消豁免系统映像中默认豁免的任何应用或服务。</p>
 
diff --git a/zh-cn/devices/tech/power/platform_mgmt.html b/zh-cn/devices/tech/power/platform_mgmt.html
new file mode 100644
index 0000000..238dd55
--- /dev/null
+++ b/zh-cn/devices/tech/power/platform_mgmt.html
@@ -0,0 +1,174 @@
+<html devsite><head>
+    <title>平台电源管理</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>
+为了延长设备的电池续航时间,Android 可以通过监控设备使用情况和唤醒状况来影响设备状态。如果用户未使用设备,则平台会使设备进入休眠状态以便应用停止运行。
+  </p>
+
+  <h2 id="doze">低电耗模式</h2>
+
+<p>当用户长时间未使用设备时,低电耗模式会延迟应用后台 CPU 和网络活动,从而延长电池续航时间。</p>
+
+<p>处于低电耗模式的闲置设备会定期进入维护时段,在此期间,应用可以完成待进行的活动(同步、作业等)。然后,低电耗模式会使设备重新进入较长时间的休眠状态,接着进入下一个维护时段。在达到几个小时的休眠时间上限之前,平台会周而复始地重复低电耗模式休眠/维护的序列,且每一次都会延长闲置的时长。处于低电耗模式的设备始终可以感知到动作,且会在检测到动作时立即退出低电耗模式。</p>
+
+<p>每当用户关闭设备屏幕时,即使仍处于移动状态,Android 7.0 及更高版本都会延长设备处于低电耗模式的时间,以触发一系列轻度优化,从而延长电池续航时间。</p>
+
+<p>设备制造商通常将关键的系统服务设置为豁免应用,使其不进入低电耗模式。用户还可以在“设置”菜单中豁免特定的应用,使其不进入低电耗模式。不过,豁免的应用也可能导致设备过度耗电。低电耗模式在 AOSP 中默认处于<strong>停用</strong>状态;要详细了解如何启用低电耗模式,请参阅<a href="#integrate-doze">集成低电耗模式</a>。
+</p>
+
+<h3 id="doze-reqs">低电耗模式的要求</h3>
+<p>要支持低电耗模式,设备必须具有云消息传递服务,例如,<a href="https://firebase.google.com/docs/cloud-messaging/" class="external">Firebase 云消息传递 (FCM)</a>。外部触发事件(例如云消息传递)可以暂时唤醒应用执行任务,即使设备处于低电耗模式。</p>
+
+<p>此外,要全面支持低电耗模式,相应设备还必须具有<a href="/devices/sensors/sensor-types.html#significant_motion">大幅度动作检测器 (SMD)</a>;不过,Android 7.0 及更高版本中的轻度低电耗模式不要求具有 SMD。如果某台设备上启用了低电耗模式,且:</p>
+<ul>
+<li>该设备具有 SMD,则系统会进行全面的低电耗模式优化(包括轻度优化)。</li>
+<li>该设备没有 SMD,则系统仅会进行轻度低电耗模式优化。</li>
+</ul>
+
+<h3 id="doze-life">低电耗模式生命周期</h3>
+
+<p>当平台检测到设备处于闲置状态时,便会使其进入低电耗模式,并在一个或多个满足退出条件的活动发生时使设备退出低电耗模式。</p>
+
+<table>
+<tbody>
+<tr>
+<th width="20%">检测</th>
+<th width="60%">低电耗模式期间</th>
+<th width="20%">退出</th>
+</tr>
+<tr>
+<td><p>当设备具有以下特点时,平台会检测到其处于闲置状态:</p>
+<ul>
+<li>设备是静止的(使用大幅度动作检测器检测)。</li>
+<li>设备屏幕已关闭一段时间。</li>
+</ul>
+<p>当设备连接到充电器时,不会进入低电耗模式。
+</p>
+</td>
+<td><p>平台会尝试使系统处于休眠状态,定期进入维护时段并恢复正常操作,然后使设备返回休眠状态并在更长的重复时间内处于休眠状态。在休眠期间,设备会受到以下限制:</p>
+<ul>
+<li>应用无法访问网络。</li>
+<li>应用唤醒锁定被忽略。</li>
+<li>闹钟被延迟。闹钟响铃以及使用 <code>setAndAllowWhileIdle()</code> 设置的闹钟(当设备处于低电耗模式时,限于每个应用每 15 分钟 1 次)除外。此豁免适用于必须显示活动提醒通知的应用(如日历)。</li>
+<li>无法执行 WLAN 扫描。</li>
+<li><code>SyncAdapter</code> 同步和 <code>JobScheduler</code> 作业被延迟,直到下一个维护时段才能恢复。</li>
+<li>接收短信和彩信的应用被暂时列入白名单,以便它们可以完成处理任务。</li>
+</ul>
+</td>
+<td><p>当平台检测到以下情况时,会使设备退出低电耗模式:</p>
+<ul>
+<li>用户与设备互动。</li>
+<li>设备移动。</li>
+<li>设备屏幕打开。</li>
+<li>AlarmClock 即将响铃。</li>
+</ul>
+<p>通知不会使设备退出低电耗模式。</p>
+</td>
+</tr>
+</tbody>
+</table>
+
+<p>在屏幕关闭期间、设备处于闲置状态之前,Android 7.0 及更高版本通过启用轻度休眠模式来延长设备处于低电耗模式的时间。</p>
+
+<p><img src="/devices/tech/images/doze_lightweight.png"/></p>
+<figcaption><strong>图 1.</strong> 非静止和静止设备的低电耗模式。</figcaption>
+
+<table>
+<tbody>
+<tr>
+<th>操作</th>
+<th>低电耗模式</th>
+<th>轻度低电耗模式</th>
+</tr>
+<tr>
+<td>触发因素</td>
+<td>屏幕关闭、电池供电、静止</td>
+<td>屏幕关闭、电池供电(未插电)</td>
+</tr>
+<tr>
+<td>时间</td>
+<td>随维护时段依次增加</td>
+<td>随维护时段反复持续 N 分钟</td>
+</tr>
+<tr>
+<td>限制</td>
+<td>无法进行网络访问、唤醒锁定和 GPS/WLAN 扫描。闹钟和作业/同步被延迟。</td>
+<td>无法进行网络访问。作业/同步被延迟(维护时段除外)。
+</td>
+</tr>
+<tr>
+<td>行为</td>
+<td>仅接收优先级较高的推送通知消息。</td>
+<td>接收所有实时消息(即时消息、致电等)。优先级较高的推送通知消息可以暂时访问网络。</td>
+</tr>
+<tr>
+<td>退出</td>
+<td>动作、屏幕开启或闹钟响铃。</td>
+<td>屏幕开启。</td>
+</tr>
+</tbody>
+</table>
+
+<h3 id="doze-interactions">与应用待机模式相集成</h3>
+<ul>
+<li>设备处于低电耗模式的时间不会计入应用待机模式。</li>
+<li>当设备处于低电耗模式时,闲置应用一天至少可以执行一次正常操作。</li>
+</ul>
+
+<h3 id="integrate-doze">集成低电耗模式</h3>
+
+<p>启用低电耗模式时,支持 <a href="/devices/sensors/sensor-types.html#significant_motion"><code>SENSOR_TYPE_SIGNIFICANT_MOTION</code>code&gt;</a> 的设备会执行全面的低电耗模式优化(包括轻度优化);没有 SMD 的设备仅执行轻度低电耗模式优化。Android 会自动选择适当的低电耗模式优化,无需供应商配置。</p>
+
+<p>要为设备启用低电耗模式,请执行以下操作:</p>
+
+<ol>
+<li>确认设备已安装云消息传递服务。</li>
+<li>在设备叠加配置文件 <code>overlay/frameworks/base/core/res/res/values/config.xml</code> 中,将 <code>config_enableAutoPowerModes</code> 设置为 <strong>true</strong>:
+<pre class="devsite-click-to-copy">
+&lt;bool name="config_enableAutoPowerModes"&gt;true&lt;/bool&gt;
+</pre>
+在 AOSP 中,该参数默认设为 false(已停用低电耗模式)。<br />
+</li>
+<li>确认预加载的应用和服务满足以下要求:<ul>
+<li>遵循<a href="https://developer.android.com/training/monitoring-device-state/doze-standby.html" class="external">节电优化指南</a>。有关详情,请参阅<a href="#test-apps">测试和优化应用</a>。
+<p><strong>或</strong></p>
+</li><li>获得豁免,不会进入低电耗模式和应用待机模式。有关详情,请参阅<a href="#exempt-apps">豁免应用</a>。</li>
+</ul>
+</li>
+<li>确认必要的服务已获得豁免,不会进入低电耗模式。</li>
+</ol>
+
+<h4 id="doze-tips">技巧</h4>
+<ul>
+<li>如果可能,请使用 FCM 进行<a href="https://firebase.google.com/docs/cloud-messaging/http-server-ref#send-downstream" class="external">下游消息传递</a>。</li>
+<li>如果您的用户必须立即看到通知,请使用 <a href="https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message" class="external">FCM 高优先级消息</a>。</li>
+<li>在初始<a href="https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages" class="external">消息有效负载</a>内提供充足的信息(以避免不必要的后续网络访问)。</li>
+<li>使用 <a href="http://developer.android.com/reference/android/app/AlarmManager.html#setAndAllowWhileIdle(int,%20long,%20android.app.PendingIntent)" class="external"><code>setAndAllowWhileIdle()</code></a> 和 <a href="http://developer.android.com/reference/android/app/AlarmManager.html#setExactAndAllowWhileIdle(int,%20long,%20android.app.PendingIntent)" class="external"><code>setExactAndAllowWhileIdle()</code></a> 设置重要闹钟。
+</li>
+</ul>
+
+<h4 id="test-apps">测试和优化应用</h4>
+<p>在低电耗模式中测试所有应用(尤其是预加载的应用)。有关详情,请参阅<a href="https://developer.android.com/training/monitoring-device-state/doze-standby.html#testing_doze_and_app_standby">测试低电耗模式和应用待机模式</a>。</p>
+
+<aside class="note"><strong>注意</strong>:彩信/短信/电话服务独立于低电耗模式发挥作用,即使设备处于低电耗模式,此类服务也一定会唤醒客户端应用。</aside>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/settings/settings-guidelines.html b/zh-cn/devices/tech/settings/settings-guidelines.html
index e905bf1..63ff6d0 100644
--- a/zh-cn/devices/tech/settings/settings-guidelines.html
+++ b/zh-cn/devices/tech/settings/settings-guidelines.html
@@ -361,7 +361,7 @@
 
 <p>如果表单有一个输入字段,请使用普通对话框。这样可以使用户轻松地在单个字段中输入内容。</p>
 
-<p>不过,如果表单有多个字段,请考虑使用<a href="https://material.io/design/components/dialogs.html#full-screen-dialog">全屏对话框</a>。这样可以提供更多屏幕空间,从而以清晰的方式排列各字段。</p>
+<p>不过,如果表单有多个字段,请考虑使用<a href="https://material.io/design/components/dialogs.html#full-screen-dialog" class="external">全屏对话框</a>。这样可以提供更多屏幕空间,从而以清晰的方式排列各字段。</p>
 
 <p><img src="images/settings-guidelines39.png" width="250" class="screenshot"/></p>
 
diff --git a/zh-cn/devices/tech/test_infra/tradefed/full_example.html b/zh-cn/devices/tech/test_infra/tradefed/full_example.html
index 938f4be..566e080 100644
--- a/zh-cn/devices/tech/test_infra/tradefed/full_example.html
+++ b/zh-cn/devices/tech/test_infra/tradefed/full_example.html
@@ -161,7 +161,7 @@
 <p>您应该可以看到显示设备序列号的新输出消息。</p>
 
 <h2 id="sendresults">发送测试结果 (D)</h2>
-<p><code>IRemoteTest</code> 会对提供给 <code>#run</code> 方法的 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html"></a> 实例调用相关方法,从而报告结果。TF 框架本身负责报告每个调用的开始位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationStarted(com.android.tradefed.build.IBuildInfo)">ITestInvocationListener#invocationStarted</a>)和结束位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationEnded(long)">ITestInvocationListener#invocationEnded</a>)。</p>
+<p><code>IRemoteTest</code> 会对提供给 <code>#run</code> 方法的 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html">ITestInvocationListener</a> 实例调用相关方法,从而报告结果。TF 框架本身负责报告每个调用的开始位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationStarted(com.android.tradefed.build.IBuildInfo)">ITestInvocationListener#invocationStarted</a>)和结束位置(通过 <a href="/reference/com/android/tradefed/result/ITestInvocationListener.html#invocationEnded(long)">ITestInvocationListener#invocationEnded</a>)。</p>
 
 <p><b>测试运行</b>是测试的逻辑集合。要报告测试结果,<code>IRemoteTest</code> 负责报告测试运行的开始之处,每个测试的开始和结束之处以及测试运行的结束之处。</p>
 
diff --git a/zh-cn/devices/tv/index.html b/zh-cn/devices/tv/index.html
index 1aa79fa..29f962e 100644
--- a/zh-cn/devices/tv/index.html
+++ b/zh-cn/devices/tv/index.html
@@ -176,7 +176,7 @@
 <figcaption><strong>图 6.</strong> Android TV KeyEvent</figcaption>
 </figure>
 
-<p>上图显示了遥控器上的按钮事件如何传递到特定的 TV Input,从而实现画中画 (PIP) 显示。这些按下按钮的操作由设备制造商提供的硬件驱动程序进行解析,从而将硬件扫描码转换为 Android 键码,并将它们作为 <a href="http://developer.android.com/reference/android/view/KeyEvent.html">KeyEvents</a> 传递到标准的 Android <a href="/devices/input/overview.html">输入管道</a> <code>InputReader</code> 和 <code>InputDispatcher</code> 函数。
+<p>上图显示了遥控器上的按钮事件如何传递到特定的 TV Input,从而实现画中画 (PIP) 显示。这些按下按钮的操作由设备制造商提供的硬件驱动程序进行解析,从而将硬件扫描码转换为 Android 键码,并将它们作为 <a href="http://developer.android.com/reference/android/view/KeyEvent.html">KeyEvent</a> 传递到标准的 Android <a href="/devices/input/overview.html">输入管道</a> <code>InputReader</code> 和 <code>InputDispatcher</code> 函数。
 当 TV 应用获得焦点时,它们就会在 TV 应用上触发事件。</p>
 
 <p>只有系统 TV Input 才有资格接收 <code>InputEvents</code>(前提是这些系统 TV Input 具有 <code>RECEIVE_INPUT_EVENT</code> 系统权限)。
@@ -404,7 +404,7 @@
 <p>我们鼓励设备制造商进行如下操作:</p>
 <ul>
   <li>对照作为参考的 Live TV 应用进行 CTS 验证程序家长控制测试,以对兼容性要求进行验证。</li>
-  <li>使用 Live TV 应用作为他们自己的 TV 应用的参考:请重点参阅 <a href="https://android.googlesource.com/platform/packages/apps/TV/+/master/src/com/android/tv/parental/ContentRatingsManager.java">ContentRatingsManager</a> 和 <a href="https://android.googlesource.com/platform/packages/apps/TV/+/master/src/com/android/tv/ui/sidepanel/parentalcontrols/RatingSystemsFragment.java">RatingSystemsFragment</a> 源代码,了解二者处理自定义评级的方式。</li>
+  <li>使用 Live TV 应用作为自己的 TV 应用的参考:请重点参阅 <a href="https://android.googlesource.com/platform/packages/apps/TV/+/master/src/com/android/tv/parental/ContentRatingsManager.java">ContentRatingsManager</a> 和 <a href="https://android.googlesource.com/platform/packages/apps/TV/+/master/src/com/android/tv/ui/sidepanel/parentalcontrols/RatingSystemsFragment.java">RatingSystemsFragment</a> 源代码,了解二者处理自定义评级的方式。</li>
 </ul>
 
 <h2 id="hdmi-cec">HDMI-CEC</h2>
diff --git a/zh-cn/security/advisory/2016-03-18.html b/zh-cn/security/advisory/2016-03-18.html
index 45ab14e..f447e98 100644
--- a/zh-cn/security/advisory/2016-03-18.html
+++ b/zh-cn/security/advisory/2016-03-18.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>Android 安全建议 - 2016 年 3 月 18 日</title>
+    <title>Android 安全建议 - 2016-03-18</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
diff --git a/zh-cn/security/advisory/index.html b/zh-cn/security/advisory/index.html
index 444e8a5..74f02ed 100644
--- a/zh-cn/security/advisory/index.html
+++ b/zh-cn/security/advisory/index.html
@@ -35,7 +35,12 @@
  <tr>
     <td><a href="2016-03-18.html">2016-03-18</a></td>
     <td>
-      <a href="/security/advisory/2016-03-18.html">English</a> / <a href="/security/advisory/2016-03-18.html?hl=ja">日本語</a> / <a href="/security/advisory/2016-03-18.html?hl=ko">한국어</a> / <a href="/security/advisory/2016-03-18.html?hl=ru">ру́сский</a> / <a href="/security/advisory/2016-03-18.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/advisory/2016-03-18.html?hl=zh-tw">中文 (台灣)</a>
+      <a href="/security/advisory/2016-03-18.html">English</a> /
+      <a href="/security/advisory/2016-03-18.html?hl=ja">日本語</a> /
+      <a href="/security/advisory/2016-03-18.html?hl=ko">한국어</a> /
+      <a href="/security/advisory/2016-03-18.html?hl=ru">ру́сский</a> /
+      <a href="/security/advisory/2016-03-18.html?hl=zh-cn">中文 (中国)</a> /
+      <a href="/security/advisory/2016-03-18.html?hl=zh-tw">中文 (台灣)</a>
     </td>
     <td>2016 年 3 月 18 日</td>
  </tr>
diff --git a/zh-cn/security/apksigning/index.html b/zh-cn/security/apksigning/index.html
index c0af7d0..4efa15b 100644
--- a/zh-cn/security/apksigning/index.html
+++ b/zh-cn/security/apksigning/index.html
@@ -30,29 +30,39 @@
 <p>应用可以由第三方(OEM、运营商、其他应用市场)签名,也可以自行签名。Android 提供了使用自签名证书进行代码签名的功能,而开发者无需外部协助或许可即可生成自签名证书。应用并非必须由核心机构签名。Android 目前不对应用证书进行 CA 认证。
 </p>
 <p>应用还可以在“签名”保护级别声明安全权限,以便只有使用同一个密钥签名的应用可以获得此仅限,同时让这些应用可以各自维持单独的 UID 和应用沙盒。通过<a href="https://developer.android.com/guide/topics/manifest/manifest-element.html#uid">共用 UID 功能</a>,多个应用可以共用一个应用沙盒,从而建立起更紧密的联系。在该功能中,使用同一个开发者密钥签名的两个或更多应用可以在其清单中声明共用的 UID。</p>
-<h2>APK 签名方案</h2>
-<p>Android 支持两种应用签名方案,一种是基于 JAR 签名的方案(v1 方案),另一种是 Android Nougat (Android 7.0) 中引入的 <a href="v2.html">APK 签名方案 v2(v2 方案)</a>。
-</p>
-<p>为了最大限度地提高兼容性,应同时采用 v1 和 v2 这两种方案对应用进行签名。与只通过 v1 方案签名的应用相比,通过 v2 方案签名的应用能够更快速地安装到 Android Nougat 及更高版本的设备上。更低版本的 Android 平台会忽略 v2 签名,这就需要应用包含 v1 签名。
+<h2 id="schemes">APK 签名方案</h2>
+<p>
+Android 支持以下三种应用签名方案:</p>
+<ul>
+  <li>v1 方案:基于 JAR 签名。</li>
+  <li>v2 方案:<a href="/security/apksigning/v2.html">APK 签名方案 v2</a>(在 Android 7.0 中引入)。</li>
+  <li>v3 方案:<a href="/security/apksigning/v3.html">APK 签名方案 v3</a>(在 Android 9 中引入)。</li>
+</ul>
+
+<p>
+为了最大限度地提高兼容性,请按照 v1、v2、v3 的先后顺序采用所有方案对应用进行签名。与只通过 v1 方案签名的应用相比,还通过 v2+ 方案签名的应用能够更快速地安装到 Android 7.0 及更高版本的设备上。更低版本的 Android 平台会忽略 v2+ 签名,这就需要应用包含 v1 签名。
 </p>
 <h3 id="v1">JAR 签名(v1 方案)</h3>
 <p>从一开始,APK 签名就是 Android 的一个有机部分。该方案基于<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Signed_JAR_File">签名的 JAR</a>。如要详细了解如何使用该方案,请参阅介绍如何<a href="https://developer.android.com/studio/publish/app-signing.html">为您的应用签名</a>的 Android Studio 文档。
 </p>
 <p>v1 签名不保护 APK 的某些部分,例如 ZIP 元数据。APK 验证程序需要处理大量不可信(尚未经过验证)的数据结构,然后会舍弃不受签名保护的数据。这会导致相当大的受攻击面。此外,APK 验证程序必须解压所有已压缩的条目,而这需要花费更多时间和内存。为了解决这些问题,Android 7.0 中引入了 APK 签名方案 v2。
 </p>
-<h3 id="v2">APK 签名方案 v2(v2 方案)</h3>
-<p>Android 7.0 中引入了 APK 签名方案 v2(v2 方案)。该方案会对 APK 的内容进行哈希处理和签名,然后将生成的“APK 签名分块”插入到 APK 中。如要详细了解如何在应用中使用 v2 方案,请参阅 Android N 开发者预览版中的 <a href="https://developer.android.com/about/versions/nougat/android-7.0.html#apk_signature_v2">APK 签名方案 v2</a>。
+<h3 id="v2">APK 签名方案 v2 和 v3(v2+ 方案)</h3>
+<p>
+搭载 Android 7.0 及更高版本的设备支持 APK 签名方案 v2(v2 方案)及更高版本的方案(在 Android P 中,v2 方案已更新为 v3 方案,以便在签名分块中包含其他信息,但在其他方面保持相同的工作方式)。该方案会对 APK 的内容进行哈希处理和签名,然后将生成的“APK 签名分块”插入到 APK 中。要详细了解如何在应用中使用 v2+ 方案,请参阅 <a href="https://developer.android.com/about/versions/nougat/android-7.0.html#apk_signature_v2">APK 签名方案 v2</a>。
 </p>
-<p>在验证期间,v2 方案会将 APK 文件视为 Blob,并对整个文件进行签名检查。对 APK 进行的任何修改(包括对 ZIP 元数据进行的修改)都会使 APK 签名作废。这种形式的 APK 验证不仅速度要快得多,而且能够发现更多种未经授权的修改。
+<p>
+在验证期间,v2+ 方案会将 APK 文件视为 Blob,并对整个文件进行签名检查。对 APK 进行的任何修改(包括对 ZIP 元数据进行的修改)都会使 APK 签名作废。这种形式的 APK 验证不仅速度要快得多,而且能够发现更多种未经授权的修改。
 </p>
 <p>新的签名格式向后兼容,因此,使用这种新格式签名的 APK 可在更低版本的 Android 设备上进行安装(会直接忽略添加到 APK 的额外数据),但前提是这些 APK 还带有 v1 签名。
 </p>
 <p>
   <img src="../images/apk-validation-process.png" alt="APK 签名验证过程" id="figure1"/>
 </p>
-<p class="img-caption"><strong>图 1.</strong> APK 签名验证过程(新步骤以红色显示)</p>
+<p class="img-caption"><strong>图 1.</strong> APK 签名验证过程</p>
 
-<p>验证程序会对照存储在“APK 签名分块”中的 v2 签名对 APK 的全文件哈希进行验证。该哈希涵盖除“APK 签名分块”(其中包含 v2 签名)之外的所有内容。在“APK 签名分块”以外对 APK 进行的任何修改都会使 APK 的 v2 签名作废。v2 签名被删除的 APK 也会被拒绝,因为 v1 签名指明相应 APK 带有 v2 签名,所以 Android Nougat 及更高版本会拒绝使用 v1 签名验证 APK。
+<p>
+验证程序会对照存储在“APK 签名分块”中的 v2+ 签名对 APK 的全文件哈希进行验证。该哈希涵盖除“APK 签名分块”(其中包含 v2+ 签名)之外的所有内容。在“APK 签名分块”以外对 APK 进行的任何修改都会使 APK 的 v2+ 签名作废。v2+ 签名被删除的 APK 也会被拒绝,因为 v1 签名指明相应 APK 带有 v2 签名,所以 Android 7.0 及更高版本会拒绝使用 v1 签名验证 APK。
 </p>
 
 <p>如需关于 APK 签名验证过程的详细信息,请参阅 APK 签名方案 v2 的<a href="v2.html#verification">“验证”部分</a>。</p>
diff --git a/zh-cn/security/apksigning/v2.html b/zh-cn/security/apksigning/v2.html
index 50fea46..a0c8fa4 100644
--- a/zh-cn/security/apksigning/v2.html
+++ b/zh-cn/security/apksigning/v2.html
@@ -234,7 +234,7 @@
   <li>如果 APK 包含未在 MANIFEST.MF 中列出且不属于 JAR 签名一部分的 JAR 条目,APK 验证将会失败。</li>
 </ol>
 
-<p>因此,保护链是每个受完整性保护的 JAR 条目的 &lt;signer&gt;.(RSA|DSA|EC) -&gt; &lt;signer&gt;.SF -&gt; MANIFEST.MF -&gt; 内容。
+<p>因此,保护链是每个受完整性保护的 JAR 条目的 &lt;signer&gt;.(RSA|DSA|EC) -&gt; &lt;signer&gt;.SF -&gt; MANIFEST.MF -&gt; 每个受完整性保护的 JAR 条目的内容。
 </p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/apksigning/v3.html b/zh-cn/security/apksigning/v3.html
new file mode 100644
index 0000000..aadffd1
--- /dev/null
+++ b/zh-cn/security/apksigning/v3.html
@@ -0,0 +1,205 @@
+<html devsite><head>
+    <title>APK 签名方案 v3</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>
+Android 9 支持 <a href="https://developer.android.com/preview/features/security#apk-key-rotation">APK 密钥轮转</a>,这使应用能够在 APK 更新过程中更改其签名密钥。为了实现轮转,APK 必须指示新旧签名密钥之间的信任级别。为了支持密钥轮转,我们将 <a href="/security/apksigning/v2">APK 签名方案</a>从 v2 更新为 v3,以允许使用新旧密钥。v3 在 APK 签名分块中添加了有关受支持的 SDK 版本和 proof-of-rotation 结构的信息。
+</p>
+<h2 id="apk-signing-block">APK 签名分块</h2>
+<p>
+为了保持与 v1 APK 格式向后兼容,v2 和 v3 APK 签名存储在“APK 签名分块”内紧邻 ZIP Central Directory 前面。
+</p>
+<p>
+v3 APK 签名分块的格式<a href="/security/apksigning/v2#apk-signing-block-format">与 v2 相同</a>。APK 的 v3 签名会存储为一个“ID-值”对,其中 ID 为 0xf05368c0。
+</p>
+<h2 id="apk-signature-scheme-v3-block">APK 签名方案 v3 分块</h2>
+<p>
+v3 方案的设计与 <a href="/security/apksigning/v2#apk-signature-scheme-v2-block">v2 方案</a>非常相似,采用相同的常规格式,并支持相同的<a href="/security/apksigning/v2#signature-algorithm-ids">签名算法 ID</a>、密钥大小和 EC 曲线。
+</p>
+<p>
+但是,v3 方案增添了有关受支持的 SDK 版本和 proof-of-rotation 结构的信息。
+</p>
+<h3 id="format">格式</h3>
+<p>
+“APK 签名方案 v3 分块”存储在“APK 签名分块”内,ID 为 <code>0xf05368c0</code>。
+</p>
+<p>
+“APK 签名方案 v3 分块”采用 v2 的格式:
+</p>
+
+<ul>
+ <li>带长度前缀的 <code>signer</code>(带长度前缀)序列:
+  <ul>
+   <li>带长度前缀的 <code>signed data</code>:
+    <ul>
+      <li>带长度前缀的 <code>digests</code>(带长度前缀)序列:
+       <ul>
+        <li><code>signature algorithm ID</code>(4 个字节)</li>
+        <li><code>digest</code>(带长度前缀)</li>
+       </ul>
+      </li>
+      <li>带长度前缀的 X.509 <code>certificates</code> 序列:
+       <ul>
+        <li>带长度前缀的 X.509 <code>certificate</code>(ASN.1 DER 形式)</li>
+       </ul>
+      </li>
+      <li><code>minSDK</code> (uint32) - 如果平台版本低于此数字,则应忽略该签名者。</li>
+      <li><code>maxSDK</code> (uint32) - 如果平台版本高于此数字,则应忽略该签名者。</li>
+      <li>带长度前缀的 <code>additional
+        attributes</code>(带长度前缀)序列:
+       <ul>
+         <li><code>ID</code> (uint32)</li>
+         <li><code>value</code>(可变长度:附加属性的长度 - 4 个字节)</li>
+         <li><code>ID -<strong> 0x3ba06f8c</strong></code></li>
+         <li><code>value -</code> Proof-of-rotation 结构</li>
+       </ul>
+      </li>
+     </ul>
+   </li>
+   <li><code>minSDK</code> (uint32) - 签名数据部分中 minSDK 值的副本 - 用于在当前平台不在相应范围内时跳过对此签名的验证。必须与签名数据值匹配。</li>
+   <li><code>maxSDK</code> (uint32) - 签名数据部分中 maxSDK 值的副本 - 用于在当前平台不在相应范围内时跳过对此签名的验证。必须与签名数据值匹配。</li>
+   <li>带长度前缀的 <code>signatures</code>(带长度前缀)序列:
+    <ul>
+     <li><code>signature algorithm ID</code> (uint32)</li>
+     <li><code>signed data</code> 上带长度前缀的 <code>signature</code></li>
+    </ul>
+   </li>
+   <li>带长度前缀的 <code>public key</code>(SubjectPublicKeyInfo,ASN.1 DER 形式)</li>
+  </ul>
+ </li>
+</ul>
+
+<h2 id="proof-of-rotation-and-self-trusted-old-certs-structs">Proof-of-rotation 和 self-trusted-old-certs 结构</h2>
+<p>
+proof-of rotation 结构允许应用轮转其签名证书,而不会使这些证书在与这些应用通信的其他应用上被屏蔽。为此,应用签名包含两个新数据块:
+</p>
+<ul>
+  <li>告知第三方应用的签名证书可信(只要其先前证书可信)的断言</li>
+  <li>应用的旧签名证书(应用本身仍信任这些证书)</li>
+</ul>
+<p>
+签名数据部分中的 proof-of-rotation 属性包含一个单链表,其中每个节点都包含用于为之前版本的应用签名的签名证书。此属性旨在包含概念性 proof-of-rotation 和 self-trusted-old-certs 数据结构。该单链表按版本排序,最旧的签名证书对应于根节点。在构建 proof-of-rotation 数据结构时,系统会让每个节点中的证书为列表中的下一个证书签名,从而为每个新密钥提供证据来证明它应该像旧密钥一样可信。
+</p>
+<p>
+在构造 self-trusted-old-certs 数据结构时,系统会向每个节点添加标记来指示它在组中的成员资格和属性。例如,可能存在一个标记,指示给定节点上的签名证书可信,可获得 Android 签名权限。此标记允许由旧证书签名的其他应用仍被授予由使用新签名证书签名的应用所定义的签名权限。由于整个 proof-of-rotation 属性都位于 v3 <code>signer</code> 字段的签名数据部分中,因此用于为所含 APK 签名的密钥会保护该属性。
+</p>
+<p>
+此格式排除了<a href="#multiple-certificates">多个签名密钥</a>的情况和将<a href="#multiple-ancestors">不同祖先签名证书</a>收敛到一个证书的情况(多个起始节点指向一个通用接收器)。
+</p>
+
+<h3 id="proof-of-rotation-format">格式</h3>
+<p>
+proof-of-rotation 存储在“APK 签名方案 v3 分块”内,ID 为 <code>0x3ba06f8c</code>。其格式为:
+</p>
+
+<ul>
+ <li>带长度前缀的 <code>levels</code>(带长度前缀)序列:
+  <ul>
+   <li>带长度前缀的 <code>signed data</code>(由上一个证书签名 - 如果存在)
+    <ul>
+     <li>带长度前缀的 X.509 <code>certificate</code>(ASN.1 DER 形式)</li>
+     <li><code>signature algorithm ID</code> (uint32) - 上一级证书使用的算法</li>
+    </ul>
+   </li>
+   <li><code>flags</code> (uint32) - 这些标记用于指示此证书是否应该在 self-trusted-old-certs 结构中,以及用于哪些操作。</li>
+   <li><code>signature algorithm ID</code> (uint32) - 必须与签名数据部分下一级中的相应 ID 一致。</li>
+   <li><code>signed
+       data</code> 上带长度前缀的 <code>signature</code></li>
+  </ul>
+ </li>
+</ul>
+
+<h3 id="multiple-certificates">多个证书</h3>
+<p>
+Android 目前将使用多个证书签名的 APK 视为具有与所含证书不同的签名身份。因此,签名数据部分中的 proof-of-rotation 属性构成了一个有向无环图,最好将其视为单链表,其中给定版本的每组签名者都表示一个节点。这为 proof-of-rotation 结构(下面的多签名者版本)带来了额外的复杂性。排序成为一个特别突出的问题。更重要的是,无法再单独为 APK 签名,因为 proof-of-rotation 结构必须让旧签名证书为新的证书集签名,而不是逐个签名。例如,如果希望由两个新密钥 B 和 C 签名的 APK 是由密钥 A 签名的,则它不能让 B 签名者仅包含 A 或 B 的签名,因为这是与 B 和 C 不同的签名身份。这意味着签名者必须在构建此类结构之前进行协调。
+</p>
+<h4 id="multiple-signers-proof-of-rotation-attribute">多个签名者 proof-of-rotation 属性</h4>
+<ul>
+ <li>带长度前缀的 <code>sets</code>(带长度前缀)序列:
+  <ul>
+   <li><code>signed data</code>(由上一组证书签名 - 如果存在)
+    <ul>
+     <li>带长度前缀的 <code>certificates</code> 序列
+      <ul>
+       <li>带长度前缀的 X.509 <code>certificate</code>(ASN.1 DER 形式)</li>
+      </ul>
+     </li>
+     <li><code>signature algorithm IDs </code>(uint32) 序列 - 上一组证书中的每个证书对应一个序列,且采用相同顺序。</li>
+    </ul>
+   </li>
+   <li><code>flags </code>(uint32) - 这些标记用于指示这组证书是否应该在 self-trusted-old-certs 结构中,以及用于哪些操作。</li>
+   <li>带长度前缀的 <code>signatures</code>(带长度前缀)序列:
+    <ul>
+     <li><code>signature algorithm ID</code> (uint32) - 必须与签名数据部分中的相应 ID 一致</li>
+     <li><code>signed data</code> 上带长度前缀的 <code>signature</code></li>
+    </ul>
+   </li>
+  </ul>
+ </li>
+</ul>
+
+<h3 id="multiple-ancestors">proof-of-rotation 结构中的多个祖先实体</h3>
+<p>
+v3 方案也无法处理轮转到同一个应用的同一签名密钥的两个不同密钥。这不同于收购情形,在收购情形中,收购公司希望转移收购的应用以使用其签名密钥来共享权限。收购被视为受支持的用例,因为新应用将通过其软件包名称来区分,并且可能包含自己的 proof-of-rotation 结构。不受支持的用例是,同一应用有两个不同的路径指向相同的证书,这打破了在密钥轮转设计中做出的许多假设。
+</p>
+<h2 id="verification">验证</h2>
+<p>在 Android 9 及更高版本中,可以根据 APK 签名方案 v3、v2 方案或 v1 方案验证 APK。较旧的平台会忽略 v3 签名并尝试验证 v2 签名,然后验证 v1。
+</p><p>
+  <img src="../images/apk-validation-process.png" alt="APK 签名验证过程" id="figure1"/>
+</p>
+<p class="img-caption"><strong>图 1.</strong> APK 签名验证过程</p>
+
+<h3 id="v3-verification">APK 签名方案 v3 验证</h3>
+<ol>
+ <li>找到“APK 签名分块”并验证以下内容:
+  <ol>
+   <li>“APK 签名分块”的两个大小字段包含相同的值。</li>
+   <li>“ZIP 中央目录结尾”紧跟在“ZIP 中央目录”记录后面。</li>
+   <li>“ZIP 中央目录结尾”之后没有任何数据。</li>
+  </ol>
+ </li>
+ <li>找到“APK 签名分块”中的第一个“APK 签名方案 v3 分块”。如果 v3 分块存在,则继续执行第 3 步。否则,回退至<a href="/security/apksigning/v2#v2-verification">使用 v2 方案</a>验证 APK。</li>
+ <li>对“APK 签名方案 v3 分块”中的每个 <code>signer</code>(最低和最高 SDK 版本在当前平台的范围内)执行以下操作:
+  <ol>
+   <li>从 <code>signatures</code> 中选择安全系数最高的受支持 <code>signature algorithm ID</code>。安全系数排序取决于各个实现/平台版本。</li>
+   <li>使用 <code>public
+       key</code> 并对照 <code>signed data</code> 验证 <code>signatures</code> 中对应的 <code>signature</code>。(现在可以安全地解析 <code>signed data</code> 了。)</li>
+   <li>验证签名数据中的最低和最高 SDK 版本是否与为 <code>signer</code> 指定的版本匹配。</li>
+   <li>验证 <code>digests</code> 和 <code>signatures</code> 中的签名算法 ID 列表(有序列表)是否相同。(这是为了防止删除/添加签名。)</li>
+   <li>使用签名算法所用的同一种摘要算法<a href="/security/apksigning/v2#integrity-protected-contents">计算 APK 内容的摘要</a>。</li>
+   <li>验证计算出的摘要是否与 <code>digests</code> 中对应的 <code>digest</code> 相同。</li>
+   <li>验证 <code>certificates</code> 中第一个 <code>certificate</code> 的 SubjectPublicKeyInfo 是否与 <code>public key</code> 相同。</li>
+   <li>如果 <code>signer</code> 存在 proof-of-rotation 属性,则验证结构是否有效,以及此 <code>signer</code> 是否为列表中的最后一个证书。</li>
+  </ol>
+ </li>
+ <li>如果在当前平台范围内仅找到了一个 <code>signer</code>,并且对该 <code>signer</code> 成功执行第 3 步,则验证成功。</li>
+</ol>
+
+<aside class="caution">
+<strong>注意</strong>:如果第 3 步或第 4 步失败,则不得使用 v1 或 v2 方案验证 APK。
+</aside>
+
+<h2 id="validation">验证</h2>
+<p>
+要测试您的设备是否正确支持 v3,请在 <code>cts/hostsidetests/appsecurity/src/android/appsecurity/cts/</code> 中运行 <code>PkgInstallSignatureVerificationTest.java</code> CTS 测试。
+</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/app-sandbox.html b/zh-cn/security/app-sandbox.html
new file mode 100644
index 0000000..ee3e714
--- /dev/null
+++ b/zh-cn/security/app-sandbox.html
@@ -0,0 +1,63 @@
+<html devsite><head>
+    <title>应用沙盒</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>
+Android 平台利用基于用户的 Linux 保护机制来识别和隔离应用资源,可将不同的应用分离开,并保护应用和系统免受恶意应用的攻击。为此,Android 会为每个 Android 应用分配一个独一无二的用户 ID (UID),并在自己的进程中运行。
+</p>
+<p>
+Android 会使用此 UID 设置一个内核级应用沙盒。内核会在进程级别利用标准的 Linux 机制(例如,分配给应用的用户 ID 和组 ID)实现应用和系统之间的安全防护。
+默认情况下,应用不能彼此交互,而且对操作系统的访问权限会受到限制。例如,如果应用 A(一个单独的应用)尝试执行恶意操作,例如在没有权限的情况下读取应用 B 的数据或拨打电话,操作系统会阻止此类行为,因为应用 A 没有适当的用户权限。这一沙盒机制非常简单,可审核,并且基于已有数十年历史的 UNIX 风格的进程用户隔离和文件权限机制。
+</p>
+<p>
+由于应用沙盒位于内核层面,因此该安全模型的保护范围扩展到了原生代码和操作系统应用。位于更高层面的所有软件(例如,操作系统库、应用框架、应用运行时环境和所有应用)都会在应用沙盒中运行。在某些平台上,为了执行安全防护机制,会限制开发者只能使用特定的开发框架、API 或语言。在 Android 上,并没有为此而限制开发者必须如何编写应用;在这方面,原生代码与解释型代码一样进行沙盒化。
+</p>
+
+<h2 id="protections">保护机制</h2>
+<p>
+通常,要在经过适当配置的设备上攻破应用沙盒这道防线,必须要先攻破 Linux 内核的安全功能。但是,与其他安全功能类似,强制执行应用沙盒的各种保护机制并非无懈可击,因此深度防御对于防止通过单个漏洞入侵操作系统或其他应用非常重要。
+</p>
+<p>
+Android 依靠许多保护机制来强制执行应用沙盒。
+这些强制措施是随着时间的推移不断引入的,并且显著增强了基于 UID 的原始自主访问控制 (DAC) 沙盒的安全性。
+以前的 Android 版本包括以下保护机制:
+</p>
+
+<ul>
+  <li>在 Android 5.0 中,SELinux 提供了强制访问控制 (MAC) 来将系统和应用分离开。但是,所有第三方应用都在相同的 SELinux 环境中运行,因此应用间的隔离主要由 UID DAC 强制执行。</li>
+  <li>在 Android 6.0 中,SELinux 沙盒经过扩展,可以跨各个物理用户边界隔离应用。此外,Android 还为应用数据设置了更安全的默认设置:对于 <code>targetSdkVersion &gt;= 24</code> 的应用,应用主目录上的默认 DAC 权限从 751 更改为 700。这为私有应用数据提供了更安全的默认设置(但应用可能会替换这些默认设置)。</li>
+  <li>在 Android 8.0 中,所有应用都设为使用 <code>seccomp-bpf</code> 过滤器运行,该过滤器可限制允许应用使用的系统调用,从而增强应用/内核边界的安全性。</li>
+  <li>在 Android 9 中,<code>targetSdkVersion &gt;=
+      28</code> 的所有非特权应用都必须在不同的 SELinux 沙盒中运行,并针对各个应用提供 MAC。这种保护机制可以提升应用隔离效果,防止替换安全默认设置,并且(最重要的是)防止应用的数据可让所有人访问。</li>
+</ul>
+
+<h2 id="guidelines-for-sharing-files">共享文件指南</h2>
+<p>
+将应用数据设为可供所有人访问从安全方面来讲是一种不好的做法,因为这会为所有人授予访问权限,并且无法限定只让目标受众访问这些数据。这种做法会导致信息披露泄露,让代理漏洞变得混乱,并会成为针对包含敏感数据的应用(例如电子邮件客户端)的恶意软件的首选目标。在 Android 9 及更高版本中,<code>targetSdkVersion&gt;=28</code> 的应用明确禁止以这种方式共享文件。
+</p>
+<p>
+在共享文件时,请遵循以下指南,而不是让应用数据可供所有人访问:
+</p>
+<ul>
+  <li>如果您的应用需要与其他应用共享文件,请使用<a href="https://developer.android.com/guide/topics/providers/content-provider-basics.html">内容提供程序</a>或<a href="https://developer.android.com/guide/topics/data/data-storage.html#filesExternal">外部存储设备</a>上的共享位置。内容提供程序会以适当的粒度共享数据,并且不会出现使用所有人都可访问的 UNIX 权限会带来的诸多问题(如需了解详情,请参阅<a href="https://developer.android.com/guide/topics/providers/content-provider-basics.html">内容提供程序基础知识</a>)。</li>
+  <li>如果您的应用包含确实应让所有人访问的文件(例如照片),请使用<a href="https://developer.android.com/guide/topics/data/data-storage.html#filesExternal">外部存储设备</a>。如需帮助,请参阅<a href="https://developer.android.com/training/data-storage/files.html#PublicFiles">将文件保存至公共目录</a>。</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/authentication/fingerprint-hal.html b/zh-cn/security/authentication/fingerprint-hal.html
index ceb4d15..c8bedf1 100644
--- a/zh-cn/security/authentication/fingerprint-hal.html
+++ b/zh-cn/security/authentication/fingerprint-hal.html
@@ -45,7 +45,8 @@
 <img src="../images/fingerprint-data-flow.png" alt="指纹身份验证的数据流程" id="figure1"/>
 <figcaption><strong>图 1.</strong> 指纹身份验证的概要数据流程</figcaption>
 <ul>
-  <li><code>FingerprintManager</code> API:会在应用进程中与应用直接交互。每个应用都有一个 <code>FingerprintManager</code> 实例,是与 <code>FingerprintService</code> 进行通信的封装容器。</li>
+  <li>生物识别 API。对于搭载 Android 8.1 及更低版本的设备,<code>FingerprintManager</code> 会在应用进程中与应用直接交互。每个应用都有一个 <code>FingerprintManager</code>(与 <code>FingerprintService</code> 进行通信的封装容器)实例。<br />搭载 Android 9 及更高版本的设备应使用 <code>BiometricPrompt</code> API,而不是 <code>FingerprintManager</code>。
+  </li>
   <li><code>FingerprintService</code>:在系统进程中运行的单例服务,可处理与 <code>fingerprintd</code> 之间的通信。
   </li><li><code>fingerprintd</code>:FingerprintService 中 binder 界面的 C/C++ 实现。<code>fingerprintd</code> 守护进程在自己的进程中运行,并会封装 Fingerprint HAL 供应商专用库。</li>
   <li><strong>Fingerprint HAL 供应商专用库</strong>:硬件供应商的 Fingerprint HAL 实现。供应商专用库能够与设备专用硬件进行通信。</li>
@@ -91,7 +92,7 @@
   <li><code>set_notify</code>:注册从 HAL 收到通知的用户函数。如果 HAL 状态机处于繁忙状态,该函数会被屏蔽,直到 HAL 不再处于繁忙状态为止。</li>
 </ul>
 
-<p>要详细了解这些函数,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/fingerprint.h" class="external"><code>fingerprint.h</code></a> 备注。
+<p>要详细了解这些函数,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/fingerprint.h" class="external"><code>fingerprint.h</code></a> 中的备注。
 </p>
 
 </figcaption></body></html>
\ No newline at end of file
diff --git a/zh-cn/security/authentication/index.html b/zh-cn/security/authentication/index.html
index 07edb38..12878ff 100644
--- a/zh-cn/security/authentication/index.html
+++ b/zh-cn/security/authentication/index.html
@@ -23,12 +23,11 @@
 <p>Android 采用通过用户身份验证把关的加密密钥的概念,该概念需要以下组件:</p>
 
 <ul>
-<li><strong>加密密钥存储和服务提供程序</strong>。存储加密密钥并基于这些密钥提供标准加密例程。
-Android 支持<a href="/security/keystore/index.html">由硬件支持的 Keystore</a> 和 Keymaster 这两种加密服务,其中包括由硬件支持的密钥存储加密服务,该服务可能包括可信执行环境 (TEE)。</li>
-<li><strong>用户身份验证程序</strong>。证明相应用户存在并/或已成功通过身份验证。Android 支持 <a href="gatekeeper.html">Gatekeeper</a>(用于 PIN 码/解锁图案/密码身份验证)和 <a href="fingerprint-hal.html">Fingerprint</a>(用于指纹身份验证)。这两个组件通过已经过身份验证的渠道与 Keystore 服务沟通身份验证状态。(Keystore 服务还支持框架级 <a href="https://developer.android.com/training/articles/keystore.html" class="external">Android Keystore 系统</a>。)</li>
+<li><strong>加密密钥存储和服务提供程序</strong>。存储加密密钥并基于这些密钥提供标准加密例程。Android 支持<a href="/security/keystore/index.html">由硬件支持的 Keystore</a> 和 Keymaster 这两种加密服务,其中包括由硬件支持的密钥存储加密服务,该服务可能包括可信执行环境 (TEE) 或安全元件 (SE),例如 Strongbox。</li>
+<li><strong>用户身份验证程序</strong>。证明相应用户存在并/或已成功通过身份验证。Android 支持 <a href="gatekeeper.html">Gatekeeper</a>(用于 PIN 码/解锁图案/密码身份验证)和 <a href="fingerprint-hal.html">Fingerprint</a>(用于指纹身份验证)。搭载 Android 9 及更高版本的设备可以使用 <a href="https://developer.android.com/reference/android/hardware/biometrics/BiometricPrompt" class="external">BiometricPrompt</a> 作为指纹和其他生物识别技术的单一集成点。这些组件通过已经过身份验证的渠道与 Keystore 服务沟通身份验证状态。(Keystore 服务还支持框架级 <a href="https://developer.android.com/training/articles/keystore.html" class="external">Android Keystore 系统</a>。)</li>
 </ul>
 
-<p>Gatekeeper 和 Fingerprint 组件能够与 Keystore 及其他组件协同运作,以支持使用由硬件支持的<a href="#authtoken_format">身份验证令牌</a> (AuthToken)。</p>
+<p>Gatekeeper、Fingerprint 和 Biometric 组件能够与 Keystore 及其他组件协同运作,以支持使用由硬件支持的<a href="#authtoken_format">身份验证令牌</a> (AuthToken)。</p>
 
 <h2 id="enrollment">注册</h2>
 
@@ -43,20 +42,25 @@
 
 <p>用户设置凭据并收到用户 SID 后,便可以开始进行身份验证,身份验证从用户提供 PIN 码、解锁图案、密码或指纹开始。所有 TEE 组件都共用一个密钥来验证对方的消息。</p>
 
-<img src="../images/authentication-flow.png" alt="身份验证流程" id="figure1"/>
+<img src="../images/authentication-flow.png" alt="身份验证流程" id="Authentication flow"/>
 <figcaption><strong>图 1.</strong> 身份验证流程。</figcaption>
 
 <ol>
-  <li>用户提供 PIN 码、解锁图案、密码或指纹。<code>LockSettingsService</code> 或 <code>FingerprintService</code> 通过 Binder 向相应的守护进程(<code>gatekeeperd</code> 或 <code>fingerprintd</code>)发出请求。指纹身份验证在指纹请求发出后异步进行。</li>
+  <li>用户提供身份验证方法,然后关联的服务向关联的守护进程发出请求。
+    <ul>
+      <li>对于 PIN 码、解锁图案或密码,<code>LockSettingsService</code> 会向 <code>gatekeeperd</code> 发出请求。</li>
+      <li>基于生物识别技术的身份验证流程取决于 Android 版本。在搭载 Android 8.x 及更低版本的设备上,<code>FingerprintService</code> 会向 <code>fingerprintd</code> 发出请求。在搭载 Android 9 及更高版本的设备上,<code>BiometricPrompt</code> 会使用合适的 <code><var>Biometric</var>Manager</code> 类(如 <code>FingerprintManager</code> 或 <code>FaceManager</code>)向相应的生物识别守护进程发出请求(例如,若是指纹身份验证,则向 <code>fingerprintd</code> 发出请求;若是人脸身份验证,则向 <code>faced</code> 发出请求)。无论什么版本,生物识别身份验证都会在请求发出后异步进行。</li>
+    </ul>
+  </li>
   <li>守护进程将数据发至其副本,后者生成 AuthToken:
     <ul>
     <li>对于 PIN 码/解锁图案/密码身份验证,<code>gatekeeperd</code> 将 PIN 码、解锁图案或密码哈希发送到 TEE 中的 Gatekeeper。如果 TEE 中的身份验证成功,TEE 中的 Gatekeeper 会将包含相应用户 SID(已使用 AuthToken HMAC 密钥签名)的 AuthToken 发送到它在 Android 操作系统中的副本。
     </li><li>对于指纹身份验证,<code>fingerprintd</code> 会监听指纹事件并将数据发送到 TEE 中的 Fingerprint。如果 TEE 中的身份验证成功,TEE 中的 Fingerprint 会将 AuthToken(已使用 AuthToken HMAC 密钥签名)发送到它在 Android 操作系统中的副本。</li>
+    <li>对于其他生物识别身份验证,相应的生物识别守护进程会监听生物识别事件,并将其发送到相应的生物识别 TEE 组件。</li>
   </ul>
   </li>
-  <li>守护进程收到经过签名的 AuthToken,并通过 Keystore 服务 Binder 接口的扩展程序将 AuthToken 传递给 Keystore 服务。
-(<code>gatekeeperd</code> 还会在设备被重新锁定以及设备密码发生变化时通知 Keystore 服务。)
-  </li><li>Keystore 服务将 AuthToken 传递给 Keymaster,以便使用与 Gatekeeper 和 Fingerprint Trustlet 共用的密钥验证 AuthToken。Keymaster 会将令牌中的时间戳视为最后一次身份验证的时间,并根据该时间戳做出密钥发布决定(以允许应用使用相应密钥)。</li>
+  <li>守护进程收到经过签名的 AuthToken,并通过 Keystore 服务 Binder 接口的扩展程序将 AuthToken 传递给 Keystore 服务。(<code>gatekeeperd</code> 还会在设备被重新锁定以及设备密码发生变化时通知 Keystore 服务。)
+  </li><li>Keystore 服务将 AuthToken 传递给 Keymaster,并使用与 Gatekeeper 和支持的生物识别 TEE 组件共用的密钥来验证这些 AuthToken。Keymaster 会将令牌中的时间戳视为最后一次身份验证的时间,并根据该时间戳做出密钥发布决定(以允许应用使用相应密钥)。</li>
 </ol>
 
 <aside class="note"><strong>注意</strong>:设备重新启动后,AuthToken 即作废。</aside>
@@ -123,11 +127,11 @@
 
 <h2 id="device_boot_flow">设备启动流程</h2>
 
-<p>每次设备启动时,都必须生成 AuthToken HMAC 密钥并由所有 TEE 组件(Gatekeeper、Fingerprint 和 Keymaster)共用该密钥。因此,为了加强对重播攻击的防范力度,每次设备重新启动时都必须随机生成 HMAC 密钥。</p>
+<p>每次设备启动时,都必须生成 AuthToken HMAC 密钥并由所有 TEE 组件(Gatekeeper、Keymaster 以及支持的生物识别 Trustlet)共用该密钥。因此,为了加强对重播攻击的防范力度,每次设备重新启动时都必须随机生成 HMAC 密钥。</p>
 
 <p>关于与所有组件共用此 HMAC 密钥的协议是一项依赖于平台的实现功能。<strong>在任何情况下都不能</strong>将该密钥设为在 TEE 之外可用。如果 TEE 操作系统缺少内部进程间通信 (IPC) 机制,需要通过不可信操作系统传输数据,那么传输操作必须通过安全的密钥交换协议进行。</p>
 
-<p>与 Android 并排运行的 <a href="/security/trusty/index.html">Trusty</a> 操作系统就是一种 TEE,不过也可以使用其他 TEE。Trusty 使用内部 IPC 机制在 Keymaster 和 Fingerprint 或 Gatekeeper 之间直接进行通信。HMAC 密钥只保存在 Keymaster 中,Fingerprint 和 Gatekeeper 会在每次使用时向 Keymaster 请求该密钥,而不会保留或缓存该密钥的值。</p>
+<p>与 Android 并排运行的 <a href="/security/trusty/index.html">Trusty</a> 操作系统就是一种 TEE,不过也可以使用其他 TEE。Trusty 使用内部 IPC 机制在 Keymaster 和 Gatekeeper 或相应的生物识别 Trustlet 之间直接进行通信。HMAC 密钥只保存在 Keymaster 中,Fingerprint 和 Gatekeeper 会在每次使用时向 Keymaster 请求该密钥,而不会保留或缓存该密钥的值。</p>
 
 <p>由于一些 TEE 缺少 IPC 基础架构,因此 TEE 中的小程序之间不会进行通信。这还使得 Keystore 服务因知晓系统中的身份验证表而能够快速拒绝注定会失败的请求,从而避免向 TEE 发送可能会占用大量资源的 IPC。</p>
 
diff --git a/zh-cn/security/biometric/index.html b/zh-cn/security/biometric/index.html
index f2dffe3..3f5952b 100644
--- a/zh-cn/security/biometric/index.html
+++ b/zh-cn/security/biometric/index.html
@@ -1,17 +1,17 @@
 <html devsite><head>
-    <title>测量生物识别解锁模式的安全性</title>
+    <title>生物识别</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
   <body>
   <!--
-      Copyright 2017 The Android Open Source Project
+      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
+          //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,
@@ -19,203 +19,56 @@
       See the License for the specific language governing permissions and
       limitations under the License.
   -->
-
 <p>
-如今,基于生物识别的解锁模式几乎仅通过错误接受率 (FAR) 指标(即模型错误地接受随机选择的有误输入的概率)进行评估。<em></em>虽然它是很有用的测量指标,但它无法提供足够信息来评估模型抵御针对性攻击的效果。
+Android 9 及更高版本包含一个 <a href="https://developer.android.com/reference/android/hardware/biometrics/BiometricPrompt" class="external">BiometricPrompt API</a>,应用开发者可以使用该 API 采用与设备和模态无关的方式将生物识别身份验证集成到其应用中。只有极为安全的生物识别技术才能与 <code>BiometricPrompt</code> 集成。如需了解详情,请参阅<a href="/security/biometric/measure#strong-weak-unlocks">衡量生物识别解锁模式的安全性</a>。
 </p>
 
-<h2 id="metrics">指标</h2>
-
+<h2 id="source">源代码</h2>
 <p>
-Android 8.1 引入了两项与生物识别解锁相关的新指标,旨在帮助设备制造商更准确地评估设备安全性:
+Android 9 仅包含适用于 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/hardware/biometrics" class="external">BiometricPrompt</a> 的指纹集成。但是,我们即将提供对其他生物识别模态的集成支持。
+</p>
+<p>
+在 Android 9 及更高版本中,<a href="https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager" class="external">FingerprintManager</a> API 已被弃用。如果您的捆绑式应用和系统应用使用此 API,请更新这些应用以改用 <code>BiometricPrompt</code>。
 </p>
 
-<ul>
-<li><em></em>冒名接受率 (IAR):生物识别模型接受意图模仿已知良好样本输入的概率。例如,在 <a href="https://support.google.com/nexus/answer/6093922">Smart Lock</a> 可信声音(语音解锁)机制中,该指标将测量攻击者尝试模仿用户声音(使用相似的音调、口音等)成功解锁设备的概率。我们将此类攻击称为“冒名攻击”。<em></em></li>
-<li><em></em>欺骗接受率 (SAR)<strong>:</strong>生物识别模型接受事先录制的已知良好样本的概率。例如,对于语音解锁,该指标会测量使用已录制的用户语音样本“Ok, Google”成功解锁用户手机的概率。我们将此类攻击称为“欺骗攻击”<strong>。</strong><em></em></li>
-</ul>
-
+<h2 id="implementation">实现</h2>
 <p>
-其中,IAR 测量并非对所有生物识别模式都有用。下面以指纹为例。攻击者可创建用户指纹的模具,并试图使用此模具绕过指纹传感器,此行为被视为欺骗攻击。但是,没有一种方法可成功模仿用户的指纹,所以没有关于指纹传感器冒名攻击的明确概念。
+为确保用户和开发者获享无缝的生物识别体验,请将生物识别堆栈与 <code>BiometricPrompt</code> 集成。为任何模态(包括面部、指纹和虹膜)启用 <code>BiometricPrompt</code> API 的设备必须符合这些<a href="/security/biometric/measure#strong-weak-unlocks">安全程度要求</a>。如果它们不符合这些安全程度要求,就无法实现此 API。
+</p>
+<p>
+要将生物识别堆栈与 <code>BiometricPrompt</code> 集成,请执行以下操作:
+</p>
+<ol>
+  <li>在 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/hardware/biometrics/BiometricPrompt.java" class="external">/frameworks/base/core/java/android/hardware/biometrics/BiometricPrompt.java</a></code> 中添加一个 <code><var>Biometric</var>Manager</code> 类的实例</li>
+  <li>确保您的实例与 <code>BiometricPrompt</code> 提供的 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/hardware/biometrics/BiometricPrompt.java#467" class="external">authenticate()</a></code> 方法挂钩。</li>
+  <li>更新框架以为添加的生物识别技术采用 <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager#KEYGUARD_DISABLE_FACE" class="external"><code>KEYGUARD_DISABLE_*</code></a> 标记。</li>
+</ol>
+<figure>
+  <img src="/security/images/biometricprompt-architecture.png" alt="BiometricPrompt 架构"/>
+  <figcaption>
+    <strong>图 1</strong>. <code>BiometricPrompt</code> 架构。</figcaption>
+</figure>
+
+<h2 id="hal-implementation">HAL 实现指南</h2>
+<p>
+遵循以下生物识别 HAL 准则,以确保生物识别数据<strong>不会泄露</strong>,并会随用户从设备中移除时一并<strong>移除</strong>:
+</p>
+<ol>
+ <li>确保在任何情况下都无法从传感器驱动程序或安全隔离环境(例如 TEE 或安全元件)以外访问原始生物识别数据或衍生内容(例如模板)。</li>
+ <li>如果硬件支持,则限制硬件对安全隔离环境的访问权限,并使用 SELinux 政策对其进行保护。使用针对所有设备文件的明确 SELinux 政策,确保信道(例如 SPI、I2C 等)只能供安全隔离环境访问。</li>
+ <li>为防止意外数据泄露,攻击免疫、指纹采集、注册和识别必须在安全隔离环境内部进行。</li>
+ <li>仅在文件系统上存储加密形式的生物识别数据或衍生内容(即使文件系统本身已加密)。</li>
+ <li>要防范重播攻击,请使用设备专用私钥对生物识别模板进行签名。对于高级加密标准 (AES),模板必须至少通过绝对文件系统路径、群组和生物识别 ID 进行签名,这样一来,相应模板文件便无法在其他设备上使用,并且无法用于在同一设备上注册的任何其他用户。例如,您将无法复制同一设备上其他用户的生物识别数据,也无法从其他设备复制生物识别数据。</li>
+ <li>使用 <code>set_active_group()</code> 函数提供的文件系统路径,或提供另一种能够在移除用户时一并清空所有用户模板数据的方法。强烈建议将生物识别模板文件以加密形式存储在提供的路径中。如果因安全隔离环境的存储要求导致这种做法不可行,请添加一些钩子,以确保在移除用户或清空设备数据时一并移除相关数据。</li>
+</ol>
+
+<h2 id="customization">自定义</h2>
+<p>
+如果您的设备支持多种生物识别技术,您可以指定默认值。但是,您必须允许用户在“设置”中更改其首选生物识别技术。
 </p>
 
+<h2 id="validation">验证</h2>
 <p>
-但是,SAR 适用于所有生物识别模式。
-</p>
-
-<h3 id="example-attacks">攻击示例</h3>
-
-<p>
-下表列出了针对四种模式的冒名攻击和欺骗攻击示例。
-</p>
-
-<table>
-  <tbody><tr>
-   <th>模式</th>
-   <th>冒名攻击</th>
-   <th>欺骗攻击</th>
-  </tr>
-  <tr>
-   <td>指纹
-   </td>
-   <td>不适用
-   </td>
-   <td>指纹 + 指纹模具
-   </td>
-  </tr>
-  <tr>
-   <td>脸部
-   </td>
-   <td>试图看上去像是用户的脸部
-   </td>
-   <td>高分辨率照片、乳胶(或其他高质量)面罩
-   </td>
-  </tr>
-  <tr>
-   <td>语音
-   </td>
-   <td>试图听起来像是用户的声音
-   </td>
-   <td>录音
-   </td>
-  </tr>
-  <tr>
-   <td>虹膜
-   </td>
-   <td>不适用
-   </td>
-   <td>高分辨率照片 + 隐形眼镜
-   </td>
-  </tr>
-</tbody></table>
-
-<p>
-<strong>表格 1. 攻击示例</strong>
-</p>
-
-<p>
-要了解有关测量不同生物识别模式 SAR 和 IAR 的方法的建议和更多详情,请参阅<a href="#test-methods">测试方法</a>。
-</p>
-
-<h3 id="strong-weak-unlocks">安全系数高与低的解锁模式</h3>
-
-<p>
-同时考虑三个接受率(FAR、IAR 和 SAR)的解锁模式被视为安全系数高的解锁模式。在不存在冒名攻击的情况下,我们只考虑 FAR 和 SAR。
-</p>
-
-<p>
-要了解安全系数低的解锁模式的应对措施,请参阅 <a href="https://source.android.com/compatibility/android-cdd">Android 兼容性定义文档</a> (CDD)<strong>。</strong>
-</p>
-
-<h2 id="test-methods">测试方法</h2>
-
-<p>
-我们将在此部分介绍有关测量生物识别解锁模式 SAR 和 IAR 的测试设置的注意事项,并提供关于这些测试设置的建议。有关这些指标的含义及其作用的更多信息,请参阅<a href="#metrics">指标</a>。
-</p>
-
-<h3 id="common-considerations">常见注意事项</h3>
-
-<p>
-尽管不同模式需要不同的测试设置,但有一些常见的注意事项适用于所有这些模式。
-</p>
-
-<h4 id="test-hw">测试实际硬件</h4>
-
-<p>
-如果生物识别模型是在理想条件下测试的,并且测试硬件与实际所用的移动设备不同,则采集的 SAR/IAR 指标可能会不准确。例如,使用多个麦克风在无回音室中校准的语音解锁模型,当在嘈杂环境中使用单个麦克风时,行为会明显不同。为了获得准确的指标值,应在安装了相关硬件的实际设备上进行测试,或至少使用相同硬件并以其在设备上的实际应用方式进行测试。
-</p>
-
-<h4 id="known-attacks">使用已知的攻击</h4>
-
-<p>
-目前采用的大多数生物识别模式都被成功欺骗过,并且相应的攻击方法也已公开。下面简要介绍出现已知攻击的模式对应的测试设置。建议尽可能使用此处列出的设置。
-</p>
-
-<h4 id="anticipate-attacks">预测新的攻击</h4>
-
-<p>
-对于进行了新的重大改进的模式,测试设置文档可能不包含合适的设置,并且可能不存在已知的公开攻击。在发现新攻击后,现有模式还可能需要调整测试设置。在这两种情况下,您都需要配置合理的测试设置。请使用此页面底部的<a href="https://issuetracker.google.com/issues/new?component=191476">网站反馈</a>链接告诉我们您是否已设置可添加的合理机制。
-</p>
-
-<h3 id="setups-for-different-modalities">针对不同模式的设置</h3>
-
-<h4 id="fingerprint">指纹</h4>
-
-<table>
-  <tbody><tr>
-   <td><strong>IAR</strong>
-   </td>
-   <td>不需要。
-   </td>
-  </tr>
-  <tr>
-   <td><strong>SAR</strong>
-   </td>
-   <td>
-   <ul>
-<li>使用目标指纹的模具创建虚假指纹。</li>
-<li>测量结果的精确度与指纹模具的质量密切相关。牙科中使用的硅是一个不错的选择。</li>
-<li>测试设置应测量通过模具创建的虚假指纹成功解锁设备的概率。</li>
-   </ul>
-   </td>
-  </tr>
-</tbody></table>
-
-<h4 id="face-and-iris">脸部和虹膜</h4>
-
-<table>
-  <tbody><tr>
-   <td><strong>IAR</strong>
-   </td>
-   <td>下限将由 SAR 捕获,因此不需要单独测量该指标。
-   </td>
-  </tr>
-  <tr>
-   <td><strong>SAR</strong>
-   </td>
-   <td>
-   <ul>
-<li>使用目标的脸部照片进行测试。对于虹膜,需要放大脸部以模仿用户使用该功能的常规距离。</li>
-<li>照片应具有高分辨率,否则会产生误导性结果。</li>
-<li>照片的展现方式不应使其被识别出是图片。例如:
- <ul>
- <li>图片边界不应包含在内</li>
- <li>如果照片显示在手机上,则手机屏幕/边框不应可见</li>
- <li>如果有人拿着照片,手部不应可见</li>
- </ul>
- </li>
-<li>对于直角来说,照片应填满传感器,使其他物体不可见。</li>
-<li>当样本(脸部/虹膜/照片)与相机呈锐角时(模仿用户将手机握在正前方并朝向脸部的用例),脸部和虹膜模型的宽容度通常更高。以该角度进行测试有助于确定您的模型是否易受欺骗。</li>
-<li>测试设置应测量通过脸部或虹膜图片成功解锁设备的概率。</li>
-</ul>
-
- </td>
- </tr>
-</tbody></table>
-
-<h4 id="voice">语音</h4>
-
-<table>
-  <tbody><tr>
-   <td><strong>IAR</strong>
-   </td>
-   <td>
-   <ul>
-<li>通过参与者听到阳性样本后尝试模仿样本的方式进行测试。</li>
-<li>由不同性别、不同口音的参与者进行模型测试,以确保考虑某些语调/口音具有更高 FAR 的极端情况。</li>
-</ul>
- </td>
- </tr>
- <tr>
-  <td><strong>SAR</strong>
-  </td>
-  <td>
-  <ul>
-<li>用目标声音的录音进行测试。</li>
-<li>录音必须质量较高,否则会产生误导性结果。</li>
-</ul>
- </td>
- </tr>
-</tbody></table>
+Android 9 更新了 <code>FingerprintManager</code> CTS 验证程序测试,以通过 <code><a href="https://android.googlesource.com/platform/cts/+/master/apps/CtsVerifier/src/com/android/cts/verifier/security/BiometricPromptBoundKeysTest.java">BiometricPromptBoundKeysTest</a></code> 测试 <code>BiometricPrompt</code>。对于其他生物识别技术,还没有正式的 CTS 或 CTS 验证程序测试。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/biometric/measure.html b/zh-cn/security/biometric/measure.html
new file mode 100644
index 0000000..9ea5666
--- /dev/null
+++ b/zh-cn/security/biometric/measure.html
@@ -0,0 +1,221 @@
+<html devsite><head>
+    <title>测量生物识别解锁模式的安全性</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>
+如今,基于生物识别的解锁模式几乎仅通过错误接受率 (FAR) 指标(即模型错误地接受随机选择的有误输入的概率)进行评估。<em></em>虽然它是很有用的测量指标,但它无法提供足够信息来评估模型抵御针对性攻击的效果。
+</p>
+
+<h2 id="metrics">指标</h2>
+
+<p>
+Android 8.1 引入了两项与生物识别解锁相关的新指标,旨在帮助设备制造商更准确地评估设备安全性:
+</p>
+
+<ul>
+<li><em></em>冒名接受率 (IAR):生物识别模型接受意图模仿已知良好样本输入的概率。例如,在 <a href="https://support.google.com/nexus/answer/6093922" class="external">Smart Lock</a> 可信声音(语音解锁)机制中,该指标将测量攻击者尝试模仿用户声音(使用相似的音调、口音等)成功解锁设备的概率。我们将此类攻击称为“冒名攻击”。<em></em></li>
+<li><em></em>欺骗接受率 (SAR)<strong></strong>:生物识别模型接受事先录制的已知良好样本的概率。例如,对于语音解锁,该指标会测量使用已录制的用户语音样本“Ok, Google”成功解锁用户手机的概率。我们将此类攻击称为“欺骗攻击”<em>。</em><strong></strong></li>
+</ul>
+
+<p>
+其中,IAR 测量并非对所有生物识别模式都有用。下面以指纹为例。攻击者可创建用户指纹的模具,并试图使用此模具绕过指纹传感器,此行为被视为欺骗攻击。但是,没有一种方法可成功模仿用户的指纹,所以没有关于指纹传感器冒名攻击的明确概念。
+</p>
+
+<p>
+但是,SAR 适用于所有生物识别模式。
+</p>
+
+<h3 id="example-attacks">攻击示例</h3>
+
+<p>
+下表列出了针对四种模式的冒名攻击和欺骗攻击示例。
+</p>
+
+<table>
+  <tbody><tr>
+   <th>模式</th>
+   <th>冒名攻击</th>
+   <th>欺骗攻击</th>
+  </tr>
+  <tr>
+   <td>指纹
+   </td>
+   <td>不适用
+   </td>
+   <td>指纹 + 指纹模具
+   </td>
+  </tr>
+  <tr>
+   <td>脸部
+   </td>
+   <td>试图看上去像是用户的脸部
+   </td>
+   <td>高分辨率照片、乳胶(或其他高质量)面罩
+   </td>
+  </tr>
+  <tr>
+   <td>语音
+   </td>
+   <td>试图听起来像是用户的声音
+   </td>
+   <td>录音
+   </td>
+  </tr>
+  <tr>
+   <td>虹膜
+   </td>
+   <td>不适用
+   </td>
+   <td>高分辨率照片 + 隐形眼镜
+   </td>
+  </tr>
+</tbody></table>
+
+<p>
+<strong>表格 1. 攻击示例</strong>
+</p>
+
+<p>
+要了解有关测量不同生物识别模式 SAR 和 IAR 的方法的建议和更多详情,请参阅<a href="#test-methods">测试方法</a>。
+</p>
+
+<h3 id="strong-weak-unlocks">安全系数高与低的解锁模式</h3>
+
+<p>
+同时考虑三个接受率(FAR、IAR 和 SAR)的解锁模式被视为安全系数高的解锁模式。在不存在冒名攻击的情况下,我们只考虑 FAR 和 SAR。
+</p>
+
+<p>
+要了解安全系数低的解锁模式的应对措施,请参阅 <a href="/compatibility/android-cdd">Android 兼容性定义文档</a> (CDD)。
+</p>
+
+<h2 id="test-methods">测试方法</h2>
+
+<p>
+我们将在此部分介绍有关测量生物识别解锁模式 SAR 和 IAR 的测试设置的注意事项,并提供关于这些测试设置的建议。有关这些指标的含义及其作用的更多信息,请参阅<a href="#metrics">指标</a>。
+</p>
+
+<h3 id="common-considerations">常见注意事项</h3>
+
+<p>
+尽管不同模式需要不同的测试设置,但有一些常见的注意事项适用于所有这些模式。
+</p>
+
+<h4 id="test-hw">测试实际硬件</h4>
+
+<p>
+如果生物识别模型是在理想条件下测试的,并且测试硬件与实际所用的移动设备不同,则采集的 SAR/IAR 指标可能会不准确。例如,使用多个麦克风在无回音室中校准的语音解锁模型,当在嘈杂环境中使用单个麦克风时,行为会明显不同。为了获得准确的指标值,应在安装了相关硬件的实际设备上进行测试,或至少使用相同硬件并以其在设备上的实际应用方式进行测试。
+</p>
+
+<h4 id="known-attacks">使用已知的攻击</h4>
+
+<p>
+目前采用的大多数生物识别模式都被成功欺骗过,并且相应的攻击方法也已公开。下面简要介绍出现已知攻击的模式对应的测试设置。建议尽可能使用此处列出的设置。
+</p>
+
+<h4 id="anticipate-attacks">预测新的攻击</h4>
+
+<p>
+对于进行了新的重大改进的模式,测试设置文档可能不包含合适的设置,并且可能不存在已知的公开攻击。在发现新攻击后,现有模式还可能需要调整测试设置。在这两种情况下,您都需要配置合理的测试设置。请使用此页面底部的<a href="https://issuetracker.google.com/issues/new?component=191476" class="external">网站反馈</a>链接告诉我们您是否已设置可添加的合理机制。
+</p>
+
+<h3 id="setups-for-different-modalities">针对不同模式的设置</h3>
+
+<h4 id="fingerprint">指纹</h4>
+
+<table>
+  <tbody><tr>
+   <td><strong>IAR</strong>
+   </td>
+   <td>不需要。
+   </td>
+  </tr>
+  <tr>
+   <td><strong>SAR</strong>
+   </td>
+   <td>
+   <ul>
+<li>使用目标指纹的模具创建虚假指纹。</li>
+<li>测量结果的精确度与指纹模具的质量密切相关。牙科中使用的硅是一个不错的选择。</li>
+<li>测试设置应测量通过模具创建的虚假指纹成功解锁设备的概率。</li>
+   </ul>
+   </td>
+  </tr>
+</tbody></table>
+
+<h4 id="face-and-iris">脸部和虹膜</h4>
+
+<table>
+  <tbody><tr>
+   <td><strong>IAR</strong>
+   </td>
+   <td>下限将由 SAR 捕获,因此不需要单独测量该指标。
+   </td>
+  </tr>
+  <tr>
+   <td><strong>SAR</strong>
+   </td>
+   <td>
+   <ul>
+<li>使用目标的脸部照片进行测试。对于虹膜,需要放大脸部以模仿用户使用该功能的常规距离。</li>
+<li>照片应具有高分辨率,否则会产生误导性结果。</li>
+<li>照片的展现方式不应使其被识别出是图片。例如:
+ <ul>
+ <li>图片边界不应包含在内</li>
+ <li>如果照片显示在手机上,则手机屏幕/边框不应可见</li>
+ <li>如果有人拿着照片,手部不应可见</li>
+ </ul>
+ </li>
+<li>对于直角来说,照片应填满传感器,使其他物体不可见。</li>
+<li>当样本(脸部/虹膜/照片)与相机呈锐角时(模仿用户将手机握在正前方并朝向脸部的用例),脸部和虹膜模型的宽容度通常更高。以该角度进行测试有助于确定您的模型是否易受欺骗。</li>
+<li>测试设置应测量通过脸部或虹膜图片成功解锁设备的概率。</li>
+</ul>
+
+ </td>
+ </tr>
+</tbody></table>
+
+<h4 id="voice">语音</h4>
+
+<table>
+  <tbody><tr>
+   <td><strong>IAR</strong>
+   </td>
+   <td>
+   <ul>
+<li>通过参与者听到阳性样本后尝试模仿样本的方式进行测试。</li>
+<li>由不同性别、不同口音的参与者进行模型测试,以确保考虑某些语调/口音具有更高 FAR 的极端情况。</li>
+</ul>
+ </td>
+ </tr>
+ <tr>
+  <td><strong>SAR</strong>
+  </td>
+  <td>
+  <ul>
+<li>用目标声音的录音进行测试。</li>
+<li>录音必须质量较高,否则会产生误导性结果。</li>
+</ul>
+ </td>
+ </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/2018-07-01.html b/zh-cn/security/bulletin/2018-07-01.html
index 35757d6..89de033 100644
--- a/zh-cn/security/bulletin/2018-07-01.html
+++ b/zh-cn/security/bulletin/2018-07-01.html
@@ -25,7 +25,8 @@
 本 Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。安全补丁程序级别为 2018-07-05 或更新的 Android 系统都已解决本公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。
 </p>
 <p>
-Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中,并在本公告中提供了相应链接。本公告中还提供了指向 AOSP 之外的补丁程序的链接。</p>
+Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中,并在本公告中提供了相应链接。本公告中还提供了指向 AOSP 之外的补丁程序的链接。
+</p>
 <p>
 这些问题中危险性最高的是媒体框架中的一个严重程度为“严重”的安全漏洞,该漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响的设备造成的影响(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。
 </p>
diff --git a/zh-cn/security/bulletin/2018-09-01.html b/zh-cn/security/bulletin/2018-09-01.html
index 813a2c5..3d1e7cd 100644
--- a/zh-cn/security/bulletin/2018-09-01.html
+++ b/zh-cn/security/bulletin/2018-09-01.html
@@ -77,7 +77,7 @@
    <td><a href="https://android.googlesource.com/platform/libcore/+/518e8d27de9f32eb86bc3090ee2759ea93b9fb93" class="external">A-110955991</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -102,21 +102,21 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/623b2b604c4ffcd48f137379d6934537510665bf" class="external">A-109824443</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9470</td>
    <td><a href="https://android.googlesource.com/platform/external/neven/+/86a561f79f97baa38e240f6296fe1192fa4a5c9c" class="external">A-78290481</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9471</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/eabaff1c7f02906e568997bdd7dc43006655387e" class="external">A-77599679</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -166,14 +166,14 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/586b9102f322731d604e6280143e16cb6f1c9f76" class="external">A-77600398</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9440</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/8033f4a227e03f97a0f1d9975dc24bcb4ca61f74" class="external">A-77823362</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/2870acaa4c58cf59758a74b6390615a421f14268" class="external">2</a>]</td>
    <td>DoS</td>
    <td>中</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -198,21 +198,21 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/43cd528a444d0cc5bbf3beb22cd583289bcf7334" class="external">A-79266386</a></td>
    <td>EoP</td>
    <td>严重</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9478</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217522</a></td>
    <td>EoP</td>
    <td>严重</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9479</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217770</a></td>
    <td>EoP</td>
    <td>严重</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9456</td>
@@ -233,63 +233,63 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757168</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9481</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757435</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9482</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757986</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9483</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d3689fb0ddcdede16c13250a7a30ca76b113c9c1" class="external">A-110216173</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9484</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d5b44f6522c3294d6f5fd71bc6670f625f716460" class="external">A-79488381</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9485</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bdbabb2ca4ebb4dc5971d3d42cb12f8048e23a23" class="external">A-80261585</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9486</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bc6aef4f29387d07e0c638c9db810c6c1193f75b" class="external">A-80493272</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9487</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/cf6784bfbf713aaa54d8da77e9481b3f02784246" class="external">A-69873852</a></td>
    <td>DoS</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9488</td>
    <td><a href="https://android.googlesource.com/platform/system/sepolicy/+/d4e094e2b1a47c1fea1799d9fade19e953a7ca1b" class="external">A-110107376</a></td>
    <td>EoP</td>
    <td>中</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -314,18 +314,18 @@
    <td><a href="https://android.googlesource.com/platform/system/libhidl/+/93484b9b015d47c0f7e5f4449a214b2fed8bed4f" class="external">A-79376389</a></td>
    <td>RCE</td>
    <td>严重</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9427</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/29d991fac25b261a72ce73f96c9df594ea5b9242" class="external">A-77486542</a></td>
    <td>RCE</td>
    <td>严重</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
-<h2 id="2018-09-05-details">2018-09-05 安全补丁程序级别 - 漏洞详情</h2>
+<h2 id="2018-09-05-details">2018-09-05 安全补丁程序级别漏洞详情</h2>
 <p>
 我们在下面提供了 2018-09-05 补丁程序级别涵盖的每个安全漏洞的详细信息。漏洞列在所影响的组件下,内容包括 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>、组件(如果适用)和已更新的 AOSP 版本(如果适用)等详细信息。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
 </p>
diff --git a/zh-cn/security/bulletin/2018-10-01.html b/zh-cn/security/bulletin/2018-10-01.html
new file mode 100644
index 0000000..0f97e60
--- /dev/null
+++ b/zh-cn/security/bulletin/2018-10-01.html
@@ -0,0 +1,446 @@
+<html devsite><head>
+    <title>Android 安全公告 - 2018 年 10 月</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>发布时间:2018 年 10 月 1 日 | 更新时间:2018 年 10 月 1 日</em></p>
+
+<p>
+本 Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。安全补丁程序级别为 2018-10-05 或更新的 Android 系统都已解决本公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705" class="external">查看并更新 Android 版本</a>。
+</p>
+<p>
+Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中,并在本公告中提供了相应链接。本公告中还提供了指向 AOSP 之外的补丁程序的链接。</p>
+<p>
+这些问题中危险性最高的是框架中严重程度为“严重”的安全漏洞。这样的漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响的设备造成的影响(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。
+</p>
+<p>
+尚未有人向我们举报过有用户主动利用或滥用这些新报告的问题。请参阅 <a href="#mitigations">Android 和 Google Play 保护机制提供的缓解措施</a>部分,详细了解有助于提高 Android 平台安全性的 <a href="/security/enhancements/">Android 安全平台防护功能</a>和 Google Play 保护机制。
+</p>
+<p class="note">
+<strong>注意</strong>:如需了解适用于 Google 设备的最新无线下载更新 (OTA) 和固件映像,请参阅 <a href="/security/bulletin/pixel/2018-10-01">2018 年 10 月的 Pixel / Nexus 安全公告</a>。
+</p>
+
+<h2 id="mitigations">Android 和 Google 服务缓解措施</h2>
+<p>
+这一部分总结了 <a href="/security/enhancements/">Android 安全平台</a>和服务防护功能(如 <a href="https://www.android.com/play-protect" class="external">Google Play 保护机制</a>)提供的缓解措施。这些功能有助于降低 Android 上的安全漏洞被成功利用的可能性。
+</p>
+<ul>
+<li>较高版本的 Android 平台中提供的增强功能让攻击者更加难以利用 Android 上存在的许多问题。我们建议所有用户都尽可能更新到最新版 Android。</li>
+<li>Android 安全团队会积极利用 <a href="https://www.android.com/play-protect" class="external">Google Play 保护机制</a>监控滥用行为,并会在发现<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用</a>时向用户发出警告。在安装有 <a href="http://www.android.com/gms" class="external">Google 移动服务</a>的设备上,Google Play 保护机制会默认处于启用状态,对于从 Google Play 以外的来源安装应用的用户来说,该功能尤为重要。</li>
+</ul>
+<h2 id="2018-10-01-details">2018-10-01 安全补丁程序级别漏洞详情</h2>
+<p>
+我们在下面提供了 2018-10-01 补丁程序级别涵盖的每个安全漏洞的详细信息。漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 AOSP 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+</p>
+
+<h3 id="framework">框架</h3>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参考内容</th>
+    <th>类型</th>
+    <th>严重程度</th>
+    <th>已更新的 AOSP 版本</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9490</td>
+   <td><a href="https://android.googlesource.com/platform/external/chromium-libpac/+/948d4753664cc4e6b33cc3de634ac8fd5f781382">A-111274046</a>
+      [<a href="https://android.googlesource.com/platform/external/v8/+/a24543157ae2cdd25da43e20f4e48a07481e6ceb">2</a>]</td>
+   <td>EoP</td>
+   <td>严重</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9491</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/2b4667baa5a2badbdfec1794156ee17d4afef37c">A-111603051</a></td>
+   <td>RCE</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9492</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/962fb40991f15be4f688d960aa00073683ebdd20">A-111934948</a></td>
+   <td>EoP</td>
+   <td>高</td>
+   <td>8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9493</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/462aaeaa616e0bb1342e8ef7b472acc0cbc93deb">A-111085900</a>
+      [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/e7364907439578ce5334bce20bb03fef2e88b107">2</a>]
+      [<a href="https://android.googlesource.com/platform/frameworks/base/+/ebc250d16c747f4161167b5ff58b3aea88b37acf">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9452</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/54f661b16b308cf38d1b9703214591c0f83df64d">A-78464361</a>
+       [<a href="https://android.googlesource.com/platform/frameworks/base/+/3b6f84b77c30ec0bab5147b0cffc192c86ba2634">2</a>]</td>
+   <td>DoS</td>
+   <td>中</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="media-framework">媒体框架</h3>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参考内容</th>
+    <th>类型</th>
+    <th>严重程度</th>
+    <th>已更新的 AOSP 版本</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9473</td>
+   <td><a href="https://android.googlesource.com/platform/external/libhevc/+/9f0fb67540d2259e4930d9bd5f1a1a6fb95af862">A-65484460</a></td>
+   <td>RCE</td>
+   <td>严重</td>
+   <td>8.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9496</td>
+   <td><a href="https://android.googlesource.com/platform/external/libxaac/+/04e8cd58f075bec5892e369c8deebca9c67e855c">A-110769924</a></td>
+   <td>RCE</td>
+   <td>严重</td>
+   <td>9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9497</td>
+   <td><a href="https://android.googlesource.com/platform/external/libmpeg2/+/bef16671c891e16f25a7b174bc528eea109357be">A-74078669</a></td>
+   <td>RCE</td>
+   <td>严重</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9498</td>
+   <td><a href="https://android.googlesource.com/platform/external/skia/+/77c955200ddd1761d6ed7a6c1578349fedbb55e4">A-78354855</a></td>
+   <td>RCE</td>
+   <td>严重</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9499</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/bf7a67c33c0f044abeef3b9746f434b7f3295bb1">A-79218474</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="system">系统</h3>
+<p>这一部分中最严重的漏洞可让邻近区域内的攻击者通过特权进程执行任意代码。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参考内容</th>
+    <th>类型</th>
+    <th>严重程度</th>
+    <th>已更新的 AOSP 版本</th>
+  </tr>
+  <tr>
+   <td>CVE-2017-13283</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/ebc284cf3a59ee5cf7c06af88c2f3bcd0480e3e9">A-78526423</a></td>
+   <td>RCE</td>
+   <td>严重</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9476</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/dd28d8ddf2985d654781770c691c60b45d7f32b4">A-109699112</a></td>
+   <td>EoP</td>
+   <td>严重</td>
+   <td>8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9504</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/11fb7aa03437eccac98d90ca2de1730a02a515e2">A-110216176</a></td>
+   <td>RCE</td>
+   <td>严重</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9501</td>
+   <td><a href="https://android.googlesource.com/platform/packages/apps/Settings/+/5e43341b8c7eddce88f79c9a5068362927c05b54">A-110034419</a></td>
+   <td>EoP</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9502</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-111936792</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9503</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-80432928</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9505</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/5216e6120160b28d76e9ee4dff9995e772647511">A-110791536</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9506</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/830cb39cb2a0f1bf6704d264e2a5c5029c175dd7">A-111803925</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9507</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/30cec963095366536ca0b1306089154e09bfe1a9">A-111893951</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9508</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/e8bbf5b0889790cf8616f4004867f0ff656f0551">A-111936834</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9509</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/198888b8e0163bab7a417161c63e483804ae8e31">A-111937027</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9510</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/6e4b8e505173f803a5fc05abc09f64eef89dc308">A-111937065</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9511</td>
+   <td><a href="https://android.googlesource.com/platform/system/netd/+/931418b16c7197ca2df34c2a5609e49791125abe">A-111650288</a></td>
+   <td>DoS</td>
+   <td>高</td>
+   <td>9</td>
+  </tr>
+</tbody></table>
+
+<h2 id="2018-10-05-details">2018-10-05 安全补丁程序级别漏洞详情</h2>
+<p>
+我们在下面提供了 2018-10-05 补丁程序级别涵盖的每个安全漏洞的详细信息。漏洞列在所影响的组件下,内容包括 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>、组件(如果适用)和已更新的 AOSP 版本(如果适用)等详细信息。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+</p>
+
+<h3 id="kernel-components">内核组件</h3>
+<p>这一部分中最严重的漏洞可让本地恶意应用通过特权进程执行任意代码。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>参考内容</th>
+    <th>类型</th>
+    <th>严重程度</th>
+    <th>组件</th>
+  </tr>
+  <tr>
+    <td>CVE-2018-9513</td>
+    <td>A-111081202<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>Fork</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9514</td>
+    <td>A-111642636<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>sdcardfs</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9515</td>
+    <td>A-111641492<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>sdcardfs</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">常见问题和解答</h2>
+<p>这一部分解答了用户在阅读本公告后可能会提出的常见问题。</p>
+<p><strong>1. 如何确定我的设备是否已通过更新解决这些问题?</strong></p>
+<p>要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">查看并更新 Android 版本</a>。</p>
+<ul>
+<li>如果安全补丁程序级别是 2018-10-01 或更新,则意味着已解决 2018-10-01 安全补丁程序级别涵盖的所有问题。</li>
+<li>如果安全补丁程序级别是 2018-10-05 或更新,则意味着已解决 2018-10-05 以及之前的所有安全补丁程序级别涵盖的所有问题。</li>
+</ul>
+<p>预装这些更新的设备制造商应将补丁程序字符串级别设为:</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2018-10-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-10-05]</li>
+</ul>
+<p><strong>2. 为何本公告有 2 个安全补丁程序级别?</strong></p>
+<p>
+本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
+</p>
+<ul>
+<li>如果设备使用的是 2018-10-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
+<li>如果设备使用的是 2018-10-05 或更新的安全补丁程序级别,则必须包含本安全公告(以及之前的安全公告)中的所有适用补丁程序。</li>
+</ul>
+<p>
+我们建议合作伙伴将要解决的全部问题的修复程序打包到一个更新中。
+</p>
+<p id="type">
+<strong>3.“类型”列中的条目表示什么意思?<em></em></strong>
+</p>
+<p>
+在漏洞详情表内,“类型”列中的条目是安全漏洞的分类。<em></em>
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>缩写词</th>
+   <th>定义</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>远程代码执行</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>提权</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>信息披露</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>拒绝服务</td>
+  </tr>
+  <tr>
+   <td>N/A</td>
+   <td>没有分类</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>4.“参考内容”列中的条目表示什么意思?<em></em></strong>
+</p>
+<p>
+在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>前缀</th>
+   <th>参考内容</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android Bug ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm 参考编号</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek 参考编号</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA 参考编号</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom 参考编号</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>5. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+</p>
+<p>
+如果问题尚未公开发布,则在“参考内容”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers" class="external">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+</p>
+<p>
+<strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel/Nexus 公告)中?</strong>
+</p>
+<p>
+要在 Android 设备上声明最新的安全补丁程序级别,必须修复本安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复设备/合作伙伴安全公告中记录的其他安全漏洞。我们建议 Android 设备和芯片组制造商通过自己的安全网站(例如 <a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>、<a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> 或 <a href="/security/bulletin/pixel/" class="external">Pixel/Nexus</a> 安全公告)记录其设备上存在的其他修复程序。
+</p>
+
+<h2 id="versions">版本</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>版本</th>
+   <th>日期</th>
+   <th>备注</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>发布了本公告。</td>
+  </tr>
+  <tr>
+   <td>1.1</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>在本公告中添加了 AOSP 链接。</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/2018.html b/zh-cn/security/bulletin/2018.html
index d3cee75..be126f0 100644
--- a/zh-cn/security/bulletin/2018.html
+++ b/zh-cn/security/bulletin/2018.html
@@ -34,6 +34,20 @@
     <th>安全补丁程序级别</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即将发布<!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-01<br />2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
diff --git a/zh-cn/security/bulletin/index.html b/zh-cn/security/bulletin/index.html
index 3bdfe78..13e4121 100644
--- a/zh-cn/security/bulletin/index.html
+++ b/zh-cn/security/bulletin/index.html
@@ -39,7 +39,7 @@
 <ul>
   <li>Android 平台修复程序会在安全公告发布后的 24 到 48 小时内合并到 AOSP 中,您可以直接从 AOSP 获取这些修复程序。</li>
   <li>发布的公告中会提供直接指向上游 Linux 内核修复程序的链接,您可以通过这些链接获取相应的修复程序。</li>
-  <li>您可以直接从 SOC 制造商处获取这些制造商提供修复程序。</li>
+  <li>您可以直接从 SOC 制造商处获取它们提供的修复程序。</li>
 </ul>
 <h3 id="bulletins">公告</h3>
 
@@ -55,6 +55,20 @@
     <th>安全补丁程序级别</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即将发布<!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-01<br />2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
@@ -529,7 +543,7 @@
       <a href="/security/bulletin/2015-09-01.html?hl=zh-tw">中文 (台灣)</a>
     </td>
     <td>2015 年 9 月 9 日</td>
-    <td>N/A</td>
+    <td>无</td>
  </tr>
  <tr>
     <td><a href="/security/bulletin/2015-08-01.html">2015 年 8 月</a></td>
@@ -542,7 +556,7 @@
       <a href="/security/bulletin/2015-08-01.html?hl=zh-tw">中文 (台灣)</a>
     </td>
     <td>2015 年 8 月 13 日</td>
-    <td>N/A</td>
+    <td>无</td>
  </tr>
 </tbody></table>
 
diff --git a/zh-cn/security/bulletin/pixel/2018-04-01.html b/zh-cn/security/bulletin/pixel/2018-04-01.html
index af8ed66..e4ed484 100644
--- a/zh-cn/security/bulletin/pixel/2018-04-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-04-01.html
@@ -56,7 +56,8 @@
   </tr>
   <tr>
     <td>CVE-2017-13294</td>
-    <td><a href="https://android.googlesource.com/platform/packages/apps/Email/+/c3e0aba2a604ce7c3807d65df1e6a2b848287019">A-71814449</a> [<a href="https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/e00598532bbfc8618b7c051cbf6bd15491f61f27">2</a>]</td>
+    <td><a href="https://android.googlesource.com/platform/packages/apps/Email/+/c3e0aba2a604ce7c3807d65df1e6a2b848287019">A-71814449</a>
+       [<a href="https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/e00598532bbfc8618b7c051cbf6bd15491f61f27">2</a>]</td>
     <td>ID</td>
     <td>中</td>
     <td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -159,7 +160,8 @@
   </tr>
   <tr>
     <td>CVE-2017-13301</td>
-   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/384689934d293acf532e3fea3e72ef78df4f2d1e">A-66498711</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/d52b215f82e464705373d794748325298f0a1f9a">2</a>]</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/384689934d293acf532e3fea3e72ef78df4f2d1e">A-66498711</a>
+      [<a href="https://android.googlesource.com/platform/frameworks/base/+/d52b215f82e464705373d794748325298f0a1f9a">2</a>]</td>
    <td>DoS</td>
    <td>中</td>
    <td>8.0</td>
@@ -335,7 +337,9 @@
   <tr>
     <td>CVE-2018-5825</td>
     <td>A-72957269<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=5ae227670444cf8ea7b8a8d98eab41404a03332f">QC-CR#2151146</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cf0f031ffbb6a8e08e517f653045c3f81d7f2663">2</a>] [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=09a34b7878a732187f9138900667d8abb2b1c39c">3</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=5ae227670444cf8ea7b8a8d98eab41404a03332f">QC-CR#2151146</a>
+       [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cf0f031ffbb6a8e08e517f653045c3f81d7f2663">2</a>]
+       [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=09a34b7878a732187f9138900667d8abb2b1c39c">3</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>IPA 驱动程序</td>
@@ -343,7 +347,8 @@
   <tr>
     <td>CVE-2018-5824</td>
     <td>A-72957235<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=b34f6f3afe229e32a32418f75889279f6e00d157">QC-CR#2149399</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=d3a92a1656a3ee2fc44d4ff98614a4f5b70f1893">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=b34f6f3afe229e32a32418f75889279f6e00d157">QC-CR#2149399</a>
+       [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=d3a92a1656a3ee2fc44d4ff98614a4f5b70f1893">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>WLAN</td>
@@ -406,7 +411,8 @@
   <tr>
     <td>CVE-2018-3567</td>
     <td>A-72956997<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=f2627fca43bc4403a445c2b84481383ac0249364">QC-CR#2147119</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=25c131e8a807894e04f95bdeb1cbd0376eda3bea">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=f2627fca43bc4403a445c2b84481383ac0249364">QC-CR#2147119</a>
+       [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=25c131e8a807894e04f95bdeb1cbd0376eda3bea">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>WLAN</td>
@@ -414,7 +420,8 @@
   <tr>
     <td>CVE-2017-15855</td>
     <td>A-72957336<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=75c0ea8622bb07716d2a82247e6dd1597980f223">QC-CR#2149501</a></td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=75c0ea8622bb07716d2a82247e6dd1597980f223">
+QC-CR#2149501</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>WLAN</td>
@@ -422,7 +429,8 @@
   <tr>
     <td>CVE-2018-5828</td>
     <td>A-71501691<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=6299a6bf166a60a47e9108ae2119027e787432d0">QC-CR#2115207</a></td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=6299a6bf166a60a47e9108ae2119027e787432d0">
+QC-CR#2115207</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>QC WLAN</td>
@@ -446,7 +454,8 @@
   <tr>
     <td>CVE-2017-14894</td>
     <td>A-71501694<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=dfca3d8173c1548a97e558cb8abd1ffd2483f8b7">QC-CR#2120424</a></td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=dfca3d8173c1548a97e558cb8abd1ffd2483f8b7">
+QC-CR#2120424</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>QC WLAN</td>
@@ -454,7 +463,9 @@
   <tr>
     <td>CVE-2017-14880</td>
     <td>A-68992477<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cbf3702ae1c5e2cacd6f15a5eb7a799e2f1ed96f">QC-CR#2078734</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=d72e444dce0b9d20fdcdc4daeb6227e3536eebf7">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cbf3702ae1c5e2cacd6f15a5eb7a799e2f1ed96f">
+QC-CR#2078734</a>
+       [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=d72e444dce0b9d20fdcdc4daeb6227e3536eebf7">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>IPA WAN 驱动程序</td>
@@ -502,7 +513,7 @@
   <tr>
    <td>A-64101451</td>
    <td>性能</td>
-   <td>在部分运营商的紧急呼叫期间,改进从 VoLTE 到 VoWLAN 的切换过程</td>
+   <td>改进通过部分运营商拨打紧急电话时从 VoLTE 到 VoWLAN 的切换过程</td>
    <td>Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
@@ -597,13 +608,16 @@
   </tr>
   <tr>
    <td>A-67882977</td>
-   <td>认证</td>
+   <td>证书</td>
    <td>更新证书</td>
    <td>Pixel、Pixel XL</td>
   </tr>
   <tr>
-   <td>A-68150449<br />A-68059359<br />A-69797741<br />
-       A-69378640<br />A-68824279</td>
+   <td>A-68150449<br />
+       A-68059359<br />
+       A-69797741<br />
+       A-69378640<br />
+       A-68824279</td>
    <td>稳定性</td>
    <td>改进 Pixel 2 手机的 WLAN 稳定性</td>
    <td>Pixel 2、Pixel 2 XL</td>
@@ -639,9 +653,11 @@
    <td>所有</td>
   </tr>
   <tr>
-    <td>A-68923696<br />A-68922470<br />A-68940490</td>
-   <td>认证</td>
-   <td>升级证书以确保持续为您提供服务。</td>
+    <td>A-68923696<br />
+       A-68922470<br />
+       A-68940490</td>
+   <td>证书</td>
+   <td>升级证书以确保服务的持续性。</td>
    <td>Nexus 5X、Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
@@ -683,23 +699,26 @@
   <tr>
    <td>A-69152057</td>
    <td>连接</td>
-   <td>地址来电转接问题。</td>
+   <td>解决来电转接问题。</td>
    <td>所有</td>
   </tr>
   <tr>
    <td>A-69209000</td>
    <td>连接</td>
-   <td>改进 Pixel 2 在部分 WLAN 网络下的互联网连接状况</td>
+   <td>改进 Pixel 2 在部分 WLAN 网络下的互联网连接</td>
    <td>Pixel 2</td>
   </tr>
   <tr>
-   <td>A-69238007<br />A-68202289<br />A-69334308</td>
+   <td>A-69238007<br />
+       A-68202289<br />
+       A-69334308</td>
    <td>连接</td>
    <td>调整 APN 设置</td>
    <td>Nexus 5X、Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
-   <td>A-69261367<br />A-70512352</td>
+   <td>A-69261367<br />
+       A-70512352</td>
    <td>短信</td>
    <td>改进部分运营商的彩信性能</td>
    <td>Nexus 5X、Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
@@ -729,7 +748,8 @@
    <td>Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
-   <td>A-69848394<br />A-68275646</td>
+   <td>A-69848394<br />
+       A-68275646</td>
    <td>性能</td>
    <td>改进免安装应用的性能</td>
    <td>所有</td>
@@ -778,7 +798,9 @@
    <td>Nexus 5X、Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
-   <td>A-70580873<br />A-70912923<br />A-71497259</td>
+   <td>A-70580873<br />
+       A-70912923<br />
+       A-71497259</td>
    <td>连接</td>
    <td>改进部分运营商的通话性能</td>
    <td>Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
@@ -814,7 +836,8 @@
    <td>所有</td>
   </tr>
   <tr>
-   <td>A-72797728<br />A-71599119</td>
+   <td>A-72797728<br />
+       A-71599119</td>
    <td>日志记录</td>
    <td>改进内部问题排查工具</td>
    <td>所有</td>
@@ -873,7 +896,7 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3. “参考内容”列中的条目表示什么意思?<em></em></strong>
+<strong>3.“参考内容”列中的条目表示什么意思?<em></em></strong>
 </p>
 <p>
 在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
diff --git a/zh-cn/security/bulletin/pixel/2018-05-01.html b/zh-cn/security/bulletin/pixel/2018-05-01.html
index 87703d9..72765ac 100644
--- a/zh-cn/security/bulletin/pixel/2018-05-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-05-01.html
@@ -245,7 +245,8 @@
   <tr>
     <td>CVE-2018-5851</td>
     <td>A-72957505<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=103f385783f368cc5cd3c125390e6dfd43c36096">QC-CR#2146869</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=a9068fbb6bad55c9ecc80b9c3935969c8820c425">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=103f385783f368cc5cd3c125390e6dfd43c36096">QC-CR#2146869</a>
+[<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=a9068fbb6bad55c9ecc80b9c3935969c8820c425">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>WLAN</td>
@@ -253,7 +254,8 @@
   <tr>
     <td>CVE-2018-5842</td>
     <td>A-72957257<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=f05883b3d442a7eb9df46a6bde08f1d5cdfc8133">QC-CR#2113219</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=21b91d4faa275d7b1ae58ad6a549cfa801066dfe">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=f05883b3d442a7eb9df46a6bde08f1d5cdfc8133">QC-CR#2113219</a>
+[<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=21b91d4faa275d7b1ae58ad6a549cfa801066dfe">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>WLAN</td>
@@ -261,7 +263,8 @@
   <tr>
     <td>CVE-2018-5848</td>
     <td>A-72957178<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=6e5a9b32503d37a202fccc5d24b189ae6107a256">QC-CR#2126062</a></td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=6e5a9b32503d37a202fccc5d24b189ae6107a256">
+QC-CR#2126062</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>WIGIG</td>
@@ -276,7 +279,8 @@
   <tr>
     <td>CVE-2018-5843</td>
     <td>A-71501685<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=ea4459a044783649b1695653f848647c68bee69d">QC-CR#2113385</a></td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=ea4459a044783649b1695653f848647c68bee69d">
+QC-CR#2113385</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>调制解调器驱动程序</td>
@@ -284,7 +288,8 @@
   <tr>
     <td>CVE-2018-5844</td>
     <td>A-71501682<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=f8ed842bb3f4620eafa2669e0f534ce4c3ac6f07">QC-CR#2118860</a></td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=f8ed842bb3f4620eafa2669e0f534ce4c3ac6f07">
+QC-CR#2118860</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>视频设备</td>
@@ -292,7 +297,8 @@
   <tr>
     <td>CVE-2018-5847</td>
     <td>A-71501681<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=3ddf48ce0377d71c86ff09d199f0307dad39fdd5">QC-CR#2120955</a></td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=3ddf48ce0377d71c86ff09d199f0307dad39fdd5">
+QC-CR#2120955</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>Snapdragon 显示引擎</td>
@@ -308,7 +314,8 @@
   <tr>
     <td>CVE-2018-3581</td>
     <td>A-72957725<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=becb9c5aaa05137ce1002f77f8a7d9e7e0799268">QC-CR#2150359</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=43c8a7f083c56b2f6aeac6d77721f5a70bdba99c">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=becb9c5aaa05137ce1002f77f8a7d9e7e0799268">QC-CR#2150359</a>
+       [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=43c8a7f083c56b2f6aeac6d77721f5a70bdba99c">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>WLAN</td>
@@ -316,7 +323,8 @@
   <tr>
     <td>CVE-2018-3576</td>
     <td>A-72957337<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=bdf6936cd49a1e43184c7ff1635126fca946a995">QC-CR#2128512</a></td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=bdf6936cd49a1e43184c7ff1635126fca946a995">
+QC-CR#2128512</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>WLAN</td>
@@ -324,7 +332,8 @@
   <tr>
     <td>CVE-2018-3572</td>
     <td>A-72957724<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=b11e3a50197e73e397c36d335d56d905b99eb02c">QC-CR#2145996</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=fbf66aa0c6ae84db64bdf0b8f3c3a32370c70c67">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=b11e3a50197e73e397c36d335d56d905b99eb02c">QC-CR#2145996</a>
+       [<a href="https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=fbf66aa0c6ae84db64bdf0b8f3c3a32370c70c67">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>音频</td>
@@ -332,7 +341,8 @@
   <tr>
     <td>CVE-2018-3571</td>
     <td>A-72957527<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=db41c9cc35d82238a4629e5ff29ba0c6b80b2cd6">QC-CR#2132332</a></td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=db41c9cc35d82238a4629e5ff29ba0c6b80b2cd6">
+QC-CR#2132332</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>KGSL</td>
@@ -370,7 +380,8 @@
   <tr>
     <td>CVE-2017-15843</td>
     <td>A-72956941<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=a549abd08f3a52593d9602128c63c1212e90984b">QC-CR#2032076</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=e05adec18cbc3c9213cc293441a2be8683339b4a">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=a549abd08f3a52593d9602128c63c1212e90984b">QC-CR#2032076</a>
+[<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=e05adec18cbc3c9213cc293441a2be8683339b4a">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>Floor_vote 驱动程序</td>
@@ -378,7 +389,8 @@
   <tr>
     <td>CVE-2017-15842</td>
     <td>A-72957040<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=c4ab75dfc22f644fb5ee70bd515aaf633761cd3b">QC-CR#2123291</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=6d42b0e51ed7f8e51397d89af66c1453beba51cd">2</a>]</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=c4ab75dfc22f644fb5ee70bd515aaf633761cd3b">QC-CR#2123291</a>
+        [<a href="https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=6d42b0e51ed7f8e51397d89af66c1453beba51cd">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>Qdsp6v2</td>
diff --git a/zh-cn/security/bulletin/pixel/2018-07-01.html b/zh-cn/security/bulletin/pixel/2018-07-01.html
index 9f7c3c4..e99584f 100644
--- a/zh-cn/security/bulletin/pixel/2018-07-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-07-01.html
@@ -23,8 +23,7 @@
 <p><em>发布时间:2018 年 7 月 2 日 | 更新时间:2018 年 7 月 3 日</em></p>
 
 <p>
-本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。
-对于 Google 设备,如果安全补丁程序级别是 2018-07-05 或更新,则意味着已解决本公告以及 2018 年 7 月的 Android 安全公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。
+本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-07-05 或更新,则意味着已解决本公告以及 2018 年 7 月的 Android 安全公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。
 </p>
 <p>
 所有受支持的 Google 设备都将会收到 2018-07-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
@@ -33,7 +32,7 @@
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/images">Google Developers 网站</a>上找到 Google 设备固件映像。
 </p>
 
-<h2 id="announcements">通知</h2>
+<h2 id="announcements">通告</h2>
 <p>除了 2018 年 7 月的 Android 安全公告中所述的安全漏洞外,Pixel 和 Nexus 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。</p>
 
 <h2 id="security-patches">安全补丁程序</h2>
diff --git a/zh-cn/security/bulletin/pixel/2018-08-01.html b/zh-cn/security/bulletin/pixel/2018-08-01.html
index b455d50..ee83ed1 100644
--- a/zh-cn/security/bulletin/pixel/2018-08-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-08-01.html
@@ -32,7 +32,7 @@
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/images" class="external">Google Developers 网站</a>上找到 Google 设备固件映像。
 </p>
 
-<h2 id="announcements">通知</h2>
+<h2 id="announcements">通告</h2>
 <p>除了 2018 年 8 月的 Android 安全公告中所述的安全漏洞外,Google 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。</p>
 
 <h2 id="security-patches">安全补丁程序</h2>
diff --git a/zh-cn/security/bulletin/pixel/2018-09-01.html b/zh-cn/security/bulletin/pixel/2018-09-01.html
index 9ff526c..1d6273c 100644
--- a/zh-cn/security/bulletin/pixel/2018-09-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-09-01.html
@@ -32,7 +32,7 @@
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/images" class="external">Google Developers 网站</a>上找到 Google 设备固件映像。
 </p>
 
-<h2 id="announcements">通知</h2>
+<h2 id="announcements">通告</h2>
 <p>除了 2018 年 9 月的 Android 安全公告中所述的安全漏洞外,Google 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。</p>
 
 <h2 id="security-patches">安全补丁程序</h2>
diff --git a/zh-cn/security/bulletin/pixel/2018-10-01.html b/zh-cn/security/bulletin/pixel/2018-10-01.html
new file mode 100644
index 0000000..a95d2ef
--- /dev/null
+++ b/zh-cn/security/bulletin/pixel/2018-10-01.html
@@ -0,0 +1,186 @@
+<html devsite><head>
+    <title>Pixel/Nexus 安全公告 - 2018 年 10 月</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>发布时间:2018 年 10 月 1 日</em></p>
+
+<p>
+本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-10-05 或更新,则意味着已解决本公告以及 2018 年 10 月的 Android 安全公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705" class="external">查看并更新 Android 版本</a>。
+</p>
+<p>
+所有受支持的 Google 设备都将会收到 2018-10-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+</p>
+<p class="note">
+<strong>注意</strong>:可在 <a href="https://developers.google.com/android/images" class="external">Google Developers 网站</a>上找到 Google 设备固件映像。
+</p>
+
+<h2 id="announcements">通知</h2>
+
+<p>2018 年 10 月的 Pixel/Nexus 安全公告中没有 Pixel 或 Nexus 安全补丁程序。
+</p>
+
+<h2 id="functional-patches">功能补丁程序</h2>
+<p>
+我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)、改进以及受影响设备。
+</p>
+
+<table>
+  <tbody><tr>
+   <th>参考内容</th>
+   <th>类别</th>
+   <th>改进</th>
+   <th>设备</th>
+  </tr>
+  <tr>
+   <td>A-112486006</td>
+   <td>媒体</td>
+   <td>改进了某些受保护媒体格式的性能</td>
+   <td>Pixel 2、Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-112529920</td>
+   <td>电耗</td>
+   <td>改进了 Pixel 设备的快速充电行为</td>
+   <td>Pixel、Pixel XL</td>
+  </tr>
+  <tr>
+   <td>A-79643956</td>
+   <td>稳定性</td>
+   <td>改进了使用 Android Auto 时的稳定性</td>
+   <td>Pixel 2、Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-111467967</td>
+   <td>性能</td>
+   <td>修改了使用地图导航功能时的选接电话行为</td>
+   <td>所有</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">常见问题和解答</h2>
+<p>
+这一部分解答了用户在阅读本公告后可能会提出的常见问题。
+</p>
+<p>
+<strong>1. 如何确定我的设备是否已通过更新解决这些问题?
+</strong>
+</p>
+<p>
+如果安全补丁程序级别是 2018-10-05 或更新,则意味着已解决 2018-10-05 以及之前的所有安全补丁程序级别涵盖的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Pixel 和 Nexus 更新时间表</a>中的说明。
+</p>
+<p id="type">
+<strong>2.“类型”列中的条目表示什么意思?<em></em></strong>
+</p>
+<p>
+在漏洞详情表内,“类型”列中的条目是安全漏洞的分类。<em></em>
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>缩写词</th>
+   <th>定义</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>远程代码执行</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>提权</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>信息披露</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>拒绝服务</td>
+  </tr>
+  <tr>
+   <td>N/A</td>
+   <td>没有分类</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>3.“参考内容”列中的条目表示什么意思?<em></em></strong>
+</p>
+<p>
+在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>前缀</th>
+   <th>参考内容</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android Bug ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm 参考编号</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek 参考编号</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA 参考编号</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom 参考编号</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>4. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+</p>
+<p>
+如果问题尚未公开发布,则在“参考内容”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers" class="external">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+</p>
+<p>
+<strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
+</p>
+<p>
+要在 Android 设备上声明最新的安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
+</p>
+<h2 id="versions">版本</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>版本</th>
+   <th>日期</th>
+   <th>备注</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>发布了本公告。</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/pixel/2018.html b/zh-cn/security/bulletin/pixel/2018.html
index 51e7978..795b45d 100644
--- a/zh-cn/security/bulletin/pixel/2018.html
+++ b/zh-cn/security/bulletin/pixel/2018.html
@@ -34,6 +34,20 @@
     <th>安全补丁程序级别</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即将发布<!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /
diff --git a/zh-cn/security/bulletin/pixel/index.html b/zh-cn/security/bulletin/pixel/index.html
index 47107b9..c3c1893 100644
--- a/zh-cn/security/bulletin/pixel/index.html
+++ b/zh-cn/security/bulletin/pixel/index.html
@@ -43,6 +43,20 @@
     <th>安全补丁程序级别</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即将发布<!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /
diff --git a/zh-cn/security/encryption/file-based.html b/zh-cn/security/encryption/file-based.html
index c68fee4..53194cb 100644
--- a/zh-cn/security/encryption/file-based.html
+++ b/zh-cn/security/encryption/file-based.html
@@ -21,13 +21,16 @@
   -->
 
 <p>
-Android 7.0 及更高版本支持文件级加密 (FBE)。采用文件级加密时,可以使用不同的密钥对不同的文件进行加密,并且可以对加密文件进行单独解密。
+Android 7.0 及更高版本支持文件级加密 (FBE)。采用文件级加密时,可以使用不同的密钥对不同的文件进行加密,也可以对加密文件单独解密。
 </p>
 <p>
-本文介绍了如何在新设备上启用文件级加密,以及如何更新系统应用,以充分利用新的 Direct Boot API 并尽可能为用户提供最佳、最安全的体验。
+本文介绍如何在新设备上启用文件级加密,以及如何更新系统应用,以充分利用新的 Direct Boot API 并尽可能为用户提供最佳、最安全的体验。
 </p>
 
-<p class="warning"><strong>警告</strong>:文件级加密目前无法用于<a href="/devices/storage/adoptable.html">可合并的存储设备</a>。在使用文件级加密的设备上,必须将新添加的存储媒介(如 SD 卡)用作<a href="/devices/storage/traditional.html">传统存储设备</a>。</p>
+<aside class="caution">
+  <p><strong>注意</strong>:在运行 Android 7.0 - 8.1 的设备上,文件级加密无法用于<a href="/devices/storage/adoptable.html">可合并的存储设备</a>。在使用 FBE 的设备上,必须将新添加的存储媒介(例如 SD 卡)用作<a href="/devices/storage/traditional.html">传统存储设备</a>。</p>
+  <p>运行 Android 9 及更高版本的设备可以使用可合并的存储设备和 FBE。</p>
+</aside>
 
 <h2 id="direct-boot">直接启动</h2>
 <p>
@@ -77,7 +80,7 @@
 
 <ul>
 <li>对 EXT4 加密的<strong>内核支持</strong>(内核配置选项:EXT4_FS_ENCRYPTION)</li><li>基于 1.0 或 2.0 版 HAL 的 <strong><a href="/security/keystore/index.html">Keymaster 支持</a></strong>。不支持 Keymaster 0.3,因为它既不提供必要的功能,也不能保证为加密密钥提供充分保护。
-</li><li>必须在<a href="/security/trusty/index.html">可信执行环境</a> (TEE) 中实现 <strong>Keymaster/<a href="/security/keystore/index.html">Keystore</a> 和 Gatekeeper</strong>,以便为 DE 密钥提供保护,从而使未经授权的操作系统(刷到设备上的定制操作系统)无法直接请求 DE 密钥。
+</li><li>必须在<a href="/security/trusty/index.html">可信执行环境</a> (TEE) 中实现 <strong>Keymaster/<a href="/security/keystore/index.html">Keystore</a> 和 Gatekeeper</strong>,以便为 DE 密钥提供保护,从而使未经授权的操作系统(刷写到设备上的定制操作系统)无法直接请求 DE 密钥。
 </li><li>内核<strong>加密性能</strong>必须要在使用 AES XTS 时至少达到 50MB/s,以确保良好的用户体验。
 </li><li><strong>硬件信任根</strong>和<strong>验证启动</strong>需要绑定到 Keymaster 初始化进程,以确保未经授权的操作系统无法获取设备加密凭据。</li>
 </ul>
@@ -104,18 +107,15 @@
   </tr>
   <tr>
    <td>Android Common</td>
-   <td><strong>kernel/common</strong> android-3.10.y (<a href="https://android.googlesource.com/kernel/common/+/android-3.10.y">git</a>)
-   </td>
+   <td><strong>kernel/common</strong> android-3.10.y (<a href="https://android.googlesource.com/kernel/common/+/android-3.10.y">git</a>)</td>
   </tr>
   <tr>
    <td>Nexus 5X (bullhead)</td>
-   <td><strong>kernel/msm</strong> android-msm-bullhead-3.10-n-preview-2 (<a href="https://android.googlesource.com/kernel/msm/+/android-msm-bullhead-3.10-n-preview-2">git</a>)
-   </td>
+   <td><strong>kernel/msm</strong> android-msm-bullhead-3.10-n-preview-2 (<a href="https://android.googlesource.com/kernel/msm/+/android-msm-bullhead-3.10-n-preview-2">git</a>)</td>
   </tr>
   <tr>
    <td>Nexus 6P (angler)</td>
-   <td><strong>kernel/msm</strong> android-msm-angler-3.10-n-preview-2 (<a href="https://android.googlesource.com/kernel/msm/+/android-msm-angler-3.10-n-preview-2">git</a>)
-   </td>
+   <td><strong>kernel/msm</strong> android-msm-angler-3.10-n-preview-2 (<a href="https://android.googlesource.com/kernel/msm/+/android-msm-angler-3.10-n-preview-2">git</a>)</td>
   </tr>
 </tbody></table>
 <p>
@@ -133,19 +133,8 @@
 通过将 <code>fileencryption=contents_encryption_mode[:filenames_encryption_mode]</code> 标记添加到 <code>userdata</code> 分区最后一列的 <code>fstab</code> 行中,可以启用 FBE。<code>contents_encryption_mode</code> 参数定义用于文件内容加密的算法,<code>filenames_encryption_mode</code> 参数定义用于文件名加密的算法。
 <code>contents_encryption_mode</code> 只能是 <code>aes-256-xts</code>。
 <code>filenames_encryption_mode</code> 有两个可能的值:<code>aes-256-cts</code> 和 <code>aes-256-heh</code>。如果未指定 <code>filenames_encryption_mode</code>,则使用 <code>aes-256-cts</code> 值。
-</p><p>
-测试设备上的 FBE 实现情况时,可以指定以下标记:<code>forcefdeorfbe="&lt;path/to/metadata/partition&gt;"</code>
 </p>
-<p>
-此标记会将设备设为使用 FDE,但允许针对开发者转换为 FBE。默认情况下,此标记的行为类似于 <code>forceencrypt</code>,会使设备进入 FDE 模式。不过,它将提供一个调试选项,以便在开发者预览中允许将设备切换到 FBE 模式。另外,还可以使用以下命令在 fastboot 中启用 FBE:</p>
-<p>
-</p><pre class="devsite-terminal devsite-click-to-copy">
-fastboot --wipe-and-use-fbe
-</pre>
-<p></p>
-<p>
-此标记仅用于开发目的,可提供一个在实际 FBE 设备发布之前演示 FBE 功能的平台。此标记在将来可能会被弃用。
-</p>
+
 <h3 id="integrating-with-keymaster">与 Keymaster 集成</h3>
 <p>
 <code>vold</code> 负责处理密钥生成和内核密钥环管理。AOSP 的 FBE 实现要求设备支持 1.0 或更高版本的 Keymaster HAL。更低版本的 Keymaster HAL 不受支持。</p>
@@ -230,7 +219,7 @@
 </ol>
 <h2 id="validation">验证</h2>
 <p>
-为了确保实现的 FBE 功能版本能够按预期工作,需要部署多种 <a href="https://android.googlesource.com/platform/cts/+/nougat-cts-release/hostsidetests/appsecurity/src/android/appsecurity/cts/DirectBootHostTest.java">CTS 加密测试</a>。
+为了确保实现的 FBE 功能版本能够按预期工作,需要部署多种 <a href="https://android.googlesource.com/platform/cts/+/master/hostsidetests/appsecurity/src/android/appsecurity/cts/DirectBootHostTest.java">CTS 加密测试</a>。
 </p>
 <p>
 可以顺利为您的主板编译内核后,还需要为 x86 编译内核并在 QEMU 下运行该内核,以便使用以下命令通过 <a hre="https://git.kernel.org/cgit/fs/ext2/xfstests-bld.git/plain/quick-start?h=META">xfstest</a> 进行测试:
@@ -257,11 +246,15 @@
 <h2 id="aosp-implementation-details">AOSP 实现详情</h2>
 <p>本部分详细介绍了 AOSP 的文件级加密实现,并讲解了文件级加密的运作方式。设备制造商应该无需执行任何更改,即可在其设备上使用 FBE 和“直接启动”功能。
 </p>
-<h3 id="ext4-encryption">EXT4 加密</h3>
+<h3 id="fscrypt-encryption">fscrypt 加密</h3>
 <p>
-AOSP 的文件级加密实现会用到内核中的 EXT4 加密功能,并配置为:
-</p><ul>
-<li>借助采用 XTS 模式的 AES-256 算法加密文件内容</li><li>借助采用 CBC-CTS 模式的 AES-256 算法加密文件名</li></ul>
+AOSP 实现会用到内核中的“fscrypt”加密(受 ext4 和 f2fs 支持),并配置为:
+</p>
+<ul>
+  <li>借助采用 XTS 模式的 AES-256 算法加密文件内容</li>
+  <li>借助采用 CBC-CTS 模式的 AES-256 算法加密文件名</li>
+</ul>
+
 <h3 id="key-derivation">密钥派生</h3>
 <p>
 磁盘加密密钥(512 位 AES-XTS 密钥)以加密形式存储:通过另一个存放在 TEE 中的密钥(256 位 AES-GCM 密钥)进行加密。要使用该 TEE 密钥,需要具备以下三项:
@@ -271,9 +264,9 @@
 身份验证令牌是一个经过加密和身份验证的令牌,由 <a href="/security/authentication/gatekeeper.html">Gatekeeper</a> 在用户成功登录时生成。<em></em>除非用户提供的身份验证令牌正确无误,否则 TEE 将拒绝用户使用该密钥。如果用户没有任何凭据,则不使用也不需要使用身份验证令牌。
 </p>
 <p>
-<em></em>扩展凭据是使用 <code>scrypt</code> 算法进行加盐和扩展处理的用户凭据。实际上,凭据在被传递到 <code>vold</code>(以便传递到 <code>scrypt</code>)之前,会在锁定设置服务中接受一次哈希处理。扩展凭据会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 <code>KM_TAG_APPLICATION_ID</code> 的所有保证。如果用户没有凭据,则不使用也不需要使用扩展凭据。
+<em></em>扩展凭据是使用 <code>scrypt</code> 算法进行加盐和扩展处理后的用户凭据。实际上,凭据在被传递到 <code>vold</code>(以便传递到 <code>scrypt</code>)之前,会在锁定设置服务中接受一次哈希处理。扩展凭据会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 <code>KM_TAG_APPLICATION_ID</code> 的所有保证。如果用户没有凭据,则不使用也不需要使用扩展凭据。
 </p>
 <p>
-<code>secdiscardable hash</code> 是 16 KB 随机文件的 512 位哈希,和用于重建相应密钥的其他信息(例如种子)存储在一起。在相应密钥被删除时,该文件会一并被安全删除,或以新的方式被加密;采用这种附加的保护措施后,攻击者要恢复相应密钥,必须要先恢复这个被安全删除的文件中的每一个位。secdiscardable hash 同样会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 <code>KM_TAG_APPLICATION_ID</code> 的所有保证。请参阅<a href="/security/keystore/implementer-ref.html">面向 Keystore 实现人员的参考资料</a>。
+<code>secdiscardable hash</code> 是 16 KB 随机文件的 512 位哈希,和用于重建相应密钥的其他信息(例如种子)存储在一起。该文件会在相应密钥被删除时一并被安全删除,或者会以新的方式被加密;采用这种附加的保护措施后,攻击者要恢复相应密钥,必须要先恢复这个被安全删除的文件中的每一个位。secdiscardable hash 同样会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 <code><a href="/security/keystore/tags#application_id">KM_TAG_APPLICATION_ID</a></code> 的所有保证。
 
 </p></body></html>
\ No newline at end of file
diff --git a/zh-cn/security/encryption/full-disk.html b/zh-cn/security/encryption/full-disk.html
index 14b1aff..3e7d41c 100644
--- a/zh-cn/security/encryption/full-disk.html
+++ b/zh-cn/security/encryption/full-disk.html
@@ -62,7 +62,7 @@
   </li><li><code>late_start</code>:在 <code>/data</code> 未解密并装载之前,一直不会启动。
 </li></ul>
 
-<p>为了触发这些操作,<code>vold.decrypt</code> 属性会被设置为<a href="https://android.googlesource.com/platform/system/vold/+/master/cryptfs.c">各种字符串</a>。要结束和重启服务,请使用以下 <code>init</code> 命令:</p>
+<p>为了触发这些操作,<code>vold.decrypt</code> 属性会设置为<a href="https://android.googlesource.com/platform/system/vold/+/master/cryptfs.c">各种字符串</a>。要结束和重启服务,请使用以下 <code>init</code> 命令:</p>
 
 <ul>
   <li><code>class_reset</code>:停止相应服务,但允许通过 class_start 重启该服务。
diff --git a/zh-cn/security/encryption/index.html b/zh-cn/security/encryption/index.html
index b4564cc..8c3f9d7 100644
--- a/zh-cn/security/encryption/index.html
+++ b/zh-cn/security/encryption/index.html
@@ -47,7 +47,7 @@
 Android 5.0 及更高版本支持<a href="/security/encryption/full-disk.html">全盘加密</a>。全盘加密是使用单个密钥(由用户的设备密码加以保护)来保护设备的整个用户数据分区。设备启动后,用户必须提供其凭据才能访问磁盘的任何部分。
 </p>
 <p>
-虽然这种加密方式非常有利于确保安全性,但这也意味着当重新启动设备时,用户无法立即使用手机的大多数核心功能。由于此单个用户凭据的保护,系统无法访问用户的数据,所以闹钟等功能将无法运行,无障碍服务将无法使用,并且手机也无法接听电话。
+虽然这种加密方式非常有利于确保安全性,但这也意味着当重新启动设备时,用户无法立即使用手机的大多数核心功能。由于对用户数据的访问受单个用户凭据的保护,因此闹钟等功能将无法运行,无障碍服务将无法使用,并且手机也无法接听电话。
 </p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/encryption/metadata.html b/zh-cn/security/encryption/metadata.html
new file mode 100644
index 0000000..4928d40
--- /dev/null
+++ b/zh-cn/security/encryption/metadata.html
@@ -0,0 +1,241 @@
+<html devsite><head>
+    <title>元数据加密</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>
+Android 7.0 及更高版本支持<a href="/security/encryption/file-based">文件级加密</a> (FBE)。采用 FBE 时,可以使用不同的密钥对不同的文件进行加密,并且可以对加密文件进行单独解密。这些密钥可用于加密文件内容和文件名。采用 FBE 时,其他信息(例如目录布局、文件大小、权限和创建/修改时间)不会被加密。这些统称为“文件系统元数据”。
+</p>
+<p>
+Android 9 引入了对存在硬件支持的元数据加密的支持。借助元数据加密,启动时出现的单个密钥会加密未通过 FBE 进行加密的任何内容。该密钥受到 Keymaster 的保护,而 Keymaster 受到验证启动的保护。
+</p>
+<h2 id="implementation">实现</h2>
+<p>
+您可以在搭载 Android 9 的新设备上设置元数据加密,只需设置元数据文件系统,更改 init 序列,然后在设备的 fstab 文件中开启元数据加密即可进行设置。
+</p>
+<h3 id="hardware-requirements">硬件要求</h3>
+<p>
+元数据加密只能在数据分区首次进行格式化时设置。因此,该功能仅适用于新设备;OTA 不应更改此设置。
+</p>
+<p>
+为了支持当前的元数据加密,您的硬件必须支持使用<a href="https://blog.google/topics/connected-workspaces/pixel-security-better-faster-stronger/">内嵌加密引擎</a>进行文件级加密。<code>fstab.hardware</code> 中的用户数据分区的 <code>fileencryption=ice</code> 指令指明了这一点。
+</p>
+<p>
+此外,内核中必须存在并启用 <code>dm-default-key</code> 模块。
+</p>
+<h3 id="set-up-metadata-filesystem">设置元数据文件系统</h3>
+<p>
+由于在元数据加密密钥出现之前,用户数据分区中的所有内容均无法读取,因此分区表必须留出一个名为“元数据分区”的单独分区,用于存储保护该密钥的 Keymaster Blob。该元数据分区的大小应为 16MB。</p>
+<p>
+<code>fstab.hardware</code> 必须针对在该分区上的元数据系统纳入一个条目,并将其装载到 <code>/metadata</code>(包括 <code>formattable</code> 标记),以确保在启动时对其进行格式化。f2fs 文件系统不适用于较小的分区;在较小分区中,我们建议您改为使用 ext4。例如:</p>
+
+<pre class="prettyprint">/dev/block/bootdevice/by-name/metadata              /metadata          ext4        noatime,nosuid,nodev,discard                          wait,check,formattable</pre>
+<p>要确保 <code>/metadata</code> 装载点存在,请在 <code>BoardConfig-common.mk</code> 中添加下面这行代码:</p>
+
+<pre class="prettyprint">BOARD_USES_METADATA_PARTITION := true</pre>
+
+<h3 id="changes-to-the-init-sequence">更改 init 序列</h3>
+<p>
+在使用元数据加密时,必须在装载 <code>/data</code> 之前运行 <code>vold</code>。为了确保其提前足够长的时间开始运行,请将以下节添加到 <code>init.hardware.rc</code> 中:</p>
+
+<pre class="prettyprint"># We need vold early for metadata encryption
+on early-fs
+    start vold</pre>
+<p>
+Keymaster 必须在 init 尝试装载 <code>/data</code> 之前运行并准备就绪。
+</p>
+<p>
+ <code>init.hardware.rc</code> 应该已经包含一个 <code>mount_all</code> 指令,用于将 <code>/data</code> 本身装载到 <code>on
+late-fs</code> 节中。请在这行代码前面添加以下指令,以执行 <code>wait_for_keymaster</code> 服务:</p>
+
+<pre class="prettyprint">on late-fs
+   …
+    # Wait for keymaster
+    exec_start wait_for_keymaster
+
+    # Mount RW partitions which need run fsck
+    mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late</pre>
+
+<h3 id="switching-on-metadata-encryption">开启元数据加密</h3>
+<p>
+最后,将 <code>keydirectory=/metadata/vold/metadata_encryption</code> 添加到用户数据的 <code>fstab.hardware</code> 条目中:</p>
+
+<pre class="prettyprint">/dev/block/bootdevice/by-name/userdata              /data              f2fs        noatime,nosuid,nodev,discard latemount,wait,check,fileencryption=ice,keydirectory=/metadata/vold/metadata_encryption,quota,formattable</pre>
+
+<h2 id="validation">验证</h2>
+<p>在实现元数据加密时,请注意以下常见问题并测试您的实现。
+</p>
+
+<h3 id="common-issues">常见问题</h3>
+<p>
+在调用 <code>mount_all</code>(用于装载元数据加密的 <code>/data</code> 分区)时,<code>init</code> 会执行 vdc 工具。vdc 工具会通过 <code>vold</code> 连接到 <code>binder</code>,以设置元数据加密的设备并装载分区。在此调用期间,<code>init</code> 会被屏蔽,并且在 <code>mount_all</code> 完成之前,尝试读取或设置 <code>init</code> 属性的操作也会被屏蔽。在此阶段,如果 <code>vold</code> 的任何一部分工作在读取或设置某个属性时被直接或间接屏蔽,则会导致死锁。请务必确保 <code>vold</code> 能够完成读取密钥、与 Keymaster 交互以及装载数据目录的工作,而无需与 <code>init</code> 进一步交互。
+</p>
+<p>如果 Keymaster 在 <code>mount_all</code> 运行时没有完全启动,就不会响应 <code>vold</code>,直到从 <code>init</code> 读取到某些属性为止,从而导致上述死锁。按照相关规定将 <code>exec_start wait_for_keymaster</code> 放置在相关的 <code>mount_all</code> 调用之前,可确保 Keymaster 提前完全运行,从而避免此类死锁。
+</p>
+
+<h3 id="metadata-encryption-test">元数据加密测试</h3>
+<p>
+我们会将这些测试放到上游,但与此同时,请向 <code>Android.bp</code> 中添加几行代码,并将 <code>check_encryption.cpp</code> 添加到 <code><a href="https://android.googlesource.com/platform/system/vold/+/master">platform/system/vold</a></code> 以测试您的实现。</p>
+
+<h4 id="changes-to-android-bp">对 <code>Android.bp</code> 的更改</h4>
+<p>下面列出了对 <code>Android.bp</code> 的更改。
+</p>
+
+<pre class="prettyprint">...
+}
+
+cc_binary {
+    name: "vold",
+    defaults: [
+        "vold_default_flags",
+        "vold_default_libs",
+    ],
+
+    srcs: ["main.cpp"],
+    static_libs: ["libvold"],
+    product_variables: {
+        arc: {
+            static_libs: [
+                "arc_services_aidl",
+                "libarcobbvolume",
+            ],
+        },
+    },
+    init_rc: [
+        "vold.rc",
+        "wait_for_keymaster.rc",
+    ],
+
+    required: [
+        <strong>"check_encryption",</strong>
+        "mke2fs",
+        "vold_prepare_subdirs",
+        "wait_for_keymaster",
+    ],
+}
+...
+<strong>
+}
+
+cc_binary {
+    name: "check_encryption",
+    defaults: ["vold_default_flags"],
+    srcs: [
+        "FileDeviceUtils.cpp",
+        "check_encryption.cpp",
+    ],
+    shared_libs: [
+        "libbase",
+    ],
+}</strong></pre>
+
+<h4 id="add-check_encryption-cpp">添加 check_encryption.cpp</h4>
+
+<p>将 <code>check_encryption.cpp</code> 添加到 <code><a href="https://android.googlesource.com/platform/system/vold/+/master">platform/system/vold</a></code> 中。</p>
+
+<pre class="prettyprint">/*
+ * Copyright (C) 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.
+ */
+#include "FileDeviceUtils.h"
+
+#include &lt;cmath&gt;
+#include &lt;string&gt;
+
+#include &lt;assert.h&gt;
+#include &lt;stdio.h&gt;
+
+#include &lt;android-base/file.h&gt;
+#include &lt;android-base/logging.h&gt;
+#include &lt;android-base/unique_fd.h&gt;
+using android::base::unique_fd;
+using android::base::ReadFileToString;
+using android::base::WriteStringToFile;
+
+namespace android {
+namespace vold {
+const size_t sectorsize = 1 &lt;&lt; 12;
+const int sectorcount = 1024;
+static double randomness_score(const std::string&amp; checkme) {
+    unsigned int freq[256] = {0};
+    unsigned int sum = 256;
+    double loglaplace = 0;
+    for (auto b : checkme) {
+        loglaplace -= 8 + log2(static_cast&lt;double&gt;(++freq[static_cast&lt;uint8_t&gt;(b)]) / (sum++));
+    }
+    return loglaplace;
+    LOG(INFO) &lt;&lt; "Score: " &lt;&lt; loglaplace;  // if negative, not random
+    return loglaplace &lt; 0;
+}
+static bool run_test(const std::string&amp; device) {
+    unique_fd device_fd(open(device.c_str(), O_RDONLY | O_CLOEXEC));
+    if (device_fd.get() == -1) {
+        PLOG(ERROR) &lt;&lt; "Failed to open " &lt;&lt; device;
+        return false;
+    }
+    int randompassed = 0;
+    auto buf = std::string(sectorsize, '\0');
+    for (int i = 0; i &lt; sectorcount; i++) {
+        auto l = read(device_fd.get(), &amp;buf[0], buf.size());
+        if (l &lt; 1) {
+            PLOG(ERROR) &lt;&lt; "Failed read on sector " &lt;&lt; i;
+            return false;
+        }
+        if (((size_t)l) != buf.size()) {
+            LOG(ERROR) &lt;&lt; "Short read on sector " &lt;&lt; i;
+            return false;
+        }
+        auto score = randomness_score(buf);
+        if (score &gt;= 0) {
+            randompassed++;
+            LOG(INFO) &lt;&lt; "Passed randomness check on sector " &lt;&lt; i &lt;&lt; " with score " &lt;&lt; score;
+        } else {
+            LOG(ERROR) &lt;&lt; "Failed randomness check on sector " &lt;&lt; i &lt;&lt; " with score " &lt;&lt; score;
+        }
+    }
+    LOG(INFO) &lt;&lt; "Passed randomness check on " &lt;&lt; randompassed &lt;&lt; "/" &lt;&lt; sectorcount &lt;&lt; " sectors";
+    return randompassed == sectorcount;
+}
+}  // namespace vold
+}  // namespace android
+int main(int argc, const char* const argv[]) {
+    setenv("ANDROID_LOG_TAGS", "*:v", 1);
+    android::base::InitLogging(const_cast&lt;char**&gt;(argv), android::base::StderrLogger);
+    if (argc != 2) {
+        LOG(ERROR) &lt;&lt; "Usage: " &lt;&lt; argv[0] &lt;&lt; " &lt;device&gt;";
+        LOG(ERROR) &lt;&lt; "example: " &lt;&lt; argv[0] &lt;&lt; " /dev/block/bootdevice/by-name/userdata";
+        return -1;
+    }
+    android::vold::run_test(std::string(argv[1]));
+    return 0;
+}</pre>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/enhancements/enhancements9.html b/zh-cn/security/enhancements/enhancements9.html
new file mode 100644
index 0000000..aa1cade
--- /dev/null
+++ b/zh-cn/security/enhancements/enhancements9.html
@@ -0,0 +1,26 @@
+<html devsite><head>
+    <title>Anroid 9 中的安全增强功能</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>每个 Android 版本中都包含数十种用于保护用户的安全增强功能。如需 Android 9 中提供的一些主要安全增强功能的列表,请参阅 <a href="/setup/start/p-release-notes#security_features">Android 版本说明</a><a>。
+</a></p><a>
+
+</a></body></html>
\ No newline at end of file
diff --git a/zh-cn/security/index.html b/zh-cn/security/index.html
index 35c5e0e..18573db 100644
--- a/zh-cn/security/index.html
+++ b/zh-cn/security/index.html
@@ -52,7 +52,8 @@
 <p>
 Android 提供了一个适用于移动设备的开放源代码平台和应用环境。
 </p>
-<p>以下各个部分和页面介绍了 Android 平台的安全功能。<em></em>图 1 总结了 Android 软件堆栈各个层的安全组件和注意事项。每个组件都假定下面的组件均已采取适当的安全措施。除了作为 Root 代码运行的少量 Android 操作系统代码外,Linux 内核上方的所有代码都受应用沙盒的限制。
+<p>
+以下各个部分和页面介绍了 Android 平台的安全功能。<em></em>图 1 总结了 Android 软件堆栈各个层的安全组件和注意事项。每个组件都假定下面的组件均已采取适当的安全措施。除了作为 Root 代码运行的少量 Android 操作系统代码外,Linux 内核上方的所有代码都受应用沙盒的限制。
 </p>
 
 <p><img alt="图 1:Android 软件堆栈" src="images/android_software_stack.png"/></p>
@@ -84,7 +85,7 @@
 <ul>
   <li><strong>Google Play</strong>:Google Play 是一系列服务的总称。借助这些服务,用户可以通过自己的 Android 设备或网络发现、安装和购买应用。Google Play 可让开发者轻松覆盖 Android 用户和潜在客户。此外,Google Play 还提供社区审核、应用<a href="https://developer.android.com/guide/publishing/licensing.html">许可验证</a>、应用安全扫描以及其他安全服务。</li>
   <li><strong>Android 更新</strong>:Android 更新服务可为某些 Android 设备提供新功能和安全更新,其中包括通过网络或无线下载 (OTA) 方式提供的更新。</li>
-  <li><strong>应用服务</strong>:可让 Android 应用使用云端功能(例如,应用数据和设置<a href="https://developer.android.com/guide/topics/data/backup.html">备份</a>功能,以及用于推送消息的“云端至设备消息传递”(<a href="https://developers.google.com/cloud-messaging/">C2DM</a>) 功能)的框架。</li>
+  <li><strong>应用服务</strong>:可让 Android 应用使用云端功能(例如,应用数据和设置<a href="https://developer.android.com/guide/topics/data/backup.html">备份</a>功能,以及用于推送消息的“云端至设备消息传递”(<a href="https://developers.google.com/cloud-messaging/">C2DM</a>) 功能)的框架。</li>
   <li><strong>验证应用</strong>:在用户安装有害应用时发出警告或自动阻止安装;持续扫描设备上的应用,并在发现<a href="https://support.google.com/accounts/answer/2812853">有害应用</a>时发出警告或将其移除。
   </li>
   <li><strong>SafetyNet</strong>:一款旨在保护隐私的入侵检测系统,能够帮助 Google 跟踪和降低已知的安全威胁,并能够发现新的安全威胁。</li>
diff --git a/zh-cn/security/keystore/index.html b/zh-cn/security/keystore/index.html
index 11f00ad..131decc 100644
--- a/zh-cn/security/keystore/index.html
+++ b/zh-cn/security/keystore/index.html
@@ -20,11 +20,18 @@
       limitations under the License.
   -->
 
-<p>借助系统芯片 (SoC) 中提供的可信执行环境,Android 设备可以为 Android 操作系统、平台服务甚至是第三方应用提供由硬件支持的强大安全服务。寻求 Android 专用扩展程序的开发者应访问 <a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.html">android.security.keystore</a>。</p>
+<p>借助系统芯片 (SoC) 中提供的可信执行环境,Android 设备可以为 Android 操作系统、平台服务甚至是第三方应用提供由硬件支持的强大安全服务。寻求 Android 专用扩展程序的开发者应访问 <a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.html" class="external">android.security.keystore</a>。</p>
 
 <p>在 Android 6.0 之前的版本中,Android 已有一个非常简单的由硬件支持的加密服务 API(由 0.2 和 0.3 版的 Keymaster 硬件抽象层 (HAL) 提供)。该 Keystore 能够提供数字签名和验证操作,以及不对称签名密钥对的生成和导入操作。该 API 在许多设备上都已实现,但有许多安全目标无法只通过一个签名 API 来轻松达成。Android 6.0 中的 Keystore 在该 Keystore API 的基础上进行了扩展,能够提供更广泛的功能。</p>
 
-<p>在 Android 6.0 中,Keystore 不仅增加了<a href="/security/keystore/features.html">对称加密基元</a>(AES 和 HMAC),还增加了针对由硬件支持的密钥的访问控制系统。访问控制在密钥生成期间指定,并会在密钥的整个生命周期内被强制执行。可以将密钥限定为仅在用户通过身份验证后才可使用,并且只能用于指定的目的或只有在具有指定的加密参数时才可使用。要了解详情,请参阅<a href="/security/keystore/tags">授权标记</a>和<a href="/security/keystore/implementer-ref">函数</a>页面。</p>
+<p>在 Android 6.0 中,Keystore 不仅增加了<a href="/security/keystore/features">对称加密基元</a>(AES 和 HMAC),还增加了针对由硬件支持的密钥的访问控制系统。访问控制在密钥生成期间指定,并会在密钥的整个生命周期内被强制执行。可以将密钥限定为仅在用户通过身份验证后才可使用,并且只能用于指定的目的或只有在具有指定的加密参数时才可使用。要了解详情,请参阅<a href="/security/keystore/tags">授权标记</a>和<a href="/security/keystore/implementer-ref">函数</a>页面。</p>
+
+<p>除了扩大加密基元的范围外,Android 6.0 中的 Keystore 还增加了以下内容:</p>
+
+<ul>
+  <li>一个使用控制方案,用于限制密钥的使用,并降低因滥用密钥而损害安全性的风险</li>
+  <li>一个访问控制方案,用于限定只有指定的用户和客户端能够使用相应密钥,并且只能在规定的时间范围内使用</li>
+</ul>
 
 <p>
 在 Android 7.0 中,Keymaster 2 增加了对密钥认证和版本绑定的支持。
@@ -41,20 +48,45 @@
 除了此接口修订之外,Android 8.0 还扩展了 Keymaster 2 的认证功能,以支持 <a href="/security/keystore/attestation#id-attestation">ID 认证</a>。
 ID 认证提供了一种受限且可选的机制来严格认证硬件标识符,例如设备序列号、产品名称和手机 ID (IMEI/MEID)。要实现此附加功能,需更改 ASN.1 认证架构以添加 ID 认证。Keymaster 实现需要通过某种安全方式来检索相关的数据项,还需要定义一种安全永久地停用该功能的机制。
 </p>
-
-<h2 id="goals">目标</h2>
-
-<p>Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元,以便使用访问受控且由硬件支持的密钥实现相关协议。</p>
-
-<p>除了扩大加密基元的范围外,Android 6.0 中的 Keystore 还增加了以下内容:</p>
-
+<p>
+在 Android 9 中,更新包括:
+</p>
 <ul>
-  <li>一个使用控制方案,用于限制密钥的使用,并降低因滥用密钥而损害安全性的风险</li>
-  <li>一个访问控制方案,用于限定只有指定的用户和客户端能够使用相应密钥,并且只能在规定的时间范围内使用</li>
+  <li>更新到 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/4.0/" class="external">Keymaster 4</a></li>
+  <li>对嵌入式安全元件的支持</li>
+  <li>对安全密钥导入的支持</li>
+  <li>对 3DES 加密的支持</li>
+  <li>更改了版本绑定,以便 boot.img 和 system.img 分别设置版本以允许独立更新</li>
 </ul>
+<h2 id="glossary">术语库</h2>
+<p>
+下面简要介绍了各个 Keystore 组件及其关系。
+</p>
+<p>
+<strong>AndroidKeystore</strong> 是供应用访问 Keystore 功能的 Android Framework API 和组件。它是作为 Java Cryptography Architecture API 的扩展程序实现的,包含在应用自己的进程空间中运行的 Java 代码。<code>AndroidKeystore</code> 通过将与 Keystore 行为有关的应用请求转发到 Keystore 守护进程来执行这些请求。
+</p>
+<p>
+<strong>Keystore 守护进程</strong>是一个 Android 系统守护进程,可通过 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/security/IKeystoreService.aidl" class="external">Binder API</a> 提供对所有 Keystore 功能的访问权限。它负责存储“密钥 Blob”,后者包含已加密的实际密钥材料,因此 Keystore 可以存储但不能使用或显示这些材料。
+</p>
+<p>
+<strong>keymasterd</strong> 是一个 HIDL 服务器,可提供对 Keymaster TA 的访问权限。(此名称未进行标准化,仅用于说明概念。)
+</p>
+<p>
+<strong>Keymaster TA</strong>(可信应用)是在安全环境(大多数情况为 ARM SoC 上的 TrustZone)中运行的软件。它可提供所有安全的 Keystore 操作,能够访问原始密钥材料,在密钥上验证所有访问控制条件,等等。</p>
+<p>
+<strong>LockSettingsService</strong> 是负责用户身份验证(包括密码和指纹)的 Android 系统组件。它不是 Keystore 的一部分却与其相关,因为很多 Keystore 密钥操作都需要对用户进行身份验证。<code>LockSettingsService</code> 与 Gatekeeper TA 和 Fingerprint TA 进行交互以获取身份验证令牌,并将其提供给 Keystore 守护进程,这些令牌最终将由 Keymaster TA 应用使用。
+</p>
+<p>
+<strong>Gatekeeper TA</strong>(可信应用)是在安全环境中运行的另一个组件,它负责验证用户密码并生成身份验证令牌(用于向 Keymaster TA 证明已在特定时间点完成对特定用户的身份验证)。
+</p>
+<p>
+<strong>Fingerprint TA</strong>(可信应用)是在安全环境中运行的另一个组件,它负责验证用户指纹并生成身份验证令牌(用于向 Keymaster TA 证明已在特定时间点完成对特定用户的身份验证)。
+</p>
 
 <h2 id="architecture">架构</h2>
 
+<p>Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元,以便使用访问受控且由硬件支持的密钥实现相关协议。</p>
+
 <p>Keymaster HAL 是由原始设备制造商 (OEM) 提供的动态加载库,Keystore 服务使用它来提供由硬件支持的加密服务。为了确保安全性,HAL 实现不会在用户空间(甚至是内核空间)中执行任何敏感操作。敏感操作会被分配给通过某个内核接口连接的安全处理器。
 最终的架构如下所示:</p>
 
@@ -63,7 +95,7 @@
 </div>
 <p class="img-caption"><strong>图 1.</strong> 访问 Keymaster</p>
 
-<p>在 Android 设备中,Keymaster HAL 的“客户端”包含多个层(例如,应用、框架、Keystore 守护进程),但在本文档中可以将其忽略。这意味着,所介绍的 Keymaster HAL API 为底层 API,供平台内部组件使用,不面向应用开发者提供。<a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.html">Android 开发者网站</a>对更高层 API(第 23 层 API)进行了介绍。</p>
+<p>在 Android 设备中,Keymaster HAL 的“客户端”包含多个层(例如,应用、框架、Keystore 守护进程),但在本文档中可以将其忽略。这意味着,所介绍的 Keymaster HAL API 为底层 API,供平台内部组件使用,不面向应用开发者提供。<a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.html" class="external">Android 开发者网站</a>对更高层 API 进行了介绍。</p>
 
 <p>Keymaster HAL 的目的不是实现安全敏感型算法,而只是对发送到安全域的请求进行编排和解排。传输格式是由实现定义的。</p>
 
@@ -131,7 +163,6 @@
 也就是说,<code>generate_cb</code> 是一个将接受 generate 子句中列出的返回值的函数。HAL 实现类会覆盖此 <code>generateKey</code> 方法并调用 <code>generate_cb</code> 函数指针,以将操作结果返回给调用程序。请注意,该函数指针调用是<strong>同步的</strong>。调用程序调用 <code>generateKey</code>,同时 <code>generateKey</code> 调用所提供的函数指针,该指针在完成执行操作后将控件返回到 <code>generateKey</code> 实现,而后该实现又返回到调用程序。
 </p>
 <p>
-要查看详细示例,请参阅 <code>hardware/interfaces/keymaster/3.0/default/KeymasterDevice.cpp</code> 中的默认实现。
-该默认实现可向后兼容采用旧式 keymaster0、keymaster1 或 keymaster2 HAL 的设备。</p>
+要查看详细示例,请参阅 <code>hardware/interfaces/keymaster/3.0/default/KeymasterDevice.cpp</code> 中的默认实现。该默认实现可向后兼容采用旧式 keymaster0、keymaster1 或 keymaster2 HAL 的设备。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/keystore/tags.html b/zh-cn/security/keystore/tags.html
index 5ed452d..1e847c8 100644
--- a/zh-cn/security/keystore/tags.html
+++ b/zh-cn/security/keystore/tags.html
@@ -22,7 +22,7 @@
 
 <p>本页提供了一些对 Keymaster HAL 实现人员很有帮助的详细信息。
 其中介绍了 HAL 中的每个标记、提供相应标记的 Keymaster 版本以及相应标记是否可重复使用。除非标记说明中另有注明,否则以下所有标记都是在密钥生成期间用于指定密钥特性。</p>
-<p>对于 Keymaster 4,标记是在 <code>platform/hardware/interfaces/keymaster/<var>keymaster-version</var>/types.hal</code> 中定义的;例如,Keymaster 3 为 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/3.0/types.hal" class="external">3.0/types.hal</a>,Keymaster 4 为 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/4.0/types.hal" class="external">4.0/types.hal</a>。对于 Keymaster 2 及更低版本,标记是在 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware" class="external">
+<p>对于 Keymaster 4,标记是在 <code>platform/hardware/interfaces/keymaster/<var>keymaster-version</var>/types.hal</code> 中定义的;例如,如果是 Keymaster 3,则在 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/3.0/types.hal" class="external">3.0/types.hal</a> 中定义,如果是 Keymaster 4,则在 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/4.0/types.hal" class="external">4.0/types.hal</a> 中定义。对于 Keymaster 2 及更低版本,标记是在 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware" class="external">
 platform/hardware/libhardware/include/hardware/keymaster_defs.h</a></code> 中定义的。</p>
 
 <p>要了解具体函数,请参阅 <a href="/security/keystore/implementer-ref">Keymaster 函数</a>页面。</p>
@@ -138,7 +138,7 @@
 <p><strong>版本</strong>:3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>提供设备的品牌名称(与 Android 中的 <code>Build.BRAND</code> 返回的值相同)。仅在请求认证该设备的标识符时才会设置此字段。</p>
+<p>提供设备的品牌名称(与 Android 中的 <code>Build.BRAND</code> 返回的名称相同)。仅在请求认证该设备的标识符时才会设置此字段。</p>
 <p>如果该设备不支持 ID 认证(或者之前已调用 <code>destroyAttestationIds()</code> 且该设备无法再证明其 ID),则任何包含该标记的密钥认证请求都会失败并显示 <code>ErrorCode::CANNOT_ATTEST_IDS</code>。</p>
 <p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
 
@@ -146,7 +146,7 @@
 <p><strong>版本</strong>:3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>提供设备的设备名称,与 Android 中的 <code>Build.DEVICE</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
+<p>提供设备的设备名称(与 Android 中的 <code>Build.DEVICE</code> 返回的名称相同)。仅在请求认证该设备的标识符时才会设置此字段。</p>
 <p>如果该设备不支持 ID 认证(或者之前已调用 <code>destroyAttestationIds()</code> 且该设备无法再证明其 ID),则任何包含该标记的密钥认证请求都会失败并显示 <code>ErrorCode::CANNOT_ATTEST_IDS</code>。</p>
 <p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
 
@@ -162,7 +162,7 @@
 <p><strong>版本</strong>:3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>提供设备的制造商名称,与 Android 中的 <code>Build.MANUFACTURER</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
+<p>提供设备的制造商名称(与 Android 中的 <code>Build.MANUFACTURER</code> 返回的名称相同)。仅在请求认证该设备的标识符时才会设置此字段。</p>
 <p>如果该设备不支持 ID 认证(或者之前已调用 <code>destroyAttestationIds()</code> 且该设备无法再证明其 ID),则任何包含该标记的密钥认证请求都会失败并显示 <code>ErrorCode::CANNOT_ATTEST_IDS</code>。</p>
 <p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
 
@@ -178,7 +178,7 @@
 <p><strong>版本</strong>:3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>提供设备的型号名称,与 Android 中的 <code>Build.MODEL</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
+<p>提供设备的型号名称(与 Android 中的 <code>Build.MODEL</code> 返回的名称相同)。仅在请求认证该设备的标识符时才会设置此字段。</p>
 <p>如果该设备不支持 ID 认证(或者之前已调用 <code>destroyAttestationIds()</code> 且该设备无法再证明其 ID),则任何包含该标记的密钥认证请求都会失败并显示 <code>ErrorCode::CANNOT_ATTEST_IDS</code>。</p>
 
 <p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
@@ -187,7 +187,7 @@
 <p><strong>版本</strong>:3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>提供设备的产品名称,与 Android 中的 <code>Build.PRODUCT</code> 返回的值相同。仅在请求认证该设备的标识符时才会设置此字段。</p>
+<p>提供设备的产品名称(与 Android 中的 <code>Build.PRODUCT</code> 返回的名称相同)。仅在请求认证该设备的标识符时才会设置此字段。</p>
 <p>如果该设备不支持 ID 认证(或者之前已调用 <code>destroyAttestationIds()</code> 且该设备无法再证明其 ID),则任何包含该标记的密钥认证请求都会失败并显示 <code>ErrorCode::CANNOT_ATTEST_IDS</code>。</p>
 <p>此标记的值是一个 Blob(任意长度的字节数数组)。</p>
 
@@ -213,7 +213,7 @@
 <p><strong>版本</strong>:1、2、3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>用于向 <a href="/security/keystore/implementer-ref#begin">begin</a>、<a href="/security/keystore/implementer-ref#update">update</a> 或 <a href="/security/keystore/implementer-ref#finish">finish</a> 提供<a href="/security/keystore/authentication/#authentication_token_format">身份验证令牌</a>,以便向要求用户通过身份验证的密钥操作(密钥带有 <a href="#user_secure_id">Tag::USER_SECURE_ID</a>)证明相应用户已通过身份验证。</p>
+<p>用于向 <a href="/security/keystore/authentication/#authentication_token_format">begin</a>、<a href="/security/keystore/implementer-ref#begin">update</a> 或 <a href="/security/keystore/implementer-ref#update">finish</a> 提供<a href="/security/keystore/implementer-ref#finish">身份验证令牌</a>,以便向要求用户通过身份验证的密钥操作(密钥带有 <a href="#user_secure_id">Tag::USER_SECURE_ID</a>)证明相应用户已通过身份验证。</p>
 
 <p>此标记的值是一个包含 <code>hw_auth_token_t</code> 结构的 Blob。</p>
 
@@ -407,7 +407,7 @@
 <p><strong>是否可重复使用</strong>?否</p>
 
 <p>用于指定相应密钥的大小(以位数计,按适用于相应密钥算法的一般方式衡量)。例如,对于 RSA 密钥,<code>Tag::KEY_SIZE</code> 用于指定公开模数的大小。对于 AES 密钥,此标记用于指定密钥私密材料的长度。</p>
-<p class="note">在 Keymaster 2 及更高版本中,<code>Tag::KEY_SIZE</code> 不再是选择 ECC(椭圆曲线加密)曲线的首选机制。虽然对于其他密钥类型而言没有变化,但 ECC 曲线是使用标记 <a href="#ec_curve"><code>Tag::EC_CURVE</code></a> 选择的。</p>
+<p class="note">在 Keymaster 2 及更高版本中,<code>Tag::KEY_SIZE</code> 不再是选择 ECC(椭圆曲线加密)曲线的首选机制。虽然对于其他密钥类型而言,该标记没有任何变化,但 ECC 曲线是使用标记 <a href="#ec_curve"><code>Tag::EC_CURVE</code></a> 选择的。</p>
 
 <h2 id="mac_length">Tag::MAC_LENGTH</h2>
 
@@ -448,7 +448,7 @@
 
 <p>此标记的值是一个 32 位的整数,表示允许的操作之间间隔的秒数。</p>
 
-<p>当有操作使用带有此标记的某个密钥时,请在 <a href="/security/keystore/implementer-ref#finish">finish</a> 或 <a href="/security/keystore/implementer-ref#abort">abort</a> 调用期间启动一个计时器。在计时器表明通过 <code>Tag::MIN_SECONDS_BETWEEN_OPS</code> 指定的间隔时间已过去之前,收到的所有 <a href="/security/keystore/implementer-ref#begin">begin</a> 调用都会失败并显示 <code>ErrorCode::KEY_RATE_LIMIT_EXCEEDED</code>。这意味着 Trustlet 会为带有此标记的密钥维护一份使用次数计数器表格。由于 Keymaster 内存的大小通常有限制,因此该表格可以具有固定的最大大小,并且当该表格被占满时,如果有操作尝试使用带有此标记的密钥,Keymaster 可以使这些操作失败。该表格需要容纳至少 32 个使用中的密钥,而且当密钥最小使用间隔到期时,需要主动重复使用该表格中的位置。如果某项操作因该表格已被占满而失败,则 Keymaster 会返回 <code>ErrorCode::TOO_MANY_OPERATIONS</code>。</p>
+<p>当有操作使用带有此标记的某个密钥时,请在 <a href="/security/keystore/implementer-ref#finish">finish</a> 或 <a href="/security/keystore/implementer-ref#abort">abort</a> 调用期间启动定时器。在定时器表明通过 <code>Tag::MIN_SECONDS_BETWEEN_OPS</code> 指定的间隔时间已过去之前,收到的所有 <a href="/security/keystore/implementer-ref#begin">begin</a> 调用都会失败并显示 <code>ErrorCode::KEY_RATE_LIMIT_EXCEEDED</code>。这意味着 Trustlet 会为带有此标记的密钥维护一份使用次数计数器表格。由于 Keymaster 内存的大小通常有限制,因此该表格可以具有固定的最大大小,并且当该表格被占满时,如果有操作尝试使用带有此标记的密钥,Keymaster 可以使这些操作失败。该表格需要容纳至少 32 个使用中的密钥,而且当密钥最小使用间隔到期时,需要主动重复使用该表格中的位置。如果某项操作因该表格已被占满而失败,则 Keymaster 会返回 <code>ErrorCode::TOO_MANY_OPERATIONS</code>。</p>
 
 <h2 id="no_auth_required">Tag::NO_AUTH_REQUIRED</h2>
 
@@ -714,8 +714,7 @@
 <p>该标记的值是形式为 YYYYMMDD 的整数,其中 YYYY 表示上次更新时间的四位数年份,MM 表示上次更新时间的两位数月份,DD 表示上次更新时间的两位数日期。例如,对于上次更新时间为 2018 年 6 月 5 日的 Android 设备上生成的密钥,其值将表示为 20180605。</p>
 <p>IKeymasterDevice HAL 必须从系统属性 <code>ro.vendor.build.security_patch</code> 读取当前供应商补丁程序级别,并在 HAL 首次加载时将其传递给安全环境(相应机制是由实现定义的)。在下次启动完成前,安全环境不得接受其他补丁程序级别。
 </p>
-<p>
-必须由硬件强制执行。
+<p>必须由硬件强制执行。
 </p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/keystore/version-binding.html b/zh-cn/security/keystore/version-binding.html
index f3c10ab..c35806a 100644
--- a/zh-cn/security/keystore/version-binding.html
+++ b/zh-cn/security/keystore/version-binding.html
@@ -21,8 +21,36 @@
   -->
 
 <p>
-在 Keymaster 1 中,所有 Keymaster 密钥都以加密形式绑定至设备的信任根或已验证的启动密钥。<em></em>在 Keymaster 2 及更高版本中,所有密钥也绑定至系统映像的操作系统和补丁程序级别。这样可确保在旧版系统或 TEE 软件中发现漏洞的攻击者无法将设备回滚到易受攻击的版本,也无法使用在较新版本中创建的密钥。此外,在已经升级到更新的版本或补丁程序级别的设备上使用指定版本和补丁程序级别的密钥时,需要先升级该密钥才能使用,因为该密钥的旧版本已失效。这样一来,当设备升级时,密钥会随着设备一起“升级”,但是将设备恢复到任何一个旧版本都会导致密钥无法使用。
+在 Keymaster 1 中,所有 Keymaster 密钥都以加密形式绑定至设备的信任根或验证启动密钥。<em></em>在 Keymaster 2 和 3 中,所有密钥也绑定至系统映像的操作系统和补丁程序级别。这样可确保在旧版系统或 TEE 软件中发现漏洞的攻击者无法将设备回滚到含有漏洞的版本,也无法使用在较新版本中创建的密钥。此外,在已经升级到更新的版本或补丁程序级别的设备上使用指定版本和补丁程序级别的密钥时,需要先升级该密钥才能使用,因为该密钥的旧版本已失效。这样一来,当设备升级时,密钥会随着设备一起“升级”,但是将设备恢复到任何一个旧版本都会导致密钥无法使用。
 </p>
+<p>
+为了支持 Treble 的模块化结构并终止 system.img 到 boot.img 的绑定,Keymaster 4 将密钥版本绑定模式更改为每个分区都具有单独的补丁程序级别。这就让每个分区都可以独立更新,同时仍可提供回滚保护。
+</p>
+<p>
+在 Android 9 中,<code>boot</code> 分区、<code>system</code> 分区和 <code>vendor</code> 分区都拥有自己的补丁程序级别。
+</p><ul>
+  <li>包含 Android 验证启动 (AVB) 的设备可以将所有补丁程序级别和系统版本放在 vbmeta 中,因此引导加载程序能够将这些内容提供给 Keymaster。对于链接的分区,相应分区的版本信息位于链接的 vbmeta 中。通常,版本信息应位于包含指定分区的验证数据(哈希或哈希树)的 vbmeta 结构中。
+</li>
+<li>在没有 AVB 的设备上:
+  <ul>
+    <li>验证启动实现需要将版本元数据的哈希提供给引导加载程序,以便引导加载程序能够将其提供给 Keymaster。
+    </li>
+    <li>boot.img 可以继续在标头中存储补丁程序级别。</li>
+    <li>system.img 可以继续在只读属性中存储补丁程序级别和操作系统版本。</li>
+    <li>vendor.img 在只读属性 <code>ro.vendor.build.version.security_patch</code> 中存储补丁程序级别。</li>
+    <li>引导加载程序可以将验证启动验证过的所有数据的哈希提供给 Keymaster。</li>
+  </ul>
+</li>
+<li>在 Android 9 中,使用以下标记提供对应分区的版本信息:
+  <ul>
+    <li><code>VENDOR_PATCH_LEVEL</code>:<code>vendor</code> 分区</li>
+    <li><code>BOOT_PATCH_LEVEL</code>:<code>boot</code> 分区</li>
+    <li><code>OS_PATCH_LEVEL</code> 和 <code>OS_VERSION</code>:<code>system</code> 分区(<code>OS_VERSION</code> 已从 boot.img 标头中移除)。</li>
+  </ul>
+</li>
+<li>
+Keymaster 实现应单独处理所有补丁程序级别。如果所有版本信息都与某个密钥的相关值相匹配,则密钥可用;如果需要,<code>IKeymaster::upgradeDevice()</code> 可滚动到更高的补丁程序级别。</li>
+</ul>
 
 <h2 id="hal-changes">HAL 变更</h2>
 <p>
diff --git a/zh-cn/security/overview/acknowledgements.html b/zh-cn/security/overview/acknowledgements.html
index c25e064..e19025a 100644
--- a/zh-cn/security/overview/acknowledgements.html
+++ b/zh-cn/security/overview/acknowledgements.html
@@ -25,6 +25,70 @@
 <h2 id="2018">2018 年</h2>
 <p>2018 年的安全致谢信息将按月列出。过去几年的致谢信息是列在一起的。</p>
 
+<h4 id="aug-2018">8 月</h4>
+
+<table>
+  <colgroup><col width="70%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+   <th>研究人员</th>
+   <th>CVE</th>
+  </tr>
+  <tr>
+   <td>L.O. 团队的 Chao Dai</td>
+   <td>CVE-2018-9437</td>
+  </tr>
+  <tr>
+   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="weibo.com/csddl" class="external">Chong Wang</a></td>
+   <td>CVE-2018-9436、CVE-2018-9448、CVE-2018-9454、CVE-2018-9455</td>
+  </tr>
+  <tr>
+   <td>Symantec 的 Dinesh Venkatesan (<a href="https://twitter.com/malwareresearch" class="external">@malwareresearch</a>)</td>
+   <td>CVE-2017-13295</td>
+  </tr>
+  <tr>
+   <td><a href="https://www.linkedin.com/in/dzima" class="external">Dzmitry Lukyanenka</a></td>
+   <td>CVE-2018-9459、CVE-2018-9461</td>
+  </tr>
+  <tr>
+   <td><a href="http://www.ms509.com" class="external">MS509Team</a> 的 En He (<a href="https://twitter.com/heeeeen4x" class="external">@heeeeen4x</a>) 和 Bo Liu</td>
+   <td>CVE-2017-13242、CVE-2018-9457</td>
+  </tr>
+  <tr>
+   <td><a href="mailto:[email protected]" class="external">Francesco Pinci</a></td>
+   <td>CVE-2018-9447</td>
+  </tr>
+  <tr>
+  </tr><tr>
+   <td>Google Project Zero 的 Jann Horn</td>
+   <td>CVE-2018-9445</td>
+  </tr>
+  <tr>
+   <td>Introne Apps 的 Joshua Steiner</td>
+   <td>CVE-2017-13322</td>
+  </tr>
+  <tr>
+   <td>Scott Bauer (<a href="https://twitter.com/ScottyBauer1" class="external">@ScottyBauer1</a>)</td>
+   <td>CVE-2018-9441</td>
+  </tr>
+  <tr>
+   <td>Tencent Blade 团队</td>
+   <td>CVE-2017-18306、CVE-2017-18307</td>
+  </tr>
+  <tr>
+   <td><a href="http://c0reteam.org" class="external">CORE 团队</a>的 Tong Lin (<a href="mailto:[email protected]" class="external">[email protected]</a>) 和周明建 (<a href="https://twitter.com/Mingjian_Zhou" class="external">@Mingjian_Zhou</a>)</td>
+   <td>CVE-2018-9439</td>
+  </tr>
+  <tr>
+   <td><a href="http://www.trendmicro.com" class="external">趋势科技</a><a href="http://blog.trendmicro.com/trendlabs-security-intelligence/category/mobile/" class="external">移动安全研究团队</a>的 V.E.O (<a href="https://twitter.com/vysea" class="external">@VYSEa</a>)</td>
+   <td>CVE-2018-9444</td>
+  </tr>
+  <tr>
+   <td>奇虎 360 科技有限公司成都安全响应中心的<a href="weibo.com/ele7enxxh" class="external">韩子诺</a></td>
+   <td>CVE-2018-9435、CVE-2018-9446、CVE-2018-9449、CVE-2018-9450、CVE-2018-9451、CVE-2018-9453</td>
+  </tr>
+</tbody></table>
+
 <h4 id="july-2018">7 月</h4>
  <table>
   <colgroup><col width="70%" />
@@ -34,7 +98,7 @@
    <th>CVE</th>
   </tr>
   <tr>
-   <td>阿里巴巴安全团队潘多拉实验室的 Baozeng Ding (丁保增) (<a href="https://twitter.com/sploving1">@sploving</a>)</td>
+   <td>阿里巴巴安全团队潘多拉实验室的丁保增 (<a href="https://twitter.com/sploving1">@sploving</a>)</td>
    <td>CVE-2018-9422</td>
   </tr>
   <tr>
@@ -58,7 +122,7 @@
    <td>CVE-2018-9434</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广 (<a href="https://twitter.com/oldfresher">@oldfresher</a>)</td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的戴建军 (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广 (<a href="https://twitter.com/oldfresher">@oldfresher</a>)</td>
    <td>CVE-2018-9418、CVE-2018-9413、CVE-2018-9365</td>
   </tr>
   <tr>
@@ -82,11 +146,11 @@
    <td>CVE-2018-9421、CVE-2018-9420</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
+   <td>奇虎 360 科技有限公司 IceSword 实验室的郭永刚 (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
    <td>CVE-2018-9415</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 Zinuo Han (<a href="http://weibo.com/ele7enxxh">weibo.com/ele7enxxh</a>)</td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的韩子诺 (<a href="http://weibo.com/ele7enxxh">weibo.com/ele7enxxh</a>)</td>
    <td>CVE-2018-9410、CVE-2018-9424、CVE-2018-9431</td>
   </tr>
 </tbody></table>
@@ -100,7 +164,7 @@
    <th>CVE</th>
   </tr>
   <tr>
-   <td>阿里巴巴安全团队潘多拉实验室的 Baozeng Ding (丁保增) (<a href="https://twitter.com/sploving1">@sploving1</a>)</td>
+   <td>阿里巴巴安全团队潘多拉实验室的丁保增 (<a href="https://twitter.com/sploving1">@sploving1</a>)</td>
    <td>CVE-2018-5857、CVE-2018-9389</td>
   </tr>
   <tr>
@@ -112,11 +176,11 @@
    <td>CVE-2018-9348</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Hao Chen 和龚广</td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的陈豪和龚广</td>
    <td>CVE-2018-5899</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广 (<a href="https://twitter.com/oldfresher">@oldfresher</a>)</td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的戴建军 (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广 (<a href="https://twitter.com/oldfresher">@oldfresher</a>)</td>
    <td>CVE-2018-9381、CVE-2018-9358,<br />CVE-2018-9359、CVE-2018-9360,<br />CVE-2018-9361、CVE-2018-9357,<br />CVE-2018-9356</td>
   </tr>
   <tr>
@@ -124,8 +188,7 @@
    <td>CVE-2018-5898</td>
   </tr>
   <tr>
-   <td><a href="https://www.linkedin.com/in/jose-maria-ariel-martinez-juarez-7910a189/">
-   Jose Martinez</a></td>
+   <td><a href="https://www.linkedin.com/in/jose-maria-ariel-martinez-juarez-7910a189/">Jose Martinez</a></td>
    <td>CVE-2018-5146</td>
   </tr>
   <tr>
@@ -137,7 +200,7 @@
    <td>CVE-2018-9339</td>
   </tr>
   <tr>
-   <td>C0RE 团队的 Mingjian Zhou (周明建) (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
+   <td>C0RE 团队的周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
    <td>CVE-2018-9344</td>
   </tr>
   <tr>
@@ -145,7 +208,7 @@
    <td>CVE-2017-13230、CVE-2018-9347</td>
   </tr>
   <tr>
-   <td>百度安全实验室的丁鹏飞、包沉浮和韦韬<br /></td>
+   <td>百度安全实验室的<br />丁鹏飞、包沉浮和韦韬</td>
    <td>CVE-2018-5832</td>
   </tr>
   <tr>
@@ -165,7 +228,7 @@
    <td>CVE-2018-9345、CVE-2018-9346</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
+   <td>奇虎 360 科技有限公司 IceSword 实验室的郭永刚 (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
    <td>CVE-2017-0564</td>
   </tr>
   <tr>
@@ -177,7 +240,7 @@
    <td>CVE-2018-9363</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 Zinuo Han</td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的韩子诺</td>
    <td>CVE-2018-9340、CVE-2018-9338、<br />CVE-2018-9378</td>
   </tr>
 </tbody></table>
@@ -199,7 +262,7 @@
    <td>CVE-2017-6293、CVE-2018-6246</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Gengjia Chen (<a href="https://twitter.com/chengjia4574">@chengjia4574</a>) 和 <a href="http://weibo.com/jfpan">pjf</a></td>
+   <td>奇虎 360 科技有限公司 IceSword 实验室的陈耿佳 (<a href="https://twitter.com/chengjia4574">@chengjia4574</a>) 和 <a href="http://weibo.com/jfpan">pjf</a></td>
    <td>CVE-2017-18153</td>
   </tr>
   <tr>
@@ -223,8 +286,8 @@
    <td>CVE-2017-15857、CVE-2018-5852</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/ele7enxxh">Zinuo Han</a></td>
-   <td>CVE-2017-13321、CVE-2017-13315、CVE-2017-13318、CVE-2017-13323、CVE-2017-13312、CVE-2017-13319、CVE-2017-13317</td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的<a href="http://weibo.com/ele7enxxh">韩子诺</a></td>
+   <td>CVE-2017-13321、CVE-2017-13318、CVE-2017-13323、CVE-2017-13319、CVE-2017-13317</td>
   </tr>
 </tbody></table>
 
@@ -240,66 +303,47 @@
   <tr>
    <td>Google 的 Billy Lau
    </td>
-   <td>CVE-2017-13305
-   </td>
+   <td>CVE-2017-13305</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/csddl">Chong Wang</a>
-   </td>
-   <td>CVE-2017-13287
-   </td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/csddl">Chong Wang</a></td>
+   <td>CVE-2017-13287</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/csddl">Chong Wang</a> 和 <a href="http://weibo.com/ele7enxxh">Zinuo Han</a>
-   </td>
-   <td>CVE-2017-13289、CVE-2017-13286
-   </td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/csddl">Chong Wang</a> 和<a href="http://weibo.com/ele7enxxh">韩子诺</a></td>
+   <td>CVE-2017-13289、CVE-2017-13286</td>
   </tr>
   <tr>
-   <td>Huawei L.O. 团队的 Cusas
-   </td>
-   <td>CVE-2017-13279
-   </td>
+   <td>Huawei L.O. 团队的 Cusas</td>
+   <td>CVE-2017-13279</td>
   </tr>
   <tr>
-   <td>腾讯玄武实验室的 Daxing Guo
-   </td>
-   <td>CVE-2017-13292、CVE-2017-13303
-   </td>
+   <td>腾讯玄武实验室的郭大兴</td>
+   <td>CVE-2017-13292、CVE-2017-13303</td>
   </tr>
   <tr>
-   <td>Symantec 的 Dinesh Venkatesan (<a href="https://twitter.com/malwareresearch">@malwareresearch</a>)
-   </td>
-   <td>CVE-2017-13295
-   </td>
+   <td>Symantec 的 Dinesh Venkatesan (<a href="https://twitter.com/malwareresearch">@malwareresearch</a>)</td>
+   <td>CVE-2017-13295</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Elphet 和龚广
-   </td>
-   <td>CVE-2017-13276
-   </td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的 Elphet 和龚广</td>
+   <td>CVE-2017-13276</td>
   </tr>
   <tr>
    <td><a href="http://www.ms509.com">MS509Team</a> 的 En He (<a href="https://twitter.com/heeeeen4x">@heeeeen4x</a>) 和 Bo Liu
    </td>
-   <td>CVE-2017-13294
-   </td>
+   <td>CVE-2017-13294</td>
   </tr>
   <tr>
-   <td>Eric Leong (<a href="https://twitter.com/ericwleong">@ericwleong</a>)
-   </td>
-   <td>CVE-2017-13301
-   </td>
+   <td>Eric Leong (<a href="https://twitter.com/ericwleong">@ericwleong</a>)</td>
+   <td>CVE-2017-13301</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Hao Chen 和龚广
-   </td>
-   <td>CVE-2018-3596
-   </td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的陈豪和龚广</td>
+   <td>CVE-2018-3596</td>
   </tr>
   <tr>
-   <td>Haosheng Wang (<a href="https://twitter.com/gnehsoah">@gnehsoah</a>)
-   </td>
+   <td>Haosheng Wang (<a href="https://twitter.com/gnehsoah">@gnehsoah</a>)</td>
    <td>CVE-2017-13280
    </td>
   </tr>
@@ -310,7 +354,7 @@
    </td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广
+   <td>奇虎 360 科技有限公司 Alpha 团队的戴建军 (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广
    </td>
    <td>CVE-2017-13291、CVE-2017-13283、CVE-2017-13282、CVE-2017-13281、CVE-2017-13267
    </td>
@@ -346,13 +390,12 @@
    </td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Vulpecker 团队的 <a href="mailto:[email protected]">Yang Dai</a> 和 <a href="http://weibo.com/panyu6325">Yu Pan</a>
-   </td>
+   <td>奇虎 360 科技有限公司 Vulpecker 团队的<a href="mailto:[email protected]">戴阳</a>和<a href="http://weibo.com/panyu6325">潘宇</a></td>
    <td>CVE-2017-13304
    </td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)
+   <td>奇虎 360 科技有限公司 IceSword 实验室的郭永刚 (<a href="https://twitter.com/guoygang">@guoygang</a>)
    </td>
    <td>CVE-2017-8269、CVE-2017-13307、CVE-2018-5826
    </td>
@@ -360,14 +403,11 @@
   <tr>
    <td>Huawei L.O. 团队的 Zhongwen 和 Chao Dai
    </td>
-   <td>CVE-2017-13274
-   </td>
+   <td>CVE-2017-13274</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/ele7enxxh">Zinuo Han</a>
-   </td>
-   <td>CVE-2017-13288、CVE-2017-13298、CVE-2017-13296、CVE-2017-13299、CVE-2017-13275、CVE-2017-13285
-   </td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的<a href="http://weibo.com/ele7enxxh">韩子诺</a></td>
+   <td>CVE-2017-13288、CVE-2017-13298、CVE-2017-13296、CVE-2017-13299、CVE-2017-13275、CVE-2017-13285</td>
   </tr>
 </tbody></table>
 
@@ -401,7 +441,7 @@
    <td>CVE-2018-3560</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/jioun_dai">@Jioun_dai</a>) 和龚广</td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的戴建军 (<a href="https://twitter.com/jioun_dai">@Jioun_dai</a>) 和龚广</td>
    <td>CVE-2017-13266、CVE-2017-13256、CVE-2017-13255</td>
   </tr>
   <tr>
@@ -414,7 +454,7 @@
   </tr>
   <tr>
    <td><a href="http://c0reteam.org">C0RE 团队</a>的 Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>) 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
-   <td>CVE-2017-6286、CVE-2017-6285,<br />CVE-2017-6281</td>
+   <td>CVE-2017-6286、CVE-2017-6285、<br />CVE-2017-6281</td>
   </tr>
   <tr>
    <td>百度安全实验室的丁鹏飞、包沉浮和韦韬</td>
@@ -433,23 +473,23 @@
    <td>CVE-2017-13249、CVE-2017-13248、CVE-2017-13264</td>
   </tr>
   <tr>
-   <td>蚂蚁金服巴斯光年安全实验室的<a href="http://www.weibo.com/wishlinux">吴潍浠</a> (<a href=" https://twitter.com/wish_wu">@wish_wu</a></td>
+   <td>蚂蚁金服巴斯光年安全实验室的<a href=" https://twitter.com/wish_wu">吴潍浠</a> (<a href="http://www.weibo.com/wishlinux">@wish_wu</a>)</td>
    <td>CVE-2017-13259、CVE-2017-13272</td>
   </tr>
   <tr>
-   <td>蚂蚁金服巴斯光年安全实验室的 Yaoguang Chen</td>
+   <td>蚂蚁金服巴斯光年安全实验室的陈耀光</td>
    <td>CVE-2017-13257、CVE-2017-13268</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
+   <td>奇虎 360 科技有限公司 IceSword 实验室的郭永刚 (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
    <td>CVE-2017-13271</td>
   </tr>
   <tr>
-   <td>腾讯安全平台部门的 ZhangBo</td>
+   <td>腾讯安全平台部门的张博</td>
    <td>CVE-2017-18069</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/ele7enxxh">Zinuo Han</a></td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的<a href="http://weibo.com/ele7enxxh">韩子诺</a></td>
    <td>CVE-2017-13252、CVE-2017-13251、CVE-2018-3561</td>
   </tr>
 </tbody></table>
@@ -464,16 +504,12 @@
    <th>CVE</th>
   </tr>
   <tr>
-   <td>Codefire 团队的 Aaron Willey、autoprime (<a href="https://twitter.com/utoprime?lang=en">@utoprime</a>) 和 Tyler Montgomery (<a href="https://twitter.com/tylerfixer">@tylerfixer</a>)
-   </td>
-   <td>CVE-2017-13238
-   </td>
+   <td>Codefire 团队的 Aaron Willey、autoprime (<a href="https://twitter.com/utoprime?lang=en">@utoprime</a>) 和 Tyler Montgomery (<a href="https://twitter.com/tylerfixer">@tylerfixer</a>)</td>
+   <td>CVE-2017-13238</td>
   </tr>
   <tr>
-   <td>华为公司的 Cusas
-   </td>
-   <td>CVE-2017-13235
-   </td>
+   <td>华为公司的 Cusas</td>
+   <td>CVE-2017-13235</td>
   </tr>
   <tr>
    <td>奇虎 360 科技有限公司 Alpha 团队的 Elphet 和龚广
@@ -494,8 +530,7 @@
    </td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Hao Chen 和龚广
-   </td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的陈豪和龚广</td>
    <td>CVE-2017-13245
    </td>
   </tr>
@@ -524,8 +559,7 @@
    </td>
   </tr>
   <tr>
-   <td><a href="mailto:jiych.guru&#64;gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)
-   </td>
+   <td><a href="mailto:[email protected]">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
    <td>CVE-2017-13230、CVE-2017-13234
    </td>
   </tr>
@@ -536,7 +570,7 @@
    </td>
   </tr>
   <tr>
-   <td>PDD 安全团队的 Qidan He (<a href="https://twitter.com/flanker_hqd?lang=en">@flanker_hqd</a>)
+   <td>PDD 安全团队的何淇丹 (<a href="https://twitter.com/flanker_hqd?lang=en">@flanker_hqd</a>)
    </td>
    <td>CVE-2017-13246
    </td>
@@ -548,19 +582,19 @@
    </td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)
+   <td>奇虎 360 科技有限公司 IceSword 实验室的郭永刚 (<a href="https://twitter.com/guoygang">@guoygang</a>)
    </td>
    <td>CVE-2017-13273
    </td>
   </tr>
   <tr>
-   <td>腾讯安全平台部门的 ZhangBo
+   <td>腾讯安全平台部门的张博
    </td>
    <td>CVE-2015-9016
    </td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/ele7enxxh">Zinuo Han</a>
+   <td>奇虎 360 科技有限公司成都安全响应中心的<a href="http://weibo.com/ele7enxxh">韩子诺</a>
    </td>
    <td>CVE-2017-13232
    </td>
@@ -589,7 +623,7 @@
    <td>CVE-2017-0846</td>
   </tr>
   <tr>
-   <td>阿里巴巴安全团队潘多拉实验室的 Baozeng Ding (<a href="https://twitter.com/sploving1">@sploving</a>)、Chengming Yang 和 Yang Song</td>
+   <td>阿里巴巴安全团队潘多拉实验室的 Baozeng Ding (<a href="https://twitter.com/sploving1">@sploving</a>)、Chengming Yang 和宋杨</td>
    <td>CVE-2017-13222、CVE-2017-13220</td>
   </tr>
   <tr>
@@ -613,7 +647,7 @@
    <td>CVE-2017-13198</td>
   </tr>
   <tr>
-   <td><a href="http://c0reteam.org">C0RE 团队</a>的 Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>) 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
+   <td><a href="http://c0reteam.org">C0RE 团队</a>的 Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>) 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou)</a></td>
    <td>CVE-2017-13183、CVE-2017-13180</td>
   </tr>
   <tr>
@@ -629,7 +663,7 @@
    <td>CVE-2017-13184、CVE-2017-13201</td>
   </tr>
   <tr>
-   <td><a href="mailto:jiych.guru&#64;gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
+   <td><a href="mailto:[email protected]">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
    <td>CVE-2017-0855、CVE-2017-13195、CVE-2017-13181</td>
   </tr>
   <tr>
@@ -657,7 +691,7 @@
    <td>CVE-2017-13200</td>
   </tr>
   <tr>
-   <td><a href="http://xlab.tencent.com">腾讯玄武实验室</a>的 Yongke Wang (<a href="https://twitter.com/Rudykewang">@Rudykewang</a>) 和 Yuebin Sun</td>
+   <td><a href="http://xlab.tencent.com">腾讯玄武实验室</a>的王永科 (<a href="https://twitter.com/Rudykewang">@Rudykewang</a>) 和 Yuebin Sun</td>
    <td>CVE-2017-13202</td>
   </tr>
   <tr>
@@ -665,11 +699,11 @@
    <td>CVE-2017-13213、CVE-2017-13221</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Vulpecker 团队的 <a href="http://weibo.com/panyu6325">Yu Pan</a> 和 <a href="mailto:[email protected]">Yang Dai</a></td>
+   <td>奇虎 360 科技有限公司 Vulpecker 团队的<a href="http://weibo.com/panyu6325">潘宇</a>和<a href="mailto:[email protected]">戴阳</a></td>
    <td>CVE-2017-0869</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="http://weibo.com/ele7enxxh">Zinuo Han</a></td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的<a href="http://weibo.com/ele7enxxh">韩子诺</a></td>
    <td>CVE-2017-13206、CVE-2017-13188、CVE-2017-13185</td>
   </tr>
 </tbody></table>
@@ -737,11 +771,11 @@
   </tr>
   <tr>
    <td>百度安全实验室的包沉浮</td>
-   <td>CVE-2016-8417、CVE-2016-10236、CVE-2017-0728、CVE-2017-0738、CVE-2017-0766、CVE-2017-0794、CVE-2017-9681、CVE-2017-9684、CVE-2017-9693、CVE-2017-9694、CVE-2017-9715、CVE-2017-9717、CVE-2017-9720、CVE-2017-11001、CVE-2017-10999、CVE-2017-11057、CVE-2017-11060、CVE-2017-11061、CVE-2017-11064、CVE-2017-11089、CVE-2017-11090</td>
+   <td>CVE-2016-8417、CVE-2016-10236、CVE-2017-0728、CVE-2017-0738、CVE-2017-0766、CVE-2017-0794、CVE-2017-9681、CVE-2017-9684、CVE-2017-9693、CVE-2017-9694、CVE-2017-9696、CVE-2017-9702、CVE-2017-9715、CVE-2017-9717、CVE-2017-9720、CVE-2017-11001、CVE-2017-10999、CVE-2017-11057、CVE-2017-11060、CVE-2017-11061、CVE-2017-11064、CVE-2017-11089、CVE-2017-11090</td>
   </tr>
   <tr>
    <td>阿里巴巴移动安全团队的 Chengming Yang</td>
-   <td>CVE-2016-10280、CVE-2016-10281、CVE-2017-0463、CVE-2017-0506、CVE-2017-0565、CVE-2017-0711、CVE-2017-0741、CVE-2017-0742、CVE-2017-0751、CVE-2017-0796、CVE-2017-0798、CVE-2017-0800、CVE-2017-0827、CVE-2017-0843、CVE-2017-0864、CVE-2017-9696、CVE-2017-9702、CVE-2017-9708、CVE-2017-11000、CVE-2017-11059、CVE-2017-13170</td>
+   <td>CVE-2016-10280、CVE-2016-10281、CVE-2017-0463、CVE-2017-0506、CVE-2017-0565、CVE-2017-0711、CVE-2017-0741、CVE-2017-0742、CVE-2017-0751、CVE-2017-0796、CVE-2017-0798、CVE-2017-0800、CVE-2017-0827、CVE-2017-0843、CVE-2017-0864、CVE-2017-9708、CVE-2017-11000、CVE-2017-11059、CVE-2017-13170</td>
   </tr>
   <tr>
    <td>佐治亚理工学院的 Chenxiong Qian</td>
@@ -784,7 +818,7 @@
    <td>CVE-2017-0397、CVE-2017-0405、CVE-2017-0410、CVE-2017-0826、CVE-2017-13160</td>
   </tr>
   <tr>
-   <td>腾讯玄武实验室的 Daxing Guo (<a href="https://twitter.com/freener0">@freener0</a>)</td>
+   <td>腾讯玄武实验室的郭大兴 (<a href="https://twitter.com/freener0">@freener0</a>)</td>
    <td>CVE-2017-0386、CVE-2017-0553、CVE-2017-0585、CVE-2017-0706</td>
   </tr>
   <tr>
@@ -840,7 +874,7 @@
    <td>CVE-2017-0411、CVE-2017-0412、CVE-2017-0561、CVE-2017-0569、CVE-2017-0570、CVE-2017-0571、CVE-2017-0572</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Gengjia Chen (<a href="https://twitter.com/chengjia4574">@chengjia4574</a>)</td>
+   <td>奇虎 360 科技有限公司 IceSword 实验室的陈耿佳 (<a href="https://twitter.com/chengjia4574">@chengjia4574</a>)</td>
    <td>CVE-2016-8464、CVE-2016-10285、CVE-2016-10288、CVE-2016-10290、CVE-2016-10294、CVE-2016-10295、CVE-2016-10296、CVE-2017-0329、CVE-2017-0332、CVE-2017-0432、CVE-2017-0434、CVE-2017-0446、CVE-2017-0447、CVE-2017-0500、CVE-2017-0501、CVE-2017-0502、CVE-2017-0503、CVE-2017-0509、CVE-2017-0524、CVE-2017-0529、CVE-2017-0536、CVE-2017-0566、CVE-2017-0573、CVE-2017-0581、CVE-2017-0616、CVE-2017-0617、CVE-2017-0624、CVE-2017-0649、CVE-2017-0744、CVE-2017-6426、CVE-2017-8243、CVE-2017-8244、CVE-2017-8266、CVE-2017-8270、CVE-2017-9691、CVE-2017-10997</td>
   </tr>
   <tr>
@@ -877,7 +911,7 @@
    <td>CVE-2017-0400、CVE-2017-0418、CVE-2017-0479、CVE-2017-0480、CVE-2017-0665、CVE-2017-0681、CVE-2017-0737、CVE-2017-14904</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Alpha 团队的 Hao Chen</td>
+   <td>奇虎 360 科技有限公司 Alpha 团队的陈豪</td>
    <td>CVE-2016-8415、CVE-2016-8419、CVE-2016-8420、CVE-2016-8421、CVE-2016-8454、CVE-2016-8455、CVE-2016-8456、CVE-2016-8457、CVE-2016-8465、CVE-2016-8476、CVE-2016-10283、CVE-2017-0437、CVE-2017-0438、CVE-2017-0439、CVE-2017-0441、CVE-2017-0442、CVE-2017-0443、CVE-2017-0453、CVE-2017-0454、CVE-2017-0461、CVE-2017-0464、CVE-2017-0567、CVE-2017-0574、CVE-2017-0575、CVE-2017-0577、CVE-2017-0580、CVE-2017-0584、CVE-2017-0748、CVE-2017-0786、CVE-2017-0787、CVE-2017-0788、CVE-2017-0789、CVE-2017-0790、CVE-2017-0791、CVE-2017-0792、CVE-2017-0825、CVE-2017-6424</td>
   </tr>
   <tr>
@@ -925,11 +959,11 @@
    <td>CVE-2017-13172</td>
   </tr>
   <tr>
-   <td><a href="https://skyeye.360safe.com/">奇虎 360 天眼实验室</a>的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>)</td>
+   <td><a href="https://skyeye.360safe.com/">奇虎 360 天眼实验室</a>的戴建军 (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>)</td>
    <td>CVE-2017-0478、CVE-2017-0541、CVE-2017-0559</td>
   </tr>
   <tr>
-   <td>奇虎 360 IceSword 实验室的 Jianqiang Zhao (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>)</td>
+   <td>奇虎 360 IceSword 实验室的赵建强 (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>)</td>
    <td>CVE-2016-5346、CVE-2016-8416、CVE-2016-8475、CVE-2016-8478、CVE-2017-0445、CVE-2017-0458、CVE-2017-0459、CVE-2017-0518、CVE-2017-0519、CVE-2017-0533、CVE-2017-0534、CVE-2017-0862、CVE-2017-6425、CVE-2017-8233、CVE-2017-8261、CVE-2017-8268、CVE-2017-9718、CVE-2017-1000380</td>
   </tr>
   <tr>
@@ -941,8 +975,7 @@
    <td>CVE-2016-8461、CVE-2016-8462</td>
   </tr>
   <tr>
-   <td><a href="https://www.linkedin.com/in/jose-maria-ariel-martinez-juarez-7910a189/">
-   Jose Martinez</a></td>
+   <td><a href="https://www.linkedin.com/in/jose-maria-ariel-martinez-juarez-7910a189/">Jose Martinez</a></td>
    <td>CVE-2017-0841</td>
   </tr>
   <tr>
@@ -963,7 +996,7 @@
   </tr>
   <tr>
    <td>百度安全实验室的韦韬</td>
-   <td>CVE-2016-8417、CVE-2016-10236、CVE-2017-0728、CVE-2017-0738、CVE-2017-0766、CVE-2017-0794 CVE-2017-9681、CVE-2017-9684、CVE-2017-9693、CVE-2017-9694、CVE-2017-9696、CVE-2017-9702、CVE-2017-9720、CVE-2017-10999、CVE-2017-11001、CVE-2017-11057、CVE-2017-11060、CVE-2017-11061、CVE-2017-11064、CVE-2017-11089、CVE-2017-11090</td>
+   <td>CVE-2016-8417、CVE-2016-10236、CVE-2017-0728、CVE-2017-0738、CVE-2017-0766、CVE-2017-0794、CVE-2017-9681、CVE-2017-9684、CVE-2017-9693、CVE-2017-9694、CVE-2017-9696、CVE-2017-9702、CVE-2017-9715、CVE-2017-9717、CVE-2017-9720、CVE-2017-10999、CVE-2017-11001、CVE-2017-11057、CVE-2017-11060、CVE-2017-11061、CVE-2017-11064、CVE-2017-11089、CVE-2017-11090</td>
   </tr>
   <tr>
    <td>奇虎 360 Qex 团队的 Liyadong</td>
@@ -1038,7 +1071,7 @@
    <td>CVE-2016-5552</td>
   </tr>
   <tr>
-   <td><a href="mailto:jiych.guru&#64;gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
+   <td><a href="mailto:[email protected]">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
    <td>CVE-2017-0603、CVE-2017-0670、CVE-2017-0697、CVE-2017-0726、CVE-2017-0818</td>
   </tr>
   <tr>
@@ -1198,7 +1231,7 @@
    <td>CVE-2017-0577、CVE-2017-0580</td>
   </tr>
   <tr>
-   <td>蚂蚁金服巴斯光年安全实验室的<a href="http://www.weibo.com/wishlinux">吴潍浠</a> (<a href="https://twitter.com/wish_wu">@wish_wu</a>)</td>
+   <td>蚂蚁金服巴斯光年安全实验室的<a href="https://twitter.com/wish_wu">吴潍浠</a> (<a href="http://www.weibo.com/wishlinux">@wish_wu</a>)</td>
    <td>CVE-2017-0408、CVE-2017-0477、CVE-2017-11063、CVE-2017-11092</td>
   </tr>
   <tr>
@@ -1246,7 +1279,7 @@
    <td>CVE-2016-10276</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Vulpecker 团队的 <a href="mailto:[email protected]">Yang Dai</a></td>
+   <td>奇虎 360 科技有限公司 Vulpecker 团队的<a href="mailto:[email protected]">戴阳</a></td>
    <td>CVE-2017-0795、CVE-2017-0799、CVE-2017-0804、CVE-2017-0803、CVE-2017-6262、CVE-2017-6263、CVE-2017-6280</td>
   </tr>
   <tr>
@@ -1266,7 +1299,7 @@
    <td>CVE-2016-8431、CVE-2016-8432、CVE-2016-8435、CVE-2016-8480</td>
   </tr>
   <tr>
-   <td>蚂蚁金服巴斯光年安全实验室的 Yaoguang Chen</td>
+   <td>蚂蚁金服巴斯光年安全实验室的陈耀光</td>
    <td>CVE-2017-13171</td>
   </tr>
   <tr>
@@ -1274,7 +1307,7 @@
    <td>CVE-2017-0404、CVE-2017-0588、CVE-2017-0842、CVE-2017-13164、CVE-2017-9708、CVE-2017-13170</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
+   <td>奇虎 360 科技有限公司 IceSword 实验室的郭永刚 (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
    <td>CVE-2016-10289、CVE-2017-0465、CVE-2017-0564、CVE-2017-0746、CVE-2017-0749、CVE-2017-7370、CVE-2017-8267、CVE-2017-8269、CVE-2017-8271、CVE-2017-8272、CVE-2017-11048、CVE-2017-12146</td>
   </tr>
   <tr>
@@ -1286,7 +1319,7 @@
    <td>CVE-2017-0650</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司 Vulpecker 团队的 Yu Pan</td>
+   <td>奇虎 360 科技有限公司 Vulpecker 团队的潘宇</td>
    <td>CVE-2016-10282、CVE-2017-0517、CVE-2017-0532、CVE-2017-0615、CVE-2017-0618、CVE-2017-0625、CVE-2017-0795、CVE-2017-0799、CVE-2017-0804、CVE-2017-0803、CVE-2017-6262、CVE-2017-6263、CVE-2017-6280</td>
   </tr>
   <tr>
@@ -1330,7 +1363,7 @@
    <td>CVE-2017-0406</td>
   </tr>
   <tr>
-   <td>奇虎 360 科技有限公司成都安全响应中心的 <a href="https://weibo.com/ele7enxxh">Zinuo Han</a></td>
+   <td>奇虎 360 科技有限公司成都安全响应中心的<a href="https://weibo.com/ele7enxxh">韩子诺</a></td>
    <td>CVE-2017-0475、CVE-2017-0497、CVE-2017-0548、CVE-2017-0678、CVE-2017-0691、CVE-2017-0700、CVE-2017-0714、CVE-2017-0718、CVE-2017-0719、CVE-2017-0720、CVE-2017-0722、CVE-2017-0725、CVE-2017-0745、CVE-2017-0760、CVE-2017-0761、CVE-2017-0764、CVE-2017-0776、CVE-2017-0777、CVE-2017-0778、CVE-2017-0813、CVE-2017-0814、CVE-2017-0820、CVE-2017-0823、CVE-2017-0850、CVE-2017-0858、CVE-2017-0879</td>
   </tr>
   <tr>
@@ -1440,7 +1473,7 @@
 
 <p>Gal Beniamini(<a href="https://twitter.com/@laginimaineb">@laginimaineb</a>、<a href="http://bits-please.blogspot.com/">http://bits-please.blogspot.com</a>)</p>
 
-<p>奇虎 360 科技有限公司 0x031E 实验室的 Gengjia Chen (<a href="https://twitter.com/@chengjia4574">@chengjia4574</a>)</p>
+<p>奇虎 360 科技有限公司 0x031E 实验室的陈耿佳 (<a href="https://twitter.com/@chengjia4574">@chengjia4574</a>)</p>
 
 <p>腾讯科恩实验室的刘耕铭 (<a href="http://twitter.com/dmxcsnsbh">@dmxcsnsbh</a>)</p>
 
@@ -1480,7 +1513,7 @@
 
 <p>腾讯 KEEN 实验室 (<a href="https://twitter.com/k33nteam">@K33nTeam</a>) 的 jfang</p>
 
-<p>奇虎 360 IceSword 实验室的 Jianqiang Zhao (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>)</p>
+<p>奇虎 360 IceSword 实验室的赵建强 (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>)</p>
 
 <p>Joshua Drake (<a href="https://twitter.com/jduck">@jduck</a>)</p>
 
@@ -1696,7 +1729,7 @@
 
 <p>加州大学河滨分校的 <a href="mailto:[email protected]">Zhiyun Qian</a></p>
 
-<p>无声信息技术 <a href="http://www.pkav.net">PKAV</a> 的 <a href="http://weibo.com/ele7enxxh">Zinuo Han</a></p>
+<p>无声信息技术 <a href="http://www.pkav.net">PKAV</a> 的<a href="http://weibo.com/ele7enxxh">韩子诺</a></p>
 
 <p>Google 的 Zubin Mithra</p>
 
@@ -1773,7 +1806,7 @@
 
 <p>奇虎 360 科技有限公司的 Ping Li</p>
 
-<p>碁震安全研究团队(@K33nTeam、<a href="http://k33nteam.org/">http://k33nteam.org/</a>)的 Qidan He (@flanker_hqd)</p>
+<p>碁震安全研究团队(@K33nTeam、<a href="http://k33nteam.org/">http://k33nteam.org/</a>)的何淇丹 (@flanker_hqd)</p>
 
 <p>Roee Hay 和 Or Peles</p>
 
@@ -1895,7 +1928,8 @@
 
 <p>印第安纳大学布卢明顿分校的 <a href="http://www.informatics.indiana.edu/xw7/">Xiaofeng Wang</a> (<a href="mailto:[email protected]">[email protected]</a>)</p>
 
-<p><a href="http://www.cs.indiana.edu/~zhou/">印第安纳大学布卢明顿分校</a>的 Xiaoyong Zhou <br />(<a href="https://twitter.com/xzhou">@xzhou</a>、<a href="mailto:[email protected]">[email protected]</a>)</p>
+<p><a href="http://www.cs.indiana.edu/~zhou/">印第安纳大学布卢明顿分校</a>的 Xiaoyong Zhou <br />
+(<a href="https://twitter.com/xzhou">@xzhou</a>、<a href="mailto:[email protected]">[email protected]</a>)</p>
 
 <p>北京大学的 Xinhui Han (<a href="mailto:[email protected]">[email protected]</a>)</p>
 
diff --git a/zh-cn/security/overview/app-security.html b/zh-cn/security/overview/app-security.html
index 5917bc0..1bfa528 100644
--- a/zh-cn/security/overview/app-security.html
+++ b/zh-cn/security/overview/app-security.html
@@ -25,16 +25,16 @@
 <p>Android 应用的主要构造块包括:</p>
 <ul>
   <li>
-    <p><strong>AndroidManifest.xml</strong>:<a href="https://developer.android.com/guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> 文件是一个控制文件,用于告知系统如何处理应用中的所有顶层组件(具体来说就是下面介绍的活动、服务、广播接收器和内容提供程序)。该文件还用于指定需要哪些权限。</p>
+    <p><strong>AndroidManifest.xml</strong>:<a href="https://developer.android.com/guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> 文件是一个控制文件,用于告诉系统如何处理应用中的所有顶层组件(具体来说就是下面介绍的 Activity、服务、广播接收器和内容提供程序)。该文件还用于指定需要哪些权限。</p>
   </li>
   <li>
-    <p><strong>活动</strong>:<a href="https://developer.android.com/guide/topics/fundamentals/activities.html">活动</a>通常是指适用于面向用户的单个任务的代码。活动通常包括向用户显示界面,但并不一定会这样,有些活动就从不显示界面。通常情况下,应用的入口点是应用的其中一项活动。</p>
+    <p><strong>Activity</strong>:<a href="https://developer.android.com/guide/topics/fundamentals/activities.html">Activity</a> 通常是指面向用户的单个任务的代码,通常包括向用户显示界面,但并不一定会这样,有些 Activity 就从不显示界面。通常情况下,应用的入口点是应用的其中一项活动。</p>
   </li>
   <li>
     <p><strong>服务</strong>:<a href="https://developer.android.com/guide/topics/fundamentals/services.html">服务</a>是指在后台运行的一段代码。服务可以在自己的进程中运行,也可以在其他应用的进程中运行。其他组件会“绑定”到某项服务,并通过远程过程调用来调用该服务的方法。比如媒体播放器就是一项服务:即使用户退出媒体选择界面,也可能仍然希望音乐继续播放。即使界面已关闭,服务也可使音乐继续播放。</p>
   </li>
   <li>
-    <p><strong>广播接收器</strong>:<a href="https://developer.android.com/reference/android/content/BroadcastReceiver.html">广播接收器</a>是一种对象,该对象会在操作系统或其他应用发出称为 <a href="https://developer.android.com/reference/android/content/Intent.html">Intent</a> 的 IPC 机制时进行实例化。例如,应用可以注册一个接收器来接收电量不足的消息,并可以根据该信息改变自己的行为。</p>
+    <p><strong>广播接收器</strong>:<a href="https://developer.android.com/reference/android/content/BroadcastReceiver.html">广播接收器</a>是一种对象,在操作系统或其他应用发出称为 <a href="https://developer.android.com/reference/android/content/Intent.html">Intent</a> 的 IPC 机制时进行实例化。例如,应用可以注册一个接收器来接收电量不足的消息,并可以根据该信息改变自己的行为。</p>
   </li>
 </ul>
 <h2 id="the-android-permission-model-accessing-protected-apis">Android 权限模式:访问受保护的 API</h2>
@@ -122,7 +122,7 @@
 <p>Android 中收录了一组已安装的系统证书授权中心,这些授权中心在整个系统范围内均可信。在 Android 7.0 之前的版本中,设备制造商可以修改其设备上搭载的 CA 组。不过,运行 7.0 及更高版本的设备将具有一组统一的系统 CA,并且不再允许设备制造商对其进行修改。
 </p>
 <p>
-要将 CA 作为新的公共 CA 添加到 Android 收录的 CA 组中,该 CA 必须完成 <a href="https://wiki.mozilla.org/CA:How_to_apply">Mozilla CA 收录流程</a>,然后提交一项针对 Android 的功能请求 (<a href="https://code.google.com/p/android/issues/entry">https://code.google.com/p/android/issues/entry</a>),以便将其添加到 <a href="https://android.googlesource.com/">Android 开源项目</a> (AOSP) 收录的 Android CA 组中。
+要作为新的公共 CA 添加到 Android 收录的 CA 组中,相应 CA 必须完成 <a href="https://wiki.mozilla.org/CA:How_to_apply">Mozilla CA 收录流程</a>,然后提交一项针对 Android 的功能请求 (<a href="https://code.google.com/p/android/issues/entry">https://code.google.com/p/android/issues/entry</a>),以便请求添加到 <a href="https://android.googlesource.com/">Android 开源项目</a> (AOSP) 收录的 Android CA 组中。
 </p>
 <p>
 此外还有一些设备专用 CA,这些 CA 不应被收录到 AOSP CA 核心组中,例如,安全访问运营商基础架构组件(例如,短信/彩信网关)时可能需要的运营商私有 CA。建议设备制造商将私有 CA 仅收录在需要信任这些 CA 的组件/应用中。如需了解详情,请参阅<a href="https://developer.android.com/training/articles/security-config">网络安全配置</a>。
diff --git a/zh-cn/security/overview/reports.html b/zh-cn/security/overview/reports.html
index e38dec0..a9c1ccc 100644
--- a/zh-cn/security/overview/reports.html
+++ b/zh-cn/security/overview/reports.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>安全报告</title>
+    <title>安全状况报告</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
diff --git a/zh-cn/security/overview/updates-resources.html b/zh-cn/security/overview/updates-resources.html
index 890338a..f4cab2c 100644
--- a/zh-cn/security/overview/updates-resources.html
+++ b/zh-cn/security/overview/updates-resources.html
@@ -57,17 +57,23 @@
   </tr>
   <tr>
    <td>特权进程</td>
-   <td>功能受 SELinux <code>untrusted_app</code> 域限制的应用或进程。<br />
+   <td>功能被 SELinux <code>untrusted_app</code> 域禁止的应用或进程。<br />
    或<br />
-   拥有第三方应用无法获得的重要权限的应用或进程。</td>
+   拥有第三方应用无法获得的重要权限的应用或进程。<br />
+   或<br />
+   设备上的内置硬件组件,并不包含在可信计算基 (TCB) 内。</td>
   </tr>
   <tr>
    <td>可信计算基 (TCB)</td>
-   <td>一种功能,具有以下特征:属于内核一部分、在与内核相同的 CPU 环境(如设备驱动程序)中运行、可以直接访问内核内存(如设备上的硬件组件),或者是被认为等同于内核的几种用户服务中的一种:<code>init</code>、<code>ueventd</code> 和 <code>vold</code>。</td>
+   <td>一种功能,具有以下特征:属于内核一部分、在与内核相同的 CPU 环境(如设备驱动程序)中运行、可以直接访问内核内存(如设备上的硬件组件)、能够将脚本加载到内核组件(如 eBPF)、基带处理器,或者是被认为等同于内核的几种用户服务中的一种:<code>init</code>、<code>ueventd</code> 和 <code>vold</code>。</td>
+  </tr>
+  <tr>
+   <td>引导加载程序</td>
+   <td>一种在启动时配置设备然后将控制权传递给 Android 操作系统的组件。</td>
   </tr>
   <tr>
    <td>可信执行环境 (TEE)</td>
-   <td>一种受保护的组件,甚至可以抵御恶意内核的攻击。</td>
+   <td>一种经过专门设计的组件,可受到保护以免受攻击(甚至是恶意内核的攻击)。</td>
   </tr>
 </tbody></table>
 
@@ -84,10 +90,11 @@
    <td>
      <ul>
        <li>在 TEE 中执行任意代码</li>
-       <li>攻击者可以在特权进程或 TCB 中远程执行任意代码</li>
+       <li>攻击者可以在特权进程、引导加载程序或 TCB 中远程执行任意代码</li>
        <li>设备遭到远程发起的永久性拒绝服务攻击(设备无法再使用:完全永久性损坏,或需要重新刷写整个操作系统)</li>
        <li>攻击者可以远程绕过与软件包安装或等效行为相关的用户互动要求</li>
-       <li>攻击者可以绕过安全启动</li>
+       <li>攻击者可以从远程绕过针对任何开发者或针对任何安全设置修改的用户互动要求</li>
+       <li>攻击者可以绕过远程安全启动</li>
      </ul>
    </td>
   </tr>
@@ -95,18 +102,23 @@
    <td><strong>高</strong></td>
    <td>
      <ul>
+      <li>攻击者可以绕过本地安全启动</li>
       <li>攻击者可以在非特权进程中远程执行任意代码</li>
-      <li>攻击者可以从本地在特权进程或 TCB 中执行任意代码</li>
+      <li>攻击者可以在特权进程、引导加载程序或 TCB 中本地执行任意代码</li>
       <li>攻击者可以在未经授权的情况下访问受 TEE 保护的数据</li>
-      <li>攻击者可以远程访问受保护的数据(通常仅限本地安装的应用在请求并获得权限后才可以访问的数据,或仅限特权进程访问的数据)</li>
+      <li>攻击者可以从本地绕过与软件包安装或等效行为相关的用户互动要求</li>
+      <li>攻击者可以远程访问受保护的数据(仅限特权进程访问的数据)</li>
       <li>设备遭到从本地发起的永久性拒绝服务攻击(设备无法再使用:完全永久性损坏,或需要重新刷写整个操作系统)</li>
-      <li>设备遭到远程发起的设备暂时性拒绝服务攻击(远程挂起或重新启动设备)</li>
-      <li>攻击者可以远程绕过用户互动要求(攻击者能够访问通常需要由用户发起的功能或需要获得用户许可后方可使用的功能)</li>
+      <li>设备遭到从远程发起的永久性拒绝服务攻击(设备需要恢复出厂设置)</li>
+      <li>攻击者可以远程绕过用户互动要求(攻击者能够访问通常需要由用户发起的功能或需要获得用户许可后方可使用的功能或数据)</li>
+      <li>攻击者可以全面深入地绕过防护功能,或在引导加载程序或 TEE 中利用缓解技术存在的漏洞进行攻击</li>
+      <li>攻击者可以全面绕过将应用数据或用户个人资料彼此隔离开来的操作系统保护功能</li>
       <li>攻击者可以从本地绕过针对任何开发者或针对任何安全设置修改的用户互动要求</li>
-      <li>攻击者可以全面绕过将应用数据与其他应用隔离开来的操作系统保护功能</li>
-      <li>攻击者可以全面绕过将用户或个人资料彼此隔离开来的操作系统保护功能</li>
       <li>在标准 TLS 中造成可受到中间人攻击的加密漏洞</li>
       <li>攻击者可以绕过锁定屏幕</li>
+      <li>攻击者可以绕过设备保护服务/恢复出厂设置保护服务/运营商的限制</li>
+      <li>有针对性地阻止对应急服务的访问</li>
+      <li>攻击者可以绕过受 TEE 保护的用户互动要求</li>
      </ul>
    </td>
   </tr>
@@ -115,17 +127,15 @@
    <td>
      <ul>
       <li>攻击者可以在受限进程中远程执行任意代码</li>
+      <li>设备遭到远程发起的设备暂时性拒绝服务攻击(远程挂起或重新启动设备)</li>
       <li>攻击者可以从本地在非特权进程中执行任意代码</li>
-      <li>攻击者可以全面深入地绕过防护功能,或在特权进程、TCB 或 TEE 中利用缓解技术存在的漏洞进行攻击</li>
-      <li>绕过对受限进程的限制</li>
+      <li>攻击者可以全面深入地绕过防护功能,或者在特权进程或 TCB 中利用缓解技术存在的漏洞进行攻击</li>
+      <li>攻击者可以绕过对受限进程的限制</li>
       <li>攻击者可以远程访问不受保护的数据(通常可供本地安装的所有应用访问的数据)</li>
-      <li>攻击者可以从本地访问受保护的数据(通常仅限本地安装的应用在请求并获得权限后才可以访问的数据,或仅限特权进程访问的数据)</li>
+      <li>攻击者可以从本地访问受保护的数据(仅限特权进程访问的数据)</li>
       <li>攻击者可以从本地绕过用户互动要求(攻击者能够访问通常需要由用户发起的功能或需要获得用户许可后方可使用的功能)</li>
       <li>设备遭到从本地发起的永久性拒绝服务攻击(设备需要恢复出厂设置)</li>
       <li>在标准加密基元(并非 TLS 中使用的基元)中造成可导致明文泄露的加密漏洞</li>
-      <li>攻击者可以绕过设备保护功能/恢复出厂设置保护功能</li>
-      <li>攻击者可以绕过运营商的限制</li>
-      <li>有针对性地阻止对应急服务的访问</li>
      </ul>
    </td>
   </tr>
@@ -134,7 +144,7 @@
    <td>
      <ul>
       <li>攻击者可以从本地在受限进程中执行任意代码</li>
-      <li>在非标准使用中造成加密漏洞</li>
+      <li>攻击者可以在非标准使用中造成加密漏洞</li>
       <li>攻击者可以全面深入地绕过用户级防护功能,或在非特权进程中利用缓解技术存在的漏洞进行攻击</li>
      </ul>
    </td>
@@ -175,10 +185,14 @@
    <td>如果底层漏洞的严重程度为“中”或更高,则实际严重程度为“中”</td>
   </tr>
   <tr>
-   <td>需要防篡改的物理访问</td>
+   <td>需要实际接触设备内部</td>
    <td>严重程度降低 2 级</td>
   </tr>
   <tr>
+   <td>要求在设备上启用开发者模式或任何持久开发者模式设置(且不是开发者模式中的错误)的本地攻击。</td>
+   <td>不高于“低”</td>
+  </tr>
+  <tr>
    <td>如果任何 SELinux 域都无法在 Google 提供的 SEPolicy 下执行操作</td>
    <td>无安全影响</td>
   </tr>
@@ -223,24 +237,37 @@
 <h3 id="reports">报告</h3>
 <p>Android 安全团队有时会发布报告或白皮书。以下是一些最新发布的内容。</p>
 <ul>
-  <li><a href="/security/reports/Google_Android_Security_2017_Report_Final.pdf">Android 安全性 2017 年年度回顾报告</a></li>
-  <li><a href="/security/reports/Google_Android_Security_2016_Report_Final.pdf">Android 安全性 2016 年年度回顾报告</a></li>
-  <li><a href="/security/reports/Google_Android_Security_2015_Report_Final.pdf">Android 安全性 2015 年年度回顾报告</a></li>
-  <li><a href="/security/reports/Google_Android_Security_2014_Report_Final.pdf">Android 安全性 2014 年年度回顾报告</a></li>
-  <li><a href="/security/reports/Android_WhitePaper_Final_02092016.pdf">Android 安全性白皮书</a></li>
-  <li><a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">潜在有害应用分类</a></li>
+  <li><a href="/security/reports/Google_Android_Security_2017_Report_Final.pdf">
+      Android 安全性 2017 年年度回顾报告</a></li>
+  <li><a href="/security/reports/Google_Android_Security_2016_Report_Final.pdf">
+      Android 安全性 2016 年年度回顾报告</a></li>
+  <li><a href="/security/reports/Google_Android_Security_2015_Report_Final.pdf">
+      Android 安全性 2015 年年度回顾报告</a></li>
+  <li><a href="/security/reports/Google_Android_Security_2014_Report_Final.pdf">
+      Android 安全性 2014 年年度回顾报告</a></li>
+  <li><a href="/security/reports/Android_WhitePaper_Final_02092016.pdf">
+      Android 安全性白皮书</a></li>
+  <li><a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">
+      潜在有害应用分类</a></li>
 </ul>
 
 <h3 id="slides">演示文稿</h3>
 <p>Android 安全团队会开展各种会议和对话活动。以下是他们使用的一些幻灯片:</p>
 <ul>
-  <li><a href="/security/reports/Android-Bootcamp-2016-Verified-Boot-and-Encryption.pdf">验证启动和加密</a></li>
-  <li><a href="/security/reports/Android-Bootcamp-2016-SafetyNet.pdf">SafetyNet</a></li>
-  <li><a href="/security/reports/Android-Bootcamp-2016-New-App-Lifecycle-for-Encryption.pdf">新应用加密生命周期</a></li>
-  <li><a href="/security/reports/Android-Bootcamp-2016-Keeping-Google-Play-safe.pdf">维护 Google Play 的安全</a></li>
-  <li><a href="/security/reports/Android-Bootcamp-2016-Defense-in-depth-efforts.pdf">深度防御措施</a></li>
-  <li><a href="/security/reports/Android-Bootcamp-2016-Android-Keystore-Attestation.pdf">Keystore 认证</a></li>
-  <li><a href="/security/reports/Android-Bootcamp-2016-Android-Attack-Team.pdf">Android 防攻击团队</a></li>
+  <li><a href="/security/reports/Android-Bootcamp-2016-Verified-Boot-and-Encryption.pdf">
+      验证启动和加密</a></li>
+  <li><a href="/security/reports/Android-Bootcamp-2016-SafetyNet.pdf">
+      SafetyNet</a></li>
+  <li><a href="/security/reports/Android-Bootcamp-2016-New-App-Lifecycle-for-Encryption.pdf">
+      新应用加密生命周期</a></li>
+  <li><a href="/security/reports/Android-Bootcamp-2016-Keeping-Google-Play-safe.pdf">
+      维护 Google Play 的安全</a></li>
+  <li><a href="/security/reports/Android-Bootcamp-2016-Defense-in-depth-efforts.pdf">
+      深度防御措施</a></li>
+  <li><a href="/security/reports/Android-Bootcamp-2016-Android-Keystore-Attestation.pdf">
+      Keystore 认证</a></li>
+  <li><a href="/security/reports/Android-Bootcamp-2016-Android-Attack-Team.pdf">
+      Android 防攻击团队</a></li>
 </ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/selinux/build.html b/zh-cn/security/selinux/build.html
new file mode 100644
index 0000000..5021005
--- /dev/null
+++ b/zh-cn/security/selinux/build.html
@@ -0,0 +1,194 @@
+<html devsite><head>
+    <title>编译 SELinux 政策</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>
+本文介绍了如何编译 SELinux 政策。SELinux 政策组合使用核心 AOSP 政策(平台)和设备专用政策(供应商)进行编译。从 Android 4.4 一直到 Android 7.0 的 SELinux 政策编译流程合并了所有 sepolicy 片段,然后在根目录中生成了整体文件。这意味着 SOC 供应商和 ODM 制造商每次修改政策时,都修改了 boot.img(针对非 A/B 设备)或 system.img(针对 A/B 设备)。
+</p>
+<p>
+在 Android 8.0 及更高版本中,平台政策和供应商政策是单独编译的。SOC 和原始设备制造商 (OEM) 可以更新自己那部分政策,编译自己的映像(vendor.img、boot.img 等),然后独立于平台更新来更新这些映像。
+</p>
+<p>
+不过,由于模块化的 SELinux 政策文件存储在 <code>/vendor</code> 分区中,因此 <code>init</code> 进程必须提早装载系统分区和供应商分区,以便能够从这些分区中读取 SELinux 文件,并将这些文件与系统目录中的核心 SELinux 文件合并(装载操作要在将这些文件加载到内核之前进行)。
+</p>
+
+<h2 id="files">源文件</h2>
+<p>
+SELinux 的编译逻辑位于以下文件中:
+</p>
+<ul>
+  <li><a href="https://android.googlesource.com/platform/external/selinux/" class="external"><code>external/selinux</code></a>:外部 SELinux 项目,用于构建 HOST 命令行实用工具以编译 SELinux 政策和标签。
+   <ul>
+    <li><a href="https://android.googlesource.com/platform/external/selinux/libselinux" class="external"><code>external/selinux/libselinux</code></a>:Android 仅使用外部 <code>libselinux</code> 项目的一个子集,以及一些 Android 专用自定义内容。如需了解详情,请参阅 <a href="https://android.googlesource.com/platform/external/selinux/+/master/README.android" class="external"><code>external/selinux/README.android</code></a>。</li>
+    <li><a href="https://android.googlesource.com/platform/external/selinux/+/master/libsepol/" class="external"><code>external/selinux/libsepol</code></a>:
+      <ul>
+        <li><a href="http://man7.org/linux/man-pages/man8/chkcon.8.html" i class="external"><code>chkcon</code></a>:确定安全环境对指定的二进制政策(主机可执行文件)是否有效。</li>
+        <li><a href="https://android.googlesource.com/platform/external/selinux/+/master/libsepol/" class="external"><code>libsepol</code></a>:用于操控二进制安全政策(主机静态/共享库)的 SELinux 库。</li>
+      </ul>
+    </li>
+    <li><a href="https://android.googlesource.com/platform/external/selinux/+/master/checkpolicy/" class="external"><code>external/selinux/checkpolicy</code></a>:SELinux 政策编译器(主机可执行文件:<code>checkpolicy</code>、<code>checkmodule</code> 和 <code>dispol</code>)。依赖于 <code>libsepol</code>。</li>
+   </ul>
+  </li>
+  <li><a href="https://android.googlesource.com/platform/system/sepolicy/+/master" class="external"><code>system/sepolicy</code></a>:核心 Android SELinux 政策配置,包括上下文文件和政策文件。主要 sepolicy 编译逻辑也位于此处:<code>system/sepolicy/Android.mk</code>。</li>
+</ul>
+<p>
+要详细了解 <code>system/sepolicy</code> 中的文件,请参阅<a href="/security/selinux/implement#key_files">实现 SELinux</a>。
+</p>
+
+<h2 id="android-7">Android 7.0 及更低版本</h2>
+
+<p>本部分介绍如何在 Android 7.x 及更低版本中编译 SELinux 政策。</p>
+
+<h3 id="android-7-building">编译 SELinux 政策</h3>
+<p>
+SELinux 政策通过将核心 AOSP 政策与设备专用自定义政策合并而创建。然后,系统会将合并后的政策传递给政策编译器和各种检查工具。设备专用自定义政策通过在设备专用 <code>Boardconfig.mk</code> 文件中定义的 <code>BOARD_SEPOLICY_DIRS</code> 变量完成。该全局编译变量包含一个用于指定其他政策文件搜索顺序的目录列表。
+</p>
+<p>
+例如,SOC 供应商和 ODM 可以分别添加一个目录,一个用于 SOC 专用设置,另一个用于设备专用设置,以生成针对指定设备的最终 SELinux 配置:
+</p>
+<ul>
+  <li><code>BOARD_SEPOLICY_DIRS += device/<var>SOC</var>/common/sepolicy</code></li>
+  <li><code>BOARD_SEPOLICY_DIRS += device/<var>SoC</var>/<var>DEVICE</var>/sepolicy</code></li>
+</ul>
+<p>
+<code>system/sepolicy</code> 和 <code>BOARD_SEPOLICY_DIRS</code> 中的 file_contexts 文件内容会连接在一起,以便在设备上生成 <code>file_contexts.bin</code>:
+</p>
+
+<figure>
+  <img src="images/n-selinux-build-logic.png" alt="此图显示了 Android 7.x 的 SELinux 编译逻辑。"/>
+  <figcaption><strong>图 1</strong>. SELinux 编译逻辑</figcaption>
+</figure>
+<p>
+<code>sepolicy</code> 文件由多个源文件组成:
+</p>
+<ul>
+  <li>纯文本 <code>policy.conf</code> 是通过依次连接 <code>security_classes</code>、<code>initial_sids</code>、<code>*.te</code> 文件、<code>genfs_contexts</code> 以及 <code>port_contexts</code> 而生成的。</li>
+  <li>对于每个文件(例如 <code>security_classes</code>),其内容都是由 <code>system/sepolicy/</code> 和 <code>BOARDS_SEPOLICY_DIRS</code> 下的同名文件连接而成。</li>
+  <li><code>policy.conf</code> 会被发送到 SELinux 编译器进行语法检查并被编译为二进制格式,从而生成设备上的 <code>sepolicy</code>。
+    <figure>
+      <img src="images/n-selinux-policy-file.png" alt="此图显示了为 Android 7.x 生成 SELinux 政策文件的文件。"/>
+      <figcaption><strong>图 2</strong>. SELinux 政策文件</figcaption>
+    </figure></li>
+</ul>
+
+<h3 id="selinux-files">SELinux 文件</h3>
+<p>
+编译完成后,搭载 Android 7.x 及更低版本的设备通常包含以下与 SELinux 相关的文件:
+</p>
+<ul>
+  <li><code>selinux_version</code></li>
+  <li><code>sepolicy: binary output after combining policy files (security_classes,
+            initial_sids, *.te, etc.)</code></li>
+  <li><code>file_contexts</code></li>
+  <li><code>property_contexts</code></li>
+  <li><code>seapp_contexts</code></li>
+  <li><code>service_contexts</code></li>
+  <li><code>system/etc/mac_permissions.xml</code></li>
+</ul>
+<p>
+如需了解详情,请参阅<a href="/security/selinux/implement">实现 SELinux</a>。
+</p>
+<h3 id="android-n-init">SELinux 初始化</h3>
+<p>
+在系统启动时,SELinux 处于宽容模式(并且不处于强制模式)。init 进程会执行以下任务:
+</p>
+<ul>
+  <li>通过 <code>/sys/fs/selinux/load</code> 将 <code>sepolicy</code> 文件从 ramdisk 加载到内核。</li>
+  <li>将 SELinux 切换到强制模式。</li>
+  <li>对自己执行 re-exec(),以将 SELinux 域规则应用于自身。</li>
+</ul>
+<p>
+为了缩短启动时间,请在尽早在 <code>init</code> 进程中执行 <code>re-exec()</code>。
+</p>
+
+<h2 id="android-o">Android 8.0 及更高版本</h2>
+<p>
+在 Android 8.0 中,SELinux 政策拆分为平台组件和供应商组件,以允许独立进行平台/供应商政策更新,同时保持兼容性。
+</p>
+<p>
+平台 sepolicy 进一步拆分为平台专用部分和平台公共部分,以便将特定类型和属性导出到供应商政策写入程序。平台会保证将公共类型/属性作为指定平台版本的稳定 API 进行维护。借助平台映射文件,平台可以保证与之前多个版本的公共类型/属性兼容。
+</p>
+<h3 id="platform-public">平台公共 sepolicy</h3>
+<p>
+平台公共 sepolicy 包含 <a href="https://android.googlesource.com/platform/system/sepolicy/+/master/public/" class="external"><code>system/sepolicy/public</code></a> 下定义的所有内容。平台可以假设在公共政策下定义的类型和属性是指定平台版本的稳定 API。这构成了 sepolicy 中平台导出的部分,供应商(即设备)政策开发者可以在这部分 sepolicy 中编写其他设备专用政策。
+</p>
+<p>
+类型的版本取决于在编写供应商文件时参照的政策版本(由 <code>PLATFORM_SEPOLICY_VERSION</code> 编译变量所定义)。然后,相应版本的公共政策(以其原始形式)便会与供应商政策一起包含在平台政策中。因此,最终政策包含平台专用政策、当前平台的公共 sepolicy、设备专用政策,以及与编写设备政策时参照的平台版本相对应的适当版本的公共政策。
+</p>
+<h3 id="platform-private">平台专用 sepolicy</h3>
+<p>
+平台专用 sepolicy 包含 <a href="https://android.googlesource.com/platform/system/sepolicy/+/master/private" class="external"><code>/system/sepolicy/private</code></a> 下定义的所有内容。这部分政策构成了运行平台功能所需的平台专用类型、权限和属性。这些内容不会导出到 <code>vendor/device</code> 政策写入程序。非平台政策的写入程序不得根据平台专用 sepolicy 中定义的类型/属性/规则来编写政策扩展程序。此外,在进行框架专用更新时,可以修改或移除这些规则。
+</p>
+<h3 id="platform-private-mapping">平台专用映射</h3>
+<p>
+平台专用映射包含相应政策声明,用于将在之前平台版本的平台公共政策中公开的属性映射到当前平台公共 sepolicy 中所使用的具体类型。这样可以确保根据之前平台公共 sepolicy 版本中的平台公共属性编写的供应商政策可以继续运行。版本控制基于在 AOSP 中为指定平台版本设置的 <code>PLATFORM_SEPOLICY_VERSION</code> 编译变量。之前的每个平台版本都有一个单独的映射文件;平台应通过相应的映射文件接受供应商政策。如需了解详情,请参阅<a href="/security/selinux/compatibility">兼容性</a>。
+</p>
+<h2 id="android-o-build">编译 SELinux 政策</h2>
+<p>
+Android 8.0 中的 SELinux 政策是通过合并 <code>/system</code> 和 <code>/vendor</code> 中的部分内容而创建。适当设置该政策的逻辑位于 <a href="https://android.googlesource.com/platform/system/sepolicy/+/master/Android.mk" class="external"><code>/platform/system/sepolicy/Android.mk</code></a>。
+</p>
+<p>
+政策存在于以下位置:
+</p>
+<table>
+  <tbody><tr>
+   <th>位置</th>
+   <th>包含</th>
+  </tr>
+  <tr>
+    <td><code>system/sepolicy/public</code></td>
+   <td>平台的 sepolicy API</td>
+  </tr>
+  <tr>
+    <td><code>system/sepolicy/private</code></td>
+   <td>平台实现详情(供应商可以忽略)</td>
+  </tr>
+  <tr>
+    <td><code>system/sepolicy/vendor</code></td>
+   <td>供应商可以使用的政策和上下文文件(供应商可以根据情况忽略)</td>
+  </tr>
+  <tr>
+    <td><code>BOARD_SEPOLICY_DIRS</code></td>
+   <td>供应商 sepolicy</td>
+  </tr>
+</tbody></table>
+
+<p>
+编译系统采用该政策,并在系统分区和供应商分区中分别生成平台政策组件和供应商政策组件。具体步骤包括:
+</p>
+<ol>
+ <li>将政策转换为 SELinux 通用中间语言 (CIL) 格式,具体如下:
+  <ol>
+    <li>平台公共政策</li>
+    <li>专用 + 公共组合政策</li>
+    <li>公共 + 供应商和 <code>BOARD_SEPOLICY_DIRS</code> 政策</li>
+  </ol>
+ </li>
+ <li>将公开提供的政策的版本控制为供应商政策的一部分。为此,应使用生成的公共 CIL 政策向公共 + 供应商 + <code>BOARD_SEPOLICY_DIRS</code> 组合政策指明必须将哪些部分转换为将与平台政策相关联的属性。</li>
+ <li>创建将平台和供应商部分关联在一起的映射文件。最初,该文件只是将公共政策中的类型与供应商政策中对应的属性相关联;之后,该文件还为未来的平台版本中维护的文件提供依据,从而兼容以此平台版本作为目标版本的供应商政策。</li>
+ <li>合并政策文件(介绍设备解决方案和预编译解决方案)。
+  <ol>
+    <li>合并映射政策、平台政策和供应商政策。</li>
+    <li>编译输出二进制政策文件。</li>
+  </ol>
+ </li>
+</ol>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/selinux/compatibility.html b/zh-cn/security/selinux/compatibility.html
new file mode 100644
index 0000000..97bf87b
--- /dev/null
+++ b/zh-cn/security/selinux/compatibility.html
@@ -0,0 +1,675 @@
+<html devsite><head>
+    <title>政策兼容性</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>
+本文介绍 Android 如何处理与平台 OTA 相关的政策兼容性问题,其中新平台 SELinux 设置可能与旧供应商 SELinux 设置有所不同。
+</p>
+<p>
+<em></em><em></em>基于 Treble 的 SELinux 政策设计考虑到平台和供应商政策之间的二进制文件区别;如果供应商分区生成依赖项(例如 <code>platform</code> &lt; <code>vendor</code> &lt; <code>oem</code>),则该方案会变得更加复杂。
+</p>
+<p>
+在 Android 8.0 及更高版本中,SELinux 全局政策划分为私有和公共组件。公共组件包含政策和相关基础架构,保证可用于平台版本。
+此政策会向供应商政策编写者公开,让供应商编译的供应商政策文件在与平台提供的政策结合使用时,可以为设备产生功能齐全的政策。
+</p>
+
+<ul>
+  <li>对于版本控制,导出的平台公共政策将编写为属性。<em></em></li>
+  <li>为了便于编写政策,导出的类型将在政策编译流程中转换为版本化属性。<em></em>公共类型也可以直接用于供应商上下文文件提供的标签决策。</li>
+</ul>
+<p>
+<strong>Android 可维护平台政策中导出的具体类型与每个平台版本的相应版本化属性之间的映射</strong>。这可确保在使用类型标记对象时,不会破坏平台公共政策在之前版本中所保证的行为。系统通过使<a href="https://android.googlesource.com/platform/system/sepolicy/+/master/prebuilts/api" class="external">每个平台版本</a>的映射文件保持最新来维护此映射,该映射文件会为公共政策中导出的每种类型保留属性成员资格信息。
+</p>
+
+<h2 id="object-ownership-and-labeling">对象所有权和标签</h2>
+<p>
+在 Android 8.0 及更高版本中自定义政策时,必须为每个对象明确定义所有权,以使平台和供应商政策保持分离。例如,如果供应商标记 <code>/dev/foo</code> 而后平台在后续 OTA 中标记 <code>/dev/foo</code>,则会出现未定义的行为。对于 SELinux,这表现为标签冲突。设备节点只能有一个标签,解析为最后应用的标签。因此:
+</p>
+<ul>
+  <li><em></em>如果进程需要访问未成功应用的标签,则会失去相应资源的访问权限。</li>
+  <li>由于创建了错误的设备节点,因此已获得文件访问权限的进程可能会被中断。<em></em></li>
+</ul>
+<p>
+系统属性也有可能存在命名冲突,进而导致系统上出现未定义行为(以及 SELinux 标签出现此行为)。具有 SELinux 标签的任何对象(包括属性、服务、进程、文件和套接字)都可能会出现平台和供应商标签冲突的情况。要避免此类问题,请明确定义这些对象的所有权。
+</p>
+<p>
+除了标签冲突外,SELinux 类型/属性名称也可能出现冲突。
+类型/属性名称冲突往往会导致政策编译器错误。
+</p>
+<h3 id="type-attribute-namespacing">类型/属性命名空间</h3>
+<p>
+SELinux 不允许相同类型/属性的多个声明。具有重复声明的政策将无法编译。为避免类型和属性名称冲突,所有供应商声明都应是以 <code>np_</code> 开头的命名空间。
+</p>
+
+<pre class="prettyprint">type foo, domain; → type np_foo, domain;</pre>
+
+<h3 id="system-property-and-process-labeling-ownership">系统属性和进程标签所有权</h3>
+<p>
+要避免标签冲突,最有效的解决方法是使用属性命名空间。要在重命名或添加导出的平台属性时轻松识别平台属性并避免名称冲突,请确保所有供应商属性都有各自的前缀:
+</p>
+<table>
+  <tbody><tr>
+   <th>属性类型</th>
+   <th>可接受的前缀</th>
+  </tr>
+  <tr>
+   <td>可读写</td>
+   <td><code>vendor.</code></td>
+  </tr>
+  <tr>
+   <td>只读</td>
+   <td><code>ro.vendor.</code><br />
+       <code>ro.boot.</code><br />
+       <code>ro.hardware.</code>
+   </td>
+  </tr>
+  <tr>
+   <td>永久</td>
+   <td><code>persist.vendor.</code></td>
+  </tr>
+</tbody></table>
+<p>
+供应商可以继续使用 <code>ro.boot.*</code>(来自内核命令行)和 <code>ro.hardware.*</code>(明显的硬件相关属性)。
+</p>
+<p>
+对于非系统分区的 init rc 文件中的服务,init rc 文件中的所有供应商服务都应该包含 <code>vendor.</code>。类似的规则适用于供应商属性的 SELinux 标签(<code>vendor_</code> 表示供应商属性)。
+</p>
+<h3 id="file-ownership">文件所有权</h3>
+<p>
+避免文件冲突是一项具有挑战性的工作,因为平台和供应商政策通常都为所有文件系统提供标签。与类型命名不同,文件的命名空间并不实用,因为其中很多都是由内核创建的。要避免此类冲突,请遵循本节中文件系统的命名指南。对于 Android 8.0,这些指南只是建议,并不要求在技术上强制执行。将来,这些建议将由<a href="/compatibility/vts/">供应商测试套件</a> (VTS) 强制执行。
+</p>
+<h4 id="system">系统 (/system)</h4>
+<p>
+只有系统映像必须通过 <code>file_contexts</code>、<code>service_contexts</code> 等为 <code>/system</code> 组件提供标签。如果在 <code>/vendor</code> 政策中添加了 <code>/system</code> 组件的标签,则可能会导致仅针对框架的 OTA 更新无法实现。
+</p>
+<h4 id="vendor">供应商 (/vendor)</h4>
+<p>
+AOSP SELinux 政策已经为平台与之交互的 <code>vendor</code> 分区部分添加标签,因此能够为平台进程编写 SELinux 规则,以便访问 <code>vendor</code> 分区部分并/或与之通信。示例:
+</p>
+<table>
+  <tbody><tr>
+    <th><code>/vendor</code> 路径</th>
+   <th>平台提供的标签</th>
+   <th>取决于标签的平台进程</th>
+  </tr>
+  <tr>
+   <td><code>/vendor(/.<strong>*</strong>)?</code>
+   </td>
+   <td><code>vendor_file</code>
+   </td>
+   <td>框架中的所有 HAL 客户端、<code>ueventd</code> 等</td>
+  </tr>
+  <tr>
+   <td><code>/vendor/framework(/.<strong>*</strong>)?</code>
+   </td>
+   <td><code>vendor_framework_file</code>
+   </td>
+   <td><code>dex2oat</code>、<code>appdomain</code> 等</td>
+  </tr>
+  <tr>
+   <td><code>/vendor/app(/.<strong>*</strong>)?</code>
+   </td>
+   <td><code>vendor_app_file</code>
+   </td>
+   <td><code>dex2oat</code>、<code>installd</code>、<code>idmap</code> 等</td>
+  </tr>
+  <tr>
+   <td><code>/vendor/overlay(/.<strong>*</strong>)</code>
+   </td>
+   <td><code>vendor_overlay_file</code>
+   </td>
+   <td><code>system_server</code>、<code>zygote</code>、<code>idmap</code> 等</td>
+  </tr>
+</tbody></table>
+<aside class="note">
+  <strong>*</strong> 有关更多示例,请参阅 <a href="https://android.googlesource.com/platform/system/sepolicy/+/master/private/file_contexts" class="external"><code>system/sepolicy/private/file_contexts</code></a>。</aside>
+
+<p>
+因此,您在 <code>vendor</code> 分区中标记额外的文件时,必须遵循特定规则(通过 <code>neverallows</code> 强制执行):
+</p>
+<ul>
+<li><code>vendor_file </code> 必须是 <code>vendor</code> 分区中所有文件的默认标签。平台政策要求使用此标签来访问直通式 HAL实现。</li>
+<li>通过供应商 SEPolicy 在 <code>vendor</code> 分区中添加的所有新 <code>exec_types</code> 均必须具有 <code>vendor_file_type</code> 属性。这一规则将通过 neverallows 强制执行。</li>
+<li>为了避免与将来的平台/框架更新发生冲突,请避免在 <code>exec_types</code> 分区中标记除 <code>vendor</code> 之外的文件。</li>
+<li>AOSP 标识的 Same-Process HAL 的所有库依赖项均必须标记为 <code>same_process_hal_file.</code>。</li></ul>
+
+<h4 id="procfs">Procfs (/proc)</h4>
+<p>
+<code>/proc</code> 中的文件可以仅使用 <code>genfscon</code> 标签进行标记。在 Android 7.0 中,<a href="https://android.googlesource.com/platform/system/sepolicy/+/nougat-dr1-release/genfs_contexts" class="external">平台</a>和<a href="https://android.googlesource.com/device/google/marlin/+/nougat-dr1-release/sepolicy/genfs_contexts" class="external">供应商</a>政策都使用 <code>genfscon</code> 来标记 <code>procfs</code> 中的文件。
+</p>
+<p>
+<strong>建议</strong>:只有平台政策标记 <code>/proc</code>。如果 <code>vendor</code> 进程需要访问 <code>/proc</code> 中当前使用默认标签 (<code>proc</code>) 标记的文件,则供应商政策不应明确标记它们,而应使用常规 <code>proc</code> 类型为供应商域添加规则。这样,平台更新可以适应通过 <code>procfs</code> 公开的未来内核接口,并根据需要进行明确标记。
+</p>
+<h4 id="debugfs">Debugfs (/sys/kernel/debug)</h4>
+<p>
+<code>Debugfs</code> 可以在 <code>file_contexts</code> 和 <code>genfscon</code> 中进行标记。在 Android 7.0 中,平台和供应商都会标记 <code>debugfs</code>。
+</p>
+<p>
+<strong>建议</strong>:在短期内,只有供应商政策标记 <code>debugfs</code>。从长远来看,请移除 <code>debugfs</code>。
+</p>
+<h4 id="tracefs">Tracefs (/sys/kernel/debug/tracing)</h4>
+<p>
+<code>Tracefs</code> 可以在 <code>file_contexts</code> 和 <code>genfscon</code> 中进行标记。在 Android 7.0 中,只有平台标记 <code>tracefs</code>。
+</p>
+<p>
+<strong>建议</strong>:只有平台标记 <code>tracefs</code>。
+</p>
+<h4 id="sysfs">Sysfs (/sys)</h4>
+<p>
+<code>/sys</code> 中的文件可以使用 <code>file_contexts</code> 和 <code>genfscon</code> 进行标记。在 Android 7.0 中,平台和供应商都使用 <code>file_contexts</code> 和 <code>genfscon</code> 来标记 <code>sysfs</code> 中的文件。
+</p>
+<p>
+<strong>建议</strong>:平台可以标记非设备特定的 <code>sysfs</code> 节点。否则,只有供应商可以标记文件。
+</p>
+<h4 id="tmpfs">tmpfs (/dev)</h4>
+<p>
+<code>/dev</code> 中的文件可以在 <code>file_contexts</code> 中进行标记。在 Android 7.0 中,平台和供应商标签文件都在这里。
+</p>
+<p>
+<strong>建议</strong>:供应商只能标记 <code>/dev/vendor</code> 中的文件(例如 <code>/dev/vendor/foo</code>、<code>/dev/vendor/socket/bar</code>)。
+</p>
+<h4 id="rootfs">Rootfs (/)</h4>
+<p>
+<code>/</code> 中的文件可以在 <code>file_contexts</code> 中进行标记。在 Android 7.0 中,平台和供应商标签文件都在这里。
+</p>
+<p>
+<strong>建议</strong>:只有系统可以标记 <code>/</code> 中的文件。
+</p>
+<h4 id="data-data">数据 (/data)</h4>
+<p>
+数据可以通过 <code>file_contexts</code> 和 <code>seapp_contexts</code> 组合进行标记。
+</p>
+<p>
+<strong>建议</strong>:禁止供应商在 <code>/data/vendor</code> 之外进行标记。只有平台可以标记 <code>/data</code> 的其他部分。
+</p>
+
+<h2 id="compatibility-attributes">兼容性属性</h2>
+<p>
+SELinux 政策是特定对象类和权限的源类型和目标类型之间的交互。受 SELinux 政策影响的每个对象(进程、文件等)可能只有一种类型,但该类型可能有多个属性。
+</p>
+<p>
+政策大多根据现有类型编写:
+</p>
+
+<pre class="prettyprint">allow source_type target_type:target_class permission(s);</pre>
+<p>
+这之所以有效,是因为政策是在基于对所有类型了解的基础上而编写的。但是,如果供应商政策和平台政策使用特定类型,而特定对象的标签仅在其中一项政策中发生变化,则另一个所包含的政策可能会获得或失去之前所依赖的访问权限。例如:
+</p>
+
+<pre class="prettyprint">File_contexts:
+/sys/A   u:object_r:sysfs:s0
+Platform: allow p_domain sysfs:class perm;
+Vendor: allow v_domain sysfs:class perm;</pre>
+<p>
+可以改为:
+</p>
+
+<pre class="prettyprint">File_contexts:
+/sys/A   u:object_r:sysfs_A:s0</pre>
+<p>
+尽管供应商政策将保持不变,但由于缺少针对新 <code>sysfs_A</code> 类型的政策,<code>v_domain</code> 将失去访问权限。
+</p>
+<p>
+通过根据属性定义政策,我们可以为底层对象提供一个类型,该类型具有与平台和供应商代码的政策相对应的属性。可以针对所有类型完成此操作,以便有效地创建一个其中从不使用具体类型的属性政策。<em></em>实际上,只需对平台和供应商之间重叠的政策部分执行此操作,这些部分是作为平台公共政策(作为供应商政策的一部分进行编译)定义和提供的。<em></em>
+</p>
+<p>
+将公共政策定义为版本化属性可实现以下两个政策兼容性目标:
+</p>
+<ul>
+ <li><strong>确保供应商代码在平台更新后继续有效</strong>。
+通过向与供应商代码所依赖的对象相对应的对象的具体类型添加属性,保留访问权限,可以做到这一点。</li>
+ <li><strong>能够弃用政策</strong>。通过将政策集明确地划分到属性(在与这些属性对应的版本不再受支持时,可以立即移除这些属性)中,可以做到这一点。由于知道旧政策依然存在于供应商政策中,并且会在升级时被自动移除,因此可以继续在平台中进行开发。</li>
+</ul>
+
+<h3 id="policy-writability">政策可写性</h3>
+<p>
+为了实现无需了解具体版本变化即可制定政策的目标,Android 8.0 包含平台公共政策类型与其属性之间的映射。类型 <code>foo</code> 映射到属性 <code>foo_v<em>N</em></code>,其中 <code><em>N</em></code> 是目标版本。<code>vN</code> 对应于 <code>PLATFORM_SEPOLICY_VERSION</code> 编译变量,格式为 <code>MM.NN</code>(其中 <code>MM</code> 对应于平台 SDK 编号,<code>NN</code> 是平台 sepolicy 特定版本)。
+</p>
+<p>
+公共政策中的属性未进行版本化,而是以 API 形式存在(可以据此构建平台和供应商政策,以使两个分区之间的接口保持稳定)。平台和供应商政策写入程序都可以像当前那样继续写入政策。
+</p>
+<p>
+以 <code>allow source_foo target_bar:<em>class
+perm</em>;</code> 形式导出的平台公共政策包含在供应商政策中。在<a href="/security/selinux/build">编译</a>(包括相应的版本)期间,它将转换为将放入设备供应商部分的政策(显示在转换后的通用中间语言 (CIL) 中):
+</p>
+<pre class="prettyprint"> (allow source_foo_vN target_bar_vN (class (perm)))</pre>
+<p>
+由于供应商政策绝不会比平台更早,因此不必须顾虑以前的版本。但是,平台政策需要知道供应商政策追溯到什么时候,将属性添加到其所属类型中,并设置与版本化属性相对应的政策。
+</p>
+
+<h3 id="policy-diffs">政策差异</h3>
+<p>
+如果不在各版本差异中将属性映射到类型,那么通过向每种类型的末尾处添加 <code>_v<em>N</em></code> 来自动创建属性不起任何作用。Android 维护着属性版本之间的映射以及类型到这些属性的映射。这是在前面提到的包含语句的映射文件(例如 (CIL))中完成的:
+</p>
+
+<pre class="prettyprint">(typeattributeset foo_vN (foo))</pre>
+
+<h4 id="platform-upgrades">平台升级</h4>
+<p>
+以下部分详细介绍了平台升级的各种情况。
+</p>
+
+<h5 id="same-types">相同的类型</h5>
+<p>
+当对象未更改政策版本中的标签时,会出现这种情况。
+源类型和目标类型同样会出现这种情况,可以通过 <code>/dev/binder</code> 查看,后者在所有版本中都带有 <code>binder_device</code> 标签。它在转换后的政策中表示为以下形式:
+</p>
+
+<pre class="prettyprint">binder_device_v1 … binder_device_vN</pre>
+<p>
+从 <code>v1</code> 升级到 <code>v2</code> 时,平台政策必须包含:
+</p>
+
+<pre class="prettyprint">type binder_device; -&gt; (type binder_device) (in CIL)</pre>
+<p>
+在 v1 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattributeset binder_device_v1 (binder_device))</pre>
+<p>
+在 v2 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattributeset binder_device_v2 (binder_device))</pre>
+<p>
+在 v1 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute binder_device_v1)
+(allow binder_device_v1 …)</pre>
+<p>
+在 v2 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute binder_device_v2)
+(allow binder_device_v2 …)</pre>
+<h5 id="new-types">新类型</h5>
+<p>
+在添加新功能时或政策安全强化期间,平台会添加新类型,此时便会出现这种情况。
+</p>
+<ul>
+<li><strong>新功能</strong>。当该类型标记以前不存在的对象(例如新服务进程)时,供应商代码之前未与其直接交互,因此不存在相应的政策。与该类型对应的新属性在以前的版本中没有属性,因此映射文件中不需要包含定位到该版本的条目。</li>
+<li><strong>政策安全强化</strong>。当该类型表示政策安全强化时,新的类型属性必须链接回与前一个类型对应的属性链(与上一个示例将 <code>/sys/A</code> 从 <code>sysfs</code> 更改为 <code>sysfs_A</code> 类似)。供应商代码依赖于允许访问 <code>sysfs</code> 的规则,并且需要将该规则添加为新类型的属性。</li>
+</ul>
+
+<p>
+从 <code>v1</code> 升级到 <code>v2</code> 时,平台政策必须包含:
+</p>
+
+<pre class="prettyprint">type sysfs_A; -&gt; (type sysfs_A) (in CIL)
+type sysfs; (type sysfs) (in CIL)</pre>
+<p>
+在 v1 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattributeset sysfs_v1 (sysfs sysfs_A))</pre>
+<p>
+在 v2 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattributeset sysfs_v2 (sysfs))
+(typeattributeset sysfs_A_v2 (sysfs_A))</pre>
+<p>
+在 v1 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute sysfs_v1)
+(allow … sysfs_v1 …)</pre>
+<p>
+在 v2 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute sysfs_A_v2)
+(allow … sysfs_A_v2 …)
+(typeattribute sysfs_v2)
+(allow … sysfs_v2 …)</pre>
+
+<h5 id="removed-types">移除的类型</h5>
+<p>
+类型会在底层对象发生以下情形时遭到移除,此时便会出现这种(罕见)情况:
+</p>
+<ul>
+<li>仍然存在但获得不同的标签。</li>
+<li>被平台移除。</li>
+</ul>
+<p>
+在政策放松期间,系统会移除某个类型,并为使用该类型标记的对象提供其他已存在的标签。这表示属性映射的合并:供应商代码必须仍然能够通过底层对象曾经拥有的属性访问该底层对象,但系统的其余部分现在必须能够通过其新属性访问它。
+</p>
+<p>
+如果它改用新属性,则重新添加标签与在新类型中相同,不同之处在于:使用现有标签时,为新类型添加旧属性将导致同样使用此类型标记的其他对象也变得可以访问。这本质上是由平台完成的,并被视为一种为保持兼容性而可以接受的权衡。
+</p>
+
+<pre class="prettyprint">(typeattribute sysfs_v1)
+(allow … sysfs_v1 …)</pre>
+<p>
+<strong>示例版本 1:合并类型(移除 sysfs_A)</strong>
+</p>
+<p>
+从 <code>v1</code> 升级到 <code>v2</code> 时,平台政策必须包含:
+</p>
+
+<pre class="prettyprint">type sysfs; (type sysfs) (in CIL)</pre>
+<p>
+在 v1 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattributeset sysfs_v1 (sysfs))
+(type sysfs_A) # in case vendors used the sysfs_A label on objects
+(typeattributeset sysfs_A_v1 (sysfs sysfs_A))</pre>
+<p>
+在 v2 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattributeset sysfs_v2 (sysfs))</pre>
+<p>
+在 v1 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute sysfs_A_v1)
+(allow … sysfs_A_v1 …)
+(typeattribute sysfs_v1)
+(allow … sysfs_v1 …)</pre>
+<p>
+在 v2 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute sysfs_v2)
+(allow … sysfs_v2 …)</pre>
+<p>
+<strong>示例版本 2:完全移除(foo 类型)</strong>
+</p>
+<p>
+从 <code>v1</code> 升级到 <code>v2</code> 时,平台政策必须包含:
+</p>
+
+<pre class="prettyprint"># nothing - we got rid of the type</pre>
+<p>
+在 v1 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(type foo) #needed in case vendors used the foo label on objects
+(typeattributeset foo_v1 (foo))</pre>
+<p>
+在 v2 映射文件 (CIL) 中:
+</p>
+
+<pre class="prettyprint"># nothing - get rid of it</pre>
+<p>
+在 v1 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute foo_v1)
+(allow foo …)
+(typeattribute sysfs_v1)
+(allow sysfs_v1 …)</pre>
+<p>
+在 v2 供应商政策 (CIL) 中:
+</p>
+
+<pre class="prettyprint">(typeattribute sysfs_v2)
+(allow sysfs_v2 …)</pre>
+
+<h5 id="new-class-permissions">新类/权限</h5>
+<p>
+当平台升级引入先前版本中不存在的新政策组件时,会出现这种情况。例如,当 Android 添加了创建添加、查找和列出权限的 <code>servicemanager</code> 对象管理器时,想要向 <code>servicemanager</code> 注册的供应商守护程序需要之前未提供的权限。在 Android 8.0 中,只有平台政策可以添加新的类和权限。
+</p>
+<p>
+要允许所有可能由供应商政策创建或扩展的域毫无阻碍地使用新类,平台政策需要包含类似于下文的规则:
+</p>
+
+<pre class="prettyprint">allow {domain -coredomain} *:new_class perm;</pre>
+<p>
+这甚至可能需要政策允许访问所有接口(公共政策)类型,以确保供应商映像获得访问权限。如果这会导致不可接受的安全政策(就像 servicemanager 更改可能会导致的结果一样),则系统可能会强制进行供应商升级。
+</p>
+<h5 id="removed-class-permissions">移除的类/权限</h5>
+<p>
+移除对象管理器(例如 <code>ZygoteConnection</code> 对象管理器)会出现这种情况,应该不会导致出现问题。对象管理器类和权限可以一直在政策中保持已定义状态,直到供应商版本不再使用它为止。通过在相应的映射文件中添加定义,可以做到这一点。
+</p>
+<h4 id="vendor-customization-for-new-relabeled-types">新类型/重新添加标签的类型的供应商自定义</h4>
+<p>
+新供应商类型是制定供应商政策的核心,这是因为新供应商类型是说明新进程、二进制文件、设备、子系统和存储的数据所必需的。因此,必须允许创建供应商定义的类型。
+</p>
+<p>
+由于供应商政策始终是设备上最旧的政策,因此无需自动将所有供应商类型转换为政策中的属性。平台不依赖于在供应商政策中标记的任何内容,因为平台并不知道它;但是,平台将提供它与带有这些类型标记的对象(例如 <code>domain</code>、<code>sysfs_type</code> 等)进行交互所用的属性和公共类型。为使平台继续与这些对象正确交互,必须适当地应用这些属性和类型,并且可能需要将特定规则添加到可自定义域(例如 <code>init</code>)中。
+</p>
+
+<h2 id="attributes-p">Android 9 的属性更改</h2>
+<p>
+升级到 Android 9 的设备可以使用以下属性,但搭载 Android 9 的设备不必如此。
+</p>
+<h3 id="violator-attributes">违规者属性</h3>
+<p>
+Android 9 包含以下与域相关的属性:
+</p>
+<ul>
+<li><strong><code>data_between_core_and_vendor_violators</code></strong>。
+违反不得按 <code>vendor</code> 和 <code>coredomains</code> 之间的路径共享文件这一要求的所有域的属性。平台和供应商进程不应使用磁盘文件进行通信(不稳定的 ABI)。
+建议:
+<ul>
+  <li>供应商代码应使用 <code>/data/vendor</code>。</li>
+  <li>系统不应使用 <code>/data/vendor</code>。</li>
+  </ul></li>
+<li><strong><code>system_executes_vendor_violators</code></strong>。违反不执行供应商二进制文件这一要求的所有系统域(<code>init</code> 和 <code>shell domains</code> 除外)的属性。供应商二进制文件的执行具有不稳定的 API。平台不应直接执行供应商二进制文件。建议:
+<ul>
+ <li>供应商二进制文件中的此类平台依赖项必须位于 HIDL HAL 之后。
+   <p> <strong><em>或</em></strong></p></li>
+ <li>需要访问供应商二进制文件的 <code>coredomains</code> 应移至供应商分区,因此不再是 <code>coredomain</code>。</li>
+</ul>
+</li>
+</ul>
+
+<h3 id="untrusted-attributes">不受信任的属性</h3>
+<p>
+托管任意代码的不受信任的应用不应具有 HwBinder 服务的访问权限,但被视为足够安全而可以通过此类应用访问的服务除外(请参阅下面的安全服务)。这主要有以下两个原因:
+</p>
+<ol>
+<li>HwBinder 服务器不会执行客户端身份验证,因为 HIDL 目前未公开调用方 UID 信息。即使 HIDL 确实公开了此类数据,许多 HwBinder 服务也会在低于应用的级别运行(例如 HAL),或者不能依赖应用身份进行授权。因此,为了安全起见,默认假设是每个 HwBinder 服务都将其所有客户端视为具有可执行该服务所提供操作的同等授权。</li>
+<li>HAL 服务器(HwBinder 服务的一个子集)包含安全问题选择率高于 <code>system/core</code> 组件的代码,并且可以访问堆栈的较低层级(一直到硬件),从而提升绕过 Android 安全模型的机率。</li></ol>
+
+<h4 id="safe-services">安全服务</h4>
+<p>
+安全服务包括:
+</p>
+<ul>
+<li><code>same_process_hwservice</code>。这些服务(根据定义)在客户端进程中运行,因此与运行该进程的客户端域具有相同的访问权限。</li>
+<li><code>coredomain_hwservice</code>。这些服务不会带来与第 2 种原因相关的风险。</li>
+<li><code>hal_configstore_ISurfaceFlingerConfigs</code>。此服务专供任何域使用。</li>
+<li><code>hal_graphics_allocator_hwservice</code>。<code>surfaceflinger</code> Binder 服务(应用可以访问该服务)也提供这些操作。</li>
+<li><code>hal_omx_hwservice</code>。这是 <code>mediacodec</code> Binder 服务(应用可以访问该服务)的 HwBinder 版本。</li>
+<li><code>hal_codec2_hwservice</code>。这是较新版本的 <code>hal_omx_hwservice</code>。</li>
+</ul>
+
+<h4 id="useable-attributes">可用的属性</h4>
+<p>
+所有被认为不安全的 <code>hwservices</code> 都具有 <code>untrusted_app_visible_hwservice</code> 属性。相应的 HAL 服务器具有 <code>untrusted_app_visible_halserver</code> 属性。搭载 Android P 的设备绝不得使用 <code>untrusted</code> 属性。
+</p>
+<p>
+建议:
+</p>
+<ul>
+<li>不受信任的应用应与系统服务通信,系统服务再与供应商 HIDL HAL 通信。例如,应用可以与 <code><a href="https://android.googlesource.com/platform/system/sepolicy/+/master/public/app.te#209" class="external">binderservicedomain</a></code> 通信,然后 <code>mediaserver</code>(这是 <code>binderservicedomain</code>)再与 <code><a href="https://android.googlesource.com/platform/system/sepolicy/+/master/private/mediaserver.te#6" class="external">hal_graphics_allocator</a></code> 通信。
+
+<p><strong><em>或</em></strong></p></li>
+<li>需要直接访问 <code>vendor</code> HAL 的应用应具有各自的供应商定义的 sepolicy 域。</li>
+</ul>
+
+<h3 id="file-attribute-tests">文件属性测试</h3>
+<p>
+Android 9 包含<a href="https://android.googlesource.com/platform/system/sepolicy/+/master/tests/sepolicy_tests.py" class="external">编译时测试</a>,可确保特定位置的所有文件都具有适当的属性(例如,<code>sysfs</code> 中的所有文件都具有所需的 <code>sysfs_type</code> 属性)。
+</p>
+
+<h2 id="platform-public-policy">平台公共政策</h2>
+<p>
+平台公共政策是遵循 Android 8.0 架构模型的核心所在,而不是简单地将 v1 和 v2 中的平台政策结合起来。供应商可以看到平台政策的一部分(包含可用类型和属性以及关于这些类型和属性的规则),这部分随后会包含在供应商政策中(即 <code>vendor_sepolicy.cil</code>)。
+</p>
+<p>
+类型和规则会在供应商生成的政策中自动转换为 <code>attribute_v<em>N</em></code>,以便所有平台提供的类型都是版本化属性(但属性不是版本化属性)。平台负责将其提供的具体类型映射到适当的属性,以确保供应商政策继续有效,并将为特定版本提供的规则包括在内。将平台公共政策和供应商政策相结合可满足 Android 8.0 架构模型目标,即允许独立平台和供应商构建。
+</p>
+
+<h3 id="mapping-to-attribute-chains">映射到属性链</h3>
+<p>
+使用属性映射到政策版本时,一个类型会映射到一个或多个属性,确保使用该类型标记的对象可通过与这些对象之前的类型对应的属性访问。
+</p>
+<p>
+达成向政策编写器隐藏版本信息的目标意味着自动生成版本化属性并分配给适当的类型。对于常见的静态类型,这很简单:<code>type_foo</code> 映射到 <code>type_foo_v1</code>。
+</p>
+<p>
+对于对象标签更改(例如 <code>sysfs</code> → <code>sysfs_A</code> 或 <code>mediaserver</code> → <code>audioserver</code>),创建此映射非常重要(如上面的示例中所述)。平台政策维护者必须确定如何在对象的转换点处创建映射,这需要了解对象及其所分配到的标签之间的关系并确定何时发生这种情况。为了实现向后兼容性,需要在平台端(这是唯一可以升级的分区)管理这种复杂性。</p>
+<h3 id="version-uprevs">版本升级</h3>
+<p>
+为简单起见,Android 平台会在新版本分支发布后推出一个 sepolicy 版本。如上所述,版本号包含在 <code>PLATFORM_SEPOLICY_VERSION</code> 中,其格式为 <code>MM.nn</code>,其中 <code>MM</code> 对应于 SDK 值,<code>nn</code> 是在<code> /platform/system/sepolicy.</code> 中维护的不公开值。  例如,<code>19.0</code> 对应于 Kitkat,<code>21.0</code> 对应于 Lollipop,<code>22.0</code> 对应于 Lollipop-MR1,<code>23.0</code> 对应于 Marshmallow,<code>24.0</code> 对应于 Nougat,<code>25.0</code> 对应于 Nougat-MR1,<code>26.0</code> 对应于 Oreo,<code>27.0</code> 对应于 Oreo-MR1,<code>28.0</code> 对应于 Android P。Uprevs 不一定总是整数。例如,如果因 MR 版本递增而需要对 <code>system/sepolicy/public</code> 进行不兼容的更改,但不是 API 递增,则该 sepolicy 版本可以为 <code>vN.1</code>。开发分支中的版本是 <code>10000.0</code>,该版本绝不会用在搭载 Android 的设备中。
+</p>
+<p>
+Android 可能会在升级时弃用最旧的版本。为了解何时弃用某个版本,Android 可能会根据供应商政策收集运行该 Android 版本且仍在接收主要平台更新的设备数量。如果该数字小于特定阈值,则会弃用该版本。
+</p>
+<h3 id="performance-impact-of-multiple-attributes">多个属性的性能影响</h3>
+<p>
+如 <a href="https://github.com/SELinuxProject/cil/issues/9" class="external">https://github.com/SELinuxProject/cil/issues/9</a> 中所述,分配给某种类型的大量属性会在政策缓存未命中时导致性能问题。
+</p>
+<p>
+这已被证实是 Android 中存在的问题,因此我们对 Android 8.0 <a href="http://marc.info/?l=selinux&m=149202161421482&w=2" class="external">进行了更改</a>,以移除政策编译器添加到政策中的属性,另外还移除了未使用的属性。这些更改解决了性能降低问题。
+</p>
+
+<h2 id="selinux-contexts-labeling">SELinux 上下文标签</h2>
+<p>为便于区别平台和供应商 sepolicy,系统以不同方式构建 SELinux 上下文文件以使它们分离开来。
+</p>
+
+<h3 id="file-contexts">文件上下文</h3>
+<p>
+Android 8.0 为 <code>file_contexts</code> 引入了以下更改:
+</p>
+<ul>
+  <li>为避免启动期间在设备上产生额外的编译开销,<code>file_contexts</code> 不再以二进制文件形式存在,而是可读的正则表达式文本文件,例如 <code>{property,
+  service}_contexts</code>(和 7.0 之前的版本一样)。</li>
+  <li><code>file_contexts</code> 拆分为两个文件:
+    <ul>
+      <li><code>plat_file_contexts</code>
+        <ul>
+          <li>没有任何设备特定标签的 Android 平台 <code>file_context</code>(<code>/vendor</code> 分区的标签部分除外,为确保 sepolicy 文件正常运行必须为这些部分准确添加标签)。</li>
+          <li>必须位于设备上 <code>system</code> 分区中的 <code>/system/etc/selinux/plat_file_contexts</code> 下,并由 <code>init</code> 在启动时加载(与供应商 <code>file_context</code> 一起加载)。</li>
+        </ul>
+      </li>
+      <li><code>vendor_file_contexts</code>
+        <ul>
+          <li>设备特定 <code>file_context</code>,通过合并 <code>file_contexts</code>(位于设备的 <code>Boardconfig.mk</code> 文件中由 <code>BOARD_SEPOLICY_DIRS</code> 指向的目录下)进行编译。</li>
+          <li>必须安装在 <code>vendor</code> 分区的 <code>/vendor/etc/selinux/vendor_file_contexts</code> 中,并在启动时由 <code>init</code> 加载(与平台 <code>file_context</code> 一起加载)。</li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="property-contexts">属性上下文</h3>
+<p>
+在 Android 8.0 中,<code>property_contexts</code> 拆分到两个文件中:
+</p>
+<ul>
+  <li><code>plat_property_contexts</code>
+    <ul>
+      <li>没有任何设备特定标签的 Android 平台 <code>property_context</code>。</li>
+      <li>必须位于 <code>system</code> 分区中的 <code>/system/etc/selinux/plat_property_contexts</code> 下,并由 <code>init</code> 在启动时加载(与供应商 <code>property_contexts</code> 一起加载)。</li>
+    </ul>
+  </li>
+  <li><code>vendor_property_contexts</code>
+    <ul>
+      <li>设备特定 <code>property_context</code>,通过合并 <code>property_contexts</code>(位于设备的 <code>Boardconfig.mk</code> 文件中由 <code>BOARD_SEPOLICY_DIRS</code> 指向的目录下)进行编译。</li>
+      <li>必须位于 <code>vendor</code> 分区中的 <code>/vendor/etc/selinux/vendor_property_contexts</code> 下,并由 <code>init</code> 在启动时加载(与平台 <code>property_context</code> 一起加载)。</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="service-contexts">服务上下文</h3>
+<p>
+在 Android 8.0 中,<code>service_contexts</code> 拆分到以下两个文件中:
+</p>
+<ul>
+  <li><code>plat_service_contexts</code>
+    <ul>
+      <li><code>servicemanager</code> 的 Android 平台特定 <code>service_context</code>。<code>service_context</code> 没有设备特定标签。</li>
+      <li>必须位于 <code>system</code> 分区中的 <code>/system/etc/selinux/plat_service_contexts</code> 下,并由 <code>servicemanager</code> 在启动时加载(与供应商 <code>service_contexts</code> 一起加载)。</li>
+    </ul>
+  </li>
+  <li><code>vendor_service_contexts</code>
+    <ul>
+      <li>设备特定 <code>service_context</code>,通过合并 <code>service_contexts</code>(位于设备的 <code>Boardconfig.mk</code> 文件中由 <code>BOARD_SEPOLICY_DIRS</code> 指向的目录下)进行编译。</li>
+      <li>必须位于 <code>vendor</code> 分区中的 <code>/vendor/etc/selinux/vendor_service_contexts</code> 下,并由 <code>servicemanager</code> 在启动时加载(与平台 <code>service_contexts</code> 一起加载)。</li>
+      <li>虽然 <code>servicemanager</code> 会在启动时查找此文件,但对于完全兼容的 <code>TREBLE</code> 设备,<code>vendor_service_contexts</code> 绝不能存在。这是因为 <code>vendor</code> 和 <code>system</code> 进程之间的所有交互都必须执行 <code>hwservicemanager</code>/<code>hwbinder</code>。</li>
+    </ul>
+  </li>
+  <li><code>plat_hwservice_contexts</code>
+    <ul>
+      <li><code>hwservicemanager</code> 的 Android 平台 <code>hwservice_context</code>(没有任何设备特定标签)。</li>
+      <li>必须位于 <code>system</code> 分区中的 <code>/system/etc/selinux/plat_hwservice_contexts</code> 下,并由 <code>hwservicemanager</code> 在启动时加载(与 <code>vendor_hwservice_contexts</code> 一起加载)。</li>
+    </ul>
+  </li>
+  <li><code>vendor_hwservice_contexts</code>
+    <ul>
+      <li>设备特定 <code>hwservice_context</code>,通过合并 <code>hwservice_contexts</code>(位于设备的 <code>Boardconfig.mk</code> 文件中由 <code>BOARD_SEPOLICY_DIRS</code> 指向的目录下)进行编译。</li>
+      <li>必须位于 <code>vendor</code> 分区中的 <code>/vendor/etc/selinux/vendor_hwservice_contexts</code> 下,并由 <code>hwservicemanager</code> 在启动时加载(与 <code>plat_service_contexts</code> 一起加载)。</li>
+    </ul>
+  </li>
+  <li><code>vndservice_contexts</code>
+    <ul>
+      <li><code>vndservicemanager</code> 的设备特定 <code>service_context</code>,通过合并 <code>vndservice_contexts</code>(位于设备的 <code>Boardconfig.mk</code> 文件中由 <code>BOARD_SEPOLICY_DIRS</code> 指向的目录下)进行编译。</li>
+      <li>必须位于 <code>vendor</code> 分区中的 <code>/vendor/etc/selinux/vndservice_contexts</code> 下,并由 <code>vndservicemanager</code> 在启动时加载。</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="seapp-contexts">Seapp 上下文</h3>
+<p>
+在 Android 8.0 中,<code>seapp_contexts</code> 拆分到两个文件中:
+</p>
+<ul>
+  <li><code>plat_seapp_contexts</code>
+    <ul>
+      <li>没有设备特定更改的 Android 平台 <code>seapp_context</code>。</li>
+      <li>必须位于 <code>system</code> 分区中的 <code>/system/etc/selinux/plat_seapp_contexts.</code> 下。</li>
+    </ul>
+  </li>
+  <li><code>vendor_seapp_contexts</code>
+    <ul>
+      <li>平台 <code>seapp_context</code> 的设备特定扩展,通过合并 <code>seapp_contexts</code>(位于设备的 <code>Boardconfig.mk</code> 文件中由 <code>BOARD_SEPOLICY_DIRS</code> 指向的目录下)进行编译。</li>
+      <li>必须位于 <code>vendor</code> 分区中的 <code>/vendor/etc/selinux/vendor_seapp_contexts</code> 下。</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="mac-permissions">MAC 权限</h3>
+<p>
+在 Android 8.0 中,<code>mac_permissions.xml</code> 拆分到两个文件中:
+</p>
+<ul>
+  <li>平台 <code>mac_permissions.xml</code>
+    <ul>
+      <li>没有设备特定更改的 Android 平台 <code>mac_permissions.xml</code>。</li>
+      <li>必须位于 <code>system</code> 分区中的 <code>/system/etc/selinux/.</code> 下。</li>
+    </ul>
+  </li>
+  <li>非平台 <code>mac_permissions.xml</code>
+    <ul>
+      <li>平台 <code>mac_permissions.xml</code> 的设备特定扩展,通过 <code>mac_permissions.xml</code>(位于设备的 <code>Boardconfig.mk</code> 文件中由 <code>BOARD_SEPOLICY_DIRS</code> 指向的目录下)进行编译。</li>
+      <li>必须位于 <code>vendor</code> 分区中的 <code>/vendor/etc/selinux/.</code> 下。</li>
+    </ul>
+  </li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/selinux/customize.html b/zh-cn/security/selinux/customize.html
index 9cbacff..58b1717 100644
--- a/zh-cn/security/selinux/customize.html
+++ b/zh-cn/security/selinux/customize.html
@@ -54,8 +54,8 @@
   <li>仅针对您向 Android 添加的内容调整 SELinux 政策。默认政策能够自动适用于 <a href="https://android.googlesource.com/">Android 开源项目</a>代码库。</li>
   <li>将各个软件组件拆分成多个负责执行单项任务的模块。</li>
   <li>创建用于将这些任务与无关功能隔离开来的 SELinux 政策。</li>
-  <li>将这些政策放在 <code>/device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 目录中的 <code>*.te</code> 文件(te 是 SELinux 政策源代码文件的扩展名)内,然后使用 <code>BOARD_SEPOLICY</code> 变量将它们纳入您的版本。</li>
-  <li>将新域初设为宽容域。为此,可以在该域的 <code>.te</code> 文件中使用宽容声明。</li>
+  <li>将这些政策放在 <code>/device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 目录下的 <code>*.te</code> 文件(SELinux 政策源代码文件的扩展)中,然后使用 <code>BOARD_SEPOLICY</code> 变量将其纳入到您的细分版本。</li>
+  <li>先将新域设为宽容域。为此,可以在该域的 <code>.te</code> 文件中使用宽容声明。</li>
   <li>分析结果并优化域定义。</li>
   <li>当 userdebug 版本中不再出现拒绝事件时,移除宽容声明。</li>
 </ol>
@@ -227,7 +227,7 @@
 
 <h2 id="neverallow">neverallow 规则</h2>
 
-<p>SELinux <code>neverallow</code> 规则用于禁止在任何情况下都不应该发生的行为。通过执行<a href="/compatibility/cts/">兼容性</a>测试,现在各种设备上都会强制执行 SELinux <code>neverallow</code> 规则。</p>
+<p>SELinux <code>neverallow</code> 规则用于禁止在任何情况下都不应该发生的行为。通过<a href="/compatibility/cts/">兼容性</a>测试,现在会在各种设备上强制执行 SELinux <code>neverallow</code> 规则。</p>
 
 <p>以下准则旨在协助制造商在自定义过程中避免出现与 <code>neverallow</code> 规则相关的错误。此处使用的规则编号与 Android 5.1 中使用的编号一致,并且会因版本而异。</p>
 
@@ -250,8 +250,8 @@
 <ul>
   <li><strong>system/sepolicy/public</strong>。其中包括所导出的用于供应商特定政策的政策。所有内容都会纳入 Android 8.0 <a href="/security/selinux/compatibility">兼容性基础架构</a>。公共政策会保留在不同版本上,因此您可以在自定义政策的 <code>/public</code> 中添加任何内容。正因如此,可存放在 <code>/public</code> 中的政策类型的限制性更强。将此目录视为相应平台的已导出政策 API:处理 <code>/system</code> 与 <code>/vendor</code> 之间的接口的所有内容都位于这里。</li>
   <li><strong>system/sepolicy/private</strong>。包括系统映像正常运行所必需(但供应商映像政策应该不知道)的政策。</li>
-  <li><strong>system/sepolicy/vendor</strong>。包括位于 <code>/vendor</code> 但存在于核心平台树(非设备特定目录)中的组件的相关政策。这是编译系统区分设备和全局组件的软件工件;从概念上讲,这是如下所述的设备专用政策的一部分。</li>
-  <li><strong>device/&lt;制造商&gt;<var></var>/<var></var>&lt;设备名称&gt;/sepolicy</strong>。包含设备专用政策,以及对政策进行的设备自定义(在 Android 8.0 及更高版本中,该政策对应于供应商映像组件的相关政策)。</li>
+  <li><strong>system/sepolicy/vendor</strong>。包括位于 <code>/vendor</code> 但存在于核心平台树(非设备特定目录)中的组件的相关政策。这是编译系统区分设备和全局组件的软件工件;从概念上讲,这是下述设备专用政策的一部分。</li>
+  <li><strong>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</strong>。包含设备专用政策,以及对政策进行的设备自定义(在 Android 8.0 及更高版本中,该政策对应于供应商映像组件的相关政策)。</li>
 </ul>
 <h3 id="supported-policy-scenarios">支持的政策场景</h3>
 <p>
@@ -259,17 +259,17 @@
 </p>
 <h4 id="vendor-image-only-extensions">仅含供应商映像的扩展</h4>
 <p>
-<strong>示例</strong>:从支持其中的进程的供应商映像向 <code>vndservicemanager</code> 添加新服务。
+<strong>示例</strong>:从支持相关进程的供应商映像向 <code>vndservicemanager</code> 添加新服务。
 </p>
 <p>
-与搭载之前的 Android 版本的设备一样,请在 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中添加设备专属的自定义配置。用于管理供应商组件(仅)与其他供应商组件的互动方式的新政策<strong>应涉及仅存在于 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中的类型</strong>。此处编写的政策允许运行供应商的代码,不会在仅针对框架的 OTA 期间更新,并且将存在于具有参考 AOSP 系统映像的设备上的组合政策中。
+与搭载之前 Android 版本的设备一样,请在 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中添加专门针对特定设备的自定义配置。用于管控供应商组件如何与其他供应商组件(仅限这些组件)交互的新政策<strong>应涉及仅存在于 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中的类型</strong>。此处编写的政策允许运行供应商的代码,不会在仅针对框架的 OTA 期间更新,并且将存在于具有参考 AOSP 系统映像的设备上的组合政策中。
 
 </p><h4 id="vendor-image-support-to-work-with-aosp">支持使用 AOSP 的供应商映像</h4>
 <p>
-<strong>示例</strong>:添加用于实施 AOSP 定义的 HAL 的新进程(通过供应商映像中的 <code>hwservicemanager</code> 注册)。
+<strong>示例</strong>:添加用于实现 AOSP 定义的 HAL 的新进程(通过供应商映像中的 <code>hwservicemanager</code> 注册)。
 </p>
 <p>
-与搭载之前的 Android 版本的设备一样,请在 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中执行专门针对特定设备的自定义。作为 <code>system/sepolicy/public/</code> 的一部分导出的政策可供使用,并且包含在供应商政策中。公共政策中的类型和属性可以用在新规则中,指示与供应商特有新位的互动,但要遵守所提供的 <code>neverallow</code> 限制。与 vendor-only 情形一样,此处的新政策不会在仅针对框架的 OTA 期间更新,并且将存在于具有参考 AOSP 系统映像的设备上的组合政策中。
+与搭载之前 Android 版本的设备一样,请在 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中执行专门针对特定设备的自定义配置。作为 <code>system/sepolicy/public/</code> 的一部分导出的政策可供使用,并且包含在供应商政策中。公共政策中的类型和属性可以用在新规则中,指示与供应商特有新位的互动,但要遵守所提供的 <code>neverallow</code> 限制。与 vendor-only 情形一样,此处的新政策不会在仅针对框架的 OTA 期间更新,并且将存在于具有参考 AOSP 系统映像的设备上的组合政策中。
 </p>
 <h4 id="system-image-only-extensions">仅含系统映像的扩展</h4>
 <p>
@@ -280,10 +280,10 @@
 </p>
 <h4 id="vendor-image-extensions-that-serve-extended-aosp-components">提供扩展 AOSP 组件的供应商映像扩展</h4>
 <p>
-<strong>示例</strong>:供同时存在于 AOSP 系统映像(例如扩展的 system_server)中的扩展客户端使用的新的非 AOSP HAL。
+<strong>示例</strong>:供同样存在于 AOSP 系统映像中的扩展客户端(例如扩展的 system_server)使用且新增的非 AOSP HAL。
 </p>
 <p>
-系统与供应商之间的互动政策必须纳入供应商分区上装载的 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 目录中。这类似于上述添加供应商映像支持以使用参考 AOSP 映像的情景,不同之处在于修改后的 AOSP 组件可能还需要其他政策才能正确使用系统分区的其余部分(只要这些组件仍具有公开 AOSP 类型标签就可以)。
+系统与供应商之间的交互政策必须纳入供应商分区上的 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 目录中。这类似于上述添加供应商映像支持以使用参考 AOSP 映像的情景,不同之处在于修改后的 AOSP 组件可能还需要其他政策才能正确使用系统分区的其余部分(只要这些组件仍具有公开 AOSP 类型标签就可以)。
 </p>
 <p>
 用于控制公开 AOSP 组件与仅含系统映像的扩展之间的互动的政策应该位于 <code>system/sepolicy/private</code> 中。
@@ -294,14 +294,14 @@
 <strong>示例</strong>:新的非 AOSP 系统进程必须访问 AOSP 所依赖的 HAL。
 </p>
 <p>
-这与<a href="#system-image-only-extensions">仅含系统映像的扩展示例</a>类似,不同之处在于新的系统组件可能在 <code>system/vendor</code> 接口中进行互动。新系统组件的相关政策必须位于 <code>system/sepolicy/private</code>,只要它是通过 AOSP 已在 <code>system/sepolicy/public</code> 中建立的接口发挥作用就可以接受(即,该目录中包含功能正常运行所需的类型和属性)。虽然可以在设备专用政策中添加政策,但无法在仅针对框架的更新中使用其他 <code>system/sepolicy/private</code> 类型或进行更改(以任何影响政策的方式)。此政策可以在仅针对框架的 OTA 中更改,但在使用 AOSP 系统映像时,此政策将不出现(也不会有新的系统组件)。
+这与<a href="#system-image-only-extensions">仅含系统映像的扩展示例</a>类似,不同之处在于新的系统组件可能在 <code>system/vendor</code> 接口进行交互。新系统组件的相关政策必须位于 <code>system/sepolicy/private</code>,只要它是通过 AOSP 已在 <code>system/sepolicy/public</code> 中建立的接口发挥作用就可以接受(即,该目录中包含功能正常运行所需的类型和属性)。虽然可以在设备专用政策中添加政策,但无法在仅针对框架的更新中使用其他 <code>system/sepolicy/private</code> 类型或进行更改(以任何影响政策的方式)。此政策可以在仅针对框架的 OTA 中更改,但在使用 AOSP 系统映像时,此政策将不出现(也不会有新的系统组件)。
 </p>
 <h4 id="vendor-image-extensions-that-serve-new-system-components">提供新系统组件的供应商映像扩展</h4>
 <p>
 <strong>示例</strong>:添加新的非 AOSP HAL 以供无需 AOSP 模拟的客户端进程使用(因此,该进程需要自己的域)。
 </p>
 <p>
-与 <a href="#vendor-image-extensions-that-serve-extended-aosp-components">AOSP 扩展示例</a>类似,系统与供应商之间的互动政策必须位于供应商分区上装载的 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 目录中(以确保系统政策不知道与供应商有关的特定详细信息)。您可以在 <code>system/sepolicy/public</code> 中添加新的公共类型来扩展政策;此操作只能在现有的 AOSP 政策之外执行,即不要移除 AOSP 公共政策。新添加的公共类型随后可用于 <code>system/sepolicy/private</code> 和 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中的政策。
+与 <a href="#vendor-image-extensions-that-serve-extended-aosp-components">AOSP 扩展示例</a>类似,系统与供应商之间的互动政策必须位于供应商分区上的 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 目录中(以确保系统政策不知道与特定供应商有关的详细信息)。您可以在 <code>system/sepolicy/public</code> 中添加新的用于扩展该政策的公共类型;只能在现有 AOSP 政策的基础上进行添加,即不要移除 AOSP 公共政策。新添加的公共类型随后可用于 <code>system/sepolicy/private</code> 和 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中的政策。
 </p>
 <p>
 请注意,每次向 <code>system/sepolicy/public</code> 添加内容都会增加复杂程度,因为这会增加必须在映射文件中跟踪的新兼容性保证(会受到其他限制)。只有新类型和相关项允许在 <code>system/sepolicy/public</code> 中添加规则;属性和其他政策声明不受支持。此外,新的公共类型不能用于直接为 <code>/vendor</code> 政策中的对象添加标签。
@@ -315,12 +315,12 @@
 <strong>示例</strong>:在下一个 Android 版本中添加新的非 AOSP 系统进程(需要自己的域),该进程需要访问新的非 AOSP HAL。
 </p>
 <p>
-与<a href="#vendor-image-extensions-that-serve-extended-aosp-components">新的(非 AOSP)系统和供应商组件</a>互动类似,不同之处在于新的系统类型是在仅支持框架的 OTA 中引入的。虽然这个新类型可以添加到 <code>system/sepolicy/public</code> 下的政策中,但现有的供应商政策不知道这个新类型,因为它仅跟踪 Android 8.0 系统公共政策。AOSP 可通过某个属性(例如 <code>hal_foo</code> 属性)要求取得供应商提供的资源,进而处理此情况,但由于属性合作伙伴扩展在 <code>system/sepolicy/public</code> 中不受支持,因此供应商政策无法使用此方法。访问权限必须由之前存在的公共类型提供。
+与<a href="#vendor-image-extensions-that-serve-extended-aosp-components">新(非 AOSP)系统和供应商组件</a>之间的交互类似,不同之处在于新的系统类型是在仅针对框架的 OTA 中引入的。虽然这个新类型可以添加到 <code>system/sepolicy/public</code> 中的政策,但现有的供应商政策不知道这个新类型,因为它仅跟踪 Android 8.0 系统公共政策。AOSP 可通过某个属性(例如 <code>hal_foo</code> 属性)要求取得供应商提供的资源,进而处理此情况,但由于属性合作伙伴扩展在 <code>system/sepolicy/public</code> 中不受支持,因此供应商政策无法使用此方法。访问权限必须由之前存在的公共类型提供。
 </p>
 <p>
 <strong>示例</strong>:对系统进程(AOSP 或非 AOSP)的更改必须更改它与新的非 AOSP 供应商组件进行互动的方式。
 </p>
 <p>
-在编写系统映像上的政策时必须对供应商独有的自定义不知情。因此,系统会通过 system/sepolicy/public 中的属性公开 AOSP 中涉及特定接口的政策,以便供应商政策可以选择启用将来使用这些属性的系统政策。但是,<strong><code>system/sepolicy/public</code> 中的属性扩展不受支持</strong>,因此指明系统组件与新供应商组件的互动方式的所有政策(且该政策不由 AOSP <code>system/sepolicy/public</code> 中已有的属性处理)都必须位于 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中。这意味着系统类型无法在仅支持框架的 OTA 中更改为供应商类型授予的访问权限。</p>
+在编写系统映像上的政策时必须对供应商独有的自定义不知情。因此,系统会通过 system/sepolicy/public 中的属性公开 AOSP 中涉及特定接口的政策,以便供应商政策可以选择启用将来使用这些属性的系统政策。不过,<strong><code>system/sepolicy/public</code> 中的属性扩展不受支持</strong>,因此指明系统组件与新供应商组件如何交互的所有政策(这些政策不通过 AOSP <code>system/sepolicy/public</code> 中已存在的属性进行处理)都必须位于 <code>device/<var>manufacturer</var>/<var>device-name</var>/sepolicy</code> 中。这意味着系统类型无法在仅针对框架的 OTA 中更改已为供应商类型授予的访问权限。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/selinux/device-policy.html b/zh-cn/security/selinux/device-policy.html
index cf9355b..c9136ec 100644
--- a/zh-cn/security/selinux/device-policy.html
+++ b/zh-cn/security/selinux/device-policy.html
@@ -28,7 +28,7 @@
 
 <h3 id="run_in_permissive_mode">在宽容模式下运行</h3>
 
-<p>当设备处于<a href="/security/selinux/concepts#enforcement_levels">宽容模式</a>时,拒绝事件会被记录下来,但不会被强制执行。宽容模式非常重要,原因有以下两个:</p>
+<p>当设备处于<a href="/security/selinux/concepts#enforcement_levels">宽容模式</a>时,拒绝事件会被记录下来,但不会被强制执行。宽容模式非常重要,原因有以下两点:</p>
 
 <ul>
   <li>宽容模式可确保政策启用不会延误其他早期设备启动任务。</li>
diff --git a/zh-cn/security/selinux/index.html b/zh-cn/security/selinux/index.html
index 5545238..3ee9b38 100644
--- a/zh-cn/security/selinux/index.html
+++ b/zh-cn/security/selinux/index.html
@@ -20,26 +20,24 @@
       limitations under the License.
   -->
 
-<p>Android 安全模型部分基于应用沙盒的概念。每个应用都在自己的沙盒内运行。在 Android 4.3 之前的版本中,这些沙盒是通过为每个应用创建独一无二的 Linux UID(在应用安装时创建)来定义的。从 Android 4.3 版起,安全增强型 Linux (SELinux) 开始用于进一步定义 Android 应用沙盒的边界。</p>
+<p>作为 Android <a href="/security/index.html">安全模型</a>的一部分,Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC),其中包括以 Root/超级用户权限运行的进程(Linux 功能)。很多公司和组织都为 Android 的 <a href="https://android.googlesource.com/platform/external/selinux/" class="external">SELinux 实现</a>做出了贡献。借助 SELinux,Android 可以更好地保护和限制系统服务、控制对应用数据和系统日志的访问、降低恶意软件的影响,并保护用户免遭移动设备上的代码可能存在的缺陷的影响。</p>
 
-<aside class="note"><strong>注意</strong>:要详细了解 Android 8.0 SELinux,请参阅 <a href="/security/selinux/images/SELinux_Treble.pdf">SELinux for Android 8.0</a>。</aside>
-
-<p>作为 Android <a href="/security/index.html">安全模型</a>的一部分,Android 使用 SELinux 对所有进程强制执行强制访问控制 (MAC),其中包括以 Root/超级用户权限运行的进程(也称为 Linux 功能)。SELinux 能够限制特权进程并能够自动创建安全政策,从而可提升 Android 的安全性。</p>
-
-<p>很多公司和组织都为 SELinux 做出了贡献;<a href="https://android.googlesource.com/" class="external">android.googlesource.com</a>(也称为 Android 开放源代码项目 (AOSP))上公开了他们所做的贡献,以供所有人查看。借助 SELinux,Android 可以更好地保护和限制系统服务、控制对应用数据和系统日志的访问、降低恶意软件的影响,并保护用户免遭移动设备上的代码可能存在的缺陷的影响。</p>
-
-<p>Android 中包含 SELinux(处于强制模式)和默认适用于整个 AOSP 的相应安全政策。在强制模式下,非法操作会被阻止,并且尝试进行的所有违规行为都会被内核记录到 <code>dmesg</code> 和 <code>logcat</code> 中。Android 设备制造商应收集与错误相关的信息,以便在实施其软件和 SELinux 政策之前先对其进行优化。</p>
-
-<h2 id="background">背景</h2>
-<p>SELinux 按照默认拒绝的原则运行:任何未经明确允许的行为都会被拒绝。SELinux 可按两种全局模式之一运行:</p>
+<p>SELinux 按照默认拒绝的原则运行:任何未经明确允许的行为都会被拒绝。SELinux 可按两种全局模式运行:</p>
 <ul>
 <li><em></em>宽容模式:权限拒绝事件会被记录下来,但不会被强制执行。</li>
 <li><em></em>强制模式:权限拒绝事件会被记录下来<strong>并</strong>强制执行。</li>
 </ul>
 
-<p>此外,SELinux 还支持基于域的宽容模式。在这种模式下,可将特定域(进程)设为宽容模式,同时使系统的其余部分处于强制全局模式。<em></em>域简单来说就是安全政策中用于标识一个进程或一组进程的标签,安全政策会以相同的方式对待所有具有相同域标签的进程。借助基于域的宽容模式,可逐渐将 SELinux 应用于系统中越来越多的部分,还可以为新服务制定政策(同时确保系统的其余部分处于强制模式)。</p>
+<p>Android 中包含 SELinux(处于强制模式)和默认适用于整个 AOSP 的相应安全政策。在强制模式下,非法操作会被阻止,并且尝试进行的所有违规行为都会被内核记录到 <code>dmesg</code> 和 <code>logcat</code> 中。开发时,您应该在实施软件和 SELinux 政策之前,利用这些错误信息先对其进行优化。如需了解详情,请参阅<a href="/security/selinux/implement">实现 SELinux</a>。</p>
 
-<p>基于 Android 4.3(宽容模式)和 Android 4.4(部分强制模式)的 Android 5.0 版本,开始全面强制执行 SELinux。
+<p><em></em>此外,SELinux 还支持基于域的宽容模式。在这种模式下,可将特定域(进程)设为宽容模式,同时使系统的其余部分处于强制全局模式。域简单来说就是安全政策中用于标识一个进程或一组进程的标签,安全政策会以相同的方式对待所有具有相同域标签的进程。借助特定域宽容模式,可逐渐将 SELinux 应用于系统中越来越多的部分,还可以为新服务制定政策(同时确保系统的其余部分处于强制模式)。</p>
+
+<h2 id="background">背景</h2>
+
+<p>Android 安全模型部分基于<a href="/security/app-sandbox">应用沙盒</a>的概念。每个应用都在自己的沙盒内运行。在 Android 4.3 之前的版本中,这些沙盒是通过为每个应用创建独一无二的 Linux UID(在应用安装时创建)来定义的。
+Android 4.3 及更高版本使用 SELinux 进一步定义 Android 应用沙盒的边界。</p>
+
+<p>在 Android 5.0 及更高版本中,已全面强制执行 SELinux(基于 Android 4.3(宽容模式)和 Android 4.4(部分强制模式))。
 通过此项变更,Android 已从对有限的一组关键域(<code>installd</code>、<code>netd</code>、<code>vold</code> 和 <code>zygote</code>)强制执行 SELinux 转为对所有域(超过 60 个域)强制执行 SELinux。具体而言:</p>
 
 <ul>
@@ -47,7 +45,19 @@
 <li><code>init</code> 以外的任何进程都不应在 <code>init</code> 域中运行。</li>
 <li>如果出现任何常规拒绝事件(对于 <code>block_device</code>、<code>socket_device</code>、<code>default_service</code> 等),都表示设备需要一个特殊域。</li>
 </ul>
-<p>因此,制造商需要更好地了解并扩展其 SELinux 实现,以便提供兼容的设备。</p>
+
+<p>Android 6.0 通过降低我们政策的权限强化了系统安全,从而实现更好的用户隔离和 IOCTL 过滤、降低可从设备/系统之外访问的服务面临的威胁、进一步强化 SELinux 域,以及高度限制对 <code>/proc</code> 的访问。
+</p>
+<p>
+Android 7.0 更新了 SELinux 配置,以进一步锁定应用沙盒并减少受攻击面。此版本还将单片式 mediaserver 堆栈拆分为较小的进程,以缩小其权限范围。如需了解详情,请参阅<a href="https://android-developers.googleblog.com/2016/07/protecting-android-with-more-linux.html" class="external">利用更多的 Linux 内核防护功能保护 Android 系统</a>和<a href="https://android-developers.googleblog.com/2016/05/hardening-media-stack.html" class="external">媒体堆栈安全强化</a>。
+</p>
+<p></p>
+<p>
+Android 8.0 更新了 SELinux 以与 <a href="/devices/architecture/#hidl">Treble</a> 配合使用,后者可将较低级别的供应商代码与 Android 系统框架分离开来。此版本更新了 SELinux 政策以允许设备制造商和 SOC 供应商更新自己的政策部分、构建自己的映像(<code>vendor.img</code>、<code>boot.img</code> 等),然后更新这些映像而不受平台影响,反之亦然。
+</p>
+<p>
+虽然可以在设备上运行更高/更新版本的平台(框架),但反之并不成立;供应商映像 (<code>vendor.img/odm.img</code>) 的版本不能高于平台 (<code>system.img</code>) 的版本。因此,较新版平台可能会带来 SELinux 兼容性问题,因为平台 SELinux 政策的版本要比该政策的供应商 SELinux 部分更新。Android 8.0 模型提供了一种<a href="/security/selinux/compatibility">保持兼容性</a>的方法,以免进行不必要的同时 OTA。
+</p>
 
 <h2 id="supporting_documentation">其他资源</h2>
 
@@ -73,6 +83,9 @@
 
 <li><a href="https://www.gnu.org/software/m4/manual/index.html" class="external">
 GNU M4 - GNU Macro Processor Manual(GNU M4 - GNU 宏处理器手册)</a></li>
+
+<li><a href="https://opensource.com/business/13/11/selinux-policy-guide" class="external">
+Your visual how-to guide for SELinux policy enforcement(有关强制执行 SELinux 政策的直观操作指南)</a></li>
 </ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/selinux/validate.html b/zh-cn/security/selinux/validate.html
index 8657aa1..34c3692 100644
--- a/zh-cn/security/selinux/validate.html
+++ b/zh-cn/security/selinux/validate.html
@@ -61,7 +61,7 @@
 
 <ul>
   <li><em></em>操作 - 试图进行的操作会使用括号突出显示:<code>read write</code> 或 <code>setenforce</code>。
-  </li><li><em></em>操作方 - <code>scontext</code>(来源环境)条目表示操作方;在此例中为 <code> rmt_storage</code> 守护进程。
+  </li><li><em></em>操作方 - <code>scontext</code>(来源环境)条目表示操作方;在此例中为<code> rmt_storage</code> 守护进程。
   </li><li><em></em>对象 - <code>tcontext</code>(目标环境)条目表示是对哪个对象执行操作;在此例中为 kmem。
   </li><li><em></em>结果 - <code>tclass</code>(目标类别)条目表示操作对象的类型;在此例中为 <code>chr_file</code>(字符设备)。
 </li></ul>
diff --git a/zh-cn/security/selinux/vendor-init.html b/zh-cn/security/selinux/vendor-init.html
new file mode 100644
index 0000000..d354f76
--- /dev/null
+++ b/zh-cn/security/selinux/vendor-init.html
@@ -0,0 +1,78 @@
+<html devsite><head>
+    <title>供应商 init</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>
+init 进程具有几乎不受限制的权限,并可使用系统分区和供应商分区中的输入脚本在启动过程中初始化系统。该访问权限会导致 Treble 系统/供应商拆分中出现巨大漏洞,因为供应商脚本可能会指示 init 访问不属于稳定系统-供应商 ABI(应用二进制接口)的文件、属性等。
+</p>
+<p>
+<em></em>供应商 init 设计为使用单独的安全增强型 Linux (SELinux) 域 <code>vendor_init</code>,利用供应商专用权限运行 <code>/vendor</code> 中的命令,从而填补此漏洞。
+</p>
+<h2 id="mechanism">机制</h2>
+<p>
+供应商 init 会在启动过程的早期派生在 SELinux 环境 <code>u:r:vendor_init:s0</code> 中运行的 init 子进程。此 SELinux 环境具有的权限明显少于默认 init 环境,并且其访问权限仅限于供应商专用或属于稳定系统-供应商 ABI 的文件、属性等。
+</p>
+<p>
+Init 会检查它加载的每个脚本以查看其路径是否以 <code>/vendor</code> 开头,如果是,则添加标记以指示其命令必须在供应商 init 环境中运行。每个内置 init 都使用布尔值进行注释,该布尔值指定是否必须在供应商 init 子进程中运行相应命令:
+</p>
+<ul>
+<li>访问文件系统的大多数命令都被注释为在供应商 init 子进程中运行,因此受供应商 init SEPolicy 的约束。</li>
+<li>大多数会影响内部 init 状态的命令(例如,启动和停止服务)都在普通 init 进程中运行。这些命令能获知供应商脚本正在调用它们来处理它们自己的非 SELinux 权限。</li>
+</ul>
+<p>
+Init 的主处理循环包含一项检查,以检查是否会发生以下情况:如果某个命令被注释为在供应商子进程中运行并且源自供应商脚本,则系统会通过进程间通信 (IPC) 将该命令发送到供应商 init 子进程,然后这个子进程会运行该命令并将结果发送回 init。
+</p>
+<h2 id="using-vendor-init">使用供应商 init</h2>
+<p>
+供应商 init 默认处于启用状态,其限制适用于 <code>/vendor</code> 分区中存在的所有 init 脚本。对于其脚本尚未访问系统专用文件、属性等的供应商,供应商 init 应该是透明的。
+</p>
+<p>
+但是,如果给定供应商脚本中的命令违反了供应商 init 限制,则这些命令将无法运行。如果命令运行失败,系统会在 init 内核日志中记录一行(可通过 dmesg 查看)来指示其运行失败。因 SELinux 政策限制而运行失败的任何命令都会伴有 SELinux 审核。包含 SELinux 审核的失败示例如下:
+</p>
+
+<pre class="devsite-disable-click-to-copy">type=1400 audit(1511821362.996:9): avc: denied { search } for pid=540 comm="init" name="nfc" dev="sda45" ino=1310721 scontext=u:r:vendor_init:s0 tcontext=u:object_r:nfc_data_file:s0 tclass=dir permissive=0
+init: Command 'write /data/nfc/bad_file_access 1234' action=boot (/vendor/etc/init/hw/init.walleye.rc:422) took 2ms and failed: Unable to write to file '/data/nfc/bad_file_access': open() failed: Permission denied</pre>
+<p>
+如果某个命令运行失败,则有两种选择:
+</p>
+<ul>
+<li>如果该命令是因既有限制而运行失败(例如,如果该命令访问的是系统文件或属性),则必须以适合 Treble 的方式重新实现该命令,并仅采用稳定的接口。Neverallow 规则禁止添加访问不属于稳定系统-供应商 ABI 的系统文件的权限。</li>
+<li>如果 SELinux 标签是新的且尚未在系统 <code>vendor_init.te</code> 中为其授予权限,也未通过 neverallow 规则为其排除权限,则可以在设备专用 <code>vendor_init.te</code> 中为这个新标签授予权限。</li>
+</ul>
+<p>
+对于搭载 Android 9 之前版本的设备,可以通过将 <code>data_between_core_and_vendor_violators</code> 类型属性添加到设备专用 <code>vendor_init.te</code> 文件来绕过 neverallows 规则。
+</p>
+<p>
+对于搭载 Android 9 的设备,GTS 检查可防止使用 <code>data_between_core_and_vendor_violators</code>。
+</p>
+<h2 id="code-locations">代码位置</h2>
+<p>
+供应商 init IPC 的大部分逻辑都位于 <a href="https://android.googlesource.com/platform/system/core/+/master/init/subcontext.cpp">system/core/init/subcontext.cpp</a> 中。
+</p>
+<p>
+命令表在 <a href="https://android.googlesource.com/platform/system/core/+/master/init/builtins.cpp">system/core/init/builtins.cpp</a> 的 <code>BuiltinFunctionMap</code> 类中,包含用于指示是否必须在供应商 init 子进程中运行相应命令的注释。
+</p>
+<p>
+供应商 init 的 SEPolicy 被拆分到 system/sepolicy 中的 (<a href="https://android.googlesource.com/platform/system/sepolicy/+/master/private/vendor_init.te">system/sepolicy/private/vendor_init.te</a>) 私有目录和 (<a href="https://android.googlesource.com/platform/system/sepolicy/+/master/public/vendor_init.te">system/sepolicy/public/vendor_init.te</a>) 公共目录。
+</p>
+	
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/verifiedboot/avb.html b/zh-cn/security/verifiedboot/avb.html
new file mode 100644
index 0000000..7226b4a
--- /dev/null
+++ b/zh-cn/security/verifiedboot/avb.html
@@ -0,0 +1,35 @@
+<html devsite><head>
+    <title>Android 验证启动</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>
+Android 8.0 及更高版本包含验证启动的一个参考实现,名为 Android 验证启动 (AVB) 或验证启动 2.0。AVB 是验证启动的一个版本,它可与 <a href="/devices/architecture/#hidl">Project Treble</a> 架构配合使用,能够将 Android 框架与底层供应商实现分离开来。
+</p>
+<p>
+AVB 与 Android 编译系统集成并通过一行代码(负责生成所有必要的 dm-verity 元数据并进行签名)启用。如需了解详情,请参阅<a href="https://android.googlesource.com/platform/external/avb/+/master/README.md#Build-System-Integration" class="external">编译系统集成</a>。
+</p>
+<p>AVB 提供 libavb,后者是一个在启动时用于验证 Android 的 C 库。您可以通过以下方式将 libavb 与引导加载程序集成在一起:针对 I/O 实现<a href="https://android.googlesource.com/platform/external/avb/+/master/libavb/avb_ops.h" class="external">特定于平台的功能</a>,提供信任根,并获取/设置回滚保护元数据。
+</p>
+<p>
+AVB 的主要功能包括:针对不同分区委托更新、提供用于对分区进行签名的通用页脚格式,以及防止攻击者回滚到存在漏洞的 Android 版本。
+</p>
+如需了解实现方面的详细信息,请参阅 <code><a href="https://android.googlesource.com/platform/external/avb/+/master/README.md" class="external">/platform/external/avb/README.md</a></code>。
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/verifiedboot/boot-flow.html b/zh-cn/security/verifiedboot/boot-flow.html
new file mode 100644
index 0000000..a811cd2
--- /dev/null
+++ b/zh-cn/security/verifiedboot/boot-flow.html
@@ -0,0 +1,288 @@
+<html devsite><head>
+    <title>启动流程</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>
+建议的设备启动流程如下所示:
+</p>
+<figure>
+  <img src="/security/images/verified-boot-flow.png" alt="验证启动流程"/>
+  <figcaption><b>图 1</b>.验证启动流程</figcaption>
+</figure>
+
+<h2 id="flow-for-a-b-devices">适用于 A/B 设备的流程</h2>
+<p>
+如果设备使用的是 A/B,则启动流程略有不同。必须先使用<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/boot/1.0/IBootControl.hal" class="external">启动控件 HAL</a> 将要启动的槽位标记为 <code>SUCCESSFUL</code>,<strong>然后</strong>再更新回滚保护元数据。
+</p>
+<p>
+如果平台更新失败(未标记 <code>SUCCESSFUL</code>),A/B 堆栈便会回退至仍具有先前 Android 版本的其他槽位。不过,如果已设置回滚保护元数据,则之前的版本会因回滚保护而无法启动。
+</p>
+
+<h2 id="communicating-verified-boot-state-to-users">将验证启动状态传达给用户</h2>
+<p>
+确定设备的启动状态后,您需要将该状态传达给用户。如果设备没有任何问题,则会继续运行,而不显示任何内容。验证启动问题分为以下几类:</p>
+<ul>
+ <li>黄色:针对设有自定义信任根的已锁定设备的警告屏幕</li>
+ <li>橙色:针对未锁定设备的警告屏幕</li>
+ <li>红色 (EIO):针对 dm-verity 损坏的警告屏幕</li>
+ <li>红色(未找到操作系统):未找到有效的操作系统</li>
+</ul>
+<table class="columns">
+  <colgroup><col width="50%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+    <td>
+<h3 id="locked-devices-with-custom-root-of-trust">具有自定义信任根的已锁定设备</h3>
+
+<p>
+如果设备处于已锁定状态,已设置自定义的信任根,并且映像已使用该自定义信任根进行签名,则会在每次启动时显示黄色屏幕。
+黄色屏幕会在 10 秒钟后关闭,并且设备会继续启动。如果用户按下电源按钮,“Press power button to pause”(按电源按钮即可暂停)文字便会更改为“Press power button to continue”(按电源按钮即可继续),并且该屏幕永远都不会关闭,但设备可能会调暗或关闭该屏幕以防老化。如果再次按下按钮,该屏幕便会关闭,并且手机会继续启动。
+</p>
+<p>
+对于十六进制数字<var></var>,请使用用于验证的 libavb 表示形式公钥的 sha256 的前 8 位数字,例如 <code>f7a24de1</code>。
+</p>
+<p>
+<strong>建议的文字:</strong>
+</p>
+<p>
+您的设备加载了不同的操作系统。
+</p>
+<p>
+请在其他设备上访问此链接以了解详情:
+</p>
+<p>
+g.co/ABH
+</p>
+<p>
+ID:十六进制数字<var></var>
+</p>
+<p>
+<span class="material-icons">power_settings_new</span> 按电源按钮即可暂停
+</p>
+<p> </p>
+    </td>
+    <td>
+
+<figure>
+ <p><strong>黄色屏幕示例:</strong></p>
+  <img src="/security/images/boot_yellow1.png" alt="黄色设备警告屏幕"/>
+</figure>
+    </td>
+  </tr>
+  <tr>
+    <td>
+<h3 id="unlocked-devices">已解锁的设备</h3>
+<p>
+如果设备处于已解锁状态,则会在每次启动时显示橙色屏幕。橙色屏幕会在 10 秒钟后关闭,并且设备会继续启动。如果用户按下电源按钮,“Press power button to pause”(按电源按钮即可暂停)文字便会更改为“Press power button to continue”(按电源按钮即可继续),并且该屏幕永远都不会关闭(设备可能会根据需要调暗和/或关闭该屏幕,以防出现老化或类似问题)。如果再次按下按钮,该屏幕便会关闭,并且手机会继续启动。
+</p>
+<p>
+对于十六进制数字<var></var>,请使用用于验证的 ibavb 表示形式公钥的 sha256 的前 8 位数字,例如 <code>f7a24de1</code>。
+</p>
+<p>
+<strong>建议的文字:</strong>
+</p>
+<p>
+引导加载程序已解锁,无法保证软件完整性。攻击者可能可以获取设备上存储的所有数据。请勿在此设备上存储任何敏感数据。
+</p>
+<p>
+请在其他设备上访问此链接以了解详情:
+</p>
+<p>
+g.co/ABH
+</p>
+<p>
+ID:十六进制数字<var></var>
+</p>
+<p>
+<span class="material-icons">power_settings_new</span> 按电源按钮即可暂停。
+</p>
+<p> </p>
+    </td>
+    <td>
+
+<figure>
+ <p><strong>橙色屏幕示例:</strong></p>
+  <img src="/security/images/boot_orange.png" alt="橙色设备警告屏幕"/>
+</figure>
+    </td>
+  </tr>
+  <tr>
+    <td>
+
+<h3 id="dm-verity-corruption">dm-verity 损坏</h3>
+<p>
+如果找到 Android 的有效版本,并且设备当前处于 <code>eio</code> dm-verity 模式,则会显示红色 <code>eio</code> 屏幕。用户需要点击电源按钮才能继续。如果用户未在 30 秒内确认警告屏幕,则设备将关机(以防屏幕老化并节省电量)。
+</p>
+
+<aside class="note">
+<strong>注意</strong>:系统可能会在显示此屏幕后,显示其他警告屏幕。例如,如果设备处于 <code>UNLOCKED</code> 状态,则之后会显示橙色屏幕。
+</aside>
+
+<p>
+<strong>建议的文字:</strong>
+</p>
+<p>
+您的设备已损坏。该设备不可信任,并且可能无法正常工作。
+</p>
+<p>
+请在其他设备上访问此链接以了解详情:
+</p>
+<p>
+g.co/ABH
+</p>
+<p>
+<span class="material-icons">power_settings_new</span> 按电源按钮即可继续。
+</p>
+<p> </p>
+    </td>
+    <td>
+<figure>
+ <p><strong>红色 eio 屏幕示例:</strong></p>
+  <img src="/security/images/boot_red1.png" alt="红色 eio 设备警告屏幕"/>
+</figure>
+    </td>
+  </tr>
+  <tr>
+    <td>
+    <h3 id="no-valid-os-found">找不到有效的操作系统</h3>
+<p>
+如果找不到有效的 Android 版本,则屏幕会显示红色。设备无法继续启动。如果用户未在 30 秒内确认警告屏幕,则设备将关机(以防止屏幕老化并节省电量)。
+</p>
+<p>
+对于十六进制数字<var></var>,请使用用于验证的 libavb 表示形式公钥的 sha256 的前 8 位数字,例如 <code>f7a24de1</code>。
+</p>
+<p>
+<strong>建议的文字:</strong>
+</p>
+<p>
+找不到有效的操作系统。设备无法启动。
+</p>
+<p>
+请在其他设备上访问此链接以了解详情:
+</p>
+<p>
+g.co/ABH
+</p>
+<p>
+ID:十六进制数字<var></var>
+</p>
+<p>
+<span class="material-icons">power_settings_new</span> 按电源按钮即可关机。
+</p>
+<p> </p>
+    </td>
+    <td>
+<figure>
+ <p><strong>红色屏幕示例:</strong></p>
+  <img src="/security/images/boot_red2.png" alt="红色损坏设备警告屏幕"/>
+</figure>
+    </td>
+  </tr>
+  <tr>
+    <td>
+<h3 id="unlock-confirmation">解锁确认</h3>
+<p>
+显示解锁确认屏幕以响应通过 fastboot 接口执行的 <code>fastboot flashing unlock</code> 命令。最初选中的是“Don't lock”(不解锁)。<em></em>如果用户未在 30 秒内与警告屏幕互动,则屏幕会消失并且该命令会失败。
+</p>
+<p>
+<strong>建议的文字:</strong>
+</p>
+<p>
+如果您解锁引导加载程序,则可以在此手机上安装自定义操作系统软件。自定义操作系统未经过与原始操作系统相同级别的测试,可能会导致您的手机和已安装的应用停止正常工作。使用自定义操作系统无法保证软件完整性,因此在引导加载程序处于解锁状态时存储在手机上的所有数据都可能面临风险。
+</p>
+<p>
+为防止未经授权访问您的个人数据,解锁引导加载程序还将删除您手机上的所有个人数据。
+</p>
+<p>
+按音量调高按钮/音量调低按钮可选择是否解锁引导加载程序,然后按电源按钮即可继续。
+</p>
+<p>
+解锁
+</p>
+<p>
+解锁引导加载程序。
+</p>
+<p>
+不解锁
+</p>
+<p>
+不解锁引导加载程序并重启手机。
+</p>
+<p> </p>
+    </td>
+    <td>
+<figure>
+ <p><strong>屏幕示例:</strong></p>
+  <img src="/security/images/unlock-confirmation.png" alt="解锁设备警告屏幕"/>
+</figure>
+    </td>
+  </tr>
+  <tr>
+    <td>
+<h3 id="lock-confirmation">锁定确认</h3>
+<p>
+显示锁定确认屏幕以响应通过 fastboot 接口执行的 <code>fastboot flashing
+lock</code> 命令。最初选中的是“Don't lock”(不锁定)。<em></em>如果用户未在 30 秒内与警告屏幕互动,则屏幕会消失并且该命令将失败。
+</p>
+<p>
+<strong>文字:</strong>
+</p>
+<p>
+如果您锁定引导加载程序,则无法在此手机上安装自定义操作系统软件。为防止未经授权访问您的个人数据,锁定引导加载程序还将删除您手机上的所有个人数据。
+</p>
+<p>
+按音量调高按钮/音量调低按钮可选择是否锁定引导加载程序,然后按电源按钮即可继续。
+</p>
+<p>
+锁定
+</p>
+<p>
+锁定引导加载程序。
+</p>
+<p>
+不锁定
+</p>
+<p>
+不锁定引导加载程序并重启手机。
+</p>
+<p> </p>
+    </td>
+    <td>
+<figure>
+ <p><strong>屏幕示例:</strong></p>
+  <img src="/security/images/lock-confirmation.png" alt="锁定确认设备警告屏幕"/>
+</figure>
+    </td>
+  </tr>
+</tbody></table>
+<h2 id="communicating-verified-boot-state-to-android">将验证启动状态传达给 Android</h2>
+<p>
+引导加载程序通过内核命令选项将验证启动状态传达给 Android。它会将 <code>androidboot.verifiedstate</code> 选项设置为以下其中一个值:
+</p>
+<ul>
+ <li><code>green</code>:如果设备已<code>LOCKED</code>且未使用可由用户设置的信任根</li>
+ <li><code>yellow</code>:如果设备已<code>LOCKED</code>且使用了可由用户设置的信任根</li>
+ <li><code>orange</code>:如果设备已<code>UNLOCKED</code></li>
+</ul>
+<p>
+<code>androidboot.veritymode</code> 选项设置为 <code>eio</code> 或 <code>restart</code>,具体取决于引导加载程序在处理 dm-verity 错误时所处的状态。如需了解详情,请参阅<a href="/security/verifiedboot/verified-boot#handling-verification-errors">处理验证错误</a>。
+</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/verifiedboot/device-state.html b/zh-cn/security/verifiedboot/device-state.html
new file mode 100644
index 0000000..39fe879
--- /dev/null
+++ b/zh-cn/security/verifiedboot/device-state.html
@@ -0,0 +1,77 @@
+<html devsite><head>
+    <title>设备状态</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>
+设备状态用于指明能够以多大的自由度将软件刷写到设备上,以及是否强制执行验证。设备状态为 <code>LOCKED</code> 和 <code>UNLOCKED</code>。状态为 <code>LOCKED</code> 的设备禁止您将新软件刷写到设备上,而状态为 <code>UNLOCKED</code> 的设备允许您进行修改。
+</p>
+<p>
+当设备开机后,引导加载程序会先检查设备状态是 <code>LOCKED</code> 还是 <code>UNLOCKED</code>。如果设备状态为 <code>UNLOCKED</code>,引导加载程序会向用户显示警告,然后继续启动,即使加载的操作系统不是由信任根签名也是如此。
+</p>
+<p>
+如果设备状态为 <code>LOCKED</code>,引导加载程序会完成<a href="/security/verifiedboot/verified-boot">验证启动</a>中的步骤,以验证该设备的软件。只有在加载的操作系统是由信任根正确签名时,状态为 <code>LOCKED</code> 的设备才会启动。<em></em>如需了解详情,请参阅<a href="/security/verifiedboot/boot-flow">启动流程</a>。
+</p>
+
+<h2 id="changing-device-state">更改设备状态</h2>
+<p>
+要<a href="/devices/bootloader/unlock-trusty">更改设备状态</a>,请使用 <code>fastboot flashing [unlock | lock]</code> 命令。为了保护用户数据,只要设备状态发生变化,都会先擦除数据分区中的数据,并会在删除数据之前要求用户确认。<em></em>
+</p>
+<p>
+当用户购买二手开发设备后,应该将设备状态从 <code>UNLOCKED</code> 改为 <code>LOCKED</code>。锁定设备后,只要没有警告,用户应该就会确信设备处于设备制造商开发的状态。如果开发者希望出于开发目的停用设备上的验证功能,应该将设备状态从 <code>LOCKED</code> 改为 <code>UNLOCKED</code>。
+</p>
+
+<h2 id="root-of-trust">信任根</h2>
+<p>
+<em></em>信任根是用于为设备上存储的 Android 副本签名的加密密钥。信任根的不公开部分只有设备制造商才知道,用于为旨在分发的每个 Android 版本签名。信任根的公开部分嵌入在设备中并存储在一个不会被篡改的位置(通常是只读存储区)。
+</p>
+<p>
+加载 Android 时,引导加载程序会使用信任根来验证真实性。要详细了解此流程,请参阅<a href="/security/verifiedboot/verified-boot">验证启动</a>。设备可能具有多个引导加载程序,因此可能有多个加密密钥。
+</p>
+<h3 id="user-settable-root-of-trust">可由用户设置的信任根</h3>
+<p>
+设备可以根据需要选择允许用户配置信任根(例如,公钥)。设备可以使用此可由用户设置的信任根(而非内置的信任根)来验证启动。这样,用户就可以安装并使用自定义的 Android 版本,而不会牺牲验证启动的安全改进功能。
+</p>
+<p>
+如果实现了可由用户设置的信任根,则应满足以下要求:
+</p>
+<ul>
+ <li>需要进行物理确认才能设置/清除可由用户设置的信任根。</li>
+ <li>可由用户设置的信任根只能由最终用户设置,而不能在出厂时或在最终用户获得设备之前的任意中间点设置。</li>
+ <li>可由用户设置的信任根存储在防篡改的存储空间中。
+   <em></em>“防篡改”是指可以检测到 Android 数据是否遭到篡改(例如,数据是否被覆盖或更改)。
+ </li>
+ <li>如果设置了可由用户设置的信任根,则设备应该允许启动使用内置信任根或可由用户设置的信任根签名的 Android 版本。</li>
+ <li>设备每次使用可由用户设置的信任根启动时,系统都应通知用户设备正在加载自定义的 Android 版本。要查看警告屏幕示例,请参阅<a href="/security/verifiedboot/boot-flow#locked-devices-with-custom-key-set">已设置自定义密钥的状态为 <code>LOCKED</code> 的设备</a>。</li>
+</ul>
+<p>
+实现可由用户设置的信任根的一种方法是,将虚拟分区设置为仅当设备处于 <code>UNLOCKED</code> 状态时才能刷写或清除。Google Pixel 2 设备使用此方法以及名为 <code>avb_custom_key</code> 的虚拟分区。<code>avbtool extract_public_key</code> 命令会输出此分区中数据的格式。以下示例展示了如何设置可由用户设置的信任根:
+</p>
+
+<pre class="prettyprint"><code class="devsite-terminal">avbtool extract_public_key --key key.pem --output pkmd.bin</code>
+<code class="devsite-terminal">fastboot flash avb_custom_key pkmd.bin</code>
+</pre>
+<p>
+可由用户设置的信任根可通过发出以下命令来清除:
+</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">fastboot erase avb_custom_key
+</pre>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/verifiedboot/dm-verity.html b/zh-cn/security/verifiedboot/dm-verity.html
index 1fdff5a..af36add 100644
--- a/zh-cn/security/verifiedboot/dm-verity.html
+++ b/zh-cn/security/verifiedboot/dm-verity.html
@@ -20,20 +20,41 @@
       limitations under the License.
   -->
 
+<p>Android 4.4 及更高版本支持通过可选的 device-mapper-verity (dm-verity) 内核功能进行的验证启动,以便对块设备进行透明的完整性检查。dm-verity 有助于阻止可以持续保有 Root 权限并入侵设备的持续性 Rootkit。验证启动功能有助于 Android 用户在启动设备时确定设备状态与上次使用时是否相同。</p>
+<p>具有 Root 权限的可能有害的应用 (PHA) 可以躲开检测程序的检测,并以其他方式掩蔽自己。可以获取 Root 权限的软件就能够做到这一点,因为它通常比检测程序的权限更高,从而能够“欺骗”检测程序。</p>
+
+<p>通过 dm-verity 功能,您可以查看块设备(文件系统的底部存储层),并确定它是否与预期配置一致。该功能是利用加密哈希树做到这一点的。对于每个块(通常为 4k),都有一个 SHA256 哈希。</p>
+
+<p>由于哈希值存储在页面树中,因此顶级“根”哈希必须可信,才能验证树的其余部分。能够修改任何块相当于能够破坏加密哈希。下图描绘了此结构。</p>
+
+<img src="../images/dm-verity-hash-table.png" alt="dm-verity-hash-table" id="figure1"/>
+<p class="img-caption">
+  <strong>图 1.</strong> dm-verity 哈希表</p>
+
+<p>启动分区中包含一个公钥,该公钥必须已由设备制造商在外部进行验证。该密钥用于验证相应哈希的签名,并用于确认设备的系统分区是否受到保护且未被更改。</p>
+
 <h2 id="operation">操作</h2>
 
 <p>dm-verity 保护机制位于内核中。因此,如果获取 Root 权限的软件在内核启动之前入侵系统,它将会一直拥有该权限。为了降低这种风险,大多数制造商都会使用烧录到设备的密钥来验证内核。该密钥在设备出厂后将无法被更改。</p>
 
-<p>制造商会使用该密钥来验证第一级引导加载程序中的签名,而该引导加载程序会依次验证后续级别引导加载程序、应用引导加载程序和内核中的签名。希望利用<a href="verified-boot.html">验证启动</a>功能的每个制造商都应该有验证内核完整性的方法。内核经过验证后,可以在块设备装载时对其进行检查和验证。</p>
+<p>制造商会使用该密钥来验证第一级引导加载程序中的签名,而该引导加载程序会依次验证后续级别引导加载程序、应用引导加载程序和内核中的签名。希望利用<a href="/security/verifiedboot/verified-boot.html">验证启动</a>功能的每个制造商都应该有验证内核完整性的方法。内核经过验证后,可以在块设备装载时对其进行检查和验证。</p>
 
 <p>验证块设备的一种方法是直接对其内容进行哈希处理,然后将其与存储的值进行比较。不过,尝试验证整个块设备可能会需要较长的时间,并且会消耗设备的大量电量。设备将需要很长时间来启动,从而在可供使用之前便消耗了大量电量。</p>
 
 <p>而 dm-verity 只有在各个块被访问时才会对其进行单独验证。将块读入内存时,会以并行方式对其进行哈希处理。然后,会从第一级开始逐级验证整个哈希树的哈希。由于读取块是一项耗时又耗电的操作,因此这种块级验证带来的延时相对而言就有些微不足道了。</p>
 
+<aside class="note">
+作为针对 Android Go 和类似的低 RAM 设备进行的优化,dm-verity 可以配置为仅在首次(而不是每次)从数据设备读取页面时验证这些页面。首次验证之后,它会设置一个位以指示验证成功。由于此项优化可提供级别略低的完整性保证,因此不应将其用于 RAM 更高的设备。要了解详情,请参阅<a href="https://android.googlesource.com/kernel/common/+/a73c9bca682673630cd95a7fa55190f53bab73cf" class="external">这些内核补丁程序</a>。
+</aside>
+
 <p>如果验证失败,设备会生成 I/O 错误,指明无法读取相应块。设备看起来与文件系统损坏时一样,也与预期相同。</p>
 
 <p>应用可以选择在没有结果数据的情况下继续运行,例如,当这些结果并不是应用执行主要功能所必需的数据时。不过,如果应用在没有这些数据的情况下无法继续运行,则会失败。</p>
 
+<h2 id="fec">前向纠错</h2>
+
+Android 7.0 及更高版本通过前向纠错 (FEC) 功能提高了 dm-verity 的稳健性。AOSP 实现首先使用常用的 <a href="https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction" class="external">Reed-Solomon</a> 纠错码,并应用一种称为交错的技术来减少空间开销并增加可以恢复的损坏块的数量。有关 FEC 的更多详情,请参阅<a href="https://android-developers.googleblog.com/2016/07/strictly-enforced-verified-boot-with.html" class="external">严格强制验证启动与纠错</a>。
+
 <h2 id="implementation">实现</h2>
 
 <h3 id="summary">摘要</h3>
@@ -44,14 +65,14 @@
 <li>为该哈希树<a href="#mapping-table">构建 dm-verity 表</a>。</li>
 <li><a href="#signing">为该 dm-verity 表签名</a>以生成表签名。</li>
 <li>将表签名和 dm-verity 表<a href="#metadata">绑定</a>到 Verity 元数据。</li>
-<li>将系统映像、Verity 元数据和哈希树组合起来。</li>
+<li>将系统映像、Verity 元数据和哈希树连接起来。</li>
 </ol>
 
-<p>如需关于哈希树和 dm-verity 表的详细说明,请参阅 <a href="http://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot">Chromium 项目 - 验证启动</a>。</p>
+<p>如需关于哈希树和 dm-verity 表的详细说明,请参阅 <a href="http://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot" class="external">Chromium 项目 - 验证启动</a>。</p>
 
 <h3 id="hash-tree">生成哈希树</h3>
 
-<p>如<a href="#introduction">简介</a>中所述,哈希树是 dm-verity 不可或缺的一部分。<a href="https://gitlab.com/cryptsetup/cryptsetup/wikis/DMVerity">cryptsetup</a> 工具将为您生成哈希树。或者,也可以使用下面定义的兼容方式:</p>
+<p>如简介中所述,哈希树是 dm-verity 不可或缺的一部分。<a href="https://gitlab.com/cryptsetup/cryptsetup/wikis/DMVerity" class="external">cryptsetup</a> 工具将为您生成哈希树。或者,也可以使用下面定义的兼容方式:</p>
 
 <pre class="devsite-click-to-copy">
 &lt;your block device name&gt; &lt;your block device name&gt; &lt;block size&gt; &lt;block size&gt; &lt;image size in blocks&gt; &lt;image size in blocks + 8&gt; &lt;root hash&gt; &lt;salt&gt;
@@ -85,7 +106,7 @@
 
 <p>构建 dm-verity 映射表,该映射表会标明内核的块设备(或目标)以及哈希树的位置(是同一个值)。在生成 <code>fstab</code> 和设备启动时会用到此映射。该映射表还会标明块的大小和 hash_start,即哈希树的起始位置(具体来说,就是哈希树在映像开头处的块编号)。</p>
 
-<p>如需关于 Verity 目标映射表字段的详细说明,请参阅 <a href="https://code.google.com/p/cryptsetup/wiki/DMVerity">cryptsetup</a>。</p>
+<p>如需关于 Verity 目标映射表字段的详细说明,请参阅 <a href="https://code.google.com/p/cryptsetup/wiki/DMVerity" class="external">cryptsetup</a>。</p>
 
 <h3 id="signing">为 dm-verity 表签名</h3>
 
diff --git a/zh-cn/security/verifiedboot/index.html b/zh-cn/security/verifiedboot/index.html
index 4b01edf..96fc6ac 100644
--- a/zh-cn/security/verifiedboot/index.html
+++ b/zh-cn/security/verifiedboot/index.html
@@ -19,41 +19,24 @@
       See the License for the specific language governing permissions and
       limitations under the License.
   -->
-
-<p>Android 4.4 及更高版本支持通过可选的 device-mapper-verity (dm-verity) 内核功能进行的验证启动,以便对块设备进行透明的完整性检查。dm-verity 有助于阻止可以持续保有 Root 权限并入侵设备的持续性 Rootkit。验证启动功能有助于 Android 用户在启动设备时确定设备状态与上次使用时是否相同。</p>
-
-<p>更为狡猾且具有 Root 权限的恶意软件可以躲开检测程序的检测,并以其他方式掩蔽自己。可以获取 Root 权限的软件就能够做到这一点,因为它通常比检测程序的权限更高,从而能够“欺骗”检测程序。</p>
-
-<p>通过 dm-verity 功能,您可以查看块设备(文件系统的底部存储层),并确定它是否与预期配置一致。该功能是利用加密哈希树做到这一点的。对于每个块(通常为 4k),都有一个 SHA256 哈希。</p>
-
-<p>由于哈希值存储在页面树中,因此顶级“根”哈希必须可信,才能验证树的其余部分。能够修改任何块相当于能够破坏加密哈希。下图描绘了此结构。</p>
-
-<img src="../images/dm-verity-hash-table.png" alt="dm-verity-hash-table" id="figure1"/>
-<p class="img-caption">
-  <strong>图 1.</strong> dm-verity 哈希表</p>
-
-<p>启动分区中包含一个公钥,该公钥必须已由原始设备制造商 (OEM) 在外部进行验证。该密钥用于验证相应哈希的签名,并用于确认设备的系统分区是否受到保护且未被更改。</p>
-
-<h2 id="prerequisites">前提条件</h2>
-
-<h3 id="verified-boot">建立验证启动流程</h3>
-<p>为了大幅降低遭到入侵的风险,请使用烧录到设备上的密钥来验证内核。如需详细信息,请参阅<a href="verified-boot.html">验证启动</a>。</p>
-
-<h3 id="block-otas">切换到面向块的 OTA</h3>
-<p>要为设备启用 dm-verity,您必须使用基于块的无线下载 (OTA) 更新来确保所有设备均使用相同的系统分区。如需详细信息,请参阅<a href="/devices/tech/ota/block.html">基于块的 OTA</a>。</p>
-
-<h3 id="config-dm-verity">配置 dm-verity</h3>
-
-<p>在切换到面向块的 OTA 后,纳入最新的 Android 内核或使用现成的上游内核,然后通过添加相关配置选项 <code>CONFIG_DM_VERITY</code> 来启用 dm-verity 支持。</p>
-
-<p>如果使用 Android 内核,dm-verity 会在该内核编译后启用。如需详细信息,请参阅<a href="dm-verity.html">实现 dm-verity</a>。</p>
-
-<h2 id="supporting-docs">支持文档</h2>
-<p><a href="verified-boot.html">验证启动</a><br />
-<a href="/devices/tech/ota/block.html">基于块的 OTA</a><br />
-<a href="dm-verity.html">实现 dm-verity</a><br />
-<a href="https://gitlab.com/cryptsetup/cryptsetup/wikis/DMVerity">cryptsetup - dm-verity:device-mapper 块完整性检查目标</a><br />
-<a href="http://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot">Chromium 项目 - 验证启动</a><br />
-<a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/device-mapper/verity.txt">Linux 内核文档:verity.txt</a></p>
+<p>
+验证启动会尽力确保所有已执行代码均来自可信来源(通常是设备的原始设备制造商 [OEM]),以防受到攻击或损坏。它可建立一条从受硬件保护的信任根到引导加载程序,再到启动分区和其他已验证分区(包括 <code>system</code>、<code>vendor</code> 和可选的 <code>oem</code> 分区)的完整信任链。在设备启动过程中,无论是在哪个阶段,都会在进入下一个阶段之前先验证下一个阶段的完整性和真实性。
+</p>
+<p>
+除了确保设备运行的是安全的 Android 版本外,验证启动还会检查是否存在内置了<a href="/security/verifiedboot/verified-boot#rollback-protection">回滚保护</a>的正确 Android 版本。回滚保护可确保设备只会更新到更高的 Android 版本,从而帮助避免可能的漏洞持续存在。
+</p>
+<p>
+除了验证操作系统外,验证启动还允许 Android 设备将其完整性状态传达给用户。
+</p>
+<h2 id="background">背景</h2>
+<p>
+Android 4.4 增加了对验证启动和 <a href="/security/verifiedboot/dm-verity">dm-verity</a> 内核功能的支持。这种验证功能组合就是验证启动 1。
+</p>
+<p>
+以前的 Android 版本会在发现设备损坏时向用户发出警告,但仍然允许他们启动设备;从 Android 7.0 开始,系统会严格强制执行验证启动,从而使遭到入侵的设备无法启动。Android 7.0 还增加了对前向纠错功能的支持,有助于更可靠地防范非恶意数据损坏。
+</p>
+<p>
+Android 8.0 及更高版本包含 <a href="/security/verifiedboot/avb">Android 验证启动</a> (AVB),AVB 是验证启动的一个参考实现,可与 Project Treble 配合使用。除了与 Treble 配合使用外,AVB 还对分区脚本格式进行了标准化并增添了回滚保护功能。
+</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/setup/contribute/report-bugs.html b/zh-cn/setup/contribute/report-bugs.html
index 60b0c6d..899ed8c 100644
--- a/zh-cn/setup/contribute/report-bugs.html
+++ b/zh-cn/setup/contribute/report-bugs.html
@@ -156,6 +156,12 @@
    <th>提交错误</th>
   </tr>
   <tr>
+   <td><a href="https://issuetracker.google.com/issues?q=componentid:192795">ADB</a></td>
+   <td></td>
+   <td><a href="https://issuetracker.google.com/issues/new?component=192795">
+   <i class="material-icons">bug_report</i></a></td>
+  </tr>
+  <tr>
    <td><a href="https://issuetracker.google.com/issues?q=componentid:192633%2B">Android Studio</a></td>
    <td><a href="https://developer.android.com/studio/report-bugs.html#studio-bugs">Android Studio 详细信息</a></td>
    <td><a href="https://issuetracker.google.com/issues/new?component=192708&template=840533">
diff --git a/zh-cn/setup/develop/index.html b/zh-cn/setup/develop/index.html
index 4066115..fce55b2 100644
--- a/zh-cn/setup/develop/index.html
+++ b/zh-cn/setup/develop/index.html
@@ -40,7 +40,7 @@
 </p>
 
 <p>
-在大多数情况下,您可以仅使用 Git(不必使用 Repo),或结合使用 Repo 和 Git 命令以组成复杂的命令。不过,使用 Repo 执行基本的跨网络操作可大大简化您的工作。要详细了解 Repo,请参阅 <a href="repo.html">Repo 命令参考资料</a>。
+在大多数情况下,您可以仅使用 Git(不必使用 Repo),或结合使用 Repo 和 Git 命令以组成复杂的命令。不过,使用 Repo 执行基本的跨网络操作可大大简化您的工作。要详细了解 Repo,请参阅 <a href="/setup/develop/repo">Repo 命令参考资料</a>。
 </p>
 
 <h2 id="other-tools">其他工具</h2>
@@ -146,7 +146,7 @@
 </tbody></table>
 
 <p>
-要了解如何使用 Repo 下载源代码,请参阅<a href="../build/downloading.html">下载源代码</a>和 <a href="repo.html">Repo 命令参考资料</a>。
+要了解如何使用 Repo 下载源代码,请参阅<a href="/setup/build/downloading">下载源代码</a>和 <a href="/setup/develop/repo">Repo 命令参考资料</a>。
 </p>
 
 <h3 id="synchronizing-clients">同步客户端</h3>
@@ -256,7 +256,7 @@
 </pre>
 
 <p>
-要查看已提交的修改(<strong>已标记为</strong>需要提交的本地修改),请确保您已转到相应的项目目录,然后使用 <code>cached</code> 参数运行 <code>git
+要查看已提交的修改(<strong>已标记为</strong>需要提交的本地修改),请确保您已转到相应的项目目录,然后运行包含 <code>cached</code> 参数的 <code>git
   diff</code>:
 </p>
 <pre class="devsite-click-to-copy">
diff --git a/zh-cn/setup/start/brands.html b/zh-cn/setup/start/brands.html
new file mode 100644
index 0000000..6fa3917
--- /dev/null
+++ b/zh-cn/setup/start/brands.html
@@ -0,0 +1,111 @@
+<html devsite><head>
+    <title>品牌推广指南</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”名称、Android 徽标、“Google Play”品牌以及其他 Google 商标均为 Google LLC 的资产,不属于通过 Android 开源项目提供的资源。
+</p>
+
+<p>如果您想使用这些品牌,以表明它们与您的设备之间存在关联,请遵循本页所述的准则。这些准则与 <a href="https://developer.android.com/distribute/tools/promote/brand.html">Android 应用开发者品牌推广指南</a>和 <a href="https://www.google.com/permissions/">Google 品牌权限</a>之间是相辅相成的关系。</p>
+
+<h2 id="brand-android">Android</h2>
+
+<p>
+只有<a href="/compatibility/index.html">与 Android 兼容</a>的设备才能在硬件设备以及与该硬件设备相关的包装或营销材料中使用“Android”字样。
+</p>
+
+<ul>
+  <li>Android™ 首次出现在创意素材中时应标注商标符号。</li>
+  <li>“Android”应始终采用首字母大写形式,且一律不得使用复数或所有格形式。
+  </li>
+  <li>不得在产品名称中使用“Android”,也不得将其用作包装或设备上的主要或明显的标记。</li>
+  <li>“Android”一词只能用于指明您设备的操作系统。如果您不确定自己的用法是否符合我们的使用准则,请通过以下简单的测试来加以验证:如果您可以将“Android”替换为“Android 平台”且文本内容仍然有意义,那么您可以使用“Android”一词。
+  <ul>
+    <li><span style="color:red">不正确</span>:“Android XBrand 手机”</li>
+    <li><span style="color:green">正确</span>:“采用 Android 的 XBrand 手机”</li>
+  </ul>
+  </li>
+  <li>您可以将“with Android”(搭载 Android)(以纯黑色文本显示)与您的徽标一起使用。如果与您的徽标一起使用,则“with Android”(搭载 Android)不应超过徽标大小的 90%。首次或着重以这种形式使用时,后面应标注 ™ 符号。</li>
+  <li>只有后跟一个合适的通称时,Android 才可用作描述词。<em></em>不得将“Android”用作您设备的产品名称或品牌的一部分。
+  <ul>
+    <li><span style="color:red">不正确</span>:“Android XBrand 手机”</li>
+    <li><span style="color:green">正确</span>:“Android 移动设备”</li>
+  </ul>
+  </li>
+  <li>Google 保留要求在兼容设备及任何相关材料(包括但不限于包装、启动序列和营销材料)上注明 Android 和/或 Google 品牌的权利。
+  </li>
+  <li>
+  <p><strong>无论在任何情况下使用 Android 名称,都必须在您的资料中包含以下归属信息</strong>:</p>
+  <blockquote><em>Android 是 Google LLC 的商标。</em></blockquote><p></p>
+  </li>
+</ul>
+
+<h4>可接受的使用情形示例</h4>
+<img src="../images/JB-TM-example.png" alt="Jelly Bean 商标示例"/>
+<img src="../images/8100-TM-example.png" alt="8100 系列商标示例"/>
+
+<h4>不可接受的使用情形示例</h4>
+<img src="../images/XBrand-TM-example.jpg" alt="XBrand 商标示例"/>
+
+<h3 id="logo-android">Android 徽标</h3>
+<p>除非经 Google 书面协议明确授权,否则任何人都不得使用 Android 徽标及其专用字体(无论是否包含 Android 机器人)。</p>
+<img alt="无徽标" src="../images/android_logo_new_crossed_out.png"/>
+<img alt="无徽标" src="https://developer.android.com/images/brand/android_logo_no.png"/>
+
+<h3 id="robot-android">Android 机器人</h3>
+
+<div class="wrap">
+<div class="col-4">
+  <img alt="android-robot" style="float:left;margin-right:10px" width="100" src="/setup/images/Android_greenrobot.png"/>
+  <p style="padding-top:20px">
+  <a href="/setup/images/Android_greenrobot.ai">.ai</a><br />
+  <a href="/setup/images/Android_greenrobot.eps">.eps</a><br />
+  <a href="/setup/images/Android_greenrobot.png">.png</a><br />
+  <a href="/setup/images/Android_greenrobot.svg">.svg</a>
+  </p>
+</div>
+<div class="col-8">
+<p style="padding-top:20px">在注明适当归属信息的情况下,您可以在营销资料中自由使用、重制和修改 Android 机器人。如需了解详情,请参阅<a href="https://developer.android.com/distribute/tools/promote/brand.html">应用开发者品牌推广指南</a>和<a href="https://creativecommons.org/licenses/by/3.0/">知识共享许可</a>。</p>
+</div>
+</div>
+
+<div class="wrap" style="padding-top:20px">
+<div class="col-4" style="align:center">
+<img alt="no-peace-robot" style="width:30%;height:30%" src="../images/No_PeaceBot_200.jpg"/>
+</div>
+<div class="col-8">
+<p style="padding-top:20px">合作伙伴的营销材料中不得使用 Android Peace 机器人或其任何变体形式(例如带 Peace 标记的 Android 机器人)。</p>
+</div>
+</div>
+
+<div style="clear:both"></div>
+<h2 id="brand-google_play">Google Play</h2>
+
+<p>设备只有在<a href="/setup/start/faqs.html#if-my-device-is-compatible-does-it-automatically-have-access-to-google-play-and-branding">获得使用 Google Play 的许可</a>的情况下,才能在硬件包装、硬件的营销材料或硬件本身上使用“Google Play”名称和 Google Play 商店图标。如需查看经许可使用 Google Play 的设备列表,请参阅<a href="https://support.google.com/googleplay/answer/1727131">支持的设备</a>。</p>
+
+<h2>其他品牌</h2>
+<p><a href="https://www.android.com/auto/">Android Auto</a>、<a href="https://www.android.com/tv/">Android TV</a> 和 <a href="https://wearos.google.com">Wear OS by Google 谷歌</a>是归 Google 所有的品牌。这些品牌要求使用 Google 专有软件,此类软件在 Android 平台上运行且只能在获得 Google 授予的许可后使用。要了解如何申请许可,请参阅<a href="/compatibility/contact-us.html">与我们联系</a>。
+
+</p><h2 id="Questions">问题</h2>
+
+<p>如需了解更多品牌使用信息,请通过提交<a href="https://support.google.com/contact/partner_brand_approval">合作伙伴品牌咨询表单</a>与 Android 合作伙伴营销团队联系。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/setup/start/build-numbers.html b/zh-cn/setup/start/build-numbers.html
index 5d91164..f8140dc 100644
--- a/zh-cn/setup/start/build-numbers.html
+++ b/zh-cn/setup/start/build-numbers.html
@@ -208,6 +208,30 @@
   </thead>
   <tbody>
     <tr>
+      <td>PPR2.180905.006.A1</td>
+      <td>android-9.0.0_r8</td>
+      <td>Pie</td>
+      <td>Pixel XL、Pixel</td>
+    </tr>
+    <tr>
+      <td>PPR2.180905.006</td>
+      <td>android-9.0.0_r7</td>
+      <td>Pie</td>
+      <td>Pixel XL、Pixel</td>
+    </tr>
+    <tr>
+      <td>PPR2.180905.005</td>
+      <td>android-9.0.0_r6</td>
+      <td>Pie</td>
+      <td>Pixel 2 XL、Pixel 2</td>
+    </tr>
+    <tr>
+      <td>PPR1.180905.003</td>
+      <td>android-9.0.0_r5</td>
+      <td>Pie</td>
+      <td>Pixel XL、Pixel</td>
+    </tr>
+    <tr>
       <td>PPR1.180610.011</td>
       <td>android-9.0.0_r3</td>
       <td>Pie</td>
@@ -226,6 +250,30 @@
       <td>Pixel 2 XL、Pixel 2、Pixel XL、Pixel</td>
     </tr>
     <tr>
+      <td>OPM6.171019.030.K1</td>
+      <td>android-8.1.0_r46</td>
+      <td>Oreo</td>
+      <td>Nexus 5X 和 Nexus 6P</td>
+    </tr>
+    <tr>
+      <td>OPM4.171019.021.Z1</td>
+      <td>android-8.1.0_r45</td>
+      <td>Oreo</td>
+      <td>Pixel C</td>
+    </tr>
+    <tr>
+      <td>OPM6.171019.030.H1</td>
+      <td>android-8.1.0_r43</td>
+      <td>Oreo</td>
+      <td>Nexus 5X 和 Nexus 6P</td>
+    </tr>
+    <tr>
+      <td>OPM4.171019.021.Y1</td>
+      <td>android-8.1.0_r42</td>
+      <td>Oreo</td>
+      <td>Pixel C</td>
+    </tr>
+    <tr>
       <td>OPM6.171019.030.E1</td>
       <td>android-8.1.0_r41</td>
       <td>Oreo</td>
diff --git a/zh-cn/setup/start/p-release-notes.html b/zh-cn/setup/start/p-release-notes.html
index 434ba07..92a216a 100644
--- a/zh-cn/setup/start/p-release-notes.html
+++ b/zh-cn/setup/start/p-release-notes.html
@@ -177,6 +177,14 @@
 
 <h2 id="settings">设置</h2>
 
+<h3 id="better_app_widgets">更好的应用微件</h3>
+
+<p>Android 应用微件框架现在可让您更清楚地了解用户交互情况,特别是在用户删除或手动添加微件时。Launcher3 默认自带此功能。</p>
+
+<p>制造商需要更新启动器应用(随设备提供)才能支持此功能(如果不是基于 Launcher3 的话)。OEM 需要在其默认的启动器中支持新的 <a href="https://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo#widgetFeatures" class="external">widgetFeatures API</a>。</p>
+
+<p>除非启动器按预期实现此 API,否则此 API 本身并不能保证它可端到端正常运行。AOSP 包含实现示例。要查看提供的示例代码,请参阅 AOSP Change-Id Iccd6f965fa3d61992244a365efc242122292c0ca。</p>
+
 <h3 id="device_state_change_notifications_to_package_installers">关于软件包安装程序的设备状态更改通知</h3>
 
 <p>现在,只要语言区域或显示密度等属性发生更改,就可以将受保护的系统广播发送到拥有 <code>INSTALL_PACKAGES</code> 权限的应用。接收器可以在清单中注册,并且将唤醒相关进程以接收广播。这对于希望在发生此类更改时安装应用其他组件的软件包安装程序非常有用,但这种情况很少发生,因为有资格触发此广播的配置更改很少见。</p>
@@ -230,6 +238,10 @@
 <li><a href="/compatibility/cts/sensor-fusion-box-assembly">传感器融合盒组件</a>提供了组装传感器融合盒的分步说明。</li>
 </ul>
 
+<h4 id="wide_field_of_view_its-in-a-box">宽视野盒装 ITS</h4>
+
+<p><a href="/compatibility/cts/camera-wfov-box-assembly">宽视野盒装 ITS</a> 是相机图像测试套件 (ITS) 中的一种自动化系统,旨在测试宽视野 (WFoV) 和常规视野 (RFoV) 相机系统。</p>
+
 <h3 id="vendor_test_suite">供应商测试套件</h3>
 
 <h4 id="host_controller_architecture">主机控制器架构</h4>
@@ -266,7 +278,7 @@
 
 <h3 id="biometric_support">生物识别支持</h3>
 
-<p>Android 9 包含一个 <a href="https://developer.android.com/preview/features/security#fingerprint-auth" class="external">BiometricPrompt API</a>,应用可以使用该 API 采用与设备和模态无关的方式集成生物识别身份验证支持。要详细了解如何集成生物识别堆栈以包含 <code>BiometricPrompt</code>,请参阅<a href="/security/biometric">生物识别技术</a>。</p>
+<p>Android 9 包含一个 <a href="https://developer.android.com/preview/features/security#fingerprint-auth" class="external">BiometricPrompt API</a>,应用可以使用该 API 采用与设备和模态无关的方式集成生物识别身份验证支持。要详细了解如何集成生物识别堆栈以包含 <code>BiometricPrompt</code>,请参阅<a href="/security/biometric">生物识别</a>。</p>
 
 <h3 id="dynamic_analysis">动态分析</h3>
 
@@ -282,7 +294,7 @@
 
 <h3 id="encryption">加密</h3>
 
-<h4 id="file_based_encryption">文件级加密</h4>
+<h4 id="file-based_encryption">文件级加密</h4>
 
 <p><a href="/security/encryption/file-based">文件级加密</a>已更新,可用于<a href="/devices/storage/adoptable">可合并的存储设备</a>。对于新设备,我们建议使用文件级加密而不是全盘加密。</p>
 
@@ -316,7 +328,7 @@
 
 <h4 id="version_binding">版本绑定</h4>
 
-<p>为了支持 Treble 的模块化结构并终止 <code>system.img</code> 到 <code>boot.img</code> 的绑定,Keymaster 4 更改了<a href="/security/keystore/version-binding">密钥版本绑定</a>模式,使每个分区具有单独的补丁程序级别。这允许每个分区独立更新,同时仍提供回滚保护。</p>
+<p>为了支持 Treble 的模块化结构并终止 <code>system.img</code> 到 <code>boot.img</code> 的绑定,Keymaster 4 将<a href="/security/keystore/version-binding">密钥版本绑定</a>模式更改为每个分区都具有单独的补丁程序级别。这允许每个分区独立更新,同时仍提供回滚保护。</p>
 
 <h4 id="android_protected_confirmation">Android 受保护的确认</h4>
 
@@ -324,7 +336,7 @@
 
 <h3 id="selinux">SELinux</h3>
 
-<h4 id="per_app_selinux_sandbox">按应用划分的 SELinux 沙盒</h4>
+<h4 id="per-app_selinux_sandbox">按应用划分的 SELinux 沙盒</h4>
 
 <p><a href="/security/app-sandbox">应用沙盒</a>提供了新的保护和测试用例,以确保面向 Android 9 及更高版本的所有非特权应用均可运行单独的 SELinux 沙盒。</p>
 
@@ -346,7 +358,7 @@
 
 <h2 id="audio">音频</h2>
 
-<h3 id="high_resolution_audio_effects">高解析度音效</h3>
+<h3 id="high-resolution_audio_effects">高解析度音效</h3>
 
 <p><a href="/devices/audio/highres-effects">高解析度音效</a>的更新包括将音效处理从 int16 转换为浮动格式,并增加了同步客户端输出轨道、最大客户端/服务器内存和总混合轨道。</p>
 
@@ -360,7 +372,7 @@
 
 <p>摄像头设备可以<a href="/devices/camera/motion-tracking">通告运动跟踪功能</a>。</p>
 
-<h3 id="multi_camera_support">多摄像头支持</h3>
+<h3 id="multi-camera_support">多摄像头支持</h3>
 
 <p><a href="/devices/camera/multi-camera">多摄像头支持</a>通过一个新的逻辑摄像头设备(由两个或更多个指向同一方向的物理摄像头设备组成)引入了对多摄像头设备的 API 支持。</p>
 
@@ -380,7 +392,7 @@
 
 <p>此版本改善了对使用 <code>SubcriptionPlan</code> API <a href="/devices/tech/connect/data-plans">实现流量套餐</a>的运营商的支持。</p>
 
-<h4 id="third_party_calling_apps">第三方通话应用</h4>
+<h4 id="third-party_calling_apps">第三方通话应用</h4>
 
 <p>此版本提供了允许<a href="/devices/tech/connect/third-party-call-apps">第三方通话应用</a>处理并发传入的运营商呼叫,并在系统呼叫日志中记录呼叫的 API。</p>
 
@@ -400,7 +412,7 @@
 <li><a href="/devices/tech/connect/esim-euicc-api">eUICC API</a></li>
 </ul>
 
-<h4 id="multi_sim_support_for_ims_settings">对 IMS 设置的多 SIM 卡支持</h4>
+<h4 id="multi-sim_support_for_ims_settings">对 IMS 设置的多 SIM 卡支持</h4>
 
 <p>此版本改进了 <a href="/devices/tech/connect/ims">IMS</a> 用户设置。用户可以按单个订阅设置 LTE 语音通话 (VoLTE)、视频通话和 WLAN 通话,而不是在所有订阅中共享这些设置。</p>
 
@@ -414,9 +426,9 @@
 
 <p>当用户解锁设备时,intent 不会重新广播。依赖于在用户解锁之前发送的广播的接收器必须是 <code>directBootAware</code>,或者必须在用户解锁后查询状态。可以使用 TelephonyManager 中的相应 API 查询状态:<code>getSimCardState()</code> 和 <code>getSimApplicationState()</code>。</p>
 
-<h3 id="wi_fi">WLAN</h3>
+<h3 id="wi-fi">WLAN</h3>
 
-<h4 id="carrier_wi_fi">运营商 WLAN</h4>
+<h4 id="carrier_wi-fi">运营商 WLAN</h4>
 
 <p><a href="/devices/tech/connect/carrier-wifi">运营商 WLAN</a> 允许设备自动连接到运营商实现的 WLAN 网络。在人群拥挤或信号不足的区域(如体育场或地铁站),运营商 WLAN 可用于改善用户的连接体验和分载流量。</p>
 
@@ -424,11 +436,15 @@
 
 <p><a href="/devices/tech/connect/wifi-mac-randomization">随机分配 MAC 地址</a>允许设备在探测新网络时使用随机 MAC 地址,而当前未与网络相关联。在此版本中,可以启用相关开发者选项,使设备在连接到 WLAN 网络时使用随机分配的 MAC 地址。</p>
 
-<h4 id="wi_fi_round_trip_time_rtt">WLAN 往返时间 (RTT)</h4>
+<h4 id="turn_on_wi-fi_automatically">自动开启 WLAN</h4>
+
+<p>借助<a href="/devices/tech/connect/wifi-infrastructure#turn_on_wi-fi_automatically">自动开启 WLAN</a> 功能,只要设备靠近已保存且接收信号强度指示器 (RSSI) 相对较高的 WLAN 网络,便会自动重新启动 WLAN。</p>
+
+<h4 id="wi-fi_round_trip_time_rtt">WLAN 往返时间 (RTT)</h4>
 
 <p><a href="/devices/tech/connect/wifi-rtt">WLAN 往返时间 (RTT)</a> 允许设备测量与其他支持设备的距离:无论是接入点 (AP) 还是 WLAN 感知对等设备(如果设备支持 WLAN 感知)。此功能基于 IEEE 802.11mc 协议,使应用能够使用准确性更高的定位功能和增强的感知功能。</p>
 
-<h4 id="wi_fi_scoring_improvements">WLAN 评分改进</h4>
+<h4 id="wi-fi_scoring_improvements">WLAN 评分改进</h4>
 
 <p>经过改进的 WLAN 评分模型可以快速准确地确定设备何时应退出连接的 WLAN 网络或进入新的 WLAN 网络。这些模型通过避免连接缺口为用户提供可靠而无缝的体验。</p>
 
@@ -441,7 +457,7 @@
 <li><code>config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz</code></li>
 </ul>
 <aside class="note"><strong>注意</strong><span>:Android 8.1 中引入了“进入”值,并且选择了默认值以匹配“差”阈值的默认值,从而实现兼容性。理想情况下,进入阈值应比相应的退出(“差”)阈值高 3 分贝或更多。</span></aside>
-<h4 id="wi_fi_staap_concurrency">WLAN STA/AP 并发</h4>
+<h4 id="wi-fi_staap_concurrency">WLAN STA/AP 并发</h4>
 
 <p><a href="/devices/tech/connect/wifi-sta-ap-concurrency">WLAN STA/AP 并发</a>可以让设备同时在电台 (STA) 和接入点 (AP) 模式下运行。对于支持同步双频段 (DBS) 的设备,此功能开启了新功能,例如,当用户想要启用热点 (softAP) 时不会中断 STA WLAN。</p>
 
@@ -462,7 +478,7 @@
 
 <p>每种 WLAN 模式对运行服务都有不同的要求,并且应以一致的方式设置,从而只处理与其操作相关的事件。新实现将代码限制为与该模式相关的事件,缩短了调试时间并降低了由于复杂性而引入新错误的风险。除了对模式功能的显式处理之外,线程管理以一致的方式处理,并且消除了使用异步信道作为同步机制这一行为。</p>
 
-<h4 id="wi_fi_permission_updates">WLAN 权限更新</h4>
+<h4 id="wi-fi_permission_updates">WLAN 权限更新</h4>
 
 <p>在此版本中,系统会动态检查 <code>CHANGE_WIFI_STATE</code> 应用权限,并且用户可以关闭该权限。用户可以通过<strong>设置 &gt; 应用和通知 &gt; 特殊应用权限 &gt; WLAN 控制</strong>中的特殊设置页面停用任何应用的权限。</p>
 
@@ -510,6 +526,10 @@
 
 <p><a href="/devices/automotive/properties">车辆属性</a>描述了对车载 HAL 接口的更改。</p>
 
+<h3 id="gnss_satellite_selection">GNSS 卫星选择</h3>
+
+<p>使用新的全球导航卫星系统 (GNSS) HAL(1.1 版及更高版本)时,Android 框架会监控 Android 设置。合作伙伴可以通过 Google Play 服务或其他系统更新来这些设置。这些设置可告知 GNSS HAL 是否不应使用某些 GNSS 卫星。在持续出现 GNSS 卫星或星群错误时,或者为了更快地响应使用不同的时制和外部事件(例如闰秒和/或日或周数滚动增加)混合星群时可能发生的 GNSS HAL 实现问题时,这些设置非常有用。</p>
+
 <h3 id="gnss_hardware_model">GNSS 硬件型号</h3>
 
 <p>在 Android 9 中,GNSS HAL 1.1 或更高版本可以将有关硬件 API 的信息传递给平台。平台需要实现 <code>IGnssCallback</code> 接口并将句柄传递给 HAL。GNSS HAL 通过 <a href="https://developer.android.com/reference/android/location/LocationManager#getGnssHardwareModelName()" class="external"><code>LocationManager#getGnssHardwareModelName()</code></a> API 传递硬件型号信息。设备制造商应与其 GNSS HAL 提供商合作,尽可能提供此信息。</p>
@@ -530,9 +550,9 @@
 
 <p>Android 9 改进了对带宽估测的支持。如果 Android 应用知道可用的数据带宽,则可以更好地决定用于视频通话和视频串流的分辨率。</p>
 
-<p>在运行 Android 6.0 及更高版本的设备上,需要对移动网络进行带宽估计的调用者会调用 <a href="https://developer.android.com/reference/android/net/ConnectivityManager.html#requestBandwidthUpdate(android.net.Network)" class="external"><code>ConnectivityManager.requestBandwidthUpdate()</code></a>,并且框架可以提供估计的下行链路带宽。<em></em></p>
+<p>在运行 Android 6.0 及更高版本的设备上,想要对移动网络进行带宽估计的调用者会调用 <a href="https://developer.android.com/reference/android/net/ConnectivityManager.html#requestBandwidthUpdate(android.net.Network)" class="external"><code>ConnectivityManager.requestBandwidthUpdate()</code></a>,并且框架可以提供估计的下行链路带宽。<em></em></p>
 
-<p>但是,在运行 9 或更高版本的设备上,当估计带宽发生重大变化时,<a href="https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback.html#onCapabilitiesChanged(android.net.Network, android.net.NetworkCapabilities)" class="external"><code>onNetworkCapabilitiesChanged()</code></a> 回调会自动触发,并且调用 <code>requestBandwidthUpdate()</code> 是空操作;相关的 <a href="https://developer.android.com/reference/android/net/NetworkCapabilities#getlinkdownstreambandwidthkbps" class="external"><code>getLinkDownstreamBandwidthKbps()</code></a> 和 <a href="https://developer.android.com/reference/android/net/NetworkCapabilities#getlinkupstreambandwidthkbps" class="external"><code>getLinkUpstreamBandwidthKbps()</code></a> 填充了物理层提供的更新信息。</p>
+<p>但是,在运行 Android 9 或更高版本的设备上,当估计带宽发生显著变化时,<a href="https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback.html#onCapabilitiesChanged(android.net.Network,%20android.net.NetworkCapabilities)" class="external"><code>onNetworkCapabilitiesChanged()</code></a> callback 会自动触发,并且调用 <code>requestBandwidthUpdate()</code> 是空操作;相关的 <a href="https://developer.android.com/reference/android/net/NetworkCapabilities#getlinkdownstreambandwidthkbps" class="external"><code>getLinkDownstreamBandwidthKbps()</code></a> 和 <a href="https://developer.android.com/reference/android/net/NetworkCapabilities#getlinkupstreambandwidthkbps" class="external"><code>getLinkUpstreamBandwidthKbps()</code></a> 会填充由物理层提供的更新信息。</p>
 
 <p>此外,设备可以通过 <a href="https://developer.android.com/reference/android/telephony/ServiceState#getcellbandwidths" class="external"><code>ServiceState.getCellBandwidths()</code></a> 检查 LTE 单元带宽。这使应用可以确切地知道给定单元上可用的带宽(频率)有多少。通过隐藏菜单可以获得单元带宽信息,以便现场测试人员可以检查最新信息。</p>
 
@@ -540,6 +560,26 @@
 
 <p><a href="/devices/tech/datausage/ebpf-traffic-monitor">eBPF 网络流量工具</a>使用内核和用户空间实现的组合来监控自上次设备启动以来设备上的网络使用情况。它提供了额外的功能,例如套接字标记、分离前台/后台流量,以及按 UID 划分的防火墙,以根据设备状态阻止应用访问网络。</p>
 
+<h3 id="restore_to_lower_apis">恢复到较低版本的 API</h3>
+
+<p>设备现在可以从操作系统的未来版本进行恢复。当用户升级手机之后将手机丢失或损坏时,此功能特别有用。</p>
+
+<p>如果 OEM 修改其中任何系统软件包(Android、系统、设置)的备份代理,那么这些代理应该执行在较新版平台中进行的备份集恢复,而不会出现崩溃并至少恢复一些数据。</p>
+
+<p>建议您使用验证程序检查给定备份数据是否存在无效值,并仅恢复有效数据(如 <code>core/java/android/provider/SettingsValidators.java</code>)。</p>
+
+<p>此功能在默认情况下处于启用状态。可以通过 <code>Settings.Global.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION</code> 停用 SettingsBackupAgent 对从未来版本进行恢复的支持。除非设备制造商扩展 ROM 中包含的其中一个备份代理(或添加一个自定义代理),否则无需进行任何额外的实现。</p>
+
+<p>此功能允许系统从平台的未来版本进行恢复;不过,恢复后的数据可能会不完整,这一点是可以理解的。以下说明适用于下述备份代理:</p>
+
+<ul>
+<li><p><strong>PackageManagerBackupAgent</strong>:通过格式版本控制为未来版本的备份数据提供支持;此处的扩展程序必须与当前的恢复代码兼容,或遵循类中的指令(包括递增适当的常量)。</p></li>
+<li><p><strong>SystemBackupAgent</strong>:在此版本及更高版本的 Android 中,<code>restoreAnyVersion = false</code>。不支持从更高版本的 API 进行恢复。</p></li>
+<li><p><strong>SettingsBackupAgent</strong>:从此版本开始,<code>restoreAnyVersion = true</code>。
+通过验证程序提供部分支持。如果目标操作系统中存在某项设置的验证程序,则可以从更高版本的 API 恢复该设置。添加任何设置都应附带该设置的验证程序。请查看相关类以了解详情。</p></li>
+<li><p>ROM 中包含的任何<strong>自定义备份代理</strong>都应在备份数据格式发生不兼容的更改时递增其版本号,并在其代理尚未准备好根据未来版本的代码处理备份数据时确保 <code>restoreAnyVersion = false</code>(默认值)。</p></li>
+</ul>
+
 <h2 id="enterprise">企业</h2>
 
 <h3 id="managed_profile_improvements">托管配置文件改进</h3>
@@ -570,7 +610,7 @@
 
 <p>此版本支持在具有蓝图编译规则的原生 Android 模块上使用 <a href="/devices/tech/perf/pgo">Clang 的配置文件引导优化</a> (PGO)。</p>
 
-<h3 id="write_ahead_logging">预写日志</h3>
+<h3 id="write-ahead_logging">预写日志</h3>
 
 <p><a href="/devices/tech/perf/compatibility-wal">应用的兼容性 WAL(预写日志记录)</a>是 SQLiteDatabase 的一种新的特殊模式,称为兼容性 WAL(预写日志记录),它允许数据库使用 <code>journal_mode=WAL</code>,同时保留每个数据库最多保持一个连接的行为。</p>
 
diff --git a/zh-cn/whitelist/foo.html b/zh-cn/whitelist/foo.html
new file mode 100644
index 0000000..94800b9
--- /dev/null
+++ b/zh-cn/whitelist/foo.html
@@ -0,0 +1,10 @@
+<html devsite>
+  <head>
+    <title>Chinese Test Page</title>
+    <meta name="project_path" value="/_project.yaml" />
+    <meta name="book_path" value="/whitelist/_book.yaml" />
+  </head>
+  <body>
+    <p>I am a test page in Chinese that doesn't exist in English.</p>
+  </body>
+</html>
diff --git a/zh-cn/whitelist/index.html b/zh-cn/whitelist/index.html
new file mode 100644
index 0000000..781966f
--- /dev/null
+++ b/zh-cn/whitelist/index.html
@@ -0,0 +1,10 @@
+<html devsite>
+  <head>
+    <title>Chinese Test Page</title>
+    <meta name="project_path" value="/_project.yaml" />
+    <meta name="book_path" value="/whitelist/_book.yaml" />
+  </head>
+  <body>
+    <p>I am a test page in Chinese.</p>
+  </body>
+</html>
diff --git a/zh-tw/security/bulletin/2018-07-01.html b/zh-tw/security/bulletin/2018-07-01.html
index 3f89b34..5c4b2e8 100644
--- a/zh-tw/security/bulletin/2018-07-01.html
+++ b/zh-tw/security/bulletin/2018-07-01.html
@@ -585,7 +585,7 @@
   <tr>
    <td>1.2</td>
    <td>2018 年 7 月 11 日</td>
-    <td>已將 CVE-2018-5855 和 CVE-2018-11258 從 2018-07-05 SPL 中移除。</td>
+    <td>將 CVE-2018-5855 和 CVE-2018-11258 從 2018-07-05 SPL 中移除。</td>
   </tr>
 </tbody></table>
 
diff --git a/zh-tw/security/bulletin/2018-09-01.html b/zh-tw/security/bulletin/2018-09-01.html
index e1b6cc5..0daf32c 100644
--- a/zh-tw/security/bulletin/2018-09-01.html
+++ b/zh-tw/security/bulletin/2018-09-01.html
@@ -76,7 +76,7 @@
    <td><a href="https://android.googlesource.com/platform/libcore/+/518e8d27de9f32eb86bc3090ee2759ea93b9fb93" class="external">A-110955991</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -101,21 +101,21 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/623b2b604c4ffcd48f137379d6934537510665bf" class="external">A-109824443</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9470</td>
    <td><a href="https://android.googlesource.com/platform/external/neven/+/86a561f79f97baa38e240f6296fe1192fa4a5c9c" class="external">A-78290481</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9471</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/eabaff1c7f02906e568997bdd7dc43006655387e" class="external">A-77599679</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -165,7 +165,7 @@
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/586b9102f322731d604e6280143e16cb6f1c9f76" class="external">A-77600398</a></td>
    <td>EoP</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9440</td>
@@ -173,7 +173,7 @@
 [<a href="https://android.googlesource.com/platform/frameworks/av/+/2870acaa4c58cf59758a74b6390615a421f14268" class="external">2</a>]</td>
    <td>DoS</td>
    <td>中</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -198,21 +198,21 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/43cd528a444d0cc5bbf3beb22cd583289bcf7334" class="external">A-79266386</a></td>
    <td>EoP</td>
    <td>最高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9478</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217522</a></td>
    <td>EoP</td>
    <td>最高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9479</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/68688194eade113ad31687a730e8d4102ada58d5" class="external">A-79217770</a></td>
    <td>EoP</td>
    <td>最高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9456</td>
@@ -233,63 +233,63 @@
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757168</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9481</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757435</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9482</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/75c22982624fb530bc1d57aba6c1e46e7881d6ba" class="external">A-109757986</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9483</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d3689fb0ddcdede16c13250a7a30ca76b113c9c1" class="external">A-110216173</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9484</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/d5b44f6522c3294d6f5fd71bc6670f625f716460" class="external">A-79488381</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9485</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bdbabb2ca4ebb4dc5971d3d42cb12f8048e23a23" class="external">A-80261585</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9486</td>
    <td><a href="https://android.googlesource.com/platform/system/bt/+/bc6aef4f29387d07e0c638c9db810c6c1193f75b" class="external">A-80493272</a></td>
    <td>ID</td>
    <td>高</td>
-   <td>7.0、7.1.1、7.1.2、8.0、8.1、9.0</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9487</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/cf6784bfbf713aaa54d8da77e9481b3f02784246" class="external">A-69873852</a></td>
    <td>DoS</td>
    <td>高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9488</td>
    <td><a href="https://android.googlesource.com/platform/system/sepolicy/+/d4e094e2b1a47c1fea1799d9fade19e953a7ca1b" class="external">A-110107376</a></td>
    <td>EoP</td>
    <td>中</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
@@ -314,14 +314,14 @@
    <td><a href="https://android.googlesource.com/platform/system/libhidl/+/93484b9b015d47c0f7e5f4449a214b2fed8bed4f" class="external">A-79376389</a></td>
    <td>RCE</td>
    <td>最高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
   <tr>
    <td>CVE-2018-9427</td>
    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/29d991fac25b261a72ce73f96c9df594ea5b9242" class="external">A-77486542</a></td>
    <td>RCE</td>
    <td>最高</td>
-   <td>8.0、8.1、9.0</td>
+   <td>8.0、8.1、9</td>
   </tr>
 </tbody></table>
 
diff --git a/zh-tw/security/bulletin/2018-10-01.html b/zh-tw/security/bulletin/2018-10-01.html
new file mode 100644
index 0000000..5753433
--- /dev/null
+++ b/zh-tw/security/bulletin/2018-10-01.html
@@ -0,0 +1,444 @@
+<html devsite><head>
+    <title>Android 安全性公告 - 2018 年 10 月</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>發佈日期:2018 年 10 月 1 日 | 更新日期:2018 年 10 月 1 日</em></p>
+
+<p>
+Android 安全性公告列舉對 Android 裝置造成影響的安全性漏洞,並說明各項相關細節。2018-10-05 之後的安全性修補程式等級已解決了這些問題。請參閱<a href="https://support.google.com/pixelphone/answer/4457705" class="external">檢查及更新 Android 版本</a>一文,瞭解如何查看裝置的安全性修補程式等級。
+</p>
+<p>
+Android 的合作夥伴至少會提前一個月收到公告中所有問題的相關通知。這些問題的原始碼修補程式已發佈到 Android 開放原始碼計劃 (AOSP) 存放區中,且公告中亦提供相關連結。此外,本公告也提供 Android 開放原始碼計劃以外的修補程式連結。</p>
+<p>
+在這些問題中,最嚴重的就是架構中嚴重程度「最高」的安全性漏洞。遠端攻擊者可利用這類漏洞,在獲得授權的程序環境內透過特製檔案執行任何程式碼。<a href="/security/overview/updates-resources.html#severity">嚴重程度評定標準</a>是假設平台與服務的因應防護措施基於開發作業的需求而被關閉,或是遭到有心人士破解,然後推算當有人惡意運用漏洞時,使用者的裝置會受到多大的影響,據此評定漏洞的嚴重程度。
+</p>
+<p>
+針對這些新發現的漏洞,我們目前尚未收到任何客戶回報相關的漏洞濫用案例。如果想進一步瞭解 <a href="/security/enhancements/">Android 安全性平台防護措施</a>和 Google Play 安全防護機制如何加強 Android 平台的安全性,請參閱 <a href="#mitigations">Android 和 Google Play 安全防護機制所提供的因應措施</a>。
+</p>
+<p class="note">
+<strong>注意:</strong>在 <a href="/security/bulletin/pixel/2018-10-01">2018 年 10 月 Pixel/Nexus 安全性公告</a>中,我們提供了 Google 裝置適用的最新無線下載更新 (OTA) 和韌體映像檔的相關資訊。
+</p>
+
+<h2 id="mitigations">Android 和 Google 服務問題因應措施</h2>
+<p>
+本節概述 <a href="/security/enhancements/">Android 安全性平台</a>和 <a href="https://www.android.com/play-protect" class="external">Google Play 安全防護</a>等服務防護方案所提供的因應措施。這些措施可有效防範有心人士在 Android 系統上惡意運用安全性漏洞來達到特定目的。
+</p>
+<ul>
+<li>Android 平台持續推出新的版本來強化安全性,因此有心人士越來越難在 Android 系統上找出漏洞加以利用。我們建議所有使用者盡可能更新至最新版的 Android。</li>
+<li>Android 安全性小組透過 <a href="https://www.android.com/play-protect" class="external">Google Play 安全防護</a>主動監控濫用情形;使用這些功能的目的是在發現<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的應用程式</a>時警告使用者。在預設情況下,搭載 <a href="http://www.android.com/gms" class="external">Google 行動服務</a>的裝置會自動啟用 Google Play 安全防護機制。對於需要從 Google Play 以外的來源安裝應用程式的使用者來說,這項防護措施格外重要。</li>
+</ul>
+<h2 id="2018-10-01-details">2018-10-01 安全性修補程式等級 - 資安漏洞詳情</h2>
+<p>
+下列各節針對 2018-10-01 安全性修補程式等級適用的各項安全性漏洞提供了詳細資訊,我們依照資安問題本身所影響的元件將各項漏洞分門別類,另外也附上了問題說明和一份 CVE 資訊表,其中包括了相關參考資料、<a href="#type">漏洞類型</a>、<a href="/security/overview/updates-resources.html#severity">嚴重程度</a>,以及更新的 Android 開放原始碼計劃版本 (在適用情況下)。假如相關錯誤有公開變更,該錯誤 ID 會連結到相對應的變更 (例如 Android 開放原始碼計劃變更清單)。如果單一錯誤有多項相關變更,您可以透過該錯誤 ID 後面的編號連結開啟額外的參考資料。</p>
+
+<h3 id="framework">架構</h3>
+<p>本節中最嚴重的漏洞可能會讓遠端攻擊者得以利用特製檔案在獲得授權的程序環境內執行任何程式碼。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>參考資料</th>
+    <th>類型</th>
+    <th>嚴重程度</th>
+    <th>更新的 Android 開放原始碼計劃版本</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9490</td>
+   <td><a href="https://android.googlesource.com/platform/external/chromium-libpac/+/948d4753664cc4e6b33cc3de634ac8fd5f781382">A-111274046</a>
+      [<a href="https://android.googlesource.com/platform/external/v8/+/a24543157ae2cdd25da43e20f4e48a07481e6ceb">2</a>]</td>
+   <td>EoP</td>
+   <td>最高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9491</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/2b4667baa5a2badbdfec1794156ee17d4afef37c">A-111603051</a></td>
+   <td>RCE</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9492</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/962fb40991f15be4f688d960aa00073683ebdd20">A-111934948</a></td>
+   <td>EoP</td>
+   <td>高</td>
+   <td>8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9493</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/462aaeaa616e0bb1342e8ef7b472acc0cbc93deb">A-111085900</a>
+      [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/e7364907439578ce5334bce20bb03fef2e88b107">2</a>]
+      [<a href="https://android.googlesource.com/platform/frameworks/base/+/ebc250d16c747f4161167b5ff58b3aea88b37acf">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9452</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/base/+/54f661b16b308cf38d1b9703214591c0f83df64d">A-78464361</a>
+       [<a href="https://android.googlesource.com/platform/frameworks/base/+/3b6f84b77c30ec0bab5147b0cffc192c86ba2634">2</a>]</td>
+   <td>DoS</td>
+   <td>中</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="media-framework">媒體架構</h3>
+<p>本節中最嚴重的漏洞可能會讓遠端攻擊者得以利用特製檔案在獲得授權的程序環境內執行任何程式碼。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>參考資料</th>
+    <th>類型</th>
+    <th>嚴重程度</th>
+    <th>更新的 Android 開放原始碼計劃版本</th>
+  </tr>
+  <tr>
+   <td>CVE-2018-9473</td>
+   <td><a href="https://android.googlesource.com/platform/external/libhevc/+/9f0fb67540d2259e4930d9bd5f1a1a6fb95af862">A-65484460</a></td>
+   <td>RCE</td>
+   <td>最高</td>
+   <td>8.0</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9496</td>
+   <td><a href="https://android.googlesource.com/platform/external/libxaac/+/04e8cd58f075bec5892e369c8deebca9c67e855c">A-110769924</a></td>
+   <td>RCE</td>
+   <td>最高</td>
+   <td>9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9497</td>
+   <td><a href="https://android.googlesource.com/platform/external/libmpeg2/+/bef16671c891e16f25a7b174bc528eea109357be">A-74078669</a></td>
+   <td>RCE</td>
+   <td>最高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9498</td>
+   <td><a href="https://android.googlesource.com/platform/external/skia/+/77c955200ddd1761d6ed7a6c1578349fedbb55e4">A-78354855</a></td>
+   <td>RCE</td>
+   <td>最高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9499</td>
+   <td><a href="https://android.googlesource.com/platform/frameworks/av/+/bf7a67c33c0f044abeef3b9746f434b7f3295bb1">A-79218474</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+</tbody></table>
+
+<h3 id="system">系統</h3>
+<p>本節中最嚴重的漏洞可能會讓鄰近的攻擊者在獲得授權的程序環境內執行任何程式碼。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>參考資料</th>
+    <th>類型</th>
+    <th>嚴重程度</th>
+    <th>更新的 Android 開放原始碼計劃版本</th>
+  </tr>
+  <tr>
+   <td>CVE-2017-13283</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/ebc284cf3a59ee5cf7c06af88c2f3bcd0480e3e9">A-78526423</a></td>
+   <td>RCE</td>
+   <td>最高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9476</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/dd28d8ddf2985d654781770c691c60b45d7f32b4">A-109699112</a></td>
+   <td>EoP</td>
+   <td>最高</td>
+   <td>8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9504</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/11fb7aa03437eccac98d90ca2de1730a02a515e2">A-110216176</a></td>
+   <td>RCE</td>
+   <td>最高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9501</td>
+   <td><a href="https://android.googlesource.com/platform/packages/apps/Settings/+/5e43341b8c7eddce88f79c9a5068362927c05b54">A-110034419</a></td>
+   <td>EoP</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9502</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-111936792</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9503</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/92a7bf8c44a236607c146240f3c0adc1ae01fedf">A-80432928</a>
+      [<a href="https://android.googlesource.com/platform/system/bt/+/d4a34fefbf292d1e02336e4e272da3ef1e3eef85">2</a>]
+      [<a href="https://android.googlesource.com/platform/system/bt/+/9fe27a9b445f7e911286ed31c1087ceac567736b">3</a>]</td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9505</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/5216e6120160b28d76e9ee4dff9995e772647511">A-110791536</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9506</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/830cb39cb2a0f1bf6704d264e2a5c5029c175dd7">A-111803925</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9507</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/30cec963095366536ca0b1306089154e09bfe1a9">A-111893951</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9508</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/e8bbf5b0889790cf8616f4004867f0ff656f0551">A-111936834</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9509</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/198888b8e0163bab7a417161c63e483804ae8e31">A-111937027</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9510</td>
+   <td><a href="https://android.googlesource.com/platform/system/bt/+/6e4b8e505173f803a5fc05abc09f64eef89dc308">A-111937065</a></td>
+   <td>ID</td>
+   <td>高</td>
+   <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
+  </tr>
+  <tr>
+   <td>CVE-2018-9511</td>
+   <td><a href="https://android.googlesource.com/platform/system/netd/+/931418b16c7197ca2df34c2a5609e49791125abe">A-111650288</a></td>
+   <td>DoS</td>
+   <td>高</td>
+   <td>9</td>
+  </tr>
+</tbody></table>
+
+<h2 id="2018-10-05-details">2018-10-05 安全性修補程式等級 - 資安漏洞詳情</h2>
+<p>
+下列各節針對 2018-10-05 安全性修補程式等級適用的各項安全性漏洞提供了詳細資訊。我們依照資安問題本身所影響的元件將各項漏洞分門別類,另外也附上了一些詳細資料,例如 CVE、相關參考資料、<a href="#type">漏洞類型</a>、<a href="/security/overview/updates-resources.html#severity">嚴重程度</a>、元件 (在適用情況下),和更新的 Android 開放原始碼計劃版本 (在適用情況下)。假如相關錯誤有公開變更,該錯誤 ID 會連結到相對應的變更 (例如 Android 開放原始碼計劃變更清單)。如果單一錯誤有多項相關變更,您可以透過該錯誤 ID 後面的編號連結開啟額外的參考資料。</p>
+
+<h3 id="kernel-components">核心元件</h3>
+<p>本節中最嚴重的漏洞可能會讓本機惡意應用程式在獲得授權的程序環境內執行任何程式碼。</p>
+
+<table>
+  <colgroup><col width="21%" />
+  <col width="21%" />
+  <col width="14%" />
+  <col width="14%" />
+  <col width="30%" />
+  </colgroup><tbody><tr>
+    <th>CVE</th>
+    <th>參考資料</th>
+    <th>類型</th>
+    <th>嚴重程度</th>
+    <th>元件</th>
+  </tr>
+  <tr>
+    <td>CVE-2018-9513</td>
+    <td>A-111081202<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>Fork</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9514</td>
+    <td>A-111642636<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>sdcardfs</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-9515</td>
+    <td>A-111641492<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>sdcardfs</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">常見問題與解答</h2>
+<p>如果您在閱讀這篇公告後有任何疑問,可參考本節的常見問答。</p>
+<p><strong>1. 如何判斷我目前的裝置軟體版本是否已修正這些問題?</strong></p>
+<p>請參閱<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">檢查及更新 Android 版本</a>一文,瞭解如何查看裝置的安全性修補程式等級。</p>
+<ul>
+<li>2018-10-01 之後的安全性修補程式等級已解決了所有與 2018-10-01 安全性修補程式等級相關的問題。</li>
+<li>2018-10-05 之後的安全修補等級完全解決了與 2018-10-05 安全性修補程式等級及所有先前修補等級相關的問題。</li>
+</ul>
+<p>提供這些更新的裝置製造商應將修補程式字串等級設定為:</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2018-10-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-10-05]</li>
+</ul>
+<p><strong>2. 為什麼這篇公告有兩種安全性修補程式等級?</strong></p>
+<p>
+本公告有兩種安全性修補程式等級,讓 Android 合作夥伴能夠靈活運用,以快速修正某些發生在所有 Android 裝置上的類似漏洞。我們建議 Android 合作夥伴修正本公告所列的所有問題,並使用最新的安全性修補程式等級。
+</p>
+<ul>
+<li>安全性修補程式等級為 2018-10-01 的裝置必須納入所有與該安全性修補程式等級相關的問題,以及在之前安全性公告中回報的所有問題適用的修正程式。</li>
+<li>如果裝置的安全性修補程式等級在 2018-10-05 之後,就必須加入本安全性公告 (以及之前公告) 中的所有適用修補程式。</li>
+</ul>
+<p>
+我們建議合作夥伴將所有問題適用的修補程式都彙整在單一更新中。
+</p>
+<p id="type">
+<strong>3.「類型」<em></em>欄中的項目代表什麼意義?</strong>
+</p>
+<p>
+在資安漏洞詳情表格中,「類型」<em></em>欄中的項目代表的是安全性漏洞的類別。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>縮寫</th>
+   <th>定義</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>遠端程式碼執行</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>權限升級</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>資訊外洩</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>阻斷服務</td>
+  </tr>
+  <tr>
+   <td>無</td>
+   <td>未分類</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>4.「參考資料」<em></em>欄底下列出的識別碼代表什麼意義?</strong>
+</p>
+<p>
+資安漏洞詳情表格中「參考資料」<em></em>欄底下的項目可能會包含一個前置字串,用以表示該參考資料值所屬的機構或公司。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>前置字串</th>
+   <th>參考資料</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android 錯誤 ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm 參考編號</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek 參考編號</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA 參考編號</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom 參考編號</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>5.「參考資料」<em></em>欄中 Android 錯誤 ID 旁邊的星號 (*) 代表什麼意義?</strong>
+</p>
+<p>
+在「參考資料」<em></em>欄中 Android 錯誤 ID 旁邊標上星號 (*) 代表該問題並未公開,相關的更新通常是直接整合在最新的 Pixel/Nexus 裝置專用驅動程式的安裝檔中。您可以前往 <a href="https://developers.google.com/android/drivers" class="external">Google Developers 網站</a>下載這些驅動程式。
+</p>
+<p>
+<strong>6. 為什麼安全性漏洞會區分為本安全性公告以及裝置合作夥伴的安全性公告,例如 Pixel/Nexus 公告?</strong>
+</p>
+<p>
+為了宣告 Android 裝置最新的安全性修補程式等級,我們必須先在這份安全性公告中刊載相關的安全性漏洞。裝置/合作夥伴安全性公告所刊載的其他安全性漏洞則未強制規定宣告安全性修補程式等級。我們鼓勵 Android 裝置和晶片組製造商將旗下裝置的其他修正刊載在自己的安全性網站上,例如 <a href="https://security.samsungmobile.com/securityUpdate.smsb" class="external">Samsung</a>、<a href="https://lgsecurity.lge.com/security_updates.html" class="external">LGE</a> 或是 <a href="/security/bulletin/pixel/" class="external">Pixel/Nexus</a> 安全性公告。
+</p>
+
+<h2 id="versions">版本</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>版本</th>
+   <th>日期</th>
+   <th>附註</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>發佈公告。</td>
+  </tr>
+  <tr>
+   <td>1.1</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>修訂公告內容 (加入 Android 開放原始碼計劃連結)。</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-tw/security/bulletin/2018.html b/zh-tw/security/bulletin/2018.html
index bc9394f..1399635 100644
--- a/zh-tw/security/bulletin/2018.html
+++ b/zh-tw/security/bulletin/2018.html
@@ -34,6 +34,22 @@
     <th>安全性修補程式等級</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即將推出
+     <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
diff --git a/zh-tw/security/bulletin/index.html b/zh-tw/security/bulletin/index.html
index 1bd69ce..99a4db7 100644
--- a/zh-tw/security/bulletin/index.html
+++ b/zh-tw/security/bulletin/index.html
@@ -56,6 +56,22 @@
     <th>安全性修補程式等級</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即將推出
+     <!--
+     <a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-01<br />
+        2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/2018-09-01.html">English</a> /
diff --git a/zh-tw/security/bulletin/pixel/2018-10-01.html b/zh-tw/security/bulletin/pixel/2018-10-01.html
new file mode 100644
index 0000000..9427d16
--- /dev/null
+++ b/zh-tw/security/bulletin/pixel/2018-10-01.html
@@ -0,0 +1,186 @@
+<html devsite><head>
+    <title>Pixel/Nexus 安全性公告 - 2018 年 10 月</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>發佈日期:2018 年 10 月 1 日</em></p>
+
+<p>
+Pixel/Nexus 安全性公告列舉對<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">支援的 Google Pixel 和 Nexus 裝置</a> (Google 裝置) 造成影響的安全性漏洞和功能改善項目,並說明各項相關細節。2018-10-05 之後的安全性修補程式等級也已針對 Google 裝置解決了這個公告和 2018 年 10 月 Android 安全性公告列出的所有問題。請參閱<a href="https://support.google.com/pixelphone/answer/4457705" class="external">檢查及更新 Android 版本</a>一文,瞭解如何查看裝置的安全性修補程式等級。
+</p>
+<p>
+所有支援的 Google 裝置都會收到 2018-10-05 修補程式等級更新。我們建議所有客戶接受這些裝置更新。
+</p>
+<p class="note">
+<strong>注意:</strong>您可以前往 <a href="https://developers.google.com/android/images" class="external">Google Developers 網站</a>取得 Google 裝置韌體映像檔。
+</p>
+
+<h2 id="announcements">公告事項</h2>
+
+<p>在 2018 年 10 月 Pixel/Nexus 安全性公告中,我們未提供任何 Pixel 或 Nexus 安全性修補程式。
+</p>
+
+<h2 id="functional-patches">功能修補程式</h2>
+<p>
+這些更新的目的在於解決受影響 Pixel 裝置的功能問題,與 Pixel 裝置的安全性無關。下表列出相關參考資料、受影響的類別 (例如藍牙或行動數據)、改善項目,以及受影響的裝置。
+</p>
+
+<table>
+  <tbody><tr>
+   <th>參考資料</th>
+   <th>類別</th>
+   <th>改善項目</th>
+   <th>裝置</th>
+  </tr>
+  <tr>
+   <td>A-112486006</td>
+   <td>媒體</td>
+   <td>提高特定受保護媒體格式的效能</td>
+   <td>Pixel 2、Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-112529920</td>
+   <td>電源</td>
+   <td>改善 Pixel 裝置的快速充電行為</td>
+   <td>Pixel、Pixel XL</td>
+  </tr>
+  <tr>
+   <td>A-79643956</td>
+   <td>穩定性</td>
+   <td>提升使用 Android Auto 時的穩定性</td>
+   <td>Pixel 2、Pixel 2 XL</td>
+  </tr>
+  <tr>
+   <td>A-111467967</td>
+   <td>效能</td>
+   <td>修改使用 Google 地圖導航時的來電過濾行為</td>
+   <td>全部</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">常見問題與解答</h2>
+<p>
+如果您在閱讀這篇公告後有任何疑問,可參考本節的常見問答。
+</p>
+<p>
+<strong>1. 如何判斷我目前的裝置軟體版本是否已修正這些問題?
+</strong>
+</p>
+<p>
+2018-10-05 之後的安全性修補程式等級完全解決了與 2018-10-05 安全性修補程式等級及所有先前修補程式等級相關的問題。請參閱 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Pixel 與 Nexus 更新時間表</a>中的操作說明,瞭解如何查看裝置的安全性修補程式等級。
+</p>
+<p id="type">
+<strong>2.「類型」<em></em>欄中的項目代表什麼意義?</strong>
+</p>
+<p>
+在資安漏洞詳情表格中,「類型」<em></em>欄中的項目代表的是安全性漏洞的類別。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>縮寫</th>
+   <th>定義</th>
+  </tr>
+  <tr>
+   <td>RCE</td>
+   <td>遠端程式碼執行</td>
+  </tr>
+  <tr>
+   <td>EoP</td>
+   <td>權限升級</td>
+  </tr>
+  <tr>
+   <td>ID</td>
+   <td>資訊外洩</td>
+  </tr>
+  <tr>
+   <td>DoS</td>
+   <td>阻斷服務</td>
+  </tr>
+  <tr>
+   <td>無</td>
+   <td>未分類</td>
+  </tr>
+</tbody></table>
+<p>
+<strong>3.「參考資料」<em></em>欄底下列出的識別碼代表什麼意義?</strong>
+</p>
+<p>
+資安漏洞詳情表格中「參考資料」<em></em>欄底下的項目可能會包含一個前置字串,用以表示該參考資料值所屬的機構或公司。
+</p>
+<table>
+  <colgroup><col width="25%" />
+  <col width="75%" />
+  </colgroup><tbody><tr>
+   <th>前置字串</th>
+   <th>參考資料</th>
+  </tr>
+  <tr>
+   <td>A-</td>
+   <td>Android 錯誤 ID</td>
+  </tr>
+  <tr>
+   <td>QC-</td>
+   <td>Qualcomm 參考編號</td>
+  </tr>
+  <tr>
+   <td>M-</td>
+   <td>MediaTek 參考編號</td>
+  </tr>
+  <tr>
+   <td>N-</td>
+   <td>NVIDIA 參考編號</td>
+  </tr>
+  <tr>
+   <td>B-</td>
+   <td>Broadcom 參考編號</td>
+  </tr>
+</tbody></table>
+<p id="asterisk">
+<strong>4.「參考資料」<em></em>欄中 Android 錯誤 ID 旁邊的星號 (*) 代表什麼意義?</strong>
+</p>
+<p>
+在「參考資料」<em></em>欄中 Android 錯誤 ID 旁邊標上星號 (*) 代表該問題並未公開,相關的更新通常是直接整合在最新的 Pixel/Nexus 裝置專用驅動程式的安裝檔中。您可以前往 <a href="https://developers.google.com/android/nexus/drivers" class="external">Google Developers 網站</a>下載這些驅動程式。
+</p>
+<p>
+<strong>5. 為什麼安全性漏洞會分別刊載在這份安全性公告和 Android 安全性公告?</strong>
+</p>
+<p>
+為了宣告 Android 裝置最新的安全性修補程式等級,我們必須先在 Android 安全性公告中刊載相關的安全性漏洞。其他安全性漏洞 (例如本安全性公告所刊載的安全性漏洞) 並未強制規定宣告安全性修補程式等級。
+</p>
+<h2 id="versions">版本</h2>
+<table>
+  <colgroup><col width="25%" />
+  <col width="25%" />
+  <col width="50%" />
+  </colgroup><tbody><tr>
+   <th>版本</th>
+   <th>日期</th>
+   <th>附註</th>
+  </tr>
+  <tr>
+   <td>1.0</td>
+   <td>2018 年 10 月 1 日</td>
+   <td>發佈公告。</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-tw/security/bulletin/pixel/2018.html b/zh-tw/security/bulletin/pixel/2018.html
index 3977b23..88de75f 100644
--- a/zh-tw/security/bulletin/pixel/2018.html
+++ b/zh-tw/security/bulletin/pixel/2018.html
@@ -34,6 +34,21 @@
     <th>安全性修補程式等級</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即將推出
+     <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /
diff --git a/zh-tw/security/bulletin/pixel/index.html b/zh-tw/security/bulletin/pixel/index.html
index 5b0ee6c..6796594 100644
--- a/zh-tw/security/bulletin/pixel/index.html
+++ b/zh-tw/security/bulletin/pixel/index.html
@@ -43,6 +43,21 @@
     <th>安全性修補程式等級</th>
  </tr>
  <tr>
+    <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
+    <td>即將推出
+     <!--
+     <a href="/security/bulletin/pixel/2018-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2018-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+     -->
+    </td>
+    <td>2018 年 10 月 1 日</td>
+    <td>2018-10-05</td>
+ </tr>
+ <tr>
     <td><a href="/security/bulletin/pixel/2018-09-01.html">2018 年 9 月</a></td>
     <td>
      <a href="/security/bulletin/pixel/2018-09-01.html">English</a> /