aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Partner Docs <noreply@android.com>2017-12-18 17:18:52 -0800
committerClay Murphy <claym@google.com>2017-12-19 15:36:00 -0800
commit090941789bfe6da73740d21b768067ce3ac66a3b (patch)
treed3f612c55948cfefbfe3c33991b38bc55ed104b9
parent1d10de1462c027a2ccfb429e85b1172db6d58e53 (diff)
downloadsource.android.com-090941789bfe6da73740d21b768067ce3ac66a3b.tar.gz
Docs: Changes to source.android.com
- 179490987 Devsite localized content from translation request 5a993e... by Android Partner Docs <noreply@android.com> - 179475942 Devsite localized content from translation request 6fed78... by Android Partner Docs <noreply@android.com> - 179475935 Devsite localized content from translation request c20e2d... by Android Partner Docs <noreply@android.com> - 179433449 Fix cryptfs.c -> cryptfs.cpp by Christina Nguyen <cqn@google.com> - 179424793 Fix broken link from cryptfs.c file to cryptfs.cpp file i... by Christina Nguyen <cqn@google.com> - 179249784 Add OPM2.171019.012. by Android Partner Docs <noreply@android.com> - 179208307 Devsite localized content from translation request 9a4e79... by Android Partner Docs <noreply@android.com> - 179198965 Devsite localized content from translation request 0dd2f6... by Android Partner Docs <noreply@android.com> - 179101117 Adding VMS to automotive properties by Heidi von Markham <hvm@google.com> - 179060885 Devsite localized content from translation request 480e82... by Android Partner Docs <noreply@android.com> - 179060233 Devsite localized content from translation request 36dffc... by Android Partner Docs <noreply@android.com> - 179060217 Devsite localized content from translation request 607dd4... by Android Partner Docs <noreply@android.com> - 179060214 Devsite localized content from translation request 9360aa... by Android Partner Docs <noreply@android.com> PiperOrigin-RevId: 179490987 Change-Id: I86fc4baddc975656a4b843748a6c6e6d7b7b822f
-rw-r--r--en/devices/automotive/properties.html27
-rw-r--r--en/security/encryption/full-disk.html2
-rw-r--r--en/setup/build-numbers.html6
-rw-r--r--zh-cn/compatibility/cdd.html6
-rw-r--r--zh-cn/compatibility/cts/downloads.html10
-rw-r--r--zh-cn/compatibility/cts/setup.html2
-rw-r--r--zh-cn/compatibility/index.html6
-rw-r--r--zh-cn/devices/architecture/hidl/code-style.html16
-rw-r--r--zh-cn/devices/architecture/vintf/match-rules.html2
-rw-r--r--zh-cn/devices/graphics/run-tests.html3
-rw-r--r--zh-cn/devices/tech/ota/inside_packages.html3
-rw-r--r--zh-cn/security/bulletin/2016-05-01.html13
-rw-r--r--zh-cn/security/bulletin/2016-11-01.html18
-rw-r--r--zh-cn/security/bulletin/2017-02-01.html2
-rw-r--r--zh-cn/security/bulletin/pixel/2017-12-01.html43
-rw-r--r--zh-cn/security/enhancements/enhancements80.html39
-rw-r--r--zh-cn/source/64-bit-builds.html10
-rw-r--r--zh-cn/source/add-device.html97
-rw-r--r--zh-cn/source/brands.html8
-rw-r--r--zh-cn/source/build-numbers.html438
-rw-r--r--zh-cn/source/building-kernels.html104
-rw-r--r--zh-cn/source/building.html42
-rw-r--r--zh-cn/source/code-style.html10
-rw-r--r--zh-cn/source/community.html3
-rw-r--r--zh-cn/source/developing.html124
-rw-r--r--zh-cn/source/devices.html297
-rw-r--r--zh-cn/source/downloading.html97
-rw-r--r--zh-cn/source/initializing.html172
-rw-r--r--zh-cn/source/jack.html252
-rw-r--r--zh-cn/source/known-issues.html103
-rw-r--r--zh-cn/source/life-of-a-bug.html134
-rw-r--r--zh-cn/source/report-bugs.html242
-rw-r--r--zh-cn/source/requirements.html58
-rw-r--r--zh-cn/source/running.html220
-rw-r--r--zh-cn/source/site-updates.html340
-rw-r--r--zh-cn/source/submit-patches.html76
36 files changed, 2055 insertions, 970 deletions
diff --git a/en/devices/automotive/properties.html b/en/devices/automotive/properties.html
index 5a69edef..55baea95 100644
--- a/en/devices/automotive/properties.html
+++ b/en/devices/automotive/properties.html
@@ -227,5 +227,32 @@ This information is used to block unsafe applications while driving.</li>
<br>Fuel level is low or not (boolean).</li>
</ul>
+<h2 id=vms>Vehicle Mapping Service (VMS)</h2>
+
+<p>Android 8.1 introduces support for the Vehicle Mapping Service (VMS), a new
+vehicle property intended for use only in Android Automotive implementations.
+VMS can be used for in-vehicle mapping services that support common vehicle
+features such as advanced driver assistance
+(<a href="https://en.wikipedia.org/wiki/Advanced_driver-assistance_systems" class="external">ADAS</a>).
+
+<aside class="note"><strong>Note:</strong> For details on compatibility
+requirements for Automotive, see
+<a href="https://source.android.com/compatibility/android-cdd#2_5_automotive_requirements">Automotive
+Requirements</a>.</aside>
+
+<p>The VMS property is a complex data type that expresses map data exchanged
+between an Android Automotive implementation and the underlying vehicle hardware
+responsible for managing onboard mapping data.</p>
+
+<p>AOSP does not contain a default implementation of VMS, which currently
+exists only as the property and related enumeration. Message types and data
+structures are described in
+<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/automotive/vehicle/2.0/types.hal">Vehicle
+HAL 2.0</a> in the
+<a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/automotive/vehicle/2.0/types.hal#3216">VmsMessageType</a>
+enum, which lists the types of supported VMS messages. This enum is used as the
+first integer in the vehicle property integers array and determines how the rest
+of the message is decoded.</p>
+
</body>
</html>
diff --git a/en/security/encryption/full-disk.html b/en/security/encryption/full-disk.html
index a855b650..08c4b1b7 100644
--- a/en/security/encryption/full-disk.html
+++ b/en/security/encryption/full-disk.html
@@ -79,7 +79,7 @@ However, the resultant hash is also signed through a TEE (such as TrustZone),
which uses a hash of the signature to encrypt the master key.</p>
<p>You can find the default password defined in the Android Open Source Project <a
-href="https://android.googlesource.com/platform/system/vold/+/master/cryptfs.c">cryptfs.c</a>
+href="https://android.googlesource.com/platform/system/vold/+/master/cryptfs.cpp">cryptfs.cpp</a>
file.</p>
<p>When the user sets the PIN/pass or password on the device, only the 128-bit key
diff --git a/en/setup/build-numbers.html b/en/setup/build-numbers.html
index b8891600..1e82c65d 100644
--- a/en/setup/build-numbers.html
+++ b/en/setup/build-numbers.html
@@ -213,6 +213,12 @@ site:</p>
</thead>
<tbody>
<tr>
+ <td>OPM2.171019.012</td>
+ <td>android-8.1.0_r2</td>
+ <td>Oreo</td>
+ <td>Pixel 2 XL, Pixel 2</td>
+ </tr>
+ <tr>
<td>OPM1.171019.011</td>
<td>android-8.1.0_r1</td>
<td>Oreo</td>
diff --git a/zh-cn/compatibility/cdd.html b/zh-cn/compatibility/cdd.html
index e0dfec9b..9995de56 100644
--- a/zh-cn/compatibility/cdd.html
+++ b/zh-cn/compatibility/cdd.html
@@ -45,6 +45,12 @@
<th>字符串</th>
</tr>
<tr>
+ <td>8.1</td>
+ <td><a href="8.1/android-8.1-cdd.pdf">android-8.1-cdd.pdf</a></td>
+ <td><a href="8.1/android-8.1-cdd.html">android-8.1-cdd.html</a></td>
+ <td><a href="8.1/versions.html">8.1 版</a></td>
+ </tr>
+ <tr>
<td>8.0</td>
<td><a href="8.0/android-8.0-cdd.pdf">android-8.0-cdd.pdf</a></td>
<td><a href="8.0/android-8.0-cdd.html">android-8.0-cdd.html</a></td>
diff --git a/zh-cn/compatibility/cts/downloads.html b/zh-cn/compatibility/cts/downloads.html
index 76af3940..ff022bf0 100644
--- a/zh-cn/compatibility/cts/downloads.html
+++ b/zh-cn/compatibility/cts/downloads.html
@@ -22,6 +22,16 @@
<p>感谢您对 Android 兼容性计划的关注!您可以通过以下链接访问关于该计划的重要文档和信息。随着 CTS 的更新,此网页上会陆续添加新的版本。CTS 版本在链接名称中由 R&lt;数字&gt; 表示。</p>
+<h2 id="android-81">Android 8.1</h2>
+<p>Android 8.1 是代号为 Oreo-MR1 的开发里程碑版本。
+以下测试的源代码可以与开放源代码树中的“android-cts-8.1_r1”标记同步。</p>
+<ul>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.1_r1-linux_x86-arm.zip">Android 8.1 R1 兼容性测试套件 (CTS) - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-8.1_r1-linux_x86-x86.zip">Android 8.1 R1 兼容性测试套件 (CTS) - x86</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r1-linux_x86-arm.zip">Android 8.1 R1 CTS 验证程序 - ARM</a></li>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-8.1_r1-linux_x86-x86.zip">Android 8.1 R1 CTS 验证程序 - x86</a></li>
+</ul>
+
<h2 id="android-80">Android 8.0</h2>
<p>Android 8.0 是代号为 Oreo 的开发里程碑版本。以下测试的源代码可以与开放源代码树中的“android-cts-8.0_r4”标记同步。</p>
<ul>
diff --git a/zh-cn/compatibility/cts/setup.html b/zh-cn/compatibility/cts/setup.html
index 3e55aff3..1447e96d 100644
--- a/zh-cn/compatibility/cts/setup.html
+++ b/zh-cn/compatibility/cts/setup.html
@@ -140,7 +140,7 @@ ro.product.first_api_level=21
<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) 视为隔离的客户端(请参阅上文的<a href="#physical_environment">物理环境</a>部分),并可以连接到互联网:<strong>设置 &gt; WLAN</strong><em></em>
+ </li><li>连接到满足以下要求的 WLAN 网络:支持 IPv6,可以将被测设备 (DUT) 视为隔离的客户端(请参阅上文的<em>物理环境</em>部分),并可以连接到互联网:<a href="#physical_environment">设置 &gt; WLAN</a><strong></strong>
</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>
diff --git a/zh-cn/compatibility/index.html b/zh-cn/compatibility/index.html
index 95f14b71..a8a71170 100644
--- a/zh-cn/compatibility/index.html
+++ b/zh-cn/compatibility/index.html
@@ -48,9 +48,9 @@
<h2 id="android-compatibility-is-free-and-its-easy">Android 兼容性计划是免费的,而且申请步骤很简单</h2>
<p>要打造与 Android 兼容的移动设备,请遵循以下三个步骤进行操作:</p>
<ol>
-<li>获取 <a href="/setup/index.html">Android 软件源代码</a>。<em></em>这是要移植到您的硬件的 Android 平台源代码。</li>
-<li>遵循 Android 兼容性定义文档 (CDD)(<a href="/compatibility/android-cdd.pdf">PDF</a>、<a href="/compatibility/android-cdd.html">HTML</a>)的要求。<em></em>CDD 列出了对兼容的 Android 设备的软件和硬件要求。</li>
-<li>通过<a href="/compatibility/cts/">兼容性测试套件 (CTS)</a> 测试。<em></em>在开发过程中随时借助 CTS 评估兼容性。</li> </ol>
+<li>获取 <a href="/setup/index.html">Android 软件源代码</a><em></em>。这是要移植到您的硬件的 Android 平台源代码。</li>
+<li><em></em>遵循 Android 兼容性定义文档 (CDD)(<a href="/compatibility/android-cdd.pdf">PDF</a>、<a href="/compatibility/android-cdd.html">HTML</a>)的要求。CDD 列出了对兼容的 Android 设备的软件和硬件要求。</li>
+<li>通过<a href="/compatibility/cts/">兼容性测试套件 (CTS)</a><em></em> 测试。在开发过程中随时借助 CTS 评估兼容性。</li> </ol>
<p>在符合 CDD 要求且通过 CTS 测试后,您的设备即是与 Android 兼容的设备,这意味着生态系统中的 Android 应用在您的设备上运行时可提供一致的体验。有关 Android 兼容性计划的详细信息,请参阅<a href="overview.html">计划概述</a>。</p>
diff --git a/zh-cn/devices/architecture/hidl/code-style.html b/zh-cn/devices/architecture/hidl/code-style.html
index 8829febd..ac06cdcf 100644
--- a/zh-cn/devices/architecture/hidl/code-style.html
+++ b/zh-cn/devices/architecture/hidl/code-style.html
@@ -409,7 +409,7 @@ foo(T arg1, T arg2) generates (S ret1, S ret2);
<li><strong>空格</strong>:各行不得包含尾随空格;空行不得包含空格。</li>
<li><strong>空格与制表符</strong>:仅使用空格。</li>
<li><strong>缩进大小</strong>:数据块缩进 <strong>4</strong> 个空格,换行缩进 <strong>8</strong> 个空格。</li>
-<li><strong>大括号</strong>:(<a href="#annotations">注释值</a>除外)<strong>左</strong>大括号与前面的代码在同一行,<strong>右</strong>大括号与后面的分号占一整行。例如:
+<li><strong>大括号</strong>:(<a href="#annotations">注解值</a>除外)<strong>左</strong>大括号与前面的代码在同一行,<strong>右</strong>大括号与后面的分号占一整行。例如:
<pre class="prettyprint">
interface INfc {
close();
@@ -476,14 +476,14 @@ interface IFoo {
<li>将换行的参数与上一行的第一个参数对齐,如果不能对齐,则这些参数缩进 8 个空格。</li>
</ul>
-<h3 id="annotations">注释</h3>
-<p>对于注释,请采用以下格式:</p>
+<h3 id="annotations">注解</h3>
+<p>对于注解,请采用以下格式:</p>
<pre class="prettyprint">
@annotate(keyword = value, keyword = {value, value, value})
</pre>
-<p>按字母顺序对注释进行排序,并在等号两边加空格。例如:</p>
+<p>按字母顺序对注解进行排序,并在等号两边加空格。例如:</p>
<pre class="prettyprint">
@callflow(key = value)
@@ -491,7 +491,7 @@ interface IFoo {
@exit
</pre>
-<p>确保注释占一整行。例如:</p>
+<p>确保注解占一整行。例如:</p>
<pre class="prettyprint">
// Good
@entry
@@ -501,7 +501,7 @@ interface IFoo {
@entry @exit
</pre>
-<p>如果注释在同一行中放不下,则缩进 8 个空格。例如:</p>
+<p>如果注解在同一行中放不下,则缩进 8 个空格。例如:</p>
<pre class="prettyprint">
@annotate(
@@ -525,7 +525,7 @@ interface IFoo {
@callflow(key = { "val","val" })
</pre>
-<p>注释和函数声明之间不得有空行。例如:</p>
+<p>注解和函数声明之间不得有空行。例如:</p>
<pre class="prettyprint">
// Good
@entry
@@ -607,4 +607,4 @@ vec &lt; int32_t &gt; array;
vec &lt; vec &lt; int32_t &gt; &gt; array;
</pre>
-</body></html>
+</body></html> \ No newline at end of file
diff --git a/zh-cn/devices/architecture/vintf/match-rules.html b/zh-cn/devices/architecture/vintf/match-rules.html
index 90fe713e..4ffc2f60 100644
--- a/zh-cn/devices/architecture/vintf/match-rules.html
+++ b/zh-cn/devices/architecture/vintf/match-rules.html
@@ -241,7 +241,7 @@ CONFIG_EMPTY=1 # mismatch; expects ""
</li>
</ul>
-<p>引导加载程序或 Android 操作系统可能包含 <code>libavb</code> 库的两个副本,每个副本具有不同的 MAJOR 版本,用于升级设备和启动设备。在这种情况下,可以共享同一个未签名的系统映像,但最终签名的系统映像是不同的(具有不同的 <code>avb.vbmeta-version</code>):<em></em><em></em></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/graphics/run-tests.html b/zh-cn/devices/graphics/run-tests.html
index c71a96bb..2644bacc 100644
--- a/zh-cn/devices/graphics/run-tests.html
+++ b/zh-cn/devices/graphics/run-tests.html
@@ -254,7 +254,6 @@ python android/scripts/debug.py \
<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/tech/ota/inside_packages.html b/zh-cn/devices/tech/ota/inside_packages.html
index 525b9725..c91b7af0 100644
--- a/zh-cn/devices/tech/ota/inside_packages.html
+++ b/zh-cn/devices/tech/ota/inside_packages.html
@@ -73,8 +73,7 @@ tgt_size</i>, <i>patch1_sha1</i>, <i>patch1_blob</i>, [...])</code></dt>
<p>支持特殊语法将 MTD(内存技术设备)分区的内容作为文件处理,以便为引导分区这样的原始分区打补丁。由于 MTD 分区没有文件结束标记,因此要读取该分区,您必须知道您要读取的数据量。您可以使用字符串“MTD:partition:size_1:sha1_1:size_2:sha1_2”作为文件名来读取给定的分区。<i></i><i></i><i></i><i></i><i></i>您必须至少指定一个(size,sha-1)对;如果您希望读取的内容有多种可能,则可以指定多个对。<i></i></p></dd>
<dt><code>apply_patch_check(<i>filename</i>, <i>sha1</i>[, <i>sha1</i>, ...])
</code></dt>
-<dd>如果 filename 的内容或缓存分区中的临时副本(如果存在)中的内容具有与给定的 sha1 值之一相等的 SHA1 校验和,则返回 True。sha1 值指定为 40 位十六进制数字。<i></i><i></i><i></i>
-该函数不同于 <code>sha1_check(read_file(<i>filename</i>),
+<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>
<dt><code>apply_patch_space(<i>bytes</i>)</code></dt>
<dd>如果至少有 bytes 个字节的暂存空间可用于打二进制补丁程序,则返回 True。<i></i></dd>
diff --git a/zh-cn/security/bulletin/2016-05-01.html b/zh-cn/security/bulletin/2016-05-01.html
index f58e5eb0..0dc35ec3 100644
--- a/zh-cn/security/bulletin/2016-05-01.html
+++ b/zh-cn/security/bulletin/2016-05-01.html
@@ -551,8 +551,7 @@ WLAN 中的提权漏洞</h3>
</tr>
<tr>
<td>CVE-2016-4477</td>
- <td><a href="https://android.googlesource.com/platform/external/wpa_supplicant_8/+/b79e09574e50e168dd5f19d540ae0b9a05bd1535">27371366</a>
-[<a href="https://android.googlesource.com/platform/external/wpa_supplicant_8/+/b845b81ec6d724bd359cdb77f515722dd4066cf8">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/external/wpa_supplicant_8/+/b79e09574e50e168dd5f19d540ae0b9a05bd1535">27371366</a> [<a href="https://android.googlesource.com/platform/external/wpa_supplicant_8/+/b845b81ec6d724bd359cdb77f515722dd4066cf8">2</a>]</td>
<td>高</td>
<td><a href="#nexus_devices">所有 Nexus 设备</a></td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1</td>
@@ -613,9 +612,7 @@ Mediaserver 中的提权漏洞</h3>
</tr>
<tr>
<td>CVE-2016-2452</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/44749eb4f273f0eb681d0fa013e3beef754fa687">27662364</a>
-[<a href="https://android.googlesource.com/platform/frameworks/av/+/65756b4082cd79a2d99b2ccb5b392291fd53703f">2</a>]
-[<a href="https://android.googlesource.com/platform/frameworks/av/+/daa85dac2055b22dabbb3b4e537597e6ab73a866">3</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/44749eb4f273f0eb681d0fa013e3beef754fa687">27662364</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/65756b4082cd79a2d99b2ccb5b392291fd53703f">2</a>] [<a href="https://android.googlesource.com/platform/frameworks/av/+/daa85dac2055b22dabbb3b4e537597e6ab73a866">3</a>]</td>
<td>高</td>
<td><a href="#nexus_devices">所有 Nexus 设备</a></td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1</td>
@@ -698,8 +695,7 @@ Conscrypt 中的提权漏洞</h3>
</tr>
<tr>
<td>CVE-2016-2461</td>
- <td><a href="https://android.googlesource.com/platform/external/conscrypt/+/50d0447566db4a77d78d592f1c1b5d31096fac8f">27324690</a>
-[<a href="https://android.googlesource.com/platform/external/conscrypt/+/1638945d4ed9403790962ec7abed1b7a232a9ff8">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/external/conscrypt/+/50d0447566db4a77d78d592f1c1b5d31096fac8f">27324690</a> [<a href="https://android.googlesource.com/platform/external/conscrypt/+/1638945d4ed9403790962ec7abed1b7a232a9ff8">2</a>]</td>
<td>中</td>
<td><a href="#nexus_devices">所有 Nexus 设备</a></td>
<td>6.0、6.0.1</td>
@@ -821,8 +817,7 @@ AOSP 邮件中的信息披露漏洞</h3>
</tr>
<tr>
<td>CVE-2016-2458</td>
- <td><a href="https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/a55168330d9326ff2120285763c818733590266a">27335139</a>
-[<a href="https://android.googlesource.com/platform/packages/apps/Email/+/2791f0b33b610247ef87278862e66c6045f89693">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/a55168330d9326ff2120285763c818733590266a">27335139</a> [<a href="https://android.googlesource.com/platform/packages/apps/Email/+/2791f0b33b610247ef87278862e66c6045f89693">2</a>]</td>
<td>中</td>
<td><a href="#nexus_devices">所有 Nexus 设备</a></td>
<td>5.0.2、5.1.1、6.0、6.0.1</td>
diff --git a/zh-cn/security/bulletin/2016-11-01.html b/zh-cn/security/bulletin/2016-11-01.html
index ae669712..45fce546 100644
--- a/zh-cn/security/bulletin/2016-11-01.html
+++ b/zh-cn/security/bulletin/2016-11-01.html
@@ -270,7 +270,8 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6704</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/c6c446f9e022adf20064e65a17574804f8af8e7d">A-30229821</a> [<a href="https://android.googlesource.com/platform/hardware/qcom/audio/+/9cb9810ecb63c8ff55ecf4bc77431dc5b0688b5f">2</a>] [<a href="https://android.googlesource.com/platform/system/media/+/a6274f03b4dfe1c3a22af51e3a17ea56a314e747">3</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/c6c446f9e022adf20064e65a17574804f8af8e7d">A-30229821</a> [<a href="https://android.googlesource.com/platform/hardware/qcom/audio/+/9cb9810ecb63c8ff55ecf4bc77431dc5b0688b5f">2</a>] [<a href="https://android.googlesource.com/platform/system/media/+/a6274f03b4dfe1c3a22af51e3a17ea56a314e747">3</a>]
+ </td>
<td>高</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -278,7 +279,8 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6705</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/av/+/3a03fa24d21f97e84e796ac5ef14b3f434c0e8f1">A-30907212</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/bd04b47d38a89f1dada1c6da2ef4a3d235c166b8">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/3a03fa24d21f97e84e796ac5ef14b3f434c0e8f1">A-30907212</a> [<a href="https://android.googlesource.com/platform/frameworks/av/+/bd04b47d38a89f1dada1c6da2ef4a3d235c166b8">2</a>]
+ </td>
<td>高</td>
<td>所有</td>
<td>5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -402,7 +404,8 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6710</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/base/+/9fab683c9598d234dd8461335c276ed3e37c91e8">A-30537115</a> [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/243e62949f7208d3b82eda3ee4ec22d3dbc1fb19">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/9fab683c9598d234dd8461335c276ed3e37c91e8">A-30537115</a> [<a href="https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/243e62949f7208d3b82eda3ee4ec22d3dbc1fb19">2</a>]
+ </td>
<td>高</td>
<td>所有</td>
<td>5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -664,7 +667,8 @@ Mediaserver 中的提权漏洞可让本地恶意应用通过特许进程执行
</tr>
<tr>
<td>CVE-2016-6719</td>
- <td><a href="https://android.googlesource.com/platform/packages/apps/Bluetooth/+/e1b6db10e913c09d0b695368336137f6aabee462">A-29043989</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/b1dc1757071ba46ee653d68f331486e86778b8e4">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/packages/apps/Bluetooth/+/e1b6db10e913c09d0b695368336137f6aabee462">A-29043989</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/b1dc1757071ba46ee653d68f331486e86778b8e4">2</a>]
+ </td>
<td>中</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -736,7 +740,8 @@ Mediaserver 中的信息披露漏洞可让本地恶意应用获取超出其权
</tr>
<tr>
<td>CVE-2016-6723</td>
- <td><a href="https://android.googlesource.com/platform/frameworks/base/+/d5b0d0b1df2e1a7943a4bb2034fd21487edd0264">A-30100884</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/31f351160cdfd9dbe9919682ebe41bde3bcf91c6">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/d5b0d0b1df2e1a7943a4bb2034fd21487edd0264">A-30100884</a> [<a href="https://android.googlesource.com/platform/frameworks/base/+/31f351160cdfd9dbe9919682ebe41bde3bcf91c6">2</a>]
+ </td>
<td>中</td>
<td>所有</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1、7.0</td>
@@ -1271,7 +1276,8 @@ Freetype 中的远程代码执行漏洞可让本地恶意应用加载特制字
</tr>
<tr>
<td>CVE-2014-9675</td>
- <td><a href="https://android.googlesource.com/platform/external/freetype/+/f720f0dbcf012d6c984dbbefa0875ef9840458c6">A-24296662</a> [<a href="https://android.googlesource.com/platform/external/pdfium/+/96f965ff7411f1edba72140fd70740e63cabec71">2</a>]</td>
+ <td><a href="https://android.googlesource.com/platform/external/freetype/+/f720f0dbcf012d6c984dbbefa0875ef9840458c6">A-24296662</a> [<a href="https://android.googlesource.com/platform/external/pdfium/+/96f965ff7411f1edba72140fd70740e63cabec71">2</a>]
+ </td>
<td>高</td>
<td>无*</td>
<td>4.4.4、5.0.2、5.1.1、6.0、6.0.1</td>
diff --git a/zh-cn/security/bulletin/2017-02-01.html b/zh-cn/security/bulletin/2017-02-01.html
index c16a5b6e..dbe2d3fe 100644
--- a/zh-cn/security/bulletin/2017-02-01.html
+++ b/zh-cn/security/bulletin/2017-02-01.html
@@ -52,7 +52,7 @@ Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。除
<p>本部分总结了 <a href="/security/enhancements/index.html">Android 安全平台</a>和服务防护功能(如 SafetyNet)提供的缓解措施。这些功能可降低 Android 上的安全漏洞被成功利用的可能性。</p>
<ul>
<li>新版 Android 平台中的增强功能让攻击者更加难以利用 Android 上存在的许多问题。我们建议所有用户都尽可能更新到最新版 Android。</li>
- <li>Android 安全团队会积极利用<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_2015_Report_Final.pdf">“验证应用”和 SafetyNet</a> 来监控滥用行为,这些功能会在发现<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用</a>时向用户发出警告。在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,“验证应用”在默认情况下处于启用状态。对于安装来自 Google Play 以外的应用的用户来说,这项功能尤为重要。虽然 Google Play 中禁止提供设备 Root 应用,但用户可能会尝试安装 Root 应用,而“验证应用”会在检测到这类应用(无论应用来自何处)时向用户发出警告。另外,“验证应用”会尝试识别并阻止用户安装会利用提权漏洞的已知恶意应用。如果用户已安装此类应用,那么“验证应用”将会通知用户并尝试移除所检测到的应用。</li>
+ <li>Android 安全团队会积极利用<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_2015_Report_Final.pdf">“验证应用”和 SafetyNet</a> 来监控滥用行为,这些功能会在发现<a href="http://static.googleusercontent.com/media/source.android.com/en//security/reports/Google_Android_Security_PHA_classifications.pdf">可能有害的应用时向用户发出警告。</a>在预装有 <a href="http://www.android.com/gms">Google 移动服务</a>的设备上,“验证应用”在默认情况下处于启用状态。对于安装来自 Google Play 以外的应用的用户来说,这项功能尤为重要。虽然 Google Play 中禁止提供设备 Root 应用,但用户可能会尝试安装 Root 应用,而“验证应用”会在检测到这类应用(无论应用来自何处)时向用户发出警告。另外,“验证应用”会尝试识别并阻止用户安装会利用提权漏洞的已知恶意应用。如果用户已安装此类应用,那么“验证应用”将会通知用户并尝试移除所检测到的应用。</li>
<li>由于已做了适当更新,因此 Google 环聊和 Messenger 应用不会自动将媒体内容传递给 mediaserver 这类进程。</li>
</ul>
<h2 id="acknowledgements">致谢</h2>
diff --git a/zh-cn/security/bulletin/pixel/2017-12-01.html b/zh-cn/security/bulletin/pixel/2017-12-01.html
index 352817ee..851b78ad 100644
--- a/zh-cn/security/bulletin/pixel/2017-12-01.html
+++ b/zh-cn/security/bulletin/pixel/2017-12-01.html
@@ -19,7 +19,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<p><em>发布时间:2017 年 12 月 4 日</em></p>
+<p><em>发布时间:2017 年 12 月 4 日 | 更新时间:2017 年 12 月 6 日</em></p>
<p>
Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。对于 Google 设备,2017-12-05 或之后的安全补丁程序级别均已解决本公告中的所有问题。要了解如何检查设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">检查并更新您的 Android 版本</a>。
@@ -28,7 +28,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
所有受支持的 Google 设备都会收到 2017-12-05 补丁程序级别的更新。我们建议所有用户都在自己的设备上接受这些更新。
</p>
<p class="note">
-<strong>注意</strong>:Google 设备固件映像将于 12 月 5 日(星期二)在 <a href="https://developers.google.com/android/nexus/images">Google Developers 网站</a>上发布。
+<strong>注意</strong>:Google 设备固件映像可在 <a href="//developers.google.com/android/nexus/images">Google Developers 网站</a>上获取。
</p>
<h2 id="announcements">公告</h2>
<p>
@@ -56,14 +56,14 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
</tr>
<tr>
<td>CVE-2017-13154</td>
- <td>A-63666573</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/271defe729a10db25b45759c8ccfb5abed24c647">A-63666573</a></td>
<td>EoP</td>
<td>高</td>
<td>5.1.1、6.0、6.0.1、7.0、7.1.1、7.1.2、8.0</td>
</tr>
<tr>
<td rowspan="2">CVE-2017-0879</td>
- <td rowspan="2">A-65025028</td>
+ <td rowspan="2"><a href="https://android.googlesource.com/platform/frameworks/av/+/26a87d15ef97b35633577f7a97ed39bcaa800585">A-65025028</a></td>
<td>ID</td>
<td>中</td>
<td>7.0、7.1.1、7.1.2、8.0</td>
@@ -75,7 +75,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
</tr>
<tr>
<td rowspan="2">CVE-2017-13149</td>
- <td rowspan="2">A-65719872</td>
+ <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libhevc/+/4cf597a518436abf964b020bb97f97e490f80065">A-65719872</a></td>
<td>ID</td>
<td>中</td>
<td>7.0、7.1.1、7.1.2、8.0</td>
@@ -87,7 +87,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
</tr>
<tr>
<td rowspan="2">CVE-2017-13150</td>
- <td rowspan="2">A-38328132</td>
+ <td rowspan="2"><a href="https://android.googlesource.com/platform/external/libmpeg2/+/86bfec8d3215dbdabbe79dba128628976ebfc6ef">A-38328132</a></td>
<td>ID</td>
<td>中</td>
<td>7.0、7.1.1、7.1.2、8.0</td>
@@ -99,7 +99,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
</tr>
<tr>
<td>CVE-2017-13152</td>
- <td>A-62872384</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/b41a527176b659c5ddfc734838df7607a6af80c9">A-62872384</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>
@@ -299,8 +299,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-11030</td>
<td>A-64431967<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=89e6c2d38405cdeefaa278cbf6d18791f255ee5e">QC-CR#2034255</a>
-[<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=2be7caec635de9fcf0d2145f858635e9366f0f4f">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=89e6c2d38405cdeefaa278cbf6d18791f255ee5e">QC-CR#2034255</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=2be7caec635de9fcf0d2145f858635e9366f0f4f">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>显示屏</td>
@@ -353,8 +352,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-9722</td>
<td>A-64453224<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=ab0ae43628cff92d10792b762667ddfaf243d796">QC-CR#2034239</a>
-[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd7e77fbab7e2b7e737a10d5300e826572fee82f">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=ab0ae43628cff92d10792b762667ddfaf243d796">QC-CR#2034239</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd7e77fbab7e2b7e737a10d5300e826572fee82f">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>显示屏</td>
@@ -402,8 +400,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-11045</td>
<td>A-65468993<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=6c815ebc37f49e4e3edb10def9c45f2fd9362a84">QC-CR#2060377</a>
-[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=2a657721dd71aec745534af9f8712537b83c410e">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=6c815ebc37f49e4e3edb10def9c45f2fd9362a84">QC-CR#2060377</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=2a657721dd71aec745534af9f8712537b83c410e">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>相机</td>
@@ -443,8 +440,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<tr>
<td>CVE-2017-11033</td>
<td>A-64453422<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=b54141365805ae1a5254bff5442e1a103d3701d0">QC-CR#2031930</a>
-[<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=fd98387b3d30da51773ad7597bb9febb87c70394">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=b54141365805ae1a5254bff5442e1a103d3701d0">QC-CR#2031930</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=fd98387b3d30da51773ad7597bb9febb87c70394">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>内核</td>
@@ -535,6 +531,11 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
</tr>
</tbody></table>
+<h2 id="functional-updates">功能更新</h2>
+<p>
+在 12 月 OTA 更新的过程中,所有受支持的 Google 设备都会收到 Android 8.1 更新。Android 8.1 中含有大量针对 Android 平台各个部分的功能更新和改进。
+</p>
+
<h2 id="common-questions-and-answers">常见问题和解答</h2>
<p>
本部分针对阅读本公告后可能产生的常见问题提供了相应的解答。
@@ -556,7 +557,7 @@ Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.
<colgroup><col width="25%" />
<col width="75%" />
</colgroup><tbody><tr>
- <th>缩写</th>
+ <th>缩写词</th>
<th>定义</th>
</tr>
<tr>
@@ -641,6 +642,16 @@ Android 安全公告中记录的安全漏洞是在 Android 设备上采用最新
<td>2017 年 12 月 4 日</td>
<td>发布了本公告。</td>
</tr>
+ <tr>
+ <td>1.1</td>
+ <td>2017 年 12 月 5 日</td>
+ <td>更新了本公告,添加了指向固件映像的链接和关于功能更新的详情。</td>
+ </tr>
+ <tr>
+ <td>1.2</td>
+ <td>2017 年 12 月 6 日</td>
+ <td>修订了本公告,添加了 AOSP 链接。</td>
+ </tr>
</tbody></table>
</body></html> \ No newline at end of file
diff --git a/zh-cn/security/enhancements/enhancements80.html b/zh-cn/security/enhancements/enhancements80.html
new file mode 100644
index 00000000..341873e9
--- /dev/null
+++ b/zh-cn/security/enhancements/enhancements80.html
@@ -0,0 +1,39 @@
+<html devsite><head>
+ <title>Android 8.0 中的安全增强功能</title>
+ <meta name="project_path" value="/_project.yaml"/>
+ <meta name="book_path" value="/_book.yaml"/>
+ </head>
+ <body>
+ <!--
+ Copyright 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<p>每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 8.0 中提供的一些主要安全增强功能:</p>
+
+<ul>
+ <li><strong>加密</strong>:在工作资料中增加了对取消密钥的支持。</li>
+ <li><strong>验证启动</strong>:增加了 Android 验证启动 (AVB)。支持回滚保护(用于引导加载程序)的验证启动代码库已添加到 AOSP 中。建议提供引导加载程序支持,以便为 HLOS 提供回滚保护。建议将引导加载程序设为只能由用户通过实际操作设备来解锁。</li>
+ <li><strong>锁定屏幕</strong>:增加了对使用防篡改硬件验证锁定屏幕凭据的支持。</li>
+ <li><strong>KeyStore</strong>:搭载 Android 8.0+ 的所有设备所需的<a href="/security/keystore/attestation">密钥认证</a>。增加了 <a href="/security/keystore/attestation#id-attestation">ID 认证</a>支持,以改善零触摸注册。</li>
+ <li><strong>沙盒</strong>:使用 Project Treble 的框架和设备特定组件之间的标准接口更<a href="https://android-developers.googleblog.com/2017/07/shut-hal-up.html">紧密地对许多组件进行沙盒化处理</a>。将 <a href="https://android-developers.googleblog.com/2017/07/seccomp-filter-in-android-o.html">seccomp 过滤</a>应用到了所有不信任的应用,以减少内核的攻击面。<a href="https://android-developers.googleblog.com/2017/06/whats-new-in-webview-security.html">WebView</a> 现在运行在一个独立的进程中,对系统其余部分的访问非常有限。</li>
+ <li><strong>内核加固</strong>:实现了<a href="https://android-developers.googleblog.com/2017/08/hardening-kernel-in-android-oreo.html">加固 usercopy</a>、PAN 模拟、初始化后只读以及 KASLR。</li>
+ <li><strong>用户空间加固</strong>:为媒体堆栈实现了 CFI。应用叠加层不能再覆盖系统关键型窗口,并且用户有办法关闭它们。</li>
+ <li><strong>流式操作系统更新</strong>:在磁盘空间不足的设备上启用了<a href="/devices/tech/ota/ab_updates#streaming-updates">更新</a>。</li>
+ <li><strong>安装未知应用</strong>:用户必须<a href="https://developer.android.com/studio/publish/index.html#publishing-unknown">授予权限</a>,才能从不是第一方应用商店的来源安装应用。</li>
+ <li><strong>隐私权</strong>:对于设备上的每个应用和每个用户,Android ID (SSAID) 具有不同的值。对于网络浏览器应用,Widevine 客户端 ID 会针对每个应用包名称和网页来源返回不同的值。
+ <code>net.hostname</code> 现在为空,并且 DHCP 客户端不再发送主机名。<code>android.os.Build.SERIAL</code> 已被替换为 <a href="https://developer.android.com/reference/android/os/Build.html#getSerial()"><code>Build.SERIAL</code> API</a>(受到用户控制权限的保护)。改进了某些芯片组中的 MAC 地址随机化功能。</li>
+</ul>
+
+</body></html> \ No newline at end of file
diff --git a/zh-cn/source/64-bit-builds.html b/zh-cn/source/64-bit-builds.html
index 7f042a08..fac30401 100644
--- a/zh-cn/source/64-bit-builds.html
+++ b/zh-cn/source/64-bit-builds.html
@@ -22,19 +22,19 @@
<h2 id="overview">概览</h2>
-<p>从编译系统的角度来看,最显著的变化是现可支持在一次编译中为两种目标 CPU 架构(64 位和 32 位)编译二进制文件。这也称为“多库编译”。<em></em></p>
+<p>从编译系统的角度来看,最显著的变化是现在支持在同一次编译中为两种目标 CPU 架构(64 位和 32 位)编译二进制文件。这也称为“多库编译”。<em></em></p>
<p>对于本机静态库和共享库,编译系统设置了为两种架构编译二进制文件的规则。产品配置 (<code>PRODUCT_PACKAGES</code>) 与依赖关系图共同决定了编译哪些二进制文件并安装到系统映像中。</p>
<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>
<p>在 <code>BoardConfig.mk</code> 中,我们添加了以下变量来配置第二个 CPU 架构和 ABI:</p>
-<pre class="prettyprint">
+<pre>
TARGET_2ND_ARCH
TARGET_2ND_ARCH_VARIANT
TARGET_2ND_CPU_VARIANT
@@ -46,7 +46,7 @@ TARGET_2ND_CPU_ABI2
<p>如果您希望编译系统默认编译 32 位可执行文件和应用,请设置以下变量:</p>
-<pre class="prettyprint">
+<pre class="devsite-click-to-copy">
TARGET_PREFER_32_BIT := true
</pre>
@@ -117,7 +117,7 @@ $(TARGET_OUT_SHARED_LIBRARIES)/hw</code>。</p>
<p>在多库编译中,请改用 <code>LOCAL_MODULE_RELATIVE_PATH</code>:</p>
-<pre class="prettyprint">
+<pre class="devsite-click-to-copy">
LOCAL_MODULE_RELATIVE_PATH := hw
</pre>
diff --git a/zh-cn/source/add-device.html b/zh-cn/source/add-device.html
index 4bdb2466..f76baa6e 100644
--- a/zh-cn/source/add-device.html
+++ b/zh-cn/source/add-device.html
@@ -35,19 +35,19 @@
<tr>
<td>产品</td>
<td>myProduct、myProduct_eu、myProduct_eu_fr、j2、sdk</td>
- <td><p>产品层用于定义所开发的产品的功能规范,例如要编译的模块、支持的语言区域,以及针对各语言区域的配置。也就是说,这是总体产品的名称。产品特定变量在产品定义 Makefile 中进行定义。一个产品可以沿用其他产品的定义,这有助于简化维护工作。一种常用的方法是:先创建一个基础产品,其中包含会应用到所有产品的功能,然后再基于这个基础产品创建产品变体。例如,如果有两个产品只是使用的无线技术不同(分别使用 CDMA 和 GSM),那么您可以让这两个产品沿用未定义无线技术的同一个基础产品的定义。
-</p></td>
+ <td>产品层用于定义所开发产品的功能规范,例如要编译的模块、支持的语言区域,以及针对各语言区域的配置。也就是说,这是总体产品的名称。产品特定变量在产品定义 Makefile 中进行定义。一个产品可以沿用其他产品的定义,这有助于简化维护工作。一种常用的方法是:先创建一个基础产品,其中包含会应用到所有产品的功能,然后再基于这个基础产品创建产品变体。例如,如果有两个产品只是使用的无线技术不同(分别使用 CDMA 和 GSM),那么您可以让这两个产品沿用未定义无线技术的同一个基础产品的定义。
+</td>
</tr>
<tr>
- <td>板/设备</td>
+ <td>主板/设备</td>
<td>sardine、trout、goldfish</td>
- <td>设备/板层代表设备上由可塑材料组成的物理层(即设备的工业设计)。例如,在北美销售的设备可能包括 QWERTY 键盘,而在法国销售的设备则可能包括 AZERTY 键盘。该层还用于展现产品的基本架构图。这些架构图包括板上的外围设备及其配置。所使用的名称只不过是代表不同板/设备配置的代码。</td>
+ <td>设备/主板层代表设备上由可塑材料组成的物理层(即设备的工业设计)。例如,在北美销售的设备可能包括 QWERTY 键盘,而在法国销售的设备则可能包括 AZERTY 键盘。该层还用于展现产品的基本架构图。这些架构图包括主板上的外围设备及其配置。所使用的名称只不过是代表不同主板/设备配置的代码。</td>
</tr>
<tr>
<td>架构</td>
<td>arm、x86、mips、arm64、x86_64、mips64</td>
- <td>架构层用于描述板上运行的处理器配置和 ABI(应用二进制接口)。</td>
+ <td>架构层用于描述主板上运行的处理器配置和 ABI(应用二进制接口)。</td>
</tr>
</tbody></table>
@@ -60,40 +60,43 @@
<table border="1">
<tbody><tr>
<td>
- <code>eng<code>
- </code></code></td>
+ <code>eng</code>
+ </td>
<td>这是默认的编译类型。
- <ul>
- <li>安装带有 <code>eng</code> 和/或 <code>debug</code> 标记的模块。
- </li><li>除了带有标记的模块之外,还会根据产品定义文件安装相应模块。</li>
- <li><code>ro.secure=0</code>
- </li><li><code>ro.debuggable=1</code>
- </li><li><code>ro.kernel.android.checkjni=1</code>
- </li><li><code>adb</code> 默认处于启用状态。
- </li></ul></td>
+<ul>
+<li>安装带有 <code>eng</code> 和/或 <code>debug</code> 标记的模块。</li>
+<li>除了带有标记的模块之外,还会根据产品定义文件安装相应模块。</li>
+<li><code>ro.secure=0</code></li>
+<li><code>ro.debuggable=1</code></li>
+<li><code>ro.kernel.android.checkjni=1</code></li>
+<li><code>adb</code> 默认处于启用状态。</li>
+</ul>
+ </td>
</tr>
<tr>
<td>
- <code>user<code>
- </code></code></td>
+ <code>user</code>
+ </td>
<td>这是旨在用作最终版本配置步骤的编译类型。
- <ul>
- <li>安装带有 <code>user</code> 标记的模块。</li>
- <li>除了带有标记的模块之外,还会根据产品定义文件安装相应模块。</li>
- <li><code>ro.secure=1</code> </li>
- <li><code>ro.debuggable=0</code> </li>
- <li><code>adb</code> 默认处于停用状态。</li>
- </ul></td>
+<ul>
+<li>安装带有 <code>user</code> 标记的模块。</li>
+<li>除了带有标记的模块之外,还会根据产品定义文件安装相应模块。</li>
+<li><code>ro.secure=1</code> </li>
+<li><code>ro.debuggable=0</code> </li>
+<li><code>adb</code> 默认处于停用状态。</li>
+</ul>
+ </td>
</tr>
<tr>
<td>
- <code>userdebug<code>
- </code></code></td>
+ <code>userdebug</code>
+ </td>
<td>除了以下几点之外,其余均与 <code>user</code> 相同:<ul>
- <li>还会安装带有 <code>debug</code> 标记的模块。
- </li><li><code>ro.debuggable=1</code>
- </li><li><code>adb</code> 默认处于启用状态。
- </li></ul></td>
+<li>还会安装带有 <code>debug</code> 标记的模块。</li>
+<li><code>ro.debuggable=1</code></li>
+<li><code>adb</code> 默认处于启用状态。</li>
+</ul>
+ </td>
</tr>
</tbody></table>
@@ -105,19 +108,19 @@
<p>要在此文件上设置资源叠加层,请将叠加层目录添加到项目编译文件中,如下所示:</p>
-<pre>
-PRODUCT_PACKAGE_OVERLAYS := device/<i>device_implementer</i>/<i>device_name</i>/overlay
+<pre class="devsite-click-to-copy">
+PRODUCT_PACKAGE_OVERLAYS := device/<var>DEVICE_IMPLEMENTER</var>/<var>DEVICE_NAME</var>/overlay
</pre>
<p>或</p>
-<pre>
-PRODUCT_PACKAGE_OVERLAYS := vendor/<i>vendor_name</i>/overlay
+<pre class="devsite-click-to-copy">
+PRODUCT_PACKAGE_OVERLAYS := vendor/<var>VENDOR_NAME</var>/overlay
</pre>
<p>然后,将一个叠加层文件添加到该目录下,例如:</p>
-<pre>
+<pre class="devsite-click-to-copy">
vendor/foobar/overlay/frameworks/base/core/res/res/config.xml
</pre>
@@ -140,7 +143,7 @@ vendor/foobar/overlay/frameworks/base/core/res/res/config.xml
<li>创建一个产品定义 Makefile,以便基于设备创建具体产品。以下示例 Makefile 来自于 <code>device/moto/shamu/aosp_shamu.mk</code>。请注意,该产品会通过 Makefile 沿用 <code>device/moto/shamu/device.mk</code> 和 <code>vendor/moto/shamu/device-vendor.mk</code> 文件中的内容,同时还会声明产品特定信息,例如名称、品牌和型号。
-<pre>
+<pre class="devsite-click-to-copy">
# Inherit from the common Open Source product configuration
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk)
@@ -164,7 +167,7 @@ PRODUCT_PACKAGES += \
</p>
</li>
- <li>创建一个指向产品的 Makefile 的 <code>AndroidProducts.mk</code> 文件。在此示例中,仅需要产品定义 Makefile。以下示例来自于 <code>device/moto/shamu/AndroidProducts.mk</code>:<pre>
+ <li>创建一个指向产品的 Makefile 的 <code>AndroidProducts.mk</code> 文件。在此示例中,仅需要产品定义 Makefile。以下示例来自于 <code>device/moto/shamu/AndroidProducts.mk</code>:<pre class="devsite-click-to-copy">
#
# This file should set PRODUCT_MAKEFILES to a list of product makefiles
# to expose to the build system. LOCAL_DIR will already be set to
@@ -181,11 +184,11 @@ PRODUCT_MAKEFILES := \
</pre>
</li>
- <li>创建一个包含板特定配置的 <code>BoardConfig.mk</code> Makefile。有关示例,请参阅 <code>device/moto/shamu/BoardConfig.mk</code>。
+ <li>创建一个包含主板特定配置的 <code>BoardConfig.mk</code> Makefile。有关示例,请参阅 <code>device/moto/shamu/BoardConfig.mk</code>。
</li>
- <li>创建一个 <code>vendorsetup.sh</code> 文件,以便将您的产品(“午餐套餐”)与<a href="#build-variants">版本变体</a>(使用短划线将两者分隔开)一起添加到编译版本中。例如:<pre>
-add_lunch_combo &lt;product_name&gt;-userdebug
+ <li>创建一个 <code>vendorsetup.sh</code> 文件,以便将您的产品(“午餐套餐”)与<a href="#build-variants">编译类型</a>(使用短划线将两者分隔开)一起添加到细分版本中。例如:<pre class="devsite-click-to-copy">
+add_lunch_combo <var>&lt;PRODUCT_NAME&gt;</var>-userdebug
</pre>
</li>
@@ -287,4 +290,18 @@ add_lunch_combo &lt;product_name&gt;-userdebug
</tbody>
</table>
+<h3 id="ANDROID_VENDOR_KEYS">设置 ANDROID_VENDOR_KEYS 以通过 USB 进行连接</h3>
+
+<p>借助 <code>ANDROID_VENDOR_KEYS</code> 环境变量,设备制造商可以通过 <code>adb</code> 访问正式版。为每个版本生成每台设备都可以接受的密钥并将其存储在内部(如存储在 <code>vendor/oem-name/security/adb/</code>),然后通过 <code>ANDROID_VENDOR_KEYS</code> 让 <code>adb</code> 使用这些规范密钥,而不是随机密钥。</p>
+
+<p>使用 <code>ANDROID_VENDOR_KEYS</code> 环境变量指向生成的加密用 <code>adb</code> 公钥和私钥所在的目录。私钥存储在文件中。公钥存储在 file.pub 中。<code>ANDROID_VENDOR_KEYS</code> 环境变量指向存储生成的密钥对的文件或目录。</p>
+
+<p>该变量被设为一个文件或目录,其中包含使用 <code>adb keygen</code> 文件命令生成的 2048 位 RSA 身份验证密钥对。这些密钥对是对 ADB 服务器生成的 RSA 密钥对的补充。首次使用 <code>adb</code> 通过 USB 进行连接时,需要使用 RSA 密钥对。</p>
+
+<p>您必须接受主机的 RSA 密钥,才能显式授予 <code>adb</code> 对设备的访问权限。默认情况下,ADB 服务器生成的密钥对以 <code>adbkey</code>(私钥)和 <code>adbkey.pub</code>(公钥)的形式存储在以下密钥存储库目录中:</p>
+
+<p>在 MacOS 上,文件位置可能为:<code>$HOME/.android</code>。在 Windows 和 Linux 上,文件位置为:<code>%USERPOFILE%\.android</code>。在 Windows 上,RSA 身份验证密钥在某些情况下也可能存储在 <code>C:\Windows\System32\config\systemprofile\.android</code> 中。当 ADB 服务器需要密钥时,它会先搜索 ADB 服务器密钥存储库目录。如果找不到任何密钥,它会接着检查 <code>ANDROID_VENDOR_KEYS</code> 环境变量。如果还是找不到任何密钥,本地 ADB 服务器会生成一个新密钥对,并将其保存在 ADB 服务器密钥存储库目录中。</p>
+
+<p class="note"><strong>注意</strong>:您可以通过设置 <code>ANDROID_SDK_HOME</code> 环境变量来替换 ADB 服务器存储 RSA 密钥的默认目录。在设备上,密钥存储在 <code>/data/misc/adb/adb_keys/</code> 文件中,新的经过授权的密钥会在您接受它们后附加到同一个文件中。</p>
+
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/brands.html b/zh-cn/source/brands.html
index 0aed859e..8e5589b1 100644
--- a/zh-cn/source/brands.html
+++ b/zh-cn/source/brands.html
@@ -20,9 +20,9 @@
limitations under the License.
-->
-<p>“Android”名称、<img src="/source/assets/images/sac_logo.png" alt="Android" style="margin:0;padding:0 2px;vertical-align:baseline"/> 徽标、“Google Play”品牌以及其他商标均为 Google Inc. 的资产,不属于通过 Android 开放源代码项目提供的资源。</p>
+<p>“Android”名称、<img src="/source/assets/images/sac_logo.png" alt="Android" style="margin:0;padding:0 2px;vertical-align:baseline"/> 徽标、“Google Play”品牌以及其他商标均为 Google Inc. 的资产,不是通过 Android 开放源代码项目提供的资源的一部分。</p>
-<p>如果您有意使用这些品牌,以表明它们与您的设备之间有所关联,请遵循本文中的使用准则。这些使用准则与 <a href="https://developer.android.com/distribute/tools/promote/brand.html">Android 应用开发者品牌使用准则</a>和 <a href="https://www.google.com/permissions/">Google 品牌权限</a>是相辅相成的关系。</p>
+<p>如果您希望使用这些品牌,以表明它们与您的设备之间存在关联,请遵循本页中的准则。这些准则与 <a href="https://developer.android.com/distribute/tools/promote/brand.html">Android 应用开发者品牌指南</a>和 <a href="https://www.google.com/permissions/">Google 品牌权限</a>是相辅相成的关系。</p>
<h2 id="brand-android">Android</h2>
@@ -76,7 +76,7 @@
</p>
</div>
<div class="col-8">
-<p style="padding-top:20px">在注明适当归属信息的情况下,您可以在营销资料中自由使用、重制和修改 Android 机器人。如需了解详情,请参阅<a href="https://developer.android.com/distribute/tools/promote/brand.html">应用开发者品牌使用准则</a>和 <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons 许可</a>。</p>
+<p style="padding-top:20px">在注明适当归属信息的情况下,您可以在营销资料中自由使用、重制和修改 Android 机器人。如需了解详情,请参阅<a href="https://developer.android.com/distribute/tools/promote/brand.html">应用开发者品牌指南</a>和 <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons 许可</a>。</p>
</div>
</div>
@@ -95,7 +95,7 @@
<p>若要在硬件包装、硬件的营销材料或硬件本身上使用“Google Play”名称和 Google Play 商店图标,则只有<a href="/source/faqs.html#if-my-device-is-compatible-does-it-automatically-have-access-to-google-play-and-branding">获得使用 Google Play 的许可</a>的设备才能这样做。如需查看获得使用 Google Play 的许可的设备列表,请参阅<a href="https://support.google.com/googleplay/answer/1727131">支持的设备</a>。</p>
<h2>其他品牌</h2>
-<p><a href="https://www.android.com/auto/">Android Auto</a>、<a href="https://www.android.com/tv/">Android TV</a> 和 <a href="https://www.android.com/wear/">Android Wear</a> 是 Google 所拥有的品牌。这些品牌要求使用 Google 专有软件,此类软件在 Android 平台上运行且只能在获得 Google 授予的许可后使用。要了解如何申请许可,请参阅<a href="/compatibility/contact-us.html">与我们联系</a>。
+<p><a href="https://www.android.com/auto/">Android Auto</a>、<a href="https://www.android.com/tv/">Android TV</a> 和 <a href="https://www.android.com/wear/">Android Wear</a> 是归 Google 所有的品牌。这些品牌要求使用 Google 专有软件,此类软件在 Android 平台上运行且只能在获得 Google 授予的许可后使用。要了解如何申请许可,请参阅<a href="/compatibility/contact-us.html">与我们联系</a>。
</p><h2 id="Questions">问题</h2>
diff --git a/zh-cn/source/build-numbers.html b/zh-cn/source/build-numbers.html
index 883954b1..71455bb4 100644
--- a/zh-cn/source/build-numbers.html
+++ b/zh-cn/source/build-numbers.html
@@ -1,5 +1,5 @@
<html devsite><head>
- <title>代号、标记和细分版本 (Build) 号</title>
+ <title>代号、标记和细分版本号</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
@@ -34,6 +34,11 @@
</thead>
<tbody>
<tr>
+<td>Oreo</td>
+<td>8.0.0</td>
+<td>API 级别 26</td>
+</tr>
+<tr>
<td>Nougat</td>
<td>7.1</td>
<td>API 级别 25</td>
@@ -155,7 +160,13 @@
</tr>
</tbody>
</table>
-<p>从 Cupcake 开始,每个细分细分版本均有一个简短的细分版本代码,以作区分,例如 FRF85B。</p>
+<p>从 Oreo 开始,每个细分版本均采用新的细分版本号格式,即 PVBB.YYMMDD.bbb。</p>
+<p>P 部分表示平台版本代号的第一个字母,例如 O 表示 Oreo。</p>
+<p>V 部分表示支持的行业。按照惯例,P 表示主要平台分支。</p>
+<p>BB 部分表示由字母和数字组成的代码,Google 可通过该代码识别相应细分版本所属的确切代码分支。</p>
+<p>YYMMDD 部分表示相应版本从开发分支细分出来或与开发分支同步的日期。它并不一定是细分版本的确切构建日期,Google 常常会在现有细分版本中增加细微的更改,并在新细分版本中重复使用与现有细分版本相同的日期代码。</p>
+<p>bbb 部分表示具有相同日期代码的不同版本,从 001 开始。</p>
+<p>从 Cupcake 到 Nougat 的较早 Android 版本所用的细分版本号格式有所不同。这些 Android 细分版本均有一个简短的细分版本代码,以作区分,例如 FRF85B。</p>
<p>第一个字母代表相应版本系列的代号,例如 F 表示 Froyo。</p>
<p>第二个字母是分支代码,Google 用它来表示细分版本所属的确切代号分支。按照惯例,R 表示主要版本分支。</p>
<p>接下来的字母和两个数字是日期代码。字母表示季度,其中 A 表示 2009 年第 1 季度。因此,F 表示 2010 年第 2 季度。两个数字表示相应季度内的第某天,因此 F85 表示 2010 年 6 月 24 日。</p>
@@ -163,9 +174,10 @@
<p>日期代码并不一定是某个细分版本的确切构建日期,Google 常常会在现有细分版本中增加细微的更改,并在新细分版本中重复使用与现有细分版本相同的日期代码。</p>
<h2 id="source-code-tags-and-builds">源代码标记和细分版本</h2>
-<p>下表完整列出了从 Donut 开始的细分版本和标记。您可以从以下网址下载 Nexus 设备的出厂映像和二进制文件:</p>
-<p><a href="https://developers.google.com/android/nexus/images">https://developers.google.com/android/nexus/images</a></p>
-<p><a href="https://developers.google.com/android/nexus/drivers">https://developers.google.com/android/nexus/drivers</a></p>
+<p>下表完整列出了从 Donut 开始的细分版本和标记。您可以从 Android 开发者网站下载 Nexus 和 Pixel 设备的出厂映像、二进制文件以及完整的 OTA 映像:</p>
+<p><a href="https://developers.google.com/android/images">映像</a></p>
+<p><a href="https://developers.google.com/android/drivers">驱动程序</a></p>
+<p><a href="https://developers.google.com/android/ota">OTA</a></p>
<table>
<thead>
<tr>
@@ -177,6 +189,385 @@
</thead>
<tbody>
<tr>
+ <td>OPR5.170623.007</td>
+ <td>android-8.0.0_r17</td>
+ <td>Oreo</td>
+ <td>Nexus 6P</td>
+ </tr>
+ <tr>
+ <td>OPR4.170623.009</td>
+ <td>android-8.0.0_r16</td>
+ <td>Oreo</td>
+ <td>Nexus 5X</td>
+ </tr>
+ <tr>
+ <td>OPR3.170623.008</td>
+ <td>android-8.0.0_r15</td>
+ <td>Oreo</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>OPR1.170623.027</td>
+ <td>android-8.0.0_r13</td>
+ <td>Oreo</td>
+ <td>Pixel XL、Pixel、Pixel C</td>
+ </tr>
+ <tr>
+ <td>OPR6.170623.021</td>
+ <td>android-8.0.0_r12</td>
+ <td>Oreo</td>
+ <td>Nexus Player</td>
+ </tr>
+ <tr>
+ <td>OPR6.170623.019</td>
+ <td>android-8.0.0_r11</td>
+ <td>Oreo</td>
+ <td>Nexus 6P</td>
+ </tr>
+ <tr>
+ <td>OPR4.170623.006</td>
+ <td>android-8.0.0_r10</td>
+ <td>Oreo</td>
+ <td>Nexus 5X</td>
+ </tr>
+ <tr>
+ <td>OPR3.170623.007</td>
+ <td>android-8.0.0_r9</td>
+ <td>Oreo</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>OPR1.170623.026</td>
+ <td>android-8.0.0_r7</td>
+ <td>Oreo</td>
+ <td>Pixel XL、Pixel、Pixel C</td>
+ </tr>
+ <tr>
+ <td>OPR6.170623.013</td>
+ <td>android-8.0.0_r4</td>
+ <td>Oreo</td>
+ <td>Nexus 5X、Nexus 6P</td>
+ </tr>
+ <tr>
+ <td>OPR6.170623.012</td>
+ <td>android-8.0.0_r3</td>
+ <td>Oreo</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>OPR6.170623.011</td>
+ <td>android-8.0.0_r2</td>
+ <td>Oreo</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>OPR6.170623.010</td>
+ <td>android-8.0.0_r1</td>
+ <td>Oreo</td>
+ <td>Pixel C</td>
+ </tr>
+ <tr>
+ <td>NZH54D</td>
+ <td>android-7.1.2_r33</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NKG47S</td>
+ <td>android-7.1.2_r32</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NHG47Q</td>
+ <td>android-7.1.2_r30</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NJH47F</td>
+ <td>android-7.1.2_r29</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G48C</td>
+ <td>android-7.1.2_r28</td>
+ <td>Nougat</td>
+ <td>Nexus 5X、Nexus 6P、Nexus Player、Pixel C</td>
+ </tr>
+ <tr>
+ <td>NZH54B</td>
+ <td>android-7.1.2_r27</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ </tr><tr>
+ <td>NKG47M</td>
+ <td>android-7.1.2_r25</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NJH47D</td>
+ <td>android-7.1.2_r24</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NHG47O</td>
+ <td>android-7.1.2_r23</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G48B</td>
+ <td>android-7.1.2_r19</td>
+ <td>Nougat</td>
+ <td>Nexus 6P、Nexus Player、Pixel C</td>
+ </tr>
+ <tr>
+ <td>N2G47Z</td>
+ <td>android-7.1.2_r18</td>
+ <td>Nougat</td>
+ <td>Nexus 5X</td>
+ </tr>
+ <tr>
+ <td>NJH47B</td>
+ <td>android-7.1.2_r17</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NJH34C</td>
+ <td>android-7.1.2_r16</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NKG47L</td>
+ <td>android-7.1.2_r15</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>NHG47N</td>
+ <td>android-7.1.2_r14</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G47X</td>
+ <td>android-7.1.2_r13</td>
+ <td>Nougat</td>
+ <td>Nexus Player</td>
+ </tr>
+ <tr>
+ <td>N2G47W</td>
+ <td>android-7.1.2_r12</td>
+ <td>Nougat</td>
+ <td>Nexus 5X、Nexus 6P、Pixel C</td>
+ </tr>
+ <tr>
+ <td>NHG47L</td>
+ <td>android-7.1.2_r11</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G47T</td>
+ <td>android-7.1.2_r10</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G47R</td>
+ <td>android-7.1.2_r9</td>
+ <td>Nougat</td>
+ <td>Nexus Player</td>
+ </tr>
+ <tr>
+ <td>N2G47O</td>
+ <td>android-7.1.2_r8</td>
+ <td>Nougat</td>
+ <td>Nexus 5X、Nexus 6P、Pixel XL、Pixel、Pixel C</td>
+ </tr>
+ <tr>
+ <td>NHG47K</td>
+ <td>android-7.1.2_r6</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G47J</td>
+ <td>android-7.1.2_r5</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G47H</td>
+ <td>android-7.1.2_r4</td>
+ <td>Nougat</td>
+ <td>Nexus 6P、Nexus Player</td>
+ </tr>
+ <tr>
+ <td>N2G47F</td>
+ <td>android-7.1.2_r3</td>
+ <td>Nougat</td>
+ <td>Nexus 5X</td>
+ </tr>
+ <tr>
+ <td>N2G47E</td>
+ <td>android-7.1.2_r2</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N2G47D</td>
+ <td>android-7.1.2_r1</td>
+ <td>Nougat</td>
+ <td>Pixel C</td>
+ </tr>
+ <tr>
+ <td>N9F27M</td>
+ <td>android-7.1.1_r58</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantis)</td>
+ </tr>
+ <tr>
+ <td>NGI77B</td>
+ <td>android-7.1.1_r57</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N6F27M</td>
+ <td>android-7.1.1_r55</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N4F27P</td>
+ <td>android-7.1.1_r54</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantisg)</td>
+ </tr>
+ <tr>
+ <td>N9F27L</td>
+ <td>android-7.1.1_r53</td>
+ <td>Nougat</td>
+ <td>Nexus 9</td>
+ </tr>
+ <tr>
+ <td>NGI55D</td>
+ <td>android-7.1.1_r52</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N4F27O</td>
+ <td>android-7.1.1_r51</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantisg)</td>
+ </tr>
+ <tr>
+ <td>N8I11B</td>
+ <td>android-7.1.1_r50</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N9F27H</td>
+ <td>android-7.1.1_r49</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantis)</td>
+ </tr>
+ <tr>
+ <td>N6F27I</td>
+ <td>android-7.1.1_r48</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N4F27K</td>
+ <td>android-7.1.1_r47</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantisg)</td>
+ </tr>
+ <tr>
+ <td>N9F27F</td>
+ <td>android-7.1.1_r46</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantis)</td>
+ </tr>
+ <tr>
+ <td>N6F27H</td>
+ <td>android-7.1.1_r45</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N4F27I</td>
+ <td>android-7.1.1_r44</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantisg)</td>
+ </tr>
+ <tr>
+ <td>N9F27C</td>
+ <td>android-7.1.1_r43</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantis)</td>
+ </tr>
+ <tr>
+ <td>N6F27E</td>
+ <td>android-7.1.1_r42</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N4F27E</td>
+ <td>android-7.1.1_r41</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantisg)</td>
+ </tr>
+ <tr>
+ <td>N6F27C</td>
+ <td>android-7.1.1_r40</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>N4F27B</td>
+ <td>android-7.1.1_r39</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantis/volantisg)</td>
+ </tr>
+ <tr>
+ <td>N6F26Y</td>
+ <td>android-7.1.1_r38</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr>
+ <tr>
+ <td>NOF27D</td>
+ <td>android-7.1.1_r35</td>
+ <td>Nougat</td>
+ <td>Pixel XL、Pixel</td>
+ </tr>
+ <tr>
+ <td>N4F26X</td>
+ <td>android-7.1.1_r33</td>
+ <td>Nougat</td>
+ <td>Nexus 9 (volantis/volantisg)</td>
+ </tr>
+ <tr>
+ <td>N4F26U</td>
+ <td>android-7.1.1_r31</td>
+ <td>Nougat</td>
+ <td>Nexus 5X、Nexus 6P</td>
+ </tr>
+ <tr>
<td>N6F26U</td>
<td>android-7.1.1_r28</td>
<td>Nougat</td>
@@ -363,6 +754,18 @@
<td>Pixel XL、Pixel</td>
</tr>
<tr>
+ <td>NBD92G</td>
+ <td>android-7.0.0_r33</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr><tr>
+ </tr><tr>
+ <td>NBD92F</td>
+ <td>android-7.0.0_r32</td>
+ <td>Nougat</td>
+ <td>Nexus 6</td>
+ </tr><tr>
+ </tr><tr>
<td>NBD92E</td>
<td>android-7.0.0_r31</td>
<td>Nougat</td>
@@ -475,6 +878,12 @@
<td>Nexus 5X、Nexus 9 (volantis)、Nexus Player、Pixel C</td>
</tr>
<tr>
+ <td>MOB31Z</td>
+ <td>android-6.0.1_r80</td>
+ <td>Marshmallow</td>
+ <td></td>
+ </tr>
+ <tr>
<td>MOB31T</td>
<td>android-6.0.1_r79</td>
<td>Marshmallow</td>
@@ -1186,7 +1595,7 @@
<td>KTU84L</td>
<td>android-4.4.3_r1</td>
<td>KitKat</td>
- <td>Nexus 7 (flo/deb/grouper/tilapia)、Nexus 4、Nexus 1</td>
+ <td>Nexus 7 (flo/deb/grouper/tilapia)、Nexus 4、Nexus 10</td>
</tr>
<tr>
<td>KVT49L</td>
@@ -1210,7 +1619,7 @@
<td>KRT16S</td>
<td>android-4.4_r1.2</td>
<td>KitKat</td>
- <td>Nexus 7 (flo/deb/grouper/tilapia)、Nexus 4、Nexus 1</td>
+ <td>Nexus 7 (flo/deb/grouper/tilapia)、Nexus 4、Nexus 10</td>
</tr>
<tr>
<td>KRT16M</td>
@@ -1644,15 +2053,15 @@
<p>要区分各个版本,您可以发出以下命令并指定两个分支标记,以获取与每个项目相关联的更改列表:</p>
-<pre><code>$ repo forall -pc 'git log --no-merges --oneline branch-1..branch-2'</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">repo forall -pc 'git log --no-merges --oneline branch-1..branch-2'</pre>
<p>例如:</p>
-<pre><code>$ repo forall -pc 'git log --no-merges --oneline android-4.4.2_r2..android-4.4.2_r1'</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">repo forall -pc 'git log --no-merges --oneline android-4.4.2_r2..android-4.4.2_r1'</pre>
<p>要输出到文本文件,请运行以下命令:</p>
-<pre><code>repo forall -pc 'git log --no-merges --oneline android-4.4.2_r2..android-4.4.2_r1' &gt; /tmp/android-4.4.2_r2-android-4.4.2_r1-diff.txt</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">repo forall -pc 'git log --no-merges --oneline android-4.4.2_r2..android-4.4.2_r1' &gt; /tmp/android-4.4.2_r2-android-4.4.2_r1-diff.txt</pre>
<h2 id="honeycomb-gpl-modules">Honeycomb GPL 模块</h2>
<p>Honeycomb 的整个平台源代码未对外公开。不过,遵循 GPL 和 LGPL 许可的某些 Honeycomb 模块已对外公开,对应于如下的标记:</p>
@@ -1729,9 +2138,10 @@
</tbody>
</table>
<p>请注意,我们未提供刚好包含以上模块的清单。不过,我们提供的有些清单允许构建这些组件。以下命令适用于 3.0_r1.1,您可以通过切换 git checkout 参数来使用其他版本,还可以在必要时使用 repo init 中的 -m 参数。对于非 GPL 项目,git checkout 命令会返回错误,因为它找不到相应的标记。</p>
-<pre><code>$ repo init -b master -m base-for-3.0-gpl.xml
-$ repo sync
-$ repo forall -c git checkout android-3.0_r1.1
-</code></pre>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">repo init -b master -m base-for-3.0-gpl.xml</code>
+<code class="devsite-terminal">repo sync</code>
+<code class="devsite-terminal">repo forall -c git checkout android-3.0_r1.1</code>
+</pre>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/building-kernels.html b/zh-cn/source/building-kernels.html
index a9644ab9..1f627621 100644
--- a/zh-cn/source/building-kernels.html
+++ b/zh-cn/source/building-kernels.html
@@ -166,12 +166,13 @@
</tr>
</tbody></table>
-</p><p>确定要使用的设备项目之后,请查看内核二进制文件的 Git 日志。设备项目采用 <code>device/&lt;vendor&gt;/&lt;name&gt;</code> 形式。</p>
+</p><p>确定要使用的设备项目之后,请查看内核二进制文件的 Git 日志。设备项目采用 <code>device/<var>VENDOR</var>/<var>NAME</var></code> 形式。</p>
-<pre><code>$ git clone https://android.googlesource.com/kernel/hikey-linaro
-$ cd hikey-linaro
-$ git log --max-count=1 kernel
-</code></pre>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">git clone https://android.googlesource.com/kernel/hikey-linaro</code>
+<code class="devsite-terminal">cd hikey-linaro</code>
+<code class="devsite-terminal">git log --max-count=1 kernel</code>
+</pre>
<p>内核二进制文件的提交消息中包含用于编译二进制文件的内核源代码的部分 Git 日志。该日志中的第一个条目是最新内容(也即用于编译内核的条目)。请记下提交消息,因为您在后续步骤中会用得到该消息。</p>
@@ -179,55 +180,57 @@ $ git log --max-count=1 kernel
<p>要确定系统映像中使用的内核版本,请对内核文件运行以下命令:</p>
-<pre><code>$ dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version'
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version'
+</pre>
<p>对于 Nexus 5 (hammerhead),请运行以下命令:</p>
-<pre><code>$ dd if=zImage-dtb bs=1 skip=$(LC_ALL=C od -Ad -x -w2 zImage-dtb | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version'
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+dd if=zImage-dtb bs=1 skip=$(LC_ALL=C od -Ad -x -w2 zImage-dtb | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version'
+</pre>
<h2 id="downloading-sources">下载源代码</h2>
-<p>使用适当的 <code>git clone</code> 命令为您要编译的内核下载源代码:</p>
-
-<pre><code>$ git clone https://android.googlesource.com/kernel/common.git
-$ git clone https://android.googlesource.com/kernel/hikey-linaro
-$ git clone https://android.googlesource.com/kernel/x86_64.git
-$ git clone https://android.googlesource.com/kernel/exynos.git
-$ git clone https://android.googlesource.com/kernel/goldfish.git
-$ git clone https://android.googlesource.com/kernel/msm.git
-$ git clone https://android.googlesource.com/kernel/omap.git
-$ git clone https://android.googlesource.com/kernel/samsung.git
-$ git clone https://android.googlesource.com/kernel/tegra.git
-</code></pre>
-
-<ul>
-<li><code>goldfish</code> 项目包含适用于所模拟的平台的内核源代码。</li>
-<li><code>msm</code> 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作使用 Qualcomm MSM 芯片组的起点。</li>
-<li><code>omap</code> 项目用于 PandaBoard 和 Galaxy Nexus,可用作使用 TI OMAP 芯片组的起点。</li>
-<li><code>samsung</code> 项目用于 Nexus S,可用作使用 Samsung Hummingbird 芯片组的起点。</li>
-<li><code>tegra</code> 项目用于 Xoom、Nexus 7 (2012)、Nexus 9,可用作使用 NVIDIA Tegra 芯片组的起点。</li>
-<li><code>exynos</code> 项目包含适用于 Nexus 10 的内核源代码,可用作使用 Samsung Exynos 芯片组的起点。</li>
-<li><code>x86_64</code> 项目包含适用于 Nexus Player 的内核源代码,可用作使用 Intel x86_64 芯片组的起点。</li>
-<li><code>hikey-linaro</code> 项目用于 HiKey 参考板,可用作使用 HiSilicon 620 芯片组的起点。</li>
-</ul>
-
-<h2 id="downloading-a-prebuilt-gcc">下载预编译 gcc</h2>
-<p>确保预编译工具链位于您的以下路径中:</p>
-<pre>$ export PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH</pre>
-<p>或</p>
-<pre>$ export PATH=$(pwd)/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6/bin:$PATH</pre>
-
-<p>在 Linux 主机上,如果您没有 Android 源代码树,则可以从以下路径下载预编译工具链:</p><pre>$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6</pre>
+<p>使用适当的 <code>git clone</code> 命令为您要编译的内核下载源代码。例如,以下命令会克隆 <code>common</code> 内核(一种可自定义的通用内核):</p>
+<pre class="devsite-terminal devsite-click-to-copy">
+git clone https://android.googlesource.com/kernel/common
+</pre>
+
+<p>内核项目的完整列表在 <a href="https://android.googlesource.com/kernel">Kernel</a> 目录下。以下是一些常用内核及其各自的 <code>git clone</code> 命令。</p>
+
+<p><code>exynos</code> 项目包含适用于 Nexus 10 的内核源代码,可用作在 Samsung Exynos 芯片组上开展相关工作的着手点。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/exynos</pre>
+
+<p><code>goldfish</code> 项目包含适用于所模拟的平台的内核源代码。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/goldfish</pre>
+
+<p><code>hikey-linaro</code> 项目用于 HiKey 参考板,可用作在 HiSilicon 620 芯片组上开展相关工作的着手点。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/hikey-linaro</pre>
+
+<p><code>msm</code> 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作在 Qualcomm MSM 芯片组上开展相关工作的着手点。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/msm</pre>
+
+<p><code>omap</code> 项目用于 PandaBoard 和 Galaxy Nexus,可用作在 TI OMAP 芯片组上开展相关工作的着手点。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/omap</pre>
+
+<p><code>samsung</code> 项目用于 Nexus S,可用作在 Samsung Hummingbird 芯片组上开展相关工作的着手点。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/samsung</pre>
+
+<p><code>tegra</code> 项目用于 Xoom、Nexus 7 (2012)、Nexus 9,可用作在 NVIDIA Tegra 芯片组上开展相关工作的着手点。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/tegra</pre>
+
+<p><code>x86_64</code> 项目包含适用于 Nexus Player 的内核源代码,可用作在 Intel x86_64 芯片组上开展相关工作的着手点。</p>
+<pre class="devsite-terminal devsite-click-to-copy">git clone https://android.googlesource.com/kernel/x86_64</pre>
<h2 id="building">编译内核</h2>
<p>当您了解了内核的最后一条提交消息并已成功下载内核源代码和预编译的 gcc 后,就可以编译内核了。以下编译命令使用了 hikey 内核:</p>
-<pre><code>$ export ARCH=arm64
-$ export CROSS_COMPILE=aarch64-linux-android-
-$ cd hikey-linaro
-$ git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1
-$ make hikey_defconfig
-$ make
-</code></pre>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">export ARCH=arm64</code>
+<code class="devsite-terminal">export CROSS_COMPILE=aarch64-linux-android-</code>
+<code class="devsite-terminal">cd hikey-linaro</code>
+<code class="devsite-terminal">git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1</code>
+<code class="devsite-terminal">make hikey_defconfig</code>
+<code class="devsite-terminal">make</code>
+</pre>
<p>要编译不同的内核,只需将 <code>hikey-linaro</code> 替换为您要编译的内核的名称即可。</p>
@@ -235,9 +238,10 @@ $ make
<p>或者,您可以在使用 <code>make bootimage</code>(或编译启动映像的任何其他 <code>make</code> 命令行)时添加 <code>TARGET_PREBUILT_KERNEL</code> 变量。所有设备均支持该变量,因为它是通过 <code>device/common/populate-new-device.sh</code> 进行设置的。例如:</p>
-<pre><code>$ export TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+export TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb
+</pre>
-<p class="note"><strong>注意</strong>:内核名称因设备而异。要找到内核的正确文件名,请参阅内核源代码中的 <code>device/&lt;vendor&gt;/&lt;name&gt;</code>。</p>
+<p class="note"><strong>注意</strong>:内核名称因设备而异。要找到内核的正确文件名,请参阅内核源代码中的 <code>device/<var>VENDOR</var>/<var>NAME</var></code>。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/building.html b/zh-cn/source/building.html
index cbca024a..2fb5491c 100644
--- a/zh-cn/source/building.html
+++ b/zh-cn/source/building.html
@@ -22,15 +22,15 @@
<p>以下关于编译 Android 源代码树的说明适用于所有分支,包括 <code>master</code>。编译命令的基本顺序如下:</p>
-<p class="note"><strong>注意</strong>:如果您要编译 Android 6.0 或更高版本,请参阅<a href="jack.html">使用 Jack 编译</a>,了解这种新的默认工具链。</p>
-
<h2 id="obtaining-proprietary-binaries">下载专有二进制文件</h2>
-<p>您不能仅通过纯源代码来使用 AOSP,要运行 AOSP,还需要与硬件相关的其他专有库,例如用于硬件图形加速的专有库。如需其他资源的下载链接和<a href="requirements.html#binaries">设备二进制文件要求</a>,请参阅以下各部分。</p>
+<p>您不能仅通过纯源代码来使用 AOSP,要运行 AOSP,还需要与硬件相关的其他专有库,例如用于硬件图形加速的专有库。如需其他资源的下载链接和<a href="requirements.html#binaries">设备二进制文件</a>,请参阅以下各部分。</p>
+
+<p class="note">有些设备会将这些专有二进制文件打包到其 <code>/vendor</code> 分区。</p>
<h3 id="downloading-proprietary-binaries">下载专有二进制文件</h3>
-<p>对于运行带标记的 AOSP 版本分支的受支持设备,您可以从 <a href="https://developers.google.com/android/nexus/drivers">Google 的 Nexus 驱动程序页面</a>下载相关的官方二进制文件。有了这些二进制文件,您将有权使用采用非开放源代码的其他硬件功能。要编译 AOSP 的 master 分支,请使用 <a href="https://developers.google.com/android/nexus/blobs-preview">Nexus 设备的二进制文件预览</a>。在针对某种设备编译 master 分支时,请使用适用于<a href="/source/build-numbers.html">最新编号版本</a>的二进制文件或具有最新日期的二进制文件。</p>
+<p>对于运行带标记的 AOSP 版本分支的受支持设备,您可以从 <a href="https://developers.google.com/android/drivers">Google 的驱动程序</a>下载相关的官方二进制文件。有了这些二进制文件,您将有权使用采用非开放源代码的其他硬件功能。要编译 AOSP 的 master 分支,请使用<a href="https://developers.google.com/android/blobs-preview">二进制文件预览</a>。在针对某种设备编译 master 分支时,请使用适用于<a href="/source/build-numbers.html">最新编号版本</a>的二进制文件或具有最新日期的二进制文件。</p>
<h3 id="extracting-proprietary-binaries">解压专有二进制文件</h3>
@@ -39,21 +39,25 @@
<h3 id="cleaning-up">清理</h3>
<p>为了确保新安装的二进制文件在解压后会被适当考虑在内,请使用以下命令删除所有以前编译操作的已有输出:</p>
-<pre><code>$ make clobber
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+make clobber
+</pre>
<h2 id="initialize">设置环境</h2>
<p>使用 <code>envsetup.sh</code> 脚本初始化环境。请注意,将 <code>source</code> 替换成 <code>.</code>(一个点)可以省去一些字符,这种简写形式在文档中更为常用。</p>
-<pre><code>$ source build/envsetup.sh
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+source build/envsetup.sh
+</pre>
<p>或</p>
-<pre><code>$ . build/envsetup.sh
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+. build/envsetup.sh
+</pre>
<h2 id="choose-a-target">选择目标</h2>
<p>使用 <code>lunch</code> 选择要编译的目标。确切的配置可作为参数进行传递。例如以下命令:</p>
-<pre><code>$ lunch aosp_arm-eng
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+lunch aosp_arm-eng
+</pre>
<p>该命令表示针对模拟器进行完整编译,并且所有调试功能均处于启用状态。</p>
<p>如果您没有提供任何参数就运行命令,<code>lunch</code> 将提示您从菜单中选择一个目标。</p>
<p>所有编译目标都采用 <code>BUILD-BUILDTYPE</code> 形式,其中 <code>BUILD</code> 是表示特定功能组合的代号。</p>
@@ -89,15 +93,15 @@
<p>您可以使用 <code>make</code> 编译任何代码。GNU Make 可以借助 <code>-jN</code> 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间。例如,在一台双核 E5520 计算机(2 个 CPU,每个 CPU 4 个内核,每个内核 2 个线程)上,要实现最快的编译速度,可以使用介于 <code>make -j16</code> 到 <code>make -j32</code> 之间的命令。</p>
-<pre>
-$ make -j4
+<pre class="devsite-terminal devsite-click-to-copy">
+make -j4
</pre>
<h2 id="run-it">开始运行!</h2>
<p>您可以在模拟器上运行自己的版本,也可以将其刷到设备上。请注意,因为您之前已使用 <code>lunch</code> 选择编译目标,因此很可能无法在编译目标之外的目标上运行您的版本。</p>
-<p class="note"><strong>注意</strong>:请记得<a href="#obtaining-proprietary-binaries">下载专有二进制文件</a>,否则您的版本将无法在目标硬件上成功启动。如果您在此时下载二进制 Blob,则需要将其解压、<code>make clobber</code> 并重新编译。</p>
+<p class="note"><strong>注意</strong>:请记得<a href="#obtaining-proprietary-binaries">下载专有二进制文件</a>,否则您的细分版本将无法在目标硬件上成功启动。如果您在此时下载二进制 Blob,则需要将其解压、<code>make clobber</code> 并重新编译。</p>
<h3 id="flash-a-device">使用 fastboot 刷机</h3>
@@ -107,8 +111,8 @@ $ make -j4
<p>编译流程会自动将模拟器添加到您的路径中。要运行模拟器,请输入以下命令:</p>
-<pre>
-$ emulator
+<pre class="devsite-terminal devsite-click-to-copy">
+emulator
</pre>
<h2 id="troubleshooting-common-build-errors">排查常见编译错误</h2>
@@ -140,8 +144,8 @@ Please follow the machine setup instructions at
<p>Repo 是基于 Python 2.x 中的特定功能构建的,但遗憾的是与 Python 3 不兼容。要使用 Repo,请安装 Python 2.x:</p>
-<pre>
-$ apt-get install python
+<pre class="devsite-terminal devsite-click-to-copy">
+apt-get install python
</pre>
<h3 id="case-insensitive-filesystem">不区分大小写的文件系统</h3>
diff --git a/zh-cn/source/code-style.html b/zh-cn/source/code-style.html
index 1460d3f4..c5b6115e 100644
--- a/zh-cn/source/code-style.html
+++ b/zh-cn/source/code-style.html
@@ -1,5 +1,5 @@
<html devsite><head>
- <title>面向贡献者的代码样式指南</title>
+ <title>面向贡献者的 AOSP 代码样式指南</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
@@ -20,7 +20,9 @@
limitations under the License.
-->
-<p>以下代码样式都是应严格遵守的规则(而非指南或建议)。如果所贡献的 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>
<h2 id="java-language-rules">Java 语言规则</h2>
<p>Android 遵循标准 Java 编码规范以及下文所述的其他规则。</p>
@@ -34,7 +36,7 @@
}
</code></pre>
<p>千万不要这样做。虽然您可能认为自己的代码永远不会遇到这种错误,或者无需费心处理这种错误,但像上例那样忽略异常会在您的代码中埋下隐患,这种错误总有一天会被他人触发。您必须有原则地处理代码中的每个异常;具体处理方式因情况而异。</p>
-<p><em>无论何时,只要遇到空的 catch 子句,就应该保持警惕。当然,在某些时候,空的 catch 语句确实没什么问题,但至少你得想一想。在 Java 中,你怎么小心都不为过。</em>-<a href="http://www.artima.com/intv/solid4.html">James Gosling</a></p>
+<p><em>无论何时,只要遇到空的 catch 子句,就应该保持警惕。当然,在某些时候,空的 catch 语句确实没什么问题,但至少你得想一想。</em>在 Java 中,无论怎么小心都不为过。-<a href="http://www.artima.com/intv/solid4.html">James Gosling</a></p>
<p>可接受的替代方案(按优先顺序排列)包括:</p>
<ul>
<li>将异常抛给方法调用者。
@@ -128,7 +130,7 @@ void setServerPort(String value) {
<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>
+<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>
diff --git a/zh-cn/source/community.html b/zh-cn/source/community.html
index deb48422..12336347 100644
--- a/zh-cn/source/community.html
+++ b/zh-cn/source/community.html
@@ -53,7 +53,6 @@
<h5>发送反馈</h5>
<a href="/source/report-bugs.html">报告 AOSP 错误</a><br />
-<a href="https://code.google.com/p/android/issues/entry?template=Feature%20request">提出功能建议</a>
<p></p>
</td>
@@ -206,7 +205,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>
diff --git a/zh-cn/source/developing.html b/zh-cn/source/developing.html
index cf146cc0..454d0d77 100644
--- a/zh-cn/source/developing.html
+++ b/zh-cn/source/developing.html
@@ -55,95 +55,113 @@
<p>以下任务列表简要总结了如何执行常见的 Repo 和 Git 任务。要了解如何使用 Repo 下载源代码,请参阅<a href="/source/downloading.html">下载源代码</a>和<a href="/source/using-repo.html">使用 Repo</a>。</p>
<h2 id="synchronizing-your-client">同步客户端</h2>
<p>要同步所有可用项目的文件,请运行以下命令:</p>
-<pre><code>$ repo sync
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo sync
+</pre>
<p>要同步所选项目的文件,请运行以下命令:</p>
-<pre><code>$ repo sync PROJECT0 PROJECT1 PROJECT2 ...
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo sync <var>PROJECT0 PROJECT1 ... PROJECTN</var>
+</pre>
<h2 id="creating-topic-branches">创建主题分支</h2>
<p>当您开始进行更改(例如当您开始处理错误或使用新功能)时,请在本地工作环境中新建一个主题分支。主题分支不是原始文件的副本;它代表着特定提交。这样一来,您可以轻松创建本地分支并在这些分支之间切换。通过使用分支,您可以将工作的某个方面与其他方面分隔开来。请参阅<a href="http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt">分隔主题分支</a>(一篇有关使用主题分支的趣味文章)。</p>
<p>要使用 Repo 新建一个主题分支,请转到要修改的项目并运行以下命令:</p>
-<pre><code>$ repo start BRANCH_NAME .
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo start <var>BRANCH_NAME</var> .
+</pre>
<p>请注意,句点代表当前工作目录中的项目。要验证您的新分支是否已创建,请运行以下命令:</p>
-<pre><code>$ repo status .
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo status .
+</pre>
<h2 id="using-topic-branches">使用主题分支</h2>
<p>要将分支分配给特定项目,请运行以下命令:</p>
-<pre><code>$ repo start BRANCH_NAME PROJECT_NAME
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo start <var>BRANCH_NAME PROJECT_NAME</var>
+</pre>
<p>要查看所有项目的列表,请访问 <a href="https://android.googlesource.com/">android.googlesource.com</a>。再次提醒,如果您已转到特定的项目目录,可以简单地使用一个句点来表示当前项目。</p>
<p>要切换到您已在本地工作环境中创建的另一个分支,请运行以下命令:</p>
-<pre><code>$ git checkout BRANCH_NAME
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+git checkout <var>BRANCH_NAME</var>
+</pre>
<p>要查看现有分支的列表,请运行以下命令:</p>
-<pre><code>$ git branch
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+git branch
+</pre>
<p>或</p>
-<pre><code>$ repo branches
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo branches
+</pre>
<p>当前分支的名称前面将标注星号。</p>
-<p class="note"><strong>注意</strong>:错误可能会导致 <code>repo sync</code> 重置本地主题分支。如果在您运行 <code>repo sync</code> 之后,<code>git branch</code> 显示 *(无分支),请再次运行 <code>git checkout</code>。</p>
+<p class="note"><strong>注意</strong>:如果存在错误,可能会导致 <code>repo sync</code> 重置本地主题分支。如果在您运行 <code>repo sync</code> 之后,<code>git branch</code> 显示 *(无分支),请再次运行 <code>git checkout</code>。</p>
<h2 id="staging-files">暂存文件</h2>
<p>默认情况下,Git 会检测到您在项目中所做的更改,但不会跟踪这些更改。要让 Git 保存您的更改,您必须将更改标记为包含在提交中。这也称为“暂存”。</p>
<p>您可以通过运行以下命令来暂存更改:</p>
-<pre><code>git add
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+git add
+</pre>
<p>对于此命令,项目目录中的任何文件或目录都可作为参数。<code>git add</code> 并不像其名称表示的这样只是简单地将文件添加到 Git 代码库,它还可以用于暂存文件的修改和删除的内容。</p>
<h2 id="viewing-client-status">查看客户端状态</h2>
<p>要列出文件的状态,请运行以下命令:</p>
-<pre><code>$ repo status
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo status
+</pre>
<p>要查看未提交的修改,请运行以下命令:</p>
-<pre><code>$ repo diff
-</code></pre>
-<p>如果您准备立即提交,运行 <code>repo diff</code> 命令可让系统显示您所做的不会包含在提交中的每一项本地更改。<em></em>如果您准备立即提交,要查看将包含在提交中的每一项更改,您需要运行 Git 命令 <code>git diff</code>。在运行该命令之前,请确保您已转到项目目录下:</p>
-<pre><code>$ cd ~/WORKING_DIRECTORY/PROJECT
-$ git diff --cached
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo diff
+</pre>
+<p>如果您准备立即提交,运行 <code>repo diff</code> 命令可让系统显示您所做的不会被提交的每一项本地修改。<em></em>如果您准备立即提交,要查看将被提交的每一项修改,则需要运行 Git 命令 <code>git diff</code>。在运行该命令之前,请确保您已转到项目目录下:</p>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd <var>~/WORKING_DIRECTORY/PROJECT</var></code>
+<code class="devsite-terminal">git diff --cached</code>
+</pre>
<h2 id="committing-changes">提交更改</h2>
<p>在 Git 中,提交是修订版本控制的基本单位,包含目录结构的快照以及整个项目的文件内容。在 Git 中创建提交很简单,只需输入以下命令即可:</p>
-<pre><code>git commit
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+git commit
+</pre>
<p>系统会提示您使用惯用的编辑器提供一条提交消息;请为您提交到 AOSP 的所有更改都提供一条会有帮助作用的消息。如果您没有添加日志消息,提交将会终止。</p>
<h2 id="uploading-changes-to-gerrit">将更改上传到 Gerrit</h2>
<p>上传之前,请先更新为最新修订版本:</p>
-<pre><code>repo sync
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo sync
+</pre>
<p>然后运行以下命令:</p>
-<pre><code>repo upload
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo upload
+</pre>
<p>运行此命令后,系统会随即列出您已提交的更改,并提示您选择要上传到审核服务器的分支。如果只有一个分支,您会看到一个简单的 <code>y/n</code> 提示符。</p>
<h2 id="recovering-sync-conflicts">恢复同步冲突</h2>
<p>如果 <code>repo sync</code> 显示同步冲突,请执行以下操作:</p>
<ul>
-<li>查看未合并的文件(状态代码 = U)。</li>
-<li>根据需要修改存在冲突的地方。</li>
-<li>
-<p>在相关项目目录中进行更改,为相关文件运行 <code>git add</code> 和 <code>git commit</code>,然后对这些更改执行“衍合”(rebase) 命令。例如:</p>
-<pre><code>$ git add .
-$ git commit
-$ git rebase --continue
-</code></pre>
-</li>
-<li>
-<p>当衍合完成后,再一次开始整个同步过程:</p>
-<pre><code>$ repo sync PROJECT0 PROJECT1 ... PROJECTN
-</code></pre>
-</li>
+ <li>查看未合并的文件(状态代码 = U)。</li>
+ <li>根据需要修改存在冲突的地方。</li>
+ <li><p>在相关项目目录中进行更改,为相关文件运行 <code>git add</code> 和 <code>git commit</code>,然后对这些更改执行“衍合”(rebase) 命令。例如:</p>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">git add .</code>
+<code class="devsite-terminal">git commit</code>
+<code class="devsite-terminal">git rebase --continue</code>
+</pre>
+ </li>
+ <li><p>当衍合完成后,再一次开始整个同步过程:</p>
+<pre class="devsite-terminal devsite-click-to-copy">repo sync <var>PROJECT0 PROJECT1 ... PROJECTN</var></pre>
+ </li>
</ul>
+
<h2 id="cleaning-up-your-client-files">清理您的客户端文件</h2>
<p>要在更改合并到 Gerrit 中后更新您的本地工作目录,请运行以下命令:</p>
-<pre><code>$ repo sync
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo sync
+</pre>
<p>要安全移除已过时的主题分支,请运行以下命令:</p>
-<pre><code>$ repo prune
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo prune
+</pre>
+
<h2 id="deleting-a-client">删除客户端</h2>
<p>由于所有状态信息都会存储在客户端中,您只需从文件系统中删除相应目录即可:</p>
-<pre><code>$ rm -rf WORKING_DIRECTORY
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+rm -rf <var>WORKING_DIRECTORY</var>
+</pre>
<p><em></em>删除客户端将永久删除您尚未上传以供审核的任何更改。</p>
<h2 id="git-and-repo-cheatsheet">Git 和 Repo 快速参考表</h2>
<img src="/images/git-repo-1.png" alt="基本 Git 和 Repo 命令列表" id="figure2"/>
diff --git a/zh-cn/source/devices.html b/zh-cn/source/devices.html
index d796fa3e..549cb0cb 100644
--- a/zh-cn/source/devices.html
+++ b/zh-cn/source/devices.html
@@ -1,5 +1,5 @@
<html devsite><head>
- <title>选择设备</title>
+ <title>使用参考开发板</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
@@ -20,94 +20,273 @@
limitations under the License.
-->
-<p>您可以使用 Android 开放源代码项目 (AOSP) 版本和针对特定硬件的相关二进制文件来开发适用于 Nexus 设备的版本。要查看可用的 Android 版本和针对的 Nexus 设备,请参阅<a href="/source/build-numbers.html#source-code-tags-and-builds">源代码、标记和版本</a>。</p>
+<p>您可以使用 Android 开放源代码项目 (AOSP) 细分版本和针对特定硬件的相关二进制文件来开发适用于 Nexus 设备的细分版本。要查看可用的 Android 细分版本和针对的设备,请参阅<a href="/source/build-numbers.html#source-code-tags-and-builds">源代码、标记和细分版本</a>。</p>
-<p class="note"><b>注意</b>:由于硬件差异,切勿在原本搭载 Android 4.1.2 或更高版本销售的 Nexus 7 上使用 Android 4.1.1。</p>
+<p>您也可以开发适用于 <a href="https://android.googlesource.com/device/linaro/hikey/" class="external">HiKey</a> Android 参考开发板的细分版本,此类参考开发板旨在协助非 Nexus 组件供应商开发驱动程序并将其移植到各 Android 版本。使用参考开发板可以简化升级工作,缩短将新 Android 设备推向市场所需的时间,降低设备成本(因为使用参考开发板时,原始设计制造商 (ODM)/原始设备制造商 (OEM) 可以从更多兼容组件中进行选择),并加快组件供应商的创新速度。</p>
-<p>您也可以开发适用于 <a href="https://android.googlesource.com/device/linaro/hikey/">HiKey</a> Android 参考开发板(如下所述)的版本。参考开发板旨在协助非 Nexus 组件供应商开发驱动程序并将其移植到各 Android 版本。使用参考开发板可以简化升级工作,缩短将新 Android 设备推向市场所需的时间,降低设备成本(因为使用参考开发板时,原始设计制造商 (ODM)/原始设备制造商 (OEM) 可以从更多兼容组件中进行选择),并加快组件供应商的创新速度。</p>
+<p>Google 支持使用经 <a href="#960hikey">HiKey960</a> 和 <a href="#620hikey">HiKey</a> 认证的 <a href="https://www.96boards.org/products/ce/" class="external">96Boards</a> 作为 Android 参考开发板。AOSP 可为 HiKey 提供内核源代码和开发板支持,这样开发者就能够以更低的原始设备制造商 (OEM) 费用轻松开发和调试新的及现有的外围设备驱动程序、进行内核开发,以及执行其他任务。要开发采用新传感器或 LED 的新 ContextHub 功能,您还可以使用连接到 HiKey 或 HiKey960 开发板的 <a href="#neonkey">Neonkey SensorHub</a>。</p>
-<h2 id="hikey-boards">HiKey 开发板</h2>
+<h2 id="960hikey">HiKey960 开发板</h2>
-<p>Google 支持使用 <a href="https://www.96boards.org/products/ce/hikey/">HiKey</a>(经认证的 <a href="http://www.96boards.org/">96Board</a>)作为 Android 参考开发板。AOSP 可为 HiKey 提供内核源代码和开发板支持,让开发者能够轻松开发和调试新的及现有的外围设备驱动程序,进行内核开发,并以更少的原始设备制造商 (OEM) 费用执行其他任务。</p>
+<p>HiKey960 开发板由 LeMaker(通过 <a href="https://www.amazon.com/dp/B071RD3V34" class="external">Amazon.com</a>)和 <a href="http://www.lenovator.com/product/80.html" class="external">Lenovator</a><a> 提供,采用 3GB RAM 配置。
+</a></p><a>
-<p>HiKey 开发板由 <a href="http://www.lenovator.com">Lenovator</a> 提供,有 <a href="http://www.lenovator.com/product/86.html">1GB RAM</a> 和 <a href="http://www.lenovator.com/product/90.html">2GB RAM</a> 配置可供选择:</p>
+<img src="images/hikey960.png" alt="HiKey960 开发板图片"/>
+<figcaption><strong>图 1.</strong> Lenovator 提供的 HiKey960 开发板</figcaption>
-<img src="images/hikey-board.png" alt="HiKey 开发板图片"/>
-<p class="img-caption"><strong>图 1.</strong> Lenovator 提供的 HiKey 开发板</p>
+<p>其他资源:</p>
+</a><ul><a>
+</a><li><a></a><a href="https://github.com/96boards/documentation/blob/master/ConsumerEdition/HiKey960/HardwareDocs/HiKey960_Schematics.pdf" class="external">HiKey960 示意图</a></li>
+<li>
+<a href="http://www.96boards.org/documentation/ConsumerEdition/HiKey960/HardwareDocs/HardwareUserManual.md/" class="external">HiKey960 用户指南</a></li>
+<li>
+<a href="https://github.com/96boards/documentation/wiki/" class="external">96boards Wiki</a></li>
+</ul>
+
+<p>您可以使用以下命令下载、编译 Android 并在 HiKey960 开发板上运行 Android。</p>
+
+<h3 id="960userspace">编译用户空间</h3>
+<ol>
+ <li>下载 Android 源代码树:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">repo init -u <a href="https://android.googlesource.com/platform/manifest">https://android.googlesource.com/platform/manifest</a> -b master</code>
+<code class="devsite-terminal">repo sync -j24</code>
+</pre>
+ </li>
+ <li>下载二进制文件,并将其解压到 Android 源代码树中:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">wget https://dl.google.com/dl/android/aosp/arm-hikey960-NOU-7ad3cccc.tgz</code>
+<code class="devsite-terminal">tar xzf arm-hikey960-NOU-7ad3cccc.tgz</code>
+<code class="devsite-terimnal">./extract-arm-hikey960.sh</code>
+</pre>
+ </li>
+ <li>编译:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">. ./build/envsetup.sh</code>
+<code class="devsite-terminal">lunch hikey960-userdebug</code>
+<code class="devsite-terminal">make -j32</code>
+</pre>
+ </li>
+</ol>
+
+<h3 id="960fastboot">安装初始映像</h3>
+<ol>
+ <li>打开开关 1 和 3,从而选择 fastboot 模式(有关详情,请参阅 HiKey960 用户指南)。</li>
+ <li>为开发板接通电源。</li>
+ <li>将初始映像刷到设备上:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd device/linaro/hikey/installer/hikey960</code>
+<code class="devsite-terminal">./flash-all.sh</code>
+</pre>
+ </li>
+ <li>关闭开关 3,然后重启开发板。</li>
+</ol>
+
+<h3 id="960images">将映像刷到设备上</h3>
+<ol>
+ <li>打开开关 1 和 3,从而进入 fastboot 模式。</li>
+ <li>通过运行以下命令将映像刷到设备上:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">fastboot flash boot out/target/product/hikey960/boot.img</code>
+<code class="devsite-terminal">fastboot flash dts out/target/product/hikey960/dt.img</code>
+<code class="devsite-terminal">fastboot flash system out/target/product/hikey960/system.img</code>
+<code class="devsite-terminal">fastboot flash cache out/target/product/hikey960/cache.img</code>
+<code class="devsite-terminal">fastboot flash userdata out/target/product/hikey960/userdata.img</code>
+</pre>
+ </li>
+ <li>关闭开关 3,然后重启开发板。</li>
+</ol>
+
+<h3 id="960kernel">编译内核</h3>
+<ol>
+ <li>运行以下命令:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">git clone <a href="https://android.googlesource.com/kernel/hikey-linaro">https://android.googlesource.com/kernel/hikey-linaro</a></code>
+<code class="devsite-terminal">cd hikey-linaro</code>
+<code class="devsite-terminal">git checkout -b android-hikey-linaro-4.9 origin/android-hikey-linaro-4.9</code>
+<code class="devsite-terminal">make ARCH=arm64 hikey960_defconfig</code>
+<code class="devsite-terminal">make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- -j24</code>
+</pre>
+ </li>
+ <li>更新启动映像中的内核。
+ <ul>
+ <li>将 <code>hi3660-hikey960.dtb</code> (<code>arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb</code>) 复制到 <code>hikey-kernel</code> 目录,并将其重命名为 <code>hi3660-hikey960.dtb-4.9</code></li>
+ <li>将映像文件 <code>(arch/arm64/boot/Image.gz</code>) 复制到 <code>hikey-kernel</code> 目录,并将其重命名为 <code>Image.gz-hikey960-4.9</code></li>
+ </ul>
+ </li><li>制作启动映像:
+<pre class="devsite-terminal devsite-click-to-copy">
+make bootimage -j24
+</pre>
+ </li>
+</ol>
+
+<h3 id="960serial">设置序列号</h3>
+<p>要设置随机序列号,请运行以下命令:
+</p><pre class="devsite-terminal devsite-click-to-copy">
+fastboot getvar nve:SN@<var>16_DIGIT_NUMBER</var>
+</pre>
+<p>引导加载程序通过 <code>androidboot.serialno=</code> 将生成的序列号导出到内核。
+
+</p><h3 id="960resolution">设置显示器分辨率</h3>
+<p>修改 <code>device/linaro/hikey/hikey960/BoardConfig.mk</code> 参数 <code>BOARD_KERNEL_CMDLINE</code>,并配置 <code>video</code> 设置。以下是针对 24 英寸显示器的示例设置:<code>video=HDMI-A-1:1280x800@60</code>。
+</p>
+
+<h2 id="620hikey">HiKey 开发板</h2>
+
+<p>HiKey 开发板(也称为 HiKey620)由 <a href="http://www.lenovator.com" class="external">Lenovator</a> 提供,有 <a href="http://www.lenovator.com/product/86.html" class="external">1GB RAM</a> 和 <a href="http://www.lenovator.com/product/90.html" class="external">2GB RAM</a> 配置可供选择:
+</p>
+
+<img src="images/hikey620.png" alt="HiKey620 开发板图片"/>
+<figcaption><strong>图 2.</strong> Lenovator 提供的 HiKey 开发板</figcaption>
<p>其他资源:</p>
<ul>
<li>
-<a href="https://www.96boards.org/wp-content/uploads/2015/02/96Boards-Hikey-Rev-A1.pdf">HiKey 示意图</a></li>
+<a href="https://github.com/96boards/documentation/blob/master/ConsumerEdition/HiKey/HardwareDocs/HiKey_schematics_LeMaker_version_Rev_A1.pdf" class="external">HiKey 示意图</a></li>
<li>
-<a href="https://www.96boards.org/wp-content/uploads/2015/02/HiKey_User_Guide_Rev0.2.pdf">HiKey 用户指南</a></li>
-<li>
-<a href="https://github.com/96boards/documentation/wiki/HiKey-Home">HiKey Wiki</a></li>
+<a href="https://www.96boards.org/wp-content/uploads/2015/02/HiKey_User_Guide_Rev0.2.pdf" class="external">HiKey 用户指南</a></li>
+<li><a href="https://github.com/96boards/documentation/wiki/" class="external">96boards Wiki</a></li>
</ul>
-<h2 id="running-android-hikey">在 HiKey 上运行 Android</h2>
-
<p>您可以使用以下命令下载、编译 Android 并在 HiKey 开发板上运行 Android。</p>
-<h3 id="compiling-userspace">编译用户空间</h3>
+<h3 id="620userspace">编译用户空间</h3>
<ol>
-<li>下载 Android 源代码树:<br />
-<pre><code>$ repo init -u <a href="https://android.googlesource.com/platform/manifest">https://android.googlesource.com/platform/manifest</a> -b master<br />
-$ repo sync -j24</code></pre></li>
-<li>下载 HDMI 二进制文件,并将其解压到 Android 源代码树中:<br />
-<pre><code>$ wget <a href="https://dl.google.com/dl/android/aosp/linaro-hikey-20160226-67c37b1a.tgz">https://dl.google.com/dl/android/aosp/linaro-hikey-20160226-67c37b1a.tgz</a><br />
-$ tar xzf linaro-hikey-20160226-67c37b1a.tgz<br />
-$ ./extract-linaro-hikey.sh</code></pre></li>
-<li>安装 mcopy 实用工具:<br />
-<pre><code>$ apt-get install mtools</code></pre></li>
-<li>编译:<br />
-<pre><code>$ . ./build/envsetup.sh<br />
-$ lunch hikey-userdebug<br />
-$ make -j32</code></pre></li>
+ <li>下载 Android 源代码树:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">repo init -u <a href="https://android.googlesource.com/platform/manifest">https://android.googlesource.com/platform/manifest</a> -b master</code>
+<code class="devsite-terminal">repo sync -j24</code>
+</pre>
+ </li>
+ <li>下载 HDMI 二进制文件,并将其解压到 Android 源代码树中:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">wget <a href="https://dl.google.com/dl/android/aosp/linaro-hikey-20170523-4b9ebaff.tgz">https://dl.google.com/dl/android/aosp/linaro-hikey-20170523-4b9ebaff.tgz</a></code>
+<code class="devsite-terminal">tar xzf linaro-hikey-20170523-4b9ebaff.tgz</code>
+<code class="devsite-terminal">./extract-linaro-hikey.sh</code>
+</pre>
+ </li>
+ <li>安装 mcopy 实用工具:
+<pre class="devsite-terminal devsite-click-to-copy">
+apt-get install mtools
+</pre>
+ </li>
+ <li>编译:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">. ./build/envsetup.sh</code>
+<code class="devsite-terminal">lunch hikey-userdebug</code>
+<code class="devsite-terminal">make -j32</code>
+</pre>
+ </li>
</ol>
-<p class="note"><b>注意</b>:如果是 4GB eMMC,请不要使用 <code>$ make -j32</code>,而是要使用 <code>$ make -j32 TARGET_USERDATAIMAGE_4GB=true</code>。</p>
+<p class="note"><strong>注意</strong>:如果是 4GB eMMC,请不要使用 <code>$ make -j32</code>,而是要使用 <code>$ make -j32 TARGET_USERDATAIMAGE_4GB=true</code>。</p>
-<h3 id="installing-fastboot-ptable">安装初始 fastboot 和 ptable</h3>
+<h3 id="620fastboot">安装初始 fastboot 和 ptable</h3>
<ol>
-<li>连接 J15 1-2 和 3-4 引脚,从而选择特殊的引导加载程序模式(有关详情,请参阅 <a href="https://www.96boards.org/wp-content/uploads/2015/02/HiKey_User_Guide_Rev0.2.pdf">HiKey 用户指南</a>)。</li>
-<li>将 USB 连接到 PC,以获取 ttyUSB 设备(例如:<code>/dev/ttyUSB1</code>)。</li>
-<li>为开发板接通电源:<br />
-<pre><code>$ cd device/linaro/hikey/installer/hikey<br />
-$ ./flash-all.sh /dev/ttyUSB1 [4g]</code></pre></li>
-<li>取下跳线 3-4,并为开发板接通电源。</li>
+ <li>连接 J15 1-2 和 3-4 引脚,从而选择特殊的引导加载程序模式(有关详情,请参阅 <a href="https://www.96boards.org/wp-content/uploads/2015/02/HiKey_User_Guide_Rev0.2.pdf" class="external">HiKey 用户指南</a>)。</li>
+ <li>将 USB 连接到 PC,以获取 ttyUSB 设备(例如:<code>/dev/ttyUSB1</code>)。</li>
+ <li>为开发板接通电源:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd device/linaro/hikey/installer/hikey</code>
+<code class="devsite-terminal">./flash-all.sh /dev/ttyUSB1 [4g]</code>
+</pre>
+ </li>
+ <li>取下跳线 3-4,并为开发板接通电源。</li>
</ol>
-<h3 id="flashing-images">将映像刷到设备上</h3>
+<h3 id="620images">将映像刷到设备上</h3>
<ol>
-<li>连接 J15 1-2 和 5-6 引脚,从而进入 fastboot 模式。</li>
-<li>运行以下命令:<br />
-<pre><code>$ fastboot flash boot out/target/product/hikey/boot.img<br />
-$ fastboot flash -w system out/target/product/hikey/system.img</code></pre></li>
-<li>取下跳线 5-6,并为开发板接通电源。</li>
+ <li>连接 J15 1-2 和 5-6 引脚,从而进入 fastboot 模式。</li>
+ <li>运行以下命令:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">fastboot flash boot out/target/product/hikey/boot.img</code>
+<code class="devsite-terminal">fastboot flash -w system out/target/product/hikey/system.img</code>
+</pre>
+ </li>
+ <li>取下跳线 5-6,并为开发板接通电源。</li>
</ol>
-<h3 id="building-kernel">编译内核</h3>
+<h3 id="620kernel">编译内核</h3>
<ol>
-<li>运行以下命令:<br />
-<pre><code>$ git clone <a href="https://android.googlesource.com/kernel/hikey-linaro">https://android.googlesource.com/kernel/hikey-linaro</a><br />
-$ cd hikey-linaro<br />
-$ git checkout -b android-hikey-linaro-4.9 origin/android-hikey-linaro-4.9<br />
-$ make ARCH=arm64 hikey_defconfig<br />
-$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- -j24</code></pre></li>
-<li>将输出复制到 HiKey 内核目录 (<code>/kernel/hikey-linaro</code>):<ol style="list-style-type:lower-alpha">
-<li>将 hi6220-hikey.dtb (<code>arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb</code>) 复制到 HiKey 内核目录,并将其重命名为 hi6220-hikey.dtb-4.9。</li>
-<li>将映像文件 <code>(arch/arm64/boot/Image-dtb</code>) 复制到 HiKey 内核目录,并将其重命名为 Image-dtb-4.9。</li></ol>
-</li><li>制作启动映像:<pre>
-$ make bootimage -j24
+ <li>运行以下命令:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">git clone <a href="https://android.googlesource.com/kernel/hikey-linaro">https://android.googlesource.com/kernel/hikey-linaro</a></code>
+<code class="devsite-terminal">cd hikey-linaro</code>
+<code class="devsite-terminal">git checkout -b android-hikey-linaro-4.9 origin/android-hikey-linaro-4.9</code>
+<code class="devsite-terminal">make ARCH=arm64 hikey_defconfig</code>
+<code class="devsite-terminal">make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- -j24</code>
</pre>
-</li>
+ </li>
+ <li>将输出复制到 HiKey 内核目录 (<code>/kernel/hikey-linaro</code>):
+ <ul>
+ <li>将 hi6220-hikey.dtb (<code>arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb</code>) 复制到 HiKey 内核目录,并将其重命名为 hi6220-hikey.dtb-4.9。</li>
+ <li>将映像文件 <code>(arch/arm64/boot/Image-dtb</code>) 复制到 HiKey 内核目录,并将其重命名为 Image-dtb-4.9。</li>
+ </ul>
+ </li><li>制作启动映像:
+<pre class="devsite-terminal devsite-click-to-copy">
+make bootimage -j24
+</pre>
+ </li>
</ol>
-<h3 id="setting-resolution">设置显示器分辨率</h3>
+<h3 id="620resolution">设置显示器分辨率</h3>
<p>修改 <code>device/linaro/hikey/hikey/BoardConfig.mk</code> 参数 <code>BOARD_KERNEL_CMDLINE</code>,并配置 <code>video</code> 设置。以下是 24 英寸显示器的示例设置:<code>video=HDMI-A-1:1280x800@60</code>。</p>
-<h3 id="configuring-output">配置内核串行输出 (uart3)</h3>
-<p>将 J2 低速扩展连接器设为 1 - Gnd、11 - Rx、13 - Tx。有关详情,请参阅 <a href="https://www.96boards.org/wp-content/uploads/2015/02/HiKey_User_Guide_Rev0.2.pdf">HiKey 用户指南</a>。</p>
+<h3 id="620serial">配置内核串行输出 (uart3)</h3>
+<p>将 J2 低速扩展连接器设为 1 - Gnd、11 - Rx、13 - Tx。有关详情,请参阅 <a href="https://www.96boards.org/wp-content/uploads/2015/02/HiKey_User_Guide_Rev0.2.pdf" class="external">HiKey 用户指南</a>。</p>
+
+<h2 id="neonkey">Neonkey SensorHub</h2>
+<p>要开发采用新传感器或 LED 的新 ContextHub 功能,您可以使用连接到 HiKey 或 Hikey960 开发板的 <a href="http://www.96boards.org/product/neonkey/" class="external">Neonkey SensorHub</a>。</p>
+
+<img src="images/neonkey-sensorhub.png" alt="Neonkey Sensorhub 图片"/>
+<figcaption><strong>图 3.</strong> Neonkey SensorHub</figcaption>
+
+<p>Neonkey 是 STM32F411CE 上经认证的 <a href="http://www.96boards.org/" class="external">96Boards</a> 夹层基础,具有以下组件:</p>
+
+<ul>
+<li>压力传感器:BMP280</li>
+<li>ALS/近程传感器:RPR-0521RS</li>
+<li>ARM 霍尔效应传感器:MRMS501A</li>
+<li>可支持 15 个 LED 的 LED 驱动程序:LP3943</li>
+<li>加速度计/陀螺仪 + 地磁传感器:BMI160 + BMM150</li>
+<li>温度/湿度传感器:SI7034-A10</li>
+<li>4 个 GPIO 驱动的 LED、I2C 扩展、GPIO(2 条线)扩展、JTAG 连接器</li>
+<li>NOR 闪存:512KB</li>
+<li>SRAM:128 KB,96boards LS 扩展连接器</li>
+</ul>
+
+<p>AOSP 可提供内核源代码和 ContextHub 开发板支持,以协助开发者以较低的 OEM 费用开发和调试新传感器、进行新的 HAL 和内核更改,等等。</p>
+
+<p>要编译、启用并上传 Neonkey,请执行以下操作:</p>
+
+<ol>
+<li>提取 AOSP 源代码:
+<pre class="devsite-terminal">
+repo init -u https://android.googlesource.com/platform/manifest -b master &amp; repo sync -j24
+</pre>
+</li>
+<li>编译:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">. ./build/envsetup.sh</code>
+<code class="devsite-terminal">lunch hikey-userdebug</code>
+<code class="devsite-terminal">. device/google/contexthub/firmware/toolchain-setup.sh</code>
+<code class="devsite-terminal">make -C device/google/contexthub/firmware/variant/neonkey</code>
+<code class="devsite-terminal">adb push device/google/contexthub/firmware/out/nanohub/neonkey/full.bin /data/local/tmp</code>
+</pre>
+</li>
+<li>要启用 Neonkey,请通过以下方法进入启动模式:
+<ol>
+<li>将 BOOT0 连接到 1V8(连接 JTAG P4 1-5 引脚)</li>
+<li>按住 USR 按钮</li>
+<li>按 RST 按钮</li>
+</ol>
+</li>
+<li>要上传固件,请执行以下操作:
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell stm32_flash -u -d /dev/ttyAMA2 -e 0xffff -w /data/local/tmp/full.bin</code>
+</pre>
+</li>
+</ol>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/downloading.html b/zh-cn/source/downloading.html
index ca66a612..5293ce7f 100644
--- a/zh-cn/source/downloading.html
+++ b/zh-cn/source/downloading.html
@@ -31,52 +31,50 @@
<ol>
<li>
<p>确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:</p>
- <pre>
-<code>$ mkdir ~/bin
-$ PATH=~/bin:$PATH
-</code>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir ~/bin</code>
+<code class="devsite-terminal">PATH=~/bin:$PATH</code>
</pre>
</li>
<li>
<p>下载 Repo 工具,并确保它可执行:</p>
- <pre>
-$ curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/bin/repo
-$ chmod a+x ~/bin/repo
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/bin/repo</code>
+<code class="devsite-terminal">chmod a+x ~/bin/repo</code>
</pre>
</li>
</ol>
<p>对于 1.21 版,Repo 的 SHA-1 校验和为 b8bd1804f432ecf1bab730949c82b93b0fc5fede</p>
<p>对于 1.22 版,Repo 的 SHA-1 校验和为 da0514e484f74648a890c0467d61ca415379f791</p>
-<p>对于 1.23 版,Repo 的 SHA-1 校验和为 ac9d646f6d699f6822a6bc787d3e7338ae7ab6ed</p>
+<p>对于 1.23 版,Repo 的 SHA-256 校验和为 e147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5</p>
<h2 id="initializing-a-repo-client">初始化 Repo 客户端</h2>
<p>安装 Repo 后,设置您的客户端以访问 Android 源代码代码库:</p>
<ol>
<li>
<p>创建一个空目录来存放您的工作文件。如果您使用的是 MacOS,必须在区分大小写的文件系统中创建该目录。为其指定一个您喜欢的任意名称:</p>
-<pre>
-$ mkdir WORKING_DIRECTORY
-$ cd WORKING_DIRECTORY
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir WORKING_DIRECTORY</code>
+<code class="devsite-terminal">cd WORKING_DIRECTORY</code>
</pre>
</li>
<li>
<p>使用您的真实姓名和电子邮件地址配置 Git。要使用 Gerrit 代码审核工具,您需要一个与<a href="https://www.google.com/accounts">已注册的 Google 帐号</a>关联的电子邮件地址。确保这是您可以接收邮件的有效地址。您在此处提供的姓名将显示在您提交的代码的提供方信息中。
</p>
-<pre>
-$ git config --global user.name "Your Name"
-$ git config --global user.email "you@example.com"
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">git config --global user.name "Your Name"</code>
+<code class="devsite-terminal">git config --global user.email "you@example.com"</code>
</pre>
</li>
-
<li>
<p>运行 <code>repo init</code> 以获取最新版本的 Repo 及其最近的所有错误更正内容。您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。
</p>
-<pre>
-$ repo init -u https://android.googlesource.com/platform/manifest
+<pre class="devsite-terminal devsite-click-to-copy">
+repo init -u https://android.googlesource.com/platform/manifest
</pre>
<p>要对“master”以外的分支进行校验,请使用 <code>-b</code> 来指定相应分支。要查看分支列表,请参阅<a href="build-numbers.html#source-code-tags-and-builds">源代码标记和版本</a>。
</p>
-<pre>
-$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
+<pre class="devsite-terminal devsite-click-to-copy">
+repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
</pre>
</li>
</ol>
@@ -84,7 +82,7 @@ $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0
</p>
<h2 id="getting-the-files">下载 Android 源代码树</h2>
<p>要将 Android 源代码树从默认清单中指定的代码库下载到工作目录,请运行以下命令:</p>
-<pre>$ repo sync</pre>
+<pre class="devsite-terminal devsite-click-to-copy">repo sync</pre>
<p>Android 源代码文件将位于工作目录中对应的项目名称下。初始同步操作将需要 1 个小时或更长时间才能完成。要详细了解 <code>repo
sync</code> 和其他 Repo 命令,请参阅<a href="developing.html">开发</a>部分。
</p>
@@ -98,54 +96,55 @@ $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0
<p>第一步是使用<a href="https://android.googlesource.com/new-password">密码生成器</a>生成密码,然后按照密码生成器页面中的说明进行操作。
</p>
<p>第二步是通过使用以下清单 URI,强制使用进行身份验证的访问方式:<code>https://android.googlesource.com/a/platform/manifest</code>。请注意 <code>/a/</code> 目录前缀如何触发强制性身份验证。您可以通过以下命令将现有客户端转换为使用强制性身份验证:</p>
-<pre>
-$ repo init -u https://android.googlesource.com/a/platform/manifest
+<pre class="devsite-terminal devsite-click-to-copy">
+repo init -u https://android.googlesource.com/a/platform/manifest
</pre>
<h2 id="troubleshooting-network-issues">排查网络问题</h2>
<p>在使用代理的情况下下载内容(在一些企业环境中很常见)时,您可能需要明确指定 Repo 随后使用的代理:</p>
-<pre>
-$ export HTTP_PROXY=http://&lt;proxy_user_id&gt;:&lt;proxy_password&gt;@&lt;proxy_server&gt;:&lt;proxy_port&gt;
-$ export HTTPS_PROXY=http://&lt;proxy_user_id&gt;:&lt;proxy_password&gt;@&lt;proxy_server&gt;:&lt;proxy_port&gt;
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">export HTTP_PROXY=http://&lt;proxy_user_id&gt;:&lt;proxy_password&gt;@&lt;proxy_server&gt;:&lt;proxy_port&gt;</code>
+<code class="devsite-terminal">export HTTPS_PROXY=http://&lt;proxy_user_id&gt;:&lt;proxy_password&gt;@&lt;proxy_server&gt;:&lt;proxy_port&gt;</code>
</pre>
<p>一种比较少见的情况是,Linux 客户端遇到连接问题,在下载期间(通常是在“正在接收对象”期间)被卡住。有人曾报告称,调整 TCP/IP 堆栈的设置并使用非并行命令可以改善这种情况。您需要拥有 root 权限才能修改 TCP 设置:</p>
-<pre>
-$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
-$ repo sync -j1
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">sudo sysctl -w net.ipv4.tcp_window_scaling=0</code>
+<code class="devsite-terminal">repo sync -j1</code>
</pre>
<h2 id="using-a-local-mirror">使用本地镜像</h2>
<p>当您使用多个客户端时(尤其是在带宽不足的情况下),最好为所有服务器内容创建一个本地镜像,并从该镜像同步客户端(不需要访问网络)。一个完整镜像的下载文件比两个客户端的下载文件要小一些,而且包含更多信息。
</p>
<p>以下说明假定在 <code>/usr/local/aosp/mirror</code> 中创建镜像。第一步是创建并同步镜像本身。请注意 <code>--mirror</code> 标志,该标志只能在创建新客户端时指定:</p>
-<pre>
-$ mkdir -p /usr/local/aosp/mirror
-$ cd /usr/local/aosp/mirror
-$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
-$ repo sync
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir -p /usr/local/aosp/mirror</code>
+<code class="devsite-terminal">cd /usr/local/aosp/mirror</code>
+<code class="devsite-terminal">repo init -u https://android.googlesource.com/mirror/manifest --mirror</code>
+<code class="devsite-terminal">repo sync</code>
</pre>
<p>同步镜像后,您就可以从镜像创建新客户端了。请注意,务必要指定一个绝对路径:</p>
-<pre>$ mkdir -p /usr/local/aosp/master
-$ cd /usr/local/aosp/master
-$ repo init -u /usr/local/aosp/mirror/platform/manifest.git
-$ repo sync
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir -p /usr/local/aosp/master</code>
+<code class="devsite-terminal">cd /usr/local/aosp/master</code>
+<code class="devsite-terminal">repo init -u /usr/local/aosp/mirror/platform/manifest.git</code>
+<code class="devsite-terminal">repo sync</code>
</pre>
<p>最后,要将客户端与服务器同步,您需要将镜像与服务器同步,然后再将客户端与镜像同步:</p>
-<pre>
-$ cd /usr/local/aosp/mirror
-$ repo sync
-$ cd /usr/local/aosp/master
-$ repo sync
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd /usr/local/aosp/mirror</code>
+<code class="devsite-terminal">repo sync</code>
+<code class="devsite-terminal">cd /usr/local/aosp/master</code>
+<code class="devsite-terminal">repo sync</code>
</pre>
<p>您可以将镜像存储在 LAN 服务器上,然后通过 NFS、SSH 或 Git 访问它。您还可以将其存储在移动存储盘上,并在用户之间或计算机之间传用该存储盘。
</p>
<h2 id="verifying-git-tags">验证 Git 标记</h2>
-<p>将以下公钥加载到您的 GnuPG 密钥数据库中。该密钥用于签署代表各版本的带批注标记。
+<p>将以下公钥加载到您的 GnuPG 密钥数据库中。该密钥用于签署代表各版本的带注释标记。
</p>
-<pre>
-$ gpg --import
+<pre class="devsite-terminal devsite-click-to-copy">
+gpg --import
</pre>
<p>复制并粘贴以下密钥,然后输入 EOF (Ctrl-D) 以结束输入并处理密钥。
</p>
-<pre>
+<pre class="devsite-click-to-copy">
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
@@ -178,10 +177,10 @@ EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
-----END PGP PUBLIC KEY BLOCK-----
</pre>
<p>导入密钥后,您可以通过以下命令验证任何标记:</p>
-<pre>
-$ git tag -v TAG_NAME
+<pre class="devsite-terminal devsite-click-to-copy">
+git tag -v TAG_NAME
</pre>
-<p>如果您尚未<a href="initializing.html#ccache">设置 ccache</a>,现在是设置它的最佳时机。
+<p>如果您尚未<a href="initializing.html#ccache">设置 ccache</a>,现在是设置它的一个好时机。
</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/initializing.html b/zh-cn/source/initializing.html
index 93f615ef..f814fc65 100644
--- a/zh-cn/source/initializing.html
+++ b/zh-cn/source/initializing.html
@@ -21,7 +21,8 @@
-->
<p>本部分介绍了如何设置本地工作环境来编译 Android 源文件。您需要使用 Linux 或 Mac OS。目前不支持在 Windows 环境下进行编译。</p>
-<p>要简要了解代码审核和代码更新的整个过程,请参阅<a href="life-of-a-patch.html">补丁程序的生命周期</a>。</p>
+<p>要简要了解整个代码审核和代码更新流程,请参阅<a href="life-of-a-patch.html">补丁程序的生命周期</a>。</p>
+<p class="note"><strong>注意</strong>:本网站中所有命令的前面都带有美元符号 ($),以便与文件中的输出或条目区分开来。您可以使用每个命令框右上角的“点击复制”<em></em>功能来复制所有行(不包括美元符号),也可以三击每个行来分别复制各行(不包括美元符号)。</p>
<h2 id="choosing-a-branch">选择分支</h2>
<p>针对编译环境的某些要求是由您打算编译的源代码的版本决定的。要查看您可以选择的分支的完整列表,请参阅<a href="build-numbers.html">版本号</a>。您还可以选择下载并编译最新的源代码(称为 <code>master</code>)。如果您选择这么做,请在初始化存储库时直接忽略分支规范。</p>
<p>选择分支后,请按照下面的相应说明来设置编译环境。</p>
@@ -29,52 +30,50 @@
<p>以下说明适用于所有分支(包括 <code>master</code>)。</p>
<p>我们会定期在最近推出的一些 Ubuntu LTS (14.04) 版本中对 Android 编译过程进行内部测试,但大多数 Ubuntu 分发版本都应该有所需的编译工具。欢迎向我们报告在其他分发版本中的测试结果(无论结果是成功还是失败)。</p>
<p>如果是 Gingerbread (2.3.x) 及更高版本(包括 <code>master</code> 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。</p>
-<p class="note"><strong>注意</strong>:要查看完整的硬件和软件要求列表,请参阅相关<a href="requirements.html">要求</a>。然后,请按照下方适用于 Ubuntu 和 Mac OS 的详细说明进行操作。</p>
+<p class="note"><strong>注意</strong>:要查看完整的硬件和软件要求列表,请参阅<a href="requirements.html">要求</a>。然后,请按照下方适用于 Ubuntu 和 Mac OS 的详细说明进行操作。</p>
<h3 id="installing-the-jdk">安装 JDK</h3>
-<p><a href="https://android.googlesource.com/">Android 开放源代码项目 (AOSP)</a> 中 Android 的 <code>master</code> 分支需要使用 Java 8。在 Ubuntu 中则需要使用 <a href="http://openjdk.java.net/install/">OpenJDK</a>。</p>
-<p>对于较低的版本,请参阅 <a href="requirements.html#jdk">JDK 要求</a>。</p>
+<p><a href="https://android.googlesource.com/">Android 开放源代码项目 (AOSP)</a> 中 Android 的 <code>master</code> 分支在 <code>platform/prebuilts/jdk/jdk8</code> 中有预编译版本的 OpenJDK。因此,无需再额外安装。</p>
+
+<p>较低版本的 Android 需要另行安装 JDK。在 Ubuntu 上,请使用 <a href="http://openjdk.java.net/install/">OpenJDK</a>。要了解确切版本,请参阅 <a href="requirements.html#jdk">JDK 要求</a>;要了解相关说明,请参阅以下各个部分。</p>
<h4 id="for-ubuntu-15-04">如果 Ubuntu &gt;= 15.04</h4>
<p>请运行以下命令:</p>
-<pre>
-$ sudo apt-get update
-$ sudo apt-get install openjdk-8-jdk
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">sudo apt-get update</code>
+<code class="devsite-terminal">sudo apt-get install openjdk-8-jdk</code>
</pre>
<h4 id="for-ubuntu-14-04">如果是 Ubuntu LTS 14.04</h4>
<p>目前没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包。<strong>Ubuntu 15.04 OpenJDK 8</strong> 程序包能够在 Ubuntu 14.04 中成功使用。<em>我们发现,按照以下说明操作时,更高的程序包版本(例如适合 15.10、16.04 的版本)在 Ubuntu 14.04 中无法正常工作。</em></p>
<ol>
<li>
-<p>从 <a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/">archive.ubuntu.com</a> 下载适合 64 位架构的 <code>.deb</code> 程序包:</p>
+<p>从 <a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/">archive.ubuntu.com</a> 下载适用于 64 位架构的 <code>.deb</code> 软件包:</p>
<ul>
-<li><a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u45-b14-1_amd64.deb">openjdk-8-jre-headless_8u45-b14-1_amd64.deb</a>
-(SHA256:<code>0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0</code>)</li>
-<li><a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u45-b14-1_amd64.deb">openjdk-8-jre_8u45-b14-1_amd64.deb</a>
-(SHA256:<code>9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849</code>)</li>
-<li><a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u45-b14-1_amd64.deb">openjdk-8-jdk_8u45-b14-1_amd64.deb</a>
-(SHA256:<code>6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c</code>)</li>
+<li><a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u45-b14-1_amd64.deb">openjdk-8-jre-headless_8u45-b14-1_amd64.deb</a>(SHA256:<code>0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0</code>)</li>
+<li><a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u45-b14-1_amd64.deb">openjdk-8-jre_8u45-b14-1_amd64.deb</a>(SHA256:<code>9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849</code>)</li>
+<li><a href="http://archive.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u45-b14-1_amd64.deb">openjdk-8-jdk_8u45-b14-1_amd64.deb</a>(SHA256:<code>6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c</code>)</li>
</ul>
</li>
<li>
<p>(可选)对照随以上每个程序包列出的 SHA256 字符串,确认已下载文件的校验和。</p>
<p>例如,使用 <code>sha256sum</code> 工具:</p>
-<pre>
-$ sha256sum {downloaded.deb file}
+<pre class="devsite-terminal devsite-click-to-copy">
+sha256sum {downloaded.deb file}
</pre>
</li>
<li>
<p>安装程序包:</p>
-<pre>
-$ sudo apt-get update
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo apt-get update
</pre>
<p>为下载的每个 .deb 文件运行 <code>dpkg</code>。运行过程中可能会因缺少依赖项而出现错误:</p>
-<pre>
-$ sudo dpkg -i {downloaded.deb file}
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo dpkg -i {downloaded.deb file}
</pre>
<p>解决缺少依赖项的问题:</p>
-<pre>
-$ sudo apt-get -f install
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo apt-get -f install
</pre>
</li>
</ol>
@@ -82,9 +81,9 @@ $ sudo apt-get -f install
<h4 id="default-java-version">更新默认的 Java 版本 - 可选</h4>
<p>(可选)对于以上 Ubuntu 版本,您可以通过运行以下命令来更新默认的 Java 版本:</p>
-<pre>
-$ sudo update-alternatives --config java
-$ sudo update-alternatives --config javac
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">sudo update-alternatives --config java</code>
+<code class="devsite-terminal">sudo update-alternatives --config javac</code>
</pre>
<p>在编译过程中,如果您遇到 Java 版本错误,请按照<a href="building.html#wrong-java-version">错误的 Java 版本</a>部分中的说明设置其路径。</p>
@@ -93,67 +92,47 @@ $ sudo update-alternatives --config javac
<p>您将需要 64 位版本的 Ubuntu。建议您使用 Ubuntu 14.04。</p>
-<pre>
-$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
- zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
- lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
- libgl1-mesa-dev libxml2-utils xsltproc unzip
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
</pre>
-<p class="note"><strong>注意</strong>:要使用 SELinux 工具进行政策分析,您还需要安装 <code>python-networkx</code> 程序包。</p>
+<p class="note"><strong>注意</strong>:要使用 SELinux 工具进行政策分析,还需要安装 <code>python-networkx</code> 软件包。</p>
-<p class="note"><strong>注意</strong>:如果您使用 LDAP 并且希望运行 ART 主机测试,则还需要安装 <code>libnss-sss:i386</code> 程序包。</p>
+<p class="note"><strong>注意</strong>:如果您使用 LDAP 并且希望运行 ART 主机测试,还需要安装 <code>libnss-sss:i386</code> 软件包。</p>
<h3 id="installing-required-packages-ubuntu-1204">安装所需的程序包 (Ubuntu 12.04)</h3>
<p>您可以使用 Ubuntu 12.04 来编译较低版本的 Android。master 或最近推出的一些版本不支持 Ubuntu 12.04。</p>
-<pre>
-$ sudo apt-get install git gnupg flex bison gperf build-essential \
- zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
- libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
- libgl1-mesa-dev g++-multilib mingw32 tofrodos \
- python-markdown libxml2-utils xsltproc zlib1g-dev:i386
-$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386</code>
+<code class="devsite-terminal">sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so</code>
</pre>
<h3 id="installing-required-packages-ubuntu-1004-1110">安装所需的程序包 (Ubuntu 10.04 - 11.10)</h3>
<p>不再支持在 Ubuntu 10.04-11.10 中进行编译,但它们仍可用来编译较低版本的 AOSP。</p>
-<pre>
-$ sudo apt-get install git gnupg flex bison gperf build-essential \
- zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
- x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
- libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
- libxml2-utils xsltproc
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo apt-get install git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
</pre>
<p>在 Ubuntu 10.10 中,请运行以下命令:</p>
-<pre>
-$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
</pre>
<p>在 Ubuntu 11.10 中,请运行以下命令:</p>
-<pre>
-$ sudo apt-get install libx11-dev:i386
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo apt-get install libx11-dev:i386
</pre>
<h3 id="configuring-usb-access">配置 USB 使用权限</h3>
-<p>在 GNU/Linux 系统中,尤其是在 Ubuntu 系统中,默认情况下普通用户无法直接使用 USB 设备。您需要对系统进行配置以允许使用此类设备。</p>
-<p>建议您以 root 用户的身份在 <code>/etc/udev/rules.d/51-android.rules</code> 下创建一个文件。</p>
-
-<p>为此,请运行以下命令来下载本网站附带的 <a href="51-android.txt">51-android.txt</a> 文件,对其进行修改以包含您的用户名,然后将其放到正确位置:</p>
-
-<pre>
-$ wget -S -O - http://source.android.com/source/51-android.txt | sed "s/&lt;username&gt;/$USER/" | sudo tee &gt;/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
-</pre>
-
-<p>这些新规则会在下次插入设备时生效。因此,您可能需要先拔下设备,然后再将其插到计算机上。</p>
+<p>按照说明<a href="https://developer.android.com/studio/run/device.html#setting-up" class="external">设置用于开发的设备</a>,以安装适用于所有 Android 设备且由社区维护的默认 <code>udev</code> 规则集。
-<h3 id="using-a-separate-output-directory">使用单独的输出目录</h3>
+</p><h3 id="using-a-separate-output-directory">使用单独的输出目录</h3>
<p>默认情况下,每次编译的输出都会存储在相应源代码树的 <code>out/</code> 子目录下。</p>
@@ -161,8 +140,8 @@ $ wget -S -O - http://source.android.com/source/51-android.txt | sed "s/&lt;user
<p>要进行这项设置,请导出 <code>OUT_DIR_COMMON_BASE</code> 变量,使其指向将存储输出目录的位置。</p>
-<pre>
-$ export OUT_DIR_COMMON_BASE=&lt;path-to-your-out-directory&gt;
+<pre class="devsite-terminal devsite-click-to-copy">
+export OUT_DIR_COMMON_BASE=&lt;path-to-your-out-directory&gt;
</pre>
<p>对于每个单独的源代码树,其输出目录都将以其存放目录命名。</p>
@@ -184,24 +163,25 @@ $ export OUT_DIR_COMMON_BASE=&lt;path-to-your-out-directory&gt;
<p>您可以使用磁盘映像在现有的 Mac OS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择“新建映像”。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的需求。使用稀疏映像有助于节省空间,而且以后可以随着需求的增加进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。</p>
<p>您也可以通过 shell 使用以下命令创建磁盘映像:</p>
-<pre>
-# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
+<pre class="devsite-click-to-copy">
+<span class="no-select"># </span>hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
</pre>
<p>这将创建一个 <code>.dmg</code>(也可能是 <code>.dmg.sparseimage</code>)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。</p>
<p>如果您以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:</p>
-<pre>
-# hdiutil resize -size &lt;new-size-you-want&gt;g ~/android.dmg.sparseimage
+<pre class="devsite-click-to-copy">
+<span class="no-select"># </span>hdiutil resize -size &lt;new-size-you-want&gt;g ~/android.dmg.sparseimage
</pre>
<p>对于存储在主目录下的名为 <code>android.dmg</code> 的磁盘映像,您可以向 <code>~/.bash_profile</code> 中添加辅助函数:</p>
<ul>
-<li>要在执行 <code>mountAndroid</code> 时装载磁盘映像,请运行以下命令:<p></p>
+<li>
+要在执行 <code>mountAndroid</code> 时装载磁盘映像,请运行以下命令:
-<pre>
+<pre class="devsite-click-to-copy">
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
</pre>
@@ -211,7 +191,7 @@ function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/androi
<li>
<p>要在执行 <code>umountAndroid</code> 时卸载磁盘映像,请运行以下命令:</p>
-<pre>
+<pre class="devsite-click-to-copy">
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
</pre>
@@ -228,8 +208,8 @@ function umountAndroid() { hdiutil detach /Volumes/android; }
<ol>
<li>
-<p>使用以下命令安装 Xcode 命令行工具:</p><pre>
-$ xcode-select --install
+<p>使用以下命令安装 Xcode 命令行工具:</p><pre class="devsite-terminal devsite-click-to-copy">
+xcode-select --install
</pre>
<p>对于较低版本的 Mac OS(10.8 或更低版本),您需要通过 <a href="http://developer.apple.com/">Apple 开发者网站</a>安装 Xcode。如果您尚未注册成为 Apple 开发者,则需要创建一个 Apple ID 才能下载。</p>
@@ -240,8 +220,8 @@ $ xcode-select --install
<p class="note"><strong>注意</strong>:请确保在路径中 <code>/opt/local/bin</code> 显示在 <code>/usr/bin</code> <strong>之前</strong>。否则,请将以下内容添加到 <code>~/.bash_profile</code> 文件中:</p>
-<pre>
-<code>export PATH=/opt/local/bin:$PATH</code>
+<pre class="devsite-click-to-copy">
+export PATH=/opt/local/bin:$PATH
</pre>
<p class="note"><strong>注意</strong>:如果主目录中没有 <code>.bash_profile</code> 文件,请创建一个。</p>
@@ -250,13 +230,13 @@ $ xcode-select --install
<li>
<p>通过 MacPorts 获取 Make、Git 和 GPG 程序包:</p>
-<pre>
-$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
+<pre class="devsite-terminal devsite-click-to-copy">
+POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
</pre>
<p>如果您使用 Mac OS X v10.4,还需要安装 bison:</p>
-<pre>
-$ POSIXLY_CORRECT=1 sudo port install bison
+<pre class="devsite-terminal devsite-click-to-copy">
+POSIXLY_CORRECT=1 sudo port install bison
</pre>
</li>
</ol>
@@ -268,35 +248,35 @@ $ POSIXLY_CORRECT=1 sudo port install bison
<ol>
<li>
<p>修改 <code>/opt/local/etc/macports/sources.conf</code>,在 rsync 行上方添加下面这行内容:</p>
-<pre>
+<pre class="devsite-click-to-copy">
file:///Users/Shared/dports
</pre>
<p>然后创建该目录:</p>
-<pre>
-$ mkdir /Users/Shared/dports
+<pre class="devsite-terminal devsite-click-to-copy">
+mkdir /Users/Shared/dports
</pre>
</li>
<li>
<p>在新的 <code>dports</code> 目录下,运行以下命令:</p>
-<pre>
-$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
+<pre class="devsite-terminal devsite-click-to-copy">
+svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
</pre>
</li>
<li>
<p>为新的本地存储库创建一个端口索引:</p>
-<pre>
-$ portindex /Users/Shared/dports
+<pre class="devsite-terminal devsite-click-to-copy">
+portindex /Users/Shared/dports
</pre>
</li>
<li>
<p>使用以下命令安装旧版 gmake:</p>
-<pre>
-$ sudo port install gmake @3.81
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo port install gmake @3.81
</pre>
</li>
</ol>
@@ -306,7 +286,7 @@ $ sudo port install gmake @3.81
<p>在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。</p>
<p>要提高此上限,请将下列行添加到 <code>~/.bash_profile</code> 中:</p>
-<pre>
+<pre class="devsite-click-to-copy">
# set the number of open files to be 1024
ulimit -S -n 1024
</pre>
@@ -321,17 +301,17 @@ ulimit -S -n 1024
<p>要使用 ccache,请在源代码树的根目录下执行以下命令:</p>
-<pre>
-$ export USE_CCACHE=1
-$ export CCACHE_DIR=/&lt;path_of_your_choice&gt;/.ccache
-$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">export USE_CCACHE=1</code>
+<code class="devsite-terminal">export CCACHE_DIR=/&lt;path_of_your_choice&gt;/.ccache</code>
+<code class="devsite-terminal">prebuilts/misc/linux-x86/ccache/ccache -M 50G</code>
</pre>
<p>建议的缓存大小为 50G 到 100G。</p>
<p>请将以下内容添加到 <code>.bashrc</code>(或等同文件)中:</p>
-<pre>
+<pre class="devsite-click-to-copy">
export USE_CCACHE=1
</pre>
@@ -339,13 +319,13 @@ export USE_CCACHE=1
<p>在 Mac OS 中,您应将 <code>linux-x86</code> 替换成 <code>darwin-x86</code>:</p>
-<pre>
+<pre class="devsite-click-to-copy">
prebuilts/misc/darwin-x86/ccache/ccache -M 50G
</pre>
<p>在编译 Ice Cream Sandwich (4.0.x) 或更低版本时,ccache 位于其他位置:</p>
-<pre>
+<pre class="devsite-click-to-copy">
prebuilt/linux-x86/ccache/ccache -M 50G
</pre>
@@ -353,8 +333,8 @@ prebuilt/linux-x86/ccache/ccache -M 50G
<p>在 Linux 中,您可以运行以下命令来观看使用 ccache 时的情况:</p>
-<pre>
-$ watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s
+<pre class="devsite-terminal devsite-click-to-copy">
+watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s
</pre>
<h2 id="next-download-the-source">下一篇:下载源代码</h2>
diff --git a/zh-cn/source/jack.html b/zh-cn/source/jack.html
index 261efadf..dd4f1018 100644
--- a/zh-cn/source/jack.html
+++ b/zh-cn/source/jack.html
@@ -20,195 +20,159 @@
limitations under the License.
-->
-<h2 id="the_jack_toolchain">Jack 工具链</h2>
+<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,但我们强烈建议您使用最新的 <a href="https://developer.android.com/studio/preview/index.html" class="external">Android Studio 预览版</a>,该版本可为内置到默认工具链中的 <a href="https://developer.android.com/studio/preview/features/java8-support.html" class="external">Java 8 语言功能</a>提供更好的支持。</aside>
-<p class="warning">
- 根据<a href="https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html">此公告</a>,<b>Jack 工具链已被弃用</b>。不过,在我们提供替代工具之前,您可以继续使用它<a href="https://developer.android.com/preview/j8-jack.html">启用 Java 8 语言功能</a>。
-</p>
-
-<p>Jack 是一种新型 Android 工具链,用于将 Java 源代码编译成 Android dex 字节码。它取代了之前由 javac、ProGuard、jarjar 和 dx 等多种工具组成的 Android 工具链。</p>
+<p>Jack 是一种 Android 工具链,用于将 Java 源代码编译成 Android dex 字节码。它取代了之前由 javac、ProGuard、jarjar 和 dx 等多种工具组成的 Android 工具链。由于 Jack 是 Android 6.x 的默认 Android 编译工具链,因此要使用 Jack,您只需使用标准的 Makefile 命令来编译源代码树或您的项目即可,无需进行其他任何操作。</p>
+<h2 class="overview">Jack 简介</h2>
<p>Jack 工具链具有以下优势:</p>
-<ul>
- <li> <strong>完全开放源代码</strong><br />
-它是在 AOSP 中提供的;并且欢迎用户贡献资源。
- </li><li> <strong>提高编译速度</strong><br />
+<img src="./images/jack_overview.png" alt="Jack 概览"/>
+<figcaption><strong>图 1.</strong> Jack 概览。</figcaption>
-Jack 提供以下具体支持来减少编译时间:dex 预处理、增量编译和 Jack 编译服务器。
- </li><li> <strong>支持压缩、混淆、重新打包和多 dex 处理</strong><br />
-不再需要使用单独的软件包(如 ProGuard)
-</li></ul>
-
-<p class="note">请注意,从 Android 7.0 (N) 开始,Jack 支持使用 JaCoCo 衡量代码覆盖率。如需了解详情,请参阅<a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-code-coverage.md">使用 JaCoCo 衡量代码覆盖率</a>和 <a href="https://developer.android.com/preview/j8-jack.html">Java 8 语言功能</a>。</p>
+<ul>
+<li><strong>完全开放的源代码</strong>:Jack 是在 AOSP 中提供的;我们欢迎用户贡献内容。</li>
+<li><strong>提高编译速度</strong>:Jack 能够利用 dex 预处理、增量编译和 Jack 编译服务器来缩短编译时间。</li>
+<li><strong>能够处理以下任务:压缩、混淆、重新打包和多 dex 处理</strong>。不再需要使用单独的软件包(如 ProGuard)。</li>
+</ul>
-<img src="/images/jack-overview.png" height="75%" width="75%" alt="Jack 概览"/>
-<p class="img-caption"><strong>图 1. </strong>Jack 概览</p>
+<p>从 Android 7.0 起,Jack 支持使用 JaCoCo 衡量代码覆盖率。如需了解详情,请参阅<a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-code-coverage.md" class="external">使用 JaCoCo 衡量代码覆盖率</a>和 <a href="https://developer.android.com/preview/j8-jack.html" class="external">Java 8 语言功能</a>。</p>
-<h2 id="the_jack_library_format">.jack 库格式</h2>
+<h3 id="jack_library">Jack 库格式</h3>
-<p>Jack 具有自己的 .jack 文件格式,其中包含相应库的预编译 dex 代码,可实现更快速的编译 (dex 预处理)。</p>
+<p>Jack 具有自己的 .jack 文件格式,其中包含相应库的预编译 dex 代码,可实现更快速的编译(dex 预处理)。</p>
-<img src="/images/jack-library-file.png" height="75%" width="75%" alt="Jack 库文件内容"/>
-<p class="img-caption"><strong>图 2. </strong>Jack 库文件内容</p>
+<img src="./images/jack_library.png" alt="Jack 库文件内容"/>
+<figcaption><strong>图 2.</strong> Jack 库文件内容。</figcaption>
-<h2 id="jill">Jill</h2>
+<h3 id="jill">Jill</h3>
<p>Jill 工具可将现有的 .jar 库转换为新的库格式,如下图所示。</p>
-<img src="/images/jill.png" alt="使用 Jill 导入现有的 .jar 库"/>
-<p class="img-caption"><strong>图 3. </strong>导入现有 .jar 库的工作流程</p>
-
-<h2 id="using_jack_in_your_android_build">使用 Jack 进行 Android 编译</h2>
-
-<div class="note">如需了解在 Android 7.0 (N) 及更高版本中使用 Jack 的说明,请参阅 <a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md">Jack 服务器文档</a>。对于 Android 6.0 (M),请使用本部分中的说明。</div>
-
-<p>要使用 Jack,您只需使用标准的 Makefile 命令来编译树或您的项目即可,无需进行任何其他操作。Jack 是适合 M 的默认 Android 编译工具链。</p>
-
-<p>首次使用 Jack 时,它会在您的计算机上启动一个本地 Jack 编译服务器:</p>
-
-<ul>
- <li>该服务器能够让 Jack 实现内在加速,因为它可以避免在每次编译时启动新的主机 JRE JVM、加载 Jack 代码、初始化 Jack 以及准备 JIT。此外,它还会在小规模编译期间(例如增量模式下)尽可能优化编译所需时间。
- </li><li>该服务器还是在短时间内控制并行 Jack 编译数量的解决方案,因此可以避免计算机过载(内存或磁盘问题),因为它会限制并行编译的数量。
-</li></ul>
-
-<p>如果没有任何编译工作,在空闲一段时间之后,Jack 服务器会自行关闭。它使用了 localhost 接口上的两个 TCP 端口,因此无法从外部访问。您可以通过修改<code> $HOME/.jack</code> 文件来修改所有这些参数(并行编译的数量、超时、端口号等)。</p>
+<img src="./images/jack_jill.png" alt="使用 Jill 导入 .jar 库"/>
+<figcaption><strong>图 3.</strong> 导入现有 .jar 库的工作流程。</figcaption>
-<h3 id="$home_jack_file">$HOME/.jack 文件</h3>
+<h2 id="using_jack">Jack 编译服务器</h2>
-<p><code>$HOME/.jack</code> 文件包含 Jack 服务器变量的设置,采用纯 bash 语法编写。</p>
+<aside class="note"><strong>注意</strong>:以下说明仅适用于在 Android 6.x 中使用 Jack 的情况;如需关于在 Android 7.x 及更高版本中使用 Jack 的说明,请参阅 <a href="https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md" class="external">Jack 服务器文档</a>。</aside>
-<p>以下是可用设置及其定义和默认值:</p>
+<p>首次使用 Jack 时,它会在您的计算机上启动一个本地 Jack 编译服务器。该服务器:</p>
<ul>
- <li> <strong><code>SERVER=true</code></strong><code> </code>:启用 Jack 的服务器功能。
- </li><li> <strong><code>SERVER_PORT_SERVICE=8072</code>
-</strong>设置服务器的用于编译的 TCP 端口号。
- </li><li> <strong><code>SERVER_PORT_ADMIN=8073</code></strong>:
-设置服务器的用于管理的 TCP 端口号。
- </li><li> <strong><code>SERVER_COUNT=1</code></strong>:
-目前未使用。
- </li><li> <strong><code>SERVER_NB_COMPILE=4</code></strong>:
-允许的最大并行编译数量。
- </li><li> <strong><code>SERVER_TIMEOUT=60</code></strong>:
-无编译工作时服务器在自行关闭之前必须等待的空闲秒数。
- </li><li> <strong><code>SERVER_LOG=${SERVER_LOG:=$SERVER_DIR/jack-$SERVER_PORT_SERVICE.log}</code></strong>:
-在其中写入服务器日志的文件。默认情况下,此变量可被环境变量重载。
- </li><li> <strong><code>JACK_VM_COMMAND=${JACK_VM_COMMAND:=java}</code></strong>:
-用于在主机上启动 JVM 的默认命令。默认情况下,此变量可被环境变量重载。
-</li></ul>
-
-<h3 id="jack_troubleshooting">Jack 问题排查</h3>
+<li>能够实现内在加速,因为它可以避免在每次编译时都启动新的主机 JRE JVM、加载 Jack 代码、初始化 Jack 以及准备 JIT。此外,它还会在小规模编译期间(例如增量模式下)实现非常快的编译速度。</li>
+<li>是短期内控制并行 Jack 编译数量的解决方案。该服务器可以避免计算机过载(内存或磁盘问题),因为它会限制并行编译的数量。</li>
+</ul>
-<p><strong>如果您的计算机在编译期间无响应,或者如果 Jack 编译因“Out of memory error”(内存不足错误)而失败</strong></p>
+<p>如果没有任何编译工作,在空闲一段时间之后,Jack 服务器会自行关闭。它使用 localhost 接口上的两个 TCP 端口,因此无法从外部访问。您可以通过修改 <code>$HOME/.jack</code> 文件来修改所有参数(并行编译的数量、超时、端口号等)。</p>
-<p>您可以通过修改<code> $HOME/.jack</code> 并将<code> SERVER_NB_COMPILE</code> 改为较低的值来减少同时进行的 Jack 编译的数量,以针对所遇到的问题予以改善。</p>
+<h3 id="home_jack_file">$HOME/.jack 文件</h3>
-<p><strong>如果您的编译因“Cannot launch background server”(无法启动后台服务器)而失败</strong></p>
-
-<p>最可能的原因是您的计算机上的 TCP 端口都被占用了。请尝试通过修改 <code>$HOME/.jack </code>(<code>SERVER_PORT_SERVICE</code> 和 <code>SERVER_PORT_ADMIN</code> 变量)进行更改。</p>
-
-<p>如果问题没有解决,请报告此问题并附上您的编译日志和 Jack 服务器日志(请参阅下文中的“查找 Jack 日志”,了解从何处找到服务器日志文件)。要解决这种情况,请通过修改 <code>$HOME/.jack</code> 并将 <code>SERVER</code> 更改为 false 来停用 jack 编译服务器。遗憾的是,这将大大减慢您的编译速度,并可能强制您使用加载控制(<code>make</code> 的选项“<code>-l</code>”)启动 <code>make -j</code>。</p>
-
-<p><strong>如果您的编译卡住了,没有任何进展</strong></p>
-
-<p>请报告此问题,并向我们提供以下附加信息(如果可能的话):</p>
+<p><code>$HOME/.jack</code> 文件包含以下针对 Jack 服务器变量的设置,采用纯 bash 语法:</p>
<ul>
- <li>卡住时所在的命令行。
- </li><li>此命令行的输出。
- </li><li>运行 <code>jack-admin server-stat</code> 的结果。
- </li><li><code>$HOME/.jack</code> 文件。
- </li><li>服务器日志(已转储服务器状态)的内容。要获取日志内容,请执行以下操作:<ul>
- <li>通过运行 <code>jack-admin list-server</code> 查找 Jack 后台服务器进程。
- </li><li>向此服务器发送 <code>kill -3</code> 命令,将其状态转储到日志文件中。
- </li><li>要找到该服务器日志文件,请参阅下文中的“查找 Jack 日志”。
- </li></ul>
- </li><li>运行 <code>ls -lR $TMPDIR/jack-$USER.</code> 的结果。
- </li><li>运行 <code>ps j -U $USER.</code> 的结果。
-</li></ul>
+<li><code>SERVER=true</code>:启用 Jack 的服务器功能。</li>
+<li><code>SERVER_PORT_SERVICE=8072</code>:设置该服务器上用于编译的 TCP 端口号。</li>
+<li><code>SERVER_PORT_ADMIN=8073</code>:设置该服务器上用于管理的 TCP 端口号。</li>
+<li><code>SERVER_COUNT=1</code>:未使用。
+</li><li><code>SERVER_NB_COMPILE=4</code>:设置允许的最大并行编译数量。</li>
+<li><code>SERVER_TIMEOUT=60</code>:设置无编译工作时服务器在自行关闭之前必须等待的空闲秒数。</li>
+<li><code>SERVER_LOG=${SERVER_LOG:=$SERVER_DIR/jack-$SERVER_PORT_SERVICE.log}</code>:设置服务器日志写入到的文件。默认情况下,此变量可被环境变量重载。</li>
+<li><code>JACK_VM_COMMAND=${JACK_VM_COMMAND:=java}</code>:设置用于在主机上启动 JVM 的默认命令。默认情况下,此变量可被环境变量重载。</li>
+</ul>
+
+<h3 id="jack_troubleshooting">Jack 编译问题排查</h3>
-<p>您应该能够通过停止 Jack 后台服务器(使用 <code>jack-admin kill-server</code>),然后移除临时目录(<code>/tmp</code> 或 <code>$TMPDIR</code>)的 <code>jack-$USER</code> 中包含的临时目录来解决卡住的情况。</p>
-
-<p><strong>如果您有任何其他问题</strong></p>
-
-<p>要报告错误或请求功能,请使用我们的公开问题跟踪工具(位于 <a href="http://b.android.com">http://b.android.com</a> 上),以及 <a href="https://code.google.com/p/android/issues/entry?template=Jack%20bug%20report">Jack 工具错误报告</a>或 <a href="https://code.google.com/p/android/issues/entry?template=Jack%20feature%20request">Jack 工具功能请求</a>模板。请在错误报告中附上 Jack 日志。</p>
<table>
- <tbody><tr>
- <td><strong>查找 Jack 日志</strong>
+<tbody><tr>
+<th>问题</th>
+<th>措施</th>
+</tr>
+<tr>
+<td>您的计算机在编译期间无响应,或者 Jack 编译因“Out of memory error”(内存不足错误)而失败</td>
+<td>您可以通过修改 <code>$HOME/.jack</code> 并将 <code>SERVER_NB_COMPILE</code> 改为较低的值来减少同时进行的 Jack 编译的数量,从而改善这种情况。</td>
+</tr>
+<tr>
+<td>编译因“Cannot launch background server”(无法启动后台服务器)而失败</td>
+<td>最可能的原因是您计算机上的 TCP 端口都被占用了。您可以通过修改 <code>$HOME/.jack</code>(<code>SERVER_PORT_SERVICE</code> 和 <code>SERVER_PORT_ADMIN</code> 变量)来更改端口。
+
+<br /><br />如果上述方法无法解决问题,请报告该错误(务必附上您的编译日志和 <a href="#jack_log">Jack 服务器日志</a>)。要解决这种情况,请通过修改 <code>$HOME/.jack</code> 并将 <code>SERVER</code> 更改为 false 来停用 Jack 编译服务器。遗憾的是,这将大大降低编译速度,并可能会迫使您使用加载控制(<code>make</code> 的选项 <code>-l</code> )启动 <code>make -j</code>。
+</td>
+</tr>
+<tr>
+<td>编译卡住了,没有任何进展</td>
+<td>报告并提供以下信息(如果可能):
+<br />
<ul>
- <li>如果您曾使用 dist 目标运行了 Make 命令,则 Jack 日志位于 <code>$ANDROID_BUILD_TOP/out/dist/logs/jack-server.log</code>
- </li><li>如果没有,则您可以通过运行 <code>jack-admin server-log</code> 找到该日志
-</li></ul>
+<li>卡住时所在的命令行。</li>
+<li>此命令行的输出。</li>
+<li>执行 <code>jack-admin server-stat</code> 获得的结果。</li>
+<li><code>$HOME/.jack</code> 文件。</li>
+<li><a href="#jack_log">Jack 服务器日志</a>(已转储服务器状态)的内容。要获取服务器日志,请执行以下操作:
+<ul>
+ <li>通过运行 <code>jack-admin list-server</code> 查找 Jack 后台服务器进程。</li>
+ <li>向该服务器发送 <code>kill -3</code> 命令,将其状态转储到日志文件中。</li>
+ </ul>
+</li>
+<li>执行 <code>ls -lR $TMPDIR/jack-$USER</code> 获得的结果。</li>
+<li>运行 <code>ps j -U $USER</code> 获得的结果。</li>
+</ul>
+
+要解决这种情况,请使用 <code>jack-admin kill-server</code> 停止 Jack 后台服务器,然后移除临时目录(<code>/tmp</code> 或 <code>$TMPDIR</code>)的 <code>jack-$USER</code> 中包含的临时目录。
</td>
- </tr>
+</tr>
+<tr>
+<td>其他问题</td>
+<td>要报告错误或请求功能,请使用 <a href="http://b.android.com" class="external">http://b.android.com</a> 中的公开问题跟踪工具。使用 <a href="https://code.google.com/p/android/issues/entry?template=Jack%20bug%20report" class="external">Jack 工具错误报告</a>或 <a href="https://code.google.com/p/android/issues/entry?template=Jack%20feature%20request" class="external">Jack 工具功能请求</a>模板,并记得将 Jack 日志附到错误报告中。</td>
+</tr>
</tbody></table>
-<p>对于可重现的 Jack 错误,您可以通过设置一个变量来获取更详细的日志,如下所示:</p>
+<h3 id="jack_log">查找 Jack 日志</h3>
+如果您曾针对 dist 目标运行 <code>make</code> 命令,则 Jack 日志位于 <code>$ANDROID_BUILD_TOP/out/dist/logs/jack-server.log</code> 中。如果没有,则您可以通过运行 <code>jack-admin server-log</code> 找到该日志。对于可重现的 Jack 错误,您可以通过设置以下变量来获取更详细的日志:<p></p>
-<pre class="prettyprint">
-$ export ANDROID_JACK_EXTRA_ARGS="--verbose debug --sanity-checks on -D
-sched.runner=single-threaded"
+<pre class="devsite-terminal devsite-click-to-copy">
+export ANDROID_JACK_EXTRA_ARGS="--verbose debug --sanity-checks on -D sched.runner=single-threaded"
</pre>
-<p>然后使用标准 Makefile 命令编译树或您的项目,并附上其标准输出和错误。</p>
+<p>使用标准 Makefile 命令编译源代码树(或您的项目),并附上标准输出和错误。要移除详细的编译日志,请运行以下命令:</p>
-<p>要移除详细的编译日志,请使用以下命令:</p>
-
-<pre class="prettyprint">
-$ unset ANDROID_JACK_EXTRA_ARGS
+<pre class="devsite-terminal devsite-click-to-copy">
+unset ANDROID_JACK_EXTRA_ARGS
</pre>
<h3 id="jack_limitations">Jack 的使用限制</h3>
<ul>
- <li>Jack 服务器默认为单用户模式,因此一台计算机上只能有一位用户使用。如果有多个用户要使用,请为每位用户选择不同的端口号,并相应调整 SERVER_NB_COMPILE。您还可以通过在 $HOME/.jack 中设置 SERVER=false 来停用 Jack 服务器。
- </li><li>当前的 vm-tests-tf 集成方案会导致 CTS 编译速度较慢。
- </li><li>不支持 JaCoCo 等字节码处理工具。
-</li></ul>
+<li>默认情况下,Jack 服务器为单用户模式,一台计算机上只能有一位用户使用。要支持更多用户,请为每位用户选择不同的端口号,并相应地调整 <code>SERVER_NB_COMPILE</code>。您还可以通过在 <code>$HOME/.jack</code> 中设置 <code>SERVER=false</code> 来停用 Jack 服务器。</li>
+<li>当前的 <code>vm-tests-tf</code> 集成方案会导致 CTS 编译速度较慢。
+</li><li>不支持字节码处理工具(如 JaCoCo)。</li>
+</ul>
-<h2 id="using_jack_features">使用 Jack 功能</h2>
+<h2 id="using_jack_features">使用 Jack</h2>
-<p>Jack 支持 Java 编程语言 1.7,并集成了下面列出的额外功能。</p>
+<p>Jack 支持 Java 编程语言 1.7,并集成了下述附加功能。</p>
<h3 id="predexing">dex 预处理</h3>
-<p>在生成 Jack 库文件时,系统也会生成该库的 .dex 文件并将其作为 dex 预处理文件存储在 .jack 库文件中。在进行编译时,Jack 会重复使用每个库的 dex 预处理文件。</p>
-
-<p>所有库均经过 dex 预处理。</p>
+<p>在生成 Jack 库文件时,系统会生成该库的 .dex 文件并将其作为 dex 预处理文件存储在 .jack 库文件中。在进行编译时,Jack 会重复使用每个库中的 dex 预处理文件。所有库均经过 dex 预处理:</p>
-<img src="/images/pre-dex.png" height="75%" width="75%" alt="包含 dex 预处理文件的 Jack 库"/>
-<p class="img-caption"><strong>图 4. </strong>包含 dex 预处理文件的 Jack 库</p>
+<img src="./images/jack_predex.png" alt="包含 dex 预处理文件的 Jack 库"/>
+<figcaption><strong>图 4.</strong> 包含 dex 预处理文件的 Jack 库。</figcaption>
-<h4 id="limitations">使用限制</h4>
-
-<p>目前,如果在编译过程中使用了压缩/混淆/重新打包功能,则 Jack 不会重复使用库的 dex 预处理文件。</p>
+<p>如果在编译过程中使用了压缩、混淆或重新打包功能,则 Jack 不会重复使用库的 dex 预处理文件。</p>
<h3 id="incremental_compilation">增量编译</h3>
<p>增量编译指的是,仅重新编译自上次编译后出现过更改的组件及其依赖项。当只有少数组件出现过更改时,进行增量编译可能比完整编译快得多。</p>
-<h4 id="limitations">使用限制</h4>
-
-<p>当压缩、混淆、重新打包或对旧版 multi-dex 启用后,增量编译会被停用。
+<p>增量编译默认处于未启用状态(当压缩、混淆、重新打包或旧版多 dex 处理功能启用后,增量编译会自动被停用)。要启用增量编译,请将以下行添加到您要进行增量编译的项目的 <code>Android.mk</code> 文件中:</p>
-Benny: 如何理解 multi-dex legacy</p>
+<pre class="devsite-click-to-copy">LOCAL_JACK_ENABLED := incremental</pre>
-<h4 id="enabling_incremental_builds">启用增量编译</h4>
-
-<p>目前,增量编译默认处于未启用状态。要启用增量编译,请将以下行内容添加到您要进行增量编译的项目的 Android.mk 文件中:</p>
-
-<pre class="prettyprint">
-LOCAL_JACK_ENABLED := incremental
-</pre>
-
-<p class="note"><strong>注意</strong>:首次使用 Jack 编译项目时,如果某些依赖项未编译,请使用 <code>mma</code> 进行编译,之后您可以使用标准编译命令。</p>
+<aside class="note"><strong>注意</strong>:首次使用 Jack 编译项目时,如果某些依赖项未编译,请使用 <code>mma</code> 对其进行编译,之后您可以使用标准编译命令。</aside>
<h3 id="shrinking_and_obfuscation">压缩和混淆</h3>
-<p>Jack 支持压缩和混淆,并使用 proguard 配置文件来实现压缩和混淆功能。以下是支持的选项和忽略的选项:</p>
-
-<h4 id="supported_common_options">支持的常用选项</h4>
+<p>Jack 使用 proguard 配置文件来实现压缩和混淆功能。</p>
<p>常用选项包括:</p>
@@ -228,16 +192,12 @@ LOCAL_JACK_ENABLED := incremental
</li><li> <code>-printseeds</code>
</li></ul>
-<h4 id="supported_shrinking_options">支持的压缩选项</h4>
-
<p>压缩选项包括:</p>
<ul>
- <li> <code>-dontshrink</code>
+ <li><code>-dontshrink</code>
</li></ul>
-<h4 id="supported_obfuscation_options">支持的混淆选项</h4>
-
<p>混淆选项包括:</p>
<ul>
@@ -256,8 +216,6 @@ LOCAL_JACK_ENABLED := incremental
</li><li> <code>-adaptclassstrings</code>
</li></ul>
-<h4 id="ignored_options">忽略的选项</h4>
-
<p>忽略的选项包括:</p>
<ul>
@@ -286,18 +244,14 @@ LOCAL_JACK_ENABLED := incremental
</li><li> <code>-dump</code>
</li></ul>
-<p class="note"><strong>注意</strong>:其他选项会引发错误。</p>
+<aside class="note"><strong>注意</strong>:其他选项会引发错误。</aside>
<h3 id="repackaging">重新打包</h3>
-<p>Jack 使用 jarjar 配置文件进行重新打包。</p>
-
-<p class="note"><strong>注意</strong>:Jack 与“rule”规则类型兼容,但与“zap”或“keep”规则类型不兼容。如果您需要使用“zap”或“keep”规则类型,请提交一项功能请求,并在其中说明您在应用中如何使用该功能。</p>
-
-<h3 id="multidex_support">多 dex 支持</h3>
+<p>Jack 使用 jarjar 配置文件来进行重新打包。虽然 Jack 与“rule”规则类型兼容,但与“zap”或“keep”规则类型不兼容。如果您需要使用“zap”或“keep”规则类型,请提交功能请求,并在其中说明您在应用中如何使用该功能。</p>
-<p>由于 dex 文件的方法数上限为 65K,因此方法数超过 65K 的应用必须拆分成多个 dex 文件(要详细了解多 dex,请参阅<a href="http://developer.android.com/tools/building/multidex.html">构建方法数超过 65K 的应用</a>)。</p>
+<h3 id="multidex_support">多 dex 处理支持</h3>
-<p>Jack 支持本地多 dex 和旧版多 dex。</p>
+<p>Jack 支持本地多 dex 处理和旧版多 dex 处理。由于 dex 文件的方法数上限为 65K,因此方法数超过 65K 的应用必须拆分成多个 dex 文件。有关详情,请参阅<a href="http://developer.android.com/tools/building/multidex.html" class="external">构建方法数超过 65K 的应用</a>。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/known-issues.html b/zh-cn/source/known-issues.html
index 865a64af..06ce270d 100644
--- a/zh-cn/source/known-issues.html
+++ b/zh-cn/source/known-issues.html
@@ -1,5 +1,5 @@
<html devsite><head>
- <title>已知问题</title>
+ <title>源代码同步问题</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
@@ -20,100 +20,37 @@
limitations under the License.
-->
-<p>尽管我们一直万分谨慎,但 Android 源代码有时还是会出现一些小问题。本页记录了使用 Android 源代码方面的已知问题。</p>
+ <p>尽管我们一直万分谨慎,但 Android 源代码有时还是会出现一些小问题。本页详细介绍了您在尝试同步 Android 源代码时可能会遇到的一些已知问题。
-<h2 id="build-issues">编译问题</h2>
-
-<h3 id="missing-cellbroadcastreceiver">在针对 toro 进行编译时缺少 CellBroadcastReceiver</h3>
-<p><strong>症状</strong></p>在针对 toro 进行 AOSP 编译时(最高为 Jelly Bean 4.2.1),CellBroadcastReceiver 无法添加到系统中。<p></p>
-
-<p><strong>原因:</strong></p><code>vendor/samsung/toro/device-partial.mk</code> 中存在拼写错误,<code>PRODUCT_PACKAGES</code> 将其中的 K 替换成了 H。<p><strong>解决方法</strong>:使用适用于 4.2.2 的最新程序包,或手动更正该拼写错误。</p>
-
-<h3 id="missing-cts-native-xml-generator">缺少 CTS 本机 XML 生成器</h3>
-<p><strong>症状</strong>:在对 IceCreamSandwich 及更高版本进行的一些编译中,编译初期显示以下警告:<code>/bin/bash: line 0: cd: cts/tools/cts-native-xml-generator/src/res: No
-such file or directory</code></p>
-<p><strong>原因</strong>:有些 Makefile 引用该路径,但该路径并不存在。</p>
-<p><strong>解决方法</strong>:无。这是一个无害的警告。</p>
-<h3 id="black-gingerbread-emulator">黑屏 Gingerbread 模拟器</h3>
-<p><strong>症状</strong>:从 Gingerbread 分支直接编译的模拟器无法启动,一直卡在黑屏状态。</p>
-<p><strong>原因</strong>:Gingerbread 分支使用的是 R7 版本的模拟器,该模拟器并不具备运行最近推出的一些 Gingerbread 版本所需的所有功能。</p>
-<p><strong>解决方法</strong>:使用 R12 版本的模拟器,以及与这些工具匹配的较新内核。无需进行清除编译。</p>
-<pre><code>$ repo forall platform/external/qemu -c git checkout aosp/tools_r12
-$ make
-$ emulator -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7
-</code></pre>
-<h3 id="emulator-built-on-macos-107-lion-doesnt-work">在 MacOS 10.7 Lion 中编译的模拟器无法正常工作。</h3>
-<p><strong>症状</strong>:在 MacOS 10.7 Lion 和/或 XCode 4.x 中编译的模拟器(所有版本)无法启动。</p>
-<p><strong>原因</strong>:在开发环境中进行的某些更改导致系统在对模拟器进行编译时,采用的方式使模拟器无法正常工作。</p>
-<p><strong>解决方法</strong>:使用 SDK 中的模拟器二进制文件,该文件是通过 XCode 3 在 MacOS 10.6 中编译的,可在 MacOS 10.7 中正常工作。</p>
-
-<h3 id="partial-and-emulator-builds"><code>WITH_DEXPREOPT=true</code> 和模拟器编译。</h3>
-<p><strong>症状</strong>:在模拟器编译期间进行部分编译或同步(使系统没有任何依赖关系)时,生成的版本无法正常工作。</p>
-<p><strong>原因</strong>:默认情况下,所有模拟器编译操作现在都会在编译时运行 Dex 优化,这就需要遵循所有依赖关系,以便在框架每次发生更改时都重新优化应用。</p>
-<p><strong>解决方法</strong>:通过 <code>export WITH_DEXPREOPT=false</code> 在本地停用 Dex 优化,通过 <code>make installclean</code> 删除现有的已优化版本,然后运行完整编译以重新生成未优化的版本。完成上述操作后,部分编译将会正常工作。</p>
-<h3 id="permission-denied-during-builds">编译期间提示“权限遭拒”。</h3>
-<p><strong>症状</strong>:所有编译都会失败,并且系统会提示“权限遭拒”,可能还会显示防病毒警告。</p>
-<p><strong>原因</strong>:某些防病毒程序将 Android 源代码树中的一些源文件错误地识别为包含病毒的文件。</p>
-<p><strong>解决方法</strong>:确认实际上并未包含病毒之后,在 Android 树中停用防病毒程序。这还有助于减少编译次数。</p>
-<h3 id="build-errors-related-to-using-the-wrong-compiler">与使用错误编译器相关的编译错误。</h3>
-<p><strong>症状</strong>:编译会失败,而且症状各式各样。其中一种症状是 <code>cc1: error: unrecognized command line option "-m32"</code></p>
-<p><strong>原因</strong>:Android 编译系统使用路径中的默认编译器,并假设它是用于生成在主机上运行的二进制文件的合适编译器。其他情况(例如:使用 Android NDK,或编译内核)导致默认编译器不是主机编译器。</p>
-<p><strong>解决方法</strong>:使用一个“干净的”shell,其中没有任何先前操作可能更换了默认编译器。</p>
-<h3 id="build-errors-caused-by-non-default-tool-settings">由非默认工具设置导致的编译错误。</h3>
-<p><strong>症状</strong>:编译会失败,而且症状各式各样,并且系统可能会提示缺少文件或文件格式不正确。其中一种症状是 <code>member [...] in archive is not an object</code>。</p>
-<p><strong>原因</strong>:Android 编译系统倾向于使用多种主机工具并依赖其默认行为。有些设置会更改这些工具的行为,导致其行为方式干扰编译系统。导致此类问题的已知变量是 <code>CDPATH</code> 和 <code>GREP_OPTIONS</code>。</p>
-<p><strong>解决方法</strong>:在自定义设置尽可能少的环境中编译 Android。</p>
-<h3 id="build-error-with-40x-and-earlier-on-macos-107">在 MacOS 10.7 中编译 4.0.x 及更低版本时出现的错误。</h3>
-<p><strong>症状</strong>:在 MacOS 10.7 中编译 IceCreamSandwich 4.0.x(及更低版本)时会失败,并显示类似以下的错误:<code>Undefined symbols for architecture i386: "_SDL_Init"</code></p>
-<p><strong>原因</strong>:4.0.x 与 MacOS 10.7 不兼容。</p>
-<p><strong>解决方法</strong>:改用 MacOS 10.6,或使用可在 MacOS 10.7 中编译的 master 分支。</p>
-<pre><code>$ repo init -b master
-$ repo sync
-</code></pre>
-<h3 id="build-error-on-macos-with-xcode-43">在 MacOS 中使用 XCode 4.3 进行编译时出现的错误。</h3>
-<p><strong>症状</strong>:使用 XCode 4.3 时,所有编译都会失败。</p>
-<p><strong>原因</strong>:XCode 4.3 将默认编译器从 gcc 切换成了 llvm,而 llvm 拒绝接受之前 gcc 会接受的代码。</p>
-<p><strong>解决方法</strong>:使用 XCode 4.2。</p>
-<h3 id="build-error-with-40x-and-earlier-on-ubuntu-1110">在 Ubuntu 11.10 中编译 4.0.x 及更低版本时出现的错误。</h3>
-<p><strong>症状</strong>:在 Ubuntu 11.10 及更高版本中编译 IceCreamSandwich 4.0.x(及更低版本)时会失败,并显示类似以下的错误:<code>&lt;command-line&gt;:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]</code></p>
-<p><strong>原因</strong>:Ubuntu 11.10 使用的 gcc 版本中默认已定义该符号,而 Android 也会定义该符号,从而导致冲突。</p>
-<p><strong>解决方法</strong>:改用 Ubuntu 10.04,或使用可在 Ubuntu 11.10 及更高版本中编译的 master 分支。</p>
-<pre><code>$ repo init -b master
-$ repo sync
-</code></pre>
-
-<h2 id="source-sync">源代码同步问题</h2><h2>
-
-</h2><h3 id="difficulties-syncing-the-source-code-proxy-issues">同步源代码时遇到的问题(代理问题)。</h3>
+</p><h2 id="difficulties-syncing-the-source-code-proxy-issues">
+同步源代码时遇到的问题(代理问题)</h2>
<p><strong>症状</strong>:<code>repo init</code> 或 <code>repo sync</code> 失败,并显示 HTTP 错误,通常为 403 或 500。</p>
<p><strong>原因</strong>:有很多可能的原因,大多数情况下都与 HTTP 代理有关,这些代理无法顺利传输大量数据。</p>
<p><strong>解决方法</strong>:虽然还没有通用的解决方法,但有人报告说使用 Python 2.7 以及明确使用 <code>repo sync -j1</code> 可以改善某些用户的情况。</p>
-<h3 id="difficulties-syncing-the-source-tree-virtualbox-ethernet-issues">同步源代码树时遇到的问题(VirtualBox 以太网问题)。</h3>
-<p><strong>症状</strong>:在某些 VirtualBox 安装过程中运行 <code>repo sync</code> 时,进程挂起或失败,而且症状各式各样。其中一种症状是 <code>DownloadError: HTTP 500 (Internal Server Error: Server got itself in trouble)</code>。</p>
-<p><strong>原因</strong>:VirtualBox 的默认网络行为是使用 NAT(网络地址转换)将客户系统连接到网络。在执行 repo sync 时的大量网络活动会触发 NAT 代码中的某些临界情况。</p>
-<p><strong>解决方法</strong>:将 VirtualBox 配置为使用桥接网络,而非 NAT。</p>
-<h3 id="difficulties-syncing-the-source-tree-dns-issues">同步源代码树时遇到的问题(DNS 问题)。</h3>
+
+<h2 id="difficulties-syncing-the-source-tree-dns-issues">
+同步源代码树时遇到的问题(DNS 问题)</h2>
<p><strong>症状</strong>:在运行 <code>repo sync</code> 时进程失败,并显示与无法识别主机名相关的各种错误。其中一种错误是 <code>&lt;urlopen error [Errno -2] Name or service not known&gt;</code>。</p>
<p><strong>原因</strong>:有些 DNS 系统难以应对同步源代码树时涉及的大量查询(在最糟糕的情况下,可能会有数百条查询请求)。</p>
<p><strong>解决方法</strong>:手动解析相关主机名,并在本地对解析结果进行硬编码。</p>
<p>您可以使用 <code>nslookup</code> 命令解析主机名,该命令将为每个主机名指定一个数字 IP 地址(通常是在输出的“Address”(地址)部分)。</p>
-<pre><code>$ nslookup googlesource.com
-$ nslookup android.googlesource.com
-</code></pre>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">nslookup googlesource.com</code>
+<code class="devsite-terminal">nslookup android.googlesource.com</code>
+</pre>
<p>然后,您可以在本地对它们进行硬编码,方法是修改 <code>/etc/hosts</code>,在该文件中添加两行内容,形式如下:</p>
-<pre><code>aaa.bbb.ccc.ddd googlesource.com
+<pre class="devsite-click-to-copy">
+aaa.bbb.ccc.ddd googlesource.com
eee.fff.ggg.hhh android.googlesource.com
-</code></pre>
+</pre>
<p>请注意,这种方法只适用于服务器的地址不会更改的情况;如果服务器的地址发生更改,导致您无法连接,那么您必须重新解析这些主机名,并相应地修改 <code>etc/hosts</code>。</p>
-<h3 id="difficulties-syncing-the-source-tree-tcp-issues">同步源代码树时遇到的问题(TCP 问题)。</h3>
+
+<h2 id="difficulties-syncing-the-source-tree-tcp-issues">
+同步源代码树时遇到的问题(TCP 问题)</h2>
<p><strong>症状</strong>:在同步时 <code>repo sync</code> 挂起,通常是在同步操作完成 99% 时出现这种情况。</p>
<p><strong>原因</strong>:TCP/IP 堆栈中的某些设置在有些网络环境中会导致出现问题,使得 <code>repo sync</code> 既无法完成,也不会失败。</p>
-<p><strong>解决方法</strong>:在 Linux 中,请运行 <code>sysctl -w net.ipv4.tcp_window_scaling=0</code>。在 MacOS 中,请在网络设置部分停用 rfc1323 扩展程序。</p>
-
-<h2 id="runtime-issues">运行时问题</h2>
-<h3 id="camera-and-gps-dont-work-on-galaxy-nexus">摄像头和 GPS 在 Galaxy Nexus 上无法正常工作。</h3>
-<p><strong>症状</strong>:摄像头和 GPS 在 Galaxy Nexus 上无法正常工作。比如,摄像头应用一启动便会崩溃。</p>
-<p><strong>原因</strong>:Android 开放源代码项目中未提供这些硬件外围设备所需的专有库。</p>
-<p><strong>解决方法</strong>:无。</p>
+<p><strong>解决方法</strong>:在 Linux 中,请输入以下命令:</p>
+<pre class="devsite-terminal devsite-click-to-copy">sysctl -w net.ipv4.tcp_window_scaling=0</pre>
+<p>在 MacOS 中,请在网络设置部分停用 rfc1323 扩展程序。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/life-of-a-bug.html b/zh-cn/source/life-of-a-bug.html
index cfd960dd..a7009f44 100644
--- a/zh-cn/source/life-of-a-bug.html
+++ b/zh-cn/source/life-of-a-bug.html
@@ -20,109 +20,69 @@
limitations under the License.
-->
-<p>Android 开放源代码项目提供了一个公开问题跟踪工具,您可以在其中就 Android 核心软件堆栈报告错误及请求功能。(要详细了解此问题跟踪工具,请参阅<a href="report-bugs.html">报告错误</a>页面。)我们非常欢迎您报告错误(谢谢!),但在提交错误报告后会发生什么呢?本页将说明错误的生命周期。</p>
+<p>Android 开放源代码项目维护着一个公开的问题跟踪器,您可以在其中针对 Android 核心软件堆栈报告错误及请求功能。(要详细了解此问题跟踪器,请参阅<a href="report-bugs.html">报告错误</a>页面。)报告错误意义重大(谢谢!),但在您提交错误报告后它们会经历些什么?本页将介绍错误的生命周期。</p>
-<p>*请注意:Android 开放源代码项目 (AOSP) 问题跟踪工具仅用于与 Android 核心软件堆栈相关的错误报告和功能请求,同时也是一个供开放源代码社区使用的技术工具。</p>
+<p class="note">Android 开放源代码项目 (AOSP) 问题跟踪器仅适用于与 Android 核心软件堆栈相关的错误和功能请求,是一款面向开放源代码社区的技术工具。</p>
-<p>但它不是一个客户支持论坛。您可以在 <a href="http://support.google.com/nexus">Google 的 Nexus 支持网站</a>上找到关于 Nexus 设备的支持信息。其他设备的支持由设备制造商或销售这些设备的运营商提供。</p>
+<p>它不是一个客户支持论坛。要获取支持信息,请参阅 <a href="https://support.google.com/nexus">Nexus</a> 和 <a href="https://support.google.com/pixelphone">Pixel</a> 帮助中心。对于其他设备,则由设备制造商或销售这些设备的运营商提供支持。</p>
-<p>通过 <a href="http://support.google.com/">Google 的支持网站</a>可以找到关于 Google 应用的支持信息。涉及第三方应用的支持由各自的应用开发者提供,例如,您可以通过 Google Play 上提供的联系信息与他们联系。</p>
+<p>通过 <a href="http://support.google.com/">Google 的支持网站</a>,可以获得 Google 应用方面的支持。对于第三方应用,则由每个应用的开发者提供支持,例如,您可以通过 Google Play 上提供的联系信息与他们联系。</p>
<p>下面简要说明了错误的生命周期:</p>
<ol>
-<li>
-<p>用户提交一个错误,该错误的状态将为“New”(新)。</p>
-</li>
-<li>
-<p>AOSP 维护人员定期审核错误并进行分类。错误将划分为 4 个类别中的一个:“新”、“Open”(待解决)、“No-Action”(无需处理)或“Resolved”(已解决)。</p>
-</li>
-<li>
-<p>每个类别都包括多种状态,可提供有关问题处理的更多详情。</p>
-</li>
-<li>
-<p>“已解决”类别中的错误最终会在未来版本的 Android 软件中予以修复。</p>
-</li>
+<li>用户提交一个错误,该错误的状态将为“New”(新)。</li>
+<li>AOSP 维护人员定期审核错误并将其进行分类。错误将被划分为以下 4 个类别之一:“New”(新)、“Open”(待解决)、“No-Action”(无需处理)或“Resolved”(已解决)。<em></em></li>
+<li>每个类别都包括多种状态,这些状态能够提供有关问题处理情况的更多详细信息。</li>
+<li>标记为“已解决”的错误最终将在未来版本的 Android 软件中予以修复。</li>
</ol>
-<h2 id="bucket-details">类别详情</h2>
-<p>以下是关于每个类别、其含义及处理方式的更多信息。</p>
+
+<h2 id="bucket-details">类别详细信息</h2>
+<p>
+我们使用问题跟踪器中的 <strong>Status(状态)</strong>字段来指定问题处于解决过程中的什么状态。这与<a href="https://developers.google.com/issue-tracker/concepts/issues#status">问题跟踪器文档</a>中指定的定义一致。
+</p>
<h3 id="new-issues">“新”问题</h3>
-<p>“新”问题包括尚未进行任何处理的错误报告,具有以下两种状态:</p>
+<p>
+“新”问题包括尚未进行任何处理的错误报告,具有以下两种状态:
+</p>
<ul>
-<li>
-<p><em></em>New(新):
- 错误报告尚未分类(即由 AOSP 维护人员审核。)</p>
-</li>
-<li>
-<p><em></em>NeedsInfo(需要信息):
- 错误报告的信息不充分,无法予以处理。报告错误的用户需要提供更多详细信息,错误才可以进行分类。如果在规定时间内未提供新信息,该错误默认可能会被关闭,变为“无需处理”类别下的某种状态。</p>
-</li>
+ <li><strong>New(新)</strong>:错误报告尚未被分类(即 AOSP 维护人员尚未审核。)</li>
+ <li><strong>New + Hotlist:NeedsInfo(新 + Hotlist:需要信息)</strong>:错误报告中的信息不充分,我们无法予以处理。报告错误的人员需要提供更多详细信息,然后我们才能对其进行分类。如果报告错误的人员在规定的时间内未提供新信息,相应错误默认可能会被关闭,变为“无需处理”类别下的某种状态。</li>
</ul>
-<h3 id="open-issues">“待解决”问题</h3>
-<p>此类别包含需要处理但仍未解决的错误(正在等待我们对源代码进行更改)。</p>
+<h3 id="open-issues">“待解决”的问题</h3>
+<p>
+此类别包含需要处理但仍未解决的错误(正在等待我们对源代码进行更改)。
+</p>
<ul>
-<li>
-<p><em></em>Unassigned(未分配):
- 错误报告已被认定为细节充分、问题有效,但尚未分配给 AOSP 贡献者进行修复。</p>
-</li>
-<li>
-<p><em></em><em></em>Assigned(已分配):
- 与“未分配”类似,但错误实际上已分配给特定贡献者进行修复。</p>
-</li>
+ <li><strong>Assigned(已分配)</strong>:错误报告已被认定为细节充分、问题有效,且相应错误已被分配给特定贡献者进行评估和分析。</li>
+ <li><strong>Accepted(已接受)</strong>:被指派的人员已确认并已着手解决相应问题。</li>
</ul>
-<p><em></em><em></em>通常情况下,特定错误一开始会处于“未分配”状态并一直保持该状态,直到有人有意解决该错误,此时该错误会变成“已分配”状态。但请注意,我们并不保证一定会是这样,而错误从“未分配”直接变为“已解决”类别下的某种状态也是很常见的。<em></em></p>
-<p>一般来说,如果一个错误处于以上“待解决”类别下的某种状态,则表明 AOSP 团队已将其认定为有效问题,该错误很可能会获得贡献者的认可,从而得到高质量的修复。不过,我们无法保证及时修复任何特定版本的错误。</p>
-
-<h3 id="no-action-issues">“无需处理”问题</h3>
-<p>此类别包含由于某种原因而被认定为不需要任何处理措施的错误。</p>
+<p>
+通常情况下,错误一开始的状态为<strong>已分配</strong>且一直保持该状态,直到有人有意解决它,此时错误的状态会变为<strong>已接受</strong>。不过请注意,我们并不保证一定会是这样,而错误直接从<strong>已分配</strong>变为“已解决”类别下的某种状态也是很常见的。
+</p>
+<p>
+一般来说,如果错误处于“待解决”类别下的某种状态,则表明 AOSP 团队已将其认定为有效问题,并且贡献者贡献的高质量修复方案很可能会被接受。不过,我们无法保证及时修复任何特定版本的错误。
+</p>
+<h3 id="no-action-issues">“无需处理”的问题</h3>
+<p>
+此类别包含被视为不需要任何处理的错误。
+</p>
<ul>
-<li>
-<p><em></em>Spam(无关内容):
- 好心人士给我们送来一些美味的猪肉制品,但是很遗憾,我们并不需要。</p>
-</li>
-<li>
-<p><em></em>Duplicate(重复):
- 问题跟踪工具中已有相同的报告。类似报告将收到有关任何实际处理措施的消息。</p>
-</li>
-<li>
-<p><em></em>Unreproducible(不可重现):
- AOSP 贡献者尝试重现所描述的行为,但无法做到。有时,这意味着错误虽然有效但不常见或者难以重现,有时也意味着错误已在更高版本中予以修复。</p>
-</li>
-<li>
-<p><em></em><em></em>Obsolete(过时):
- 与“不可重现”类似,但可以合理认定错误确实存在于所报告的版本中,但已在更高版本中得以修复。</p>
-</li>
-<li>
-<p><em></em>WorkingAsIntended(正常情况):
- AOSP 维护人员已确定所描述的行为不是错误,而是正常情况。这种状态通常也称为“WAI”。</p>
-</li>
-<li>
-<p><em></em><em></em>Declined(遭拒):
- 除了通常用于功能请求(而非错误)的情况之外,其他与“正常情况”类似。也就是说,AOSP 维护人员已确定相应请求不会在 Android 中予以实现。</p>
-</li>
-<li>
-<p><em></em>NotEnoughInformation(缺少充分信息):报告没有提供充分的信息,导致维护人员无法采取任何处理措施。</p>
-</li>
-<li>
-<p><em></em>UserError(用户错误):报告是用户在使用 Android 时犯错而造成的结果,例如输入错误的密码导致无法连接到服务器。</p>
-</li>
-<li>
-<p><em></em>WrongForum(错误论坛):报告无法在 AOSP 中予以处理,通常是因为报告与定制设备或外部应用相关。</p>
-</li>
-<li>
-<p><em></em>Question(问题):用户误以为问题跟踪工具是帮助论坛而提出的问题。</p>
-</li>
+ <li><strong>Won't Fix (Not reproducible)(无法修复(不可重现))</strong>:AOSP 贡献者尝试重现所描述的行为,但无法做到。有时,这意味着错误虽然有效但不常见或难以重现,或因信息不充分而无法解决问题。</li>
+ <li><strong>Won't Fix (Intended behavior)(无法修复(正常情况))</strong>:AOSP 维护人员已确定所描述的行为不是错误,而是正常情况。这种状态通常也称为“正常情况”(WAI)。<em></em>如果是功能请求,则 AOSP 维护人员已确定在 Android 中将不会实现相应请求。</li>
+ <li><strong>Won't Fix (Obsolete)(无法修复(过时))</strong>:由于产品有所变化,相应问题已无关紧要。</li>
+ <li><strong>Won't Fix (Infeasible)(无法修复(不可行))</strong>:解决问题所需进行的更改不可能实现。该状态还用于表示报告的问题无法在 AOSP 中予以处理,通常是因为问题与定制设备或外部应用相关,或者报告者误认为此跟踪器是帮助论坛。</li>
+ <li><strong>Duplicate(重复)</strong>:问题跟踪器中已有相同的报告。如有任何实际处理措施,都将针对相同报告予以报告。</li>
</ul>
-<h3 id="resolved-issues">“已解决”问题</h3>
-<p>此类别包含已采取处理措施且现在被视为已解决的错误。</p>
+<h3 id="resolved-issues">“已解决”的问题</h3>
+<p>
+此类别包含已被处理且现在被视为已解决的错误。
+</p>
<ul>
-<li>
-<p><em></em>Released(已发布):此错误已修复,且修复方案已纳入一个正式版本中。在设置此状态的同时,我们也会尝试设置一个属性,说明错误在哪个版本中予以修复的。</p>
-</li>
-<li>
-<p><em></em>FutureRelease(未来版本):此错误已经在源代码树中予以修复(或功能已经实现),但修复方案尚未纳入正式版本中。</p>
-</li>
+ <li><strong>Fixed (verified)(已修复(已通过验证))</strong>:相应错误已被修复,且修复方案已被纳入到一个正式版本中。在设置此状态的同时,我们也会尝试设置一个属性,说明错误是在哪个版本中修复的。</li>
+ <li><strong>Fixed(已修复)</strong>:相应错误已经在源代码树中予以修复(或功能已经实现),但修复方案尚未被纳入到正式版本中。</li>
</ul>
<h2 id="other-stuff">其他事项</h2>
-<p>上述状态和生命周期是我们通常跟踪软件的方式。但是,Android 包含大量软件,相应地也会收到大量错误报告。因此,有时候错误并没有经过正式流程中的所有状态。虽然我们会尽量确保系统保持最新状态,但我们倾向于定期进行“错误清除”- 在此过程中,我们会检查数据库并进行更新。</p>
+<p>
+上述状态和生命周期是我们通常在尝试跟踪软件时采取的方式。不过,由于 Android 包含大量软件,相应地也会收到大量错误报告。因此,有时候错误并没有经过正式流程中的所有状态。虽然我们会尽量确保系统保持最新状态,但我们倾向于定期进行“错误清除”- 在此过程中,我们会检查数据库并进行更新。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/report-bugs.html b/zh-cn/source/report-bugs.html
index ddaf61ee..8cbe8cbc 100644
--- a/zh-cn/source/report-bugs.html
+++ b/zh-cn/source/report-bugs.html
@@ -19,35 +19,219 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<p>感谢您对 Android 的关注!您可以帮助我们改进 Android 的最佳方式之一就是向我们报告您发现的任何问题。</p>
-<p class="note"><strong>注意</strong>:对于安全漏洞,请使用 AOSP 错误跟踪工具<a href="https://code.google.com/p/android/issues/entry?template=Security%20bug%20report">安全错误报告</a>模板。如需了解详情,请参阅<a href="/security/overview/updates-resources.html#report-issues">报告安全问题</a>。</p>
-<p>下面说明了如何报告<strong>非安全</strong>方面的错误:</p>
-<ul>
-<li>
-<p><a href="https://code.google.com/p/android/issues/advsearch">搜索您的错误</a>,看看是否有人已报告过该错误。请记得在所有问题(而不仅仅是尚未解决的问题)中搜索,因为可能有用户已经报告过您的问题并且该问题已被关闭。要找到最热门的结果,请按收到的星数为结果排序。</p>
-</li>
-<li>
-<p>如果您找到了所遇到的问题并且该问题对您来说很重要,请为其加注星标!这样我们就知道要着重修复哪些错误。</p>
-</li>
-<li>
-<p>如果没有人报告过您的错误,请提交该错误。您可以使用以下模板之一:</p>
-<ul>
-<li>
-<p><a href="https://code.google.com/p/android/issues/entry?template=User%20bug%20report">您设备中的错误</a> - 如果您是一名用户并且要报告您自己设备中的错误,请使用此模板</p>
-</li>
-<li>
-<p><a href="https://code.google.com/p/android/issues/entry?template=Developer%20bug%20report">软件中的错误</a> - 如果您在开发应用的过程中发现错误,请使用此模板</p>
+<p>
+感谢您对 Android 的关注!您可以通过在 <a href="#bug-queues">Android 问题跟踪器</a>中提交问题和功能请求,来协助我们改进 Android。Android 问题跟踪器中会列出各个主题方面的待解决技术任务、与这些任务相关的信息,以及与这些任务的处理进度相关的信息,其中包括哪些任务可能会在短期内得到处理。
+</p>
+<p class="note">要详细了解我们为何改用问题跟踪器,请参阅<a href="http://android-developers.googleblog.com/2017/04/a-new-issue-tracker-for-our-aosp.html">这篇博文</a>。</p>
+<p>
+问题跟踪器不是一个客户支持论坛。要获取支持信息,请参阅 <a href="https://support.google.com/nexus">Nexus</a> 和 <a href="https://support.google.com/pixelphone">Pixel</a> 帮助中心。对于其他设备,则由设备制造商或销售这些设备的运营商提供支持。
+</p>
+<p>
+通过 <a href="http://support.google.com/">Google 的支持网站</a>,可以获得 Google 应用方面的支持。对于第三方应用,则由应用的开发者提供支持,例如,您可以通过 Google Play 上提供的联系信息与他们联系。要获取更多 Android 支持资源的列表,请参阅我们的<a href="/source/community">“社区”页面</a>。
+</p>
+<p>
+我们无法保证可以在任何特定版本中修复任何特定错误。要了解在您报告错误之后它们会经历些什么,请阅读<a href="/source/life-of-a-bug.html">错误的生命周期</a>。
+</p>
+<h2 id="filing-a-bug">提交错误</h2>
+<ol>
+<li><a href="https://issuetracker.google.com/issues?q=componentid:190923%2B">搜索您遇到的错误</a>,看看是否已有人报告过该错误。请记得在所有问题中搜索,而不仅仅是在待解决的问题中搜索,因为可能已有人报告过您遇到的问题并且该问题已被关闭。为了便于找到最热门的结果,请按星数对结果进行排序。</li>
+<li>如果您找到了自己遇到的问题,并且该问题对您来说很重要,请<a href="https://developers.google.com/issue-tracker/guides/subscribe#starring_an_issue">为其加注星标</a>!错误获得的星数有助于我们知道哪些错误最亟待修复。</li>
+<li>如果没有人报告过您遇到的错误,请提交该错误。先<a href="https://issuetracker.google.com/components">浏览以找到相应的组件</a>(如<a href="https://issuetracker.google.com/issues?q=componentid:192705">框架</a>或<a href="https://issuetracker.google.com/issues?q=componentid:192634">网络</a>),然后填写所提供的模板。您也可以从下面的表格中选择所需的错误队列。
+<p class="key-point">
+<strong>提示</strong>:有些组件包含子组件,如<strong>网络 &gt; 短信</strong>和<strong>框架 &gt; 存储</strong>。
+</p>
</li>
-<li>
-<p><a href="https://code.google.com/p/android/issues/entry?template=Feature%20request">功能请求</a> - 您可使用此模板提交您希望在未来的版本中看到的功能</p>
-</li>
-</ul>
-</li>
-</ul>
-<p>请注意,问题跟踪工具不是用户支持论坛。它列出了待解决的技术任务、这些任务的相关信息以及有关这些任务处理进度的信息,包括哪些任务在短期内可能得到处理。</p>
-<p>此问题跟踪工具仅限用于 Android 开放源代码项目。与零售设备(特别是 Nexus 之外的设备)相关的问题需要通过这些设备的支持渠道来报告。非 AOSP 应用的相关问题需要由这些应用的开发者报告;Google 应用也遵循此要求。</p>
-<p>请注意,我们无法保证可以在任何特定版本中修复任何特定错误。要了解在您报告错误之后会出现什么情况,请阅读<a href="life-of-a-bug.html">错误的生命周期</a>。</p>
-<p>一般情况下,请尽量提供详尽的错误信息。仅仅用一句话告诉我们某些方面存在问题通常不起任何作用,而且问题可能未经任何处理就会被关闭。您提供的详细信息越多,您的问题就越有可能得到解决。</p>
+<li>按照您针对的错误队列的说明,提供尽可能多的错误相关信息。只是说某些方面存在问题并没有多大帮助,而且问题可能未经任何处理就会被关闭。您提供的详细信息(如日志文件、重现步骤,甚至补丁程序集)越多,越有助于我们解决您的问题。</li>
+</ol>
+<h2 id="bug-queues">错误队列</h2>
+<p>
+Android 问题跟踪器包含多种子组件,这些子组件分属大量与 Android 相关的类别。安全、平台、Android 开发者工具、文档等都包含子组件。
+</p>
+
+<h3 id="security">安全</h3>
+<p>
+如果您在 Nexus 或 Pixel 设备中发现了影响 Android 或组件安全的问题,请遵循<a href="/security/overview/updates-resources#report-issues">此处</a>的说明。此外,您还可以就安全错误参加 <a href="https://www.google.com/about/appsecurity/android-rewards/">Android 安全漏洞奖励活动</a>。
+</p>
+<p>
+由于安全错误具有敏感性的特点,因此您无法浏览待解决的问题,而只能浏览已关闭或已公开的问题。
+</p>
+
+<table>
+ <tbody><tr>
+ <th>浏览错误</th>
+ <th>详细信息</th>
+ <th>提交错误</th>
+ </tr>
+ <tr>
+ <td>安全</td>
+ <td><a href="/security/overview/updates-resources#report-issues">Android 安全性详细信息</a></td>
+ <td><a href="https://www.google.com/appserve/security-bugs/m2/new">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+</tr></tbody></table>
+
+<h3 id="platform">平台</h3>
+<p>
+如果您发现了影响 Android 平台某个方面的问题,请在以下其中一个组件提交您的错误。
+</p>
+<p><a class="button button-primary" href="https://issuetracker.google.com/issues?q=componentid:(192786%20%7C%20192805%20%7C%20192705%20%7C%20192792%20%7C%20192644%20%7C%20192694%20%7C%20192710%20%7C%20192810%20%7C%20192634%20%7C%20192698%20%7C%20192706%20%7C%20192815%20%7C%20192715%20%7C%20192720%20%7C%20192711%20%7C%20192629%20%7C%20192643%20%7C%20192693%20%7C%20192639)">浏览所有平台问题</a></p>
+<table>
+ <tbody><tr>
+ <th>浏览错误</th>
+ <th>提交错误</th>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192629%2B">ART</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192629"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192693%2B">浏览器</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192693"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192639%2B">CTS</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192639"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192705%2B">框架</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192705"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192644%2B">GfxMedia</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192644"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:316045%2B">免安装应用</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=316045"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192694%2B">Jack</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192694"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192710%2B">Libcore</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192710"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192634%2B">网络</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192634"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:190951%2B">安全</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=190951"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192706%2B">系统</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192706"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192715%2B">文本</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192715"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192720%2B">Things</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192720"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192711%2B">Wear</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192711"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+</tbody></table>
+
+<h3 id="developer-tools">Android 开发者工具</h3>
+<p>
+如果您发现了影响某个 Android 开发者工具(如 Android Studio、SDK、模拟器、系统映像或支持库)的问题,请在以下其中一个组件提交错误。
+</p>
+<p>
+由于这些工具的要求各不相同,因此请阅读<a href="https://developer.android.com/studio/report-bugs.html">一般错误提交详细信息</a>,以及相应错误的链接中提供的详细信息。
+</p>
+
+<a class="button button-primary" href="http://issuetracker.google.com/issues?q=componentid:192633%2B">浏览所有开发者工具问题</a>
+<table>
+ <tbody><tr>
+ <th>浏览错误</th>
+ <th>详细信息</th>
+ <th>提交错误</th>
+ </tr>
+ <tr>
+ <td><a href="https://issuetracker.google.com/issues?q=componentid:192633%2B">Android Studio</a></td>
+ <td><a href="https://developer.android.com/studio/report-bugs.html#studio-bugs">Android Studio 详细信息</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192708&template=840533">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="http://issuetracker.google.com/issues?q=componentid:192717%2B">C++</a></td>
+ <td>Android Studio 中的问题</td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192717">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="http://issuetracker.google.com/issues?q=componentid:192727%2B">模拟器或系统映像</a></td>
+ <td><a href="https://developer.android.com/studio/report-bugs.html#emulator-bugs">模拟器详细信息</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192727">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="http://issuetracker.google.com/issues?q=componentid:192709%2B">Gradle</a></td>
+ <td><a href="https://developer.android.com/studio/report-bugs.html#build-bugs">Gradle 详细信息</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192709&template=842921">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="http://issuetracker.google.com/issues?q=componentid:192751%2B">Instant Run</a></td>
+ <td><a href="https://developer.android.com/studio/report-bugs.html#instant-run-bugs">Instant Run 详细信息</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192751">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td colspan="2"><a href="http://issuetracker.google.com/issues?q=componentid:192718%2B">Lint</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192718">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/android-ndk/ndk/issues">NDK</a></td>
+ <td>独立的 NDK 方面的问题</td>
+ <td><a href="https://github.com/android-ndk/ndk/issues"><i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td colspan="2"><a href="http://issuetracker.google.com/issues?q=componentid:192722%2B">分析器</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192722">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td colspan="2"><a href="http://issuetracker.google.com/issues?q=componentid:192731%2B">支持库</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192731">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td colspan="2"><a href="http://issuetracker.google.com/issues?q=componentid:192735%2B">测试支持库</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192735">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+</tbody></table>
+
+<h3 id="documentation">文档</h3>
+<p>
+如果您在本网站或 <a href="https://developer.android.com/">developer.android.com</a> 上发现了问题,请提交错误,相应作者会提供帮助。
+</p>
+
+<table>
+ <tbody><tr>
+ <th>浏览错误</th>
+ <th>提交错误</th>
+ </tr>
+ <tr>
+ <td><a href="http://issuetracker.google.com/issues?q=componentid:192697%2B">developer.android.com</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=192697">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+ <tr>
+ <td><a href="http://issuetracker.google.com/issues?q=componentid:191476%2B">source.android.com</a></td>
+ <td><a href="https://issuetracker.google.com/issues/new?component=191476">
+ <i class="material-icons">bug_report</i></a></td>
+ </tr>
+</tbody></table>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/requirements.html b/zh-cn/source/requirements.html
index a6fbf476..a704f633 100644
--- a/zh-cn/source/requirements.html
+++ b/zh-cn/source/requirements.html
@@ -31,7 +31,7 @@
<li>如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
</li>
- <li>如果是进行校验,至少需要 100GB 可用磁盘空间;如果是进行单次编译,至少需要 150GB 可用磁盘空间;如果是进行多次编译,至少需要 200GB 或更多可用磁盘空间。如果您使用 ccache,则需要更多空间。<p></p>
+ <li>如果是校验代码,至少需要 100GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译或使用 ccache,则需要更多空间。<p></p>
</li>
<li>如果您在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。
@@ -45,11 +45,38 @@
<p>您的工作站必须具有下面列出的软件。要查看所需的其他程序包以及用于安装这些程序包的命令,请参阅<a href="initializing.html">构建编译环境</a>。</p>
-<h3 id="operating-system">操作系统</h3>
+<h3 id="latest-version">操作系统和 JDK</h3>
+
+<p>如果您要针对 AOSP <code>master</code> 分支进行开发,请使用下列操作系统之一:Ubuntu 14.04 (Trusty) 或 Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具。</p>
+
+<p>对于 Java 开发套件 (JDK),需要注意的是 AOSP 中 Android 的 <code>master</code> 分支带有预编译版本的 OpenJDK;因此无需进行额外安装。较低的版本则需要单独进行安装。</p>
+
+<p>请参阅<a href="#older-versions">较低 Android 版本的软件包</a>。
+
+</p><h3 id="packages">主要软件包</h3>
+ <ul>
+ <li><a href="http://www.python.org/download/">python.org</a> 中提供的 Python 2.6 - 2.7</li>
+ <li><a href="http://ftp.gnu.org/gnu/make/">gnu.org</a> 中提供的 GNU Make 3.81 - 3.82
+ </li><li><a href="http://git-scm.com/download">git-scm.com</a> 中提供的 Git 1.7 或更高版本</li>
+ </ul>
+
+<h3 id="binaries">设备二进制文件</h3>
+<p>下载预览、出厂映像、驱动程序、无线 (OTA) 更新和下列其他 Blob。如需更多详细信息,请参阅<a href="/source/building.html#obtaining-proprietary-binaries">下载专有二进制文件</a>。</p>
+ <ul>
+ <li><a href="https://developers.google.com/android/blobs-preview">预览二进制文件 (Blob)</a> - 用于 AOSP <code>master</code> 分支开发</li>
+ <li><a href="https://developers.google.com/android/images">出厂映像</a> - 针对运行带标记的 AOSP 版本分支的受支持设备</li>
+ <li><a href="https://developers.google.com/android/drivers">硬件支持二进制文件</a> - 针对运行带标记的 AOSP 版本分支的设备</li>
+ </ul>
+
+<h3 id="older-versions">较低 Android 版本的软件包</h3>
+
+<p>以下部分提供了较低 Android 版本的相关操作系统和 JDK 软件包。</p>
+
+<h4 id="operating-system">操作系统</h4>
<p>Android 通常是在 GNU/Linux 或 Mac OS 操作系统中进行编译。您也可以使用虚拟机在不支持的系统(例如 Windows)中编译 Android。<br />
-</p><h4 id="linux">GNU/Linux</h4>
+ </p><h5 id="linux">GNU/Linux</h5>
<ul>
<li>Android 6.0 (Marshmallow) - AOSP master:Ubuntu 14.04 (Trusty)</li>
@@ -57,7 +84,7 @@
<li>Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu 10.04 (Lucid)</li>
</ul>
-<h4 id="mac">Mac OS (Intel/x86)</h4>
+<h5 id="mac">Mac OS (Intel/x86)</h5>
<ul>
<li>Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具</li>
@@ -66,30 +93,17 @@
<li>Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK</li>
</ul>
-<h3 id="jdk">Java 开发套件 (JDK)</h3>
+<h4 id="jdk">JDK</h4>
-<p>请注意,由于没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包,因此您必须手动安装 Ubuntu 15.04 程序包。要查看具体说明,请参阅<a href="initializing.html#for-ubuntu-14-04">适用于 Ubuntu LTS 14.04 的 JDK</a>。</p>
+<p>有关较低 Android 版本的预编译路径和安装说明,请参阅<a href="initializing.html#installing-the-jdk">安装 JDK</a>。</p>
<ul>
- <li>AOSP 中 Android 的 master 分支:Ubuntu - <a href="http://openjdk.java.net/install/">OpenJDK 8</a>;Mac OS - <a href="http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u45-oth-JPR">jdk 8u45 或更高版本</a></li>
+ <li>Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - <a href="http://openjdk.java.net/install/">OpenJDK 8</a>;Mac OS - <a href="http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html#jdk-8u45-oth-JPR">jdk 8u45 或更高版本</a></li>
<li>Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - <a href="http://openjdk.java.net/install/">OpenJDK 7</a>;Mac OS - <a href="https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u71-oth-JPR">jdk-7u71-macosx-x64.dmg</a></li>
<li>Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - <a href="http://www.oracle.com/technetwork/java/javase/archive-139210.html">Java JDK 6</a>;Mac OS - <a href="http://support.apple.com/kb/dl1572">Java JDK 6</a></li>
<li>Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - <a href="http://www.oracle.com/technetwork/java/javase/archive-139210.html">Java JDK 5</a></li>
</ul>
-<h3 id="packages">主要程序包</h3>
- <ul>
- <li><a href="http://www.python.org/download/">python.org</a> 中提供的 Python 2.6 - 2.7</li>
- <li><a href="http://ftp.gnu.org/gnu/make/">gnu.org</a> 中提供的 GNU Make 3.81 - 3.82;对于 Android 3.2.x (Honeycomb) 及更低版本,则需要<a href="initializing.html#reverting-from-make-382">将 make 3.82 还原到较低版本</a>,以避免出现编译错误</li>
- <li><a href="http://git-scm.com/download">git-scm.com</a> 中提供的 Git 1.7 或更高版本</li>
- </ul>
-
-<h3 id="binaries">设备二进制文件</h3>
-<p>下载预览、出厂映像、驱动程序、无线 (OTA) 更新和下列其他 Blob。如需更多详细信息,请参阅<a href="/source/building.html#obtaining-proprietary-binaries">下载专有二进制文件</a><a></a>。</p><a>
- </a><ul><a>
- </a><li><a></a><a href="https://developers.google.com/android/nexus/blobs-preview">预览二进制文件 (Blob)</a> - 用于 AOSP <code>master</code> 分支开发</li>
- <li><a href="https://developers.google.com/android/nexus/images">出厂映像</a> - 针对运行带标记的 AOSP 版本分支的受支持设备</li>
- <li><a href="https://developers.google.com/android/nexus/drivers">硬件支持二进制文件</a> - 针对运行带标记的 AOSP 版本分支的设备</li>
- <li><a href="https://developers.google.com/android/nexus/ota">OTA 映像</a> - 用于通过无线方式手动更新 Nexus 设备</li>
- </ul>
+ <h4 id="make">Make</h4>
+ <p>Android 4.0.x (Ice Cream Sandwich) 及更低版本需要<a href="initializing.html#reverting-from-make-382">将 make 3.82 还原到较低版本</a>,以避免出现编译错误</p>。
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/running.html b/zh-cn/source/running.html
index 0e0feae0..d4725202 100644
--- a/zh-cn/source/running.html
+++ b/zh-cn/source/running.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>
@@ -23,132 +23,133 @@
<p>本页提供了关于在特定设备上运行编译系统的详细信息,是对<a href="/source/building.html">编译系统</a>部分的补充。</p>
<h2 id="building-fastboot-and-adb">编译 fastboot 和 adb</h2>
-<p>如果您还没有 fastboot 和 adb,则可以使用常规编译系统来编译。请按照<a href="/source/building.html">编译系统</a>中的说明操作,将主 <code>make</code> 命令替换为以下命令:</p>
-<pre><code>$ make fastboot adb
-</code></pre>
+<p>如果您还没有 <code>fastboot</code> 和 <code>adb</code>,则可以使用常规编译系统来编译。请按照<a href="/source/building.html">编译系统</a>中的说明操作,将主 <code>make</code> 命令替换为以下命令:</p>
+<pre class="devsite-click-to-copy devsite-terminal">make fastboot adb</pre>
<h2 id="booting-into-fastboot-mode">启动进入 fastboot 模式</h2>
-<p><em></em>Fastboot 是一种引导加载程序模式,您可以在该模式下刷写设备。在设备冷启动过程中,可使用以下组合键进入 fastboot 模式:</p>
+<p><code>Fastboot</code> 是一种引导加载程序模式,您可以在该模式下刷写设备。在设备冷启动过程中,可使用以下组合键进入 <code>fastboot</code> 模式:</p>
<table>
<thead>
<tr>
-<th>代号</th>
<th>设备</th>
+<th>代号</th>
<th>组合键</th>
</tr>
</thead>
<tbody>
<tr>
-<td>marlin</td><td>Pixel XL</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>Pixel XL</td>
+<td>marlin</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>sailfish</td>
<td>Pixel</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>sailfish</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
<td>hikey</td>
<td>hikey</td>
-<td>连接 J15 的引脚 1-2 和 5-6</td>
+<td>连接 J15 的引脚 1 - 2 和 5 - 6。</td>
</tr>
<tr>
-<td>angler</td>
<td>Nexus 6P</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>angler</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>bullhead</td>
<td>Nexus 5X</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>bullhead</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>shamu</td>
<td>Nexus 6</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>shamu</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>fugu</td>
<td>Nexus Player</td>
-<td>按住电源键<em></em></td>
+<td>fugu</td>
+<td>按住电源键。<em></em></td>
</tr>
<tr>
-<td>volantis</td>
<td>Nexus 9</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>volantis</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>hammerhead</td>
<td>Nexus 5</td>
-<td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td>
+<td>hammerhead</td>
+<td>同时按住音量调高键和音量调低键,然后按住电源键。<em></em><em></em><em></em></td>
</tr>
<tr>
-<td>flo</td>
<td>Nexus 7</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>flo</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>deb</td>
<td>Nexus 7 3G</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>deb</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>manta</td>
<td>Nexus 10</td>
-<td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td>
+<td>manta</td>
+<td>同时按住音量调高键和音量调低键,然后按住电源键。<em></em><em></em><em></em></td>
</tr>
<tr>
-<td>mako</td>
<td>Nexus 4</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>mako</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>grouper</td>
<td>Nexus 7 (2012)</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>grouper</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>tilapia</td>
<td>Nexus 7 3G (2012)</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>tilapia</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>phantasm</td>
<td>Nexus Q</td>
-<td>启动设备,LED 指示灯亮起后用一只手盖住设备,直至指示灯变成红色</td>
+<td>phantasm</td>
+<td>启动设备,LED 指示灯亮起后用一只手盖住设备,直至指示灯变成红色。</td>
</tr>
<tr>
-<td>maguro</td>
<td>Galaxy Nexus GSM</td>
-<td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td>
+<td>maguro</td>
+<td>同时按住音量调高键和音量调低键,然后按住电源键。<em></em><em></em><em></em></td>
</tr>
<tr>
-<td>toro</td>
<td>Galaxy Nexus (Verizon)</td>
-<td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td>
+<td>toro</td>
+<td>同时按住音量调高键和音量调低键,然后按住电源键。<em></em><em></em><em></em></td>
</tr>
<tr>
-<td>toroplus</td>
<td>Galaxy Nexus (Sprint)</td>
-<td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td>
+<td>toroplus</td>
+<td>同时按住音量调高键和音量调低键,然后按住电源键。<em></em><em></em><em></em></td>
</tr>
<tr>
-<td>wingray</td>
<td>Motorola Xoom</td>
-<td>按住音量调低键,然后按住电源键<em></em><em></em></td>
+<td>wingray</td>
+<td>按住音量调低键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>crespo</td>
<td>Nexus S</td>
-<td>按住音量调高键,然后按住电源键<em></em><em></em></td>
+<td>crespo</td>
+<td>按住音量调高键,然后按住电源键。<em></em><em></em></td>
</tr>
<tr>
-<td>crespo4g</td>
<td>Nexus SG</td>
-<td>按住音量调高键,然后按住电源键<em></em><em></em></td>
+<td>crespo4g</td>
+<td>按住音量调高键,然后按住电源键。<em></em><em></em></td>
</tr>
</tbody>
</table>
+
<p>您还可以使用命令 <code>adb reboot bootloader</code> 直接在 Android 系统中重新启动进入引导加载程序,而无需使用任何组合键。</p>
<h2 id="unlocking-the-bootloader">解锁引导加载程序</h2>
@@ -162,35 +163,42 @@
<ol>
<li>在设备上启用 OEM 解锁:
-<ol style="list-style-type:lower-alpha">
-<li>在“设置”中,点按<strong>关于手机</strong>,然后点按<strong>版本号</strong>七 (7) 次。</li>
-<li>当看到“您已处于开发者模式”这条消息后,点按返回按钮。</li>
-<li>点按<strong>开发者选项</strong>,然后启用 <strong>OEM 解锁</strong>和 <strong>USB 调试</strong>。(如果 OEM 解锁处于停用状态,请连接到互联网,以便设备可以至少签到一次。如果 OEM 解锁仍处于停用状态,则说明您的设备可能已被运营商锁定 SIM 卡,系统无法解锁引导加载程序。)</li></ol></li>
-<li>重新启动进入引导加载程序,然后使用 fastboot 解锁。
-<ul>
-<li>对于新款设备(2015 年及之后发布的设备):<code>$ fastboot flashing unlock</code>
+ <ol>
+ <li>在“设置”中,点按<strong>关于手机</strong>,然后点按<strong>版本号</strong>七 (7) 次。</li>
+ <li>当看到“您已处于开发者模式”这条消息后,点按返回按钮。</li>
+ <li>点按<strong>开发者选项</strong>,然后启用 <strong>OEM 解锁</strong>和 <strong>USB 调试</strong>。(如果“OEM 解锁”处于停用状态,请连接到互联网,以便设备可以至少签到一次。如果“OEM 解锁”仍处于停用状态,则说明您的设备可能已被运营商锁定 SIM 卡,系统无法解锁引导加载程序。)</li>
+ </ol>
+</li>
+<li>重新启动进入引导加载程序,然后使用 <code>fastboot</code> 解锁。
+ <ul>
+ <li>对于新款设备(2015 年及之后发布的设备):
+ <pre class="devsite-click-to-copy devsite-terminal">fastboot flashing unlock</pre>
+ </li>
+ <li>对于老款设备(2014 年及之前发布的设备):
+ <pre class="devsite-click-to-copy devsite-terminal">fastboot oem unlock</pre>
+ </li>
+ </ul>
</li>
-<li>对于老款设备(2014 年及之前发布的设备):<code>$ fastboot oem
-unlock</code></li></ul>您必须在屏幕上确认解锁。</li></ol>
+<li>在屏幕上确认解锁。</li>
+</ol>
-<p class="note"><strong>注意</strong>:在 Nexus 10 上,解锁引导加载程序后,内部存储仍保持未格式化状态。您可以依次使用 <code>fastboot format cache</code> 和 <code>fastboot format userdata</code> 来格式化设备</p>
+<aside class="note"><strong>注意</strong>:在 Nexus 10 上,解锁引导加载程序后,内部存储仍保持未格式化状态。您可以依次使用 <code>fastboot format cache</code> 和 <code>fastboot format userdata</code> 来格式化设备。</aside>
<h3 id="relocking-the-bootloader">重新锁定引导加载程序</h3>
<p>要重新锁定引导加载程序,请执行以下命令:</p>
<ul>
-<li>对于新款设备(2015 年及之后发布的设备):<code>$ fastboot flashing lock</code></li>
-<li>对于老款设备(2014 年及之后发布的设备):<code>$ fastboot oem lock</code></li>
+<li>对于新款设备(2015 年及之后发布的设备):
+<pre class="devsite-click-to-copy devsite-terminal">fastboot flashing lock</pre>
+</li>
+<li>对于老款设备(2014 年及之前发布的设备):
+<pre class="devsite-click-to-copy devsite-terminal">fastboot oem lock</pre>
+</li>
</ul>
-<p class="note"><strong>注意</strong>:在 Motorola Xoom 上重新锁定引导加载程序会清空用户数据(包括共享的 USB 数据)。</p>
+<aside class="note"><strong>注意</strong>:在 Motorola Xoom 上重新锁定引导加载程序会清空用户数据(包括共享的 USB 数据)。</aside>
<h2 id="flash-unlock">使用刷写解锁</h2>
-
-<p>Android 7.0 包含一个新的系统 API <code>getFlashLockState()</code>(用于传输引导加载程序状态)以及以下系统 API(用于返回兼容设备上引导加载程序的锁定状态):</p>
-
-<pre>
-PersistentDataBlockManager.getFlashLockState()
-</pre>
+<p><code>getFlashLockState()</code> 系统 API 会传输引导加载程序状态,<code>PersistentDataBlockManager.getFlashLockState()</code> 系统 API 会返回兼容设备上引导加载程序的锁定状态。</p>
<table>
<tbody><tr>
@@ -198,49 +206,34 @@ PersistentDataBlockManager.getFlashLockState()
<th>条件</th>
</tr>
<tr>
-<td><code>FLASH_LOCK_UNKNOWN</code>
-</td>
-<td><p>仅升级到 Android 7.0 的符合以下条件的设备会返回此值:设备支持刷写锁定/解锁功能,但尚不支持获取刷写锁定状态所需的引导加载程序变更。</p>
-<p>新款 Android 7.0 设备必须处于 <code>FLASH_LOCK_LOCKED</code> 或 <code>FLASH_LOCK_UNLOCKED</code> 状态。如果某设备升级到了 Android 7.0,且不支持刷写解锁/锁定功能,则应仅会返回 <code>FLASH_LOCK_LOCKED</code> 状态。</p>
+<td><code>FLASH_LOCK_UNKNOWN</code></td>
+<td>仅升级到 Android 7.x 或更高版本的符合以下条件的设备会返回此值:设备支持刷写锁定/解锁功能,但之前不支持获取刷写锁定状态所需的引导加载程序变更。<br />
+<ul>
+<li>运行 Android 7.x 或更高版本的新设备必须为 <code>FLASH_LOCK_LOCKED</code> 或 <code>FLASH_LOCK_UNLOCKED</code> 状态。</li>
+<li>升级到 Android 7.x 或更高版本且不支持刷写解锁/锁定功能的设备应返回 <code>FLASH_LOCK_LOCKED</code> 状态。</li>
+</ul>
</td>
</tr>
<tr>
-<td><code>FLASH_LOCK_LOCKED</code>
-</td>
-<td>不支持刷写锁定/解锁的设备(即设备始终处于锁定状态)或支持刷写锁定/解锁且处于锁定状态的设备应该会返回此值。
-</td>
+<td><code>FLASH_LOCK_LOCKED</code></td>
+<td>不支持刷写锁定/解锁的设备(即设备始终处于锁定状态)或支持刷写锁定/解锁且处于锁定状态的设备应该会返回此值。</td>
</tr>
<tr>
-<td><code>FLASH_LOCK_UNLOCKED</code>
-</td>
-<td>支持刷写锁定/解锁且当前处于已解锁状态的设备会返回此值。
-</td>
+<td><code>FLASH_LOCK_UNLOCKED</code></td>
+<td>支持刷写锁定/解锁且当前处于已解锁状态的设备会返回此值。</td>
</tr>
</tbody></table>
-<h3 id="examples-and-source">示例和源代码</h3>
-
-<p>AOSP 包含参考实现代码,根据 <code>ro.boot.flash.locked</code> 启动属性返回值。具体代码位于以下目录中:</p>
-
-<pre>
-frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
-frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java
-</pre>
-
-<h3 id="validation">验证</h3>
-<p>制造商应测试已锁定引导加载程序的设备和已解锁引导加载程序的设备返回的值。</p>
-
-<h2 id="selecting-device-build">选择设备编译系统</h2>
-
-<p>启动菜单中提供了建议的设备编译系统,在不使用任何参数的情况下运行 <code>lunch</code> 命令即可查看。您可以从 developers.google.com 下载 Nexus 设备的出厂映像和二进制文件:</p>
+<p>制造商应测试已锁定引导加载程序的设备和已解锁引导加载程序的设备返回的值。例如,Android 开放源代码项目 (AOSP) 包含根据 <code>ro.boot.flash.locked</code> 启动属性返回值的参考实现。示例代码位于以下目录中:</p>
<ul>
-<li><a href="https://developers.google.com/android/nexus/blobs-preview">预览二进制文件 (Blob)</a></li>
-<li><a href="https://developers.google.com/android/nexus/images">已发布设备的出厂映像</a></li>
-<li><a href="https://developers.google.com/android/nexus/drivers">已发布设备的支持二进制文件(驱动程序)</a></li>
+<li><code>frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java</code></li>
+<li><code>frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java</code></li>
</ul>
-<p>有关详情以及其他资源,请参阅<a href="building.html#obtaining-proprietary-binaries">获取专有二进制文件</a>和<a href="requirements.html#binaries">设备二进制文件要求</a>。</p>
+<h2 id="selecting-device-build">选择设备编译系统</h2>
+
+<p><code>lunch</code> 菜单中提供了建议的设备编译系统,在不使用任何参数的情况下运行 <code>lunch</code> 命令即可查看。您可以从 developers.google.com 下载 Nexus 设备的出厂映像和二进制文件:请参阅<a href="/source/requirements#binaries">设备二进制文件</a>进行下载。有关详情以及其他资源,请参阅<a href="building.html#obtaining-proprietary-binaries">获取专有二进制文件</a>。
<table>
<thead>
@@ -359,33 +352,26 @@ frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockMana
</tbody>
</table>
-<p class="note"><b>注意</b>:请不要在原本搭载 Android 4.1.2 或更高版本的 Nexus 7 上使用 Android 4.1.1。</p>
+</p><aside class="note"><strong>注意</strong>:请不要在原本搭载 Android 4.1.2 或更高版本的 Nexus 7 上使用 Android 4.1.1。</aside>
<h2 id="flashing-a-device">刷写设备</h2>
<p>您可以通过运行一个命令来刷写整个 Android 系统;这样做可验证正在刷写的系统与已安装的引导加载程序和无线通信模块的驱动程序是否兼容,还可以将启动、恢复和系统分区一起写入,然后重新启动系统。与 <code>fastboot oem
unlock</code> 类似,刷写设备也会清空所有用户数据。</p>
-<p>您可以通过两种方式使设备进入 fastboot 模式:在启动时按住相应的组合键手动实现此操作;从 shell 运行以下命令:</p>
-
-<pre>
-$ adb reboot bootloader
-</pre>
-
-<p>在设备处于 fastboot 模式后,运行以下命令:</p>
-
-<pre>
-$ fastboot flashall -w
-</pre>
-
-<p><code>-w</code> 选项会清除设备上的 <code>/data</code> 分区;该选项在您第一次刷写特定设备时非常有用,但在其他情况下则没必要使用。</p>
+<p>要刷写设备,请执行以下操作:</p>
+<ol>
+<li>在启动时按住相应的组合键或使用以下命令使设备进入 <code>fastboot</code> 模式:<pre class="devsite-click-to-copy devsite-terminal">adb reboot bootloader</pre></li>
+<li>在设备处于 fastboot 模式后,运行以下命令:
+<pre class="devsite-click-to-copy devsite-terminal">fastboot flashall -w</pre>
+<code>-w</code> 选项会擦除设备上的 <code>/data</code> 分区;该选项在您第一次刷写特定设备时有用,但在其他情况下则没必要使用。</li>
+</ol>
-<p class="note"><strong>注意</strong>:在 Motorola Xoom 上通过 fastboot 创建的文件系统无法发挥最佳作用。建议您使用 <code>$ adb reboot recovery</code> 命令通过恢复功能来重新创建文件系统。在执行恢复操作时,打开菜单(同时按电源键和音量调高键),清除缓存分区,然后清除数据。</p>
+<aside class="note"><strong>注意</strong>:在 Motorola Xoom 上通过 <code>fastboot</code> 创建的文件系统无法发挥最佳作用。建议您使用 <code>$ adb reboot
+recovery</code> 命令通过恢复功能来重新创建文件系统。在执行恢复操作时,打开菜单(同时按电源键和音量调高键),擦除缓存分区,然后擦除数据。</aside>
<h2 id="restoring-devices-to-factory-state">将设备恢复到出厂状态</h2>
-<p>您可以在 <a href="https://developers.google.com/android/nexus/images">Google 的出厂映像</a>页面上查看 Nexus 5、Nexus 10、Nexus 4、Nexus Q、Nexus 7、Galaxy Nexus(GSM/HSPA+“yakju”和“takju”,CDMA/LTE“mysid”和“mysidspr”)、Nexus S 和 Nexus S 4G 的出厂映像。</p>
-
-<p>Motorola Xoom 的出厂映像由 Motorola 直接提供。</p>
+<p>您可以在 <a href="https://developers.google.com/android/nexus/images" class="external">Nexus 和 Pixel 设备的出厂映像</a>上查看 Google 设备的出厂映像。Motorola Xoom 的出厂映像由 Motorola 直接提供。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/site-updates.html b/zh-cn/source/site-updates.html
index d717ad2b..d4ebd7d4 100644
--- a/zh-cn/source/site-updates.html
+++ b/zh-cn/source/site-updates.html
@@ -20,16 +20,342 @@
limitations under the License.
-->
-<p>本页介绍了我们对 source.android.com 进行的重大修订。要查看我们对本网站进行的更改的完整列表,请参阅 <a href="https://android.googlesource.com/platform/docs/source.android.com/+log/master?no-merges">Android 开放源代码项目 (AOSP) 文档/source.android.com 日志</a>。
+<p>本页介绍了我们对 source.android.com 进行的重大修订。要查看我们对本网站进行的更改的完整列表,请参阅 <a href="https://android.googlesource.com/platform/docs/source.android.com/+log/master?pretty=full&no-merges">Android 开放源代码项目 (AOSP) 文档/source.android.com 日志</a>。
-</p><h2 id="april-2017">2017 年 4 月</h2>
+</p><h2 id="August-2017">2017 年 8 月</h2>
+
+<p>Android 8.0 已发布!本部分介绍了 Android 8.0 平台中的主要新功能。</p>
+
+<h3 id="architecture">架构</h3>
+
+<h4>Treble</h4>
+<p>
+Android 8.0 支持 Treble,这是 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。文档中详细介绍了 <a href="/devices/architecture/hidl/index.html">HAL 接口定义语言 (HIDL)</a>、全新的 <a href="/devices/architecture/configstore/index.html">ConfigStore HAL</a>、<a href="/devices/architecture/dto/index.html">设备树叠加层</a>、<a href="/devices/architecture/vndk/index.html">供应商原生开发套件 (VNDK)</a>、<a href="/devices/architecture/vintf/index.html">供应商接口对象 (VINTF)</a>、<a href="/devices/architecture/kernel/modular-kernels.html">模块化内核要求</a>以及<a href="/devices/tech/vts/index.html">供应商测试套件 (VTS) 和基础架构</a>。
+</p>
+
+<h4>用于 LLDB/C++ 调试的内核增强功能</h4>
+<p>
+Android 8.0 版本包含一些内核增强功能,这些功能可改善开发者的调试体验,有助于开发者开发出更好的应用。如需更多信息,请参阅<a href="/devices/architecture/kernel/lldb-debug.html">实现用于 LLDB/C++ 调试的内核增强功能</a>。
+</p>
+
+<h4>内核加固</h4>
+<p>
+上游内核加固功能和工具,用于发现内核驱动程序中的错误。如需更多信息,请参阅<a href="/devices/architecture/kernel/hardening.html">内核加固</a>。
+</p>
+
+<h4>在内核级优化 SquashFS</h4>
+<p>
+SquashFS 是一个面向 Linux 且经过压缩的只读文件系统,适合在系统分区上使用。该文档中描述的优化功能有助于提高 SquashFS 的性能。如需更多信息,请参阅<a href="/devices/architecture/kernel/squashfs.html">在内核级优化 SquashFS</a>。
+</p>
+
+<h3 id="art-dalvik">ART 和 Dalvik</h3>
+<h4>模糊测试</h4>
+<p>
+Android 开放源代码项目 (AOSP) 提供了用于测试 <a href="/devices/tech/dalvik/">Android 运行时 (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>
+无需做任何工作,即可实现或使用这些新工具。必要时您可以对这些工具进行更改,就像您可以更改运行时/编译器一样。
+</p>
+
+<h4>VDEX 文件:提高系统更新性能</h4>
+<p>
+VDEX 文件有助于提升软件更新的性能和用户体验。VDEX 文件用于存储包含验证程序依赖关系且经过预验证的 DEX 文件,以便 ART 在系统更新期间无需再次解压和验证 DEX 文件。无需执行任何操作,即可实现该功能。该功能默认处于启用状态。要停用该功能,请将 <code>ART_ENABLE_VDEX</code> 环境变量设为 <code>false</code>。
+</p>
+
+<h4>ART 性能改进</h4>
+<p>
+在 Android 8.0 版本中,Android Runtime (ART) 有了极大改进。该文档总结了设备制造商可以在 ART 中获得的增强功能。如需更多信息,请参阅<a href="/devices/tech/dalvik/improvements.html">提升 Android 8.0 中的 ART 性能</a>。
+</p>
+
+<h4>Android A/B OTA 更新</h4>
+<p>
+该更新解答了设备制造商经常遇到的 Android A/B(无缝)系统更新问题。如需更多信息,请参阅 <a href="/devices/tech/ota/ab_updates#frequently-asked-questions.html">A/B(无缝)系统更新常见问题解答</a>。
+</p>
+
+<h3 id="automotive">车载</h3>
+
+<h4>蓝牙连接管理功能</h4>
+<p>
+Android 8.0 在车载信息娱乐系统中提供了蓝牙连接管理功能,可实现更顺畅的蓝牙用户体验。如需更多信息,请参阅<a href="/devices/automotive/ivi_connectivity.html#bluetooth-connection-management">蓝牙连接管理功能</a>。
+</p>
+
+<h4>蓝牙多设备 HFP</h4>
+<p>
+使用蓝牙多设备连接,用户可以将多台设备连接到 Android Automotive IVI 蓝牙中的电话配置文件。如需更多信息,请参阅 <a href="/devices/automotive/ivi_connectivity.html#bluetooth-multi-device-connectivity">IVI 连接</a>。
+</p>
+
+<h4>车载相机 HAL</h4>
+<p>
+介绍了外景系统 (EVS) 堆栈的设计,并提供了可获取和呈现车载相机数据的 HAL 规范。如需更多信息,请参阅<a href="/devices/automotive/camera-hal.html">外景系统 (EVS) 车载相机 HAL</a>。
+</p>
+
+<h3 id="bluetooth">蓝牙</h3>
+<p>
+请参阅更新后的<a href="/devices/bluetooth/index.html">蓝牙概览</a>。
+</p>
+
+<h4>验证和调试蓝牙</h4>
+<p>
+一个新页面,其中介绍了如何验证和调试原生蓝牙堆栈。请在<a href="/devices/bluetooth/verifying_debugging.html">验证和调试</a>上查看此页面。
+</p>
+
+<h4>蓝牙服务</h4>
+<p>
+蓝牙提供了多种协助实现跨设备核心服务的功能,如音频流式传输、接打电话和收发短信。如需关于 Android 蓝牙服务的更多信息,请参阅<a href="/devices/bluetooth/services.html">蓝牙服务</a>。
+</p>
+
+<h4>BLE 广告</h4>
+<p>
+蓝牙 5 支持不同的蓝牙低功耗数据广告模式,包括更高的带宽或更大的范围。如需更多信息,请参阅<a href="/devices/bluetooth/ble_advertising.html">蓝牙低能耗广告</a>。
+</p>
+
+<h4>音频编解码器的蓝牙支持</h4>
+<p>
+Android 8.0 版本支持蓝牙高清音频编解码器。如需更多信息,请参阅<a href="/devices/bluetooth/services.html#advanced-audio-codecs">高级音频编解码器</a>。
+</p>
+
+<h3 id="camera">相机</h3>
+
+<h4>主要的相机功能</h4>
+<p>
+Android 8.0 版本中包含对相机服务的以下主要增强:共享表面、多个表面可共用相同的 OutputConfiguration System API 以实现自定义相机模式,以及 onCaptureQueueEmpty。如需更多信息,请参阅<a href="/devices/camera/versioning.html">相机版本支持</a>。
+</p>
+
+<h3 id="configuration">配置</h3>
+
+<h4>Ambient 权能</h4>
+<p>
+借助此类权能,Linux 进程可以舍弃大多数类似于 root 的权限,同时保留执行其功能所需的权限。Ambient 权能允许系统服务在其 <code>.rc</code> 文件中配置各项权能,从而将所有配置放入单个文件中。如需更多信息,请参阅<a href="/devices/tech/config/ambient.html">实现 Ambient 权能</a>。
+</p>
+
+<h4>特许权限白名单要求</h4>
+<p>
+从 Android 8.0 开始,必须将所有特权应用显式加入到 <code>/etc/permissions</code> 目录下的系统配置 XML 文件的白名单中。如果不这样做,则虽然设备可以启动,但设备实现将无法通过 CTS。如需更多信息,请参阅<a href="/devices/tech/config/perms-whitelist.html">特许权限白名单要求</a>。
+</p>
+
+<h4>实现 USB HAL</h4>
+<p>
+Android 8.0 版本将 USB 命令的处理从 init 脚本移至了原生 USB 守护进程,以实现更好的配置和代码可靠性。如需更多信息,请参阅<a href="/devices/tech/config/usb-hal.html">实现 USB HAL</a>。
+</p>
+
+<h3 id="connectivity">连接</h3>
+
+<h4>为流量已用完的用户自定义设备行为</h4>
+<p>
+流量已用完的 Android 设备允许网络流量通过,但需要运营商和电信服务商来实现缓解协议。该功能实现了一个通用解决方案,使运营商和电信服务商能够在设备用完流量时予以指示。如需更多信息,请参阅<a href="/devices/tech/connect/oob-users.html">为流量已用完的用户自定义设备行为</a>。
+</p>
+
+<h3 id="debugging">调试</h3>
+
+<h4>在 Android 编译系统中启用清理程序</h4>
+<p>
+清理程序是基于编译器的工具组件,在开发和测试期间使用,旨在识别错误和改进 Android。Android 目前的一系列清理程序可以发现和诊断内存滥用错误以及可能存在危险的未定义行为。如需更多信息,请参阅<a href="/devices/tech/debug/sanitizers.html">在 Android 编译系统中启用清理程序</a>。
+</p>
+
+<h4>恢复陷入重新启动循环的设备</h4>
+<p>
+Android 8.0 中包含一项能够在发现核心系统组件陷入崩溃循环时派出“救援队” (Rescure Party) 的功能。然后,Rescue Party 会采取一系列措施来上报相关情况,以恢复设备。如需更多信息,请参阅 <a href="/devices/tech/debug/rescue-party.html">Rescue Party</a>。
+</p>
+
+<h4>Storaged</h4>
+<p>
+Android 8.0 添加了对 <code>storaged</code>(一个 Android 本机守护进程,可在 Android 设备上收集和发布存储指标)的支持。如需更多信息,请参阅<a href="/devices/tech/debug/storaged.html">实现 Storaged</a>。
+</p>
+
+<h3 id="display">显示</h3>
+
+<h4>针对悬浮窗口的 Air Traffic Control</h4>
+<p>
+Android 8.0 引入了针对悬浮窗口的 Air Traffic Control,以简化和统一应用的叠加显示方式。Android 开放源代码项目 (AOSP) 中包含使用该功能所需的所有内容。
+</p>
+<p>
+借助 Air Traffic Control,开发者可以为应用创建全新的(受管理)悬浮层/窗口类型,以用于在其他应用之前显示窗口。该功能会为所有使用悬浮层的应用显示持续性通知,以便用户管理此类提醒窗口。
+</p>
+<p>
+Android 兼容性测试套件 (CTS) 可以确认:
+</p> <ul>
+ <li>当前提醒窗口类型为:<code>TYPE_PHONE</code>、<code>TYPE_PRIORITY_PHONE</code>、<code>TYPE_SYSTEM_ALERT</code>、<code>TYPE_SYSTEM_OVERLAY</code> 或 <code>TYPE_SYSTEM_ERROR</code>
+ </li><li>目标为 O SDK 的应用无法使用上述窗口类型在其他应用之前显示窗口。它们需要使用新窗口类型 TYPE_APPLICATION_OVERLAY。</li><li>目标为较低版本 SDK 的应用仍然可以使用目前的窗口类型;不过,这些窗口在 Z 轴上将排在新的 TYPE_APPLICATION_OVERLAY 窗口之后。
+ </li><li>系统可以在新层中移动或调整窗口大小,以减少杂乱现象。
+ </li><li>设备制造商必须保留通知,以便用户控制哪个应用显示在其他应用之前。</li> </ul>
+
+<h4>在辅助显示屏上启动 Activity</h4>
+<p>
+所有人都可以使用虚拟显示屏,无需任何特殊硬件。任何应用都可以创建虚拟显示屏实例;在 Android 8.0 版本中,如果关联的功能已启用,则可以在相应虚拟显示屏上启动 Activity。
+</p>
+<p>
+要支持多显示屏功能,您应使用现有受支持的辅助设备连接方式之一,或编译新硬件。在 Nexus 和 Pixel 设备上连接显示屏的受支持的方式包括 Google Cast 和<a href="https://developer.android.com/reference/android/hardware/display/VirtualDisplay.html">应用内虚拟显示屏</a>。是否支持其他方式取决于每种具体情况下(如 MHL 或 DisplayPort over USB-C)的内核驱动程序支持,以及完全实现 HardwareComposer HAL(IComposerCallback.hal 和 IComposerClient.hal)中与显示屏相关的接口定义。
+</p>
+<p>
+每种方式都可能需要 SoC 或 OEM 支持。例如,要启用 DisplayPort over USB-C,则同时需要硬件 (SOC) 和软件(驱动程序)支持。您可能需要为硬件实现驱动程序,才能支持连接外接显示器。
+</p>
+<p>
+默认实现将允许在辅助显示屏上启动各项 Activity 的全屏堆叠。您可以自定义辅助显示屏上的堆叠、系统界面和行为。
+</p>
+
+<h4>对通用提示的支持</h4>
+<p>
+Android 8.0 允许开发者为按钮及其他图标上的鼠标悬停行为提供描述性操作名称及其他实用信息。设备制造商可以设计弹出式提示的样式。其布局在 <code>android/frameworks/base/core/res/res/layout/tooltip.xml</code> 中定义。
+
+</p>
+<p>
+OEM 可以替换布局或更改其尺寸和样式参数。请仅使用文字,并使尺寸在合理的范围内尽可能小。该功能完全在 View 类中实现,且有一些相当详尽的 CTS 测试,这些测试用于检查提示行为的很多方面。
+</p>
+<p>
+
+</p><h4>对扩展宽高比的支持</h4>
+<p>
+Android 8.0 包含一个新的清单属性 <a href="https://developer.android.com/reference/android/R.attr.html#maxAspectRatio">maxAspectRatio</a>,该属性可让 Activity 或应用指定其支持的最大宽高比。maxAspectRatio 将之前的元数据标记替换成一个顶级 API,并让设备可支持大于 16:9 的宽高比。
+</p><ul>
+<li>如果 Activity 或应用的<a href="https://developer.android.com/guide/topics/ui/multi-window.html#configuring">大小可调整</a>,则允许 Activity 填充屏幕。
+</li><li>如果 Activity 或应用的大小不可调整,或者平台会强制调整 Activity 的大小,则允许应用窗口根据 <a href="https://developer.android.com/reference/android/R.attr.html#maxAspectRatio">maxAspectRatio</a> 值,以不超过此值的宽高比显示。<ul>
+ <li>对于运行 Android 8.0 的设备上的应用,默认值为当前设备的宽高比。
+ </li><li>对于运行较低版本 Android 的设备上的应用,默认值为 16:9。</li> </ul>
+</li> </ul>
+
+<h4>实现自适应图标</h4>
+<p>
+如果开发者仅提供一个图标素材资源,自适应图标的形状在设备内会保持一致,但在设备之间会有所差异。此外,图标支持两个图层(前景和背景),以实现动画效果,为用户提供愉悦的视觉体验。如需更多信息,请参阅<a href="/devices/tech/display/adaptive-icons.html">实现自适应图标</a>。
+</p>
+
+<h4>夜间模式</h4>
+<p>
+Android 7.0.1 中引入了夜间模式,该模式允许用户降低其屏幕发出的蓝光量。Android 8.0 使用户可以更好地控制夜间模式的强度。如需更多信息,请参阅<a href="/devices/tech/display/night-light.html">实现夜间模式</a>。
+</p>
+
+<h4>画中画</h4>
+<p>
+Android 8.0 支持在 Android 手持设备上使用画中画 (PIP) 功能。借助画中画功能,用户可以将有正在进行的活动(如视频)的应用调整到一个小窗口中。如需更多信息,请参阅 <a href="/devices/tech/display/pip.html">Android 手机上的画中画</a>。
+</p>
+
+<h4>改进分屏交互</h4>
+<p>
+多窗口模式使用户设备的屏幕上可以同时显示多个应用。Android 8.0 改进了默认模式(分屏),当用户在进入分屏模式后点按主屏幕时,会压缩顶部窗格并调整启动器的大小。如需更多信息,请参阅<a href="/devices/tech/display/split-screen.html">改进分屏交互</a>。
+</p>
+
+<h4>添加微件/快捷方式</h4>
+<p>
+Android 8.0 中的一个新 API 使应用开发者可以从应用内添加快捷方式和微件,而不必依靠微件面板。出于安全考虑,以前通过发送广播添加快捷方式的方法已被弃用。如需更多信息,请参阅<a href="/devices/tech/display/widgets-shortcuts.html">实现添加微件/快捷方式</a>。
+</p>
+
+<h3 id="downloading-building">下载和编译</h3>
+
+<h4>Android LLVM 工具链改进</h4>
+<p>
+希望使用我们的最新工具链/工具的 OEM 需要确保其任意私有代码都可以通过更新后的工具链成功编译。这可能需要他们修复其代码中存在的与未定义行为相关的问题。(当然,他们也可以随意使用喜欢的任何工具来编译自己的代码。)
+</p>
+<p>
+他们必须确保自己的代码不含未定义的行为(通过使用 UBSan 等工具),以使之不易受到新工具链带来的问题的影响。所有工具链都始终在 AOSP 中直接更新。远远在 OC 发布之前,所有功能便都已可用,因此 OEM 应已遵循相关规定。
+</p>
+<p>
+如需常规说明,请参阅<a href="https://llvm.org/">公开的 Clang/LLVM</a> 文档;如需 Android 专属指南,请参阅 AOSP 中的 <a href="https://android.googlesource.com/platform/external/clang/+/dev/ReadmeAndroid.md">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>
+
+<h4>Linux 内核版本 4.9 中的 DRM/KMS</h4>
+<p>
+Android 使用的 Direct Rendering Manager (DRM)/Kernel Mode Setting (KMS) 框架由 Linux 内核开发者在 Linux 内核中开发和维护。Android 从 Linux 内核向下合并。如果从我们的通用内核向下合并,设备制造商可以自动获得 DRM/KMS 框架。
+</p>
+<p>
+DRM/KMS 在 Linux 内核版本 4.9 中开始可用,Android <strong>强烈建议</strong> OEM 合作伙伴从这个内核版本开始使用 DRM/KMS。4.9 及更高版本的通用 Android 内核将不再支持 <a href="https://lwn.net/Articles/565422/">Atomic Display Framework (ADF)</a>(Android 目前官方支持的显示框架);从 4.9 版开始,Android 将支持 DRM/KMS。OEM 可以继续使用 ADF(或任何其他框架),但 Android 在通用 Android 内核中将不再为其提供支持。
+</p>
+<p>
+要实现 DRM/KMS,除了从 Android 通用内核向下合并 DRM/KMS 框架之外,您还需要使用 DRM/KMS 编写自己的驱动程序。
+</p>
+
+<h3 id="keystore">密钥存储区</h3>
+
+<h4>Keymaster 3</h4>
+<p>
+Android 8.0 更新了 Keymaster(密钥存储区 HAL):扩展了 Android 设备上硬件支持的密钥存储区的功能。这基于 Android 7.1.2 对 Keymaster 2 的更新。如需更多信息,请参阅 <a href="/security/keystore/index.html">Keymaster 3 文档</a>。
+</p>
+
+<h3 id="security-enhancements">安全增强功能</h3>
+
+<h4>从 HttpsURLConnection 中移除了不安全的 TLS 版本回退功能</h4>
+<p>
+对于某些服务器中有问题的 TLS 协议降级协商实现,不安全的 TLS/SSL 协议版本回退功能是一种解决方法。这种方法容易受到 POODLE 攻击。Chrome 45 在 2015 年 9 月弃用不安全的回退功能时,依赖它的服务器不到 0.01%。为了提高安全性,在 Android 8.0 中,我们从 <a href="https://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html">HttpsURLConnection</a> 中移除了不安全的 TLS 版本回退功能。如需更多信息,请参阅<a href="https://android-developers.googleblog.com/2017/04/android-o-to-drop-insecure-tls-version.html
+">这篇博文</a>。
+</p>
+<p>
+要在搭载 Android 8.0 的设备上测试该功能,请运行以下 CTS 测试用例:
+</p>
+
+<pre class="devsite-click-to-copy devsite-terminal" data-terminal-prefix="# ">
+cts-tradefed run cts -m CtsLibcoreOkHttpTestCases</pre>
+
+<h3 id="performance">性能</h3>
+
+<h4>闪存磨损管理</h4>
+<p>
+此页面介绍了 eMMC 行为和新功能,以协助 OEM 降低车载环境中 eMMC 发生故障的风险。如需更多信息,请参阅 <a href="/devices/tech/perf/flash-wear.html">Android Automotive 中的闪存磨损管理</a>。
+</p>
+
+<h4>优化启动时间</h4>
+<p>
+有关缩短特定 Android 设备启动时间的指南。如需更多信息,请参阅<a href="/devices/tech/perf/boot-times.html">优化启动时间</a>。
+</p>
+
+<h4>任务快照</h4>
+<p>
+任务快照是在 Android 8.0 中引入的基础架构,可将窗口管理器中最近任务的缩略图以及已保存平面的缩略图进行合并,从而节省内存。如需更多信息,请参阅<a href="/devices/tech/perf/task-snapshots.html">任务快照</a>。
+</p>
+
+<h3 id="peripherals">外围设备</h3>
+
+<h4>默认打印服务</h4>
+<p>
+<a href="https://developer.android.com/reference/android/printservice/PrintService.html">打印服务</a>是一款应用,旨在发现打印机并将其呈现给设备的打印框架。在较低的 Android 版本中,用户必须搜索并安装第三方打印服务才能进行打印。
+</p>
+<p>
+Android 8.0 在 <code><a href="https://android.googlesource.com/platform/packages/services/BuiltInPrintService/">platform/packages/services/BuiltInPrintService/</a></code> 中纳入了一项默认打印服务,该服务可让用户在现代打印机上进行打印,而无需安装任何额外的应用。此实现支持符合以下条件的打印机:使用 Internet Printing Protocol (IPP) 进行通信,并使用 PCLm、PWG-Raster 或 PDF 发送可打印的内容。对于较旧的打印机,用户应安装 <a href="https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r1/packages/PrintRecommendationService/">PrintRecommendationService</a> 推荐的应用,如<a href="https://youtu.be/M_JGeGLpOKs?t=16m20s">此 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> 参考文档已更新。
+</p>
+
+<h3 id="settings-menu">“设置”菜单</h3>
+
+<h4>设置:模式和组件</h4>
+<p>
+在 Android 8.0 中,“设置”菜单中增加了一些能够涵盖常见使用情况的组件和微件。如需更多信息,请参阅<a href="/devices/tech/settings/patterns-components.html">模式和组件</a>。
+</p>
+
+<h4>设置:更新了信息架构</h4>
+<p>
+Android 8.0 为“设置”应用引入了全新的信息架构。新信息架构的目标是简化设置的组织方式,让用户能够更轻松地快速查找自定义 Android 设备所需的设置。如需更多信息,请参阅如何实现<a href="/devices/tech/settings/info-architecture.html">更新了的信息架构</a>。
+</p>
+
+<h4>个性化设置</h4>
+<p>
+Android“设置”应用可为用户提供一系列建议。该功能会根据所有相关信息或用户以往与建议的互动情况对建议进行排名。如需更多信息,请参阅<a href="/devices/tech/settings/personalized.html">个性化设置</a>。
+</p>
+
+<h4>实现设置:通用搜索</h4>
+<p>
+Android 8.0 为“设置”菜单添加了经过扩展的搜索功能。该文档介绍了如何添加设置,以及如何确保正确地将其加入“设置”索引。如需更多信息,请参阅<a href="/devices/tech/settings/universal-search.html">通用搜索</a>。
+</p>
+
+<h3 id="storage">存储</h3>
+
+<h4>更快获取存储统计信息</h4>
+<p>
+Android 8.0 利用 EXT4 文件系统的“配额”支持,近乎即时地提供磁盘使用情况统计信息。如需更多信息,请参阅如何<a href="/devices/storage/faster-stats.html">实现更快获取存储统计信息</a>。
+</p>
+
+<h2 id="april-2017">2017 年 4 月</h2>
<p>欢迎访问新版 source.android.com!本网站经过了全新改版,可让您更轻松地浏览、搜索和阅读日益增多的信息。以下是我们对本网站所做改进的摘要:</p>
<h3 id="screen-estate">屏幕空间更宽裕,字体更大</h3>
-<p>整个网站的空间更宽裕,可让您同时查看更多内容。代码示例和命令更加醒目,并且所有文字均采用了更大的字体。</p>
+<p>整个网站的空间更宽裕,可让您同时查看更多内容。代码示例和命令更加醒目,并且所有文字均采用更大的字体。</p>
<h3 id="mobile-ready">适合移动设备的视图</h3>
-<p>通过专用的移动视图,新版网站可以在手持设备上更明晰地呈现内容。</p>
+<p>通过专门的移动视图,新版网站可以在手持设备上更明晰地呈现内容。</p>
<div style="width:407px">
<img src="images/mobile-view.png" alt="新移动视图" height="533px"/>
@@ -38,7 +364,7 @@
</div>
<h3 id="top-tabs">新的顶级标签</h3>
-<p><em></em>之前的“设备”标签已更名为<a href="/devices/">移植</a>,<em></em>并且之前的“核心技术”子标签已更名为<a href="/devices/tech/">微调</a>并移到了网站顶部,以便更好地显示给用户。</p>
+<p>之前的“设备”标签已更名为<a href="/devices/">移植</a>,并且之前的“核心技术”子标签已更名为<a href="/devices/tech/">微调</a>并移到了网站顶部,以便更好地显示给用户。<em></em><em></em></p>
<h3 id="security-forefront">“安全性”标签排在了前列</h3>
<p>随着人们越来越关注 Android 的安全性,我们将<a href="/security/">安全性</a>标签向前移到了<a href="/source/">源代码</a>旁边,以体现其重要性。</p>
@@ -47,11 +373,9 @@
<p>您可以直接从顶层的<a href="/reference/">参考资料</a>标签获得<a href="/reference/hal/">硬件抽象层</a>和 <a href="/reference/tradefed/packages">Trade Federation</a> 参考资料。</p>
<h3 id="code-links">每页都有的代码链接</h3>
-<p>在每个页面中,您只需点击一下右上角的<strong>转到源代码</strong>按钮,即可访问 <a href="https://android.googlesource.com/">AOSP 代码存储库</a>。</p>
+<p>在每个页面中,您只需点击一下右上角的<strong>转到源代码</strong>按钮,即可访问 <a href="https://android.googlesource.com/">AOSP 代码库</a>。</p>
<h3 id="comprehensive-footers">包罗广泛的页脚</h3>
<p><em></em><em></em><em></em>除了已有的“关于”、“社区”和“法律”页脚之外,现在您还可以在每个页面的底部找到完整的链接列表。通过这些链接,您可以编译 Android、与 Android 生态系统建立联系,以及获得使用操作系统方面的帮助。</p>
-<hr />
-<p>和以往一样,我们衷心希望收到您的反馈,您可以使用每个页面(首页除外)右上角附近的<strong>发送反馈</strong>按钮向我们发送反馈。您可以在<strong>转到源代码</strong>下方找到该按钮。</p>
</body></html> \ No newline at end of file
diff --git a/zh-cn/source/submit-patches.html b/zh-cn/source/submit-patches.html
index 0cf4ac3a..bbefec72 100644
--- a/zh-cn/source/submit-patches.html
+++ b/zh-cn/source/submit-patches.html
@@ -24,7 +24,7 @@
<h3 id="prerequisites">前提条件</h3>
<ul>
<li>
-<p>您需要先<a href="/source/initializing.html">初始化编译环境</a>、<a href="/source/downloading.html">下载源代码</a>、<a href="https://android.googlesource.com/new-password">创建密码</a>并按照密码生成器页面上的说明操作,然后再按照本页上的说明操作。</p>
+<p>您需要先<a href="/source/initializing.html">初始化编译环境</a>、<a href="/source/downloading.html">下载源代码</a>、<a href="https://android.googlesource.com/new-password">创建密码</a>并按照密码生成器页面中的说明操作,然后再按照本页中的说明操作。</p>
</li>
<li>
<p>如需详细了解 Repo 和 Git,请参阅<a href="/source/developing.html">开发</a>部分。</p>
@@ -39,19 +39,23 @@
<p>请注意,如果要对 Android 使用的某些上游项目做出更改,请直接针对相应项目进行更改,如<a href="#upstream-projects">上游项目</a>部分中所述。</p>
</li>
</ul>
+
<h2 id="for-contributors">贡献者须知</h2>
+
<h3 id="authenticate-with-the-server">向服务器验证身份</h3>
<p>您需要先<a href="https://android.googlesource.com/new-password">创建一个密码</a>(该密码将用于服务器识别您的身份),然后您才可以向 Gerrit 上传内容。请按照密码生成器页面上的说明操作。您只需执行此流程一次即可。如需了解详情,请参阅<a href="/source/downloading.html#using-authentication">使用身份验证</a>。</p>
<h3 id="start-a-repo-branch">新建一个 Repo 分支</h3>
<p>对于您打算进行的每项更改,请在相关的 Git 存储库中新建一个分支:</p>
-<pre><code>$ repo start NAME .
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo start <var>NAME</var> .
+</pre>
<p>您可以在同一存储库中同时新建多个独立的分支。“NAME”分支是您的工作区的本地分支,不会包含在 Gerrit 或最终源代码树中。</p>
<h3 id="make-your-change">进行更改</h3>
<p>在您修改源代码文件(并且验证)后,请将这些更改提交到您的本地存储库:</p>
-<pre><code>$ git add -A
-$ git commit -s
-</code></pre>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">git add -A</code>
+<code class="devsite-terminal">git commit -s</code>
+</pre>
<p>请在您的提交消息中提供相关更改的详细说明。该说明将会被推送到公开 AOSP 存储库,因此请按照我们的准则来撰写更改列表说明:</p>
<ul>
@@ -68,43 +72,53 @@ $ git commit -s
</ul>
<p>以下是一个示例提交消息:</p>
-<pre><code>short description on first line
+<pre class="devsite-click-to-copy">short description on first line
more detailed description of your patch,
which is likely to take up multiple lines.
-</code></pre>
+</pre>
<p><code>repo
init</code> 期间提供的唯一更改 ID 以及您的姓名和电子邮件将自动添加到您的提交消息中。</p>
+
<h3 id="upload-to-gerrit">上传到 Gerrit</h3>
<p>将更改提交到您的个人历史记录后,请使用以下命令将其上传到 Gerrit:</p>
-<pre><code>$ repo upload
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo upload
+</pre>
<p>如果您在同一存储库中新建了多个分支,则系统会提示您选择要上传的分支。</p>
<p>上传成功后,Repo 会为您提供 <a href="https://android-review.googlesource.com/">Gerrit</a> 上对应新页面的网址。访问该链接可在审核服务器上查看您上传的补丁程序、添加注释,或者为您的补丁程序申请特定审核者。</p>
<h3 id="uploading-a-replacement-patch">上传替换补丁程序</h3>
-<p>假设某位审核者已看过您的补丁程序,并要求您做一些小小的修改。您可以在 Git 中修改提交,这会在 Gerrit 中生成一个新的补丁程序,但具有与原始补丁程序相同的更改 ID。</p>
-<p><em>请注意,如果您在上传该补丁程序之后进行了其他提交,那么您需要手动移动 Git HEAD。</em></p>
-<pre><code>$ git add -A
-$ git commit --amend
-</code></pre>
+<p>假设某位审核者已看过您的补丁程序,并要求您做一些小小的修改。您可以在 Git 中修改提交的内容,这会在 Gerrit 中生成一个新的补丁程序,该补丁程序与原始补丁程序具有相同的更改 ID。</p>
+<aside class="note"><b>注意</b>:如果您在上传该补丁程序之后进行了其他提交,那么您将需要手动移动 Git HEAD。</aside>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">git add -A</code>
+<code class="devsite-terminal">git commit --amend</code>
+</pre>
<p>当您上传修改后的补丁程序时,它将替换 Gerrit 和本地 Git 历史记录中的原始补丁程序。</p>
+
<h3 id="resolving-sync-conflicts">解决同步冲突</h3>
<p>如果提交到源代码树的其他补丁程序与您的存在冲突,那么您需要在源代码存储库的新 HEAD 的基础上对您的补丁程序执行“衍合”(rebase) 命令。执行此操作的一种简单方法是运行以下命令:</p>
-<pre><code>$ repo sync
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo sync
+</pre>
<p>此命令首先从源代码服务器获取更新,然后尝试在新的远程 HEAD 的基础上对您的 HEAD 自动执行衍合命令。</p>
<p>如果自动衍合命令失败,您就必须手动执行衍合。</p>
-<pre><code>$ repo rebase
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo rebase
+</pre>
<p>使用 <code>git mergetool</code> 可帮助您处理衍合冲突。在成功合并冲突文件后,运行以下命令:</p>
-<pre><code>$ git rebase --continue
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+git rebase --continue
+</pre>
<p>在自动或手动衍合完成之后,运行 <code>repo
upload</code> 来提交衍合后的补丁程序。</p>
+
<h3 id="after-a-submission-is-approved">提交内容获得批准后</h3>
<p>在提交内容通过审核和验证流程之后,Gerrit 会自动将更改合并到公开存储库。其他用户可以运行 <code>repo sync</code> 将更新提取到自己的本地客户端。</p>
+
<h2 id="for-reviewers-and-verifiers">审核者和验证者须知</h2>
+
<h3 id="reviewing-a-change">审核更改</h3>
<p>如果您被指定为某项更改的审批者,则需要确定以下事项:</p>
<ul>
@@ -141,10 +155,12 @@ upload</code> 来提交衍合后的补丁程序。</p>
<p>在 Gerrit 中,使用“Publish Comments”(发布注释)功能将提交标记为“Verified”(已验证)或“Fails”(失败),并添加一条消息说明发现了哪些问题。</p>
</li>
</ul>
+
<h3 id="downloading-changes-from-gerrit">从 Gerrit 下载更改</h3>
<p>已验证并合并的提交内容将在下一次运行 <code>repo sync</code> 时下载。如果您希望下载尚未获得批准的特定更改,请运行以下命令:</p>
-<pre><code>$ repo download TARGET CHANGE
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+repo download <var>TARGET CHANGE</var>
+</pre>
<p>其中 TARGET 是更改应该下载到的本地目录,CHANGE 是 <a href="https://android-review.googlesource.com/">Gerrit</a> 中列出的更改编号。如需了解详细信息,请参阅 <a href="/source/using-repo.html">Repo 参考资料</a>。</p>
<h3 id="how-do-i-become-a-verifier-or-approver">如何成为验证者或审批者?</h3>
<p>简言之,为一个或多个 Android 项目贡献高质量代码。要详细了解 Android 开放源代码社区中的不同角色以及谁在担任这些角色,请参阅<a href="/source/roles.html">项目角色</a>。</p>
@@ -159,21 +175,21 @@ upload</code> 来提交衍合后的补丁程序。</p>
<p>Android 使用了许多其他开放源代码项目,例如<a href="/source/code-lines.html">代码行、分支和版本</a>中所述的 Linux 内核和 WebKit。对于 <code>external/</code> 下的大多数项目,如果要提交更改,则应该在上游进行,然后 Android 维护者会收到有关包含这些更改的新上游版本的通知。上传补丁程序也可能有助于我们跟踪新的上游版本,但如果是 Android 中广泛使用的项目(如下面提到的大多数大型项目),我们将很难做出更改。在这种情况下,我们倾向于在每次发布版本时进行升级。</p>
<p>一个有趣的特殊情况是 Bionic。由于大部分代码都是来自 BSD,因此,除非更改涉及对 Bionic 新内容的编码,否则我们宁愿使用上游修复程序,然后从相应的 BSD 中提取一个全新文件。(可惜的是,我们目前有各种不同的 BSD,但我们希望将来能够解决该问题,并能够更密切地跟踪上游项目。)</p>
<h3 id="icu4c">ICU4C</h3>
-<p>对于 <code>external/icu4c</code> 中的 ICU4C 项目,所有更改都应该通过 <a href="http://site.icu-project.org/">icu-project.org/</a> 在上游进行。如需了解详情,请参阅<a href="http://site.icu-project.org/bugs">提交 ICU 错误和功能请求</a>。</p>
+<p>对于 <code>external/icu4c</code> 中的 ICU4C 项目,所有更改都应通过 <a href="http://site.icu-project.org/">icu-project.org/</a> 在上游进行。如需了解详情,请参阅<a href="http://site.icu-project.org/bugs">提交 ICU 错误和功能请求</a>。</p>
<h3 id="llvmclangcompiler-rt">LLVM/Clang/Compiler-rt</h3>
-<p>对 LLVM 相关项目(<code>external/clang</code>、<code>external/compiler-rt</code>、<code>external/llvm</code>)的所有更改都应该通过 <a href="http://llvm.org/">llvm.org/</a> 在上游进行。</p>
+<p>对于与 LLVM 相关的项目(<code>external/clang</code>、<code>external/compiler-rt</code>、<code>external/llvm</code>),所有更改都应通过 <a href="http://llvm.org/">llvm.org/</a> 在上游进行。</p>
<h3 id="mksh">mksh</h3>
-<p>对于 <code>external/mksh</code> 中的 MirBSD Korn Shell 项目,所有更改都应该在上游进行:通过向 miros-mksh@mirbsd.org 发送电子邮件(无需订阅即可提交)或者在 <a href="https://launchpad.net/mksh">Launchpad</a> 中进行(可选)。
+<p>对于 <code>external/mksh</code> 中的 MirBSD Korn Shell 项目,所有更改都应在上游进行:通过向 miros-mksh@mirbsd.org 发送电子邮件(无需订阅即可提交),或者在 <a href="https://launchpad.net/mksh">Launchpad</a> 中进行(可选)。
</p>
<h3 id="openssl">OpenSSL</h3>
-<p>对于 <code>external/openssl</code> 中的 OpenSSL 项目,所有更改都应该通过 <a href="http://www.openssl.org">openssl.org</a> 在上游进行。</p>
+<p>对于 <code>external/openssl</code> 中的 OpenSSL 项目,所有更改都应通过 <a href="http://www.openssl.org">openssl.org</a> 在上游进行。</p>
<h3 id="v8">V8</h3>
-<p>对于 <code>external/v8</code> 中的 V8 项目,所有更改都应该通过 <a href="https://code.google.com/p/v8">code.google.com/p/v8</a> 在上游提交。如需了解详情,请参阅<a href="https://code.google.com/p/v8/wiki/Contributing">为 V8 贡献代码</a>。</p>
+<p>对于 <code>external/v8</code> 中的 V8 项目,所有更改都应通过 <a href="https://code.google.com/p/v8">code.google.com/p/v8</a> 在上游提交。如需了解详情,请参阅<a href="https://code.google.com/p/v8/wiki/Contributing">为 V8 贡献代码</a>。</p>
<h3 id="webkit">WebKit</h3>
-<p>对于 <code>external/webkit</code> 中的 WebKit 项目,所有更改都应该通过 <a href="http://www.webkit.org">webkit.org</a> 在上游进行。该过程需从提交 WebKit 错误开始。只有当该错误仅限于 Android 时,才可以在 <code>Platform</code> 和 <code>OS</code> 字段中使用 <code>Android</code>。如果附有建议的修复程序并包含测试结果,则错误更有可能引起审核者的注意。如需了解详情,请参阅<a href="http://webkit.org/coding/contributing.html">为 WebKit 贡献代码</a>。</p>
+<p>对于 <code>external/webkit</code> 中的 WebKit 项目,所有更改都应通过 <a href="http://www.webkit.org">webkit.org</a> 在上游进行。该过程需从提交 WebKit 错误开始。只有当该错误仅限于 Android 时,才可以在 <code>Platform</code> 和 <code>OS</code> 字段中使用 <code>Android</code>。如果附有建议的修复程序并包含测试结果,则错误更有可能引起审核者的注意。如需了解详情,请参阅<a href="http://webkit.org/coding/contributing.html">为 WebKit 贡献代码</a>。</p>
<h3 id="zlib">zlib</h3>
-<p>对于 <code>external/zlib</code> 中的 zlib 项目,所有更改都应该通过 <a href="http://zlib.net">zlib.net</a> 在上游进行。</p>
+<p>对于 <code>external/zlib</code> 中的 zlib 项目,所有更改都应通过 <a href="http://zlib.net">zlib.net</a> 在上游进行。</p>
</body></html> \ No newline at end of file