Docs: Changes to source.android.com

  - 230969164 Add details about supported deviceless tests by Android Partner Docs <[email protected]>
  - 230954177 Devsite localized content from translation request 1089952. by Android Partner Docs <[email protected]>
  - 230924636 Devsite localized content from translation request 1092604. by Android Partner Docs <[email protected]>
  - 230924621 Devsite localized content from translation request 1091268. by Android Partner Docs <[email protected]>
  - 230811847 Please review this new content for "Automotive Power Mana... by Janet Davies <[email protected]>
  - 230794111 Add HWASan to the docs ready for bootcamp. by Android Partner Docs <[email protected]>
  - 230779068 Link to NDK docs on DAC from first reference to Make by Android Partner Docs <[email protected]>
  - 230744983 Devsite localized content from translation request 1092191. by Android Partner Docs <[email protected]>
  - 230744981 Devsite localized content from translation request 1093422. by Android Partner Docs <[email protected]>
  - 230744964 Devsite localized content from translation request 1094193. by Android Partner Docs <[email protected]>
  - 230742820 Moving Marshmallow 6.0 to No Release Planned as CTS 6.0 w... by Android Partner Docs <[email protected]>
  - 230614628 Fixed broken links (they were relative and not absolute f... by Christina Nguyen <[email protected]>
  - 230384953 Remove rogue parenthesis by Danielle Roberts <[email protected]>
  - 230375898 Fix broken links to subpages with absolute paths by Android Partner Docs <[email protected]>
  - 230364707 Devsite localized content from translation request 1093572. by Android Partner Docs <[email protected]>
  - 230364690 Devsite localized content from translation request 1093439. by Android Partner Docs <[email protected]>
  - 230364619 Devsite localized content from translation request 1089936. by Android Partner Docs <[email protected]>
  - 230364605 Devsite localized content from translation request 1086836. by Android Partner Docs <[email protected]>
  - 230364588 Devsite localized content from translation request 1093713. by Android Partner Docs <[email protected]>
  - 230364494 Devsite localized content from translation request 1093448. by Android Partner Docs <[email protected]>
  - 230364465 Devsite localized content from translation request 1091295. by Android Partner Docs <[email protected]>
  - 230364454 Devsite localized content from translation request 1092609. by Android Partner Docs <[email protected]>
  - 230364368 Devsite localized content from translation request 1048174. by Android Partner Docs <[email protected]>
  - 230364354 Devsite localized content from translation request 1047598. by Android Partner Docs <[email protected]>
  - 230364346 Devsite localized content from translation request 1089969. by Android Partner Docs <[email protected]>
  - 230020584 Update the guide for using vendor provided bcc by Android Partner Docs <[email protected]>
  - 229999258 Fix a typo in gsi.html by Android Partner Docs <[email protected]>
  - 229997798 Add file_patterns attribute documentation by Android Partner Docs <[email protected]>
  - 229991256 Update the characters for zh-cn and zh-tw in the Security... by Danielle Roberts <[email protected]>
  - 229977174 Moving time zones to Updates (from Permissions); also upd... by Heidi von Markham <[email protected]>
  - 229831729 Devsite localized content from translation request 1090171. by Android Partner Docs <[email protected]>
  - 229831714 Devsite localized content from translation request 1090622. by Android Partner Docs <[email protected]>
  - 229831667 Devsite localized content from translation request 1015775. by Android Partner Docs <[email protected]>
  - 229831656 Devsite localized content from translation request 1088392. by Android Partner Docs <[email protected]>
  - 229831644 Devsite localized content from translation request 1090166. by Android Partner Docs <[email protected]>
  - 229581198 Devsite localized content from translation request 1086821. by Android Partner Docs <[email protected]>
  - 229425689 Fixing typos for Shutdown (to shutdown) by Heidi von Markham <[email protected]>
  - 229416134 Update a paragraph in the permission model section of the... by Luke Haviland <[email protected]>
  - 229402835 Devsite localized content from translation request 553155. by Android Partner Docs <[email protected]>
  - 229305053 Devsite localized content from translation request 1091266. by Android Partner Docs <[email protected]>
  - 229305046 Devsite localized content from translation request 1091273. by Android Partner Docs <[email protected]>
  - 229245843 Devsite localized content from translation request 1015221. by Android Partner Docs <[email protected]>
  - 228916961 Fix typo by Kenneth Lau <[email protected]>
  - 228796242 Change "Optional" to "Required" by Kenneth Lau <[email protected]>
  - 228720589 Devsite localized content from translation request 1090636. by Android Partner Docs <[email protected]>
  - 228612958 Added Joshua Laney's information to November security ack... by Luke Haviland <[email protected]>
  - 228585561 Update versions file by Kenneth Lau <[email protected]>
  - 228557861 Devsite localized content from translation request 1089965. by Android Partner Docs <[email protected]>
  - 228541590 Fix HTML. by Android Partner Docs <[email protected]>
  - 228525372 Replace unresolved variable reference in localized files. by Android Partner Docs <[email protected]>
  - 228439111 Add missing < by Android Partner Docs <[email protected]>
  - 228436522 Adding the January Android bulletin acknowledgements by Luke Haviland <[email protected]>
  - 228407590 Correct the naming of EGL extension, and point the link t... by Android Partner Docs <[email protected]>
  - 228395277 Rename Test Config to Build Config to better reflect Soon... by Android Partner Docs <[email protected]>
  - 228340013 Devsite localized content from translation request 1044284. by Android Partner Docs <[email protected]>
  - 228340002 Devsite localized content from translation request 1048178. by Android Partner Docs <[email protected]>
  - 228339974 Devsite localized content from translation request 1089289. by Android Partner Docs <[email protected]>
  - 228339806 Devsite localized content from translation request 999875. by Android Partner Docs <[email protected]>
  - 228339785 Devsite localized content from translation request 1046259. by Android Partner Docs <[email protected]>
  - 228339757 Devsite localized content from translation request 1049718. by Android Partner Docs <[email protected]>
  - 228267452 Add information on gdbclient.py by Kenneth Lau <[email protected]>
  - 228261450 Adding the Android AOSP links to the Android January secu... by Luke Haviland <[email protected]>
  - 228247613 Fill in security levels for December 2018 builds. by Android Partner Docs <[email protected]>
  - 228241115 Add January 2019 builds. by Android Partner Docs <[email protected]>
  - 228208289 Remove _toc-*.yaml files that are no longer used due to r... by Christina Nguyen <[email protected]>
  - 228205865 Devsite localized content from translation request 1048626. by Android Partner Docs <[email protected]>
  - 228205856 Devsite localized content from translation request 1048155. by Android Partner Docs <[email protected]>
  - 228205845 Devsite localized content from translation request 1047886. by Android Partner Docs <[email protected]>
  - 228186179 Adding the January 2019 security Android/Pixel bulletins. by Luke Haviland <[email protected]>
  - 228183717 Add BCC native stack dump documentation by Android Partner Docs <[email protected]>
  - 228181974 Devsite localized content from translation request 1089935. by Android Partner Docs <[email protected]>
  - 227911224 Add more information on cts-dev and also --skip-precondit... by Android Partner Docs <[email protected]>
  - 227772142 Update image path by Danielle Roberts <[email protected]>
  - 227719040 Fix broken links by Kenneth Lau <[email protected]>
  - 227715850 Devsite localized content from translation request 1045494. by Android Partner Docs <[email protected]>
  - 227715841 Devsite localized content from translation request 1044265. by Android Partner Docs <[email protected]>
  - 227715826 Devsite localized content from translation request 1087340. by Android Partner Docs <[email protected]>
  - 227709199 Fix path on images by Danielle Roberts <[email protected]>
  - 227620512 Devsite localized content from translation request 1032286. by Android Partner Docs <[email protected]>
  - 227620508 Devsite localized content from translation request 1087344. by Android Partner Docs <[email protected]>
  - 227620485 Devsite localized content from translation request 1087104. by Android Partner Docs <[email protected]>
  - 227620481 Devsite localized content from translation request 1046261. by Android Partner Docs <[email protected]>
  - 227620479 Devsite localized content from translation request 1087239. by Android Partner Docs <[email protected]>
  - 227617540 Devsite localized content from translation request 1007762. by Android Partner Docs <[email protected]>
  - 227617535 Devsite localized content from translation request 1089145. by Android Partner Docs <[email protected]>
  - 227617491 Devsite localized content from translation request 1087109. by Android Partner Docs <[email protected]>
  - 227617482 Devsite localized content from translation request 1047584. by Android Partner Docs <[email protected]>
  - 227617480 Devsite localized content from translation request 1089449. by Android Partner Docs <[email protected]>
  - 227617378 Devsite localized content from translation request 1087099. by Android Partner Docs <[email protected]>
  - 227610447 Add variable tag to CTS downloads page by Danielle Roberts <[email protected]>
  - 227595909 Add link to camera section on CTS setup page by Kenneth Lau <[email protected]>
  - 227595777 Change title to title case by Kenneth Lau <[email protected]>
  - 227546776 Newline between function and param descriptions. by Android Partner Docs <[email protected]>
  - 227546753 Small edits to system best practices by Danielle Roberts <[email protected]>
  - 227033873 Document "run cts-dev" command, present CTS V2 first by Android Partner Docs <[email protected]>
  - 226772000 Devsite localized content from translation request 1041964. by Android Partner Docs <[email protected]>
  - 226552899 Announce Adiantum on SAC home page by Danielle Roberts <[email protected]>
  - 226550934 Add Adiantum docs to encryption section by Danielle Roberts <[email protected]>
  - 226530870 Devsite localized content from translation request 1046265. by Android Partner Docs <[email protected]>
  - 226497667 Devsite localized content from translation request 1047878. by Android Partner Docs <[email protected]>
  (And 26 more changes)

PiperOrigin-RevId: 230969164
Change-Id: I2bf51b3793304247e04b953816961605fe1ba4bf
diff --git a/zh-cn/_book.yaml b/zh-cn/_book.yaml
index 574cea4..137aad2 100644
--- a/zh-cn/_book.yaml
+++ b/zh-cn/_book.yaml
@@ -37,7 +37,7 @@
       - path: /setup/build/devices
         title: 使用参考开发板
       - path: /setup/build/gsi
-        title: 查找通用系统映像
+        title: 常规系统映像
       - path: /setup/build/jack
         title: 使用 Jack 编译
       - path: /setup/build/running
@@ -46,7 +46,9 @@
         title: 编译内核
       - path: /setup/build/known-issues
         title: 查看已知问题
-      name: 细分版本
+      - path: /setup/build/dashboard
+        title: 持续集成信息中心
+      name: 编译
     - contents:
       - path: /setup/develop/
         title: 概览
@@ -91,7 +93,7 @@
         title: 概览
       - section:
         - path: /devices/architecture/hal
-          title: HAL
+          title: 旧版 HAL
         - path: /devices/architecture/hal-types
           title: HAL 类型
         - path: /devices/architecture/hal/framework-testing
@@ -265,10 +267,80 @@
         title: 概览
       - path: /compatibility/cdd/
         title: 兼容性定义文档
-      - path: /compatibility/android-cdd
-        title: 兼容性定义文档(HTML 格式)
-      - path: /compatibility/android-cdd.pdf
-        title: 兼容性定义文档(PDF 格式)
+      - section:
+        - path: /compatibility/9/android-9-cdd
+          title: Android 9(现行版本)
+        - path: /compatibility/8.1/android-8.1-cdd
+          title: Android 8.1
+        - path: /compatibility/8.0/android-8.0-cdd
+          title: Android 8.0
+        - path: /compatibility/7.1/android-7.1-cdd
+          title: Android 7.1
+        - path: /compatibility/7.0/android-7.0-cdd
+          title: Android 7.0
+        - path: /compatibility/6.0/android-6.0-cdd
+          title: Android 6.0
+        - path: /compatibility/5.1/android-5.1-cdd
+          title: Android 5.1
+        - path: /compatibility/5.0/android-5.0-cdd
+          title: Android 5.0
+        - path: /compatibility/4.4/android-4.4-cdd
+          title: Android 4.4
+        - path: /compatibility/4.3/android-4.3-cdd
+          title: Android 4.3
+        - path: /compatibility/4.2/android-4.2-cdd
+          title: Android 4.2
+        - path: /compatibility/4.1/android-4.1-cdd
+          title: Android 4.1
+        - path: /compatibility/4.0/android-4.0-cdd
+          title: Android 4.0
+        - path: /compatibility/2.3/android-2.3-cdd
+          title: Android 2.3
+        - path: /compatibility/2.2/android-2.2-cdd
+          title: Android 2.2
+        - path: /compatibility/2.1/android-2.1-cdd
+          title: Android 2.1
+        - path: /compatibility/1.6/android-1.6-cdd
+          title: Android 1.6
+        title: HTML 格式的 CDD
+      - section:
+        - path: /compatibility/9/android-9-cdd.pdf
+          title: Android 9(现行版本)
+        - path: /compatibility/8.1/android-8.1-cdd.pdf
+          title: Android 8.1
+        - path: /compatibility/8.0/android-8.0-cdd.pdf
+          title: Android 8.0
+        - path: /compatibility/7.1/android-7.1-cdd.pdf
+          title: Android 7.1
+        - path: /compatibility/7.0/android-7.0-cdd.pdf
+          title: Android 7.0
+        - path: /compatibility/6.0/android-6.0-cdd.pdf
+          title: Android 6.0
+        - path: /compatibility/5.1/android-5.1-cdd.pdf
+          title: Android 5.1
+        - path: /compatibility/5.0/android-5.0-cdd.pdf
+          title: Android 5.0
+        - path: /compatibility/4.4/android-4.4-cdd.pdf
+          title: Android 4.4
+        - path: /compatibility/4.3/android-4.3-cdd.pdf
+          title: Android 4.3
+        - path: /compatibility/4.2/android-4.2-cdd.pdf
+          title: Android 4.2
+        - path: /compatibility/4.1/android-4.1-cdd.pdf
+          title: Android 4.1
+        - path: /compatibility/4.0/android-4.0-cdd.pdf
+          title: Android 4.0
+        - path: /compatibility/2.3/android-2.3-cdd.pdf
+          title: Android 2.3
+        - path: /compatibility/2.3/android-2.3.3-cdd.pdf
+          title: Android 2.3.3
+        - path: /compatibility/2.2/android-2.2-cdd.pdf
+          title: Android 2.2
+        - path: /compatibility/2.1/android-2.1-cdd.pdf
+          title: Android 2.1
+        - path: /compatibility/1.6/android-1.6-cdd.pdf
+          title: Android 1.6
+        title: CDD 另存为 PDF 格式
       name: 兼容性
     - contents:
       - path: /devices/tech/display/
@@ -319,9 +391,39 @@
         title: 通用搜索
       name: 设置
     - contents:
-      - path: /compatibility/tests
+      - path: /compatibility/tests/
         title: 概览
       - section:
+        - path: /compatibility/tests/development/
+          title: 概览
+        - path: /compatibility/tests/development/blueprints.md
+          title: 简单配置
+        - path: /compatibility/tests/development/test-config.md
+          title: 复杂配置
+        - section:
+          - path: /compatibility/tests/development/instrumentation.md
+            title: 概览
+          - path: /compatibility/tests/development/instr-self-e2e.md
+            title: 自插桩测试
+          - path: /compatibility/tests/development/instr-app-e2e.md
+            title: 定位应用
+          title: 插桩测试
+        - section:
+          - path: /compatibility/tests/development/native.md
+            title: 概览
+          - path: /compatibility/tests/development/native-func-e2e.md
+            title: 添加新的原生测试
+          - path: /compatibility/tests/development/metrics.md
+            title: 原生指标测试
+          title: 原生测试
+        - path: /compatibility/tests/development/jar.md
+          title: JAR 主机测试
+        - path: /compatibility/tests/development/test-mapping
+          title: 映射测试
+        - path: /compatibility/tests/development/atest
+          title: 运行测试 (Atest)
+        title: 测试开发工作流程
+      - section:
         - path: /compatibility/cts/
           title: 概览
         - path: /compatibility/cts/setup
@@ -343,14 +445,20 @@
         - section:
           - path: /compatibility/cts/camera-hal
             title: 相机 HAL 测试
-          - path: /compatibility/cts/camera-its-box
+          - section:
+            - path: /compatibility/cts/camera-its-box
+              title: 概览
+            - path: /compatibility/cts/camera-its-box-assembly
+              title: 常规视野盒装 ITS
+            - path: /compatibility/cts/camera-wfov-box-assembly
+              title: 宽视野盒装 ITS
             title: 相机盒装 ITS
-          - path: /compatibility/cts/camera-its-box-assembly
-            title: 组装相机盒装 ITS
-          - path: /compatibility/cts/sensor-fusion-quick-start
-            title: 传感器融合盒快速入门
-          - path: /compatibility/cts/sensor-fusion-box-assembly
-            title: 组装传感器融合盒
+          - section:
+            - path: /compatibility/cts/sensor-fusion-quick-start
+              title: 传感器融合盒快速入门
+            - path: /compatibility/cts/sensor-fusion-box-assembly
+              title: 传感器融合盒详细信息
+            title: 传感器融合盒
           title: 相机测试
         - path: /compatibility/cts/secure-element
           title: 安全要素
@@ -359,11 +467,13 @@
         - path: /compatibility/cts/development
           title: CTS 开发
         - path: /compatibility/cts/downloads
-          title: 下载
-        title: 兼容性测试套件
+          title: 下载次数
+        title: 兼容性测试套件 (CTS)
       - section:
         - path: /compatibility/vts/
           title: 概览
+        - path: /compatibility/vts/codelab-video
+          title: Codelab 和视频教程
         - path: /compatibility/vts/systems
           title: 使用 VTS 进行系统测试
         - section:
@@ -412,7 +522,7 @@
           title: 端到端示例
         - path: /reference/tradefed/
           title: 软件包索引
-        title: 测试基础架构
+        title: Trade Federation 自动化测试框架
       - section:
         - path: /devices/tech/debug/
           title: 概览
@@ -498,6 +608,14 @@
         title: 公告
       - section:
         - section:
+          - path: /security/bulletin/2018-12-01
+            title: 12 月
+          - path: /security/bulletin/2018-11-01
+            title: 11 月
+          - path: /security/bulletin/2018-10-01
+            title: 10 月
+          - path: /security/bulletin/2018-09-01
+            title: 9 月
           - path: /security/bulletin/2018-08-01
             title: 8 月
           - path: /security/bulletin/2018-07-01
@@ -592,6 +710,14 @@
         - path: /security/bulletin/pixel/index
           title: 概览
         - section:
+          - path: /security/bulletin/pixel/2018-12-01
+            title: 12 月
+          - path: /security/bulletin/pixel/2018-11-01
+            title: 11 月
+          - path: /security/bulletin/pixel/2018-10-01
+            title: 10 月
+          - path: /security/bulletin/pixel/2018-09-01
+            title: 9 月
           - path: /security/bulletin/pixel/2018-08-01
             title: 8 月
           - path: /security/bulletin/pixel/2018-07-01
@@ -665,6 +791,8 @@
       - section:
         - path: /security/trusty/
           title: 概览
+        - path: /security/trusty/download-and-build
+          title: 下载和编译
         - path: /security/trusty/trusty-ref
           title: Trusty API 参考
         title: Trusty TEE
@@ -677,6 +805,8 @@
           title: 全盘加密
         - path: /security/encryption/metadata
           title: 元数据加密
+        - path: /security/encryption/adiantum
+          title: 启用Adiantum
         title: 加密
       - section:
         - path: /security/selinux/
@@ -730,7 +860,23 @@
         title: 内核 CFI
       - path: /devices/tech/debug/intsan
         title: 整数溢出清理
-      name: 动态分析
+      name: 测试
+    - contents:
+      - path: /security/best-practices/
+        title: 概览
+      - path: /security/best-practices/ops
+        title: 运营安全性
+      - path: /security/best-practices/system
+        title: 系统安全性
+      - path: /security/best-practices/app
+        title: 应用安全性
+      - path: /security/best-practices/network
+        title: 网络安全性
+      - path: /security/best-practices/hardware
+        title: 硬件安全性
+      - path: /security/best-practices/privacy
+        title: 隐私安全性
+      name: 最佳做法
   name: 安全性
 - lower_tabs:
     other:
@@ -837,7 +983,7 @@
         - path: /devices/bluetooth/ble
           title: 蓝牙低功耗
         - path: /devices/bluetooth/asha
-          title: 将 BLE 用于助听器
+          title: 使用 BLE 的助听器
         - path: /devices/bluetooth/ble_advertising
           title: BLE 广播
         - path: /devices/bluetooth/verifying_debugging
@@ -905,7 +1051,7 @@
         - path: /devices/tech/connect/wifi-rtt
           title: WLAN 往返时间 (RTT)
         - path: /devices/tech/connect/wifi-debug
-          title: 测试和调试
+          title: 测试、调试和调整 WLAN
         title: WLAN
       name: 连接
     - contents:
@@ -963,6 +1109,8 @@
         - path: /devices/graphics/cts-integration
           title: 与 Android CTS 集成
         title: OpenGL ES 测试
+      - path: /devices/graphics/tracing-win-transitions
+        title: 跟踪窗口转换
       name: 图形
     - contents:
       - section:
@@ -1147,8 +1295,10 @@
         title: 网络接口统计信息概览
       - path: /devices/tech/datausage/tethering-data
         title: 网络共享流量
+      - path: /devices/tech/connect/tethering-offload
+        title: 网络共享分流
       - path: /devices/tech/datausage/usage-cycle-resets-dates
-        title: 流量统计周期重置日期
+        title: 流量消耗重计日期
       - path: /devices/tech/datausage/kernel-overview
         title: 内核概览
       - path: /devices/tech/datausage/kernel-changes
@@ -1189,6 +1339,8 @@
         title: APK 缓存
       - path: /devices/tech/perf/boot-times
         title: 启动时间
+      - path: /devices/tech/perf/lmkd
+        title: 用户空间中的 LMKD
       - path: /devices/tech/perf/low-ram
         title: 低内存
       - path: /devices/tech/perf/pgo
diff --git a/zh-cn/_index.yaml b/zh-cn/_index.yaml
index 6b0c5b9..9118c57 100644
--- a/zh-cn/_index.yaml
+++ b/zh-cn/_index.yaml
@@ -46,33 +46,32 @@
     items:
     - heading: Android 开源项目简介
       description: |
-        Android 是一个支持多种移动设备的开源软件堆栈以及对应的由 Google 领导的开源项目。此网站和 Android 开源项目 (AOSP) 代码库可为您提供所需信息和源代码,供您创建定制的 Android 堆栈版本,将设备和配件移植到 Android 平台,同时确保您的设备符合兼容性要求。<br /><br />
-
-        此外,我们还希望确保 Android 平台不存在集中瓶颈(意即没有任何行业参与者可一手限制或控制其他参与者的创新)。这样,我们就可以针对消费类商品打造一个完整的高品质操作系统,并支持对源代码进行定制和移植。而现在,本网站已在中国发布,网址为 <a href="https://source.android.google.cn/">source.android.google.cn</a>。<br /><br />
-
-        欢迎您向我们提供关于 AOSP 文档网站的反馈意见。随着生态系统不断变化,我们需要您的帮助来保持内容与时俱进。请使用任意页面底部的<a href="https://issuetracker.google.com/issues/new?component=191476">网站反馈</a>链接来报告错误以及提出改进建议。如需详细了解所有更新,请参阅网站的<a href="https://android.googlesource.com/platform/docs/source.android.com/+log/master?pretty=full&no-merges">更改日志</a>。
+        Android 是一个适用于移动设备的开源操作系统以及由 Google 主导的相关开源项目。此网站和 Android 开源项目 (AOSP) 代码库可为您提供所需信息和源代码,供您创建定制的 Android 操作系统版本,将设备和配件移植到 Android 平台,同时确保您的设备符合兼容性要求,从而让 Android 生态系统维持良好稳健的运行环境,以便更好地服务于数百万用户。
+        <br /><br />作为一个开源项目,Android 的目标是避免出现任何集中瓶颈(即没有任何行业参与者可一手限制或控制其他任何参与者的创新)。为此,Android 被打造成了一个适用于消费类产品的完整高品质操作系统,并配有可定制源代码,该代码可移植到几乎所有设备以及所有用户均可使用的公开文档中(英文网址:<a href="https://source.android.com/">source.android.com</a>;简体中文网址:<a href="https://source.android.google.cn/">source.android.google.cn</a>)。
+        <br /><br />
+        正如您可以<a href="/setup/contribute/">为 AOSP 贡献代码</a>一样,您也可以为 AOSP 文档“添砖加瓦”,而且我们非常欢迎您提供宝贵意见!Android 的灵活性和不断变化的代码库意味着,此网站要想提供准确且与 Android 实现者息息相关的最新内容,离不开您的反馈。我们建议您查看<a href="https://android.googlesource.com/platform/docs/source.android.com/+log/master?pretty=full&no-merges">更改日志</a>,以详细了解 AOSP 的最新动态,并使用每个页面底部的<a href="https://issuetracker.google.com/issues/new?component=191476">网站反馈</a>(或通过访问 <a href="https://g.co/androidsourceissue">g.co/androidsourceissue</a>)来报告错误或提供建议。
       image_path: /images/android_stack.png
   - heading: 新闻
     items:
-    - 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 月安全公告
+    - heading: 启用 Adiantum
       description: >-
-        2018 年 8 月的 Android 和 Pixel/Nexus 安全公告已经发布,一同发布的还有相关修复程序的链接以及用于
-        8 月安全更新补丁的新版本号。
+        用于启用 Adiantum 的新页面,Adiantum 是一种加密方法,专为搭载 Android 9 或更高版本且其 CPU 缺少
+        AES 指令的设备而设计。
       buttons:
-      - label: 2018 年 8 月 6 日
-        path: /security/bulletin/2018-08-01
+      - label: 2018 年 12 月 21 日
+        path: /security/encryption/adiantum
+    - heading: 安全性最佳做法
+      description: >
+        添加了一个包含设备制造商安全性最佳做法(包括针对系统、应用、网络、硬件以及组织和运营安全性的提示)的新部分。
+      buttons:
+      - label: 2018 年 12 月 18 日
+        path: /security/best-practices
+    - heading: Trusty 可信执行环境
+      description: >
+        更新了 Trusty(即 Android 的开源可信执行环境 (TEE))的相关信息。您可以使用 Trusty TEE 打造更安全的移动设备。
+      buttons:
+      - label: 2018 年 12 月 17 日
+        path: /security/trusty/
   - classname: devsite-landing-row-100 tf-row-centered
     items:
     - buttons:
diff --git a/zh-cn/compatibility/cts/camera-hal.html b/zh-cn/compatibility/cts/camera-hal.html
index 77aba12..21147b9 100644
--- a/zh-cn/compatibility/cts/camera-hal.html
+++ b/zh-cn/compatibility/cts/camera-hal.html
@@ -41,11 +41,11 @@
 <p>以下是适用于最新 Android 相机的主要测试类型以及相关说明:</p>
 
 <ul>
-  <li><em><a href="#vendor_test_suite">供应商测试套件 (VTS)</a>:</em>直接针对相机 HAL 接口的测试
+  <li><em></em><a href="#vendor_test_suite">供应商测试套件 (VTS)</a>:直接测试相机 HAL 接口的测试
   </li><li><em><a href="#cts_tests">兼容性测试套件 (CTS)</a></em>:自动运行的标准 Android 测试,可确保设备兼容性;有关详情,请参阅 <a href="/compatibility/cts/index.html">CTS 简介</a>和<a href="/devices/tech/test_infra/tradefed/index.html">贸易联盟概述</a>
-  </li><li><em><a href="#its_tests">图像测试套件 (ITS)</a>:</em>手动运行的测试,可确保图像正确性;有关设置说明,请参阅顶级和测试专用的 <code>README</code> 文件以及 <code>tutorial.py</code>
-  </li><li><em><a href="#manual_testingcam_tests">手动 TestingCam 测试</a>:</em>从源中的 <code>pdk/apps/TestingCamera/</code> 运行
-  </li><li><em><a href="#manual_testingcam2_tests">手动 TestingCam2.1 测试</a>:从源中的 <code>pdk/apps/TestingCamera2/</code></em> 运行
+  </li><li><em></em><a href="#its_tests">图像测试套件 (ITS)</a>:手动运行的测试,可确保图像正确性;有关设置说明,请参阅顶级和测试专用的 <code>README</code> 文件以及 <code>tutorial.py</code>
+  </li><li><em></em><a href="#manual_testingcam_tests">手动 TestingCam 测试</a>:从 <code>pdk/apps/TestingCamera/</code> 中的源代码运行
+  </li><li><em></em><a href="#manual_testingcam2_tests">手动 TestingCam2.1 测试</a>:从 <code>pdk/apps/TestingCamera2/</code> 中的源代码运行
 </li></ul>
 
 <p>下面详细介绍了所有这些测试类型。我们按照 OEM 应执行这些测试的时间先后顺序对它们进行了介绍。</p>
@@ -62,7 +62,7 @@
 
 <p>相机 CTS 测试的起始路径为:<code>platform/cts</code>。</p>
 
-<p>在针对支持外部相机(如 USB 网络摄像头)的设备运行相机 CTS 时,您必须在运行 CTS 时将设备连接到充电器,否则测试将自动失败。</p>
+<p>在针对支持外部相机(如 USB 摄像头)的设备运行相机 CTS 时,您必须在运行 CTS 时将设备连接到充电器,否则测试将自动失败。外部相机示例:<a href="https://www.logitech.com/en-us/product/hd-pro-webcam-c920" class="external">Logitech HD Pro Webcam C920</a> 和 <a href="https://www.microsoft.com/accessories/en-us/products/webcams/lifecam-hd-3000/t3h-00011" class="external">Microsoft LifeCam HD-3000</a>。</p>
 
 <p>有关运行 CTS 的常规说明,请参阅 <a href="/compatibility/cts/index.html">CTS 简介</a>及其子页面。</p>
 
@@ -108,7 +108,7 @@
 <code class="devsite-terminal">cd CameraITS</code>
 </pre>
 
-<p>有关脚本使用方法的演示,请参阅 <code>tests</code> 子目录中的 <code>tutorial.py</code>。每项测试都归属于相应的 <code>tests/scene<#></code> 子目录。有关具体的测试说明,请参阅每个子目录中的 <code>README</code> 文件。</p>
+<p>有关脚本使用方法的演示,请参阅 <code>tests</code> 子目录中的 <code>tutorial.py</code>。每项测试都位于相应的 <code>tests/scene<#></code> 子目录。有关具体的测试说明,请参阅每个子目录中的 <code>README</code> 文件。</p>
 
 <p>要按照推荐的方法设置和运行相机图像测试套件,请参阅<a href="/compatibility/cts/camera-its-box">相机盒装 ITS</a>。</p>
 
@@ -183,8 +183,7 @@
 (target=com.android.mediaframeworktest)
 </pre>
 
-<p>从每个测试行中识别并提取组件(位于 <code>instrumentation:</code> 和 <code>(target=com.android.mediaframeworktest) </code>之间)。
-该组件包含目标软件包名称 (<code>com.android.mediaframeworktest</code>) 和测试运行器名称 (<code>MediaFramework<type>TestRunner</type></code>)。</p>
+<p>从每个测试行中识别并提取组件(位于 <code>instrumentation:</code> 和 <code>(target=com.android.mediaframeworktest) </code>之间)。该组件包含目标软件包名称 (<code>com.android.mediaframeworktest</code>) 和测试运行器名称 (<code>MediaFramework<type>TestRunner</type></code>)。</p>
 
 <p>例如:</p>
 
diff --git a/zh-cn/compatibility/cts/camera-its-box.html b/zh-cn/compatibility/cts/camera-its-box.html
index c397dc7..fb87681 100644
--- a/zh-cn/compatibility/cts/camera-its-box.html
+++ b/zh-cn/compatibility/cts/camera-its-box.html
@@ -42,7 +42,7 @@
 </ol>
 
 <h2 id="configure-tablet">配置平板电脑</h2>
-<p>本部分将分步说明如何设置 Pixel C 平板电脑以与 CameraITS 软件配合使用。</p>
+<p>本部分将分步说明如何设置平板电脑以与 CameraITS 软件配合使用。这些说明使用 Pixel C 作为示例平板电脑。要了解针对平板电脑的要求和建议,请参阅<a href="#tablet-requirements">针对平板电脑的要求</a>。</p>
 
 <p class="note"><strong>注意</strong>:CameraITS python 脚本会自动在平板电脑上为您设置以下选项:<br /><em>设置 &gt; 显示 &gt; 休眠 &gt; 无操作 30 分钟后</em>
 <br /><em>自动调节亮度 &gt; 关闭</em>
@@ -50,8 +50,8 @@
 
 <ol>
 <li>为平板电脑接通电源并开机。如果系统提示您设置帐号,请跳过(CameraITS 不需要与平板电脑配对任何帐号)。</li>
-<li>将平板电脑更新为 Android 7.0 或更高版本(Android 6.x 及更早版本不支持 CameraITS)。</li>
-<li>依次转到“设置”&gt;“关于平板电脑”,然后点按<strong>版本号</strong> 5 次,从而启用开发者模式。<em></em></li>
+<li>将平板电脑更新为 Android 7.0 或更高版本。Android 6.x 及更低版本不支持 CameraITS。</li>
+<li>启用<a href="https://developer.android.com/studio/debug/dev-options#enable" class="external">开发者模式</a>。</li>
 <li>返回“设置”并选择<strong>开发者选项</strong>。<em></em>
 
 <table>
@@ -82,7 +82,7 @@
 <li>将平板电脑正面朝上放在桌子上(请勿将平板电脑连接到盒子的后板)</li>
 <li>运行以下命令:<pre class="devsite-terminal devsite-click-to-copy">
 python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
-</pre>场景 2 和 3 需要平板电脑来显示图像,因此平板电脑会提示您“允许云端硬盘访问您设备上的照片、媒体和文件吗?”。通过按<strong>允许</strong>清除此提示(并防止以后再次出现提示)。</li>
+</pre>场景 2 和 3 需要使用平板电脑来显示图像,因此平板电脑会提示您“允许云端硬盘访问您设备上的照片、媒体和文件吗?”。通过按<strong>允许</strong>清除此提示(并防止以后再次出现提示)。</li>
 <li>再次运行该命令。平板电脑会提示您“保留此文件的副本吗?”,并建议保存到 Google 云端硬盘。通过按“云端硬盘”图标,然后按<strong>取消</strong>上传到云端硬盘,清除此提示(并防止以后再次出现提示)。</li>
 <li>最后,运行 <code>tools/run_all_tests.py</code> 并确认当前场景会随着脚本循环自动变换为不同的场景。尽管大多数测试将失败(因为相机未指向图表),但您可以验证平板电脑是否正确地循环播放场景,而不会在屏幕上显示任何提示或其他弹出式窗口。</li></ol></li></ol>
 
@@ -176,4 +176,61 @@
 </li>
 </ul>
 
+<h2 id="tablet-requirements">针对平板电脑的要求</h2>
+
+<p>平板电脑的显示屏尺寸必须为 10 英寸左右,并且屏幕分辨率必须大于 2000 x 1500 像素。必须根据平板电脑型号在 <code>CameraITS/tools/wake_up_screen.py</code> 中设置 <code>DISPLAY_LEVEL</code> 值。下表列出了适用于推荐的平板电脑的值。</p>
+
+<p>下面显示了针对 ITS 测试推荐的平板电脑:</p>
+
+<table>
+  <tbody><tr>
+    <th>设备</th>
+    <th>显示屏尺寸<br />(英寸)</th>
+    <th>显示大小<br />(像素)</th>
+    <th>平板电脑尺寸<br />(英寸)</th>
+    <th>显示级别</th>
+    <th>操作系统</th>
+  </tr>
+  <tr>
+    <td>Asus Zen Pad 3</td>
+    <td>9.7</td>
+    <td>2048 x 1536</td>
+    <td>9.47 x 6.44 x 0.28</td>
+    <td>192</td>
+    <td>Android 6.0</td>
+  </tr>
+  <tr>
+    <td>Huawei Mediapad m5</td>
+    <td>10.8</td>
+    <td>2560 x 1600</td>
+    <td>10.18 x 6.76 x 0.29</td>
+    <td>192</td>
+    <td>Android 8.0</td>
+  </tr>
+  <tr>
+    <td>Pixel C</td>
+    <td>10.2</td>
+    <td>2560 x 1800</td>
+    <td>9.53 x 7.05 x 0.28</td>
+    <td>96</td>
+    <td>Android 8.0</td>
+  </tr>
+  <tr>
+    <td>Samsung S3</td>
+    <td>9.7</td>
+    <td>2048 x 1536</td>
+    <td>10.76 x 6.65 x 0.24</td>
+    <td>192</td>
+    <td>Android 7.0</td>
+  </tr>
+  <tr>
+    <td>Sony Xperia Z4</td>
+    <td>10.1</td>
+    <td>2560 x 1600</td>
+    <td>10 x 6.57 x 0.24</td>
+    <td>192</td>
+    <td>Android 7.0</td>
+  </tr>
+</tbody></table>
+
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/compatibility/cts/camera-wfov-box-assembly.html b/zh-cn/compatibility/cts/camera-wfov-box-assembly.html
index 886564f..e0a6b4f 100644
--- a/zh-cn/compatibility/cts/camera-wfov-box-assembly.html
+++ b/zh-cn/compatibility/cts/camera-wfov-box-assembly.html
@@ -24,7 +24,7 @@
 <p>Android 9 引入了盒装 ITS 修订版 2,它是相机图像测试套件 (ITS) 中的一种自动测试系统,适用于宽视野 (WFoV) 和常规视野 (RFoV) 相机系统。修订版 1 旨在测试 FoV 小于 90 度 (RFoV) 的移动设备相机。修订版 2 还可用于测试 FoV 大于 90 度 (WFoV) 的相机,这样,您便能够使用一个盒装 ITS 系统测试 FoV 各不相同的不同相机。</p>
 
 <p>盒装 ITS 系统由一个根据计算机辅助设计 (CAD) 图纸激光切割而成的塑料盒、一个内部照明系统、一台图表平板电脑和一部被测设备 (DUT) 组成。您可以购买盒装 ITS,也可以自行构建。</p>
-<aside class="note"><strong>注意</strong>:<span>要详细了解如何构建盒装 ITS 修订版 1(仅适用于 RFoV 相机),请参阅<a href="/compatibility/cts/camera-its-box-assembly">组装盒装 ITS</a>。</span></aside>
+<aside class="note"><strong>注意</strong>:<span>要详细了解如何构建盒装 ITS 修订版 1(专为 RFoV 相机而设计),请参阅<a href="/compatibility/cts/camera-its-box-assembly">组装盒装 ITS</a>。</span></aside>
 <h2 id="purchasing_a_wfov_its-in-a-box">购买 WFoV 盒装 ITS</h2>
 
 <p>建议您通过以下任一合格的供应商购买 WFoV 盒装 ITS。</p>
@@ -62,7 +62,7 @@
 <li>喷壶</li>
 <li>美工刀</li>
 </ul>
-<aside class="note"><strong>注意</strong>:<span>如需详细了解以往版本,请参阅<a href="#revision_history">修订历史记录</a>。</span></aside>
+<aside class="note"><strong>注意</strong>:<span>要详细了解以往版本,请参阅<a href="#revision_history">修订历史记录</a>。</span></aside>
 <h3 id="step_1_apply_colored_vinyl">第 1 步:贴彩色乙烯基膜</h3>
 
 <p>要贴彩色乙烯基膜,请执行以下操作:</p>
diff --git a/zh-cn/compatibility/cts/downloads.html b/zh-cn/compatibility/cts/downloads.html
index 3bc7c5d..cc931ba 100644
--- a/zh-cn/compatibility/cts/downloads.html
+++ b/zh-cn/compatibility/cts/downloads.html
@@ -20,53 +20,53 @@
       limitations under the License.
   -->
 
-<p>感谢您对 Android 兼容性计划的关注!您可以通过以下链接访问关于该计划的重要文档和信息。随着 CTS 的更新,此网页上会陆续添加新的版本。CTS 版本在链接名称中由 R&lt;数字&gt; 表示。</p>
+<p>感谢您对 Android 兼容性计划的关注!您可以通过以下链接访问关于该计划的重要文档和信息。随着 CTS 的更新,此网页上会陆续添加新的版本。CTS 版本在链接名称中由 R<var>数字</var>表示。</p>
 
 <h2 id="android-90">Android 9</h2>
-<p>Android 9 是代号为 P 的开发里程碑版本。以下测试(包括针对免安装应用的测试)的源代码可以与开放源代码树中的“'android-cts-9.0_r4”标记同步。</p>
+<p>Android 9 是代号为 P 的开发里程碑版本。以下测试(包括针对免安装应用的测试)的源代码可以与开放源代码树中的“'android-cts-9.0_r5”标记同步。</p>
 <ul>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-9.0_r4-linux_x86-arm.zip">Android 9.0 R4 兼容性测试套件 (CTS) - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-9.0_r4-linux_x86-x86.zip">Android 9.0 R4 兼容性测试套件 (CTS) - x86</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r4-linux_x86-arm.zip">Android 9.0 R4 CTS 验证程序 - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r4-linux_x86-x86.zip">Android 9.0 R4 CTS 验证程序 - x86</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r4-linux_x86-arm.zip">Android 9.0 R4 CTS(适用于免安装应用)- ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r4-linux_x86-x86.zip">Android 9.0 R4 CTS(适用于免安装应用)- x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-9.0_r5-linux_x86-arm.zip">Android 9.0 R5 兼容性测试套件 (CTS) - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-9.0_r5-linux_x86-x86.zip">Android 9.0 R5 兼容性测试套件 (CTS) - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r5-linux_x86-arm.zip">Android 9.0 R5 CTS 验证程序 - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-9.0_r5-linux_x86-x86.zip">Android 9.0 R5 CTS 验证程序 - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r5-linux_x86-arm.zip">Android 9.0 R5 CTS(适用于免安装应用)- ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts_instant-9.0_r5-linux_x86-x86.zip">Android 9.0 R5 CTS(适用于免安装应用)- x86</a></li>
 </ul>
 
 <h2 id="android-81">Android 8.1</h2>
-<p>Android 8.1 是代号为 Oreo-MR1 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-8.1_r11”标记同步。</p>
+<p>Android 8.1 是代号为 Oreo-MR1 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-8.1_r12”标记同步。</p>
 <ul>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.1_r11-linux_x86-arm.zip">Android 8.1 R11 兼容性测试套件 (CTS) - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.1_r11-linux_x86-x86.zip">Android 8.1 R11 兼容性测试套件 (CTS) - x86</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r11-linux_x86-arm.zip">Android 8.1 R11 CTS 验证程序 - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r11-linux_x86-x86.zip">Android 8.1 R11 CTS 验证程序 - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.1_r12-linux_x86-arm.zip">Android 8.1 R12 兼容性测试套件 (CTS) - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.1_r12-linux_x86-x86.zip">Android 8.1 R12 兼容性测试套件 (CTS) - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r12-linux_x86-arm.zip">Android 8.1 R12 CTS 验证程序 - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r12-linux_x86-x86.zip">Android 8.1 R12 CTS 验证程序 - x86</a></li>
 </ul>
 
 <h2 id="android-80">Android 8.0</h2>
-<p>Android 8.0 是代号为 Oreo 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-8.0_r15”标记同步。</p>
+<p>Android 8.0 是代号为 Oreo 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-8.0_r16”标记同步。</p>
 <ul>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.0_r15-linux_x86-arm.zip">Android 8.0 R15 兼容性测试套件 (CTS) - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.0_r15-linux_x86-x86.zip">Android 8.0 R15 兼容性测试套件 (CTS) - x86</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r15-linux_x86-arm.zip">Android 8.0 R15 CTS 验证程序 - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r15-linux_x86-x86.zip">Android 8.0 R15 CTS 验证程序 - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.0_r16-linux_x86-arm.zip">Android 8.0 R16 兼容性测试套件 (CTS) - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.0_r16-linux_x86-x86.zip">Android 8.0 R16 兼容性测试套件 (CTS) - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r16-linux_x86-arm.zip">Android 8.0 R16 CTS 验证程序 - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.0_r16-linux_x86-x86.zip">Android 8.0 R16 CTS 验证程序 - x86</a></li>
 </ul>
 
 <h2 id="android-71">Android 7.1</h2>
-<p>Android 7.1 是代号为 Nougat-MR1 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-7.1_r23”标记同步。</p>
+<p>Android 7.1 是代号为 Nougat-MR1 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-7.1_r24”标记同步。</p>
 <ul>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.1_r23-linux_x86-arm.zip">Android 7.1 R23 兼容性测试套件 (CTS) - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.1_r23-linux_x86-x86.zip">Android 7.1 R23 兼容性测试套件 (CTS) - x86</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r23-linux_x86-arm.zip">Android 7.1 R23 CTS 验证程序 - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r23-linux_x86-x86.zip">Android 7.1 R23 CTS 验证程序 - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.1_r24-linux_x86-arm.zip">Android 7.1 R24 兼容性测试套件 (CTS) - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.1_r24-linux_x86-x86.zip">Android 7.1 R24 兼容性测试套件 (CTS) - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r24-linux_x86-arm.zip">Android 7.1 R24 CTS 验证程序 - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r24-linux_x86-x86.zip">Android 7.1 R24 CTS 验证程序 - x86</a></li>
 </ul>
 
 <h2 id="android-70">Android 7.0</h2>
-<p>Android 7.0 是代号为 Nougat 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-7.0_r27”标记同步。</p>
+<p>Android 7.0 是代号为 Nougat 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-7.0_r28”标记同步。</p>
 <ul>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.0_r27-linux_x86-arm.zip">Android 7.0 R27 兼容性测试套件 (CTS) - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.0_r27-linux_x86-x86.zip">Android 7.0 R27 兼容性测试套件 (CTS) - x86</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r27-linux_x86-arm.zip">Android 7.0 R27 CTS 验证程序 - ARM</a></li>
-<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r27-linux_x86-x86.zip">Android 7.0 R27 CTS 验证程序 - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.0_r28-linux_x86-arm.zip">Android 7.0 R28 兼容性测试套件 (CTS) - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-7.0_r28-linux_x86-x86.zip">Android 7.0 R28 兼容性测试套件 (CTS) - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r28-linux_x86-arm.zip">Android 7.0 R28 CTS 验证程序 - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r28-linux_x86-x86.zip">Android 7.0 R28 CTS 验证程序 - x86</a></li>
 </ul>
 
 <h2 id="android-60">Android 6.0</h2>
diff --git a/zh-cn/compatibility/cts/secure-element.html b/zh-cn/compatibility/cts/secure-element.html
index dabff77..3f800b7 100644
--- a/zh-cn/compatibility/cts/secure-element.html
+++ b/zh-cn/compatibility/cts/secure-element.html
@@ -41,7 +41,7 @@
 <li><code>CtsOmapiTestCases.apk</code> 应能够选择具有以下应用标识符 (AIDs) 的小程序:<ol>
   <li>0xA000000476416E64726F696443545331
     <ol>
-      <li>当在 <code>android.se.omapi.Channel.Transmit</code> (Transmit) 中收到以下应用协议数据单元 (APDU) 时,该小程序应引发安全异常:<em></em><ol>
+      <li>当在 <code>android.se.omapi.Channel.Transmit</code> (Transmit) 中收到以下应用协议数据单元 (APDU) 时,该小程序应抛出安全异常:<em></em><ol>
           <li>0x00700000</li>
           <li>0x00708000</li>
           <li>0x00A40404104A535231373754657374657220312E30</li>
@@ -224,7 +224,7 @@
         </tr>
         <tr>
         <td>0x00F30E0A01AA</td>
-        <td>0x6282</td>
+        <td>0x6286</td>
         <td>否</td>
         </tr>
         <tr>
@@ -304,7 +304,7 @@
         </tr>
         <tr>
         <td>0x00F30E0800</td>
-        <td>0x6282</td>
+        <td>0x6286</td>
         <td>是</td>
         </tr>
         <tr>
@@ -384,7 +384,7 @@
         </tr>
         <tr>
         <td>0x00F30E0C01AA00</td>
-        <td>0x6282</td>
+        <td>0x6286</td>
         <td>是*</td>
         </tr>
         <tr>
@@ -783,6 +783,6 @@
 <li>0xA000000476416E64726F69644354534F</li>
 </ul>
 
-<p>如需用于设置与 CTS 测试匹配的 PKCS#15 结构的分步命令,请参阅<a href="/compatibility/cts/pkcs15-commands.txt">针对 PKCS#15 的命令</a>。</p>
+<p>如需用于设置与 CTS 测试匹配的 PKCS#15 结构的分步命令,请参阅 <a href="/compatibility/cts/pkcs15-commands.txt">PKCS#15 命令</a>。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/compatibility/cts/setup.html b/zh-cn/compatibility/cts/setup.html
index cbba893..a4e0204 100644
--- a/zh-cn/compatibility/cts/setup.html
+++ b/zh-cn/compatibility/cts/setup.html
@@ -166,7 +166,7 @@
     <p class="warning"><strong>警告:</strong>这将清空设备中的所有用户数据。</p>
   </li><li>将设备的语言设置为英语(<strong>美国</strong>):<strong>设置 &gt; 语言和输入法 &gt; 语言</strong>
   </li><li>如果设备具有 GPS 或 WLAN/移动网络功能,则打开位置信息设置:<strong>设置 &gt; 位置信息 &gt; 开启</strong>
-  </li><li>连接到满足以下要求的 WLAN 网络:支持 IPv6、可以将被测设备 (DUT) 视为隔离客户端(请参阅上文的<em>物理环境</em>部分),并可连接到互联网。具体操作方法为:<a href="#physical_environment">设置 &gt; WLAN</a><strong></strong>
+  </li><li>连接到满足以下要求的 WLAN 网络:支持 IPv6、可以将被测设备 (DUT) 视为隔离客户端(请参阅上文的<a href="#physical_environment">物理环境</a>部分),并可连接到互联网。具体操作方法为:<strong>设置 &gt; WLAN</strong><em></em>
   </li><li>确保设备上未设置锁定图案或密码:<strong>设置 &gt; 安全 &gt; 屏幕锁定 &gt; 无</strong>
   </li><li>在设备上启用 <strong>USB 调试</strong>:<strong>设置 &gt; 开发者选项 &gt; USB 调试</strong>。
        <p class="note"><strong>注意:</strong>在 Android 4.2 及更高版本中,默认情况下会隐藏<strong>开发者选项</strong>。要显示这些选项,请依次转到<strong>设置 &gt; 关于手机</strong>,然后点按<strong>版本号</strong>七次。返回上一屏幕以查找<strong>开发者选项</strong>。要查看其他详细信息,请参阅<a href="http://developer.android.com/studio/run/device.html#developer-device-options">启用设备上的开发者选项</a>。</p>
@@ -182,10 +182,10 @@
 <p class="note"><strong>注意:</strong>对于 CTS 2.1 R2 - 4.2 R4 的版本,请通过以下命令设置您的设备(或模拟器),以便执行无障碍测试:<br />
 <code>adb install -r android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk</code><br />
 在设备上,依次启用:<strong>设置 &gt; 无障碍 &gt; 无障碍 &gt; Delegating Accessibility Service</strong></p>
-<p class="note"><strong>注意:</strong>对于 7.0 之前的 CTS 版本,请在声明 <code>android.software.device_admin</code> 的设备上设置您的设备,以使用以下命令执行设备管理测试:<br />
+<p class="note"><strong>注意</strong>:对于 7.0 之前的 CTS 版本,请在声明 <code>android.software.device_admin</code> 的设备上设置您的设备,以使用以下命令执行设备管理测试:<br />
 <code>adb install -r android-cts/repository/testcases/CtsDeviceAdmin.apk</code><br />
 </p><p>
-依次选择“设置”&gt;“安全”&gt;“选择设备管理器”,然后启用两个 <code>android.deviceadmin.cts.CtsDeviceAdminReceiver*</code> 设备管理器。确保 <code>android.deviceadmin.cts.CtsDeviceAdminDeactivatedReceiver</code> 和任何其他预加载的设备管理器均保持停用状态。
+依次点击“设置”&gt;“安全”&gt;“选择设备管理器”,然后启用两个 <code>android.deviceadmin.cts.CtsDeviceAdminReceiver*</code> 设备管理器。确保 <code>android.deviceadmin.cts.CtsDeviceAdminDeactivatedReceiver</code> 和任何其他预加载的设备管理器均保持停用状态。
 </p>
 </li><li>将 CTS 媒体文件复制到设备上,如下所示:<p class="note"><strong>注意:</strong>对于 CTS 2.3 R12 及更高版本,如果设备支持视频编解码器,则必须将 CTS 媒体文件复制到设备上。</p>
 <ul>
diff --git a/zh-cn/compatibility/index.html b/zh-cn/compatibility/index.html
index 2a18f1d..fad996f 100644
--- a/zh-cn/compatibility/index.html
+++ b/zh-cn/compatibility/index.html
@@ -30,7 +30,7 @@
 
 <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="/compatibility/cdd">Android 兼容性定义文档</a>(Android 的核心规范)的要求,即设备属于<a href="/compatibility/overview">兼容性</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="/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>
diff --git a/zh-cn/compatibility/tests/development/atest.html b/zh-cn/compatibility/tests/development/atest.html
index 68bd31c..0a0e5e6 100644
--- a/zh-cn/compatibility/tests/development/atest.html
+++ b/zh-cn/compatibility/tests/development/atest.html
@@ -24,15 +24,21 @@
 
 <h1 id="atest" class="page-title">Atest</h1>
 
-<p>Atest 是一个命令行工具,用户可以使用这种工具在本地编译、安装并运行 Android 测试。本文介绍了如何使用 Atest 运行 Android 测试。</p>
+<p>Atest 是一个命令行工具,可让用户在本地编译、安装并运行 Android 测试,同时可以大大加快重新运行测试的速度,而无需您了解 <a href="/devices/tech/test_infra/tradefed">Trade Federation 自动化测试框架</a>命令行选项。本文介绍了如何使用 Atest 运行 Android 测试。</p>
 
-<p>要了解如何编写测试,请参阅 <a href="https://android.googlesource.com/platform/platform_testing/+/master/docs/index.md" class="external">Android 平台测试</a>。在编写测试的编译脚本文件 (<code>Android.mk</code>) 时,请包含变量 <code>LOCAL_COMPATIBILITY_SUITE</code>。建议使用 <code>device-test</code> 作为默认值。</p>
+<p>要了解有关如何针对 Android 编写测试的一般信息,请参阅 <a href="/compatibility/tests/index.md">Android 平台测试</a>。</p>
 
-<p>要详细了解 Atest 的总体结构,请参阅 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/docs/atest_structure.md" class="external">Atest 开发者指南</a>。要了解如何向 Atest 添加功能,请参阅 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/docs/developer_workflow.md" class="external">Atest 开发者工作流程</a>。</p>
+<p>要了解 Atest 的总体结构,请参阅 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/docs/atest_structure.md" class="external">Atest 开发者指南</a>。</p>
+
+<p>要向 Atest 添加功能,请按照 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/docs/developer_workflow.md" class="external">Atest 开发者工作流程</a>操作。</p>
 
 <h2 id="setting_up_your_environment">设置您的环境</h2>
 
-<p>要运行 Atest,您必须设置环境。</p>
+<p>要运行 Atest,请按照以下部分中的步骤来设置您的环境。</p>
+
+<h3 id="set_environment_variable">设置环境变量</h3>
+
+<p>按照<a href="/compatibility/tests/development/test-mapping#packaging_build_script_rules">打包构建脚本规则</a>为 <a href="/compatibility/tests/development/blueprints">Soong</a> 设置 test_suite,或为 Make 设置 LOCAL_COMPATIBILITY_SUITE。</p>
 
 <h3 id="1_run_envsetupsh">1. 运行 envsetup.sh</h3>
 
diff --git a/zh-cn/compatibility/tests/development/blueprints.html b/zh-cn/compatibility/tests/development/blueprints.html
index 5b04446..6264734 100644
--- a/zh-cn/compatibility/tests/development/blueprints.html
+++ b/zh-cn/compatibility/tests/development/blueprints.html
@@ -22,13 +22,17 @@
   limitations under the License.
 -->
 
-<h1 id="soong_and_blueprints" class="page-title">Soong 和 Blueprint</h1>
+<h1 id="simple_test_configuration" class="page-title">简单的测试配置</h1>
 
 <p>每个新的测试模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引编译系统。</p>
 
-<p><a href="https://android.googlesource.com/platform/build/soong/">Soong 编译系统</a>在 Android 8.0 (Oreo) 中引入,在 Android Q 中实现了对 <code>android_test</code> 的支持,现在可在 Android 开源项目 (AOSP) master 分支中找到它。要查找基于 Make 的系统的相应说明,请参阅 <a href="https://android.googlesource.com/platform/platform_testing/+/master/docs/development/instr-self-e2e.md#Makefile">AOSP 中此页面的原始版本</a>。</p>
+<p><a href="https://android.googlesource.com/platform/build/soong/">Soong 编译系统</a>在 Android 8.0 (Oreo) 中引入,在 Android Q 中实现了对 <code>android_test</code> 的支持,现在可在 Android 开源项目 (AOSP) master 分支中找到它。</p>
 
-<p>对于 Soong,请参阅以下 Blueprint 或 <code>.bp</code> 文件示例,它是以 JSON 格式编写的:<a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/Android.bp">/platform_testing/tests/example/instrumentation/Android.bp</a></p>
+<p>Soong 使用 Blueprint 文件或 <code>.bp</code> 文件,这些文件与 JSON 类似,用于对要编译的模块进行简单的声明性描述。此格式取代了以前的版本中使用的基于 Make 的系统。要适应自定义测试或使用 Android <a href="compatibility/cts">兼容性测试套件</a> (CTS),请改为按照<a href="/compatibility/tests/development/test-config">复杂的测试配置</a>操作。</p>
+
+<h2 id="example">示例</h2>
+
+<p>以下条目均来自这一示例 Blueprint 配置文件:<a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/Android.bp">/platform_testing/tests/example/instrumentation/Android.bp</a></p>
 
 <p>为方便起见,下面附上快照:</p>
 <pre class="prettyprint"><code>android_test {
@@ -42,6 +46,8 @@
 </code></pre>
 <p>请注意,开头的 <code>android_test</code> 声明表示这是一个测试。相反,如果开头为 <code>android_app</code>,则表示这是一个编译软件包。</p>
 
+<h2 id="settings">设置</h2>
+
 <p>下面对各项设置进行了解释:</p>
 <pre class="prettyprint"><code>    name: "HelloWorldTests",
 </code></pre>
@@ -53,7 +59,7 @@
 
 <p>在本例中,可能对测试普遍有用的内容如下:</p>
 
-<p><code>android-support-test</code> 是 Android 测试支持库的预编译项,包括新的测试运行器 <code>AndroidJUnitRunner</code>:它替代了现已弃用的内置 <code>InstrumentationTestRunner</code>,并且支持 JUnit4 测试框架。要了解详情,请参阅 developer.android.com 上的<a href="https://developer.android.com/training/testing/">在 Android 平台上测试应用</a>。</p>
+<p><code>android-support-test</code> 是 Android 测试支持库的预编译项,包括新的测试运行器 <code>AndroidJUnitRunner</code>:它替代了现已弃用的内置 <code>InstrumentationTestRunner</code>,并且支持 JUnit4 测试框架。如需了解详情,请参阅<a href="https://developer.android.com/training/testing/">在 Android 平台上测试应用</a>。</p>
 
 <p>如果要编译一个新的插桩模块,则开始时应始终将 <code>android-support-test</code> 库作为测试运行器。平台源代码树还包括其他有用的测试框架,如 <code>ub-uiautomator</code>、<code>mockito-target</code>、<code>easymock</code> 等等。</p>
 <pre class="prettyprint"><code>    certificate: "platform",
@@ -65,8 +71,8 @@
 <p>在其他情况下,根本不需要此设置:编译系统将直接使用默认的内置证书(基于编译变体)对其进行签名,并且它通常称为 <code>dev-keys</code>。</p>
 <pre class="prettyprint"><code>    test_suites: ["device-tests"],
 </code></pre>
-<p><code>test_suites</code> 设置使 Trade Federation 自动化测试框架很容易发现测试。可以在此处添加其他套件(如 CTS),以便可以共享此测试。</p>
-
-<p><code>${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk</code></p>
+<p><code>test_suites</code> 设置使 Trade Federation 自动化测试框架很容易发现测试。可以在此处添加其他套件(如 CTS),以便共享此测试。</p>
+<pre class="prettyprint"><code>${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk
+</code></pre>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/compatibility/tests/development/index.html b/zh-cn/compatibility/tests/development/index.html
index 924e661..8e60805 100644
--- a/zh-cn/compatibility/tests/development/index.html
+++ b/zh-cn/compatibility/tests/development/index.html
@@ -24,46 +24,40 @@
 
 <h1 id="test_development_workflow" class="page-title">测试开发工作流</h1>
 
-<p>要将测试集成到平台连续测试服务,它们应该符合以下准则。</p>
+<p>要将测试集成到平台连续测试服务,它们应该符合本页面中的准则并遵循以下建议流程。</p>
+
+<ol>
+<li>使用 <a href="https://android.googlesource.com/platform/build/soong/">Soong 编译系统</a>以实现<a href="blueprints">简单的测试配置</a>。</li>
+<li>使用 <a href="test-mapping">Test Mapping</a> 直接在 Android 源代码树中轻松地创建提交前测试规则和提交后测试规则。</li>
+<li>使用 <a href="atest">Atest</a> 在本地运行测试。</li>
+</ol>
 
 <h2 id="test_types">测试类型</h2>
 
 <p>支持的测试类型包括:</p>
 
 <ul>
-<li>标准<a href="https://developer.android.com/studio/test/">插桩</a>测试<ul>
-<li>支持功能测试和指标测试</li>
+<li><a href="/compatibility/tests/development/instrumentation">插桩测试</a>,这种测试支持功能测试和指标测试。要获取常规应用测试指导,请参阅<a href="https://developer.android.com/studio/test/" class="external">测试您的应用</a>。</li>
+<li><a href="/compatibility/tests/development/native">原生测试</a>,这种测试支持以下类型:<ul>
+<li>使用 <a href="https://github.com/google/googletest" class="external">gtest</a> 框架进行的<a href="/compatibility/tests/development/native-func-e2e">原生功能测试</a></li>
+<li><a href="/compatibility/tests/development/metrics.md">原生指标测试</a>,它是使用 <a href="https://github.com/google/benchmark" class="external">google-benchmark</a> 进行的原生基准测试 </li>
 </ul></li>
-<li>原生测试<ul>
-<li>功能:<a href="https://github.com/google/googletest">gtest</a> 框架</li>
-<li>指标:使用 <a href="https://github.com/google/benchmark">google-benchmark</a> 进行原生基准测试</li>
-</ul></li>
-<li><a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/testtype/AndroidJUnitTest.java">主机 Java (Junit) 测试</a></li>
+<li>使用 JUnit 进行的 <a href="/compatibility/tests/development/jar">JAR 主机测试</a></li>
 </ul>
 
 <p>功能测试对测试用例进行通过或未通过测试的断言,而指标测试通常重复执行操作以收集时间指标。</p>
 
-<p>采用标准化的输入/输出格式后,不再需要对每个测试进行自定义结果解析和后处理,并且通用自动化测试框架可用于符合惯例的所有测试。</p>
+<p>采用标准化的输入/输出格式后,不再需要对每个测试进行自定义结果解析和后处理,并且通用自动化测试框架可用于符合惯例的所有测试。如需了解 Android 附带的连续测试框架,请参阅 <a href="/devices/tech/test_infra/tradefed">Trade Federation 概览</a>。</p>
 
 <h2 id="test_case_guidelines">测试用例准则</h2>
 
-<p>通过连续测试服务执行的测试用例应该是<strong>封闭</strong>测试:</p>
+<p>通过连续测试服务执行的测试用例应该是<strong>封闭</strong>测试,也就是说,所有依赖项均已声明并与测试一起提供。如需了解此原则,请参阅 <a href="https://testing.googleblog.com/2012/10/hermetic-servers.html" class="external">Google Testing Blog 网站上的“Hermetic Servers”一文</a>。简而言之,封闭测试<strong>无</strong>需:</p>
 
 <ul>
-<li>无 Google 帐号登录</li>
-<li>无连接设置(电话/WLAN/蓝牙/NFC)</li>
-<li>不传入测试参数</li>
-<li>自动化测试框架不对特定的测试用例执行设置或拆解</li>
-</ul>
-
-<h2 id="building_tests">编译测试</h2>
-
-<p>如果您不熟悉添加和执行测试的工作流,请参阅:</p>
-
-<ul>
-<li><a href="/compatibility/tests/development/instrumentation.md">插桩测试</a>(支持功能测试和指标测试)</li>
-<li><a href="/compatibility/tests/development/native.md">原生测试</a></li>
-<li><a href="/compatibility/tests/development/metrics.md">原生指标测试</a></li>
+<li>使用 Google 帐号登录</li>
+<li>配置连接(电话/Wi-Fi/蓝牙/NFC)</li>
+<li>传入测试参数</li>
+<li>由自动化测试框架对特定的测试用例执行设置或拆解</li>
 </ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/compatibility/tests/development/instr-app-e2e.html b/zh-cn/compatibility/tests/development/instr-app-e2e.html
index 161b940..e18ca48 100644
--- a/zh-cn/compatibility/tests/development/instr-app-e2e.html
+++ b/zh-cn/compatibility/tests/development/instr-app-e2e.html
@@ -22,9 +22,9 @@
   limitations under the License.
 -->
 
-<h1 id="instrumentation_targeting_an_application_a_complete_example" class="page-title">针对应用的插桩:完整的示例</h1>
+<h1 id="targeting_an_application_example" class="page-title">针对应用的插桩测试示例</h1>
 
-<p>如果您不熟悉 Android 平台开发,那么您可能会发现,这个从头开始添加全新插桩测试的完整示例很有用,可以帮助了解所涉及的典型工作流。</p>
+<p>此类插桩测试与针对常规 Android 应用的测试没有什么不同。值得注意的是,包含插桩的测试应用需要与其针对的应用使用相同的证书进行签名。</p>
 
 <p>请注意,本指南假定您已掌握平台源代码树工作流的一些相关知识。如果没有,请参阅 https://source.android.com/source/requirements。本文介绍的示例是编写新的插桩测试,其中目标软件包设置为其自己的测试应用软件包。如果您不熟悉相关概念,请仔细阅读<a href="../development/index.md">平台测试简介</a>。</p>
 
@@ -42,15 +42,11 @@
 
 <p>有关源代码所在位置的更多说明,请参阅<a href="instr-self-e2e.md">自插桩测试的端到端示例</a>。</p>
 
-<h2 id="blueprints">Blueprint</h2>
-
-<p>每个新的测试模块都必须具有 Blueprint Soong 配置文件,以使用模块元数据、编译时依赖项和打包指令来指引编译系统。详情请参阅 <a href="blueprints.md">Soong 和 Blueprint</a>。</p>
-
 <h2 id="manifest_file">清单文件</h2>
 
 <p>就像常规应用一样,每个插桩测试模块都需要一个清单文件。如果您将该文件命名为 <code>AndroidManifest.xml</code> 并在 <code>Android.mk</code> 旁边为测试 tmodule 提供该文件,则 <code>BUILD_PACKAGE</code> 核心 makefile 将自动包含该文件。</p>
 
-<p>在继续深入阅读以下内容之前,强烈建议您先查阅<a href="https://developer.android.com/guide/topics/manifest/manifest-intro.html">有关清单文件的外部文档</a>。</p>
+<p>在继续深入阅读以下内容之前,强烈建议您先查阅<a href="https://developer.android.com/guide/topics/manifest/manifest-intro.html" class="external">应用清单概览</a>。</p>
 
 <p>此文档概述了清单文件的基本组成部分及其功能。</p>
 
@@ -101,9 +97,13 @@
 </code></pre>
 <p>上述代码将插桩的目标软件包设置为 <code>com.android.shell.tests</code>。通过 <code>am instrument</code> 命令调用插桩时,框架将重启 <code>com.android.shell.tests</code> 进程,并将插桩代码注入该进程以执行测试。这也意味着,测试代码可以访问在接受测试的应用中运行的所有类实例,并且或许能够操纵状态,具体取决于公开的测试钩子。</p>
 
-<h2 id="test_configuration_file">测试配置文件</h2>
+<h2 id="simple_configuration_file">简单配置文件</h2>
 
-<p>为了简化测试执行过程,您还需要为 Android 的自动化测试框架 <a href="https://source.android.com/devices/tech/test_infra/tradefed/">Trade Federation</a> 编写测试配置文件。</p>
+<p>每个新的测试模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引编译系统。在大多数情况下,基于 Soong 的 Blueprint 文件选项就足够了。如需了解详情,请参阅<a href="blueprints.md">简单的测试配置</a>。</p>
+
+<h2 id="complex_configuration_file">复杂配置文件</h2>
+<aside class="special"><strong>重要提示</strong>:<span>只有 CTS 测试或需要特殊设置(如停用蓝牙或收集示例数据)的测试需要遵循本部分中的说明。其他所有用例均可通过<a href="blueprints">简单的测试配置</a>来涵盖。如需了解适用于本部分的详细信息,请参阅<a href="test-config">复杂的测试配置</a>。</span></aside>
+<p>对于更复杂的测试,您还需要为 Android 的自动化测试框架 <a href="/devices/tech/test_infra/tradefed/">Trade Federation</a> 编写测试配置文件。</p>
 
 <p>测试配置可以指定特殊的设备设置选项和默认参数来提供测试类。</p>
 
@@ -174,7 +174,7 @@
 
 <h2 id="build_and_test_locally">在本地编译和测试</h2>
 
-<p>对于最常见的用例,请使用 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md">Atest</a>。</p>
+<p>对于最常见的用例,请使用 <a href="/compatibility/tests/development/atest">Atest</a>。</p>
 
 <p>对于更为复杂的用例,如果需要更繁琐的自定义,请遵循<a href="instrumentation.md">插桩说明</a>。</p>
 
diff --git a/zh-cn/compatibility/tests/development/instr-self-e2e.html b/zh-cn/compatibility/tests/development/instr-self-e2e.html
index e621cf5..a8d8e67 100644
--- a/zh-cn/compatibility/tests/development/instr-self-e2e.html
+++ b/zh-cn/compatibility/tests/development/instr-self-e2e.html
@@ -22,13 +22,29 @@
   limitations under the License.
 -->
 
-<h1 id="self-instrumenting_tests_a_complete_example" class="page-title">自插桩测试:完整的示例</h1>
+<h1 id="self-instrumenting_tests_example" class="page-title">自插桩测试示例</h1>
 
-<p>如果您不熟悉 Android 平台开发,那么您可能会发现,这个从头开始添加全新插桩测试的完整示例很有用,可以帮助了解所涉及的典型工作流。</p>
+<p>当启动插桩测试时,系统会重启其目标软件包,并且会注入和启动插桩代码以执行测试。一种例外情况是,这里的目标软件包不能是 Android 应用框架本身,即软件包 <code>android</code>,因为这样做会导致出现一种矛盾情况:需要重启 Android 框架,而正是该框架支持系统功能,包括插桩本身。</p>
 
-<p>请注意,本指南假定您已掌握平台源代码树工作流的一些相关知识。如果没有,请参阅 https://source.android.com/source/requirements。本文介绍的示例是编写新的插桩测试,其中目标软件包设置为其自己的测试应用软件包。如果您不熟悉相关概念,请仔细阅读<a href="/compatibility/tests/">平台测试概述</a>。</p>
+<p>这意味着,插桩测试无法将本身注入到 Android 框架(也称为系统服务器)以执行测试。为了测试 Android 框架,测试代码只能调用公共 API Surface,或者通过平台源代码树中可用的 Android 接口定义语言 (<a href="https://developer.android.com/guide/components/aidl.html" class="external">AIDL</a>) 公开的 API Surface。对于此类测试,针对任何特定软件包都没有意义。因此,按照惯例会将此类插桩声明为针对其自己的测试应用软件包,如其自己的 <code>AndroidManifest.xml</code> 中的 <code>&lt;manifest&gt;</code> 标记所定义。</p>
 
-<p>本指南使用以下测试作为示例:</p>
+<p>根据要求,此类测试应用软件包还可以:</p>
+
+<ul>
+<li>捆绑测试所需的 Activity。</li>
+<li>与系统共享用户 ID。</li>
+<li>使用平台密钥进行签名。</li>
+<li>根据框架源代码而不是公共 SDK 进行编译。</li>
+</ul>
+
+<p>此类插桩测试有时称为自插桩。以下是平台源代码中自插桩测试的一些示例:</p>
+
+<ul>
+<li><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/tests/">frameworks/base/core/tests/</a></li>
+<li><a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/tests/servicestests/">frameworks/base/services/tests/servicestests</a></li>
+</ul>
+
+<p>本文介绍的示例是编写新的插桩测试,其中目标软件包设置为其自己的测试应用软件包。本指南使用以下测试作为示例:</p>
 
 <ul>
 <li><a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/">Hello World 插桩测试</a></li>
@@ -49,15 +65,11 @@
 
 <p>不管是什么样的结构,您最终都需要在 <code>tests</code> 目录或新建子目录中添加文件,并且文件应类似于示例 gerrit 更改中的 <code>instrumentation</code> 目录中的文件。下面几部分将进一步详细说明各个文件。</p>
 
-<h2 id="blueprints">Blueprint</h2>
-
-<p>每个新的测试模块都必须具有 Blueprint Soong 配置文件,以使用模块元数据、编译时依赖项和打包指令来指引编译系统。详情请参阅 <a href="blueprints.md">Soong 和 Blueprint</a>。</p>
-
 <h2 id="manifest_file">清单文件</h2>
 
 <p>就像常规应用一样,每个插桩测试模块都需要一个清单文件。如果您将该文件命名为 <code>AndroidManifest.xml</code> 并在 <code>Android.mk</code> 旁边为测试 tmodule 提供该文件,则 <code>BUILD_PACKAGE</code> 核心 makefile 将自动包含该文件。</p>
 
-<p>在继续深入阅读以下内容之前,强烈建议您先查阅<a href="https://developer.android.com/guide/topics/manifest/manifest-intro.html">有关清单文件的外部文档</a>。</p>
+<p>在继续深入阅读以下内容之前,强烈建议您先查阅<a href="https://developer.android.com/guide/topics/manifest/manifest-intro.html" class="external">应用清单概览</a>。</p>
 
 <p>此文档概述了清单文件的基本组成部分及其功能。有关示例,请参阅 <a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/AndroidManifest.xml">platform_testing/tests/example/instrumentation/AndroidManifest.xml</a>。</p>
 
@@ -101,9 +113,13 @@
 </code></pre>
 <p>您可能已经注意到,上述代码声明的 <code>targetPackage</code> 与此文件的 <code>manifest</code> 标记中声明的 <code>package</code> 属性相同。如<a href="../basics/index.md">测试基础知识</a>中所述,此类插桩测试通常用于测试框架 API,所以除了它们本身之外,拥有特定的目标应用软件包并不是很有意义。</p>
 
-<h2 id="test_configuration_file">测试配置文件</h2>
-<aside class="special"><strong>重要提示</strong>:<span>只有 CTS 测试或需要特殊设置(如停用蓝牙或收集示例数据)的测试需要遵循本部分中的说明。其他所有用例均可通过使用 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md">Atest</a> 来涵盖。</span></aside>
-<p>对于这些更复杂的用例,您还需要为 Android 的自动化测试框架 <a href="https://source.android.com/devices/tech/test_infra/tradefed/">Trade Federation</a> 编写测试配置文件。</p>
+<h2 id="simple_configuration_file">简单配置文件</h2>
+
+<p>每个新的测试模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引编译系统。在大多数情况下,基于 Soong 的 Blueprint 文件选项就足够了。如需了解详情,请参阅<a href="blueprints.md">简单的测试配置</a>。</p>
+
+<h2 id="complex_configuration_file">复杂配置文件</h2>
+<aside class="special"><strong>重要提示</strong>:<span>只有 CTS 测试或需要特殊设置(如停用蓝牙或收集示例数据)的测试需要遵循本部分中的说明。其他所有用例均可通过<a href="blueprints">简单的测试配置</a>来涵盖。如需了解适用于本部分的更多详细信息,请参阅<a href="test-config">复杂的测试配置</a>。</span></aside>
+<p>对于这些更复杂的用例,您还需要为 Android 的自动化测试框架 <a href="/devices/tech/test_infra/tradefed/">Trade Federation</a> 编写测试配置文件。</p>
 
 <p>测试配置可以指定特殊的设备设置选项和默认参数来提供测试类。有关示例,请参阅 <a href="/platform_testing/+/master/tests/example/instrumentation/AndroidTest.xml">/platform_testing/tests/example/instrumentation/AndroidTest.xml</a>。</p>
 
@@ -178,9 +194,9 @@
 <p>要访问 <code>Instrumentation</code> 类的实例,只需在 <code>InstrumentationRegistry</code> 类上调用静态方法 <code>getInstrumentation()</code>:</p>
 <pre class="prettyprint lang-java"><code>Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation()
 </code></pre>
-<h2 id="build_and_test_locally">在本地编译和测试:</h2>
+<h2 id="build_and_test_locally">在本地编译和测试</h2>
 
-<p>对于最常见的用例,请使用 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md">Atest</a>。</p>
+<p>对于最常见的用例,请使用 <a href="/compatibility/tests/development/atest">Atest</a>。</p>
 
 <p>对于更为复杂的用例,如果需要更繁琐的自定义,请遵循<a href="instrumentation.md">插桩说明</a>。</p>
 
diff --git a/zh-cn/compatibility/tests/development/instrumentation.html b/zh-cn/compatibility/tests/development/instrumentation.html
index 1164965..eb64df9 100644
--- a/zh-cn/compatibility/tests/development/instrumentation.html
+++ b/zh-cn/compatibility/tests/development/instrumentation.html
@@ -24,6 +24,23 @@
 
 <h1 id="instrumentation_tests" class="page-title">插桩测试</h1>
 
+<p>请先阅读 developer.android.com 上的<a href="https://developer.android.com/studio/test/" class="external">测试应用</a>一文。请注意,在平台测试中使用插桩测试的方式有一些差异。</p>
+
+<p>总的来说,插桩测试提供了一种通过 <code>am instrument</code> 命令启动的特殊测试执行环境,其中目标应用进程会重启并使用基本的应用上下文进行初始化,并在应用进程虚拟机内启动插桩线程。您的测试代码在此插桩线程上开始执行,并附带一个 <code>Instrumentation</code> 实例,该实例可提供对应用上下文和 API 的访问权限,以操纵接受测试的应用进程。</p>
+
+<h2 id="key_concepts">主要概念</h2>
+
+<ul>
+<li>插桩必须在应用软件包中声明,并在应用软件包清单的 <code>&lt;manifest&gt;</code> 标记下嵌套 <a href="https://developer.android.com/guide/topics/manifest/instrumentation-element.html"><code>&lt;instrumentation&gt;</code></a> 标记。</li>
+<li>从技术层面来讲,应用软件包清单可以包含多个 <code>&lt;instrumentation&gt;</code> 标记,但通常不采用这种方式使用此清单。</li>
+<li>每个 <code>&lt;instrumentation&gt;</code> 必须包含:<ul>
+<li><code>android:name</code> 属性:它应该是测试应用中所包含 <a href="https://developer.android.com/reference/android/app/Instrumentation.html"><code>Instrumentation</code></a> 的子类的名称,它通常是正在使用的测试运行器,例如 <code>android.support.test.runner.AndroidJUnitRunner</code></li>
+<li>必须定义 <code>android:targetPackage</code> 属性。其值应该设置为接受测试的应用软件包。</li>
+</ul></li>
+</ul>
+
+<h2 id="summary_of_steps">步骤总结</h2>
+
 <ol>
 <li><p>下面是框架服务封闭测试的常见位置:</p>
 <pre class="prettyprint"><code>frameworks/base/core/tests/coretests
@@ -36,7 +53,7 @@
 <li><a href="instr-app-e2e.md">针对应用的插桩:完整的示例</a></li>
 </ul></li>
 <li><p>如果要将测试添加到上述某个位置,请遵循现有惯例。如果要设置一个新的测试模块,请在上述某个位置按照 <code>AndroidManifest.xml</code> 和 <code>Android.mk</code> 的设置进行操作</p></li>
-<li><p>有关示例,请参阅 <a href="https://android.googlesource.com/platform/frameworks/base.git/+/master/core/tests/coretests/">/frameworks/base.git/+/master/core/tests/coretests/</a>。请注意,以下行会安装额外的应用:</p>
+<li><p>有关示例,请参阅 <a href="https://android.googlesource.com/platform/frameworks/base.git/+/master/core/tests/coretests/">frameworks/base/core/tests/coretests/</a>。请注意,以下行会安装额外的应用:</p>
 <pre class="prettyprint"><code>&lt;option name="test-file-name" value="FrameworksCoreTests.apk" /&gt;
 &lt;option name="test-file-name" value="BstatsTestApp.apk" /&gt;
 </code></pre></li>
@@ -47,7 +64,7 @@
 <li><p>运行测试:</p>
 
 <ul>
-<li><p>最简单的解决方案是使用 Atest,如下所示:</p>
+<li><p>最简单的解决方案是使用 <a href="/compatibility/tests/development/atest">Atest</a>,如下所示:</p>
 <pre class="prettyprint"><code>atest FrameworksCoreTests
 </code></pre></li>
 <li><p>或者,对于更复杂的测试,请使用 Trade Federation 自动化测试框架:</p></li>
diff --git a/zh-cn/compatibility/tests/development/metrics.html b/zh-cn/compatibility/tests/development/metrics.html
index 35ee36f..56fb11b 100644
--- a/zh-cn/compatibility/tests/development/metrics.html
+++ b/zh-cn/compatibility/tests/development/metrics.html
@@ -24,32 +24,34 @@
 
 <h1 id="native_metric_tests" class="page-title">原生指标测试</h1>
 
-<p>如前所述,原生指标测试通常用于执行 HAL 或直接与较低级别的系统服务交互,要利用连续测试服务,应使用 <a href="https://github.com/google/benchmark">google-benchmark</a> 框架编译原生指标测试。</p>
+<p>原生指标测试通常用于执行硬件抽象层 (HAL) 或直接与较低级别的系统服务交互。要利用连续测试服务,应使用 <a href="https://github.com/google/benchmark" class="external">google-benchmark</a> 框架编译原生指标测试。</p>
 
-<p>下面是一些常规说明:</p>
+<h2 id="example">示例</h2>
+
+<p>请参阅示例原生测试模块设置,位于:<a href="https://android.googlesource.com/platform/bionic/+/master/benchmarks/bionic_benchmarks.cpp">bionic/benchmarks/bionic-benchmarks</a></p>
+
+<h2 id="summary_of_steps">步骤总结</h2>
 
 <ol>
-<li>参阅示例原生测试模块设置,位于:<code>bionic/benchmarks/bionic-benchmarks</code></li>
-<li>测试模块 makefile 应使用 <code>BUILD_NATIVE_BENCHMARK</code> 编译规则,以便自动包含 google-benchmark 依赖项</li>
+<li>测试模块配置文件应使用 <code>BUILD_NATIVE_BENCHMARK</code> 编译规则,以便自动包含 google-benchmark 依赖项。</li>
 <li><p>使用 make 命令编译测试模块:</p>
 <pre class="prettyprint lang-shell"><code>make -j40 bionic-benchmarks
 </code></pre></li>
 <li><p>使用 Trade Federation 自动化测试框架自动安装和运行:</p>
 <pre class="prettyprint"><code>make tradefed-all -j
 tradefed.sh run template/local_min --template:map test=bionic-benchmarks
-1. Manually Install and Run:
-1. Push the generated test binary onto device:
-
-  ```shell
-  adb push ${OUT}/data/benchmarktest/bionic-benchmarks/bionic-benchmarks32 \
-    /data/benchmarktest/bionic-benchmarks/bionic-benchmarks32
-  ```
-1. Execute the test by invoking test binary on device:
-
-  ```shell
-  adb shell /data/benchmarktest/bionic-benchmarks/bionic-benchmarks32
-  ```
 </code></pre></li>
+<li><p>手动安装并运行,如下所示:</p>
+
+<ol>
+<li><p>将生成的测试二进制文件推送到设备:</p>
+<pre class="prettyprint"><code>adb push ${OUT}/data/benchmarktest/bionic-benchmarks/bionic-benchmarks32 \
+  /data/benchmarktest/bionic-benchmarks/bionic-benchmarks32
+</code></pre></li>
+<li><p>通过在设备上调用测试二进制文件执行测试:</p>
+<pre class="prettyprint"><code>adb shell /data/benchmarktest/bionic-benchmarks/bionic-benchmarks32
+</code></pre></li>
+</ol></li>
 </ol>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/compatibility/tests/development/native-func-e2e.html b/zh-cn/compatibility/tests/development/native-func-e2e.html
index 17023aa..f78a292 100644
--- a/zh-cn/compatibility/tests/development/native-func-e2e.html
+++ b/zh-cn/compatibility/tests/development/native-func-e2e.html
@@ -22,19 +22,13 @@
   limitations under the License.
 -->
 
-<h1 id="adding_a_new_native_test_a_complete_example" class="page-title">添加新的原生测试:完整的示例</h1>
+<h1 id="adding_a_new_native_test_example" class="page-title">添加新的原生测试示例</h1>
 
-<p>如果您不熟悉 Android 平台开发,那么您可能会发现,这个从头开始添加全新原生测试的完整示例很有用,可以帮助了解所涉及的典型工作流。</p>
-
-<p>请注意,本指南假定您已掌握平台源代码树工作流的一些相关知识。如果没有,请参阅 https://source.android.com/source/requirements。</p>
-
-<p>此外,如果您也不熟悉 C++ 的 gtest 框架,请访问 <a href="https://github.com/google/googletest">gtest 项目网站</a>以查看其他文档。</p>
+<p>如果您不熟悉 Android 平台开发,那么您可能会发现,这个从头开始添加全新原生测试的完整示例很有用,可以帮助您了解所涉及的典型工作流。此外,如果您也不熟悉 C++ 的 gtest 框架,请访问 <a href="https://github.com/google/googletest">gtest 项目网站</a>以查看其他文档。</p>
 
 <p>本指南使用以下测试作为示例:</p>
 
-<ul>
-<li><a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/native/">Hello World 原生测试</a></li>
-</ul>
+<p><a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/native/">Hello World 原生测试</a></p>
 
 <p>建议您先浏览代码以获得粗略的印象,然后再继续。</p>
 
@@ -87,10 +81,6 @@
 </code></pre>
 <p>不管是什么样的结构,您最终都需要在 <code>tests</code> 目录或新建子目录中添加文件,并且文件应类似于示例 gerrit 更改中的 <code>native</code> 目录中的文件。下面几部分将进一步详细说明各个文件。</p>
 
-<h2 id="blueprints">Blueprint</h2>
-
-<p>每个新的测试模块都必须具有 Blueprint Soong 配置文件,以使用模块元数据、编译时依赖项和打包指令来指引编译系统。详情请参阅 <a href="blueprints.md">Soong 和 Blueprint</a>。</p>
-
 <h2 id="source_code">源代码</h2>
 
 <p>有关示例,请参阅 <a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/native/HelloWorldTest.cpp">Hello World 原生测试</a>。</p>
@@ -125,17 +115,19 @@
 <li>https://github.com/google/googletest/blob/master/googletest/docs/Primer.md</li>
 </ul>
 
-<h2 id="test_configuration">测试配置</h2>
-<aside class="special"><strong>重要提示</strong>:<span>只有 CTS 测试或需要特殊设置(如停用蓝牙或收集示例数据)的测试需要遵循本部分中的说明。其他所有用例均可通过使用 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md">Atest</a> 来涵盖。</span></aside>
-<p>为了简化测试执行过程,您可以编写类似以下映射的测试映射:<a href="https://android.googlesource.com/platform/platform_testing/+/master/tests/example/native/TEST_MAPPING">/platform/platform_testing/tests/example/native/TEST_MAPPING</a>。</p>
+<h2 id="simple_configuration_file">简单配置文件</h2>
 
+<p>每个新的测试模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引编译系统。在大多数情况下,基于 Soong 的 Blueprint 文件选项就足够了。如需了解详情,请参阅<a href="blueprints.md">简单的测试配置</a>。</p>
+
+<h2 id="complex_configuration_file">复杂配置文件</h2>
+<aside class="special"><strong>重要提示</strong>:<span>只有 CTS 测试或需要特殊设置(如停用蓝牙或收集示例数据)的测试需要遵循本部分中的说明。其他所有用例均可通过<a href="blueprints.md">简单的测试配置</a>来涵盖。如需了解适用于本部分的详细信息,请参阅<a href="compatibility/tests/development/test-config">复杂的测试配置</a>。</span></aside>
 <p>要改用 Trade Federation,请为 Android 的自动化测试框架 <a href="/devices/tech/test_infra/tradefed/">Trade Federation</a> 编写测试配置文件。</p>
 
 <p>测试配置可以指定特殊的设备设置选项和默认参数来提供测试类。</p>
 
 <h2 id="build_and_test_locally">在本地编译和测试</h2>
 
-<p>对于最常见的用例,请使用 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md">Atest</a>。</p>
+<p>对于最常见的用例,请使用 <a href="/compatibility/tests/development/atest">Atest</a>。</p>
 
 <p>对于更为复杂的用例,如果需要更繁琐的自定义,请遵循<a href="instrumentation.md">插桩说明</a>。</p>
 
diff --git a/zh-cn/compatibility/tests/development/native.html b/zh-cn/compatibility/tests/development/native.html
index 9d9fee6..68aece9 100644
--- a/zh-cn/compatibility/tests/development/native.html
+++ b/zh-cn/compatibility/tests/development/native.html
@@ -24,25 +24,36 @@
 
 <h1 id="native_tests" class="page-title">原生测试</h1>
 
-<p>如前所述,原生测试通常用于执行 HAL 或直接与较低级别的系统服务交互,要利用连续测试服务,应使用 <a href="https://github.com/google/googletest">gtest</a> 框架编译原生测试。</p>
+<p>平台的原生测试通常会访问较低级别的 HAL,或针对各种系统服务执行原始 IPC。因此,测试方法通常与接受测试的服务密切相关。</p>
 
-<p>下面是一些常规说明:</p>
+<p>请使用 <a href="https://github.com/google/googletest" class="external">gtest</a> 框架编译原生测试。这是与持续测试基础架构集成的先决条件。</p>
+
+<h2 id="examples">示例</h2>
+
+<p>以下是平台源代码中原生测试的一些示例:</p>
+
+<ul>
+<li><a href="https://android.googlesource.com/platform/frameworks/av/+/master/camera/tests/">frameworks/av/camera/tests</a></li>
+<li><a href="https://android.googlesource.com/platform/frameworks/native/+/master/libs/gui/tests/">frameworks/native/libs/gui/tests</a></li>
+</ul>
+
+<h2 id="summary_of_steps">步骤总结</h2>
 
 <ol>
-<li>参阅示例原生测试模块设置,位于:<code>libs/hwui/unit_tests</code></li>
-<li>测试模块 makefile 应使用 <code>BUILD_NATIVE_TEST</code> 编译规则,以便自动包含 gtest 依赖项</li>
-<li>编写<a href="test-config.md">测试配置</a>。</li>
+<li>参阅示例原生测试模块设置,位于:<a href="https://android.googlesource.com/platform/frameworks/base/+/master/libs/hwui/tests/unit/">frameworks/base/libs/hwui/tests/unit/</a></li>
+<li>测试模块配置应使用 <code>BUILD_NATIVE_TEST</code> 编译规则,以便自动包含 gtest 依赖项</li>
+<li>编写测试配置。请参阅<a href="/compatibility/tests/development/blueprints">简单配置</a>选项和<a href="/compatibility/tests/development/test-config">复杂配置</a>选项。</li>
 <li><p>使用 <code>mmm</code> 或 <code>mma</code>(取决于它是增量编译还是完整编译)编译测试模块,例如:</p>
 <pre class="prettyprint lang-shell"><code>make hwui_unit_tests -j
 </code></pre></li>
-<li><p>使用 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md">Atest</a> 运行测试:</p>
+<li><p>使用 <a href="/compatibility/tests/development/atest">Atest</a> 在本地运行测试:</p>
 <pre class="prettyprint"><code>atest hwui_unit_tests
 </code></pre></li>
-<li><p>或者,使用 Trade Federation 自动化测试框架运行:</p>
+<li><p>使用 Trade Federation 自动化测试框架运行测试:</p>
 <pre class="prettyprint"><code>make tradefed-all -j
 tradefed.sh run template/local_min --template:map test=hwui_unit_tests
 </code></pre></li>
-<li><p>如果使用 Trade Federation,请手动安装并运行:</p>
+<li><p>手动安装并运行:</p>
 
 <ol>
 <li><p>将生成的测试二进制文件推送到设备:</p>
diff --git a/zh-cn/compatibility/tests/development/test-config.html b/zh-cn/compatibility/tests/development/test-config.html
index 66d4784..1fd2a92 100644
--- a/zh-cn/compatibility/tests/development/test-config.html
+++ b/zh-cn/compatibility/tests/development/test-config.html
@@ -22,8 +22,8 @@
   limitations under the License.
 -->
 
-<h1 id="test_module_configuration" class="page-title">测试模块配置</h1>
-<aside class="special"><strong>重要提示</strong>:<span>只有 CTS 测试或需要特殊设置(如停用蓝牙或收集示例数据)的测试需要遵循此页面上的说明。其他所有用例均可通过使用 <a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md">Atest</a> 来涵盖。</span></aside>
+<h1 id="complex_test_configuration" class="page-title">复杂的测试配置</h1>
+<aside class="special"><strong>重要提示</strong>:<span>只有 Android <a href="compatibility/cts">兼容性测试套件</a> (CTS) 测试或需要特殊设置(如停用蓝牙或收集示例数据)的测试需要遵循此页面上的说明。其他所有用例均可通过使用 Blueprint 的基于 Soong 的<a href="blueprints.md">简单的测试配置</a>来涵盖,这些 Blueprint 能够自动处理以前手动执行的大部分配置操作。</span></aside>
 <p>某些测试模块可能需要执行在测试用例本身内无法执行的自定义设置和拆解步骤。典型的示例可能包括:</p>
 
 <ul>
@@ -34,13 +34,13 @@
 
 <p>过去,组件团队通常依靠编写主机端测试来执行此类任务,这需要了解 Trade Federation 自动化测试框架,并且通常会提高测试模块的复杂性。</p>
 
-<p>我们引入了测试模块配置的概念(借鉴于 CTS)来支持此类任务,只需几行配置即可完成上面列出的常见任务。为了获得最大的灵活性,您甚至可以实现自己的目标准备器(由 <a href="/reference/com/android/tradefed/targetprep/ITargetPreparer.html">ITargetPreparer</a> 或 <a href="/reference/com/android/tradefed/targetprep/ITargetCleaner.html">ITargetCleaner</a> 定义),并对其进行配置以在您自己的测试模块配置中使用。</p>
+<p>我们引入了测试模块配置的概念(借鉴于 CTS)来支持此类任务,只需几行配置即可完成上面列出的常见任务。为了达到最大的灵活性,您甚至可以实现自己的目标准备器(由 <a href="/reference/com/android/tradefed/targetprep/ITargetPreparer.html">ITargetPreparer</a> 或 <a href="/reference/com/android/tradefed/targetprep/ITargetCleaner.html">ITargetCleaner</a> 定义),并对其进行配置以在您自己的测试模块配置中使用。</p>
 
 <p>测试模块的测试模块配置是添加到顶级模块源文件夹的必需 XML 文件,名为“AndroidTest.xml”。该 XML 文件遵循 Trade Federation 自动化测试框架使用的配置文件的格式。目前,通过测试模块配置处理的主要标记是“target_preparer”和“test”标记。</p>
 
 <h2 id="target_preparers">目标准备器</h2>
 
-<p>顾名思义,“target_preparer”标记会定义目标准备器(请参阅 <a href="/reference/com/android/tradefed/targetprep/ITargetPreparer.html">ITargetPreparer</a>),该目标准备器提供了一种设置方法,在执行测试模块以进行测试之前会调用该方法;如果“target_preparer”标记中引用的类也实现 <a href="/reference/com/android/tradefed/targetprep/ITargetCleaner.html">ITargetCleaner</a>,则在测试模块完成后将调用其拆解方法。</p>
+<p>顾名思义,“target_preparer”标记会定义目标准备器(请参阅 <a href="/reference/com/android/tradefed/targetprep/ITargetPreparer.html">ITargetPreparer</a>),该目标准备器提供了一种设置方法,在执行测试模块以进行测试之前会调用该方法;如果“target_preparer”标记中引用的类也实现了 <a href="/reference/com/android/tradefed/targetprep/ITargetCleaner.html">ITargetCleaner</a>,则在测试模块完成后将调用其拆解方法。</p>
 
 <p>要使用内置的通用模块配置,请在测试模块的顶级文件夹中添加一个新文件“AndroidTest.xml”,并在该文件里填充以下内容:</p>
 <pre class="prettyprint lang-xml"><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
@@ -62,7 +62,9 @@
 <li>在测试模块完成之后,执行 shell 命令“settings put secure accessibility_enabled 0”</li>
 </ol>
 
-<p>在此特定示例中,分别在测试模块执行之前/之后启用/停用可访问性。通过一个简单的示例演示,可以详细介绍如何使用“option”标记。如上所示,该标记可以有两个属性:名称和值。名称属性指示选项的名称,并进一步分解成由冒号分隔的两部分:一部分是准备器的简称,另一部分是准备器提供的实际选项名称。值字段的确切目的取决于准备器如何定义选项:它可以是字符串、数字、布尔值,甚至是文件路径等等。在上面的示例中,名称“run-command:run-command”表示我们正在为由简称为“run-command”的目标准备器定义的选项“run-command”设置值;名称“run-command:teardown-command”表示我们正在为也是由简称为“run-command”的同一目标准备器定义的选项“teardown-command”设置值。下面总结了三个常见的目标准备器:</p>
+<p>在此特定示例中,分别在测试模块执行之前/之后启用/停用可访问性。通过一个简单的示例演示,可以详细介绍如何使用“option”标记。如上所示,该标记可以有两个属性:名称和值。名称属性指示选项的名称,并进一步分解成由冒号分隔的两部分:一部分是准备器的简称,另一部分是准备器提供的实际选项名称。</p>
+
+<p>值字段的确切用途取决于准备器如何定义选项:它可以是字符串、数字、布尔值,甚至可以是文件路径等等。在上面的示例中,名称“run-command:run-command”表示我们正在为由简称为“run-command”的目标准备器定义的选项“run-command”设置值;名称“run-command:teardown-command”表示我们正在为也是由简称为“run-command”的同一目标准备器定义的选项“teardown-command”设置值。下面总结了三个常见的目标准备器:</p>
 
 <ul>
 <li><p>类名:<a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/targetprep/PushFilePreparer.java">PushFilePreparer</a></p>
diff --git a/zh-cn/compatibility/tests/development/test-mapping.html b/zh-cn/compatibility/tests/development/test-mapping.html
index e76cdaa..57820d6 100644
--- a/zh-cn/compatibility/tests/development/test-mapping.html
+++ b/zh-cn/compatibility/tests/development/test-mapping.html
@@ -44,7 +44,7 @@
 
 <h2 id="packaging_build_script_rules">打包构建脚本规则</h2>
 
-<p>为了让 <a href="/devices/tech/test_infra/tradefed">Trade Federation 自动化测试框架</a>针对指定构建运行 Test Mapping 的测试模块,这些模块必须针对 <a href="blueprints">Soong</a> 将 <strong>test_suite</strong>(或针对 Make 将 <strong>LOCAL_COMPATIBILITY_SUITE</strong>)设为以下两个套件之一:</p>
+<p>为了让 <a href="/devices/tech/test_infra/tradefed">Trade Federation 自动化测试框架</a>针对指定版本运行 Test Mapping 的测试模块,这些模块必须针对 <a href="blueprints">Soong</a> 将 <strong>test_suite</strong>(或针对 Make 将 <strong>LOCAL_COMPATIBILITY_SUITE</strong>)设为以下两个套件之一:</p>
 
 <ul>
 <li><strong>device-tests</strong> - 针对特定设备 CPU 构建</li>
diff --git a/zh-cn/compatibility/tests/index.html b/zh-cn/compatibility/tests/index.html
index 6844579..eb05a67 100644
--- a/zh-cn/compatibility/tests/index.html
+++ b/zh-cn/compatibility/tests/index.html
@@ -26,23 +26,23 @@
 
 <p>本内容面向 Android 平台开发者。在了解如何在 Android 平台上进行测试之前,请参阅 <a href="/devices/architecture">Android 平台架构</a>,大致了解相关的信息。</p>
 
-<h2 id="whats_new">新增内容</h2>
+<h2 id="whats_new">新变化</h2>
 
 <h3 id="test_development_workflow">测试开发工作流</h3>
 
 <p><a href="/compatibility/tests/development">测试开发工作流</a>小节现在包含介绍性材料,其中包括所有主要测试类型的端到端示例。</p>
 
-<h3 id="blueprints">Blueprint</h3>
+<h3 id="simple_test_configuration">简单的测试配置</h3>
 
-<p><a href="https://android.googlesource.com/platform/build/soong/">Soong 编译系统</a>在 Android 8.0 (Oreo) 中引入,在 Android Q 中实现了对 <code>android_test</code> 的支持,现在可在 Android 开源项目 (AOSP) master 分支中找到它。</p>
+<p><a href="https://android.googlesource.com/platform/build/soong/">Soong 编译系统</a>在 Android 8.0 (Oreo) 中引入,在 Android Q 中实现了对 <code>android_test</code> 的支持,现在可在 Android 开源项目 (AOSP) master 分支中找到它。Soong 基于 Blueprint 的配置比以前的 Make 解决方案简单得多。</p>
 
 <h3 id="atest">Atest</h3>
 
-<p><a href="https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md" class="external">Atest</a> 是一个命令行工具,用户可以使用这种工具在本地编译、安装并运行 Android 测试。建议采用此标准对您的功能进行初始测试。</p>
+<p><a href="/compatibility/tests/development/atest">Atest</a> 是一个命令行工具,用户可以使用该工具在本地编译、安装并运行 Android 测试。建议采用此标准对您的功能进行初始测试。</p>
 
 <h2 id="what_and_how_to_test">测试什么以及如何测试</h2>
 
-<p>平台测试通常与一个或多个 Android 系统服务或 HAL 层交互、执行受测对象的功能,并断言测试结果的正确性。</p>
+<p>平台测试通常与一个或多个 Android 系统服务或硬件抽象层 (HAL) 交互、执行受测对象的功能,并断言测试结果的正确性。</p>
 
 <p>因此,平台测试可以:</p>
 
@@ -53,69 +53,19 @@
 <li>私有 API(@hide 或受保护,软件包私有)</li>
 </ul></li>
 <li>直接通过原始 binder/IPC 代理调用 Android 系统服务</li>
-<li>通过低级 API 或 IPC 接口直接与 HAL 交互</li>
+<li>通过低级别 API 或 IPC 接口直接与 HAL 交互</li>
 </ol>
 
-<p>上面的类型 1 和 2 通常编写为<strong>插桩测试</strong>,而类型 3 通常使用 gtest 框架编写为<strong>原生测试</strong>。</p>
+<p>类型 1 和 2 通常编写为<a href="/compatibility/tests/development/instrumentation">插桩测试</a>,而类型 3 通常使用 <a href="https://github.com/google/googletest" class="external">gtest</a> 框架编写为<a href="/compatibility/tests/development/native">原生测试</a>。</p>
 
-<h2 id="instrumentation_tests_for_the_platform">平台的插桩测试</h2>
-
-<p>您可能已经阅读 <code>developer.android.com</code> 上的<a href="https://developer.android.com/studio/test/">测试应用</a>一文,不过,在平台测试中使用插桩测试的方式可能仍有一些差异。</p>
-
-<p>简言之,插桩测试提供了一种通过 <code>am instrument</code> 命令启动的特殊测试执行环境,其中目标应用进程会重启并使用基本的应用上下文进行初始化,并在应用进程虚拟机内启动插桩线程。您的测试代码在此插桩线程上开始执行,并附带一个 <code>Instrumentation</code> 实例,该实例可提供对应用上下文和 API 的访问权限,以操纵接受测试的应用进程。</p>
-
-<p>关于插桩的一些关键概念:</p>
+<p>如需了解详情,请参阅我们的端到端示例:</p>
 
 <ul>
-<li>插桩必须在应用软件包中声明,并在应用软件包清单的 <code>&lt;manifest&gt;</code> 标记下嵌套 <a href="https://developer.android.com/guide/topics/manifest/instrumentation-element.html"><code>&lt;instrumentation&gt;</code></a> 标记</li>
-<li>应用软件包清单在技术上可能包含多个 <code>&lt;instrumentation&gt;</code> 标记,不过它不常以这种方式使用</li>
-<li>每个 <code>&lt;instrumentation&gt;</code> 必须包含:<ul>
-<li><code>android:name</code> 属性:它应该是测试应用中包含的 <a href="https://developer.android.com/reference/android/app/Instrumentation.html"><code>Instrumentation</code></a> 的子类的名称,通常是正在使用的测试运行器,例如 <code>android.support.test.runner.AndroidJUnitRunner</code></li>
-<li>必须定义 <code>android:targetPackage</code> 属性。其值应该设置为接受测试的应用软件包</li>
-</ul></li>
+<li><a href="/compatibility/tests/development/instr-app-e2e.md">针对应用的插桩</a></li>
+<li><a href="/compatibility/tests/development/instr-self-e2e.md">自插桩测试</a></li>
+<li><a href="/compatibility/tests/development/native-func-e2e.md">原生测试</a></li>
 </ul>
 
-<p>对于平台测试,通常有两类插桩测试:</p>
-
-<h3 id="instrumentation_tests_targeting_applications">针对应用的插桩测试</h3>
-
-<p>此类插桩测试与针对常规 Android 应用的测试没有什么不同。值得注意的是,包含插桩的测试应用需要与其针对的应用使用相同的证书进行签名。</p>
-
-<p>要了解详情,请参阅我们的<a href="/compatibility/tests/development/instr-app-e2e.md">端到端示例</a>。</p>
-
-<h3 id="instrumentation_tests_targeting_themselves">针对本身的插桩测试</h3>
-
-<p>如前所述,当启动插桩时,会重启其目标软件包,并且会注入和启动插桩代码以执行测试。一种例外情况是,这里的目标软件包不能是 Android 应用框架本身,即软件包 <code>android</code>,因为这样做会导致出现一种矛盾情况:需要重启 Android 框架,而正是该框架支持系统功能,包括插桩本身。</p>
-
-<p>这意味着,插桩测试无法将本身注入到 Android 框架(也称为系统服务器)以执行测试。为了测试 Android 框架,测试代码只能调用公共 API Surface,或者通过平台源代码树中可用的 <a href="https://developer.android.com/guide/components/aidl.html">AIDL</a> 公开的 API Surface。对于此类测试,针对任何特定软件包都没有意义,因此,按照惯例会将此类插桩声明为针对其自己的测试应用软件包,如其自己的 <code>AndroidManifest.xml</code> 中的 <code>&lt;manifest&gt;</code> 标记所定义。</p>
-
-<p>根据要求,此类测试应用软件包还可以:</p>
-
-<ul>
-<li>捆绑测试所需的 Activity。</li>
-<li>与系统共享用户 ID。</li>
-<li>使用平台密钥进行签名。</li>
-<li>根据框架源代码而不是公共 SDK 进行编译。</li>
-</ul>
-
-<p>此类插桩测试有时称为自插桩。下面是采用平台源代码的此类插桩测试的一些示例:</p>
-<pre class="prettyprint"><code>frameworks/base/core/tests/coretests
-frameworks/base/services/tests/servicestests
-</code></pre>
-<p>要了解详情,请参阅我们的<a href="/compatibility/tests/development/instr-self-e2e.md">端到端示例</a>。</p>
-
-<h2 id="native_tests_for_the_platform">平台的原生测试</h2>
-
-<p>平台测试的原生测试通常会访问较低级别的 HAL,或者针对各种系统服务执行原始 IPC,因此测试方法通常与接受测试的服务密切相关,这超出了本文档的范畴。</p>
-
-<p>强烈建议使用 <a href="https://github.com/google/googletest">gtest</a> 框架编译原生测试,这是与持续测试基础架构集成的先决条件。</p>
-
-<p>下面是采用平台源代码的此类原生测试的一些示例:</p>
-<pre class="prettyprint"><code>frameworks/av/camera/tests
-frameworks/native/libs/gui/tests
-</code></pre>
-<p>要了解详情,请参阅我们的<a href="/compatibility/tests/development/native-func-e2e.md">端到端示例</a>。</p>
-
 <p>请熟悉以下工具,因为它们是在 Android 系统中进行测试所固有的工具。</p>
 
 <h2 id="compatibility_test_suite_cts">兼容性测试套件 (CTS)</h2>
diff --git a/zh-cn/compatibility/vts/codelab-video.html b/zh-cn/compatibility/vts/codelab-video.html
index a414a6d..f4c7e81 100644
--- a/zh-cn/compatibility/vts/codelab-video.html
+++ b/zh-cn/compatibility/vts/codelab-video.html
@@ -22,7 +22,7 @@
       limitations under the License.
   -->
 
-  <p>供应商测试套件 (VTS) 代码实验室和视频教程提供了有关在 Android {{ androidPVersionNumber }} 及 Android 8.1 上运行和开发 VTS 与 CTS-on-GSI 的详细信息。</p>
+  <p>供应商测试套件 (VTS) 代码实验室和视频教程提供了有关在 Android 9 及 Android 8.1 上运行和开发 VTS 与 CTS-on-GSI 的详细信息。</p>
 
   <h2>适用于 Android 9 的视频和代码实验室</h2>
 
@@ -467,4 +467,4 @@
     </tr>
   </tbody></table>
 
-</body></html>
\ No newline at end of file
+</body></html>
diff --git a/zh-cn/compatibility/vts/index.html b/zh-cn/compatibility/vts/index.html
index 33b0293..445c8ed 100644
--- a/zh-cn/compatibility/vts/index.html
+++ b/zh-cn/compatibility/vts/index.html
@@ -26,7 +26,7 @@
 </p>
 
 <ul>
-  <li><a href="/compatibility/vts/codelab-video">Codelab 和视频教程</a>:介绍了有关在 Android {{  androidPVersionNumber }} 和 Android 8.1 上运行和开发 VTS 与 CTS-on-GSI 的视频和 Codelab。</li>
+  <li><a href="/compatibility/vts/codelab-video">Codelab 和视频教程</a>:介绍了有关在 Android 9 和 Android 8.1 上运行和开发 VTS 与 CTS-on-GSI 的视频和 Codelab。</li>
   <li><a href="/compatibility/vts/systems">使用 VTS 进行系统测试</a>:介绍了如何使用 VTS 测试 Android 原生系统实现,如何设置测试环境,然后如何使用 VTS 方案测试补丁程序。</li>
   <li><strong>测试框架</strong>:详细介绍了如何使用 VTS 测试框架,包括:<ul>
     <li><a href="/compatibility/vts/shell-commands">设备 shell 命令</a>:介绍了如何使用设备 shell 命令执行目标端测试二进制文件,如何获取/设置属性、环境变量和系统信息,以及如何启动/停止 Android 框架。</li>
@@ -43,7 +43,7 @@
     <li><a href="/compatibility/vts/ui.html">界面</a>:一个统一的界面,利用 Material Design 有效显示与测试结果、分析和覆盖率相关的信息。</li>
   </ul>
   </li>
-  <li><strong>实验室基础架构</strong>:介绍了在搭载 AOSP <a href="/compatibility/vts/automated-test-infra">常规系统映像 (GSI)</a> 的合作伙伴设备上运行 VTS、CTS 或其他测试的<a href="/setup/build/gsi">自动化测试基础架构</a>所采用的架构。需要<a href="/compatibility/vts/host-controller">主机控制器</a>。
+  <li><strong>实验室基础架构</strong>:介绍了在搭载 AOSP <a href="/setup/build/gsi">常规系统映像 (GSI)</a> 的合作伙伴设备上运行 VTS、CTS 或其他测试的<a href="/compatibility/vts/automated-test-infra">自动化测试基础架构</a>所采用的架构。需要<a href="/compatibility/vts/host-controller">主机控制器</a>。
   </li>
   <li><a href="/compatibility/vts/performance.html">binder 和 hwbinder 性能测试</a>:用于衡量吞吐量和延迟的工具。</li>
 </ul>
@@ -52,4 +52,4 @@
 要了解详情,请参阅 developer.android.com 上的 <a href="https://codelabs.developers.google.com/codelabs/android-vts/#0" class="external">Android VTS Codelab</a> 以及由 Google Developers 制作的 <a href="https://www.youtube.com/watch?v=7BX7oSHc7nk&list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva" class="external">Android VTS 产品视频</a>。
 </p>
 
-</body></html>
\ No newline at end of file
+</body></html>
diff --git a/zh-cn/devices/accessories/index.html b/zh-cn/devices/accessories/index.html
index ed5aa82..7233f24 100644
--- a/zh-cn/devices/accessories/index.html
+++ b/zh-cn/devices/accessories/index.html
@@ -26,15 +26,15 @@
 <div class="layout-content-row">
 
   <div class="layout-content-col span-6">
-        <h4 id="audio-accessories">音频配件</h4>
-        <p>Android 不但支持设备本地音频,而且支持经由 3.5 毫米有线耳机插孔、USB 或蓝牙连接的设备外远程音频。制造商应该查看<a href="headset/index.html">耳机规范</a>,而用户可以了解如何<a href="https://support.google.com/nexus/answer/6127700">使用 USB 主机模式录制和播放音频</a>。</p>
-        <p><a href="audio.html">» 音频配件</a></p>
+        <h2 id="audio-accessories">音频配件</h2>
+        <p>Android 不但支持设备本地音频,而且支持经由 3.5 毫米有线耳机插孔、USB 或蓝牙连接的设备外远程音频。制造商应查看<a href="headset/index.html">耳机规范</a>,而用户可以了解如何<a href="https://support.google.com/nexus/answer/6127700">使用 USB 主机模式录制和播放音频</a>。</p>
+        <p><a href="/devices/accessories/audio">» 音频配件</a></p>
   </div>
 
   <div class="layout-content-col span-6">
-        <h4 id="custom-accessories">自定义配件</h4>
+        <h2 id="custom-accessories">自定义配件</h2>
         <p>您想要将什么配件连接到您的 Android 设备?闹钟?键盘?恒温器?机器人?了解如何使用 Android 开源配件 (AOA) 协议将现有设备或您自己独有的硬件连接到 Android。</p>
-        <p><a href="custom.html">» 自定义配件</a></p>
+        <p><a href="/devices/accessories/custom">» 自定义配件</a></p>
  </div>
 
 </div>
diff --git a/zh-cn/devices/architecture/dto/optimize.html b/zh-cn/devices/architecture/dto/optimize.html
index 0ae1fe5..e194aec 100644
--- a/zh-cn/devices/architecture/dto/optimize.html
+++ b/zh-cn/devices/architecture/dto/optimize.html
@@ -81,14 +81,14 @@
 <h2 id="libufdt">libufdt</h2>
 
 <p>
-  虽然最新的 <code><a href="https://github.com/dgibson/dtc/tree/master/libfdt" class="external">libfdt</a></code> 支持 DTO,但是我们还是建议您使用 <code>libufdt</code> 来实现 DTP(AOSP 源代码位于 <code><a href="https://android.googlesource.com/platform/system/libufdt/+/refs/heads/master" class="external">platform/system/libufdt</a></code> 下)。
+  虽然最新的 <code><a href="https://github.com/dgibson/dtc/tree/master/libfdt" class="external">libfdt</a></code> 支持 DTO,但我们还是建议您使用 <code>libufdt</code> 来实现 DTP(AOSP 源代码位于 <code><a href="https://android.googlesource.com/platform/system/libufdt/+/refs/heads/master" class="external">platform/system/libufdt</a></code> 下)。
   <code>libufdt</code> 会从扁平化设备树 (FDT) 编译真实的树结构(非扁平化设备树,简称“ufdt”<em></em>),从而改善两个 <code>.dtb</code> 文件(从 O(N2) 到 O(N),其中 N 是树中的节点数)的合并效果。
 </p>
 
 <h3 id="performance">性能测试</h3>
 
 <p>
-  在 Google 的内部测试中,进行编译后,在 2405 个 <code>.dtb</code> 和 283 个 <code>.dtbo</code> DT 节点上使用 <code>libufdt</code> 生成了 70618 字节和 8566 字节的文件。与从 FreeBSD 移植的 <a href="http://fxr.watson.org/fxr/source/boot/fdt/" class="external">DTO 实现</a>(运行时为 124 毫秒)相比,<code>libufdt</code> DTO 运行时为 10 毫秒。
+  在 Google 的内部测试中,进行编译后,在 2405 个 <code>.dtb</code> 和 283 个 <code>.dtbo</code> DT 节点上使用 <code>libufdt</code> 生成了 70618 字节和 8566 字节的文件。与从 FreeBSD 移植的 <a href="http://fxr.watson.org/fxr/source/boot/fdt/" class="external">DTO 实现</a>的运行时(为 124 毫秒)形成鲜明对比的是,<code>libufdt</code> DTO 运行时为 10 毫秒。
 </p>
 
 <p>
@@ -147,8 +147,7 @@
 </p>
 
 <p>
-  SoC 供应商必须定义主 DT 的叠加能力;ODM/OEM 只能使用由 SoC 供应商定义的标签附加或覆盖节点。要解决这个问题,您可以在基础 DT 中的根节点下定义一个 <strong><code>odm</code></strong> 节点,使叠加 DT 中的所有 ODM 节点都能够添加新节点。
-或者,您也可以将基础 DT 中的所有 SoC 相关节点放在根节点下的 <strong><code>soc</code></strong> 节点中,如下所述:
+  SoC 供应商必须定义主 DT 的叠加能力;ODM/OEM 只能使用由 SoC 供应商定义的标签附加或覆盖节点。要解决这个问题,您可以在基础 DT 中的根节点下定义一个 <strong><code>odm</code></strong> 节点,使叠加 DT 中的所有 ODM 节点都能够添加新节点。或者,您也可以将基础 DT 中的所有 SoC 相关节点放在根节点下的 <strong><code>soc</code></strong> 节点中,如下所述:
 </p>
 
 <table>
diff --git a/zh-cn/devices/architecture/hidl-cpp/functions.html b/zh-cn/devices/architecture/hidl-cpp/functions.html
index 864b34c..0b03519 100644
--- a/zh-cn/devices/architecture/hidl-cpp/functions.html
+++ b/zh-cn/devices/architecture/hidl-cpp/functions.html
@@ -43,7 +43,7 @@
 
 <p>由于客户端和服务器端函数具有相同的签名,因此服务器端函数必须返回 <code>Return</code> 类型(即使其实现并不会指出传输错误)。<code>Return&lt;T&gt;</code> 对象会使用 <code>Return(myTValue)</code> 进行构建(也可以通过 <code>mTValue</code> 隐式构建,例如在 <code>return</code> 语句中),而 <code>Return&lt;void&gt;</code> 对象则使用 <code>Void()</code> 进行构建。</p>
 
-<p><code>Return&lt;T&gt;</code> 对象可以从其 <code>T</code> 值执行隐式转换,也可以执行到该值的隐式转换。您可以检查 <code>Return</code> 对象是否存在传输错误,只需调用其 <code>isOk()</code> 方法即可。这项检查不是必需的;不过,如果发生了一个错误,而您未在 <code>Return</code> 对象销毁前对该错误进行检查,或尝试进行了 <code>T</code> 值转换,则客户端进程将会终止并记录一个错误。如果 <code>isOk()</code> 表明存在由开发者代码中的逻辑错误(例如将 <code>nullptr</code> 作为同步回调进行传递)导致的传输错误或失败调用,则可以对 Return 对象调用 <code>description()</code> 以返回适合日志记录的字符串。在这种情况下,您无法确定因调用失败而在服务器上执行的代码可能有多少。另外,您还可以使用 <code>isDeadObject()</code> 方法。此方法表明,之所以会显示 <code>!isOk()</code> 是因为远程对象已崩溃或已不存在。<code>isDeadObject()</code> 一律表示 <code>!isOk()</code>。</p>
+<p><code>Return&lt;T&gt;</code> 对象可以从其 <code>T</code> 值执行隐式转换,也可以执行到该值的隐式转换。您可以检查 <code>Return</code> 对象是否存在传输错误,只需调用其 <code>isOk()</code> 方法即可。这项检查不是必需的;不过,如果发生了一个错误,而您未在 <code>Return</code> 对象销毁前对该错误进行检查,或尝试进行了 <code>T</code> 值转换,则客户端进程将会终止并记录一个错误。如果 <code>isOk()</code> 表明存在由开发者代码中的逻辑错误(例如将 <code>nullptr</code> 作为同步回调进行传递)导致的传输错误或失败调用,则可以对 Return 对象调用 <code>description()</code> 以返回适合日志记录的字符串。在这种情况下,您无法确定因调用失败而在服务器上执行的代码可能有多少。另外,您还可以使用 <code>isDeadObject()</code> 方法。此方法表明,之所以会显示 <code>!isOk()</code>,是因为远程对象已崩溃或已不存在。<code>isDeadObject()</code> 一律表示 <code>!isOk()</code>。</p>
 
 <h3 id="return-by">由值返回</h3>
 <p>如果 <code>generates</code> 语句映射到单个 C++ 基元,则参数列表中不会有任何回调参数,而实现会在 <code>Return&lt;T&gt;</code> 对象中提供返回值 <code>T</code>,该值可以从基元类型 <code>T</code> 隐式生成。例如:</p>
diff --git a/zh-cn/devices/architecture/hidl-cpp/index.html b/zh-cn/devices/architecture/hidl-cpp/index.html
index 367d646..e58e216 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 在直通模式下发挥作用(对于旧版设备),您必须具备 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>为了让 HAL 在直通模式下发挥作用(对于旧版设备),您必须具备 HIDL_FETCH_IModuleName 函数(位于 <code>/(system|vendor|...)/lib(64)?<em></em>/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-cpp/types.html b/zh-cn/devices/architecture/hidl-cpp/types.html
index e866a4c..8001aed 100644
--- a/zh-cn/devices/architecture/hidl-cpp/types.html
+++ b/zh-cn/devices/architecture/hidl-cpp/types.html
@@ -222,7 +222,7 @@
 <h2 id="string">字符串</h2>
 <p><code>hidl_string</code> 类(<code>libhidlbase</code> 的一部分)可用于通过 HIDL 接口传递字符串,并在 <code>/system/libhidl/base/include/hidl/HidlSupport.h</code> 下进行定义。该类中的第一个存储位置是指向其字符缓冲区的指针。</p>
 
-<p><code>hidl_string</code> 知道如何使用 <code>operator=</code>、隐式类型转换和 <code>.c_str()</code> 函数转换到 <code>std::string and char*</code>(C 样式的字符串)以及如何从其进行转换。HIDL 字符串结构具有适当的复制构造函数和赋值运算符,可用于:</p>
+<p><code>hidl_string</code> 知道如何使用 <code>operator=</code>、隐式类型转换和 <code>.c_str()</code> 函数转换自或转换到 <code>std::string and char*</code>(C 样式的字符串)。HIDL 字符串结构具有适当的复制构造函数和赋值运算符,可用于:</p>
 
 <ul>
 <li>从 <code>std::string</code> 或 C 字符串加载 HIDL 字符串。</li>
diff --git a/zh-cn/devices/architecture/hidl/code-style.html b/zh-cn/devices/architecture/hidl/code-style.html
index 8629da7..0d8aa9e 100644
--- a/zh-cn/devices/architecture/hidl/code-style.html
+++ b/zh-cn/devices/architecture/hidl/code-style.html
@@ -46,12 +46,14 @@
 
     /**
      * This is a <a href="#comments">multiline docstring</a>.
+     *
      * <a href="#return">@return</a> result 0 if successful, nonzero otherwise.
      */
      <a href="#function-declarations">foo() generates (FooStatus result);</a>
 
     /**
      * Restart controller by power cycle.
+     *
      * <a href="#param">@param</a> bar callback interface that…
      * @return result 0 if successful, nonzero otherwise.
      */
@@ -62,6 +64,7 @@
 
     /**
      * The bar function.
+     *
      * <a href="#param">@param</a> <a href="#functions">clientCallback</a> callback after function is called
      * @param baz related baz object
      * @param data input data blob
@@ -133,12 +136,13 @@
 <li><code><var>ROOT-DIRECTORY</var></code> 为:
   <ul>
   <li><code>hardware/interfaces</code>(如果是核心 HIDL 软件包)。</li>
-  <li><code>vendor/<var>VENDOR</var>/interfaces</code>(如果是供应商软件包),其中 <code><var>VENDOR</var></code> 指 SoC 供应商或 OEM/原始设计制造商 (ODM)。</li>
+  <li><code>vendor/<var>VENDOR</var>/interfaces</code>(如果是供应商软件包),其中 <code><var>VENDOR</var></code>
+指 SoC 供应商或原始设备制造商 (OEM)/原始设计制造商 (ODM)。</li>
   </ul>
   </li>
 <li><code><var>MODULE</var></code> 应该是一个描述子系统的小写字词(例如 <code>nfc</code>)。如果需要多个字词,请使用嵌套式 <code><var>SUBMODULE</var></code>。可以嵌套多层。</li>
-<li><code><var>VERSION</var></code> 应该与<a href="#versions">版本</a>中所述的版本完全相同 (major.minor)。</li>
-<li><code>I<var>INTERFACE_X</var></code> 应该是含有 <code>UpperCamelCase</code>/<code>PascalCase</code> 的接口名称(例如 <code>INfc</code>),如<a href="#interface-names">接口名称</a>中所述。</li>
+<li><code><var>VERSION</var></code> 应该与<a href="#versions">版本</a>中所述的版本 (major.minor) 完全相同。</li>
+<li>如<a href="#interface-names">接口名称</a>中所述,<code>I<var>INTERFACE_X</var></code> 应该是含有 <code>UpperCamelCase</code>/<code>PascalCase</code> 的接口名称(例如 <code>INfc</code>)。</li>
 </ul>
 
 <p>例如:</p>
@@ -175,7 +179,7 @@
 <li><code><var>PACKAGE</var></code> 是映射到 <code><var>ROOT-DIRECTORY</var></code> 的软件包。具体来说,<code><var>PACKAGE</var></code> 是:
   <ul>
   <li><code>android.hardware</code>(如果是核心 HIDL 软件包)(映射到 <code>hardware/interfaces</code>)。</li>
-  <li><code>vendor.<var>VENDOR</var>.hardware</code>(如果是供应商软件包),其中 <code><var>VENDOR</var></code> 指 SoC 供应商或原始设备制造商 (OEM)/原始设计制造商 (ODM)(映射到 <code>vendor/<var>VENDOR</var>/interfaces</code>)。</li>
+  <li><code>vendor.<var>VENDOR</var>.hardware</code>(如果是供应商软件包),其中 <code><var>VENDOR</var></code> 指 SoC 供应商或 OEM/ODM(映射到 <code>vendor/<var>VENDOR</var>/interfaces</code>)。</li>
   </ul>
 </li><li><code><var>MODULE</var>[.<var>SUBMODULE</var>[.<var>SUBMODULE</var>[…]]]@<var>VERSION</var></code> 与<a href="#dir-structure">目录结构</a>中所述结构内的文件夹名称完全相同。</li>
 <li>软件包名称应为小写。如果软件包名称包含多个字词,则这些字词应用作子模块或以 <code>snake_case</code> 形式书写。
@@ -195,7 +199,7 @@
 <p>MAJOR 和 MINOR 版本都应该是一个整数。<var></var><var></var>HIDL 使用<a href="http://semver.org/" class="external">语义化版本编号</a>规则。</p>
 
 <h3 id="imports">导入</h3>
-<p>导入采用以下 3 种格式之一:</p>
+<p>导入采用以下三种格式之一:</p>
 <ul>
 <li>完整软件包导入:<code>import <var>PACKAGE-NAME</var>;</code></li>
 <li>部分导入:<code>import
@@ -380,6 +384,7 @@
 interface IFooController {
     /**
      * Opens the controller.
+     *
      * @return status HAL_FOO_OK if successful.
      */
     open() generates (FooStatus status);
@@ -400,6 +405,7 @@
 <pre class="prettyprint">
 /**
  * Explain what foo does.
+ *
  * @param arg1 explain what arg1 is
  * @param arg2 explain what arg2 is
  * @return ret1 explain what ret1 is
diff --git a/zh-cn/devices/architecture/hidl/types.html b/zh-cn/devices/architecture/hidl/types.html
index ca597e5..6ff875d 100644
--- a/zh-cn/devices/architecture/hidl/types.html
+++ b/zh-cn/devices/architecture/hidl/types.html
@@ -171,7 +171,7 @@
 <p>当您调用传递(或返回)<code>hidl_handle</code> 对象(复合类型的顶级或一部分)的 HIDL 接口方法时,其中包含的文件描述符的所有权如下所述:</p>
 
 <ul>
-<li>将 <code>hidl_handle</code> 对象作为参数传递的<strong>调用程序</strong>会保留对它所封装的 <code>native_handle_t</code> 中包含的文件描述符的所有权;在对这些文件描述符完成操作后,该调用程序必须将其关闭。</li>
+<li>将 <code>hidl_handle</code> 对象作为参数传递的<strong>调用程序</strong>会保留对其封装的 <code>native_handle_t</code> 中包含的文件描述符的所有权;在对这些文件描述符完成操作后,该调用程序必须将其关闭。</li>
 <li>返回 <code>hidl_handle</code> 对象(通过将其传递到 <code>_cb</code> 函数)的<strong>进程</strong>会保留对相应对象封装的 <code>native_handle_t</code> 中包含的文件描述符的所有权;在对这些文件描述符完成操作后,该进程必须将其关闭。
 </li>
 <li>接收 <code>hidl_handle</code> 的 <strong>transport</strong> 拥有对相应对象封装的 <code>native_handle_t</code> 中的文件描述符的所有权;接收器可在事务回调期间按原样使用这些文件描述符,但如果想在回调完成后继续使用这些文件描述符,则必须克隆原生句柄。事务完成时,transport 将自动对文件描述符执行 <code>close()</code> 操作。</li>
diff --git a/zh-cn/devices/architecture/hidl/versioning.html b/zh-cn/devices/architecture/hidl/versioning.html
index 518daf0..f100c91 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>
 
@@ -273,8 +273,8 @@
 </pre>
 
 <ul>
-<li>插入 <strong><code>S</code></strong> 后得到 <code>[email protected]::S</code>,并可在 <code>bar/1.0/types.hal</code> 中找到它(因为 <code>types.hal</code> 是自动导入的)。</li>
-<li>使用规则 2 插入 <strong><code>IFooCallback</code></strong> 后得到 <code>[email protected]::IFooCallback</code>,但无法找到它,因为 <code>bar/1.0/IFooCallback.hal</code> 不是自动导入的(<code>types.hal</code> 是自动导入的)。因此,规则 3 会将其解析为 <code>[email protected]::IFooCallback</code>(通过 <code>import [email protected];</code> 导入)。</li>
+<li>内插 <strong><code>S</code></strong> 后得到 <code>[email protected]::S</code>,并可在 <code>bar/1.0/types.hal</code> 中找到它(因为 <code>types.hal</code> 是自动导入的)。</li>
+<li>使用规则 2 内插 <strong><code>IFooCallback</code></strong> 后得到 <code>[email protected]::IFooCallback</code>,但无法找到它,因为 <code>bar/1.0/IFooCallback.hal</code> 不是自动导入的(<code>types.hal</code> 是自动导入的)。因此,规则 3 会将其解析为 <code>[email protected]::IFooCallback</code>(通过 <code>import [email protected];</code> 导入)。</li>
 </ul>
 
 <h2 id="types">types.hal</h2>
diff --git a/zh-cn/devices/architecture/kernel/modular-kernels.html b/zh-cn/devices/architecture/kernel/modular-kernels.html
index 8826481..12b5e86 100644
--- a/zh-cn/devices/architecture/kernel/modular-kernels.html
+++ b/zh-cn/devices/architecture/kernel/modular-kernels.html
@@ -196,16 +196,16 @@
 <h3 id="early-mounting-partitions-vboot-1-0">提前装载分区 (VBoot 1.0)</h3>
 <p>使用 VBoot 1.0 提前装载分区的要求包括:</p>
 <ol>
-<li>设备节点路径必须在 <em>fstab</em> 和设备树条目中使用其 by-name 符号链接。<code>fstab</code>例如,确保对分区进行命名且设备节点为 <code>/dev/block/…./by-name/{system,vendor,odm}</code>,而不是使用 <code>/dev/block/mmcblk0pX</code> 指定分区。
+<li>设备节点路径必须在 <code>fstab</code> 和设备树条目中使用其 by-name 符号链接。<em></em>例如,确保对分区进行命名且设备节点为 <code>/dev/block/…./by-name/{system,vendor,odm}</code>,而不是使用 <code>/dev/block/mmcblk0pX</code> 指定分区。
 </li>
-<li>在产品的设备配置中(即 <code>device/<em>oem</em>/<em>project</em>/device.mk</code> 中)为 <code>PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION</code> 和 <code>CUSTOM_IMAGE_VERITY_BLOCK_DEVICE</code> 指定的路径必须与 <code>fstab</code>/设备树条目中相应块设备节点指定的 by-name 相匹配。<em></em>例如:<pre class="prettyprint">
+<li>在产品的设备配置中(即 <code>device/<em>oem</em>/<em>project</em>/device.mk</code> 中)为 <code>PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION</code> 和 <code>CUSTOM_IMAGE_VERITY_BLOCK_DEVICE</code> 指定的路径必须与 <code>fstab</code> 设备树条目中相应块设备节点指定的 by-name 相匹配。<em></em>例如:<pre class="prettyprint">
 PRODUCT_SYSTEM_VERITY_PARTITION := /dev/block/…./by-name/system
 PRODUCT_VENDOR_VERITY_PARTITION := /dev/block/…./by-name/vendor
 CUSTOM_IMAGE_VERITY_BLOCK_DEVICE := /dev/block/…./by-name/odm
 </pre>
 </li>
 <li>通过设备树叠加层提供的条目不得在 <code>fstab</code> 文件片段中出现重复。例如,指定某个条目以在设备树中装载 <code>/vendor</code> 时,<code>fstab</code> 文件不得重复该条目。</li>
-<li><strong>不得</strong>提前装载需要 <code>verifyatboot</code> 的分区(此操作不受支持)。</li>
+<li><code>verifyatboot</code>提前装载需要 <strong>verifyatboot</strong> 的分区(此操作不受支持)。</li>
 <li>必须在内核命令行中使用 <code>androidboot.veritymode</code> 选项指定验证分区的真实模式/状态(现有要求)。</li>
 </ol>
 
diff --git a/zh-cn/devices/architecture/vintf/dm.html b/zh-cn/devices/architecture/vintf/dm.html
index d067196..16bc9a0 100644
--- a/zh-cn/devices/architecture/vintf/dm.html
+++ b/zh-cn/devices/architecture/vintf/dm.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>
@@ -100,7 +100,7 @@
 <li>在设备清单文件中修改 HAL 版本。</li>
 <li>在设备清单文件中修改目标 FCM 版本。</li>
 <li>移除已弃用的 HAL 版本。</li>
-<li>对于搭载版本 9 或更低版本的设备,先择优挑选以下 CL,然后再生成 OTA 更新程序包:
+<li>对于搭载 Android 9 或更低版本的设备,先择优挑选以下 CL,然后再生成 OTA 更新程序包:
   <ul>
     <li><a href="https://android-review.googlesource.com/722283">CL 722283</a></li>
     <li><a href="https://android-review.googlesource.com/722284">CL 722284</a></li>
diff --git a/zh-cn/devices/architecture/vintf/match-rules.html b/zh-cn/devices/architecture/vintf/match-rules.html
index 22259b6..ada9818 100644
--- a/zh-cn/devices/architecture/vintf/match-rules.html
+++ b/zh-cn/devices/architecture/vintf/match-rules.html
@@ -32,8 +32,8 @@
 <p>HAL 匹配规则可以识别清单文件中被视为受相应兼容性矩阵的所有者支持的 <code>hal</code> 元素的版本。</p>
 <ul>
 <li>多个 <code>&lt;hal&gt;</code> 元素具有 <strong>AND</strong> 关系。</li>
-<li>同一个 <code>&lt;version&gt;</code> 中的多个 <code>&lt;hal&gt;</code> 元素具有 <strong>OR</strong> 关系。如果指定了两个或两个以上版本,则只需要实现其中一个版本(请参见下面的 DRM 示例)。</li>
-<li>同一个 <code>&lt;instance&gt;</code> 中的多个 <code>&lt;regex-instance&gt;</code> 和 <code>&lt;hal&gt;</code> 元素具有 <strong>AND</strong> 关系(请参见下面的 DRM 示例)。</li>
+<li>同一个 <code>&lt;hal&gt;</code> 中的多个 <code>&lt;version&gt;</code> 元素具有 <strong>OR</strong> 关系。如果指定了两个或两个以上版本,则只需要实现其中一个版本(请参见下面的 DRM 示例)。</li>
+<li>同一个 <code>&lt;hal&gt;</code> 中的多个 <code>&lt;instance&gt;</code> 和 <code>&lt;regex-instance&gt;</code> 元素具有 <strong>AND</strong> 关系(请参见下面的 DRM 示例)。</li>
 </ul>
 
 <h4><strong>示例</strong>:相机模块的成功 HAL 匹配</h4>
@@ -257,7 +257,7 @@
 </li>
 </ul>
 
-<p>引导加载程序或 Android 操作系统可能包含 <code>libavb</code> 库的两个副本,每个副本具有不同的 MAJOR 版本,用于升级设备和启动设备。<em></em><em></em>在这种情况下,可以共享同一个未签名的系统映像,但最终的签名系统映像则不同(它具有不同的 <code>avb.vbmeta-version</code>):</p>
+<p>引导加载程序或 Android 操作系统可能包含 <code>libavb</code> 库的两个副本,每个副本具有不同的 MAJOR 版本,用于升级设备和启动设备。<em></em><em></em>在这种情况下,可以共享同一个未签名的系统映像,但最终的签名系统映像则不同(具有不同的 <code>avb.vbmeta-version</code>):</p>
 
 <img src="../images/treble_vintf_avb_o_p.png"/>
 <figcaption><strong>图 1. </strong>AVB 版本匹配(<code>/system</code> 为 P,其他所有分区均为 O)。</figcaption>
diff --git a/zh-cn/devices/architecture/vintf/objects.html b/zh-cn/devices/architecture/vintf/objects.html
index 6fd46c8..9e9fcd4 100644
--- a/zh-cn/devices/architecture/vintf/objects.html
+++ b/zh-cn/devices/architecture/vintf/objects.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
@@ -24,12 +25,38 @@
 </p>
 
 <h2 id="device-manifest-file">设备清单</h2>
-<p>设备清单(由设备提供)包含供应商清单和 ODM 清单:</p>
+<p>设备清单(由设备提供)包含供应商清单和 ODM 清单。</p>
 
 <ul>
-<li>供应商清单会指定 SoC 通用的 HAL、VNDK 版本等信息。建议将其放置在 Android 源代码树的 <code>device/${VENDOR}/${DEVICE}/manifest.xml</code> 中,但可以使用多个片段文件。有关详情,请参阅<a href="/devices/architecture/vintf/resources.html#manifest-fragments">从片段生成设备清单</a>。
+<li>供应商清单会指定 SoC 通用的 HAL、VNDK 版本等信息。建议将其放置在 Android 源代码树的 <code>device/<var>VENDOR</var>/<var>DEVICE</var>/manifest.xml</code> 中,但可以使用多个片段文件。如需了解详情,请参阅<a href="/devices/architecture/vintf/resources.html#manifest-fragments">从片段生成设备清单</a>。
 </li>
-<li>ODM 清单会覆盖供应商清单,并列出产品专用的 HAL。</li>
+<li>ODM 清单列出了产品专用的 HAL。VINTF 对象会从以下文件加载 ODM 清单:
+  <ol>
+    <li><code>/odm/etc/vintf/manifest_<var>SKU</var>.xml</code>(如果定义了 <code><var>SKU</var></code>,其中 <code><var>SKU</var></code> 是属性 <code>ro.boot.product.hardware.sku</code> 的值)
+    </li>
+    <li><code>/odm/etc/vintf/manifest.xml</code></li>
+    <li><code>/odm/etc/manifest_<var>SKU</var>.xml</code>(如果定义了 <code><var>SKU</var></code>)</li>
+    <li><code>/odm/etc/manifest.xml</code></li>
+  </ol>
+</li>
+<li>VINTF 对象会按如下方式加载设备清单:
+  <ol>
+    <li>如果存在 <code>/vendor/etc/vintf/manifest.xml</code>,则合并以下内容:
+      <ol>
+        <li><code>/vendor/etc/vintf/manifest.xml</code></li>
+        <li>可选的供应商清单片段</li>
+        <li>可选的 ODM 清单</li><li>可选的 ODM 清单片段</li>
+      </ol>
+    </li><li>如果存在 ODM 清单,则将 ODM 清单与可选的 ODM 清单片段合并在一起。</li>
+    <li><code>/vendor/manfiest.xml</code>(旧版,无片段)</li>
+  </ol>
+请注意:
+  <ul>
+    <li>在旧版设备上,使用旧版供应商清单和 ODM 清单。ODM 清单可能会完全覆盖旧版供应商清单。</li>
+    <li>在搭载 Android 9 的设备上,ODM 清单会与供应商清单合并。</li>
+    <li>合并清单列表时,列表中后出现的清单可能会覆盖列表中先有清单中的标记,但前提是后出现的清单中的标记具有 <code>override="true"</code> 属性。例如,ODM 清单可能会覆盖供应商清单中的某些 <code>&lt;hal&gt;</code> 标记。请参阅下面的属性 <code>override</code> 文档。</li>
+  </ul>
+</li>
 </ul>
 
 <p>此设置可让采用相同开发板的多个产品共用同一个供应商映像(用于提供通用 HAL),但具有不同的 ODM 映像(用于指定产品专用的 HAL)。</p>
@@ -106,6 +133,7 @@
 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
 &lt;!-- Comments, Legal notices, etc. here --&gt;
 &lt;manifest version="1.0" type="device"&gt;
+    &lt;!-- camera 3.4 in vendor manifest is ignored --&gt;
     &lt;hal override="true"&gt;
         &lt;name&gt;android.hardware.camera&lt;/name&gt;
         &lt;transport&gt;hwbinder&lt;/transport&gt;
@@ -115,6 +143,7 @@
             &lt;instance&gt;legacy/0&lt;/instance&gt;
         &lt;/interface&gt;
     &lt;/hal&gt;
+    &lt;!-- NFC is disabled --&gt;
     &lt;hal override="true"&gt;
         &lt;name&gt;android.hardware.nfc&lt;/name&gt;
         &lt;transport&gt;hwbinder&lt;/transport&gt;
@@ -189,7 +218,7 @@
 </pre>
 
 <h2 id="manifest-file-schema">清单文件架构</h2>
-<p>这一部分介绍了下列 XML 标记的含义。Android 源代码树中的源文件中可以缺少某些“必需”的标记,这些标记可以在编译时由 <code><a href="/devices/architecture/vintf/resources.html#assemble_vintf">assemble_vintf</a></code> 写入。设备上的相应文件中必须有“必需”的标记。</p>
+<p>本部分介绍这些 XML 标记的含义。Android 源代码树中的源文件中可能缺少某些“必需”标记,这些标记会在编译时由 <code><a href="/devices/architecture/vintf/resources.html#assemble_vintf">assemble_vintf</a></code> 写入。设备上的相应文件中必须有“必需”标记。</p>
 
 <dl>
 <dt><code>?xml</code></dt>
@@ -234,7 +263,7 @@
  </ul>
 </dd>
 <dt><code>manifest.hal.version</code></dt>
-<dd>选用且可重复。清单中 <code>hal</code> 标记的版本。格式为 <code><var>MAJOR</var>.<var>MINOR</var></code>。有关示例,请参阅 <code>hardware/interfaces</code>、<code>vendor/${VENDOR}/interfaces</code>、<code>framework/hardware/interfaces</code> 或 <code>
+<dd>选用且可重复。清单中 <code>hal</code> 标记的版本,格式为 <code><var>MAJOR</var>.<var>MINOR</var></code>。有关示例,请参阅 <code>hardware/interfaces</code>、<code>vendor/${VENDOR}/interfaces</code>、<code>framework/hardware/interfaces</code> 或 <code>
 system/hardware/interfaces</code>。
 <br /><br />
 HIDL 和本机 HAL 可以使用多个版本字段,前提是它们代表<strong>不同的 Major 版本</strong>,并且提供的每个 Major 版本只有一个 Minor 版本。例如,3.1 和 3.2 不能共存,但 1.0 和 3.4 可以共存。这适用于所有同名的 <code>hal</code> 元素,除非 <code>override="true"</code>。</dd>
diff --git a/zh-cn/devices/architecture/vndk/abi-stability.html b/zh-cn/devices/architecture/vndk/abi-stability.html
index 748d4a1..eee6e24 100644
--- a/zh-cn/devices/architecture/vndk/abi-stability.html
+++ b/zh-cn/devices/architecture/vndk/abi-stability.html
@@ -50,7 +50,7 @@
 </ul>
 
 <p>
-共享库的公开标头是指通过以下属性提供给其他库/二进制文件使用的标头<em></em>:与共享库对应的模块的 <code>Android.bp</code> 定义中的 <code>export_include_dirs</code>、<code>export_header_lib_headers</code>、<code>export_static_lib_headers</code>、<code>export_shared_lib_headers</code> 和 <code>export_generated_headers</code> 属性。
+<em></em>共享库的公开标头是指通过以下属性提供给其他库/二进制文件使用的标头:与共享库对应的模块的 <code>Android.bp</code> 定义中的 <code>export_include_dirs</code>、<code>export_header_lib_headers</code>、<code>export_static_lib_headers</code>、<code>export_shared_lib_headers</code> 和 <code>export_generated_headers</code> 属性。
 </p>
 
 <h3 id="about-reachable-types">关于可到达类型</h3>
@@ -410,7 +410,7 @@
 </pre>
 
 <p>
-该命令指示 <code>header-abi-dumper</code> 解析 <code>foo.cpp</code> 并发出 ABI 信息(显示在 <code>exported</code> 目录内的公开标头中)。下面是 <code>header-abi-dumper</code> 生成的 <strong><code>foo.sdump</code></strong> 中的一部分(并非完整内容):
+该命令指示 <code>header-abi-dumper</code> 解析 <code>foo.cpp</code> 并发出 ABI 信息(显示在 <code>exported</code> 目录内的公开标头中)。下面是 <code>header-abi-dumper</code> 生成的 <strong><code>foo.sdump</code></strong> 中的一部分(并非完整内容表示):
 </p>
 
 <pre class="prettyprint">
diff --git a/zh-cn/devices/architecture/vndk/build-system.html b/zh-cn/devices/architecture/vndk/build-system.html
index 591669f..e6f00aa 100644
--- a/zh-cn/devices/architecture/vndk/build-system.html
+++ b/zh-cn/devices/architecture/vndk/build-system.html
@@ -20,199 +20,209 @@
       limitations under the License.
   -->
 
-<p>编译系统在 Android 8.1 中具有内置的 VNDK 支持。如果启用了 VNDK 支持,编译系统就会检查各模块之间的依赖关系,为供应商模块编译特定于供应商的变体,并自动将这些模块安装到指定目录中。</p>
+<p>
+在 Android 8.1 及更高版本中,编译系统具有内置的 VNDK 支持。如果启用了 VNDK 支持,编译系统就会检查各模块之间的依赖关系,为供应商模块编译特定于供应商的变体,并自动将这些模块安装到指定目录中。
+</p>
 
-<p>以下示例演示了基本概念:</p>
+<h2 id="vndk-build-support-example">VNDK 编译支持示例</h2>
 
-<p><img src="../images/treble_vndk_androidbp.png" alt="具有 vendor_available:true 和 vndk.enabled:true 的 libexample"/></p>
-<figcaption><strong>图 1.</strong> 启用 VNDK 支持。</figcaption>
+<p>
+在此示例中,<code>Android.bp</code> 模块定义定义了一个名为 <code>libexample</code> 的库。<code>vendor_available</code> 属性表示框架模块和供应商模块均可能依赖于 <code>libexample</code>。
+</p>
 
-<p><code>Android.bp</code> 模块定义定义了一个名为 <code>libexample</code> 的库。<code>vendor_available</code> 属性表示框架模块和供应商模块均可能依赖于 <code>libexample</code>。在本示例中,框架可执行文件 <code>/system/bin/foo</code> 和供应商可执行文件 <code>/vendor/bin/bar</code> 均依赖于 <code>libexample</code>,并且在其 <code>shared_libs</code> 属性中具有 <code>libexample</code>。</p>
+<p>
+  <img src="../images/treble_vndk_androidbp.png" alt="具有 vendor_available:true 和 vndk.enabled:true 的 libexample"/>
+</p>
+<figcaption>
+  <strong>图 1.</strong> 已启用 VNDK 支持
+</figcaption>
 
-<p>如果框架模块和供应商模块均使用 <code>libexample</code>,则编译 <code>libexample</code> 的两个变体。核心变体(以 <code>libexample</code> 命名)由框架模块使用,供应商变体(以 <code>libexample.vendor</code> 命名)由供应商模块使用。</p>
+<p>
+框架可执行文件 <code>/system/bin/foo</code> 和供应商可执行文件 <code>/vendor/bin/bar</code> 均依赖于 <code>libexample</code>,并且在其 <code>shared_libs</code> 属性中具有 <code>libexample</code>。
+</p>
 
-<p>这两个变体将安装到不同的目录中。核心变体将安装到 <code>/system/lib[64]/libexample.so</code> 中。供应商变体将安装到 <code>/system/lib[64]/vndk/libexample.so</code> 中,因为 <code>vndk.enabled</code> 为 <code>true</code>。</p>
+<p>
+如果框架模块和供应商模块均使用 <code>libexample</code>,则编译 <code>libexample</code> 的两个变体。核心变体(以 <code>libexample</code> 命名)由框架模块使用,供应商变体(以 <code>libexample.vendor</code> 命名)由供应商模块使用。这两个变体将安装到不同的目录中。
+</p>
 
-<p>有关更多详情,请参阅<a href="#module-definition">模块定义</a>。</p>
+<ul>
+  <li>核心变体将安装到 <code>/system/lib[64]/libexample.so</code> 中。</li>
+  <li>供应商变体将安装到 <code>/system/lib[64]/vndk/libexample.so</code> 中,因为 <code>vndk.enabled</code> 为 <code>true</code>。</li>
+</ul>
 
-<h2 id="configuration">配置</h2>
+<p>
+如需了解详情,请参阅<a href="#module-definition">模块定义</a>。
+</p>
 
-<p>要为产品设备启用完整编译系统支持,请将 <code>BOARD_VNDK_VERSION</code> 添加到 <code>BoardConfig.mk</code>:</p>
+<h2 id="configuring-build-support">配置编译支持</h2>
+
+<p>
+要为产品设备启用完整编译系统支持,请将 <code>BOARD_VNDK_VERSION</code> 添加到 <code>BoardConfig.mk</code>:
+</p>
 
 <pre class="prettyprint">BOARD_VNDK_VERSION := current</pre>
 
-<h3 id="migration-notes">迁移备注</h3>
-
-<p>将 <code>BOARD_VNDK_VERSION</code> 添加到 <code>BoardConfig.mk</code> 会产生全局效应。如果是在 <code>BoardConfig.mk</code> 中定义,系统会检查所有模块。没有将违规模块列入黑名单或白名单的机制。建议您在清除所有不必要的依赖项后再添加 <code>BOARD_VNDK_VERSION</code>。</p>
-
-<p>在迁移过程中,您可以通过在环境变量中设置 <code>BOARD_VNDK_VERSION</code> 来测试和编译模块:</p>
+<p>
+此设置会产生<strong>全局</strong>效应:如果在 <code>BoardConfig.mk</code> 中定义,系统会检查所有模块。由于没有将违规模块列入黑名单或白名单的机制,因此在添加 <code>BOARD_VNDK_VERSION</code> 之前应清除所有不必要的依赖项。您可以通过在环境变量中设置 <code>BOARD_VNDK_VERSION</code> 来测试和编译模块:
+</p>
 
 <pre class="prettyprint">$ BOARD_VNDK_VERSION=current m module_name.vendor</pre>
 
-<p>而另一个副作用是,默认的全局标头搜索路径会被移除。<em></em>如果启用 <code>BOARD_VNDK_VERSION</code>,则在默认情况下,系统不会添加以下默认标头搜索路径:</p>
+<p>如果启用 <code>BOARD_VNDK_VERSION</code>,系统会移除多个默认的全局标头搜索路径。<em></em>其中包括:
+</p>
 
 <ul>
- <li>frameworks/av/include</li>
- <li>frameworks/native/include</li>
- <li>frameworks/native/opengl/include</li>
- <li>hardware/libhardware/include</li>
- <li>hardware/libhardware_legacy/include</li>
- <li>hardware/ril/include</li>
- <li>libnativehelper/include</li>
- <li>libnativehelper/include_deprecated</li>
- <li>system/core/include</li>
- <li>system/media/audio/include</li>
+ <li><code>frameworks/av/include</code></li>
+ <li><code>frameworks/native/include</code></li>
+ <li><code>frameworks/native/opengl/include</code></li>
+ <li><code>hardware/libhardware/include</code></li>
+ <li><code>hardware/libhardware_legacy/include</code></li>
+ <li><code>hardware/ril/include</code></li>
+ <li><code>libnativehelper/include</code></li>
+ <li><code>libnativehelper/include_deprecated</code></li>
+ <li><code>system/core/include</code></li>
+ <li><code>system/media/audio/include</code></li>
 </ul>
 
-<p>如果某个模块依赖于这些目录中的标头,则其作者必须明确指定与 <code>header_libs</code>、<code>static_libs</code> 和/或 <code>shared_libs</code> 的依赖关系。</p>
+<p>
+如果某个模块依赖于上述目录中的标头,则您必须明确指定与 <code>header_libs</code>、<code>static_libs</code> 和/或 <code>shared_libs</code> 的依赖关系。
+</p>
 
 <h2 id="module-definition">模块定义</h2>
 
-<p>要使用 <code>BOARD_VNDK_VERSION</code> 编译 Android,开发者必须在 <code>Android.mk</code> 或 <code>Android.bp</code> 中修改其模块定义。本小节介绍了不同种类的模块定义,一些与 VNDK 相关的模块属性,以及在编译系统中实现的依赖性检查。</p>
+<p>
+要使用 <code>BOARD_VNDK_VERSION</code> 编译 Android,您必须在 <code>Android.mk</code> 或 <code>Android.bp</code> 中修改模块定义。此部分介绍了不同种类的模块定义,一些与 VNDK 相关的模块属性,以及在编译系统中实现的依赖性检查。
+</p>
 
 <h3 id="vendor-modules">供应商模块</h3>
 
-<p>供应商模块是特定于供应商的可执行文件或共享库(必须将这些模块安装到供应商分区中)。在 <code>Android.bp</code> 文件中,供应商模块必须将供应商或专有属性设置为 <code>true</code>。在 <code>Android.mk</code> 文件中,供应商模块必须将 <code>LOCAL_VENDOR_MODULE</code> 或 <code>LOCAL_PROPRIETARY_MODULE</code> 设置为 <code>true</code>。</p>
+<p>
+供应商模块是特定于供应商的可执行文件或共享库(必须将这些模块安装到供应商分区中)。在 <code>Android.bp</code> 文件中,供应商模块必须将供应商或专有属性设置为 <code>true</code>。在 <code>Android.mk</code> 文件中,供应商模块必须将 <code>LOCAL_VENDOR_MODULE</code> 或 <code>LOCAL_PROPRIETARY_MODULE</code> 设置为 <code>true</code>。
+</p>
 
-<p>如果定义了 <code>BOARD_VNDK_VERSION</code>,则编译系统不允许在供应商模块和框架模块之间建立依赖关系。在以下情况下,编译系统会发出错误:</p>
+<p>
+如果定义了 <code>BOARD_VNDK_VERSION</code>,则编译系统不允许在供应商模块和框架模块之间建立依赖关系,并且编译系统会在以下情况下发出错误:
+</p>
 
 <ul>
  <li>不具有 <code>vendor:true</code> 的模块依赖于具有 <code>vendor:true</code> 的模块,或</li>
-
  <li>具有 <code>vendor:true</code> 的模块依赖于既不具有 <code>vendor:true</code> 也不具有 <code>vendor_available:true</code> 的非 <code>llndk_library</code> 模块。</li>
 </ul>
 
-<p>前面提到的依赖性检查适用于 <code>Android.bp</code> 中的 <code>header_libs</code>、<code>static_libs</code> 和 <code>shared_libs</code>,也适用于 <code>Android.mk</code> 中的 <code>LOCAL_HEADER_LIBRARIES</code>、<code>LOCAL_STATIC_LIBRARIES</code> 和 <code>LOCAL_SHARED_LIBRARIES</code>。</p>
+<p>
+依赖性检查适用于 <code>Android.bp</code> 中的 <code>header_libs</code>、<code>static_libs</code> 和 <code>shared_libs</code> 以及 <code>Android.mk</code> 中的 <code>LOCAL_HEADER_LIBRARIES</code>、<code>LOCAL_STATIC_LIBRARIES</code> 和 <code>LOCAL_SHARED_LIBRARIES</code>。
+</p>
 
 <h3 id="ll-ndk">LL-NDK</h3>
 
-<p>LL-NDK 共享库是具有稳定 ABI 的共享库。框架模块和供应商模块均具有相同的最新实现。对于每个 LL-NDK 共享库,<code>Android.bp</code> 文件中都有 <code>llndk_library</code> 模块定义:</p>
+<p>
+LL-NDK 共享库是具有稳定 ABI 的共享库。框架模块和供应商模块均具有相同的最新实现。对于每个 LL-NDK 共享库,<code>Android.bp</code> 都包含一个 <code>llndk_library</code> 模块定义:
+</p>
 
-<pre class="prettyprint">llndk_library {
+<pre class="prettyprint">
+llndk_library {
     name: "libvndksupport",
     symbol_file: "libvndksupport.map.txt",
-}</pre>
+}
+</pre>
 
-<p>该模块定义指定了模块名称和符号文件,后者描述了应该对供应商模块可见的符号。例如:</p>
+<p>
+该模块定义指定了模块名称和符号文件,后者描述了对供应商模块可见的符号。例如:
+</p>
 
-<pre class="prettyprint">LIBVNDKSUPPORT {
+<pre class="prettyprint">
+LIBVNDKSUPPORT {
   global:
     android_load_sphal_library; # vndk
     android_unload_sphal_library; # vndk
   local:
     *;
-};</pre>
+};
+</pre>
 
-<p>编译系统会根据符号文件为供应商模块生成存根共享库。如果启用了 <code>BOARD_VNDK_VERSION</code>,供应商模块将与这些存根共享库建立关联。</p>
-
-<p>只有在满足以下条件时,存根共享库中才会包含符号:</p>
+<p>
+编译系统会根据符号文件为供应商模块生成存根共享库。如果启用了 <code>BOARD_VNDK_VERSION</code>,供应商模块将与这些存根共享库建立关联。只有在满足以下条件时,存根共享库中才会包含符号:
+</p>
 
 <ul>
- <li>它未在以 <code>_PRIVATE</code> 或 <code>_PLATFORM</code> 结尾的部分中定义。</li>
-
+ <li>它未在以 <code>_PRIVATE</code> 或 <code>_PLATFORM</code> 结尾的部分中定义,</li>
  <li>它不含 <code>#platform-only</code> 标记,并且</li>
-
- <li>它不含 <code>#introduce*</code> 标记或者该标记与目标匹配。</li>
+ <li>不含 <code>#introduce*</code> 标记或者该标记与目标匹配。</li>
 </ul>
 
-<aside class="note"><strong>注意</strong>:供应商不得定义自己的 LL-NDK 共享库,因为供应商模块无法在常规系统映像 (GSI) 中找到它们。<em></em></aside>
+<aside class="note">
+  <strong>注意</strong>:供应商不得定义自己的 LL-NDK 共享库,因为供应商模块无法在<a href="/setup/build/gsi">通用系统映像 (GSI)</a> 中找到它们。
+</aside>
 
 <h3 id="vndk">VNDK</h3>
 
-<p>在 <code>Android.bp</code> 文件中,<code>cc_library</code>、<code>cc_library_static</code>、<code>cc_library_shared</code> 和 <code>cc_library_headers</code> 模块定义支持三个与 VNDK 相关的属性:<code>vendor_available</code>、<code>vndk.enabled</code> 和 <code>vndk.support_system_process</code>。</p>
+<p>
+在 <code>Android.bp</code> 文件中,<code>cc_library</code>、<code>cc_library_static</code>、<code>cc_library_shared</code> 和 <code>cc_library_headers</code> 模块定义支持三个与 VNDK 相关的属性:<code>vendor_available</code>、<code>vndk.enabled</code> 和 <code>vndk.support_system_process</code>。
+</p>
 
-<p>如果 <code>vendor_available</code> 或 <code>vndk.enabled</code> 为 <code>true</code>,则可以编译两种变体(核心变体和供应商变体)。<em></em><em></em>核心变体应被视为框架模块,而供应商变体应被视为供应商模块。如果某些框架模块依赖于此模块,则会编译核心变体。如果某些供应商模块依赖于此模块,则会编译供应商变体。</p>
-
-<p>编译系统会强制执行以下依赖性检查:</p>
+<p>
+如果 <code>vendor_available</code> 或 <code>vndk.enabled</code> 为 <code>true</code>,则可以编译两种变体(核心变体和供应商变体)。<em></em><em></em>核心变体应被视为框架模块,而供应商变体应被视为供应商模块。如果某些框架模块依赖于此模块,则会编译核心变体。如果某些供应商模块依赖于此模块,则会编译供应商变体。编译系统会强制执行以下依赖性检查:
+</p>
 
 <ul>
  <li>核心变体始终供框架专用,无法供供应商模块访问。</li>
-
  <li>供应商变体始终无法供框架模块访问。</li>
-
  <li>供应商变体的所有依赖项(在 <code>header_libs</code>、<code>static_libs</code> 和/或 <code>shared_libs</code> 中指定)必须是 <code>llndk_library</code> 或具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块。</li>
-
  <li>如果 <code>vendor_available</code> 为 <code>true</code>,则供应商变体可供所有供应商模块访问。</li>
-
  <li>如果 <code>vendor_available</code> 为 <code>false</code>,则供应商变体仅可供其他 VNDK 或 VNDK-SP 模块访问(即,具有 <code>vendor:true</code> 的模块无法与 <code>vendor_available:false</code> 模块相关联)。</li>
 </ul>
 
-<p>系统将通过以下规则确定 <code>cc_library</code> 或 <code>cc_library_shared</code> 的默认安装路径:</p>
+<p>
+系统将通过以下规则确定 <code>cc_library</code> 或 <code>cc_library_shared</code> 的默认安装路径:
+</p>
 
 <ul>
- <li>
-  将核心变体安装到 <code>/system/lib[64]</code> 中。
- </li>
-
- <li>
-  供应商变体安装路径可能会有所不同:
-
+ <li>将核心变体安装到 <code>/system/lib[64]</code> 中。</li>
+ <li>供应商变体安装路径可能会有所不同:
   <ul>
-   <li>
-    如果 <code>vndk.enabled</code> 为 <code>false</code>,则将供应商变体安装到 <code>/vendor/lib[64]</code> 中。
-   </li>
-
-   <li>
-    如果 <code>vndk.enabled</code> 为 <code>true</code>,则 <code>vndk.support_system_process</code> 可以是 <code>true</code> 或 <code>false</code>。
-
-    <ul>
-     <li>
-      如果 <code>vndk.support_system_process</code> 为 <code>false</code>,则供应商变体将安装到 <code>/system/lib[64]/vndk-${VER}</code> 中。
-     </li>
-
-     <li>
-      否则,供应商变体将安装到 <code>/system/lib[64]/vndk-sp-${VER}</code> 中。
-     </li>
+    <li>如果 <code>vndk.enabled</code> 为 <code>false</code>,则将供应商变体将安装到 <code>/vendor/lib[64]</code> 中。</li>
+    <li>如果 <code>vndk.enabled</code> 为 <code>true</code>,则 <code>vndk.support_system_process</code> 可以是 <code>true</code> 或 <code>false</code>。如果:
+  <ul>
+    <li>为 <code>false</code>,则供应商变体将安装到 <code>/system/lib[64]/vndk-${VER}</code> 中。</li>
+    <li>为 <code>true</code>,则供应商变体将安装到 <code>/system/lib[64]/vndk-sp-${VER}</code> 中。</li>
     </ul>
    </li>
   </ul>
  </li>
 </ul>
 
-<p>下表总结了编译系统如何处理供应商变体:</p>
-
+<p>
+下表总结了编译系统如何处理供应商变体:
+</p>
 <table>
  <tbody><tr>
-  <th rowspan="2"><p><code>vendor_available</code></p></th>
-  <th colspan="2"><p><code>vndk</code></p></th>
-  <th rowspan="2"><p><code>Vendor variant descriptions</code></p></th>
+  <th>vendor_available</th>
+  <th style="text-align: center">vndk<br />已启用</th>
+  <th style="text-align: center">vndk<br />support_same_process</th>
+  <th>供应商变体说明</th>
  </tr>
 
  <tr>
-  <th><p><code>enabled</code></p></th>
-  <th><p><code>support_same_process</code></p></th>
+  <td rowspan="4"><code>true</code></td>
+  <td rowspan="2"><code>false</code></td>
+  <td><code>false</code></td>
+  <td>供应商变体为 VND-ONLY。共享库将安装到 <code>/vendor/lib[64]</code> 中。<em></em></td>
  </tr>
 
  <tr>
-  <td rowspan="4"><p><code>true</code></p></td>
-  <td rowspan="2"><p><code>false</code></p></td>
-  <td><p><code>false</code></p></td>
-  <td>
-   <p>供应商变体是 VND-ONLY<em></em></p>
-   <p>共享库将安装到 <code>/vendor/lib[64]</code> 中。</p>
-  </td>
+  <td><code>true</code></td>
+  <td>无效(编译错误)<em></em></td>
  </tr>
 
  <tr>
-  <td><p><code>true</code></p></td>
-  <td><p><em></em>无效(编译错误)</p></td>
+  <td rowspan="2"><code>true</code></td>
+  <td><code>false</code></td>
+  <td>供应商变体为 VNDK。共享库将安装到 <code>/system/lib[64]/vndk-${VER}</code> 中。<em></em></td>
  </tr>
 
  <tr>
-  <td rowspan="2"><p><code>true</code></p></td>
-  <td><p><code>false</code></p></td>
-  <td>
-   <p>供应商变体是 VNDK<em></em>。</p>
-   <p>共享库将安装到 <code>/system/lib[64]/vndk-${VER}</code> 中。</p>
-  </td>
- </tr>
-
- <tr>
-  <td><p><code>true</code></p></td>
-  <td>
-   <p>供应商变体是 VNDK-SP<em></em>。</p>
-   <p>共享库将安装到 <code>/system/lib[64]/vndk-sp-${VER}</code> 中。</p>
-  </td>
+  <td><code>true</code></td>
+  <td>供应商变体为 VNDK-SP。共享库将安装到 <code>/system/lib[64]/vndk-sp-${VER}</code> 中。<em></em></td>
  </tr>
 
  <tr>
@@ -223,39 +233,37 @@
  </tr>
 
  <tr>
-  <td><p><code>true</code></p></td>
-  <td><p><em></em>无效(编译错误)</p></td>
+  <td><code>true</code></td>
+  <td>无效(编译错误)<em></em></td>
  </tr>
 
  <tr>
-  <td rowspan="2"><p><code>true</code></p></td>
-  <td><p><code>false</code></p></td>
-  <td>
-   <p>供应商变体是 VNDK-Private<em></em>。</p>
-   <p>共享库将安装到 <code>/system/lib[64]/vndk-${VER}</code> 中。</p>
-   <p>供应商模块不得直接使用这些变体。</p>
-  </td>
+  <td rowspan="2"><code>true</code></td>
+  <td><code>false</code></td>
+  <td>供应商变体为 VNDK-Private。<em></em>共享库将安装到 <code>/system/lib[64]/vndk-${VER}</code> 中。供应商模块不得直接使用这些变体。</td>
  </tr>
 
  <tr>
-  <td><p><code>true</code></p></td>
-  <td>
-   <p>供应商变体是 <em></em>VNDK-SP-Private。</p>
-   <p>共享库将安装到 <code>/system/lib[64]/vndk-sp-${VER}</code> 中。</p>
-   <p>供应商模块不得直接使用这些变体。</p>
-  </td>
+  <td><code>true</code></td>
+  <td>供应商变体为 VNDK-SP-Private。<em></em>共享库将安装到 <code>/system/lib[64]/vndk-sp-${VER}</code> 中。供应商模块不得直接使用这些变体。</td>
  </tr>
 </tbody></table>
 
-<aside class="note"><strong>注意</strong>:供应商可以为其模块设置 <code>vendor_available</code>。不过,供应商不得设置 <code>vndk.enabled</code> 和 <code>vndk.support_system_process</code>,因为供应商模块无法在 GSI 中找到它们。</aside>
+<aside class="note">
+  <strong>注意</strong>:供应商可以为其模块设置 <code>vendor_available</code>,但不得设置 <code>vndk.enabled</code> 和 <code>vndk.support_system_process</code>,因为供应商模块无法在<a href="/setup/build/gsi">通用系统映像 (GSI)</a> 中找到它们。
+</aside>
 
 <h3 id="vndk-extensions">VNDK 扩展</h3>
 
-<p>VNDK 扩展是具有额外 API 的 VNDK 共享库,将安装到 <code>/vendor/lib[64]/vndk[-sp]</code> 中(不含版本后缀),并在系统运行时替换原始的 VNDK 共享库。</p>
+<p>
+VNDK 扩展是具有额外 API 的 VNDK 共享库,将安装到 <code>/vendor/lib[64]/vndk[-sp]</code> 中(不含版本后缀),并在系统运行时会替换原始的 VNDK 共享库。
+</p>
 
 <h4 id="defining-vndk-extensions">定义 VNDK 扩展</h4>
 
-<p>在 Android P 中,<code>Android.bp</code> 本身支持 VNDK 扩展。要编译 VNDK 扩展,请定义另一个具有 <code>vendor:true</code> 和 <code>extends</code> 属性的模块:</p>
+<p>
+在 Android 9 及更高版本中,<code>Android.bp</code> 本身支持 VNDK 扩展。要编译 VNDK 扩展,请定义另一个具有 <code>vendor:true</code> 和 <code>extends</code> 属性的模块:
+</p>
 
 <pre class="prettyprint">
 cc_library {
@@ -276,21 +284,20 @@
 }
 </pre>
 
-<p>具有 <code>vendor:true</code>、<code>vndk.enabled:true</code> 和 <code>extends</code> 属性的模块可定义 VNDK 扩展:</p>
+<p>
+具有 <code>vendor:true</code>、<code>vndk.enabled:true</code> 和 <code>extends</code> 属性的模块可定义 VNDK 扩展:</p>
 
 <ul>
  <li><code>extends</code> 属性必须指定基础 VNDK 共享库名称(或 VNDK-SP 共享库名称)。</li>
-
- <li>VNDK 扩展(或 VNDK-SP 扩展)以扩展时所基于的基础模块名称命名。例如,<code>libvndk_ext</code> 的输出二进制文件是 <code>libvndk.so</code>,而非 <code>libvndk_ext.so</code>。</li>
-
- <li>VNDK 扩展将安装到 <code>/vendor/lib[64]/vndk</code> 中。</li>
-
- <li>VNDK-SP 扩展将安装到 <code>/vendor/lib[64]/vndk-sp</code> 中。</li>
-
- <li>基础共享库必须同时具有 <code>vndk.enabled:true</code> 和 <code>vendor_available:true</code>。</li>
+  <li>VNDK 扩展(或 VNDK-SP 扩展)以扩展时所基于的基础模块名称命名。例如,<code>libvndk_ext</code> 的输出二进制文件是 <code>libvndk.so</code>,而非 <code>libvndk_ext.so</code>。</li>
+  <li>VNDK 扩展将安装到 <code>/vendor/lib[64]/vndk</code> 中。</li>
+  <li>VNDK-SP 扩展将安装到 <code>/vendor/lib[64]/vndk-sp</code> 中。</li>
+  <li>基础共享库必须同时具有 <code>vndk.enabled:true</code> 和 <code>vendor_available:true</code>。</li>
 </ul>
 
-<p>VNDK-SP 扩展必须从 VNDK-SP 共享库进行扩展。也就是说,<code>vndk.support_system_process</code> 必须等于:</p>
+<p>
+VNDK-SP 扩展必须从 VNDK-SP 共享库进行扩展(<code>vndk.support_system_process</code> 必须相等):
+</p>
 
 <pre class="prettyprint">
 cc_library {
@@ -313,7 +320,9 @@
 }
 </pre>
 
-<p>VNDK 扩展(或 VNDK-SP 扩展)可以依赖于其他供应商共享库:</p>
+<p>
+VNDK 扩展(或 VNDK-SP 扩展)可以依赖于其他供应商共享库:
+</p>
 
 <pre class="prettyprint">
 cc_library {
@@ -342,11 +351,15 @@
 }
 </pre>
 
-<aside class="note"><strong>注意</strong>:与 SP-HAL-Dep 类似,VNDK-SP 扩展及其依赖项(包括供应商库)在 sepolicy 中必须标记为 <code>same_process_hal_file</code>。</aside>
+<aside class="note">
+  <strong>注意</strong>:与 SP-HAL-Dep 类似,VNDK-SP 扩展及其依赖项(包括供应商库)在 sepolicy 中必须标记为 <code>same_process_hal_file</code>。
+</aside>
 
 <h4 id="using-vndk-extensions">使用 VNDK 扩展</h4>
 
-<p>如果供应商模块依赖于由 VNDK 扩展定义的一些其他 API,则必须在其 <code>shared_libs</code> 属性中指定 VNDK 扩展的名称:</p>
+<p>
+如果供应商模块依赖于由 VNDK 扩展定义的其他 API,则该模块必须在其 <code>shared_libs</code> 属性中指定 VNDK 扩展的名称:
+</p>
 
 <pre class="prettyprint">
 // A vendor shared library example
@@ -368,9 +381,9 @@
 }
 </pre>
 
-<p>如果供应商模块依赖于一些 VNDK 扩展,则这些 VNDK 扩展将自动安装到 <code>/vendor/lib[64]/vndk[-sp]</code> 中。</p>
-
-<p>如果某个模块不再依赖于 VNDK 扩展,请向 <code>CleanSpec.mk</code> 添加一个清理步骤,以移除共享库。例如:</p>
+<p>
+如果供应商模块依赖于 VNDK 扩展,则这些 VNDK 扩展将自动安装到 <code>/vendor/lib[64]/vndk[-sp]</code> 中。如果某个模块不再依赖于 VNDK 扩展,请向 <code>CleanSpec.mk</code> 添加一个清理步骤,以移除共享库。例如:
+</p>
 
 <pre class="prettyprint">
 $(call add-clean-step, rm -rf $(TARGET_OUT_VENDOR)/lib/libvndk.so)
@@ -378,11 +391,22 @@
 
 <h3 id="conditional-compilation">条件编译</h3>
 
-<p>本小节介绍了如何处理以下三个 VNDK 共享库之间的细微差异<em></em>(例如,为其中一个变体添加或移除某项功能):(1) 核心变体(例如 <code>/system/lib[64]/libexample.so</code>)、(2) 供应商变体(例如 <code>/system/lib[64]/vndk[-sp]-${VER}/libexample.so</code>)和 (3) VNDK 扩展(例如 <code>/vendor/lib[64]/vndk[-sp]/libexample.so</code>)。
+<p>
+本节介绍了如何处理以下三个 VNDK 共享库之间的细微差别(例如,为其中一个变体添加或移除某项功能):<em></em>
+</p>
 
-</p><h4 id="conditional-cflags">条件编译器标志</h4>
+<ul>
+  <li>核心变体(例如 <code>/system/lib[64]/libexample.so</code>)</li>
+  <li>供应商变体(例如 <code>/system/lib[64]/vndk[-sp]-${VER}/libexample.so</code>)</li>
+  <li>VNDK 扩展(例如 <code>/vendor/lib[64]/vndk[-sp]/libexample.so</code>)
+  </li>
+</ul>
 
-<p>默认情况下,Android 编译系统会为供应商变体(包括 VNDK 扩展)定义 <code>__ANDROID_VNDK__</code>。您可以使用 C 预处理器防护程序来保护相应代码:</p>
+<h4 id="conditional-cflags">条件编译器标记</h4>
+
+<p>
+默认情况下,Android 编译系统会为供应商变体(包括 VNDK 扩展)定义 <code>__ANDROID_VNDK__</code>。您可以使用 C 预处理器防护程序来保护相应代码:
+</p>
 
 <pre class="prettyprint">
 void all() { }
@@ -396,7 +420,9 @@
 #endif
 </pre>
 
-<p>除了 <code>__ANDROID_VNDK__</code>,还可以在 <code>Android.bp</code> 中指定不同的 <code>cflags</code> 或 <code>cppflags</code>。在 <code>target.vendor</code> 中指定的 <code>cflags</code> 或 <code>cppflags</code> 是专门针对供应商变体的。例如,以下代码是针对 <code>libexample</code> 和 <code>libexample_ext</code> 的 <code>Android.bp</code> 模块定义:</p>
+<p>
+除了 <code>__ANDROID_VNDK__</code>,还可以在 <code>Android.bp</code> 中指定不同的 <code>cflags</code> 或 <code>cppflags</code>。在 <code>target.vendor</code> 中指定的 <code>cflags</code> 或 <code>cppflags</code> 是专门针对供应商变体的。例如,以下代码示例是针对 <code>libexample</code> 和 <code>libexample_ext</code> 的 <code>Android.bp</code> 模块定义:
+</p>
 
 <pre class="prettyprint">
 cc_library {
@@ -428,7 +454,9 @@
 }
 </pre>
 
-<p><code>example.c</code> 的代码清单:</p>
+<p>
+<code>example.c</code> 的代码清单:
+</p>
 
 <pre class="prettyprint">
 void all() { }
@@ -446,7 +474,9 @@
 #endif
 </pre>
 
-<p>针对每个变体导出的符号如下:</p>
+<p>
+针对每个变体导出的符号:
+</p>
 
 <table>
  <tbody><tr>
@@ -470,22 +500,23 @@
  </tr>
 </tbody></table>
 
-<!-- TODO: The paragraph below looks awkward. Refine this subsection to make
-this more fluent. -->
-
-<p>VNDK ABI 合规性检查工具会将 VNDK 和 VNDK 扩展的 ABI 同 <code>prebuilts/abi-dumps/vndk</code> 下的 ABI 转储进行比较:</p>
+<p>
+VNDK ABI 合规性检查工具会将 VNDK 和 VNDK 扩展的 ABI 同 <code>prebuilts/abi-dumps/vndk</code> 下的 ABI 转储进行比较:
+</p>
 
 <ul>
- <li>通过原始 VNDK 共享库导出的符号必须与 ABI 转储中定义的符号相同(而不是后者的超集)。</li>
-
- <li>通过 VNDK 扩展导出的符号必须是 ABI 转储中定义的符号的超集。</li>
+  <li>通过原始 VNDK 共享库导出的符号必须与 ABI 转储中定义的符号相同(而不是后者的超集)。</li>
+  <li>通过 VNDK 扩展导出的符号必须是 ABI 转储中定义的符号的超集。</li>
 </ul>
 
-<h4 id="exclude-source-files-or-shared-libs">排除源文件或共享库</h4>
+<h4 id="excluding">排除源文件或共享库</h4>
 
-<p>要从供应商变体中排除源文件,请将相应文件添加到 <code>exclude_srcs</code> 属性中。同样,要确保特定共享库未与供应商变体相关联,请将这些共享库添加到 <code>exclude_shared_libs</code> 属性中。例如:</p>
+<p>
+要从供应商变体中排除源文件,请将相应文件添加到 <code>exclude_srcs</code> 属性中。同样,要确保共享库未与供应商变体相关联,请将这些库添加到 <code>exclude_shared_libs</code> 属性中。例如:
+</p>
 
-<pre class="prettyprint">cc_library {
+<pre class="prettyprint">
+cc_library {
     name: "libcond_exclude_example",
     srcs: ["fwk.c", "both.c"],
     shared_libs: ["libfwk_only", "libboth"],
@@ -495,33 +526,42 @@
             exclude_shared_libs: ["libfwk_only"],
         },
     },
-}</pre>
+}
+</pre>
 
-<p>在本示例中,<code>libcond_exclude_example</code> 的核心变体包含 <code>fwk.c</code> 和 <code>both.c</code> 中的代码,并且依赖于共享库 <code>libfwk_only</code> 和 <code>libboth</code>。</p>
+<p>
+在本示例中,<code>libcond_exclude_example</code> 的核心变体包含 <code>fwk.c</code> 和 <code>both.c</code> 中的代码,并且依赖于共享库 <code>libfwk_only</code> 和 <code>libboth</code>。<code>libcond_exclude_example</code> 的供应商变体仅包含 <code>both.c</code> 中的代码,因为 <code>fwk.c</code> 已被 <code>exclude_srcs</code> 属性排除。同样,<code>libcond_exclude_example</code> 仅依赖于共享库 <code>libboth</code>,因为 <code>libfwk_only</code> 已被 <code>exclude_shared_libs</code> 属性排除。
+</p>
 
-<p>另一方面,<code>libcond_exclude_example</code> 的供应商变体仅包含 <code>both.c</code> 中的代码,因为 <code>fwk.c</code> 已被 <code>exclude_srcs</code> 属性排除。同样,<code>libcond_exclude_example</code> 仅依赖于共享库 <code>libboth</code>,因为 <code>libfwk_only</code> 已被<br /> <code>exclude_shared_libs</code> 属性排除。
+<h3 id="product-packages">产品包</h3>
 
-<!-- <h4 id="vndk-ext-header-guideline">VNDK extension header guidelines</h4> -->
+<p>
+在 Android 编译系统中,变量 <code>PRODUCT_PACKAGES</code> 指定应安装到设备中的可执行文件、共享库或软件包。指定模块的传递依赖项也会隐式安装到设备中。
+</p>
 
-<!-- TODO: Add the guide line for VNDK extension headers. -->
+<p>
+如果启用了 <code>BOARD_VNDK_VERSION</code>,具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块会得到特殊处理。如果框架模块依赖于具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块,则核心变体将纳入传递安装集中。同样,如果供应商模块依赖于具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块,则供应商变体将纳入传递安装集中。
+</p>
 
-</p><h3 id="product-packages">产品包</h3>
+<p>
+当相关依赖项对编译系统不可见时(例如,可以在运行时使用 <code>dlopen()</code> 打开的共享库),您应该在 <code>PRODUCT_PACKAGES</code> 中指定模块名称来明确安装这些模块。
+</p>
 
-<p>在 Android 编译系统中,变量 <code>PRODUCT_PACKAGES</code> 指定应安装到设备中的可执行文件、共享库或软件包。指定模块的传递依赖项也会隐式安装到设备中。</p>
+<p>
+如果某个模块具有 <code>vendor_available</code> 或 <code>vndk.enabled</code>,则模块名称代表该模块的核心变体。要在 <code>PRODUCT_PACKAGES</code> 中明确指定供应商变体,请将 <code>.vendor</code> 后缀附加到模块名称上。例如:
+</p>
 
-<p>如果启用了 <code>BOARD_VNDK_VERSION</code>,具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块会得到特殊处理。如果框架模块依赖于具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块,则核心变体将纳入传递安装集中。同样,如果供应商模块依赖于具有 <code>vendor_available</code> 或 <code>vndk.enabled</code> 的模块,则供应商变体将纳入传递安装集中。</p>
-
-<p>当相关依赖项对编译系统不可见时(例如,可以在运行时使用 <code>dlopen()</code> 打开的共享库),您应该在 <code>PRODUCT_PACKAGES</code> 中指定模块名称来明确安装这些模块。</p>
-
-<p>如果某个模块具有 <code>vendor_available</code> 或 <code>vndk.enabled</code>,则模块名称代表该模块的核心变体。要在 <code>PRODUCT_PACKAGES</code> 中明确指定供应商变体,请将 <code>.vendor</code> 后缀附加到模块名称上。例如:</p>
-
-<pre class="prettyprint">cc_library {
+<pre class="prettyprint">
+cc_library {
     name: "libexample",
     srcs: ["example.c"],
     vendor_available: true,
-}</pre>
+}
+</pre>
 
-<p>在本示例中,<code>libexample</code> 代表 <code>/system/lib[64]/libexample.so</code>,<code>libexample.vendor</code> 代表 <code>/vendor/lib[64]/libexample.so</code>。要安装 <code>/vendor/lib[64]/libexample.so</code>,请将 <code>libexample.vendor</code> 添加到 <code>PRODUCT_PACKAGES</code>:</p>
+<p>
+在本示例中,<code>libexample</code> 代表 <code>/system/lib[64]/libexample.so</code>、<code>libexample.vendor</code> 代表 <code>/vendor/lib[64]/libexample.so</code>。要安装 <code>/vendor/lib[64]/libexample.so</code>,请将 <code>libexample.vendor</code> 添加到 <code>PRODUCT_PACKAGES</code>:
+</p>
 
 <pre class="prettyprint">PRODUCT_PACKAGES += libexample.vendor</pre>
 
diff --git a/zh-cn/devices/architecture/vndk/index.html b/zh-cn/devices/architecture/vndk/index.html
index 086c94b..5279bc1 100644
--- a/zh-cn/devices/architecture/vndk/index.html
+++ b/zh-cn/devices/architecture/vndk/index.html
@@ -4,6 +4,7 @@
     <meta name="book_path" value="/_book.yaml"/>
   </head>
   <body>
+
   <!--
       Copyright 2017 The Android Open Source Project
 
@@ -45,7 +46,7 @@
 <li><em><a href="/devices/architecture/vndk/linker-namespace.html">链接器命名空间</a></em>:提供对共享库关联的精细控制。
 </li>
 <li><em><a href="/devices/architecture/vndk/dir-rules-sepolicy.html">目录、规则和 sepolicy</a></em>:定义了搭载 Android 8.0 及更高版本的设备的目录结构,以及 VNDK 规则和关联的 sepolicy。</li>
-<li><em><a href="../images/vndk_design_android_o.pdf">Android O 中的 VDNK 设计</a></em>演示文稿:阐述了 Android O 中使用的 VDNK 基本概念。</li>
+<li><em><a href="/devices/architecture/images/VNDK.pdf">VNDK 设计</a></em>演示文稿:阐述了 Android 8.0 中使用的 VDNK 基本概念。</li>
 </ul>
 
 <h2 id="concepts">VNDK 概念</h2>
@@ -163,18 +164,20 @@
 <li>框架共享库是指 <code>/system/lib[64]</code> 下的共享库。<em></em></li>
 <li><em></em><em></em><em></em>框架模块是指框架共享库和框架可执行文件。</li>
 <li>框架进程是指从框架可执行文件衍生而来的进程(例如 <code>/system/bin/app_process</code>)。<em></em><em></em></li>
-<li>供应商可执行文件是指 <code>/vendor/bin</code> 中的可执行文件<em></em>。
+<li>供应商可执行文件是指 <code>/vendor/bin</code> 中的可执行文件。<em></em>
 </li><li>供应商共享库是指 <code>/vendor/lib[64]</code> 下的共享库。<em></em></li>
 <li><em></em><em></em><em></em>供应商模块是指供应商可执行文件和供应商共享库。</li>
 <li><em></em><em></em>供应商进程是指供应商可执行文件(例如 </li>
 <code>/vendor/bin/[email protected]</code>)产生的进程。
 </ul>
 
-<aside class="note"><strong>注意</strong>:常规系统映像 (GSI) 是指根据相应分支(与版本分支类似,但更正了一些错误或进行了一些泛化)编译并由 Google 发布的标准 Android 系统映像。<em></em></aside>
+<aside class="note"><strong>注意</strong>:通用系统映像 (GSI) 是指根据相应分支(与版本分支类似,但更正了一些错误或进行了一些泛化)编译并由 Google 发布的标准 Android 系统映像。<em></em></aside>
 
-<h2 id="vndk-versioning">VNDK 版本编号</h2>
+<h2 id="vndk-versioning">VNDK 版本控制</h2>
 
-<p>在 Android P 中,VNDK 共享库带有版本编号:</p>
+<p>
+在 Android 9 中,VNDK 共享库带有版本编号:
+</p>
 
 <ul>
  <li><code>ro.vndk.version</code> 系统属性将自动添加到 <code>/vendor/default.prop</code>。</li>
@@ -202,24 +205,30 @@
 
 <h3 id="upgrading-devices">升级设备</h3>
 
-<p>如果 Android 8.x 设备停用了 VNDK 运行时增强功能(即,编译时未使用 <code>BOARD_VNDK_VERSION</code> 或使用了 <code>BOARD_VNDK_RUNTIME_DISABLE</code>),则在升级到 Android P 时,可能会将 <code>PRODUCT_USE_VNDK_OVERRIDE := false</code> 添加 <code>BoardConfig.mk</code>。</p>
+<p>如果 Android 8.x 设备停用了 VNDK 运行时增强功能(即,编译时未使用 <code>BOARD_VNDK_VERSION</code> 或使用了 <code>BOARD_VNDK_RUNTIME_DISABLE</code>),则在升级到 Android 9 时,可能会将 <code>PRODUCT_USE_VNDK_OVERRIDE := false</code> 添加到 <code>BoardConfig.mk</code>。</p>
 
 <p>如果 <code>PRODUCT_USE_VNDK_OVERRIDE</code> 为 <code>false</code>,则 <code>ro.vndk.lite</code> 属性将自动添加到 <code>/vendor/default.prop</code>,且其值将为 <code>true</code>。因此,动态链接器将加载 <code>/system/etc/ld.config.vndk_lite.txt</code> 中的链接器命名空间配置,这仅会隔离 SP-HAL 和 VNDK-SP。</p>
 
-<p>如果要将搭载 Android 7.0(或更低版本)的设备升级到 Android P,请将 <code>PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false</code> 添加到 <code>BoardConfig.mk</code>。</p>
+<p>
+要将 Android 7.0 或更低版本的设备升级到 Android 9,请将 <code>PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false</code> 添加到 <code>BoardConfig.mk</code>。
+</p>
 
 <h3 id="vendor-test-suite">供应商测试套件 (VTS)</h3>
 
-<p>Android P 供应商测试套件 (VTS) 强制要求存在非空 <code>ro.vndk.version</code> 属性。新发布的设备和升级设备都必须定义 <code>ro.vndk.version</code>。一些 VNDK 测试用例(例如 <code>VtsVndkFilesTest</code> 和 <code>VtsVndkDependencyTest</code>)依赖于 <code>ro.vndk.version</code> 属性来加载符合条件且匹配的 VNDK 库数据集。</p>
+<p>
+Android 9 供应商测试套件 (VTS) 强制要求存在非空 <code>ro.vndk.version</code> 属性。新发布的设备和升级设备都必须定义 <code>ro.vndk.version</code>。一些 VNDK 测试用例(例如 <code>VtsVndkFilesTest</code> 和 <code>VtsVndkDependencyTest</code>)依赖于 <code>ro.vndk.version</code> 属性来加载符合条件且匹配的 VNDK 库数据集。
+</p>
 
-<p>如果 <code>ro.product.first_api_level</code> 属性大于 27,则不能定义 <code>ro.vndk.lite</code> 属性。
-如果在新推出的 Android P 设备中定义了 <code>ro.vndk.lite</code>,则 <code>VtsTreblePlatformVersionTest</code> 将失败。</p>
+<p>
+如果 <code>ro.product.first_api_level</code> 属性大于 27,则不能定义 <code>ro.vndk.lite</code> 属性。
+  如果在新推出的 Android 9 设备中定义了 <code>ro.vndk.lite</code>,则 <code>VtsTreblePlatformVersionTest</code> 将失败。
+</p>
 
 <h2 id="document-history">文档历史记录</h2>
 
 <p>本部分跟踪了对 VNDK 文档进行的更改。</p>
 
-<h3 id="changes-p">Android P 的变化</h3>
+<h3 id="changes-p">Android 9 的变化</h3>
 
 <ul>
  <li>添加了“VNDK 版本编号”部分。</li>
diff --git a/zh-cn/devices/architecture/vndk/linker-namespace.html b/zh-cn/devices/architecture/vndk/linker-namespace.html
index 41d4585..37ae688 100644
--- a/zh-cn/devices/architecture/vndk/linker-namespace.html
+++ b/zh-cn/devices/architecture/vndk/linker-namespace.html
@@ -32,7 +32,7 @@
 
 <p>另一方面,链接器命名空间机制可提供相应的灵活性,从而将由一个链接器命名空间导出的某些共享库用于另一个链接器命名空间。这些导出的共享库可能会成为对其他程序公开的应用编程接口,同时在其链接器命名空间中隐藏实现细节。</p>
 
-<p>例如,<code>/system/lib[64]/libcutils.so</code> 和 <code>/system/lib[64]/vndk-sp-${VER}/libcutils.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]/libcutils.so</code> 和 <code>/system/lib[64]/vndk-sp-${VER}/libcutils.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>
 
@@ -46,82 +46,295 @@
 
 <pre class="prettyprint">
 dir.system = /system/bin
+dir.system = /system/xbin
 dir.vendor = /vendor/bin
 
 [system]
-additional.namespaces = sphal
+additional.namespaces = sphal,vndk
 
 namespace.default.isolated = true
-namespace.default.search.paths = /system/${LIB}:/vendor/${LIB}
-namespace.default.permitted.paths = /system/${LIB}:/vendor/${LIB}
+namespace.default.search.paths = /system/${LIB}
+namespace.default.permitted.paths = /system/${LIB}/hw
+namespace.default.asan.search.paths = /data/asan/system/${LIB}:/system/${LIB}
+namespace.default.asan.permitted.paths = /data/asan/system/${LIB}/hw:/system/${LIB}/hw
 
 namespace.sphal.isolated = true
 namespace.sphal.visible = true
-namespace.sphal.search.paths = /vendor/${LIB}
-namespace.sphal.permitted.paths = /vendor/${LIB}
-namespace.sphal.links = default
+namespace.sphal.search.paths = /odm/${LIB}:/vendor/${LIB}
+namespace.sphal.permitted.paths = /odm/${LIB}:/vendor/${LIB}
+namespace.sphal.asan.search.paths  = /data/asan/odm/${LIB}:/odm/${LIB}
+namespace.sphal.asan.search.paths += /data/asan/vendor/${LIB}:/vendor/${LIB}
+namespace.sphal.asan.permitted.paths  = /data/asan/odm/${LIB}:/odm/${LIB}
+namespace.sphal.asan.permitted.paths += /data/asan/vendor/${LIB}:/vendor/${LIB}
+namespace.sphal.links = default,vndk
 namespace.sphal.link.default.shared_libs = libc.so:libm.so
+namespace.sphal.link.vndk.shared_libs = libbase.so:libcutils.so
+
+namespace.vndk.isolated = true
+namespace.vndk.search.paths = /system/${LIB}/vndk-sp-29
+namespace.vndk.permitted.paths = /system/${LIB}/vndk-sp-29
+namespace.vndk.links = default
+namespace.vndk.link.default.shared_libs = libc.so:libm.so
 
 [vendor]
 namespace.default.isolated = false
 namespace.default.search.paths = /vendor/${LIB}:/system/${LIB}
-namespace.default.permitted.paths = /vendor/${LIB}:/system/${LIB}
 </pre>
 
-<p>首先,<code>ld.config.txt</code> 的开头有几个 <code>dir.${section}</code> 属性:</p>
+<p>配置文件包含以下内容:</p>
 
-<pre class="prettyprint">
-dir.${section} = /path/to/bin/directory
-</pre>
+<ul>
+ <li>多个“目录-区段”映射属性(位于动态链接器的开头),用于选择有效的区段。</li>
 
-<p>这些属性决定了将应用于相应进程的一系列规则。例如,如果主可执行文件位于 <code>/system/bin</code> 中,则会应用 <code>[system]</code> 中的规则。<em></em>同样,如果主可执行文件位于 <code>/vendor/bin</code> 中,则会应用 <code>[vendor]</code> 中的规则。<em></em></p>
+ <li>多个链接器命名空间配置区段:<ul>
+   <li>每个区段都包含多个命名空间(圆形顶点)以及各命名空间之间的多个回退链接(图形弧)。</li>
 
-<p>其次,除了 <code>default</code> 链接器命名空间外,<code>addition.namespaces</code> 还为每个部分指定了将由动态链接器创建的额外链接器命名空间(用英文逗号分隔):</p>
+   <li>每个命名空间都具有自己的隔离、搜索路径、允许的路径以及可见性设置。</li>
+  </ul>
+ </li>
+</ul>
 
-<pre class="prettyprint">
-additional.namespaces = namespace1,namespace2,namespace3
-</pre>
+<p>下表详细介绍了各属性的含义。</p>
 
-<p>在上述示例中,动态链接器为 <code>/system/bin</code> 中的可执行文件创建了两个链接器命名空间(<code>default</code> 和 <code>sphal</code>)。</p>
+<h3 id="directory-section-mapping-property">“目录-区段”映射属性</h3>
 
-<p>再次,对于每个链接器命名空间,可以配置以下属性:</p>
+<table>
+ <tbody><tr>
+  <th>属性</th>
+  <th>说明</th>
+  <th>示例</th>
+ </tr>
 
-<pre class="prettyprint">
-namespace.${name}.search.paths = /path1/${LIB}:/path2/${LIB}
-namespace.${name}.permitted.paths = /path1:/path2
-namespace.${name}.isolated = true|false
-namespace.${name}.links = namespace1,namespace2
-namespace.${name}.link.${other}.shared_libs = lib1.so:lib2.so
-namespace.${name}.link.${other}.allow_all_shared_libs = true
-namespace.${name}.visible = true|false
-</pre>
+ <tr>
+  <td><p><code>dir.<var>name</var></code></p></td>
 
-<p><code>namespace.${name}.search.paths</code> 表示将附加到库名称前面的目录。各目录之间用英文冒号隔开。
-<code>${LIB}</code> 是一个特殊的占位符。如果相应进程正在运行 32 位可执行文件,则 <code>${LIB}</code> 将被替换为 <code>lib</code>。同样,如果相应进程正在运行 64 位可执行文件,则 <code>${LIB}</code> 将被替换为 <code>lib64</code>。</p>
+  <td>
+   <p>指向 <code>[<var>name</var>]</code> 区段所应用到的目录的路径。</p>
 
-<p>在上述示例中,如果 <code>/system/bin</code> 中的 64 位可执行文件与 <code>libexample.so</code> 相关联,则动态链接器会首先搜索 <code>/system/lib64/libexample.so</code>。如果找不到 <code>/system/lib64/libexample.so</code>,则动态链接器会搜索 <code>/vendor/lib64/libexample.so</code>。</p>
+   <p>每个属性都会将目录下的可执行文件映射到链接器命名空间配置区段。可能会有 2 个(或多个)属性具有相同的 <code><var>name</var></code>,却指向不同的目录。</p>
+  </td>
 
-<p>如果 <code>namespace.${name}.isolated</code> 为 <code>true</code>,则动态链接器仅会加载 <code>namespace.${name}.search.paths</code> 中指定目录下的共享库,或 <code>namespace.${name}.permitted.paths</code> 中指定目录下的共享库。</p>
+  <td>
+   <p>
+    <code>dir.system = /system/bin</code><br />
+    <code>dir.system = /system/xbin</code><br />
+    <code>dir.vendor = /vendor/bin</code><br />
+   </p>
 
-<p>在上述示例中,在 <code>sphal</code> 链接器命名空间中加载的共享库将无法关联到 <code>/system/lib[64]</code> 中的共享库,因为 <code>namespace.sphal.isolated</code> 为 <code>true</code> 并且 <code>/system/lib[64]</code> 既不在 <code>namespace.sphal.permitted.paths</code> 中也不在 <code>namespace.sphal.search.paths</code> 中。</p>
+   <p>这表示在 <code>[system]</code> 区段中指定的配置适用于从 <code>/system/bin</code> 或 <code>/system/xbin</code> 加载的可执行文件。</p>
 
-<p><code>namespace.${name}.links</code> 指定了 <code>${name}</code> 链接器命名空间关联到的链接器命名空间列表(以英文逗号分隔)。</p>
+   <p>在 <code>[vendor]</code> 区段中指定的配置适用于从 <code>/vendor/bin</code> 加载的可执行文件。</p>
+  </td>
+ </tr>
+</tbody></table>
 
-<p>在上述示例中,<code>namespace.sphal.links</code> 指定 <code>sphal</code> 链接器命名空间关联到 <code>default</code> 链接器命名空间。</p>
+<h3 id="relation-properties">关系属性</h3>
 
-<p><code>namespace.${name}.link.${other}.shared_libs</code> 会指定可能会利用后备链接的共享库名称(用英文冒号分隔)。如果某个共享库无法加载到 <code>${name}</code> 链接器命名空间中,并且其名称位于 <code>namespace.${name}.link.${other}.shared_libs</code> 中,则动态链接器会尝试从 <code>${other}</code> 链接器命名空间导入该库。</p>
+<table>
+ <tbody><tr>
+  <th>属性</th>
+  <th>说明</th>
+  <th>示例</th>
+ </tr>
 
-<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>
+ <tr>
+  <td><code>additional.<wbr></wbr>namespaces</code></td>
 
-<p>如果 <code>namespace.${name}.link.${other}.allow_all_shared_libs</code> 为 <code>true</code>,则所有共享库名称均可以利用后备链接。如果某个共享库无法加载到 <code>${name}</code> 链接器命名空间中,则动态链接器会尝试从 <code>${other}</code> 链接器命名空间导入该库。</p>
+  <td>
+   <p>相应区段的其他命名空间的逗号分隔列表(<code>default</code> 命名空间除外)。</p>
+  </td>
 
-<p>如果 <code>namespace.${name}.visible</code> 为 <code>true</code>,该程序将能够获取链接器命名空间句柄,该句柄随后可传递到 <code>android_dlopen_ext()</code>。</p>
+  <td>
+   <p><code>additional.<wbr></wbr>namespaces = sphal,<wbr></wbr>vndk</code></p>
 
-<p>在上述示例中,<code>namespace.sphal.visible</code> 为 <code>true</code>,以便 <code>android_load_sphal_library()</code> 可以明确要求动态链接器加载 <code>sphal</code> 链接器命名空间中的共享库。</p>
+   <p>这表示 <code>[system]</code> 配置中有 3 个命名空间(<code>default</code>、<code>sphal</code> 和 <code>vndk</code>)。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>links</code></td>
+
+  <td>
+   <p>回退命名空间的逗号分隔列表。</p>
+
+   <p>如果在当前命名空间中找不到共享库,则动态链接器会尝试从回退命名空间加载共享库。在列表开头指定的命名空间优先级较高。</p>
+
+   <aside class="note">注意:回退命名空间没有传递特性。例如,命名空间 A 链接到命名空间 B,命名空间 B 链接到命名空间 C。如果动态链接器在命名空间 A 中找不到相应的库,则它仅会搜索命名空间 B,而不会搜索命名空间 C。<em></em><em></em><em></em><em></em><em></em><em></em><em></em></aside>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>sphal.<wbr></wbr>links = default,<wbr></wbr>vndk</code></p>
+
+   <p>如果某个共享库或可执行文件请求另一个共享库,而后者无法加载到 <code>sphal</code> 命名空间,则动态链接器会尝试从 <code>default</code> 命名空间加载此共享库。</p>
+
+   <p>然后,如果此共享库也无法从 <code>default</code> 命名空间加载,则动态链接器会尝试从 <code>vndk</code> 命名空间加载此共享库。</p>
+
+   <p>最后,如果所有尝试都失败,则动态链接器会返回一个错误。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>link.<wbr></wbr><var>other</var>.<wbr></wbr>shared_libs</code></td>
+
+  <td>
+   <p>用冒号分隔的共享库列表(如果在 <code>name</code> 命名空间中找不到这些共享库,则可以在 <code>other</code> 命名空间中搜索)。</p>
+
+   <p>此属性无法与 <code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>link.<wbr></wbr><var>other</var>.<wbr></wbr>allow_all_shared_libs</code> 一起使用。</p>
+
+   <aside class="note"><p>注意:此属性与 <a href="/devices/tech/config/namespaces_libraries">public.libraries.txt</a> 文件在底层实现上是相同的。这两种机制都通过使用库名称过滤器指定链接的方式来控制导入的共享库。</p>
+
+   <p>不同之处在于,<code>ld.config.txt</code> 由动态链接器进行加载,并且所有命名空间都是在程序启动时创建的。相反,<code>libnativeloader</code> 会在 Zygote 进程针对某个应用进行分岔和专门化操作时创建链接器命名空间。应用原生库的命名空间具有一个仅允许使用在 <code>public.libraries.txt</code> 中指定的库名称的链接。</p></aside>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>sphal.<wbr></wbr>link.<wbr></wbr>default.<wbr></wbr>shared_libs = libc.so:<wbr></wbr>libm.so</code></p>
+
+   <p>这表示回退链接仅接受 <code>libc.so</code> 或 <code>libm.so</code> 作为请求的库名称。如果请求的库名称不是 <code>libc.so</code> 或 <code>libm.so</code>,则动态链接器会忽略从 <code>sphal</code> 到 <code>default</code> 命名空间的回退链接。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>link.<wbr></wbr><var>other</var>.<wbr></wbr>allow_all_shared_libs</code></td>
+
+  <td>
+   <p>一个布尔值,用于指示在 <code><var>name</var></code> 命名空间中找不到共享库时,是否所有共享库都可以在 <code><var>other</var></code> 命名空间中搜索。</p>
+
+   <p>此属性无法与 <code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>link.<wbr></wbr><var>other</var>.<wbr></wbr>shared_libs</code> 一起使用。</p>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>vndk.<wbr></wbr>link.<wbr></wbr>sphal.<wbr></wbr>allow_all_shared_libs = true</code></p>
+
+   <p>这表示所有库名称都可以遍历从 <code>vndk</code> 到 <code>sphal</code> 命名空间的回退链接。</p>
+  </td>
+ </tr>
+</tbody></table>
+
+<h3 id="namespace-properties">命名空间属性</h3>
+
+<table>
+ <tbody><tr>
+  <th>属性</th>
+  <th>说明</th>
+  <th>示例</th>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>isolated</code></td>
+
+  <td>
+   <p>一个布尔值,用于指示动态链接器是否应该检查共享库在什么位置。</p>
+
+   <p>如果 <code>isolated</code> 为 <code>true</code>,则只有某个 <code>search.paths</code> 目录(不包含子目录)中或 <code>permitted.paths</code>(包含子目录)下的共享库才能加载。<em></em><em></em></p>
+
+   <p>如果 <code>isolated</code> 为 <code>false</code>,则动态链接器不会检查共享库的路径。</p>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>sphal.<wbr></wbr>isolated = true</code></p>
+
+   <p>这表示只有 <code>search.paths</code> 中或 <code>permitted.paths</code> 下的共享库才能加载到 <code>sphal</code> 命名空间。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>search.paths</code></td>
+
+  <td>
+   <p>以冒号分隔的目录列表,用于搜索共享库。</p>
+
+   <p>如果函数调用 <code>dlopen()</code> 或 <code>DT_NEEDED</code> 条目时未指定完整路径,则在 <code>search.paths</code> 中指定的目录将附加到请求的库名称前面。在列表开头指定的目录优先级较高。</p>
+
+   <p>如果 <code>isolated</code> 为 <code>true</code>,则任一 <code>search.paths</code> 目录(不包含子目录)中的共享库都可以加载,无论 <code>permitted.paths</code> 属性如何设置。<em></em></p>
+
+   <p>例如,如果 <code>search.paths</code> 为 <code>/system/${LIB}</code>,并且 <code>permitted.paths</code> 为空,则 <code>/system/${LIB}/libc.so</code> 可以加载,但 <code>/system/${LIB}/vndk/libutils.so</code> 无法加载。</p>
+
+   <aside class="note">注意:<code>${LIB}</code> 是内置占位符。对于 32 位进程,此占位符将替换为 <code>lib</code>;对于 64 位进程,此占位符将替换为 <code>lib64</code>。</aside>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>default.<wbr></wbr>search.paths = /system/${LIB}</code></p>
+
+   <p>这表示动态链接器会在 <code>/system/${LIB}</code> 中搜索共享库。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>asan.search.paths</code></td>
+
+  <td>
+   <p>以冒号分隔的目录列表,用于在启用 <a href="/devices/tech/debug/asan">Address Sanitizer</a> 后搜索共享库。</p>
+
+   <p>在启用 <a href="/devices/tech/debug/asan">Address Sanitizer</a> 后,系统会忽略 <code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>search.paths</code>。</p>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>default.<wbr></wbr>asan.search.paths = /data/asan/system/${LIB}:<wbr></wbr>/system/${LIB}</code></p>
+
+   <p>这表示在启用 <a href="/devices/tech/debug/asan">Address Sanitizer</a> 后,动态链接器会先搜索 <code>/data/asan/system/${LIB}</code>,然后再搜索 <code>/system/${LIB}</code>。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>permitted.paths</code></td>
+
+  <td>
+   <p>以冒号分隔的目录列表(包含子目录),当 <code>isolated</code> 为 <code>true</code> 时,动态链接器可在其中加载共享库(除了 <code>search.paths</code> 以外)。</p>
+
+   <p><code>permitted.paths</code> 的子目录下的共享库也可以加载。例如,如果 <code>permitted.paths</code> 为 <code>/system/${LIB}</code>,则 <code>/system/${LIB}/libc.so</code> 和 <code>/system/${LIB}/vndk/libutils.so</code> 均可加载。</p>
+
+   <p>如果 <code>isolated</code> 为 <code>false</code>,则系统会忽略 <code>permitted.paths</code> 并发出相应警告。</p>
+
+   <aside class="note">注意:在动态链接器搜索共享库时,<code>permitted.paths</code> 不会附加到请求的库名称前面。其主要目的是让程序员能够通过指定共享库的完整路径将共享库加载到隔离的命名空间。</aside>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>default.<wbr></wbr>permitted.paths = /system/${LIB}/hw</code></p>
+
+   <p>这表示 <code>/system/${LIB}/hw</code> 下的共享库可以加载到隔离的 <code>default</code> 命名空间。</p>
+
+   <p>例如,如果没有 <code>permitted.paths</code>,则 <code>libaudiohal.so</code> 无法将 <code>/system/${LIB}/hw/audio.a2dp.default.so</code> 加载到 <code>default</code> 命名空间。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>asan.permitted.paths</code></td>
+
+  <td>
+   <p>以冒号分隔的目录列表,在启用 <a href="/devices/tech/debug/asan">Address Sanitizer</a> 后,动态链接器可在其中加载共享库。</p>
+
+   <p>在启用 <a href="/devices/tech/debug/asan">Address Sanitizer</a> 后,系统会忽略 <code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>permitted.paths</code>。</p>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>default.<wbr></wbr>asan.permitted.paths = /data/asan/system/${LIB}/hw:<wbr></wbr>/system/${LIB}/hw</code></p>
+
+   <p>这表示在启用 <a href="/devices/tech/debug/asan">Address Sanitizer</a> 后,<code>/data/asan/system/${LIB}/hw</code> 或 <code>/system/${LIB}/hw</code> 下的共享库可以加载到隔离的 <code>default</code> 命名空间。</p>
+  </td>
+ </tr>
+
+ <tr>
+  <td><code>namespace.<wbr></wbr><var>name</var>.<wbr></wbr>visible</code></td>
+
+  <td>
+   <p>一个布尔值,用于指示程序(不包括 <code>libc</code>)是否可以包含带有 <code>android_get_exported_namespace()</code> 的链接器命名空间句柄,以及通过将此句柄传递到 <code>android_dlopen_ext()</code> 打开链接器命名空间中的共享库。</p>
+
+   <p>如果 <code>visible</code> 为 <code>true</code>,则 <code>android_get_exported_namespace()</code> 在命名空间存在时始终返回此句柄。</p>
+
+   <p>如果 <code>visible</code> 为 <code>false</code>(默认值),则无论命名空间是否存在,<code>android_get_exported_namespace()</code> 始终返回 <code>NULL</code>。仅当符合以下条件时,共享库才能加载到此命名空间:(1) 具有指向此命名空间的回退链接的其他链接器命名空间请求这些共享库,或者 (2) 此命名空间中的其他共享库或可执行文件请求这些共享库。</p>
+  </td>
+
+  <td>
+   <p><code>namespace.<wbr></wbr>sphal.<wbr></wbr>visible = true</code></p>
+
+   <p>这表示 <code>android_get_exported_namespace("sphal")</code> 可以返回有效的链接器命名空间句柄。</p>
+  </td>
+ </tr>
+</tbody></table>
 
 <h2 id="linker-namespace-isolation">链接器命名空间隔离</h2>
 
-<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>
+<p><code>${android-src}/system/core/rootdir/etc</code> 中有 3 个配置文件。系统会根据 <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>
@@ -305,8 +518,8 @@
    <code>/product/app</code><br />
    <code>/product/priv-app</code><br />
    <code>/data</code><br />
-   <code>/mnt/expand
-  </code></td>
+   <code>/mnt/expand</code>
+  </td>
  </tr>
 
  <tr>
diff --git a/zh-cn/devices/audio/terminology.html b/zh-cn/devices/audio/terminology.html
index 9cf44d3..7b82163 100644
--- a/zh-cn/devices/audio/terminology.html
+++ b/zh-cn/devices/audio/terminology.html
@@ -302,7 +302,8 @@
 
 <dt>TOSLINK</dt>
 <dd>
-<a href="https://en.wikipedia.org/wiki/TOSLINK">TOSLINK</a> 是一种配合 S/PDIF 使用的光纤音频数据线。<em></em></dd>
+<a href="https://en.wikipedia.org/wiki/TOSLINK">TOSLINK</a> 是一种配合 S/PDIF 使用的光纤音频数据线。<em></em>
+</dd>
 
 <dt>USB</dt>
 <dd>
@@ -328,7 +329,8 @@
 <li><a href="http://mipi.org/specifications/soundwire">SoundWire</a></li>
 </ul>
 
-<p>在 <a href="http://www.alsa-project.org/main/index.php/ASoC">ALSA 系统芯片 (ASoC)</a> 中,以上各项统称为<a href="https://www.kernel.org/doc/Documentation/sound/soc/dai.rst">数字音频接口</a> (DAI)。
+<p>
+在 <a href="http://www.alsa-project.org/main/index.php/ASoC">ALSA 系统芯片 (ASoC)</a> 中,以上各项统称为<a href="https://www.kernel.org/doc/Documentation/sound/soc/dai.rst">数字音频接口</a> (DAI)。
 </p>
 
 <h3 id="signalTerms">音频信号路径</h3>
@@ -436,8 +438,7 @@
 
 <dt>AudioEffect</dt>
 <dd>
-用于输出(处理后)音效与输入(处理前)音效的 API 和实现框架。该 API 在
-<a href="http://developer.android.com/reference/android/media/audiofx/AudioEffect.html">android.media.audiofx.AudioEffect</a> 中定义。
+用于输出(处理后)音效与输入(处理前)音效的 API 和实现框架。该 API 在 <a href="http://developer.android.com/reference/android/media/audiofx/AudioEffect.html">android.media.audiofx.AudioEffect</a> 中定义。
 </dd>
 
 <dt>AudioFlinger</dt>
@@ -462,8 +463,7 @@
 
 <dt>AudioRecord</dt>
 <dd>
-用于从麦克风等音频输入设备接收数据的主要低级别客户端 API。相应数据通常为 PCM 格式。该 API 在
-<a href="http://developer.android.com/reference/android/media/AudioRecord.html">android.media.AudioRecord</a> 中定义。
+用于从麦克风等音频输入设备接收数据的主要低级别客户端 API。相应数据通常为 PCM 格式。该 API 在 <a href="http://developer.android.com/reference/android/media/AudioRecord.html">android.media.AudioRecord</a> 中定义。
 </dd>
 
 <dt>AudioResampler</dt>
@@ -478,8 +478,7 @@
 
 <dt>AudioTrack</dt>
 <dd>
-用于向音响设备等音频输出设备发送数据的主要低级别客户端 API。相应数据通常为 PCM 格式。该 API 在
-<a href="http://developer.android.com/reference/android/media/AudioTrack.html">android.media.AudioTrack</a> 中定义。
+用于向音响设备等音频输出设备发送数据的主要低级别客户端 API。相应数据通常为 PCM 格式。该 API 在 <a href="http://developer.android.com/reference/android/media/AudioTrack.html">android.media.AudioTrack</a> 中定义。
 </dd>
 
 <dt>audio_utils</dt>
@@ -549,8 +548,7 @@
 
 <dt>SoundPool</dt>
 <dd>
-比 AudioTrack 级别更高的客户端 API,可播放通过采样得到的音频片段,适用于触发界面反馈、游戏音效等。该 API 在
-<a href="http://developer.android.com/reference/android/media/SoundPool.html">android.media.SoundPool</a> 中定义。
+比 AudioTrack 级别更高的客户端 API,可播放通过采样得到的音频片段,适用于触发界面反馈、游戏音效等。该 API 在 <a href="http://developer.android.com/reference/android/media/SoundPool.html">android.media.SoundPool</a> 中定义。
 </dd>
 
 <dt>Stagefright</dt>
@@ -570,8 +568,7 @@
 
 <dt>音频流类型</dt>
 <dd>
-表示音频输出使用情形的枚举。音频政策的实现用例会根据音频流类型以及其他参数来确定音量和路由决策。要查看音频流类型的列表,请参阅
-<a href="http://developer.android.com/reference/android/media/AudioManager.html">android.media.AudioManager</a>。
+表示音频输出使用情形的枚举。音频政策的实现用例会根据音频流类型以及其他参数来确定音量和路由决策。要查看音频流类型的列表,请参阅 <a href="http://developer.android.com/reference/android/media/AudioManager.html">android.media.AudioManager</a>。
 </dd>
 
 <dt>tee sink</dt>
@@ -601,8 +598,7 @@
 
 <dt>音量指数</dt>
 <dd>
-表示某个音频流的目标相对音量的整数(没有单位)。
-<a href="http://developer.android.com/reference/android/media/AudioManager.html">android.media.AudioManager</a> 的音量相关 API 在运行时采用音量指数(而非绝对的衰减因数)。
+表示某个音频流的目标相对音量的整数(没有单位)。<a href="http://developer.android.com/reference/android/media/AudioManager.html">android.media.AudioManager</a> 的音量相关 API 在运行时采用音量指数(而非绝对的衰减因数)。
 </dd>
 
 </dl>
diff --git a/zh-cn/devices/automotive/audio/index.html b/zh-cn/devices/automotive/audio/index.html
index f362db2..e70dfbb 100644
--- a/zh-cn/devices/automotive/audio/index.html
+++ b/zh-cn/devices/automotive/audio/index.html
@@ -56,8 +56,8 @@
 </p>
 
 <ul>
-  <li><strong>逻辑</strong>声音流:在核心音频命名法中称为声源,<em></em>使用<a href="/devices/audio/attributes">音频属性</a>进行标记。</li>
-  <li><strong>物理</strong>声音流:在核心音频命名法中称为设备,<em></em>在混音后没有上下文信息。</li>
+  <li><strong>逻辑</strong>声音流:在核心音频命名法中称为声源,使用<a href="/devices/audio/attributes">音频属性</a>进行标记。<em></em></li>
+  <li><strong>物理</strong>声音流:在核心音频命名法中称为设备,在混音后没有上下文信息。<em></em></li>
 </ul>
 
 <p>
@@ -71,7 +71,7 @@
 <h3 id="android-sounds">Android 声音</h3>
 
 <p>
-应用可以有一个或多个通过标准 Android API(如用于控制焦点的 <a href="https://developer.android.com/reference/android/media/AudioManager.html" class="external">AudioManager</a> 或用于流式播放的 <a href="https://developer.android.com/reference/android/media/MediaPlayer.html" class="external">MediaPlayer</a>)交互的播放器,以便发出一个或多个音频数据逻辑流。这些数据可能是单声道声音,也可能是 7.1 环绕声,但都会作为单个声源进行路由和处理。应用声音流与 <a href="/devices/audio/attributes">AudioAttributes</a>(可向系统提供有关如何表达音频的提示)相关联。
+应用可以有一个或多个通过标准 Android API(如用于控制焦点的 <a href="https://developer.android.com/reference/android/media/AudioManager.html" class="external">AudioManager</a> 或用于流式播放的 <a href="https://developer.android.com/reference/android/media/MediaPlayer.html" class="external">MediaPlayer</a>)交互的播放器,以便发出一个或多个音频数据逻辑音源。这些数据可能是单声道声音,也可能是 7.1 环绕声,但都会作为单个声源进行路由和处理。应用声音流与 <a href="/devices/audio/attributes">AudioAttributes</a>(可向系统提供有关如何表达音频的提示)相关联。
 </p>
 
 <p>
diff --git a/zh-cn/devices/bootloader/flashing-updating.html b/zh-cn/devices/bootloader/flashing-updating.html
index 61aa049..b6e5d47 100644
--- a/zh-cn/devices/bootloader/flashing-updating.html
+++ b/zh-cn/devices/bootloader/flashing-updating.html
@@ -71,9 +71,7 @@
 <ul>
 <li>所有通过 OTA 更新的分区都应可以在主系统启动时更新,而不是通过恢复来更新。
 </li><li>对于 A/B 更新,更新程序将查询<a href="/reference/hidl/android/hardware/boot/1.0/IBootControl">启动控件 HAL</a>,更新当前未使用的启动槽位,通过 HAL 更改活动槽位,并重新启动到更新后的操作系统。请参见<a href="/devices/tech/ota/ab/ab_implement#bootcontrol" class="external">实现启动控件 HAL</a>
-</li><li>所有支持 A/B 的分区都会在其名称后面附加一个后缀。此后缀可区分属于引导加载程序中特定插槽的分区。对于每个这样的分区,都有一个相应的变量 <code>has-slot:<partition base name></partition></code>,其值为“yes”
-</li><li>插槽按字母顺序命名为 a、b、c 等,与后缀为 _a、_b、_c 等的分区相对应。
-</li><li>引导加载程序应通过以下某种方式通知操作系统启动了哪个槽位:<ul>
+</li><li>所有支持 A/B 的分区都会在其名称后面附加一个后缀。此后缀可区分属于引导加载程序中特定插槽的分区。对于每个这样的分区,都有一个相应的变量 <code>has-slot:<partition base name></partition></code>,其值为“yes”</li><li>插槽按字母顺序命名为 a、b、c 等,与后缀为 _a、_b、_c 等的分区相对应。</li><li>引导加载程序应通过以下某种方式通知操作系统启动了哪个槽位:<ul>
  <li>DT 属性:<code>/firmware/android/slot_suffix</code>
 或:
 </li><li>命令行属性:<code>androidboot.slot_suffix</code>
diff --git a/zh-cn/devices/bootloader/partitions-images.html b/zh-cn/devices/bootloader/partitions-images.html
index 895768d..f18b340 100644
--- a/zh-cn/devices/bootloader/partitions-images.html
+++ b/zh-cn/devices/bootloader/partitions-images.html
@@ -22,21 +22,21 @@
 
 <h2 id="partitions">分区</h2>
 <p>
-Android 设备包含若干个分区,这些分区在启动过程中发挥不同的作用。为了支持 <a href="/devices/tech/ota/ab/">A/B 更新</a>,设备的 <code>boot</code>、<code>system</code>、<code>vendor</code> 和 <code>radio</code> 分区各自需要一个槽位。
+Android 设备包含若干个分区,这些分区在启动过程中发挥不同的作用。为了支持 <a href="/devices/tech/ota/ab/">A/B 更新</a>,设备需要为 <code>boot</code>、<code>system</code>、<code>vendor</code> 和 <code>radio</code> 中的每个分区单独配置一个槽位。
 </p>
 <ul>
 <li><strong>boot</strong>:<code>boot</code> 分区包含通过 <code>mkbootimg</code> 组合在一起的内核映像和 RAM 磁盘。为了直接刷写内核而不刷写新的 boot 分区,可以使用虚拟分区:<ul>
- <li><strong>kernel</strong>:<code>kernel</code> 虚拟分区会将新映像写入旧磁盘,以便仅覆盖内核(zImage、zImage-dtb 和 Image.gz-dtb)。为此,它会确定 eMMC 中现有内核映像的起始位置并将新内核映像复制到该位置。请记住,新内核映像可能会大于现有内核映像。引导加载程序可以通过移动其后的任何数据来腾出空间或放弃出错的操作。如果提供的开发内核不兼容,则可能需要使用相关的内核模块更新 dtb 分区(如果存在)、vendor 分区或 system 分区。
- </li><li><strong>ramdisk</strong>:<code>ramdisk</code> 虚拟分区会将新映像写入旧磁盘,以便仅覆盖 RAM 磁盘。为此,它会确定 eMMC 中现有 <code>ramdisk.img</code> 的起始位置并将新 RAM 磁盘映像复制到该位置。请记住,新 RAM 磁盘映像可能会大于现有 RAM 磁盘映像。引导加载程序可以通过移动其后的任何数据来腾出空间或放弃出错的操作。</li></ul>
+ <li><strong>kernel</strong>:<code>kernel</code> 虚拟分区会写入新映像来覆盖旧映像,且仅覆盖内核(zImage、zImage-dtb 和 Image.gz-dtb)。为此,它会确定 eMMC 中现有内核映像的起始位置并将新内核映像复制到该位置。请记住,新内核映像可能会大于现有内核映像。引导加载程序可以通过移动其后的任何数据来腾出空间或放弃出错的操作。如果提供的开发内核不兼容,则可能需要使用相关的内核模块更新 dtb 分区(如果存在)、vendor 分区或 system 分区。
+ </li><li><strong>ramdisk</strong>:<code>ramdisk</code> 虚拟分区会写入新映像来覆盖旧映像,且仅覆盖 RAM 磁盘。为此,它会确定 eMMC 中现有 <code>ramdisk.img</code> 的起始位置并将新 RAM 磁盘映像复制到该位置。请记住,新 RAM 磁盘映像可能会大于现有 RAM 磁盘映像。引导加载程序可以通过移动其后的任何数据来腾出空间或放弃出错的操作。</li></ul>
 </li><li><strong>system</strong>:<code>system</code> 分区主要包含 Android 框架。
-</li><li><strong>recovery</strong>:<code>recovery</code> 分区会存储在 OTA 过程中启动的恢复映像。如果设备支持 <a href="/devices/tech/ota/ab/">A/B 更新</a>,则恢复映像可以是启动映像中包含的 RAM 磁盘,而不是单独的映像。
-</li><li><strong>cache</strong>:<code>cache</code> 分区会存储临时数据,如果设备使用 A/B 更新,则该分区是可选的。cache 分区不需要可从引导加载程序写入,而只需要可清空。大小取决于设备类型和 userdata 分区的可用空间。目前,50MB 至 100MB 应该没问题。
-</li><li><strong>misc</strong>:<code>misc</code> 分区由恢复映像使用,存储空间为 4KB 或更大。
+</li><li><strong>recovery</strong>:<code>recovery</code> 分区用于存储在 OTA 过程中启动的恢复映像。如果设备支持 <a href="/devices/tech/ota/ab/">A/B 更新</a>,则恢复映像可以是启动映像中包含的 RAM 磁盘,而不是单独的映像。
+</li><li><strong>cache</strong>:<code>cache</code> 分区用于存储临时数据,如果设备使用 A/B 更新,则可以不要此分区。cache 分区不需要可从引导加载程序写入,而只需要可清空。大小取决于设备类型和 userdata 分区的可用空间。目前,50MB 至 100MB 应该没问题。
+</li><li><strong>misc</strong>:<code>misc</code> 分区供恢复映像使用,存储空间不能小于 4KB。
 </li><li><strong>userdata</strong>:<code>userdata</code> 分区包含用户安装的应用和数据,包括自定义数据。
-</li><li><strong>metadata</strong>:当设备已加密且存储空间为 16MB 或更大时,便会使用 <code>metadata</code> 分区。
+</li><li><strong>metadata</strong>:如果设备被加密,则需要使用 <code>metadata</code> 分区,该分区的存储空间不能小于 16MB。
 </li><li><strong>vendor</strong>:<code>vendor</code> 分区包含所有不可分发给 Android 开源项目 (AOSP) 的二进制文件。如果没有专有信息,则可以省略此分区。
 </li><li><strong>radio</strong>:<code>radio</code> 分区包含无线装置映像。只有包含无线装置且在专用分区中包含无线装置专用软件的设备才需要此分区。
-</li><li><strong>tos</strong>:<code>tos</code> 分区会存储 Trusty 操作系统的二进制映像,且仅在设备包含 Trusty 时使用。</li>
+</li><li><strong>tos</strong>:<code>tos</code> 分区用于存储 Trusty 操作系统的二进制映像文件,仅在设备包含 Trusty 时使用。</li>
 </ul>
 <h2 id="flow">流程</h2>
 <p>
@@ -68,16 +68,13 @@
 <p>
 启动映像应包含通过未经修改的 <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>
+<p>您可以在以下位置找到 <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 磁盘的正确位置和大小、内核基址、命令行参数等。然后,引导加载程序会将启动映像中指定的命令行附加到引导加载程序生成的命令行的末尾。
+<p>引导加载程序会读取由 mkbootimg 生成的 <code><a href="https://android.googlesource.com/platform/system/core/+/master/mkbootimg/bootimg.h">bootimg.h</a></code> 标头文件,并更新内核标头,使其包含被刷写的 RAM 磁盘的正确位置和大小、内核基址、命令行参数以及其他内容。然后,引导加载程序会将启动映像中指定的命令行附加到引导加载程序生成的命令行的末尾。
 
 </p><h3 id="file-system-images-system-userdata-recovery">文件系统映像(系统、用户数据和恢复映像)</h3>
 <h4 id="sparse-image-format">YAFFS2 映像格式</h4>
-<p>
-如果使用原始 NAND 存储空间,则这些映像必须是由未经修改的 mkyaffs2image 生成的 YAFFS2(相关 Android 开源项目 (AOSP) 源代码位于以下位置:<a href="https://android.googlesource.com/platform/external/yaffs2/+/master/yaffs2/utils/" class="external"><code>external/yaffs2/yaffs2/utils</code></a>)。它们采用以下格式:
+<p>如果使用原始 NAND 存储空间,则这些映像必须是由未经修改的 mkyaffs2image 生成的 YAFFS2(可以在 Android 开源项目 (AOSP) 的 <a href="https://android.googlesource.com/platform/external/yaffs2/+/master/yaffs2/utils/" class="external"><code>external/yaffs2/yaffs2/utils</code></a> 中找到)。它们采用以下格式:
 </p><pre>
 <code>
 | 2k bytes of data| yaffs extra data | padding | | 0  2048 | 0 64 | variable|
@@ -88,7 +85,7 @@
 </p>
 <h4 id="sparse-image-format">稀疏映像格式</h4>
 <p>
-稀疏映像格式应受支持。“ext4 压缩映像”文档和 <code><a href="https://android.googlesource.com/platform/system/core/+/master/libsparse/sparse_format.h">system/core/libsparse/sparse_format.h</a></code> 对这种格式进行了说明,该格式的实现位置为:<code><a href="https://android.googlesource.com/platform/system/core/+/master/libsparse/sparse_read.cpp">system/core/libsparse/sparse_read.cpp</a></code>。
+应支持稀疏映像格式。“ext4 压缩映像”文档以及 <code><a href="https://android.googlesource.com/platform/system/core/+/master/libsparse/sparse_format.h">system/core/libsparse/sparse_format.h</a></code> 中都对这种格式进行了说明,该格式的实现位置为:<code><a href="https://android.googlesource.com/platform/system/core/+/master/libsparse/sparse_read.cpp">system/core/libsparse/sparse_read.cpp</a></code>。
 </p>
 <p>
 如果使用基于块的存储设备,则应支持 ext4 或 f2fs。要快速传输并刷写大型空 ext4 文件系统 (userdata),应以稀疏格式存储映像,映像中包含有关文件系统的哪些区域可以保留不写的信息。文件格式由 <code>mke2fs</code> 实用程序编写,该实用程序还用于创建文件格式由引导加载程序读取和刷写的映像。有关属性,请参见下面几部分:
diff --git a/zh-cn/devices/bootloader/product-partitions.html b/zh-cn/devices/bootloader/product-partitions.html
index 09063df..4f51f15 100644
--- a/zh-cn/devices/bootloader/product-partitions.html
+++ b/zh-cn/devices/bootloader/product-partitions.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-  <title>构建 product 分区</title>
+  <title>编译 product 分区</title>
   <meta name="project_path" value="/_project.yaml"/>
   <meta name="book_path" value="/_book.yaml"/>
 </head>
@@ -31,7 +31,7 @@
 许多原始设备制造商 (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) 完成的)。
+使用单独的分区存在一些弊端,例如,难以管理磁盘空间(应该预留一定的空间满足未来增长的空间需求),以及难以在各分区之间<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>
@@ -100,7 +100,7 @@
 <ul>
   <li><strong>将模块安装到特定目标分区中</strong>。
   <code>custom_images</code> 支持将软件工件复制到映像中,但无法将模块安装到特定分区中(通过将其目标分区指定为编译规则的一部分)。</li>
-  <li><strong>Soong 支持</strong>。无法使用 Soong 编译系统构建 <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>
 
@@ -110,7 +110,7 @@
 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><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 强制执行)。
@@ -119,7 +119,7 @@
 <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>,请添加以下板或产品编译标记:
+在实现新 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>
@@ -133,7 +133,7 @@
 <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>
+为防止 <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
index 6729e1d..ad9180b 100644
--- a/zh-cn/devices/bootloader/system-as-root.html
+++ b/zh-cn/devices/bootloader/system-as-root.html
@@ -33,7 +33,7 @@
     <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>
+  <p>在 Android 8.0 中进行的架构更改(在<a href="/devices/architecture/#hidl">项目 Treble</a> 中)支持系统专用 OTA。在系统专用 OTA 中,可以在不更改其他分区的情况下跨主要 Android 版本更新 <code>system.img</code>。不过,对于非 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>
@@ -94,7 +94,7 @@
 
 <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">Android 9 之前</a>的设备中那样)。</p>
+  <p>不同于将 <code>/boot</code> 改为 <a href="/devices/tech/ota/ab_implement#recovery">recovery</a> 分区的 A/B 设备,<strong>非 A/B 设备由于没有后备插槽分区</strong>(例如,从 <code>boot_a</code> 到 <code>boot_b</code>),必须保留单独的 <code>/recovery</code> 分区。如果在非 A/B 设备上移除 <code>/recovery</code> 并使其与 A/B 架构类似,那么在 <code>/boot</code> 分区更新失败时,恢复模式可能会遭到破坏。因此,在非 A/B 设备上,<strong>必须</strong>将 <code>/recovery</code> 分区与 <code>/boot</code> 分区分开,这意味着将继续延迟更新恢复映像(即和 <a href="/devices/tech/ota/nonab/#life-ota-update">Android 9 之前</a>的设备一样)。</p>
 
   <p>非 A/B 设备在使用 Android 9 前后的分区布局差异:</p>
 
@@ -207,12 +207,12 @@
   <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 />
+    <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 专用内核补丁程序文件。
+        <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 等)/* 上找到上述 AVB 专用内核补丁程序文件。
 </aside>
         </li>
       </ul>
@@ -246,8 +246,8 @@
 
   <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>使用 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>
+  <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 eb2d068..af02af4 100644
--- a/zh-cn/devices/bootloader/unlock-trusty.html
+++ b/zh-cn/devices/bootloader/unlock-trusty.html
@@ -27,7 +27,7 @@
 flashing unlock</code> 设置此解锁模式,设置后,此模式在系统重新启动后应保留。
 </p>
 <p>
-除非<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”。该标记在重新启动后以及恢复出厂设置后应保持不变。
+除非<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> 命令后,设备应提示用户,警告他们非官方映像可能会有问题。确认后,应恢复出厂设置,以防止未经授权的数据访问。即使引导加载程序无法正确重新格式化设备,也应将设备恢复出厂设置。只有在恢复出厂设置后,才能设置持久性标记,以便重新刷写设备。
diff --git a/zh-cn/devices/camera/external-usb-cameras.html b/zh-cn/devices/camera/external-usb-cameras.html
index ca46ac5..8007439 100644
--- a/zh-cn/devices/camera/external-usb-cameras.html
+++ b/zh-cn/devices/camera/external-usb-cameras.html
@@ -23,7 +23,7 @@
 
 <h1 id="external_usb_cameras" class="page-title">外接 USB 摄像头</h1>
 
-<p>Android 平台支持使用即插即用的 USB 摄像头(例如网络摄像头),但前提是这些摄像头采用标准的 <a href="https://developer.android.com/reference/android/hardware/camera2/package-summary.html">Android Camera2 API</a> 和摄像头 <a href="/reference/hidl/android/hardware/camera/provider/2.4/ICameraProvider">HIDL</a> 接口。网络摄像头通常支持 <a href="https://en.wikipedia.org/wiki/USB_video_device_class">USB 视频类 (UVC)</a> 驱动程序,并且在 Linux 上,系统采用标准的 <a href="https://en.wikipedia.org/wiki/Video4Linux">Video4Linux (V4L)</a> 驱动程序控制 UVC 摄像头。</p>
+<p>Android 平台支持使用即插即用的 USB 摄像头(例如网络摄像头),但前提是这些摄像头采用标准的 <a href="https://developer.android.com/reference/android/hardware/camera2/package-summary.html" class="external">Android Camera2 API</a> 和摄像头 <a href="/reference/hidl/android/hardware/camera/provider/2.4/ICameraProvider" class="external">HIDL</a> 接口。网络摄像头通常支持 <a href="https://en.wikipedia.org/wiki/USB_video_device_class" class="external">USB 视频类 (UVC)</a> 驱动程序,并且在 Linux 上,系统采用标准的 <a href="https://en.wikipedia.org/wiki/Video4Linux" class="external">Video4Linux (V4L)</a> 驱动程序控制 UVC 摄像头。</p>
 
 <p>如果系统支持网络摄像头,设备便可用于视频聊天和照片冲印机等轻量级用例。此功能并不是为了替代 Android 手机上典型的内部摄像头 HAL,也不是为了协助执行涉及高分辨率和高速流式传输、AR 以及手动 ISP/传感器/智能镜头控制的性能密集型复杂任务。</p>
 
@@ -31,16 +31,16 @@
 
 <h2 id="examples_and_sources">示例和源代码</h2>
 
-<p>要详细了解如何实现 USB 摄像头,请参阅 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/provider/2.4/default/"><code>ExternalCameraProvider</code></a> 中的外接摄像头提供程序参考实现。外接摄像头设备和会话实现包含在 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/device/"><code>ExternalCameraDevice</code></a> 和 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/device/"><code>ExternalCameraDeviceSession</code></a> 中。Java 客户端 API 包含一个新的 <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata?authuser=3#INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL"><code>EXTERNAL</code></a> 硬件级别。</p>
+<p>要详细了解如何实现 USB 摄像头,请参阅 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/provider/2.4/default/CameraProvider.cpp" class="external"><code>ExternalCameraProvider</code></a> 中的外接摄像头提供程序参考实现。外接摄像头设备和会话实现包含在 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/device/3.4/default/ExternalCameraDevice.cpp" class="external"><code>ExternalCameraDevice</code></a> 和 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/device/3.4/default/ExternalCameraDeviceSession.cpp" class="external"><code>ExternalCameraDeviceSession</code></a> 中。Java 客户端 API 包含一个新的 <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata?authuser=3#INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL" class="external"><code>EXTERNAL</code></a> 硬件级别。</p>
 
 <h2 id="implementation">实现</h2>
 
-<p>实现必须支持 <a href="https://developer.android.com/guide/topics/connectivity/usb/host"><code>android.hardware.usb.host</code></a> 系统功能。</p>
+<p>实现必须支持 <a href="https://developer.android.com/guide/topics/connectivity/usb/host" class="external"><code>android.hardware.usb.host</code></a> 系统功能。</p>
 
 <p>此外,还必须启用对 UVC 设备的内核支持。您可以通过将以下内容添加到相应的内核 <code>deconfig</code> 文件来启用该支持。</p>
 <pre class="prettyprint"><code>+CONFIG_USB_VIDEO_CLASS=y
 +CONFIG_MEDIA_USB_SUPPORT=y
-</code></pre><aside class="note"><strong>注意</strong>:<span>请确保您还针对 uvcvideo 安装了这个<a href="https://patchwork.kernel.org/patch/6874491/">补丁程序</a>。</span></aside>
+</code></pre><aside class="note"><strong>注意</strong>:<span>请确保您还针对 uvcvideo 安装了这个<a href="https://patchwork.kernel.org/patch/6874491/" class="external">补丁程序</a>。</span></aside>
 <p>要在相应的设备细分版本中启用外接摄像头提供程序,以便添加必要的 SELinux 权限、外接摄像头配置以及外接摄像头提供程序依赖项,请完成以下步骤:</p>
 
 <ul>
@@ -120,7 +120,7 @@
 
 <p>除了这些参数之外,您还可以添加自己的参数或开发自己的配置。</p>
 
-<h3 id="device_specific_optimizations">设备专用的优化</h3>
+<h3 id="device-specific_optimizations">设备专用的优化</h3>
 
 <p>您还可以通过添加设备专用的优化来提升性能。</p>
 
@@ -142,6 +142,6 @@
 <h2 id="validation">验证</h2>
 
 <p>支持外接摄像头的设备必须通过摄像头 CTS 测试。在整个测试运行期间,外接 USB 网络摄像头必须始终插入到特定设备,否则某些测试用例会失败。</p>
-<aside class="note"><strong>注意</strong>:<span><code>media_profiles</code> 条目不适用于外接 USB 网络摄像头,因此没有 <a href="https://developer.android.com/reference/android/media/CamcorderProfile">camcorder 配置文件</a>。</span></aside>
+<aside class="note"><strong>注意</strong>:<span><code>media_profiles</code> 条目不适用于外接 USB 网络摄像头,因此没有 <a href="https://developer.android.com/reference/android/media/CamcorderProfile" class="external">camcorder 配置文件</a>。</span></aside>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/camera/motion-tracking.html b/zh-cn/devices/camera/motion-tracking.html
index 7402102..503617b 100644
--- a/zh-cn/devices/camera/motion-tracking.html
+++ b/zh-cn/devices/camera/motion-tracking.html
@@ -24,27 +24,27 @@
 
 <h1 id="motion_tracking" class="page-title">运动跟踪</h1>
 
-<p>在 Android 9 中,摄像头设备可以支持<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING">运动跟踪功能</a>。支持此功能的摄像头本身不会生成运动跟踪数据,而是供 ARCore 或图像稳定算法以及其他传感器用于进行场景分析。要支持此功能,设备必须支持 <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#CONTROL_CAPTURE_INTENT_MOTION_TRACKING"><code>CONTROL_CAPTURE_INTENT_MOTION_TRACKING</code></a>。如果该 intent 是捕获请求的一部分,则摄像头必须将曝光时间限制为不超过 20 毫秒,以减少运动模糊。</p>
+<p>在 Android 9 中,摄像头设备可以支持<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING" class="external">运动跟踪功能</a>。支持此功能的摄像头本身不会生成运动跟踪数据,而是供 ARCore 或图像稳定算法以及其他传感器用于进行场景分析。要支持此功能,设备必须支持 <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#CONTROL_CAPTURE_INTENT_MOTION_TRACKING" class="external"><code>CONTROL_CAPTURE_INTENT_MOTION_TRACKING</code></a>。如果该 intent 是捕获请求的一部分,则摄像头必须将曝光时间限制为不超过 20 毫秒,以减少运动模糊。</p>
 
 <h2 id="examples_and_source">示例和源代码</h2>
 
-<p>HAL 端的参考运动跟踪实现是<a href="https://android.googlesource.com/platform/hardware/qcom/camera/+/master/msm8998/QCamera2/HAL3/QCamera3HWI.cpp">摄像头 HAL</a> 的一部分。</p>
+<p>HAL 端的参考运动跟踪实现是<a href="https://android.googlesource.com/platform/hardware/qcom/camera/+/master/msm8998/QCamera2/HAL3/QCamera3HWI.cpp" class="external">摄像头 HAL</a> 的一部分。</p>
 
 <h2 id="implementation">实现</h2>
 
 <p>要在摄像头设备上启用运动跟踪功能,请确保:</p>
 
 <ul>
-<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/"><code>ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING</code></a> 功能处于启用状态。</li>
-<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/"><code>ANDROID_CONTROL_CAPTURE_INTENT_MOTION_TRACKING</code></a> intent 受支持,并且当该 intent 包含在捕获请求中时,将摄像头曝光时间限制为不超过 20 毫秒。</li>
+<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.3/types.hal#231" class="external"><code>ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING</code></a> 功能处于启用状态。</li>
+<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.3/types.hal#207" class="external"><code>ANDROID_CONTROL_CAPTURE_INTENT_MOTION_TRACKING</code></a> intent 受支持,并且当该 intent 包含在捕获请求中时,将摄像头曝光时间限制为不超过 20 毫秒。</li>
 <li><p>在静态信息和动态元数据字段中准确报告以下列表中的镜头校准数据:</p>
 
 <ul>
-<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#747"><code>ANDROID_LENS_POSE_ROTATION</code></a></li>
-<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#753"><code>ANDROID_LENS_POSE_TRANSLATION</code></a></li>
-<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#773"><code>ANDROID_LENS_INTRINSIC_CALIBRATION</code></a></li>
-<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#780"><code>ANDROID_LENS_RADIAL_DISTORTION</code></a></li>
-<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/"><code>ANDROID_LENS_POSE_REFERENCE</code></a></li>
+<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#747" class="external"><code>ANDROID_LENS_POSE_ROTATION</code></a>  </li>
+<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#753" class="external"><code>ANDROID_LENS_POSE_TRANSLATION</code></a>  </li>
+<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#773" class="external"><code>ANDROID_LENS_INTRINSIC_CALIBRATION</code></a>  </li>
+<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#780" class="external"><code>ANDROID_LENS_RADIAL_DISTORTION</code></a>  </li>
+<li><a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.3/types.hal#79" class="external"><code>ANDROID_LENS_POSE_REFERENCE</code></a>  </li>
 </ul></li>
 </ul>
 
diff --git a/zh-cn/devices/camera/session-parameters.html b/zh-cn/devices/camera/session-parameters.html
index 96e8751..6e6fbd3 100644
--- a/zh-cn/devices/camera/session-parameters.html
+++ b/zh-cn/devices/camera/session-parameters.html
@@ -27,13 +27,13 @@
 
 <h2 id="examples_and_source">示例和来源</h2>
 
-<p>参考会话参数实现已经是 <a href="https://android.googlesource.com/platform/hardware/qcom/camera/+/master/msm8998/QCamera2/HAL3/QCamera3HWI.cpp">CameraHal</a> 的一部分。此 HAL 使用旧版 Hal API。实现 Camera HIDL API 的<a href="https://source.android.com/devices/architecture/hal-types">绑定式</a> CameraHal 必须使用相应的 HIDL <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/device/">sessionParams</a> 条目在流配置期间访问所有新的传入会话参数。</p>
+<p>参考会话参数实现已经是 <a href="https://android.googlesource.com/platform/hardware/qcom/camera/+/master/msm8998/QCamera2/HAL3/QCamera3HWI.cpp" class="external">CameraHal</a> 的一部分。此 HAL 使用旧版 Hal API。实现 Camera HIDL API 的<a href="/devices/architecture/hal-types">绑定式</a> CameraHal 必须使用相应的 HIDL <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/device/3.4/types.hal#111" class="external">sessionParams</a> 条目在流配置期间访问所有新的传入会话参数。</p>
 
-<p>相机客户端可以通过调用 <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#getAvailableSessionKeys()"><code>getAvaiableSessionKeys()</code></a> 来查询所有受支持的会话参数的键,并最终通过 <a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration#setSessionParameters(android.hardware.camera2.CaptureRequest)"><code>setSessionParameters()</code></a> 设置它们的初始值。</p>
+<p>相机客户端可以通过调用 <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#getAvailableSessionKeys()%7B:%20.external%7D"><code>getAvailableSessionKeys()</code></a> 来查询所有受支持的会话参数的键,并最终通过 <a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration#setSessionParameters(android.hardware.camera2.CaptureRequest)%7B:%20.external%7D"><code>setSessionParameters()</code></a> 设置它们的初始值。</p>
 
 <h2 id="implementation">实现</h2>
 
-<p>您的 CameraHal 实现必须在相应的静态相机元数据中填充 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/"><code>ANDROID_REQUEST_AVAILABLE_SESSION_KEYS</code></a>,并提供一部分 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#1016"><code>ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS</code></a>(其中包含难以按帧应用的键的列表,如果在捕获会话生命周期内修改这些键,则可能会导致意外延迟)。</p>
+<p>您的 CameraHal 实现必须在相应的静态相机元数据中填充 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.3/types.hal#99" class="external"><code>ANDROID_REQUEST_AVAILABLE_SESSION_KEYS</code></a>,并提供一部分 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/camera/metadata/3.2/types.hal#1016" class="external"><code>ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS</code></a>(其中包含难以按帧应用的键的列表,如果在捕获会话生命周期内修改这些键,则可能会导致意外延迟)。</p>
 
 <p>典型示例包括:需要耗费时间重新配置硬件或更改内部相机流水线的参数。控制会话参数仍然可以在捕获请求中发挥作用,不过,客户端应意识到并预料到其应用会出现延迟。</p>
 
@@ -48,10 +48,10 @@
 <p>CTS 提供以下用于测试会话参数的新用例:</p>
 
 <ul>
-<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java#795"><code>CameraDeviceTest#testSessionConfiguration</code></a></li>
-<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java#1038"><code>CameraDeviceTest#testCreateSessionWithParameters</code></a></li>
-<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java#870"><code>CameraDeviceTest#testSessionParametersStateLeak</code></a></li>
-<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/libctscamera2jni/native-camera-jni.cpp#2140"><code>NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters</code></a></li>
+<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java#795" class="external"><code>CameraDeviceTest#testSessionConfiguration</code></a>  </li>
+<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java#1038" class="external"><code>CameraDeviceTest#testCreateSessionWithParameters</code></a>  </li>
+<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java#870" class="external"><code>CameraDeviceTest#testSessionParametersStateLeak</code></a>  </li>
+<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/libctscamera2jni/native-camera-jni.cpp#2140" class="external"><code>NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters</code></a>  </li>
 </ul>
 
 <p>通常,一旦某个参数成为会话键列表的一部分,其当前值就会添加到在流配置期间在 HAL 层传递的会话参数中。</p>
diff --git a/zh-cn/devices/camera/singleprod-multiconsum.html b/zh-cn/devices/camera/singleprod-multiconsum.html
index 85dce7e..b18fd7c 100644
--- a/zh-cn/devices/camera/singleprod-multiconsum.html
+++ b/zh-cn/devices/camera/singleprod-multiconsum.html
@@ -24,7 +24,7 @@
 
 <h1 id="single_producer_multiple_consumer_camera_buffer_transport" class="page-title">“单个生产者-多个消费者”摄像头缓冲区传输</h1>
 
-<p>该功能引入了一组方法,当拍摄会话处于活动状态且摄像头流式传输正在进行时,摄像头客户端可通过该功能动态添加和移除输出 Surface。新的输出可以映射到用户选择的特定<a href="https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#enableSurfaceSharing()">共享摄像头</a>信息流。Surface 添加后,您可以随时将其移除。</p>
+<p>该功能引入了一组方法,当拍摄会话处于活动状态且摄像头流式传输正在进行时,摄像头客户端可通过该功能动态添加和移除输出 Surface。新的输出可以映射到用户选择的特定<a href="https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#enableSurfaceSharing()" class="external">共享摄像头</a>信息流。Surface 添加后,您可以随时将其移除。</p>
 
 <p>总的想法是,在多个输出 Surface 中共享与特定摄像头信息流关联的缓冲区。当缓冲区准备好在消费者端进行进一步处理时,内部引用计数器便开始跟踪缓冲区。当所有消费者完成各自的任务后,缓冲区便会离开队列,并可供摄像头使用。</p>
 
@@ -36,12 +36,12 @@
 
 <h2 id="examples_and_source">示例和源代码</h2>
 
-<p>可在 <a href="https://android.googlesource.com/platform/frameworks/av/+/master/services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp"><code>Camera3StreamSplitter</code></a> 模块中找到该功能的核心实现,并可在面向开发者的参考资料中找到关于该功能的文档:</p>
+<p>可在 <a href="https://android.googlesource.com/platform/frameworks/av/+/master/services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp" class="external"><code>Camera3StreamSplitter</code></a> 模块中找到该功能的核心实现,并可在面向开发者的参考资料中找到关于该功能的文档:</p>
 
 <ul>
-<li><a href="https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html#updateOutputConfiguration(android.hardware.camera2.params.OutputConfiguration)"><code>updateOutputConfiguration()</code></a></li>
-<li><a href="https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#addSurface(android.view.Surface)"><code>addSurface()</code></a></li>
-<li><a href="https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#removeSurface(android.view.Surface)"><code>removeSurface()</code></a></li>
+<li><a href="https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html#updateOutputConfiguration(android.hardware.camera2.params.OutputConfiguration)" class="external"><code>updateOutputConfiguration()</code></a>  </li>
+<li><a href="https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#addSurface(android.view.Surface)" class="external"><code>addSurface()</code></a>  </li>
+<li><a href="https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration#removeSurface(android.view.Surface)" class="external"><code>removeSurface()</code></a>  </li>
 </ul>
 
 <h2 id="implementation">实现</h2>
@@ -50,6 +50,6 @@
 
 <h2 id="validation">验证</h2>
 
-<p>您的实现必须通过 <a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java">MultiViewTest</a> 模块中以及本机 API 的<a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/libctscamera2jni/native-camera-jni.cpp">本机 JNI 库</a>中涵盖该功能的 CTS 测试。</p>
+<p>您的实现必须通过 <a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java" class="external">MultiViewTest</a> 模块中以及本机 API 的<a href="https://android.googlesource.com/platform/cts/+/master/tests/camera/libctscamera2jni/native-camera-jni.cpp" class="external">本机 JNI 库</a>中涵盖该功能的 CTS 测试。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/camera/versioning.html b/zh-cn/devices/camera/versioning.html
index c37a21c..527967b 100644
--- a/zh-cn/devices/camera/versioning.html
+++ b/zh-cn/devices/camera/versioning.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>
@@ -29,7 +29,7 @@
 <dl>
 
 <dt>Camera API1</dt>
-<dd>Android 4.4 或更低版本设备上的应用级相机框架,通过 <code>android.hardware.Camera</code> 类提供。</dd>
+<dd>Android 4.4 或更低版本设备上的应用级摄像头框架,通过 <code>android.hardware.Camera</code> 类提供。</dd>
 
 <dt>Camera API2</dt>
 <dd>Android 5.0 及更高版本设备上的应用级相机框架,通过<code> android.hardware.camera2</code> 包提供。</dd>
@@ -143,7 +143,7 @@
 <p>为增强媒体和相机框架安全性而进行的架构更改包括以下附加设备要求。</p>
 
 <ul>
-<li><strong>常规</strong>。由于 IPC,设备需要额外带宽,这可能会影响对时间敏感的相机使用情况,例如高速视频录制。供应商可以运行 <code>android.hardware.camera2.cts.PerformanceTest</code> 和 Google 相机应用,以进行 120/240 FPS 高速视频录制,从而衡量实际影响。设备还需要少量额外的 RAM 来创建新进程。</li>
+<li><strong>常规</strong>。由于 IPC,设备需要额外带宽,这可能会影响对时间敏感的相机使用情况,例如高速视频录制。供应商可以运行 <code>android.hardware.camera2.cts.PerformanceTest</code> 和 Google 摄像头应用,以进行 120/240 FPS 高速视频录制,从而衡量实际影响。设备还需要少量额外的 RAM 来创建新进程。</li>
 <li><strong>在视频缓冲区中传递元数据</strong>(仅限 HAL1)。<em></em>如果 HAL1 在视频缓冲区中存储元数据而非实际的 YUV 帧数据,则 HAL 必须使用 <code>kMetadataBufferTypeNativeHandleSource</code> 作为元数据缓冲区类型,并在视频缓冲区中传递 <code>VideoNativeHandleMetadata</code>(<code>kMetadataBufferTypeCameraSource</code> 在 Android 7.0 中不再受支持)。通过 <code>VideoNativeHandleMetadata</code>,相机和媒体框架能够正确地对原生句柄进行序列化和反序列化,从而在进程之间传递视频缓冲区。</li>
 <li><strong>缓冲区句柄地址并不总是存储相同的缓冲区</strong>(仅限 HAL3)。<em></em>对于每个捕获请求,HAL3 会获取缓冲区句柄的地址。HAL 不能使用地址来识别缓冲区,因为地址可能会在 HAL 返回缓冲区之后存储另一个缓冲区句柄。您必须更新 HAL,以便使用缓冲区句柄来标识缓冲区。例如:HAL 接收缓冲区句柄地址 A,该地址存储缓冲区句柄 A。在 HAL 返回缓冲区句柄 A 之后,缓冲区句柄地址 A 可能在 HAL 下次接收到它时存储缓冲区句柄 B。</li>
 <li><strong>更新用于 cameraserver 的 SELinux 策略</strong>。如果设备特定的 SELinux 策略向 mediaserver 授予运行相机的权限,则您必须更新 SELinux 策略,以授予 cameraserver 正确的权限。我们建议不要为 cameraserver 复制 mediaserver 的 SELinux 策略(因为 mediaserver 和 cameraserver 通常需要系统中的不同资源)。Cameraserver 应仅具有执行相机功能所需的权限,并且 mediaserver 中任何不必要的相机相关权限均应被移除。</li>
@@ -187,22 +187,22 @@
 <h4 id="system-api-for-custom-camera-modes">适用于自定义相机模式的系统 API</h4>
 
 <p>
-公共相机 API 定义了两种操作模式:正常模式和受限高速录制模式。这两种模式的语义截然不同;高速模式受限于一次最多只能有两个具体输出等。各个原始设备制造商 (OEM) 已表现出极大的兴趣想要针对特定于硬件的功能定义其他自定义模式。说白了,该模式只是一个传递到 <code>configure_streams</code> 的整数。请参阅:<a href="/reference/hidl/android/hardware/camera/device/3.2/ICameraDeviceSession#configurestreams"><code>hardware/camera/device/3.2/ICameraDeviceSession#configurestreams</code></a>。
+公共相机 API 定义了两种操作模式:正常模式和受限高速录制模式。这两种模式的语义截然不同;高速模式受限于一次最多只能有两个具体输出等。各个原始设备制造商 (OEM) 已表现出极大的兴趣想要针对特定于硬件的功能定义其他自定义模式。说白了,该模式只是一个传递到 <code>configure_streams</code> 的整数。请参阅 <a href="/reference/hidl/android/hardware/camera/device/3.2/ICameraDeviceSession#configurestreams"><code>hardware/camera/device/3.2/ICameraDeviceSession#configurestreams</code></a>。
 </p>
 
 <p>
-此功能包括一个系统 API 调用,OEM 相机应用可以使用该调用来启用自定义模式。这些自定义模式必须以整数值 0x8000 开头,以避免与未来添加到公共 API 的模式发生冲突。
+此功能包括一个系统 API 调用,OEM 摄像头应用可以使用该调用来启用自定义模式。这些自定义模式必须以整数值 0x8000 开头,以避免与未来添加到公共 API 的模式发生冲突。
 </p>
 
 <p>
 要支持这一功能,OEM 只需将新模式添加到其 HAL 即可,传递至 HAL 的这一整数会在 configure_streams 上触发该模式,然后 OEM 就可以让其自定义相机应用使用系统 API。</p>
 
 <p>
-此方法的名称是 <code><a href="https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.StateCallback.html#onCaptureQueueEmpty(android.hardware.camera2.CameraCaptureSession)" class="external">
+方法名称是 <code><a href="https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.StateCallback.html#onCaptureQueueEmpty(android.hardware.camera2.CameraCaptureSession)" class="external">
   android.hardware.camera2.CameraDevice#createCustomCaptureSession</a></code>。
 请参阅:<a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/hardware/camera2/CameraDevice.java#805" class="external"><code>frameworks/base/core/java/android/hardware/camera2/CameraDevice.java#805</code></a>。</p>
 
-<aside class="note"><strong>注意</strong>:在 Android 8.1 版本中,应用必须预安装到系统映像上才能访问此 API。
+<aside class="note"><strong>注意</strong>:在 Android 8.1 版本中,应用必须预安装到系统映像上,才能访问此 API。
 </aside>
 
 <h4 id="oncapturequeueempty">onCaptureQueueEmpty</h4>
@@ -341,6 +341,6 @@
 
 <h3 id="10">1_0</h3>
 
-<p>报告这些版本号的相机模块实现了初始相机模块 HAL 接口。可通过此模块打开的所有相机设备仅支持版本 1 的相机设备 HAL。<code>camera_info</code> 的 <code>device_version</code> 和 <code>static_camera_characteristics</code> 字段无效。只有 <code>android.hardware.Camera</code> API 受该模块及其设备的支持。</p>
+<p>报告这些版本号的相机模块实现了初始相机模块 HAL 接口。可通过此模块打开的所有相机设备仅支持版本 1 的相机设备 HAL。<code>camera_info</code> 的 <code>device_version</code> 和 <code>static_camera_characteristics</code> 字段无效。只有 <code>android.hardware.Camera</code> API 可以受该模块及其设备的支持。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/graphics/arch-vulkan.html b/zh-cn/devices/graphics/arch-vulkan.html
index 37b7db7..1f795bf 100644
--- a/zh-cn/devices/graphics/arch-vulkan.html
+++ b/zh-cn/devices/graphics/arch-vulkan.html
@@ -35,9 +35,9 @@
 <p class="img-caption"><strong>图 1.</strong> Vulkan 组件</p>
 
 <ul>
-<li><strong>Vulkan 验证层</strong><em></em>(在 Android NDK 中提供)。这是开发者在开发 Vulkan 应用期间使用的一组库。图形供应商提供的 Vulkan 运行时库和 Vulkan 驱动程序不包含使 Vulkan 运行时保持高效的运行时错误检查功能,而是使用验证库(仅在开发过程中)来查找应用在使用 Vulkan API 时出现的错误。Vulkan 验证库在开发过程中关联到应用并执行此错误检查。在找出所有 API 使用问题之后,该应用将不再需要包含这些库。</li>
-<li><strong>Vulkan 运行时</strong><em></em>(由 Android 提供)。这是一个原生库 (<code>(libvulkan.so</code>),提供称为 <a href="https://www.khronos.org/vulkan">Vulkan</a> 的新公共原生 API。大多数功能由 GPU 供应商提供的驱动程序实现;运行时会封装驱动程序、提供 API 拦截功能(针对调试和其他开发者工具)以及管理驱动程序与平台依赖项(如 BufferQueue)之间的交互。</li>
-<li><strong>Vulkan 驱动程序</strong><em></em>(由 SoC 提供)。将 Vulkan API 映射到特定于硬件的 GPU 命令以及与内核图形驱动程序的交互。</li>
+<li><strong>Vulkan 验证层</strong>(在 Android NDK 中提供)。<em></em>这是开发者在开发 Vulkan 应用期间使用的一组库。图形供应商提供的 Vulkan 运行时库和 Vulkan 驱动程序不包含使 Vulkan 运行时保持高效的运行时错误检查功能,而是使用验证库(仅在开发过程中)来查找应用在使用 Vulkan API 时出现的错误。Vulkan 验证库在开发过程中关联到应用并执行此错误检查。在找出所有 API 使用问题之后,该应用将不再需要包含这些库。</li>
+<li><strong>Vulkan 运行时</strong>(由 Android 提供)。<em></em>这是一个原生库 (<code>(libvulkan.so</code>),提供称为 <a href="https://www.khronos.org/vulkan">Vulkan</a> 的新公共原生 API。大多数功能由 GPU 供应商提供的驱动程序实现;运行时会封装驱动程序、提供 API 拦截功能(针对调试和其他开发者工具)以及管理驱动程序与平台依赖项(如 BufferQueue)之间的交互。</li>
+<li><strong>Vulkan 驱动程序</strong>(由 SoC 提供)。<em></em>将 Vulkan API 映射到特定于硬件的 GPU 命令以及与内核图形驱动程序的交互。</li>
 </ul>
 
 <h2 id="modified_components">已修改的组件</h2>
@@ -60,7 +60,7 @@
 <li>
 位于 <code>platform/frameworks/native/vulkan</code> 的 <a href="https://android.googlesource.com/platform/frameworks/native/+/master/vulkan/#">Vulkan 加载程序 </a>(libvulkan.so)。包含 Android 的 Vulkan 加载程序,以及一些对平台开发者十分有用的 Vulkan 相关工具。</li>
 
-<li><a href="https://android.googlesource.com/platform/frameworks/native/+/master/vulkan/doc/implementors_guide/implementors_guide.html">Vulkan 实现人员指南</a>:旨在帮助 GPU IHV 编写适用于 Android 的 Vulkan 驱动程序,以及指导原始设备制造商 (OEM) 为特定设备集成这些驱动程序。该指南介绍了 Vulkan 驱动程序如何与系统进行交互、应如何安装特定于 GPU 的工具,以及特定于 Android 的要求。</li>
+<li><a href="/devices/graphics/implement-vulkan.html">Vulkan 实现人员指南</a>:旨在帮助 GPU IHV 编写适用于 Android 的 Vulkan 驱动程序,以及指导原始设备制造商 (OEM) 为特定设备集成这些驱动程序。该指南介绍了 Vulkan 驱动程序如何与系统进行交互、应如何安装特定于 GPU 的工具,以及特定于 Android 的要求。</li>
 
 <li><a href="https://developer.android.com/ndk/guides/graphics/index.html">Vulkan Graphics API 指南</a>:介绍了如何开始在 Android 应用中使用 Vulkan、Android 平台上的 Vulkan 设计指南详情、如何使用 Vulkan 的着色程序编译器,以及如何使用验证层来帮助确保使用 Vulkan 的应用的稳定性。</li>
 
diff --git a/zh-cn/devices/graphics/build-tests.html b/zh-cn/devices/graphics/build-tests.html
index 936eaec..afe7ea1 100644
--- a/zh-cn/devices/graphics/build-tests.html
+++ b/zh-cn/devices/graphics/build-tests.html
@@ -28,9 +28,9 @@
 
 <p>CMake 是一个开放源代码编译系统,支持多种平台和工具链。CMake 从与目标无关的配置文件生成原生 Makefile 或 IDE 项目文件。要详细了解 CMake,请参阅 <a href="http://www.cmake.org/cmake/help/documentation.html">CMake</a> 文档。</p>
 
-<p>CMake 支持且建议在源代码树之外进行编译,也就是说,您应该始终在源代码树之外的独立编译目录中创建 Makefile 或项目文件。CMake 没有任何类型的“distclean”目标,因此,您必须手动移除 CMake 生成的任何文件。</p>
+<p>CMake 支持且建议在源代码树之外进行编译,也就是说,您应该始终在源代码树之外的独立编译目录中创建 Makefile 或项目文件。CMake 没有任何类型的“distclean”目标,因此,您必须手动移除 CMake 生成的所有文件。</p>
 
-<p>配置选项会通过 <code>-D<var>OPTION_NAME</var>=<var>VALUE</var></code> 语法提供给 CMake。deqp 的一些常用选项如下所示。</p>
+<p>可以使用 <code>-D<var>OPTION_NAME</var>=<var>VALUE</var></code> 语法为 CMake 提供配置选项。deqp 的一些常用选项如下所示。</p>
 
 <table>
  <tbody><tr>
@@ -46,7 +46,7 @@
  </tr>
  <tr>
     <td><code>CMAKE_TOOLCHAIN_FILE</code></td>
-<td><p>CMake 工具链文件的路径。用于交叉编译。</p></td>
+<td><p>CMake 的工具链文件路径。用于交叉编译。</p></td>
  </tr>
  <tr>
     <td><code>CMAKE_BUILD_TYPE</code></td>
@@ -58,7 +58,7 @@
 
 <h2 id="creating_target_build_file">创建目标编译文件</h2>
 
-<p>针对新目标的 deqp 编译系统使用目标编译文件进行配置。目标编译文件可定义平台支持哪些功能以及需要哪些库或其他包含路径。目标文件名遵循 <code>targets/<var>NAME</var>/<var>NAME</var>.cmake</code> 格式,且使用 <code>DEQP_TARGET</code> 编译参数选择目标。</p>
+<p>针对新目标的 deqp 编译系统使用目标编译文件进行配置。目标编译文件可定义平台支持哪些功能以及需要哪些库或其他包含路径。目标文件名遵循 <code>targets/<var>NAME</var>/<var>NAME</var>.cmake</code> 格式,并且目标是使用 <code>DEQP_TARGET</code> 编译参数选择的。</p>
 
 <p>目标文件中的文件路径是相对于基本 <code>deqp</code> 目录(而非 <code>targets/<var>NAME</var></code> 目录)的路径。目标编译文件可以设置以下标准变量。</p>
 
@@ -182,7 +182,7 @@
 <p>要使用提供的编译脚本编译 Android 的 deqp 测试程序,您需要:</p>
 
 <ul>
-  <li>最新版本的 <a href="http://developer.android.com/tools/sdk/ndk/index.html">Android NDK</a>;<code>android/scripts/common.py</code> 文件列有所需的版本
+  <li>最新版本的 <a href="http://developer.android.com/tools/sdk/ndk/index.html">Android NDK</a>;<code>android/scripts/common.py</code> 文件中列出了所需的版本
   </li><li>Android 独立 SDK(已安装 API 13、SDK 工具、SDK 平台工具和 SDK 编译工具<a href="http://developer.android.com/sdk/index.html#Other">软件包</a>)
   </li><li><a href="http://ant.apache.org/bindownload.cgi">Apache Ant 1.9.4</a>(Java 代码编译所需)
   </li><li><a href="http://www.cmake.org/download/">CMake 2.8.12</a> 或更高版本
@@ -198,7 +198,7 @@
 
 <p>NDK 目录必须为 <code>~/android-ndk-<var>VERSION</var></code> 或 <code>C:/android/android-ndk-<var>VERSION</var></code>,或者通过 <code>ANDROID_NDK_PATH</code> 环境变量进行定义。</p>
 
-<p>Deqp 设备组件、测试执行服务和测试程序均通过执行 <code>android/scripts/build.py</code> 脚本进行编译。最终 .apk 在 <code>android/package/bin</code> 中创建,并可通过 <code>install.py</code> 脚本进行安装。如果使用<a href="port-tests.html#test_execution_service">命令行执行程序</a>,则可以在设备上通过 ADB 使用 <code>launch.py</code> 脚本启动 ExecService。这些脚本可以从任何目录执行。</p>
+<p>Deqp 设备组件、测试执行服务和测试程序都是通过执行 <code>android/scripts/build.py</code> 脚本进行编译的。最终 .apk 在 <code>android/package/bin</code> 中创建,并可通过 <code>install.py</code> 脚本进行安装。如果使用<a href="port-tests.html#test_execution_service">命令行执行程序</a>,则可以在设备上通过 ADB 使用 <code>launch.py</code> 脚本启动 ExecService。可以从任何目录执行这些脚本。</p>
 
 <h2 id="linux_build">Linux 编译</h2>
 
diff --git a/zh-cn/devices/graphics/implement-vulkan.html b/zh-cn/devices/graphics/implement-vulkan.html
index 3b5a476..12fadde 100644
--- a/zh-cn/devices/graphics/implement-vulkan.html
+++ b/zh-cn/devices/graphics/implement-vulkan.html
@@ -234,7 +234,7 @@
 <h2 id="validation">验证</h2>
 <p>OEM 可以使用 CTS 测试其 Vulkan 实现,其中包括:</p>
 <ul>
-<li><code>CtsDeqpTestCases</code> 模块中的 <a href="/devices/graphics/cts-integration.html">drawElements Quality Program (dEQP)</a> 测试,其中包括针对 Vulkan 1.0 和 1.1 的功能 API 测试。</li>
+<li><code>CtsDeqpTestCases</code> 模块中的 <a href="/devices/graphics/cts-integration.html">drawElements 质量计划 (dEQP)</a> 测试,其中包括针对 Vulkan 1.0 和 1.1 的函数式 API 测试。</li>
 <li><code>CtsGraphicsTestCases</code> 模块,用于测试设备是否针对所支持的 Vulkan 功能进行了正确的配置。</li>
 </ul>
 
diff --git a/zh-cn/devices/graphics/run-tests.html b/zh-cn/devices/graphics/run-tests.html
index 9bd0a29..841be78 100644
--- a/zh-cn/devices/graphics/run-tests.html
+++ b/zh-cn/devices/graphics/run-tests.html
@@ -254,6 +254,6 @@
 
 <p class="note"><strong>注意</strong>:在 Windows 上,GDB 二进制文件需要使用 <code>libpython2.7.dll</code>。在启动 <code>debug.py</code> 前,请将 <code>&lt;path-to-ndk&gt;/prebuilt/windows/bin</code> 添加到 PATH 变量中。</p>
 
-<p class="note"><strong>注意</strong>:本机代码调试不适用于原生 Android 4.3。有关解决方法,请参考<a href="https://issuetracker.google.com/issues/36976703">此公开 Bug</a>。Android 4.4 及更高版本不包含此 Bug。</p>
+<p class="note"><strong>注意</strong>:本机代码调试不适用于 Android 4.3 及之前的所有版本。有关解决方法,请参考<a href="https://issuetracker.google.com/issues/36976703">此公开 Bug</a>。Android 4.4 及更高版本不包含此 Bug。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/input/validate-keymaps.html b/zh-cn/devices/input/validate-keymaps.html
index de11f09..eb8a1a5 100644
--- a/zh-cn/devices/input/validate-keymaps.html
+++ b/zh-cn/devices/input/validate-keymaps.html
@@ -65,7 +65,7 @@
 Failed!
 </pre>
 <h2 id="automation">自动化</h2>
-<p><em></em>最好先在所有配置文件上运行 <code>validatekeymaps</code>,然后再将这些文件安装到设备中。</p>
+<p>最好先对所有配置文件运行 <code>validatekeymaps</code>,然后再将这些文件安装到设备中。<em></em></p>
 <p>通过使用脚本或 makefile,该过程可以作为编译系统的一部分轻松地自动执行。</p>
 <p>以下示例 Makefile 基于 <code>frameworks/base/data/keyboards/Android.mk</code> 的内容。</p>
 <pre class="devsite-click-to-copy">
diff --git a/zh-cn/devices/media/oem.html b/zh-cn/devices/media/oem.html
index 108f13c..07b97d9 100644
--- a/zh-cn/devices/media/oem.html
+++ b/zh-cn/devices/media/oem.html
@@ -91,7 +91,7 @@
   </li></ol>
 
 <h2 id="2_achievable_frame_rates_for_video_codecs">2. 视频编解码器可实现的帧速率</h2>
-<p><code>VideoCapabilities.getAchievableFrameRatesFor</code> 接口针对某个视频大小返回可实现的视频帧率的范围。此信息必须由 OEM 通过位于 <code>/etc/media_codecs_performance.xml</code> 的 XML 文件为每个设备提供。这些设置由 <code>com.android.cts.videoperf.VideoEncoderDecoderTest</code> 和 <code>android.media.cts.VideoDecoderPerfTest</code> CTS 测试进行测试。</p>
+<p><code>VideoCapabilities.getAchievableFrameRatesFor</code> 接口针对某个视频大小返回可实现的视频帧率的范围。此信息必须由 OEM 通过位于 <code>/etc/media_codecs_performance.xml</code> 的 XML 文件为每个设备提供。这些设置通过 <code>com.android.cts.videoperf.VideoEncoderDecoderTest</code> 和 <code>android.media.cts.VideoDecoderPerfTest</code> CTS 测试进行测试。</p>
 
 <p>OEM 可以使用 CTS 测试来生成可通过测试的 XML 文件。具体操作步骤如下:</p>
   <ol>
diff --git a/zh-cn/devices/sensors/batching.html b/zh-cn/devices/sensors/batching.html
index c9915ce..ce52693 100644
--- a/zh-cn/devices/sensors/batching.html
+++ b/zh-cn/devices/sensors/batching.html
@@ -22,7 +22,7 @@
 
 <h2 id="what_is_batching">什么是批处理?</h2>
 <p>“批处理”是指将传感器事件存储在硬件 FIFO 中,然后通过 <a href="hal-interface.html">HAL</a> 报告它们,而非立即进行报告。</p>
-<p>批处理不会唤醒 SoC 来接收每个事件,而会将事件分组到一起进行处理,从而节省大量电量。</p>
+<p>实施批处理,系统就不会唤醒 SoC 来接收每个事件,而会将事件分组到一起进行处理,从而节省大量电量。</p>
 <p>FIFO 越大,节省的电量也越多。实施批处理是一种以牺牲硬件内存来降低功耗的做法。</p>
 <p>当传感器配有硬件 FIFO (<code>sensor_t.fifoMaxEventCount &gt; 0</code>) 时,便会进行批处理,并且会出现以下两种情况之一:</p>
 <ul>
@@ -30,7 +30,7 @@
   <li>或 SoC 处于挂起模式且该传感器为非唤醒传感器,这意味着在等待 SoC 唤醒时必须存储事件。</li>
 </ul>
 <p>有关详情,请参阅 <a href="hal-interface.html#batch_sensor_flags_sampling_period_maximum_report_latency">HAL 批处理函数</a>一节。</p>
-<p>与批处理相对的是轮询操作,其中事件不经过缓冲而立即被报告。轮询操作对应于以下情况:</p>
+<p>与批处理相对的是连续操作,这时,事件不会经过缓冲,而是会被立即报告。连续操作对应于以下情况:</p>
 <ul>
   <li>当 <code>max_report_latency = 0</code> 且可将事件传递给应用时,这意味着:
     <ul>
@@ -67,7 +67,7 @@
 <p>当非唤醒 FIFO 存满时,它必须环绕并像环形缓冲区一样运作,覆盖较旧的事件:即新事件替换旧事件。
   在挂起模式下,<code>max_report_latency</code> 对非唤醒 FIFO 没有影响。</p>
 <p>当唤醒 FIFO 存满时,或者当其中一个唤醒传感器的 <code>max_report_latency</code> 已过时,硬件必须唤醒 SoC 并报告数据。</p>
-<p>在这两种情况下(唤醒和非唤醒),只要 SoC 退出挂起模式,即使一些传感器的 <code>max_report_latency</code> 未过,也会产生一个包含所有 FIFO 内容的批处理。这样可最大限度地降低 SoC 再次挂起而必须重新将其唤醒的风险。这进而可以最大限度地降低功耗。</p>
+<p>在这两种情况下(唤醒和非唤醒),只要 SoC 退出挂起模式,即使一些传感器的 <code>max_report_latency</code> 未过,也会产生一个包含所有 FIFO 内容的批处理。这样可最大限度地降低在 SoC 再次被挂起后却很快又要被唤醒的风险,进而最大限度地降低功耗。</p>
 <p>*不允许驱动程序将唤醒锁定暂停的一个明显例外情况是,在 <code>max_report_latency</code> 小于 1 秒的情况下启用处于<a href="report-modes.html#continuous">连续报告模式</a>的唤醒传感器。在此情况下,驱动程序可以持有唤醒锁,这是因为 SoC 在进入挂起模式前会被唤醒事件唤醒,因此没有机会进入挂起模式。</p>
 <h2 id="precautions_to_take_when_batching_wake-up_sensors">批处理唤醒传感器时的注意事项</h2>
 <p>根据设备不同,SoC 可能需要几毫秒才能完全退出挂起模式并开始刷新 FIFO。因此必须在 FIFO 中分配足够的头空间,才能让设备完全退出挂起状态,而不造成唤醒 FIFO 溢出。不得丢失任何事件,并且必须遵照 <code>max_report_latency</code>。</p>
@@ -75,7 +75,7 @@
 <p>采用 On-change 触发方式的传感器仅在测量值发生变化时才会生成事件。如果测量值在 SoC 处于挂起模式时发生变化,则应用预计会在 SoC 唤醒时立即收到事件。因此,如果采用 On-change 触发方式的<a href="suspend-mode.html#non-wake-up_sensors">非唤醒</a>传感器与其他传感器共用 FIFO,则在执行该传感器事件的批处理时,必须小心。每个采用 On-change 触发方式的传感器所生成的最后一个事件都必须保存在共享 FIFO 之外,使其永远不会被其他事件覆盖。当 SoC 唤醒时,在报告 FIFO 中的所有事件后,还必须报告最后一个采用 On-change 触发方式的传感器事件。</p>
 <p>以下是我们希望避免的情况:</p>
 <ol>
-  <li>应用同时注册到共用同一个 FIFO 的非唤醒计步器(采用 On-change 触发方式)和非唤醒加速度计(轮询模式)</li>
+  <li>应用同时注册到共用同一个 FIFO 的非唤醒计步器(采用 On-change 触发方式)和非唤醒加速度计(连续模式)</li>
   <li>应用收到一个计步器事件“step_count = 1000 步”</li>
   <li>SoC 转至挂起状态</li>
   <li>用户步行 20 步,导致计步器和加速度计事件交错存储,最后的计步器事件为“step_count = 1020 步”</li>
@@ -101,12 +101,12 @@
 <p>批处理此类数据,可在 SoC 处于挂起模式时执行行人航位推算。</p>
 <h3 id="high_value_medium_power_intermittent_activity_gesture_recognition">高值:中等功率间歇性动作/手势识别</h3>
 <p>目标批处理时间:3 秒</p>
-<p>带批处理的传感器:非唤醒加速度计(频率 50 Hz)</p>
-<p>批处理此类数据,可定期识别任意动作和手势,而无需在收集数据时保持 SoC 处于唤醒状态。</p>
+<p>待批处理的传感器:非唤醒加速度计(频率 50 Hz)</p>
+<p>批处理此类数据,可定期识别任意动作和手势,而无需在收集数据时让 SoC 保持唤醒状态。</p>
 <h3 id="medium_value_medium_power_continuous_activity_gesture_recognition">中等值:中等功率连续动作/手势识别</h3>
 <p>目标批处理时间:1 到 3 分钟</p>
 <p>待批处理的传感器:唤醒加速度计(频率 50Hz)</p>
-<p>批处理此类数据,可持续识别任意动作和手势,而无需在收集数据时保持 SoC 处于唤醒状态。</p>
+<p>批处理此类数据,可持续识别任意动作和手势,而无需在收集数据时让 SoC 保持唤醒状态。</p>
 <h3 id="medium-high_value_interrupt_load_reduction">中高值:减少中断负载</h3>
 <p>目标批处理时间:小于 1 秒</p>
 <p>待批处理的传感器:任意高频传感器(通常为非唤醒传感器)。</p>
diff --git a/zh-cn/devices/sensors/hal-interface.html b/zh-cn/devices/sensors/hal-interface.html
index 994c55b..b1a8e10 100644
--- a/zh-cn/devices/sensors/hal-interface.html
+++ b/zh-cn/devices/sensors/hal-interface.html
@@ -20,7 +20,7 @@
       limitations under the License.
   -->
 
-<p><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> 中声明的 HAL 接口表示 Android <a href="sensor-stack.html#framework">框架</a>与特定于硬件的软件之间的接口。HAL 实现必须定义 sensors.h 中声明的每个函数。主要函数如下:</p>
+<p><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> 中声明的 HAL 接口表示 Android <a href="sensor-stack.html#framework">框架</a>与特定硬件专用软件之间的接口。HAL 实现必须定义 sensors.h 中声明的每个函数。主要函数如下:</p>
 <ul>
   <li><code>get_sensors_list</code> - 返回所有传感器的列表。</li>
   <li><code>activate</code> - 启动或停止传感器。</li>
@@ -49,7 +49,7 @@
 <pre class="prettyprint">int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int
   enabled);</pre>
 <p>激活或禁用传感器。</p>
-<p><code>sensor_handle</code> 是要激活/禁用的传感器的句柄。传感器的句柄由其 <a href="#sensor_t">sensor_t</a> 结构的 <code>handle</code> 字段定义。</p>
+<p><code>sensor_handle</code> 是要激活/禁用的传感器的句柄。传感器的句柄是通过其 <a href="#sensor_t">sensor_t</a> 结构的 <code>handle</code> 字段定义的。</p>
 <p><code>enabled</code> 设为 1 时启用传感器,设为 0 时则停用传感器。</p>
 <p>单次传感器在接收到事件后会自动自行禁用,并且必须仍接受通过调用 <code>activate(...,
   enabled=0)</code> 进行禁用。</p>
@@ -81,7 +81,7 @@
   <li>单次模式:<code>sampling_period_ns</code> 会被忽略。该参数没有任何作用。</li>
   <li>特殊模式:要详细了解 <code>sampling_period_ns</code> 如何用于特殊的传感器,请参阅具体的<a href="sensor-types.html">传感器类型说明</a>。</li>
 </ul>
-<p>要详细了解 <code>sampling_period_ns</code> 在不同模式下造成的影响,请参阅<a href="report-modes.html">报告模式</a>。</p>
+<p>要详细了解 <code>sampling_period_ns</code> 在不同模式下的影响,请参阅<a href="report-modes.html">报告模式</a>。</p>
 <p>对于连续和变化传感器:</p>
 <ul>
   <li>如果 <code>sampling_period_ns</code> 小于 <code>sensor_t.minDelay</code>,则 HAL 实现必须静默地将其限制到 <code>max(sensor_t.minDelay, 1ms)</code>。Android 不支持以高于 1000Hz 的频率生成事件。</li>
@@ -149,7 +149,7 @@
 <h2 id="sensors_module_t">sensors_module_t</h2>
 <p><code>sensors_module_t</code> 是用于为传感器创建 Android 硬件模块的类型。HAL 的实现必须定义一个该类型的对象 <code>HAL_MODULE_INFO_SYM</code>,以提供 <a href="#get_sensors_list_list">get_sensors_list</a> 函数。要了解详情,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> 中 <code>sensors_module_t</code> 的定义以及 <code>hw_module_t</code> 的定义。</p>
 <h2 id="sensors_poll_device_t_sensors_poll_device_1_t">sensors_poll_device_t/sensors_poll_device_1_t</h2>
-<p><code>sensors_poll_device_1_t</code> 包含上文定义的方法的剩余部分:<code>activate</code>、<code>batch</code>、<code>flush</code> 和 <code>poll</code>。它的 <code>common</code> 字段(类型为 <a href="/devices/halref/structhw__device__t.html">hw_device_t</a>)定义了 HAL 的版本号。</p>
+<p><code>sensors_poll_device_1_t</code> 包含上文定义的方法的剩余部分:<code>activate</code>、<code>batch</code>、<code>flush</code> 和 <code>poll</code>。它的 <code>common</code> 字段(类型为 <a href="/devices/halref/structhw__device__t.html">hw_device_t</a>)用于定义 HAL 的版本号。</p>
 <h2 id="sensor_t">sensor_t</h2>
 <p><code>sensor_t</code> 表示 <a href="index.html">Android 传感器</a>。以下是 sensor_t 的一些重要字段:</p>
 <p><strong>name</strong>:表示传感器的用户可见字符串。该字符串通常包括底层传感器的部件名称、传感器的类型以及是否为唤醒传感器。例如,“LIS2HH12 Accelerometer”、“MAX21000 Uncalibrated Gyroscope”、“BMP280 Wake-up Barometer”、“MPU6515 Game Rotation Vector”。</p>
@@ -161,19 +161,19 @@
 <p><strong>flags</strong>:传感器的标记,用于定义传感器的报告模式以及传感器是否为唤醒传感器。例如,对于单次唤醒传感器,标记为 <code>flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP</code>。当前版本的 HAL 中未使用的标记位必须等于 0。</p>
 <p><strong>maxRange</strong>:传感器可报告的最大值,单位与已报告值单位相同。传感器必须能够报告 <code>[-maxRange; maxRange]</code> 范围内(未过载)的值。请注意,这意味着从常规意义上来说传感器的总范围是 <code>2*maxRange</code>。当传感器报告几条轴上的值时,该范围适用于每条轴。例如,“+/- 2g”加速度计会报告 <code>maxRange = 2*9.81 = 2g</code>。</p>
 <p><strong>resolution</strong>:传感器可测量出的最小差值。该字段通常基于 <code>maxRange</code> 和测量值的位数计算得出。</p>
-<p><strong>power</strong>:启用传感器的功耗成本,以毫安为单位。该字段值几乎始终大于底层传感器的相关数据表中报告的功耗。要了解详情,请参阅<a href="sensor-types.html#base_sensors_=_not_equal_to_physical_sensors">基础传感器不等于物理传感器</a>这篇文章;要详细了解如何测量传感器的功耗,请参阅<a href="power-use.html#power_measurement_process">功耗测量过程</a>。如果传感器的功耗取决于设备是否正在移动,则 <code>power</code> 字段中报告的值是移动时的功耗。</p>
+<p><strong>power</strong>:启用传感器的功耗成本,以毫安为单位。该字段值几乎始终大于底层传感器的相关数据表中报告的功耗。要了解详情,请参阅<a href="sensor-types.html#base_sensors_=_not_equal_to_physical_sensors">基础传感器不等于物理传感器</a>;要详细了解如何测量传感器的功耗,请参阅<a href="power-use.html#power_measurement_process">功耗测量过程</a>。如果传感器的功耗取决于设备是否正在移动,则 <code>power</code> 字段中报告的值是移动时的功耗。</p>
 <p><strong>minDelay</strong>:对于连续传感器,指对应于传感器支持的最快速率的采样周期(以微秒为单位)。要详细了解该值是如何使用的,请参阅 <a href="#sampling_period_ns">sampling_period_ns</a>。请注意,<code>minDelay</code> 以微秒为单位,而 <code>sampling_period_ns</code> 以纳秒为单位。对于变化和特殊报告模式传感器,除非另行指定,否则 <code>minDelay</code> 必须为 0。对于单次传感器,该值必须为 -1。</p>
 <p><strong>maxDelay</strong>:对于连续和变化模式传感器,指对应于传感器支持的最慢速率的采样周期(以微秒为单位)。要详细了解该值是如何使用的,请参阅 <a href="#sampling_period_ns">sampling_period_ns</a>。请注意,<code>maxDelay</code> 以微秒为单位,而 <code>sampling_period_ns</code> 以纳秒为单位。对于特殊和单次传感器,<code>maxDelay</code> 必须为 0。</p>
-<p><strong>fifoReservedEventCount</strong>:在硬件 FIFO 中为该传感器保留的事件数。如果该传感器具有专属的 FIFO,则 <code>fifoReservedEventCount</code> 是该专属 FIFO 的大小。如果该传感器与其他传感器共用 FIFO,则 <code>fifoReservedEventCount</code> 是为该传感器保留的 FIFO 部分的大小。对于大多数共享 FIFO 的系统以及没有硬件 FIFO 的系统,该值为 0。</p>
+<p><strong>fifoReservedEventCount</strong>:在硬件 FIFO 中为该传感器保留的事件数。如果该传感器具有专用的 FIFO,则 <code>fifoReservedEventCount</code> 是该专用 FIFO 的大小。如果该传感器与其他传感器共用 FIFO,则 <code>fifoReservedEventCount</code> 是为该传感器保留的 FIFO 部分的大小。对于大多数共享 FIFO 的系统以及没有硬件 FIFO 的系统,该值为 0。</p>
 <p><strong>fifoMaxEventCount</strong>:FIFO 中可为该传感器存储的最大事件数。该值总是大于或等于 <code>fifoReservedEventCount</code>。该值用于估计在假设不激活任何其他传感器的情况下,以特定速率注册到传感器时 FIFO 多快会被填满。对于没有硬件 FIFO 的系统,<code>fifoMaxEventCount</code> 为 0。要了解详情,请参阅<a href="batching.html">批量处理</a>。</p>
 <p>对于官方传感器类型的传感器,一些字段会被框架覆盖。例如,强制要求<a href="sensor-types.html#accelerometer">加速度计</a>传感器使用连续报告模式,并强制要求<a href="sensor-types.html#heart_rate">心率</a>监测器受 <code>SENSOR_PERMISSION_BODY_SENSORS</code> 权限的保护。</p>
 <h2 id="sensors_event_t">sensors_event_t</h2>
 <p>由 Android 传感器生成并通过 <a href="#poll">poll</a> 函数报告的传感器事件属于 <code>type sensors_event_t</code>。以下是 <code>sensors_event_t</code> 的一些重要字段:</p>
 <p><strong>version</strong>:必须是 <code>sizeof(struct sensors_event_t)</code>。</p>
-<p><strong>sensor</strong>:生成事件的传感器的句柄,由 <code>sensor_t.handle</code> 定义。</p>
-<p><strong>type</strong>:生成事件的传感器的类型,由 <code>sensor_t.type</code> 定义。</p>
+<p><strong>sensor</strong>:生成相应事件的传感器的句柄,如 <code>sensor_t.handle</code> 所定义。</p>
+<p><strong>type</strong>:生成相应事件的传感器的类型,如 <code>sensor_t.type</code> 所定义。</p>
 <p><strong>timestamp</strong>:事件的时间戳,以纳秒为单位。这是事件发生(采取了步骤,或是进行了加速度计测量)的时间,而不是报告事件的时间。<code>timestamp</code> 必须与 <code>elapsedRealtimeNano</code> 时钟同步,并且对于连续传感器,抖动必须很小。有时需要进行时间戳过滤以满足 CDD 要求,因为仅使用 SoC 中断时间来设置时间戳会导致抖动过大,而仅使用传感器芯片时间来设置时间戳又会由于传感器时钟漂移而无法与 <code>elapsedRealtimeNano</code> 时钟同步。</p>
-<p><strong>数据和重叠字段</strong>:由传感器测量的值。这些字段的含义和单位特定于每种传感器类型。要了解数据字段的说明,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> 和不同<a href="sensor-types.html">传感器类型</a>的定义。对于某些传感器,也可以通过 <code>status</code> 字段在数据中同时报告读取精度。该字段只能针对选定传感器类型通过管道传递,作为精度值出现在 SDK 层。对于这类传感器,其<a href="sensor-types.html">传感器类型</a>定义中会提及必须设置 status 字段。</p>
+<p><strong>数据和重叠字段</strong>:由传感器测量的值。这些字段的含义和单位特定于每种传感器类型。要了解数据字段的说明,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> 以及不同<a href="sensor-types.html">传感器类型</a>的定义。对于某些传感器,也可以通过 <code>status</code> 字段在数据中同时报告读取精度。该字段只能针对选定传感器类型通过管道传递,作为精度值出现在 SDK 层。对于这类传感器,其<a href="sensor-types.html">传感器类型</a>定义中会提及必须设置 status 字段。</p>
 <h3 id="metadata_flush_complete_events">元数据刷写完成事件</h3>
 <p>元数据事件的类型与常规传感器事件的类型相同:<code>sensors_event_meta_data_t = sensors_event_t</code>。元数据事件通过 poll 与其他传感器事件一起返回,且拥有如下字段:</p>
 <p><strong>version</strong>:必须是 <code>META_DATA_VERSION</code></p>
diff --git a/zh-cn/devices/sensors/power-use.html b/zh-cn/devices/sensors/power-use.html
index e7b8a02..47d2c8d 100644
--- a/zh-cn/devices/sensors/power-use.html
+++ b/zh-cn/devices/sensors/power-use.html
@@ -31,12 +31,12 @@
 </ul>
 <p>在<a href="sensor-types.html#composite_sensor_type_summary">复合传感器类型汇总</a>表中,这些传感器都带有低功耗 (<img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/>) 图标。</p>
 <p>您无法将这些传感器类型实现为高功耗传感器,因为它们的主要优势就是耗电量低。这些传感器会长期处于启用状态,并且很可能是全天候启用。宁愿不实现低功耗传感器,也不要将其实现为高功耗传感器,否则会导致过度耗电。</p>
-<p>对于低功耗复合传感器类型(如步测器),必须使其在硬件中执行处理流程。</p>
+<p>对于低功耗复合传感器类型(如步测器),必须在硬件中处理传感器。</p>
 <p>有关具体的功耗要求,请参阅 CDD。建议进行 CTS 测试,以便验证这些功耗要求。</p>
 <h2 id="power_measurement_process">功耗测量过程</h2>
-<p>功耗的测量对象是电池。对于以毫瓦计的值,我们使用电池的额定电压,这意味着电压为 4 伏且电流为 1 毫安时必须计为 4 毫瓦。</p>
-<p>在 SoC 处于休眠状态时测量功耗,并且计算 SoC 处于休眠状态时几秒钟内的平均值,以便将来自传感器芯片的周期性功耗峰值考虑在内。</p>
-<p>对于单次唤醒传感器,在传感器未触发时测量功耗(因此不会唤醒 SoC)。同样,对于其他传感器,在传感器数据存储在硬件 FIFO 中时测量功耗,因此 SoC 不会被唤醒。</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>
 
 </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 9acbac2..22cfef7 100644
--- a/zh-cn/devices/sensors/sensor-stack.html
+++ b/zh-cn/devices/sensors/sensor-stack.html
@@ -57,7 +57,7 @@
   <li>没有将数据从应用向下发送至传感器或其驱动程序的机制。这样可以确保某个应用无法修改传感器的行为,从而不会对其他应用造成破坏。</li>
 </ul>
 <h3 id="sensor_fusion">传感器融合</h3>
-<p>Android 框架为部分复合传感器提供默认实现。如果设备上有<a href="sensor-types.html#gyroscope">陀螺仪</a>、<a href="sensor-types.html#accelerometer">加速度计</a>和<a href="sensor-types.html#magnetic_field_sensor">磁力计</a>,但没有<a href="sensor-types.html#rotation_vector">旋转矢量</a>、<a href="sensor-types.html#gravity">重力</a>和<a href="sensor-types.html#linear_acceleration">线性加速度</a>传感器,则该框架会实现这些传感器,以便应用仍可以使用它们。</p>
+<p>Android 框架为部分复合传感器提供默认实现。如果设备上有<a href="sensor-types.html#gyroscope">陀螺仪</a>、<a href="sensor-types.html#accelerometer">加速度计</a>和<a href="sensor-types.html#magnetic_field_sensor">磁力计</a>,但没有<a href="sensor-types.html#rotation_vector">旋转矢量</a>传感器、<a href="sensor-types.html#gravity">重力</a>传感器和<a href="sensor-types.html#linear_acceleration">线性加速度</a>传感器,则该框架会实现这些传感器,以便应用仍可以使用它们。</p>
 <p>默认实现无法访问其他实现可以访问的所有数据,并且必须在 SoC 上运行,因此它不像其他实现那样精准和省电。设备制造商应尽可能定义自己的融合传感器(旋转矢量传感器、重力传感器和线性加速度传感器,以及<a href="sensor-types.html#game_rotation_vector">游戏旋转矢量</a>传感器等较新的复合传感器),而非依赖该默认实现。此外,设备制造商也可以要求传感器芯片供应商为其提供实现。</p>
 <p>默认的传感器融合实现没有相关的维护,且可能导致依赖它的设备无法通过 CTS 验证。</p>
 <h3 id="under_the_hood">深入了解</h3>
diff --git a/zh-cn/devices/sensors/sensor-types.html b/zh-cn/devices/sensors/sensor-types.html
index 5845e43..9b245e1 100644
--- a/zh-cn/devices/sensors/sensor-types.html
+++ b/zh-cn/devices/sensors/sensor-types.html
@@ -214,7 +214,7 @@
   </tr>
   <tr>
     <td><p><a href="#linear_acceleration">线性加速器</a></p></td>
-    <td><p>运动类</p></td>
+    <td><p>动作类</p></td>
     <td><p>加速度计、陀螺仪(如有)或磁力计(如果陀螺仪不存在)</p></td>
     <td><p>连续模式</p></td>
   </tr>
@@ -239,29 +239,29 @@
   <tr>
     <td><p><a href="#rotation_vector">旋转矢量传感器</a></p></td>
     <td><p>姿势类</p></td>
-    <td><p>加速度计、磁力计和(如有)陀螺仪<em></em></p></td>
+    <td><p>加速度计、磁力计和陀螺仪(如有)<em></em></p></td>
     <td><p>连续模式</p></td>
   </tr>
   <tr>
     <td><p><a href="#significant_motion">大幅度动作传感器</a> <img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/></p></td>
-    <td><p>运动类</p></td>
+    <td><p>动作类</p></td>
     <td><p>加速度计(或其他功耗极低的传感器)</p></td>
     <td><p>单次模式</p></td>
   </tr>
   <tr>
     <td><p><a href="#step_counter">计步器</a> <img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/></p></td>
-    <td><p>运动类</p></td>
+    <td><p>动作类</p></td>
     <td><p>加速度计</p></td>
     <td><p>变化模式</p></td>
   </tr>
   <tr>
-    <td><p><a href="#step_detector">步测器</a> <img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/></p></td> <td><p>运动类</p></td>
+    <td><p><a href="#step_detector">步测器</a> <img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/></p></td> <td><p>动作类</p></td>
     <td><p>加速度计</p></td>
     <td><p>特殊模式</p></td>
   </tr>
   <tr>
     <td><p><a href="#tilt_detector">倾斜检测器</a> <img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/></p></td>
-    <td><p>运动类</p></td>
+    <td><p>动作类</p></td>
     <td><p>加速度计</p></td>
     <td><p>特殊模式</p></td>
   </tr>
@@ -273,7 +273,7 @@
   </tr>
 </tbody></table>
 <p><img src="images/battery_icon.png" width="20" height="20" alt="低功耗传感器"/> = 低功耗传感器</p>
-<h2 id="activity_composite_sensors">活动复合传感器</h2>
+<h2 id="activity_composite_sensors">动作复合传感器</h2>
 <h3 id="linear_acceleration">线性加速器</h3>
 <p>底层物理传感器:加速度计和陀螺仪(如有的话;如果陀螺仪不存在,则使用磁力计)</p>
 <p>报告模式:<em><a href="report-modes.html#continuous">连续模式</a></em></p>
@@ -310,7 +310,7 @@
 <p>每个传感器事件在 <code>sensors_event_t.data[0]</code> 中报告 1</p>
 <h3 id="step_detector">步测器</h3>
 <p>底层物理传感器:加速度计(可能还有其他低功耗计量器)</p>
-<p><em></em>报告模式:<a href="report-modes.html#special">特殊模式</a>(一步触发一个事件)</p>
+<p>报告模式:<a href="report-modes.html#special">特殊模式</a>(一步触发一个事件)<em></em></p>
 <p>低功耗</p>
 <p><code>getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)</code> 会返回一个非唤醒传感器<em></em></p>
 <p>用户每走一步,步测器就触发一个事件。</p>
diff --git a/zh-cn/devices/sensors/versioning.html b/zh-cn/devices/sensors/versioning.html
index 261259f..cb90660 100644
--- a/zh-cn/devices/sensors/versioning.html
+++ b/zh-cn/devices/sensors/versioning.html
@@ -109,7 +109,7 @@
 
 <p><code>SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE</code> - <a href="/devices/sensors/report-modes.html#one-shot">单次模式</a>传感器</p>
 
-<p><code>SENSOR_FLAG_CONTINUOUS_MODE</code> - <a href="/devices/sensors/report-modes.html#continuous">连续模式</a>传感器;<code>SENSOR_FLAG_ON_CHANGE_MODE</code> - <a href="/devices/sensors/report-modes.html#on-change">变化模式</a>传感器(<a href="#proximity">近程</a>传感器除外);<code>SENSOR_FLAG_SPECIAL_REPORTING_MODE</code> - <a href="/devices/sensors/report-modes.html#special">特殊</a>报告模式传感器(<a href="/devices/sensors/sensor-types.html#tilt_detector">倾斜探测器</a>除外)。</p>
+<p><code>SENSOR_FLAG_CONTINUOUS_MODE</code> - <a href="/devices/sensors/report-modes.html#continuous">连续模式</a>传感器;<code>SENSOR_FLAG_ON_CHANGE_MODE</code> - <a href="/devices/sensors/report-modes.html#on-change">变化模式</a>传感器(<a href="#proximity">近程传感器</a>除外);<code>SENSOR_FLAG_SPECIAL_REPORTING_MODE</code> - <a href="/devices/sensors/report-modes.html#special">特殊</a>报告模式传感器(<a href="/devices/sensors/sensor-types.html#tilt_detector">倾斜探测器</a>除外)。</p>
 
 <p><code>SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE</code> - <a href="/devices/sensors/sensor-types.html#proximity">近程</a>传感器和 Android 官方<a href="/devices/sensors/sensor-types.html#tilt_detector">倾斜探测器</a>传感器。</p>
 
diff --git a/zh-cn/devices/tech/admin/enterprise-telephony.html b/zh-cn/devices/tech/admin/enterprise-telephony.html
index 28e7bab..7fd7462 100644
--- a/zh-cn/devices/tech/admin/enterprise-telephony.html
+++ b/zh-cn/devices/tech/admin/enterprise-telephony.html
@@ -40,8 +40,8 @@
 <p>
 例如:
 </p><ul>
-<li><strong>为工作联系人添加标记</strong>:请参阅 <code>packages/apps/ContactsCommon</code> <em>f3eb5a207bfe0ff3b4ed2350ae5865ed8bc59798</em>
-</li><li><strong>跨资料搜索</strong>:请参阅 <code>packages/apps/ContactsCommon</code> <em>cd0b29ddbf3648e48f048196c62245d545bc6122</em></li>
+<li><strong>为工作联系人添加标记</strong>:请参阅 <code>packages/apps/ContactsCommon</code> f3eb5a207bfe0ff3b4ed2350ae5865ed8bc59798<em></em>
+</li><li><strong>跨资料搜索</strong>:请参阅 <code>packages/apps/ContactsCommon</code> cd0b29ddbf3648e48f048196c62245d545bc6122<em></em></li>
 </ul>
 
 <h2 id="implementation">实现</h2>
diff --git a/zh-cn/devices/tech/admin/managed-profiles.html b/zh-cn/devices/tech/admin/managed-profiles.html
index f78ab43..23bec8b 100644
--- a/zh-cn/devices/tech/admin/managed-profiles.html
+++ b/zh-cn/devices/tech/admin/managed-profiles.html
@@ -36,7 +36,7 @@
 
 <h3 id="applications">应用</h3>
 
-<p>当同一应用同时存在于主用户和受管理资料中时,应用使用自己的隔离数据限定范围。通常,应用彼此独立地进行操作,并且彼此之间不能跨越资料-用户边界直接通信。</p>
+<p>当同一应用同时存在于主用户和受管理资料中时,应用使用自己的隔离数据限定范围。通常,应用的操作相互独立,彼此之间不能跨越资料-用户边界直接通信。</p>
 
 <h3 id="accounts">帐号</h3>
 
@@ -46,7 +46,7 @@
 
 <h3 id="intents">Intent</h3>
 
-<p>管理员可以控制是否在/不在受管理资料中解析 Intent。在默认情况下,受管理资料中的应用的范围被限定到受管理资料内,但 Device Policy API 除外。</p>
+<p>管理员可以控制是否在/不在受管理资料中解析 Intent。在默认情况下,受管理资料中应用的范围被限定到受管理资料内,但 Device Policy API 除外。</p>
 
 <h3 id="settings">设置</h3>
 
@@ -117,15 +117,15 @@
 
 <h3 id="dpm_api">DevicePolicyManager API</h3>
 
-<p>Android 5.0 及更高版本大幅改进了 DevicePolicyManager,其中包含数十个新的 API,可同时支持企业所有和自带设备 (BYOD) 的管理用例。示例包括应用限制、证书静默安装和跨资料共享 intent 访问控制。可以从示例 Device Policy Client (DPC) 应用 <a href="https://developer.android.com/samples/BasicManagedProfile/index.html" class="external">BasicManagedProfile.apk</a> 着手使用。有关详情,请参阅<a href="https://developer.android.com/training/enterprise/work-policy-ctrl.html" class="external">构建工作政策控制器</a>。</p>
+<p>Android 5.0 及更高版本大幅改进了 DevicePolicyManager,其中包含数十个新的 API,可同时支持企业所有和自带设备 (BYOD) 的管理用例,例如应用限制、证书静默安装和跨资料共享 intent 访问控制。可以从示例 Device Policy Client (DPC) 应用 <a href="https://developer.android.com/samples/BasicManagedProfile/index.html" class="external">BasicManagedProfile.apk</a> 着手使用。有关详情,请参阅<a href="https://developer.android.com/training/enterprise/work-policy-ctrl.html" class="external">构建工作政策控制器</a>。</p>
 
 <h2 id="user-experience">受管理资料用户体验</h2>
 
   <p>
-Android 9 在受管理资料和平台之间建立了更紧密的集成,使用户可以在其设备上更轻松地将工作信息和个人信息隔离开来。这些受管理资料用户体验变化会体现在启动器中。通过实现这些变化,可在受管理设备间打造一致的用户体验。
+Android 9 在受管理资料和平台之间建立了更紧密的集成,使用户可以在其设备上更轻松地将工作信息和个人信息隔离开来。受管理资料的这些用户体验变化会体现在启动器中。通过实现这些变化,可在受管理设备间打造一致的用户体验。
   </p>
 
-  <h3 id="ux-changes-app-try">具有应用托盘的设备上的用户体验变化</h3>
+  <h3 id="ux-changes-app-tray">具有应用托盘的设备上的用户体验变化</h3>
 
     <p>
 Android 9 中 Launcher 3 的受管理资料用户体验变化有助于用户维护单独的个人资料和受管理资料。应用抽屉提供了一个标签式视图,用于区分个人资料应用。当用户首次查看受管理资料标签时,系统会显示一个指导视图,以协助用户浏览受管理资料。用户还可以使用启动器工作标签中的切换开关来开启和关闭受管理资料。
@@ -188,7 +188,7 @@
 
     <p>
 如果工作文件夹无法正确填充,并且新安装的应用未添加到该文件夹,请在 <a href="https://android.googlesource.com/platform/packages/apps/Launcher3/+/master/src/com/android/launcher3/util/ManagedProfileHeuristic.java" class="external"><code>ManagedProfileHeuristic</code></a> 类中的 <code>onAllAppsLoaded</code> 方法内应用以下更改:
-    </p>
+</p>
 
 <pre class="prettyprint">for (LauncherActivityInfo app : apps) {
         // Queue all items which should go in the work folder.
diff --git a/zh-cn/devices/tech/admin/ota-updates.html b/zh-cn/devices/tech/admin/ota-updates.html
index ef691bf..b362f3c 100644
--- a/zh-cn/devices/tech/admin/ota-updates.html
+++ b/zh-cn/devices/tech/admin/ota-updates.html
@@ -78,7 +78,7 @@
       </ul>
 
       <p>
-系统更新客户端可以查询 <code>SystemUpdatePolicy.InstallationOption</code>,方法是使用 <code>SystemUpdatePolicy.getInstallationOptionAt(long <var>when</var>)</code>,其中“when”表示查询安装选项的时间(从公元纪年开始计算的毫秒数)。<var></var>系统更新客户端可以使用 <code>SystemUpdatePolicy.getInstallationOptionAt(long <var>when</var>)</code> 方法在有效时间结束前针对返回的选项执行操作。在返回的选项失效后,客户端可以使用新的时间戳为最近的选项执行另一次查询。
+系统更新客户端可以查询 <code>SystemUpdatePolicy.InstallationOption</code>,方法是使用 <code>SystemUpdatePolicy.getInstallationOptionAt(long <var>when</var>)</code>,其中“when”表示查询安装选项的时间(从公元纪年开始计算的毫秒数)<var></var>。系统更新客户端可以使用 <code>SystemUpdatePolicy.getInstallationOptionAt(long <var>when</var>)</code> 方法在有效时间结束前针对返回的选项执行操作。在返回的选项失效后,客户端可以使用新的时间戳为最近的选项执行另一次查询。
       </p>
 
     <p>
diff --git a/zh-cn/devices/tech/admin/provision.html b/zh-cn/devices/tech/admin/provision.html
index c8bc21e..47db9a4 100644
--- a/zh-cn/devices/tech/admin/provision.html
+++ b/zh-cn/devices/tech/admin/provision.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>
@@ -30,7 +30,7 @@
 
 <p>托管配置是一个框架式界面流程,用于确保用户充分了解设置设备所有者或受管理资料的含义。它旨在充当受管理资料的设置向导。</p>
 
-<p class="note"><strong>注意</strong>:只能为未配置的设备设置设备所有者。如果 <code>Settings.Secure.USER_SETUP_COMPLETE</code> 已设置,则设备会被视为已配置,不能再设置设备所有者。</p>
+<p class="note"><strong>注意</strong>:只能为未配置的设备设置所有者。如果之前曾设置过 <code>Settings.Secure.USER_SETUP_COMPLETE</code>,则设备会被视为已配置,并且不能再设置所有者。</p>
 
 <p>如果启用设备的默认加密功能,则设备的管理配置流程会相当简单和快速。受管理配置组件会:</p>
 
diff --git a/zh-cn/devices/tech/admin/testing-provision.html b/zh-cn/devices/tech/admin/testing-provision.html
index 3058f64..b6604db 100644
--- a/zh-cn/devices/tech/admin/testing-provision.html
+++ b/zh-cn/devices/tech/admin/testing-provision.html
@@ -20,15 +20,17 @@
       limitations under the License.
   -->
 
-<p>Android for Work (AfW) 自动化测试框架是一个用于验证 Android 设备的 AfW 兼容性的测试套件。该套件包括配套应用、测试用例、配置文件和一个基于 <code>cts-tradefed</code> 的测试运行程序 (<code>afw-test-tradefed</code>)。您应在完成<a href="/devices/tech/admin/provision.html">设备管理配置</a>后再设置并运行 AfW 自动化测试框架。</p>
+<p>Android Enterprise (AE) 自动化测试框架是一个用于验证 Android 设备的企业级兼容性的测试套件。该套件包括配套应用、测试用例、配置文件和一个基于 <code>afw-test-tradefed</code> 的测试运行程序 (<code>cts-tradefed</code>)。您应在完成<a href="/devices/tech/admin/provision.html">设备管理配置</a>后再设置并运行 AE 自动化测试框架。</p>
 
-<p class="note"><strong>注意</strong>:AfW 自动化测试框架的编译和运行步骤与 Android <a href="/compatibility/cts/index.html">兼容性测试套件 (CTS)</a> 类似。</p>
+<p class="note"><strong>注意</strong>:AE 自动化测试框架的编译和运行步骤与 Android <a href="/compatibility/cts/index.html">兼容性测试套件 (CTS)</a> 类似。</p>
+
+<p>很多工具、目录和分支名称都包含 AfW 标签。<em></em>Android for Work (AfW) 是 Android 企业级功能之前的名字。</p>
 
 <h2 id="setup_env">设置开发环境</h2>
-<p>AfW 自动化测试框架的开发环境类似于 Android 操作系统的开发环境。请按照相关<a href="/setup/requirements.html">要求</a>中的步骤设置开发设备。</p>
+<p>AE 自动化测试框架的开发环境类似于 Android 操作系统的开发环境。请按照相关<a href="/setup/requirements.html">要求</a>中的步骤设置开发设备。</p>
 
 <h2 id="download_source">下载源代码</h2>
-<p>按照<a href="/setup/downloading.html">下载源代码</a>中的步骤下载 AfW 自动化测试框架源代码。AfW 自动化测试框架源代码位于 <code>./test/AfwTestHarness</code> 项目中。要下载的 AfW 自动化测试框架版本取决于分支名称(每个 Android 平台都具有单独的 AfW 自动化测试框架版本)。Android 7.0 的分支名称为 <code>afw-test-harness-nougat-dev</code>。要初始化该分支的 Repo 并下载源代码,请使用:</p>
+<p>按照<a href="/setup/downloading.html">下载源代码</a>中的步骤下载 AE 自动化测试框架源代码。AE 自动化测试框架源代码位于 <code>./test/AfwTestHarness</code> 项目中。要下载的 AE 自动化测试框架版本取决于分支名称(每个 Android 平台都有一个单独的 AE 自动化测试框架版本)。Android 7.0 的分支名称为 <code>afw-test-harness-nougat-dev</code>。要初始化该分支的 Repo 并下载源代码,请使用:</p>
 
 <pre class="devsite-click-to-copy">
 <code class="devsite-terminal">mkdir WORKING_DIRECTORY</code>
@@ -67,7 +69,7 @@
 <p>编译自动化测试框架所需的其他依赖项目也会随源代码一并下载。</p>
 
 <h3 id="view_studio">在 Android Studio 中查看</h3>
-<p>要在 Android Studio 中查看和修改 AfW 源代码,请执行以下操作:</p>
+<p>要在 Android Studio 中查看和修改源代码,请执行以下操作:</p>
 <ol>
 <li>运行以下命令:<pre class="devsite-click-to-copy">
 <code class="devsite-terminal">make idegen</code>
@@ -77,12 +79,12 @@
 <li>在 Android Studio 中打开 <code>android.ipr</code>。</li>
 </ol>
 
-<p>AfW 自动化测试框架源代码位于 <code>test/AfwTestHarness</code> 中。</p>
+<p>AE 自动化测试框架源代码位于 <code>test/AfwTestHarness</code> 中。</p>
 
-<h2 id="config_harness">配置 AfW 自动化测试框架</h2>
+<h2 id="config_harness">配置 AE 自动化测试框架</h2>
 <p>通过配置 <code>test/AfwTestHarness/afw-test.props</code>,您可以自定义自动化测试框架。要成功运行自动化测试框架,请按照以下步骤操作:</p>
 <ol>
-<li>使用以下属性在 <code>afw-test.props</code> 中配置 WLAN 网络:<pre class="devsite-click-to-copy">
+<li>使用以下属性在 <code>afw-test.props</code> 中配置 Wi-Fi 网络:<pre class="devsite-click-to-copy">
 wifi_ssid
 wifi_password (optional)
 wifi_security_type (optional, available options are: NONE, WEP or WPA)
@@ -93,11 +95,11 @@
 work_account_username
 work_account_password
 </pre>
-<p>AfW 自动化测试框架使用 Test DPC 来测试配置流程。因此,帐号<strong>必须</strong>与 Test DPC 绑定才能运行自动化测试框架。</p>
+<p>AE 自动化测试框架使用 Test DPC 来测试配置流程。因此,帐号<strong>必须</strong>与 Test DPC 绑定才能运行自动化测试框架。</p>
 </li>
 </ol>
 
-<h2 id="build_harness">编译 AfW 自动化测试框架</h2>
+<h2 id="build_harness">编译 AE 自动化测试框架</h2>
 <p>使用以下命令初始化编译配置:</p>
 <pre class="devsite-click-to-copy">
 <code class="devsite-terminal">source build/envsetup.sh</code>
@@ -112,8 +114,8 @@
 </pre>
 <p>该操作将创建一个目录 (<code>out/host/linux-x86/afw-th/android-cts</code>),该目录包含运行自动化测试框架所需的全部二进制文件、配置文件和工具。该目录还会被压缩成一个文件 (<code>out/host/linux-x86/afw-th/android-afw-test-harness.zip</code>) 以供分发。</p>
 
-<h2 id="run_harness">运行 AfW 自动化测试框架</h2>
-<p>请按照以下步骤运行 AfW 自动化测试框架:</p>
+<h2 id="run_harness">运行 AE 自动化测试框架</h2>
+<p>请按照以下步骤运行 AE 自动化测试框架:</p>
 <ol>
 <li>在您的编译环境中使用以下命令启动测试运行程序:
 <pre class="devsite-terminal devsite-click-to-copy">
@@ -124,7 +126,7 @@
 <pre class="devsite-click-to-copy">
 cts-tf&gt; ./android‐cts/tools/afw-test‐tradefed
 </pre>
-该操作将从 <code>android-cts</code> 目录中加载测试方案、测试用例和 <code>afw-test.props</code>。请确保 <code>./android‐cts/repository/testcases/afw-test.props</code> 包含工作帐号和 WLAN 配置信息。</li>
+该操作将从 <code>android-cts</code> 目录中加载测试方案、测试用例和 <code>afw-test.props</code>。请确保 <code>./android‐cts/repository/testcases/afw-test.props</code> 包含工作帐号和 Wi-Fi 配置信息。</li>
 
 <li>运行测试方案。每个测试方案都是一个 XML 文件,其中包含从 <code>AfwTestHarness/tests</code> 测试包目录中获取的一组测试包。常见方案包括:
 
@@ -146,7 +148,7 @@
 要查看所有测试包,请使用命令 <code>list packages</code>。要查看更多选项,请使用命令 <code>run cts --help</code>。</li>
 </ol>
 
-<h2 id="debug_harness">调试 AfW 自动化测试框架</h2>
+<h2 id="debug_harness">调试 AE 自动化测试框架</h2>
 <p>您可以通过运行 <code>afw-test-tradefed</code> 来启动 afw-test-tradefed 控制台 (<code>cts-tf</code>),从而在该控制台中运行所有命令。</p>
 <ul>
 
@@ -177,7 +179,7 @@
 
 <li>使用 <code>afwtest</code> 借助过滤器监控实时 logcat,然后打开另一个终端,并使用 <code>adb logcat | grep afwtest</code> 启动 logcat。测试完成后,请执行以下操作:
 <ul>
-<li>在 <code>out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em></code> 中查看日志。完整的设备 logcat 和主机日志(<code>afw-test-tradefed</code> 日志)会保存在单独的 ZIP 文件中。</li>
+<li>查看 <code>out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em></code> 中的日志。完整的设备 logcat 和主机日志(<code>afw-test-tradefed</code> 日志)会保存在单独的 ZIP 文件中。</li>
 
 <li>通过搜索设备 logcat,查看与 <strong>afwtest</strong> 相关的信息。例如:<code>zless
 out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em>/device_logcat_<em>random-number</em>.zip
@@ -188,7 +190,8 @@
 </li>
 </ul>
 </li>
-<li>测试包通过以下方式将 AfW 的配置流程自动化:访问界面页面,并将导航日志记录在每个页面的设备 logcat 文件中。例如:<code>afwtest.AutomationDriver:
+<li>测试包通过以下方式将企业配置流程自动化:访问界面页面,并将导航日志记录在每个页面的设备 logcat 文件中。
+例如:<code>afwtest.AutomationDriver:
 Navigating:com.android.afwtest.uiautomator.pages.gms.AddAccountPage</code>
 <br />用于测试包 <code>com.android.afwtest.NfcProvisioning</code> 的界面页面包括:<ul>
 <li>
@@ -201,7 +204,7 @@
 <li>如果测试在配置过程中失败,logcat 将包含类似于以下内容的错误消息:<pre class="devsite-click-to-copy">
 TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage
 </pre>
-这类错误通常是由之前的界面网页或加载失败的网页中的错误所导致,因此,请尝试在 logcat 中找到出现该错误之前的其他错误消息,然后按照配置流程手动重现该错误。</li>
+这类错误通常是由之前的界面页面或加载失败的页面中的错误所导致,因此,请尝试在 logcat 中找到出现该错误之前的其他错误消息,然后按照配置流程手动重现该错误。</li>
 <li>如果测试包运行失败:
 <ul>
 <li>系统会使用下列语法将屏幕截图保存到 <code>out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em></code>:<code>screenshot-test_<em>test_class_full_name</em>_<em>test_case_name</em>-<em>random_number</em>.png</code>。该信息也会记录在主机日志中。</li>
diff --git a/zh-cn/devices/tech/config/carrier.html b/zh-cn/devices/tech/config/carrier.html
index 998425b..d2d08ef 100644
--- a/zh-cn/devices/tech/config/carrier.html
+++ b/zh-cn/devices/tech/config/carrier.html
@@ -175,7 +175,7 @@
 
 <ul>
   <li>包含有效证书签名的 SIM 卡
-  </li><li>运行 Android 6.0 或更高版本的设备(例如 Nexus 设备)
+  </li><li>运行 Android 6.0 及更高版本的设备(例如 Nexus 设备)
 </li></ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/config/filesystem.html b/zh-cn/devices/tech/config/filesystem.html
index cd7bc8b..da34adc 100644
--- a/zh-cn/devices/tech/config/filesystem.html
+++ b/zh-cn/devices/tech/config/filesystem.html
@@ -22,7 +22,7 @@
   -->
 
 <p>
-  添加到编译环境中的文件系统对象和服务通常需要您为其分别指定唯一 ID,称为 Android ID (AID)。目前,文件和服务等很多资源并非必须使用 Android 定义的核心 AID;在很多情况下,您可以改为使用 OEM 定义的 AID。
+  添加到编译环境的文件系统对象和服务通常需要单独的专属 ID,称为 Android ID (AID)。目前,文件和服务等很多资源并非必须使用 Android 定义的核心 AID;在很多情况下,您可以改为使用 OEM 定义的 AID。
 </p>
 
 <p>
@@ -45,13 +45,13 @@
 </p>
 
 <aside class="note">
-  <strong>注意</strong>:虽然您仍可以使用<a href="#older">旧版 Android 中的文件系统替换方法</a>,但不能同时再使用新的 AID 机制。建议您尽可能使用新的机制。
+  <strong>注意</strong>:虽然您仍可以使用<a href="#older">旧版 Android 中的文件系统替换方法</a>,但在使用该方法时,不能同时使用新的 AID 机制。建议您尽可能使用新的机制。
 </aside>
 
 <h2 id="adding-android-aids">添加 Android ID (AID)</h2>
 
 <p>
-  Android 8.0 从 Android 开源项目 (AOSP) 中移除了 <code>android_ids[]</code> 数组。所有好记的 AID 名称都改为在生成 Bionic <code>android_ids[]</code> 数组时从 <code>system/core/include/private/android_filesystem_config.h</code> 标头文件生成。这种机制会发现与 <code>AID_*</code> 匹配的所有 <code>define</code>,且 <strong>*</strong> 会变为小写名称。
+  Android 8.0 从 Android 开源项目 (AOSP) 中移除了 <code>android_ids[]</code> 数组。所有好记的 AID 名称都改为在生成 Bionic <code>android_ids[]</code> 数组时从 <code>system/core/include/private/android_filesystem_config.h</code> 标头文件生成。这种机制会发现与 <code>define</code> 匹配的所有 <code>AID_*</code>,且 <strong>*</strong> 会变为小写名称。
 </p>
 
 <p>
@@ -81,25 +81,25 @@
 </p>
 
 <aside class="caution">
-  <strong>注意</strong>:请勿将 <code>TARGET_FS_CONFIG_GEN</code> 与旧版 Android 中早期的 <code>TARGET_ANDROID_FILESYSTEM_CONFIG_H</code> 方法结合使用!否则,您会收到错误提示。
+  <strong>注意</strong>:请勿将 <code>TARGET_FS_CONFIG_GEN</code> 与更低版本 Android 中较旧的 <code>TARGET_ANDROID_FILESYSTEM_CONFIG_H</code> 方法结合使用!否则,您会收到错误提示。
 </aside>
 
 <p>
-  按照惯例,配置文件使用名称 <code>config.fs</code>,但在实际使用中,您可以使用任何名称。<code>config.fs</code> 文件采用 <a href="https://docs.python.org/2/library/configparser.html" class="external">Python ConfigParser ini 格式</a>,并包含 caps 部分(用于配置文件系统权能)和 AID 部分(用于配置 OEM AID)。
+  按照惯例,配置文件使用名称 <code>config.fs</code>,但在实际中,您可以使用任意名称。<code>config.fs</code> 文件采用 <a href="https://docs.python.org/2/library/configparser.html" class="external">Python ConfigParser ini 格式</a>,并包含 caps 部分(用于配置文件系统权能)和 AID 部分(用于配置 OEM AID)。
 </p>
 
 <h3 id="configuring-the-caps-section">配置 caps 部分</h3>
 
 <aside class="note">
-  <strong>注意</strong>:<a href="/devices/tech/config/ambient">Ambient 权能</a>是为 <code>init</code> 所启动的服务设置权能的首选机制(此方法将服务配置的所有方面保存在单个 <code>.rc</code> 文件中)。我们建议您对这些服务使用 Ambient 权能,而不是在 <code>config.fs</code> 文件中使用 caps 部分配置文件系统权能。在为<strong>并非 <code>init</code> 所启动</strong>的服务设置权能时,请继续使用 <code>fs_config.c</code> 配置文件系统权能。
+  <strong>注意</strong>:<a href="/devices/tech/config/ambient">Ambient 权能</a>是为由 <code>init</code> 启动的服务设置权能的首选机制(此方法会将服务配置的所有方面保存在单个 <code>.rc</code> 文件中)。建议您对这些服务使用 Ambient 权能,而不是在 <code>config.fs</code> 文件中使用 caps 部分配置文件系统权能。在为<strong>不是由 <code>init</code> 启动</strong>的服务设置权能时,请继续使用 <code>fs_config.c</code> 配置文件系统权能。
 </aside>
 
 <p>
-  利用 caps 部分,您可以在编译环境中对文件系统对象设置<a href="http://man7.org/linux/man-pages/man7/capabilities.7.html" class="external">文件系统权能</a>(文件系统本身也必须支持此功能)。
+  caps 部分支持在编译环境中对文件系统对象设置<a href="http://man7.org/linux/man-pages/man7/capabilities.7.html" class="external">文件系统权能</a>(文件系统本身也必须支持此功能)。
 </p>
 
 <p>
-  由于在 Android 中以 Root 身份运行稳定的服务会导致无法通过<a href="/compatibility/cts/index.html">兼容性测试套件 (CTS)</a> 测试,因此在之前有关在运行进程或服务时保留权能的要求中,您在运行进程或服务时需要先设置权能,然后使用 <code>setuid</code>/<code>setgid</code> 设置适当的 AID。借助 caps 部分,您可以跳过这些要求,让内核为您代劳。当控制权交给 <code>main()</code> 时,您的进程已拥有其所需的权能,因此您的服务可以使用非 Root 用户和群组(这是启动特权服务的首选方式)。
+  由于在 Android 中以 Root 身份运行稳定的服务会导致无法通过<a href="/compatibility/cts/index.html">兼容性测试套件 (CTS)</a> 测试,因此之前有关在运行进程或服务时必须保留权能的要求中规定,必须先设置权能,然后再使用 <code>setuid</code>/<code>setgid</code> 设置适当的 AID。借助 caps 部分,您可以跳过这些要求,让内核为您代劳。当控制权交给 <code>main()</code> 时,您的进程已拥有其所需的权能,因此您的服务可以使用非 Root 用户和群组(这是启动特权服务的首选方式)。
 </p>
 
 <p>
@@ -173,7 +173,7 @@
   <td><code>value</code></td>
   <td>&lt;number&gt;</td>
   <td>有效的 C 样式的数字字符串(十六进制、八进制、二进制和十进制)。
-  <br /><br />使用同一值选项指定多个部分<strong>或</strong>指定超出收录的 OEM 范围(在 <code>system/core/include/private/android_filesystem_config.h</code> 中指定)的值都是错误的做法:
+  <br /><br />无论是使用同一个值选项指定多个部分,<strong>还是</strong>指定超出收录的 OEM 范围(在 <code>system/core/include/private/android_filesystem_config.h</code> 中指定)的值,都是错误的做法:
   <ul>
   <li>AID_OEM_RESERVED_START(2900) - AID_OEM_RESERVED_END(2999)</li>
   <li>AID_OEM_RESERVED_2_START(5000) - AID_OEM_RESERVED_2_END(5999)</li>
@@ -285,17 +285,17 @@
 </aside>
 
 <p>
-  创建好文件后,设置 <code>TARGET_FS_CONFIG_GEN</code> 并在 <code>BoardConfig.mk</code> 中指向该文件。例如,在 <code>device/x/y/BoardConfig.mk</code> 中设置以下内容:
+  创建好文件后,在 <code>BoardConfig.mk</code> 中设置 <code>TARGET_FS_CONFIG_GEN</code>,以指向该文件。例如,在 <code>device/x/y/BoardConfig.mk</code> 中设置以下内容:
 </p>
 
 <pre>
 TARGET_FS_CONFIG_GEN += device/x/y/config.fs
 </pre>
 
-<p>当执行服务 <code><strong>vendor_</strong>foo</code> 时,它会先使用权能 <code>CAP_SYS_ADMIN</code> 和 <code>CAP_SYS_NICE</code>,而不使用 <code>setuid</code> 和 <code>setgid</code> 调用。此外,<code><strong>vendor_</strong>foo</code> 服务的 SELinux 策略也不再需要 <code>setuid</code> 和 <code>setgid</code> 权能,因此可以删除这些权能。
+<p>当执行 <code><strong>vendor_</strong>foo</code> 服务时,它会先使用 <code>CAP_SYS_ADMIN</code> 和 <code>CAP_SYS_NICE</code> 权能,而不使用 <code>setuid</code> 和 <code>setgid</code> 调用。此外,<code><strong>vendor_</strong>foo</code> 服务的 SELinux 政策不再需要 <code>setuid</code> 和 <code>setgid</code> 权能,因此可以删除这些权能。
 </p>
 
-<h2 id="older">配置替换(Android 6.x 到 7.x 版本)</h2>
+<h2 id="older">配置替换(Android 6.x 到 7.x)</h2>
 
 <p>
   Android 6.0 将 <code>fs_config</code> 和关联的结构定义 (<code>system/core/include/private/android_filesystem_config.h</code>) 转移到了 <code>system/core/libcutils/fs_config.c</code>。在此处,可使用安装在 <code>/system/etc/fs_config_dirs</code> 和 <code>/system/etc/fs_config_files</code> 中的二进制文件更新或替换它们。针对目录和文件分别采用单独的匹配和解析规则(可能会使用其他全局表达式),这样一来,Android 就能够在两个不同的表格中处理目录和文件。<code>system/core/libcutils/fs_config.c</code> 中的结构定义不仅可让系统在运行时读取目录和文件,而且主机在编译时也可以使用相同的文件将文件系统映像构建为 <code>${OUT}/system/etc/fs_config_dirs</code> 和 <code>${OUT}/system/etc/fs_config_files</code>。
@@ -307,9 +307,9 @@
 
 <h3 id="older-generate">生成替换文件</h3>
 
-<p>您可以使用 <code>build/tools/fs_config</code> 中的 <code>fs_config_generate</code> 工具生成相应的二进制文件 <code>/system/etc/fs_config_dirs</code> 和 <code>/system/etc/fs_config_files</code>。该工具使用 <code>libcutils</code> 库函数 (<code>fs_config_generate()</code>) 管理放入缓冲区内的 DAC 需求,并为头文件定义规则来规定 DAC 规则的用法。</p>
+<p>您可以使用 <code>build/tools/fs_config</code> 中的 <code>fs_config_generate</code> 工具生成相应的二进制文件 <code>/system/etc/fs_config_dirs</code> 和 <code>/system/etc/fs_config_files</code>。该工具使用 <code>libcutils</code> 库函数 (<code>fs_config_generate()</code>) 将 DAC 要求放入一个缓冲区内,并为包含文件定义规则,以规定 DAC 规则的用法。</p>
 
-<p>要使用该工具,请在 <code>device/<em>vendor</em>/<em>device</em>/android_filesystem_config.h</code> 中创建头文件作为替换文件。该文件必须使用 <code>system/core/include/private/android_filesystem_config.h</code> 中定义的 <code>structure fs_path_config</code> 格式,并对目录和文件符号进行以下结构初始化:</p>
+<p>要使用该工具,请在 <code>device/<em>vendor</em>/<em>device</em>/android_filesystem_config.h</code> 中创建用作替换文件的包含文件。该文件必须使用 <code>system/core/include/private/android_filesystem_config.h</code> 中定义的 <code>structure fs_path_config</code> 格式,并对目录和文件符号进行以下结构初始化:</p>
 <ul>
 <li>对于目录,请使用 <code>android<strong>_device</strong>_dirs[]</code>。</li>
 <li>对于文件,请使用 <code>android<strong>_device</strong>_files[]</code>。</li>
@@ -339,7 +339,7 @@
 <h3 id="older-example">替换示例</h3>
 
 <p>
-  此示例展示了用于替换 <code>system/bin/glgps</code> 守护进程以在 <code>device/<em>vendor</em>/<em>device</em></code> 目录中添加唤醒锁定支持的补丁程序。请注意以下几点:
+  以下示例展示了一个补丁程序,该程序用于替换 <code>system/bin/glgps</code> 守护进程,以在 <code>device/<em>vendor</em>/<em>device</em></code> 目录中添加唤醒锁定支持。请注意以下几点:
 </p>
 
 <ul>
@@ -417,10 +417,10 @@
 
 <ul>
   <li>Android 6.x 移除了部分头文件、结构和内嵌定义。</li>
-  <li>Android 6.x 需要引用 <code>libcutils</code>,而不是直接从 <code>system/core/include/private/android_filesystem_config.h</code> 运行。依赖于 <code>system/code/include/private_filesystem_config.h</code> 的文件/目录结构或者 <code>fs_config</code> 的设备制造商私密可执行文件必须添加 <code>libcutils</code> 库依赖项。</li>
-  <li>Android 6.x 需要 <code>system/core/include/private/android_filesystem_config.h</code> 的设备制造商专有分支副本,该副本应包含有关现有目标的附加内容,以便移至 <code>device/<em>vendor</em>/<em>device</em>/android_filesystem_config.h</code>。
+  <li>Android 6.x 需要引用 <code>libcutils</code>,而不是直接从 <code>system/core/include/private/android_filesystem_config.h</code> 运行。文件/目录结构依赖于 <code>system/code/include/private_filesystem_config.h</code> 的设备制造商专属可执行文件或者 <code>fs_config</code> 必须添加 <code>libcutils</code> 库依赖项。</li>
+  <li>Android 6.x 需要 <code>system/core/include/private/android_filesystem_config.h</code> 的设备制造商专属分支副本,该副本应包含有关现有目标的附加内容,以便移至 <code>device/<em>vendor</em>/<em>device</em>/android_filesystem_config.h</code>。
   </li>
-  <li>由于 Android 6.x 保留将 SELinux 强制访问控制 (MAC) 应用于目标系统中配置文件的权利,因此包含使用 <code>fs_config()</code> 的自定义目标可执行文件的实现必须确保具有访问权限。</li>
+  <li>由于 Android 6.x 保留将 SELinux 强制访问控制 (MAC) 应用于目标系统中的配置文件的权利,因此如果实现包含使用 <code>fs_config()</code> 的自定义目标可执行文件,则必须确保具有访问权限。</li>
 </ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/config/namespaces_libraries.html b/zh-cn/devices/tech/config/namespaces_libraries.html
index 6aef47f..afab4d6 100644
--- a/zh-cn/devices/tech/config/namespaces_libraries.html
+++ b/zh-cn/devices/tech/config/namespaces_libraries.html
@@ -41,11 +41,31 @@
 <h2 id="adding-additional-native-libraries">添加其他原生库</h2>
 
 <p>
-除了标准的公共原生库之外,供应商还可以选择提供可供应用访问的其他原生库,方法是将它们放在 <code>/vendor</code> 库文件夹(如果是 32 位的库,则为 /vendor/lib;如果是 64 位的库,则为 /vendor/lib64)下,并将其列于 <code>/vendor/etc/public.libraries.txt</code> 中
+除了标准的公共原生库之外,芯片供应商(从 Android 7.0 起)和设备制造商(从 Android 9 起)还可以选择提供可供应用访问的其他原生库,方法是将它们放在相应的库文件夹中,并在 .txt 文件中明确列出它们。
+</p>
+
+<p>库文件夹是:</p>
+<ul>
+  <li><code>/vendor/lib</code>(对于芯片供应商的 32 位库)和 <code>/vendor/lib64</code>(对于芯片供应商的 64 位库)</li>
+  <li><code>/system/lib</code>(对于设备制造商的 32 位库)和 <code>/system/lib64</code>(对于设备制造商的 64 位库)</li>
+</ul>
+
+<p>.txt 文件是:</p>
+<ul>
+  <li><code>/vendor/etc/public.libraries.txt</code>(对于芯片供应商的库)</li>
+  <li><code>/system/etc/public.libraries-COMPANYNAME.txt</code>(对于设备制造商的库),其中 <code>COMPANYNAME</code> 指的是制造商的名称(例如 <code>awesome.company</code>)。<code>COMPANYNAME</code> 应该匹配 <code>[A-Za-z0-9_.-]+</code>; 字母数字字符、_、.(点)和 -。如果某些库来自外部解决方案提供商,则可以在设备中包含多个此类 .txt 文件。
+</li></ul>
+
+<p>
+<strong>必须</strong>将 <code>system</code> 分区内由设备制造商公开的原生库命名为 <code>lib*COMPANYNAME.so</code>,例如 <code>libFoo.awesome.company.so</code>。换句话说,没有公司名称后缀的 <code>libFoo.so</code> 不得公开。库文件名中的 <code>COMPANYNAME</code> 必须与列出库名称的 txt 文件的名称中的 <code>COMPANYNAME</code> 匹配。
 </p>
 
 <p>
-从 Android 8.0 开始,供应商的公共库需要遵循以下额外限制,并需要进行相应的设置:
+作为 AOSP 一部分的原生库不得公开(默认情况下公开的标准公共原生库除外)。只有芯片供应商或设备制造商添加的其他库可供应用访问。
+</p>
+
+<p>
+从 Android 8.0 开始,供应商的公共库需要遵循以下额外限制,并需要进行设置:
 </p>
 
 <ol>
@@ -60,7 +80,7 @@
 <h2 id="updating-app-non-public">将应用更新为不使用非公共原生库</h2>
 
 <p>
-该功能仅适用于 SDK 版本为 24 或更高版本的应用;要了解向后兼容性,请参阅<a href="http://android-developers.blogspot.com/2016/06/improving-stability-with-private-cc.html">表 1. 当您的应用链接到私有原生库时会发生什么情况</a>。可供应用访问的 Android 原生库(又称为公共原生库)列表列于 CDD 部分 3.1.1。适用于版本 24 或更高版本且使用任何非公共库的应用应进行更新。如需了解详情,请参阅<a href="https://developer.android.com/preview/behavior-changes.html#ndk">链接到平台库的 NDK 应用</a>。
+仅针对 SDK 版本为 24 或更高版本的应用启用此功能;要了解向后兼容性,请参阅<a href="http://android-developers.blogspot.com/2016/06/improving-stability-with-private-cc.html">表 1. 当应用关联到私有原生库时会发生什么情况</a>。可供应用访问的 Android 原生库(又称为公共原生库)列表列于 CDD 部分 3.1.1。适用于版本 24 或更高版本且使用任何非公共库的应用应进行更新。要了解详情,请参阅<a href="https://developer.android.com/preview/behavior-changes.html#ndk">关联到平台库的 NDK 应用</a>。
 </p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/config/uicc.html b/zh-cn/devices/tech/config/uicc.html
index 95eec02..86bd9f2 100644
--- a/zh-cn/devices/tech/config/uicc.html
+++ b/zh-cn/devices/tech/config/uicc.html
@@ -83,7 +83,7 @@
 <li>用于允许运营商应用向 UICC 请求质询/响应的 API:<a href="https://developer.android.com/reference/android/telephony/TelephonyManager.html#getIccAuthentication(int,%20int,%20java.lang.String)"><code>getIccAuthentication</code></a>。
 </li>
 
-<li>用于检查发起呼叫的应用是否已获得运营商权限的 API:<a href="http://developer.android.com/reference/android/telephony/TelephonyManager.html#hasCarrierPrivileges()"><code>hasCarrierPrivileges</code></a>。
+<li>用于检查调用应用是否已获得运营商权限的 API:<a href="http://developer.android.com/reference/android/telephony/TelephonyManager.html#hasCarrierPrivileges()"><code>hasCarrierPrivileges</code></a>。
 </li>
 
 <li>用于覆盖品牌和号码的 API:<ul>
diff --git a/zh-cn/devices/tech/connect/block-numbers.html b/zh-cn/devices/tech/connect/block-numbers.html
index a9886c2..2976b30 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/call-notification.html b/zh-cn/devices/tech/connect/call-notification.html
index bf69325..2e99f1a 100644
--- a/zh-cn/devices/tech/connect/call-notification.html
+++ b/zh-cn/devices/tech/connect/call-notification.html
@@ -96,6 +96,6 @@
 </ul>
 
 <h2 id="implement">实现</h2>
-<p>设备实现人员可能需要更新通讯系统/电话组件(公开可供默认拨号器使用的 API)。</p>
+<p>设备实现人员可能需要更新通讯系统/电话组件,这些组件表明可供默认拨号器使用的 API。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/connect_tests.html b/zh-cn/devices/tech/connect/connect_tests.html
index aca43af..85ed2ca 100644
--- a/zh-cn/devices/tech/connect/connect_tests.html
+++ b/zh-cn/devices/tech/connect/connect_tests.html
@@ -46,7 +46,7 @@
 
 <h3 id="script-android">Android 通讯测试套件</h3>
 
-<p><code><a href="https://android.googlesource.com/platform/tools/test/connectivity/"><platform>/tools/test/connectivity</platform></a></code> 中的 <a href="https://android.googlesource.com/platform/tools/test/connectivity/+/master/acts/README.md">Android 通讯测试套件</a>是基于 Python 的轻量级自动化工具集,用于对当前的和即将推出的 Android 设备执行自动测试。它提供了简洁的执行界面、一组用于访问衰减器等设备和 Android 设备的可插拔库,以及一些可进一步简化测试开发的实用函数。我们认为它是一种非常适合无线堆栈开发者或集成人员的桌面工具,无论他们是创建新的代码路径、执行基本的完整性测试,还是运行扩展的回归测试套件都没问题。</p>
+<p><code><a href="https://android.googlesource.com/platform/tools/test/connectivity/"><platform>/tools/test/connectivity</platform></a></code> 中的 <a href="https://android.googlesource.com/platform/tools/test/connectivity/+/master/acts/README.md">Android 通讯测试套件</a>是基于 Python 的轻量级自动化工具集,用于对当前和即将推出的 Android 设备执行自动测试。它提供了简洁的执行界面、一组用于访问衰减器等设备和 Android 设备的可插拔库,以及一些可进一步简化测试开发的实用函数。我们认为它是一种非常适合无线堆栈开发者或集成人员的桌面工具,无论他们是创建新的代码路径、执行基本的完整性测试,还是运行扩展的回归测试套件都没问题。</p>
 
 <p>本测试套件还包括一系列测试,很多测试在一台或两台具有 WLAN、移动网络或蓝牙连接的 Android 设备上即可运行,其中包括:</p>
 
diff --git a/zh-cn/devices/tech/connect/esim-modem-requirements.html b/zh-cn/devices/tech/connect/esim-modem-requirements.html
index 4ebdb08..e61bff9 100644
--- a/zh-cn/devices/tech/connect/esim-modem-requirements.html
+++ b/zh-cn/devices/tech/connect/esim-modem-requirements.html
@@ -27,7 +27,7 @@
 
 <h2 id="general_requirements">常规要求</h2>
 
-<p>以下是针对常规 eSIM 支持的调制解调器要求。只有在调制解调器满足下列所有要求时,LPA 才可正常发挥作用。</p>
+<p>以下是针对常规 eSIM 支持的调制解调器要求。只有在调制解调器满足下列所有要求时,本地配置文件助理程序 (LPA) 才可正常发挥作用。</p>
 
 <h3 id="handle_the_default_boot_profile_correctly">正确处理默认启动配置文件</h3>
 
@@ -35,7 +35,17 @@
 
 <h3 id="send_terminal_capabilities_correctly">正确发送终端功能</h3>
 
-<p>在打开 ISD-R 的逻辑信道时,调制解调器应向 eSIM 卡发送正确的终端功能。终端功能必须根据 ETSI TS 102 221 进行编码,以便支持 eUICC 卡功能:“本地配置文件管理”和“配置文件下载”。</p>
+<p>接通电源后,调制解调器应向 eSIM 卡发送正确的终端功能。终端功能必须进行编码以支持 eUICC 卡功能:“本地配置文件管理”和“配置文件下载”。</p>
+
+<p>请参阅 <a href="https://www.etsi.org/deliver/etsi_ts/102200_102299/102221/15.00.00_60/ts_102221v150000p.pdf">ETSI TS 102 221 第 11.1.19.2.4 节</a>:“Additional Terminal capability indications related to eUICC”。字节 [1-3] 应为:‘83’(代码)‘01’(长度)‘07’(eUICC 功能)。</p>
+
+<h3 id="optional_support_esim_os_ota_updates">(可选)支持 eSIM 卡操作系统 OTA 更新</h3>
+<aside class="note"><strong>注意:</strong><span>由于 eSIM 卡操作系统无线下载 (OTA) 更新未标准化,因此是否提供此更新取决于提供 eSIM 卡操作系统的供应商。</span></aside>
+<p>调制解调器应该支持 eSIM 卡操作系统 OTA 更新的所有要求,例如切换到直通模式并确保 eSIM 卡在 OTA 更新过程中一直处于通电状态。</p>
+
+<h2 id="hal_requirements">HAL 要求</h2>
+
+<p>以下是常规 eSIM 卡支持所需的 API 实现。</p>
 
 <h3 id="implement_setsimpower_api_in_radio_hal_v11">在 Radio HAL v1.1 中实现 setSimPower API</h3>
 
@@ -47,23 +57,23 @@
 
 <h3 id="implement_geticccardstatus_api_in_iradio_hal_v12">在 IRadio HAL v1.2 中实现 getIccCardStatus API</h3>
 
-<p>调制解调器应提供在 <a href="/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" class="external">CardStatus</a>),v1.2 中对此 API 进行了更改以包含 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/radio/1.2/types.hal#351" class="external">ATR</a>。</p>
+<p>调制解调器应在 <a href="https://source.android.com/reference/hidl/android/hardware/radio/1.0/IRadioResponse#geticccardstatusresponse">getIccCardStatusResponse</a> API 中提供卡状态的复位应答 (ATR) 和插槽 ID。在 v1.0 中引入了此 API,并且在 v1.2 中,对 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/radio/1.2/types.hal#341" class="external">CardStatus</a> 进行了更改以纳入 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/radio/1.2/types.hal#351" class="external">ATR</a>。</p>
 
-<h3 id="optional_support_esim_os_ota">(可选)支持 eSIM 卡操作系统 OTA</h3>
+<h3 id="set_cardstaterestricted_on_sim_lock_subsidy_lock">在 SIM 卡锁定功能(subsidy 锁)上设置 CardState:RESTRICTED</h3>
 
-<p>由于 eSIM 卡操作系统 OTA 未进行标准化,因此这项要求取决于提供 eSIM 卡操作系统的供应商。调制解调器应该支持 eSIM 卡操作系统 OTA 的所有要求,例如切换到直通模式并确保 eSIM 卡在 OTA 过程中一直处于通电状态。</p>
+<p>如果 eSIM 卡处于 SIM 锁定(subsidy 锁定)状态,则调制解调器应在 <a href="https://source.android.com/reference/hidl/android/hardware/radio/1.0/IRadioResponse#geticccardstatusresponse">getIccCardStatusResponse</a> API 中将卡状态设置为 <a href="https://source.android.com/reference/hidl/android/hardware/radio/1.0/types#cardstate"><code>CardState:RESTRICTED</code></a>。</p>
+
+<h3 id="optional_implement_setsimslotsmapping_api_in_iradioconfig_hal_v10">(可选)在 IRadioConfig HAL v1.0 中实现 setSimSlotsMapping API</h3>
+<aside class="note"><strong>注意</strong>:<span>仅在需要切换插槽的设备配置中需要执行此操作,例如,设备具有一个 eSIM 卡插槽和一个实体/可移除的 SIM (pSIM) 卡插槽,并且一次只有一个插槽可处于有效状态。</span></aside>
+<p>调制解调器应支持 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/radio/config/1.0/IRadioConfig.hal#81" class="external">setSimSlotsMapping API</a>,此 API 能够设置从实体插槽到逻辑插槽的映射。LPA 使用此 API 来选择处于有效状态的 SIM 卡插槽。</p>
 
 <h2 id="logging_requirements">日志记录要求</h2>
 
-<p>以下是正确调试 eSIM 卡问题的一般调制解调器日志记录要求。</p>
+<p>以下是用于调试 eSIM 卡问题的一般调制解调器日志记录要求。</p>
 
-<h3 id="provide_pc_based_tools_to_capture_detailed_modem_logs">提供基于 PC 的工具以捕获详细的调制解调器日志</h3>
+<h3 id="log_capture">日志捕获</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>
+<p>日志记录应捕获处理器间通信、SIM 卡功能、无线接口层 (RIL) 日志记录以及应用协议数据单元 (APDU) 日志记录。</p>
 
 <h3 id="on-device_logging">设备上的日志记录</h3>
 
diff --git a/zh-cn/devices/tech/connect/esim-overview.html b/zh-cn/devices/tech/connect/esim-overview.html
index 63914f7..9b5aca7 100644
--- a/zh-cn/devices/tech/connect/esim-overview.html
+++ b/zh-cn/devices/tech/connect/esim-overview.html
@@ -44,7 +44,7 @@
 
 <h3 id="euiccmanager">EuiccManager</h3>
 
-<p><code>EuiccManager</code> 是应用与 LPA 交互的主入口点。这包括可下载、删除及切换到运营商所拥有的订阅的运营商应用。此外,这还包括 LUI 系统应用,该应用可提供用于管理所有嵌入式订阅的中心位置/界面,且可以是与提供 <code>EuiccService</code> 的应用不同的应用。<em></em></p>
+<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 = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
@@ -132,7 +132,7 @@
 
 <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,%20int,%20android.content.Intent,%20android.app.PendingIntent)" class="external"><code>EuiccManager#startResolutionActivity</code></a> 时,可以通过 LUI 请求解决问题。再次以确认码为例,<a href="https://developer.android.com/reference/android/telephony/euicc/EuiccManager.html#startResolutionActivity(android.app.Activity,%20int,%20android.content.Intent,%20android.app.PendingIntent)" class="external"><code>EuiccManager#startResolutionActivity</code></a> 会触发屏幕显示 LUI 来让用户输入确认码,输入完成后,下载操作即会恢复。这种方法使得运营商应用能够完全控制在何时显示该界面,同时也为 LPA/LUI 提供了一种扩展方法,用于在将来添加处理“用户可恢复问题”的新方法(无需客户端应用做出更改)。</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,%20int,%20android.content.Intent,%20android.app.PendingIntent)" class="external"><code>EuiccManager#startResolutionActivity</code></a> 时,可以通过 LUI 请求解决问题。再次以确认码为例,<a href="https://developer.android.com/reference/android/telephony/euicc/EuiccManager.html#startResolutionActivity(android.app.Activity,%20int,%20android.content.Intent,%20android.app.PendingIntent)" class="external"><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" class="external"><code>EuiccService</code></a> 中定义了 LUI 应处理的上述可修正的错误:</p>
 <pre class="prettyprint"><code>/**
@@ -225,8 +225,8 @@
 <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>
+<li><code>android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS</code></li>
+<li><code>android.service.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" class="external"><code>EuiccService</code></a> 实现所使用的逻辑是类似的。例如:</p>
@@ -234,10 +234,8 @@
           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;action android:name="android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS" /&gt;
+        &lt;action android:name="android.service.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;
diff --git a/zh-cn/devices/tech/connect/rtt.html b/zh-cn/devices/tech/connect/rtt.html
index 37e3331..d7a3813 100644
--- a/zh-cn/devices/tech/connect/rtt.html
+++ b/zh-cn/devices/tech/connect/rtt.html
@@ -22,7 +22,7 @@
   limitations under the License.
 -->
 
-<h1 id="implementing_real_time_text" class="page-title">实现实时信息</h1>
+<h1 id="implementing_real-time_text" class="page-title">实现实时信息</h1>
 
 <p>本页介绍如何在 Android 9 中实现实时信息 (RTT)。RTT 这项功能面向失聪用户或听障用户提供,可替代文本电话 (TTY) 技术。借助此功能,设备可以使用同一电话号码进行语音通话和 RTT 通话,即时传输信息(信息是逐个字符输入的),支持拨打 911,并且向后兼容 TTY。</p>
 
@@ -30,13 +30,13 @@
 
 <h2 id="examples_and_source">示例和源代码</h2>
 
-<p>AOSP 的 <a href="https://developer.android.com/reference/android/telecom/Call.RttCall">Call.RttCall</a> 和 <a href="https://developer.android.com/reference/android/telecom/Connection.RttTextStream">Connection.RttTextStream</a> 中提供框架组件。IMS/调制解调器组件是专有的,应由 IMS/调制解调器供应商提供。您还可以使用拨号器 RTT 的参考实现。</p>
+<p>框架组件可从 AOSP 的 <a href="https://developer.android.com/reference/android/telecom/Call.RttCall" class="external">Call.RttCall</a> 和 <a href="https://developer.android.com/reference/android/telecom/Connection.RttTextStream" class="external">Connection.RttTextStream</a> 中获得。IMS/调制解调器组件是专有的,应由 IMS/调制解调器供应商提供。您还可以使用拨号器 RTT 的参考实现。</p>
 
 <p>RTT 的 AOSP 拨号器代码:</p>
 
 <ul>
-<li>通话中:<a href="https://android.googlesource.com/platform/packages/apps/Dialer/+/master/java/com/android/incallui/rtt">/java/com/android/incallui/rtt</a></li>
-<li>通话记录:<a href="https://android.googlesource.com/platform/packages/apps/Dialer/+/master/java/com/android/dialer/rtt">/java/com/android/dialer/rtt</a></li>
+<li>通话中:<a href="https://android.googlesource.com/platform/packages/apps/Dialer/+/master/java/com/android/incallui/rtt" class="external">/java/com/android/incallui/rtt</a>  </li>
+<li>通话记录:<a href="https://android.googlesource.com/platform/packages/apps/Dialer/+/master/java/com/android/dialer/rtt" class="external">/java/com/android/dialer/rtt</a>  </li>
 </ul>
 
 <h2 id="implementation">实现</h2>
@@ -68,7 +68,7 @@
 
 <h2 id="customization">自定义</h2>
 
-<p>您可以启用或停用此功能,方法是使用 <code>packages/services/Telephony</code> 的设备配置叠加层中的设备配置 <code>config_support_rtt</code>,以及运营商配置文件中的运营商配置标记 <code>CarrierConfigManager.RTT_SUPPORTED_BOOL</code>。根据配置,该功能可通过“无障碍功能”设置提供,也可以不通过该设置提供。您可以使用设备配置来更改默认设置。默认情况下,该功能设置为关闭。</p>
+<p>您可以启用或停用此功能,方法是使用 <code>config_support_rtt</code> 的设备配置叠加层中的设备配置 <code>packages/services/Telephony</code>,以及运营商配置文件中的运营商配置标记 <code>CarrierConfigManager.RTT_SUPPORTED_BOOL</code>。根据配置,该功能可通过“无障碍功能”设置提供,也可以不通过该设置提供。您可以使用设备配置来更改默认设置。默认情况下,该功能设置为关闭。</p>
 
 <h2 id="validation">验证</h2>
 
diff --git a/zh-cn/devices/tech/connect/wifi-debug.html b/zh-cn/devices/tech/connect/wifi-debug.html
index 1cae375..f3a493a 100644
--- a/zh-cn/devices/tech/connect/wifi-debug.html
+++ b/zh-cn/devices/tech/connect/wifi-debug.html
@@ -22,9 +22,9 @@
   limitations under the License.
 -->
 
-<h1 id="testing_and_debugging" class="page-title">测试和调试</h1>
+<h1 id="testing_debugging_and_tuning_wi-fi" class="page-title">测试、调试和调整 WLAN</h1>
 
-<p>本文将介绍如何使用 ASOP 中提供的工具测试和调试 WLAN 实现。</p>
+<p>本文将介绍如何使用 ASOP 中提供的工具测试、调试和调整 WLAN 实现。</p>
 
 <h2 id="testing">测试</h2>
 
@@ -62,7 +62,7 @@
 
 <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>
+<h2 id="enhanced_logging_options_for_debugging">针对调试的增强型日志记录选项</h2>
 
 <p>Android 9 改进了 WLAN 日志记录功能,以便更轻松地调试 WLAN 问题。在 Android 9 中,驱动程序/固件环形缓冲区可以始终处于开启状态。在检测到错误状态时,可能会自动触发错误报告(仅限 userdebug 和 eng 版本)。如果您使用的是最新 WLAN HAL(1.2 版),则固件调试缓冲区存储在 HAL 中而不是框架内,以节省 IPC 费用。</p>
 
@@ -89,4 +89,31 @@
 <li>检查 bugreport zip 文件并验证 <code>/lshal-debug/[email protected]__IWifi_default.txt</code> 中是否包含已归档的固件日志。</li>
 </ol>
 
+<h2 id="configuration_tuning">配置调整</h2>
+
+<p>为了控制设备在与网络建立关联和取消关联时采用的信号强度,WLAN 框架使用了“entry”和“exit”RSSI 阈值。<em></em><em></em></p>
+
+<p>系统会将“entry”和“exit”阈值存储为可过载的配置参数,并使用以下名称(其中 <code>bad</code> 参数是指“exit”RSSI 阈值):<em></em><em></em><em></em></p>
+
+<ul>
+<li><code>config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz</code></li>
+<li><code>config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz</code></li>
+<li><code>config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz</code></li>
+<li><code>config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz</code></li>
+</ul>
+
+<p>系统会将这些参数存储在 <code>&lt;root&gt;/frameworks/base/core/res/res/values/config.xml</code> 中,并可能会使用叠加层文件 <code>&lt;root&gt;/device/&lt;dev_dir&gt;/overlay/frameworks/base/core/res/res/values/config.xml</code> 对其进行过载。</p>
+<aside class="note"><strong>注意</strong>:<span><code>bad</code> 配置参数(适用于 2.4GHz 和 5GHz 的频段)已在 Android 8.1 之前的版本中引入。<code>entry</code> 配置参数已在 Android 8.1 中引入,其默认值等于对应的 bad 参数。这些默认值会导致出现 Android 8.1 之前的版本中的行为,即系统在选择网络时不使用迟滞功能。要充分利用 Android 8.1 中引入的迟滞功能,请使用上文中指定的叠加层文件将 <code>entry</code> 参数设为 3dB 或比 <code>bad</code> 参数更高的值。</span></aside>
+<p>您可以使用 adb 命令来配置设备,从而测试新的阈值(或者,您也可以使用新的叠加层来创建编译,但使用 adb 命令可以加快测试周期)。</p>
+<pre class="prettyprint"><code>% adb shell settings put global wifi_score_params \
+                             [rssi2|rssi5]=&lt;bad&gt;:&lt;entry&gt;:&lt;low&gt;:&lt;good&gt;
+</code></pre>
+<p>例如,以下命令可以配置新的阈值参数(此示例命令中使用的值是 AOSP 代码库中配置的默认值):</p>
+<pre class="prettyprint"><code>% adb shell settings put global wifi_score_params \
+                       rssi2=-85:-85:-73:-60,rssi5=-82:-82:-70:-57
+</code></pre>
+<p>要恢复内置的参数值(即移除替换),请使用以下 abd 命令:</p>
+<pre class="prettyprint"><code>% adb shell settings delete global wifi_score_params
+</code></pre>
+
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/wifi-mac-randomization.html b/zh-cn/devices/tech/connect/wifi-mac-randomization.html
index 16817a3..de4066d 100644
--- a/zh-cn/devices/tech/connect/wifi-mac-randomization.html
+++ b/zh-cn/devices/tech/connect/wifi-mac-randomization.html
@@ -40,10 +40,9 @@
 <li><p>与 WLAN 芯片供应商合作实现 <code>IWifiStaIface.setMacAddress()</code> HAL 方法。</p>
 
 <ul>
-<li>AOSP 参考实现会关闭接口、更改 MAC 地址并备份接口。这种参考实现行为可能不适用于某些芯片供应商。
-</li>
+<li>AOSP 参考实现会关闭接口、更改 MAC 地址并备份接口。这种参考实现行为可能不适用于某些芯片供应商。</li>
 </ul></li>
-<li><p>在“设置”<code>config.xml</code> 中,将 <a href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/res/values/config.xml#49"><code>config_wifi_support_connected_mac_randomization</code></a> 设置为 <strong>true</strong>(该步骤可在设备自定义叠层中完成)。</p>
+<li><p>在“设置”<code>config.xml</code> 中,将 <a href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/res/values/config.xml#46" class="external"><code>config_wifi_support_connected_mac_randomization</code></a> 设置为 <strong>true</strong>(该步骤可在设备自定义叠层中完成)。</p>
 
 <ul>
 <li>此标记用于控制参考“设置”实现的开发者选项中是否显示“连接时随机选择 MAC 网址”切换开关。<em></em>如果设置为 <strong>true</strong>,则显示该切换开关;如果设置为 <strong>false</strong>,则不显示该切换开关。</li>
@@ -58,7 +57,7 @@
 <li>如果启用了随机选择 MAC 地址功能,则在系统显示 WLAN 接口 MAC 地址时显示生成的随机 MAC 地址。</li>
 </ul>
 
-<p>使用设置界面的<a href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/development/">参考实现</a>来实现新提示。</p>
+<p>使用设置界面的<a href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/development/WifiConnectedMacRandomizationPreferenceController.java" class="external">参考实现</a>来实现新提示。</p>
 
 <h2 id="validation">验证</h2>
 
diff --git a/zh-cn/devices/tech/connect/wifi-passpoint.html b/zh-cn/devices/tech/connect/wifi-passpoint.html
index 1247d85..4790d78 100644
--- a/zh-cn/devices/tech/connect/wifi-passpoint.html
+++ b/zh-cn/devices/tech/connect/wifi-passpoint.html
@@ -124,7 +124,7 @@
 <li><p><code>SIM</code>:对于 EAP-SIM、EAP-AKA 和 EAP-AKA' 是必需的。<code>EAPType</code> 字段必须设置为适当的 EAP 类型,而 <code>IMSI</code> 必须与进行配置时设备中已安装的 SIM 卡之一的 IMSI 相匹配。IMSI 字符串可以完全由十进制数字组成以强制执行完全对等匹配,也可以包含零个或更多个十进制数字,后跟星号 (*) 以将 IMSI 匹配要求放宽为仅匹配前缀。例如,IMSI 字符串 123* 将匹配 IMSI 以 123 开头的任何 SIM 卡。</p></li>
 </ul>
 
-<h1 id="example_profile_oma_dm_xml" class="page-title">示例配置文件 OMA-DM XML</h1>
+<h2 id="example_profile_oma-dm_xml">示例配置文件 OMA-DM XML</h2>
 <pre class="prettyprint lang-xml"><code>&lt;MgmtTree xmlns="syncml:dmddf1.2"&gt;
   &lt;VerDTD&gt;1.2&lt;/VerDTD&gt;
   &lt;Node&gt;
@@ -184,5 +184,76 @@
   &lt;/Node&gt;
 &lt;/MgmtTree&gt;
 </code></pre>
+<h2 id="auth_advisory">身份验证建议</h2>
+
+<p>搭载 Android 8.0 或更高版本且装有 Passpoint R1 EAP-SIM、EAP-AKA 或 EAP-AKA 配置文件的设备将无法自动连接到 Passpoint 网络。此问题会减少 WLAN 分流,从而对用户、运营商和服务造成影响。</p>
+
+<table>
+  <tbody><tr>
+   <th><strong>细分</strong>
+   </th>
+   <th><strong>影响</strong>
+   </th>
+   <th><strong>影响大小</strong>
+   </th>
+  </tr>
+  <tr>
+   <td>运营商和 Passpoint 服务提供商
+   </td>
+   <td>增加移动网络的负载。
+   </td>
+   <td>使用 Passpoint R1 的任何运营商。
+   </td>
+  </tr>
+  <tr>
+   <td>用户
+   </td>
+   <td>错过了自动连接到运营商 WLAN 接入点 (AP) 的机会,从而增加流量费用。
+   </td>
+   <td>在支持 Passpoint R1 的运营商网络上运行设备的任何用户。
+   </td>
+  </tr>
+</tbody></table>
+
+<h3 id="cause_of_failure">失败原因</h3>
+
+<p>Passpoint 会指定一种机制,将广告 (ANQP) 服务提供商与设备上安装的配置文件进行匹配。以下针对 EAP-SIM、EAP-AKA 和 EAP-AKA 的匹配规则是侧重于 EAP-SIM/AKA/AKA 失败的部分规则:</p>
+<pre class="prettyprint"><code>If the FQDN (Fully Qualified Domain Name) matches
+    then the service is a Home Service Provider.
+Else: If the PLMN ID (3GPP Network) matches
+    then the service is a Roaming Service Provider.
+</code></pre>
+<p>第二个条件在 Android 8.0 中进行了修改:</p>
+<pre class="prettyprint"><code>Else: If the PLMN ID (3GPP Network) matches AND the NAI Realm matches
+    then the service is a Roaming Service Provider.
+</code></pre>
+<p>此修改后的条件意味着系统检测不到任何与以前正常工作的服务提供商匹配的项目,因此 Passpoint 设备未自动连接。</p>
+
+<h3 id="workarounds">解决方法</h3>
+
+<p>要解决修改后的匹配条件存在的问题,运营商和服务提供商需要将 <code>NAI Realm</code> 添加到由 Passpoint AP 发布的信息中。</p>
+
+<p>推荐的解决方案是让网络服务提供商实施网络端解决方法,这种方法部署速度最快。设备端解决方法依赖于原始设备制造商 (OEM) 从 Android 开源项目 (AOSP) 获取变更列表 (CL),然后更新在实际应用中的设备。</p>
+
+<h4 id="network_fix_for_carriers_and_passpoint_service_providers">针对运营商和 Passpoint 服务提供商的网络修复</h4>
+
+<p>网络端解决方法需要重新配置网络以添加 <code>NAI
+Realm</code> ANQP 元素(如下文所述)。Passpoint 规范不需要 <code>NAI Realm</code> ANQP 元素,但添加此属性符合 Passpoint 规范,因此符合规范的客户端实现应该不会发生中断。</p>
+
+<ol>
+<li>添加 <code>NAI Realm</code> ANQP 元素。</li>
+<li>设置 <code>NAI Realm</code> 子字段以匹配设备上安装所配置文件的 <code>Realm</code>。</li>
+</ol>
+
+<h4 id="deviceaosp_fix_for_oems">针对原始设备制造商 (OEM) 的设备/AOSP 修复</h4>
+
+<p>要实现设备端解决方法,原始设备制造商 (OEM) 需要选择补丁程序 CL <a href="https://android-review.googlesource.com/c/platform/frameworks/opt/net/wifi/+/718508">aosp/718508</a>。此补丁程序可以在以下系统版本上应用:</p>
+
+<ul>
+<li>Android 8.x</li>
+<li>Android 9</li>
+</ul>
+
+<p>挑选补丁程序后,原始设备制造商 (OEM) 需要更新在实际应用中的设备。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/dalvik/gc-debug.html b/zh-cn/devices/tech/dalvik/gc-debug.html
index 2ed7840..d784208 100644
--- a/zh-cn/devices/tech/dalvik/gc-debug.html
+++ b/zh-cn/devices/tech/dalvik/gc-debug.html
@@ -22,7 +22,7 @@
 
 <p>本文档介绍如何调试 Android 运行时 (ART) 垃圾回收 (GC) 的正确性和性能问题,并解释了如何使用 GC 验证选项、确定 GC 验证失败的解决方案,以及测量并解决 GC 性能问题。</p>
 
-<p>有关处理 ART 的说明,请参阅 <a href="index.html">ART 和 Dalvik</a>、<a href="dex-format.html">Dalvik 可执行文件格式</a>以及此 <a href="index.html">ART 和 Dalvik</a> 部分的其他页面。有关验证应用行为的其他帮助信息,请参阅<a href="http://developer.android.com/guide/practices/verifying-apps-art.html">在 Android Runtime (ART) 上验证应用行为</a>。</p>
+<p>有关处理 ART 的说明,请参阅 <a href="index.html">ART 和 Dalvik</a>、<a href="dex-format.html">Dalvik 可执行文件格式</a>以及此 <a href="index.html">ART 和 Dalvik</a> 部分的其他页面。有关验证应用行为的其他帮助信息,请参阅<a href="http://developer.android.com/guide/practices/verifying-apps-art.html">通过 Android 运行时 (ART) 验证应用行为</a>。</p>
 
 <h2 id="art_gc_overview">ART GC 概述</h2>
 
@@ -36,8 +36,7 @@
 
 <ul>
   <li>与 Dalvik 相比,暂停次数从 2 次减少到 1 次。Dalvik 的第一次暂停主要是为了进行根标记,即在 ART 中进行并发标记,让线程标记自己的根,然后马上恢复运行。
-  </li><li>与 Dalvik 类似,ART GC 在清除过程开始之前也会暂停 1 次。
-两者在这方面的主要差异在于:在此暂停期间,某些 Dalvik 环节在 ART 中并发进行。这些环节包括 <code>java.lang.ref.Reference</code> 处理、系统弱清除(例如,jni 弱全局等)、重新标记非线程根和卡片预清理。在 ART 暂停期间仍进行的阶段包括扫描脏卡片以及重新标记线程根,这些操作有助于缩短暂停时间。
+  </li><li>与 Dalvik 类似,ART GC 在清除过程开始之前也会暂停 1 次。两者在这方面的主要差异在于:在此暂停期间,某些 Dalvik 环节在 ART 中并发进行。这些环节包括 <code>java.lang.ref.Reference</code> 处理、系统弱清除(例如,jni 弱全局等)、重新标记非线程根和卡片预清理。在 ART 暂停期间仍进行的阶段包括扫描脏卡片以及重新标记线程根,这些操作有助于缩短暂停时间。
   </li><li>相对于 Dalvik,ART GC 改进的最后一个方面是粘性 CMS 回收器增加了 GC 吞吐量。不同于普通的分代 GC,粘性 CMS 不移动。系统会将年轻对象保存在一个分配堆栈(基本上是 <code>java.lang.Object</code> 数组)中,而非为其设置一个专属区域。这样可以避免移动所需的对象以维持低暂停次数,但缺点是容易在堆栈中加入大量复杂对象图像而使堆栈变长。
 </li></ul>
 
@@ -209,7 +208,7 @@
 adb shell setprop dalvik.vm.jniopts forcecopy
 </pre>
 
-<p>CheckJNI 应捕获错误的一个示例是超出从 <code>GetPrimitiveArrayCritical</code> 获取的数组末端的写入。该操作很可能会破坏 Java 堆。如果写入位于 CheckJNI 红色区域内,则在调用相应 <code>ReleasePrimitiveArrayCritical</code> 时,CheckJNI 将会捕获该问题。否则,写入将最终损坏 Java 堆中的一些随机对象,并可能会导致之后出现 GC 崩溃。<em></em>如果崩溃的内存是引用字段,则 GC 可能会捕获错误并输出“Tried to mark <ptr>not contained by any spaces</ptr>”这一错误消息。</p>
+<p>CheckJNI 应捕获错误的一个示例是超出从 <code>GetPrimitiveArrayCritical</code> 获取的数组末端的写入。该操作很可能会破坏 Java 堆。如果写入位于 CheckJNI 红色区域内,则在调用相应 <code>ReleasePrimitiveArrayCritical</code> 时,CheckJNI 将会捕获该问题。否则,写入将最终损坏 Java 堆中的一些随机对象,并可能会导致之后出现 GC 崩溃。如果崩溃的内存是引用字段,则 GC 可能会捕获错误并输出“<em></em>Tried to mark <ptr> not contained by any spaces</ptr>”这一错误消息。</p>
 
 <p>当 GC 尝试标记无法找到空间的对象时,就会发生此错误。在此检查失败后,GC 会遍历根,并尝试查看无效对象是否为根。结果共有两个选项:对象为根或非根。</p>
 
diff --git a/zh-cn/devices/tech/dalvik/improvements.html b/zh-cn/devices/tech/dalvik/improvements.html
index 9a7e8f2..6558832 100644
--- a/zh-cn/devices/tech/dalvik/improvements.html
+++ b/zh-cn/devices/tech/dalvik/improvements.html
@@ -200,7 +200,7 @@
 <h2 id="faster-native-methods">更快速的原生方法</h2>
 
 <p>
-  使用 <a class="external" href="https://android.googlesource.com/platform/libcore/+/master/dalvik/src/main/java/dalvik/annotation/optimization/FastNative.java"><code>@FastNative</code></a> 和 <a class="external" href="https://android.googlesource.com/platform/libcore/+/master/dalvik/src/main/java/dalvik/annotation/optimization/CriticalNative.java"><code>@CriticalNative</code></a> 注解可以更快速地对 Java 原生接口 (JNI) 进行原生调用。这些内置的 ART 运行时优化可加快 JNI 转换速度,并取代现在已弃用的 !<em>bang JNI 注解。</em>注解对非原生方法没有任何影响,并且仅适用于 <code>bootclasspath</code> 上的平台 Java 语言代码(无 Play 商店更新)。
+  使用 <a class="external" href="https://android.googlesource.com/platform/libcore/+/master/dalvik/src/main/java/dalvik/annotation/optimization/FastNative.java"><code>@FastNative</code></a> 和 <a class="external" href="https://android.googlesource.com/platform/libcore/+/master/dalvik/src/main/java/dalvik/annotation/optimization/CriticalNative.java"><code>@CriticalNative</code></a> 注释可以更快速地对 Java 原生接口 (JNI) 进行原生调用。这些内置的 ART 运行时优化可加快 JNI 转换速度,并取代了现在已弃用的 !<em>bang JNI 标记。</em>注解对非原生方法没有任何影响,并且仅适用于 <code>bootclasspath</code> 上的平台 Java 语言代码(无 Play 商店更新)。
 </p>
 
 <p>
diff --git a/zh-cn/devices/tech/datausage/ebpf-traffic-monitor.html b/zh-cn/devices/tech/datausage/ebpf-traffic-monitor.html
index dfec87f..fd9a80b 100644
--- a/zh-cn/devices/tech/datausage/ebpf-traffic-monitor.html
+++ b/zh-cn/devices/tech/datausage/ebpf-traffic-monitor.html
@@ -58,6 +58,7 @@
 <li><code>CONFIG_BPF=y</code></li>
 <li><code>CONFIG_BPF_SYSCALL=y</code></li>
 <li><code>CONFIG_NETFILTER_XT_MATCH_BPF=y</code></li>
+<li><code>CONFIG_INET_UDP_DIAG=y</code></li>
 </ol>
 
 <p>验证是否已开启正确配置时,<a href="https://android.googlesource.com/platform/test/vts-testcase/kernel/+/master/config/VtsKernelConfigTest.py" class="external">VTS 内核配置测试</a>非常有用。</p></li>
@@ -88,16 +89,19 @@
 
 <h4 id="manual-testing">手动测试</h4>
 
-<p><code>system/netd/</code> 中有一些单元测试(<a href="https://android.googlesource.com/platform/system/netd/+/master/server/TrafficControllerTest.cpp" class="external"><code>netd_unit_test</code></a>、<a href="https://android.googlesource.com/platform/system/netd/+/master/tests/bpf_base_test.cpp" class="external"><code>netd_integration_test</code></a> 和 <a href="https://android.googlesource.com/platform/system/netd/+/master/libbpf/BpfNetworkStatsTest.cpp" class="external"><code>libbpf_test</code></a>)。系统支持 dumpsys,以便手动检查状态。命令 <strong><code>dumpsys netd</code></strong> 可显示 <code>trafficController</code> 模块的基本状态以及 eBPF 是否已正确开启。如果 eBPF 处于开启状态,命令 <strong><code>dumpsys netd trafficcontroller</code></strong> 会显示每个 eBPF 映射的详细内容,包括带标记套接字信息、每个标记的统计数据、UID 和 iface,以及所有者 UID 匹配项。</p>
+<p><code>system/netd/</code> 中有一些单元测试(<a href="https://android.googlesource.com/platform/system/netd/+/master/server/TrafficControllerTest.cpp" class="external"><code>netd_unit_test</code></a>、<a href="https://android.googlesource.com/platform/system/netd/+/master/tests/bpf_base_test.cpp" class="external"><code>netd_integration_test</code></a> 和 <a href="https://android.googlesource.com/platform/system/netd/+/master/libbpf/BpfNetworkStatsTest.cpp" class="external"><code>libbpf_test</code></a>)。系统支持 dumpsys,以便手动检查状态。使用命令 <strong><code>dumpsys netd</code></strong> 可显示 <code>trafficController</code> 模块的基本状态以及 eBPF 是否已正确开启。如果 eBPF 处于开启状态,命令 <strong><code>dumpsys netd trafficcontroller</code></strong> 会显示每个 eBPF 映射的详细内容,包括带标记套接字信息、每个标记的统计数据、UID 和 iface,以及所有者 UID 匹配项。</p>
 
 <h3 id="test-locations">测试所在位置</h3>
 
 <p>CTS 测试位于以下位置:</p>
 
 <ul>
-<li class="external"><a href="https://android.googlesource.com/platform/cts/+/master/tests/tests/net/src/android/net/cts/TrafficStatsTest.java">https://android.googlesource.com/platform/cts/+/master/tests/tests/net/src/android/net/cts/TrafficStatsTest.java</a></li>
-<li class="external"><a href="https://android.googlesource.com/platform/cts/+/master/tests/tests/app.usage/src/android/app/usage/cts/NetworkUsageStatsTest.java">https://android.googlesource.com/platform/cts/+/master/tests/tests/app.usage/src/android/app/usage/cts/NetworkUsageStatsTest.java</a></li>
-<li class="external"><a href="https://android.googlesource.com/platform/system/netd/+/master/tests/bpf_base_test.cpp">https://android.googlesource.com/platform/system/netd/+/master/tests/bpf_base_test.cpp</a></li>
+<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/tests/net/src/android/net/cts/TrafficStatsTest.java">https://android.googlesource.com/platform/cts/+/master/tests/tests/net/src/android/net/cts/TrafficStatsTest.java</a>
+{: .external} </li>
+<li><a href="https://android.googlesource.com/platform/cts/+/master/tests/tests/app.usage/src/android/app/usage/cts/NetworkUsageStatsTest.java">https://android.googlesource.com/platform/cts/+/master/tests/tests/app.usage/src/android/app/usage/cts/NetworkUsageStatsTest.java</a>
+{: .external} </li>
+<li><a href="https://android.googlesource.com/platform/system/netd/+/master/tests/bpf_base_test.cpp">https://android.googlesource.com/platform/system/netd/+/master/tests/bpf_base_test.cpp</a>
+{: .external} </li>
 </ul>
 
 <p>VTS 测试位于以下位置:<a href="https://android.googlesource.com/kernel/tests/+/master/net/test/bpf_test.py" class="external">https://android.googlesource.com/kernel/tests/+/master/net/test/bpf_test.py</a>。</p>
@@ -105,8 +109,10 @@
 <p>单元测试位于以下位置:</p>
 
 <ul>
-<li class="external"><a href="https://android.googlesource.com/platform/system/netd/+/master/libbpf/BpfNetworkStatsTest.cpp">https://android.googlesource.com/platform/system/netd/+/master/libbpf/BpfNetworkStatsTest.cpp</a></li>
-<li class="external"><a href="https://android.googlesource.com/platform/system/netd/+/master/server/TrafficControllerTest.cpp">https://android.googlesource.com/platform/system/netd/+/master/server/TrafficControllerTest.cpp</a></li>
+<li><a href="https://android.googlesource.com/platform/system/netd/+/master/libbpf/BpfNetworkStatsTest.cpp">https://android.googlesource.com/platform/system/netd/+/master/libbpf/BpfNetworkStatsTest.cpp</a>
+{: .external} </li>
+<li><a href="https://android.googlesource.com/platform/system/netd/+/master/server/TrafficControllerTest.cpp">https://android.googlesource.com/platform/system/netd/+/master/server/TrafficControllerTest.cpp</a>
+{: .external} </li>
 </ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/datausage/kernel-overview.html b/zh-cn/devices/tech/datausage/kernel-overview.html
index d63bb05..44f7116 100644
--- a/zh-cn/devices/tech/datausage/kernel-overview.html
+++ b/zh-cn/devices/tech/datausage/kernel-overview.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/devices/tech/datausage/tags-explained.html b/zh-cn/devices/tech/datausage/tags-explained.html
index 814136e..e97b4a4 100644
--- a/zh-cn/devices/tech/datausage/tags-explained.html
+++ b/zh-cn/devices/tech/datausage/tags-explained.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/devices/tech/debug/gdb.html b/zh-cn/devices/tech/debug/gdb.html
index 67e0e5a..d708a44 100644
--- a/zh-cn/devices/tech/debug/gdb.html
+++ b/zh-cn/devices/tech/debug/gdb.html
@@ -20,7 +20,18 @@
       limitations under the License.
   -->
 
-<p>GNU 项目调试程序 (GDB) 是常用的 Unix 调试程序。本页详细介绍了如何使用 <code>gdb</code> 调试 Android 应用和进程(面向平台开发者)。对于第三方应用开发,请参阅<a href="https://developer.android.com/studio/debug/index.html">调试您的应用</a>。</p>
+<p>GNU 项目调试程序 (GDB) 是常用的 Unix 调试程序。本页详细介绍了如何使用 <code>gdb</code> 调试 Android 应用和进程(面向平台开发者)。对于第三方应用开发,请参阅<a class="external" href="https://developer.android.com/studio/debug/index.html">调试应用</a>。</p>
+
+<h2 id="prerequisites">前提条件</h2>
+
+<p>要使用 GDB 调试应用和进程,请执行以下操作:</p>
+
+  <ul>
+    <li>使用 <code>envsetup.sh</code> 设置环境
+    </li><li>运行 <code>lunch</code> 命令</li>
+  </ul>
+
+<p>如需获得环境设置方面的更多帮助,请参阅<a href="/setup/build/building#initialize">编译准备工作</a>。</p>
 
 <h2 id="running">调试运行中的应用或进程</h2>
 
@@ -30,7 +41,7 @@
 gdbclient.py -p 1234
 </pre>
 
-<p>此脚本会设置端口转发,在设备上启动相应的 <code>gdbserver</code>,在主机上启动相应的 <code>gdb</code>,配置 <code>gdb</code> 以找出符号,然后将 <code>gdb</code> 连接到远程 <code>gdbserver</code>。</p>
+<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>
 
@@ -62,7 +73,7 @@
 
 <p>最后,在 <code>gdb</code> 提示处输入 <strong>continue</strong>。</p>
 
-<p class="note"><strong>注意</strong>:如果您指定了错误的 <code>gdbserver</code>,将会收到没任何帮助的错误消息(例如“<code>Reply contains invalid hex digit 59</code>”)。</p>
+<p class="note"><strong>注意</strong>:如果您指定了错误的 <code>gdbserver</code>,将会收到没有任何帮助的错误消息(例如“<code>Reply contains invalid hex digit 59</code>”)。</p>
 
 <h2 id="app-startup">调试应用启动</h2>
 
@@ -75,7 +86,7 @@
 <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>
+adb shell am start -a android.intent.action.MAIN -n <var>APP_NAME</var>/.<var>APP_ACTIVITY</var>
 </pre></li>
 
 <li>等待应用加载,然后等待系统显示一个对话框提示您应用正在等待附加调试程序。</li>
diff --git a/zh-cn/devices/tech/debug/index.html b/zh-cn/devices/tech/debug/index.html
index 2fd5591..f6ce152 100644
--- a/zh-cn/devices/tech/debug/index.html
+++ b/zh-cn/devices/tech/debug/index.html
@@ -24,7 +24,7 @@
 
 <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">内存</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">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>
 
 <h2 id="debuggerd">崩溃转储</h2>
 
diff --git a/zh-cn/devices/tech/debug/intsan.html b/zh-cn/devices/tech/debug/intsan.html
index c8fcb65..24b5d4b 100644
--- a/zh-cn/devices/tech/debug/intsan.html
+++ b/zh-cn/devices/tech/debug/intsan.html
@@ -24,7 +24,7 @@
 如果发生意外的整数溢出,可能会导致内存损坏,或导致与内存访问或内存分配关联的变量中出现信息披露漏洞。为了解决这个问题,我们在 Android 7.0 中添加了 Clang 的 <a href="https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html">UndefinedBehaviorSanitizer</a> (UBSan) 有符号和无符号整数溢出排错程序,以<a href="https://android-developers.googleblog.com/2016/05/hardening-media-stack.html">强化媒体框架</a>。在 Android 9 中,我们<a href="https://android-developers.googleblog.com/2018/06/compiler-based-security-mitigations-in.html">将 UBSan 扩展为涵盖更多组件</a>,并改进了对它的编译系统支持。
 </p>
 <p>
-如果发生有符号或无符号整数溢出,溢出排错功能可以检测可能溢出的算术指令,从而安全地中止进程。这些排错程序可以缓解根本原因是整数溢出的各种内存损坏和信息披露漏洞问题,例如原始 Stagefright 漏洞。
+这旨在增加对算术运算/指令(可能溢出)的检查,以便在实际发生溢出时安全地终止进程。这些排错程序可以减少主要是由整数溢出导致的各种内存损坏和信息披露漏洞,例如原始 Stagefright 漏洞。
 </p>
 <h2 id="examples-and-source">示例和源代码</h2>
 <p>
@@ -63,7 +63,7 @@
 
 <h3 id="intsan-in-bp">在蓝图文件中支持 IntSan</h3>
 <p>
-要在蓝图文件(例如 <a href="https://android.googlesource.com/platform/external/libnl/+/master/Android.bp#64"><code>/platform/external/libnl/Android.bp</code></a>)中启用整数溢出排错功能,请添加以下代码:
+要在 Blueprint 文件(例如 <a href="https://android.googlesource.com/platform/external/libnl/+/master/Android.bp#64"><code>/platform/external/libnl/Android.bp</code></a>)中启用整数溢出排错功能,请添加以下代码:
 </p>
 
 <pre class="prettyprint">   sanitize: {
@@ -94,7 +94,7 @@
       },
       blacklist: "modulename_blacklist.txt",
    },</pre>
-<aside class="caution"><strong>注意</strong>:在 Android 9 中,<strong>必须</strong>按照上文所述为静态二进制文件/库指定各个排错程序;<code>integer_overflow</code> 标志不支持静态二进制文件/库。在逐个指定时,请同时使用有符号和无符号排错程序。</aside>
+<aside class="caution"><strong>注意</strong>:在 Android 9 中,<strong>必须</strong>按照上文所述为静态二进制文件/库指定各个排错程序;<code>integer_overflow</code> 标记不支持静态二进制文件/库。在逐个指定时,请同时使用有符号和无符号排错程序。</aside>
 
 <h3 id="troubleshooting">问题排查</h3>
 <p>
@@ -122,7 +122,7 @@
 <ul>
 <li>重构代码以避免溢出(<a href="https://android-review.googlesource.com/c/platform/frameworks/av/+/572808">示例</a>)
 </li><li>通过 Clang 的 <a href="https://clang.llvm.org/docs/LanguageExtensions.html#checked-arithmetic-builtins">__builtin_*_overflow</a> 函数实现显式溢出(<a href="https://android-review.googlesource.com/c/platform/frameworks/av/+/588160">示例</a>)
-</li><li>通过属性来禁止对函数进行排错(<a href="https://android-review.googlesource.com/c/platform/frameworks/base/+/531720">示例</a>)
+</li><li>通过指定 <code>no_sanitize</code> 属性来停用函数中的排错功能(<a href="https://android-review.googlesource.com/c/platform/frameworks/base/+/531720">示例</a>)
 </li><li>通过黑名单文件来禁止对函数或源文件进行排错(<a href="https://android-review.googlesource.com/c/platform/frameworks/base/+/574222">示例</a>)
 </li></ul>
 <p>
@@ -130,11 +130,11 @@
 </p>
 <p>
 可能导致良性溢出的常见模式包括:
-</p><ul>
-<li>在转换为有符号类型之前发生无符号溢出的隐式类型转换(<a href="https://android-review.googlesource.com/c/platform/frameworks/av/+/574011">示例</a>)
+</p>
+<ul>
+<li>在转换为有符号类型之前发生无符号溢出的<a href="http://www.cplusplus.com/doc/tutorial/typecasting/" class="external">隐式类型转换</a>(<a href="https://android-review.googlesource.com/c/platform/frameworks/av/+/574011">示例</a>)
 </li><li>删除关联的列表,且删除时循环索引会递减(<a href="https://android-review.googlesource.com/c/platform/frameworks/base/+/588158">示例</a>)
-</li><li>将无符号类型指定为 -1,作为最大值的简写形式(<a href="https://android-review.googlesource.com/c/platform/frameworks/native/+/574088/1/services/surfaceflinger/Layer.cpp">示例</a>)
-</li><li>在条件中使无符号整数递减的循环(<a href="https://android-review.googlesource.com/c/platform/frameworks/native/+/573763/1/services/inputflinger/InputReader.cpp">示例</a>、<a href="https://android-review.googlesource.com/c/platform/frameworks/rs/+/572756">示例</a>)</li></ul>
+</li><li>将无符号类型指定为 -1,而不是指定实际最大值(<a href="https://android-review.googlesource.com/c/platform/frameworks/native/+/574088/1/services/surfaceflinger/Layer.cpp">示例</a>)</li><li>在条件中使无符号整数递减的循环(<a href="https://android-review.googlesource.com/c/platform/frameworks/native/+/573763/1/services/inputflinger/InputReader.cpp">示例</a>、<a href="https://android-review.googlesource.com/c/platform/frameworks/rs/+/572756">示例</a>)</li></ul>
 <p>
 在停用排错功能之前,开发者最好是确保排错程序检测到的溢出确实是良性的,并且没有意外的副作用或安全隐患。
 </p>
diff --git a/zh-cn/devices/tech/debug/native_stack_dump.html b/zh-cn/devices/tech/debug/native_stack_dump.html
new file mode 100644
index 0000000..c18aa76
--- /dev/null
+++ b/zh-cn/devices/tech/debug/native_stack_dump.html
@@ -0,0 +1,164 @@
+<html devsite><head>
+
+  <meta name="book_path" value="/_book.yaml"/>
+
+  <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+<!--
+  Copyright 2019 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="dumping_user_and_kernel_stacks_on_kernel_events" class="page-title">发生内核事件时转储用户和内核堆栈</h1>
+
+<p>如果在系统执行内核中的特定代码路径时转储本机内核和用户空间堆栈,将有助于您在调试特定行为(例如在日志中发现的错误)时了解代码流。一种此类情况是:您在日志中发现了 SELinux 拒绝事件消息,但想知道哪个路径触发了这些消息,以便更好地了解为什么发生这种情况。</p>
+
+<p>在本文中,我们将向您介绍如何使用内核工具和 BPF 编译器集合 (BCC) 在 Android 系统中发生内核事件时转储用户和内核堆栈。BCC 是一个用于创建高效内核跟踪功能的工具包。</p>
+
+<h2 id="installing_adeb">安装 adeb</h2>
+
+<p><a href="https://android.googlesource.com/platform/external/adeb">adeb</a> 项目会在您的 Android 设备上安装 chroot 环境。我们将在文章的后续步骤中使用 adeb。</p>
+
+<p>按照 <a href="https://android.googlesource.com/platform/external/adeb/+/master/README.md">adeb 自述文件</a>中的说明安装 adeb。</p>
+
+<p>运行以下命令,在目标 Android 设备上安装 adeb:
+</p><pre class="devsite-terminal devsite-click-to-copy">
+adeb prepare --full
+</pre>
+adeb 预封装了 BCC,因此上一步还会安装 BCC 的 <code>trace</code> 实用程序,在后续步骤中我们需要使用该程序。<p></p>
+
+<h2 id="example_understanding_which_path_triggered_an_selinux_denial">示例:了解哪个路径触发了 SELinux 拒绝事件</h2>
+
+<h3 id="adding_a_tracepoint_to_the_kernel">向内核添加跟踪点</h3>
+
+<p>下面的 diff 会在内核中记录了 SELinux 拒绝事件的位置添加一个跟踪点。在本文的后续部分,我们需要将它与 BCC 配合使用。您可以将该 diff 应用于内核源代码,以便添加 SELinux 拒绝事件跟踪点。如果该 diff 不是非常适用,您可以将其作为参考来手动对其进行修补。</p>
+
+<pre class="prettyprint">
+diff --git a/include/trace/events/selinux.h b/include/trace/events/selinux.h
+new file mode 100644
+index 000000000000..dac185062634
+--- /dev/null
++++ b/include/trace/events/selinux.h
+@@ -0,0 +1,34 @@
++#undef TRACE_SYSTEM
++#define TRACE_SYSTEM selinux
++
++#if !defined(_TRACE_SELINUX_H) || defined(TRACE_HEADER_MULTI_READ)
++#define _TRACE_SELINUX_H
++
++#include &lt;linux/ktime.h&gt;
++#include &lt;linux/tracepoint.h&gt;
++
++TRACE_EVENT(selinux_denied,
++
++   TP_PROTO(int cls, int av),
++
++   TP_ARGS(cls, av),
++
++   TP_STRUCT__entry(
++       __field(    int,        cls )
++       __field(    int,        av  )
++   ),
++
++   TP_fast_assign(
++       __entry-&gt;cls = cls;
++       __entry-&gt;av = av;
++   ),
++
++   TP_printk("denied %d %d",
++       __entry-&gt;cls,
++       __entry-&gt;av)
++);
++
++#endif /* _TRACE_SELINUX_H */
++
++/* This part ust be outside protection */
++#include &lt;trace/define_trace.&gt;
+diff --git a/security/selinux/avc.c b/security/selinux/avc.c
+index 84d9a2e2bbaf..ab04b7c2dd01 100644
+--- a/security/selinux/avc.c
++++ b/security/selinux/avc.c
+@@ -34,6 +34,9 @@
+ #include "avc_ss.h"
+ #include "classmap.h"
+
++#define CREATE_TRACE_POINTS
++#include &lt;trace/events/selinux.h&gt;
++
+ #define AVC_CACHE_SLOTS            512
+ #define AVC_DEF_CACHE_THRESHOLD        512
+ #define AVC_CACHE_RECLAIM      16
+@@ -713,6 +716,12 @@ static void avc_audit_pre_callback(struct audit_buffer *ab, void *a)
+    struct common_audit_data *ad = a;
+    audit_log_format(ab, "avc:  %s ",
+             ad-&gt;selinux_audit_data-&gt;denied ? "denied" : "granted");
++
++   if (ad-&gt;selinux_audit_data-&gt;denied) {
++       trace_selinux_denied(ad-&gt;selinux_audit_data-&gt;tclass,
++                    ad-&gt;selinux_audit_data-&gt;audited);
++   }
++
+    avc_dump_av(ab, ad-&gt;selinux_audit_data-&gt;tclass,
+            ad-&gt;selinux_audit_data-&gt;audited);
+    audit_log_format(ab, " for ");
+</pre>
+
+<h3 id="tracing_the_user_and_kernel_stacks">跟踪用户和内核堆栈</h3>
+
+<p>要在命中 SELinux 拒绝事件跟踪点时跟踪堆栈,请运行以下命令:
+</p><pre class="prettyprint">
+<code class="devsite-terminal">adeb shell</code>
+<code class="devsite-terminal">trace -K -U 't:selinux:selinux_denial'</code>
+</pre><p></p>
+
+<p>当拒绝事件被触发时,您应该会看到诸如以下内容:
+</p><pre class="prettyprint">
+2286    2434    Binder:2286_4   selinux_denied
+        avc_audit_pre_callback+0xd8 [kernel]
+        avc_audit_pre_callback+0xd8 [kernel]
+        common_lsm_audit+0x64 [kernel]
+        slow_avc_audit+0x74 [kernel]
+        avc_has_perm+0xb8 [kernel]
+        selinux_binder_transfer_file+0x158 [kernel]
+        security_binder_transfer_file+0x50 [kernel]
+        binder_translate_fd+0xcc [kernel]
+        binder_transaction+0x1b64 [kernel]
+        binder_ioctl+0xadc [kernel]
+        do_vfs_ioctl+0x5c8 [kernel]
+        sys_ioctl+0x88 [kernel]
+        __sys_trace_return+0x0 [kernel]
+        __ioctl+0x8 [libc.so]
+        android::IPCThreadState::talkWithDriver(bool)+0x104 [libbinder.so]
+        android::IPCThreadState::waitForResponse(android::Parcel<em>, int</em>)+0x40
+                                                            [libbinder.so]
+        android::IPCThreadState::executeCommand(int)+0x460 [libbinder.so]
+        android::IPCThreadState::getAndExecuteCommand()+0xa0 [libbinder.so]
+        android::IPCThreadState::joinThreadPool(bool)+0x40 [libbinder.so]
+        [unknown] [libbinder.so]
+        android::Thread::_threadLoop(void<em>)+0x12c [libutils.so]
+        android::AndroidRuntime::javaThreadShell(void</em>)+0x90 [libandroid_runtime.so]
+        __pthread_start(void*)+0x28 [libc.so]
+        __start_thread+0x48 [libc.so]
+</pre><p></p>
+
+<p>上面的调用链是一个统一的内核和用户原生调用链,可让您更好地查看从用户空间直到内核中发生拒绝事件的位置的代码流。在上面的示例调用链中,从用户空间启动的 Binder 事务涉及传递文件描述符。由于文件描述符没有所需的 SELinux 政策设置,因此 SELinux 拒绝了它并且 Binder 事务失败了。</p>
+
+<p>在大多数情况下,通过更改传递给 <code>trace</code> 命令的参数,可以使用相同的跟踪技术在发生系统调用、内核函数输入等事件时转储堆栈。</p>
+
+<h2 id="additional_references">其他参考资料</h2>
+
+<p>要详细了解 <code>trace</code>,请参阅 <a href="https://android.googlesource.com/platform/external/bcc/+/master/tools/trace_example.txt">BCC 跟踪工具文档</a>。要详细了解如何在 Android 设备上运行 BCC,请参阅 <a href="https://android.googlesource.com/platform/external/adeb/+/master/BCC.md">adeb 项目的 BCC 指南</a>。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/debug/sanitizers.html b/zh-cn/devices/tech/debug/sanitizers.html
index 6568f93..da390a9 100644
--- a/zh-cn/devices/tech/debug/sanitizers.html
+++ b/zh-cn/devices/tech/debug/sanitizers.html
@@ -37,7 +37,7 @@
   <li>释放后再使用</li>
 </ul>
 <p>
-Android 允许在完整编译级别和在<a href="/devices/tech/debug/asan#addresssanitizer_in_the_apps">应用级别</a>通过 asanwrapper 进行 <a href="/devices/tech/debug/asan">ASan 插桩</a>。
+Android 允许在完整编译级别和在<a href="/devices/tech/debug/asan">应用级别</a>通过 asanwrapper 进行 <a href="/devices/tech/debug/asan#addresssanitizer_in_the_apps">ASan 插桩</a>。
 </p>
 <p>
 AddressSanitizer 对所有与内存相关的函数调用(包括 alloca、malloc 和 free)进行插桩,并使用被读取或写入时会触发 ASan 回调的内存填充所有变量和已分配的内存区域。
diff --git a/zh-cn/devices/tech/display/adaptive-icons.html b/zh-cn/devices/tech/display/adaptive-icons.html
index 2c025a6..9b62b55 100644
--- a/zh-cn/devices/tech/display/adaptive-icons.html
+++ b/zh-cn/devices/tech/display/adaptive-icons.html
@@ -96,7 +96,7 @@
 要验证实现,请在替换其需要的遮罩后,查看图标是否可以在 Launcher3、设置、概览和设置中正确呈现。此外,您还可以在图形 CTS TestCase 中运行 AdaptiveIconDrawableTest.java 和 AdaptiveIconMaskTest.java 来测试实现。
     </p>
     <p>
-推荐的手动测试用例可以在以下位置找到:platform/development/samples/AdaptiveIconSample/。
+可以在以下位置找到推荐的手动测试用例:platform/development/samples/AdaptiveIconSample/。
     </p>
     <h2>已知问题</h2>
     <p>
@@ -106,6 +106,6 @@
     <p>
 这些问题可以通过以下方式解决:</p><ul>
     <li>应在 [0,100] x [0,100] 坐标系中定义遮罩。
-    </li><li>确保用于自适应图标(启动器图标、快捷方式)的图片的四边均保留了充足的内边距 (25%)。</li></ul>
+    </li><li>确保用于自适应图标(启动器图标、快捷方式)的图片在四侧均保留了充足的内边距 (25%)。</li></ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/display/color-mgmt.html b/zh-cn/devices/tech/display/color-mgmt.html
index f6c3bcf..d4e92ea 100644
--- a/zh-cn/devices/tech/display/color-mgmt.html
+++ b/zh-cn/devices/tech/display/color-mgmt.html
@@ -46,10 +46,9 @@
 <p>Android 还提供以下可选的扩展程序:</p>
 <ul>
 <li>
-<a href="https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_gl_colorspace_scrgb_linear.txt" class="external">EGL_EXT_colorspace_scrgb_linear</a>。该扩展程序可提供一个新的颜色空间选项 (scRGB),供应用在创建 EGLSurface 时进行选择。scRGB 颜色空间可定义与 sRGB 具有相同白点和颜色基准(以便与 sRGB 向后兼容)的线性显示引用空间。此扩展程序应该不需要驱动程序支持,而且可以在 Android EGL 封装容器中实现。为了正常发挥作用,此扩展程序需支持 16 位浮点 (FP16)。</li>
+<a href="https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_gl_colorspace_scrgb_linear.txt" class="external">EGL_EXT_colorspace_scrgb_linear</a>。该扩展程序可提供一个新的颜色空间选项 (scRGB),供应用在创建 EGLSurface 时进行选择。scRGB 颜色空间可定义与 sRGB 具有相同白点和颜色基准(以便与 sRGB 向后兼容)的线性显示引用空间。此扩展程序应该不需要驱动程序支持,而且可以在 Android EGL 封装容器中实现。为了正常发挥作用,此扩展程序需支持 16 位浮点数 (FP16)。</li>
 <li>
-<a href="https://github.com/KhronosGroup/EGL-Registry/pull/10/files" class="external">EGL_KHR_gl_colorspace_display_p3
-和 EGL_EXT_gl_colorspace_display_p3_linear</a>。对于需要使用 Display-P3 格式默认帧缓冲区来轻松实现显示设备的 sRGB 渲染的应用,此扩展程序允许创建将由支持该功能的 OpenGL 上下文采用 Display-P3 格式进行渲染的 EGLSurface。此扩展程序可以在 EGL 驱动程序封装容器中实现。</li>
+<a href="https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_display_p3.txt" class="external">EGL_EXT_gl_colorspace_display_p3 和 EGL_EXT_gl_colorspace_display_p3_linear</a>。对于需要使用 Display-P3 格式默认帧缓冲区来轻松实现显示设备的 sRGB 渲染的应用,此扩展程序允许创建将由支持该功能的 OpenGL 上下文采用 Display-P3 格式进行渲染的 EGLSurface。此扩展程序可以在 EGL 驱动程序封装容器中实现。</li>
 <li>
 <a href="https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VK_EXT_swapchain_colorspace" class="external">VK_EXT_swapchain_colorspace</a> (Vulkan)。可让应用通过它们正在使用的颜色空间来标记交换链。包括一些常见颜色空间,例如 DCI-P3、Display-P3、AdobeRGB、BT2020 等。</li>
 </ul>
@@ -65,14 +64,14 @@
 <h2>测试</h2>
 <p>要测试颜色管理,请使用 <code>opengl/tests</code> 中的以下资源:</p>
 <ul>
-<li><code>gl2_basic</code>。用于请求 Display-P3 颜色空间的简单 OpenGL 演示。</li>
+<li><code>gl2_basic</code>。请求 Display-P3 颜色空间的简单 OpenGL 演示。</li>
 <li><code>
 <a href="https://android.googlesource.com/platform/frameworks/native/+/master/opengl/tests/EGLTest/EGL_test.cpp">EGL_test</a></code>。测试必要的扩展程序和配置支持(10:10:10:2 和 FP16)。</li>
 <li><code>test_wide_color</code>。以与 SurfaceFlinger 创建 surface 的方式相同的方式创建 surface(例如配置、颜色空间、像素格式)。</li>
 </ul>
 
 <h2>参考实现</h2>
-<p>有关参考实现,请参阅 <code>frameworks/native</code>。有关标题,请参阅:</p>
+<p>有关参考实现,请参阅 <code>frameworks/native</code>。对于标题,请参阅:</p>
 <ul>
 <li>
 <code><a href="https://android.googlesource.com/platform/system/core/+/master/libsystem/include/system/graphics.h">system/core/include/system/graphics.h</a></code></li>
diff --git a/zh-cn/devices/tech/display/night-light.html b/zh-cn/devices/tech/display/night-light.html
index 43fa9aa..ab90ec9 100644
--- a/zh-cn/devices/tech/display/night-light.html
+++ b/zh-cn/devices/tech/display/night-light.html
@@ -28,8 +28,7 @@
 </p>
 <h2 id="implementation">实现</h2>
 <p>
-设备制造商可以使用以下路径中定义的下列标记来启用该功能的默认实现:
-<code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml">
+设备制造商可以使用以下文件中定义的下列标记来启用该功能的默认实现:<code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml">
 /android/frameworks/base/core/res/res/values/config.xml</a></code>
 
 </p><pre class="devsite-click-to-copy">
diff --git a/zh-cn/devices/tech/display/pip.html b/zh-cn/devices/tech/display/pip.html
index b9f6824..81dccc2 100644
--- a/zh-cn/devices/tech/display/pip.html
+++ b/zh-cn/devices/tech/display/pip.html
@@ -34,13 +34,11 @@
 </p>
 <h2 id="device-requirements">设备要求</h2>
 <p>
-要支持画中画功能,请在 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/pm/PackageManager.java">/android/frameworks/base/core/java/android/content/pm/PackageManager.java</a></code> 中启用 <code>PackageManager#FEATURE_PICTURE_IN_PICTURE</code> 系统功能。
-支持画中画功能的设备的最小屏幕宽度必须大于 220dp。与分屏多窗口类似,画中画支持多个 Activity 同时在屏幕上运行。因此,设备的 CPU 和 RAM 要足以支持这类使用情形。
+要支持画中画功能,请在 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/pm/PackageManager.java">/android/frameworks/base/core/java/android/content/pm/PackageManager.java</a></code> 中启用 <code>PackageManager#FEATURE_PICTURE_IN_PICTURE</code> 系统功能。支持画中画功能的设备的最小屏幕宽度必须大于 220dp。与分屏多窗口类似,画中画支持多个 Activity 同时在屏幕上运行。因此,设备的 CPU 和 RAM 要足以支持这类使用情形。
 </p>
 <h2 id="implementation">实现</h2>
 <p>
-大多数 Activity 生命周期管理都是由系统的 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/am/">ActivityManager</a></code> 和 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/wm/">WindowManager</a></code> 组件协作完成的。
-相应的参考界面实现位于 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/">SystemUI</a></code> 软件包中。
+大多数 Activity 生命周期管理都是由系统的 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/am/">ActivityManager</a></code> 和 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/wm/">WindowManager</a></code> 组件协作完成的。相应的参考界面实现位于 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/">SystemUI</a></code> 软件包中。
 </p>
 
 <p>
@@ -52,7 +50,7 @@
   <li><strong><code>ActivityStackSupervisor</code></strong>:从 <code>ActivityManagerService</code> 调用,以向置顶堆栈移入任务或从中移出任务,必要时会更新 <code>WindowManager</code>。</li>
   <li><strong><code>PinnedStackWindowController</code></strong>:来自 <code>ActivityManager</code> 的 <code>WindowManager</code> 接口。</li>
   <li><strong><code>PinnedStackController</code></strong>:将系统中的变化告知 <code>SystemUI</code>,例如 IME 显示/隐藏、宽高比变化、操作变化。</li>
-  <li><strong><code>BoundsAnimationController</code></strong>:以调整大小时不触发配置更改的方式,对画中画 Activity 窗口进行动画处理。</li>
+  <li><strong><code>BoundsAnimationController</code></strong>:以在调整大小的过程中不触发配置更改的方式,对画中画 Activity 窗口进行动画处理。</li>
   <li><strong><code>PipSnapAlgorithm</code></strong>:系统和 SystemUI 中使用的共享类,可控制屏幕边缘附近的画中画窗口的贴靠行为。</li>
 </ul>
 
@@ -61,12 +59,12 @@
 设备制造商可以在该实现的基础上做进一步的开发,只要所做更改不影响 CDD 所定义的内在行为即可。以下是对相关类的简单介绍:</p>
 <ul>
   <li><strong><code>PipManager</code></strong>:随 <code>SystemUI</code> 启动的 <code>SystemUI</code> 组件。</li>
-  <li><strong><code>PipTouchHandler</code></strong>:触摸处理程序,用于控制操纵画中画窗口的手势。仅在画中画的输入使用方处于活动状态时使用(请参阅 <code>InputConsumerController</code>)。在此处理程序中可添加新手势。</li>
-  <li><strong><code>PipMotionHelper</code></strong>:一个辅助类,用于跟踪画中画位置和屏幕上允许的区域。通过这个类调用 <code>ActivityManagerService</code> 可更新或调整画中画的位置和大小。</li>
+  <li><strong><code>PipTouchHandler</code></strong>:触摸处理程序,用于控制操纵画中画窗口的手势。仅在画中画的输入使用方处于活动状态时使用(请参阅 <code>InputConsumerController</code>)。可在此处理程序中添加新手势。</li>
+  <li><strong><code>PipMotionHelper</code></strong>:一个辅助类,用于跟踪画中画的位置和屏幕上允许的区域。通过这个类调用 <code>ActivityManagerService</code> 可更新或调整画中画的位置和大小。</li>
   <li><strong><code>PipMenuActivityController</code></strong>:用于启动一个 Activity,以便显示当前画中画中的 Activity 提供的操作。所启动的 Activity 属于任务叠加层 Activity,会移除上层的输入使用方,以使自身进入可互动状态。</li>
   <li><strong><code>PipMenuActivity</code></strong>:菜单 Activity 的实现。</li>
-  <li><strong><code>PipMediaController</code></strong> :当媒体会话的变化可能会影响画中画上的默认操作时更新 <code>SystemUI</code> 的侦听器。</li>
-  <li><strong><code>PipNotificationController</code></strong>:确保在用户使用画中画功能时显示一条处于活动状态的通知的控制器。</li>
+  <li><strong><code>PipMediaController</code></strong>:当媒体会话的变化可能会影响画中画上的默认操作时更新 <code>SystemUI</code> 的侦听器。</li>
+  <li><strong><code>PipNotificationController</code></strong>:确保在用户使用画中画功能时显示一条有效通知的控制器。</li>
   <li><strong><code>PipDismissViewController</code></strong>:当用户开始与画中画进行互动时向用户显示的叠加层,提示用户可以关闭画中画。</li>
 </ul>
 <h2 id="default-placement">默认显示位置</h2>
diff --git a/zh-cn/devices/tech/display/rotate-suggestions.html b/zh-cn/devices/tech/display/rotate-suggestions.html
index 8ba6095..3b6f4fe 100644
--- a/zh-cn/devices/tech/display/rotate-suggestions.html
+++ b/zh-cn/devices/tech/display/rotate-suggestions.html
@@ -27,7 +27,7 @@
 当设备处于旋转锁定模式时,用户可以将其屏幕锁定为顶层的可见 Activity 支持的任何旋转方式(假设当前存在系统限制)。如果顶层 Activity 可以在自动屏幕旋转模式下以多种旋转方式呈现,则应在旋转锁定模式下提供相同的选项(根据 Activity 的 <code>screenOrientation</code> 设置,会有一些例外情况)。
 </p>
 <p>
-旋转锁定模式的工作原理是:当设备旋转方式发生变化时,在导航栏中显示一个按钮。为此,即使自动屏幕旋转模式处于关闭状态,设备的屏幕方向传感器也必须一直保持启用状态。点按此按钮可有效设定用户旋转偏好设置:<code>Settings.System.USER_ROTATION</code>。WindowManager 会使用此偏好设置以及有关顶层 Activity 和系统状态的其他详细信息来更改系统的旋转方式。移动到另一个 Activity 时,在确定以何种旋转方式呈现系统时,WindowManager 会继续使用用户旋转偏好设置。
+旋转锁定模式的工作原理是:当设备旋转方式发生变化时,在导航栏中显示一个按钮。为此,即使自动屏幕旋转模式处于关闭状态,设备的屏幕方向传感器也必须一直保持启用状态。点按此按钮可有效设定用户旋转偏好设置 (<code>Settings.System.USER_ROTATION</code>)。WindowManager 会使用此偏好设置以及有关顶层 Activity 和系统状态的其他详细信息来更改系统的旋转方式。移动到另一个 Activity 时,在确定以何种旋转方式呈现系统时,WindowManager 会继续使用用户旋转偏好设置。
 </p>
 
 <figure>
@@ -61,7 +61,7 @@
    <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>添加了介绍模式逻辑,包括专门的动画(请参见对 <code>Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED</code> 的引用)</li>
    <li>实现 disable2 旋转标记(请参见 <code>disable()</code>)</li>
   </ul>
  </li>
@@ -96,7 +96,7 @@
 使用此功能的硬件要求与使用自动屏幕旋转的要求相同。
 </p>
 <p>
-为确保实现的一致性,当自动屏幕旋转处于关闭状态时,如果系统出于任何原因更改为设备的自然旋转,则用户旋转偏好设置 (<code>Settings.System.USER_ROTATION</code>) 需重置为设备的自然旋转。提供的实现就是这样做的(请参见 <code>NavigationBarFragment.mRotationWatcher</code>)。
+为确保实现的一致性,当自动屏幕旋转设置处于关闭状态时,如果系统出于任何原因将设备设置更改为自然旋转,则用户旋转偏好设置 (<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>)。
@@ -123,7 +123,7 @@
 将 x 设置为 <code>0</code>,表示关闭该功能;将其设置为 <code>1</code>,表示开启该功能。
 
 </p><p>
-对于测试,您可以通过更改关联的 <code>Settings.Secure</code> 值来重置引入模式。要想实现这一点,最简单的方法是从特权 adb 实例运行以下命令:</p>
+对于测试,您可以通过更改关联的 <code>Settings.Secure</code> 值来重置介绍模式。要想实现这一点,最简单的方法是从特权 adb 实例运行以下命令:</p>
 
 <pre class="prettyprint">adb shell settings put secure num_rotation_suggestions_accepted 0</pre>
 
diff --git a/zh-cn/devices/tech/ota/ab/ab_implement.html b/zh-cn/devices/tech/ota/ab/ab_implement.html
index bb96e48..988f072 100644
--- a/zh-cn/devices/tech/ota/ab/ab_implement.html
+++ b/zh-cn/devices/tech/ota/ab/ab_implement.html
@@ -139,7 +139,7 @@
 
 <ul>
   <li><code>--slot <var>SLOT</var></code>:替换默认行为,并提示 fastboot 刷写以参数形式传入的插槽。</li>
-  <li><code>--set-active [<var>SLOT</var>]</code>:将指定插槽设为活动插槽。如果未指定可选参数,则将当前插槽设为活动插槽。</li>
+  <li><code>--set-active [<var>SLOT</var>]</code>:将插槽设为活动插槽。如果未指定可选参数,则将当前插槽设为活动插槽。</li>
 <li><code>fastboot --help</code>:获取有关命令的详细信息。</li>
 </ul>
 
diff --git a/zh-cn/devices/tech/ota/index.html b/zh-cn/devices/tech/ota/index.html
index c7f9627..a720216 100644
--- a/zh-cn/devices/tech/ota/index.html
+++ b/zh-cn/devices/tech/ota/index.html
@@ -20,23 +20,22 @@
       limitations under the License.
   -->
 
-    <p>
-      正常使用的 Android 设备可以接收和安装系统和应用软件的无线 (OTA) 更新。本部分介绍了更新包的结构以及构建更新包时所用的工具。它适用于希望将 OTA 更新系统用于新的 Android 设备以及正在编译更新软件包以用于已发布设备的开发者。<em></em>OTA 更新旨在升级基础操作系统和系统分区上安装的只读应用;这些更新不会影响用户从 Google Play 安装的应用。
+    <p>正常使用的 Android 设备可以接收和安装系统、应用软件和时区规则的无线下载 (OTA) 更新。本部分介绍了更新包的结构以及所提供的用于编译更新包的工具。这些内容专供有以下需求的开发者参考:要将 OTA 更新用于新的 Android 设备以及要为已发布的设备编译更新软件包。
     </p>
 
-    <p>Android 开源项目 (AOSP) 包含 <a href="https://android.googlesource.com/platform/bootable/recovery/+/master/updater_sample/" class="external">SystemUpdaterSample</a> 应用,该应用可提供关于如何使用 Android 系统更新 API 来安装 OTA 更新的示例。示例应用提供了关于如何使用 <code>update_engine</code> 进行 A/B 更新的示例。有关详情,请参阅 <a href="https://android.googlesource.com/platform/bootable/recovery/+/master/updater_sample/README.md" class="external"><code>updater_sample/README.md</code></a>。
+    <p><em></em>OTA 更新旨在升级基础操作系统、系统分区上安装的只读应用和/或时区规则;这些更新不会影响用户从 Google Play 安装的应用。
     </p>
 
     <h2 id="ab_updates">A/B(无缝)系统更新</h2>
-
-      <p>
-        现代 A/B 设备中的每个分区都有两个副本(A 和 B)。当系统运行但处于空闲状态时,设备会将更新应用到当前未使用的分区。A/B 设备不需要空间来下载更新软件包,因为它们可以在从网络中读取更新时应用该更新。这被称为“流式传输 A/B”。A/B 更新也被称为“无缝更新”。<em></em><em></em>要详细了解有关 A/B 设备的 OTA 更新,请参阅 <a href="/devices/tech/ota/ab/index.html">A/B(无缝)系统更新</a>一文。
-      </p>
+    <p>在现代 Android 设备中,每个分区都存在两个副本(A 和 B)。当系统运行但处于空闲状态时,设备会将更新应用到当前未使用的分区。<em></em>A/B 设备不需要空间来下载更新软件包,因为它们可以在从网络中读取更新的同时应用更新;这称之为“流式传输 A/B”。如需详细了解 A/B 设备的 OTA 更新,请参阅 <a href="/devices/tech/ota/ab/index.html">A/B(无缝)系统更新</a>。如需查看示例应用以了解如何使用 Android 系统更新 API(即 <code>update_engine</code>)安装 A/B 更新,请参阅 <a href="https://android.googlesource.com/platform/bootable/recovery/+/master/updater_sample/" class="external">SystemUpdaterSample</a>(<a href="https://android.googlesource.com/platform/bootable/recovery/+/master/updater_sample/README.md" class="external"><code>updater_sample/README.md</code></a> 中提供了应用详情)。
+    </p>
 
     <h2 id="nonab_updates">非 A/B 系统更新</h2>
+      <p>老款 Android 设备可在专用的恢复分区中使用软件解压下载的更新包并将更新应用到其他分区。有关详细信息,请参阅<a href="/devices/tech/ota/nonab/index.html">非 A/B 系统更新</a>。
+      </p>
 
-      <p>
-        老款设备可在特殊的恢复分区中使用软件解压缩下载的更新包并将其应用于其他分区。有关详细信息,请参阅<a href="/devices/tech/ota/nonab/index.html">非 A/B 系统更新</a>一文。
+      <h2 id="time-zone-updates">时区规则更新</h2>
+      <p>从 Android 8.1 开始,OEM 可以将更新的时区规则数据推送至设备,而不必进行系统更新。此机制使用户能够及时获得更新(从而延长 Android 设备的使用期限),并且使 OEM 能够独立于系统映像更新来测试时区更新。有关详细信息,请参阅<a href="/devices/tech/config/timezone-rules">时区规则</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 ec2d49e..11635e2 100644
--- a/zh-cn/devices/tech/ota/nonab/device_code.html
+++ b/zh-cn/devices/tech/ota/nonab/device_code.html
@@ -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() {
@@ -695,12 +695,12 @@
 <ul>
 <li><b>info.input_zip</b>:(仅限完整 OTA)输入项 target-files .zip 的 <code>zipfile.ZipFile</code> 对象。</li>
 <li><b>info.source_zip</b>:(仅限版本递增 OTA)源 target-files .zip 的 <code>zipfile. ZipFile
-</code> 对象(安装版本递增包时编译版本已在设备上)。</li>
+</code> 对象(安装版本递增包时已在设备上的编译版本)。</li>
 <li><b>info.target_zip</b>:(仅限版本递增 OTA)目标 target-files .zip 的 <code>zipfile.ZipFile
 </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 251a989..0b9ab20 100644
--- a/zh-cn/devices/tech/ota/nonab/inside_packages.html
+++ b/zh-cn/devices/tech/ota/nonab/inside_packages.html
@@ -74,13 +74,13 @@
 <dt><code>apply_patch_check(<i>filename</i>, <i>sha1</i>[, <i>sha1</i>, ...])
 </code></dt>
 <dd>如果 filename 的内容或缓存分区中临时副本(如果存在)的内容具有与指定的 sha1 值之一相等的 SHA1 校验和,则返回 True。sha1 值指定为 40 位十六进制数字。<i></i><i></i><i></i>该函数不同于 <code>sha1_check(read_file(<i>filename</i>),
-<i>sha1</i> [, ...])</code>,因为它知道要检查缓存分区副本,因此即使文件被中断的 <code>apply_patch() update</code> 损坏,<code>apply_patch_check()</code> 也将成功。</dd>
+<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>
 <dd>评估每个表达式并将它们连接起来。在只有两个参数的特殊情况下,+ 运算符就是该函数的语法糖(但该函数形式可以包含任意数量的表达式)。表达式必须为字符串;该函数不能连接 Blob。</dd>
 <dt><code>file_getprop(<i>filename</i>, <i>key</i>)</code></dt>
-<dd>读取给定的 filename,将其解释为属性文件(例如:<code>/system/build.prop</code>/system/build.prop),并返回给定 key 的值,如果 key 不存在,则返回空字符串。<i></i><i></i><i></i></dd>
+<dd>读取给定的 filename,将其解释为属性文件(例如:<code>/system/build.prop</code>),并返回给定 key 的值,如果 key 不存在,则返回空字符串。<i></i><i></i><i></i></dd>
 <dt><code>format(<i>fs_type</i>, <i>partition_type</i>, <i>location</i>, <i>
 fs_size</i>, <i>mount_point</i>)</code></dt>
 <dd>重新格式化给定的分区。支持的分区类型如下:
@@ -122,7 +122,7 @@
 <dt><code>set_progress(<i>frac</i>)</code></dt>
 <dd>在最近的 <code>show_progress()</code> 调用所定义的块内设置进度条的位置。frac 必须在 [0.0, 1.0] 范围内。<i></i>进度条从不向后移动;向后移动的尝试会被忽略。</dd>
 <dt><code>sha1_check(<i>blob</i>[, <i>sha1</i>])</code></dt>
-<dd>blob 参数是<code>
+<dd>blob 参数是 <code>
 read_file()</code> 返回的 blob 类型或 <code>package_extract_file()
 </code> 的单参数形式 blob。<i></i>在没有 sha1 参数的情况下,此函数返回 blob 的 SHA1 哈希值(作为 40 位十六进制字符串)。<i></i>在提供了一个或多个 sha1 参数的情况下,如果 SHA1 哈希值等于其中一个参数,则该函数返回此 SHA1 哈希值;如果与任何一个参数都不相等,则返回空字符串。<i></i></dd>
 <dt><code>show_progress(<i>frac</i>, <i>secs</i>)</code></dt>
diff --git a/zh-cn/devices/tech/ota/sign_builds.html b/zh-cn/devices/tech/ota/sign_builds.html
index c76fc01..445ef16 100644
--- a/zh-cn/devices/tech/ota/sign_builds.html
+++ b/zh-cn/devices/tech/ota/sign_builds.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>
@@ -119,8 +119,7 @@
 </code> 密钥来对 SpecialApp.apk 进行签名。此版本仅可使用不受<i></i>密码保护的私钥。</p>
 
 <h2 id="advanced-signing-options">高级签名选项</h2>
-<p>运行 <code>sign_target_files_apks</code> 脚本时,必须在命令行中指定在编译版本中使用的每个密钥的替换密钥。
-<code>-k <i>src_key</i>=<i>
+<p>运行 <code>sign_target_files_apks</code> 脚本时,必须在命令行中指定在编译版本中使用的每个密钥的替换密钥。<code>-k <i>src_key</i>=<i>
 dest_key</i></code> 标记每次指定一个替换密钥。<code>-d <i>dir</i></code> 标记可让您指定一个包含四个密钥(以替换 <code>build/target/product/security</code> 中的所有密钥)的目录;这相当于使用四次 <code>-k</code> 来指定映射关系:</p>
 
 <pre class="devsite-click-to-copy">
diff --git a/zh-cn/devices/tech/power/component.html b/zh-cn/devices/tech/power/component.html
index 3b9eccf..9e4725a 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”,这样会每隔几秒钟执行一次接入点扫描,而且扫描过程中功耗会明显上升,但您必须从这些测量值中减去屏幕功耗。</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”,这样会每隔几秒钟执行一次接入点扫描,在扫描过程中功耗看起来会明显上升,但您必须从这些测量值中减去屏幕的功耗。</p>
 
 <p class="note">
 <strong>注意</strong>:请使用受控设置(如 <a href="http://en.wikipedia.org/wiki/Iperf">iperf</a>)生成网络收发流量。</p>
diff --git a/zh-cn/devices/tech/settings/info-architecture.html b/zh-cn/devices/tech/settings/info-architecture.html
index 7d30891..72558c7 100644
--- a/zh-cn/devices/tech/settings/info-architecture.html
+++ b/zh-cn/devices/tech/settings/info-architecture.html
@@ -73,7 +73,7 @@
 <h3 id="dashboard-fragment">DashboardFragment</h3>
 
 <p>
-<code>DashboardFragment</code> 是插件式偏好设置控制器的托管方。该片段继承自 <code>PreferenceFragment</code>,并具有用于扩大和更新静态偏好设置列表与动态偏好设置列表的钩子。
+<code>DashboardFragment</code> 是插件式偏好设置控制器的托管方。该片段继承自 <code>PreferenceFragment</code>,并具有用于扩展和更新静态偏好设置列表与动态偏好设置列表的钩子。
 </p>
 
 <h3 id="static-preferences">静态偏好设置</h3>
@@ -279,7 +279,7 @@
 
 <ul>
 <li>在“设置”部分运行 robolectric 测试。应通过所有现有测试和新测试。
-</li><li>编译并安装“设置”,然后手动打开正在修改的页面。该页面应立即更新。</li>
+</li><li>编译并安装“设置”,然后手动打开正在修改的页面。该页面应该会立即更新。</li>
 </ul>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/settings/patterns-components.html b/zh-cn/devices/tech/settings/patterns-components.html
index 13f72f1..7a1a93e 100644
--- a/zh-cn/devices/tech/settings/patterns-components.html
+++ b/zh-cn/devices/tech/settings/patterns-components.html
@@ -116,7 +116,7 @@
   <li>allowDividerAfterLastItem</li>
   </ul>
 </li>
-<li>ActionBar 主题背景颜色。Activity 应使用 <code>Theme.DeviceDefault.Settings</code> 作为其主题背景,或使用 <code>Theme.DeviceDefault.Settings</code> 创建自定义主题背景作为父级。
+<li>ActionBar 主题背景颜色。Activity 应使用 <code>Theme.DeviceDefault.Settings</code> 作为其主题背景,或使用 <code>Theme.DeviceDefault.Settings</code> 作为父级创建自定义主题背景。
 </li>
 <li>应用标头微件。在 AppHeaderController 中使用设置器来自定义每个字段,并在设置所有字段后调用 build()。
 </li>
diff --git a/zh-cn/devices/tech/settings/universal-search.html b/zh-cn/devices/tech/settings/universal-search.html
index da7c78b..ae0df46 100644
--- a/zh-cn/devices/tech/settings/universal-search.html
+++ b/zh-cn/devices/tech/settings/universal-search.html
@@ -88,7 +88,7 @@
 <h3 id="getRawDataToIndex">getNonIndexableKeys</h3>
   <ul>
    <li>如果您的片段为 <code>DashboardFragment</code>,则很少需要替换该方法。</li>
-   <li>返回不应针对给定用户、设备、配置等显示的结果相对应的键列表。此处提供的键应与 <code>SearchIndexableResource</code> 和 <code>SearchIndexableRaw</code> 中的 KEY 字段匹配。<em></em></li>
+   <li>返回满足以下条件的键列表:对应的结果不应显示给定用户、设备、配置等内容。此处提供的键应与 <code>SearchIndexableResource</code> 和 <code>SearchIndexableRaw</code> 中的 KEY 字段匹配。<em></em></li>
    <li>例如:不应向从未在其设备中使用 SIM 卡的用户显示“流量消耗”。</li>
   </ul>
 
diff --git a/zh-cn/devices/tv/reference-tv-app.html b/zh-cn/devices/tv/reference-tv-app.html
index a92a2e0..498bbb4 100644
--- a/zh-cn/devices/tv/reference-tv-app.html
+++ b/zh-cn/devices/tv/reference-tv-app.html
@@ -1,5 +1,5 @@
 <html devsite><head>
-    <title>参考电视应用</title>
+    <title>参考 TV 应用</title>
     <meta name="project_path" value="/_project.yaml"/>
     <meta name="book_path" value="/_book.yaml"/>
   </head>
@@ -92,7 +92,7 @@
 
 <h2 id="test">测试</h2>
 
-<p>在设备上安装 Live TV 后,您需要测试该应用是否已正确集成。除了对该电视应用运行<a href="/compatibility/cts/index.html">兼容性测试套件</a>和 <a href="/compatibility/cts/verifier.html">CTS 验证程序测试</a>外,您还可以使用以下这些测试:</p>
+<p>在设备上安装 Live TV 后,您需要测试该应用是否已正确集成。除了对该 TV 应用运行<a href="/compatibility/cts/index.html">兼容性测试套件</a>和 <a href="/compatibility/cts/verifier.html">CTS 验证程序测试</a>外,您还可以使用以下这些测试:</p>
 
 <h3 id="unit_tests">单元测试</h3>
 
diff --git a/zh-cn/legal.html b/zh-cn/legal.html
index a7534df..1477c02 100644
--- a/zh-cn/legal.html
+++ b/zh-cn/legal.html
@@ -32,7 +32,7 @@
 
 <p>“Android”名称、<img src="/setup/assets/images/sac_logo.png" alt="Android" style="margin:0;padding:0 2px;vertical-align:baseline"/> 徽标及<a href="http://www.google.com/permissions/">其他商标</a>均为 Google LLC 的财产。</p>
 
-<p>要了解更多详情,请参阅<a href="/setup/brands.html">品牌推广指南</a>。</p>
+<p>要了解更多详情,请参阅<a href="/setup/start/brands.html">品牌推广指南</a>。</p>
 
 <h2 id="WebSite">网站内容</h2>
 
diff --git a/zh-cn/license.html b/zh-cn/license.html
index 5bae14f..563af41 100644
--- a/zh-cn/license.html
+++ b/zh-cn/license.html
@@ -4,6 +4,11 @@
     <meta name="book_path" value="/_book.yaml"/>
   </head>
   <body>
+    <style>devsite-content-footer {
+  display: none;
+}
+</style>
+
   <!--
       Copyright 2017 The Android Open Source Project
 
@@ -63,7 +68,7 @@
  如果您的在线作品原样复制本网站中的全部或部分文字或图片,请在网页底部附上以下这段内容:<em></em>
 </p>
 <p style="margin-left:20px;font-style:italic">
-本网页的部分内容是从 <a href="https://code.google.com/p/android/">Android 开源项目</a>原创及共享作品中复制的,须遵照 <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 许可</a>所述条款进行使用。
+本网页的部分内容是从 <a href="https://code.google.com/p/android/">Android 开源项目</a>原创及共享作品中复制的,使用时须遵循 <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 许可</a>中所述条款。
 
 </p>
 <p>此外,请提供指向原始来源网页的链接,以便读者参阅相应网页,了解更多信息。
@@ -72,7 +77,7 @@
 <p>
  如果您的在线作品会显示在本网站内容的基础上<em>修改的</em>文字或图片,请在您的网页底部附上以下这段内容:</p>
 <p style="margin-left:20px;font-style:italic">
-本网页的部分内容是在 <a href="https://code.google.com/p/android/">Android 开源项目</a>原创及共享作品的基础上修改而成的,须遵照 <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 许可</a>所述条款进行使用。
+本网页的部分内容是在 <a href="https://code.google.com/p/android/">Android 开源项目</a>原创及共享作品的基础上修改而成的,使用时须遵循 <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 许可</a>中所述条款。
 </p>
 <p>同样,请提供指向原始来源网页的链接,以便读者参阅相应网页,了解更多信息。在对相应内容做过修改后,尤其要谨记这一点。
 </p>
@@ -121,7 +126,7 @@
 </li>
 <li>附上任何现有的知识产权免责声明、声明或条款及条件。如果没有这类内容,则应附上 W3C 软件和文档简短声明。
 </li>
-<li>在针对新代码或文档的版权声明中注明所做的任何更改或修改,例如“本软件或文档中包含从 [W3C 文档的名称或 URI] 复制的内容或根据 [W3C 文档的名称或 URI] 得出的内容。版权所有 © [YEAR] W3C®(MIT、ERCIM、Keio、Beihang)”。
+<li>在针对新代码或文档的版权声明中注明所做的任何更改或修改,例如“本软件或文档中包含从 [W3C 文档的名称或 URI] 复制的内容或根据 [W3C 文档的名称或 URI] 得出的内容。版权所有 © [年份] W3C®(MIT、ERCIM、Keio、Beihang)”。
 </li>
 </ul>
 <h5>免责声明</h5>
diff --git a/zh-cn/security/advisory/index.html b/zh-cn/security/advisory/index.html
index c2cd0b1..4aa067f 100644
--- a/zh-cn/security/advisory/index.html
+++ b/zh-cn/security/advisory/index.html
@@ -39,8 +39,8 @@
       <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?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 4efa15b..45d0fe4 100644
--- a/zh-cn/security/apksigning/index.html
+++ b/zh-cn/security/apksigning/index.html
@@ -20,7 +20,7 @@
       limitations under the License.
   -->
 
-<p>通过应用签名,开发者可以标识应用创作者并更新其应用,而无需创建复杂的接口和权限。在 Android 平台上运行的每个应用都必须要有<a href="https://developer.android.com/studio/publish/app-signing.html">开发者的签名</a>。Google Play 或 Android 设备上的软件包安装程序会拒绝没有获得签名就尝试安装的应用。
+<p>通过应用签名,开发者可以标识应用创作者并更新其应用,而无需创建复杂的接口和权限。在 Android 平台上运行的每个应用都必须<a class="external" href="https://developer.android.com/studio/publish/app-signing">有开发者的签名</a>。Google Play 或 Android 设备上的软件包安装程序会拒绝没有获得签名就尝试安装的应用。
 </p>
 <p>在 Google Play 上,应用签名可以将 Google 对开发者的信任和开发者对自己的应用的信任联系在一起。这样一来,开发者就知道自己的应用是以未经修改的形式提供给 Android 设备,并且可以对其应用的行为负责。
 </p>
@@ -29,27 +29,27 @@
 </p>
 <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>
+<p>应用还可以在“签名”保护级别声明安全权限,以便仅限使用同一个密钥签名的应用访问它们,同时维持单独的 UID 和应用沙盒。通过<a class="external" href="https://developer.android.com/guide/topics/manifest/manifest-element#uid">共用 UID 功能</a>,可以与共用的应用沙盒建立更紧密的联系,这是因为借助该功能,使用同一个开发者密钥签名的两个或更多应用可以在其清单中声明共用的 UID。</p>
 <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>
+  <li>v2 方案:<a href="/security/apksigning/v2">APK 签名方案 v2</a>(在 Android 7.0 中引入)。</li>
+  <li>v3 方案:<a href="/security/apksigning/v3">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>从一开始,APK 签名就是 Android 的一个有机部分。该方案基于<a class="external" href="https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Signed_JAR_File">签名的 JAR</a>。如要详细了解如何使用该方案,请参阅介绍如何<a class="external" href="https://developer.android.com/studio/publish/app-signing">为您的应用签名</a>的 Android Studio 文档。
 </p>
 <p>v1 签名不保护 APK 的某些部分,例如 ZIP 元数据。APK 验证程序需要处理大量不可信(尚未经过验证)的数据结构,然后会舍弃不受签名保护的数据。这会导致相当大的受攻击面。此外,APK 验证程序必须解压所有已压缩的条目,而这需要花费更多时间和内存。为了解决这些问题,Android 7.0 中引入了 APK 签名方案 v2。
 </p>
 <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>。
+搭载 Android 7.0 及更高版本的设备支持 APK 签名方案 v2(v2 方案)及更高版本的方案(在 Android P 中,v2 方案已更新为 v3 方案,以便在签名分块中包含其他信息,但在其他方面保持相同的工作方式)。该方案会对 APK 的内容进行哈希处理和签名,然后将生成的“APK 签名分块”插入到 APK 中。要详细了解如何在应用中使用 v2+ 方案,请参阅 <a class="external" href="https://developer.android.com/about/versions/nougat/android-7.0#apk_signature_v2">APK 签名方案 v2</a>。
 </p>
 <p>
 在验证期间,v2+ 方案会将 APK 文件视为 Blob,并对整个文件进行签名检查。对 APK 进行的任何修改(包括对 ZIP 元数据进行的修改)都会使 APK 签名作废。这种形式的 APK 验证不仅速度要快得多,而且能够发现更多种未经授权的修改。
@@ -57,7 +57,7 @@
 <p>新的签名格式向后兼容,因此,使用这种新格式签名的 APK 可在更低版本的 Android 设备上进行安装(会直接忽略添加到 APK 的额外数据),但前提是这些 APK 还带有 v1 签名。
 </p>
 <p>
-  <img src="../images/apk-validation-process.png" alt="APK 签名验证过程" id="figure1"/>
+  <img src="/security/images/apk-validation-process.png" alt="APK 签名验证过程" id="figure1"/>
 </p>
 <p class="img-caption"><strong>图 1.</strong> APK 签名验证过程</p>
 
@@ -65,6 +65,6 @@
 验证程序会对照存储在“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>
+<p>如需关于 APK 签名验证过程的详细信息,请参阅 APK 签名方案 v2 的<a href="/security/apksigning/v2#verification">“验证”部分</a>。</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/best-practices/app.html b/zh-cn/security/best-practices/app.html
new file mode 100644
index 0000000..80f95d5
--- /dev/null
+++ b/zh-cn/security/best-practices/app.html
@@ -0,0 +1,137 @@
+<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 设备上应用安全性的建议。</p>
+
+<h2 id="source-code-review">源代码审核</h2>
+
+<p>进行源代码审核可以发现大量安全问题,包括本文档中指出的问题。Android 强烈建议采用手动和自动两种方式审核源代码。</p>
+
+<ul>
+  <li>在进行审核时,应遵循全面的安全指导以确保覆盖率。利用相关的内部或外部标准来确保一致且全面的审核。</li>
+  <li>对所有使用 Android SDK 的应用代码运行 Linter(例如 <a href="https://developer.android.com/studio/write/lint" class="external">Android Studio Liner</a>),并更正发现的所有问题。</li>
+  <li>使用可以发现内存管理问题(例如,缓冲区溢出和差一错误)的自动工具分析本机代码。</li>
+  <li>Android 编译系统支持很多 LLVM 清理程序,例如可用于对内存相关问题进行运行时分析的 <a href="/devices/tech/debug/asan">AddressSanitizer</a> 和 <a href="/devices/tech/debug/sanitizers#undefinedbehaviorsanitizer">UndefinedBehaviorSanitizer</a>。如果与模糊测试配合使用(在 Android 中通过 <a href="/devices/tech/debug/libfuzzer">libFuzzer</a> 来实现),则清理程序可以发现需要进一步调查的异常极端情况。</li>
+  <li>经验丰富的安全评估员应审核风险较高的代码,例如加密、付款处理和 PII 处理。</li>
+</ul>
+
+<h2 id="automated-testing">自动测试</h2>
+
+<p>自动测试功能有助于发现大量安全问题,且应定期执行。</p>
+
+<ul>
+  <li>在整个开发流程中定期运行最新版 <a href="/compatibility/cts/">CTS</a>,以便尽早发现问题并缩短解决问题所需的时间。在自动编译流程(每天会编译多次)的连续集成期间,Android 会使用 CTS。</li>
+  <li>使接口的安全性测试实现自动化,包括使用格式有误的输入内容进行测试(模糊测试)。Android 编译系统支持使用 <a href="/devices/tech/debug/libfuzzer">libFuzzer</a> 来编写模糊测试。</li>
+</ul>
+
+<h2 id="vulnerability-scanning">漏洞扫描</h2>
+
+<p>漏洞扫描有助于确保预安装的应用不存在已知的安全漏洞。高级检测可以减少解决这些漏洞以及防止用户和设备面临风险所需的时间和成本。</p>
+
+<ul>
+  <li>使用行业认可的应用漏洞扫描工具扫描所有预安装的应用,并解决检测到的漏洞。</li>
+</ul>
+
+<h2 id="phas">潜在有害应用</h2>
+
+<p>请务必确保设备上的预安装应用不是<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">潜在有害应用</a> (PHA)。您要为设备上安装的所有应用的行为负责。</p>
+
+<h3 id="hostile-downloaders">恶意下载程序</h3>
+
+<p>恶意下载程序是指虽未被直接视为有害但会下载其他潜在有害应用的应用。</p>
+
+<ul>
+  <li>确保针对所有使用 <code>INSTALL_PACKAGES</code> 权限的预安装应用提供用户披露功能。</li>
+  <li>确保开发者遵守合同规定,未将任何应用作为 UID 0 进行安装。</li>
+  <li>评估在通过开发者网络安装的所有应用清单中声明的权限。</li>
+  <li>确保开发者遵守合同规定,在将应用提供给设备之前,使用 <a href="https://developers.google.com/safe-browsing/" class="external">Google Safe Browsing API</a> 扫描自动更新程序和安装程序应用的所有下载网址。</li>
+  <li>从 Android 9 开始,要求所有开发者使用 <code>UPDATE_PACKAGES</code> 权限而非 <code>INSTALL_PACKAGES</code> 权限。与 <code>INSTALL_SELF_UPDATES</code> 结合使用时,使用 <code>UPDATE_PACKAGES</code> 可以根据特权应用的预期用途为其授予精细范围的安装权限(而不是更广泛的 <code>INSTALL_PACKAGES</code> 权限)。</li>
+</ul>
+
+<h3 id="cryptomining">挖矿</h3>
+
+<p>挖矿应用是指试图利用设备的硬件或云计算以“硬币”的形式生成货币(通常是通过区块链技术来实现)的应用。如果您打算将此服务作为货币的替代形式提供或使用这项服务交换其他服务,请确保在利用设备的硬件运行此服务之前请求获得用户的许可(包括明确同意这会影响电池运行时间)。</p>
+
+<h3 id="imposter-apps">冒牌应用</h3>
+
+<p>冒牌应用是指试图将自己伪装成知名应用(例如 YouTube 或 Facebook)的应用。</p>
+
+<ul>
+  <li>在设备发布之前,扫描所有预加载的应用以查找漏洞。</li>
+</ul>
+
+<h2 id="app-permissions">应用权限</h2>
+
+<p>为预安装应用授予过多权限可能会带来安全风险。尽可能减少为预安装应用授予的必要权限数量,并确保这些应用无法获取不必要的权限。</p>
+
+<ul>
+  <li>不要为预安装的应用授予不必要的权限。仔细检查具有系统权限的应用,因为它们可能具有非常敏感的权限。</li>
+  <li>确保请求的所有权限都是相关的,并且是使用该特定应用的功能所必需的。</li>
+</ul>
+
+<h2 id="app-signing">应用签名</h2>
+
+<p>应用签名在保障设备安全方面发挥着重要作用,可用于进行权限检查以及软件更新。在选择为应用签名使用的密钥时,请务必考虑应用是仅在一台设备上使用,还是供多台设备共用。</p>
+
+<ul>
+  <li>确保不使用众所周知的密钥(例如 AOSP 开发者密钥)为设备签名。</li>
+  <li>确保按照与处理敏感密钥方面的业界标准做法一致的方式管理用于为应用签名的密钥,包括使用能够提供有限、可审核访问权限的硬件安全模块 (HSM)。</li>
+  <li>确保不使用平台密钥为应用签名。这样做可以向应用授予平台签名权限,这些权限非常强大,只能由操作系统的一些组件使用。系统应用应使用特许权限。</li>
+  <li>确保不使用不同的密钥为软件包名称相同的应用签名。在针对不同的设备开发应用时,经常会出现这种情况,尤其是在使用平台密钥时。如果应用独立于设备,则在多台设备之间使用相同的密钥。如果应用是特定设备专用的,则按设备和密钥创建独一无二的软件包名称。</li>
+</ul>
+
+<h2 id="isolating-apps-and-processes">隔离应用和进程</h2>
+
+    <p>如果使用得当,Android <a href="/security/app-sandbox">沙盒模型</a>可为应用和进程提供额外的安全性。</p>
+
+<h3 id="isolating-root-processes">隔离 Root 进程</h3>
+
+<p>Root 进程是最常受到提权攻击的目标,因此减少 Root 进程数量有助于降低提权风险。</p>
+
+<ul>
+  <li>确保尽可能减少设备上作为 Root 代码运行的必要代码的数量。尽可能使用常规 Android 进程而非 Root 进程。如果某个进程必须要在设备上作为 Root 进程运行,请将该进程记录在 AOSP 功能请求中,以便对其进行公开审核。</li>
+  <li>应尽可能将 root 代码与不可信数据隔离开来,并尽可能通过进程间通信 (IPC) 访问 Root 代码。例如,将 Root 功能缩减成可通过 Binder 访问的小型服务,并将这个具有签名权限的服务提供给网络流量处理权限很小或没有此类权限的应用。</li>
+  <li>Root 进程不得通过网络套接字进行监听。</li>
+  <li>Root 进程不得包含通用运行时(例如 Java 虚拟机)。</li>
+</ul>
+
+<h3 id="isolating-system-apps">隔离系统应用</h3>
+
+<p>一般而言,预先安装的应用不应使用共用系统唯一标识符 (UID) 运行。如果某个应用必须使用共用系统 UID 或其他特权服务(例如,电话服务),那么该应用不应导出由用户安装的第三方应用可访问的任何服务、广播接收器或内容提供程序。</p>
+
+<ul>
+  <li>确保尽可能减少设备上作为系统代码运行的必要代码的数量。尽可能通过 Android 进程自身的 UID 使用此类进程,而非重复使用系统 UID。</li>
+  <li>应尽可能将系统代码与不可信数据隔离开来,并且系统代码应尽可能仅向其他可信进程提供 IPC。</li>
+  <li>系统进程不得通过网络套接字进行监听。这是 CTS 要求。</li>
+</ul>
+
+<h3 id="isolating-processes">隔离进程</h3>
+
+<p>Android 应用沙盒要求应用与系统中的其他进程(包括 Root 进程和调试程序)隔离开来。除非应用或用户特意启用了调试功能,否则任何应用都不得违反这一要求。</p>
+
+<ul>
+  <li>确保 root 进程无法访问各个应用数据文件夹内的数据,使用已记录的 Android 调试方法时除外。</li>
+  <li>确保 root 进程无法访问应用内存,使用已记录的 Android 调试方法时除外。</li>
+  <li>确保设备上没有任何会访问其他应用/进程的数据或内存的应用。</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/best-practices/hardware.html b/zh-cn/security/best-practices/hardware.html
new file mode 100644
index 0000000..fbd1950
--- /dev/null
+++ b/zh-cn/security/best-practices/hardware.html
@@ -0,0 +1,41 @@
+<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 id="hardware-security">此页面包含的建议可确保 Android 设备上的硬件有助于提高设备的整体安全性,而不会影响设备的安全性。</p>
+
+<h2 id="device-memory">设备内存</h2>
+
+<p>在为 Android 设备选择内存时,请务必了解可能的安全权衡。例如,某些类型的内存可能允许执行 <a href="https://en.wikipedia.org/wiki/Row_hammer" class="external">Rowhammer</a> 式攻击。</p>
+
+<ul>
+  <li>Android 设备使用的内存应该包含针对 Rowhammer 式攻击的缓解措施。设备制造商应与其内存制造商密切合作,以了解更多详情。</li>
+</ul>
+
+<h2 id="strongbox-keymaster">StrongBox Keymaster</h2>
+
+<p>请务必安全存储和处理设备上可用的加密密钥。在 Android 设备上,通过利用在隔离环境(例如可信执行环境 (TEE))中实现的硬件支持 Keymaster 通常可实现此目的。此外,还建议支持 <a href="https://developer.android.com/preview/features/security#hardware-security-module" class="external">StrongBox Keymaster</a>(这是在防篡改硬件中实现的)。</p>
+
+<ul>
+  <li>确保 StrongBox Keymaster 在具有独立 CPU、安全存储、高品质的真随机数生成器、防篡改包装和防旁路攻击功能的环境中运行,以符合成为 StrongBox Keymaster 的要求。要详细了解这些要求,请参阅 Android 9 CDD 第 9.11.2 节。</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/best-practices/index.html b/zh-cn/security/best-practices/index.html
new file mode 100644
index 0000000..c7549e4
--- /dev/null
+++ b/zh-cn/security/best-practices/index.html
@@ -0,0 +1,37 @@
+<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
+
+          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>
+
+<ul>
+  <li><strong>组织和运营安全性</strong> - 在您的团队和组织内制定可靠的安全做法。</li>
+  <li><strong>系统安全性</strong> - 审核并改进核心操作系统和设备安全性。</li>
+  <li><strong>应用安全性</strong> - 审核并提高设备上应用的安全性。</li>
+  <li><strong>网络安全性</strong> - 审核和提高在设备中进行的网络通信的安全性。</li>
+  <li><strong>硬件安全性</strong> - 审核硬件选择以提升设备安全性。</li>
+  <li><strong>隐私</strong> - 允许用户控制其数据的处理方式。</li>
+</ul>
+
+<p><a href="/compatibility/cdd">Android 兼容性定义文档</a> (CDD) 中也详细介绍了本部分中的许多建议。在很多情况下,这些建议是通过 <a href="/compatibility/cts/">Android 兼容性测试套件</a> (CTS) 等工具检测到的。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/best-practices/network.html b/zh-cn/security/best-practices/network.html
new file mode 100644
index 0000000..125f636
--- /dev/null
+++ b/zh-cn/security/best-practices/network.html
@@ -0,0 +1,52 @@
+<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 设备上网络通信安全性的建议。</p>
+
+<h2 id="securing-listening-sockets">保护监听套接字</h2>
+
+<p>请谨慎使用监听套接字。通常情况下,设备上不应该有任何打开的监听套接字,因为它们可以让远程攻击者访问设备。</p>
+
+<ul>
+  <li>Android 设备应尽量减少它们公开的互联网监听套接字的数量(尤其是在启动时或默认情况下)。默认情况下,启动时不应在互联网上监听任何套接字。
+    <ul>
+      <li>Root 进程和归系统唯一标识符 (UID) 所有的进程不应公开任何监听套接字。</li>
+    </ul>
+  </li>
+  <li>必须能够在不使用 OTA 更新的情况下停用监听套接字的功能。这种停用行为可以通过更改服务器或用户设备配置来实现。</li>
+  <li>对于使用套接字的本地 IPC,应用必须使用只有某个组可以访问的 UNIX 域套接字。为 IPC 创建文件描述符,并允许特定 UNIX 组对其执行 +RW 操作。所有客户端应用都必须在该 UNIX 组内。</li>
+  <li>有些拥有多个处理器的设备(例如,无线装置/调制解调器从应用处理器中分离出来)会借助网络套接字在处理器之间进行通信。在这种情况下,处理器间通信所用的网络套接字必须使用单独的网络接口,以防止设备上未经授权的应用访问(例如,使用 iptables 防止设备上的其他应用访问)。</li>
+  <li>负责处理监听端口的守护进程必须能够防范格式有误的数据。您应该使用未经授权的客户端(在可能的情况下,也可以使用已获授权的客户端)针对端口进行模糊测试。提交错误以跟进崩溃。</li>
+</ul>
+
+    <p><a href="/compatibility/tests/">Android 兼容性测试套件</a> (CTS) 包括检查是否存在开放监听端口的测试。</p>
+
+<h3 id="disable-adb">停用 ADB</h3>
+
+<p>Android 调试桥 (ADB) 是一款非常实用的开发和调试工具,但它只适合在受控的安全环境中使用,不得针对一般使用情况启用该工具。</p>
+
+<ul>
+  <li>确保 ADB 默认处于停用状态。</li>
+  <li>确保 ADB 会要求用户先将其开启,然后再接受连接。</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/best-practices/ops.html b/zh-cn/security/best-practices/ops.html
new file mode 100644
index 0000000..e64a50b
--- /dev/null
+++ b/zh-cn/security/best-practices/ops.html
@@ -0,0 +1,120 @@
+<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>从您的组织内部开始为良好的安全做法奠定基础。</p>
+
+<h3 id="create-a-team">组建安全与隐私权团队</h3>
+
+<p>组建一个专门的安全和隐私权团队,并为该组织安排一位领导者。</p>
+
+<ul>
+  <li><strong>组建安全团队。</strong>
+    <ul>
+      <li>确保至少有一名员工负责安全、隐私权和事件响应。</li>
+      <li>为这个团队指定任务和职责范围。</li>
+      <li>为以下人员制定组织结构图和职位描述:安全经理、安全工程师、事件管理员。</li>
+      <li>雇用员工或外部承包商来担任这些角色。</li>
+    </ul>
+  </li>
+  <li><strong>定义安全开发生命周期 (SDL)</strong>。您的 SDL 应涵盖以下方面:
+    <ul>
+      <li>产品的安全要求。</li>
+      <li>风险分析和威胁建模。</li>
+      <li>对应用和代码的<a href="/devices/tech/debug/fuzz-sanitize">静态和动态分析</a>。</li>
+      <li>产品的最终安全审核流程。</li>
+      <li>事件响应。</li>
+    </ul>
+  </li>
+  <li><strong>评估组织风险</strong>。创建风险评估并制定计划以消除或化解这些风险。</li>
+</ul>
+
+<h3 id="build-verification">创建验证流程</h3>
+
+<p>评审现有内部构建验证和批准流程中的问题。</p>
+
+<ul>
+  <li>指出当前构建验证流程中可能导致在构建中引入<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">潜在有害应用</a> (PHA) 的所有问题。</li>
+  <li>确保您制定了代码审核和批准流程,即使是对 <a href="https://android.googlesource.com/" class="external">AOSP</a> 的内部修补也是如此。</li>
+  <li>通过在以下方面实施控制来提高构建完整性:
+    <ul>
+      <li><strong>跟踪更改</strong>。跟踪软件工程师;保留更改日志。</li>
+      <li><strong>评估风险</strong>。评估应用使用的权限;需要对代码更改进行手动审核。</li>
+      <li><strong>监控</strong>。评估对特权代码所做的更改。</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="source-code-change-tracking">源代码更改跟踪</h3>
+
+<p>监控源代码或第三方应用/二进制文件/SDK 的意外修改行为。</p>
+
+<ul>
+  <li><strong>评估合作伙伴关系</strong>。按照以下步骤评估与技术合作伙伴进行合作的风险:
+
+    <ul>
+      <li>针对如何评估与特定供应商合作的风险制定相关标准。</li>
+      <li>制作一个表单,询问供应商如何解决事件并管理安全性和隐私权。</li>
+      <li>通过定期审核验证他们的声明。</li>
+    </ul>
+  </li>
+  <li><strong>跟踪更改</strong>。记录哪些公司和员工修改了源代码并定期进行审核,以确保只进行适当的更改。</li>
+  <li><strong>保留记录</strong>。记录哪些公司将第三方二进制文件添加到您的版本中,并记录这些应用执行的功能及其收集的数据。</li>
+  <li><strong>计划更新</strong>。确保您的供应商按照要求在产品的整个生命周期内提供软件更新。不可预见的漏洞问题可能需要供应商提供支持才能解决。</li>
+</ul>
+
+<h3 id="validate-source-code">验证源代码完整性和起源</h3>
+
+<p>检查并验证原始设备制造商 (ODM)、无线下载更新 (OTA) 或运营商提供的源代码。</p>
+
+<ul>
+  <li><strong>管理签名证书</strong>。
+    <ul>
+      <li>将密钥存储在硬件安全模块 (HSM) 或安全云服务中(不要共享它们)。</li>
+      <li>确保控制和审核对签名证书的访问权限。</li>
+      <li>要求在编译系统中完成所有代码签名。</li>
+      <li>撤消丢失的密钥。</li>
+      <li>使用最佳做法生成密钥。</li>
+    </ul>
+  </li>
+  <li><strong>分析新代码</strong>。使用安全代码分析工具测试新添加的代码,以检查是否引入了新漏洞。此外,还要分析整体功能以检测新漏洞的表现形式。</li>
+  <li><strong>在发布前进行审核</strong>。在将源代码和第三方应用推送到生产环境之前,查找其中的安全漏洞。例如:
+    <ul>
+      <li>要求应用使用安全通信。</li>
+      <li>遵循最小权限原则并授予应用运行所需的最小权限集。</li>
+      <li>确保通过安全通道存储和传输数据。</li>
+      <li>确保服务依赖项保持最新状态。</li>
+      <li>将安全补丁程序应用于 SDK 和开源库。</li>
+    </ul>
+  </li>
+</ul>
+
+<h2 id="incident-response">事件响应</h2>
+
+<p>Android 相信可以借助强大的安全社区发现问题。您应该为外部各方创建并公布一种方法,方便相应人员可以就设备特有的安全问题与您联系。</p>
+
+<ul>
+  <li><strong>建立联系</strong>。创建一个电子邮件地址(例如 security@<var>your-company</var>.com)或制作一个网站,并清晰地说明如何报告与您的产品相关的潜在安全问题(<a href="https://security.samsungmobile.com/securityReporting.smsb" class="external">示例</a>)。</li>
+  <li><strong>向上游贡献更改</strong>。如果您发现某个安全问题会影响 Android 平台或多个设备制造商的设备,请通过提交<a href="g.co/AndroidSecurityReport" class="external">安全错误报告</a>与 Android 安全团队联系。
+  </li>
+  <li><strong>宣传良好的安全做法</strong>。主动评估为您的设备提供服务、组件和/或代码的硬件和软件供应商的安全做法。让供应商负责维持良好的安全态势。</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/best-practices/privacy.html b/zh-cn/security/best-practices/privacy.html
new file mode 100644
index 0000000..4a134aa
--- /dev/null
+++ b/zh-cn/security/best-practices/privacy.html
@@ -0,0 +1,74 @@
+<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 用户能够控制其数据的处理方式。</p>
+
+<h2 id="logging-data">记录数据</h2>
+
+<p>记录数据的做法会增加数据遭泄露的风险并降低系统性能。之前曾发生过多起因记录敏感用户数据而导致的公共安全事件。</p>
+
+<ul>
+  <li>请勿登录 SD 卡。</li>
+  <li>应用或系统服务不得记录第三方应用提供的可能包含敏感信息的数据。</li>
+  <li>应用不得在正常操作过程中记录任何个人身份信息 (PII),除非绝对有必要提供应用的核心功能。</li>
+</ul>
+
+<p>CTS 中有些测试可以检查日志中是否存在可能敏感的信息。</p>
+
+<h2 id="metrics-collection">指标收集</h2>
+
+<p>为了了解应用使用情况以及改善整体用户体验,收集指标可以是很关键的一环。但是,指标收集如果过于宽泛,也会导致用户隐私面临风险。</p>
+
+<ul>
+  <li>尽量不要收集指标。
+    <ul>
+      <li>如果您必须收集指标,请首先征求用户的明确同意,告知用户收集指标的意义所在。</li>
+    </ul>
+  </li>
+  <li>请仅收集支持服务可靠性所需的指标(个别情况除外)。</li>
+  <li>尽可能避免收集可识别用户身份或可能敏感的数据,例如<a href="https://developer.android.com/training/articles/user-data-ids" class="external">硬件标识符</a>。</li>
+  <li>尽可能确保所有数据都得到聚合与匿名处理。</li>
+</ul>
+
+<h2 id="spyware">间谍软件</h2>
+
+<p>间谍软件指聚焦于以下目的的软件:在用户或设备不知情的情况下收集其相关信息,并可能未经用户同意将其信息发送给其他实体。</p>
+
+<ul>
+  <li>在未经公开声明的情况下或以用户不知情的方式传输以下用户或设备数据的软件被视为间谍软件(例如下表所示,但不限于此):
+    <ul>
+      <li>用户联系人的相关信息(姓名、电话号码、电子邮件)</li>
+      <li>照片或其他文件</li>
+      <li>用户电子邮件中的内容</li>
+      <li>通话记录</li>
+      <li>短信日志</li>
+      <li>网络历史记录</li>
+      <li>浏览器书签</li>
+      <li>其他应用(不公开 <code>/data/</code> 目录)中的个人信息</li>
+      <li>音频或通话录音</li>
+      <li>密码</li>
+      <li>OAuth 令牌</li>
+      <li>位置</li>
+    </ul>
+  </li><li>确保所有应用都会在用户安装应用之前向他们提供合理的披露说明。</li>
+</ul>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/best-practices/system.html b/zh-cn/security/best-practices/system.html
new file mode 100644
index 0000000..1566fae
--- /dev/null
+++ b/zh-cn/security/best-practices/system.html
@@ -0,0 +1,198 @@
+<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 操作系统和设备的安全性的建议。</p>
+
+<h2 id="biometric-authentication">生物识别身份验证</h2>
+
+<p>仔细获取、存储和处理<a href="/security/biometric">生物识别数据</a>以进行用户身份验证。您应该:
+</p>
+
+<ul>
+  <li>在使用任何其他形式的身份验证(包括生物识别)之前,指定主要的身份验证方法。</li>
+  <li>在使用被动生物识别模式(例如面部识别)进行涉及身份验证绑定密钥的交易(例如,付款)时,必须提供明确的确认以指明 intent。</li>
+  <li>必须每 72 小时使用一次主要身份验证方法。</li>
+  <li>为所有生物识别数据和处理使用完全安全的管道。</li>
+  <li>切勿在设备外发送生物识别数据(包括原始传感器测量和衍生特征)。如果可能,请将此数据保存在安全的隔离环境(例如<a href="/security/trusty">可信执行环境 (TEE)</a> 或安全元件)中。</li>
+</ul>
+
+<p>具有生物识别技术的设备应该支持 <a href="https://developer.android.com/preview/features/security#fingerprint-auth" class="external">BiometricPrompt API</a>,此 API 为应用开发者提供了一个通用且一致的接口,以便在他们的应用中利用基于生物识别的身份验证。只有<a href="/security/biometric/#strong-weak-unlocks" class="external">极为安全的生物识别技术</a>才能与 <code>BiometricPrompt</code> 集成,并且集成必须遵循 <a href="/compatibility/cdd">Android 兼容性定义文档</a> (CDD) 指南。</p>
+
+<p>有关更多生物识别指南,请参阅<a href="/security/biometric#hal-implementation">生物识别 HAL 实施准则</a>。</p>
+
+<h2 id="selinux">SELinux</h2>
+
+<p>SELinux 提供了 Android 大部分安全模型的定义和强制执行。正确使用 SELinux 对于 Android 设备的安全性至关重要,并有助于减轻安全漏洞的影响。出于此原因,所有 Android 设备都应该实现<a href="/security/selinux/device-policy#granting_the_dac_override_capability">可靠的 SELinux 政策</a>。</p>
+
+<ul>
+  <li>实现最小特权政策。</li>
+  <li>避免授予 <code>CAP_DAC_OVERRIDE</code>、<code>CAP_SYS_ADMIN</code> 和 <code>CAP_NET_ADMIN</code> 权限。</li>
+  <li>不要将系统数据记录到 SD 卡。</li>
+  <li>使用提供的类型访问驱动程序,例如 <code>gpu_device</code>、<code>audio_device</code> 等。</li>
+  <li>对进程、文件和 SELinux 类型使用有意义的名称。
+    <ul>
+      <li>确保未使用默认标签,并且没有向其授予访问权限。</li>
+    </ul>
+  </li>
+  <li>设备专用政策应占设备上运行的所有政策的 5-10%。如果自定义政策所占的比例超过 20%,则几乎肯定会包含超特权域和 Dead 政策。过大的政策会浪费内存,因需要较大的启动映像而浪费磁盘空间,并对运行时政策查询时间产生负面影响。
+  </li>
+</ul>
+
+<h3 id="dynamic-loading-selinux-policy">动态加载 SELinux 政策</h3>
+
+<p>请勿在 Android 设备上动态加载 SELinux 政策。这样做可能会导致出现问题,例如:</p>
+
+<ul>
+  <li>阻止接受重要的安全补丁程序。</li>
+  <li>通过重新加载政策公开对设备进行 Root 操作的功能。</li>
+  <li>公开针对政策更新程序的中间人攻击的矢量。</li>
+  <li>由于政策更新错误导致砖砌设备。</li>
+</ul>
+
+<h2 id="backdoors">后门程序</h2>
+
+<p>Android 应用不得通过任何后门或其他方式来访问可绕过正常安全机制的系统或数据。这包括由开发者已知的密钥把关的诊断、调试、开发或保修修复特殊权限。要阻止后门程序,请执行以下操作:</p>
+
+<ul>
+  <li>使用行业认可的应用漏洞扫描工具来扫描所有第三方应用。</li>
+  <li>对具有敏感访问权限的所有代码(包括第三方库)执行代码审核。</li>
+  <li>通过将要扫描的应用上传到 Google Play 来利用 Google Play 保护机制。您可以上传要扫描的应用,而无需发布到 Google Play。</li>
+  <li>请勿在发布版本上预加载侧重于诊断或修复的工具。仅按需安装这些工具以解决特定问题。此外,这些工具不得处理或上传任何特定于帐号的数据。</li>
+</ul>
+
+<h2 id="development-tools">开发工具</h2>
+
+<p>开发工具(如调试、测试和诊断工具)通常可以揭示所收集的数据的处理方式,从而在设备上产生意外的安全漏洞。要确保开发工具不会进入正式版,请执行以下操作:</p>
+
+<ul>
+  <li>在使用系统映像之前,制作内部调试和测试工具哈希的黑名单并扫描这些 APK 的构建。</li>
+  <li>使用行业认可的应用漏洞扫描工具扫描所有第一方应用。</li>
+  <li>雇用第三方应用安全测试公司在任何重大更新之前评估设备上的所有关键诊断应用,尤其是应用是由第三方开发时。</li>
+  <li>确保只有用户可以在支持会话期间以口头或聊天方式启用该工具。存储同意的软件工件并在收集必要的诊断信息后停用该工具。</li>
+  <li>将此工具的使用记录存储在用户可通过其运营商帐号访问的日志中。</li>
+  <li>确保该工具收集的任何个人身份信息 (PII) 或设备遥测数据受到与相应国家/地区相关的匿名、保留和删除惯例的约束。只能收集与支持服务相关的数据。每次致电后都应删除这些数据。</li>
+  <li>确保未经用户明确同意,不得使用可用于间谍软件的技术(例如击键记录、麦克风使用或相机使用)。应将利用这些可能侵犯隐私的方法的应用以及用户必须同意的隐私权政策明确告知用户。未经用户明确同意,不得启用此类应用。</li>
+</ul>
+
+<p>以下是在实现披露和同意时要参考的一些其他建议:</p>
+
+<h3 id="in-app-disclosure">应用内披露</h3>
+
+<ul>
+  <li>直接在应用内显示应用的正常使用情况。无需用户打开任何菜单或设置就能查看。</li>
+  <li>向用户说明所收集数据的类型以及数据的使用方式。</li>
+  <li>理想情况下,请勿将此信息嵌入隐私权政策或服务条款中。请勿将其包含在其他与个人数据或敏感数据收集无关的披露声明中。</li>
+</ul>
+
+<h3 id="request-consent">征求用户同意</h3>
+
+<ul>
+  <li>同意必须是明确的。请勿将用户离开披露页面的操作(包括点按其他位置离开或者按返回或主屏幕按钮)视为同意。</li>
+  <li>征求同意的对话框必须以清楚明确的方式呈现。</li>
+  <li>必须要求用户执行明确的确认操作(例如点按接受或说出命令)来给予授权。</li>
+  <li>在征得用户明确同意之前,请勿收集个人或敏感数据。</li>
+  <li>请勿使用会自动关闭或设有期限的消息。</li>
+</ul>
+
+<h2 id="embedded-functionality-in-aosp">AOSP 中的嵌入式功能</h2>
+
+<p>在 AOSP 中嵌入其他功能往往会产生意外行为和后果;因此请谨慎行事。</p>
+
+<ul>
+  <li>确保用户在要使用其他默认应用(例如,搜索引擎、网络浏览器、启动器)并披露从设备外发送数据时会收到提示。</li>
+  <li>确保 AOSP APK 使用 AOSP 证书进行签名。</li>
+  <li>运行回归测试并保留更改日志以确定 AOSP APK 是否已添加代码。</li>
+</ul>
+
+<h2 id="security-updates">安全更新</h2>
+
+<p>Android 设备应在至少两年(从发布之日算起)内获得持续的安全支持。这包括接收可解决已知安全漏洞的定期更新。</p>
+
+<ul>
+  <li>与硬件合作伙伴(如 SoC 供应商)合作,针对 Android 设备上的所有组件制定适当的支持协议。</li>
+  <li>确保可以在用户交互最少的情况下安装安全更新,以提高用户在其 Android 设备上接受和安装更新的可能性。强烈建议实现<a href="/devices/tech/ota/ab/">无缝系统更新</a>或等效的安全功能。</li>
+  <li>确保您了解 <a href="/security/bulletin/">Android 安全公告</a>中声明的 Android 安全补丁程序级别 (SPL) 的累积要求。如果设备使用的是 2018-02-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
+</ul>
+
+<h3 id="dynamic-kernel-updates">动态内核更新</h3>
+
+<p>请勿动态修改关键系统组件。虽然有一些研究表明动态内核更新有助于防范紧急威胁,但收益目前赶不上评估费。建议创建一个强大的 OTA 更新方法来快速分发漏洞保护。</p>
+
+<h2 id="key-management">密钥管理</h2>
+
+<p>保持良好的密钥管理政策和做法,以确保签名密钥的安全性。</p>
+
+<ul>
+  <li>不要与外部方共享签名密钥。</li>
+  <li>如果签名密钥受到攻击,请生成新密钥并在以后对所有应用进行双重签名。</li>
+  <li>将所有密钥存储在需要多重认证才能访问的高度安全的模块硬件或服务中。</li>
+</ul>
+
+<h2 id="system-image-signing">系统映像签名</h2>
+
+<p>系统映像的签名对于确定设备的完整性至关重要。</p>
+
+<ul>
+  <li>请勿使用已公开的密钥对设备进行签名。</li>
+  <li>按照与处理敏感密钥方面的业界标准做法一致的方式管理用于为设备签名的密钥,包括使用能够提供有限、可审核访问权限的硬件安全模块 (HSM)。</li>
+</ul>
+
+<h2 id="unlockable-bootloaders">可解锁的引导加载程序</h2>
+
+<p>许多 Android 设备都支持解锁引导加载程序。解锁引导加载程序后,设备所有者将能够修改系统分区和/或安装自定义操作系统。常见用例包括在设备上安装第三方只读存储器 (ROM) 以及进行系统级开发。例如,Google Nexus 设备所有者可以运行 <code>fastboot oem unlock</code> 来启动解锁过程,该过程会向用户显示以下消息:</p>
+
+<aside class="caution">
+    <p><strong>解锁引导加载程序吗?</strong></p>
+
+    <p>如果您解锁引导加载程序,则可以在此手机上安装自定义操作系统软件。</p>
+
+    <p>自定义操作系统未经过与原始操作系统相同的测试,可能会导致您的手机和已安装的应用停止正常工作。</p>
+
+    <p>为防止未经授权访问您的个人数据,解锁引导加载程序还将删除您手机上的所有个人数据(“恢复出厂设置”)。</p>
+
+    <p>按音量调高按钮/音量调低按钮可选择“是”或“否”,然后按电源按钮即可继续。</p>
+
+    <p><strong>是</strong>:解锁引导程序(可能会使保修无效)</p>
+
+    <p><strong>否</strong>:不解锁引导加载程序并重启手机。</p>
+</aside>
+
+<p>作为最佳做法,在解锁之前,可解锁的 Android 设备必须先安全地清除所有用户数据。如果未能适当删除所有数据便进行解锁,能够接触到这些设备的攻击者便可以在未经授权的情况下获取机密的 Android 用户数据。为了防止用户数据泄露,支持解锁的设备必须正确实现解锁。</p>
+
+<ul>
+  <li>在用户确认解锁命令后,设备必须立即开始擦除数据。在安全删完数据之前,不得设置 <code>unlocked</code> 标记。</li>
+  <li>如果无法安全删完数据,则设备必须保持锁定状态。</li>
+  <li>如果底层块设备支持 <code>ioctl(BLKSECDISCARD)</code> 或等同命令,则应使用此类命令。对于嵌入式 MultiMediaCard (eMMC) 设备,这意味着使用 Secure Erase 或 Secure Trim 命令。对于 eMMC 4.5 及更高版本,这意味着先使用常规的 Erase 或 Trim 命令,然后再执行 Sanitize 操作。</li>
+  <li>如果底层块设备不支持 <code>BLKSECDISCARD</code>,则必须改用 <code>ioctl(BLKDISCARD)</code>。在 eMMC 设备上,这是一个常规的 Trim 操作。</li>
+  <li>如果 <code>BLKDISCARD</code> 不受支持,可以将块设备中的数据重写为全零。</li>
+  <li>用户必须能够要求在刷写分区之前先清除用户数据。例如,Nexus 设备使用 <code>fastboot oem lock</code> 命令擦除用户数据。</li>
+  <li>无论设备处于解锁还是重新锁定状态,都可以通过 eFuses 或类似机制进行记录。不过,我们强烈建议重新锁定引导加载程序并随后恢复出厂设置,这样应该能恢复完整的设备功能。</li>
+</ul>
+
+<p>这些要求旨在确保在完成解锁操作时所有数据都已被销毁。未能实现这些保护措施会被视为存在<a href="/security/overview/updates-resources#severity">中级安全漏洞</a>。</p>
+
+<p>将设备解锁后,可以使用 <code>fastboot oem lock</code> 命令重新将其锁定。使用新的自定义操作系统时,锁定引导加载程序能够为用户数据提供的保护与原始设备制造商操作系统提供的保护相同(例如,如果设备被再次解锁,用户数据将会被清除)。</p>
+
+<h2 id="device-pentesting">设备测试</h2>
+
+<p>设备应在装运前由具备资质的测试员进行审核。测试应确认设备是否遵循此处提供的安全指导以及内部 OEM 安全指导。</p>
+
+</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 30d9f19..c8b3f33 100644
--- a/zh-cn/security/bulletin/2018-07-01.html
+++ b/zh-cn/security/bulletin/2018-07-01.html
@@ -28,7 +28,7 @@
 Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 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="#mitigations">Android 和 Google Play 保护机制提供的缓解措施</a>部分,详细了解有助于提高 Android 平台安全性的 <a href="/security/enhancements/index.html">Android 安全平台防护功能</a>和 Google Play 保护机制。
@@ -51,7 +51,7 @@
 </p>
 
 <h3 id="framework">框架</h3>
-<p>这一部分中最严重的漏洞可让远程攻击者利用特制的 pac 文件通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -136,7 +136,7 @@
 </tbody></table>
 
 <h3 id="system">系统</h3>
-<p>这一部分中最严重的漏洞可让远程攻击者利用特制的文件通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -187,7 +187,7 @@
 </p>
 
 <h3 id="kernel-components">内核组件</h3>
-<p>这一部分中最严重的漏洞可让本地恶意应用通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让本地恶意应用在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -236,7 +236,7 @@
 </tbody></table>
 
 <h3 id="qualcomm-components">Qualcomm 组件</h3>
-<p>这一部分中最严重的漏洞可让邻近区域内的攻击者利用特制的文件通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让邻近区域内的攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -471,7 +471,7 @@
 </ul>
 <p><strong>2. 为何本公告有 2 个安全补丁程序级别?</strong></p>
 <p>
-本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
+本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中列出的所有问题并使用最新的安全补丁程序级别。
 </p>
 <ul>
 <li>如果设备使用的是 2018-07-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
@@ -552,7 +552,7 @@
 <strong>5. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers">Google Developers 网站</a>上针对 Pixel/ Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel/Nexus 公告)中?</strong>
diff --git a/zh-cn/security/bulletin/2018-08-01.html b/zh-cn/security/bulletin/2018-08-01.html
index 39eec1b..1058870 100644
--- a/zh-cn/security/bulletin/2018-08-01.html
+++ b/zh-cn/security/bulletin/2018-08-01.html
@@ -28,7 +28,7 @@
 Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 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="#mitigations">Android 和 Google Play 保护机制提供的缓解措施</a>部分,详细了解有助于提高 Android 平台安全性的 <a href="/security/enhancements/index.html">Android 安全平台防护功能</a>和 Google Play 保护机制。
@@ -43,11 +43,11 @@
 </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>
+<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-08-01-details">2018-08-01 安全补丁程序级别漏洞详情</h2>
 <p>
-我们在下面提供了 2018-08-01 补丁程序级别涵盖的每个安全漏洞的详细信息。漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 AOSP 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+我们在下面提供了 2018-08-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>
@@ -62,7 +62,7 @@
 
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -70,9 +70,7 @@
   <tr>
     <td>CVE-2018-9445</td>
     <td>
-    <a href="https://android.googlesource.com/platform/external/e2fsprogs/+/9a2d95e4ed9ec5ab76998654b1c2fba9cc139e50">A-80436257</a>
-   [<a href="https://android.googlesource.com/platform/system/vold/+/940a1ff70cfc5f2e4de83da9ad84cd9734faadf6">2</a>]
-    </td>
+    <a href="https://android.googlesource.com/platform/external/e2fsprogs/+/9a2d95e4ed9ec5ab76998654b1c2fba9cc139e50">A-80436257</a> [<a href="https://android.googlesource.com/platform/system/vold/+/940a1ff70cfc5f2e4de83da9ad84cd9734faadf6">2</a>]</td>
     <td>EoP</td>
     <td>高</td>
     <td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -80,11 +78,7 @@
   <tr>
     <td>CVE-2018-9438</td>
     <td>
-<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/b552ebf70913cc79085bcc4212235ea45e036d3b">A-78644887</a>
-[<a href="https://android.googlesource.com/platform/frameworks/base/+/e3854655e75d97552140d77cca5d20c121a17ef9">2</a>]
-[<a href="https://android.googlesource.com/platform/frameworks/opt/telephony/+/d1ce32b059bed774b41f11413c1d83a1bc412964">3</a>]
-[<a href="https://android.googlesource.com/platform/frameworks/base/+/97e1cd61d3040dd366ac9e25cdb6f134c7490846">4</a>]
-</td>
+<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/b552ebf70913cc79085bcc4212235ea45e036d3b">A-78644887</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/e3854655e75d97552140d77cca5d20c121a17ef9">2</a>] [<a href="https://android.googlesource.com/platform/frameworks/opt/telephony/+/d1ce32b059bed774b41f11413c1d83a1bc412964">3</a>] [<a href="https://android.googlesource.com/platform/frameworks/base/+/97e1cd61d3040dd366ac9e25cdb6f134c7490846">4</a>]</td>
     <td>DoS</td>
     <td>高</td>
     <td>8.1</td>
@@ -101,9 +95,7 @@
   <tr>
     <td>CVE-2018-9451</td>
     <td>
-<a href="https://android.googlesource.com/platform/frameworks/base/+/a409aa1214d6483efe129a4966f09aa4fdc097ad">A-79488511</a>
-[<a href="https://android.googlesource.com/platform/frameworks/base/+/1de25074adb5d9ed572d6a85e77d3df5ac3a7e9e">2</a>]
-</td>
+<a href="https://android.googlesource.com/platform/frameworks/base/+/a409aa1214d6483efe129a4966f09aa4fdc097ad">A-79488511</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/1de25074adb5d9ed572d6a85e77d3df5ac3a7e9e">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>
@@ -111,7 +103,7 @@
 </tbody></table>
 
 <h3 id="media-framework">媒体框架</h3>
-<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -122,7 +114,7 @@
 
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -130,9 +122,7 @@
   <tr>
     <td>CVE-2018-9427</td>
     <td>
-<a href="https://android.googlesource.com/platform/frameworks/av/+/08d392085c095e227c029f64644bc08ef5a544de">A-77486542</a>
-[<a href="https://android.googlesource.com/platform/frameworks/av/+/c9909e5a980f941a5b72477755e09fb4dc57c478">2</a>]
-</td>
+<a href="https://android.googlesource.com/platform/frameworks/av/+/08d392085c095e227c029f64644bc08ef5a544de">A-77486542</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/c9909e5a980f941a5b72477755e09fb4dc57c478">2</a>]</td>
     <td>RCE</td>
     <td>严重</td>
     <td>8.0、8.1</td>
@@ -156,7 +146,7 @@
 </tbody></table>
 
 <h3 id="system">系统</h3>
-<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -166,7 +156,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -228,9 +218,7 @@
   <tr>
     <td>CVE-2018-9448</td>
     <td>
-<a href="https://android.googlesource.com/platform/system/bt/+/13294c70a66347c9e5d05b9f92f8ceb6fe38d7f6">A-79944113</a>
-[<a href="https://android.googlesource.com/platform/system/bt/+/f1f1c3e00f8d1baad0215b057e6d894517eeaddb">2</a>]
-   </td>
+<a href="https://android.googlesource.com/platform/system/bt/+/13294c70a66347c9e5d05b9f92f8ceb6fe38d7f6">A-79944113</a> [<a href="https://android.googlesource.com/platform/system/bt/+/f1f1c3e00f8d1baad0215b057e6d894517eeaddb">2</a>]</td>
     <td>ID</td>
     <td>高</td>
     <td>8.0、8.1</td>
@@ -248,11 +236,11 @@
 
 <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 版本(如果适用)等详细信息。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+我们在下面提供了 2018-08-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>
+<p>这一部分中最严重的漏洞可让本地恶意应用在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -262,7 +250,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -296,15 +284,14 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
   </tr>
   <tr>
     <td>CVE-2018-5383</td>
-    <td>A-79421580<a href="#asterisk">*</a><br />
-        QC-CR#2209635</td>
+    <td>A-79421580<a href="#asterisk">*</a><br />QC-CR#2209635</td>
     <td>ID</td>
     <td>高</td>
     <td>蓝牙</td>
@@ -346,7 +333,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -515,14 +502,14 @@
 <li>如果安全补丁程序级别是 2018-08-01 或更新,则意味着已解决 2018-08-01 安全补丁程序级别涵盖的所有问题。</li>
 <li>如果安全补丁程序级别是 2018-08-05 或更新,则意味着已解决 2018-08-05 以及之前的所有安全补丁程序级别涵盖的所有问题。</li>
 </ul>
-<p>预装这些更新的设备制造商应将补丁程序字符串级别设为</p>
+<p>预装这些更新的设备制造商应将补丁程序字符串级别设为:</p>
 <ul>
  <li>[ro.build.version.security_patch]:[2018-08-01]</li>
  <li>[ro.build.version.security_patch]:[2018-08-05]</li>
 </ul>
 <p><strong>2. 为何本公告有 2 个安全补丁程序级别?</strong></p>
 <p>
-本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
+本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中列出的所有问题并使用最新的安全补丁程序级别。
 </p>
 <ul>
 <li>如果设备使用的是 2018-08-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
@@ -566,17 +553,17 @@
   </tr>
 </tbody></table>
 <p>
-<strong>4.“参考内容”列中的条目表示什么意思?<em></em></strong>
+<strong>4.“参考编号”列中的条目表示什么意思?<em></em></strong>
 </p>
 <p>
-在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
+在漏洞详情表内,“参考编号”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
 </p>
 <table>
   <colgroup><col width="25%" />
   <col width="75%" />
   </colgroup><tbody><tr>
    <th>前缀</th>
-   <th>参考内容</th>
+   <th>参考编号</th>
   </tr>
   <tr>
    <td>A-</td>
@@ -600,10 +587,10 @@
   </tr>
 </tbody></table>
 <p id="asterisk">
-<strong>5. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+<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 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel/Nexus 公告)中?</strong>
diff --git a/zh-cn/security/bulletin/2018-09-01.html b/zh-cn/security/bulletin/2018-09-01.html
index 95faa0d..b1cc8ea 100644
--- a/zh-cn/security/bulletin/2018-09-01.html
+++ b/zh-cn/security/bulletin/2018-09-01.html
@@ -27,7 +27,7 @@
 <p>
 Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 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="#mitigations">Android 和 Google Play 保护机制提供的缓解措施</a>部分,详细了解有助于提高 Android 平台安全性的 <a href="/security/enhancements/">Android 安全平台防护功能</a>和 Google Play 保护机制。
@@ -42,7 +42,7 @@
 </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>
+<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-09-01-details">2018-09-01 安全补丁程序级别漏洞详情</h2>
 <p>
@@ -82,7 +82,7 @@
 </tbody></table>
 
 <h3 id="framework">框架</h3>
-<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件通过非特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件在非特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -628,14 +628,14 @@
 <li>如果安全补丁程序级别是 2018-09-01 或更新,则意味着已解决 2018-09-01 安全补丁程序级别涵盖的所有问题。</li>
 <li>如果安全补丁程序级别是 2018-09-05 或更新,则意味着已解决 2018-09-05 以及之前的所有安全补丁程序级别涵盖的所有问题。</li>
 </ul>
-<p>预装这些更新的设备制造商应将补丁程序字符串级别设为</p>
+<p>预装这些更新的设备制造商应将补丁程序字符串级别设为:</p>
 <ul>
  <li>[ro.build.version.security_patch]:[2018-09-01]</li>
  <li>[ro.build.version.security_patch]:[2018-09-05]</li>
 </ul>
 <p><strong>2. 为何本公告有 2 个安全补丁程序级别?</strong></p>
 <p>
-本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
+本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中列出的所有问题并使用最新的安全补丁程序级别。
 </p>
 <ul>
 <li>如果设备使用的是 2018-09-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
@@ -716,7 +716,7 @@
 <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 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers" class="external">Google Developers 网站</a>上针对 Pixel/ Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel/Nexus 公告)中?</strong>
diff --git a/zh-cn/security/bulletin/2018-10-01.html b/zh-cn/security/bulletin/2018-10-01.html
index 0f97e60..5a51b08 100644
--- a/zh-cn/security/bulletin/2018-10-01.html
+++ b/zh-cn/security/bulletin/2018-10-01.html
@@ -27,7 +27,7 @@
 <p>
 Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 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="#mitigations">Android 和 Google Play 保护机制提供的缓解措施</a>部分,详细了解有助于提高 Android 平台安全性的 <a href="/security/enhancements/">Android 安全平台防护功能</a>和 Google Play 保护机制。
@@ -42,15 +42,15 @@
 </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>
+<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 后面的数字链接到更多参考内容。
+我们在下面提供了 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>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -60,15 +60,14 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</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><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>
@@ -89,17 +88,14 @@
   </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><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><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>
@@ -107,7 +103,7 @@
 </tbody></table>
 
 <h3 id="media-framework">媒体框架</h3>
-<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让远程攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -117,7 +113,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -160,7 +156,7 @@
 </tbody></table>
 
 <h3 id="system">系统</h3>
-<p>这一部分中最严重的漏洞可让邻近区域内的攻击者通过特权进程执行任意代码。</p>
+<p>这一部分中最严重的漏洞可让邻近区域内的攻击者在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -170,7 +166,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -205,18 +201,14 @@
   </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><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><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>
@@ -274,11 +266,11 @@
 
 <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 后面的数字链接到更多参考内容。
+我们在下面提供了 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>
+<p>这一部分中最严重的漏洞可让本地恶意应用在特权进程环境中执行任意代码。</p>
 
 <table>
   <colgroup><col width="21%" />
@@ -288,7 +280,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -331,7 +323,7 @@
 </ul>
 <p><strong>2. 为何本公告有 2 个安全补丁程序级别?</strong></p>
 <p>
-本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
+本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中列出的所有问题并使用最新的安全补丁程序级别。
 </p>
 <ul>
 <li>如果设备使用的是 2018-10-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
@@ -375,17 +367,17 @@
   </tr>
 </tbody></table>
 <p>
-<strong>4.“参考内容”列中的条目表示什么意思?<em></em></strong>
+<strong>4.“参考编号”列中的条目表示什么意思?<em></em></strong>
 </p>
 <p>
-在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
+在漏洞详情表内,“参考编号”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
 </p>
 <table>
   <colgroup><col width="25%" />
   <col width="75%" />
   </colgroup><tbody><tr>
    <th>前缀</th>
-   <th>参考内容</th>
+   <th>参考编号</th>
   </tr>
   <tr>
    <td>A-</td>
@@ -409,10 +401,10 @@
   </tr>
 </tbody></table>
 <p id="asterisk">
-<strong>5. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+<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 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel/Nexus 公告)中?</strong>
diff --git a/zh-cn/security/bulletin/2018-11-01.html b/zh-cn/security/bulletin/2018-11-01.html
index 876f504..7778f5f 100644
--- a/zh-cn/security/bulletin/2018-11-01.html
+++ b/zh-cn/security/bulletin/2018-11-01.html
@@ -30,7 +30,7 @@
 这一部分中最严重的漏洞可让邻近区域内的攻击者利用蓄意创建的文件在特权进程环境中执行任意代码。<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 保护机制。
+尚未有人向我们举报过有用户主动利用或滥用这些新报告的问题。请参阅 <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-11-01">2018 年 11 月的 Pixel / Nexus 安全公告</a>。
@@ -46,7 +46,7 @@
 </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>
+<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-11-01-details">2018-11-01 安全补丁程序级别漏洞详情</h2>
 <p>
@@ -501,7 +501,7 @@
 <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>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel/Nexus 公告)中?</strong>
diff --git a/zh-cn/security/bulletin/2018-12-01.html b/zh-cn/security/bulletin/2018-12-01.html
index 8fccebb..d552a23 100644
--- a/zh-cn/security/bulletin/2018-12-01.html
+++ b/zh-cn/security/bulletin/2018-12-01.html
@@ -19,17 +19,17 @@
       See the License for the specific language governing permissions and
       limitations under the License.
   -->
-<p><em>发布时间:2018 年 12 月 3 日</em></p>
+<p><em>发布时间:2018 年 12 月 3 日 | 更新时间:2018 年 12 月 5 日</em></p>
 
 <p>
 本 Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。安全补丁程序级别为 2018-12-05 或更新的 Android 系统都已解决本公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705" class="external">查看并更新 Android 版本</a>。
 </p>
-<p>我们会在接下来的 48 小时内将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中。届时,我们将会修订本公告,将相关 AOSP 链接增补到本文中。</p>
+<p>Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 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="#mitigations">Android 和 Google Play 保护机制提供的缓解措施</a>部分,详细了解有助于提高 Android 平台安全性的 <a href="/security/enhancements/">Android 安全平台防护功能</a>和 Google Play 保护机制。
+尚未有人向我们举报过有用户主动利用或滥用这些新报告的问题。请参阅 <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-12-01">2018 年 12 月的 Pixel / Nexus 安全公告</a>。
@@ -42,7 +42,7 @@
 </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>
+<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-12-01-details">2018-12-01 安全补丁程序级别漏洞详情</h2>
 <p>
@@ -68,14 +68,14 @@
   </tr>
   <tr>
     <td>CVE-2018-9547</td>
-    <td>A-114223584</td>
+    <td><a href="https://android.googlesource.com/platform/frameworks/native/+/e6eb42cb2e57747e52e488d54da314bc6eabb546" class="external">A-114223584</a></td>
     <td>EoP</td>
     <td>高</td>
-    <td>8.1, 9</td>
+    <td>8.1、9</td>
   </tr>
   <tr>
     <td>CVE-2018-9548</td>
-    <td>A-112555574</td>
+    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/c97efaa05124e020d7cc8c6e08be9c3b55ac4ea7" class="external">A-112555574</a></td>
     <td>ID</td>
     <td>高</td>
     <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
@@ -100,49 +100,49 @@
   </tr>
   <tr>
     <td>CVE-2018-9549</td>
-    <td>A-112160868</td>
+    <td><a href="https://android.googlesource.com/platform/external/aac/+/6f6d220a3255e7cbd31bcd1220ffb83af0a2779a" class="external">A-112160868</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-9550</td>
-    <td>A-112660981</td>
+    <td><a href="https://android.googlesource.com/platform/external/aac/+/ce97e7d55e1f69683b5bc8f19cc8da8c85bc2cd4" class="external">A-112660981</a></td>
     <td>RCE</td>
     <td>严重</td>
     <td>9</td>
   </tr>
   <tr>
     <td>CVE-2018-9551</td>
-    <td>A-112891548</td>
+    <td><a href="https://android.googlesource.com/platform/external/aac/+/0e5db9fee912d367a572b88f0d86f9a33006fa29" class="external">A-112891548</a></td>
     <td>RCE</td>
     <td>严重</td>
     <td>9</td>
   </tr>
   <tr>
     <td>CVE-2018-9552</td>
-    <td>A-113260892</td>
+    <td><a href="https://android.googlesource.com/platform/external/libhevc/+/d15da6f960dd2d5b77faced4e799f8bf53785d9c" class="external">A-113260892</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-9553</td>
-    <td>A-116615297</td>
+    <td><a href="https://android.googlesource.com/platform/external/libvpx/+/c4c92b2c6ed72a78ea430c3cdce564ec11866a24" class="external">A-116615297</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-9538</td>
-    <td>A-112181526</td>
+    <td><a href="https://android.googlesource.com/platform/external/v4l2_codec2/+/0a7d252adb774338c2c69a17651aceca3aec1b23" class="external">A-112181526</a></td>
     <td>EoP</td>
     <td>高</td>
-    <td>8.1, 9</td>
+    <td>8.1、9</td>
   </tr>
   <tr>
     <td>CVE-2018-9554</td>
-    <td>A-114770654</td>
+    <td><a href="https://android.googlesource.com/platform/frameworks/av/+/16f9b39c69626093ae9225b458739707c9a3b4e7" class="external">A-114770654</a></td>
     <td>ID</td>
     <td>高</td>
     <td>7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -167,56 +167,56 @@
   </tr>
   <tr>
     <td>CVE-2018-9555</td>
-    <td>A-112321180</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/02fc52878d8dba16b860fbdf415b6e4425922b2c" class="external">A-112321180</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-9556</td>
-    <td>A-113118184</td>
+    <td><a href="https://android.googlesource.com/platform/system/update_engine/+/840a7eae5a6d8250490e8ea430193531f0c4ccd6" class="external">A-113118184</a></td>
     <td>RCE</td>
     <td>严重</td>
     <td>9</td>
   </tr>
   <tr>
     <td>CVE-2018-9557</td>
-    <td>A-35385357</td>
+    <td>A-35385357<a href="#asterisk">*</a></td>
     <td>EoP</td>
     <td>高</td>
     <td>7.0、7.1.1、7.1.2</td>
   </tr>
   <tr>
     <td>CVE-2018-9558</td>
-    <td>A-112161557</td>
+    <td><a href="https://android.googlesource.com/platform/system/nfc/+/ce7fcb95d5111ad8c554e7ec8ff02f9b40196cdc" class="external">A-112161557</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-9559</td>
-    <td>A-112731440</td>
+    <td><a href="https://android.googlesource.com/platform/system/vold/+/c2e37da22aadcdb4a5b7f61a61f824ab8e9b8af9" class="external">A-112731440</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-9560</td>
-    <td>A-79946737</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/9009da96e00434501d9398bbfbc636902c757632" class="external">A-79946737</a></td>
     <td>EoP</td>
     <td>高</td>
     <td>9</td>
   </tr>
   <tr>
     <td>CVE-2018-9562</td>
-    <td>A-113164621</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/1bb14c41a72978c6075c5753a8301ddcbb10d409" class="external">A-113164621</a></td>
     <td>ID</td>
     <td>高</td>
     <td>9</td>
   </tr>
   <tr>
     <td>CVE-2018-9566</td>
-    <td>A-74249842</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/314336a22d781f54ed7394645a50f74d6743267d" class="external">A-74249842</a></td>
     <td>ID</td>
     <td>高</td>
     <td>7.0、7.1.1、7.1.2、8.0、8.1、9</td>
@@ -226,7 +226,7 @@
 <h2 id="2018-12-05-details">2018-12-05 安全补丁程序级别漏洞详情</h2>
 
 <p>
-我们在下面提供了 2018-12-05 补丁程序级别涵盖的每个安全漏洞的详细信息。漏洞列在所影响的组件下,内容包括 CVE、相关参考编号、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>、组件(如果适用)和已更新的 AOSP 版本(如果适用)等详细信息。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。
+我们在下面提供了 2018-12-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="system-05">系统</h3>
@@ -248,7 +248,7 @@
   </tr>
   <tr>
     <td>CVE-2018-9565</td>
-    <td>A-16680558</td>
+    <td>A-16680558<a href="#asterisk">*</a></td>
     <td>ID</td>
     <td>高</td>
     <td>OMA-DM</td>
@@ -274,7 +274,7 @@
   </tr>
   <tr>
     <td>CVE-2018-9567</td>
-    <td>A-65543936</td>
+    <td>A-65543936<a href="#asterisk">*</a></td>
     <td>EoP</td>
     <td>高</td>
     <td>引导加载程序</td>
@@ -337,7 +337,7 @@
     <td>CVE-2018-11960</td>
     <td>A-114042002<br />
 <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=18ce15db603e19cfac9a2f4076f255e879100495">QC-CR#2264832</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>HWEngines</td>
   </tr>
@@ -345,7 +345,7 @@
     <td>CVE-2018-11961</td>
     <td>A-114040881<br />
 <a href="https://source.codeaurora.org/quic/le/platform/hardware/qcom/gps/commit/?id=c57ee0a5d3261ab20c35b451d1b3ae2b02a21591">QC-CR#2261813</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>GPS_AP_LINUX</td>
   </tr>
@@ -353,7 +353,7 @@
     <td>CVE-2018-11963</td>
     <td>A-114041685<br />
 <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=c9ac3476a91c384a3f2760fabaecef0ad8698d7b">QC-CR#2220770</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>汽车多媒体</td>
   </tr>
@@ -379,203 +379,203 @@
   <tr>
     <td>CVE-2017-8248</td>
     <td>A-78135902<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>严重</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-11004</td>
     <td>A-66913713<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>严重</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18141</td>
     <td>A-67712316<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>严重</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-5913</td>
     <td>A-79419833<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>严重</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-11279</td>
     <td>A-109678200<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>严重</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18319</td>
     <td>A-78284753<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18321</td>
     <td>A-78283451<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18322</td>
     <td>A-78285196<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18323</td>
     <td>A-78284194<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
-    <td>CVE-2017-18324 </td>
+    <td>CVE-2017-18324</td>
     <td>A-78284517<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18327</td>
     <td>A-78240177<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18331</td>
     <td>A-78239686<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18332</td>
     <td>A-78284545<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18160</td>
     <td>A-109660689<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18326</td>
     <td>A-78240324<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-8276</td>
     <td>A-68141338<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18328</td>
     <td>A-78286046<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18329</td>
     <td>A-73539037<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18330</td>
     <td>A-73539235<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-3595</td>
     <td>A-71501115<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-18320</td>
     <td>A-33757308<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-11999</td>
     <td>A-74236942<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-5867</td>
     <td>A-77485184<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-5868</td>
     <td>A-77484529<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-5869</td>
     <td>A-33385206<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2017-5754</td>
     <td>A-79419639<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-5915</td>
     <td>A-79420511<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-11267</td>
     <td>A-109678338<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
   <tr>
     <td>CVE-2018-11922</td>
     <td>A-112279564<a href="#asterisk">*</a></td>
-    <td>无</td>
+    <td>N/A</td>
     <td>高</td>
     <td>闭源组件</td>
   </tr>
@@ -595,16 +595,16 @@
  <li>[ro.build.version.security_patch]:[2018-12-01]</li>
  <li>[ro.build.version.security_patch]:[2018-12-05]</li>
 </ul>
-<p><strong>2.为何本公告有 2 个安全补丁程序级别?</strong></p>
+<p><strong>2. 为何本公告有 2 个安全补丁程序级别?</strong></p>
 <p>
-本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
+本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中列出的所有问题并使用最新的安全补丁程序级别。
 </p>
 <ul>
 <li>如果设备使用的是 2018-12-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
 <li>如果设备使用的是 2018-12-05 或更新的安全补丁程序级别,则必须包含本安全公告(以及之前的安全公告)中的所有适用补丁程序。</li>
 </ul>
 <p>
-我们建议合作伙伴将要解决的全部问题的修复方案打包到一个更新中。
+我们建议合作伙伴将要解决的全部问题的修复程序打包到一个更新中。
 </p>
 <p id="type">
 <strong>3.“类型”列中的条目表示什么意思?<em></em></strong>
@@ -678,7 +678,7 @@
 <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>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel/Nexus 公告)中?</strong>
@@ -703,6 +703,11 @@
     <td>2018 年 12 月 3 日</td>
     <td>发布了本公告</td>
   </tr>
+  <tr>
+    <td>1.1</td>
+    <td>2018 年 12 月 5 日</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 9c252aa..e1c2648 100644
--- a/zh-cn/security/bulletin/2018.html
+++ b/zh-cn/security/bulletin/2018.html
@@ -33,6 +33,32 @@
     <th>发布日期</th>
     <th>安全补丁程序级别</th>
  </tr>
+<tr>
+    <td><a href="/security/bulletin/2018-12-01.html">2018 年 12 月</a></td>
+    <td>
+     <a href="/security/bulletin/2018-12-01.html">English</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=zh-tw">中文 (台灣)</a>
+    </td>
+    <td>2018 年 12 月 3 日</td>
+    <td>2018-12-01<br />2018-12-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2018-11-01.html">2018 年 11 月</a></td>
+    <td>
+     <a href="/security/bulletin/2018-11-01.html">English</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=zh-tw">中文 (台灣)</a>
+    </td>
+    <td>2018 年 11 月 5 日</td>
+    <td>2018-11-01<br />2018-11-05</td>
+ </tr>
  <tr>
     <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
     <td>
diff --git a/zh-cn/security/bulletin/2019-01-01.html b/zh-cn/security/bulletin/2019-01-01.html
new file mode 100644
index 0000000..f759960
--- /dev/null
+++ b/zh-cn/security/bulletin/2019-01-01.html
@@ -0,0 +1,501 @@
+<html devsite><head>
+    <title>Android 安全公告 - 2019 年 1 月</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>发布时间:2019 年 1 月 7 日 | 更新时间:2019 年 1 月 7 日</em></p>
+
+<p>
+本 Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。安全补丁程序级别为 2019-01-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/2019-01-01">2019 年 1 月的 Pixel 更新公告</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="2019-01-01-details">2019-01-01 安全补丁程序级别漏洞详情</h2>
+<p>
+我们在下面提供了 2019-01-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-9582</td>
+    <td><a href="https://android.googlesource.com/platform/packages/apps/PackageInstaller/+/ab39f6cb7afc48584da3c59d8e2a5e1ef121aafb" class="external">A-112031362</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>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-2018-9583</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/94d718eb61cbb1e6fd08288039d7e62913735c6c" class="external">A-112860487</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-9584</td>
+    <td><a href="https://android.googlesource.com/platform/system/nfc/+/5f0f0cc6a10f710dea7e1ddd4ba19acb877a7081" class="external">A-114047681</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-9585</td>
+    <td><a href="https://android.googlesource.com/platform/system/nfc/+/71764b791f262491e3f628c14ce3949863dd6058" class="external">A-117554809</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-9586</td>
+    <td><a href="https://android.googlesource.com/platform/packages/apps/ManagedProvisioning/+/fe4c71a7a3a8a2184b3096203aa9240e01af621e" class="external">A-116754444</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-9587</td>
+    <td><a href="https://android.googlesource.com/platform/packages/apps/Contacts/+/66abad90093df5231f24654a64cf90d9b70ab228" class="external">A-113597344</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-9588</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/bf9ff0c5215861ab673e211cd06e009f3157aab2" class="external">A-111450156</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-9589</td>
+    <td><a href="https://android.googlesource.com/platform/external/wpa_supplicant_8/+/38af82c5ca615f56febcebde714c7cba653fd5ec" class="external">A-111893132</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-9590</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/297598898683b81e921474e6e74c0ddaedbb8bb5" class="external">A-115900043</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-9591</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/e1685cfa533db4155a447c405d7065cc17af2ae9" class="external">A-116108738</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-9592</td>
+    <td><a href="https://android.googlesource.com/platform/system/bt/+/8679463ade0ee029ef826ed4fb7a847e2a981375" class="external">A-116319076</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-9593</td>
+    <td><a href="https://android.googlesource.com/platform/system/nfc/+/8bc53213110fed8360d3e212dd61fbc0218e0b1e" class="external">A-116722267</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-9594</td>
+    <td><a href="https://android.googlesource.com/platform/system/nfc/+/494cd888eb2c5cfda05584dd598815c9268ff3c2" class="external">A-116791157</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>
+
+<h2 id="2019-01-05-details">2019-01-05 安全补丁程序级别漏洞详情</h2>
+
+<p>
+我们在下面提供了 2019-01-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-10876</td>
+    <td>A-116406122<br />
+        <a href="http://patchwork.ozlabs.org/patch/929239/">上游内核</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>ext4 文件系统</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-10880</td>
+    <td>A-116406509<br />
+        <a href="http://patchwork.ozlabs.org/patch/930639/">上游内核</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>ext4 文件系统</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-10882</td>
+    <td>A-116406626<br />
+        <a href="https://bugzilla.kernel.org/show_bug.cgi?id=200069">上游内核</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>ext4 文件系统</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-13405</td>
+    <td>A-113452403<br />
+        <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0fa3ecd87848c9c93c2c828ef4c3a8ca36ce46c7">上游内核</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>文件系统</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-18281</td>
+    <td>A-118836219<br />
+        <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=eb66ae030829605d61fbef1909ce310e29f78821">上游内核</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>TLB</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-17182</td>
+    <td>A-117280327<br />
+        <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7a9cdebdcc17e426fb5287e4a82db1dfe86339b2">上游内核</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>内存管理器</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-10877</td>
+    <td>A-116406625<br />
+        <a href="https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2018-10877">上游内核</a></td>
+    <td>ID</td>
+    <td>高</td>
+    <td>ext4 文件系统</td>
+  </tr>
+</tbody></table>
+
+<h3 id="nvidia-components">NVIDIA 组件</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-6241</td>
+    <td>A-62540032<a href="#asterisk">*</a></td>
+    <td>EoP</td>
+    <td>高</td>
+    <td>Dragon BSP</td>
+  </tr>
+</tbody></table>
+
+<h3 id="qualcomm-components">Qualcomm 组件</h3>
+
+<p>以下漏洞会影响 Qualcomm 组件,相应的 Qualcomm 安全公告或安全提醒中对这些漏洞进行了详细说明。这些漏洞的严重程度评估是由 Qualcomm 直接提供的。</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-11962</td>
+    <td>A-117118292<br />
+        <a href="https://source.codeaurora.org/quic/la/platform/frameworks/av/commit?id=217604d69ce4dcf7c6433a9eafdfceefe25e8fd3">
+QC-CR#2267916</a></td>
+    <td>N/A</td>
+    <td>高</td>
+    <td>音频</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-12014</td>
+    <td>A-117118062<br />
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=545e03e8420164506457367959ccf01bd055e1aa">
+QC-CR#2278688</a></td>
+    <td>N/A</td>
+    <td>高</td>
+    <td>数据 HLOS - LNX</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-13889</td>
+    <td>A-117118677<br />
+        <a href="https://source.codeaurora.org/quic/le/platform/hardware/qcom/gps/commit/?id=03885c6896a88d993dd49c64ada02bec52af08a1">
+QC-CR#2288358</a></td>
+    <td>N/A</td>
+    <td>高</td>
+    <td>GPS</td>
+  </tr>
+</tbody></table>
+
+<h3 id="qualcomm-closed-source-components">Qualcomm 闭源组件</h3>
+<p>以下漏洞会影响 Qualcomm 组件,相应的 Qualcomm 安全公告或安全提醒中对这些漏洞进行了详细说明。这些漏洞的严重程度评估是由 Qualcomm 直接提供的。
+</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-11847</td>
+    <td>A-111092812<a href="#asterisk">*</a></td>
+    <td>N/A</td>
+    <td>严重</td>
+    <td>闭源组件</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-11888</td>
+    <td>A-111093241<a href="#asterisk">*</a></td>
+    <td>N/A</td>
+    <td>高</td>
+    <td>闭源组件</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-13888</td>
+    <td>A-117119136<a href="#asterisk">*</a></td>
+    <td>N/A</td>
+    <td>高</td>
+    <td>闭源组件</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>如果安全补丁程序级别是 2019-01-01 或更新,则意味着已解决 2019-01-01 安全补丁程序级别涵盖的所有问题。</li>
+<li>如果安全补丁程序级别是 2019-01-05 或更新,则意味着已解决 2019-01-05 以及之前的所有安全补丁程序级别涵盖的所有问题。</li>
+</ul>
+<p>预装这些更新的设备制造商应将补丁程序字符串级别设为:</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2019-01-01]</li>
+ <li>[ro.build.version.security_patch]:[2019-01-05]</li>
+</ul>
+<p><strong>2. 为何本公告有 2 个安全补丁程序级别?</strong></p>
+<p>
+本公告之所以有 2 个安全补丁程序级别,是为了让 Android 合作伙伴能够灵活地、更快速地修复在各种 Android 设备上类似的一系列漏洞。我们建议 Android 合作伙伴修复本公告中的所有问题并使用最新的安全补丁程序级别。
+</p>
+<ul>
+<li>如果设备使用的是 2019-01-01 这一安全补丁程序级别,则必须包含该安全补丁程序级别涵盖的所有问题以及之前的安全公告中报告的所有问题的修复程序。</li>
+<li>如果设备使用的是 2019-01-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>上针对 Pixel 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
+</p>
+<p>
+<strong>6. 为什么要将安全漏洞拆分到本公告和设备 / 合作伙伴安全公告(如 Pixel 公告)中?</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</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>2019 年 1 月 7 日</td>
+    <td>发布了本公告</td>
+  </tr>
+  <tr>
+    <td>1.1</td>
+    <td>2019 年 1 月 7 日</td>
+    <td>在本公告中添加了 AOSP 链接。</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/2019.html b/zh-cn/security/bulletin/2019.html
new file mode 100644
index 0000000..25f4843
--- /dev/null
+++ b/zh-cn/security/bulletin/2019.html
@@ -0,0 +1,210 @@
+<html devsite><head>
+    <title>2019 年 Android 安全公告</title>
+    <meta name="project_path" value="/_project.yaml"/>
+    <meta name="book_path" value="/_book.yaml"/>
+  </head>
+  <body>
+  <!--
+      Copyright 2019 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>本页中列出了我们在 2019 年发布的所有 Android 安全公告。如需所有公告的列表,请访问 <a href="/security/bulletin/index.html">Android 安全公告</a>首页。</p>
+
+<table>
+  <colgroup><col width="15%" />
+  <col width="49%" />
+  <col width="17%" />
+  <col width="19%" />
+ </colgroup><tbody><tr>
+    <th>公告</th>
+    <th>语言</th>
+    <th>发布日期</th>
+    <th>安全补丁程序级别</th>
+ </tr>
+ <tr><td><!--
+<tr>
+    <td><a href="/security/bulletin/2019-12-01.html">December 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-12-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-12-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-12-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-12-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-12-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-12-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>December 2, 2019</td>
+    <td>2019-12-01<br>
+        2019-12-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2019-11-01.html">November 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-11-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-11-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-11-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-11-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-11-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-11-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>November 4, 2019</td>
+    <td>2019-11-01<br>
+        2019-11-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2019-10-01.html">October 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>October 7, 2019</td>
+    <td>2019-10-01<br>
+        2019-10-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2019-09-01.html">September 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-09-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-09-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-09-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-09-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-09-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-09-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>September 2, 2019</td>
+    <td>2019-09-01<br>
+        2019-09-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2019-08-01.html">August 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-08-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-08-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-08-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-08-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-08-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-08-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>August 5, 2019</td>
+    <td>2019-08-01<br>
+        2019-08-05</td>
+ </tr>
+
+ <tr>
+    <td><a href="/security/bulletin/2019-07-01.html">July 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-07-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-07-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-07-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-07-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-07-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-07-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>July 1, 2019</td>
+    <td>2019-07-01<br>
+        2019-07-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2019-06-01.html">June 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-06-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-06-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-06-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-06-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-06-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-06-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>June 3, 2019</td>
+    <td>2019-06-01<br>
+        2019-06-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2019-05-01.html">May 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-05-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-05-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-05-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-05-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-05-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-05-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>May 6, 2019</td>
+    <td>2019-05-01<br>
+        2019-05-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2019-04-01.html">April 2019</a></td>
+    <td>
+     <a href="/security/bulletin/2019-04-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-04-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-04-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-04-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-04-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-04-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>April 1, 2019</td>
+    <td>2019-04-01<br>
+        2019-04-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/2019-03-01.html">March 2019</a></td>
+   <td>
+     <a href="/security/bulletin/2019-03-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-03-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-03-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-03-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-03-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-03-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>March 4, 2019</td>
+   <td>2019-03-01<br>
+       2019-03-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/2019-02-01.html">February 2019</a></td>
+   <td>
+     <a href="/security/bulletin/2019-02-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-02-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-02-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-02-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-02-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-02-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>February 4, 2019</td>
+   <td>2019-02-01<br>
+       2019-02-05</td>
+ </tr>
+-->
+ </td></tr><tr>
+   <td><a href="/security/bulletin/2019-01-01.html">2019 年 1 月</a></td>
+   <td>即将发布<!--
+     <a href="/security/bulletin/2019-01-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/2019-01-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/2019-01-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/2019-01-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/2019-01-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/2019-01-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    -->
+   </td>
+   <td>2019 年 1 月 7 日</td>
+   <td>2019-01-01<br />
+       2019-01-05</td>
+ </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/index.html b/zh-cn/security/bulletin/index.html
index 1e56566..139c0a0 100644
--- a/zh-cn/security/bulletin/index.html
+++ b/zh-cn/security/bulletin/index.html
@@ -29,17 +29,13 @@
   <li><a href="https://security.samsungmobile.com/securityUpdate.smsb">三星</a></li>
 </ul>
 
-<h3 id="notification">通知</h3>
-<p>要在新的 Android 公告发布时收到通知,请加入 <a href="https://groups.google.com/forum/#!forum/android-security-updates">Android 安全更新网上论坛</a>,并调整您的电子邮件递送偏好设置以接收所有更新。
-</p>
-
 <h3 id="sources">来源</h3>
 
 <p>公告中列出的修复程序来自各种不同的来源:Android 开源项目 (AOSP)、上游 Linux 内核,以及系统芯片 (SOC) 制造商。面向设备制造商的说明:</p>
 <ul>
   <li>Android 平台修复程序会在安全公告发布后的 24 到 48 小时内合并到 AOSP 中,您可以直接从 AOSP 获取这些修复程序。</li>
   <li>发布的公告中会提供直接指向上游 Linux 内核修复程序的链接,您可以通过这些链接获取相应的修复程序。</li>
-  <li>您可以直接从 SOC 制造商处获取它们提供的修复程序。</li>
+  <li>由 SOC 制造商提供的修正程序可直接从制造商处获取。</li>
 </ul>
 <h3 id="bulletins">公告</h3>
 
@@ -54,6 +50,31 @@
     <th>发布日期</th>
     <th>安全补丁程序级别</th>
  </tr>
+<tr>
+    <td><a href="/security/bulletin/2018-12-01.html">2018 年 12 月</a></td>
+    <td>
+     <a href="/security/bulletin/2018-12-01.html">English</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/2018-12-01.html?hl=zh-tw">中文 (台灣)</a>
+    </td><td>2018 年 12 月 3 日</td>
+    <td>2018-12-01<br />2018-12-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/2018-11-01.html">2018 年 11 月</a></td>
+    <td>
+     <a href="/security/bulletin/2018-11-01.html">English</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/2018-11-01.html?hl=zh-tw">中文 (台灣)</a>
+    </td>
+    <td>2018 年 11 月 5 日</td>
+    <td>2018-11-01<br />2018-11-05</td>
+ </tr>
  <tr>
     <td><a href="/security/bulletin/2018-10-01.html">2018 年 10 月</a></td>
     <td>
diff --git a/zh-cn/security/bulletin/pixel/2018-01-01.html b/zh-cn/security/bulletin/pixel/2018-01-01.html
index c995031..09aeb17 100644
--- a/zh-cn/security/bulletin/pixel/2018-01-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-01-01.html
@@ -25,12 +25,12 @@
 本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-01-05 或更新,则意味着已解决本公告以及 <a href="/security/bulletin/2018-01-01">2018 年 1 月的 Android 安全公告</a>中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看和更新 Android 版本</a>。
 </p>
 <p>
-所有受支持的 Google 设备都将会收到 2018-01-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-01-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上找到 Google 设备固件映像。
 </p>
-<h2 id="announcements">公告</h2>
+<h2 id="announcements">通告</h2>
 <p>
 除了 <a href="/security/bulletin/2018-01-01">2018 年 1 月的 Android 安全公告</a>中所述的安全漏洞外,Pixel 和 Nexus 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。
 </p>
@@ -56,8 +56,7 @@
   </tr>
   <tr>
     <td>CVE-2017-0846</td>
-    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/93d77b07c34077b6c403c459b7bb75933446a502">A-64934810</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/395e162a0bf21c7e67923b9ae5fc9aded2d128a7">2</a>]
-    </td>
+    <td><a href="https://android.googlesource.com/platform/frameworks/base/+/93d77b07c34077b6c403c459b7bb75933446a502">A-64934810</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/395e162a0bf21c7e67923b9ae5fc9aded2d128a7">2</a>]</td>
     <td>ID</td>
     <td>中</td>
     <td>5.1.1、6.0、6.0.1、7.0、7.1.1、7.1.2、8.0</td>
@@ -704,13 +703,13 @@
 <strong>4. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
 </p>
 <p>
-要在 Android 设备上声明最新的安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
+要声明 Android 设备的最新安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
 </p>
 <h2 id="versions">版本</h2>
 <table>
diff --git a/zh-cn/security/bulletin/pixel/2018-02-01.html b/zh-cn/security/bulletin/pixel/2018-02-01.html
index db890ab..01571e1 100644
--- a/zh-cn/security/bulletin/pixel/2018-02-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-02-01.html
@@ -23,14 +23,14 @@
 <p><em>发布时间:2018 年 2 月 5 日 | 更新时间:2018 年 4 月 30 日</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-02-05 或更新,则意味着已解决本公告以及 <a href="/security/bulletin/2018-02-01">2018 年 2 月的 Android 安全公告</a>中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。</p>
+本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-02-05 或更新,则意味着已解决本公告以及 <a href="/security/bulletin/2018-02-01">2018 年 2 月的 Android 安全公告</a>中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看和更新 Android 版本</a>。</p>
 <p>
-所有受支持的 Google 设备都将会收到 2018-02-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-02-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上找到 Google 设备固件映像。
 </p>
-<h2 id="announcements">公告</h2>
+<h2 id="announcements">通告</h2>
 <p>
 除了 <a href="/security/bulletin/2018-02-01">2018 年 2 月的 Android 安全公告</a>中所述的安全漏洞外,Pixel 和 Nexus 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。</p>
 
@@ -419,7 +419,7 @@
   </tr>
   <tr>
    <td>A-69797895</td>
-   <td>移动数据网络</td>
+   <td>移动数据</td>
    <td>针对 Telus 用户改进了在某些网络环境中的移动数据网络性能。</td>
    <td>Pixel 2</td>
   </tr>
@@ -520,13 +520,13 @@
 <strong>4. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
 </p>
 <p>
-要在 Android 设备上声明最新的安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
+要声明 Android 设备的最新安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
 </p>
 <h2 id="versions">版本</h2>
 <table>
diff --git a/zh-cn/security/bulletin/pixel/2018-03-01.html b/zh-cn/security/bulletin/pixel/2018-03-01.html
index 90eb3e0..1154f0b 100644
--- a/zh-cn/security/bulletin/pixel/2018-03-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-03-01.html
@@ -23,17 +23,16 @@
 <p><em>发布时间:2018 年 3 月 5 日 | 更新时间:2018 年 3 月 7 日</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-03-05 或更新,则意味着已解决本公告以及 <a href="/security/bulletin/2018-03-01">2018 年 3 月的 Android 安全公告</a>中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看和更新 Android 版本</a>。</p>
+本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-03-05 或更新,则意味着已解决本公告以及 <a href="/security/bulletin/2018-03-01">2018 年 3 月的 Android 安全公告</a>中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。</p>
 <p>
-所有受支持的 Google 设备都将会收到 2018-03-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-03-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上找到 Google 设备固件映像。
 </p>
 
-<h2 id="announcements">公告</h2>
-<p>
-除了 <a href="/security/bulletin/2018-03-01">2018 年 3 月的 Android 安全公告</a>中所述的安全漏洞外,Google 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。</p>
+<h2 id="announcements">通告</h2>
+<p>除了 <a href="/security/bulletin/2018-03-01">2018 年 3 月的 Android 安全公告</a>中所述的安全漏洞外,Google 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。</p>
 
 <h2 id="security-patches">安全补丁程序</h2>
 <p>
@@ -588,13 +587,13 @@
 <strong>4. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
 </p>
 <p>
-要在 Android 设备上声明最新的安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
+要声明 Android 设备的最新安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
 </p>
 <h2 id="versions">版本</h2>
 <table>
diff --git a/zh-cn/security/bulletin/pixel/2018-04-01.html b/zh-cn/security/bulletin/pixel/2018-04-01.html
index 96a8142..342e5ba 100644
--- a/zh-cn/security/bulletin/pixel/2018-04-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-04-01.html
@@ -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>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考编号、<a href="#type">漏洞类型</a>、<a href="https://source.android.com/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
 </p>
 
 <h3 id="framework">框架</h3>
@@ -49,15 +49,14 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
   </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>
@@ -81,7 +80,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -153,15 +152,14 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
   </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>
@@ -185,7 +183,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -209,7 +207,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -264,7 +262,7 @@
         <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=df80cd9b28b9ebaa284a41df611dbf3a2d05ca74">上游内核</a></td>
     <td>EoP</td>
     <td>中</td>
-    <td>SCTP</td>
+    <td>sctp</td>
   </tr>
 </tbody></table>
 
@@ -278,7 +276,7 @@
   <col width="33%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -293,7 +291,7 @@
   </tr>
   <tr>
     <td>CVE-2018-5826</td>
-    <td>A-69128800<a href="#asterisk">*</a><br />QC-CR#2157283</td>
+    <td>A-69128800<a href="#asterisk">*</a><br /> QC-CR#2157283</td>
     <td>ID</td>
     <td>中</td>
     <td>qcacld-3.0 硬盘驱动器</td>
@@ -307,16 +305,14 @@
   </tr>
   <tr>
     <td>CVE-2018-3584</td>
-    <td>A-64610600<a href="#asterisk">*</a><br />
-        QC-CR#2142046</td>
+    <td>A-64610600<a href="#asterisk">*</a><br />QC-CR#2142046</td>
     <td>ID</td>
     <td>中</td>
     <td>rmnet_usb</td>
   </tr>
   <tr>
     <td>CVE-2017-8269</td>
-    <td>A-33967002<a href="#asterisk">*</a><br />
-        QC-CR#2013145<br />QC-CR#2114278</td>
+    <td>A-33967002<a href="#asterisk">*</a><br />QC-CR#2013145<br />QC-CR#2114278</td>
     <td>ID</td>
     <td>中</td>
     <td>IPA 驱动程序</td>
@@ -339,9 +335,7 @@
   <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>
@@ -349,8 +343,7 @@
   <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>
@@ -413,8 +406,7 @@
   <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>
@@ -422,8 +414,7 @@
   <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>
@@ -431,8 +422,7 @@
   <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>
@@ -456,8 +446,7 @@
   <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>
@@ -465,9 +454,7 @@
   <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>
@@ -484,12 +471,12 @@
 
 <h2 id="functional-updates">功能更新</h2>
 <p>
-我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)、改进以及受影响设备。
+我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考编号、受影响的类别(例如蓝牙或移动数据网络)、改进以及受影响设备。
 </p>
 
 <table>
   <tbody><tr>
-   <th>参考内容</th>
+   <th>参考编号</th>
    <th>类别</th>
    <th>改进</th>
    <th>设备</th>
@@ -675,13 +662,7 @@
    <td>Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
-   <td>A-69017578<br />
-       A-68138080<br />
-       A-68205105<br />
-       A-70731000<br />
-       A-69574837<br />
-       A-68474108<br />
-       A-70406781</td>
+   <td>A-69017578<br />A-68138080<br />A-68205105<br />A-70731000<br />A-69574837<br />A-68474108<br />A-70406781</td>
    <td>连接、性能</td>
    <td>改进部分运营商网络的连接性和性能</td>
    <td>Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
@@ -711,8 +692,7 @@
    <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>
@@ -760,8 +740,7 @@
    <td>Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
-   <td>A-70094083<br />
-       A-70094701</td>
+   <td>A-70094083<br />A-70094701</td>
    <td>电池</td>
    <td>改进 Pixel 2 和 Pixel 2 XL 的电池性能</td>
    <td>Pixel 2、Pixel 2 XL</td>
@@ -886,17 +865,17 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3.“参考内容”列中的条目表示什么意思?<em></em></strong>
+<strong>3.“参考编号”列中的条目表示什么意思?<em></em></strong>
 </p>
 <p>
-在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
+在漏洞详情表内,“参考编号”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
 </p>
 <table>
   <colgroup><col width="25%" />
   <col width="75%" />
   </colgroup><tbody><tr>
    <th>前缀</th>
-   <th>参考内容</th>
+   <th>参考编号</th>
   </tr>
   <tr>
    <td>A-</td>
@@ -920,10 +899,10 @@
   </tr>
 </tbody></table>
 <p id="asterisk">
-<strong>4. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+<strong>4. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考内容”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
diff --git a/zh-cn/security/bulletin/pixel/2018-05-01.html b/zh-cn/security/bulletin/pixel/2018-05-01.html
index 1695d50..dc57720 100644
--- a/zh-cn/security/bulletin/pixel/2018-05-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-05-01.html
@@ -26,7 +26,7 @@
 本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-05-05 或更新,则意味着已解决本公告以及 2018 年 5 月的 Android 安全公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。
 </p>
 <p>
-所有受支持的 Google 设备都将会收到 2018-05-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-05-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上找到 Google 设备固件映像。
@@ -35,7 +35,7 @@
 <p>除了 2018 年 5 月的 Android 安全公告中所述的安全漏洞外,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>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考编号、<a href="#type">漏洞类型</a>、<a href="https://source.android.com/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
 </p>
 
 <h3 id="framework">框架</h3>
@@ -48,7 +48,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -72,7 +72,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -127,7 +127,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -165,7 +165,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -198,7 +198,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -229,7 +229,7 @@
   <col width="39%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -245,8 +245,7 @@
   <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>
@@ -254,8 +253,7 @@
   <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>
@@ -270,7 +268,7 @@
   </tr>
   <tr>
     <td>CVE-2018-5853</td>
-    <td>A-71714212<a href="#asterisk">*</a><br />QC-CR#2178082<br />QC-CR#2043277</td>
+    <td>A-71714212<a href="#asterisk">*</a><br /> QC-CR#2178082<br /> QC-CR#2043277</td>
     <td>EoP</td>
     <td>中</td>
     <td>网络子系统</td>
@@ -310,8 +308,7 @@
   <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>
@@ -327,8 +324,7 @@
   <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>
@@ -339,7 +335,7 @@
         <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>
+    <td>Kgsl</td>
   </tr>
   <tr>
     <td>CVE-2017-18153</td>
@@ -361,7 +357,7 @@
     <td>A-65122765<a href="#asterisk">*</a><br />QC-CR#2111672<br />QC-CR#2152401<br />QC-CR#2152399<br />QC-CR#2153841</td>
     <td>EoP</td>
     <td>中</td>
-    <td>相机</td>
+    <td>摄像头</td>
   </tr>
   <tr>
     <td>CVE-2017-15854</td>
@@ -374,8 +370,7 @@
   <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>
@@ -383,8 +378,7 @@
   <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>
@@ -416,11 +410,11 @@
 
 <h2 id="functional-patches">功能补丁程序</h2>
 <p>
-我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)、改进以及受影响设备。
+我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考编号、受影响的类别(例如蓝牙或移动数据网络)、改进以及受影响设备。
 </p>
 <table>
   <tbody><tr>
-   <th>参考内容</th>
+   <th>参考编号</th>
    <th>类别</th>
    <th>改进</th>
    <th>设备</th>
@@ -485,17 +479,17 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3.“参考内容”列中的条目表示什么意思?<em></em></strong>
+<strong>3.“参考编号”列中的条目表示什么意思?<em></em></strong>
 </p>
 <p>
-在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
+在漏洞详情表内,“参考编号”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
 </p>
 <table>
   <colgroup><col width="25%" />
   <col width="75%" />
   </colgroup><tbody><tr>
    <th>前缀</th>
-   <th>参考内容</th>
+   <th>参考编号</th>
   </tr>
   <tr>
    <td>A-</td>
@@ -519,10 +513,10 @@
   </tr>
 </tbody></table>
 <p id="asterisk">
-<strong>4. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+<strong>4. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考内容”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Pixel/ Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
@@ -548,7 +542,7 @@
   <tr>
    <td>1.1</td>
    <td>2018 年 5 月 9 日</td>
-   <td>修订了本公告,添加了 AOSP 链接。</td>
+   <td>在本公告中添加了 AOSP 链接。</td>
   </tr>
 </tbody></table>
 
diff --git a/zh-cn/security/bulletin/pixel/2018-06-01.html b/zh-cn/security/bulletin/pixel/2018-06-01.html
index cdad74c..2ac41a6 100644
--- a/zh-cn/security/bulletin/pixel/2018-06-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-06-01.html
@@ -26,12 +26,12 @@
 本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-06-05 或更新,则意味着已解决本公告以及 2018 年 6 月的 Android 安全公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。
 </p>
 <p>
-所有受支持的 Google 设备都将会收到 2018-06-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-06-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <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 年 6 月的 Android 安全公告中所述的安全漏洞外,Pixel 和 Nexus 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。</p>
 <h2 id="security-patches">安全补丁程序</h2>
 <p>
@@ -707,10 +707,8 @@
    <td>Pixel、Pixel XL、Pixel 2、Pixel 2 XL</td>
   </tr>
   <tr>
-   <td>A-68114567<br />
-
-A-74058011</td>
-   <td>显示屏</td>
+   <td>A-68114567<br />A-74058011</td>
+   <td>显示</td>
    <td>改进了“显示屏始终保持开启状态”的一致性</td>
    <td>Pixel 2 XL</td>
   </tr>
@@ -805,13 +803,13 @@
 <strong>4. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Pixel/ Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
 </p>
 <p>
-要在 Android 设备上声明最新的安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
+要声明 Android 设备的最新安全补丁程序级别,必须修复 Android 安全公告中记录的安全漏洞。但在声明安全补丁程序级别时,并不是必须要修复其他安全漏洞(如本公告中记录的漏洞)。
 </p>
 <h2 id="versions">版本</h2>
 <table>
diff --git a/zh-cn/security/bulletin/pixel/2018-07-01.html b/zh-cn/security/bulletin/pixel/2018-07-01.html
index 81c8454..ae88ab4 100644
--- a/zh-cn/security/bulletin/pixel/2018-07-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-07-01.html
@@ -26,7 +26,7 @@
 本 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 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-07-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/images">Google Developers 网站</a>上找到 Google 设备固件映像。
@@ -426,7 +426,7 @@
 <strong>4. 在“参考编号”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
 </p>
 <p>
-如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Pixel/ Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
diff --git a/zh-cn/security/bulletin/pixel/2018-08-01.html b/zh-cn/security/bulletin/pixel/2018-08-01.html
index c76f157..937d0f7 100644
--- a/zh-cn/security/bulletin/pixel/2018-08-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-08-01.html
@@ -26,7 +26,7 @@
 本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,如果安全补丁程序级别是 2018-08-05 或更新,则意味着已解决本公告以及 2018 年 8 月的 Android 安全公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705" class="external">查看并更新 Android 版本</a>。
 </p>
 <p>
-所有受支持的 Google 设备都将会收到 2018-08-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-08-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/images" class="external">Google Developers 网站</a>上找到 Google 设备固件映像。
@@ -37,7 +37,7 @@
 
 <h2 id="security-patches">安全补丁程序</h2>
 <p>
-漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考编号、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
 </p>
 
 <h3 id="framework">框架</h3>
@@ -50,7 +50,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -76,7 +76,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -120,9 +120,7 @@
   <tr>
     <td>CVE-2018-9441</td>
     <td>
-<a href="https://android.googlesource.com/platform/system/bt/+/c3c69bed0f76178c640dd8e726967b9cdea5dece">A-74075873</a>
-[<a href="https://android.googlesource.com/platform/system/bt/+/3a2799939b2da543ed3a62f29db658cb05f8ad3b">2</a>]
-</td>
+<a href="https://android.googlesource.com/platform/system/bt/+/c3c69bed0f76178c640dd8e726967b9cdea5dece">A-74075873</a> [<a href="https://android.googlesource.com/platform/system/bt/+/3a2799939b2da543ed3a62f29db658cb05f8ad3b">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>
@@ -157,7 +155,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -189,7 +187,7 @@
         <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b71812168571fa55e44cdd0254471331b9c4c4c6">上游内核</a></td>
     <td>EoP</td>
     <td>中</td>
-    <td>防火墙</td>
+    <td>Netfilter</td>
   </tr>
   <tr>
     <td>CVE-2018-9464</td>
@@ -210,7 +208,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -232,10 +230,7 @@
   <tr>
     <td>CVE-2018-5910</td>
     <td>A-79422277<br />
-<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=b67e04e3696f05411b7434c8b194895d273b00c5">
-QC-CR#2175499</a>
-[<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=d9344c2f4b60cf5d4c747c11f3cb0b6f1558db78">2</a>]
-</td>
+<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=b67e04e3696f05411b7434c8b194895d273b00c5">QC-CR#2175499</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=d9344c2f4b60cf5d4c747c11f3cb0b6f1558db78">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>MDSS</td>
@@ -251,10 +246,7 @@
   <tr>
     <td>CVE-2018-5908</td>
     <td>A-79422409<br />
-<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=28e5918c60b832091c6b3618747258803cbd3302">
-QC-CR#2171758</a>
-[<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=4689d03e5db548d263232c274bf307956207da27">2</a>]
-</td>
+<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=28e5918c60b832091c6b3618747258803cbd3302">QC-CR#2171758</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=4689d03e5db548d263232c274bf307956207da27">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>MDSS</td>
@@ -270,10 +262,7 @@
   <tr>
     <td>CVE-2018-5904</td>
     <td>A-79421260<br />
-        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=88b838c8952ec6414c72449ae15768d15d2606dd">
-QC-CR#2184702</a>
-[<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=8e82c0d84ccee87309fd22f8208915f0ba502b26">2</a>]
-</td>
+        <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=88b838c8952ec6414c72449ae15768d15d2606dd">QC-CR#2184702</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=8e82c0d84ccee87309fd22f8208915f0ba502b26">2</a>]</td>
     <td>EoP</td>
     <td>中</td>
     <td>电源驱动程序</td>
@@ -281,8 +270,7 @@
   <tr>
     <td>CVE-2018-5903</td>
     <td>A-79421737<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=20365fa599f42f6e1f175d9d5d60d964927c2160">
-QC-CR#2185477</a></td>
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=20365fa599f42f6e1f175d9d5d60d964927c2160">QC-CR#2185477</a></td>
     <td>EoP</td>
     <td>中</td>
     <td>qcacld 3.0</td>
@@ -296,24 +284,21 @@
   </tr>
   <tr>
     <td>CVE-2017-18307</td>
-    <td>A-73888283<a href="#asterisk">*</a><br />
-        QC-CR#2026045</td>
+    <td>A-73888283<a href="#asterisk">*</a><br />QC-CR#2026045</td>
     <td>ID</td>
     <td>中</td>
     <td>qcacld-3.0</td>
   </tr>
   <tr>
     <td>CVE-2017-9711</td>
-    <td>A-36367253<a href="#asterisk">*</a><br />
-        QC-CR#2046006</td>
+    <td>A-36367253<a href="#asterisk">*</a><br />QC-CR#2046006</td>
     <td>EoP</td>
     <td>中</td>
     <td>IPA</td>
   </tr>
   <tr>
     <td>CVE-2018-3587</td>
-    <td>A-65542521<a href="#asterisk">*</a><br />
-        QC-CR#2120605</td>
+    <td>A-65542521<a href="#asterisk">*</a><br />QC-CR#2120605</td>
     <td>EoP</td>
     <td>中</td>
     <td>qcacld-2.0</td>
@@ -330,7 +315,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -338,9 +323,7 @@
   <tr>
     <td>CVE-2017-13295</td>
     <td>
-<a href="https://android.googlesource.com/platform/frameworks/base/+/da24aa45a8b65a7b9adbe12ff94bf891bdd38825">A-62537081</a>
-[<a href="https://android.googlesource.com/platform/packages/apps/PackageInstaller/+/3af01bd93513d902dbb5382b10109fdf3ab29d2d">2</a>]
-</td>
+<a href="https://android.googlesource.com/platform/frameworks/base/+/da24aa45a8b65a7b9adbe12ff94bf891bdd38825">A-62537081</a> [<a href="https://android.googlesource.com/platform/packages/apps/PackageInstaller/+/3af01bd93513d902dbb5382b10109fdf3ab29d2d">2</a>]</td>
     <td>DoS</td>
     <td>中</td>
     <td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -357,7 +340,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>已更新的 AOSP 版本</th>
@@ -383,7 +366,7 @@
   <col width="30%" />
   </colgroup><tbody><tr>
     <th>CVE</th>
-    <th>参考内容</th>
+    <th>参考编号</th>
     <th>类型</th>
     <th>严重程度</th>
     <th>组件</th>
@@ -391,9 +374,7 @@
   <tr>
     <td>CVE-2017-15817</td>
     <td>A-68992394<br />
-        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/prima/commit/?id=fe43c2b64ac81199de17efc258e95546cb0546f1">QC-CR#2076603</a>
-[<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/prima/commit/?id=8ba78e506e5002cdae525dd544dbf1df0ccce1ef">2</a>]
-<br />
+        <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/prima/commit/?id=fe43c2b64ac81199de17efc258e95546cb0546f1">QC-CR#2076603</a> [<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/prima/commit/?id=8ba78e506e5002cdae525dd544dbf1df0ccce1ef">2</a>]<br />
 <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=343a3f28338788c5c91289f53171c1f71f293cd7">QC-CR#2084599</a>
 <br />
 <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=0c21aaa2fefa6c5919813fdd287436dddda54227">QC-CR#2096512</a>
@@ -450,17 +431,17 @@
   </tr>
 </tbody></table>
 <p>
-<strong>3.“参考内容”列中的条目表示什么意思?<em></em></strong>
+<strong>3.“参考编号”列中的条目表示什么意思?<em></em></strong>
 </p>
 <p>
-在漏洞详情表内,“参考内容”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
+在漏洞详情表内,“参考编号”列中的条目可能包含用于标识参考值所属组织的前缀。<em></em>
 </p>
 <table>
   <colgroup><col width="25%" />
   <col width="75%" />
   </colgroup><tbody><tr>
    <th>前缀</th>
-   <th>参考内容</th>
+   <th>参考编号</th>
   </tr>
   <tr>
    <td>A-</td>
@@ -484,10 +465,10 @@
   </tr>
 </tbody></table>
 <p id="asterisk">
-<strong>4. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+<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 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
diff --git a/zh-cn/security/bulletin/pixel/2018-09-01.html b/zh-cn/security/bulletin/pixel/2018-09-01.html
index c0b8652..6b0db63 100644
--- a/zh-cn/security/bulletin/pixel/2018-09-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-09-01.html
@@ -26,7 +26,7 @@
 本 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>
-所有受支持的 Google 设备都将会收到 2018-09-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-09-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
 <strong>注意</strong>:可在 <a href="https://developers.google.com/android/images" class="external">Google Developers 网站</a>上找到 Google 设备固件映像。
@@ -308,7 +308,7 @@
 <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 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers" class="external">Google Developers 网站</a>上针对 Pixel/ Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
diff --git a/zh-cn/security/bulletin/pixel/2018-10-01.html b/zh-cn/security/bulletin/pixel/2018-10-01.html
index cebc159..61e1a43 100644
--- a/zh-cn/security/bulletin/pixel/2018-10-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-10-01.html
@@ -26,10 +26,10 @@
 本 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 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
+所有受支持的 Google 设备都将会收到 2018-10-05 补丁程序级别的更新。建议所有用户都在自己的设备上接受这些更新。
 </p>
 <p class="note">
-<strong>注意</strong>:可在 <a href="https://developers.google.com/android/images" class="external">Google Developer 网站</a>上找到 Google 设备固件映像。
+<strong>注意</strong>:可在 <a href="https://developers.google.com/android/images" class="external">Google Developers 网站</a>上找到 Google 设备固件映像。
 </p>
 
 <h2 id="announcements">通告</h2>
@@ -57,7 +57,7 @@
   </tr>
   <tr>
    <td>A-112529920</td>
-   <td>电耗</td>
+   <td>电源</td>
    <td>改进了 Pixel 设备的快速充电行为</td>
    <td>Pixel、Pixel XL</td>
   </tr>
@@ -158,7 +158,7 @@
 <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 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
diff --git a/zh-cn/security/bulletin/pixel/2018-11-01.html b/zh-cn/security/bulletin/pixel/2018-11-01.html
index bd6cfaf..4000e3e 100644
--- a/zh-cn/security/bulletin/pixel/2018-11-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-11-01.html
@@ -245,7 +245,7 @@
 <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>上针对 Pixel/ Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
diff --git a/zh-cn/security/bulletin/pixel/2018-12-01.html b/zh-cn/security/bulletin/pixel/2018-12-01.html
index 22f1466..e5740aa 100644
--- a/zh-cn/security/bulletin/pixel/2018-12-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-12-01.html
@@ -32,14 +32,14 @@
 <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>除了 <a href="/security/bulletin/2018-12-01">2018 年 12 月的 Android 安全公告</a>中所述的安全漏洞外,Google 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。
 </p>
 
 <h2 id="security-patches">安全补丁程序</h2>
 <p>
-漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考编号、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的更改记录,我们还将通过 Bug ID 后面的数字链接到更多参考信息。
+漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考编号、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
 </p>
 
 <h3 id="qualcomm-components">Qualcomm 组件</h3>
@@ -84,6 +84,12 @@
    <th>改进</th>
    <th>设备</th>
   </tr>
+   <tr>
+   <td>A-112646910</td>
+   <td>安全</td>
+   <td>改进了重置后的图案解锁识别效果</td>
+   <td>Pixel、Pixel XL</td>
+  </tr>
   <tr>
    <td>A-117522738</td>
    <td>性能</td>
@@ -92,8 +98,8 @@
   </tr>
    <tr>
    <td>A-110969183</td>
-   <td>相机</td>
-   <td>改进了相机捕获性能</td>
+   <td>摄像头</td>
+   <td>改进了摄像头捕获性能</td>
    <td>Pixel 2、Pixel 2 XL、Pixel 3、Pixel 3 XL</td>
   </tr>
    <tr>
@@ -110,7 +116,7 @@
   </tr>
     <tr>
    <td>A-115666282</td>
-   <td>相机</td>
+   <td>摄像头</td>
    <td>调整了自动对焦行为</td>
    <td>Pixel 3、Pixel 3 XL</td>
   </tr>
@@ -122,7 +128,7 @@
   </tr>
     <tr>
    <td>A-116758282</td>
-   <td>显示</td>
+   <td>显示屏</td>
    <td>改进了“显示屏始终保持开启状态”的触发性能</td>
    <td>Pixel 3、Pixel 3 XL</td>
   </tr>
@@ -152,8 +158,8 @@
   </tr>
     <tr>
    <td>A-113151604</td>
-   <td>相机</td>
-   <td>改进了相机快门性能</td>
+   <td>摄像头</td>
+   <td>改进了摄像头快门性能</td>
    <td>Pixel 3、Pixel 3 XL</td>
   </tr>
     <tr>
@@ -247,7 +253,7 @@
 <strong>4. 在“参考编号”列中,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 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
+如果问题尚未公开发布,则在“参考编号”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/drivers" class="external">Google Developers 网站</a>上针对 Pixel/Nexus 设备提供的最新二进制驱动程序中通常包含用于解决相应问题的更新。
 </p>
 <p>
 <strong>5. 为什么要将安全漏洞拆分到本公告和 Android 安全公告中?</strong>
diff --git a/zh-cn/security/bulletin/pixel/2018.html b/zh-cn/security/bulletin/pixel/2018.html
index 243614a..16d7cf8 100644
--- a/zh-cn/security/bulletin/pixel/2018.html
+++ b/zh-cn/security/bulletin/pixel/2018.html
@@ -33,6 +33,32 @@
     <th>发布日期</th>
     <th>安全补丁程序级别</th>
  </tr>
+<tr>
+    <td><a href="/security/bulletin/pixel/2018-12-01.html">2018 年 12 月</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2018-12-01.html">English</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=zh-tw">中文 (台灣)</a>
+    </td>
+    <td>2018 年 12 月 3 日</td>
+    <td>2018-12-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2018-11-01.html">2018 年 11 月</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2018-11-01.html">English</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-tw">中文 (台灣)</a>
+   </td>
+    <td>2018 年 11 月 5 日</td>
+    <td>2018-11-05</td>
+ </tr>
  <tr>
     <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
     <td>
diff --git a/zh-cn/security/bulletin/pixel/2019-01-01.html b/zh-cn/security/bulletin/pixel/2019-01-01.html
new file mode 100644
index 0000000..679209a
--- /dev/null
+++ b/zh-cn/security/bulletin/pixel/2019-01-01.html
@@ -0,0 +1,209 @@
+<html devsite><head>
+    <title>Pixel 更新公告 - 2019 年 1 月</title>
+    <meta name="project_path" value="/_project.yaml"/>
+    <meta name="book_path" value="/_book.yaml"/>
+  </head>
+  <body>
+  <!--
+      Copyright 2019 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>发布时间:2019 年 1 月 7 日</em></p>
+
+<p>
+本 Pixel 更新公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">受支持的 Google Pixel 设备</a>(Google 设备)的安全漏洞和功能改进。
+对于 Google 设备,如果安全补丁程序级别是 2019-01-05 或更新,则意味着已解决本公告以及 2019 年 1 月的 Android 安全公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705" class="external">查看并更新 Android 版本</a>。
+</p>
+<p>
+所有受支持的 Google 设备都将会收到 2019-01-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>除了 <a href="/security/bulletin/2019-01-01">2019 年 1 月的 Android 安全公告</a>中所述的安全漏洞外,Google 设备中还包含针对下述安全漏洞的补丁程序。合作伙伴在至少一个月前就已收到关于这些问题的通知,并可以选择将针对这些问题的补丁程序纳入到其设备更新中。
+</p>
+
+<h2 id="security-patches">安全补丁程序</h2>
+<p>
+漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考编号、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(若有)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考编号。
+</p>
+
+<h3 id="kernel-components">内核组件</h3>
+
+<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-13098</td>
+    <td>A-113148387<br />
+        <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76d56d4ab4f2a9e4f085c7d77172194ddaccf7d2">上游内核</a></td>
+    <td>ID</td>
+    <td>中</td>
+    <td>文件系统</td>
+  </tr>
+  <tr>
+    <td>CVE-2018-13099</td>
+    <td>A-113148515<br />
+        <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4dbe38dc386910c668c75ae616b99b823b59f3eb">上游内核</a></td>
+    <td>ID</td>
+    <td>中</td>
+    <td>文件系统</td>
+  </tr>
+</tbody></table>
+
+<h3 id="functional-patches">功能补丁程序</h3>
+<p>我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考编号、受影响的类别(例如蓝牙和移动数据网络)、改进功能以及受影响设备。
+</p>
+
+<table>
+  <tbody><tr>
+    </tr></tbody><colgroup><col width="15%" />
+    <col width="15%" />
+    <col width="40%" />
+    <col width="30%" />
+   </colgroup><tbody><tr><th>参考编号</th>
+   <th>类别</th>
+   <th>改进</th>
+   <th>设备</th>
+  </tr>
+  <tr>
+   <td>A-113776612、A-118022272</td>
+   <td>音频</td>
+   <td>改进了录制视频时的音频质量</td>
+   <td>Pixel 3、Pixel 3 XL</td>
+  </tr>
+</tbody></table>
+
+<h2 id="common-questions-and-answers">常见问题和解答</h2>
+<p>
+这一部分解答了用户在阅读本公告后可能会提出的常见问题。
+</p>
+<p>
+<strong>1. 如何确定我的设备是否已通过更新解决这些问题?
+</strong>
+</p>
+<p>如果安全补丁程序级别是 2019-01-05 或更新,则意味着已解决 2019-01-05 以及之前的所有安全补丁程序级别涵盖的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅 <a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices" class="external">Pixel 更新时间表</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/drivers" class="external">Google Developers 网站</a>上针对 Pixel 设备的最新二进制驱动程序中通常包含用于解决相应问题的更新。
+</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>2019 年 1 月 7 日</td>
+   <td>公告已发布。</td>
+  </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/pixel/2019.html b/zh-cn/security/bulletin/pixel/2019.html
new file mode 100644
index 0000000..d7298a1
--- /dev/null
+++ b/zh-cn/security/bulletin/pixel/2019.html
@@ -0,0 +1,197 @@
+<html devsite><head>
+    <title>2019 年 Pixel 更新公告</title>
+    <meta name="project_path" value="/_project.yaml"/>
+    <meta name="book_path" value="/_book.yaml"/>
+  </head>
+  <body>
+ <!--
+      Copyright 2019 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>本页中列出了我们在 2019 年发布的所有 Pixel 更新公告。如需所有公告的列表,请访问 <a href="/security/bulletin/pixel/index.html">Pixel 更新公告</a>首页。</p>
+
+<table>
+  <colgroup><col width="15%" />
+  <col width="49%" />
+  <col width="17%" />
+  <col width="19%" />
+ </colgroup><tbody><tr>
+    <th>公告</th>
+    <th>语言</th>
+    <th>发布日期</th>
+    <th>安全补丁程序级别</th>
+ </tr>
+<tr><td><!--
+<tr>
+    <td><a href="/security/bulletin/pixel/2019-12-01.html">December 2019</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2019-12-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-12-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-12-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-12-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-12-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-12-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>December 2, 2019</td>
+    <td>2019-12-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2019-11-01.html">November 2019</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2019-11-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-11-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-11-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-11-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-11-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-11-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+    <td>November 4, 2019</td>
+    <td>2019-11-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2019-10-01.html">October 2019</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2019-10-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-10-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-10-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-10-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-10-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-10-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>October 7, 2019</td>
+    <td>2019-10-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2019-09-01.html">September 2019</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2019-09-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-09-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-09-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-09-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-09-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-09-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>September 2, 2019</td>
+    <td>2019-09-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2019-08-01.html">August 2019</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2019-08-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-08-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-08-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-08-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-08-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-08-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    </td>
+    <td>August 5, 2019</td>
+    <td>2019-08-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/pixel/2019-07-01.html">July 2019</a></td>
+   <td>
+     <a href="/security/bulletin/pixel/2019-07-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-07-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-07-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-07-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-07-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-07-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>July 1, 2019</td>
+   <td>2019-07-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/pixel/2019-06-01.html">June 2019</a></td>
+   <td>
+     <a href="/security/bulletin/pixel/2019-06-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-06-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-06-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-06-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-06-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-06-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>June 3, 2019</td>
+   <td>2019-06-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/pixel/2019-05-01.html">May 2019</a></td>
+   <td>
+     <a href="/security/bulletin/pixel/2019-05-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-05-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-05-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-05-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-05-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-05-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>May 6, 2019</td>
+   <td>2019-05-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/pixel/2019-04-01.html">April 2019</a></td>
+   <td>
+     <a href="/security/bulletin/pixel/2019-04-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-04-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-04-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-04-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-04-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-04-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>April 1, 2019</td>
+   <td>2019-04-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/pixel/2019-03-01.html">March 2019</a></td>
+   <td>
+     <a href="/security/bulletin/pixel/2019-03-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-03-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-03-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-03-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-03-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-03-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>March 4, 2019</td>
+   <td>2019-03-05</td>
+ </tr>
+ <tr>
+   <td><a href="/security/bulletin/pixel/2019-02-01.html">February 2019</a></td>
+   <td>
+     <a href="/security/bulletin/pixel/2019-02-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-02-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-02-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-02-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-02-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-02-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+   </td>
+   <td>February 4, 2019</td>
+   <td>2019-02-05</td>
+ </tr>
+-->
+ </td></tr><tr>
+   <td><a href="/security/bulletin/pixel/2019-01-01.html">2019 年 1 月</a></td>
+   <td>即将发布<!--
+     <a href="/security/bulletin/pixel/2019-01-01.html">English</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-01-01.html?hl=ja">日本語</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-01-01.html?hl=ko">한국어</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-01-01.html?hl=ru">ру́сский</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-01-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+     <a href="/security/bulletin/pixel/2019-01-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+    -->
+   </td>
+   <td>2019 年 1 月 7 日</td>
+   <td>2019-01-05</td>
+ </tr>
+</tbody></table>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/pixel/index.html b/zh-cn/security/bulletin/pixel/index.html
index 40717bd..b98fd3b 100644
--- a/zh-cn/security/bulletin/pixel/index.html
+++ b/zh-cn/security/bulletin/pixel/index.html
@@ -42,6 +42,32 @@
     <th>发布日期</th>
     <th>安全补丁程序级别</th>
  </tr>
+<tr>
+    <td><a href="/security/bulletin/pixel/2018-12-01.html">2018 年 12 月</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2018-12-01.html">English</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/pixel/2018-12-01.html?hl=zh-tw">中文 (台灣)</a>
+   </td>
+    <td>2018 年 12 月 3 日</td>
+    <td>2018-12-05</td>
+ </tr>
+ <tr>
+    <td><a href="/security/bulletin/pixel/2018-11-01.html">2018 年 11 月</a></td>
+    <td>
+     <a href="/security/bulletin/pixel/2018-11-01.html">English</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=ja">日本語</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=ko">한국어</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=ru">ру́сский</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-cn">中文 (中国)</a> /
+     <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-tw">中文 (台灣)</a>
+    </td>
+    <td>2018 年 11 月 5 日</td>
+    <td>2018-11-05</td>
+ </tr>
  <tr>
     <td><a href="/security/bulletin/pixel/2018-10-01.html">2018 年 10 月</a></td>
     <td>
diff --git a/zh-cn/security/encryption/adiantum.html b/zh-cn/security/encryption/adiantum.html
new file mode 100644
index 0000000..cf35db3
--- /dev/null
+++ b/zh-cn/security/encryption/adiantum.html
@@ -0,0 +1,188 @@
+<html devsite><head>
+    <title>启用 Adiantum</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://eprint.iacr.org/2018/720.pdf" class="external">Adiantum</a> 是一种加密方法,专为搭载 Android 9 及更高版本且其 CPU 缺少 <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard" class="external">AES</a> 指令的设备而设计。如果您要寄送启用 ARMv8 加密扩展程序的基于 ARM 的设备或启用 AES-NI 的 x86 设备,则<strong>不得</strong>使用 Adiantum。AES 在这些平台上的运行速度更快。
+</p>
+<p>对于缺少这些 AES CPU 指令的设备,Adiantum 在您的设备上提供了加密功能,且性能开销非常少。要查看基准数据,请参阅 <a href="https://eprint.iacr.org/2018/720.pdf" class="external">Adiantum 论文</a>。要查看在您的硬件上运行的基准源代码,请参阅 <a href="https://github.com/google/adiantum" class="external">GitHub 上的 Adiantum 源代码</a>。
+</p>
+<p>要在搭载 Android 9 或更高版本的设备上启用 Adiantum,您需要更改内核和用户空间。
+</p>
+
+<h2 id="kernel-changes">内核变更</h2>
+<p>择优挑选对内核进行的 Adiantum 更改并应用其他 <code>dm-crypt</code> 补丁程序。如果您在择优挑选时遇到了问题,使用<a href="https://source.android.com/security/encryption/full-disk" class="external">全盘加密</a> (FDE) 的设备可以排除“fscrypt:”补丁程序。
+</p>
+
+<table>
+  <tbody><tr>
+   <th>内核版本</th>
+    <th>内核变更</th>
+    <th><code>dm-crypt</code> 补丁程序</th>
+  </tr>
+  <tr>
+   <td>4.19
+   </td>
+   <td><a href="https://android-review.googlesource.com/q/topic:%22adiantum-4.19%22+(status:open%20OR%20status:merged)" class="external">4.19 内核</a>
+   </td>
+   <td><a href="https://android-review.googlesource.com/c/kernel/common/+/851273" class="external"><code>dm-crypt</code> 补丁程序</a>
+   </td>
+  </tr>
+  <tr>
+   <td>4.14
+   </td>
+   <td><a href="https://android-review.googlesource.com/q/topic:%22adiantum-4.14%22+(status:open%20OR%20status:merged)" class="external">4.14 内核</a>
+   </td>
+   <td><a href="https://android-review.googlesource.com/c/kernel/common/+/851275" class="external"><code>dm-crypt</code> 补丁程序</a>
+   </td>
+  </tr>
+  <tr>
+   <td>4.9
+   </td>
+   <td><a href="https://android-review.googlesource.com/q/topic:%22adiantum-4.9%22+(status:open%20OR%20status:merged)" class="external">4.9 内核</a>
+   </td>
+   <td><a href="https://android-review.googlesource.com/c/kernel/common/+/851278" class="external"><code>dm-crypt</code> 补丁程序</a>
+   </td>
+  </tr>
+</tbody></table>
+
+<h3 id="enable-adiantum-kernel">在内核中启用 Adiantum</h3>
+
+<p>
+在集成内核更改后,通过添加以下行来更改内核配置:
+</p>
+
+<pre class="devsite-click-to-copy">CONFIG_CRYPTO_ADIANTUM=y
+CONFIG_DM_CRYPT=y
+</pre>
+
+<p>
+如果您的设备使用 4.4 内核,还要添加:
+</p>
+
+<pre class="devsite-click-to-copy">CONFIG_CRYPTO_SEQIV=y
+</pre>
+<p>
+如果您的设备使用文件级加密 (FBE),还要添加:
+</p>
+
+<pre class="devsite-click-to-copy">CONFIG_F2FS_FS_ENCRYPTION=y
+</pre>
+<p>
+要确保在 32 位 ARM 内核上实现良好的性能,请为该内核启用 NEON 指令:
+</p>
+
+<pre class="devsite-click-to-copy">CONFIG_CRYPTO_AES_ARM=y
+CONFIG_CRYPTO_CHACHA20_NEON=y
+CONFIG_CRYPTO_NHPOLY1305_NEON=y
+CONFIG_KERNEL_MODE_NEON=y
+</pre>
+
+<h2 id="userspace-changes">用户空间更改</h2>
+<p>对于搭载 Android 9 的设备,请在 AOSP 中 <code>pie-platform-release</code> 分支上的 <code>userspace_adiantum_support_pie</code> 主题中择优挑选 <a href="https://android-review.googlesource.com/q/topic:%22userspace_adiantum_support_pie%22+(status:open%20OR%20status:merged)" class="external">Adiantum 用户空间更改</a>。</p>
+<p>
+<a href="https://android-review.googlesource.com/q/topic:%22userspace_adiantum_support%22+(status:open%20OR%20status:merged)" class="external">AOSP 的 master 分支</a>中也包含这些更改。
+</p>
+
+<h2 id="enable-adiantum-device">在您的设备中启用 Adiantum</h2>
+<p>
+这些设置适用于设备上的 userdata,也适用于可合并的存储设备。
+</p>
+
+<h3 id="fbe-devices">支持文件级加密的设备</h3>
+<p>
+要启用 Adiantum 并提高其性能,请在 <code>PRODUCT_PROPERTY_OVERRIDES</code> 中设置以下属性:
+</p>
+
+<pre class="devsite-click-to-copy">ro.crypto.fde_algorithm=adiantum
+ro.crypto.fde_sector_size=4096
+ro.crypto.volume.contents_mode=adiantum
+ro.crypto.volume.filenames_mode=adiantum
+</pre>
+
+<aside class="caution"><strong>重要提示</strong>:此设置会引用 FDE,但在 FBE 设备上也需要这么做;它会影响可合并的存储设备。
+</aside>
+
+<p>
+将 <code>fde_sector_size</code> 设置为 4096 可以提高性能,但 Adiantum 无需此设置也可正常运行。设置扇区大小要求为 userdata 分区设置偏移量和对齐方式,且可合并的存储设备必须实现 4096 字节对齐。
+</p>
+<p>
+  在 <code>fstab</code> 中,对 userdata 使用以下选项:
+</p>
+
+<pre class="devsite-click-to-copy">fileencryption=adiantum
+</pre>
+<p>
+要验证您的实现是否有效,请生成错误报告或运行:
+</p>
+
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell dmesg</code>
+</pre>
+<p>
+如果正确启用了 Adiantum,您应该会在内核日志中看到以下内容:
+</p>
+
+<pre class="devsite-click-to-copy">fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
+</pre>
+
+<aside class="note">
+<strong>注意</strong>:对于基于 ARM 的设备,实现名称应完全匹配。如果您没有看到对 <code>neon</code> 的引用,则您的设备也将无法执行。要详细了解如何启用 NEON 指令,请参阅<em><a href="#enable-adiantum-kernel">在内核中启用 Adiantum</a></em> 部分。
+</aside>
+
+<h3 id="fde-devices">支持全盘加密的设备</h3>
+<p>
+要启用 Adiantum 并提高其性能,请在 <code>PRODUCT_PROPERTY_OVERRIDES</code> 中设置以下属性:
+</p>
+
+<pre class="devsite-click-to-copy">ro.crypto.fde_algorithm=adiantum
+ro.crypto.fde_sector_size=4096
+</pre>
+<p>
+将 <code>fde_sector_size</code> 设置为 4096 可以提高性能,但 Adiantum 无需此设置也可正常运行。设置扇区大小要求为 userdata 分区设置偏移量和对齐方式,且可合并的存储设备必须实现 4096 字节对齐。
+</p>
+<p>
+在 <code>fstab</code> 中,对 userdata 设置以下选项:
+</p>
+
+<pre class="devsite-click-to-copy">forceencrypt
+</pre>
+<p>
+要验证您的实现是否有效,请生成错误报告或运行:
+</p>
+
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell dmesg</code>
+</pre>
+
+<p>
+如果正确启用了 Adiantum,您应该会在内核日志中看到以下内容:
+</p>
+
+<pre class="devsite-click-to-copy">device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
+</pre>
+<aside class="note">
+<strong>注意</strong>:对于基于 ARM 的设备,实现名称应完全匹配。如果您没有看到对 <code>neon</code> 的引用,则您的设备也将无法执行。要详细了解如何启用 NEON 指令,请参阅<em><a href="#enable-adiantum-kernel">在内核中启用 Adiantum</a></em> 部分。
+</aside>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/encryption/file-based.html b/zh-cn/security/encryption/file-based.html
index 8186f38..fb433a4 100644
--- a/zh-cn/security/encryption/file-based.html
+++ b/zh-cn/security/encryption/file-based.html
@@ -50,7 +50,7 @@
 这种区分能够使工作资料更加安全,因为这样一来,加密不再只基于启动密码,从而能够同时保护多位用户。
 </p>
 <p>
-Direct Boot API 允许加密感知型应用访问上述任何一个存储空间。应用生命周期会发生一些变化,以便系统在用户的 CE 存储空间因用户在锁定屏幕上首次输入凭据而解锁<em></em>时,或者在工作资料提供<a href="https://developer.android.com/about/versions/nougat/android-7.0.html#android_for_work">工作资料安全验证</a>时,通知应用。无论是否实现了 FBE,运行 Android 7.0 的设备都必须要支持这些新的 API 和生命周期。不过,如果没有启用 FBE,DE 和 CE 存储空间将始终处于解锁状态。
+Direct Boot API 允许加密感知型应用访问上述任何一个存储空间。应用生命周期会发生一些变化,以便系统在用户的 CE 存储空间因用户在锁定屏幕上首次输入凭据而解锁时,或者在工作资料提供<a href="https://developer.android.com/about/versions/nougat/android-7.0.html#android_for_work">工作资料安全验证</a>时,通知应用。<em></em>无论是否实现了 FBE,运行 Android 7.0 的设备都必须要支持这些新的 API 和生命周期。不过,如果没有启用 FBE,DE 和 CE 存储空间将始终处于解锁状态。
 </p>
 <p>
 Android 开源项目 (AOSP) 中提供了 Ext4 和 F2FS 文件系统中的文件级加密的完整实现。在满足相关要求的设备上,只需启用该实现即可使用该功能。选择使用 FBE 的制造商可能想要了解基于所用系统芯片 (SoC) 优化该功能的方法。
@@ -70,7 +70,7 @@
 <ul>
 <li>AOSP 拨号器 (packages/apps/Dialer)</li><li>桌面时钟 (packages/apps/DeskClock)</li><li>LatinIME (packages/inputmethods/LatinIME)*</li><li>“设置”应用 (packages/apps/Settings)*</li><li>SystemUI (frameworks/base/packages/SystemUI)*</li></ul>
 <p>
-<em>* 使用 <code><a href="#supporting-direct-boot-in-system-applications">defaultToDeviceProtectedStorage</a></code> 清单属性的系统应用</em>
+<em>*使用 <code><a href="#supporting-direct-boot-in-system-applications">defaultToDeviceProtectedStorage</a></code> 清单属性的系统应用</em>
 </p>
 <p>
 通过在 AOSP 源代码树的框架或程序包目录中运行 <code>mangrep directBootAware</code> 命令,可以找到更多加密感知型应用和服务的示例。
@@ -80,8 +80,7 @@
 要安全地使用 AOSP 提供的 FBE 实现,设备需要满足以下依赖关系:</p>
 
 <ul>
-<li>对 Ext4 加密或 F2FS 加密的<strong>内核支持</strong>(内核配置选项:<code>EXT4_FS_ENCRYPTION</code> 或 <code>F2FS_FS_ENCRYPTION</code>)
-</li><li>基于 1.0 或 2.0 版 HAL 的 <strong><a href="/security/keystore/index.html">Keymaster 支持</a></strong>。不支持 Keymaster 0.3,因为它既不提供必要的功能,也不能保证为加密密钥提供充分保护。
+<li>对 Ext4 加密或 F2FS 加密的<strong>内核支持</strong>(内核配置选项:<code>EXT4_FS_ENCRYPTION</code> 或 <code>F2FS_FS_ENCRYPTION</code>)</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>内核<strong>加密性能</strong>必须要在使用 AES XTS 时至少达到 50MB/s,以确保良好的用户体验。
 </li><li><strong>硬件信任根</strong>和<strong>验证启动</strong>需要绑定到 Keymaster 初始化进程,以确保未经授权的操作系统无法获取设备加密凭据。</li>
@@ -244,7 +243,7 @@
 </p><ul>
 <li>身份验证令牌</li><li>扩展凭据</li><li>secdiscardable hash</li></ul>
 <p>
-身份验证令牌是一个经过加密和身份验证的令牌<em></em>,由 <a href="/security/authentication/gatekeeper.html">Gatekeeper</a> 在用户成功登录时生成。除非用户提供的身份验证令牌正确无误,否则 TEE 将拒绝用户使用该密钥。如果用户没有任何凭据,则不使用也不需要使用身份验证令牌。
+<em></em>身份验证令牌是一个经过加密和身份验证的令牌,由 <a href="/security/authentication/gatekeeper.html">Gatekeeper</a> 在用户成功登录时生成。除非用户提供的身份验证令牌正确无误,否则 TEE 将拒绝用户使用该密钥。如果用户没有任何凭据,则不使用也不需要使用身份验证令牌。
 </p>
 <p>
 扩展凭据是使用 <code>scrypt</code> 算法进行加盐和扩展处理后的用户凭据。<em></em>实际上,凭据在被传递到 <code>vold</code>(以便传递到 <code>scrypt</code>)之前,会在锁定设置服务中接受一次哈希处理。扩展凭据会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 <code>KM_TAG_APPLICATION_ID</code> 的所有保证。如果用户没有凭据,则不使用也不需要使用扩展凭据。
diff --git a/zh-cn/security/encryption/index.html b/zh-cn/security/encryption/index.html
index 8c3f9d7..b4564cc 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/enhancements/enhancements42.html b/zh-cn/security/enhancements/enhancements42.html
index c044491..6ac92fd 100644
--- a/zh-cn/security/enhancements/enhancements42.html
+++ b/zh-cn/security/enhancements/enhancements42.html
@@ -29,7 +29,7 @@
 
 <li><strong>始终开启的 VPN</strong> - 可以配置 VPN,以确保在建立 VPN 连接之前应用无法访问网络。这有助于防止应用跨其他网络发送数据。</li>
 
-<li><strong>证书锁定</strong> - Android 的核心库现在支持<a href="https://developer.android.com/reference/android/net/http/X509TrustManagerExtensions.html">证书锁定</a>。如果证书未关联到一组应关联的证书,锁定的域将会收到证书验证失败消息。这有助于防范证书授权中心免遭可能的入侵。</li>
+<li><strong>锁住证书</strong> - Android 的核心库现在支持<a href="https://developer.android.com/reference/android/net/http/X509TrustManagerExtensions.html">锁住证书</a>。如果证书未关联到一组应关联的证书,锁住的域将会收到证书验证失败消息。这有助于防范证书授权中心免遭可能的入侵。</li>
 
 <li><strong>改进后的 Android 权限显示方式</strong> - 权限划分到了多个对用户来说更清晰明了的组中。在审核权限时,用户可以点击权限来查看关于相应权限的更多详细信息。</li>
 
@@ -39,11 +39,11 @@
 
 <li><strong>FORTIFY_SOURCE</strong> - Android 现在实现了 <code>FORTIFY_SOURCE</code>,以供系统库和应用用于防范内存损坏。</li>
 
-<li><strong>ContentProvider 默认配置</strong> - 采用 API 17 级的应用会针对每个<a href="https://developer.android.com/reference/android/content/ContentProvider.html">内容提供程序</a>默认将“export”设为“false”,从而缩小应用的默认受攻击面。</li>
+<li><strong>ContentProvider 默认配置</strong> - 默认情况下,对于每个<a href="https://developer.android.com/reference/android/content/ContentProvider.html">内容提供方</a>,选择 API 17 级的应用都会将“export”设为“false”,以缩小应用的默认受攻击面。</li>
 
 <li><strong>加密</strong> - 修改了 SecureRandom 和 Cipher.RSA 的默认实现,以便使用 OpenSSL。为使用 OpenSSL 1.0.1 的 TLSv1.1 和 TLSv1.2 添加了安全套接字支持</li>
 
-<li><strong>安全漏洞修复程序</strong> - 升级了开放源代码库,新增了一些安全漏洞修复程序,其中包括 WebKit、libpng、OpenSSL 和 LibXML。Android 4.2 中还包含针对 Android 特有漏洞的修复程序。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开放源代码项目中提供了相应的修复程序。为了提高安全性,搭载更低版本 Android 的某些设备可能也会包含这些修复程序。</li>
+<li><strong>安全漏洞修复程序</strong> - 升级了开放源代码库,新增了一些安全漏洞修复程序,其中包括 WebKit、libpng、OpenSSL 和 LibXML。Android 4.2 中还包含针对 Android 特有漏洞的修复程序。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开放源代码项目中提供了相应的修复程序。为了提高安全性,搭载更低 Android 版本的某些设备可能也会包含这些修复程序。</li>
 
 </ul>
 
diff --git a/zh-cn/security/index.html b/zh-cn/security/index.html
index 5d699c5..e946acf 100644
--- a/zh-cn/security/index.html
+++ b/zh-cn/security/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>
@@ -85,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/attestation.html b/zh-cn/security/keystore/attestation.html
index 844dbfc..ecc042e 100644
--- a/zh-cn/security/keystore/attestation.html
+++ b/zh-cn/security/keystore/attestation.html
@@ -140,8 +140,7 @@
   </tr>
   <tr>
    <td><code>validity</code></td>
-   <td>两个日期的序列,包含 <a href="/security/keystore/tags#active_datetime">Tag::ACTIVE_DATETIME</a> 和 <a href="/security/keystore/tags#usage_expire_datetime">Tag::USAGE_EXPIRE_DATETIME</a> 的值。
-   这些值是自 1970 年 1 月 1 日以来的毫秒数。
+   <td>两个日期的序列,包含 <a href="/security/keystore/tags#active_datetime">Tag::ACTIVE_DATETIME</a> 和 <a href="/security/keystore/tags#usage_expire_datetime">Tag::USAGE_EXPIRE_DATETIME</a> 的值。这两个值是自 1970 年 1 月 1 日以来的毫秒数。
    有关证书中的正确日期表示法,请参阅 <a href="https://tools.ietf.org/html/rfc5280">RFC 5280</a>。<br />
    如果 <code>Tag::ACTIVE_DATETIME</code> 不存在,则使用 <code>Tag::CREATION_DATETIME</code> 的值。如果 <code>Tag::USAGE_EXPIRE_DATETIME</code> 不存在,则使用批量认证密钥证书的失效日期。</td>
   </tr>
@@ -170,8 +169,7 @@
 <h3 id="attestation-extension">认证扩展</h3>
 <p>
 认证扩展包含对与密钥相关联的密钥 Keymaster 授权的完整描述,其所采用的结构直接对应于 Android 和 Keymaster HAL 中使用的授权列表。授权列表中的各个标记分别由一个 ASN.1 SEQUENCE 条目表示,通过 Keymaster 标记编号进行显式标记,而类型描述符(4 个高值位)则采用掩码处理。</p>
-<p>例如,在 Keymaster 3 中,<code>Tag::PURPOSE</code> 在 types.hal 中被定义为 <code>ENUM_REP | 1</code>。对于认证扩展,<code>ENUM_REP</code> 值会被移除,但留下标记 <code>1</code>。
-(对于 Keymaster 2 及更低版本,<code>KM_TAG_PURPOSE</code> 在 keymaster_defs.h 中定义。)
+<p>例如,在 Keymaster 3 中,<code>Tag::PURPOSE</code> 在 types.hal 中被定义为 <code>ENUM_REP | 1</code>。对于认证扩展,<code>ENUM_REP</code> 值会被移除,但留下标记 <code>1</code>。(对于 Keymaster 2 及更低版本,<code>KM_TAG_PURPOSE</code> 在 keymaster_defs.h 中定义。)
 </p>
 <p>
 根据下表所示,值通过一种简单的方式转换为 ASN.1 类型:</p>
@@ -350,8 +348,7 @@
 <p>
 AuthorizationList 字段均为可选字段并通过 Keymaster 标记值来标识,类型位则采用掩码处理。此类字段使用显式标记,因此还包含一个可指明其 ASN.1 类型的标记,这样更易于解析。
 </p>
-<p>
-要详细了解各个字段的值,如果是 Keymaster 3,请参阅 types.hal,如果是 Keymaster 2 及更低版本,请参阅 keymaster_defs.h。通过省略 KM_TAG 前缀并将其余部分更改为驼峰式大小写形式,Keymaster 标记名称被转换为了字段名称,因此 <code>Tag::KEY_SIZE</code> 变成了 <code>keySize</code>。
+<p>要详细了解各个字段的值,如果是 Keymaster 3,请参阅 types.hal,如果是 Keymaster 2 及更低版本,请参阅 keymaster_defs.h。通过省略 KM_TAG 前缀并将其余部分更改为驼峰式大小写形式,Keymaster 标记名称被转换为了字段名称,因此 <code>Tag::KEY_SIZE</code> 变成了 <code>keySize</code>。
 </p>
 <p class="note">
 <strong>注意</strong>:types.hal 和 keymaster_defs.h 中的很多标记都未包含在该架构中。因为一些标记不适用于不对称密钥,还有一些标记在设备外没有意义,等等。
@@ -516,8 +513,7 @@
   <li><code>ID<sub>1</sub>...ID<sub>n</sub></code> 是原始 ID 值;特定值与特定索引之间的关联取决于实现,因为不同设备将具有不同数量的标识符</li>
   <li><code>||</code> 表示连接</li>
 </ul>
-<p>
-由于 HMAC 输出具有固定大小,因此不需要标头或其他结构就能够查找单个 ID 哈希或 D 结构的 HMAC。除了检查所提供的值以执行认证之外,实现还需要验证 S,具体方法如下:从 S 中提取 D,计算 HMAC(HBK、D)并将其与 S 中的值进行比较,从而确认没有任何单个 ID 遭到修改/损坏。此外,实现必须对所有单个 ID 元素进行常数时间比较,并对 S 进行验证。比较时间必须是常量,不考虑所提供的 ID 数量以及测试的任何部分是否正确匹配。
+<p>由于 HMAC 输出的大小是固定的,因此不需要标头或其他结构就能够查找单个 ID 哈希或 D 结构的 HMAC。实现不仅需要检查所收到的值以执行认证,还需要验证 S。验证 S 的方法是从 S 中提取 D,计算 HMAC(HBK、D),然后将计算结果与 S 中的值进行比较,从而确认没有任何单个 ID 遭到修改/损坏。此外,实现必须对所有单个 ID 元素进行常数时间比较,并对 S 进行验证。比较时间必须是常量,不考虑所提供的 ID 数量以及测试的任何部分是否正确匹配。
 </p>
 <h3 id="hardware-identifiers">硬件标识符</h3>
 <p>
@@ -558,8 +554,7 @@
 <p>
 如果该设备支持 ID 认证,并且密钥认证请求中包含以上一个或多个标记,TEE 会验证带有各个标记的标识符是否与其硬件标识符的副本相匹配。如果有一个或多个标识符不匹配,则整个认证都会失败并显示 <code>ErrorCode::CANNOT_ATTEST_IDS</code>。这种情况也适用于多次带有同一标记的标识符。这在证明 IMEI 时会非常实用(举例而言):一个设备可以配备多个具有多个 IMEI 的无线装置。如果带有每个 <code>ATTESTATION_ID_IMEI</code> 标记的值与设备的其中一个无线装置相匹配,则认证请求有效。这同样适用于所有其他标记。
 </p>
-<p>
-如果认证成功,则使用<a href="#schema">上述架构</a>将经过认证的 ID 添加到已颁发认证证书的<a href="#attestation-extension">认证扩展</a> (OID 1.3.6.1.4.1.11129.2.1.17)。Keymaster 2 认证架构发生的变更以<strong>粗体</strong>显示,并带有注释。
+<p>如果认证成功,则会使用<a href="#attestation-extension">上述架构</a>将经过认证的 ID 添加到所颁发的认证证书的<a href="#schema">认证扩展</a>中 (OID 1.3.6.1.4.1.11129.2.1.17)。Keymaster 2 认证架构发生的变更以<strong>粗体</strong>显示,并带有注释。
 </p>
 
 <h2 id="java-api">Java API</h2>
diff --git a/zh-cn/security/keystore/implementer-ref.html b/zh-cn/security/keystore/implementer-ref.html
index 9d42e63..56c1493 100644
--- a/zh-cn/security/keystore/implementer-ref.html
+++ b/zh-cn/security/keystore/implementer-ref.html
@@ -81,7 +81,7 @@
 <p><strong>版本</strong>:2</p>
 <p>该函数在 Keymaster 2 中引入,并在 Keymaster 3 中被弃用,因为这些信息已在系统属性文件中提供,制造商实现会在启动期间读取这些文件。</p>
 
-<p>配置 Keymaster。该方法在打开设备之后、使用设备之前被调用一次。它用于向 Keymaster 提供 <a href="/security/keystore/tags#os_version">KM_TAG_OS_VERSION</a> 和 <a href="/security/keystore/tags#os_patchlevel">KM_TAG_OS_PATCHLEVEL</a>。
+<p>配置 Keymaster。该方法在打开设备之后、使用设备之前被调用一次。可使用此方法向 Keymaster 提供 <a href="/security/keystore/tags#os_version">KM_TAG_OS_VERSION</a> 和 <a href="/security/keystore/tags#os_patchlevel">KM_TAG_OS_PATCHLEVEL</a>。
 在该方法被调用之前,所有其他方法会返回 <code>KM_ERROR_KEYMASTER_NOT_CONFIGURED</code>。该方法提供的值仅在每次启动时被 Keymaster 接受一次。之后的调用都会返回 <code>KM_ERROR_OK</code>,但不执行任何操作。</p>
 <p>
 如果 Keymaster 实现在安全的硬件中进行,且提供的操作系统版本和补丁程序级别的值与引导加载程序向安全硬件提供的值不匹配(或者引导加载程序未提供任何值),则该方法会返回 <code>KM_ERROR_INVALID_ARGUMENT</code>,所有其他方法仍然返回 <code>KM_ERROR_KEYMASTER_NOT_CONFIGURED</code>。</p>
@@ -146,8 +146,7 @@
   <li><code>Tag::PADDING</code> 用于指定可以使用的填充模式。此参数仅与 ECB 和 CBC 模式相关。</li>
 </ul>
 
-<p>如果指定的是 GCM 分块模式,则提供 <a href="/security/keystore/tags#min_mac_length">Tag::MIN_MAC_LENGTH</a>。
-如果缺少此参数,该方法会返回 <code>ErrorCode::MISSING_MIN_MAC_LENGTH</code>。标记的值为 8 的倍数且介于 96 和 128 之间。</p>
+<p>如果指定的是 GCM 分块模式,则提供 <a href="/security/keystore/tags#min_mac_length">Tag::MIN_MAC_LENGTH</a>。如果缺少此参数,该方法会返回 <code>ErrorCode::MISSING_MIN_MAC_LENGTH</code>。该标记的值为 8 的倍数且介于 96 和 128 之间。</p>
 
 <h4 id="generate_key_hmac_keys">HMAC 密钥</h4>
 
@@ -163,13 +162,13 @@
 <h4 id="key_characteristics">密钥特性</h4>
 
 <p>如果特性参数为非 NULL 值,<code>generateKey</code> 会返回新生成密钥的特性(相应划分到由硬件强制执行的列表和由软件强制执行的列表中)。
-要了解哪些特性会划分到哪个列表中,请参阅 <a href="#get_key_characteristics">getKeyCharacteristics</a>。返回的特性包含为生成密钥而指定的所有参数,<a href="/security/keystore/tags#application_id">Tag::APPLICATION_ID</a> 和 <a href="/security/keystore/tags#application_data">Tag::APPLICATION_DATA</a> 除外。如果这两个标记包含在密钥参数中,则将其从返回的特性中移除,以确保无法通过查看返回的密钥 Blob 找出这两个标记的值。不过,这两个标记以加密形式绑定到密钥 Blob,以便在使用相应密钥时,如果未提供正确的值,使用会失败。<a href="/security/keystore/tags#root_of_trust">Tag::ROOT_OF_TRUST</a> 同样会以加密形式绑定到相应密钥,但在生成或导入密钥期间可以不指定此标记,并且在任何情况下都不会返回此标记。</p>
+要了解哪些特性会划分到哪个列表中,请参阅 <a href="#get_key_characteristics">getKeyCharacteristics</a>。返回的特性包含为生成密钥而指定的所有参数,但 <a href="/security/keystore/tags#application_id">Tag::APPLICATION_ID</a> 和 <a href="/security/keystore/tags#application_data">Tag::APPLICATION_DATA</a> 除外。如果密钥参数中包含这两个标记,为确保无法通过查看返回的密钥 Blob 找到这两个标记的值,系统会将这两个标记从返回的特性中移除。不过,这两个标记以加密形式绑定到密钥 Blob,以便在使用相应密钥时,如果未提供正确的值,使用会失败。<a href="/security/keystore/tags#root_of_trust">Tag::ROOT_OF_TRUST</a> 同样会以加密形式绑定到相应密钥,但在生成或导入密钥期间可以不指定此标记,并且在任何情况下都不会返回此标记。</p>
 
-<p>除了收到的标记外,Trustlet 还会添加 <a href="/security/keystore/tags#origin">Tag::ORIGIN</a>(值为 <code>KeyOrigin::GENERATED</code>);如果相应密钥可抗回滚,还要添加 <a href="/security/keystore/tags#rollback_resistant">Tag::ROLLBACK_RESISTANT</a>。</p>
+<p>除了收到的标记外,Trustlet 还会添加 <a href="/security/keystore/tags#origin">Tag::ORIGIN</a>(值为 <code>KeyOrigin::GENERATED</code>);如果相应密钥可抗回滚,则还会添加 <a href="/security/keystore/tags#rollback_resistant">Tag::ROLLBACK_RESISTANT</a>。</p>
 
 <h4 id="rollback_resistance">抗回滚</h4>
 
-<p>抗回滚意味着,密钥在通过 <a href="#delete_key">deleteKey</a> 或 <a href="#delete_all_keys">deleteAllKeys</a> 删除后,安全硬件会保证它绝对无法再使用。不具抗回滚功能的实现通常会将生成或导入的密钥材料作为密钥 Blob(一种经过加密和身份验证的形式)返回给调用程序。当 Keystore 删除密钥 Blob 后,相应密钥将会消失,但之前已设法获取密钥材料的攻击者可能能够将相应密钥材料恢复到设备上。</p>
+<p>抗回滚意味着,在使用 <a href="#delete_key">deleteKey</a> 或 <a href="#delete_all_keys">deleteAllKeys</a> 删除密钥后,可以通过安全硬件保证绝对无法再使用该等密钥。不具抗回滚功能的实现通常会将生成或导入的密钥材料作为密钥 Blob(一种经过加密和身份验证的形式)返回给调用程序。当 Keystore 删除密钥 Blob 后,相应密钥将会消失,但之前已设法获取密钥材料的攻击者可能能够将相应密钥材料恢复到设备上。</p>
 
 <p>如果安全硬件保证被删除的密钥以后无法被恢复,那么相应密钥便可抗回滚。安全硬件通常是通过将额外的密钥元数据存储在攻击者无法操控的可信位置来做到这一点。在移动设备上,用于实现这一点的机制通常为 Replay Protected Memory Block (RPMB)。由于可创建的密钥数量基本上没有限制,而用于抗回滚的可信存储空间的大小则可能有限制,因此,该方法需要在即使无法为新密钥提供抗回滚功能的情况下同样取得成功。在这种情况下,不得将 <a href="/security/keystore/tags#rollback_resistant">Tag::ROLLBACK_RESISTANT</a> 添加到密钥特性中。</p>
 
@@ -190,7 +189,7 @@
   <li><a href="/security/keystore/tags#algorithm">Tag::ALGORITHM</a>、<a href="/security/keystore/tags#key_size">Tag::KEY_SIZE</a> 和 <a href="/security/keystore/tags#rsa_public_exponent">Tag::RSA_PUBLIC_EXPONENT</a> 是密钥的固有属性。对于任何由硬件来保障安全的密钥,这些标记都将位于由硬件强制执行的列表中。</li>
   <li>由安全硬件支持的 <a href="/security/keystore/tags#digest">Tag::DIGEST</a> 值位于由硬件支持的列表中。不受支持的摘要则位于由软件支持的列表中。</li>
   <li><a href="/security/keystore/tags#padding">Tag::PADDING</a> 的值通常位于由硬件支持的列表中,除非存在这样一种可能性,某种特定的填充模式必须要由软件来执行,在这种情况下,这些值将位于由软件强制执行的列表中。如果 RSA 密钥允许使用不是由安全硬件支持的摘要算法进行 PSS 或 OAEP 填充,则存在这种可能性。</li>
-  <li><a href="/security/keystore/tags#user_secure_id">Tag::USER_SECURE_ID</a> 和 <a href="/security/keystore/tags#mac_length">Tag::USER_AUTH_TYPE</a> 仅在用户身份验证由硬件强制执行时,才由硬件强制执行。要让用户身份验证由硬件强制执行,Keymaster Trustlet 和相关的身份验证 Trustlet 都必须是安全的,且共用一个用于签署和验证身份验证令牌的 HMAC 密钥。要了解详情,请参阅<a href="/security/authentication/">身份验证</a>页面。</li>
+  <li><a href="/security/keystore/tags#user_secure_id">Tag::USER_SECURE_ID</a> 和 <a href="/security/keystore/tags#mac_length">Tag::USER_AUTH_TYPE</a> 仅在用户身份验证是由硬件强制执行时才会由硬件强制执行。要让用户身份验证由硬件强制执行,Keymaster Trustlet 和相关的身份验证 Trustlet 都必须是安全的,且共用一个用于签署和验证身份验证令牌的 HMAC 密钥。要了解详情,请参阅<a href="/security/authentication/">身份验证</a>页面。</li>
   <li><a href="/security/keystore/tags#active_datetime">Tag::ACTIVE_DATETIME</a>、<a href="/security/keystore/tags#origination_expire_datetime">Tag::ORIGINATION_EXPIRE_DATETIME</a> 和 <a href="/security/keystore/tags#usage_expire_datetime">Tag::USAGE_EXPIRE_DATETIME</a> 标记要求能够访问可验证的正确时钟。大多数安全硬件只能访问由非安全操作系统提供的时间信息,这意味着这些标记由软件强制执行。</li>
   <li>对于绑定到硬件的密钥,<a href="/security/keystore/tags#origin">Tag::ORIGIN</a> 始终位于硬件列表中。如果此标记出现在硬件列表中,更高的层级便可据此确定相应密钥是由硬件支持的。</li>
 </ul>
@@ -232,8 +231,7 @@
 
 <h3 id="destroy_attestation_ids">destroyAttestationIds</h3>
 <p><strong>版本</strong>:3</p>
-<p>
-<code>destroyAttestationIds()</code> 方法用于永久停用新的<a href="/security/keystore/attestation#id-attestation">ID 认证</a>功能(该功能是可选功能,但我们强烈推荐)。如果 TEE 无法确保在调用此方法后永久停用相应的 ID 认证,则一定不得实现 ID 认证,在这种情况下,此方法不执行任何操作并返回 <code>ErrorCode::UNIMPLEMENTED</code>。如果支持 ID 认证,则需要实现此方法且必须永久停用未来尝试进行 ID 认证的所有操作。此方法的调用次数不受限制。如果已永久停用 ID 认证,则此方法不会执行任何操作并返回 <code>ErrorCode::OK</code>。</p>
+<p>可以使用 <code>destroyAttestationIds()</code> 方法永久停用新的 <a href="/security/keystore/attestation#id-attestation">ID 认证</a>功能。该功能是一项可选功能,但我们强烈建议您启用该功能。如果 TEE 无法确保在调用此方法后永久停用相应的 ID 认证,则一定不得实现 ID 认证,在这种情况下,此方法不执行任何操作并返回 <code>ErrorCode::UNIMPLEMENTED</code>。如果支持 ID 认证,则需要实现此方法且必须永久停用未来尝试进行 ID 认证的所有操作。此方法的调用次数不受限制。如果已永久停用 ID 认证,则此方法不会执行任何操作并返回 <code>ErrorCode::OK</code>。</p>
 <p>
 此方法只可能返回以下错误代码:<code>ErrorCode::UNIMPLEMENTED</code>(如果不支持 ID 认证)、<code>ErrorCode:OK</code>、<code>ErrorCode::KEYMASTER_NOT_CONFIGURED</code> 或指示无法与安全硬件通信的错误代码之一。
 </p>
@@ -242,7 +240,7 @@
 
 <p><strong>版本</strong>:1、2、3</p>
 
-<p>使用指定的密钥和参数(视情况而定)针对指定的目的开始执行加密操作,并返回用于与 <a href="#update">update</a> 和 <a href="#finish">finish</a> 配合使用以完成操作的操作句柄。该操作句柄还会在经过身份验证的操作中用作“质询”令牌,并且对于此类操作,该操作句柄包含在身份验证令牌的 <code>challenge</code> 字段中。</p>
+<p>使用指定的密钥和参数(视情况而定)针对指定的目的开始执行加密操作,并返回用于与 <a href="#update">update</a> 和 <a href="#finish">finish</a> 配合使用来完成操作的操作句柄。该操作句柄还会在经过身份验证的操作中用作“质询”令牌,并且对于此类操作,该操作句柄包含在身份验证令牌的 <code>challenge</code> 字段中。</p>
 
 <p>Keymaster 实现支持至少 16 个并行操作。Keystore 最多使用 15 个,留一个给 vold 用于对密码进行加密。当 Keystore 有 15 个操作正在进行(已调用 <code>begin</code>,但尚未调用 <code>finish</code> 或 <code>abort</code>)时,如果 Keystore 收到开始第 16 个操作的请求,它会对最近使用最少的操作调用 <code>abort</code>,以便将进行中的操作减少到 14 个,然后再调用 <code>begin</code> 来开始执行新请求的操作。</p>
 
@@ -253,20 +251,20 @@
 <p>在执行此方法期间,如果实现将以下密钥授权放入到了“由硬件强制执行的”特性中,并且相应操作不是公钥操作,那么这些密钥授权将由 Trustlet 来强制执行。即使不符合授权要求,也会允许公钥操作(即使用 RSA 或 EC 密钥进行的 <code>KeyPurpose::ENCRYPT</code> 和 <code>KeyPurpose::VERIFY</code>)成功完成。</p>
 
 <ul>
-  <li><a href="/security/keystore/tags#purpose">Tag::PURPOSE</a>:除非请求的操作是公钥操作,否则 <code>begin()</code> 调用中指定的目的必须与密钥授权中的某个目的一致。如果指定的目的不一致且操作并非公钥操作,则 <code>begin</code> 会返回 <code>ErrorCode::UNSUPPORTED_PURPOSE</code>。公钥操作是不对称加密或验证操作。</li>
+  <li><a href="/security/keystore/tags#purpose">Tag::PURPOSE</a>:除非请求的操作是公钥操作,否则在 <code>begin()</code> 调用中指定的目的必须与密钥授权中的某个目的一致。如果指定的目的不一致且操作并非公钥操作,则 <code>begin</code> 会返回 <code>ErrorCode::UNSUPPORTED_PURPOSE</code>。公钥操作是不对称加密或验证操作。</li>
   <li>只有可信 UTC 时间源可用时才能强制执行 <a href="/security/keystore/tags#active_datetime">Tag::ACTIVE_DATETIME</a>。如果当前日期和时间早于此标记的值,该方法会返回 <code>ErrorCode::KEY_NOT_YET_VALID</code>。</li>
   <li>只有可信 UTC 时间源可用时才能强制执行 <a href="/security/keystore/tags#origination_expire_datetime">Tag::ORIGINATION_EXPIRE_DATETIME</a>。如果当前日期和时间晚于此标记的值,并且目的是 <code>KeyPurpose::ENCRYPT</code> 或 <code>KeyPurpose::SIGN</code>,该方法会返回 <code>ErrorCode::KEY_EXPIRED</code>。</li>
   <li>只有可信 UTC 时间源可用时才能强制执行 <a href="/security/keystore/tags#usage_expire_datetime">Tag::USAGE_EXPIRE_DATETIME</a>。如果当前日期和时间晚于此标记的值,并且目的是 <code>KeyPurpose::DECRYPT</code> 或 <code>KeyPurpose::VERIFY</code>,该方法会返回 <code>ErrorCode::KEY_EXPIRED</code>。</li>
-  <li><a href="/security/keystore/tags#min_seconds_between_ops">Tag::MIN_SECONDS_BETWEEN_OPS</a> 会与指明相应密钥上次使用时间的可信相对计时器进行比较。如果上次使用时间加上此标记的值后小于当前时间,该方法会返回 <code>ErrorCode::KEY_RATE_LIMIT_EXCEEDED</code>。要查看重要的实现详情,请参阅<a href="/security/keystore/tags#min_seconds_between_ops">标记说明</a>。</li>
+  <li><a href="/security/keystore/tags#min_seconds_between_ops">Tag::MIN_SECONDS_BETWEEN_OPS</a> 会与指明相应密钥上次使用时间的可信相对计时器进行比较。如果上次使用时间加上此标记的值小于当前时间,该方法会返回 <code>ErrorCode::KEY_RATE_LIMIT_EXCEEDED</code>。要查看重要的实现详情,请参阅<a href="/security/keystore/tags#min_seconds_between_ops">标记说明</a>。</li>
   <li><a href="/security/keystore/tags#max_uses_per_boot">Tag::MAX_USES_PER_BOOT</a> 会与用于跟踪自系统启动以来相应密钥使用次数的安全计数器进行比较。如果之前的使用次数已超过此标记的值,该方法会返回 <code>ErrorCode::KEY_MAX_OPS_EXCEEDED</code>。</li>
-  <li>仅当相应密钥还有 <a href="/security/keystore/tags#auth_timeout">Tag::AUTH_TIMEOUT</a> 时,<a href="/security/keystore/tags#user_secure_id">Tag::USER_SECURE_ID</a>才会由此方法强制执行。如果相应密钥同时具有这两个标记,此方法必须在 <code>inParams</code> 中收到有效的 <a href="/security/keystore/tags#auth_token">Tag::AUTH_TOKEN</a>。要使身份验证令牌有效,必须满足以下所有条件:
+  <li>仅当相应密钥还具有 <a href="/security/keystore/tags#auth_timeout">Tag::AUTH_TIMEOUT</a> 时,此方法才会强制执行 <a href="/security/keystore/tags#user_secure_id">Tag::USER_SECURE_ID</a>。如果相应密钥同时具有这两个标记,此方法必须在 <code>inParams</code> 中收到有效的 <a href="/security/keystore/tags#auth_token">Tag::AUTH_TOKEN</a>。要使身份验证令牌有效,必须满足以下所有条件:
    <ul>
      <li>HMAC 字段可正确验证。</li>
      <li>相应密钥中有至少一个 <a href="/security/keystore/tags#user_secure_id">Tag::USER_SECURE_ID</a> 值与令牌中至少一个安全 ID 值一致。</li>
      <li>相应密钥具有与令牌中的身份验证类型一致的 <a href="/security/keystore/tags#mac_length">Tag::USER_AUTH_TYPE</a>。</li>
    </ul>
   <p>如果上述条件中有任何一个不满足,该方法就会返回 <code>ErrorCode::KEY_USER_NOT_AUTHENTICATED</code>。</p></li>
-  <li><a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a> 允许调用程序指定随机数或初始化矢量 (IV)。如果相应密钥没有此标记,但调用程序为此方法提供了 <a href="/security/keystore/tags#nonce">Tag::NONCE</a>,则返回 <code>ErrorCode::CALLER_NONCE_PROHIBITED</code>。</li>
+  <li><a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a> 允许调用程序指定随机数或初始化矢量 (IV)。如果相应密钥没有此标记,但调用程序向此方法提供了 <a href="/security/keystore/tags#nonce">Tag::NONCE</a>,则返回 <code>ErrorCode::CALLER_NONCE_PROHIBITED</code>。</li>
   <li><a href="/security/keystore/tags#bootloader_only">Tag::BOOTLOADER_ONLY</a> 用于指定相应密钥只能由引导加载程序使用。如果在引导加载程序执行完毕后调用此方法,并且提供的是仅限引导加载程序使用的密钥,则返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</li>
 </ul>
 
@@ -309,8 +307,8 @@
 <p>如果分块模式是 <code>BlockMode::GCM</code> 或 <code>BlockMode::CTR</code>,那么指定的填充模式必须是 <code>PaddingMode::NONE</code>。如果分块模式是 <code>BlockMode::ECB</code> 或 <code>BlockMode::CBC</code>,那么指定的填充模式可以是 <code>PaddingMode::NONE</code> 或 <code>PaddingMode::PKCS7</code>。如果填充模式不符合这些条件,则返回 <code>ErrorCode::INCOMPATIBLE_PADDING_MODE</code>。</p>
 
 <p>如果分块模式是 <code>BlockMode::CBC</code>、<code>BlockMode::CTR</code> 或 <code>BlockMode::GCM</code>,则需要初始化矢量或随机数。
-在大多数情况下,调用程序都不应提供 IV 或随机数。在这种情况下,Keymaster 实现会生成一个随机 IV 或随机数,并通过 <code>outParams</code> 中的 <a href="/security/keystore/tags#nonce">Tag::NONCE</a> 将其返回。
-CBC 和 CTR IV 均为 16 个字节。GCM 随机数为 12 个字节。如果密钥授权包含 <a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a>,那么调用程序可以通过 <code>inParams</code> 中的 <a href="/security/keystore/tags#nonce">Tag::NONCE</a> 提供 IV/随机数。如果在 <a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a> 未获得授权时提供了随机数,则返回 <code>ErrorCode::CALLER_NONCE_PROHIBITED</code>。如果在 <a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a> 获得了授权的情况下未提供随机数,则生成一个随机 IV/随机数。</p>
+在大多数情况下,调用程序都不应提供 IV 或随机数。在这种情况下,Keymaster 实现会生成一个随机 IV 或随机数,并通过 <a href="/security/keystore/tags#nonce">outParams</a> 中的 <code>outParams</code> 将其返回。
+CBC 和 CTR IV 均为 16 个字节。GCM 随机数为 12 个字节。如果密钥授权包含 <a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a>,调用程序可能会通过 <code>inParams</code> 中的 <a href="/security/keystore/tags#nonce">Tag::NONCE</a> 提供 IV/随机数。如果在 <a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a> 未获得授权的情况下提供了随机数,则会返回 <code>ErrorCode::CALLER_NONCE_PROHIBITED</code>。如果在 <a href="/security/keystore/tags#caller_nonce">Tag::CALLER_NONCE</a> 获得授权的情况下未提供随机数,则会生成随机 IV/随机数。</p>
 
 <h4 id="begin_hmac_keys">HMAC 密钥</h4>
 
@@ -332,7 +330,7 @@
 
 <h4 id="error_handling">错误处理</h4>
 
-<p>如果此方法返回除 <code>ErrorCode::OK</code> 之外的错误代码,那么相应操作会被中止,操作句柄也会变为无效。如果以后再将该句柄与此方法、<a href="#finish">finish</a> 或 <a href="#abort">abort</a> 配合使用,都会返回 <code>ErrorCode::INVALID_OPERATION_HANDLE</code>。</p>
+<p>如果此方法返回除 <code>ErrorCode::OK</code> 之外的错误代码,那么相应操作会被中止,操作句柄也会变为无效。如果以后再将该句柄与此方法、<a href="#finish">finish</a> 或 <a href="#abort">abort</a> 配合使用,则都会返回 <code>ErrorCode::INVALID_OPERATION_HANDLE</code>。</p>
 
 <h4 id="update_authorization_enforcement">密钥授权强制执行</h4>
 
@@ -344,7 +342,7 @@
   <li>没有 <a href="/security/keystore/tags#auth_timeout">Tag::AUTH_TIMEOUT</a></li>
 </ul>
 
-<p>在这种情况下,密钥需要针对各项操作的授权,并且 update 方法会在 <code>inParams</code> 参数中收到 <a href="/security/keystore/tags#auth_token">Tag::AUTH_TOKEN</a>。HMAC 会验证该令牌有效且包含匹配的安全用户 ID,与密钥的 <a href="/security/keystore/tags#mac_length">Tag::USER_AUTH_TYPE</a> 匹配,并且包含质询字段中当前操作的操作句柄。如果不符合这些条件,则返回 <code>ErrorCode::KEY_USER_NOT_AUTHENTICATED</code>。</p>
+<p>在这种情况下,对于每一项操作,密钥都会要求提供授权,并且 update 方法会在 <code>inParams</code> 参数中收到 <a href="/security/keystore/tags#auth_token">Tag::AUTH_TOKEN</a>。HMAC 会验证该令牌有效且包含匹配的安全用户 ID,与密钥的 <a href="/security/keystore/tags#mac_length">Tag::USER_AUTH_TYPE</a> 匹配,并且包含质询字段中当前操作的操作句柄。如果不符合这些条件,则返回 <code>ErrorCode::KEY_USER_NOT_AUTHENTICATED</code>。</p>
 
 <p>调用程序会在每次调用 <a href="#update">update</a> 和 <a href="#finish">finish</a> 时提供身份验证令牌。实现只需对该令牌验证一次(如果它倾向于这么做)。</p>
 
@@ -361,7 +359,7 @@
 
 <h4 id="update_aes_keys">AES 密钥</h4>
 
-<p>AES GCM 模式支持通过 <code>inParams</code> 参数中的 <a href="/security/keystore/tags#associated_data">Tag::ASSOCIATED_DATA</a> 标记提供的“相关身份验证数据”。
+<p>AES GCM 模式支持通过 <code>inParams</code> 参数的中的 <a href="/security/keystore/tags#associated_data">Tag::ASSOCIATED_DATA</a> 标记提供的“相关身份验证数据”。
 可以在重复调用(如果数据太大而无法在单个分块中发送,那么重复调用非常重要)中提供相关数据,但始终先于要加密或解密的数据提供。update 调用可以同时接收相关数据以及要加密/解密的数据,但后续 update 中不会包含相关数据。如果调用程序已在某次调用 update 时提供了要加密/解密的数据,若再次向 update 调用提供相关数据,则返回 <code>ErrorCode::INVALID_TAG</code>。</p>
 
 <p>对于 GCM 加密,此标记会通过 <a href="#finish">finish</a> 附加到密文中。在解密期间,向上一次 update 调用提供的数据的最后 <code>Tag::MAC_LENGTH</code> 个字节就是此标记。由于 <a href="#update">update</a> 的指定调用无法得知自己是否为最后一次调用,因此它会处理除标记长度之外的所有数据,并缓冲调用 <a href="#finish">finish</a> 期间可能用到的标记数据。</p>
@@ -370,11 +368,11 @@
 
 <p><strong>版本</strong>:1、2、3</p>
 
-<p>用于完成通过 <a href="#begin">begin</a> 开始且正在进行的操作,负责处理通过 <a href="#update">update</a> 提供的所有尚未处理的数据。</p>
+<p>用于完成通过 <a href="#begin">begin</a> 开始且正在进行的操作,负责处理 <a href="#update">update</a> 所提供的所有尚未处理的数据。</p>
 
 <p>此方法是操作期间调用的最后一个方法,因此会返回所有处理后的数据。</p>
 
-<p>无论是成功完成还是返回错误,此方法都会结束相应操作,从而使收到的操作句柄无效。如果以后再将该句柄与此方法、<a href="#update">update</a> 或 <a href="#abort">abort</a> 配合使用,都会返回 <code>ErrorCode::INVALID_OPERATION_HANDLE</code>。</p>
+<p>无论是成功完成还是返回错误,此方法都会结束相应操作,从而使收到的操作句柄无效。如果以后再将该句柄与此方法、<a href="#update">update</a> 或 <a href="#abort">abort</a> 配合使用,则都会返回 <code>ErrorCode::INVALID_OPERATION_HANDLE</code>。</p>
 
 <p>签名操作将返回签名作为输出。验证操作将接受 <code>signature</code> 参数中的签名,并且不会返回任何输出。</p>
 
@@ -387,7 +385,7 @@
   <li>没有 <a href="/security/keystore/tags#auth_timeout">Tag::AUTH_TIMEOUT</a></li>
 </ul>
 
-<p>在这种情况下,密钥需要针对各项操作的授权,并且 update 方法会在 <code>inParams</code> 参数中收到 <a href="/security/keystore/tags#auth_token">Tag::AUTH_TOKEN</a>。HMAC 会验证该令牌有效且包含匹配的安全用户 ID,与密钥的 <a href="/security/keystore/tags#mac_length">Tag::USER_AUTH_TYPE</a> 匹配,并且包含质询字段中当前操作的操作句柄。如果不符合这些条件,则返回 <code>ErrorCode::KEY_USER_NOT_AUTHENTICATED</code>。</p>
+<p>在这种情况下,对于每一项操作,密钥都会要求提供授权,并且 update 方法会在 <code>inParams</code> 参数中收到 <a href="/security/keystore/tags#auth_token">Tag::AUTH_TOKEN</a>。HMAC 会验证该令牌有效且包含匹配的安全用户 ID,与密钥的 <a href="/security/keystore/tags#mac_length">Tag::USER_AUTH_TYPE</a> 匹配,并且包含质询字段中当前操作的操作句柄。如果不符合这些条件,则返回 <code>ErrorCode::KEY_USER_NOT_AUTHENTICATED</code>。</p>
 
 <p>调用程序会在每次调用 <a href="#update">update</a> 和 <a href="#finish">finish</a> 时提供身份验证令牌。实现只需对该令牌验证一次(如果它倾向于这么做)。</p>
 
@@ -398,9 +396,8 @@
 <ul>
   <li><code>PaddingMode::NONE</code>:对于非填充式签名和加密操作,如果收到的数据比密钥短,那么在签名/加密之前,在数据左侧填充零来补齐。如果数据与密钥一样长度,但数值较大,则返回 <code>ErrorCode::INVALID_ARGUMENT</code>。对于验证和解密操作,数据必须与密钥一样长。否则返回 <code>ErrorCode::INVALID_INPUT_LENGTH.</code></li>
   <li><code>PaddingMode::RSA_PSS</code>:对于 PSS 填充式签名操作,PSS 盐不得短于 20 个字节,并且是随机生成的。
-  盐可以更长;参考实现使用的是长度最大的盐。
-  调用 <a href="#begin">begin</a> 时在 <code>inputParams</code> 中使用 <a href="/security/keystore/tags#digest">Tag::DIGEST</a> 指定的摘要会用作 PSS 摘要算法,而 SHA1 会用作 MGF1 摘要算法。</li>
-  <li><code>PaddingMode::RSA_OAEP</code>:调用 <a href="#begin">begin</a> 时在 <code>inputParams</code> 中使用 <a href="/security/keystore/tags#digest">Tag::DIGEST</a> 指定的摘要会用作 OAEP 摘要算法,而 SHA1 会用作 MGF1 摘要算法。</li>
+  盐可以更长;参考实现使用的是长度最大的盐。调用 <a href="/security/keystore/tags#digest">begin</a> 时使用 <code>inputParams</code> 中的 <a href="#begin">Tag::DIGEST</a> 指定的摘要会用作 PSS 摘要算法,而 SHA1 会用作 MGF1 摘要算法。</li>
+  <li><code>PaddingMode::RSA_OAEP</code>:调用 <a href="/security/keystore/tags#digest">begin</a> 时使用 <code>inputParams</code> 中的 <a href="#begin">Tag::DIGEST</a> 指定的摘要会用作 OAEP 摘要算法,而 SHA1 会用作 MGF1 摘要算法。</li>
 </ul>
 
 <h4 id="finish_ecdsa_keys">ECDSA 密钥</h4>
@@ -414,14 +411,14 @@
 <ul>
   <li><code>BlockMode::ECB</code> 或 <code>BlockMode::CBC</code>:如果填充模式是 <code>PaddingMode::NONE</code>,并且数据长度不是 AES 分块大小的倍数,则返回 <code>ErrorCode::INVALID_INPUT_LENGTH</code>。如果填充模式是 <code>PaddingMode::PKCS7</code>,则按照 PKCS#7 规范填充数据。
   请注意,PKCS#7 建议,如果数据长度是分块长度的倍数,则添加一个额外的填充分块。</li>
-  <li><code>BlockMode::GCM</code>:在加密期间,处理所有明文之后,会计算此标记(<a href="/security/keystore/tags#mac_length">Tag::MAC_LENGTH</a> 个字节)并将其附加到返回的密文。在解密期间,会将最后 <a href="/security/keystore/tags#mac_length">Tag::MAC_LENGTH</a> 个字节作为标记处理。如果标记验证失败,则返回 <code>ErrorCode::VERIFICATION_FAILED</code>。</li>
+  <li><code>BlockMode::GCM</code>:在加密期间,处理所有明文之后,会计算此标记(<a href="/security/keystore/tags#mac_length">Tag::MAC_LENGTH</a> 个字节)并将其附加到返回的密文中。在解密期间,会将最后 <a href="/security/keystore/tags#mac_length">Tag::MAC_LENGTH</a> 个字节作为标记处理。如果标记验证失败,则返回 <code>ErrorCode::VERIFICATION_FAILED</code>。</li>
 </ul>
 
 <h3 id="abort">abort</h3>
 
 <p><strong>版本</strong>:1、2、3</p>
 
-<p>用于中止正在进行的操作。在调用 abort 之后,如果后续再将收到的操作句柄与 <a href="#update">update</a>、<a href="#finish">finish</a> 或 <a href="#abort">abort</a> 配合使用,则返回 <code>ErrorCode::INVALID_OPERATION_HANDLE</code>。</p>
+<p>用于中止正在进行的操作。调用 abort 之后,如果后续再将收到的操作句柄与 <a href="#update">update</a>、<a href="#finish">finish</a> 或 <a href="#abort">abort</a> 配合使用,则返回 <code>ErrorCode::INVALID_OPERATION_HANDLE</code>。</p>
 
 <h3 id="get_supported_algorithms">get_supported_algorithms</h3>
 
diff --git a/zh-cn/security/keystore/index.html b/zh-cn/security/keystore/index.html
index 131decc..6d84280 100644
--- a/zh-cn/security/keystore/index.html
+++ b/zh-cn/security/keystore/index.html
@@ -65,8 +65,7 @@
 <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><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 功能的访问权限。Keystore 守护进程负责存储“密钥 Blob”。密钥 Blob 中包含已加密的实际密钥材料,因此 Keystore 可以存储这些材料,但无法使用或显示这些材料。
 </p>
 <p>
 <strong>keymasterd</strong> 是一个 HIDL 服务器,可提供对 Keymaster TA 的访问权限。(此名称未进行标准化,仅用于说明概念。)
diff --git a/zh-cn/security/keystore/tags.html b/zh-cn/security/keystore/tags.html
index 2a9dcec..362f196 100644
--- a/zh-cn/security/keystore/tags.html
+++ b/zh-cn/security/keystore/tags.html
@@ -21,7 +21,7 @@
   -->
 
 <p>本页提供了一些对 Keymaster HAL 实现人员很有帮助的详细信息。
-其中介绍了 HAL 中的每个标记、提供相应标记的 Keymaster 版本以及相应标记是否可重复使用。除非标记说明中另有注明,否则以下所有标记都是在密钥生成期间用于指定密钥特性。</p>
+其中介绍了 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">
 platform/hardware/libhardware/include/hardware/keymaster_defs.h</a></code> 中定义的。</p>
 
@@ -93,7 +93,7 @@
 <p><strong>版本</strong>:1、2、3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定使用相应密钥时均必须要提供的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
+<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定使用相应密钥时均须提供的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
 
 <p>此标记的内容以加密形式绑定到相应密钥,这意味着,如果有不轨人士有权访问安全域的所有机密内容,但无权访问此标记的内容,必须要确保他们在不对此标记的内容进行暴力破解攻击的情况下无法解密相应密钥,应用可通过指定足够的高熵内容来防范这一行为。<em></em></p>
 
@@ -104,7 +104,7 @@
 <p><strong>版本</strong>:1、2、3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定使用相应密钥时均必须要提供的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
+<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定使用相应密钥时均须提供的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
 
 <p>此标记的内容以加密形式绑定到相应密钥,这意味着,即使有不轨人士有权访问安全域的所有机密内容,也应无权访问此标记的内容,必须要确保他们无法解密相应密钥(在不对此标记的内容进行暴力破解攻击的情况下)。<em></em></p>
 
@@ -204,9 +204,9 @@
 <p><strong>版本</strong>:1、2、3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>用于指定授权在多长时间内使用相应密钥(以秒数计,从通过身份验证开始算起)。如果 <a href="#user_secure_id">Tag::USER_SECURE_ID</a> 存在而此标记不存在,那么每次使用相应密钥时都需要通过身份验证(要详细了解各项操作的身份验证流程,请参阅 <a href="/security/keystore/implementer-ref#begin">begin</a>)。</p>
+<p>用于指定授权在多长时间内使用相应密钥(以秒数计,从通过身份验证开始算起)。如果 <a href="#user_secure_id">Tag::USER_SECURE_ID</a> 存在而此标记不存在,那么每次使用相应密钥时都需要进行身份验证(要详细了解按操作进行身份验证的流程,请参阅 <a href="/security/keystore/implementer-ref#begin">begin</a>)。</p>
 
-<p>此标记的值是一个 32 位的整数,用于指定可在多长时间内使用相应密钥(以秒数计,从使用通过 <a href="#user_secure_id">Tag::USER_AUTH_TYPE</a> 指定的身份验证方法对通过 <a href="#mac_length">Tag::USER_SECURE_ID</a> 指定的用户成功进行身份验证后开始算起)。</p>
+<p>此标记的值是一个 32 位的整数,用于指定可在多长时间内使用相应密钥(以秒计,从使用由 <a href="#mac_length">Tag::USER_AUTH_TYPE</a> 指定的身份验证方法对由 <a href="#user_secure_id">Tag::USER_SECURE_ID</a> 指定的用户成功进行身份验证后开始算起)。</p>
 
 <h2 id="auth_token">Tag::AUTH_TOKEN</h2>
 
@@ -242,7 +242,7 @@
 } keymaster_key_blob_usage_requirements_t;
 </pre>
 
-<p>可以在密钥生成期间指定此标记,以便要求在指定条件下才可以使用生成的密钥。此标记需要和密钥特性一起通过 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 返回。
+<p>可以在密钥生成期间指定此标记,以便要求在指定条件下才可以使用生成的密钥。此标记需要和密钥特性一起从 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 返回。
 如果调用程序指定了值为 <code>KeyBlobUsageRequirements::STANDALONE</code> 的 <code>Tag::BLOB_USAGE_REQUIREMENTS</code>,则 Trustlet 会返回一个可在没有文件系统支持的情况下使用的密钥 Blob。这对于具有已加密磁盘的设备至关重要:在使用 Keymaster 密钥解密磁盘之前,此类设备的文件系统可能一直无法使用。</p>
 
 <h2 id="block_mode">Tag::BLOCK_MODE</h2>
@@ -310,7 +310,7 @@
 
 <p>此标记为布尔值,因此可能的值为 true(如果此标记存在)和 false(如果此标记不存在)。</p>
 
-<p>此标记仅用于 AES 密钥,并且仅与 CBC、CTR 和 GCM 分块模式有关。如果此标记不存在,则实现应拒绝执行向 <a href="/security/keystore/implementer-ref#begin">begin</a> 提供 <a href="#nonce">Tag::NONCE</a> 的所有操作并显示 <code>ErrorCode::CALLER_NONCE_PROHIBITED</code>。</p>
+<p>此标记仅用于 AES 密钥,并且仅与 CBC、CTR 和 GCM 分块模式有关。如果此标记不存在,则实现应拒绝执行任何向 <a href="/security/keystore/implementer-ref#begin">begin</a> 提供 <a href="#nonce">Tag::NONCE</a> 的操作并显示 <code>ErrorCode::CALLER_NONCE_PROHIBITED</code>。</p>
 
 <h2 id="creation_datetime">Tag::CREATION_DATETIME</h2>
 
@@ -449,7 +449,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>
 
@@ -465,7 +465,7 @@
 <p><strong>版本</strong>:1、2、3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>用于提供或返回进行 AES GCM、CBC 或 CTR 加密/解密时使用的随机数或初始化矢量 (IV)。在加密和解密操作期间,可以将此标记提供给 <a href="/security/keystore/implementer-ref#begin">begin</a>。仅当相应密钥带有 <a href="#caller_nonce">Tag::CALLER_NONCE</a> 时,此标记才会提供给 <a href="/security/keystore/implementer-ref#begin">begin</a>。如果未提供此标记,Keymaster 将随机生成适当的随机数或 IV 并通过 begin 将其返回。</p>
+<p>用于提供或返回进行 AES GCM、CBC 或 CTR 加密/解密时使用的随机数或初始化矢量 (IV)。在加密和解密操作期间,可以将此标记提供给 <a href="/security/keystore/implementer-ref#begin">begin</a>。仅当相应密钥带有 <a href="#caller_nonce">Tag::CALLER_NONCE</a> 时,此标记才会提供给 <a href="/security/keystore/implementer-ref#begin">begin</a>。如果未提供此标记,Keymaster 将会随机生成并通过 begin 返回一个适当的随机数或 IV。</p>
 
 <p>此标记的值是一个 Blob(任意长度的字节数数组)。所允许的长度取决于模式:GCM 随机数的长度为 12 个字节;CBC IV 和 CTR IV 的长度为 16 个字节。</p>
 
@@ -515,7 +515,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="#purpose">KeyPurpose::SIGN</a> 或 <a href="#purpose">KeyPurpose::ENCRYPT</a> 的密钥,操作会失败并显示 <code>ErrorCode::KEY_EXPIRED</code>。</p>
+<p>用于指定相应密钥无法再用于签名和加密目的的过期日期和时间。在此之后,如果尝试使用向 <a href="/security/keystore/implementer-ref#begin">begin</a> 提供 <a href="#purpose">KeyPurpose::SIGN</a> 或 <a href="#purpose">KeyPurpose::ENCRYPT</a> 的密钥,操作都会失败并显示 <code>ErrorCode::KEY_EXPIRED</code>。</p>
 
 <p>此标记的值是一个 64 位的整数,表示距 1970 年 1 月 1 日的毫秒数。</p>
 
@@ -630,7 +630,7 @@
 <p><strong>版本</strong>:1、2、3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>用于表明相应密钥可抗回滚,也就是说,当通过 <a href="/security/keystore/implementer-ref#delete_key">deleteKey</a> 或 <a href="/security/keystore/implementer-ref#delete_all_keys">deleteAllKeys</a> 删除相应密钥后,可保证相应密钥已被永久删除且无法再使用。如果密钥不带此标记,那么在被删除后,可能能够从备份中恢复。</p>
+<p>用于表明相应密钥可抗回滚,也就是说,当通过 <a href="/security/keystore/implementer-ref#delete_key">deleteKey</a> 或 <a href="/security/keystore/implementer-ref#delete_all_keys">deleteAllKeys</a> 删除相应密钥后,可保证该密钥已被永久删除且无法再使用。如果密钥不带此标记,那么在被删除后,可能能够从备份中恢复。</p>
 
 <p>此标记为布尔值,因此可能的值为 true(如果此标记存在)和 false(如果此标记不存在)。</p>
 
@@ -663,7 +663,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="#purpose">KeyPurpose::VERIFY</a> 或 <a href="#purpose">KeyPurpose::DECRYPT</a> 的密钥,操作会失败并显示 <code>ErrorCode::KEY_EXPIRED</code>。</p>
+<p>用于指定相应密钥无法再用于验证和解密目的的过期日期和时间。在此之后,如果尝试使用向 <a href="/security/keystore/implementer-ref#begin">begin</a> 提供 <a href="#purpose">KeyPurpose::VERIFY</a> 或 <a href="#purpose">KeyPurpose::DECRYPT</a> 的密钥,操作都会失败并显示 <code>ErrorCode::KEY_EXPIRED</code>。</p>
 
 <p>此标记的值是一个 64 位的整数,表示距 1970 年 1 月 1 日的毫秒数。</p>
 
@@ -672,7 +672,7 @@
 <p><strong>版本</strong>:1、2、3、4</p>
 <p><strong>是否可重复使用</strong>?否</p>
 
-<p>用于指定可以使用哪些类型的用户身份验证程序来授权使用相应密钥。请求 Keymaster 执行所用密钥带有此标记的操作时,要为 Keymaster 提供一个身份验证令牌,并且该令牌的 <code>authenticator_type</code> 字段需与此标记中的值一致。例如,<code>(ntoh(token.authenticator_type) &amp; auth_type_tag_value) != 0</code>,其中 <code>ntoh</code> 是一个函数,用于将按网络字节序保存的整数转换成按主机字节序保存的整数,而 <code>auth_type_tag_value</code> 是此标记的值。</p>
+<p>用于指定可以使用哪些类型的用户身份验证程序来授权使用相应密钥。请求 Keymaster 执行所用密钥带有此标记的操作时,要为 Keymaster 提供一个身份验证令牌,并且该令牌的 <code>authenticator_type</code> 字段需与此标记中的值一致。例如,<code>(ntoh(token.authenticator_type) &amp; auth_type_tag_value) != 0</code>,其中 <code>ntoh</code> 是一个函数,用于将按网络字节序保存的整数转换成按主机字节序保存的整数,<code>auth_type_tag_value</code> 是此标记的值。</p>
 
 <p>此标记的值是以下枚举值的位掩码(32 位整数):</p>
 
diff --git a/zh-cn/security/overview/acknowledgements.html b/zh-cn/security/overview/acknowledgements.html
index a9694d3..ed42547 100644
--- a/zh-cn/security/overview/acknowledgements.html
+++ b/zh-cn/security/overview/acknowledgements.html
@@ -20,11 +20,111 @@
       limitations under the License.
   -->
 
-<p>Android 安全团队衷心感谢以下个人和团队帮助提高 Android 安全性。他们有的发现了安全漏洞,并负责地通过 AOSP 错误跟踪工具<a href="https://www.google.com/appserve/security-bugs/m2/new">安全错误报告</a>模板向我们报告,有的提交了对 Android 安全性具有积极影响的代码(包括符合<a href="https://www.google.com/about/appsecurity/patch-rewards/">补丁程序奖励</a>计划条件的代码),帮助提高了 Android 安全性。</p>
+<p>Android 安全团队衷心感谢以下个人和团队帮助提高 Android 安全性。他们有的是发现了安全漏洞,并负责任地通过 AOSP 错误跟踪工具<a href="https://www.google.com/appserve/security-bugs/m2/new">安全错误报告</a>模板向我们报告,有的是提交了对 Android 安全性具有积极影响的代码(包括符合<a href="https://www.google.com/about/appsecurity/patch-rewards/">补丁程序奖励</a>计划条件的代码)。</p>
 
-<h2 id="2018">2018 年</h2>
+<h2 id="2019">2019</h2>
+<p>从 2018 年起,安全致谢信息按月列出,2019 年还会继续如此。过去几年的致谢信息是列在一起的。
+</p>
+
+<h4 id="jan-2019">1 月</h4>
+
+<table>
+  <colgroup><col width="85%" />
+  <col width="15%" />
+  </colgroup><tbody><tr>
+   <th>研究人员</th>
+   <th>CVE</th>
+  </tr>
+  <tr>
+   <td>奇虎 360 科技有限公司成都安全响应中心的 Chong Wang (<a href="https://www.weibo.com/csddl" class="external">weibo.com/csddl</a>)</td>
+   <td>CVE-2018-9589</td>
+  </tr>
+  <tr>
+   <td>D2.Y.P(属于 NON 团队)</td>
+   <td>CVE-2018-9594</td>
+  </tr>
+  <tr>
+   <td><a href="https://www.linkedin.com/in/dzima" class="external">Dzmitry Lukyanenka</a></td>
+   <td>CVE-2018-9587</td>
+  </tr>
+  <tr>
+   <td><a href="http://c0reteam.org/" class="external">C0RE</a> 团队的 <a href="mailto:[email protected]" class="external">Hanxiang Wen</a> 和周明建 (<a href="https://twitter.com/Mingjian_Zhou" class="external">@Mingjian_Zhou</a>)</td>
+   <td>CVE-2018-6241</td>
+  </tr>
+  <tr>
+   <td>Google Project Zero 的 Jann Horn</td>
+   <td>CVE-2018-17182、CVE-2018-18281</td>
+  </tr>
+  <tr>
+   <td>Google 的 Maddie Stone</td>
+   <td>CVE-2018-9586</td>
+  </tr>
+  <tr>
+   <td>Niky1235 (<a href="https://twitter.com/jiych_guru" class="external">@jiych_guru</a>)</td>
+   <td>CVE-2018-9584</td>
+  </tr>
+  <tr>
+   <td>Google 的 Ricky Wai</td>
+   <td>CVE-2018-9582</td>
+  </tr>
+  <tr>
+   <td><a href="https://xlab.tencent.com/en/" class="external">腾讯安全玄武实验室</a>的王永科 (<a href="https://twitter.com/rudykewang" class="external">@Rudykewang</a>) 和张向前 (<a href="https://twitter.com/h3rb0x" class="external">@h3rb0x</a>)</td>
+   <td>CVE-2018-9585、CVE-2018-9588</td>
+  </tr>
+  <tr>
+   <td>奇虎 360 科技有限公司成都安全响应中心的韩子诺 (<a href="http://weibo.com/ele7enxxh" class="external">weibo.com/ele7enxxh</a>)</td>
+   <td>CVE-2018-9583、CVE-2018-9590、CVE-2018-9591、CVE-2018-9592、CVE-2018-9593</td>
+  </tr>
+</tbody></table>
+
+<h2 id="2018">2018</h2>
 <p>2018 年的安全致谢信息将按月列出。过去几年的致谢信息是列在一起的。</p>
 
+<h4 id="dec-2018">12 月</h4>
+
+<table>
+  <tbody><tr>
+   <th>研究人员</th>
+   <th>CVE</th>
+  </tr>
+  <tr>
+   <td>丁保增 (<a href="https://twitter.com/sploving1" class="external">@sploving1</a>)</td>
+   <td>CVE-2017-18320</td>
+  </tr>
+  <tr>
+   <td>Daniel Micay (<a href="https://twitter.com/DanielMicay" class="external">@DanielMicay</a>)</td>
+   <td>CVE-2018-9567</td>
+  </tr>
+  <tr>
+   <td>奇虎 360 科技有限公司 Alpha 团队的陈豪和龚广</td>
+   <td>CVE-2018-9557</td>
+  </tr>
+  <tr>
+   <td>美国堪萨斯州立大学 Ghera 项目团队的 Joydeep Mitra 和 Venkatesh-Prasad Ranganath</td>
+   <td>CVE-2018-9548</td>
+  </tr>
+  <tr>
+   <td><a href="http://c0reteam.org/" class="external">C0RE 团队</a>的周明建 (<a href="https://twitter.com/Mingjian_Zhou" class="external">@Mingjian_Zhou</a>)</td>
+   <td>CVE-2018-9547</td>
+  </tr>
+  <tr>
+   <td>Newroot (<a href="https://twitter.com/newroot" class="external">@newroot</a>)</td>
+   <td>CVE-2018-9560</td>
+  </tr>
+  <tr>
+   <td>Scott Bauer (<a href="https://twitter.com/ScottyBauer1" class="external">@ScottyBauer1</a>)</td>
+   <td>CVE-2018-9555、CVE-2018-9558、CVE-2018-9566</td>
+  </tr>
+  <tr>
+   <td>阿里巴巴的王勇 (<a href="https://twitter.com/ThomasKing2014" class="external">@ThomasKing2014</a>)</td>
+   <td>CVE-2018-9568</td>
+  </tr>
+  <tr>
+   <td>奇虎 360 科技有限公司成都安全响应中心的韩子诺 (<a href="http://weibo.com/ele7enxxh" class="external">weibo.com/ele7enxxh</a>)</td>
+   <td>CVE-2018-9549、CVE-2018-9552、CVE-2018-9553、CVE-2018-9562</td>
+  </tr>
+</tbody></table>
+
 <h4 id="nov-2018">11 月</h4>
 
 <table>
@@ -61,7 +161,7 @@
    <td>CVE-2018-9571、CVE-2018-9572、CVE-2018-9574、CVE-2018-9575</td>
   </tr>
   <tr>
-   <td><a href="https://xlab.tencent.com/en/" class="external">腾讯安全玄武实验室</a>的王永科 (<a href="https://twitter.com/rudykewang" class="external">@Rudykewang</a>) 和 Xiangqian Zhang (<a href="https://twitter.com/h3rb0x" class="external">@h3rb0x</a>)</td>
+   <td><a href="https://xlab.tencent.com/en/" class="external">腾讯安全玄武实验室</a>的王永科 (<a href="https://twitter.com/rudykewang" class="external">@Rudykewang</a>) 和张向前 (<a href="https://twitter.com/h3rb0x" class="external">@h3rb0x</a>)</td>
    <td>CVE-2018-9540、CVE-2018-9541</td>
   </tr>
   <tr>
@@ -126,7 +226,7 @@
    <td>CVE-2018-9499</td>
   </tr>
   <tr>
-   <td><a href="xlab.tencent.com">腾讯安全玄武实验室</a>的王永科 (<a href="https://twitter.com/rudykewang">@Rudykewang</a>) 和 Xiangqian Zhang (<a href="https://twitter.com/h3rb0x">@h3rb0x</a>)</td>
+   <td><a href="xlab.tencent.com">腾讯安全玄武实验室</a>的王永科 (<a href="https://twitter.com/rudykewang">@Rudykewang</a>) 和张向前 (<a href="https://twitter.com/h3rb0x">@h3rb0x</a>)</td>
    <td>CVE-2018-9502、CVE-2018-9508、CVE-2018-9509、CVE-2018-9510</td>
   </tr>
   <tr>
@@ -331,7 +431,7 @@
    <td>CVE-2018-9411</td>
   </tr>
   <tr>
-   <td>Tencent Blade 团队</td>
+   <td>Tencent Blade Team</td>
    <td>CVE-2018-9421、CVE-2018-9420</td>
   </tr>
   <tr>
@@ -649,7 +749,7 @@
    <td>CVE-2017-13249、CVE-2017-13248、CVE-2017-13264</td>
   </tr>
   <tr>
-   <td>蚂蚁金服巴斯光年安全实验室的<a href=" https://twitter.com/wish_wu">吴潍浠</a> (<a href="http://www.weibo.com/wishlinux">@wish_wu</a>)</td>
+   <td>蚂蚁金服巴斯光年安全实验室的<a href="http://www.weibo.com/wishlinux">吴潍浠</a> (<a href=" https://twitter.com/wish_wu">@wish_wu</a>)</td>
    <td>CVE-2017-13259、CVE-2017-13272</td>
   </tr>
   <tr>
@@ -974,7 +1074,7 @@
    <td>CVE-2016-8413、CVE-2016-8477、CVE-2017-0392、CVE-2017-0521、CVE-2017-0531、CVE-2017-0576、CVE-2017-8260</td>
   </tr>
   <tr>
-   <td>腾讯科恩实验室 (<a href="https://twitter.com/keen_lab">@keen_lab</a>) 的 Di Shen (<a href="https://twitter.com/returnsme">@returnsme</a>)</td>
+   <td>腾讯科恩实验室 (<a href="https://twitter.com/keen_lab">@keen_lab</a>) 的沈迪 (<a href="https://twitter.com/returnsme">@returnsme</a>)</td>
    <td>CVE-2016-8412、CVE-2016-8427、CVE-2016-8444、CVE-2016-10287、CVE-2017-0334、CVE-2017-0403、CVE-2017-0427、CVE-2017-0456、CVE-2017-0457、CVE-2017-0525、CVE-2017-8265</td>
   </tr>
   <tr>
@@ -1593,7 +1693,7 @@
 
 <p><a href="http://jaq.alibaba.com">阿里巴巴移动安全团队</a>的 Dawei Peng (<a href="http://weibo.com/u/5622360291">Vinc3nt4H</a>)</p>
 
-<p>腾讯科恩实验室 (<a href="https://twitter.com/keen_lab">@keen_lab</a>) 的 Di Shen (<a href="https://twitter.com/returnsme">@returnsme</a>)</p>
+<p>腾讯科恩实验室 (<a href="https://twitter.com/keen_lab">@keen_lab</a>) 的沈迪 (<a href="https://twitter.com/returnsme">@returnsme</a>)</p>
 
 <p>Google 的 Dianne Hackborn</p>
 
@@ -1619,7 +1719,7 @@
 
 <p><a href="http://www.ms509.com">MS509Team</a> 的 En He (<a href="https://twitter.com/heeeeen4x">@heeeeen4x</a>)</p>
 
-<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>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 实验室的陈耿佳 (<a href="https://twitter.com/@chengjia4574">@chengjia4574</a>)</p>
 
@@ -1821,7 +1921,7 @@
 
 <p><a href="http://www.trendmicro.com">趋势科技</a><a href="http://blog.trendmicro.com/trendlabs-security-intelligence/category/mobile/">移动威胁响应团队</a>的<a href="http://weibo.com/wishlinux">吴潍浠</a> (<a href="https://twitter.com/wish_wu">@wish_wu</a>)</p>
 
-<p><a href="http://c0reteam.org">C0RE 团队</a>的 <a href="mailto:[email protected]">Xiaodong Wang</a></p>
+<p><a href="http://c0reteam.org">C0RE 团队</a>的<a href="mailto:[email protected]"> Xiaodong Wang</a></p>
 
 <p>印第安纳大学布卢明顿分校的 <a href="mailto:[email protected]">Xiaofeng Wang</a></p>
 
@@ -1934,7 +2034,7 @@
 
 <p>奇虎 360 C0RE 团队的 Lei Wu</p>
 
-<p><a href="http://k33nteam.org/">碁震安全研究团队</a> (<a href="https://twitter.com/k33nteam">@K33nTeam</a>) 的 Marco Grassi (<a href="https://twitter.com/marcograss">@marcograss</a>)</p>
+<p><a href="https://twitter.com/k33nteam">碁震安全研究团队</a> (<a href="http://k33nteam.org/">@K33nTeam</a>) 的 Marco Grassi (<a href="https://twitter.com/marcograss">@marcograss</a>)</p>
 
 <p>EmberMitre Ltd 的 Mark Carter (<a href="https://twitter.com/hanpingchinese">@hanpingchinese</a>)</p>
 
@@ -2007,8 +2107,7 @@
 
 <p><a href="http://www.search-lab.hu/">Search-Lab Ltd.</a> 的 Imre Rad</p>
 
-<p><a href="http://thejh.net/">Jann Horn</a>
-<a href="https://android-review.googlesource.com/#/c/98197/">
+<p><a href="http://thejh.net/">Jann Horn</a><a href="https://android-review.googlesource.com/#/c/98197/">
 <img style="vertical-align:middle;" src="../images/tiny-robot.png" alt="绿色机器人补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/>
 </a></p>
 
@@ -2030,8 +2129,7 @@
 
 <p>犹他大学的 <a href="http://www.cs.utah.edu/~rsas/">Raimondas Sasnauskas</a></p>
 
-<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Robert Craig
-<a href="https://android-review.googlesource.com/#/q/owner:%22Robert+Craig+%253Crpcraig%2540tycho.ncsc.mil%253E%22+status:merged">
+<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Robert Craig<a href="https://android-review.googlesource.com/#/q/owner:%22Robert+Craig+%253Crpcraig%2540tycho.ncsc.mil%253E%22+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
 <p><a href="http://www.samsung.com">Samsung Mobile</a></p>
@@ -2040,15 +2138,13 @@
 
 <p>Sebastian Brenza</p>
 
-<p>EC SPRIDE 达姆施塔特工业大学<a href="https://blogs.uni-paderborn.de/sse/">安全软件工程团队</a>的 Siegfried Rasthofer <a href="mailto:[email protected]">[email protected]</a>)</p>
+<p>EC SPRIDE 达姆施塔特工业大学<a href="https://blogs.uni-paderborn.de/sse/">安全软件工程团队</a>的 Siegfried Rasthofer (<a href="mailto:[email protected]">[email protected]</a>)</p>
 
 <p><a href="http://www.sonymobile.com">索尼移动</a></p>
 
-<p><a href="https://www.sit.fraunhofer.de/">Fraunhofer SIT</a> 移动安全测试实验室的 Stephan Huber (<a href="mailto:[email protected]">[email protected]</a>)
-</p>
+<p><a href="https://www.sit.fraunhofer.de/">Fraunhofer SIT</a> 移动安全测试实验室的 Stephan Huber (<a href="mailto:[email protected]">[email protected]</a>)</p>
 
-<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Stephen Smalley
-<a href="https://android-review.googlesource.com/#/q/owner:%22Stephen+Smalley+%253Csds%2540tycho.nsa.gov%253E%22+status:merged">
+<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Stephen Smalley<a href="https://android-review.googlesource.com/#/q/owner:%22Stephen+Smalley+%253Csds%2540tycho.nsa.gov%253E%22+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
 <p>EC SPRIDE 达姆施塔特工业大学<a href="http://sseblog.ec-spride.de/">安全软件工程团队</a>的 Steven Arzt (<a href="mailto:[email protected]">[email protected]</a>)</p>
@@ -2069,9 +2165,7 @@
 
 <p><a href="https://www.facebook.com">Facebook</a> 的 <a href="http://www.shackleton.io/">Will Shackleton</a></p>
 
-<p><a href="http://www.linkedin.com/in/billcroberts">
-William Roberts</a> (<a href="mailto:[email protected]">[email protected]</a>)
-<a href="https://android-review.googlesource.com/#/q/owner:bill.c.roberts%2540gmail.com+status:merged">
+<p><a href="http://www.linkedin.com/in/billcroberts">William Roberts</a> (<a href="mailto:[email protected]">[email protected]</a>)<a href="https://android-review.googlesource.com/#/q/owner:bill.c.roberts%2540gmail.com+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
 <p>印第安纳大学布卢明顿分校的 <a href="http://www.informatics.indiana.edu/xw7/">Xiaofeng Wang</a> (<a href="mailto:[email protected]">[email protected]</a>)</p>
@@ -2096,8 +2190,7 @@
 
 <p><a href="http://appliedcybersecurity.com/">Applied Cybersecurity LLC</a> 的 Jon Sawyer (<a href="mailto:[email protected]">[email protected]</a>)</p>
 
-<p><a href="http://www.accuvant.com/">Accuvant LABS</a> 的 Joshua J. Drake of (<a href="https://twitter.com/jduck">@jduck</a>)
-<a href="https://android-review.googlesource.com/#/q/change:72228+OR+change:72229">
+<p><a href="http://www.accuvant.com/">Accuvant LABS</a> 的 Joshua J. Drake (<a href="https://twitter.com/jduck">@jduck</a>)<a href="https://android-review.googlesource.com/#/q/change:72228+OR+change:72229">
 <img style="vertical-align:middle" src="../images/patchreward.png" alt="补丁程序奖励符号" title="此人符合参加补丁程序奖励计划的条件!"/></a></p>
 
 <p>Kan Yuan</p>
@@ -2116,19 +2209,15 @@
 
 <p><a href="https://securityresear.ch/">Roee Hay</a>(<a href="https://twitter.com/roeehay">@roeehay</a>、<a href="mailto:[email protected]">[email protected]</a>)</p>
 
-<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Robert Craig
-<a href="https://android-review.googlesource.com/#/q/owner:%22Robert+Craig+%253Crpcraig%2540tycho.ncsc.mil%253E%22+status:merged">
+<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Robert Craig<a href="https://android-review.googlesource.com/#/q/owner:%22Robert+Craig+%253Crpcraig%2540tycho.ncsc.mil%253E%22+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
 <p>IOActive 的 Ruben Santamarta (<a href="https://twitter.com/reversemode">@reversemode</a>)</p>
 
-<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Stephen Smalley
-<a href="https://android-review.googlesource.com/#/q/owner:%22Stephen+Smalley+%253Csds%2540tycho.nsa.gov%253E%22+status:merged">
+<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Stephen Smalley<a href="https://android-review.googlesource.com/#/q/owner:%22Stephen+Smalley+%253Csds%2540tycho.nsa.gov%253E%22+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
-<p><a href="http://www.linkedin.com/in/billcroberts">
-William Roberts</a> (<a href="mailto:[email protected]">[email protected]</a>)
-<a href="https://android-review.googlesource.com/#/q/owner:bill.c.roberts%2540gmail.com+status:merged">
+<p><a href="http://www.linkedin.com/in/billcroberts">William Roberts</a> (<a href="mailto:[email protected]">[email protected]</a>)<a href="https://android-review.googlesource.com/#/q/owner:bill.c.roberts%2540gmail.com+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
 <p>印第安纳大学布卢明顿分校的 Xiaorui Pan (<a href="mailto:[email protected]">[email protected]</a>)</p>
@@ -2147,19 +2236,15 @@
 
 <p>柏林工业大学的 Ravishankar Borgaonkari (<a href="https://twitter.com/raviborgaonkar">@raviborgaonkar</a>)</p>
 
-<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Robert Craig
-<a href="https://android-review.googlesource.com/#/q/owner:%22Robert+Craig+%253Crpcraig%2540tycho.ncsc.mil%253E%22+status:merged">
+<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Robert Craig<a href="https://android-review.googlesource.com/#/q/owner:%22Robert+Craig+%253Crpcraig%2540tycho.ncsc.mil%253E%22+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
 <p><a href="https://securityresear.ch/">Roee Hay</a>(<a href="https://twitter.com/roeehay">@roeehay</a>、<a href="mailto:[email protected]">[email protected]</a>)</p>
 
-<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Stephen Smalley
-<a href="https://android-review.googlesource.com/#/q/owner:%22Stephen+Smalley+%253Csds%2540tycho.nsa.gov%253E%22+status:merged">
+<p>美国国家安全局<a href="https://www.nsa.gov/research/ia_research/">可信系统研究团队</a>的 Stephen Smalley<a href="https://android-review.googlesource.com/#/q/owner:%22Stephen+Smalley+%253Csds%2540tycho.nsa.gov%253E%22+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
-<p><a href="http://www.linkedin.com/in/billcroberts">
-William Roberts</a> (<a href="mailto:[email protected]">[email protected]</a>)
-<a href="https://android-review.googlesource.com/#/q/owner:bill.c.roberts%2540gmail.com+status:merged">
+<p><a href="http://www.linkedin.com/in/billcroberts">William Roberts</a> (<a href="mailto:[email protected]">[email protected]</a>)<a href="https://android-review.googlesource.com/#/q/owner:bill.c.roberts%2540gmail.com+status:merged">
 <img style="vertical-align:middle" src="../images/tiny-robot.png" alt="补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/></a></p>
 
 </div>
diff --git a/zh-cn/security/overview/app-security.html b/zh-cn/security/overview/app-security.html
index a039312..d0d60c0 100644
--- a/zh-cn/security/overview/app-security.html
+++ b/zh-cn/security/overview/app-security.html
@@ -21,26 +21,26 @@
   -->
 
 <h2 id="elements-of-applications">应用元素</h2>
-<p>Android 提供了一个适用于移动设备的开放源代码平台和应用环境。核心操作系统基于 Linux 内核。Android 应用通常都是使用 Java 编程语言编写的,并在 Dalvik 虚拟机中运行。不过,也可以使用本机代码编写应用。应用是通过文件扩展名为 .apk 的单个文件安装的。</p>
-<p>Android 应用的主要构造块包括:</p>
+<p>Android 提供了一个适用于移动设备的开放源代码平台和应用环境。核心操作系统基于 Linux 内核。Android 应用通常都是使用 Java 编程语言编写的,并在 Dalvik 虚拟机中运行。不过,也可以使用原生代码编写应用。应用是通过文件扩展名为 .apk 的单个文件安装的。</p>
+<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> 文件是一个控制文件,用于告诉系统如何处理应用中的所有顶层组件(具体来说就是下面介绍的 Activity、服务、广播接收器和内容提供程序)。该文件还用于指定需要哪些权限。</p>
   </li>
   <li>
-    <p><strong>Activity</strong>:<a href="https://developer.android.com/guide/topics/fundamentals/activities.html">Activity</a> 通常是指面向用户的单个任务的代码,通常包括向用户显示界面,但也并不一定这样,有些 Activity 就从不显示界面。通常情况下,应用的入口点是应用的其中一项活动。</p>
+    <p><strong>Activity</strong>:<a href="https://developer.android.com/guide/topics/fundamentals/activities.html">Activity</a> 通常是指面向用户的单个任务的代码,通常包括向用户显示界面,但也并非一定如此,有些 Activity 就从不显示界面。通常情况下,应用的入口点是应用的其中一个 Activity。</p>
   </li>
   <li>
-    <p><strong>服务</strong>:<a href="https://developer.android.com/guide/topics/fundamentals/services.html">服务</a>是指在后台运行的一段代码。服务可以在自己的进程中运行,也可以在其他应用的进程中运行。其他组件会“绑定”到某项服务,并通过远程过程调用来调用该服务的方法。比如媒体播放器就是一项服务:即使用户退出媒体选择界面,也可能仍然希望音乐继续播放。即使界面已关闭,服务也可使音乐继续播放。</p>
+    <p><strong>服务</strong>:<a href="https://developer.android.com/guide/topics/fundamentals/services.html">Service</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">BroadcastReceiver</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>
+<h2 id="the-android-permission-model-accessing-protected-apis">Android 权限模型:访问受保护的 API</h2>
 <p>Android 上的所有应用均在<a href="/security/app-sandbox">应用沙盒</a>内运行。
 默认情况下,Android 应用只能访问有限的系统资源。系统负责管理 Android 应用对资源的访问权限。如果资源使用不当或被恶意使用,可能会给用户体验、网络或设备上的数据带来不利影响。</p>
-<p>这些限制是通过多种不同的形式实现的。有些功能会因 Android 有意未提供针对敏感功能的 API(例如,Android 中没有用于直接操控 SIM 卡的 Android API)而受到限制。在某些情况下,角色分离能够提供一种安全措施,就像按应用隔离存储空间一样。在其他情况下,敏感 API 旨在供可信应用使用,并由一种称为“权限”的安全机制进行保护。</p>
+<p>这些限制是通过多种不同的形式实现的。有些功能会因 Android 有意未提供敏感功能的 API(例如,Android 中没有用于直接操控 SIM 卡的 API)而受到限制。在某些情况下,角色分离能够提供一种安全措施,就像按应用隔离存储空间一样。在其他情况下,敏感 API 旨在供可信应用使用,并由一种称为“权限”的安全机制进行保护。</p>
 <p>这些受保护的 API 包括:</p>
 <ul>
   <li>摄像头功能</li>
@@ -50,19 +50,19 @@
   <li>短信/彩信功能</li>
   <li>网络/数据连接</li>
 </ul>
-<p>这些资源只能通过操作系统进行访问。要使用设备上受保护的 API,应用必须在其清单中定义所需的功能。在准备安装应用时,系统会向用户显示一个对话框,其中会注明应用请求的权限并询问是否继续安装。如果用户选择继续安装,系统会认定用户已授予应用请求的所有权限。用户不能单独授予或拒绝个别权限,而是必须要一起授予或拒绝应用请求的所有权限。</p>
-<p>获得授权后,应用只要安装在设备上,便会一直拥有这些权限。为了避免用户混淆,系统不会再次通知用户向应用授予的权限,而核心操作系统中包含的应用或由原始设备制造商 (OEM) 绑定的应用不会向用户请求权限。应用卸载后,权限也会被移除,因此如果用户之后重新安装卸载的应用,系统会再次显示应用请求的权限。</p>
+<p>这些资源只能通过操作系统进行访问。要使用设备上受保护的 API,应用必须在其清单中定义所需的功能。在准备安装应用时,系统会向用户显示一个对话框,其中会注明应用申请的权限并询问是否继续安装。如果用户选择继续安装,系统会认定用户已授予应用申请的所有权限。用户不能单独授予或拒绝个别权限,而是必须要一起授予或拒绝应用申请的所有权限。</p>
+<p>获得授权后,应用只要安装在设备上,便会一直拥有这些权限。为了避免用户混淆,系统不会再次通知用户向应用授予的权限,而核心操作系统中包含的应用或由原始设备制造商 (OEM) 预装的应用不会向用户申请权限。应用卸载后,权限也会被移除,因此如果用户之后重新安装卸载的应用,系统会再次显示应用申请的权限。</p>
 <p>在设备设置中,用户可以查看之前安装的应用的权限。此外,用户还可以根据需要在全局范围内停用某些功能,例如停用 GPS、无线功能或 WLAN。</p>
-<p>如果应用尝试使用未在其清单中声明的受保护功能,权限失败通常会导致系统向应用抛回一个安全异常。受保护 API 权限检查会在最底层被强制执行,以防止出现规避行为。<em></em>图 2 中显示了如果应用在安装时请求获得受保护 API 的访问权限,会导致系统向用户显示的消息示例。</p>
-<p>如需关于系统默认权限的说明,请访问:<a href="https://developer.android.com/reference/android/Manifest.permission.html">https://developer.android.com/reference/android/Manifest.permission.html</a>。应用可以声明自己的权限以供其他应用使用。上述位置中未列出此类权限。</p>
-<p>在定义权限时,protectionLevel 属性用于告诉系统如何让用户知道哪些应用需要或可以获得相应权限。如需关于如何创建和使用应用特有权限的详细信息,请访问:<a href="https://developer.android.com/guide/topics/security/security.html">https://developer.android.com/guide/topics/security/security.html</a>。</p>
-<p>有些设备功能(例如,发送短信广播 Intent 的功能)不会供第三方应用使用,但可供原始设备制造商 (OEM) 预先安装的应用使用。这些应用使用 signatureOrSystem 权限。</p>
+<p>如果应用尝试使用未在其清单中声明的受保护功能,权限失败通常会导致系统向应用抛回一个安全异常。受保护 API 权限检查会在最底层被强制执行,以防止出现规避行为。<em></em>图 2 中显示了如果应用在安装时申请受保护 API 的访问权限,会导致系统向用户显示的消息示例。</p>
+<p>如需关于系统默认权限的说明,请访问:<a href="https://developer.android.com/reference/android/Manifest.permission.html">https://developer.android.com/reference/android/Manifest.permission.html</a>。应用可以声明自己提供的权限,以供其他应用使用。上述页面中未列出此类权限。</p>
+<p>在定义权限时,protectionLevel 属性用于告诉系统如何让用户知道哪些应用需要或可以获得相应权限。如需详细了解如何创建和使用应用特有权限,请访问:<a href="https://developer.android.com/guide/topics/security/security.html">https://developer.android.com/guide/topics/security/security.html</a>。</p>
+<p>有些设备功能(例如,发送短信广播 Intent 的功能)不会供第三方应用使用,但可供原始设备制造商 (OEM) 预装的应用使用。这些应用使用 signatureOrSystem 权限。</p>
 <h2 id="how-users-understand-third-party-applications">用户如何了解第三方应用</h2>
-<p>当用户与第三方应用互动时,Android 会尽力让用户清楚这一情况,并让用户知道这些应用具备的功能。在安装任何应用之前,系统都会向用户显示一条明晰的消息,让用户知道要安装的应用请求获得的各项权限。安装完毕后,系统不会再次提示用户确认任何权限。</p>
+<p>当用户与第三方应用互动时,Android 会尽力让用户清楚这一情况,并让用户知道这些应用具备的功能。在安装任何应用之前,系统都会向用户显示一条明晰的消息,让用户知道要安装的应用申请获得的各项权限。安装完毕后,系统不会再次提示用户确认任何权限。</p>
 <p>在安装前一刻显示权限的原因有很多。这时用户正在主动查看应用、开发者和功能方面的信息,以确定其是否符合自己的需求和期望。同样非常重要的一点是,他们尚未对要安装的应用做出心理或财务方面的承诺,并且可以轻松地将要安装的应用与其他替代应用进行比较。</p>
-<p>有些其他平台会使用不同的方式通知用户,即在每个会话开始时或用户正在使用应用时请求权限。Android 的愿景是让用户能够随意在应用之间无缝切换。每次都要求用户确认会拖慢用户的操作速度,而且会导致 Android 无法提供良好的用户体验。如果让用户在安装应用时查看权限,用户便可以在不愿意授予权限时选择不予安装。</p>
-<p>此外,许多界面研究表明,过度提示用户会导致用户在看到任何对话框时都选择“确定”。Android 的安全目标之一是向用户有效地传达重要的安全信息,而使用让用户习惯性忽略的对话框则无法做到这一点。如果只向用户提供一次重要信息并且仅在重要时刻提供,用户更有可能慎重思考他们要同意的是什么。</p>
-<p>有些平台会选择完全不显示与应用功能有关的任何信息。这种方式会导致用户无法轻松了解和讨论应用功能。尽管无法使所有用户都是在充分了解相关信息的情况下做出决定,但 Android 权限模式可让众多用户轻松获取与应用相关的信息。例如,如果遇到意外的权限请求,经验更丰富的用户可能会询问有关应用功能的关键问题,并在 <a href="htts://play.google.com">Google Play</a> 等所有用户都可以看到的位置分享他们的疑问。</p>
+<p>有些其他平台会使用不同的方式通知用户,即在每个会话开始时或用户正在使用应用时申请权限。Android 的愿景是让用户能够随意在应用之间无缝切换。每次都要求用户确认会拖慢用户的操作速度,而且会导致 Android 无法提供良好的用户体验。如果让用户在安装应用时查看权限,用户便可以在不愿意授予权限时选择不予安装。</p>
+<p>此外,许多人机界面研究表明,过度提示用户会导致用户在看到任何对话框时都选择“确定”。Android 的安全目标之一是向用户有效地传达重要的安全信息,而使用让用户习惯性忽略的对话框则无法做到这一点。如果只向用户提供一次重要信息并且仅在重要时刻提供,用户更有可能慎重思考他们要同意的是什么。</p>
+<p>有些平台会选择完全不显示与应用功能有关的任何信息。这种方式会导致用户无法轻松了解和讨论应用功能。尽管无法使所有用户都是在充分了解相关信息的情况下做出决定,但 Android 权限模式可让众多用户轻松获取与应用相关的信息。例如,如果遇到意外的权限申请,经验更丰富的用户可能会提出有关应用功能的质问,并在 <a href="htts://play.google.com">Google Play</a> 等所有用户都可以看到的位置分享他们的疑问。</p>
 <table>
   <tbody><tr>
     <td><strong>应用安装时显示权限 - Google 地图</strong></td>
@@ -94,7 +94,7 @@
 </ul>
 <p>虽然可以使用其他机制(例如,网络套接字或全局可写文件)来实现 IPC,但上面这些都是建议使用的 Android IPC 框架。建议 Android 开发者遵循保护用户数据及避免引入安全漏洞方面的最佳做法。</p>
 <h2 id="cost-sensitive-apis">费用敏感 API</h2>
-<p>费用敏感 API 指可能会给用户或网络带来费用的任何功能。Android 平台已将费用敏感 API 放入由操作系统控制的受保护 API 列表中。如果有第三方应用请求使用费用敏感 API,必须要由用户授予明确的权限,它们才能使用这些 API。这些 API 包括:</p>
+<p>费用敏感 API 指可能会给用户或网络带来费用的任何功能。Android 平台已将费用敏感 API 放入由操作系统控制的受保护 API 列表中。如果有第三方应用申请使用这些 API,必须要由用户明确授权,它们才能使用这些 API。这些 API 包括:</p>
 <ul>
   <li>电话</li>
   <li>短信/彩信</li>
@@ -102,7 +102,7 @@
   <li>应用内结算</li>
   <li>NFC 访问</li>
 </ul>
-<p>Android 4.2 进一步增强了对使用短信的控制。如果有应用尝试向使用付费服务的短代码发送短信(可能会产生额外的费用),Android 将会通知用户。用户可以选择是允许还是阻止该应用发送短信。</p>
+<p>Android 4.2 进一步增强了对使用短信的控制。如果有应用尝试向使用付费服务的短码发送短信(可能会产生额外的费用),Android 将会通知用户。用户可以选择是允许还是阻止该应用发送短信。</p>
 <h2 id="sim-card-access">SIM 卡访问</h2>
 <p>第三方应用无法对 SIM 卡进行底层访问。操作系统负责处理与 SIM 卡之间的所有通信,包括访问 SIM 卡内存中的个人信息(通讯录)。应用也无法访问 AT 命令,因为这些命令完全由无线接口层 (RIL) 进行管理。RIL 不会为这些命令提供任何高层 API。</p>
 <h2 id="personal-information">个人信息</h2>
@@ -110,19 +110,19 @@
 <img alt="只能通过受保护的 API 访问敏感用户数据" src="../images/permissions_check.png" id="figure2"/>
 <p class="img-caption">
   <strong>图 2.</strong> 只能通过受保护的 API 访问敏感的用户数据</p>
-<p>可能包含个人信息或个人身份信息(例如,通讯录和日历)的系统内容提供程序在创建时便已拥有明确确定的权限。这种精细的设计可让用户清楚地知道哪些类型的信息可能会提供给相应应用。在安装过程中,第三方应用可能会请求获得访问这些资源的权限。获得授权后,应用便可以进行安装,并且只要安装在设备上,便会一直有权访问请求的数据。</p>
+<p>可能包含个人信息或个人身份信息(例如,通讯录和日历)的系统内容提供程序在创建时便已拥有明确确定的权限。这种精细的设计可让用户清楚地知道哪些类型的信息可能会提供给相应应用。在安装过程中,第三方应用可能会申请这些资源的访问权限。获得授权后,应用便可以进行安装,并且只要安装在设备上,便会一直有权访问最初申请访问的数据。</p>
 <p>默认情况下,收集个人信息的所有应用都会仅限特定应用访问这些数据。如果某个应用选择通过 IPC 将数据提供给其他应用,那么这个授予访问权限的应用便可以限制由操作系统强制执行的 IPC 机制的权限。</p>
 <h2 id="sensitive-data-input-devices">敏感数据输入设备</h2>
-<p>Android 设备经常会提供可让应用与周围环境进行互动的敏感数据输入设备(例如,摄像头、麦克风或 GPS)。对于要使用这些设备的第三方应用,必须先由用户通过使用 Android 操作系统权限向其明确提供使用权限。安装应用时,安装程序会以提供名称的方式请求用户授予使用相应传感器的权限。</p>
+<p>Android 设备经常会提供可让应用与周围环境进行互动的敏感数据输入设备(例如,摄像头、麦克风或 GPS)。对于要使用这些设备的第三方应用,必须先由用户通过使用 Android 操作系统权限向其明确提供使用权限。安装应用时,安装程序会以提供名称的方式请用户授予使用相应传感器的权限。</p>
 <p>如果某个应用想要知道用户所在的位置,则需要获得获取用户位置信息的权限。安装应用时,安装程序会询问用户是否允许该应用获取用户的位置信息。如果用户不希望任何应用获取其位置信息,可以随时运行“设置”应用,转到“位置和安全”,然后取消选中“使用无线网络”和“启用 GPS 卫星”。这将针对用户设备上的所有应用停用需要使用位置信息的服务。</p>
 <h2 id="device-metadata">设备元数据</h2>
 <p>Android 还会尽力限制访问本身并不属于敏感数据,但可能会间接透露用户特征、用户偏好以及设备使用方式的数据。</p>
-<p>默认情况下,应用无权访问操作系统日志、浏览器历史记录、电话号码以及硬件/网络标识信息。如果应用在安装时请求获得访问此类信息的权限,安装程序会询问用户是否允许该应用访问此类信息。如果用户没有授予该权限,系统将不会安装应用。</p>
-<h2 id="certificate-authorities">证书授权中心</h2>
-<p>Android 中收录了一组已安装的系统证书授权中心,这些授权中心在整个系统范围内均可信。在 Android 7.0 之前的版本中,设备制造商可以修改其设备上搭载的 CA 组。不过,运行 7.0 及更高版本的设备将具有一组统一的系统 CA,并且不再允许设备制造商对其进行修改。
+<p>默认情况下,应用无权访问操作系统日志、浏览器历史记录、电话号码以及硬件/网络标识信息。如果应用在安装时申请此类信息的访问权限,安装程序会询问用户是否允许该应用访问此类信息。如果用户没有授予该权限,系统将不会安装应用。</p>
+<h2 id="certificate-authorities">证书授权机构</h2>
+<p>Android 中收录了一组预载的系统证书授权机构 (CA),这些授权机构在整个系统范围内受到信任。在 Android 7.0 之前的版本中,设备制造商可以修改其设备上搭载的 CA 组。不过,运行 7.0 及更高版本的设备将具有一组统一的系统 CA,并且不再允许设备制造商对其进行修改。
 </p>
 <p>
-要作为新的公共 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 16eb3b7..3685f7a 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/selinux/compatibility.html b/zh-cn/security/selinux/compatibility.html
index 227d14e..763fee8 100644
--- a/zh-cn/security/selinux/compatibility.html
+++ b/zh-cn/security/selinux/compatibility.html
@@ -24,7 +24,7 @@
 本文介绍 Android 如何处理与平台 OTA 相关的政策兼容性问题,其中新平台 SELinux 设置可能与旧供应商 SELinux 设置有所不同。
 </p>
 <p>
-基于 Treble 的 SELinux 政策设计考虑到平台和供应商政策之间的二进制文件区别;如果供应商分区生成依赖项(例如 <code>platform</code> &lt; <code>vendor</code> &lt; <code>oem</code>),则该方案会变得更加复杂。<em></em><em></em>
+基于 Treble 的 SELinux 政策设计会考虑平台政策和供应商政策之间的二进制文件区别;如果供应商分区生成依赖项(例如 <code>platform</code> &lt; <code>vendor</code> &lt; <code>oem</code>),则架构会更加复杂。<em></em><em></em>
 </p>
 <p>
 在 Android 8.0 及更高版本中,SELinux 全局政策划分为私有和公共组件。公共组件包含政策和相关基础架构,保证可用于平台版本。
@@ -153,7 +153,7 @@
 
 <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> 中的文件。
+<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> 公开的未来内核接口,并根据需要进行明确标记。
@@ -177,7 +177,7 @@
 <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> 节点。否则,只有供应商可以标记文件。
+<strong>建议</strong>:平台可以标记不是针对特定设备的 <code>sysfs</code> 节点。否则,只有供应商可以标记文件。
 </p>
 <h4 id="tmpfs">tmpfs (/dev)</h4>
 <p>
@@ -241,10 +241,10 @@
 
 <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 特定版本)。
+为了实现无需了解具体版本变化即可制定政策的目标,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 形式存在(可以据此构建平台和供应商政策,以使两个分区之间的接口保持稳定)。平台和供应商政策写入程序都可以像当前那样继续写入政策。
+公共政策中的属性未采用版本编号,而是以 API 形式存在(可以在上面构建平台和供应商政策,以使两个分区之间的接口保持稳定)。平台和供应商政策写入程序都可以像当前那样继续写入政策。
 </p>
 <p>
 以 <code>allow source_foo target_bar:<em>class
@@ -257,7 +257,7 @@
 
 <h3 id="policy-diffs">政策差异</h3>
 <p>
-如果不在各版本差异中将属性映射到类型,那么通过在每种类型的末尾添加 <code>_v<em>N</em></code> 来自动创建属性不起任何作用。Android 维护着属性版本之间的映射以及类型到这些属性的映射。这是在前面提到的包含语句的映射文件(例如 (CIL))中完成的:
+如果不在各版本差异中将属性映射到类型,那么通过在每种类型的末尾添加 <code>_v<em>N</em></code> 来自动创建属性时,不会创建任何内容。Android 维护着属性版本之间的映射以及类型到这些属性的映射。这是在前面提到的包含语句的映射文件(例如 (CIL))中完成的:
 </p>
 
 <pre class="prettyprint">(typeattributeset foo_vN (foo))</pre>
@@ -513,15 +513,15 @@
 
 <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> 属性)。
+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>)。
+平台公共政策是遵循 Android 8.0 架构模型的核心所在,而不是简单地将 v1 和 v2 中的平台政策结合起来。供应商可以看到一部分平台政策(包含可用类型和属性以及关于这些类型和属性的规则),这部分政策随后会包含在供应商政策中(即 <code>vendor_sepolicy.cil</code>)。
 </p>
 <p>
-类型和规则会在供应商生成的政策中自动转换为 <code>attribute_v<em>N</em></code>,以便所有平台提供的类型都是版本化属性(但属性不是版本化属性)。平台负责将其提供的具体类型映射到适当的属性,以确保供应商政策继续有效,并将为特定版本提供的规则包括在内。将平台公共政策和供应商政策相结合可满足 Android 8.0 架构模型目标,即允许独立平台和供应商构建。
+类型和规则会在供应商生成的政策中自动转换为 <code>attribute_v<em>N</em></code>,以便所有由平台提供的类型都是带有版本编号的属性(但属性不带版本编号)。平台负责将其提供的具体类型映射到适当的属性,以确保供应商政策继续有效,并将为特定版本提供的规则包括在内。将平台公共政策和供应商政策相结合可满足 Android 8.0 架构模型目标,即允许独立平台和供应商构建。
 </p>
 
 <h3 id="mapping-to-attribute-chains">映射到属性链</h3>
diff --git a/zh-cn/security/selinux/concepts.html b/zh-cn/security/selinux/concepts.html
index 40e5143..aeb50f5 100644
--- a/zh-cn/security/selinux/concepts.html
+++ b/zh-cn/security/selinux/concepts.html
@@ -81,7 +81,7 @@
 </pre>
 
 <p>
-该规则允许具有与 <code>domain</code> 属性关联的任何域的进程对 target_type 标签为 <code>null_device</code> 的 <code>chr_file</code> 类(字符设备文件)的对象执行 <code>open</code> 权限所描述的操作。<em></em><em></em><em></em><em></em>在实践中,该规则可能会扩展为包含其他权限:</p>
+<em></em><em></em><em></em><em></em>该规则允许具有与 <code>domain</code> 属性关联的任何 domain 的进程对 target_type 标签为 <code>null_device</code> 的 class <code>chr_file</code>(字符设备文件)的对象执行 permission <code>open</code> 所描述的操作。在实践中,该规则可能会扩展为包含其他权限:</p>
 
 <pre class="devsite-click-to-copy">
 allow domain null_device:chr_file { getattr open read ioctl lock append write};
diff --git a/zh-cn/security/selinux/customize.html b/zh-cn/security/selinux/customize.html
index fa4414f..a6148f1 100644
--- a/zh-cn/security/selinux/customize.html
+++ b/zh-cn/security/selinux/customize.html
@@ -44,7 +44,7 @@
   <li>不得添加后门程序</li>
 </ul>
 
-<p><em></em>要查看具体要求,请参阅 <a href="/compatibility/android-cdd#9_7_kernel_security_features">Android 兼容性定义文档</a>中的“内核安全功能”部分。</p>
+<p>要查看具体要求,请参阅 <a href="/compatibility/android-cdd#9_7_kernel_security_features">Android 兼容性定义文档</a>中的“内核安全功能”部分。<em></em></p>
 
 <p>SELinux 采用白名单方法,这意味着只能授予政策中明确允许的访问权限。由于 Android 的默认 SELinux 政策已经支持 Android 开放源代码项目,因此您无需以任何方式修改 SELinux 设置。如果您要自定义 SELinux 设置,则应格外谨慎,以免破坏现有应用。要开始使用,请按下列步骤操作:</p>
 
@@ -54,7 +54,7 @@
   <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>/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>分析结果并优化域定义。</li>
   <li>当 userdebug 版本中不再出现拒绝事件时,移除宽容声明。</li>
@@ -251,7 +251,7 @@
   <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>device/manufacturer/device-name/sepolicy<strong></strong><var></var><var></var>。包含设备专用政策,以及对政策进行的设备自定义(在 Android 8.0 及更高版本中,该政策对应于供应商映像组件的相关政策)。</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>
@@ -262,14 +262,14 @@
 <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> 注册)。
 </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,7 +280,7 @@
 </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 类型标签就可以)。
@@ -294,17 +294,17 @@
 <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> 政策中的对象添加标签。
+请注意,每次向 <code>system/sepolicy/public</code> 添加内容都会增加复杂程度,因为这会增加必须在映射文件中跟踪的新兼容性保证(会受到其他限制的约束)。只有新类型和相关项允许在 <code>system/sepolicy/public</code> 中添加规则;属性和其他政策声明不受支持。此外,新的公共类型不能用于直接为 <code>/vendor</code> 政策中的对象添加标签。
 </p>
 <h3 id="unsupported-policy-scenarios">不受支持的政策场景</h3>
 <p>
diff --git a/zh-cn/security/selinux/validate.html b/zh-cn/security/selinux/validate.html
index f154945..f647986 100644
--- a/zh-cn/security/selinux/validate.html
+++ b/zh-cn/security/selinux/validate.html
@@ -24,7 +24,7 @@
 
 <p>实施新政策后,您可以通过执行 <code>getenforce</code> 命令来确认 SELinux 在设备上的运行模式是否正确。</p>
 
-<p>该命令会显示全局 SELinux 模式:强制或宽容。要确定每个域的 SELinux 模式,您必须查看相应的文件,或运行带有适当 (<code>-p</code>) 标记的最新版 <code>sepolicy-analyze</code> (位于 <a href="https://android.googlesource.com/platform/system/sepolicy/+/master/tools/" class="external"><code>/platform/system/sepolicy/tools/</code></a> 中)。</p>
+<p>该命令会输出全局 SELinux 模式:强制或宽容。要确定每个域的 SELinux 模式,您必须查看相应的文件,或运行带有适当 (<code>-p</code>) 标记的最新版 <code>sepolicy-analyze</code>(位于 <a href="https://android.googlesource.com/platform/system/sepolicy/+/master/tools/" class="external"><code>/platform/system/sepolicy/tools/</code></a> 中)。</p>
 
 <h2 id="reading_denials">读取拒绝事件</h2>
 
@@ -61,9 +61,9 @@
 
 <ul>
   <li><em></em>操作 - 试图进行的操作会使用括号突出显示:<code>read write</code> 或 <code>setenforce</code>。
-  </li><li><em></em>操作方 - <code>scontext</code>(来源环境)条目表示操作方;在此例中为<code> rmt_storage</code> 守护进程。
-  </li><li>对象 - <code>tcontext</code>(目标环境)条目表示是对哪个对象执行操作;在此例中为 kmem。<em></em>
-  </li><li>结果 - <code>tclass</code>(目标类别)条目表示操作对象的类型;在此例中为 <code>chr_file</code>(字符设备)。<em></em>
+  </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>
 
 <h2 id="switching_to_permissive">切换到宽容模式</h2>
diff --git a/zh-cn/security/trusty/download-and-build.html b/zh-cn/security/trusty/download-and-build.html
new file mode 100644
index 0000000..ed3f415
--- /dev/null
+++ b/zh-cn/security/trusty/download-and-build.html
@@ -0,0 +1,59 @@
+<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><a href="https://android-review.googlesource.com/admin/repos/q/filter:trusty" class="external">Trusty 代码库</a>可在 Android 开源项目 (AOSP) 中获取。</p>
+
+<p>点击以下链接可在 AOSP 中找到相应的 Trusty 内核分支:</p>
+
+<ul>
+  <li><a class="external" href="https://android.googlesource.com/kernel/common/+/android-trusty-4.4">4.4</a></li>
+  <li><a class="external" href="https://android.googlesource.com/kernel/common/+/android-trusty-4.9">4.9</a></li>
+  <li><a class="external" href="https://android.googlesource.com/kernel/common/+/android-trusty-4.14">4.14</a></li>
+</ul>
+
+    <h2 id="installing_repo">安装 Repo</h2>
+<p>要下载 Trusty,请先<a href="/setup/build/downloading#installing-repo">下载并安装 Repo</a>。</p>
+
+<p>成功安装 Repo 后,您可以克隆 Android Trusty 代码库。</p>
+<pre class="prettyprint">
+<code class="devsite-terminal">mkdir trusty</code>
+<code class="devsite-terminal">cd trusty</code>
+<code class="devsite-terminal">repo init -u https://android.googlesource.com/trusty/manifest -b master</code>
+<code class="devsite-terminal">repo sync -j32</code>
+</pre>
+
+<h3 id="build">编译</h3>
+<p>请使用以下代码为 Trusty 编译通用 arm64 映像。
+
+</p><pre class="devsite-terminal devsite-click-to-copy">
+./trusty/vendor/google/aosp/scripts/build.py generic-arm64
+</pre>
+
+<p>编译结果位于 <code>build-root/build-generic-arm64/.</code> 下。请查找 lk.bin,这是一个 TEE 映像,其中包含在以下位置编译的所有应用:</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+ls build-root/build-generic-arm64/lk.bin
+</pre>
+
+<h3 id="install">安装</h3>
+     <p>您可以将 lk.bin 汇编到固件映像中,然后将其刷入设备。生成的固件映像因所使用的开发板而异。如需了解相关说明,请与开发板制造商联系。</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/trusty/index.html b/zh-cn/security/trusty/index.html
index 2ed7dda..0634765 100644
--- a/zh-cn/security/trusty/index.html
+++ b/zh-cn/security/trusty/index.html
@@ -19,77 +19,59 @@
       See the License for the specific language governing permissions and
       limitations under the License.
   -->
+<p>Trusty 是一种安全的操作系统 (OS),可为 Android 提供可信执行环境 (TEE)。Trusty 操作系统与 Android 操作系统在同一处理器上运行,但 Trusty 通过硬件和软件与系统的其余组件隔离开来。Trusty 与 Android 彼此并行运行。Trusty 可以访问设备主处理器和内存的全部功能,但完全隔离。隔离可以保护 Trusty 免受用户安装的恶意应用以及可能在 Android 中发现的潜在漏洞的侵害。
+</p>
 
-<p>Trusty 是一组在移动设备上支持可信执行环境 (TEE) 的软件组件。</p>
+ <p>Trusty 与 ARM 和 Intel 处理器兼容。在 ARM 系统中,Trusty 使用 ARM 的 Trustzone™ 虚拟化主处理器,并创建安全的可信执行环境。使用 Intel 虚拟化技术的 Intel x86 平台也提供类似的支持。
+</p>
+
+<img style="display: block;margin-left: auto;margin-right: auto;" src="/security/images/trustyOverview_900w.png"/>
+<p class="img-caption">
+<strong>图 1</strong>. Trusty 概览图
+</p>
 
 <p>Trusty 包含以下组件:</p>
-
 <ul>
-  <li>一个在用于提供 TEE 的处理器上运行的操作系统(Trusty 操作系统)</li><li>适用于 Android 内核 (Linux) 的驱动程序,旨在促进与在 Trusty 操作系统下运行的应用之间的通信</li><li>一组适用于 Android 系统软件的库,旨在使用内核驱动程序促进与在 Trusty 操作系统中执行的可信应用之间的通信</li></ul>
+  <li>由 <a href="https://github.com/littlekernel/lk" class="external">Little Kernel</a> 衍生的小型操作系统内核</li>
+  <li>Linux 内核驱动程序,用于在安全环境和 Android 之间传输数据</li>
+  <li>Android <a href="https://android.googlesource.com/trusty/lib/" class="external">用户空间库</a>,用于通过内核驱动程序与可信应用(即安全任务/服务)通信</li>
+</ul>
 
-<p><strong>重要提示</strong>:Trusty 和 Trusty API 随时可能发生变化。</p>
+<p class="note"><strong>注意</strong>:Trusty 和 Trusty API 随时可能发生变化。如需了解 Trusty API,请参阅 <a href="/security/trusty/trusty-ref">API 参考</a>。</p>
 
-<p>如需关于 Trusty API 的信息,请参阅 <a href="/security/trusty/trusty-ref">API 参考</a>。</p>
+<h2 id="whyTrusty">为什么使用 Trusty?</h2>
 
-<h2 id="uses_examples">使用和示例</h2>
+<p>其他 TEE 操作系统历来都是由第三方供应商以二进制 Blob 的形式提供,或由内部开发。对系统芯片 (SoC) 供应商和 OEM 来说,开发内部 TEE 系统或从第三方获取 TEE 许可的成本可能很高。资金成本加上不可靠的第三方系统会导致 Android 生态系统不稳定。我们将 Trusty 作为一种可靠且免费的开源替代方案提供给合作伙伴,用于替代其可信执行环境。Trusty 可提供通过封闭源代码系统无法实现的透明性。
+</p>
 
-<p>所有 TEE 操作系统(不仅仅是 Trusty)均可用于 TEE 实现。</p>
+ <p>Android 支持各种 TEE 实现,因此您并非只能使用 Trusty。每一种 TEE 操作系统都会通过一种独特的方式部署可信应用。对试图确保应用能够在所有 Android 设备上正常运行的可信应用开发者来说,这种不统一性可能是一个问题。使用 Trusty 作为标准,可以帮助应用开发者轻松地创建和部署应用,而不用考虑有多个 TEE 系统的不统一性。借助 Trusty TEE,开发者和合作伙伴能够实现透明化、进行协作、检查代码并轻松地进行调试。可信应用的开发者可以集中利用各种常见的工具和 API,以降低引入安全漏洞的风险。这些开发者可以确信自己能够开发应用并让此应用在多个设备上重复使用,而不需要进一步进行开发。
+</p>
 
-<p>TEE 处理器通常是系统内的单独微处理器,或是主处理器的虚拟化实例。TEE 处理器与系统的其余部分之间使用由硬件支持的内存和 I/O 保护机制隔离开来。</p>
+<h2 id="application_services">应用和服务</h2>
 
-<p>TEE 处理器如今已成为移动设备的基本组成部分。这些设备上的主处理器会被视为“不可信”,它们无法访问制造商用于存储机密数据(例如,设备专用加密密钥)的特定 RAM、硬件寄存器和 Fuse 区域。在主处理器上运行的软件会将所有需要使用机密数据的操作委派给 TEE 处理器。</p>
+<p>Trusty 应用定义为二进制文件(可执行文件和资源文件)、二进制清单和加密签名的集合。在运行时,Trusty 应用在 Trusty 内核下以隔离进程的形式在非特权模式下运行。每个进程都会利用 TEE 处理器的内存管理单元功能在各自的虚拟内存沙盒中运行。硬件构建会改变 Trusty 遵循的确切过程,但是,举例来说,内核会使用由安全计时器驱动且按优先级进行调度的循环调度程序安排这些进程。所有 Trusty 应用均具有相同的优先级。
+</p>
 
-<p>在 Android 生态系统中,最广为人知的不可信主处理器示例是用于受保护内容的 <a href="/devices/drm.html">DRM 框架</a>。在 TEE 处理器上运行的软件可以访问解密受保护内容所需的设备专用密钥。主处理器只能看到已加密的内容,这样一来,就可以针对基于软件的攻击提供高级别的安全保障和保护。</p>
-
-<p>TEE 还有许多其他用法,例如移动支付、安全银行、全盘加密、多因素身份验证、设备重置保护、抗重放攻击的持久存储、无线显示(“投射”)受保护的内容、安全的 PIN 码和指纹处理,甚至还有恶意软件检测。</p>
-
-<p>Trusty 提供用于开发以下两类应用的 API:</p>
-
-<ul>
-  <li>在 TEE 处理器上运行的可信应用或服务</li><li>在主处理器上运行并使用可信应用提供的服务的普通/不可信应用</li></ul>
-
-<p>在主处理器上运行的软件可以使用 Trusty API 连接到可信应用并与它们交换任意消息,就像通过 IP 提供的网络服务一样。应用负责使用应用级协议确定这些消息的数据格式和语义。消息传递的可靠性由底层 Trusty 基础架构(采用在主处理器上运行的驱动程序的形式)来保证,并且通信完全是异步进行的。</p>
-
-<h2 id="trusted_applications_and_services">可信应用和服务</h2>
-
-<p>可信应用会以单独进程的形式在 Trusty 操作系统内核下运行。每个进程都会利用 TEE 处理器的 MMU 功能在各自的虚拟内存沙盒中运行。内核会使用由安全计时器驱动且按优先级进行调度的轮询调度程序安排这些进程。在最新版本的 Trusty 中,所有 Trusty 应用均具有相同的优先级。</p>
-
-<p>可以使用 C/C++(对 C++ 的支持有限)编写适用于 Trusty 操作系统的应用,此类应用可以访问小型的 C 库。<code>main()</code> 函数目前不接受任何参数。系统调用存根是作为该库的一部分在本机汇编代码中提供的,因此可按名称访问系统调用。</p>
-
-<h3 id="language_threading">语言和线程支持</h3>
-
-<p>所有 Trusty 应用均为单线程应用;目前不支持在 Trusty 用户空间中使用多线程。</p>
-
-<h3 id="application_structure">应用结构</h3>
-
-<p>Trusty 应用会在加载期间初始化一次,并且在 TEE 处理器重置之前,会一直保留在内存中。Trusty 目前不支持动态加载和取消加载应用。</p>
-
-<p>可信应用是作为<strong>事件驱动型服务器</strong>编写的,会等待其他应用或主处理器上运行的应用发出的命令。此外,可信应用也可以作为其他可信服务器应用的客户端。以下 API 部分中介绍的事件将由 Trusty 内核传送到可信应用。</p>
+<img style="display: block;margin-left: auto;margin-right: auto;" src="/security/images/trustyApps_900w.png"/>
+<p class="img-caption">
+<strong>图 2</strong>. Trusty 应用概览。</p>
 
 <h2 id="third-party_trusty_applications">第三方 Trusty 应用</h2>
 
-<p>目前,所有 Trusty 应用都是由一个开发方开发的,并封装了 Trusty 内核映像。整个映像会由引导加载程序在启动过程中进行签名并验证。该版本的 Trusty 中不支持第三方应用开发。</p>
+<p>目前,所有 Trusty 应用都是由一个开发方开发的,并用 Trusty 内核映像进行封装。整个映像都经过签名并在启动过程中由引导加载程序进行验证。目前,Trusty 不支持第三方应用开发。尽管 Trusty 支持开发新应用,但在开发新应用时务必要万分谨慎;每个新应用都会使系统可信计算基 (TCB) 的范围增大。可信应用可以访问设备机密数据,并且可以利用这些数据进行计算或数据转换。能够开发在 TEE 中运行的新应用为创新带来了多种可能性。不过,根据 TEE 的定义,如果这些应用没有附带某种形式的可信凭据,则无法分发。这种凭据通常采用数字签名的形式,即由应用运行时所在产品的用户信任的实体提供的数字签名。
+</p>
 
-<p>尽管 Trusty 操作系统支持开发新应用,但在开发新应用时务必要万分谨慎;每个新应用都会使系统可信计算基 (TCB) 的范围增大。可信应用可以访问设备机密数据,并且可以利用这些数据进行计算或数据转换。</p>
+<h2 id="uses_examples">用途和示例</h2>
 
-<p>能够开发在 TEE 中运行的新应用为进行创新提供了多种可能性。不过,根据 TEE 的定义,如果这些应用没有附带某种形式的证明其<strong>可信</strong>的凭据,则无法分发。这种凭据通常采用数字签名的形式,即由应用运行时所在产品的用户信任的实体提供的数字签名。</p>
+<p>可信执行环境正迅速成为移动设备领域的一项标准。用户的日常生活越来越依赖移动设备,安全需求也在不断增长。具有 TEE 的移动设备比没有 TEE 的设备更安全。</p>
 
-<h2 id="downloading_building">下载和编译 Trusty</h2>
+<p>在具有 TEE 实现的设备上,主处理器通常称为“不可信”处理器,这意味着它无法访问制造商用于存储机密数据(例如设备专用加密秘钥)的特定 RAM、硬件寄存器和一次写入 Fuse 区域。在主处理器上运行的软件会将所有需要使用机密数据的操作委派给 TEE 处理器。
+</p>
 
-<p>您可以通过以下网址找到 Android 开放源代码项目 (AOSP) 中的 Trusty 实现:<br />
-<a href="https://android-review.googlesource.com/#/admin/projects/?filter=trusty">https://android-review.googlesource.com/#/admin/projects/?filter=trusty</a></p>
+<p>在 Android 生态系统中,最广为人知的示例是受保护内容的 <a href="/devices/drm.html">DRM 框架</a>。在 TEE 处理器上运行的软件可以访问解密受保护内容所需的设备专用密钥。主处理器只能看到已加密的内容,这样一来,就可以针对软件类攻击提供高级别的安全保障和保护。
+</p>
 
-<p>要查看 AOSP 上的 Trusty 内核分支,请访问:<br />
-<a href="https://android.googlesource.com/kernel/common/+/android-trusty-3.10">https://android.googlesource.com/kernel/common/+/android-trusty-3.10</a><br />
-<a href="https://android.googlesource.com/kernel/common/+/android-trusty-3.18">https://android.googlesource.com/kernel/common/+/android-trusty-3.18</a></p>
-
-<p>要实现 Trusty,请运行以下命令(假设 Android 工具链已位于路径中):</p>
-<pre class="devsite-click-to-copy">
-<code class="devsite-terminal">repo init -u https://android.googlesource.com/trusty/manifest</code>
-<code class="devsite-terminal">repo sync</code>
-<code class="devsite-terminal">make -j24 generic-arm64</code>
-</pre>
-
-<p>您可以从 <code>device/*/*/project/*</code> 中选择其他受支持的编译目标</p>
+<p>TEE 还有许多其他用途,例如移动支付、安全银行、多重身份验证、设备重置保护、抗重放攻击的持久存储、安全的 PIN 码和指纹处理,甚至包括恶意软件检测。
+</p>
 
 </body></html>
\ No newline at end of file
diff --git a/zh-cn/security/trusty/trusty-ref.html b/zh-cn/security/trusty/trusty-ref.html
index 4d0277c..a22673e 100644
--- a/zh-cn/security/trusty/trusty-ref.html
+++ b/zh-cn/security/trusty/trusty-ref.html
@@ -20,17 +20,27 @@
       limitations under the License.
   -->
 
-<p><a href="index.html">Trusty</a> API 描述了 Trusty 进程间通信 (IPC) 系统,包括与非安全域的通信。本页中提供了相关术语的定义以及关于 API 调用的参考内容。</p>
+<p>Trusty 提供用于开发以下两类应用/服务的 API:</p>
+    <ul>
+      <li>在 TEE 处理器上运行的可信应用或服务</li>
+      <li>在主处理器上运行并使用可信应用提供的服务的普通/不可信应用</li>
+    </ul>
+<p><a href="/security/index.html">Trusty</a> API 描述了 Trusty 进程间通信 (IPC) 系统,包括与非安全域的通信。在主处理器上运行的软件可以使用 Trusty API 连接到可信应用/服务并与它们交换任意消息,就像通过 IP 提供的网络服务一样。应用负责使用应用级协议确定这些消息的数据格式和语义。消息传递的可靠性由底层 Trusty 基础架构(采用在主处理器上运行的驱动程序的形式)来保证,并且通信完全是异步进行的。
+</p>
 
 <h2 id="ports_and_channels">端口和通道</h2>
 
-<p>Trusty 应用使用端口以具名路径的形式显示客户端连接到的服务端点。这可以提供一个非常简单且采用字符串形式的服务 ID 供客户端使用。端口采用反向 DNS 式命名惯例,例如 <code>com.google.servicename</code>。</p>
+<p>Trusty 应用使用端口以具名路径的形式显示客户端连接到的服务端点。这可以提供一个非常简单且采用字符串形式的服务 ID 供客户端使用。端口采用反向 DNS 式命名惯例,例如 <code>com.google.servicename</code>。
+</p>
 
-<p>当客户端连接到端口时,会收到一个用于与相应服务交互的通道。相应服务必须接受外来连接;并且在接受后,也会收到一个通道。实质上,端口会被用来查找服务,以便通过一对已连接的通道(即端口上的连接实例)进行通信。当客户端连接到端口时,客户端和服务器之间会建立一个对称的双向连接。借助这种全双工路径,客户端和服务器可以交换任意消息,直到任一方决定断开连接为止。</p>
+<p>当客户端连接到端口时,会收到一个用于与相应服务交互的通道。相应服务必须接受外来连接;并且在接受后,也会收到一个通道。实质上,端口会被用来查找服务,以便通过一对已连接的通道(即端口上的连接实例)进行通信。当客户端连接到端口时,客户端和服务器之间会建立一个对称的双向连接。借助这种全双工路径,客户端和服务器可以交换任意消息,直到任一方决定断开连接为止。
+</p>
 
-<p>只有安全端可信应用或 Trusty 内核模块可以创建端口。在非安全端(普通域)运行的应用只能连接到安全端发布的服务。</p>
+<p>只有安全端可信应用或 Trusty 内核模块可以创建端口。在非安全端(普通域)运行的应用只能连接到安全端发布的服务。
+</p>
 
-<p>可信应用可以同时是客户端和服务器,具体取决于相关要求。发布服务的可信应用(作为服务器)可能需要连接到其他服务(作为客户端)。</p>
+<p>可信应用可以同时是客户端和服务器,具体取决于相关要求。发布服务的可信应用(作为服务器)可能需要连接到其他服务(作为客户端)。
+</p>
 
 <h2 id="handle_api">Handle API</h2>
 
@@ -58,7 +68,7 @@
 
 <p>处理在句柄创建一段时间后发生的事件时,此调用非常有用。事件处理机制会将相应句柄及其 Cookie 返回给事件处理程序。</p>
 
-<p>通过使用 <code>wait()</code> 或 <code>wait_any()</code> 调用,可以等待句柄上发生事件。</p>
+<p>通过使用 <code>wait()</code> 调用,可以等待句柄上发生事件。</p>
 
 <h4 id="wait">wait()</h4>
 
@@ -76,21 +86,7 @@
 
 <p>[返回值]:如果在指定的超时间隔内发生了有效事件,则为 <code>NO_ERROR</code>;如果指定的超时时间已过,但未发生任何事件,则为 <code>ERR_TIMED_OUT</code>;如果是其他错误,则为 <code>&lt; 0</code></p>
 
-<h4 id="wait_any">wait_any()</h4>
-
-<p>用于在指定时间段内等待应用句柄表格中的任意句柄上发生任意事件。</p>
-
-<pre class="prettyprint">
-long wait_any(uevent_t *event, unsigned long timeout_msecs);
-</pre>
-
-<p>[输出] <code>event</code>:一个指针,指向表示相应句柄上所发生事件的结构</p>
-
-<p>[输入] <code>timeout_msecs</code>:超时值(以毫秒计)。-1 表示无限制超时</p>
-
-<p>[返回值]:如果在指定的超时间隔内发生了有效事件,则为 <code>NO_ERROR</code>;如果指定的超时时间已过,但未发生任何事件,则为 <code>ERR_TIMED_OUT</code>;如果是其他错误,则为 <code>&lt; 0</code></p>
-
-<p>如果操作成功了 (<code>retval == NO_ERROR</code>),<code>wait()</code> 和 <code>wait_any()</code> 调用会在指定的 <code>uevent_t</code> 结构内填入与发生的事件相关的信息。</p>
+<p>如果操作成功了 (<code>retval == NO_ERROR</code>),<code>wait()</code> 调用会在指定的 <code>uevent_t</code> 结构内填入与发生的事件相关的信息。</p>
 
 <pre class="prettyprint">
 typedef struct uevent {
@@ -177,7 +173,7 @@
 
 <p>[返回值]:如果是非负数,则为所创建端口的句柄;如果是负数,则为具体错误</p>
 
-<p>然后,服务器会使用 <code>wait()</code> 或 <code>wait_any()</code> 调用轮询端口句柄列表,以查看是否有外来连接。收到连接请求(由 <code>uevent_t</code> 结构的 <code>event</code> 字段中设置的 <code>IPC_HANDLE_POLL_READY</code> 位来指明)时,服务器应调用 <code>accept()</code> 来完成连接建立过程,并创建一个通道(由另一个句柄表示),然后该通道即可被轮询,以查看是否有外来消息。</p>
+<p>然后,服务器会使用 <code>wait()</code> 调用轮询端口句柄列表,以查看是否有外来连接。收到连接请求(由 <code>uevent_t</code> 结构的 <code>event</code> 字段中设置的 <code>IPC_HANDLE_POLL_READY</code> 位来指明)时,服务器应调用 <code>accept()</code> 来完成连接建立过程,并创建一个通道(由另一个句柄表示),然后该通道即可被轮询,以查看是否有外来消息。</p>
 
 <h4 id="accept">accept()</h4>
 
@@ -226,7 +222,7 @@
 
 <p><code>IPC_CONNECT_WAIT_FOR_PORT</code> - 如果指定的端口在连接操作执行时没有立即存在,则强制 <code>connect()</code> 调用开始等待,而不是立即使连接失败。</p>
 
-<p><code>IPC_CONNECT_ASYNC</code> - 如果设置了此项,则会发起异步连接。在开始正常操作之前,应用必须先针对连接完成事件(由 <code>uevent_t</code> 结构的 event 字段中设置的 <code>IPC_HANDLE_POLL_READY</code> 位来指明)轮询是否有返回的句柄(通过调用 <code>wait()</code> 或 <code>wait_any()</code>)。</p>
+<p><code>IPC_CONNECT_ASYNC</code> - 如果设置了此项,则会发起异步连接。在开始正常操作之前,应用必须先针对连接完成事件(由 <code>uevent_t</code> 结构的 event 字段中设置的 <code>IPC_HANDLE_POLL_READY</code> 位来指明)轮询是否有返回的句柄(通过调用 <code>wait()</code>)。</p>
 
 <h2 id="messaging_api">Messaging API</h2>
 
@@ -274,7 +270,7 @@
 
 <p>[返回值]:如果操作成功了,则为发送的字节总数;否则为表示错误的负数</p>
 
-<p>如果客户端(或服务器)尝试通过相应通道发送消息,但目标对端消息队列中没有空间,相应通道可能会进入所发消息被屏蔽的状态(对于简单的同步请求/回复协议,这种事情应该绝对不会发生,但在更复杂的情况下,则可能会发生)。如果返回 <code>ERR_NOT_ENOUGH_BUFFER</code> 错误代码,则表示相应通道进入了这种状态。在这种情况下,调用程序必须等待,直到对端通过以下方式释放其接收队列中的部分空间为止:检索处理情况并停用一些消息(由 <code>wait()</code> 或 <code>wait_any()</code> 调用返回的 <code>uevent_t</code> 结构的 <code>event</code> 字段中设置的 <code>IPC_HANDLE_POLL_SEND_UNBLOCKED</code> 位来指明)。</p>
+<p>如果客户端(或服务器)尝试通过相应通道发送消息,但目标对端消息队列中没有空间,相应通道可能会进入所发消息被屏蔽的状态(对于简单的同步请求/回复协议,这种事情应该绝对不会发生,但在更复杂的情况下,则可能会发生)。如果返回 <code>ERR_NOT_ENOUGH_BUFFER</code> 错误代码,则表示相应通道进入了这种状态。在这种情况下,调用程序必须等待,直到对端通过以下方式释放其接收队列中的部分空间为止:检索处理情况并停用一些消息(由 <code>wait()</code> 调用返回的 <code>uevent_t</code> 结构的 <code>event</code> 字段中设置的 <code>IPC_HANDLE_POLL_SEND_UNBLOCKED</code> 位来指明)。</p>
 
 <h4 id="get_msg">get_msg()</h4>
 
@@ -441,61 +437,57 @@
 <p>以下示例应用展示了上述 API 的用法。该示例会创建一项“回传”服务,该服务可处理多个外来连接,并会将从位于安全端或非安全端的客户端收到的所有消息回传给调用程序。</p>
 
 <pre class="prettyprint">
-#include &lt;assert.h&gt;
-#include &lt;err.h&gt;
-#include &lt;stddef.h&gt;
-#include &lt;stdio.h&gt;
-#include &lt;stdlib.h&gt;
-#include &lt;string.h&gt;
-#include &lt;trusty_std.h&gt;
-
-#include &lt;app/echo/uuids.h&gt;
-
+#include &lt; stddef.h &gt;
+#include &lt; stdio.h &gt;
+#include &lt; stdlib.h &gt;
+#include &lt; string.h &gt;
+#include &lt; trusty_std.h &gt;
+#include &lt; app / echo / uuids.h &gt;
 #define LOG_TAG "echo_srv"
+#define TLOGE(fmt, ...)\
+fprintf(stderr, "%s: %d: "
+  fmt, LOG_TAG, __LINE__, ##__VA_ARGS__)
 
-#define TLOGE(fmt, ...) \
-    fprintf(stderr, "%s: %d: " fmt, LOG_TAG, __LINE__,  ## __VA_ARGS__)
+# define MAX_ECHO_MSG_SIZE 64
 
-#define MAX_ECHO_MSG_SIZE  64
-
-static const char *srv_name = "com.android.echo.srv.echo";
+static
+const char * srv_name = "com.android.echo.srv.echo";
 
 static uint8_t msg_buf[MAX_ECHO_MSG_SIZE];
 
 /*
  *  Message handler
  */
-static int handle_msg(handle_t chan)
-{
+static int handle_msg(handle_t chan) {
   int rc;
   iovec_t iov;
   ipc_msg_t msg;
   ipc_msg_info_t msg_inf;
 
   iov.base = msg_buf;
-  iov.len  = sizeof(msg_buf);
+  iov.len = sizeof(msg_buf);
 
   msg.num_iov = 1;
-  msg.iov = &amp;iov;
+  msg.iov = &amp; iov;
   msg.num_handles = 0;
-  msg.handles  = NULL;
+  msg.handles = NULL;
 
   /* get message info */
-  rc = get_msg(chan, &amp;msg_inf);
+  rc = get_msg(chan, &amp; msg_inf);
   if (rc == ERR_NO_MSG)
     return NO_ERROR; /* no new messages */
 
   if (rc != NO_ERROR) {
     TLOGE("failed (%d) to get_msg for chan (%d)\n",
-          rc, chan);
+      rc, chan);
     return rc;
   }
 
   /* read msg content */
-  rc = read_msg(chan, msg_inf.id, 0, &amp;msg);
+  rc = read_msg(chan, msg_inf.id, 0, &amp; msg);
   if (rc &lt; 0) {
     TLOGE("failed (%d) to read_msg for chan (%d)\n",
-          rc, chan);
+      rc, chan);
     return rc;
   }
 
@@ -503,18 +495,18 @@
   iov.len = (size_t) rc;
 
   /* send message back to the caller */
-  rc = send_msg(chan, &amp;msg);
+  rc = send_msg(chan, &amp; msg);
   if (rc &lt; 0) {
     TLOGE("failed (%d) to send_msg for chan (%d)\n",
-          rc, chan);
+      rc, chan);
     return rc;
   }
 
   /* retire message */
   rc = put_msg(chan, msg_inf.id);
-  if ( rc != NO_ERROR) {
+  if (rc != NO_ERROR) {
     TLOGE("failed (%d) to put_msg for chan (%d)\n",
-          rc, chan);
+      rc, chan);
     return rc;
   }
 
@@ -524,23 +516,22 @@
 /*
  *  Channel event handler
  */
-static void handle_channel_event(const uevent_t *ev)
-{
+static void handle_channel_event(const uevent_t * ev) {
   int rc;
 
-  if (ev-&gt;event &amp; IPC_HANDLE_POLL_MSG) {
-    rc = handle_msg(ev-&gt;handle);
+  if (ev - &gt; event &amp; IPC_HANDLE_POLL_MSG) {
+    rc = handle_msg(ev - &gt; handle);
     if (rc != NO_ERROR) {
       /* report an error and close channel */
       TLOGE("failed (%d) to handle event on channel %d\n",
-             rc, ev-&gt;handle);
-      close(ev-&gt;handle);
+        rc, ev - &gt; handle);
+      close(ev - &gt; handle);
     }
     return;
   }
-  if (ev-&gt;event &amp; IPC_HANDLE_POLL_HUP) {
+  if (ev - &gt; event &amp; IPC_HANDLE_POLL_HUP) {
     /* closed by peer. */
-    close(ev-&gt;handle);
+    close(ev - &gt; handle);
     return;
   }
 }
@@ -548,107 +539,83 @@
 /*
  *  Port event handler
  */
-static void handle_port_event(const uevent_t *ev)
-{
-  uuid_t peer_uuid;
+static void handle_port_event(const uevent_t * ev) {
+    uuid_t peer_uuid;
 
-  if ((ev-&gt;event &amp; IPC_HANDLE_POLL_ERROR) ||
-      (ev-&gt;event &amp; IPC_HANDLE_POLL_HUP) ||
-      (ev-&gt;event &amp; IPC_HANDLE_POLL_MSG) ||
-      (ev-&gt;event &amp; IPC_HANDLE_POLL_SEND_UNBLOCKED)) {
-    /* should never happen with port handles */
-    TLOGE("error event (0x%x) for port (%d)\n",
-           ev-&gt;event, ev-&gt;handle);
-    abort();
-  }
-  if (ev-&gt;event &amp; IPC_HANDLE_POLL_READY) {
-    /* incoming connection: accept it */
-    int rc = accept(ev-&gt;handle, &amp;peer_uuid);
-    if (rc &lt; 0) {
-      TLOGE("failed (%d) to accept on port %d\n",
-             rc, ev-&gt;handle);
-      return;
-    }
-  }
-}
-
-/*
- *  Main application entry point
- */
-int main(void)
-{
-  int rc;
-  handle_t port;
-
-  /* Initialize service */
-  rc = port_create(srv_name, 1, MAX_ECHO_MSG_SIZE,
-       IPC_PORT_ALLOW_NS_CONNECT |
-       IPC_PORT_ALLOW_TA_CONNECT );
-  if (rc &lt; 0) {
-    TLOGE("Failed (%d) to create port %s\n",
-          rc, srv_name);
-    abort();
-  }
-  port = (handle_t)rc;
-
-  /* enter main event loop */
-  while (true) {
-    uevent_t ev;
-
-    ev.handle = INVALID_IPC_HANDLE;
-    ev.event  = 0;
-    ev.cookie = NULL;
-
-    /* wait forever */
-    rc = wait_any(&amp;ev, -1);
-    if (rc == NO_ERROR) {
-      /* got an event */
-      if (ev.handle == port) {
-        handle_port_event(&amp;ev);
-      } else {
-        handle_channel_event(&amp;ev);
-      }
-    } else {
-      TLOGE("wait_any returned (%d)\n", rc);
+    if ((ev - &gt; event &amp; IPC_HANDLE_POLL_ERROR) ||
+      (ev - &gt; event &amp; IPC_HANDLE_POLL_HUP) ||
+      (ev - &gt; event &amp; IPC_HANDLE_POLL_MSG) ||
+      (ev - &gt; event &amp; IPC_HANDLE_POLL_SEND_UNBLOCKED)) {
+      /* should never happen with port handles */
+      TLOGE("error event (0x%x) for port (%d)\n",
+        ev - &gt; event, ev - &gt; handle);
       abort();
     }
-  }
-  return 0;
-}
-</pre>
+    if (ev - &gt; event &amp; IPC_HANDLE_POLL_READY) {
+      /* incoming connection: accept it */
+      int rc = accept(ev - &gt; handle, &amp;peer_uuid);
+    if (ev - &gt; event &amp; IPC_HANDLE_POLL_READY) {
+      /* incoming connection: accept it */
+      int rc = accept(ev - &gt; handle, &amp;peer_uuid);
+      if (rc &lt; 0) {
+        TLOGE("failed (%d) to accept on port %d\n",
+          rc, ev - &gt; handle);
+        return;
+      }
+      handle_t chan = rc;
+      while (true){
+        struct uevent cev;
 
-<h2 id="example_of_a_trusted_application_client">可信应用客户端示例</h2>
-
-<p>以下代码段展示了如何使用 Trusty Messaging API 来实现“回传”服务(请参见上述代码)的客户端。<code>sync_connect()</code> 方法显示了如何在异步 <code>connect()</code> 调用之上实现设有超时的同步连接。</p>
-
-<pre class="prettyprint">
-/*
- *  Local wrapper on top of an async connect that provides a
- *  synchronous connect with timeout.
- */
-int sync_connect(const char *path, uint timeout)
-{
-  int rc;
-  uevent_t evt;
-  handle_t chan;
-
-  rc = connect(path, IPC_CONNECT_ASYNC | IPC_CONNECT_WAIT_FOR_PORT);
-  if (rc &gt;= 0) {
-    chan = (handle_t) rc;
-    rc = wait(chan, &amp;evt, timeout);
-    if (rc == 0) {
-      rc = ERR_BAD_STATE;
-      if (evt.handle == chan) {
-        if (evt.event &amp; IPC_HANDLE_POLL_READY)
-          return chan;
-        if (evt.event &amp; IPC_HANDLE_POLL_HUP)
-          rc = ERR_CHANNEL_CLOSED;
+        rc = wait(handle, &amp;cev, -1);
+        if (rc &lt; 0) {
+          TLOGE("wait returned (%d)\n", rc);
+          abort();
+        }
+        handle_channel_event(&amp;cev);
+        if (cev.event &amp; IPC_HANDLE_POLL_HUP) {
+          return;
+        }
       }
     }
-    close(chan);
-  }
-  return rc;
-}
+
+    /*
+     *  Main application entry point
+     */
+    int main(void) {
+      int rc;
+      handle_t port;
+
+      /* Initialize service */
+      rc = port_create(srv_name, 1, MAX_ECHO_MSG_SIZE,
+        IPC_PORT_ALLOW_NS_CONNECT |
+        IPC_PORT_ALLOW_TA_CONNECT);
+      if (rc &lt; 0) {
+        TLOGE("Failed (%d) to create port %s\n",
+          rc, srv_name);
+        abort();
+      }
+      port = (handle_t) rc;
+
+      /* enter main event loop */
+      while (true) {
+        uevent_t ev;
+
+        ev.handle = INVALID_IPC_HANDLE;
+        ev.event = 0;
+        ev.cookie = NULL;
+
+        /* wait forever */
+        rc = wait(port, &amp;ev, -1)
+        if (rc == NO_ERROR) {
+          /* got an event */
+          handle_port_event(&amp;ev);
+        } else {
+          TLOGE("wait returned (%d)\n", rc);
+          abort();
+        }
+      }
+      return 0;
+    }
 </pre>
 
 <p><code>run_end_to_end_msg_test()</code> 方法可向“回传”服务异步发送 10000 条消息并处理回复。</p>
diff --git a/zh-cn/setup/build/building-kernels.html b/zh-cn/setup/build/building-kernels.html
index ba49ca1..c21736a 100644
--- a/zh-cn/setup/build/building-kernels.html
+++ b/zh-cn/setup/build/building-kernels.html
@@ -27,7 +27,7 @@
 <p>本部分中的所有示例均使用 <a href="devices.html#hikey-boards">hikey</a> 内核。</p>
 
 <h2 id="figuring-out-which-kernel-to-build">选择内核</h2>
-<p>此表列出了内核源代码和二进制文件的名称及所在位置:<table>
+<p>此表列出了内核源代码和二进制文件的名称及所在位置:</p><table>
   <tbody><tr>
     <th>设备</th>
     <th>二进制文件所在的位置</th>
@@ -198,7 +198,7 @@
   </tr>
 </tbody></table>
 
-</p><p>确定要使用的设备项目之后,请查看内核二进制文件的 Git 日志。设备项目采用 <code>device/<var>VENDOR</var>/<var>NAME</var></code> 形式。</p>
+<p>确定要使用的设备项目之后,请查看内核二进制文件的 Git 日志。设备项目采用 <code>device/<var>VENDOR</var>/<var>NAME</var></code> 形式。</p>
 
 <pre class="devsite-click-to-copy">
 <code class="devsite-terminal">git clone https://android.googlesource.com/kernel/hikey-linaro</code>
diff --git a/zh-cn/setup/build/building.html b/zh-cn/setup/build/building.html
index 5da6d10..274f8af 100644
--- a/zh-cn/setup/build/building.html
+++ b/zh-cn/setup/build/building.html
@@ -20,7 +20,7 @@
       limitations under the License.
   -->
 
-<p>以下关于编译 Android 源代码树的说明适用于所有分支,<code>master</code> 除外。编译命令的基本顺序如下:</p>
+<p>以下关于编译 Android 源代码树的说明适用于所有分支,包括 <code>master</code>。编译命令的基本顺序如下:</p>
 
 <h2 id="obtaining-proprietary-binaries">下载专有二进制文件</h2>
 
@@ -30,7 +30,7 @@
 
 <h3 id="downloading-proprietary-binaries">下载专有二进制文件</h3>
 
-<p>对于运行带标记的 AOSP 版本分支的受支持设备,您可以从 <a href="https://developers.google.com/android/drivers" class="external">Google 的驱动程序</a>下载相关的官方二进制文件。有了这些二进制文件,您将有权使用采用非开源代码的其他硬件功能。在针对某种设备编译 <code>master</code> 分支时,请使用位于 Android 源代码树的 <code>vendor/</code> 层次结构中的二进制文件。</p>
+<p>对于运行带标记的 AOSP 版本分支的受支持设备,您可以从 <a href="https://developers.google.com/android/drivers" class="external">Google 的驱动程序</a>下载相关的官方二进制文件。有了这些二进制文件,您将有权使用采用非开源代码的其他硬件功能。要编译 AOSP 的 master 分支,请使用<a href="https://developers.google.com/android/blobs-preview" class="external">二进制文件预览</a>。在针对某种设备编译 master 分支时,请使用适用于<a href="/setup/start/build-numbers.html">最新编号版本</a>的二进制文件或具有最新日期的二进制文件。</p>
 
 <h3 id="extracting-proprietary-binaries">解压专有二进制文件</h3>
 
diff --git a/zh-cn/setup/build/dashboard.html b/zh-cn/setup/build/dashboard.html
new file mode 100644
index 0000000..86de96c
--- /dev/null
+++ b/zh-cn/setup/build/dashboard.html
@@ -0,0 +1,43 @@
+<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>通过<a href="https://en.wikipedia.org/wiki/Continuous_integration" class="external">持续集成</a>信息中心 (<a href="https://ci.android.com/" class="external">ci.android.com</a>),您可以清楚了解 Android 开源项目 (AOSP) 所使用的系统。</p>
+
+<p>AOSP 的贡献者可以通过此信息中心来监控其提交的内容何时会集成到源代码树中。状态颜色可以显示集成的更改是否已在我们的所有编译类型中编译成功。为方便起见,每个编译版本中的编译软件工件都可供下载。</p>
+
+<p>每一行表示在 Android 的自动编译器中完成的一个编译。每一列表示一个编译目标/编译类型组合。网格中会显示正在进行的编译和已完成的编译。系统会使用黄色背景来标识正在进行的编译,使用红色背景来标识失败的编译,使用绿色背景来标识成功的编译。完成编译后,您可以下载相应的编译软件工件,只需点击 <span class="material-icons">get_app</span>(<strong>查看软件工件</strong>)图标即可(此图标可链接到可下载软件工件的页面)。选择一个方形即可在屏幕底部打开一个面板,其中包含“详细信息”标签(相关日志记录会保留在这里)、“更改”标签(其中会列出已纳入相应编译的更改)以及另一个指向编译软件工件的链接。新编译完成后,此信息中心会自动刷新。</p>
+
+<p>此信息中心可以在 <a href="https://ci.android.com" class="external">ci.android.com</a> 上找到</p>
+
+<figure><img src="../images/dashboard.png" alt="信息中心图片"/><figcaption><b>图 1</b>:持续集成信息中心</figcaption></figure>
+
+<p>此信息中心的属性包括:</p><p>
+</p><ul>
+  <li><b>分支名称</b>:出现编译的 git 分支的名称</li>
+  <li><b>编译软件工件</b>:用于查看和下载此编译版本中的软件工件的链接</li>
+  <li><b>版本号</b>:每个编译版本的唯一 ID</li>
+  <li><b>编译目标</b>:设备配置</li>
+  <li><b>编译类型</b>:目标的确切配置,可以是 user、userdebug 或 eng。如需了解详情,请参阅<a href="/setup/build/building#choose-a-target">选择目标</a></li>
+  <li><b>更改链接</b>:链接到此版本中包含的更改</li>
+  <li><b>永久链接</b>:指向此编译版本在 <a href="https://ci.android.com" class="external">ci.android.com</a> 上的页面的永久链接</li>
+
+</ul></body></html>
\ No newline at end of file
diff --git a/zh-cn/setup/build/gsi.html b/zh-cn/setup/build/gsi.html
index 262d2da..056d682 100644
--- a/zh-cn/setup/build/gsi.html
+++ b/zh-cn/setup/build/gsi.html
@@ -21,17 +21,20 @@
       limitations under the License.
   -->
 
-<p>常规系统映像 (GSI) 是包含已针对 Android 设备调整配置的系统映像。这种映像被视为所有 Android 设备应该都能顺利运行且包含未经修改的 Android 开源项目 (AOSP) 代码的“纯 Android”实现。
+<p>常规系统映像 (GSI) 是指已针对 Android 设备调整配置的系统映像。GSI 包含未经修改的 Android 开源项目 (AOSP) 代码,任何运行 Android 8.1 及以上版本的 Android 设备都可以顺利运行这种代码,因此我们将 GSI 视为“纯 Android”实现。
 </p>
 
-<p>GSI 中的内容不依赖于供应商映像。为了验证 GSI 的独立性,Android 设备的系统映像会被替换为 GSI,然后通过<a href="/compatibility/vts/">供应商测试套件 (VTS)</a> 和<a href="/compatibility/cts/">兼容性测试套件 (CTS)</a> 进行全面测试。同样,您可以使用 GSI 替换自己的系统映像,以验证 Android 设备能够正确实现供应商接口。
+<p>GSI 合规性是 <a href="/compatibility/overview">Android 兼容性计划</a>的一部分。为确保运行最新版 Android 的设备能够正确实现供应商接口,我们将 Android 设备的系统映像替换为 GSI,然后使用<a href="/compatibility/vts/">供应商测试套件 (VTS)</a> 和<a href="/compatibility/cts/">兼容性测试套件 (CTS)</a> 对设备进行测试。
+</p>
+
+<aside class="note"><strong>注意</strong>:本文介绍的 GSI 内容面向的是 Android OEM 和 ROM 开发者;Android 应用开发者应该参考 <a href="https://developer.android.com/topic/generic-system-image/">developer.android.com</a>,了解面向开发者的 GSI 详细信息。
+</aside>
+
+<p>开始使用 GSI 之前,请先阅读下面几节内容,详细了解 <a href="#gsi-configuration-and-variances">GSI 配置</a>(和允许的差异)、<a href="#gsi-types">类型</a>(Android GSI 和旧版 GSI)以及<a href="#vendor-binaries-and-vndk-dependencies">供应商二进制文件和 VNDK 依赖项</a>。准备好使用 GSI 后,请为设备目标<a href="#building-gsis">下载并编译 GSI</a>,然后<a href="#flashing-gsis">将 GSI 刷写</a>到 Android 设备。
 </p>
 
 <h2 id="gsi-configuration-and-variances">GSI 配置和差异</h2>
 
-<p>GSI 的目标是为所有 Android 设备提供特定的通用配置,同时允许不同的供应商设备之间存在差异。当前的 GSI 基于 Android 9。
-</p>
-
 <p>当前的 GSI 具有以下配置:</p>
 
 <ul>
@@ -52,7 +55,7 @@
 
 <h2 id="gsi-types">GSI 类型</h2>
 
-<p>GSI 类型取决于设备搭载的 Android 版本。Android 9 支持以下 GSI:</p>
+<p>用于合规性测试的 GSI 取决于设备搭载的 Android 版本。Android 9 支持以下 GSI:</p>
 
 <table>
   <tbody><tr>
@@ -72,22 +75,18 @@
   </tr>
 </tbody></table>
 
-<aside class="note">
-  <strong>注意</strong>:要为某个设备确定合适的 GSI,请将此设备连接到工作站,然后运行 <code>adb shell getprop ro.product.first_api_level</code>。如果 API 级别为 28,则使用 Android GSI;如果 API 级别为 27,则使用旧版 GSI。如果没有系统属性,则说明此设备可能不受支持。
-</aside>
-
-<p>所有 GSI 都是从 Android 9 代码库编译的。是否支持旧版 GSI 取决于设备的供应商接口实现,并非所有搭载 Android 8.0 或 Android 8.1 的设备都能使用旧版 GSI。有关详情,请参阅<a href="#vendor-binaries-and-vndk-dependencies">供应商二进制文件和 VNDK 依赖项</a>。
+<p>所有 GSI 都是从 Android 9 代码库编译的。
 </p>
 
 <h3 id="changes-in-p-gsis">Android 9 GSI 变更</h3>
 
-<p>搭载 Android 9 的设备必须使用 Android 9 GSI,Android 9 GSI 与早期 GSI 相比存在以下主要变化:</p>
+<p>搭载 Android 9 的设备必须使用 Android 9 GSI 测试合规性,Android 9 GSI 与早期 GSI 相比存在以下主要变化:</p>
 
 <ul>
   <li><strong>合并 GSI 和模拟器</strong>。GSI 是根据模拟器产品(例如,<code>aosp_arm64</code>、<code>aosp_x86</code> 等)的系统映像编译的。</li>
   <li><strong>System-as-root</strong>。在以前的 Android 版本中,不支持 A/B 更新的设备可以在 <code>/system</code> 目录下装载系统映像。在 Android 9 中,系统映像的 root 作为设备的 root 装载。</li>
     <li><strong>64 位 binder 接口</strong>。在 Android 8.x 中,32 位 GSI 使用 32 位 binder 接口。Android 9 不支持 32 位 binder 接口,因此 32 位 GSI 和 64 位 GSI 都使用 64 位 binder 接口。</li>
-    <li><strong>强制执行 VNDK</strong>。在 Android 8.1 中,VNDK 是可选的。在 Android 9 中,VNDK 是强制性的,这意味着 <code>BOARD_VNDK_RUNTIME_DISABLE</code> <strong>不可</strong>设置 (<code>BOARD_VNDK_RUNTIME_DISABLE :=  # must not be set</code>)。</li>
+    <li><strong>强制执行 VNDK</strong>。在 Android 8.1 中,VNDK 是可选的。在 Android 9 中,VNDK 是强制性的,这意味着<strong>不得</strong>设置 <code>BOARD_VNDK_RUNTIME_DISABLE</code> (<code>BOARD_VNDK_RUNTIME_DISABLE :=  # must not be set</code>)。</li>
     <li><strong>兼容的系统属性</strong>。Android 9 支持对兼容的系统属性进行访问检查:<code>PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true</code>。</li>
 </ul>
 
@@ -95,7 +94,7 @@
 
 <h3 id="changes-in-legacy-gsis">Android 9 旧版 GSI 变更</h3>
 
-<p>升级到 Android 9 的设备可以使用名称带后缀 <code>_ab</code> 或 <code>_a</code> 的旧版 GSI 产品(例如,<code>aosp_arm64_ab</code>、<code>aosp_x86_a</code>)。此 GSI 支持以下升级用例:</p>
+<p>升级到 Android 9 的设备可以使用名称带有 <code>_ab</code> 或 <code>_a</code> 后缀的旧版 GSI 产品(例如,<code>aosp_arm64_ab</code>、<code>aosp_x86_a</code>)测试合规性。此 GSI 支持以下升级用例:</p>
 
 <ul>
   <li>具有 Android 8.1 供应商接口实现的设备</li>
@@ -132,11 +131,11 @@
 <table>
   <tbody><tr>
    <th>用例</th>
-   <th>供应商二进制文件版本</th>
+   <th>供应商<br />二进制文件<br />版本</th>
    <th><code>BOARD_VNDK_VERSION</code></th>
    <th><code>BOARD_VNDK_RUNTIME_DISABLE</code></th>
-   <th>旧版 GSI 系统二进制文件版本</th>
-   <th>旧版 GSI 支持</th>
+   <th>旧版 GSI<br />系统二进制文件版本</th>
+   <th>旧版 GSI 支持情况</th>
   </tr>
   <tr>
    <td>0</td>
@@ -191,9 +190,7 @@
 <p>最常见的受支持用例是 2,其中旧版 GSI 支持运行 Android 8.1 且使用 <code>BOARD_VNDK_VERSION</code> 进行编译(而未通过设置 <code>BOARD_VNDK_RUNTIME_DISABLE</code> 进行编译,即,未停用运行时强制执行)的设备。
 </p>
 
-<p>两个不受支持的用例是 1.a 和 1.b,其中旧版 GSI 不支持运行 Android 8.1 且未使用 <code>BOARD_VNDK_VERSION</code> 或通过设置 <code>BOARD_VNDK_RUNTIME_DISABLE</code> 进行编译(即,运行时强制执行已停用)的设备。这些设备不受支持,因为它们的供应商二进制文件依赖于 Android 8.1 非 VNDK 共享库,这些库未包含在旧版 GSI 中。</p>
-
-<p>要使这些设备与旧版 GSI 兼容,供应商必须执行以下操作之一:</p>
+<p>两个不受支持的用例是 1.a 和 1.b,其中旧版 GSI 不支持运行 Android 8.1 且未使用 <code>BOARD_VNDK_VERSION</code> 或通过设置 <code>BOARD_VNDK_RUNTIME_DISABLE</code> 进行编译(即,运行时强制执行已停用)的设备。之所以不支持这些设备,是因为这些设备的供应商二进制文件依赖于 Android 8.1 非 VNDK 共享库,而旧版 GSI 中不包含这些库。要使这些设备与旧版 GSI 兼容,供应商必须执行以下操作之一:</p>
 
 <ul>
   <li>启用 <code>BOARD_VNDK_VERSION</code>,但未设置 <code>BOARD_VNDK_RUNTIME_DISABLE</code>(用例 2)<br /><br />或<br /><br /></li>
@@ -202,13 +199,13 @@
 
 <h2 id="building-gsis">编译 GSI</h2>
 
-<p>自 Android 9 开始,每个 Android 版本都在 AOSP 上拥有一个名为 <code><var>DESSERT</var>-gsi</code> 的 GSI 分支(例如,<code>pie-gsi</code> 是 Android 9 的 GSI 分支)。GSI 分支包含应用了所有<a href="/security/bulletin/">安全补丁程序</a>和 <a href="#contributing-to-a-gsi">GSI 补丁程序</a> 的 Android 内容。
+<p>从 Android 9 开始,每个 Android 版本都在 AOSP 上拥有一个名为 <code><var>DESSERT</var>-gsi</code> 的 GSI 分支(例如,<code>pie-gsi</code> 是 Android 9 的 GSI 分支)。GSI 分支包含应用了所有<a href="/security/bulletin/">安全补丁程序</a>和 <a href="#contributing-to-gsis">GSI 补丁程序</a>的 Android 内容。
 </p>
 
-<p>要编译 GSI,请从 GSI 分支进行<a href="/setup/build/downloading">下载</a>,然后<a href="/setup/build/building#choose-a-target">选择 GSI 编译目标</a>,从而设置 Android 源代码树。请根据以下编译目标表确定设备应使用哪个 GSI 版本。编译完成后,GSI 便会成为系统映像(例如 <code>system.img</code>)并显示在输出文件夹 <code>out/target/product/<strong>generic_arm64_ab</strong></code> 中。编译还会输出 <code>vbmeta.img</code>;对于使用 <a href="/security/verifiedboot/avb">Android 验证启动</a>的设备,您可以将其用于停用验证启动。
+<p>要编译 GSI,请从 GSI 分支进行<a href="/setup/build/downloading">下载</a>,然后<a href="/setup/build/building#choose-a-target">选择 GSI 编译目标</a>,从而设置 Android 源代码树。请根据以下编译目标表确定设备应使用哪个 GSI 版本。编译完成后,GSI 便会成为系统映像(例如 <code>system.img</code>)并显示在输出文件夹 <code>out/target/product/<strong>generic_arm64_ab</strong></code> 中。编译还会输出 <code>vbmeta.img</code>;您可以利用此映像在使用 <a href="/security/verifiedboot/avb">Android 验证启动</a>的设备上停用验证启动。
 </p><p>
 
-</p><p>示例:以下命令可在 GSI 分支 <code>pie-gsi</code> 上编译旧版 GSI 编译目标 <code>aosp_arm64_ab-userdebug</code>:</p>
+</p><p>例如,要在 GSI 分支 <code>pie-gsi</code> 上编译旧版 GSI 编译目标 <code>aosp_arm64_ab-userdebug</code>,请运行以下命令:</p>
 
 <pre class="prettyprint">
 $ repo init -u https://android.googlesource.com/platform/manifest -b pie-gsi
@@ -362,12 +359,12 @@
 <em>**可以根据要求添加</em>
 
 <aside class="aside">
-  <strong>注意</strong>:在未来的 Android 版本中可能会移除这些编译目标。
+  <strong>注意:</strong>在未来的 Android 版本中可能会移除这些编译目标。
 </aside>
 
-<h2 id="flashing-gsis">刷写 GSI</h2>
+<h2 id="flashing-gsis">刷写 GSI 的要求</h2>
 
-<p>Android 设备可能具有不同的设计,因此不可能通过单个命令或单组指令将 GSI 刷写到特定设备上。请使用以下常规步骤作为指南:</p>
+<p>Android 设备可能具有不同的设计,因此不可能通过单个命令或单组指令将 GSI 刷写到特定设备上。您可以向 Android 设备的制造商索要详细的刷写说明,也可以参考以下常规步骤:</p>
 
 <ol>
   <li>确保设备具备以下条件:
@@ -375,9 +372,7 @@
       <li>支持 HIDL-HAL 接口。</li>
       <li>用于解锁设备的方法(以便能够使用 <code>fastboot</code> 对其进行刷写)。</li>
       <li>用于停用验证启动的方法(例如 <a href="/security/verifiedboot/">vboot 1.0</a>、<a href="/security/verifiedboot/avb">AVB</a> 等)。</li>
-      <li>解锁设备,使其可通过 <code>fastboot</code> 进行刷写。</li>
-      <aside class="note">
-        <strong>注意</strong>:请通过 Android 源代码树来编译 <code>fastboot</code>,以确保您拥有其最新版本。</aside>
+      <li>解锁设备,使其可通过 <code>fastboot</code> 刷写。(为确保您拥有最新版本的 <code>fastboot</code>,请从 Android 源代码树进行编译。)</li>
     </ul>
   </li>
   <li>停用验证启动。</li>
@@ -386,7 +381,7 @@
   <li>重新启动设备。</li>
 </ol>
 
-<p>例如,要将 GSI 刷写到 Pixel 2 设备,请执行以下操作:</p>
+<p>例如,要将 GSI 刷写到任何 Pixel 设备,请执行以下操作:</p>
 
 <ol>
   <li><a href="/setup/build/running#booting-into-fastboot-mode">启动到引导加载程序模式</a>,然后<a href="/setup/build/running#unlocking-the-bootloader">解锁引导加载程序</a>。</li>
diff --git a/zh-cn/setup/build/jack.html b/zh-cn/setup/build/jack.html
index 50696dc..56e5e7a 100644
--- a/zh-cn/setup/build/jack.html
+++ b/zh-cn/setup/build/jack.html
@@ -21,7 +21,7 @@
   -->
 
 <aside class="warning">
-  <strong>警告</strong>:自 <a href="https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html" class="external">2017 年 3 月 14 日的这份公告</a>发布之后,Jack 工具链便被弃用了。Jack 是 Android 6.0 - 8.1 的默认 Android 编译工具链。
+  <strong>警告</strong>:自 <a href="https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html" class="external">2017 年 3 月 14 日的这份公告</a>发布之后,Jack 工具链已被弃用。Jack 是 Android 6.0 - 8.1 的默认 Android 编译工具链。
 </aside>
 
 <p>Jack 是一种 Android 工具链,用于将 Java 源代码编译成 Android dex 字节码。要使用 Jack,您只需使用标准的 Makefile 命令来编译源代码树或您的项目即可,无需进行任何其他操作。Android 8.1 是使用 Jack 的最后一个版本。</p>
@@ -34,7 +34,7 @@
 
 <h3 id="jack_library">Jack 库格式</h3>
 
-<p>Jack 具有自己的 .jack 文件格式,其中包含相应库的预编译 dex 代码,可实现更快速的编译(dex 预处理)。</p>
+<p>Jack 有自己的 .jack 文件格式,其中包含相应库的预编译 dex 代码,可实现更快速的编译(dex 预处理)。</p>
 
 <img src="../images/jack_library.png" alt="Jack 库文件内容"/>
 <figcaption><strong>图 2.</strong> Jack 库文件内容</figcaption>
@@ -87,7 +87,7 @@
 </tr>
 <tr>
 <td>编译因“Cannot launch background server”(无法启动后台服务器)而失败</td>
-<td>最可能的原因是您计算机上的 TCP 端口都被占用了。您可以通过修改 <code>$HOME/.jack</code>(<code>SERVER_PORT_SERVICE</code> 和 <code>SERVER_PORT_ADMIN</code> 变量)来更改端口。要解决这种问题,请通过修改 <code>$HOME/.jack</code> 并将 <code>SERVER</code> 更改为 false 来停用 Jack 编译服务器。遗憾的是,这将大大降低编译速度,并可能会迫使您使用加载控制(<code>make</code> 的选项 <code>-l</code> )启动 <code>make -j</code>。</td>
+<td>最可能的原因是您计算机上的 TCP 端口都被占用了。您可以通过修改 <code>$HOME/.jack</code>(<code>SERVER_PORT_SERVICE</code> 和 <code>SERVER_PORT_ADMIN</code> 变量)来更改端口。要解决这种问题,请通过修改 <code>$HOME/.jack</code> 并将 <code>SERVER</code> 更改为 false 来停用 Jack 编译服务器。但是,这将大大降低编译速度,并可能会迫使您使用加载控制(<code>make</code> 的选项 <code>-l</code> )启动 <code>make -j</code>。</td>
 </tr>
 <tr>
 <td>编译卡住了,没有任何进展</td>
diff --git a/zh-cn/setup/build/running.html b/zh-cn/setup/build/running.html
index 06dc2f6..d8df1fb 100644
--- a/zh-cn/setup/build/running.html
+++ b/zh-cn/setup/build/running.html
@@ -258,7 +258,7 @@
 <p><code>lunch</code> 菜单中提供了建议的设备编译系统,在不使用任何参数的情况下运行 <code>lunch</code> 命令即可查看。
 您可以从 developers.google.com 下载 Nexus 设备的出厂映像和二进制文件。请参阅<a href="requirements#binaries">设备二进制文件</a>进行下载。有关详情以及其他资源,请参阅<a href="building.html#obtaining-proprietary-binaries">下载专有二进制文件</a>。
 
-<table>
+</p><table>
 <thead>
 <tr>
 <th>设备</th>
@@ -395,7 +395,7 @@
 </tbody>
 </table>
 
-</p><aside class="note"><strong>注意</strong>:请不要在原本搭载 Android 4.1.2 或更高版本的 Nexus 7 上使用 Android 4.1.1。</aside>
+<aside class="note"><strong>注意</strong>:请不要在原本搭载 Android 4.1.2 或更高版本的 Nexus 7 上使用 Android 4.1.1。</aside>
 
 <h2 id="flashing-a-device">刷写设备</h2>
 
diff --git a/zh-cn/setup/community.html b/zh-cn/setup/community.html
index 0bb9f7f..08a3069 100644
--- a/zh-cn/setup/community.html
+++ b/zh-cn/setup/community.html
@@ -181,35 +181,35 @@
 <p><em>使用明确、相关的内容主题。</em> 这对每个人都会有所帮助,包括那些尝试回答您问题的人,以及可能在日后查找相关信息的人。</p>
 </li>
 <li>
-<p><em>在您的帖子中提供充足的详细信息。</em> 提供代码或日志片段、屏幕截图标注以及类似的详细信息有助于获得更理想的结果,并能促成更有效的讨论。如需在提问时如何措辞方面的实用指导,请参阅<a href="http://www.catb.org/%7Eesr/faqs/smart-questions.html">提问的智慧</a>。</p>
+<p><em>在您的帖子中提供充足的详细信息。</em> 提供代码或日志片段、屏幕截图标注以及类似的详细信息有助于获得更理想的结果,并能促成更有效的讨论。要查看有关在提问时如何措辞的实用指导,请参阅<a href="http://www.catb.org/%7Eesr/faqs/smart-questions.html">提问的智慧</a>。</p>
 </li>
 </ul>
 
 <h3 id="mailing">论坛规则</h3>
-<p>我们喜欢简单,讨厌各种限制,因此我们的政策极其简要。以下规则说明了我们对 Android 论坛订阅者的要求。
+<p>我们喜欢简单,讨厌各种限制,因此我们的规则极其简要。我们在以下规则中说明了我们对 Android 论坛订阅者的要求。
 
 </p><ul>
-<li>请保持友善的态度:对他人保持礼貌和尊重是 Android 文化的重要组成部分,我们希望参与 Android 社区的每个人都和我们一样毫无保留地接受这一点。<em></em>保持礼貌并不意味着我们彼此之间不能以具有建设性的方式表达异议,但我们在表达异议时必须要有礼貌。无论出于任何原因,都不能敌视或轻视任何人;如果您认为自己有这种情绪,那么在发帖之前请三思。移动开发是一项非常严肃的业务,但也有很多乐趣。让我们保持这种状态,努力打造最友善的开放源代码社区之一。
+<li>请保持友善的态度:对他人保持礼貌和尊重是 Android 文化的重要组成部分,我们希望参与 Android 社区活动的每个人都和我们一样毫无保留地接受这一点。<em></em>保持礼貌并不意味着我们相互之间不能提出有建设性的异议,但我们在表达异议时必须要有礼貌。无论出于何种原因,都不能对任何人表现出轻视或敌意;如果您认为自己有这种情绪,发帖之前请三思。移动开发是一项非常严肃的工作,但同时也充满着乐趣。让我们保持这种状态,努力打造最友善的开源社区之一。
 </li>
-<li>允许讨论的主题:我们的大多数论坛都用于讨论与 Android 相关的技术话题或方便用户互相帮助。<em></em>一般情况下,我们不会对在论坛中讨论的主题进行严格限制:只要主题在某种程度上与 Android 相关,都可以在我们的论坛中进行讨论。我们欢迎大家公布和讨论与 Android 相关的产品、库、出版物和其他有趣的新闻,但请不要同时在多个论坛中发帖。请仅在与您的内容最相关的论坛中发帖。我们甚至欢迎讨论批判 Android 的文章和想法(但请保持礼貌!)- 毕竟,如果我们不听取意见,就无法改进。
+<li>允许讨论的主题:我们的大多数论坛都用于讨论与 Android 相关的技术话题或方便用户互相帮助。<em></em>一般情况下,我们不会对在论坛中讨论的主题进行严格限制:只要主题在某种程度上与 Android 相关,都可以在我们的论坛中进行讨论。我们欢迎大家公布和讨论与 Android 相关的产品、库、出版物和其他有趣的新闻,但请不要同时在多个论坛中发帖。请仅在与您的内容最相关的论坛中发帖。我们甚至欢迎讨论批判 Android 的文章和想法(但要保持礼貌态度!)- 毕竟,如果我们不听取意见,就无法改进。
 </li>
 <li>工作论坛:我们的某些论坛被视为“工作论坛”(旨在为完成特定任务提供支持)。<em></em>在这些论坛中,我们不欢迎与主题无关的讨论。如果您要进行一般讨论,我们通常会要求您使用其他论坛。由于人们会利用这些论坛来完成相关工作,因此我们会采取积极的举措来减少无关的内容。我们希望您能够尊重贡献者们的宝贵时间,并使用适当的论坛进行一般讨论。
 </li>
-<li>垃圾内容:我们非常讨厌垃圾内容,这种心情正如我们崇尚礼貌和尊重一样强烈,因此我们保留限制垃圾讨论内容的权利。<em></em>如果有人发布纯属垃圾的内容,我们会立即并永久禁止发布者使用相应论坛。
+<li>垃圾内容:我们非常讨厌垃圾内容,这种心情和我们崇尚礼貌和尊重一样强烈,因此我们保留限制讨论垃圾内容的权利。<em></em>如果有人发布纯粹的垃圾内容,我们会立即并永久禁止发布者使用相应论坛。
 </li>
 </ul>
-<p>友善是最重要的规则。请谨记:在任何情况下,我们的社区都不欢迎不尊重他人和粗鲁的行为。我们没有制定正式的政策来对付捣乱者,也希望永远都不需要制定这样的政策。不过,我们承诺会尽最大努力保证公平,并且始终会先尝试警告对方,警告无果后再禁止其使用相应论坛。</p>
+<p>友善是最重要的规则。请记住:在任何情况下,我们的社区都不欢迎不尊重他人和粗鲁的行为。我们并没有制定正式的规则来处理捣乱者,也希望永远都不需要制定这样的规则。不过,我们承诺会尽最大努力保证公平公正,并且我们始终会先尝试警告对方,警告无果后再禁止其使用相应论坛。</p>
 
 <h3 id="contacting">与管理员联系</h3>
-<p>如果您发现有人言行粗鲁,请制止他们。您也是相应论坛的一份子,因此您不必因为他人的无礼行为不是针对您而予以容忍。切记要有礼有节!请勿火上浇油。</p>
-<p>不过,如果您发现难以容忍的违规行为,想要举报垃圾内容,有强烈意见或想与管理员交流,请随时与论坛所有者联系。这是我们的职责所在!</p>
+<p>如果您发现有人言行粗鲁,请制止他们。您也是论坛的一份子,不必因为无礼行为不是针对您而采取容忍态度。切记要有礼有节!请勿火上浇油。</p>
+<p>不过,如果您发现有出格的违规行为,想要举报垃圾内容,有重要意见或想与管理员交流,请随时与论坛所有者联系。这是我们的职责所在!</p>
 
-<h3 id="using-email-with-google-groups">通过电子邮件参与 Google 网上论坛</h3>
-<p>您可以使用任意电子邮件客户端参与论坛交流,而不必使用 <a href="https://groups.google.com/">Google 网上论坛</a>网站。要在不使用 Google 网上论坛网站的情况下订阅某个论坛,请使用上文列表中“通过电子邮件订阅”后的链接。</p>
+<h3 id="using-email-with-google-groups">通过电子邮件参与 Google 网上论坛交流</h3>
+<p>您可以不通过 <a href="https://groups.google.com/">Google 网上论坛</a>网站,而使用电子邮件客户端参与论坛交流。如果不想通过 Google 网上论坛网站订阅某个论坛,可以使用上文列表中“通过电子邮件订阅”下的链接订阅。</p>
 <p>要设置如何通过电子邮件接收论坛帖子,请执行以下操作:</p>
 <ol>
 <li>
-<p>通过 Google 网上论坛网站登录到相应论坛。例如,对于 android-platform 论坛,请使用 <a href="https://groups.google.com/forum/?fromgroups#!forum/android-platform">https://groups.google.com/forum/?fromgroups#!forum/android-platform</a>。</p>
+<p>通过 Google 网上论坛网站登录论坛。例如,要访问 android-platform 论坛,请使用 <a href="https://groups.google.com/forum/?fromgroups#!forum/android-platform">https://groups.google.com/forum/?fromgroups#!forum/android-platform</a>。</p>
 </li>
 <li>
 <p>点击右侧的“我的成员资格”。</p>
@@ -219,7 +219,7 @@
 </li>
 </ol>
 <h2 id="android-on-irc">在 IRC 上讨论 Android</h2>
-<p>Android 在 <a href="http://freenode.net/">freenode</a> 上有 IRC 频道。我们在 <a href="irc://irc.freenode.net/">irc.freenode.net</a> 上维护着两个官方 IRC 频道(通过该网站的 <a href="http://webchat.freenode.net/">freenode webchat</a> 访问)</p>
+<p>Android 在 <a href="http://freenode.net/">freenode</a> 上有 IRC 频道。我们在 <a href="irc://irc.freenode.net/">irc.freenode.net</a> 上开设了两个官方 IRC 频道(通过该网站的 <a href="http://webchat.freenode.net/">freenode webchat</a> 访问)</p>
 <ul>
 <li>
 <p><a href="irc://irc.freenode.net/android">#android</a> - 用于讨论一般性 Android 问题和移植问题</p>
@@ -246,7 +246,7 @@
 </ul>
 
 <h2 id="for-business-inquiries">关于 Google 移动服务许可方面的问题</h2>
-<p>请通过 <a href="https://www.android.com/gms/contact/">GMS 联系</a>表单咨询关于 <a href="https://www.android.com/gms/">Google 移动服务</a>许可的问题。其他非 GMS 合作伙伴关系问询可发送至 <a href="mailto:[email protected]">[email protected]</a>。</p>
+<p>请通过 <a href="https://www.android.com/gms/contact/">GMS 联系</a>表单发送关于 <a href="https://www.android.com/gms/">Google 移动服务</a>许可的问题。其他非 GMS 合作伙伴关系问询可发送至 <a href="mailto:[email protected]">[email protected]</a>。</p>
 
 <p>我们会阅读收到的每封邮件,但无法一一进行回复。如果我们能够提供帮助,一定会与您联系!</p>
 
diff --git a/zh-cn/setup/contribute/code-style.html b/zh-cn/setup/contribute/code-style.html
index 6e72c8f..41a1623 100644
--- a/zh-cn/setup/contribute/code-style.html
+++ b/zh-cn/setup/contribute/code-style.html
@@ -20,127 +20,176 @@
       limitations under the License.
   -->
 
-<p>以下代码样式是向 Android 开源项目 (AOSP) 贡献 Java 代码时必须严格遵守的规则。如果向 Android 平台贡献的代码没有遵守这些规则,则通常不会被接受。<em></em>我们知道,并非所有现有的代码都遵守这些规则,但我们希望所有新代码都遵守这些规则。</p>
+<p>以下代码样式是向 Android 开源项目 (AOSP) 贡献 Java 代码时必须严格遵守的规则。如果向 Android 平台贡献的代码没有遵守这些规则,则通常不会被接受。<em></em>我们知道,并非所有现有的代码都遵守这些规则,但我们希望所有新代码都遵守这些规则。
+</p>
 
-<p class="note"><strong>注意</strong>:这些规则针对的是 Android 平台,Android 应用开发者可以不遵守这些规则。应用开发者可以遵守他们选择的标准,如 <a href="https://google.github.io/styleguide/javaguide.html">Google Java 样式指南</a>。</p>
+<aside class="note">
+  <strong>注意</strong>:这些规则针对的是 Android 平台,Android 应用开发者可以不遵守这些规则。应用开发者可以遵守他们选择的标准,如 <a href="https://google.github.io/styleguide/javaguide.html" class="external">Google Java 样式指南</a>。
+</aside>
 
 <h2 id="java-language-rules">Java 语言规则</h2>
-<p>Android 遵循标准 Java 编码规范以及下文所述的其他规则。</p>
 
-<h3 id="dont-ignore-exceptions">请勿忽略异常</h3>
-<p>开发者可能会倾向于编写完全忽略异常的代码,例如:</p>
-<pre><code>void setServerPort(String value) {
+  <p>Android 遵循标准 Java 编码规范以及下文所述的其他规则。
+  </p>
+
+  <h3 id="dont-ignore-exceptions">请勿忽略异常</h3>
+
+    <p>开发者可能会倾向于编写完全忽略异常的代码,例如:</p>
+
+<pre class="prettyprint">
+  void setServerPort(String value) {
     try {
         serverPort = Integer.parseInt(value);
     } catch (NumberFormatException e) { }
-}
-</code></pre>
-<p>千万不要这样做。虽然您可能认为自己的代码永远不会遇到这种错误,或者无需费心处理这种错误,但像上例那样忽略异常会在您的代码中埋下隐患,这种错误总有一天会被他人触发。您必须有原则地处理代码中的每个异常;具体处理方式因情况而异。</p>
-<p><em>无论何时,只要遇到空的 catch 子句,就应该保持警惕。当然,在某些时候,空的 catch 语句确实没什么问题,但至少你得想一想。在 Java 中,无论怎么小心都不为过。- <a href="http://www.artima.com/intv/solid4.html">James Gosling</a></em></p>
-<p>可接受的替代方案(按优先顺序排列)包括:</p>
-<ul>
-<li>将异常抛给方法调用者。
-<pre><code>void setServerPort(String value) throws NumberFormatException {
-    serverPort = Integer.parseInt(value);
-}
-</code></pre>
-</li>
-<li>抛出一个适合您的抽象级别的新异常。
-<pre><code>void setServerPort(String value) throws ConfigurationException {
+  }
+</pre>
+
+    <p>千万不要这样做。虽然您可能认为自己的代码永远不会遇到这种错误,或者无需费心处理这种错误,但像上例那样忽略异常会在您的代码中埋下隐患,这种错误总有一天会被他人触发。您必须有原则地处理代码中的每个异常;具体处理方式因情况而异。
+    </p>
+
+    <p class="inline-block">“无论何时,只要遇到空的 catch 子句,就应该保持警惕。<em>当然,在某些时候,空的 catch 语句确实没什么问题,但至少你得想一想。</em>在 Java 中,无论怎么小心都不为过。- <a href="http://www.artima.com/intv/solid4.html" class="external">James Gosling</a>
+    </p>
+
+    <p>可接受的替代方案(按优先顺序排列)包括:</p>
+
+    <ul>
+      <li>将异常抛给方法调用者。
+<pre class="prettyprint">
+  void setServerPort(String value) throws NumberFormatException {
+      serverPort = Integer.parseInt(value);
+  }
+</pre>
+      </li>
+      <li>抛出一个适合您的抽象级别的新异常。
+<pre class="prettyprint">
+  void setServerPort(String value) throws ConfigurationException {
     try {
         serverPort = Integer.parseInt(value);
     } catch (NumberFormatException e) {
         throw new ConfigurationException("Port " + value + " is not valid.");
     }
-}
-</code></pre>
-</li>
-<li>妥善处理错误,并替换 catch {} 块中的相应值。
-<pre><code>/** Set port. If value is not a valid number, 80 is substituted. */
+  }
+</pre>
+      </li>
+      <li>妥善处理错误,并替换 <code>catch {}</code> 块中的相应值。
+<pre class="prettyprint">
+  /** Set port. If value is not a valid number, 80 is substituted. */
 
-void setServerPort(String value) {
+  void setServerPort(String value) {
     try {
         serverPort = Integer.parseInt(value);
     } catch (NumberFormatException e) {
         serverPort = 80;  // default port for server
     }
-}
-</code></pre>
-</li>
-<li>捕获异常并抛出一个新的 <code>RuntimeException</code>。这样做比较危险,因此请仅在下述情况下采用这种方案:您确定,如果发生此错误,最适当的处理方式就是让应用崩溃。
-<pre><code>/** Set port. If value is not a valid number, die. */
+  }
+</pre>
+      </li>
+      <li>捕获异常并抛出一个新的 <code>RuntimeException</code>。这样做比较危险,因此请仅在下述情况下采用这种方案:您确定,如果发生此错误,最适当的处理方式就是让应用崩溃。
 
-void setServerPort(String value) {
+<pre class="prettyprint">
+  /** Set port. If value is not a valid number, die. */
+
+  void setServerPort(String value) {
     try {
         serverPort = Integer.parseInt(value);
     } catch (NumberFormatException e) {
         throw new RuntimeException("port " + value " is invalid, ", e);
     }
-}
-</code></pre>
-<p class="note"><strong>注意</strong>:原始异常会传递到 RuntimeException 的构造函数。如果您的代码必须采用 Java 1.3 进行编译,则必须忽略表示原因的异常。</p>
-</li>
-<li>最后一种方案:如果您确信忽略异常是合适的处理方式,那么您可以忽略异常,但您必须添加备注以充分说明理由:
-<pre><code>/** If value is not a valid number, original port number is used. */
-void setServerPort(String value) {
+  }
+</pre>
+        <aside class="note">
+          <strong>注意</strong>:原始异常会传递到 RuntimeException 的构造函数。如果您的代码必须采用 Java 1.3 进行编译,则必须忽略表示原因的异常。
+        </aside>
+      </li>
+      <li>最后一种方案:如果您确信忽略异常是合适的处理方式,那么您可以忽略异常,但您必须添加备注以充分说明理由:<pre class="prettyprint">
+  /** If value is not a valid number, original port number is used. */
+
+  void setServerPort(String value) {
     try {
         serverPort = Integer.parseInt(value);
     } catch (NumberFormatException e) {
         // Method is documented to just ignore invalid user input.
         // serverPort will just be unchanged.
     }
-}
-</code></pre>
-</li>
-</ul>
+  }
+</pre>
+      </li>
+    </ul>
 
-<h3 id="dont-catch-generic-exception">请勿捕获常规异常</h3>
-<p>在捕获异常时,开发者可能会为了偷懒而倾向于采用以下处理方式:</p>
-<pre><code>try {
-    someComplicatedIOFunction();        // may throw IOException
-    someComplicatedParsingFunction();   // may throw ParsingException
-    someComplicatedSecurityFunction();  // may throw SecurityException
-    // phew, made it all the way
-} catch (Exception e) {                 // I'll just catch all exceptions
-    handleError();                      // with one generic handler!
-}
-</code></pre>
-<p>千万不要这样做。几乎所有情况下都不适合捕获常规异常或 Throwable(最好不要捕获 Throwable,因为它包含 Error 异常)。这样做非常危险,因为这意味着系统会在处理应用级错误期间捕获到您从未预料到的异常(包括 ClassCastException 之类的 RuntimeException)。它掩盖了代码的故障处理属性,也就是说,如果有人在您所调用的代码中添加了一种新类型的异常,编译器不会帮助您意识到您需要采取不同的方式来处理该错误。在大多数情况下,您不应以相同的方式处理不同类型的异常。</p>
-<p>这条规则的特例是:在测试代码和顶级代码中,您希望捕获所有类型的错误(以防它们显示在界面中或者以便一直进行批处理作业)。在这些情况下,您可以捕获常规异常(或 Throwable)并适当地处理错误。但在这样做之前,请务必三思,然后添加备注以说明为何在此处执行这类操作是安全之举。</p>
-<p>捕获常规异常的替代方案:</p>
-<ul>
-<li>
-<p>在单个 try 之后将每个异常作为单独的 catch 块分别进行捕获。这样做可能显得比较笨拙,但仍比捕获所有异常更可取。请注意,不要在 catch 块中过多地重复使用代码。</p></li><p></p>
+  <h3 id="dont-catch-generic-exception">请勿捕获常规异常</h3>
 
-<li>
-<p>通过多个 try 块重构您的代码,使得错误处理过程更精细。从解析中分离出 IO,然后分别处理每种情况下的错误。</p>
-</li>
-<li>
-<p>重新抛出异常。很多时候,您无需在该级别捕获异常,只需让相应方法抛出异常即可。</p>
-</li>
-</ul>
-<p>请谨记:异常是您的朋友!当编译器抱怨您没有捕获异常时,别闷闷不乐!您应该微笑:因为编译器让您能够更加轻松地捕获代码中的运行时错误。</p>
-<h3 id="dont-use-finalizers">请勿使用终结器</h3>
-<p>终结器可以在对象被垃圾回收器回收时执行一段代码。虽然终结器非常便于进行资源清理(尤其是外部资源),但并不能保证终结器何时被调用(甚至根本不会被调用)。</p>
-<p>Android 不使用终结器。在大多数情况下,您可以通过良好的异常处理流程实现终结器功能。如果您的确需要终结器,请定义一个 close() 方法(或类似方法),并注明需要调用该方法的确切时间(有关示例,请参阅 InputStream)。这种情况下,可以(但并非必须)在终结器中输出简短的日志消息,前提是不会输出大量日志消息。</p>
+    <p>在捕获异常时,开发者可能会为了偷懒而倾向于采用以下处理方式:</p>
 
-<h3 id="fully-qualify-imports">完全合格的导入</h3>
-<p>当您想要使用 foo 包中的 Bar 类时,可以使用以下两种方式导入:</p>
-<ul>
-<li><code>import foo.*;</code>
-<p>可能会减少 import 语句的数量。</p></li>
-<li><code>import foo.Bar;</code>
-<p>明确指出实际使用了哪些类,而且代码对于维护者来说更易读。</p></li></ul>
-<p>使用 <code>import foo.Bar;</code> 导入所有 Android 代码。对于 Java 标准库(<code>java.util.*</code>、<code>java.io.*</code> 等)和单元测试代码 (<code>junit.framework.*</code>),确立了一种明确的例外情况。</p>
+<pre class="prettyprint">
+  try {
+      someComplicatedIOFunction();        // may throw IOException
+      someComplicatedParsingFunction();   // may throw ParsingException
+      someComplicatedSecurityFunction();  // may throw SecurityException
+      // phew, made it all the way
+  } catch (Exception e) {                 // I'll just catch all exceptions
+      handleError();                      // with one generic handler!
+  }
+</pre>
+
+    <p>千万不要这样做。几乎所有情况下都不适合捕获常规异常或 Throwable(最好不要捕获 Throwable,因为它包含 Error 异常)。这样做非常危险,因为这意味着系统会在处理应用级错误期间捕获到您从未预料到的异常(包括 ClassCastException 之类的 RuntimeException)。它掩盖了代码的故障处理属性,也就是说,如果有人在您所调用的代码中添加了一种新类型的异常,编译器不会帮助您意识到您需要采取不同的方式来处理该错误。在大多数情况下,您不应以相同的方式处理不同类型的异常。
+    </p>
+
+    <p>这条规则的特例是:在测试代码和顶级代码中,您希望捕获所有类型的错误(以防它们显示在界面中或者以便一直进行批处理作业)。在这些情况下,您可以捕获常规异常(或 Throwable)并适当地处理错误。但在这样做之前,请务必三思,然后添加备注以说明为何在此处执行这类操作是安全之举。
+    </p>
+
+    <p>捕获常规异常的替代方案:</p>
+
+    <ul>
+      <li>在单次 try 操作之后将每个异常作为单独的 catch 块分别进行捕获。这样做可能显得比较笨拙,但仍比捕获所有异常更可取。请注意,不要在 catch 块中过多地重复使用代码。
+      </li>
+      <li>通过多个 try 块重构您的代码,使得错误处理过程更精细。从解析中分离出 IO,然后分别处理每种情况下的错误。
+      </li>
+      <li>重新抛出异常。很多时候,您无需在该级别捕获异常,只需让相应方法抛出异常即可。
+      </li>
+    </ul>
+
+    <p>请谨记:异常是您的朋友!当编译器抱怨您没有捕获异常时,别闷闷不乐!您应该微笑:因为编译器让您能够更加轻松地捕获代码中的运行时错误。
+    </p>
+
+  <h3 id="dont-use-finalizers">请勿使用终结器</h3>
+
+    <p>终结器可以在对象被垃圾回收器回收时执行一段代码。虽然终结器非常便于进行资源清理(尤其是外部资源),但并不能保证终结器何时被调用(甚至根本不会被调用)。
+    </p>
+
+    <p>Android 不使用终结器。在大多数情况下,您可以通过良好的异常处理流程实现终结器功能。如果您的确需要终结器,请定义一个 close() 方法(或类似方法),并注明需要调用该方法的确切时机(有关示例,请参阅 InputStream)。这种情况下,可以(但并非必须)在终结器中输出简短的日志消息,前提是不会输出大量日志消息。
+    </p>
+
+  <h3 id="fully-qualify-imports">完全合格的导入</h3>
+
+    <p>当您想要使用 foo 包中的 Bar 类时,可以使用以下两种方式导入:</p>
+
+    <ul>
+      <li><code>import foo.*;</code>
+        <p>可能会减少 import 语句的数量。</p>
+      </li>
+      <li><code>import foo.Bar;</code>
+        <p>明确指出实际使用了哪些类,而且代码对于维护者来说更清晰易读。
+        </p>
+      </li>
+    </ul>
+
+    <p>使用 <code>import foo.Bar;</code> 导入所有 Android 代码。对于 Java 标准库(<code>java.util.
+      </code>、<code>java.io.*</code> 等)和单元测试代码 (<code>junit.framework.*</code>),确立了一种明确的例外情况。
+    </p>
 
 <h2 id="java-library-rules">Java 库规则</h2>
-<p>使用 Android 的 Java 库和工具需要遵守相关规范。在某些情况下,具体规范发生了一些重大变化,旧代码可能使用的是已弃用的模式或库。使用此类代码时,可以继续遵循现有样式。不过,在创建新组件时,请不要再使用已弃用的库。</p>
+
+  <p>使用 Android 的 Java 库和工具需要遵守相关规范。在某些情况下,具体规范发生了一些重大变化,旧代码使用的可能是已弃用的模式或库。使用此类代码时,可以继续遵循现有样式。不过,在创建新组件时,请不要再使用已弃用的库。
+  </p>
 
 <h2 id="java-style-rules">Java 样式规则</h2>
 
-<h3 id="use-javadoc-standard-comments">使用 Javadoc 标准备注</h3>
-<p>每个文件都应该在顶部放置版权声明,其后是 package 和 import 语句(各个块之间用空行分隔),最后是类或接口声明。在 Javadoc 备注中说明类或接口的作用。</p>
-<pre><code>/*
+  <h3 id="use-javadoc-standard-comments">使用 Javadoc 标准备注</h3>
+
+    <p>每个文件都应该在顶部放置版权声明,其后是 package 和 import 语句(各个块之间用空行分隔),最后是类或接口声明。在 Javadoc 备注中说明类或接口的作用。
+    </p>
+<pre class="prettyprint">
+/*
  * Copyright 2018 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -171,37 +220,62 @@
 public class Foo {
     ...
 }
-</code></pre>
-<p>您编写的每个类和重要的公开方法都必须包含 Javadoc 备注,至少用一句话说明类或方法的用途。<em></em>句式应以第三人称描述性动词开头。</p>
-<p>示例:</p>
-<pre><code>/** Returns the correctly rounded positive square root of a double value. */
+</pre>
+
+    <p>您编写的每个类和重要的公共方法都必须包含 Javadoc 备注,至少用一句话说明类或方法的用途。<em></em>句式应以第三人称描述性动词开头。
+    </p>
+
+    <p><strong>示例</strong></p>
+
+<pre class="prettyprint">
+/** Returns the correctly rounded positive square root of a double value. */
+
 static double sqrt(double a) {
     ...
 }
-</code></pre>
-<p>或</p>
-<pre><code>/**
+</pre>
+
+    <p>或</p>
+
+<pre class="prettyprint">
+/**
  * Constructs a new String by converting the specified array of
  * bytes using the platform's default character encoding.
  */
 public String(byte[] bytes) {
     ...
 }
-</code></pre>
-<p>对于普通的 get 和 set 方法(如 <code>setFoo()</code>),您无需编写 Javadoc,要写也不过是“设置 Foo”。如果该方法执行更复杂的操作(例如强制实施约束条件或具有重大副作用),那么您必须添加备注。如果属性“Foo”的意思不明确,您也应该添加备注。
-</p><p>您所编写的每一种方法(无论是公开方法还是其他方法)都将受益于 Javadoc。公开方法是 API 的一部分,因此需要 Javadoc。Android 目前并不强制要求采用特定样式来编写 Javadoc 备注,但建议您参照<a href="http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html">如何为 Javadoc 工具编写文档备注</a>中的说明。</p>
+</pre>
 
-<h3 id="write-short-methods">编写简短方法</h3>
-<p>在可行的情况下,尽量编写短小精炼的方法。我们了解,有些情况下较长的方法是恰当的,因此对方法的代码长度没有做出硬性限制。如果某个方法的代码超出 40 行,请考虑是否可以在不破坏程序结构的前提下对其拆解。</p>
+    <p>对于普通的 get 和 set 方法(如 <code>setFoo()</code>),您无需编写 Javadoc 备注,要写也不过是“sets Foo”。如果该方法执行更复杂的操作(例如强制实施约束条件或具有重大副作用),那么您必须添加备注。如果属性“Foo”的意思不明确,您也应该添加备注。
+    </p>
 
-<h3 id="define-fields-in-standard-places">在标准位置定义字段</h3>
-<p>在文件的顶部或者在使用它们的方法之前定义字段。</p>
+    <p>您所编写的每一种方法(无论是公共方法还是其他方法)都将受益于 Javadoc 备注。公共方法是 API 的一部分,因此需要添加 Javadoc 备注。Android 目前并不强制要求采用特定样式来编写 Javadoc 备注,但建议您参照<a href="http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html" class="external">如何为 Javadoc 工具编写文档备注</a>一文中的说明。
+    </p>
 
-<h3 id="limit-variable-scope">限制变量的作用域</h3>
-<p>尽可能缩小局部变量的作用域。这样做有助于提高代码的可读性和可维护性,并降低出错的可能性。每个变量应该在包含变量所有使用场合的最内层的块中进行声明。</p>
-<p>局部变量应该在首次使用时声明。几乎每个局部变量声明都应该包含一个初始化程序。如果您还没有足够的信息来合理地初始化某个变量,请推迟到信息充足时再进行声明。</p>
-<p>try-catch 语句是例外情况。如果通过一个会抛出受检异常的方法的返回值来初始化变量,则必须在 try 块中进行初始化。如果该值必须在 try 块之外使用,那么您必须在 try 块之前对其进行声明,因为它在 try 块中尚无法合理地初始化:</p>
-<pre><code>// Instantiate class cl, which represents some sort of Set
+  <h3 id="write-short-methods">编写简短方法</h3>
+
+    <p>在可行的情况下,尽量编写短小精炼的方法。我们了解,有些情况下较长的方法是恰当的,因此对方法的代码长度没有做出硬性限制。如果某个方法的代码超出 40 行,请考虑是否可以在不破坏程序结构的前提下对其拆解。
+    </p>
+
+  <h3 id="define-fields-in-standard-places">在标准位置定义字段</h3>
+
+    <p>在文件的顶部或者在使用它们的方法之前定义字段。
+    </p>
+
+  <h3 id="limit-variable-scope">限制变量的作用域</h3>
+
+    <p>尽可能缩小局部变量的作用域。这样做有助于提高代码的可读性和可维护性,并降低出错的可能性。每个变量都应该在包含变量所有使用场合的最内层的块中进行声明。
+    </p>
+
+    <p>局部变量应该在首次使用时声明。几乎每个局部变量声明都应该包含一个初始化程序。如果您还没有足够的信息来合理地初始化某个变量,请推迟到信息充足时再进行声明。
+    </p>
+
+    <p>try-catch 语句是一种例外情况。如果通过一个会抛出受检异常的方法的返回值来初始化变量,则必须在 try 块中进行初始化。如果该值必须在 try 块之外使用,那么您必须在 try 块之前对其进行声明,因为它在 try 块中尚无法合理地初始化:</p>
+
+<pre class="prettyprint">
+// Instantiate class cl, which represents some sort of Set
+
 Set s = null;
 try {
     s = (Set) cl.newInstance();
@@ -213,9 +287,12 @@
 
 // Exercise the set
 s.addAll(Arrays.asList(args));
-</code></pre>
-<p>不过,即使是这种情况,也可以通过将 try-catch 块封装在某个方法中来避免:</p>
-<pre><code>Set createSet(Class cl) {
+</pre>
+
+    <p>不过,即使是这种情况,也可以通过将 try-catch 块封装在某个方法中来避免:</p>
+
+<pre class="prettyprint">
+Set createSet(Class cl) {
     // Instantiate class cl, which represents some sort of Set
     try {
         return (Set) cl.newInstance();
@@ -231,86 +308,102 @@
 // Exercise the set
 Set s = createSet(cl);
 s.addAll(Arrays.asList(args));
-</code></pre>
-<p>循环变量应该在 for 语句本身中进行声明,除非有令人信服的理由不这么做:</p>
-<pre><code>for (int i = 0; i &lt; n; i++) {
+</pre>
+
+    <p>循环变量应该在 for 语句本身中进行声明,除非有令人信服的理由不这么做:</p>
+
+<pre class="prettyprint">
+for (int i = 0; i &lt; n; i++) {
     doSomething(i);
 }
-</code></pre>
-<p>和</p>
-<pre><code>for (Iterator i = c.iterator(); i.hasNext(); ) {
+</pre>
+
+    <p>和</p>
+
+<pre class="prettyprint">
+for (Iterator i = c.iterator(); i.hasNext(); ) {
     doSomethingElse(i.next());
 }
-</code></pre>
+</pre>
 
-<h3 id="order-import-statements">为 import 语句排序</h3>
-<p>import 语句的顺序为:</p>
-<ol>
-<li>
-<p>导入 Android 包</p>
-</li>
-<li>
-<p>导入第三方包(<code>com</code>、<code>junit</code>、<code>net</code>、<code>org</code>)</p>
-</li>
-<li>
-<p><code>java</code> 和 <code>javax</code></p>
-</li>
-</ol>
-<p>要完全符合 IDE 设置,导入顺序应为:</p>
-<ul>
-<li>
-<p>每个分组内按字母顺序排序,其中大写字母开头的语句位于小写字母开头的语句前面(例如 Z 在 a 前面)。</p>
-</li>
-<li>
-<p>每个主要分组(<code>android</code>、<code>com</code>、<code>junit</code>、<code>net</code>、<code>org</code>、<code>java</code>、<code>javax</code>)之间用空行隔开。</p>
-</li>
-</ul>
-<p>最初对于语句顺序并没有样式要求,这意味着 IDE 经常会改变顺序,或者 IDE 开发者必须停用自动导入管理功能并手动维护导入语句。这样相当不方便。当提及 Java 样式时,开发者们喜欢的样式五花八门,最终针对 Android 简单归结为“选择一种兼容一致的排序方式”。因此我们选择了一种样式,更新了样式指南,并让 IDE 遵循该指南。我们希望 IDE 用户在编写代码时,系统对所有软件包的导入都符合此模式,无需再进行额外的工程处理。</p>
-<p>这种样式是按以下原则选取的:</p>
-<ul>
-<li>
-<p>用户希望先看到的导入往往位于顶部 (<code>android</code>)。</p>
-</li>
-<li>
-<p>用户最不希望看到的导入往往位于底部 (<code>java</code>)。</p>
-</li>
-<li>
-<p>用户可以轻松遵循的样式。</p>
-</li>
-<li>
-<p>IDE 可以遵循的样式。</p>
-</li>
-</ul>
-<p>将静态导入置于所有其他导入之上(与常规导入一样的排序方式)。</p>
+  <h3 id="order-import-statements">为 import 语句排序</h3>
 
-<h3 id="use-spaces-for-indentation">使用空格缩进</h3>
-<p>我们使用四 (4) 个空格来缩进块,而不要使用制表符。如果您有疑问,请与周围的代码保持一致。</p>
-<p>我们使用八 (8) 个空格来缩进自动换行,包括函数调用和赋值。正确示例如下:</p>
-<pre><code>Instrument i =
+    <p>import 语句的顺序为:</p>
+
+    <ol>
+      <li>导入 Android 包</li>
+      <li>导入第三方包(<code>com</code>、<code>junit</code>、<code>net</code>、<code>org</code>)</li>
+      <li>
+        <code>java</code> 和 <code>javax</code>
+      </li>
+    </ol>
+
+    <p>要完全符合 IDE 设置,导入顺序应为:</p>
+
+    <ul>
+      <li>每个分组内按字母顺序排序,其中大写字母开头的语句位于小写字母开头的语句前面(例如 Z 在 a 前面)。
+      </li>
+      <li>每个主要分组(<code>android</code>、<code>com</code>、<code>junit</code>、<code>net</code>、<code>org</code>、<code>java</code>、<code>javax</code>)之间用空行隔开。
+      </li>
+    </ul>
+
+    <p>最初对于语句顺序并没有样式要求,这意味着 IDE 经常会改变顺序,或者 IDE 开发者必须停用自动导入管理功能并手动维护导入语句。这样相当不方便。当提及 Java 样式时,开发者们喜欢的样式五花八门,最终针对 Android 简单归结为“选择一种兼容一致的排序方式”。因此我们选择了一种样式,更新了样式指南,并让 IDE 遵循该指南。我们希望 IDE 用户在编写代码时,使系统对所有软件包的导入都符合此模式,无需再进行额外的工程处理。
+    </p>
+
+    <p>这种样式是按以下原则选取的:</p>
+
+    <ul>
+      <li>用户希望先看到的导入往往位于顶部 (<code>android</code>)。
+        </li>
+      <li>用户最不希望看到的导入往往位于底部 (<code>java</code>)。
+      </li>
+      <li>用户可以轻松遵循的样式。
+      </li>
+      <li>IDE 可以遵循的样式。
+      </li>
+    </ul>
+
+    <p>将静态导入置于所有其他导入之上(与常规导入一样的排序方式)。
+    </p>
+
+  <h3 id="use-spaces-for-indentation">使用空格缩进</h3>
+
+    <p>我们使用四 (4) 个空格来缩进块,绝不要使用制表符。如果您有疑问,请与周围的代码保持一致。
+    </p>
+
+    <p>我们使用八 (8) 个空格来缩进自动换行,包括函数调用和赋值。
+    </p>
+
+    <p><span class="compare-better">推荐</span></p>
+
+<pre class="prettyprint">
+Instrument i =
         someLongExpression(that, wouldNotFit, on, one, line);
-</code></pre>
-<p>错误示例如下:</p>
-<pre><code>Instrument i =
-    someLongExpression(that, wouldNotFit, on, one, line);
-</code></pre>
+</pre>
 
-<h3 id="follow-field-naming-conventions">遵循字段命名规范</h3>
-<ul>
-<li>
-<p>非公开且非静态字段的名称以 m 开头。</p>
-</li>
-<li>
-<p>静态字段的名称以 s 开头。</p>
-</li>
-<li>
-<p>其他字段以小写字母开头。</p>
-</li>
-<li>
-<p>公开静态 final 字段(常量)为全部大写并用下划线连接 (ALL_CAPS_WITH_UNDERSCORES)。</p>
-</li>
-</ul>
-<p>例如:</p>
-<pre><code>public class MyClass {
+    <p><span class="compare-worse">不推荐</span></p>
+
+<pre class="prettyprint">
+Instrument i =
+    someLongExpression(that, wouldNotFit, on, one, line);
+</pre>
+
+  <h3 id="follow-field-naming-conventions">遵循字段命名规范</h3>
+
+    <ul>
+      <li>非公共且非静态字段的名称以 m 开头。
+    </li>
+    <li>静态字段的名称以 s 开头。
+    </li>
+    <li>其他字段以小写字母开头。
+    </li>
+    <li>公共静态 final 字段(常量)要全部大写并用下划线连接 (ALL_CAPS_WITH_UNDERSCORES)。</li>
+  </ul>
+
+  <p>例如:</p>
+
+<pre class="prettyprint">
+public class MyClass {
     public static final int SOME_CONSTANT = 42;
     public int publicField;
     private static MyClass sSingleton;
@@ -318,10 +411,14 @@
     private int mPrivate;
     protected int mProtected;
 }
-</code></pre>
-<h3 id="use-standard-brace-style">使用标准大括号样式</h3>
-<p>左大括号不单独占一行,与其前面的代码位于同一行:</p>
-<pre><code>class MyClass {
+</pre>
+
+  <h3 id="use-standard-brace-style">使用标准大括号样式</h3>
+
+    <p>左大括号不单独占一行,与其前面的代码位于同一行:</p>
+
+<pre class="prettyprint">
+class MyClass {
     int func() {
         if (something) {
             // ...
@@ -332,133 +429,204 @@
         }
     }
 }
-</code></pre>
-<p>我们需要在条件语句周围添加大括号。例外情况:如果整个条件语句(条件和主体)适合放在同一行,那么您可以(但不是必须)将其全部放在一行上。例如,我们接受以下样式:</p>
-<pre><code>if (condition) {
+</pre>
+
+    <p>我们需要在条件语句周围添加大括号。例外情况:如果整个条件语句(条件和主体)适合放在同一行,那么您可以(但不是必须)将其全部放在一行上。例如,我们接受以下样式:</p>
+
+<pre class="prettyprint">
+if (condition) {
     body();
 }
-</code></pre>
-<p>同样也接受以下样式:</p>
-<pre><code>if (condition) body();
-</code></pre>
-<p>但不接受以下样式:</p>
-<pre><code>if (condition)
+</pre>
+
+    <p>同样也接受以下样式:</p>
+
+<pre class="prettyprint">if (condition) body();</pre>
+
+    <p>但不接受以下样式:</p>
+
+<pre class="prettyprint">
+if (condition)
     body();  // bad!
-</code></pre>
+</pre>
 
-<h3 id="limit-line-length">限制代码行长度</h3>
-<p>您的代码中每一行文本的长度都应该不超过 100 个字符。虽然关于此规则存在很多争论,但最终决定仍是以 100 个字符为上限,不过存在以下例外情况:<em></em></p>
-<ul>
-<li>如果备注行包含长度超过 100 个字符的示例命令或文字网址,那么为了便于剪切和粘贴,该行可以超过 100 个字符。</li>
-<li>导入语句行可以超出此限制,因为用户很少会看到它们(这也简化了工具编写流程)。</li>
-</ul>
+  <h3 id="limit-line-length">限制代码行长度</h3>
 
-<h3 id="use-standard-java-annotations">使用标准 Java 注释</h3>
-<p>注释应该位于同一语言元素的其他修饰符之前。简单的标记注释(例如 @Override)可以与语言元素列在同一行。如果有多个注释或参数化注释,则应各占一行并按字母顺序排列。</p>
-<p>Java 中 3 个预定义注释的 Android 标准做法如下:</p>
-<ul>
-<li><code>@Deprecated</code>:在不建议使用注释元素时,必须使用 @Deprecated 注释。如果您使用 @Deprecated 注释,则还必须为其添加 @deprecated Javadoc 标记,并且该标记应该指定一个替代实现方案。另外请注意,@Deprecated 方法应该仍然可以使用。<em></em>如果您看到带有 @deprecated Javadoc 标记的旧代码,请添加 @Deprecated 注释。
-</li>
-<li><code>@Override</code>:当某个方法替换了超类中的声明或实现时,必须使用 @Override 注释。例如,如果您使用 @inheritdocs Javadoc 标记,并且派生于某个类(而非接口),则必须再为方法添加 @Override 注释,说明该方法替换了父类的方法。</li>
-<li><code>@SuppressWarnings</code>:@SuppressWarnings 注释应该仅在无法消除警告的情况下使用。如果某个警告通过了“无法消除”测试,则必须使用 @SuppressWarnings 注释,以确保所有警告都会反映出代码中的实际问题。<em></em>
-<p>当需要 @SuppressWarnings 注释时,必须在前面添加一个 TODO 备注,用于说明“无法消除”情况。这通常会标识出是哪个违规类使用了糟糕的接口。例如:</p>
-<pre><code>// TODO: The third-party class com.third.useful.Utility.rotate() needs generics
+    <p>您的代码中每一行文本的长度都不应超过 100 个字符。虽然关于此规则存在很多争论,但最终决定仍是以 100 个字符为上限,不过存在以下例外情况:<em></em></p>
+
+    <ul>
+      <li>如果备注行包含长度超过 100 个字符的示例命令或文字网址,那么为了便于剪切和粘贴,该行可以超过 100 个字符。
+      </li>
+      <li>导入语句行可以超出此限制,因为用户很少会看到它们(这也简化了工具编写流程)。
+      </li>
+    </ul>
+
+  <h3 id="use-standard-java-annotations">使用标准 Java 注释</h3>
+
+    <p>注释应该位于同一语言元素的其他修饰符之前。简单的标记注释(例如 @Override)可以与语言元素列在同一行。如果有多个注释或参数化注释,则应各占一行并按字母顺序排列。
+    </p>
+
+    <p>Java 中 3 个预定义注释的 Android 标准做法如下:</p>
+
+    <ul>
+      <li>
+        <code>@Deprecated</code>:在不建议使用注释元素时,必须使用 @Deprecated 注释。如果您使用 @Deprecated 注释,则还必须为其添加 @deprecated Javadoc 标记,并且该标记应该指定一个替代实现方案。另外请注意,@Deprecated 方法应该仍然可以使用。<em></em>如果您看到带有 @deprecated Javadoc 标记的旧代码,请添加 @Deprecated 注释。
+      </li>
+      <li>
+        <code>@Override</code>:当某个方法替换了超类中的声明或实现时,必须使用 @Override 注释。例如,如果您使用 @inheritdocs Javadoc 标记,并且派生于某个类(而非接口),则必须再为方法添加 @Override 注释,说明该方法替换了父类的方法。
+      </li>
+      <li>
+        <code>@SuppressWarnings</code>:@SuppressWarnings 注释应该仅在无法消除警告的情况下使用。如果某个警告通过了“无法消除”测试,则必须使用 @SuppressWarnings 注释,以确保所有警告都会反映出代码中的实际问题。<em></em>
+
+        <p>当需要 @SuppressWarnings 注释时,必须在前面添加一个 TODO 备注,用于说明“无法消除”情况。这通常会标识出是哪个违规类使用了糟糕的接口。例如:
+        </p>
+
+<pre class="prettyprint">
+// TODO: The third-party class com.third.useful.Utility.rotate() needs generics
 @SuppressWarnings("generic-cast")
 List&lt;String&gt; blix = Utility.rotate(blax);
-</code></pre>
-<p>当需要 @SuppressWarnings 注释时,您应该重构代码以分离出需要使用该注释的软件元素。</p>
-</li>
-</ul>
+</pre>
 
-<h3 id="treat-acronyms-as-words">将首字母缩写词视为字词</h3>
-<p>在为变量、方法和类命名时,请将首字母缩写词和缩写形式视为字词,使名称更具可读性:</p>
-<table>
-<thead>
-<tr>
-<th>良好</th>
-<th>不佳</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>XmlHttpRequest</td>
-<td>XMLHTTPRequest</td>
-</tr>
-<tr>
-<td>getCustomerId</td>
-<td>getCustomerID</td>
-</tr>
-<tr>
-<td>class Html</td>
-<td>class HTML</td>
-</tr>
-<tr>
-<td>String url</td>
-<td>String URL</td>
-</tr>
-<tr>
-<td>long id</td>
-<td>long ID</td>
-</tr>
-</tbody>
-</table>
-<p>由于 JDK 和 Android 代码库在首字母缩写词上非常不一致,几乎也不可能与周围的代码保持一致。因此,请务必将首字母缩写词视为字词。</p>
+        <p>当需要 @SuppressWarnings 注释时,您应该重构代码以分离出需要使用该注释的软件元素。
+        </p>
+      </li>
+    </ul>
 
-<h3 id="use-todo-comments">使用 TODO 备注</h3>
-<p>为代码使用 TODO 备注是短期的临时解决方案,或者说足够好但并不完美。TODO 备注应该以全部大写的字符串 TODO 开头,后跟一个冒号:</p>
-<pre><code>// TODO: Remove this code after the UrlTable2 has been checked in.
-</code></pre>
-<p>和</p>
-<pre><code>// TODO: Change this to use a flag instead of a constant.
-</code></pre>
-<p>如果您的 TODO 采用“在未来的某个日期做某事”的形式,请确保在其中包含一个非常具体的日期(“在 2005 年 11 月前修复”)或者一个非常具体的事件(“在所有生产环境合成器都可处理 V7 协议后移除此代码”)。</p>
+  <h3 id="treat-acronyms-as-words">将首字母缩写词视为字词</h3>
 
-<h3 id="log-sparingly">谨慎使用日志记录</h3>
-<p>虽然日志记录非常有必要,但对性能却有明显的负面影响,如果不能保持一定程度的简洁性,就会迅速失去其实用性。日志记录工具提供以下 5 种不同级别的日志记录:</p>
-<ul>
-<li><code>ERROR</code>:在出现极其严重的情况时使用。例如,某些事件会导致用户可见的后果,如果不明确删除某些数据、卸载应用、清除数据分区或重写整个设备(或更糟),则无法恢复。系统一直会记录此级别的日志。一般情况下,最好向统计信息收集服务器报告能够说明 ERROR 级别的一些日志记录情况的问题。</li>
-<li><code>WARNING</code>:在出现比较严重和意外的情况时使用。例如,某些事件会导致用户可见的后果,但是通过执行某些明确的操作(从等待或重启应用,一直到重新下载新版应用或重新启动设备)可在不丢失数据的情况下恢复。系统一直会记录此级别的日志。可以考虑向统计信息收集服务器报告能够说明 WARNING 级别的一些日志记录情况的问题。</li>
-<li><code>INFORMATIVE:</code>用于记录大多数人感兴趣的信息。例如,当检测到某种情况会造成广泛的影响时,尽管不一定是错误,系统也会记录下来。这种情况应该仅由一个被视为该领域最具权威性的模块来记录(避免由非权威组件重复记录)。系统一直会记录此级别的日志。
-</li>
-<li><code>DEBUG</code>:用于进一步记录设备上发生的可能与调查和调试意外行为相关的情况。您应该只记录收集有关组件的足够信息所需的信息。如果您的调试日志是主要日志,那么您可能应采用 VERBOSE 级别的日志记录。
-<p>系统会记录此级别的日志(即使在发布版本中),并且周围要有 <code>if (LOCAL_LOG)</code> 或 <code>if (LOCAL_LOGD)</code> 块,其中 <code>LOCAL_LOG[D]</code> 在您的类或子组件中定义。这样一来,系统有可能停用所有此类日志记录。因此,<code>if (LOCAL_LOG)</code> 块中不得包含有效逻辑。为日志编译的所有字符串也需要放在 <code>if
-(LOCAL_LOG)</code> 块中。如果日志记录调用会导致字符串编译在 <code>if (LOCAL_LOG)</code> 块之外发生,则不应将其重构为方法调用。</p>
-<p>有些代码仍然在使用 <code>if (localLOGV)</code>。虽然名称并不规范,但也可接受。</p>
-</li>
-<li><code>VERBOSE</code>:用于记录其他所有信息。系统仅针对调试版本记录此级别的日志,并且周围要有 <code>if (LOCAL_LOGV)</code> 块(或同类块),以便能够默认编译。所有字符串编译都将从发布版本中删除,并且需要在 <code>if (LOCAL_LOGV)</code> 块中显示。
-</li>
-</ul>
-<p><em>注意事项:</em> </p>
-<ul>
-<li>在指定模块中,除了 VERBOSE 级别之外,一个错误应该只报告一次(如果可能的话)。在模块内的单个函数调用链中,只有最内层的函数应当返回错误,同一模块中的调用者只能添加一些明显有助于隔离问题的日志记录。</li>
-<li>在一个模块链中,除了 VERBOSE 级别之外,当较低级别的模块检测到来自较高级别模块的无效数据时,低级模块应该只在 DEBUG 日志中记录该情况,并且仅当该日志提供的信息对调用者来说无法获取时进行记录。具体来说,当抛出异常(异常中应该会包含所有相关信息)或者所记录的所有信息都包含在错误代码中时,则不需要记录此类情况。这在框架和应用之间的交互中尤为重要,而且由第三方应用造成的情况经过框架妥善处理后,不应该触发高于 DEBUG 级别的日志记录。应该触发 INFORMATIVE 级别或更高级别日志记录的唯一情况是,模块或应用在其自身级别或更低级别检测到错误。</li>
-<li>当事实证明某些日志记录可能会发生多次时,最好实施一种频率限制机制来防止出现具有相同(或非常相似)信息的大量重复日志副本。</li>
-<li>失去网络连接属于完全在预期之内的常见情况,没必要记录下来。如果失去网络连接后导致在应用内出现某种后果,则应该记录为 DEBUG 或 VERBOSE 级别(具体取决于后果是否足够严重以及足够意外,足以记录在发布版本中)。</li>
-<li>如果在第三方应用可访问或代表第三方应用的文件系统上拥有完整的文件系统,则不应该记录高于 INFORMATIVE 级别的日志。</li>
-<li>来自任何不受信任来源(包括共享存储空间中的任何文件或通过任何网络连接获取的数据)的无效数据被视为符合预期,在被检测到无效时不应触发高于 DEBUG 级别的任何日志记录(甚至应该尽可能地限制日志记录)。</li>
-<li>请注意,在对 String 使用 <code>+</code> 运算符时,它会隐式创建一个具有默认缓冲区(大小为 16 个字符)的 <code>StringBuilder</code>,还可能会创建其他临时 String 对象。例如,显式创建 StringBuilder 并不比依赖默认的“+”运算符成本更高(实际上可能更高效)。请注意,即使没有读取日志信息,调用 <code>Log.v()</code> 的代码也会在发布版本中进行编译和执行,包括编译字符串。</li>
-<li>任何供其他人阅读并且在发布版本中提供的日志记录都应当简洁明了、合理易懂。这包括一直到 DEBUG 级别的所有日志记录。</li>
-<li>在内容有意义的情况下尽可能使日志记录在一行之内。一行长度在 80 到 100 个字符内是完全可以接受的,应当尽可能避免长度超过 130 或 160 个字符(包括标记的长度)。</li>
-<li>绝不能使用高于 VERBOSE 级别的日志记录报告成功事件。</li>
-<li>用于诊断难以重现的问题的临时日志记录应采用 DEBUG 或 VERBOSE 级别,并且应当包裹在 if 块中,以便在编译期间将其完全停用。</li>
-<li>请务必谨慎,避免在日志中泄露安全方面的信息。应避免提供个人信息,且必须避免提供有关受保护内容的信息。这在编写框架代码时尤为重要,因为事先无法轻易得知哪些是个人信息或受保护的内容,哪些不是。</li>
-<li>请勿使用 <code>System.out.println()</code>(或针对原生代码使用 <code>printf()</code>)。System.out 和 System.err 会重定向到 /dev/null,因此您的 print 语句不会产生可见效果。不过,为这些调用编译的所有字符串仍会得以执行。</li>
-<li><em>日志记录的黄金法则是,您的日志不一定要将其他日志排挤出缓冲区,正如其他日志不会这样对您的日志一样。</em></li>
-</ul>
+    <p>在为变量、方法和类命名时,请将首字母缩写词和缩写形式视为字词,使名称更具可读性:</p>
 
-<h3 id="be-consistent">保持一致</h3>
-<p>总而言之:保持一致。如果您正在修改代码,请花几分钟时间看一下周围的代码并确定其样式。如果该代码在 if 语句周围使用空格,那么您也应该这样做。如果代码备注的周围是用星号组成的小方框,您也应该将备注放在这样的小方框内。</p>
-<p>制定样式规范的目的是整理出通用的编码词汇表,以便人们可以专注于您所说的内容,而不是您表达的方式。我们在此提出整体样式规则,让用户都知道这一词汇表,但局部样式也很重要。如果您添加到文件的代码看起来与其周围的现有代码明显不同,那么当读者读到此处时,这些代码会打乱他们的节奏。请尽量避免这种情况。</p>
+    <table>
+      <thead>
+        <tr>
+          <th>良好</th>
+          <th>不佳</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td>XmlHttpRequest</td>
+          <td>XMLHTTPRequest</td>
+        </tr>
+        <tr>
+          <td>getCustomerId</td>
+          <td>getCustomerID</td>
+        </tr>
+        <tr>
+          <td>class Html</td>
+          <td>class HTML</td>
+        </tr>
+        <tr>
+          <td>String url</td>
+          <td>String URL</td>
+        </tr>
+        <tr>
+          <td>long id</td>
+          <td>long ID</td>
+        </tr>
+      </tbody>
+    </table>
+
+    <p>由于 JDK 和 Android 代码库在首字母缩写词上非常不一致,几乎也不可能与周围的代码保持一致。因此,请务必将首字母缩写词视为字词。
+    </p>
+
+  <h3 id="use-todo-comments">使用 TODO 备注</h3>
+
+    <p>为代码使用 TODO 备注是短期的临时解决方案,或者说足够好但并不完美。TODO 备注应包含全部大写的字符串 TODO,后跟一个冒号。</p>
+
+<pre class="prettyprint">
+// TODO: Remove this code after the UrlTable2 has been checked in.
+</pre>
+
+    <p>和</p>
+
+<pre class="prettyprint">
+// TODO: Change this to use a flag instead of a constant.
+</pre>
+
+    <p>如果您的 TODO 采用“在未来的某个日期做某事”的形式,请确保在其中包含一个非常具体的日期(“在 2005 年 11 月前修复”)或者一个非常具体的事件(“在所有生产环境合成器都可处理 V7 协议后移除此代码”)。
+    </p>
+
+  <h3 id="log-sparingly">谨慎使用日志记录</h3>
+
+    <p>虽然日志记录非常有必要,但对性能却有明显的负面影响,如果不能保持一定程度的简洁性,就会迅速失去其实用性。日志记录工具提供以下 5 种不同级别的日志记录:</p>
+
+    <ul>
+      <li>
+        <code>ERROR</code>:在出现极其严重的情况时使用。例如,某些事件会导致用户可见的后果,如果不明确删除某些数据、卸载应用、擦除数据分区或重写刷写整个设备(或更糟),则无法恢复。系统一直会记录此级别的日志。一般情况下,最好向统计信息收集服务器报告能够说明 ERROR 级别的一些日志记录情况的问题。
+      </li>
+      <li>
+        <code>WARNING</code>:在出现比较严重和意外的情况时使用。例如,某些事件会导致用户可见的后果,但是通过执行某些明确的操作(从等待或重启应用,一直到重新下载新版应用或重新启动设备)可在不丢失数据的情况下恢复。系统一直会记录此级别的日志。可以考虑向统计信息收集服务器报告能够说明 WARNING 级别的一些日志记录情况的问题。
+      </li>
+      <li>
+        <code>INFORMATIVE:</code>用于记录大多数人感兴趣的信息。例如,当检测到某种情况会造成广泛的影响时,尽管不一定是错误,系统也会记录下来。这种情况应该仅由一个被视为该领域最具权威性的模块来记录(避免由非权威组件重复记录)。系统一直会记录此级别的日志。
+      </li>
+      <li>
+        <code>DEBUG</code>:用于进一步记录设备上发生的可能与调查和调试意外行为相关的情况。您应该只记录收集有关组件的足够信息所需的信息。如果您的调试日志是主要日志,那么您可能应采用 VERBOSE 级别的日志记录。
+
+        <p>系统会记录此级别的日志(即使在发布版本中),并且周围要有 <code>if (LOCAL_LOG)</code> 或 <code>if
+          LOCAL_LOGD)</code> 块,其中 <code>LOCAL_LOG[D]</code> 在您的类或子组件中定义。这样一来,系统有可能停用所有此类日志记录。因此,<code>if (LOCAL_LOG)</code> 块中不得包含有效逻辑。为日志编译的所有字符串也需要放在 <code>if (LOCAL_LOG)</code> 块中。如果日志记录调用会导致字符串编译在 <code>if (LOCAL_LOG)</code> 块之外发生,则不应将其重构为方法调用。
+        </p>
+
+        <p>有些代码仍然在使用 <code>if (localLOGV)</code>。虽然名称并不规范,但也可接受。
+        </p>
+      </li>
+      <li>
+        <code>VERBOSE</code>:用于记录其他所有信息。系统仅针对调试版本记录此级别的日志,并且周围要有 <code>if (LOCAL_LOGV)</code> 块(或同类块),以便能够默认编译。所有字符串编译都将从发布版本中删除,并且需要在 <code>if (LOCAL_LOGV)</code> 块中显示。
+      </li>
+    </ul>
+
+    <h4="log-sparingly-notes">注意:<ul>
+        <li>在指定模块中,除了 VERBOSE 级别之外,一个错误应该只报告一次(如果可能的话)。在模块内的单个函数调用链中,只有最内层的函数应当返回错误,同一模块中的调用者只能添加一些明显有助于隔离问题的日志记录。
+        </li>
+        <li>在一个模块链中,除了 VERBOSE 级别之外,当较低级别的模块检测到来自较高级别模块的无效数据时,较低级别的模块应该只在 DEBUG 日志中记录该情况,并且仅当该日志提供的信息对调用者来说无法获取时进行记录。具体来说,当抛出异常(异常中应该会包含所有相关信息)或者所记录的所有信息都包含在错误代码中时,则不需要记录此类情况。这在框架和应用之间的交互中尤为重要,而且由第三方应用造成的情况经过框架妥善处理后,不应该触发高于 DEBUG 级别的日志记录。应该触发 INFORMATIVE 级别或更高级别日志记录的唯一情况是,模块或应用在其自身级别或更低级别检测到错误。
+        </li>
+        <li>当事实证明某些日志记录可能会发生多次时,最好实施一种频率限制机制来防止出现具有相同(或非常相似)信息的大量重复日志副本。
+        </li>
+        <li>失去网络连接属于完全在预期之内的常见情况,没必要记录下来。如果失去网络连接后导致在应用内出现某种后果,则应该记录为 DEBUG 或 VERBOSE 级别(具体取决于后果是否足够严重以及足够意外,足以记录在发布版本中)。
+        </li>
+        <li>如果在第三方应用可访问或代表第三方应用的文件系统上拥有完整的文件系统,则不应该记录高于 INFORMATIVE 级别的日志。</li>
+        <li>来自任何不受信任来源(包括共享存储空间中的任何文件或通过任何网络连接获取的数据)的无效数据被视为符合预期,在被检测到无效时不应触发高于 DEBUG 级别的任何日志记录(甚至应该尽可能地限制日志记录)。
+        </li>
+        <li>请注意,在对 String 使用 <code>+</code> 运算符时,它会隐式创建一个具有默认缓冲区(大小为 16 个字符)的 <code>StringBuilder</code>,还可能会创建其他临时 String 对象。例如,显式创建 StringBuilder 并不比依赖默认的“+”运算符成本更高(实际上可能更高效)。请注意,即使没有读取日志信息,调用 <code>Log.v()</code> 的代码也会在发布版本中进行编译和执行,包括编译字符串。
+        </li>
+        <li>任何供其他人阅读并且在发布版本中提供的日志记录都应当简洁明了、合理易懂。这包括一直到 DEBUG 级别的所有日志记录。
+        </li>
+        <li>在内容有意义的情况下尽可能使日志记录在一行之内。一行长度在 80 到 100 个字符内是完全可以接受的,应当尽可能避免长度超过 130 或 160 个字符(包括标记的长度)。
+        </li>
+        <li>绝不能使用高于 VERBOSE 级别的日志记录报告成功事件。</li>
+        <li>用于诊断难以重现的问题的临时日志记录应采用 DEBUG 或 VERBOSE 级别,并且应当包裹在 if 块中,以便在编译期间将其完全停用。
+        </li>
+        <li>请务必谨慎,避免在日志中泄露安全方面的信息。应避免提供个人信息,且必须避免提供有关受保护内容的信息。这在编写框架代码时尤为重要,因为事先无法轻易得知哪些是个人信息或受保护的内容,哪些不是。
+        </li>
+        <li>
+          请勿使用 <code>System.out.println()</code>(或针对原生代码使用 <code>printf()</code>)。System.out 和 System.err 会重定向到 /dev/null,因此您的 print 语句不会产生可见效果。不过,为这些调用编译的所有字符串仍会得以执行。
+        </li>
+        <li>
+          <em>日志记录的黄金法则是,您的日志不一定要将其他日志排挤出缓冲区,正如其他日志不会这样对您的日志一样。</em>
+        </li>
+      </ul>
+
+  <h3 id="be-consistent">保持一致</h3>
+
+    <p>总而言之:保持一致。如果您正在修改代码,请花几分钟时间看一下周围的代码并确定其样式。如果该代码在 if 语句周围使用空格,那么您也应该这样做。如果代码备注的周围是用星号组成的小方框,您也应该将备注放在这样的小方框内。
+    </p>
+
+    <p>制定样式规范的目的是整理出通用的编码词汇表,以便人们可以专注于您所说的内容,而不是您表达的方式。我们在此提出整体样式规则,让用户都知道这一词汇表,但局部样式也很重要。如果您添加到文件的代码看起来与其周围的现有代码明显不同,那么当读者读到此处时,这些代码会打乱他们的节奏。请尽量避免这种情况。
+    </p>
 
 <h2 id="javatests-style-rules">Javatests 样式规则</h2>
-<p>请遵循测试方法的命名规范,并使用下划线将被测试的内容与被测试的具体情况区分开来。这种样式可让您更容易看出正在测试的情况。例如:</p>
-<pre><code>testMethod_specificCase1 testMethod_specificCase2
+
+  <p>请遵循测试方法的命名规范,并使用下划线将被测试的内容与被测试的具体情况区分开来。这种样式可让您更容易看出正在测试的情况。例如:</p>
+
+<pre class="prettyprint">
+testMethod_specificCase1 testMethod_specificCase2
 
 void testIsDistinguishable_protanopia() {
     ColorMatcher colorMatcher = new ColorMatcher(PROTANOPIA)
     assertFalse(colorMatcher.isDistinguishable(Color.RED, Color.BLACK))
     assertTrue(colorMatcher.isDistinguishable(Color.X, Color.Y))
 }
-</code></pre>
+</pre>
 
-</body></html>
\ No newline at end of file
+</h4="log-sparingly-notes"></body></html>
\ No newline at end of file
diff --git a/zh-cn/setup/contribute/read-bug-reports.html b/zh-cn/setup/contribute/read-bug-reports.html
index e8ebb99..34e0c61 100644
--- a/zh-cn/setup/contribute/read-bug-reports.html
+++ b/zh-cn/setup/contribute/read-bug-reports.html
@@ -267,7 +267,7 @@
   </section>
 
 <h2 id="activities">Activity</h2>
-<p><a href="http://developer.android.com/guide/components/activities.html">Activity</a> 是一种应用组件,可为用户提供一个可交互的屏幕,用来执行某些操作(例如拨打电话号码、拍照、发送电子邮件等)。从错误报告的角度来看,<a href="http://developer.android.com/reference/android/app/Activity.html">Activity</a> 是用户可以执行的一项明确具体的操作,这使得查找在崩溃期间处于聚焦状态的 Activity 变得非常重要。Activity 通过 ActivityManager 运行进程,因此找出指定 Activity 的所有进程停止和启动事件也有助于进行问题排查。</p>
+<p><a href="http://developer.android.com/guide/components/activities.html">Activity</a> 是一种应用组件,可为用户提供一个可交互的屏幕,用来执行某些操作(例如拨号、拍照、发送电子邮件等)。从错误报告的角度来看,<a href="http://developer.android.com/reference/android/app/Activity.html">Activity</a> 是用户可以执行的一项明确具体的操作,这使得查找在崩溃期间处于聚焦状态的 Activity 变得非常重要。Activity 通过 ActivityManager 运行进程,因此找出指定 Activity 的所有进程停止和启动事件也有助于进行问题排查。</p>
 
 <h3 id="history-focused-activities">查看处于聚焦状态的 Activity</h3>
 <p>要查看记录的处于聚焦状态的 Activity,请搜索 <code>am_focused_activity</code>。</p>
@@ -744,7 +744,7 @@
   </section>
 
 <h2 id="processes">进程</h2>
-<p>错误报告中含有大量进程数据,其中包括启动和停止时间、运行时时长、相关服务、<code>oom_adj</code> 得分等。要详细了解 Android 如何管理进程,请参阅<a href="http://developer.android.com/guide/components/processes-and-threads.html">进程和线程</a>。</p>
+<p>错误报告中含有大量进程数据,包括启动和停止时间、运行时时长、相关服务、<code>oom_adj</code> 得分等。要详细了解 Android 如何管理进程,请参阅<a href="http://developer.android.com/guide/components/processes-and-threads.html">进程和线程</a>。</p>
 
 <h3 id="process-runtime">确定进程运行时</h3>
 <p><code>procstats</code> 部分包含有关进程及相关服务已运行时长的完整统计信息。要快速获得便于用户阅读的摘要,请搜索 <code>AGGREGATED OVER</code> 以查看最近 3 个小时或 24 个小时的数据,然后搜索 <code>Summary:</code> 以查看进程列表、这些进程已以各种优先级运行的时长,以及它们使用 RAM 的情况(格式为“最小-平均-最大 PSS”/“最小-平均-最大 USS”)。</p>
diff --git a/zh-cn/setup/develop/64-bit-builds.html b/zh-cn/setup/develop/64-bit-builds.html
index 0c967e1..46fc03f 100644
--- a/zh-cn/setup/develop/64-bit-builds.html
+++ b/zh-cn/setup/develop/64-bit-builds.html
@@ -28,7 +28,7 @@
 
 <p>对于可执行文件和应用,编译系统默认仅编译 64 位版本,但您可以使用一个全局 <code>BoardConfig.mk</code> 变量或针对特定模块的变量来替换此设置。</p>
 
-<p class="caution"><strong>注意</strong>:如果某个应用提供了一个可供其他应用(32 位或 64 位)使用的 API,那么在该应用的清单中,<code>android:multiarch</code> 属性的值必须设为 <code>true</code>,以避免可能出现的错误。</p>
+<p class="caution"><strong>注意</strong>:如果某个应用提供了可供其他应用(32 位或 64 位)使用的 API,为避免可能出现的错误,必须在该应用的清单中将 <code>android:multiarch</code> 属性的值设为 <code>true</code>。</p>
 
 <h2 id="product_configuration">产品配置</h2>
 
diff --git a/zh-cn/setup/start/brands.html b/zh-cn/setup/start/brands.html
index 1366b4e..01f13e1 100644
--- a/zh-cn/setup/start/brands.html
+++ b/zh-cn/setup/start/brands.html
@@ -106,6 +106,6 @@
 
 </p><h2 id="Questions">问题</h2>
 
-<p>如需了解更多品牌使用信息,请提交<a href="https://support.google.com/contact/partner_brand_approval">合作伙伴品牌咨询表单</a>,与 Android 合作伙伴营销团队联系。</p>
+<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 745c0d8..4968354 100644
--- a/zh-cn/setup/start/build-numbers.html
+++ b/zh-cn/setup/start/build-numbers.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>
@@ -209,6 +209,18 @@
   </thead>
   <tbody>
     <tr>
+      <td>PQ1A.181205.006</td>
+      <td>android-9.0.0_r21</td>
+      <td>Pie</td>
+      <td>Pixel 3 XL、Pixel 3</td>
+    </tr>
+    <tr>
+      <td>PQ1A.181205.002</td>
+      <td>android-9.0.0_r19</td>
+      <td>Pie</td>
+      <td>Pixel 2 XL、Pixel 2</td>
+    </tr>
+    <tr>
       <td>PPR2.181005.003.A1</td>
       <td>android-9.0.0_r18</td>
       <td>Pie</td>
@@ -307,6 +319,18 @@
       <td>2018-08-05</td>
     </tr>
     <tr>
+      <td>OPM8.181205.001</td>
+      <td>android-8.1.0_r53</td>
+      <td>Oreo</td>
+      <td>Pixel C</td>
+    </tr>
+    <tr>
+      <td>OPM7.181205.001</td>
+      <td>android-8.1.0_r52</td>
+      <td>Oreo</td>
+      <td>Nexus 5X、Nexus 6P</td>
+    </tr>
+    <tr>
       <td>OPM8.181105.002</td>
       <td>android-8.1.0_r51</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 8a7cab6..dedb7ca 100644
--- a/zh-cn/setup/start/p-release-notes.html
+++ b/zh-cn/setup/start/p-release-notes.html
@@ -346,7 +346,7 @@
 
 <h4 id="vendor_init">Vendor_init</h4>
 
-<p><a href="/security/selinux/vendor-init">供应商初始化</a>中介绍了相关更新,这些更新旨在弥补通过使用单独的 SELinux 域拆分的 Treble system/vendor 分区(以便利用供应商专属权限运行 <code>/vendor</code> 命令)中存在的 init 进程访问漏洞。</p>
+<p><a href="/security/selinux/vendor-init">供应商 init</a> 中介绍了相关更新,这些更新旨在使用单独的 SELinux 域,利用供应商专属权限运行 <code>/vendor</code> 命令来填补 Treble 系统/供应商拆分中存在的 init 进程访问漏洞。</p>
 
 <h4 id="system_properties">系统属性</h4>
 
@@ -528,11 +528,11 @@
 
 <h3 id="gnss_satellite_selection">GNSS 卫星选择</h3>
 
-<p>使用新的全球导航卫星系统 (GNSS) HAL(1.1 版及更高版本)时,Android 框架会监控 Android 设置。合作伙伴可以通过 Google Play 服务或其他系统更新来这些设置。这些设置可告知 GNSS HAL 是否不应使用某些 GNSS 卫星。在持续出现 GNSS 卫星或星群错误时,或者为了更快地响应使用不同的时制和外部事件(例如闰秒和/或日或周数滚动增加)混合星群时可能发生的 GNSS HAL 实现问题时,这些设置非常有用。</p>
+<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>
+<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>
 
 <h2 id="permissions">权限</h2>
 
@@ -550,7 +550,7 @@
 
 <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>但是,在运行 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>
 
@@ -577,7 +577,7 @@
 <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>
+<li><p>ROM 中包含的任何<strong>自定义备份代理</strong>都应做到以下两点:一旦备份数据格式发生不兼容的更改,就应递增其版本号;如果其代理未做好准备,无法根据未来版本的代码处理备份数据,则应确保 <code>restoreAnyVersion = false</code>(默认值)。</p></li>
 </ul>
 
 <h2 id="enterprise">企业</h2>
diff --git a/zh-cn/setup/start/site-updates.html b/zh-cn/setup/start/site-updates.html
index 6a5ede1..db00447 100644
--- a/zh-cn/setup/start/site-updates.html
+++ b/zh-cn/setup/start/site-updates.html
@@ -39,22 +39,22 @@
 <h3 id="set-up">“设置”(Setup) 更名为“设置”(Set up)</h3>
 
 <p>主“设置”(Setup) 标签的名称略微做了一点改动,改成了<strong>设置</strong> (Set up),以便与用于后续主要标签的动词保持一致。<em></em>
-<strong>下载</strong>和<strong>编译</strong>内容已拆分为不同的子标签,以便于访问其中包含的页面。“开发”子部分已更名为<strong>创建</strong>子标签,以避免与新增的顶级同名<strong>开发</strong>标签混淆。<em></em></p>
+<strong>下载</strong>和<strong>编译</strong>内容已拆分为不同的子标签,以便于访问其中包含的页面。“开发”子部分已更名为<strong>创建</strong>子标签,以避免与新增的顶级同名标签<strong>开发</strong>相混淆。<em></em></p>
 
-<p>之前在“兼容性”&gt;“与我们联系”页面上提供的信息现已合并到主<strong>设置 &gt; 联系方式(社区)</strong>列表中。<em></em>
+<p>以前在“兼容性”&gt;“与我们联系”页面上提供的信息现已合并到主<strong>设置 &gt; 联系方式(社区)</strong>列表中。<em></em>
 </p>
 
 <h3 id="design">“兼容性”更名为“设计”</h3>
 
-<p>以前在“兼容性”顶级标签中提供的信息现位于<strong>设计</strong>下。<em></em>要大致了解该计划以及指向新的《Android 兼容性定义文档》(CDD) 的链接,请参阅<strong>兼容性</strong>子标签。<em></em></p>
+<p>以前在“兼容性”顶级标签中提供的信息现位于<strong>设计</strong>下。<em></em>要大致了解该计划以及新版《Android 兼容性定义文档》(CDD) 的链接,请参阅<strong>兼容性</strong>子标签。<em></em></p>
 
-<p>在相关更改中,关于《Android 兼容性测试套件》(CTS) 的说明以及常规的调试信息已移至新的<strong>测试</strong>子标签。<em></em><strong>显示</strong>和<strong>设置</strong>菜单指南已转移到专用子标签。</p>
+<p>在相关更改中,将关于《Android 兼容性测试套件》(CTS) 的说明以及常规的调试信息移到了新的<strong>测试</strong>子标签中。<em></em><strong>显示</strong>和<strong>设置</strong>菜单指南已转移到专用子标签。</p>
 
 <h3 id="develop">“移植”更名为“开发”</h3>
 
-<p>“移植”标签已更名为<strong>开发</strong>,以更好地体现此标签中包含的说明。<em></em>本文档主要侧重于实现各个接口,可帮助您编写将设备连接到 Android 操作系统所需的驱动程序。</p>
+<p>为了更好地体现标签中包含的说明,已将“移植”标签更名为<strong>开发</strong>。<em></em>本文档主要侧重于实现各个接口,可帮助您编写将设备连接到 Android 操作系统所需的驱动程序。</p>
 
-<p>因此,描述总体 HIDL 格式的<strong>架构</strong>部分已移至<strong>设计</strong>标签,以便在开发周期早期的规划阶段予以考虑。<em></em><strong>引导加载程序</strong>内容现在位于<strong>设计 &gt; 架构</strong>下,同时引入了<strong>交互性</strong>子标签,以包含输入、传感器和相关信息。<em></em><em></em></p>
+<p>因此,描述总体 HIDL 格式的<strong>架构</strong>部分已移至<strong>设计</strong>标签,以便在开发周期早期的规划阶段予以考虑。<em></em><strong>引导加载程序</strong>内容现在位于<strong>设计 &gt; 架构</strong>下,并且引入了<strong>交互性</strong>子标签,以包含输入、传感器和相关信息。<em></em><em></em></p>
 
 <p><strong>连接</strong>部分已经过重新整理,包含<strong>蓝牙和 NFC</strong>、<strong>通话和短信</strong>、<strong>运营商</strong>和 <strong>WLAN</strong> 子部分。此外,WLAN 部分还包含以下新文章:</p>
 
@@ -68,7 +68,7 @@
 
 <h3 id="configure">“微调”更名为“配置”</h3>
 
-<p>“微调”标签已更名为<strong>配置</strong>,因为除了自定义和优化步骤之外,还会包含其他信息。<em></em>现在,您可以在<strong>企业</strong>下方找到以前的“设备管理”子部分。<em></em>ART 和 Dalvik 内容位于 <strong>ART</strong> 下方,无线下载 (OTA) 更新信息位于<strong>更新</strong>下方。<em></em><em></em></p>
+<p>“微调”标签已更名为<strong>配置</strong>,因为除了自定义和优化步骤之外,还会包含其他信息。<em></em>现在,您可以在<strong>企业</strong>下方找到以前的“设备管理”子部分,<em></em>在 <strong>ART</strong> 下方找到 ART 和 Dalvik 内容,在<strong>更新</strong>下方找到无线下载 (OTA) 更新信息。<em></em><em></em></p>
 
 <h2 id="Dec-2017">2017 年 12 月</h2>
 <p>
@@ -127,8 +127,7 @@
 </p>
 
 <h2 id="Nov-2017">2017 年 11 月</h2>
-<p>
-“源代码”部分已更名为<a href="/setup"><em>设置</em></a>。<em></em>我们设置了重定向,以确保旧网址仍可正常运行。
+<p>“源代码”部分已更名为<a href="/setup"><em>设置</em></a>。<em></em>我们设置了重定向,以确保旧网址仍可正常运行。
 </p>
 
 <h2 id="Sept-2017">2017 年 9 月</h2>
@@ -173,9 +172,8 @@
 
 <h4>模糊测试</h4>
 <p>
-AOSP 提供了用于测试 <a href="/devices/tech/dalvik/">Android Runtime (ART)</a> 基础架构的全新模糊测试套件。全新的工具包 JFuzz 以及经过改进的 DexFuzz 现在可以直接在 AOSP 中获得,并且随附了相关文档。请参阅:
-  <a href="https://android.googlesource.com/platform/art/+/master/tools/jfuzz/README.md">https://android.googlesource.com/platform/art/+/master/tools/jfuzz/README.md</a>
-  <a href="https://android.googlesource.com/platform/art/+/master/tools/dexfuzz/README">https://android.googlesource.com/platform/art/+/master/tools/dexfuzz/README</a>
+AOSP 提供了用于测试 <a href="/devices/tech/dalvik/">Android Runtime (ART)</a> 基础架构的全新模糊测试套件。全新的工具包 JFuzz 以及经过改进的 DexFuzz 现在可以直接在 AOSP 中获得,并且随附了相关文档。请参阅:<a href="https://android.googlesource.com/platform/art/+/master/tools/jfuzz/README.md">https://android.googlesource.com/platform/art/+/master/tools/jfuzz/README.md</a>
+<a href="https://android.googlesource.com/platform/art/+/master/tools/dexfuzz/README">https://android.googlesource.com/platform/art/+/master/tools/dexfuzz/README</a>
 </p>
 <p>
 无需执行任何操作,即可实现或使用这些新工具。必要时您可以对这些工具进行更改,就像您可以更改运行时/编译器一样。
@@ -337,8 +335,7 @@
 </p>
 <ul>
   <li>如果 Activity 或应用的<a href="https://developer.android.com/guide/topics/ui/multi-window.html#configuring" class="external">大小可调整</a>,则允许 Activity 填充屏幕。
-  </li><li>
-如果 Activity 或应用的大小不可调整,或者平台会强制调整 Activity 的大小,则允许应用窗口根据 <a href="https://developer.android.com/reference/android/R.attr.html#maxAspectRatio" class="external">maxAspectRatio</a> 值,以不超过此值的宽高比显示。
+  </li><li>如果 Activity 或应用的大小不可调整,或者平台会强制调整 Activity 的大小,则允许应用窗口根据 <a href="https://developer.android.com/reference/android/R.attr.html#maxAspectRatio" class="external">maxAspectRatio</a> 值,以不超过此值的宽高比显示。
     <ul>
       <li>对于在搭载 Android 8.0 的设备上运行的应用,默认值为当前设备的宽高比。</li>
       <li>对于在搭载较低版本 Android 的设备上运行的应用,默认值为 16:9。</li>
@@ -380,8 +377,7 @@
 <p>
 他们必须确保自己的代码不含未定义的行为(通过使用 UBSan 等工具),以使之不易受到新工具链带来的问题的影响。所有工具链都始终在 AOSP 中直接更新。远远在 OC 发布之前,所有功能便都已可用,因此 OEM 应已遵循相关规定。
 </p>
-<p>
-如需常规说明,请参阅<a href="https://llvm.org/" class="external">公开的 Clang/LLVM</a> 文档;如需 Android 专属指南,请参阅 AOSP 中的 <a href="https://android.googlesource.com/platform/external/clang/+/master/ReadmeAndroid.md" class="external">Android Clang/LLVM</a> 文档集。最后,请加入 <a href="https://groups.google.com/forum/#!forum/android-llvm">android-llvm</a> 公开论坛,以获取帮助和参与开发。
+<p>如需常规说明,请参阅<a href="https://llvm.org/" class="external">公开的 Clang/LLVM</a> 文档;如需 Android 专属指南,请参阅 AOSP 中的 <a href="https://android.googlesource.com/platform/external/clang/+/master/ReadmeAndroid.md" class="external">Android Clang/LLVM</a> 文档集。最后,请加入 <a href="https://groups.google.com/forum/#!forum/android-llvm">android-llvm</a> 公开论坛,以获取帮助和参与开发。
 </p>
 
 <h3 id="drm-kms">DRM/KMS</h3>
@@ -441,12 +437,11 @@
 <p>
 <a href="https://developer.android.com/reference/android/printservice/PrintService.html" class="external">打印服务</a>是一款应用,可用于发现打印机并将其呈现给设备的打印框架。在较低的 Android 版本中,用户必须搜索并安装第三方打印服务才能进行打印。
 </p>
-<p>
-Android 8.0 在 <code><a href="https://android.googlesource.com/platform/packages/services/BuiltInPrintService/" class="external">platform/packages/services/BuiltInPrintService/</a></code> 中纳入了一项默认打印服务,以便用户在新型打印机上进行打印,而无需安装额外的应用。此实现支持符合以下条件的打印机:使用互联网打印协议 (IPP) 进行通信,并使用 PCLm、PWG-Raster 或 PDF 发送可打印的内容。要使用旧式打印机,用户应安装 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/PrintRecommendationService/" class="external">PrintRecommendationService</a> 推荐的应用(如<a href="https://youtu.be/M_JGeGLpOKs?t=16m20s" class="external">此 I/O 演示</a>中所示)。
+<p>Android 8.0 在 <code><a href="https://android.googlesource.com/platform/packages/services/BuiltInPrintService/" class="external">platform/packages/services/BuiltInPrintService/</a></code> 中纳入了一项默认打印服务,借助该服务,用户无需安装额外的应用就可以在现代打印机上打印。此实现支持符合以下条件的打印机:使用互联网打印协议 (IPP) 进行通信,并使用 PCLm、PWG-Raster 或 PDF 发送可打印的内容。要使用旧式打印机,用户应安装 <a href="https://android.googlesource.com/platform/frameworks/base/+/master/packages/PrintRecommendationService/" class="external">PrintRecommendationService</a> 推荐的应用(如<a href="https://youtu.be/M_JGeGLpOKs?t=16m20s" class="external">此 I/O 演示</a>中所示)。
 
 </p><h3 id="reference">参考资料更新</h3>
 <p>
-顶级导航菜单中添加了<a href="/reference/">参考资料</a>部分。它属于 <a href="/devices/architecture/treble">Treble</a> 版本的一部分,其中添加了 <a href="/reference/hidl/">HIDL 参考资料</a>部分。<a href="/reference/tradefed/">Trade Federation</a> 和<a href="/reference/hal/">旧版 HAL</a> 参考文档已更新。
+顶级导航菜单中添加了<a href="/reference/">参考资料</a>部分。在 <a href="/devices/architecture/treble">Treble</a> 版本中,添加了 <a href="/reference/hidl/">HIDL 参考资料</a>部分。更新了 <a href="/reference/tradefed/">Trade Federation</a> 和<a href="/reference/hal/">旧版 HAL</a> 参考文档。
 </p>
 
 <h3 id="settings-menu">“设置”菜单</h3>
@@ -496,8 +491,7 @@
 <figcaption><strong>图 1</strong> 网站的新移动视图</figcaption>
 
 <h3 id="top-tabs">新的顶级标签</h3>
-<p>
-<em></em>之前的“设备”标签已更名为<a href="/devices/">移植</a>,同时之前的“核心技术”子标签已更名为<em></em><a href="/devices/tech/">微调</a>,并移到了网站顶部,以便更好地显示给用户。
+<p>之前的“设备”标签已更名为<a href="/devices/">移植</a>,同时之前的“核心技术”子标签已更名为<a href="/devices/tech/">微调</a>,并移到了网站顶部,以便更好地显示给用户。<em></em><em></em>
 </p>
 
 <h3 id="security-forefront">“安全性”标签排在了前列</h3>
@@ -511,8 +505,7 @@
 </p>
 
 <h3 id="code-links">每页都有的代码链接</h3>
-<p>
-只需点击每个页面右上角的<strong>转到源代码</strong>按钮,即可访问 <a href="https://android.googlesource.com/" class="external">AOSP 代码库</a>。
+<p>只需点击每个页面右上角的<strong>转到源代码</strong>按钮,即可访问 <a href="https://android.googlesource.com/" class="external">AOSP 代码库</a>。
 </p>
 
 <h3 id="comprehensive-footers">包罗广泛的页脚</h3>