Merge "Docs: Changes to source.android.com"
diff --git a/en/compatibility/cts/development.html b/en/compatibility/cts/development.html
index cc66812..3741c35 100644
--- a/en/compatibility/cts/development.html
+++ b/en/compatibility/cts/development.html
@@ -253,6 +253,11 @@
</thead>
<tbody>
<tr>
+ <td>9</td>
+ <td>pie-cts-dev</td>
+ <td>Monthly</td>
+ </tr>
+<tr>
<td>8.1</td>
<td>oreo-mr1-cts-dev</td>
<td>Monthly</td>
@@ -299,7 +304,7 @@
<p>CTS development branches have been set up so that changes submitted to each
branch will automatically merge as below:<br>
marshmallow-cts-dev ->
-nougat-cts-dev -> nougat-mr1-cts-dev -> oreo-cts-dev -> oreo-mr1-cts-dev -> <private-development-branch for Android P></p>
+nougat-cts-dev -> nougat-mr1-cts-dev -> oreo-cts-dev -> oreo-mr1-cts-dev -> pie-cts-dev -> <private-development-branch for Android Q></p>
<p>If a changelist (CL) fails to merge correctly, the author of the CL will get
an email with instructions on how to resolve the conflict. In most of the
diff --git a/en/devices/architecture/hidl/services.html b/en/devices/architecture/hidl/services.html
index 1d2decc..c7ddd8f 100644
--- a/en/devices/architecture/hidl/services.html
+++ b/en/devices/architecture/hidl/services.html
@@ -55,8 +55,8 @@
sp<V1_1::IFooService> service = V1_1::IFooService::getService();
sp<V1_1::IFooService> alternateService = V1_1::IFooService::getService("another_foo_service");
// Java
-V1_1.IFooService; service = V1_1.IFooService.getService(true /* retry */);
-V1_1.IFooService; alternateService = V1_1.IFooService.getService("another", true /* retry */);
+V1_1.IFooService service = V1_1.IFooService.getService(true /* retry */);
+V1_1.IFooService alternateService = V1_1.IFooService.getService("another", true /* retry */);
</pre>
<p>Each version of a HIDL interface is treated as a separate interface. Thus,
diff --git a/en/devices/architecture/vndk/build-system.html b/en/devices/architecture/vndk/build-system.html
index 6c4acf6..72737be 100644
--- a/en/devices/architecture/vndk/build-system.html
+++ b/en/devices/architecture/vndk/build-system.html
@@ -22,299 +22,288 @@
-->
-<p>The build system comes with built-in VNDK support in Android 8.1. If the
-VNDK support is enabled, the build system checks the dependencies between
-modules, builds a vendor-specific variant for vendor modules, and automatically
-installs those modules into designated directories.</p>
+<p>
+ In Android 8.1 and higher, the build system has built-in VNDK support. When
+ VNDK support is enabled, the build system checks the dependencies between
+ modules, builds a vendor-specific variant for vendor modules, and
+ automatically installs those modules into designated directories.
+</p>
-<p>The following example illustrates the basic concepts:</p>
+<h2 id=vndk-build-support-example>VNDK build support example</h2>
-<p><img src="../images/treble_vndk_androidbp.png" alt="libexample with vendor_available:true and vndk.enabled:true" /></p>
-<figcaption><strong>Figure 1.</strong> VNDK support enable.</figcaption>
+<p>
+ In this example, the <code>Android.bp</code> module definition defines a
+ library named <code>libexample</code>. The <code>vendor_available</code>
+ property indicates framework modules and vendor modules may depend on
+ <code>libexample</code>:
+</p>
-<p>The <code>Android.bp</code> module definition defines a
-library named <code>libexample</code>. The <code>vendor_available</code>
-property means that both framework modules and vendor modules may depend on
-<code>libexample</code>. In this example, both the framework executable
-<code>/system/bin/foo</code> and the vendor executable
-<code>/vendor/bin/bar</code> depend on <code>libexample</code> and have
-<code>libexample</code> in their <code>shared_libs</code> properties.</p>
+<p>
+ <img src="../images/treble_vndk_androidbp.png" alt="libexample vendor_available:true and vndk.enabled:true" />
+</p>
+<figcaption>
+ <strong>Figure 1.</strong> VNDK support enabled
+</figcaption>
-<p>If <code>libexample</code> is used by both framework modules and vendor
-modules, two variants of <code>libexample</code> are built. The core
-variant (named after <code>libexample</code>) is used by framework modules
-and the vendor variant (named after <code>libexample.vendor</code>) is
-used by vendor modules.</p>
+<p>
+ Both the framework executable <code>/system/bin/foo</code> and the vendor
+ executable <code>/vendor/bin/bar</code> depend on <code>libexample</code> and
+ have <code>libexample</code> in their <code>shared_libs</code> properties.
+</p>
-<p>Two variants are installed into different directories. The core variant
-is installed into <code>/system/lib[64]/libexample.so</code>. The vendor
-variant is installed into <code>/system/lib[64]/vndk/libexample.so</code>
-because <code>vndk.enabled</code> is <code>true</code>.</p>
+<p>
+ If <code>libexample</code> is used by both framework modules and vendor
+ modules, two variants of <code>libexample</code> are built. The core variant
+ (named after <code>libexample</code>) is used by framework modules and the
+ vendor variant (named after <code>libexample.vendor</code>) is used by vendor
+ modules. The two variants are installed into different directories:
+</p>
-<p>For more details, see
-<a href="#module-definition">Module definition</a>.</p>
+<ul>
+ <li>The core variant is installed into
+ <code>/system/lib[64]/libexample.so</code>.</li>
+ <li>The vendor variant is installed into
+ <code>/system/lib[64]/vndk/libexample.so</code> because
+ <code>vndk.enabled</code> is <code>true</code>.</li>
+</ul>
+<p>
+ For more details, see <a href="#module-definition">Module definition</a>.
+</p>
+<h2 id="configuring-build-support">Configuring build support</h2>
-
-
-<h2 id="configuration">Configuration</h2>
-
-<p>To enable full build system support for a product device, add
-<code>BOARD_VNDK_VERSION</code> to <code>BoardConfig.mk</code>:</p>
+<p>
+ To enable full build system support for a product device, add
+ <code>BOARD_VNDK_VERSION</code> to <code>BoardConfig.mk</code>:
+</p>
<pre class="prettyprint">BOARD_VNDK_VERSION := current</pre>
-
-
-<h3 id="migration-notes">Migration notes</h3>
-
-<p>Adding <code>BOARD_VNDK_VERSION</code> to <code>BoardConfig.mk</code> has a
-global effect. When defined in <code>BoardConfig.mk</code>, all
-modules are checked. There is no mechanism to blacklist or whitelist an
-offending module. The practice is to add <code>BOARD_VNDK_VERSION</code> after
-cleaning all unnecessary dependencies.</p>
-
-<p>During a migration process, you can test and compile a module by setting
-<code>BOARD_VNDK_VERSION</code> in your environment variables:</p>
+<p>
+ This setting has a <strong>global</strong> effect: When defined in
+ <code>BoardConfig.mk</code>, all modules are checked. As there is no mechanism
+ to blacklist or whitelist an offending module, you should clean all
+ unnecessary dependencies before adding <code>BOARD_VNDK_VERSION</code>. You
+ can test and compile a module by setting <code>BOARD_VNDK_VERSION</code> in
+ your environment variables:
+</p>
<pre class="prettyprint">$ BOARD_VNDK_VERSION=current m module_name.vendor</pre>
-<p>Yet another side effect is the removal of <em>default global header search
-paths</em>. If <code>BOARD_VNDK_VERSION</code> is enabled, the following
-default header search paths are not added by default:</p>
+<p>When <code>BOARD_VNDK_VERSION</code> is enabled, several default global
+ header search paths are <em>removed</em>. These include:
+</p>
<ul>
- <li>frameworks/av/include</li>
- <li>frameworks/native/include</li>
- <li>frameworks/native/opengl/include</li>
- <li>hardware/libhardware/include</li>
- <li>hardware/libhardware_legacy/include</li>
- <li>hardware/ril/include</li>
- <li>libnativehelper/include</li>
- <li>libnativehelper/include_deprecated</li>
- <li>system/core/include</li>
- <li>system/media/audio/include</li>
+ <li><code>frameworks/av/include</code></li>
+ <li><code>frameworks/native/include</code></li>
+ <li><code>frameworks/native/opengl/include</code></li>
+ <li><code>hardware/libhardware/include</code></li>
+ <li><code>hardware/libhardware_legacy/include</code></li>
+ <li><code>hardware/ril/include</code></li>
+ <li><code>libnativehelper/include</code></li>
+ <li><code>libnativehelper/include_deprecated</code></li>
+ <li><code>system/core/include</code></li>
+ <li><code>system/media/audio/include</code></li>
</ul>
-<p>If a module depends on the headers from these directories, its author must
-explicitly specify the dependencies with <code>header_libs</code>,
-<code>static_libs</code>, and/or <code>shared_libs</code>.</p>
-
-
-
-
+<p>
+ If a module depends on the headers from these directories, you must specify
+ (explicitly) the dependencies with <code>header_libs</code>,
+ <code>static_libs</code>, and/or <code>shared_libs</code>.
+</p>
<h2 id="module-definition">Module definition</h2>
-<p>To build Android with <code>BOARD_VNDK_VERSION</code>, developers must
-revise their module definition in either <code>Android.mk</code> or
-<code>Android.bp</code>. This subsection describes different kinds of module
-definitions, several VNDK-related module properties, and the dependency checks
-implemented in the build system.</p>
-
-
+<p>
+ To build Android with <code>BOARD_VNDK_VERSION</code>, you must revise the
+ module definition in either <code>Android.mk</code> or
+ <code>Android.bp</code>. This section describes different kinds of module
+ definitions, several VNDK-related module properties, and dependency checks
+ implemented in the build system.
+</p>
<h3 id="vendor-modules">Vendor modules</h3>
-<p>Vendor modules are vendor-specific executables or shared libraries that
-must be installed into a vendor partition. In <code>Android.bp</code> files,
-vendor modules must set vendor or proprietary property to <code>true</code>. In
-<code>Android.mk</code> files, vendor modules must set
-<code>LOCAL_VENDOR_MODULE</code> or <code>LOCAL_PROPRIETARY_MODULE</code> to
-<code>true</code>.</p>
+<p>
+ Vendor modules are vendor-specific executables or shared libraries that
+ must be installed into a vendor partition. In <code>Android.bp</code> files,
+ vendor modules must set vendor or proprietary property to <code>true</code>.
+ In <code>Android.mk</code> files, vendor modules must set
+ <code>LOCAL_VENDOR_MODULE</code> or <code>LOCAL_PROPRIETARY_MODULE</code> to
+ <code>true</code>.
+</p>
-<p>If <code>BOARD_VNDK_VERSION</code> is defined, the build system
-disallows the dependencies between vendor modules and framework modules. The
-build system emits errors if:</p>
+<p>
+ If <code>BOARD_VNDK_VERSION</code> is defined, the build system disallows
+ dependencies between vendor modules and framework modules and emits errors if:
+</p>
<ul>
<li>a module without <code>vendor:true</code> depends on a module with
<code>vendor:true</code>, or</li>
-
<li>a module with <code>vendor:true</code> depends on a
non-<code>llndk_library</code> module that has neither
<code>vendor:true</code> nor <code>vendor_available:true</code>.</li>
</ul>
-<p>The aforementioned dependency check applies to <code>header_libs</code>,
-<code>static_libs</code>, and <code>shared_libs</code> in
-<code>Android.bp</code>. It also applies to
-<code>LOCAL_HEADER_LIBRARIES</code>, <code>LOCAL_STATIC_LIBRARIES</code> and
-<code>LOCAL_SHARED_LIBRARIES</code> in <code>Android.mk</code>.</p>
-
-
+<p>
+ The dependency check applies to <code>header_libs</code>,
+ <code>static_libs</code>, and <code>shared_libs</code> in
+ <code>Android.bp</code>, and to <code>LOCAL_HEADER_LIBRARIES</code>,
+ <code>LOCAL_STATIC_LIBRARIES</code> and <code>LOCAL_SHARED_LIBRARIES</code> in
+ <code>Android.mk</code>.
+</p>
<h3 id="ll-ndk">LL-NDK</h3>
-<p>LL-NDK shared libraries are shared libraries with stable ABIs. Both
-framework and vendor modules share the same and the latest implementation. For
-each LL-NDK shared library, there is an <code>llndk_library</code> module definition in
-an <code>Android.bp</code> file:</p>
+<p>
+ LL-NDK shared libraries are shared libraries with stable ABIs. Both framework
+ and vendor modules share the same and the latest implementation. For each
+ LL-NDK shared library, <code>Android.bp</code> contains a
+ <code>llndk_library</code> module definition:
+</p>
-<pre class="prettyprint">llndk_library {
+<pre class="prettyprint">
+llndk_library {
name: "libvndksupport",
symbol_file: "libvndksupport.map.txt",
-}</pre>
+}
+</pre>
-<p>This module definition specifies a module name and a symbol file, which
-describes the symbols that should be visible to vendor modules. For
-example:</p>
+<p>
+ This module definition specifies a module name and a symbol file that
+ describes the symbols visible to vendor modules. For example:
+</p>
-<pre class="prettyprint">LIBVNDKSUPPORT {
+<pre class="prettyprint">
+LIBVNDKSUPPORT {
global:
android_load_sphal_library; # vndk
android_unload_sphal_library; # vndk
local:
*;
-};</pre>
+};
+</pre>
-<p>Based on the symbol file, the build system generates a stub shared
-library for vendor modules. Vendor modules link with these stub
-shared libraries if <code>BOARD_VNDK_VERSION</code> is enabled.</p>
-
-<p>A symbol is included in the stub shared library only if:</p>
+<p>
+ Based on the symbol file, the build system generates a stub shared library for
+ vendor modules, which link with these libraries when
+ <code>BOARD_VNDK_VERSION</code> is enabled. A symbol is included in the stub
+ shared library only if it:
+</p>
<ul>
- <li>it is not defined in the section end with <code>_PRIVATE</code> or
+ <li>Is not defined in the section end with <code>_PRIVATE</code> or
<code>_PLATFORM</code>,</li>
-
- <li>it does not have <code>#platform-only</code> tag, and</li>
-
- <li>it does not have <code>#introduce*</code> tags or the tag matches with the
+ <li>Does not have <code>#platform-only</code> tag, and</li>
+ <li>Does not have <code>#introduce*</code> tags or the tag matches with the
target.</li>
</ul>
-<aside class="note"><strong>Note</strong>: Vendors must not define their own LL-NDK
-shared libraries because vendor modules won't be able to find them in
-<em>Generic System Image (GSI)</em>.</aside>
-
-
+<aside class="note">
+ <strong>Note</strong>: Vendors must not define their own LL-NDK shared
+ libraries because vendor modules won't be able to find them in
+ <a href="/setup/build/gsi">Generic System Image (GSI)</a>.
+</aside>
<h3 id="vndk">VNDK</h3>
-<p>In <code>Android.bp</code> files, <code>cc_library</code>,
-<code>cc_library_static</code>, <code>cc_library_shared</code>, and
-<code>cc_library_headers</code> module definitions support three VNDK-related
-properties: <code>vendor_available</code>, <code>vndk.enabled</code>, and
-<code>vndk.support_system_process</code>.</p>
+<p>
+ In <code>Android.bp</code> files, <code>cc_library</code>,
+ <code>cc_library_static</code>, <code>cc_library_shared</code>, and
+ <code>cc_library_headers</code> module definitions support three VNDK-related
+ properties: <code>vendor_available</code>, <code>vndk.enabled</code>, and
+ <code>vndk.support_system_process</code>.
+</p>
-<p>If <code>vendor_available</code> or <code>vndk.enabled</code> is
-<code>true</code>, two variants (<em>core</em> and <em>vendor</em>) may be
-built. The core variant should be treated as a framework module and the vendor
-variant should be treated as a vendor module. If some framework modules depend
-on this module, the core variant is built. If some vendor modules
-depend on this module, the vendor variant is built.</p>
-
-<p>The build system enforces these dependency checks:</p>
+<p>
+ If <code>vendor_available</code> or <code>vndk.enabled</code> is
+ <code>true</code>, two variants (<em>core</em> and <em>vendor</em>) may be
+ built. The core variant should be treated as a framework module and the vendor
+ variant should be treated as a vendor module. If some framework modules depend
+ on this module, the core variant is built. If some vendor modules
+ depend on this module, the vendor variant is built. The build system enforces
+ the following dependency checks:
+</p>
<ul>
<li>The core variant is always framework-only and inaccessible to vendor
modules.</li>
-
<li>The vendor variant is always inaccessible to framework modules.</li>
-
<li>All dependencies of the vendor variant, which are specified in
<code>header_libs</code>, <code>static_libs</code>, and/or
<code>shared_libs</code>, must be either an <code>llndk_library</code> or a
module with <code>vendor_available</code> or <code>vndk.enabled</code>.</li>
-
<li>If <code>vendor_available</code> is <code>true</code>, the vendor variant
is accessible to all vendor modules.</li>
-
<li>If <code>vendor_available</code> is <code>false</code>, the vendor variant
is accessible only to other VNDK or VNDK-SP modules (i.e., modules with
<code>vendor:true</code> cannot link <code>vendor_available:false</code>
modules).</li>
</ul>
-<p>The default installation path for <code>cc_library</code> or
-<code>cc_library_shared</code> is determined by the following rules:</p>
+<p>
+ The default installation path for <code>cc_library</code> or
+ <code>cc_library_shared</code> is determined by the following rules:
+</p>
<ul>
- <li>
- The core variant is installed to <code>/system/lib[64]</code>.
- </li>
-
- <li>
- The vendor variant installation path may vary:
-
+ <li>The core variant is installed to <code>/system/lib[64]</code>.</li>
+ <li>The vendor variant installation path may vary:
<ul>
- <li>
- If <code>vndk.enabled</code> is <code>false</code>, the vendor
- variant is installed into <code>/vendor/lib[64]</code>.
- </li>
-
- <li>
- If <code>vndk.enabled</code> is <code>true</code>,
+ <li>If <code>vndk.enabled</code> is <code>false</code>, the vendor variant
+ is installed into <code>/vendor/lib[64]</code>.</li>
+ <li>If <code>vndk.enabled</code> is <code>true</code>,
<code>vndk.support_system_process</code> can be either <code>true</code> or
- <code>false</code>.
-
- <ul>
- <li>
- If <code>vndk.support_system_process</code> is <code>false</code>,
- the vendor variant is installed into
- <code>/system/lib[64]/vndk-${VER}</code>.
- </li>
-
- <li>
- Conversely, the vendor variant is installed to
- <code>/system/lib[64]/vndk-sp-${VER}</code>.
- </li>
+ <code>false</code>. If:
+ <ul>
+ <li><code>false</code>, the vendor variant is installed into
+ <code>/system/lib[64]/vndk-${VER}</code>.</li>
+ <li><code>true</code>, the vendor variant is installed to
+ <code>/system/lib[64]/vndk-sp-${VER}</code>.</li>
</ul>
</li>
</ul>
</li>
</ul>
-<p>The table below summarizes how the build system handles the vendor
-variants:</p>
-
-
+<p>
+ The table below summarizes how the build system handles the vendor variants:
+</p>
<table>
<tr>
- <th rowspan="2"><p><code>vendor_available</code></p></th>
- <th colspan="2"><p><code>vndk</code></p></th>
- <th rowspan="2"><p><code>Vendor variant descriptions</code></p></th>
+ <th>vendor_available</th>
+ <th style="text-align: center">vndk<br>enabled</th>
+ <th style="text-align: center">vndk<br>support_same_process</th>
+ <th>Vendor variant descriptions</th>
</tr>
<tr>
- <th><p><code>enabled</code></p></th>
- <th><p><code>support_same_process</code></p></th>
+ <td rowspan="4"><code>true</code></td>
+ <td rowspan="2"><code>false</code></td>
+ <td><code>false</code></td>
+ <td>The vendor variants are <em>VND-ONLY</em>. Shared libraries are
+ installed into <code>/vendor/lib[64]</code>.</td>
</tr>
<tr>
- <td rowspan="4"><p><code>true</code></p></td>
- <td rowspan="2"><p><code>false</code></p></td>
- <td><p><code>false</code></p></td>
- <td>
- <p>The vendor variants are <em>VND-ONLY</em></p>
- <p>Shared libraries are installed into <code>/vendor/lib[64]</code>.</p>
- </td>
+ <td><code>true</code></td>
+ <td><em>Invalid</em> (Build error)</td>
</tr>
<tr>
- <td><p><code>true</code></p></td>
- <td><p><em>Invalid</em> (Build error)</p></td>
+ <td rowspan="2"><code>true</code></td>
+ <td><code>false</code></td>
+ <td>The vendor variants are <em>VNDK</em>. Shared libraries are installed
+ to <code>/system/lib[64]/vndk-${VER}</code>.</td>
</tr>
<tr>
- <td rowspan="2"><p><code>true</code></p></td>
- <td><p><code>false</code></p></td>
- <td>
- <p>The vendor variants are <em>VNDK</em>.</p>
- <p>Shared libraries are installed to
- <code>/system/lib[64]/vndk-${VER}</code>.</p>
- </td>
- </tr>
-
- <tr>
- <td><p><code>true</code></p></td>
- <td>
- <p>The vendor variants are <em>VNDK-SP</em>.</p>
- <p>Shared libraries are installed to
- <code>/system/lib[64]/vndk-sp-${VER}</code>.</p>
- </td>
+ <td><code>true</code></td>
+ <td>The vendor variants are <em>VNDK-SP</em>. Shared libraries are
+ installed to <code>/system/lib[64]/vndk-sp-${VER}</code>.</td>
</tr>
<tr>
@@ -325,51 +314,48 @@
</tr>
<tr>
- <td><p><code>true</code></p></td>
- <td><p><em>Invalid</em> (Build error)</p></td>
+ <td><code>true</code></td>
+ <td><em>Invalid</em> (Build error)</td>
</tr>
<tr>
- <td rowspan="2"><p><code>true</code></p></td>
- <td><p><code>false</code></p></td>
- <td>
- <p>The vendor variants are <em>VNDK-Private</em>.</p>
- <p>Shared libraries are installed to
- <code>/system/lib[64]/vndk-${VER}</code>.</p>
- <p>These must not be directly used by vendor modules.</p>
- </td>
+ <td rowspan="2"><code>true</code></td>
+ <td><code>false</code></td>
+ <td>The vendor variants are <em>VNDK-Private</em>. Shared libraries are
+ installed to <code>/system/lib[64]/vndk-${VER}</code>.These must not be
+ directly used by vendor modules.</td>
</tr>
<tr>
- <td><p><code>true</code></p></td>
- <td>
- <p>The vendor variants are <em>VNDK-SP-Private</em>.</p>
- <p>Shared libraries are installed to
- <code>/system/lib[64]/vndk-sp-${VER}</code>.</p>
- <p>These must not be directly used by vendor modules.</p>
- </td>
+ <td><code>true</code></td>
+ <td>The vendor variants are <em>VNDK-SP-Private</em>. Shared libraries are
+ installed to <code>/system/lib[64]/vndk-sp-${VER}</code>. These must not be
+ directly used by vendor modules.</td>
</tr>
</table>
-<aside class="note"><strong>Note</strong>: Vendors may set
-<code>vendor_available</code> to their modules. However, vendors must not set
-<code>vndk.enabled</code> nor <code>vndk.support_system_process</code> because
-vendor modules won't be able to find them in GSI.</aside>
-
-
+<aside class="note">
+ <strong>Note</strong>: Vendors may set <code>vendor_available</code> to their
+ modules but must not set <code>vndk.enabled</code> or
+ <code>vndk.support_system_process</code> because the modules won't be able
+ to find them in the <a href="/setup/build/gsi">Generic System Image (GSI)</a>.
+</aside>
<h3 id="vndk-extensions">VNDK extensions</h3>
-<p>VNDK extensions are VNDK shared libraries with additional APIs. VNDK
-extensions are installed to <code>/vendor/lib[64]/vndk[-sp]</code> (without
-version suffix) and override the original VNDK shared libraries at runtime.</p>
-
+<p>
+ VNDK extensions are VNDK shared libraries with additional APIs. Extensions are
+ installed to <code>/vendor/lib[64]/vndk[-sp]</code> (without version suffix)
+ and override the original VNDK shared libraries at runtime.
+</p>
<h4 id="defining-vndk-extensions">Defining VNDK extensions</h4>
-<p>In Android P, <code>Android.bp</code> natively supports VNDK extensions. To
-build a VNDK extension, define another module with a <code>vendor:true</code>
-and an <code>extends</code> property:</p>
+<p>
+ In Android 9 and higher, <code>Android.bp</code> natively supports VNDK
+ extensions. To build a VNDK extension, define another module with a
+ <code>vendor:true</code> and an <code>extends</code> property:
+</p>
<pre class="prettyprint">
cc_library {
@@ -390,28 +376,28 @@
}
</pre>
-<p>A module with <code>vendor:true</code>, <code>vndk.enabled:true</code>, and
-<code>extends</code> properties defines VNDK extension:</p>
+<p>
+ A module with <code>vendor:true</code>, <code>vndk.enabled:true</code>, and
+ <code>extends</code> properties defines the VNDK extension:</p>
<ul>
<li>The <code>extends</code> property must specify a base VNDK shared library
- name (or VNDK-SP shared library name).</li>
-
- <li>VNDK extensions (or VNDK-SP extensions) are named after the base module
- names from which they extend. For example, the output binary of <code>libvndk_ext</code>
- is <code>libvndk.so</code> instead of <code>libvndk_ext.so</code>.</li>
-
- <li>VNDK extensions are installed into <code>/vendor/lib[64]/vndk</code>.</li>
-
- <li>VNDK-SP extensions are installed into
- <code>/vendor/lib[64]/vndk-sp</code>.</li>
-
- <li>The base shared libraries must have both <code>vndk.enabled:true</code> and
- <code>vendor_available:true</code>.</li>
+ name (or VNDK-SP shared library name).</li>
+ <li>VNDK extensions (or VNDK-SP extensions) are named after the base module
+ names from which they extend. For example, the output binary of
+ <code>libvndk_ext</code> is <code>libvndk.so</code> instead of
+ <code>libvndk_ext.so</code>.</li>
+ <li>VNDK extensions are installed into <code>/vendor/lib[64]/vndk</code>.</li>
+ <li>VNDK-SP extensions are installed into
+ <code>/vendor/lib[64]/vndk-sp</code>.</li>
+ <li>The base shared libraries must have both <code>vndk.enabled:true</code>
+ and <code>vendor_available:true</code>.</li>
</ul>
-<p>A VNDK-SP extension must extend from a VNDK-SP shared library. In other
-words, <code>vndk.support_system_process</code> must be equal:</p>
+<p>
+ A VNDK-SP extension must extend from a VNDK-SP shared library
+ (<code>vndk.support_system_process</code> must be equal):
+</p>
<pre class="prettyprint">
cc_library {
@@ -434,8 +420,10 @@
}
</pre>
-<p>VNDK extensions (or VNDK-SP extensions) may depend on other vendor shared
-libraries:</p>
+<p>
+ VNDK extensions (or VNDK-SP extensions) may depend on other vendor shared
+ libraries:
+</p>
<pre class="prettyprint">
cc_library {
@@ -464,16 +452,19 @@
}
</pre>
-<aside class="note"><strong>Note:</strong> Similar to SP-HAL-Dep, VNDK-SP
-extensions and their dependencies (including vendor libraries) must be labeled
-as <code>same_process_hal_file</code> in sepolicy.</aside>
-
+<aside class="note">
+ <strong>Note:</strong> Similar to SP-HAL-Dep, VNDK-SP extensions and their
+ dependencies (including vendor libraries) must be labeled as
+ <code>same_process_hal_file</code> in sepolicy.
+</aside>
<h4 id="using-vndk-extensions">Using VNDK extensions</h4>
-<p>If a vendor module depends on some additional APIs defined by VNDK
-extensions, it must specify the name of the VNDK extension in its
-<code>shared_libs</code> property:</p>
+<p>
+ If a vendor module depends on additional APIs defined by VNDK extensions, the
+ module must specify the name of the VNDK extension in its
+ <code>shared_libs</code> property:
+</p>
<pre class="prettyprint">
// A vendor shared library example
@@ -495,33 +486,40 @@
}
</pre>
-<p>If a vendor module depends on some VNDK extensions, those VNDK extensions
-will be installed to <code>/vendor/lib[64]/vndk[-sp]</code> automatically.</p>
-
-<p>If a module no longer depends on a VNDK extension, add a clean step to
-<code>CleanSpec.mk</code> to remove the shared library. For example:</p>
+<p>
+ If a vendor module depends on VNDK extensions, those VNDK extensions are
+ installed to <code>/vendor/lib[64]/vndk[-sp]</code> automatically. If a module
+ no longer depends on a VNDK extension, add a clean step to
+ <code>CleanSpec.mk</code> to remove the shared library. For example:
+</p>
<pre class="prettyprint">
$(call add-clean-step, rm -rf $(TARGET_OUT_VENDOR)/lib/libvndk.so)
</pre>
-
-
<h3 id="conditional-compilation">Conditional compilation</h3>
-<p>This subsection describes how to deal with the <em>subtle differences</em>
-(e.g. adding or removing a feature from one of the variants) between three VNDK
-shared libraries: (1) the core variant (e.g.
-<code>/system/lib[64]/libexample.so</code>), (2) the vendor variant (e.g.
-<code>/system/lib[64]/vndk[-sp]-${VER}/libexample.so</code>), and (3) the VNDK
-extension (e.g. <code>/vendor/lib[64]/vndk[-sp]/libexample.so</code>).
+<p>
+ This section describes how to deal with the <em>subtle differences</em> (e.g.
+ adding or removing a feature from one of the variants) between the following
+ three VNDK shared libraries:
+</p>
+<ul>
+ <li>core variant (e.g. <code>/system/lib[64]/libexample.so</code>)</li>
+ <li>vendor variant (e.g.
+ <code>/system/lib[64]/vndk[-sp]-${VER}/libexample.so</code>)</li>
+ <li>VNDK extension (e.g. <code>/vendor/lib[64]/vndk[-sp]/libexample.so</code>)
+ </li>
+</ul>
<h4 id="conditional-cflags">Conditional compiler flags</h4>
-<p>The Android build system defines <code>__ANDROID_VNDK__</code> for
-vendor variants (including VNDK extensions) by default. You may guard the code
-with the C preprocessor guards:</p>
+<p>
+ The Android build system defines <code>__ANDROID_VNDK__</code> for vendor
+ variants (including VNDK extensions) by default. You may guard the code
+ with the C preprocessor guards:
+</p>
<pre class="prettyprint">
void all() { }
@@ -535,12 +533,14 @@
#endif
</pre>
-<p>In addition to <code>__ANDROID_VNDK__</code>, different <code>cflags</code>
-or <code>cppflags</code> may be specified in <code>Android.bp</code>. The
-<code>cflags</code> or <code>cppflags</code> specified in
-<code>target.vendor</code> is specific to the vendor variant. For example, the
-code below is the <code>Android.bp</code> module definition for
-<code>libexample</code> and <code>libexample_ext</code>:</p>
+<p>
+ In addition to <code>__ANDROID_VNDK__</code>, different <code>cflags</code> or
+ <code>cppflags</code> may be specified in <code>Android.bp</code>. The
+ <code>cflags</code> or <code>cppflags</code> specified in
+ <code>target.vendor</code> is specific to the vendor variant. For example, the
+ following code example is the <code>Android.bp</code> module definition for
+ <code>libexample</code> and <code>libexample_ext</code>:
+</p>
<pre class="prettyprint">
cc_library {
@@ -572,7 +572,9 @@
}
</pre>
-<p>The code listing of <code>example.c</code>:</p>
+<p>
+ Code listing of <code>example.c</code>:
+</p>
<pre class="prettyprint">
void all() { }
@@ -590,7 +592,9 @@
#endif
</pre>
-<p>And the exported symbols for each variant will be:</p>
+<p>
+ Exported symbols for each variant:
+</p>
<table>
<tr>
@@ -614,30 +618,29 @@
</tr>
</table>
-<!-- TODO: The paragraph below looks awkward. Refine this subsection to make
-this more fluent. -->
-
-<p>The VNDK ABI compliance checker compares the ABI of VNDK and VNDK
-extensions to the ABI dumps under <code>prebuilts/abi-dumps/vndk</code>:</p>
+<p>
+ The VNDK ABI compliance checker compares the ABI of VNDK and VNDK
+ extensions to the ABI dumps under <code>prebuilts/abi-dumps/vndk</code>:
+</p>
<ul>
- <li>Symbols exported by original VNDK shared libraries must be identical to
- (not the supersets of) the symbols defined in ABI dumps.</li>
-
- <li>Symbols exported by VNDK extensions must be supersets of the symbols
- defined in ABI dumps.</li>
+ <li>Symbols exported by original VNDK shared libraries must be identical to
+ (not the supersets of) the symbols defined in ABI dumps.</li>
+ <li>Symbols exported by VNDK extensions must be supersets of the symbols
+ defined in ABI dumps.</li>
</ul>
+<h4 id="excluding">Excluding source files or shared libs</h4>
-<h4 id="exclude-source-files-or-shared-libs">Exclude source files or shared
-libs</h4>
+<p>
+ To exclude source files from the vendor variant, add them to the
+ <code>exclude_srcs</code> property. Similarly, to ensure shared libraries are
+ not linked with the vendor variant, add those libraries to the
+ <code>exclude_shared_libs</code> property. For example:
+</p>
-<p>To exclude source files from the vendor variant, add them to the
-<code>exclude_srcs</code> property. Similarly, to ensure specific shared
-libraries are not linked with the vendor variant, add them to the
-<code>exclude_shared_libs</code> property. For example:</p>
-
-<pre class="prettyprint">cc_library {
+<pre class="prettyprint">
+cc_library {
name: "libcond_exclude_example",
srcs: ["fwk.c", "both.c"],
shared_libs: ["libfwk_only", "libboth"],
@@ -647,64 +650,70 @@
exclude_shared_libs: ["libfwk_only"],
},
},
-}</pre>
+}
+</pre>
-<p>In this example, the core variant of <code>libcond_exclude_example</code>
-includes the code from <code>fwk.c</code> and <code>both.c</code> and depends
-on the shared libraries <code>libfwk_only</code> and <code>libboth</code>.</p>
-
-<p>On the other hand, the vendor variant of
-<code>libcond_exclude_example</code> includes only the code from
-<code>both.c</code> because <code>fwk.c</code> is excluded by the
-<code>exclude_srcs</code> property. Similarly,
-<code>libcond_exclude_example</code> depends only on the shared library
-<code>libboth</code> because <code>libfwk_only</code> is excluded by
-the</code><br/> <code>exclude_shared_libs</code> property.
-
-
-<!-- <h4 id="vndk-ext-header-guideline">VNDK extension header guidelines</h4> -->
-
-<!-- TODO: Add the guide line for VNDK extension headers. -->
-
-
+<p>
+ In this example, the core variant of <code>libcond_exclude_example</code>
+ includes the code from <code>fwk.c</code> and <code>both.c</code> and depends
+ on the shared libraries <code>libfwk_only</code> and <code>libboth</code>. The
+ vendor variant of <code>libcond_exclude_example</code> includes only the code
+ from <code>both.c</code> because <code>fwk.c</code> is excluded by the
+ <code>exclude_srcs</code> property. Similarly,
+ <code>libcond_exclude_example</code> depends only on the shared library
+ <code>libboth</code> because <code>libfwk_only</code> is excluded by the
+ <code>exclude_shared_libs</code> property.
+</p>
<h3 id="product-packages">Product packages</h3>
-<p>In the Android build system, the variable <code>PRODUCT_PACKAGES</code>
-specifies the executables, shared libraries, or packages that should be
-installed into the device. The transitive dependencies of the specified modules
-are implicitly installed into the device as well.</p>
+<p>
+ In the Android build system, the variable <code>PRODUCT_PACKAGES</code>
+ specifies the executables, shared libraries, or packages that should be
+ installed into the device. The transitive dependencies of the specified
+ modules are implicitly installed into the device as well.
+</p>
-<p>If <code>BOARD_VNDK_VERSION</code> is enabled, modules with
-<code>vendor_available</code> or <code>vndk.enabled</code> get special
-treatments. If a framework module depends on a module with
-<code>vendor_available</code> or <code>vndk.enabled</code>, the core
-variant is included in the transitive installation set. Similarly, if a
-vendor module depends on a module with <code>vendor_available</code> or
-<code>vndk.enabled</code>, the vendor variant is included in the
-transitive installation set.</p>
+<p>
+ If <code>BOARD_VNDK_VERSION</code> is enabled, modules with
+ <code>vendor_available</code> or <code>vndk.enabled</code> get special
+ treatment. If a framework module depends on a module with
+ <code>vendor_available</code> or <code>vndk.enabled</code>, the core variant
+ is included in the transitive installation set. Similarly, if a vendor module
+ depends on a module with <code>vendor_available</code> or
+ <code>vndk.enabled</code>, the vendor variant is included in the transitive
+ installation set.
+</p>
-<p>When the dependencies are invisible to the build system (e.g. shared
-libraries that may be opened with <code>dlopen()</code> in runtime), you
-should specify the module names in <code>PRODUCT_PACKAGES</code> to install
-those modules explicitly.</p>
+<p>
+ When the dependencies are invisible to the build system (e.g. shared libraries
+ that may be opened with <code>dlopen()</code> in runtime), you should specify
+ the module names in <code>PRODUCT_PACKAGES</code> to install those modules
+ explicitly.
+</p>
-<p>If a module has <code>vendor_available</code> or <code>vndk.enabled</code>,
-the module name stands for its core variant. To explicitly specify the
-vendor variant in <code>PRODUCT_PACKAGES</code>, append a <code>.vendor</code>
-suffix to the module name. For example:</p>
+<p>
+ If a module has <code>vendor_available</code> or <code>vndk.enabled</code>,
+ the module name stands for its core variant. To explicitly specify the
+ vendor variant in <code>PRODUCT_PACKAGES</code>, append a <code>.vendor</code>
+ suffix to the module name. For example:
+</p>
-<pre class="prettyprint">cc_library {
+<pre class="prettyprint">
+cc_library {
name: "libexample",
srcs: ["example.c"],
vendor_available: true,
-}</pre>
+}
+</pre>
-<p>In this example, <code>libexample</code> stands for
-<code>/system/lib[64]/libexample.so</code> and <code>libexample.vendor</code>
-stands for <code>/vendor/lib[64]/libexample.so</code>. To install
-<code>/vendor/lib[64]/libexample.so</code>, add <code>libexample.vendor</code>
-to <code>PRODUCT_PACKAGES</code>:</p>
+<p>
+ In this example, <code>libexample</code> stands for
+ <code>/system/lib[64]/libexample.so</code> and <code>libexample.vendor</code>
+ stands for <code>/vendor/lib[64]/libexample.so</code>. To install
+ <code>/vendor/lib[64]/libexample.so</code>, add <code>libexample.vendor</code>
+ to <code>PRODUCT_PACKAGES</code>:
+</p>
<pre class="prettyprint">PRODUCT_PACKAGES += libexample.vendor</pre>
diff --git a/en/devices/tech/connect/carrier-wifi.md b/en/devices/tech/connect/carrier-wifi.md
index eabe25e..c775cbf 100644
--- a/en/devices/tech/connect/carrier-wifi.md
+++ b/en/devices/tech/connect/carrier-wifi.md
@@ -34,17 +34,15 @@
### Manufacturers
-In the carrier config manager, configure the following parameters for each
-carrier:
+In the carrier config manager, configure the following parameters, located in
+[`CarrierConfigManager.java`](https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java),
+for each carrier:
-+ [KEY_CARRIER_WIFI_STRING_ARRAY](https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#1599):
- Base64-encoded Wi-Fi SSID.
-+ [IMSI_KEY_AVAILABILITY_INT](https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#1830):
- Identifies whether the key used for IMSI encryption is available for WLAN or
- EPDG, or both.
-+ [IMSI_KEY_DOWNLOAD_URL_STRING](https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/android/telephony/CarrierConfigManager.java#1823):
- URL from which the proto containing the public key of the carrier used for
- IMSI encryption is downloaded.
++ `KEY_CARRIER_WIFI_STRING_ARRAY`: Base64-encoded Wi-Fi SSID.
++ `IMSI_KEY_AVAILABILITY_INT`: Identifies whether the key used for IMSI
+ encryption is available for WLAN or EPDG, or both.
++ `IMSI_KEY_DOWNLOAD_URL_STRING`: URL from which the proto containing the
+ public key of the carrier used for IMSI encryption is downloaded.
### Carriers
diff --git a/en/devices/tech/debug/gdb.html b/en/devices/tech/debug/gdb.html
index d021dae..e2ff21d 100644
--- a/en/devices/tech/debug/gdb.html
+++ b/en/devices/tech/debug/gdb.html
@@ -30,11 +30,11 @@
<h2 id=running>Debugging running apps or processes</h2>
<p>To connect to an already-running app or native daemon, use
-<code>gdbclient</code> with a PID. For example, to debug the process with PID
+<code>gdbclient.py</code> with a PID. For example, to debug the process with PID
1234, run:</p>
<pre class="devsite-terminal devsite-click-to-copy">
-gdbclient 1234
+gdbclient.py -p 1234
</pre>
<p>The script sets up port forwarding, starts the appropriate
@@ -42,6 +42,9 @@
the host, configures <code>gdb</code> to find symbols, and connects
<code>gdb</code> to the remote <code>gdbserver</code>.</p>
+<aside class="note"><strong>Note:</strong> in Android 6 and earlier the script was a shell script
+called <code>gdbclient</code> instead of a Python script called <code>gdbclient.py</code>.</aside>
+
<h2 id=starts>Debugging native process startup</h2>
<p>To debug a process as it starts, use <code>gdbserver</code> or
@@ -61,7 +64,7 @@
use it in another terminal window:</p>
<pre class="devsite-terminal devsite-click-to-copy">
-gdbclient <var>APP_PID</var>
+gdbclient.py -p <var>APP_PID</var>
</pre>
<p>Finally, enter <strong>continue</strong> at the <code>gdb</code> prompt.</p>
@@ -124,7 +127,7 @@
<p>At the end of the usual crash output, <code>debuggerd</code> provides
instructions on how to connect <code>gdb</code> using the command:
<pre class="devsite-terminal devsite-click-to-copy">
-gdbclient <var>PID</var>
+gdbclient.py -p <var>PID</var>
</pre>
diff --git a/en/devices/tech/debug/index.html b/en/devices/tech/debug/index.html
index 7d99545..204a851 100644
--- a/en/devices/tech/debug/index.html
+++ b/en/devices/tech/debug/index.html
@@ -105,7 +105,7 @@
full path.</p>
<pre class="devsite-terminal devsite-click-to-copy">
-development/tools/stack
+development/scripts/stack
</pre>
<p>Example output (based on the logcat output above):</p>
@@ -173,5 +173,161 @@
full tombstone to <code>stdout</code>. To get just the stack for every thread in
the process, include the <code>-b</code> or <code>--backtrace</code> flag.</p>
+<h2 id="complex">Understanding a complex unwind</h2>
+
+<p>When an app crashes, the stack tends to be pretty complex.
+The following detailed example highlights many of the complexities:</p>
+
+<pre class="devsite-click-to-copy">
+ #00 pc 00000000007e6918 /system/priv-app/Velvet/Velvet.apk (offset 0x346b000)
+ #01 pc 00000000001845cc /system/priv-app/Velvet/Velvet.apk (offset 0x346b000)
+ #02 pc 00000000001847e4 /system/priv-app/Velvet/Velvet.apk (offset 0x346b000)
+ #03 pc 00000000001805c0 /system/priv-app/Velvet/Velvet.apk (offset 0x346b000) (Java_com_google_speech_recognizer_AbstractRecognizer_nativeRun+176)
+</pre>
+
+<p>Frames #00-#03 are from native JNI code that was stored uncompressed in the APK to save disk
+space rather than being extracted into a separate <code>.so</code> file. The stack unwinder in
+Android 9 doesn’t need the extracted <code>.so</code> file to be able to cope with this common
+Android-specific case.</p>
+
+<p>Frames #00-#02 don’t have symbol names because they were stripped by the developer.</p>
+
+<p>Frame #03 shows that where symbols are available, the unwinder uses them.</p>
+
+<pre class="devsite-click-to-copy">
+ #04 pc 0000000000117550 /data/dalvik-cache/arm64/system@priv-app@Velvet@Velvet.apk@classes.dex (offset 0x108000) (com.google.speech.recognizer.AbstractRecognizer.nativeRun+160)
+</pre>
+
+<p>Frame #04 is ahead-of-time compiled Java code. The old unwinder would have stopped here, unable
+to unwind through Java.</p>
+
+<pre class="devsite-click-to-copy">
+ #05 pc 0000000000559f88 /system/lib64/libart.so (art_quick_invoke_stub+584)
+ #06 pc 00000000000ced40 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+ #07 pc 0000000000280cf0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
+ #08 pc 000000000027acac /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+948)
+ #09 pc 000000000052abc0 /system/lib64/libart.so (MterpInvokeDirect+296)
+ #10 pc 000000000054c614 /system/lib64/libart.so (ExecuteMterpImpl+14484)
+</pre>
+
+<p>Frames #05-#10 are from the ART interpreter implementation.
+The stack unwinder in releases prior to Android 9 would have shown these frames without the context
+of frame #11 explaining what code the interpreter was interpreting. These frames are useful if
+you're debugging ART itself. If you're debugging an app, you can ignore them. Some tools, such as
+<code>simpleperf</code>, will automatically omit these frames.</p>
+
+<pre class="devsite-click-to-copy">
+ #11 pc 00000000001992d6 /system/priv-app/Velvet/Velvet.apk (offset 0x26cf000) (com.google.speech.recognizer.AbstractRecognizer.run+18)
+</pre>
+
+<p>Frame #11 is the Java code being interpreted.</p>
+
+<pre class="devsite-click-to-copy">
+ #12 pc 00000000002547a8 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+ #13 pc 000000000025a328 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216)
+ #14 pc 000000000027ac90 /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+920)
+ #15 pc 0000000000529880 /system/lib64/libart.so (MterpInvokeVirtual+584)
+ #16 pc 000000000054c514 /system/lib64/libart.so (ExecuteMterpImpl+14228)
+</pre>
+
+<p>Frames #12-#16 are more of the interpreter implementation itself.</p>
+
+<pre class="devsite-click-to-copy">
+ #17 pc 00000000002454a0 /system/priv-app/Velvet/Velvet.apk (offset 0x1322000) (com.google.android.apps.gsa.speech.e.c.c.call+28)
+</pre>
+
+<p>Frame #17 is more Java code being interpreted. This Java method corresponds to interpreter frames #12-#16.</p>
+
+<pre class="devsite-click-to-copy">
+ #18 pc 00000000002547a8 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+ #19 pc 0000000000519fd8 /system/lib64/libart.so (artQuickToInterpreterBridge+1032)
+ #20 pc 00000000005630fc /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
+</pre>
+
+<p>Frames #18-#20 are more of the VM itself, code to transition from compiled Java code to interpreted Java code.</p>
+
+<pre class="devsite-click-to-copy">
+ #21 pc 00000000002ce44c /system/framework/arm64/boot.oat (offset 0xdc000) (java.util.concurrent.FutureTask.run+204)
+</pre>
+
+<p>Frame #21 is the compiled Java method that calls the Java method in #17.</p>
+
+<pre class="devsite-click-to-copy">
+ #22 pc 0000000000559f88 /system/lib64/libart.so (art_quick_invoke_stub+584)
+ #23 pc 00000000000ced40 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+ #24 pc 0000000000280cf0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
+ #25 pc 000000000027acac /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+948)
+ #26 pc 0000000000529880 /system/lib64/libart.so (MterpInvokeVirtual+584)
+ #27 pc 000000000054c514 /system/lib64/libart.so (ExecuteMterpImpl+14228)
+</pre>
+
+<p>Frames #22-#27 are the interpreter implementation, making a method invocation from interpreted
+code to a compiled method.</p>
+
+<pre class="devsite-click-to-copy">
+ #28 pc 00000000003ed69e /system/priv-app/Velvet/Velvet.apk (com.google.android.apps.gsa.shared.util.concurrent.b.e.run+22)
+</pre>
+
+<p>Frame #28 is the Java code being interpreted.</p>
+
+<pre class="devsite-click-to-copy">
+ #29 pc 00000000002547a8 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+ #30 pc 0000000000519fd8 /system/lib64/libart.so (artQuickToInterpreterBridge+1032)
+ #31 pc 00000000005630fc /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
+</pre>
+
+<p>Frames #29-#31 are another transition between compiled code and interpreted code.</p>
+
+<pre class="devsite-click-to-copy">
+ #32 pc 0000000000329284 /system/framework/arm64/boot.oat (offset 0xdc000) (java.util.concurrent.ThreadPoolExecutor.runWorker+996)
+ #33 pc 00000000003262a0 /system/framework/arm64/boot.oat (offset 0xdc000) (java.util.concurrent.ThreadPoolExecutor$Worker.run+64)
+ #34 pc 00000000002037e8 /system/framework/arm64/boot.oat (offset 0xdc000) (java.lang.Thread.run+72)
+</pre>
+
+<p>Frames #32-#34 are compiled Java frames calling each other directly. In this case the native call
+stack is the same as the Java call stack.</p>
+
+<pre class="devsite-click-to-copy">
+ #35 pc 0000000000559f88 /system/lib64/libart.so (art_quick_invoke_stub+584)
+ #36 pc 00000000000ced40 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+ #37 pc 0000000000280cf0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
+ #38 pc 000000000027acac /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+948)
+ #39 pc 0000000000529f10 /system/lib64/libart.so (MterpInvokeSuper+1408)
+ #40 pc 000000000054c594 /system/lib64/libart.so (ExecuteMterpImpl+14356)
+</pre>
+
+<p>Frames #35-#40 are the interpreter itself.</p>
+
+<pre class="devsite-click-to-copy">
+ #41 pc 00000000003ed8e0 /system/priv-app/Velvet/Velvet.apk (com.google.android.apps.gsa.shared.util.concurrent.b.i.run+20)
+</pre>
+
+<p>Frame #41 is the Java code being interpreted.</p>
+
+<pre class="devsite-click-to-copy">
+ #42 pc 00000000002547a8 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.780698333+496)
+ #43 pc 0000000000519fd8 /system/lib64/libart.so (artQuickToInterpreterBridge+1032)
+ #44 pc 00000000005630fc /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
+ #45 pc 0000000000559f88 /system/lib64/libart.so (art_quick_invoke_stub+584)
+ #46 pc 00000000000ced40 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
+ #47 pc 0000000000460d18 /system/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
+ #48 pc 0000000000461de0 /system/lib64/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue*)+424)
+ #49 pc 000000000048ccb0 /system/lib64/libart.so (art::Thread::CreateCallback(void*)+1120)
+</pre>
+
+<p>Frames #42-#49 are the VM itself. This time it's the code that starts running Java on a new thread.</p>
+
+<pre class="devsite-click-to-copy">
+ #50 pc 0000000000082e24 /system/lib64/libc.so (__pthread_start(void*)+36)
+ #51 pc 00000000000233bc /system/lib64/libc.so (__start_thread+68)
+</pre>
+
+<p>Frames #50-#51 are how all threads should actually start. This is the <code>libc</code>
+new thread start code.
+A handy tip is that you know you have a successful and complete unwind if you see these frames.
+Any time you don't see these frames at the bottom of your stack, you should be suspicious that
+you're either looking at a truncated stack or at a corrupted stack: you shouldn't blindly
+assume that the stack is correct if it doesn't end this way.</p>
+
</body>
</html>
diff --git a/en/setup/build/jack.html b/en/setup/build/jack.html
index 494aaca..7177730 100644
--- a/en/setup/build/jack.html
+++ b/en/setup/build/jack.html
@@ -21,10 +21,12 @@
limitations under the License.
-->
-<aside class="warning"><strong>Warning:</strong> As of this
-<a href="https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html" class="external">March
-14, 2017 announcement</a>, the Jack toolchain is deprecated. Jack was the default Android
-build toolchain for Android 6.0–8.1.</aside>
+<aside class="warning">
+ <strong>Warning:</strong> As of this
+ <a href="https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html" class="external">March
+ 14, 2017 announcement</a>, the Jack toolchain is deprecated. Jack was the
+ default Android build toolchain for Android 6.0–8.1.
+</aside>
<p>Jack is an Android toolchain that compiled Java source into Android dex
bytecode. You don’t have to do anything differently to
@@ -35,7 +37,7 @@
<p>Jack works as follows:</p>
<img src="../images/jack_overview.png" alt="Jack overview"/>
-<figcaption><strong>Figure 1.</strong> Jack overview.</figcaption>
+<figcaption><strong>Figure 1.</strong> Jack overview</figcaption>
<h3 id=jack_library>Jack library format</h3>
@@ -43,7 +45,7 @@
for the library, allowing for faster compilation (pre-dex).</p>
<img src="../images/jack_library.png" alt="Jack library file contents"/>
-<figcaption><strong>Figure 2.</strong> Jack library file contents.</figcaption>
+<figcaption><strong>Figure 2.</strong> Jack library file contents</figcaption>
<h3 id=jill>Jill</h3>
@@ -52,7 +54,7 @@
<img src="../images/jack_jill.png" alt="Importing .jar libraries with Jill"/>
<figcaption><strong>Figure 3.</strong> Workflow to import an existing .jar
-library.</figcaption>
+library</figcaption>
<h2 id=using_jack>Jack compilation server</h2>
@@ -122,49 +124,23 @@
<td>Compilations are failing on “Cannot launch background server”</td>
<td>The most likely cause is TCP ports are already used on your computer. Change
ports by editing <code>$HOME/.jack</code> (<code>SERVER_PORT_SERVICE</code> and
-<code>SERVER_PORT_ADMIN</code> variables).
-
-<br><br>If it doesn’t solve the problem, report the error (be sure to attach
-your compilation log and the <a href="#jack_log">Jack server log</a>). To
-unblock the situation, disable the Jack compilation server by editing
-<code>$HOME/.jack</code> and changing <code>SERVER</code> to false.
-Unfortunately this will significantly slow down your compilation and may force
-you to launch <code>make -j</code> with load control (option <code>-l</code>
-of <code>make</code>).
-</td>
+<code>SERVER_PORT_ADMIN</code> variables). To unblock the situation, disable the
+Jack compilation server by editing <code>$HOME/.jack</code> and changing
+<code>SERVER</code> to false. Unfortunately this will significantly slow down
+your compilation and may force you to launch <code>make -j</code> with load
+control (option <code>-l</code> of <code>make</code>).</td>
</tr>
<tr>
<td>Compilation gets stuck without any progress</td>
-<td>Report and provide the following information when possible:
-<br>
-<ul>
-<li>Command line at which you are stuck.</li>
-<li>Output of this command line.</li>
-<li>Result of executing <code>jack-admin server-stat</code>.</li>
-<li><code>$HOME/.jack</code> file.</li>
-<li>Content of the <a href="#jack_log">Jack server log</a> with the server state
-dumped. To get the server log:
- <ul>
- <li>Find the Jack background server process by running
- <code>jack-admin list-server</code>.</li>
- <li>Send a <code>kill -3</code> command to this server to dump its state into
- the log file.</li>
- </ul>
-</li>
-<li>Result of executing <code>ls -lR $TMPDIR/jack-$USER</code>.</li>
-<li>Result of running <code>ps j -U $USER</code>.</li>
-</ul>
-
-To unblock the situation, kill the Jack background server using
+<td>To unblock the situation, kill the Jack background server using
<code>jack-admin kill-server</code>) then remove the temporary directories
contained in <code>jack-$USER</code> of your temporary directory
-(<code>/tmp</code> or <code>$TMPDIR</code>).
-</td>
+(<code>/tmp</code> or <code>$TMPDIR</code>).</td>
</tr>
</table>
<h3 id="jack_log">Finding the Jack log</h3>
-If you ran a <code>make</code> command with a dist target, the Jack log is
+<p>If you ran a <code>make</code> command with a dist target, the Jack log is
located at <code>$ANDROID_BUILD_TOP/out/dist/logs/jack-server.log</code>.
Otherwise, you can find the log by running <code>jack-admin server-log</code>.
In case of reproducible Jack failures, you can get a more detailed log by
@@ -206,7 +182,7 @@
pre-dexed:</p>
<img src="../images/jack_predex.png" alt="Jack libraries with pre-dex" />
-<figcaption><strong>Figure 4.</strong> Jack libraries with pre-dex.</figcaption>
+<figcaption><strong>Figure 4.</strong> Jack libraries with pre-dex</figcaption>
<p>Jack does not reuse the library pre-dex if shrinking, obfuscation, or
repackaging is used in the compilation.</p>
@@ -231,7 +207,8 @@
<h3 id=shrinking_and_obfuscation>Shrinking and obfuscation</h3>
-<p>Jack uses proguard configuration files to enable shrinking and obfuscation.</p>
+<p>Jack uses proguard configuration files to enable shrinking and
+obfuscation.</p>
<p>Common options include the following:</p>
diff --git a/zh-cn/compatibility/android-cdd.html b/zh-cn/compatibility/android-cdd.html
index cedb6da..275f22b 100644
--- a/zh-cn/compatibility/android-cdd.html
+++ b/zh-cn/compatibility/android-cdd.html
@@ -32,7 +32,7 @@
在本文档中,“设备实现者”或“实现者”指的是开发运行 Android 8.1 的硬件/软件解决方案的个人或单位。“设备实现”或“实现”指的是所开发的硬件/软件解决方案。
</p>
<p>
-设备实现必须满足本兼容性定义文档(包括以参考资料的形式纳入的任何文档)中列出的要求,才会被视为与 Android 8.1 兼容。
+设备实现必须满足本兼容性定义文档(包括以参考资料的形式纳入的所有文档)中列出的要求,才会被视为与 Android 8.1 兼容。
</p>
<p>
如果本定义或<a href="#10_software_compatibility_testing">第 10 节</a>中所述的软件测试未提及、含糊不清或不完整,设备实现者需负责确保与现有实现兼容。
@@ -788,7 +788,7 @@
TV 设备实现:
</p>
<ul>
- <li>应提供可让用户访问<a href="#7_2_2_non-touch_navigation">非触摸导航</a>和<a href="#7_2_3_navigation_keys">核心导航键</a>输入的遥控器。
+ <li>应提供可让用户使用<a href="#7_2_2_non-touch_navigation">非触摸导航</a>和<a href="#7_2_3_navigation_keys">核心导航键</a>输入功能的遥控器。
</li>
</ul>
<p>
@@ -1611,7 +1611,7 @@
Android Automotive 设备实现:
</p>
<ul>
- <li>[A-0-1] 如果第三方应用提出请求,则必须显示使用 <a href="https://developer.android.com/reference/android/app/Notification.CarExtender.html"><code>Notification.CarExtender</code></a> API 的通知。
+ <li>[A-0-1] 必须能应第三方应用的请求显示使用 <a href="https://developer.android.com/reference/android/app/Notification.CarExtender.html"><code>Notification.CarExtender</code></a> API 的通知。
</li>
</ul>
<p>
@@ -1874,7 +1874,7 @@
SUPPORTED_ABIS
</td>
<td>
-本机代码指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3. 节:本机 API 兼容性</a>。
+本机代码指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3 节:本机 API 兼容性</a>。
</td>
</tr>
<tr>
@@ -1882,7 +1882,7 @@
SUPPORTED_32_BIT_ABIS
</td>
<td>
-本机代码指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3. 节:本机 API 兼容性</a>。
+本机代码指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3 节:本机 API 兼容性</a>。
</td>
</tr>
<tr>
@@ -1890,7 +1890,7 @@
SUPPORTED_64_BIT_ABIS
</td>
<td>
-本机代码第二个指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3. 节:本机 API 兼容性</a>。
+本机代码第二个指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3 节:本机 API 兼容性</a>。
</td>
</tr>
<tr>
@@ -1898,7 +1898,7 @@
CPU_ABI
</td>
<td>
-本机代码指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3. 节:本机 API 兼容性</a>。
+本机代码指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3 节:本机 API 兼容性</a>。
</td>
</tr>
<tr>
@@ -1906,7 +1906,7 @@
CPU_ABI2
</td>
<td>
-本机代码第二个指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3. 节:本机 API 兼容性</a>。
+本机代码第二个指令集的名称(CPU 类型 + ABI 惯例)。请参阅<a href="#3_3_native_api_compatibility">第 3.3 节:本机 API 兼容性</a>。
</td>
</tr>
<tr>
@@ -2198,7 +2198,7 @@
</li>
<li>
<p>
-[C-2-3] 必须能够遵从 <a href="https://developer.android.com/reference/android/telecom/TelecomManager.html#ACTION_CHANGE_PHONE_ACCOUNTS">android.telecom.action.CHANGE_PHONE_ACCOUNTS</a> Intent 提供相应方式来配置与 <a href="https://developer.android.com/reference/android/telecom/PhoneAccount.html"><code>PhoneAccounts</code></a> 关联的 <a href="https://developer.android.com/reference/android/telecom/ConnectionService.html"><code>ConnectionServices</code></a>,以及电信服务提供商将用于拨出电话的默认 PhoneAccount。AOSP 实现通过在“通话”设置菜单中添加“通话帐号选项”菜单来满足该要求。
+[C-2-3] 必须能够遵从 <a href="https://developer.android.com/reference/android/telecom/TelecomManager.html#ACTION_CHANGE_PHONE_ACCOUNTS">android.telecom.action.CHANGE_PHONE_ACCOUNTS</a> Intent 提供相应方式来配置与 <a href="https://developer.android.com/reference/android/telecom/ConnectionService.html"><code>ConnectionServices</code></a> 关联的 <a href="https://developer.android.com/reference/android/telecom/PhoneAccount.html"><code>PhoneAccounts</code></a>,以及电信服务提供商将用于拨出电话的默认 PhoneAccount。AOSP 实现通过在“通话”设置菜单中添加“通话帐号选项”菜单来满足该要求。
</p>
</li>
</ul>
@@ -2229,7 +2229,7 @@
</li>
<li>[C-1-3] 如果某个 Activity 在启动新的 Activity 时没有通过 <a href="https://developer.android.com/reference/android/app/ActivityOptions.html#setLaunchDisplayId%28int%29"><code>ActivityOptions.setLaunchDisplayId()</code></a> API 指定目标显示设备,则必须在前者所在的显示设备上启动后者。
</li>
- <li>[C-1-4] 当带有 <a href="http://developer.android.com/reference/android/view/Display.html#FLAG_PRIVATE"><code>Display.FLAG_PRIVATE</code></a> 标记的显示设备被取除后,必须销毁所有 Activity。
+ <li>[C-1-4] 当带有 <a href="http://developer.android.com/reference/android/view/Display.html#FLAG_PRIVATE"><code>Display.FLAG_PRIVATE</code></a> 标记的显示设备被移除后,必须销毁所有 Activity。
</li>
<li>[C-1-5] 如果显示区域的大小发生变化,则必须相应地调整 <a href="https://developer.android.com/reference/android/hardware/display/VirtualDisplay.html"><code>VirtualDisplay</code></a> 上所有 Activity 的大小。
</li>
@@ -2415,7 +2415,7 @@
<ul>
<li>[C-1-1] 必须报告 <code>android.software.webview</code>。
</li>
- <li>[C-1-2] 必须使用 Android 8.1 分支上的上游 Android 开源项目中的 <a href="http://www.chromium.org/">Chromium</a> 项目细分版本来实现 <a href="http://developer.android.com/reference/android/webkit/WebView.html"><code>android.webkit.WebView</code></a> API。
+ <li>[C-1-2] 必须使用 Android 8.1 分支上的上游 Android 开源项目提供的 <a href="http://www.chromium.org/">Chromium</a> 项目细分版本来实现 <a href="http://developer.android.com/reference/android/webkit/WebView.html"><code>android.webkit.WebView</code></a> API。
</li>
<li>
<p>
@@ -3092,7 +3092,7 @@
如果设备实现支持内容丰富的通知,则:
</p>
<ul>
- <li>[C-2-1] 必须使用通过 <a href="https://developer.android.com/reference/android/app/Notification.Style.html"><code>Notification.Style</code></a> API 类及其子类为呈现的资源元素提供的确切资源。
+ <li>[C-2-1] 对于呈现的资源元素,必须使用通过 <a href="https://developer.android.com/reference/android/app/Notification.Style.html"><code>Notification.Style</code></a> API 类及其子类提供的确切资源。
</li>
<li>应呈现 <a href="https://developer.android.com/reference/android/app/Notification.Style.html"><code>Notification.Style</code></a> API 类及其子类中定义的每个资源元素(例如图标、标题和摘要文本)。
</li>
@@ -3190,7 +3190,7 @@
3.8.5. 提醒和消息框
</h4>
<p>
-应用可以使用 <a href="http://developer.android.com/reference/android/widget/Toast.html"><code>Toast</code></a> API 向最终用户显示简短的非模态字符串(这些字符串会在短暂显示后消失),并使用 <a href="http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_OVERLAY"><code>TYPE_APPLICATION_OVERLAY</code></a> 窗口类型 API 使提醒窗口叠加在其他应用之上显示。
+应用可以使用 <a href="http://developer.android.com/reference/android/widget/Toast.html"><code>Toast</code></a> API 向最终用户显示简短的非模态字符串(这些字符串会在短暂显示后消失),并使用 <a href="http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_OVERLAY"><code>TYPE_APPLICATION_OVERLAY</code></a> 窗口类型 API 使提醒窗口显示在其他应用的前方。
</p>
<p>
如果设备实现包含屏幕或视频输出机制,则:
@@ -3477,7 +3477,7 @@
<ul>
<li>[C-2-1] 必须部署相应的流程来验证所通告的应用属于合法的企业设备管理解决方案,并且已在专有的解决方案中配置为具备与“设备所有者”同等的权利。
</li>
- <li>[C-2-2] 在将 DPC 应用注册为“设备所有者”之前,必须先按照 <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#ACTION_PROVISION_MANAGED_DEVICE"><code>android.app.action.PROVISION_MANAGED_DEVICE</code></a> 启动的流程显示相同的 AOSP 设备所有者同意披露。
+ <li>[C-2-2] 在将 DPC 应用注册为“设备所有者”之前,必须先按照 <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#ACTION_PROVISION_MANAGED_DEVICE"><code>android.app.action.PROVISION_MANAGED_DEVICE</code></a> 启动的流程显示相同的 AOSP 设备所有者同意披露信息。
</li>
<li>在将 DPC 应用注册为“设备所有者”之前,设备上可以有用户数据。
</li>
@@ -3573,7 +3573,7 @@
<ul>
<li>[C-1-1] 必须提供 Android 无障碍服务框架(如<a href="http://developer.android.com/reference/android/view/accessibility/package-summary.html">无障碍服务 API</a> SDK 文档中所述)的实现。
</li>
- <li>[C-1-2] 必须生成无障碍事件,并将相应的 <code>AccessibilityEvent</code> 提交到所有已注册的 <a href="http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html"><code>AccessibilityService</code></a> 实现(如 SDK 中所述)。
+ <li>[C-1-2] 必须生成无障碍服务事件,并将相应的 <code>AccessibilityEvent</code> 提交到所有已注册的 <a href="http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html"><code>AccessibilityService</code></a> 实现(如 SDK 中所述)。
</li>
<li>[C-1-3] 必须能够遵从 <code>android.settings.ACCESSIBILITY_SETTINGS</code> Intent 提供一种可供用户使用的机制,以便他们启用和停用第三方无障碍服务以及预加载的无障碍服务。
</li>
@@ -3722,7 +3722,7 @@
<ul>
<li>[SR] 强烈建议支持 TV 录制。
</li>
- <li>如果 TV 输入法支持录制功能,并且相关节目没有遭到<a href="https://developer.android.com/reference/android/media/tv/TvContract.Programs.html#COLUMN_RECORDING_PROHIBITED">禁止</a>录制,则 EPG 可以提供<a href="https://developer.android.com/reference/android/media/tv/TvInputInfo.html#canRecord%28%29">录制节目</a>的方式。
+ <li>如果 TV 输入法支持录制功能,并且相关节目没有被<a href="https://developer.android.com/reference/android/media/tv/TvContract.Programs.html#COLUMN_RECORDING_PROHIBITED">禁止</a>录制,则 EPG 可以提供<a href="https://developer.android.com/reference/android/media/tv/TvInputInfo.html#canRecord%28%29">录制节目</a>的方式。
</li>
</ul>
<h3 id="3_13_quick_settings">
@@ -3757,7 +3757,7 @@
</li>
<li>[C-1-4] 必须有用于呈现 <a href="http://developer.android.com/reference/android/media/browse/MediaBrowser.html">MediaBrowser</a> 层次结构的抽屉式导航栏。
</li>
- <li>[C-1-5] 必须考虑点按两次 <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HEADSETHOOK"><code>KEYCODE_HEADSETHOOK</code></a> 或 <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE"><code>KEYCODE_MEDIA_PLAY_PAUSE</code></a>,作为 <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MEDIA_NEXT"><code>KEYCODE_MEDIA_NEXT</code></a>(属于 <a href="https://developer.android.com/reference/android/media/session/MediaSession.Callback.html#onMediaButtonEvent%28android.content.Intent%29"><code>MediaSession.Callback#onMediaButtonEvent</code></a>)。
+ <li>[C-1-5] 对于 <a href="https://developer.android.com/reference/android/media/session/MediaSession.Callback.html#onMediaButtonEvent%28android.content.Intent%29"><code>MediaSession.Callback#onMediaButtonEvent</code></a>,必须将点按两次 <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HEADSETHOOK"><code>KEYCODE_HEADSETHOOK</code></a> 或 <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE"><code>KEYCODE_MEDIA_PLAY_PAUSE</code></a> 视为 <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MEDIA_NEXT"><code>KEYCODE_MEDIA_NEXT</code></a>。
</li>
</ul>
<h3 id="3_15_instant_apps">
@@ -4217,7 +4217,7 @@
</li>
</ul>
<p>
-如果设备实现通过 <a href="https://developer.android.com/reference/android/view/Display.HdrCapabilities.html"><code>Display.HdrCapabilities</code></a> 通告支持 HDR 配置文件,则:
+如果设备实现通过 <a href="https://developer.android.com/reference/android/view/Display.HdrCapabilities.html"><code>Display.HdrCapabilities</code></a> 通告支持 HDR 配置,则:
</p>
<ul>
<li>[C-2-1] 必须支持解析和处理 HDR 静态元数据。
@@ -5572,7 +5572,7 @@
</li>
<li>[C-1-5] 必须使用 <a href="https://developer.android.com/ndk/guides/audio/opensl-for-android.html">OpenSL ES</a> PCM 缓冲队列 API 来满足延迟和 USB 音频方面的要求。
</li>
- <li>[SR] 强烈建议当音频在播放并且 CPU 负载有变化时,提供一致水平的 CPU 性能。应使用 <a href="https://github.com/googlesamples/android-audio-high-performance/tree/master/SimpleSynth">SimpleSynth</a> 提交 <a href="https://github.com/googlesamples/android-audio-high-performance/commit/1bd6391f8ba9512f9f8798e979bc55b899f856d1">1bd6391</a> 对此进行测试。SimpleSynth 应用需要在运行时达到以下参数,并在 10 分钟后实现零欠载:
+ <li>[SR] 强烈建议当音频在播放并且 CPU 负载有变化时,提供一致水平的 CPU 性能。应使用 <a href="https://github.com/googlesamples/android-audio-high-performance/tree/master/SimpleSynth">SimpleSynth</a> 提交项 <a href="https://github.com/googlesamples/android-audio-high-performance/commit/1bd6391f8ba9512f9f8798e979bc55b899f856d1">1bd6391</a> 对此进行测试。SimpleSynth 应用需要在运行时达到以下参数,并在 10 分钟后实现零欠载:
<ul>
<li>工作周期:200000
</li>
@@ -6013,7 +6013,7 @@
<ul>
<li>[C-0-1] 必须报告支持的屏幕方向(<code>android.hardware.screen.portrait</code> 和/或 <code>android.hardware.screen.landscape</code>),并且必须报告至少一个支持的方向。例如,屏幕固定为横向的设备(例如电视或笔记本电脑)应仅报告 <code>android.hardware.screen.landscape</code>。
</li>
- <li>[C-0-2] 每当收到通过 <code>android.content.res.Configuration.orientation</code>、<code>android.view.Display.getOrientation()</code> 或其他 API 提交的查询时,设备实现都必须报告设备当前方向的正确值。
+ <li>[C-0-2] 每当收到通过 <code>android.content.res.Configuration.orientation</code>、android.view.Display.getOrientation() 或其他 API 提交的查询时,设备实现都必须报告设备当前方向的正确值。
</li>
</ul>
<p>
@@ -7087,7 +7087,7 @@
</li>
<li>测量噪声不得高于 400 uG/√Hz。
</li>
- <li>必须实现这种传感器的非唤醒形式,并且至少能够缓冲 3000 个传感器事件。
+ <li>必须实现这种传感器的非唤醒形式,并且至少能够缓存 3000 个传感器事件。
</li>
<li>批处理功耗不得高于 3 mW。
</li>
@@ -7158,7 +7158,7 @@
</li>
<li>[C-2-6] 必须具有 <code>TYPE_MAGNETIC_FIELD_UNCALIBRATED</code>,并且其除了符合与 <code>TYPE_GEOMAGNETIC_FIELD</code> 相同的质量要求外,还要符合以下要求:
<ul>
- <li>必须实现这种传感器的非唤醒形式,并且至少能够缓冲 600 个传感器事件。
+ <li>必须实现这种传感器的非唤醒形式,并且至少能够缓存 600 个传感器事件。
</li>
<li>应具有白噪声谱,以确保传感器的噪声完整性充分符合要求。
</li>
@@ -7176,7 +7176,7 @@
</li>
<li>测量噪声不得高于 2 Pa/√Hz。
</li>
- <li>必须实现这种传感器的非唤醒形式,并且至少能够缓冲 300 个传感器事件。
+ <li>必须实现这种传感器的非唤醒形式,并且至少能够缓存 300 个传感器事件。
</li>
<li>批处理功耗不得高于 2 mW。
</li>
@@ -7184,7 +7184,7 @@
</li>
<li>[C-2-8] 必须具有符合以下要求的 <code>TYPE_GAME_ROTATION_VECTOR</code> 传感器:
<ul>
- <li>必须实现这种传感器的非唤醒形式,并且至少能够缓冲 300 个传感器事件。
+ <li>必须实现这种传感器的非唤醒形式,并且至少能够缓存 300 个传感器事件。
</li>
<li>批处理功耗不得高于 4 mW。
</li>
@@ -7198,7 +7198,7 @@
</li>
<li>[C-2-10] 必须具有符合以下要求的 <code>TYPE_STEP_DETECTOR</code> 传感器:
<ul>
- <li>必须实现这种传感器的非唤醒形式,并且至少能够缓冲 100 个传感器事件。
+ <li>必须实现这种传感器的非唤醒形式,并且至少能够缓存 100 个传感器事件。
</li>
<li>当设备处于静态时,功耗不得高于 0.5 mW;当设备处于动态时,功耗不得高于 1.5 mW。
</li>
@@ -7240,7 +7240,7 @@
</li>
</ul>
</li>
- <li>[C-2-17] 可以有 <code>TYPE_PROXIMITY</code> 传感器,但如果存在,则必须至少能够缓冲 100 个传感器事件。
+ <li>[C-2-17] 可以有 <code>TYPE_PROXIMITY</code> 传感器,但如果存在,则必须至少能够缓存 100 个传感器事件。
</li>
</ul>
<p>
@@ -7435,13 +7435,13 @@
如果设备实现报告 <code>android.hardware.telephony</code>,则:
</p>
<ul>
- <li>[C-SR] 强烈建议如下所示地为 <a href="https://developer.android.com/reference/android/telecom/package-summary.html"><code>android.telecom</code></a> API 处理音频耳机的 <code>KEYCODE_MEDIA_PLAY_PAUSE</code> 和 <code>KEYCODE_HEADSETHOOK</code> 事件:
+ <li>[C-SR] 强烈建议按如下所述为 <a href="https://developer.android.com/reference/android/telecom/package-summary.html"><code>android.telecom</code></a> API 处理音频耳机的 <code>KEYCODE_MEDIA_PLAY_PAUSE</code> 和 <code>KEYCODE_HEADSETHOOK</code> 事件:
<ul>
<li>在通话期间检测到短按按键事件时调用 <a href="https://developer.android.com/reference/android/telecom/Connection.html#onDisconnect%28%29"><code>Connection.onDisconnect()</code></a>。
</li>
- <li>在来电期间检测到短按按键事件时调用 <a href="https://developer.android.com/reference/android/telecom/Connection.html#onAnswer%28%29"><code>Connection.onAnswer()</code></a>。
+ <li>在来电通话期间检测到短按按键事件时调用 <a href="https://developer.android.com/reference/android/telecom/Connection.html#onAnswer%28%29"><code>Connection.onAnswer()</code></a>。
</li>
- <li>在来电期间检测到长按按键事件时调用 <a href="https://developer.android.com/reference/android/telecom/Connection.html#onReject%28%29"><code>Connection.onReject()</code></a>。
+ <li>在来电通话期间检测到长按按键事件时调用 <a href="https://developer.android.com/reference/android/telecom/Connection.html#onReject%28%29"><code>Connection.onReject()</code></a>。
</li>
<li>切换 <a href="https://developer.android.com/reference/android/telecom/CallAudioState.html"><code>CallAudioState</code></a> 的静音状态。
</li>
@@ -7840,7 +7840,7 @@
如果设备实现未提供流量节省程序模式,则:
</p>
<ul>
- <li>[C-2-1] 必须针对 <a href="https://developer.android.com/reference/android/net/ConnectivityManager.html#getRestrictBackgroundStatus%28%29"><code>ConnectivityManager.getRestrictBackgroundStatus()</code></a> 返回值 <code>RESTRICT_BACKGROUND_STATUS_DISABLED</code>。
+ <li>[C-2-1] 必须针对 <a href="https://developer.android.com/reference/android/net/ConnectivityManager.html#getRestrictBackgroundStatus%28%29"><code>ConnectivityManager.getRestrictBackgroundStatus()</code></a> 返回值 <code>RESTRICT_BACKGROUND_STATUS_DISABLED</code>
</li>
<li>[C-2-2] 不得广播 <code>ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED</code>。
</li>
@@ -7985,7 +7985,7 @@
</li>
<li>[C-0-7] 必须通过 <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL"><code>android.info.supportedHardwareLevel</code></a> 属性报告正确的支持级别(如 Android SDK 中所述),并报告相应的<a href="http://source.android.com/devices/camera/versioning.html">框架功能标记</a>。
</li>
- <li>[C-0-8] 还必须通过 <code>android.request.availableCapabilities</code> 属性声明 <code>android.hardware.camera2</code> 的各项摄像头功能,并声明相应的<a href="http://source.android.com/devices/camera/versioning.html">功能标记</a>;如果连接的任何摄像头设备支持某项功能,则必须定义相应的功能标记。
+ <li>[C-0-8] 还必须通过 <code>android.hardware.camera2</code> 属性声明 <code>android.request.availableCapabilities</code> 的各项摄像头功能,并声明相应的<a href="http://source.android.com/devices/camera/versioning.html">功能标记</a>;如果连接的任何摄像头设备支持某项功能,则必须定义相应的功能标记。
</li>
<li>[C-0-9] 每当摄像头拍摄了新照片且相应的照片条目已添加到媒体存储区时,都必须广播 <code>Camera.ACTION_NEW_PICTURE</code> Intent。
</li>
@@ -8252,7 +8252,7 @@
7.8.2. 音频输出
</h4>
<p>
-如果设备实现包含扬声器,或包含用于连接音频输出外围设备的音频/多媒体输出端口(例如 4 导体 3.5 毫米音频耳机插孔或使用 <a href="https://source.android.com/devices/audio/usb#audioClass">USB 音频类</a>的 USB 主机模式),则:
+如果设备实现包含扬声器,或包含用于连接音频输出外围设备的音频/多媒体输出端口(例如 4 导体 3.5 毫米音频耳机插孔或使用 <a href="https://source.android.com/devices/audio/usb#audioClass">USB 音频类</a>的 USB 主机模式端口),则:
</p>
<ul>
<li>[C-1-1] 必须报告 <code>android.hardware.audio.output</code> 功能常量。
@@ -8361,7 +8361,7 @@
7.9. 虚拟实境
</h3>
<p>
-Android 包含包含一些相应的 API 和工具,以便构建提供高品质移动 VR 体验的“虚拟实境”(VR) 应用。设备实现必须正确实现这些 API 和行为(本节中对此进行了详细说明)。
+Android 包含一些相应的 API 和工具,以便构建提供高品质移动 VR 体验的“虚拟实境”(VR) 应用。设备实现必须正确实现这些 API 和行为(本节中对此进行了详细说明)。
</p>
<h4 id="7_9_1_virtual_reality_mode">
7.9.1. 虚拟实境模式
@@ -8388,7 +8388,7 @@
</li>
<li>[C-1-6] 必须实现 <a href="https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_mutable_render_buffer.txt"><code>EGL_KHR_mutable_render_buffer</code></a>、<a href="https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_front_buffer_auto_refresh.txt"><code>EGL_ANDROID_front_buffer_auto_refresh</code></a>、<a href="https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt"><code>EGL_ANDROID_get_native_client_buffer</code></a>、<a href="https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt"><code>EGL_KHR_fence_sync</code></a>、<a href="https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_wait_sync.txt"><code>EGL_KHR_wait_sync</code></a>、<a href="https://www.khronos.org/registry/EGL/extensions/IMG/EGL_IMG_context_priority.txt"><code>EGL_IMG_context_priority</code></a> 和 <a href="https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_protected_content.txt"><code>EGL_EXT_protected_content</code></a>,并在可用 EGL 扩展列表中公开这些扩展。
</li>
- <li>[C-1-7] GPU 和显示屏必须能够同步访问共享的前端缓冲区,以便在两个呈现环境中以 60fps 的速率交替呈现 VR 内容,而没有可见的撕裂现象。
+ <li>[C-1-7] GPU 和显示屏必须能够同步访问共享的前端缓存区,以便在两个呈现环境中以 60fps 的速率交替呈现 VR 内容,而没有可见的撕裂现象。
</li>
<li>[C-1-8] 必须实现 <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_multisampled_render_to_texture.txt"><code>GL_EXT_multisampled_render_to_texture</code></a>、<a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview.txt"><code>GL_OVR_multiview</code></a>、<a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview2.txt"><code>GL_OVR_multiview2</code></a>、<a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview_multisampled_render_to_texture.txt"><code>GL_OVR_multiview_multisampled_render_to_texture</code></a>、<a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_protected_textures.txt"><code>GL_EXT_protected_textures</code></a>、<a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_EGL_image_array.txt"><code>GL_EXT_EGL_image_array</code></a> 和 <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_external_buffer.txt"><code>GL_EXT_external_buffer</code></a>,并在可用 GL 扩展列表中公开这些扩展。
</li>
@@ -8600,7 +8600,7 @@
</li>
<li>
<p>
-[C-0-2] 只能将 <code>protectionLevel</code> 为 <a href="https://developer.android.com/reference/android/content/pm/PermissionInfo.html#PROTECTION&lowbar;FLAG&lowbar;PRIVILEGED"><code>PROTECTION_FLAG_PRIVILEGED</code></a> 的权限授予在系统映像的特权路径中加载的应用,并且此类权限只能位于明确为各个应用列入白名单的权限的子集中。AOSP 实现通过以下方式来满足该要求:从 <code>etc/permissions/</code> 路径下的文件中读取为各个应用列入白名单的权限、遵从此类权限,并将 <code>system/priv-app</code> 路径用作特权路径。
+[C-0-2] <code>protectionLevel</code> 为 <a href="https://developer.android.com/reference/android/content/pm/PermissionInfo.html#PROTECTION&lowbar;FLAG&lowbar;PRIVILEGED"><code>PROTECTION_FLAG_PRIVILEGED</code></a> 的权限只能授予在系统映像的特权路径中预加载的应用,并且此类权限只能位于明确为各个应用列入白名单的权限的子集中。AOSP 实现通过以下方式来满足该要求:从 <code>etc/permissions/</code> 路径下的文件中读取为各个应用列入白名单的权限、遵从此类权限,并将 <code>system/priv-app</code> 路径用作特权路径。
</p>
</li>
</ul>
@@ -8733,7 +8733,7 @@
Android <a href="http://developer.android.com/reference/android/os/UserManager.html">支持多用户功能</a>,并支持完全用户隔离。
</p>
<ul>
- <li>如果设备实现使用<a href="http://developer.android.com/reference/android/os/Environment.html">可移动媒体</a>作为主要的外部存储设备,则可以但不应启用多用户功能。
+ <li>如果设备实现使用<a href="http://developer.android.com/reference/android/os/Environment.html">可移动媒介</a>作为主要的外部存储设备,则可以但不应启用多用户功能。
</li>
</ul>
<p>
@@ -8755,7 +8755,7 @@
如果设备实现包含多位用户,并且未声明 <code>android.hardware.telephony</code> 功能标记,则:
</p>
<ul>
- <li>[C-2-1] 必须支持受限配置文件,该配置文件可让设备所有者管理设备上的其他用户以及他们可以使用的功能。借助受限配置文件,设备所有者可以快速设置供其他用户使用的单独环境,同时还能在可于这些环境中运行的应用内管理更精细的限制。
+ <li>[C-2-1] 必须支持受限配置文件,此类配置文件可让设备所有者管理设备上的其他用户以及他们可以使用的功能。借助受限配置文件,设备所有者可以快速设置供其他用户使用的单独环境,同时还能在可于这些环境中运行的应用内管理更精细的限制。
</li>
</ul>
<p>
@@ -9071,9 +9071,9 @@
</li>
<li>[SR] 如果设备中有多个离散芯片(例如无线装置、专门的图片处理器),强烈建议其中每个芯片的启动进程在启动时验证每个阶段。
</li>
- <li>[SR] 当引导加载程序处于解锁状态时,强烈建议使用防篡改的存储空间。防篡改的存储空间意味着:如果存储空间在 HLOS(高级操作系统)内被篡改,启动加载程序可以检测到。
+ <li>[SR] 当引导加载程序处于解锁状态时,强烈建议使用防篡改的存储空间。防篡改的存储空间意味着:如果存储空间在 HLOS(高级操作系统)内被篡改,引导加载程序可以检测到。
</li>
- <li>[SR] 强烈建议在允许从启动加载程序锁定模式转换为启动加载程序解锁模式之前提示用户(如果他们在使用设备),并要求用户进行物理确认。
+ <li>[SR] 强烈建议在允许从引导加载程序锁定模式转换为引导加载程序解锁模式之前提示用户(如果他们在使用设备),并要求用户进行物理确认。
</li>
<li>[SR] 强烈建议针对 HLOS(例如启动、系统分区)实现回滚保护,并使用防篡改存储空间来存储用于确定允许使用的最低操作系统版本的元数据。
</li>
@@ -9117,7 +9117,7 @@
</li>
<li>[C-1-3] 必须在隔离的执行环境中执行锁定屏幕身份验证,并且只有在成功通过验证时,才允许使用与身份验证绑定的密钥。锁定屏幕凭据的存储方式必须只允许隔离的执行环境执行锁屏身份验证。上游 Android 开源项目提供了可用于满足该要求的 <a href="http://source.android.com/devices/tech/security/authentication/gatekeeper.html">Gatekeeper 硬件抽象层 (HAL)</a> 和 Trusty。
</li>
- <li>[C-1-4] 如果认证签名密钥有安全硬件保护,并且签名是在安全硬件中进行,则必须支持密钥认证。认证签名密钥必须在足够多的设备之间共享,以防止此类密钥被用作设备标识符。满足该要求的一种方法是共享相同的认证密钥,除非生成了至少 10 万个单元的给定 SKU。如果生成了超过 100 万个单元的 SKU,则可以针对每 100 万个单元使用一个不同的密钥。
+ <li>[C-1-4] 如果认证签名密钥有安全硬件保护,并且签名是在安全硬件中进行,则必须支持密钥认证。认证签名密钥必须在足够多的设备之间共享,以防止此类密钥被用作设备标识符。要满足该要求,可以采用的一种方法是共享相同的认证密钥,除非生成了至少 10 万个单元的给定 SKU。如果生成了超过 10 万个单元的 SKU,则可以针对每 10 万个单元使用一个不同的密钥。
</li>
</ul>
<p>
@@ -9140,7 +9140,7 @@
</li>
<li>[C-1-5] 不得将加密密钥存储在设备上。
</li>
- <li>[C-1-6] 在启用第三方托管令牌以解密数据存储之前,必须先将会对安全性造成对影响通知用户。
+ <li>[C-1-6] 在启用第三方托管令牌以解密数据存储之前,必须先将会对安全性造成的影响通知用户。
</li>
</ul>
<p>
@@ -9171,7 +9171,7 @@
<ul>
<li>[C-4-1] 必须具有回退机制,以使用符合以下条件的主要身份验证方法之一:基于已知密钥,且满足被视为安全锁定屏幕的要求。
</li>
- <li>[C-4-2] 当设备政策控制器 (DPC) 应用已通过 <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setKeyguardDisabledFeatures%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS)</code></a> 方法或 <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordQuality%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setPasswordQuality()</code></a> 方法(具有比 <code>PASSWORD_QUALITY_UNSPECIFIED</code> 限制性更强的质量常量)设置政策时,它们必须处于停用状态,仅允许使用主要身份验证方法来解锁屏幕。
+ <li>[C-4-2] 当设备政策控制器 (DPC) 应用已通过 <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setKeyguardDisabledFeatures%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS)</code></a> 方法或 <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordQuality%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setPasswordQuality()</code></a> 方法(具有比 <code>PASSWORD_QUALITY_UNSPECIFIED</code> 限制性更强的质量常量)设置政策时,它们必须处于停用状态,并且仅允许使用主要身份验证方法来解锁屏幕。
</li>
<li>[C-4-3] 必须至少每隔 72 小时对用户进行一次主要身份验证(例如 PIN 码、图案、密码)。
</li>
@@ -9208,7 +9208,7 @@
</li>
<li>[C-7-3] 不得重置通过 <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordExpirationTimeout%28android.content.ComponentName,%20long%29"><code>DevicePolicyManager.setPasswordExpirationTimeout()</code></a> 设置的密码有效期计时器。
</li>
- <li>[C-7-4] 如果应用已调用 <a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.Builder.html#setUserAuthenticationRequired%28boolean%29"><code>KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)</code></a>,则不得对密钥存储区的访问进行身份验证。
+ <li>[C-7-4] 如果应用已调用 <a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.Builder.html#setUserAuthenticationRequired%28boolean%29"><code>KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)</code></a>,则不得对访问密钥存储区进行身份验证。
</li>
</ul>
<h3 id="9_12_data_deletion">
@@ -9302,7 +9302,7 @@
设备实现必须正确执行 CTS 验证程序中的所有适用用例。CTS 验证程序包含在兼容性测试套件中,以便人工操作员运行该验证程序来测试无法由自动化系统测试的功能(例如,测试摄像头和传感器是否能够正常工作)。
</p>
<p>
-CTS 验证程序已经对多种类型的硬件(其中包括一些选配硬件)进行测试。设备实现必须通过针对其具备的硬件的所有测试;例如,如果某台设备具备加速度计,则必须正确执行 CTS 验证程序中的加速度计测试用例。可跳过或省略本兼容性定义中注明为可选的功能的测试用例。
+CTS 验证程序中包含针对多种硬件(其中包括一些选配硬件)的测试。设备实现必须通过针对其具备的硬件的所有测试;例如,如果某台设备具备加速度计,则必须正确执行 CTS 验证程序中的加速度计测试用例。对于本兼容性定义文档中注明为选配的功能,可跳过或省略相应的测试用例。
</p>
<p>
如上所述,每种设备和每个细分版本都必须正确运行 CTS 验证程序。不过,由于很多细分版本都非常相似,因此设备实现者并不需要对只有细微差别的细分版本明确运行 CTS 验证程序。具体来说就是,如果设备实现与某个已通过 CTS 验证程序测试的实现只是在所包含的语言区域、品牌信息等方面存在差别,则可以省略 CTS 验证程序测试。
@@ -9424,7 +9424,7 @@
13. 与我们联系
</h2>
<p>
- 您可以加入 <a href="https://groups.google.com/forum/#!forum/android-compatibility">android-compatibility 论坛</a>,以便发帖咨询或提出您认为本文档中未涵盖的任何问题。
+您可以加入 <a href="https://groups.google.com/forum/#!forum/android-compatibility">android-compatibility 论坛</a>,以便发帖咨询或提出您认为本文档中未涵盖的任何问题。
</p>
</body></html>
\ No newline at end of file
diff --git a/zh-cn/compatibility/cts/audio-framework.html b/zh-cn/compatibility/cts/audio-framework.html
index 45eed66..f4e1725 100644
--- a/zh-cn/compatibility/cts/audio-framework.html
+++ b/zh-cn/compatibility/cts/audio-framework.html
@@ -127,9 +127,7 @@
<p>参照麦克风是指频响平缓、自然的麦克风。它们通常用于分析和测量设备。</p>
-<p>市面上有一些便宜的 USB 参照麦克风(例如,<a href="https://minidsp.com/products/acoustic-measurement/umik-1">miniDSP USB
-测量校准麦克风</a>、<a href="http://www.daytonaudio.com/index.php/umm-6-usb-measurement-microphone.html">Dayton
-音频 UMM-6 USB 测量麦克风</a>),主要供家庭影院爱好者用来校准其设置。</p>
+<p>市面上有一些便宜的 USB 参照麦克风(例如,<a href="https://minidsp.com/products/acoustic-measurement/umik-1">miniDSP USB 测量校准麦克风</a>、<a href="http://www.daytonaudio.com/index.php/umm-6-usb-measurement-microphone.html">Dayton 音频 UMM-6 USB 测量麦克风</a>),主要供家庭影院爱好者用来校准其设置。</p>
<p>推荐的最低参照麦克风特征:<br />介于 100 Hz - 20 kHz 之间的平缓频率响应:+/- 2 dB<br />信噪比为 70 dB(A 加权)<br />频率为 1000 Hz,声压级为 127 dB 时,总谐波畸变率小于 1%</p><p>
diff --git a/zh-cn/compatibility/cts/run.html b/zh-cn/compatibility/cts/run.html
index 80561dd..c73168a 100644
--- a/zh-cn/compatibility/cts/run.html
+++ b/zh-cn/compatibility/cts/run.html
@@ -39,7 +39,7 @@
<li>或者,您也可以使用以下命令,从命令行中运行所选择的 CTS 计划:<code>cts-tradefed run cts --plan
<plan_name>
</plan_name></code>
-<p class="note"><strong>注意</strong>:我们建议仅在运行 Android 6.0 (Marshmallow) CTS 时,使用 <code>--skip-preconditions</code> 选项来跳过可能会在执行 CTS 测试时导致问题且存在前提条件的实验性功能。</p>
+<p class="note"><strong>注意</strong>:我们建议仅在运行 Android 6.0 (Marshmallow) CTS 时,使用 <code>--skip-preconditions</code> 选项跳过可能会在执行 CTS 测试时导致问题且存在前提条件的实验性功能。</p>
</li><li>查看控制台中报告的测试进度和结果。
</li><li>如果您的设备运行的是 Android 5.0 或更高版本,并且声明支持 ARM 和 x86 ABI,则应运行 ARM 和 x86 CTS 包。
</li></ol>
diff --git a/zh-cn/compatibility/cts/setup.html b/zh-cn/compatibility/cts/setup.html
index c407ecd..373e087 100644
--- a/zh-cn/compatibility/cts/setup.html
+++ b/zh-cn/compatibility/cts/setup.html
@@ -144,7 +144,7 @@
<p class="warning"><strong>警告:</strong>这将清空设备中的所有用户数据。</p>
</li><li>将设备的语言设置为英语(<strong>美国</strong>):<strong>设置 > 语言和输入法 > 语言</strong>
</li><li>如果设备具有 GPS 或 WLAN/移动网络功能,则打开位置信息设置:<strong>设置 > 位置信息 > 开启</strong>
- </li><li><em></em>连接到满足以下要求的 WLAN 网络:支持 IPv6,可以将被测设备 (DUT) 视为隔离的客户端(请参阅上文的<a href="#physical_environment">物理环境</a>部分),并可连接到互联网:<strong>设置 > WLAN</strong>
+ </li><li>连接到满足以下要求的 WLAN 网络:支持 IPv6,可以将被测设备 (DUT) 视为隔离的客户端(请参阅上文的<a href="#physical_environment">物理环境</a>部分),并可连接到互联网:<strong>设置 > WLAN</strong><em></em>
</li><li>确保设备上未设置锁定图案或密码:<strong>设置 > 安全 > 屏幕锁定 > 无</strong>
</li><li>在设备上启用 <strong>USB 调试</strong>:<strong>设置 > 开发者选项 > USB 调试</strong>。
<p class="note"><strong>注意:</strong>在 Android 4.2 及更高版本中,默认情况下会隐藏<strong>开发者选项</strong>。要显示这些选项,请依次转到<strong>设置 > 关于手机</strong>,然后点按<strong>版本号</strong>七次。返回上一屏幕以查找<strong>开发者选项</strong>。要查看其他详细信息,请参阅<a href="http://developer.android.com/studio/run/device.html#developer-device-options">启用设备上的开发者选项</a>。</p>
@@ -160,7 +160,7 @@
<p class="note"><strong>注意:</strong>对于 CTS 版本 2.1 R2 至 4.2 R4,请通过以下命令设置您的设备(或模拟器),以便执行无障碍测试:<br />
<code>adb install -r android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk</code><br />
在设备上,依次启用:<strong>设置 > 无障碍 > 无障碍 > Delegating Accessibility Service</strong></p>
-<p class="note"><strong>注意</strong>:对于 7.0 之前的 CTS 版本,请在声明 <code>android.software.device_admin</code> 的设备上,设置您的设备,以使用以下命令执行设备管理测试:<br />
+<p class="note"><strong>注意</strong>:对于 7.0 之前的 CTS 版本,请在声明 <code>android.software.device_admin</code> 的设备上设置您的设备,以使用以下命令执行设备管理测试:<br />
<code>adb install -r android-cts/repository/testcases/CtsDeviceAdmin.apk</code><br />
</p><p>
依次选择“设置”>“安全”>“选择设备管理器”,然后启用两个 <code>android.deviceadmin.cts.CtsDeviceAdminReceiver*</code> 设备管理器。确保 <code>android.deviceadmin.cts.CtsDeviceAdminDeactivatedReceiver</code> 和任何其他预加载的设备管理器均保持停用状态。
diff --git a/zh-cn/compatibility/vts/performance.html b/zh-cn/compatibility/vts/performance.html
index aefe78c..99e2300 100644
--- a/zh-cn/compatibility/vts/performance.html
+++ b/zh-cn/compatibility/vts/performance.html
@@ -289,13 +289,13 @@
</dl>
-<p class="note"><strong>注意</strong>:后台负荷可能会影响延迟测试中的吞吐量结果和 <code>other_ms</code> 元组。只要后台负荷的优先级低于 <code>fifo_ms</code>,就可能只有 <code>RT-fifo</code> 会显示类似的结果。</p>
+<p class="note"><strong>注意</strong>:后台负荷可能会影响延迟测试中的吞吐量结果和 <code>other_ms</code> 元组。只要后台负荷的优先级低于 <code>RT-fifo</code>,就可能只有 <code>fifo_ms</code> 会显示类似的结果。</p>
<h4 id="pair-values">指定对值</h4>
<p>每个客户端进程都会与其专用的服务器进程配对,且每一对都可能会独立调度到任何 CPU。不过,只要同步标记是 <code>honor</code>,事务期间应该就不会出现 CPU 迁移的情况。</p>
<p>确保系统没有过载!虽然过载系统中延迟较高是正常现象,但是针对过载系统的测试结果并不能提供有用的信息。要测试压力较高的系统,请使用 <code>-pair
-#cpu-1</code>(或谨慎使用 <code>-pair #cpu</code>)。使用 <code>-pair <em>n</em></code> 和 <code><em>n</em> > #cpu</code> 进行测试会导致系统过载,并生成无用信息。</p>
+#cpu-1</code>(或谨慎使用 <code>-pair #cpu</code>)。使用 <code>-pair <em>n</em></code> 和 <code><em>n</em> > #cpu</code> 一起进行测试会导致系统过载,并生成无用信息。</p>
<h4 id="deadline-values">指定截止时间值</h4>
<p>经过大量用户场景测试(在合格产品上运行延迟测试),我们决定将 2.5 毫秒定为需要满足的截止时间要求。对于具有更高要求的新应用(如每秒 1000 张照片),此截止时间值将发生变化。</p>
diff --git a/zh-cn/devices/architecture/vintf/index.html b/zh-cn/devices/architecture/vintf/index.html
index a1f0b72..1441b9f 100644
--- a/zh-cn/devices/architecture/vintf/index.html
+++ b/zh-cn/devices/architecture/vintf/index.html
@@ -20,7 +20,7 @@
limitations under the License.
-->
-<p>本文档介绍供应商接口对象(VINTF 对象)的设计,该对象用于聚合设备的相关信息并通过可查询的 API 提供该信息。<em></em><em></em></p>
+<p>本文档介绍供应商接口对象(VINTF 对象)的设计,该对象用于汇总设备的相关信息并通过可查询的 API 提供该信息。<em></em><em></em></p>
<h2 id="about-objects">VINTF 对象设计</h2>
<p>VINTF 对象直接从设备中收集所需的一些信息。其他信息(如清单)以 XML 格式静态描述。</p>
@@ -55,16 +55,16 @@
<p>无论何时请求,VINTF 对象都必须稳定可靠且能提供相同的完整信息(请见<a href="/devices/architecture/vintf/resources.html#caveats">注意事项</a>)。</p>
<h2 id="manifests-matrices">清单和矩阵</h2>
-<p>Android O 在运行时需要使用 API 来查询设备上的内容,并将该信息发送到<a href="/devices/tech/ota/index.html">无线下载 (OTA)</a> 更新服务器以及其他相关方(如 CTS <code>DeviceInfo</code>)。某些信息在运行时进行检索,其中有一些是静态定义的信息。</p>
+<p>Android O 在运行时需要使用 API 来查询设备上的内容,并将该信息发送到<a href="/devices/tech/ota/index.html">无线下载 (OTA)</a> 更新服务器以及其他相关方(如 CTS <code>DeviceInfo</code>)。某些信息在运行时进行检索,另外一些则是静态定义的信息。</p>
<ul>
<li><strong>设备清单</strong>描述了设备可以为框架提供的静态组件。</li>
-<li><strong>框架兼容性矩阵</strong>描述了 Android 框架从给定设备中期待获取的内容。矩阵是一个静态实体,其组成是在开发下一个版本的 Android 框架期间手动确定。</li>
+<li><strong>框架兼容性矩阵</strong>描述了 Android 框架从给定设备中期待获取的内容。此矩阵是一个静态实体,在开发下一个版本的 Android 框架期间会手动确定此矩阵的组成。</li>
<li><strong>框架清单</strong>描述了框架可以为设备提供的高级服务。</li>
-<li><strong>设备兼容性矩阵</strong>描述了供应商映像需要框架提供的服务,其组成是在设备开发期间手动确定。</li>
+<li><strong>设备兼容性矩阵</strong>描述了供应商映像需要框架提供的服务,在设备开发期间会手动确定此矩阵的组成。</li>
</ul>
-<p>这两对清单和矩阵必须在 OTA 时进行调整,以确保设备可以获取与设备功能兼容的框架更新。一般来说,清单描述了提供的内容,兼容性矩阵描述了需要的内容。<em></em><em></em></p>
+<p>这两对清单和矩阵必须在 OTA 时进行协调,以确保设备可以获取与设备功能兼容的框架更新。一般来说,清单描述了提供的内容,兼容性矩阵描述了需要的内容。<em></em><em></em></p>
<p><a href="/devices/architecture/vintf/objects.html">VINTF 对象数据</a>定义了清单的结构,<a href="/devices/architecture/vintf/comp-matrices.html">兼容性矩阵</a>定义了兼容性矩阵的结构,<a href="/devices/architecture/vintf/match-rules.html">匹配规则</a>定义了兼容性矩阵与清单之间成功匹配的规则。</p>
diff --git a/zh-cn/devices/graphics/implement-vulkan.html b/zh-cn/devices/graphics/implement-vulkan.html
index 57211a1..a377429 100644
--- a/zh-cn/devices/graphics/implement-vulkan.html
+++ b/zh-cn/devices/graphics/implement-vulkan.html
@@ -37,7 +37,7 @@
<p>NDK 包含一个存根 <code>libvulkan.so</code> 库,该库可导出与加载程序相同的符号(用于进行关联)。在设备上运行时,应用会调用从 <code>libvulkan.so</code>(真正的库,而非存根)导出的 Vulkan 函数,以进入加载程序中的 trampoline 函数(根据其第一个参数分派到相应的层或驱动程序)。<code>vkGet*ProcAddr</code> 调用会返回 trampoline 将分派到的函数指针(即它会直接调用核心 API 代码),由于通过这些函数指针(而非导出的符号)进行调用跳过了 trampoline 和分派,因此其效率更高一些。</p>
<h2 id="driver_emun">驱动程序枚举和加载</h2>
-<p>Android 要求在构建系统映像时系统可用的 GPU 是已知状态。加载程序使用现有 HAL 机制(请参阅 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/hardware.h">hardware.h</a></code>)来发现和加载驱动程序。32 位和 64 位 Vulkan 驱动程序的首选路径分别为:</p>
+<p>Android 要求在构建系统映像时系统可用的 GPU 是已知状态。加载程序使用现有 HAL 机制(请参阅 <code><a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/hardware.h">hardware.h</a></code>)发现和加载驱动程序。32 位和 64 位 Vulkan 驱动程序的首选路径分别为:</p>
<pre class="devsite-click-to-copy">
/vendor/lib/hw/vulkan.<ro.product.platform>.so
@@ -90,28 +90,23 @@
<p><code>format</code> 和 <code>imageUsage</code> 参数来自 <code>VkSwapchainCreateInfoKHR</code> 结构。驱动程序应使用相关格式和用途所需的 gralloc 用途标记来填充 <code>*grallocConsumerUsage</code> 和 <code>*grallocProducerUsage</code>。驱动程序返回的用途将在系统分配缓冲区时与交换链消费者请求的用途标记配合使用。</p>
-<p>此函数的早期版本由 Android 7.x 调用。在 Android 8.0 中,此函数的早期版本已被弃用,但如果驱动程序未提供 <code>vkGetSwapchainGrallocUsage2ANDROID</code>,系统仍会调用它的早期版本:</p><pre class="devsite-click-to-copy">
+<p>此函数的早期版本由 Android 7.x 调用。在 Android 8.0 中,此函数的早期版本已被弃用,但如果驱动程序未提供 <code>vkGetSwapchainGrallocUsage2ANDROID</code>,系统仍会调用它的早期版本:</p>
+
+<pre class="devsite-click-to-copy">
VkResult VKAPI vkGetSwapchainGrallocUsageANDROID(
VkDevice device,
VkFormat format,
VkImageUsageFlags imageUsage,
int* grallocUsage
);
-<pre>
+</pre>
-<p>This earlier version does not support swapchain usage flags or extended gralloc
-usage flags.</p>
+<p>此早期版本不支持交换链使用标记或扩展 gralloc 使用标记。</p>
-<h3 id="gralloc_usage_flags">Gralloc-backed images</h3>
+<h3 id="gralloc_usage_flags">由 Gralloc 支持的图像</h3>
-<p><code>VkNativeBufferANDROID</code> is a <code>vkCreateImage</code> extension
-structure for creating an image backed by a gralloc buffer. This structure is
-provided to <code>vkCreateImage</code> in the <code>VkImageCreateInfo</code>
-structure chain. Calls to <code>vkCreateImage</code> with this structure happen
-during the first call to <code>vkGetSwapChainInfoWSI(..
-VK_SWAP_CHAIN_INFO_TYPE_IMAGES_WSI ..)</code>. The WSI implementation allocates
-the number of native buffers requested for the swapchain, then creates a
-<code>VkImage</code> for each one:</p>
+<p><code>VkNativeBufferANDROID</code> 是一个 <code>vkCreateImage</code> 扩展程序结构,用于创建由 gralloc 缓冲区支持的图像。该结构提供给 <code>VkImageCreateInfo</code> 结构链中的 <code>vkCreateImage</code>。对具有此结构的 <code>vkCreateImage</code> 的调用发生在第一次调用 <code>vkGetSwapChainInfoWSI(..
+VK_SWAP_CHAIN_INFO_TYPE_IMAGES_WSI ..)</code> 期间。WSI 实现为交换链分配请求的原生缓冲区数,然后为每个缓冲区创建一个 <code>VkImage</code>:</p>
<pre class="devsite-click-to-copy">
typedef struct {
@@ -137,8 +132,7 @@
} VkNativeBufferANDROID;
</pre>
-<p>When creating a gralloc-backed image, the <code>VkImageCreateInfo</code> has
-the following data:</p>
+<p>创建由 gralloc 支持的图像时,<code>VkImageCreateInfo</code> 具有以下数据:</p>
<pre class="devsite-click-to-copy">
.imageType = VK_IMAGE_TYPE_2D
@@ -155,11 +149,7 @@
.pQueueFamilyIndices = VkSwapChainCreateInfoWSI::pQueueFamilyIndices
</pre>
-In Android 8.0 and later, the platform will provide a
-<code>VkSwapchainImageCreateInfo</code> extension structure in the
-<code>VkImageCreateInfo</code> chain provided to <code>vkCreateImage</code>
-when any swapchain image usage flags are required for the swapchain.
-The extension structure contains the swapchain image usage flags:
+在 Android 8.0 及更高版本中,如果交换链需要任何交换链图像使用标记,则平台将在为 <code>vkCreateImage</code> 提供的 <code>VkImageCreateInfo</code> 链中提供 <code>VkSwapchainImageCreateInfo</code> 扩展结构。该扩展结构包含交换链图像使用标记:
<pre class="devsite-click-to-copy">
typedef struct {
@@ -170,10 +160,8 @@
} VkSwapchainImageCreateInfoANDROID;
</pre>
-<h3 id="acquire_image">Acquiring images</h3>
-<p><code>vkAcquireImageANDROID</code> acquires ownership of a swapchain image
-and imports an externally-signalled native fence into both an existing
-<code>VkSemaphore</code> object and an existing <code>VkFence</code> object:</p>
+<h3 id="acquire_image">获取图像</h3>
+<p><code>vkAcquireImageANDROID</code> 会获取交换链图像的所有权,并将已收到外部信号的原生栅栏同时导入到现有的 <code>VkSemaphore</code> 对象和现有的 <code>VkFence</code> 对象:</p>
<pre class="devsite-click-to-copy">
VkResult VKAPI vkAcquireImageANDROID(
@@ -185,28 +173,12 @@
);
</pre>
-<p>This function is called during <code>vkAcquireNextImageWSI</code> to import a
-native fence into the <code>VkSemaphore</code> and <code>VkFence</code> objects
-provided by the application (however, both semaphore and fence objects are
-optional in this call). The driver may also use this opportunity to recognize
-and handle any external changes to the gralloc buffer state; many drivers won't
-need to do anything here. This call puts the <code>VkSemaphore</code> and
-<code>VkFence</code> into the same pending state as
-<code>vkQueueSignalSemaphore</code> and <code>vkQueueSubmit</code> respectively,
-so queues can wait on the semaphore and the application can wait on the fence.</p>
+<p>此函数在 <code>vkAcquireNextImageWSI</code> 期间被调用,以将原生栅栏导入到应用提供的 <code>VkSemaphore</code> 和 <code>VkFence</code> 对象中(不过,在此调用中,信号量和栅栏对象均是可选的)。驱动程序可能也会借此机会识别和处理 gralloc 缓冲区状态的所有外部更改;许多驱动程序在此无需进行任何操作。此调用会将 <code>VkSemaphore</code> 和 <code>VkFence</code> 分别置于与 <code>vkQueueSignalSemaphore</code> 和 <code>vkQueueSubmit</code> 相同的待处理状态,因此队列可以等待信号量,应用可以等待栅栏。</p>
-<p>Both objects become signalled when the underlying native fence signals; if
-the native fence has already signalled, then the semaphore is in the signalled
-state when this function returns. The driver takes ownership of the fence fd and
-is responsible for closing it when no longer needed. It must do so even if
-neither a semaphore or fence object is provided, or even if
-<code>vkAcquireImageANDROID</code> fails and returns an error. If fenceFd is -1,
-it is as if the native fence was already signalled.</p>
+<p>当底层的原生栅栏发出信号时,两个对象都处于有信号量的状态;如果原生栅栏已经处于有信号量状态,则当该函数返回时,信号量也处于有信号量的状态。驱动程序拥有栅栏 fd 的所有权,负责在其不再需要时将其关闭。即使没有提供信号量或栅栏对象,或者即使 <code>vkAcquireImageANDROID</code> 失败并返回错误,它也必须这样做。如果 fenceFd 为 -1,就如同原生栅栏已处于有信号量的状态。</p>
-<h3 id="acquire_image">Releasing images</h3>
-<p><code>vkQueueSignalReleaseImageANDROID</code> prepares a swapchain image for
-external use, and creates a native fence and schedules it to be signalled after
-the input semaphores have signaled:</p>
+<h3 id="acquire_image">释放图像</h3>
+<p><code>vkQueueSignalReleaseImageANDROID</code> 会准备交换链图像以供外部使用,创建一个原生栅栏,并安排其在输入信号量发出信号后收到信号:</p>
<pre class="devsite-click-to-copy">
VkResult VKAPI vkQueueSignalReleaseImageANDROID(
@@ -218,31 +190,13 @@
);
</pre>
-<p>This API is called during <code>vkQueuePresentKHR</code> on the provided
-queue. Effects are similar to <code>vkQueueSignalSemaphore</code>, except with a
-native fence instead of a semaphore. The native fence must not signal until the
-<code>waitSemaphoreCount</code> semaphores in <code>pWaitSemaphores</code> have
-signaled. Unlike <code>vkQueueSignalSemaphore</code>,
-however, this call creates and returns the synchronization object that will be
-signalled rather than having it provided as input. If the queue is already idle
-when this function is called, it is allowed (but not required) to set
-<code>*pNativeFenceFd</code> to -1. The file descriptor returned in
-*<code>pNativeFenceFd</code> is owned and will be closed by the caller.</p>
+<p>此 API 在提供的队列上的 <code>vkQueuePresentKHR</code> 期间被调用。具体效果与 <code>vkQueueSignalSemaphore</code> 类似,但使用的是原生栅栏,而非信号量。原生栅栏必须先等待 <code>pWaitSemaphores</code> 中的 <code>waitSemaphoreCount</code> 信号量发出信号,然后再发出信号。不过,与 <code>vkQueueSignalSemaphore</code> 不同的是,此调用会创建并返回将收到信号(而非作为输入进行提供)的同步对象。如果调用此函数时队列已经闲置,则允许其(但并非必需)将 <code>*pNativeFenceFd</code> 设置为 -1。调用方拥有 *<code>pNativeFenceFd</code> 中返回的文件描述符并会将其关闭。</p>
-<p>Many drivers can ignore the image parameter, but some may need to prepare
-CPU-side data structures associated with a gralloc buffer for use by external
-image consumers. Preparing buffer contents for use by external consumers should
-have been done asynchronously as part of transitioning the image to
-<code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code>.</p>
+<p>很多驱动程序可以忽略图像参数,但有些驱动程序可能需要准备与 gralloc 缓冲区相关联的 CPU 端数据结构,以供外部图像消费者使用。作为将图像转换为 <code>VK_IMAGE_LAYOUT_PRESENT_SRC_KHR</code> 的一个环节,准备外部消费者使用的缓冲区内容应该异步完成。</p>
-If the image was created with
-<code>VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID</code>, then the driver must
-allow <code>vkQueueSignalReleaseImageANDROID</code> to be called repeatedly
-without intervening calls to <code>vkAcquireImageANDROID</code>.
+如果图像是使用 <code>VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID</code> 创建的,则驱动程序必须允许反复调用 <code>vkQueueSignalReleaseImageANDROID</code>,而不会干预对 <code>vkAcquireImageANDROID</code> 的调用。
-<h2 id="validation">Validation</h2>
-<p>OEMs can test their Vulkan implementation using CTS, which includes
-<a href="/devices/graphics/cts-integration.html">drawElements
-Quality Program (dEQP)</a> tests that exercise the Vulkan Runtime.</p>
+<h2 id="validation">验证</h2>
+<p>OEM 可以使用 CTS 测试其 Vulkan 实现,其中包括使用 Vulkan 运行时的 <a href="/devices/graphics/cts-integration.html">drawElements 质量计划 (dEQP)</a> 测试。</p>
-</pre></pre></body></html>
\ No newline at end of file
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/admin/enterprise-telephony.html b/zh-cn/devices/tech/admin/enterprise-telephony.html
index 0946678..b544466 100644
--- a/zh-cn/devices/tech/admin/enterprise-telephony.html
+++ b/zh-cn/devices/tech/admin/enterprise-telephony.html
@@ -40,8 +40,8 @@
<p>
例如:
</p><ul>
-<li><strong>为工作联系人添加标记</strong>:请参阅 <code>packages/apps/ContactsCommon</code> <em>f3eb5a207bfe0ff3b4ed2350ae5865ed8bc59798</em>
-</li><li><strong>跨资料搜索</strong>:请参阅 <code>packages/apps/ContactsCommon</code><em> cd0b29ddbf3648e48f048196c62245d545bc612</em>2</li>
+<li><strong>为工作联系人添加标记</strong>:请参阅 <code>packages/apps/ContactsCommon</code> f3eb5a207bfe0ff3b4ed2350ae5865ed8bc59798<em></em>
+</li><li><strong>跨资料搜索</strong>:请参阅 <code>packages/apps/ContactsCommon</code> cd0b29ddbf3648e48f048196c62245d545bc6122<em></em></li>
</ul>
<h2 id="implementation">实现</h2>
diff --git a/zh-cn/devices/tech/admin/multi-user.html b/zh-cn/devices/tech/admin/multi-user.html
index 2275d83..013a56f 100644
--- a/zh-cn/devices/tech/admin/multi-user.html
+++ b/zh-cn/devices/tech/admin/multi-user.html
@@ -107,6 +107,6 @@
<li>始终开启的 VPN。VPN 应用现已可以由用户、设备 DPC 或 Managed Profile DPC(仅适用于受管理个人资料应用)设置为始终开启。<em></em>启用后,应用将无法访问公共网络(在连接 VPN 且连接可以通过它正常进行路由前,无法访问网络资源)。报告 <code>device_admin</code> 的设备必须实现始终开启的 VPN。</li>
</ul>
-<p>有关 Android 7.0 设备管理功能的更多详细信息,请参阅 <a href="https://developer.android.com/about/versions/nougat/android-7.0.html#android_for_work">Android for Work</a>。</p>
+<p>要详细了解 Android 7.0 设备管理功能,请参阅 <a href="https://developer.android.com/about/versions/nougat/android-7.0.html#android_for_work">Android for Work</a>。</p>
</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/config/update.html b/zh-cn/devices/tech/config/update.html
new file mode 100644
index 0000000..8a954ff
--- /dev/null
+++ b/zh-cn/devices/tech/config/update.html
@@ -0,0 +1,167 @@
+<html devsite><head>
+ <title>APN 和 CarrierConfig</title>
+ <meta name="project_path" value="/_project.yaml"/>
+ <meta name="book_path" value="/_book.yaml"/>
+ </head>
+ <body>
+ <!--
+ Copyright 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<p>运营商可以在 Android 开源项目 (AOSP) 中更新其接入点名称 (APN) 信息及其特定于运营商的配置设置 (<a href="/devices/tech/config/carrier">CarrierConfig</a>)。</p>
+
+<h2 id="create-account">与您的公司电子邮件地址相关联的 Google 帐号</h2>
+
+<p>要更新 APN 信息或 CarrierConfig,您需要使用与有效的公司电子邮件地址相关联的 Google 帐号提交请求(例如,来自 Acme Company 公司的 APN 更新请求应来自于 foobar@acme.com <em></em>之类的电子邮件地址)。</p>
+<p>如果您没有与公司电子邮件地址相关联的 Google 帐号,请从浏览器中退出登录所有 Gmail 帐号(建议您使用无痕式窗口等无痕浏览功能,以免与其他帐号混淆),然后<a href="https://accounts.google.com/SignUpWithoutGmail?hl=zh-cn">使用您的公司电子邮件地址创建 Google 帐号</a>。</p>
+<!--<ol>-->
+ <!--<li>Sign out of all gmail accounts from your browser. (We recommend you use a private browsing
+ feature such as an incognito window to avoid confusion with your other accounts.)</li>-->
+ <!--<li>Create a Google account with your corporate email address using:
+ <a href="https://accounts.google.com/SignUpWithoutGmail?hl=zh-cn">
+ https://accounts.google.com/SignUpWithoutGmail?hl=en</a></li>-->
+<!--</ol>-->
+<aside class="note"><strong>注意</strong>:请勿将任何 Gmail 帐号与这一新建的帐号相关联。</aside>
+
+<h2 id="local-environment">准备本地开发环境</h2>
+
+<p>如果您以前从未向 AOSP 提交过代码,则需要初始化您的编译环境,熟悉相关工具,并了解如何提交补丁程序:</p>
+<ul>
+ <li><a href="/setup/build/initializing">搭建编译环境</a></li>
+ <li><a href="/setup/develop/">熟悉 Git 和 Repo</a></li>
+ <li><a href="/setup/build/downloading">下载源代码</a></li>
+ <li><a href="/setup/contribute/submit-patches">提交补丁程序</a></li>
+</ul>
+
+<p>此外,我们强烈建议您使用 <a class="external" href="https://developers.google.com/issue-tracker/">Google Issue Tracker</a> 来跟踪更改。</p>
+
+<h2 id="file-a-bug">提交错误</h2>
+
+<ol>
+ <li>转到 <a class="external" href="https://issuetracker.google.com">issuetracker.google.com</a>,然后使用您的公司电子邮件地址登录(请参阅<a href="#create-account">与您的公司电子邮件地址相关联的 Google 帐号</a>)。</li>
+ <aside class="note"><strong>注意</strong>:如果这是您第一次登录,则需要接受相关许可。</aside>
+ <li>登录后,请点击屏幕左侧的<strong>创建问题</strong>。</li>
+ <li>在<strong>组件</strong>中,请依次选择<a class="external" href="https://issuetracker.google.com/issues/new?component=192705&template=845803" class="external"><strong>“Android Public Tracker”>“框架”</strong></a>。</li>
+ <li>在适当的情况下,继续进行 <a href="#apn-update1">APN 更新</a>或 <a href="#carrierconfig-update1">CarrierConfig 更新</a>,以输入标题和说明。</li>
+</ol>
+
+<h3 id="apn-update1">APN 错误</h3>
+
+<p>请按照如下方式设置错误属性:</p>
+<p><strong>标题</strong>:添加/修改/移除 CarrierXYZ 的 APN<em></em><em></em><em></em></p>
+<p><strong>说明</strong>:请添加关于您所请求更改的详细说明,其中包括 APN 设置本身。</p>
+
+<h3 id="carrierconfig-update1">CarrierConfig 错误</h3>
+
+<p>请按照如下方式设置错误属性:</p>
+<p><strong>标题</strong>:CarrierXYZ 的配置更改</p>
+<p><strong>描述</strong>:请添加关于您所请求更改的详细说明。</p>
+
+<h2 id="submit-changes">提交更改</h2>
+
+<p>当您准备好进行更改时,请按以下步骤操作:</p>
+<ol>
+ <li>确定要更改的文件。</li>
+ <li>对相应的文件进行更改。</li>
+ <li>请按照<a href="/setup/contribute/submit-patches#make-your-change">提交补丁程序</a>的相关说明操作,将相关更改提交到本地代码库,并请注意提交消息指南(包括建议的格式)。</li>
+ <li>将更改提交到您的个人历史记录后,请使用 <code>repo upload</code> 命令将其上传到 Gerrit。</li>
+ <li>上传成功后,Repo 会提供 Gerrit 上新网页的网址。请使用此网址执行以下操作:
+ <ul>
+ <li>在审核服务器上查看您的补丁程序</li>
+ <li>添加注释</li>
+ <li>为您的补丁程序申请特定审核者</li>
+ </ul>
+ </li>
+</ol>
+
+<aside class="note"><b>注意</b>:向 AOSP 提交 APN 和 CarrierConfig 更改并不能保证 OEM 一定会接受这些更改。运营商应与 OEM 合作,以便在其设备上进行所需更改。</aside>
+
+<h3 id="apn-update2">APN 语法</h3>
+
+<p><strong>Android 项目名称</strong> - device/sample</p>
+<p><strong>文件名</strong> - etc/apns-full-conf.xml(<a class="external" href="https://android.googlesource.com/device/sample/+/master/etc/apns-full-conf.xml">Google Git 主链接</a>)</p>
+<p>该文件包含 XML 格式的 APN 设置,并充当示例文件,因此 Android 设备的行为不会发生任何变化。</p>
+<p>典型的 APN 配置如下所示:</p>
+
+<pre class="prettyprint"><apn carrier="CarrierXYZ"
+ mcc="123"
+ mnc="123"
+ apn="carrierxyz"
+ type="default,supl,mms,ims,cbs"
+ mmsc="http://mms.carrierxyz.com"
+ mmsproxy="0.0.0.0"
+ mmsport="80"
+ bearer_bitmask="4|5|6|7|8|12"
+/>
+</pre>
+
+<h4 id="testing">测试</h4>
+<ol>
+ <li>连接您拥有 root 权限的任何 Android 设备。</li>
+ <li>将设置添加到 /etc/apns-conf.xml。</li>
+ <li>重置 APN 设置。</li>
+ <li>在 APN 设置中,确认已正确加载配置文件。</li>
+ <li>对于每个配置文件,都请测试数据连接、WLAN 热点和 MMS,以确保其能够正常运行。</li>
+</ol>
+
+<h4 id="commit-message">提交消息</h4>
+
+<pre class="devsite-click-to-copy">[Example - "Add CarrierXYZ apns to sample apns"]
+Bug: [Issue ID from Google Issue Tracker]
+Test: No change to behavior as this is only a sample file
+</pre>
+
+<h4 id="sample">示例 CL</h4>
+<p>要获取示例 CL,请参阅<a class="external" href="https://android-review.googlesource.com/c/device/sample/+/532609">示例 BICS APN</a>。</p>
+
+<h3 id="carrierconfig-update2">CarrierConfig 语法</h3>
+
+<p><b>项目名称</b> - platform/packages/apps/CarrierConfig</p>
+<p><b>文件名</b> - assets/carrier_config_<mccmnc>.xml(<a class="external" href="https://android.googlesource.com/platform/packages/apps/CarrierConfig/+/master/assets">Google Git 主链接</a>)</mccmnc></p>
+<p>根据相关的 MCC/MNC 元组确认资源文件夹中的相关 XML 文件。该文件包含 XML 格式的运营商配置对象。系统会在 <a class="external" href="https://developer.android.com/reference/android/telephony/CarrierConfigManager.html">CarrierConfigManager</a> 下将属性名称定义为键,并使用后缀指明值的类型 (int/string/bool)。</p>
+<p>典型的 int/string/bool 属性如下所示:</p>
+
+<pre class="prettyprint"><int name="vvm_port_number_int" value="5499" />
+<string name="vvm_type_string">vvm_type_omtp</string >
+<boolean name="vvm_cellular_data_required_bool" value="true" />
+</pre>
+
+<h4 id="commit-message">提交消息</h4>
+
+<pre class="devsite-click-to-copy">[Example - "Add VVM settings for CarrierXYZ"]
+
+[Example - "Updated <mccmnc> carrier config file to include VVM settings
+as defined by CarrierXYZ."]
+
+Bug: [Issue ID from Google Issue Tracker]
+Test: [Testing notes]
+</pre>
+
+<h4 id="sample">示例 CL</h4>
+<p>要获取示例 CL,请参阅<a class="external" href="https://android-review.googlesource.com/c/platform/packages/apps/CarrierConfig/+/625835">经过更新的运营商配置文件</a>。</p>
+
+<h2 id="request-a-review">请求审核</h2>
+
+<p>要请求审核,请执行以下操作:</p>
+<ul>
+ <li>转到相应更改的 Gerrit 网址,然后将“android-carrier-config-review@google.com”<em></em>添加为审核者。</li>
+ <li>您还可以将您的 Google 联系人添加到 Gerrit 上的抄送名单中。</li>
+ <li>为了进行跟踪,您可以将问题指派人更改为“android-carrier-config-review@google.com”。<em></em></li>
+</ul>
+
+<p>在提交内容通过审核和验证流程之后,Gerrit 会自动将更改合并到公开代码库。其他用户可以运行 <code> repo sync </code> 以将更新提取到自己的本地客户端。</p>
+<aside class="note"><strong>注意</strong>:对 APN 文件所做的更改不会自动生效,因为相应更改位于 device/sample 文件夹中。如果您正在与主要 OEM 合作,请确保他们可以从 AOSP 获取最新信息。一般情况下,OEM 会安排定期获取最新信息,但如果时间紧迫,您可以与 OEM 联系以建议他们尽快(而非延后)更新其列表。</aside>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/connect/block-numbers.html b/zh-cn/devices/tech/connect/block-numbers.html
index 8ff067d..3ac9ee3 100644
--- a/zh-cn/devices/tech/connect/block-numbers.html
+++ b/zh-cn/devices/tech/connect/block-numbers.html
@@ -112,7 +112,7 @@
</p>
<p>
-如果设备在之前出厂时就具备了呼叫/短信限制功能,请调整相应功能,以便所有严格匹配的被屏蔽电话号码<em></em>都存储在 <code>BlockedNumberProvider,</code> 中,并且围绕该提供程序发生的行为也能满足 Android 兼容性定义文档 (CDD) 中针对此功能列出的要求。
+<em></em>如果设备在之前出厂时就具备了呼叫/短信限制功能,请调整相应功能,以便所有严格匹配的被屏蔽电话号码都存储在 <code>BlockedNumberProvider,</code> 中,并且围绕该提供程序发生的行为也能满足 Android 兼容性定义文档 (CDD) 中针对此功能列出的要求。
</p>
<p>
diff --git a/zh-cn/devices/tech/ota/nonab/inside_packages.html b/zh-cn/devices/tech/ota/nonab/inside_packages.html
index 40a9d20..21b2004 100644
--- a/zh-cn/devices/tech/ota/nonab/inside_packages.html
+++ b/zh-cn/devices/tech/ota/nonab/inside_packages.html
@@ -80,7 +80,7 @@
<dt><code>concat(<i>expr</i>[, <i>expr</i>, ...])</code></dt>
<dd>评估每个表达式并将它们连接起来。在只有两个参数的特殊情况下,+ 运算符就是该函数的语法糖(但该函数形式可以包含任意数量的表达式)。表达式必须为字符串;该函数不能连接 Blob。</dd>
<dt><code>file_getprop(<i>filename</i>, <i>key</i>)</code></dt>
-<dd>读取给定的 filename,将其解释为属性文件(例如:<code>/system/build.prop</code>,并返回给定 key 的值,如果 key 不存在,则返回空字符串。<i></i><i></i><i></i></dd>
+<dd>读取给定的 filename,将其解释为属性文件(例如:<code>/system/build.prop</code>),并返回给定 key 的值,如果 key 不存在,则返回空字符串。<i></i><i></i><i></i></dd>
<dt><code>format(<i>fs_type</i>, <i>partition_type</i>, <i>location</i>, <i>
fs_size</i>, <i>mount_point</i>)</code></dt>
<dd>重新格式化给定的分区。支持的分区类型如下:
@@ -120,14 +120,14 @@
<dt><code>run_program(<i>path</i>[, <i>arg</i>, ...])</code></dt>
<dd>在 path 上执行二进制文件并传入 arg。<i></i><i></i>返回程序的退出状态。</dd>
<dt><code>set_progress(<i>frac</i>)</code></dt>
-<dd>在最近的 <code>show_progress()</code> 调用所定义的块内设置进度条的位置。frac<i></i> 必须在 [0.0, 1.0] 范围内。进度条从不向后移动;向后移动的尝试会被忽略。</dd>
+<dd>在最近的 <code>show_progress()</code> 调用所定义的块内设置进度条的位置。frac 必须在 [0.0, 1.0] 范围内。<i></i>进度条从不向后移动;向后移动的尝试会被忽略。</dd>
<dt><code>sha1_check(<i>blob</i>[, <i>sha1</i>])</code></dt>
<dd>blob 参数是 <code>
read_file()</code> 返回的 blob 类型或 <code>package_extract_file()
</code> 的单参数形式 blob。<i></i>在没有 sha1 参数的情况下,此函数返回 blob 的 SHA1 哈希值(作为 40 位十六进制字符串)。<i></i>在提供了一个或多个 sha1 参数的情况下,如果 SHA1 哈希值等于其中一个参数,则该函数返回此 SHA1 哈希值;如果与任何一个参数都不相等,则返回空字符串。<i></i></dd>
<dt><code>show_progress(<i>frac</i>, <i>secs</i>)</code></dt>
<dd>在 secs 秒(必须为整数)内推动进度条向前移动下一个 frac 的长度。secs 可为 0,在这种情况下,进度条不会自动向前移动,而是通过使用上面所定义的 <code>
-set_progress()</code> 函数实现进度递增。<i></i><i><i></i></i></dd>
+set_progress()</code> 函数实现进度递增。<i></i><i></i><i></i></dd>
<dt><code>sleep(<i>secs</i>)</code></dt>
<dd>休眠 secs 秒(必须为整数)。<i></i></dd>
<dt><code>stdout(<i>expr</i>[, <i>expr</i>, ...])</code></dt>
diff --git a/zh-cn/devices/tech/power/device.html b/zh-cn/devices/tech/power/device.html
index a4ba02b..7b6be75 100644
--- a/zh-cn/devices/tech/power/device.html
+++ b/zh-cn/devices/tech/power/device.html
@@ -28,7 +28,7 @@
<h2 id="power-consumption">读取耗电量</h2>
-<p>要读取耗电量数据,请在测试代码中插入对 API 的调用。</p>
+<p>要读取耗电量数据,请在测试代码中插入对相关 API 的调用。</p>
<pre class="prettyprint">
import android.os.BatteryManager;
@@ -52,7 +52,7 @@
BATTERY_PROPERTY_ENERGY_COUNTER Remaining energy in nanowatt-hours
</pre>
-<p>大多数属性都是从内核中类似于 power_supply 名称的子系统属性中读取。但是,特定设备的确切属性、属性值解析和更新频率取决于:</p>
+<p>大多数属性都是从内核中类似于 power_supply 名称的子系统属性中读取的。但是,特定设备的确切属性、属性值解析和更新频率取决于:</p>
<ul>
<li>电量计硬件,如 Summit SMB347 或 Maxim MAX17050。</li>
diff --git a/zh-cn/devices/tech/settings/settings-guidelines.html b/zh-cn/devices/tech/settings/settings-guidelines.html
new file mode 100644
index 0000000..00caeaa
--- /dev/null
+++ b/zh-cn/devices/tech/settings/settings-guidelines.html
@@ -0,0 +1,378 @@
+<html devsite><head>
+
+ <meta name="book_path" value="/_book.yaml"/>
+
+ <meta name="project_path" value="/_project.yaml"/>
+</head>
+<body>
+<!--
+ Copyright 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<h1 id="android_settings_design_guidelines" class="page-title">Android 设置设计指南</h1>
+
+<p>本文重点介绍负责设计 Android 平台设置、GMS 核心设置(Google 设置)的所有人员或为 Android 应用设计设置的所有开发者应该遵循的原则和指南。</p>
+
+<h2 id="design_principles">设计原则</h2>
+
+<h3 id="provide_a_good_overview">提供良好的概览</h3>
+
+<p>用户应该能够浏览设置屏幕并理解各项设置及其对应的值。</p>
+
+<p><img src="images/settings-guidelines01.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 1</strong>:各项设置及其当前值显示在顶层屏幕中</p>
+
+<h3 id="organize_items_intuitively">直观地整理项目</h3>
+
+<p>将常用设置放在屏幕顶部,并限制一个屏幕中的设置数量。如果屏幕上的项目超过 10-15 个,可能就显得太多了。可以通过将某些设置移到单独的屏幕中来创建直观的菜单。</p>
+
+<p><img src="images/settings-guidelines02.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 2</strong>:常用设置位于屏幕顶部</p>
+
+<h3 id="make_settings_easy_to_find">让设置易于查找</h3>
+
+<p>在某些情况下,如果一项设置能在不同屏幕中调用,用起来可能会很方便。各种不同情况都可能促使用户更改某项设置,因此在不同位置包含此设置将有助于用户找到此设置项。</p>
+
+<p>对于重复的设置,请为该设置创建单独的屏幕,并在不同位置设置入口点。</p>
+
+<table class="columns">
+ <tbody><tr>
+ <td><img src="images/settings-guidelines03.png" width="250" class="screenshot"/></td>
+ <td><img src="images/settings-guidelines04.png" width="250" class="screenshot"/></td>
+ </tr>
+</tbody></table>
+
+<p><strong>图 3 和图 4</strong>:“默认通知提示音”同时显示在“通知”屏幕和“提示音”屏幕中</p>
+
+<h3 id="use_a_clear_title_and_status">使用清晰的标题和状态</h3>
+
+<p>设置标题应简洁且意义明确。应避免使用像“常规设置”这样的模糊标题。在标题下方,显示状态以突出显示设置的值。应显示具体详细信息,而不只是描述标题。</p>
+
+<p>标题应该:</p>
+
+<ul>
+<li>将标签的最重要内容放在最前面。</li>
+<li>使用中性词(如“屏蔽”)来代替否定词(如“不要”或“永不”)。</li>
+<li>使用不含人称的标签(如“通知”,而不是“通知我”)。例外情况:如果必须在标签中提及用户以便对方了解设置,请使用第二人称(“您/你”),而不是第一人称(“我”)。</li>
+</ul>
+
+<p>标题应避免以下情况:</p>
+
+<ul>
+<li>使用宽泛的术语,如“设置”、“更改”、“编辑”、“修改”、“管理”、“使用”、“选中”或“选择”。</li>
+<li>重复使用子版块或子屏幕标题中的字词。</li>
+<li>使用技术术语。</li>
+</ul>
+
+<h2 id="page_types">页面类型</h2>
+
+<h3 id="settings_list">设置列表</h3>
+
+<p>这是最常见的屏幕类型。借助此类屏幕,您可以将多项设置放在一处。设置列表可以包含各种控件,例如开关、菜单和滑块。</p>
+
+<p>如果多项设置属于同一类别,则可以将这些设置分为一组。要了解详情,请参阅<a href="#grouping_dividers">分组和分隔线</a>。</p>
+
+<p><img src="images/settings-guidelines05.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 5</strong>:设置列表示例</p>
+
+<h3 id="list_view">列表视图</h3>
+
+<p>列表视图用于显示应用、帐号、设备等项目的列表。您可以将过滤或排序控件添加到该屏幕中。</p>
+
+<p><img src="images/settings-guidelines06.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 6</strong>:列表视图的示例</p>
+
+<h3 id="entity_screen">实体屏幕</h3>
+
+<p>实体屏幕用于显示单独项目(例如应用、帐号、设备、WLAN 网络等)的设置。</p>
+
+<p>从视觉上来看,实体会与图标、标题和副标题一起显示在屏幕顶部。该屏幕中的所有设置都必须与此实体相关。</p>
+
+<p><img src="images/settings-guidelines07.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 7</strong>:“应用信息”中使用的实体屏幕的示例</p>
+
+<p><img src="images/settings-guidelines08.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 8</strong>:“存储空间”中使用的实体屏幕的示例</p>
+
+<h3 id="master_setting">主设置</h3>
+
+<p>如果可以开启或关闭整个功能(例如 WLAN 或蓝牙),则建议使用主设置。通过使用屏幕顶部的开关,用户可以轻松控制此功能。使用主设置停用此功能会停用所有其他相关设置。</p>
+
+<p>如果某项功能需要较长的文字说明,则可以使用主设置,因为该屏幕类型允许使用较长的页脚文本。</p>
+
+<p>如果需要复制或从多个屏幕链接到某项设置,请使用主设置。由于主设置是一个单独的屏幕,因此您可以避免在不同位置针对同一项设置使用多个开关。</p>
+
+<p><img src="images/settings-guidelines09.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 9</strong>:“应用通知”屏幕中使用的主设置的示例(关闭主开关会针对此应用关闭整个功能)</p>
+
+<p><img src="images/settings-guidelines10.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 10</strong>:“应用通知”屏幕中使用的主设置的示例(主开关已关闭)</p>
+
+<h3 id="radio_button_selection_screen">单选按钮选择屏幕</h3>
+
+<p>当用户需要针对某项设置进行选择时,应使用该屏幕。单选按钮可以显示在对话框或单独的屏幕中。单选按钮不应与滑块、菜单或开关一起使用。</p>
+
+<p>单选按钮屏幕可以在顶部包含图片,并在底部包含页脚文本。单个单选按钮可以具有辅助文本和标题。</p>
+
+<p><img src="images/settings-guidelines11.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 11</strong>:不应在设置列表中使用单选按钮</p>
+
+<p><img src="images/settings-guidelines12.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 12</strong>:关于如何在设置中正确使用单选按钮的示例</p>
+
+<h2 id="components">组件</h2>
+
+<h3 id="header">标头</h3>
+
+<p>从 Android 8.0 开始,操作工具栏中会显示搜索、帮助以及其他相关操作。不建议使用溢出菜单,因为用户可能无法发现这些菜单中隐藏的操作。</p>
+
+<p><strong>对于没有任何特定于屏幕的操作的工具栏</strong>:显示搜索和帮助操作。</p>
+
+<p><img src="images/settings-guidelines13.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 13</strong>:包含搜索和帮助操作的工具栏</p>
+
+<p><strong>对于包含一项操作的工具栏</strong>:将该操作显示在搜索前面。</p>
+
+<p><img src="images/settings-guidelines14.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 14</strong>:在搜索和帮助操作前面包含一项操作的工具栏</p>
+
+<p><strong>对于包含多项操作的工具栏</strong>:考虑将主要操作放置在搜索前面,同时将高级操作放在溢出菜单中。</p>
+
+<p>如果所有操作都是高级操作或仅对一小部分用户有用,请考虑将所有操作都放置在溢出菜单中。</p>
+
+<p><img src="images/settings-guidelines15.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 15</strong>:包含操作溢出菜单的工具栏</p>
+
+<h3 id="entity_header">实体标头</h3>
+
+<p>实体标头只能显示标题或带有辅助文本的标题(允许使用多行辅助文本)。以下操作是可选的。最多可以有两项操作。</p>
+
+<p><img src="images/settings-guidelines16.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 16</strong>:实体标头</p>
+
+<p>图标和标题 (App1) 部分将在标头(应用信息)下滚动。</p>
+
+<p><img src="images/settings-guidelines17.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 17</strong>:图中的应用信息标题属于工具栏的一部分,而屏幕的其余部分将在其下滚动</p>
+
+<h3 id="menu_link">菜单链接</h3>
+
+<p>标题是强制性设置。您还应显示突出显示设置状态的辅助文本。图标是可选的。</p>
+
+<p>标题文字尽量保持简洁明了。如果标题很长,则可能会在下一行中继续显示,而不是被截断。请勿在长按时启用菜单或操作。</p>
+
+<p>例如:</p>
+
+<p><img src="images/settings-guidelines18.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 18</strong>:带有图标、标题和辅助文本的菜单链接</p>
+
+<p><img src="images/settings-guidelines19.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 19</strong>:带有标题和辅助文本的菜单链接</p>
+
+<p><img src="images/settings-guidelines20.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 20</strong>:仅带有标题的菜单链接</p>
+
+<p><strong>带有图标、标题、辅助文本,且右侧带有单独触摸目标的菜单链接</strong></p>
+
+<p>其他点按目标应使用主题背景颜色。</p>
+
+<p><img src="images/settings-guidelines21.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 21</strong>:点按两次的目标菜单示例</p>
+
+<p><strong>带有图标、标题、辅助文本和统计信息/数字/警报图标的菜单链接</strong></p>
+
+<p>百分比和时间等数值可与辅助文本一起显示在右侧,而条形图可以显示在下方。</p>
+
+<p>通常,数值显示在右侧,以便用户能够轻松地进行浏览和比较。</p>
+
+<p><img src="images/settings-guidelines22.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 22</strong>:带有图标、标题、统计信息和图表的示例菜单</p>
+
+<h3 id="grouping_dividers">分组和分隔线</h3>
+
+<p>如果屏幕中包含多项设置,则可以将这些设置分组并用分隔线分开。与较旧版本的 Android 不同,您现在可以使用分隔线将多项设置归类为一个群组,而不是分隔各项设置。</p>
+
+<p>如果群组中的设置密切相关,那么您可以添加群组标题。如果您使用群组标题,则应始终添加分隔线。</p>
+
+<p><img src="images/settings-guidelines23.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 23</strong>:使用分隔符分组的设置</p>
+
+<h3 id="switch">开关</h3>
+
+<p><strong>带有图标、标题和辅助文本的开关</strong></p>
+
+<p><img src="images/settings-guidelines24.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 24</strong>:带有图标、标题和辅助文本的开关</p>
+
+<p><strong>带有标题和辅助文本的开关</strong></p>
+
+<p><img src="images/settings-guidelines25.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 25</strong>:带有标题和辅助文本的开关</p>
+
+<p><strong>仅带有标题的开关</strong></p>
+
+<p>标题左侧可附带图标。</p>
+
+<p><img src="images/settings-guidelines26.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 26</strong>:仅带有标题的开关</p>
+
+<h3 id="list_item_switch">列表项 + 开关</h3>
+
+<p>您可以结合使用列表项和开关。点按垂直线的左侧可发挥链接的作用,并让用户转到下一个屏幕。右侧则发挥标准开关的作用。</p>
+
+<p>对于左侧的列表项,标题是强制性设置。图标和辅助文本是可选的。</p>
+
+<p><img src="images/settings-guidelines27.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 27</strong>:列表项和开关</p>
+
+<h3 id="slider">滑块</h3>
+
+<p>滑块中的图标是可选的。</p>
+
+<p><img src="images/settings-guidelines28.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 28</strong>:滑块</p>
+
+<h3 id="on_screen_button">屏幕按钮</h3>
+
+<p>正面操作使用主题背景颜色,而负面操作则显示为灰色。正面操作包括打开应用、安装应用、添加新项目等。负面操作包括清除数据、卸载应用、删除项目等。</p>
+
+<p><img src="images/settings-guidelines29.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 29</strong>:灰色的“卸载”和“强行停止”按钮</p>
+
+<p><img src="images/settings-guidelines30.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 30</strong>:蓝色的“立即开启”按钮</p>
+
+<h3 id="progressive_disclosure_advanced">渐进式披露(高级)</h3>
+
+<p>应隐藏不经常使用的设置。仅当至少要隐藏 3 个项目时才可以使用“高级”设置。</p>
+
+<p>图中,辅助文本显示隐藏设置的标题。辅助文本应只有一行。其他文本将被截断并以省略号代替。</p>
+
+<p><img src="images/settings-guidelines31.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 31</strong>:在“显示”屏幕中使用的高级设置</p>
+
+<h3 id="drop_down_menu">下拉菜单</h3>
+
+<p>可以使用下拉菜单,但理想情况下,您应改为使用对话框或单选按钮选择屏幕。建议使用此方法来简化设置,因为目前有三种不同的模式可用于单项选择。</p>
+
+<p>如果需要,您可以在设置具有简单选项的情况下使用下拉菜单。</p>
+
+<p><img src="images/settings-guidelines32.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 32</strong>:下拉菜单</p>
+
+<h3 id="checkbox">复选框</h3>
+
+<p>尽可能使用开关,而不要使用复选框。</p>
+
+<p>复选框可用于:</p>
+
+<ul>
+<li>执行限制应用或屏蔽服务等负面操作。</li>
+<li>避免屏幕中有过多的开关。</li>
+</ul>
+
+<p><img src="images/settings-guidelines33.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 33</strong>:复选框用于减少该屏幕中的开关数量</p>
+
+<h3 id="links">链接</h3>
+
+<p>建议不要在设置中使用链接。仅在绝对必要时才使用链接。链接应使用强调色,并且不应添加下划线。</p>
+
+<p><img src="images/settings-guidelines34.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 34</strong>:设置中使用的链接</p>
+
+<h3 id="footer">页脚</h3>
+
+<p>页脚文本可用于添加说明内容。页脚顶部应始终添加分隔线。页脚显示在屏幕底部,可以包含链接(如果需要)。</p>
+
+<p><img src="images/settings-guidelines35.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 35</strong>:页脚文本</p>
+
+<h2 id="patterns">模式</h2>
+
+<h3 id="data">数据</h3>
+
+<p>重要数据可以显示在条形图或饼图等图表中。这些数据可以显示在实体标头中。示例包括移动数据和存储空间。</p>
+
+<p>其他不太重要的数据可以使用常规列表视图显示。</p>
+
+<p><img src="images/settings-guidelines36.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 36</strong>:显示存储空间的示例</p>
+
+<p><img src="images/settings-guidelines37.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 37</strong>:显示网络的示例</p>
+
+<h3 id="user_education">用户培训</h3>
+
+<p>某些功能可能需要说明或用户培训。您可以使用动画或图片及文本来指导用户。动画或图片应显示在屏幕顶部,而页脚文本可用于添加说明。</p>
+
+<p><img src="images/settings-guidelines38.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 38</strong>:使用动画和页脚文本的设置</p>
+
+<h3 id="forms">表单</h3>
+
+<p>如果表单有一个输入字段,请使用普通对话框。这样可以使用户轻松地在单个字段中输入内容。</p>
+
+<p>不过,如果表单有多个字段,请考虑使用<a href="https://material.io/design/components/dialogs.html#full-screen-dialog">全屏对话框</a>。这样可以提供更多屏幕空间,从而以清晰的方式排列各字段。</p>
+
+<p><img src="images/settings-guidelines39.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 39</strong>:包含普通对话框的表单</p>
+
+<h3 id="search_results">搜索结果</h3>
+
+<p>搜索结果会显示设置的标题、辅助文本(如果有)和面包屑导航位置。</p>
+
+<p><img src="images/settings-guidelines40.png" width="250" class="screenshot"/></p>
+
+<p><strong>图 40</strong>:搜索结果</p>
+
+</body></html>
\ No newline at end of file
diff --git a/zh-cn/devices/tech/test_infra/tradefed/full_example.html b/zh-cn/devices/tech/test_infra/tradefed/full_example.html
index 12d059c..566e080 100644
--- a/zh-cn/devices/tech/test_infra/tradefed/full_example.html
+++ b/zh-cn/devices/tech/test_infra/tradefed/full_example.html
@@ -286,7 +286,7 @@
</pre>
<h2 id="optionhandling">处理选项(D、I、R)</h2>
-<p>从 TF 配置中加载的对象(也称为<b>配置对象</b>)亦可通过使用 <code>@Option</code> 注解来接收命令行参数中的数据。</p><p>
+<p>从 TF 配置中加载的对象(也称为<b>配置对象</b>)亦可通过使用 <code>@Option</code> 注解接收命令行参数中的数据。</p><p>
</p><p>要参与其中,配置对象类会将 <code>@Option</code> 注解应用于相关成员字段,并为其指定一个唯一的名称。这样您便可以通过命令行选项填充该成员字段值(并自动将该选项添加到配置帮助系统)。</p>
diff --git a/zh-cn/security/bulletin/2018-02-01.html b/zh-cn/security/bulletin/2018-02-01.html
index 0d465ca..9b480b0 100644
--- a/zh-cn/security/bulletin/2018-02-01.html
+++ b/zh-cn/security/bulletin/2018-02-01.html
@@ -45,7 +45,7 @@
</ul>
<h2 id="2018-02-01-details">2018-02-01 安全补丁程序级别 - 漏洞详情</h2>
<p>
-我们在下面提供了 2018-02-01 补丁程序级别涵盖的每个安全漏洞的详细信息。漏洞列在所影响的组件下,其中包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 AOSP 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+我们在下面提供了 2018-02-01 补丁程序级别涵盖的每个安全漏洞的详细信息。漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 AOSP 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
</p>
<h3 id="media-framework">媒体框架</h3>
@@ -349,7 +349,7 @@
</tbody></table>
<h3 id="qualcomm-closed-source-components">Qualcomm 闭源组件</h3>
-<p>以下漏洞会影响 Qualcomm 组件,相应的 Qualcomm AMSS 安全公告或安全提醒中对这些漏洞进行了详细说明。这些问题的严重程度评估是由 Qualcomm 直接提供的。</p>
+<p>以下漏洞会影响 Qualcomm 组件,相应的 Qualcomm AMSS 安全公告或安全提醒中对这些漏洞进行了详细说明。这些漏洞的严重程度评估是由 Qualcomm 直接提供的。</p>
<table>
<colgroup><col width="17%" />
@@ -472,7 +472,7 @@
</tr>
</tbody></table>
<p id="asterisk">
-<strong>5.在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
+<strong>5. 在“参考内容”列中,Android Bug ID 旁边的 * 表示什么意思?<em></em></strong>
</p>
<p>
如果问题尚未公开发布,则在“参考内容”列中,相应 Android Bug ID 旁边会显示 *。<em></em><a href="https://developers.google.com/android/nexus/drivers">Google Developers 网站</a>上针对 Nexus 设备提供的最新二进制驱动程序中通常包含旨在解决相应问题的更新。
diff --git a/zh-cn/security/bulletin/2018-03-01.html b/zh-cn/security/bulletin/2018-03-01.html
index e59e8d4..ca00629 100644
--- a/zh-cn/security/bulletin/2018-03-01.html
+++ b/zh-cn/security/bulletin/2018-03-01.html
@@ -25,7 +25,7 @@
本 Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。安全补丁程序级别为 2018-03-05 或更新的 Android 系统都已解决本公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。
</p>
<p>
-Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中,并在本公告中提供了相应链接。本公告中还提供了指向 AOSP 以之外的补丁程序的链接。
+Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中,并在本公告中提供了相应链接。本公告中还提供了指向 AOSP 之外的补丁程序的链接。
</p>
<p>
这些问题中危险性最高的是媒体框架中的一个严重程度为“严重”的安全漏洞,该漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响的设备造成的影响(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。
@@ -418,7 +418,7 @@
</tbody></table>
<h3 id="qualcomm-closed-source-components">Qualcomm 闭源组件</h3>
-<p>以下漏洞会影响 Qualcomm 组件,相应的 Qualcomm AMSS 安全公告或安全提醒中对这些漏洞进行了详细说明。这些问题的严重程度评估是由 Qualcomm 直接提供的。</p>
+<p>以下漏洞会影响 Qualcomm 组件,相应的 Qualcomm AMSS 安全公告或安全提醒中对这些漏洞进行了详细说明。这些漏洞的严重程度评估是由 Qualcomm 直接提供的。</p>
<table>
<colgroup><col width="17%" />
diff --git a/zh-cn/security/bulletin/2018-07-01.html b/zh-cn/security/bulletin/2018-07-01.html
index 2715f00..fb1ac54 100644
--- a/zh-cn/security/bulletin/2018-07-01.html
+++ b/zh-cn/security/bulletin/2018-07-01.html
@@ -19,14 +19,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<p><em>发布时间:2018 年 7 月 2 日</em></p>
+<p><em>发布时间:2018 年 7 月 2 日 | 更新时间:2018 年 7 月 3 日</em></p>
<p>
Android 安全公告详细介绍了会影响 Android 设备的安全漏洞。安全补丁程序级别为 2018-07-05 或更新的 Android 系统都已解决本公告中所述的所有问题。要了解如何查看设备的安全补丁程序级别,请参阅<a href="https://support.google.com/pixelphone/answer/4457705">查看并更新 Android 版本</a>。
</p>
<p>
-Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们会在接下来的 48 小时内将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中。届时,我们将会修订本公告,将相关 AOSP 链接增补到本文中。
-</p>
+Android 合作伙伴在本公告发布前至少一个月就已收到关于所有问题的通知。我们已将针对这些问题的源代码补丁程序发布到 Android 开源项目 (AOSP) 代码库中,并在本公告中提供了相应链接。本公告中还提供了指向 AOSP 之外的补丁程序的链接。</p>
<p>
这些问题中危险性最高的是媒体框架中的一个严重程度为“严重”的安全漏洞,该漏洞可让远程攻击者利用蓄意创建的文件通过特权进程执行任意代码。<a href="/security/overview/updates-resources.html#severity">严重程度评估</a>的依据是漏洞被利用后可能会对受影响的设备造成的影响(假设相关平台和服务缓解措施被成功规避或出于开发目的而被停用)。
</p>
@@ -68,14 +67,14 @@
</tr>
<tr>
<td>CVE-2018-9433</td>
- <td>A-38196219</td>
+ <td>A-38196219<a href="#asterisk">*</a></td>
<td>RCE</td>
<td>严重</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2</td>
</tr>
<tr>
<td>CVE-2018-9410</td>
- <td>A-77822336</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/minikin/+/62e88b9f3ac35e1e69d79c7a43c6f9ddcd5980a3">A-77822336</a></td>
<td>ID</td>
<td>高</td>
<td>8.0、8.1</td>
@@ -100,35 +99,35 @@
</tr>
<tr>
<td>CVE-2018-9411</td>
- <td>A-79376389</td>
+ <td><a href="https://android.googlesource.com/platform/system/libhidl/+/e1302cfda34be9dd0a4aeae6bfa9561b44536758">A-79376389</a></td>
<td>RCE</td>
<td>严重</td>
<td>8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9424</td>
- <td>A-76221123</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/d3860e51b83296ae1d2921d8109210283573862a">A-76221123</a></td>
<td>EoP</td>
<td>高</td>
<td>8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9428</td>
- <td>A-74122779</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/46bd7c682db5bbc048b177c52448a7999e5740ce">A-74122779</a></td>
<td>EoP</td>
<td>高</td>
<td>8.1</td>
</tr>
<tr>
<td>CVE-2018-9412</td>
- <td>A-78029004</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/fa12c0fcdc6607b746177ccad4f7099098b4849a">A-78029004</a></td>
<td>DoS</td>
<td>高</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9421</td>
- <td>A-77237570</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/native/+/ff2171f2460e3a6d3443ab957732b8b7d4831d40">A-77237570</a></td>
<td>ID</td>
<td>高</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -153,28 +152,28 @@
</tr>
<tr>
<td>CVE-2018-9365</td>
- <td>A-74121126</td>
+ <td><a href="https://android.googlesource.com/platform/system/bt/+/ae94a4c333417a1829030c4d87a58ab7f1401308">A-74121126</a></td>
<td>RCE</td>
<td>严重</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9432</td>
- <td>A-73173182</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/a6fe2cd18c77c68219fe7159c051bc4e0003fc40">A-73173182</a></td>
<td>EoP</td>
<td>高</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9420</td>
- <td>A-77238656</td>
+ <td><a href="https://android.googlesource.com/platform/system/media/+/12df4b05fd918d836636e21f783df7ad9d5e17a3">A-77238656</a></td>
<td>ID</td>
<td>高</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9419</td>
- <td>A-74121659</td>
+ <td><a href="https://android.googlesource.com/platform/system/bt/+/f1c2c86080bcd7b3142ff821441696fc99c2bc9a">A-74121659</a></td>
<td>ID</td>
<td>高</td>
<td>7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -220,8 +219,7 @@
</tr>
<tr>
<td>CVE-2018-9417</td>
- <td>A-74447444*<br />
- 上游内核<a href="#asterisk">*</a></td>
+ <td>A-74447444*<br />上游内核<a href="#asterisk">*</a></td>
<td>EoP</td>
<td>高</td>
<td>USB 驱动程序</td>
@@ -286,17 +284,14 @@
</tr>
<tr>
<td>CVE-2018-5838</td>
- <td>A-63146462<a href="#asterisk">*</a><br />
- QC-CR#2151011</td>
+ <td>A-63146462<a href="#asterisk">*</a><br />QC-CR#2151011</td>
<td>EoP</td>
<td>高</td>
<td>OpenGL ES 驱动程序</td>
</tr>
<tr>
<td>CVE-2018-3586</td>
- <td>A-63165135<a href="#asterisk">*</a><br />
- QC-CR#2139538<br />
- QC-CR#2073777</td>
+ <td>A-63165135<a href="#asterisk">*</a><br />QC-CR#2139538<br />QC-CR#2073777</td>
<td>RCE</td>
<td>高</td>
<td>ADSPRPC 堆管理器</td>
@@ -594,6 +589,11 @@
<td>2018 年 7 月 2 日</td>
<td>发布了本公告。</td>
</tr>
+ <tr>
+ <td>1.1</td>
+ <td>2018 年 7 月 3 日</td>
+ <td>在本公告中添加了 AOSP 链接。</td>
+ </tr>
</tbody></table>
</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/2018.html b/zh-cn/security/bulletin/2018.html
index 40b6557..a56384d 100644
--- a/zh-cn/security/bulletin/2018.html
+++ b/zh-cn/security/bulletin/2018.html
@@ -34,6 +34,20 @@
<th>安全补丁程序级别</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/2018-07-01.html">2018 年 7 月</a></td>
+ <td>即将发布 <!--
+ <a href="/security/bulletin/2018-07-01.html">English</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=ja">日本語</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=ko">한국어</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=ru">ру́сский</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=zh-cn">中文 (中国)</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=zh-tw">中文 (台灣)</a>
+ -->
+ </td>
+ <td>2018 年 7 月 2 日</td>
+ <td>2018-07-01<br />2018-07-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/2018-06-01.html">2018 年 6 月</a></td>
<td>
<a href="/security/bulletin/2018-06-01.html">English</a> / <a href="/security/bulletin/2018-06-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-06-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-06-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-06-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-06-01.html?hl=zh-tw">中文 (台灣)</a>
@@ -50,7 +64,7 @@
<td>2018-05-01<br />2018-05-05</td>
</tr>
<tr>
- <td><a href="/security/bulletin/2018-04-01.html">2018年 4 月</a></td>
+ <td><a href="/security/bulletin/2018-04-01.html">2018 年 4 月</a></td>
<td>
<a href="/security/bulletin/2018-04-01.html">English</a> / <a href="/security/bulletin/2018-04-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-04-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-04-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-04-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-04-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
@@ -68,7 +82,7 @@
<tr>
<td><a href="/security/bulletin/2018-02-01.html">2018 年 2 月</a></td>
<td>
- <a href="/security/bulletin/2018-02-01.html">English</a> / <a href="/security/bulletin/2018-02-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-02-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-02-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-02-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-02-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/2018-02-01.html">English</a> / <a href="/security/bulletin/2018-02-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-02-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-02-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-02-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-02-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 2 月</td>
<td>2018-02-01<br />2018-02-05</td>
@@ -76,7 +90,7 @@
<tr>
<td><a href="/security/bulletin/2018-01-01.html">2018 年 1 月</a></td>
<td>
- <a href="/security/bulletin/2018-01-01.html">English</a> / <a href="/security/bulletin/2018-01-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-01-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-01-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-01-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-01-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/2018-01-01.html">English</a> / <a href="/security/bulletin/2018-01-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-01-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-01-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-01-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-01-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 1 月</td>
<td>2018-01-01<br />2018-01-05</td>
diff --git a/zh-cn/security/bulletin/index.html b/zh-cn/security/bulletin/index.html
index f069e2e..27a52fd 100644
--- a/zh-cn/security/bulletin/index.html
+++ b/zh-cn/security/bulletin/index.html
@@ -55,9 +55,31 @@
<th>安全补丁程序级别</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/2018-07-01.html">2018 年 7 月</a></td>
+ <td>即将发布 <!--
+ <a href="/security/bulletin/2018-07-01.html">English</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=ja">日本語</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=ko">한국어</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=ru">ру́сский</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=zh-cn">中文 (中国)</a> /
+ <a href="/security/bulletin/2018-07-01.html?hl=zh-tw">中文 (台灣)</a>
+ -->
+ </td>
+ <td>2018 年 7 月 2 日</td>
+ <td>2018-07-01<br />2018-07-05</td>
+ </tr>
+ <tr>
+ <td><a href="/security/bulletin/2018-06-01.html">2018 年 6 月</a></td>
+ <td>
+ <a href="/security/bulletin/2018-06-01.html">English</a> / <a href="/security/bulletin/2018-06-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-06-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-06-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-06-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-06-01.html?hl=zh-tw">中文 (台灣)</a>
+ </td>
+ <td>2018 年 6 月 4 日</td>
+ <td>2018-06-01<br />2018-06-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/2018-05-01.html">2018 年 5 月</a></td>
<td>
- <a href="/security/bulletin/2018-05-01.html">English</a> / <a href="/security/bulletin/2018-05-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-05-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-05-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-05-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-05-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/2018-05-01.html">English</a> / <a href="/security/bulletin/2018-05-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-05-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-05-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-05-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-05-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 5 月 7 日</td>
<td>2018-05-01<br />2018-05-05</td>
@@ -65,7 +87,7 @@
<tr>
<td><a href="/security/bulletin/2018-04-01.html">2018 年 4 月</a></td>
<td>
- <a href="/security/bulletin/2018-04-01.html">English</a> / <a href="/security/bulletin/2018-04-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-04-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-04-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-04-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-04-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/2018-04-01.html">English</a> / <a href="/security/bulletin/2018-04-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-04-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-04-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-04-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-04-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 4 月 2 日</td>
<td>2018-04-01<br />2018-04-05</td>
@@ -73,7 +95,7 @@
<tr>
<td><a href="/security/bulletin/2018-03-01.html">2018 年 3 月</a></td>
<td>
- <a href="/security/bulletin/2018-03-01.html">English</a> / <a href="/security/bulletin/2018-03-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-03-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-03-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-03-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-03-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/2018-03-01.html">English</a> / <a href="/security/bulletin/2018-03-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/2018-03-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/2018-03-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/2018-03-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/2018-03-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 3 月 5 日</td>
<td>2018-03-01<br />2018-03-05</td>
diff --git a/zh-cn/security/bulletin/pixel/2018-01-01.html b/zh-cn/security/bulletin/pixel/2018-01-01.html
index 995a527..0728e52 100644
--- a/zh-cn/security/bulletin/pixel/2018-01-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-01-01.html
@@ -36,7 +36,8 @@
</p>
<h2 id="security-patches">安全补丁程序</h2>
<p>
-漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的更改日志记录,我们还将通过 Bug ID 后面的数字链接到更多参考内容。</p>
+漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+</p>
<h3 id="framework">框架</h3>
@@ -599,7 +600,7 @@
<h2 id="functional-updates">功能更新</h2>
<p>
-我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)以及问题摘要。
+我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)以及改进。
</p>
<table>
<tbody><tr>
diff --git a/zh-cn/security/bulletin/pixel/2018-02-01.html b/zh-cn/security/bulletin/pixel/2018-02-01.html
index cc8f326..8566577 100644
--- a/zh-cn/security/bulletin/pixel/2018-02-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-02-01.html
@@ -36,7 +36,8 @@
<h2 id="security-patches">安全补丁程序</h2>
<p>
-漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="https://source.android.com/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的更改日志记录,我们还将通过 Bug ID 后面的数字链接到更多参考内容。</p>
+漏洞列在所影响的组件下,内容包括问题描述和一个表,该表中包含 CVE、相关参考内容、<a href="#type">漏洞类型</a>、<a href="https://source.android.com/security/overview/updates-resources.html#severity">严重程度</a>和已更新的 Android 开源项目 (AOSP) 版本(如果适用)。如果有解决相应问题的公开更改记录(例如 AOSP 代码更改列表),我们会将 Bug ID 链接到该记录。如果某个 Bug 有多条相关的代码更改记录,我们还会通过 Bug ID 后面的数字链接到更多参考内容。
+</p>
<h3 id="framework">框架</h3>
@@ -364,7 +365,7 @@
<h2 id="functional-updates">功能更新</h2>
<p>
-我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)以及问题摘要。
+我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)、改进以及受影响设备。
</p>
<table>
diff --git a/zh-cn/security/bulletin/pixel/2018-03-01.html b/zh-cn/security/bulletin/pixel/2018-03-01.html
index eac6b56..92c9e4e 100644
--- a/zh-cn/security/bulletin/pixel/2018-03-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-03-01.html
@@ -475,7 +475,7 @@
<h2 id="functional-updates">功能更新</h2>
<p>
-我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)以及问题摘要。
+我们针对受影响的 Pixel 设备纳入了以下更新,以解决与 Pixel 设备的安全性无关的功能问题。下表中包含相关参考内容、受影响的类别(例如蓝牙或移动数据网络)、改进以及受影响设备。
</p>
<table>
diff --git a/zh-cn/security/bulletin/pixel/2018-06-01.html b/zh-cn/security/bulletin/pixel/2018-06-01.html
index a44f141..189e35b 100644
--- a/zh-cn/security/bulletin/pixel/2018-06-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-06-01.html
@@ -286,8 +286,7 @@
<tr>
<td>CVE-2018-7480</td>
<td>A-76106168<br />
- <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9b54d816e00425c3a517514e0d677bb3cec49258">
-上游内核</a></td>
+ <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9b54d816e00425c3a517514e0d677bb3cec49258">上游内核</a></td>
<td>EoP</td>
<td>中</td>
<td>块处理程序</td>
@@ -295,8 +294,7 @@
<tr>
<td>CVE-2017-18075</td>
<td>A-73237057<br />
- <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d76c68109f37cb85b243a1cf0f40313afd2bae68">
-上游内核</a></td>
+ <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d76c68109f37cb85b243a1cf0f40313afd2bae68">上游内核</a></td>
<td>EoP</td>
<td>中</td>
<td>pcrypt</td>
@@ -320,161 +318,140 @@
</tr>
<tr>
<td>CVE-2018-9390</td>
- <td>A-76100614<a href="#asterisk">*</a><br />
- M-ALPS03849277</td>
+ <td>A-76100614<a href="#asterisk">*</a><br />M-ALPS03849277</td>
<td>EoP</td>
<td>中</td>
<td>wlanThermo procfs 条目</td>
</tr>
<tr>
<td>CVE-2018-9391</td>
- <td>A-72313579<a href="#asterisk">*</a><br />
- M-ALPS03762614</td>
+ <td>A-72313579<a href="#asterisk">*</a><br />M-ALPS03762614</td>
<td>EoP</td>
<td>中</td>
<td>GPS HAL</td>
</tr>
<tr>
<td>CVE-2018-9392</td>
- <td>A-72312594<a href="#asterisk">*</a><br />
- M-ALPS03762614</td>
+ <td>A-72312594<a href="#asterisk">*</a><br />M-ALPS03762614</td>
<td>EoP</td>
<td>中</td>
<td>GPS HAL</td>
</tr>
<tr>
<td>CVE-2018-9393</td>
- <td>A-72312577<a href="#asterisk">*</a><br />
- M-ALPS03753748</td>
+ <td>A-72312577<a href="#asterisk">*</a><br />M-ALPS03753748</td>
<td>EoP</td>
<td>中</td>
<td>MTK WLAN</td>
</tr>
<tr>
<td>CVE-2018-9394</td>
- <td>A-72312468<a href="#asterisk">*</a><br />
- M-ALPS03753652</td>
+ <td>A-72312468<a href="#asterisk">*</a><br />M-ALPS03753652</td>
<td>EoP</td>
<td>中</td>
<td>MTK P2P 驱动程序</td>
</tr>
<tr>
<td>CVE-2018-9395</td>
- <td>A-72312071<a href="#asterisk">*</a><br />
- M-ALPS03753735</td>
+ <td>A-72312071<a href="#asterisk">*</a><br />M-ALPS03753735</td>
<td>EoP</td>
<td>中</td>
<td>MTK cfg80211</td>
</tr>
<tr>
<td>CVE-2018-9396</td>
- <td>A-71867113<a href="#asterisk">*</a><br />
- M-ALPS03740353</td>
+ <td>A-71867113<a href="#asterisk">*</a><br />M-ALPS03740353</td>
<td>EoP</td>
<td>中</td>
<td>Mediatek CCCI</td>
</tr>
<tr>
<td>CVE-2018-9397</td>
- <td>A-71866634<a href="#asterisk">*</a><br />
- M-ALPS03532675<br />
- M-ALPS03479586</td>
+ <td>A-71866634<a href="#asterisk">*</a><br />M-ALPS03532675<br />M-ALPS03479586</td>
<td>EoP</td>
<td>中</td>
<td>Mediatek WMT 设备</td>
</tr>
<tr>
<td>CVE-2018-9398</td>
- <td>A-71866289<a href="#asterisk">*</a><br />
- M-ALPS03740468</td>
+ <td>A-71866289<a href="#asterisk">*</a><br />M-ALPS03740468</td>
<td>EoP</td>
<td>中</td>
<td>FM 无线装置驱动程序</td>
</tr>
<tr>
<td>CVE-2018-9399</td>
- <td>A-71866200<a href="#asterisk">*</a><br />
- M-ALPS03740489</td>
+ <td>A-71866200<a href="#asterisk">*</a><br />M-ALPS03740489</td>
<td>EoP</td>
<td>中</td>
<td>/proc/driver/wmt_dbg 驱动程序</td>
</tr>
<tr>
<td>CVE-2018-9400</td>
- <td>A-71865884<a href="#asterisk">*</a><br />
- M-ALPS03753678</td>
+ <td>A-71865884<a href="#asterisk">*</a><br />M-ALPS03753678</td>
<td>EoP</td>
<td>中</td>
<td>Goodix 触摸屏驱动程序</td>
</tr>
<tr>
<td>CVE-2017-13308</td>
- <td>A-70728757<a href="#asterisk">*</a><br />
- M-ALPS03751855</td>
+ <td>A-70728757<a href="#asterisk">*</a><br />M-ALPS03751855</td>
<td>EoP</td>
<td>中</td>
<td>热</td>
</tr>
<tr>
<td>CVE-2018-9401</td>
- <td>A-70511226<a href="#asterisk">*</a><br />
- M-ALPS03693409</td>
+ <td>A-70511226<a href="#asterisk">*</a><br />M-ALPS03693409</td>
<td>EoP</td>
<td>中</td>
<td>cameraisp</td>
</tr>
<tr>
<td>CVE-2018-9402</td>
- <td>A-70728072<a href="#asterisk">*</a><br />
- M-ALPS03684171</td>
+ <td>A-70728072<a href="#asterisk">*</a><br />M-ALPS03684171</td>
<td>EoP</td>
<td>中</td>
<td>WLAN 驱动程序</td>
</tr>
<tr>
<td>CVE-2018-9403</td>
- <td>A-72313700<a href="#asterisk">*</a><br />
- M-ALPS03762413</td>
+ <td>A-72313700<a href="#asterisk">*</a><br />M-ALPS03762413</td>
<td>EoP</td>
<td>中</td>
<td>HAL</td>
</tr>
<tr>
<td>CVE-2018-9404</td>
- <td>A-72314374<a href="#asterisk">*</a><br />
- M-ALPS03773299</td>
+ <td>A-72314374<a href="#asterisk">*</a><br />M-ALPS03773299</td>
<td>EoP</td>
<td>中</td>
<td>无线接口层</td>
</tr>
<tr>
<td>CVE-2018-9405</td>
- <td>A-72314804<a href="#asterisk">*</a><br />
- M-ALPS03762818</td>
+ <td>A-72314804<a href="#asterisk">*</a><br />M-ALPS03762818</td>
<td>EoP</td>
<td>中</td>
<td>DmAgent</td>
</tr>
<tr>
<td>CVE-2018-9406</td>
- <td>A-70726950<a href="#asterisk">*</a><br />
- M-ALPS03684231</td>
+ <td>A-70726950<a href="#asterisk">*</a><br />M-ALPS03684231</td>
<td>ID</td>
<td>中</td>
<td>NlpService</td>
</tr>
<tr>
<td>CVE-2018-9407</td>
- <td>A-70728406<a href="#asterisk">*</a><br />
- M-ALPS03902529</td>
+ <td>A-70728406<a href="#asterisk">*</a><br />M-ALPS03902529</td>
<td>ID</td>
<td>中</td>
<td>emmc</td>
</tr>
<tr>
<td>CVE-2018-9408</td>
- <td>A-70729980<a href="#asterisk">*</a><br />
- M-ALPS03693684</td>
+ <td>A-70729980<a href="#asterisk">*</a><br />M-ALPS03693684</td>
<td>ID</td>
<td>中</td>
<td>GPS</td>
@@ -498,24 +475,21 @@
</tr>
<tr>
<td>CVE-2017-15824</td>
- <td>A-68163089<a href="#asterisk">*</a><br />
- QC-CR#2107596</td>
+ <td>A-68163089<a href="#asterisk">*</a><br />QC-CR#2107596</td>
<td>ID</td>
<td>中</td>
<td>EDK2 引导加载程序</td>
</tr>
<tr>
<td>CVE-2018-5897</td>
- <td>A-70528036<a href="#asterisk">*</a><br />
- QC-CR#2172685</td>
+ <td>A-70528036<a href="#asterisk">*</a><br />QC-CR#2172685</td>
<td>ID</td>
<td>中</td>
<td>diag</td>
</tr>
<tr>
<td>CVE-2018-5895</td>
- <td>A-70293535<a href="#asterisk">*</a><br />
- QC-CR#2161027</td>
+ <td>A-70293535<a href="#asterisk">*</a><br />QC-CR#2161027</td>
<td>ID</td>
<td>中</td>
<td>qcacld</td>
@@ -531,8 +505,7 @@
<tr>
<td>CVE-2018-3577</td>
<td>A-72957387<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=cf1c43ce8840021d2907afaa6c514e6971d7ebac">
-QC-CR#2129566</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=cf1c43ce8840021d2907afaa6c514e6971d7ebac">QC-CR#2129566</a></td>
<td>ID</td>
<td>中</td>
<td>WLAN</td>
@@ -540,8 +513,7 @@
<tr>
<td>CVE-2017-15824</td>
<td>A-68992463<br />
- <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=6ad7ccfee4f78d23b4b8f5ebda0eef54dced32e3">
-QC-CR#2107596</a></td>
+ <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=6ad7ccfee4f78d23b4b8f5ebda0eef54dced32e3">QC-CR#2107596</a></td>
<td>ID</td>
<td>中</td>
<td>引导加载程序</td>
@@ -549,8 +521,7 @@
<tr>
<td>CVE-2017-14893</td>
<td>A-68992461<br />
- <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c8dc3bf07ee909e6e57ad7887f9d3c0ffa5df795">
-QC-CR#2104835</a></td>
+ <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c8dc3bf07ee909e6e57ad7887f9d3c0ffa5df795">QC-CR#2104835</a></td>
<td>ID</td>
<td>中</td>
<td>引导加载程序</td>
@@ -558,8 +529,7 @@
<tr>
<td>CVE-2017-14872</td>
<td>A-68992457<br />
- <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=1daa83baa41d1e6291e89f69e6487695b6890c01">
-QC-CR#2073366</a></td>
+ <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=1daa83baa41d1e6291e89f69e6487695b6890c01">QC-CR#2073366</a></td>
<td>ID</td>
<td>中</td>
<td>引导加载程序</td>
@@ -567,24 +537,21 @@
<tr>
<td>CVE-2018-5893</td>
<td>A-74237664<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=4cc54a30958d2a8d989364aa45a27fde3dd17352">
-QC-CR#2146949</a></td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=4cc54a30958d2a8d989364aa45a27fde3dd17352">QC-CR#2146949</a></td>
<td>EoP</td>
<td>中</td>
<td>WLAN</td>
</tr>
<tr>
<td>CVE-2016-5342、CVE-2016-5080</td>
- <td>A-72232294<a href="#asterisk">*</a><br />
- QC-CR#1032174</td>
+ <td>A-72232294<a href="#asterisk">*</a><br />QC-CR#1032174</td>
<td>EoP</td>
<td>中</td>
<td>WLAN 驱动程序</td>
</tr>
<tr>
<td>CVE-2018-5899</td>
- <td>A-71638332<a href="#asterisk">*</a><br />
- QC-CR#1040612</td>
+ <td>A-71638332<a href="#asterisk">*</a><br />QC-CR#1040612</td>
<td>EoP</td>
<td>中</td>
<td>WLAN 驱动程序</td>
@@ -592,8 +559,7 @@
<tr>
<td>CVE-2018-5890</td>
<td>A-71501675<br />
- <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c9c8de8000ff32f8d1e24e697d861d92d8ed0b7a">
-QC-CR#2127348</a></td>
+ <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c9c8de8000ff32f8d1e24e697d861d92d8ed0b7a">QC-CR#2127348</a></td>
<td>EoP</td>
<td>中</td>
<td>引导加载程序</td>
@@ -601,8 +567,7 @@
<tr>
<td>CVE-2018-5889</td>
<td>A-71501674<br />
- <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=a95ca8e2eeb8a030e977f033cff122cad408158c">
-QC-CR#2127341</a></td>
+ <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=a95ca8e2eeb8a030e977f033cff122cad408158c">QC-CR#2127341</a></td>
<td>EoP</td>
<td>中</td>
<td>引导加载程序</td>
@@ -610,8 +575,7 @@
<tr>
<td>CVE-2018-5888</td>
<td>A-71501672<br />
- <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=5388803fa6d004382f4a857056ce06d963698d9c">
-QC-CR#2127312</a></td>
+ <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=5388803fa6d004382f4a857056ce06d963698d9c">QC-CR#2127312</a></td>
<td>EoP</td>
<td>中</td>
<td>引导加载程序</td>
@@ -619,32 +583,28 @@
<tr>
<td>CVE-2018-5887</td>
<td>A-71501669<br />
- <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c8415f6f2271008aef5056689950236df627d9b1">
-QC-CR#2127305</a></td>
+ <a href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=c8415f6f2271008aef5056689950236df627d9b1">QC-CR#2127305</a></td>
<td>EoP</td>
<td>中</td>
<td>引导加载程序</td>
</tr>
<tr>
<td>CVE-2018-5898</td>
- <td>A-71363804<a href="#asterisk">*</a><br />
- QC-CR#2173850</td>
+ <td>A-71363804<a href="#asterisk">*</a><br />QC-CR#2173850</td>
<td>EoP</td>
<td>中</td>
<td>QC 音频驱动程序</td>
</tr>
<tr>
<td>CVE-2018-5832</td>
- <td>A-69065862<a href="#asterisk">*</a><br />
- QC-CR#2149998</td>
+ <td>A-69065862<a href="#asterisk">*</a><br />QC-CR#2149998</td>
<td>EoP</td>
<td>中</td>
<td>Camerav2</td>
</tr>
<tr>
<td>CVE-2018-5857</td>
- <td>A-62536960<a href="#asterisk">*</a><br />
- QC-CR#2169403</td>
+ <td>A-62536960<a href="#asterisk">*</a><br />QC-CR#2169403</td>
<td>EoP</td>
<td>中</td>
<td>wcd_cpe_core</td>
@@ -652,8 +612,7 @@
<tr>
<td>CVE-2018-3597</td>
<td>A-74237782<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=e569b915a246627d0449016408a9c0d388ee4ab4">
-QC-CR#2143070</a></td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=e569b915a246627d0449016408a9c0d388ee4ab4">QC-CR#2143070</a></td>
<td>EoP</td>
<td>中</td>
<td>DSP_Services</td>
@@ -661,8 +620,7 @@
<tr>
<td>CVE-2018-3564</td>
<td>A-72957546<br />
- <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=782cd411398e3cf2aca1615ab2649df0c46920ee">
-QC-CR#2062648</a></td>
+ <a href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=782cd411398e3cf2aca1615ab2649df0c46920ee">QC-CR#2062648</a></td>
<td>EoP</td>
<td>中</td>
<td>DSP_Services</td>
diff --git a/zh-cn/security/bulletin/pixel/2018-07-01.html b/zh-cn/security/bulletin/pixel/2018-07-01.html
index 64fc5be..2fe2eb2 100644
--- a/zh-cn/security/bulletin/pixel/2018-07-01.html
+++ b/zh-cn/security/bulletin/pixel/2018-07-01.html
@@ -20,7 +20,7 @@
limitations under the License.
-->
-<p><em>发布时间:2018 年 7 月 2 日</em></p>
+<p><em>发布时间:2018 年 7 月 2 日 | 更新时间:2018 年 7 月 3 日</em></p>
<p>
本 Pixel/Nexus 安全公告详细介绍了会影响<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices">受支持的 Google Pixel 和 Nexus 设备</a>(Google 设备)的安全漏洞和功能改进。
@@ -58,21 +58,21 @@
</tr>
<tr>
<td>CVE-2018-9426</td>
- <td>A-79148652</td>
+ <td><a href="https://android.googlesource.com/platform/external/bouncycastle/+/129a20459ea828c1b05f0d5da57f69a2a3212ad7">A-79148652</a></td>
<td>ID</td>
<td>中</td>
<td>7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9376</td>
- <td>A-69981755</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/e6655cb8a78b757e9329b8200a90746ffac3a5a9">A-69981755</a></td>
<td>EoP</td>
<td>中</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9434</td>
- <td>A-29833520</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/native/+/ab1fb955acc8bbe6b9086a4ab54beab003a887a9">A-29833520</a> [<a href="https://android.googlesource.com/platform/frameworks/native/+/c4b7338b1a0995222d229a6f794db02c974ba0d8">2</a>]</td>
<td>ID</td>
<td>中</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -96,14 +96,14 @@
</tr>
<tr>
<td>CVE-2018-9429</td>
- <td>A-73927042</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/av/+/7306d8b37c00729dc41d663a4b244a00209d537b">A-73927042</a></td>
<td>ID</td>
<td>中</td>
<td>8.1</td>
</tr>
<tr>
<td>CVE-2018-9423</td>
- <td>A-77599438</td>
+ <td><a href="https://android.googlesource.com/platform/external/libhevc/+/e46e5994a80c31f6533384f0f325555f3a87bee3">A-77599438</a></td>
<td>ID</td>
<td>中</td>
<td>7.0、7.1.1、7.1.2、8.0、8.1</td>
@@ -127,35 +127,35 @@
</tr>
<tr>
<td>CVE-2018-9413</td>
- <td>A-73782082</td>
+ <td><a href="https://android.googlesource.com/platform/system/bt/+/97eb2f9cfba4f38d64dffa0558f1c4c3aa91b4f8">A-73782082</a></td>
<td>RCE</td>
<td>中</td>
<td>7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9418</td>
- <td>A-73824150</td>
+ <td><a href="https://android.googlesource.com/platform/system/bt/+/8e702ed3539caac44a616243e33aaad1b2b4801f">A-73824150</a></td>
<td>RCE</td>
<td>中</td>
<td>7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9430</td>
- <td>A-73963551</td>
+ <td><a href="https://android.googlesource.com/platform/system/bt/+/605ebb3369b3f961196815065a9fe4ba5bc4d659">A-73963551</a></td>
<td>RCE</td>
<td>中</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9414</td>
- <td>A-78787521</td>
+ <td><a href="https://android.googlesource.com/platform/packages/apps/Bluetooth/+/98ff9fe7db5a25fa2c772a85f0b9baa3545228bf">A-78787521</a></td>
<td>EoP</td>
<td>中</td>
<td>6.0、6.0.1、7.0、7.1.1、7.1.2、8.0、8.1</td>
</tr>
<tr>
<td>CVE-2018-9431</td>
- <td>A-77600924</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/5c23facbf802c9b4c88ceb60e1b782abcc55ddc9">A-77600924</a></td>
<td>EoP</td>
<td>中</td>
<td>8.0、8.1</td>
@@ -297,8 +297,7 @@
<tr>
<td>CVE-2018-5858</td>
<td>A-77528653<br />
- <a href="https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=78193fa06b267c1d6582e5e6f9fb779cf067015e">QC-CR#2174725</a>
- [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd1f0cdd4715e8eae4066bd34df2eef4cf94bd7f">2</a>]</td>
+ <a href="https://source.codeaurora.org/quic/la/platform/vendor/opensource/audio-kernel/commit/?id=78193fa06b267c1d6582e5e6f9fb779cf067015e">QC-CR#2174725</a> [<a href="https://source.codeaurora.org/quic/la/kernel/msm-3.18/commit/?id=cd1f0cdd4715e8eae4066bd34df2eef4cf94bd7f">2</a>]</td>
<td>EoP</td>
<td>中</td>
<td>音频</td>
@@ -456,6 +455,11 @@
<td>2018 年 7 月 2 日</td>
<td>发布了本公告。</td>
</tr>
+ <tr>
+ <td>1.1</td>
+ <td>2018 年 7 月 3 日</td>
+ <td>在本公告中添加了 AOSP 链接。</td>
+ </tr>
</tbody></table>
</body></html>
\ No newline at end of file
diff --git a/zh-cn/security/bulletin/pixel/2018.html b/zh-cn/security/bulletin/pixel/2018.html
index 47d5c1f..81e67b7 100644
--- a/zh-cn/security/bulletin/pixel/2018.html
+++ b/zh-cn/security/bulletin/pixel/2018.html
@@ -34,9 +34,23 @@
<th>安全补丁程序级别</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/pixel/2018-07-01.html">2018 年 7 月</a></td>
+ <td>即将发布<!--
+ <a href="/security/bulletin/pixel/2018-07-01.html">English</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=ja">日本語</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=ko">한국어</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=ru">ру́сский</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=zh-cn">中文 (中国)</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=zh-tw">中文 (台灣)</a>
+ -->
+ </td>
+ <td>2018 年 7 月 2 日</td>
+ <td>2018-07-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/pixel/2018-06-01.html">2018 年 6 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-06-01.html">English</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-06-01.html">English</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 6 月 4 日</td>
<td>2018-06-05</td>
@@ -44,15 +58,15 @@
<tr>
<td><a href="/security/bulletin/pixel/2018-05-01.html">2018 年 5 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-05-01.html">English</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-05-01.html">English</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 5 月 7 日</td>
<td>2018-05-05</td>
</tr>
<tr>
- <td><a href="/security/bulletin/pixel/2018-04-01.html">2018年 4 月</a></td>
+ <td><a href="/security/bulletin/pixel/2018-04-01.html">2018 年 4 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-04-01.html">English</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-04-01.html">English</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 4 月 2 日</td>
<td>2018-04-05</td>
@@ -60,9 +74,7 @@
<tr>
<td><a href="/security/bulletin/pixel/2018-03-01.html">2018 年 3 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-03-01.html">English</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ru">ру́сский</a> / <!--
- <a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-cn">中文 (中国)</a> /
- --><a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-03-01.html">English</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 3 月</td>
<td>2018-03-05</td>
@@ -70,7 +82,7 @@
<tr>
<td><a href="/security/bulletin/pixel/2018-02-01.html">2018 年 2 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-02-01.html">English</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-02-01.html">English</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-02-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 2 月</td>
<td>2018-02-05</td>
@@ -78,7 +90,7 @@
<tr>
<td><a href="/security/bulletin/pixel/2018-01-01.html">2018 年 1 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-01-01.html">English</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-01-01.html">English</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-01-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 1 月</td>
<td>2018-01-05</td>
diff --git a/zh-cn/security/bulletin/pixel/index.html b/zh-cn/security/bulletin/pixel/index.html
index 38ed146..6cd138b 100644
--- a/zh-cn/security/bulletin/pixel/index.html
+++ b/zh-cn/security/bulletin/pixel/index.html
@@ -43,17 +43,39 @@
<th>安全补丁程序级别</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/pixel/2018-07-01.html">2018 年 7 月</a></td>
+ <td>即将发布<!--
+ <a href="/security/bulletin/pixel/2018-07-01.html">English</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=ja">日本語</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=ko">한국어</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=ru">ру́сский</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=zh-cn">中文 (中国)</a> /
+ <a href="/security/bulletin/pixel/2018-07-01.html?hl=zh-tw">中文 (台灣)</a>
+ -->
+ </td>
+ <td>2018 年 7 月 2 日</td>
+ <td>2018-07-05</td>
+ </tr>
+ <tr>
+ <td><a href="/security/bulletin/pixel/2018-06-01.html">2018 年 6 月</a></td>
+ <td>
+ <a href="/security/bulletin/pixel/2018-06-01.html">English</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-06-01.html?hl=zh-tw">中文 (台灣)</a>
+ </td>
+ <td>2018 年 6 月 4 日</td>
+ <td>2018-06-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/pixel/2018-05-01.html">2018 年 5 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-05-01.html">English</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-05-01.html">English</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-05-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 5 月 7 日</td>
<td>2018-05-05</td>
</tr>
<tr>
- <td><a href="/security/bulletin/pixel/2018-04-01.html">2018年 4 月</a></td>
+ <td><a href="/security/bulletin/pixel/2018-04-01.html">2018 年 4 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-04-01.html">English</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-04-01.html">English</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-04-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 4 月 2 日</td>
<td>2018-04-05</td>
@@ -61,9 +83,7 @@
<tr>
<td><a href="/security/bulletin/pixel/2018-03-01.html">2018 年 3 月</a></td>
<td>
- <a href="/security/bulletin/pixel/2018-03-01.html">English</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ru">ру́сский</a> / <!--
- <a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-cn">中文 (中国)</a> /
- --> <a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-tw">中文 (台灣)</a>
+ <a href="/security/bulletin/pixel/2018-03-01.html">English</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ja">日本語</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ko">한국어</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=ru">ру́сский</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-cn">中文 (中国)</a> / <a href="/security/bulletin/pixel/2018-03-01.html?hl=zh-tw">中文 (台灣)</a>
</td>
<td>2018 年 3 月 5 日</td>
<td>2018-03-05</td>
diff --git a/zh-cn/security/encryption/file-based.html b/zh-cn/security/encryption/file-based.html
index 1c15c58..c68fee4 100644
--- a/zh-cn/security/encryption/file-based.html
+++ b/zh-cn/security/encryption/file-based.html
@@ -77,7 +77,7 @@
<ul>
<li>对 EXT4 加密的<strong>内核支持</strong>(内核配置选项:EXT4_FS_ENCRYPTION)</li><li>基于 1.0 或 2.0 版 HAL 的 <strong><a href="/security/keystore/index.html">Keymaster 支持</a></strong>。不支持 Keymaster 0.3,因为它既不提供必要的功能,也不能保证为加密密钥提供充分保护。
-</li><li>必须在<a href="/security/trusty/index.html">可信执行环境</a> (TEE) 中实现 <strong>Keymaster/<a href="/security/keystore/index.html"></a></strong>Keystore 和 Gatekeeper,以便为 DE 密钥提供保护,从而使未经授权的操作系统(刷到设备上的定制操作系统)无法直接请求 DE 密钥。
+</li><li>必须在<a href="/security/trusty/index.html">可信执行环境</a> (TEE) 中实现 <strong>Keymaster/<a href="/security/keystore/index.html">Keystore</a> 和 Gatekeeper</strong>,以便为 DE 密钥提供保护,从而使未经授权的操作系统(刷到设备上的定制操作系统)无法直接请求 DE 密钥。
</li><li>内核<strong>加密性能</strong>必须要在使用 AES XTS 时至少达到 50MB/s,以确保良好的用户体验。
</li><li><strong>硬件信任根</strong>和<strong>验证启动</strong>需要绑定到 Keymaster 初始化进程,以确保未经授权的操作系统无法获取设备加密凭据。</li>
</ul>
diff --git a/zh-cn/security/keystore/tags.html b/zh-cn/security/keystore/tags.html
index 429c52e..bdcf71f 100644
--- a/zh-cn/security/keystore/tags.html
+++ b/zh-cn/security/keystore/tags.html
@@ -93,7 +93,7 @@
<p><strong>版本</strong>:1、2、3</p>
<p><strong>是否可重复使用</strong>?否</p>
-<p>当提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记用于指定任何时候使用相应密钥时必需的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
+<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定任何时候使用相应密钥时必需的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
<p>此标记的内容以加密形式绑定到相应密钥,这意味着,如果有不轨人士有权访问安全域的所有机密内容,但无权访问此标记的内容,必须要确保他们在不对此标记的内容进行暴力破解攻击的情况下无法解密相应密钥,应用可通过指定足够的高熵内容来防范这一行为。<em></em></p>
@@ -104,7 +104,7 @@
<p><strong>版本</strong>:1、2、3</p>
<p><strong>是否可重复使用</strong>?否</p>
-<p>当提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记用于指定任何时候使用相应密钥时必需的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
+<p>将此标记提供给 <a href="/security/keystore/implementer-ref#generate_key">generateKey</a> 或 <a href="/security/keystore/implementer-ref#import_key">importKey</a> 时,此标记可用于指定任何时候使用相应密钥时必需的数据。具体来说就是,调用 <a href="/security/keystore/implementer-ref#export_key">exportKey</a> 和 <a href="/security/keystore/implementer-ref#get_key_characteristics">getKeyCharacteristics</a> 时需要为 <code>clientId</code> 参数提供相同的值,而调用 <a href="/security/keystore/implementer-ref#begin">begin</a> 时则需要提供此标记以及相同的相关数据(作为 <code>inParams</code> 集的一部分)。如果未收到正确的数据,则该函数会返回 <code>ErrorCode::INVALID_KEY_BLOB</code>。</p>
<p>此标记的内容以加密形式绑定到相应密钥,这意味着,即使有不轨人士有权访问安全域的所有机密内容,也应无权访问此标记的内容,必须要确保他们无法解密相应密钥(在不对此标记的内容进行暴力破解攻击的情况下)。<em></em></p>
@@ -206,14 +206,14 @@
<p>用于指定授权在多长时间内使用相应密钥(以秒数计,从通过身份验证开始算起)。如果 <a href="#user_secure_id">Tag::USER_SECURE_ID</a> 存在而此标记不存在,那么每次使用相应密钥时都需要通过身份验证(要详细了解各项操作的身份验证流程,请参阅 <a href="/security/keystore/implementer-ref#begin">begin</a>)。</p>
-<p>此标记的值是一个 32 位的整数,用于指定可在多长时间内使用相应密钥(以秒数计,从使用通过 <a href="#user_secure_id">Tag::USER_AUTH_TYPE</a> 指定的身份验证方法对通过 <a href="#mac_length">Tag::USER_SECURE_ID</a> 指定的用户成功进行身份验证后开始算起)。</p>
+<p>此标记的值是一个 32 位的整数,用于指定可在多长时间内使用相应密钥(以秒数计,从使用通过 <a href="#mac_length">Tag::USER_AUTH_TYPE</a> 指定的身份验证方法对通过 <a href="#user_secure_id">Tag::USER_SECURE_ID</a> 指定的用户成功进行身份验证后开始算起)。</p>
<h2 id="auth_token">Tag::AUTH_TOKEN</h2>
<p><strong>版本</strong>:1、2、3</p>
<p><strong>是否可重复使用</strong>?否</p>
-<p>用于向 <a href="/security/keystore/implementer-ref#begin">begin</a>、<a href="/security/keystore/implementer-ref#update">update</a> 或 <a href="/security/keystore/implementer-ref#finish">finish</a> 提供<a href="/security/keystore/authentication/#authentication_token_format">身份验证令牌</a>,以便向要求用户通过身份验证的密钥操作(密钥带有 <a href="#user_secure_id">Tag::USER_SECURE_ID</a>)证明相应用户已通过身份验证。</p>
+<p>用于向 <a href="/security/keystore/authentication/#authentication_token_format">begin</a>、<a href="/security/keystore/implementer-ref#begin">update</a> 或 <a href="/security/keystore/implementer-ref#update">finish</a> 提供<a href="/security/keystore/implementer-ref#finish">身份验证令牌</a>,以便向要求用户通过身份验证的密钥操作(密钥带有 <a href="#user_secure_id">Tag::USER_SECURE_ID</a>)证明相应用户已通过身份验证。</p>
<p>此标记的值是一个包含 <code>hw_auth_token_t</code> 结构的 Blob。</p>
@@ -275,7 +275,7 @@
} keymaster_block_mode_t;
</pre>
-<p>此标记可重复使用;对于 AES 密钥操作,要在 <a href="/security/keystore/implementer-ref#begin">begin</a> 的 <code>additionalParams</code> 参数中指定模式。
+<p>此标记可重复使用;对于 AES 密钥操作,请在 <a href="/security/keystore/implementer-ref#begin">bigin</a> 的 <code>additionalParams</code> 参数中指定模式。
如果指定的模式不在相应密钥的关联模式之列,操作会失败并显示 <code>ErrorCode::INCOMPATIBLE_BLOCK_MODE</code>。</p>
<h2 id="bootloader_only">Tag::BOOTLOADER_ONLY</h2>
diff --git a/zh-cn/security/overview/acknowledgements.html b/zh-cn/security/overview/acknowledgements.html
index e78ea0f..c25e064 100644
--- a/zh-cn/security/overview/acknowledgements.html
+++ b/zh-cn/security/overview/acknowledgements.html
@@ -25,6 +25,163 @@
<h2 id="2018">2018 年</h2>
<p>2018 年的安全致谢信息将按月列出。过去几年的致谢信息是列在一起的。</p>
+<h4 id="july-2018">7 月</h4>
+ <table>
+ <colgroup><col width="70%" />
+ <col width="30%" />
+ </colgroup><tbody><tr>
+ <th>研究人员</th>
+ <th>CVE</th>
+ </tr>
+ <tr>
+ <td>阿里巴巴安全团队潘多拉实验室的 Baozeng Ding (丁保增) (<a href="https://twitter.com/sploving1">@sploving</a>)</td>
+ <td>CVE-2018-9422</td>
+ </tr>
+ <tr>
+ <td>Android 安全研究团队的 Billy Lau</td>
+ <td>CVE-2018-9416</td>
+ </tr>
+ <tr>
+ <td>L.O. 团队的 Cusas</td>
+ <td>CVE-2018-9412</td>
+ </tr>
+ <tr>
+ <td><a href="http://www.ms509.com">MS509Team</a> 的 En He (<a href="https://twitter.com/heeeeen4x">@heeeeen4x</a>) 和 Bo Liu</td>
+ <td>CVE-2018-9432、CVE-2018-9414</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司 Alpha 团队的龚广</td>
+ <td>CVE-2018-9433</td>
+ </tr>
+ <tr>
+ <td>Google Project Zero 的 Jann Horn</td>
+ <td>CVE-2018-9434</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广 (<a href="https://twitter.com/oldfresher">@oldfresher</a>)</td>
+ <td>CVE-2018-9418、CVE-2018-9413、CVE-2018-9365</td>
+ </tr>
+ <tr>
+ <td>特斯拉产品安全团队的 Nathan Crandall (<a href="https://twitter.com/natecray">@natecray</a>)</td>
+ <td>CVE-2017-0606</td>
+ </tr>
+ <tr>
+ <td>niky1235(<a href="mailto:jiych.guru@gmail.com">jiych.guru@gmail.com</a>、<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
+ <td>CVE-2018-9423</td>
+ </tr>
+ <tr>
+ <td>Scott Bauer (<a href="https://twitter.com/ScottyBauer1">@ScottyBauer1</a>)</td>
+ <td>CVE-2018-9430</td>
+ </tr>
+ <tr>
+ <td>Zimperium zLabs 团队的 Tamir Zahavi-Brunner (<a href="https://twitter.com/tamir_zb">@tamir_zb</a>)</td>
+ <td>CVE-2018-9411</td>
+ </tr>
+ <tr>
+ <td>Tencent Blade 团队</td>
+ <td>CVE-2018-9421、CVE-2018-9420</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
+ <td>CVE-2018-9415</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司成都安全响应中心的 Zinuo Han (<a href="http://weibo.com/ele7enxxh">weibo.com/ele7enxxh</a>)</td>
+ <td>CVE-2018-9410、CVE-2018-9424、CVE-2018-9431</td>
+ </tr>
+</tbody></table>
+
+<h4 id="june-2018">6 月</h4>
+<table>
+ <colgroup><col width="70%" />
+ <col width="30%" />
+ </colgroup><tbody><tr>
+ <th>研究人员</th>
+ <th>CVE</th>
+ </tr>
+ <tr>
+ <td>阿里巴巴安全团队潘多拉实验室的 Baozeng Ding (丁保增) (<a href="https://twitter.com/sploving1">@sploving1</a>)</td>
+ <td>CVE-2018-5857、CVE-2018-9389</td>
+ </tr>
+ <tr>
+ <td>IOActive 的 Daniel Kachakil</td>
+ <td>CVE-2018-9375</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司 Alpha 团队的 Elphet 和龚广</td>
+ <td>CVE-2018-9348</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司 Alpha 团队的 Hao Chen 和龚广</td>
+ <td>CVE-2018-5899</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广 (<a href="https://twitter.com/oldfresher">@oldfresher</a>)</td>
+ <td>CVE-2018-9381、CVE-2018-9358,<br />CVE-2018-9359、CVE-2018-9360,<br />CVE-2018-9361、CVE-2018-9357,<br />CVE-2018-9356</td>
+ </tr>
+ <tr>
+ <td>joe0x20@gmail.com</td>
+ <td>CVE-2018-5898</td>
+ </tr>
+ <tr>
+ <td><a href="https://www.linkedin.com/in/jose-maria-ariel-martinez-juarez-7910a189/">
+ Jose Martinez</a></td>
+ <td>CVE-2018-5146</td>
+ </tr>
+ <tr>
+ <td><a href="http://protektoid.com/">Protektoid.com</a> 的 Julien Thomas (<a href="https://twitter.com/julien_thomas">@Julien_Thomas</a>)</td>
+ <td>CVE-2018-9374</td>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/michalbednarski">Michał Bednarski</a></td>
+ <td>CVE-2018-9339</td>
+ </tr>
+ <tr>
+ <td>C0RE 团队的 Mingjian Zhou (周明建) (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
+ <td>CVE-2018-9344</td>
+ </tr>
+ <tr>
+ <td>Niky1235 (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
+ <td>CVE-2017-13230、CVE-2018-9347</td>
+ </tr>
+ <tr>
+ <td>百度安全实验室的丁鹏飞、包沉浮和韦韬<br /></td>
+ <td>CVE-2018-5832</td>
+ </tr>
+ <tr>
+ <td>360 Beaconlab 的清东</td>
+ <td>CVE-2018-9386</td>
+ </tr>
+ <tr>
+ <td>Scott Bauer (<a href="https://twitter.com/ScottyBauer1">@ScottyBauer1</a>)</td>
+ <td>CVE-2018-9388、CVE-2018-9355、<br />CVE-2018-9380</td>
+ </tr>
+ <tr>
+ <td><a href="https://srlabs.de/">安全研究实验室</a>的 <a href="https://github.com/stze">Stephan Zeisberg</a></td>
+ <td>CVE-2018-9350、CVE-2018-9352、<br />CVE-2018-9353、CVE-2018-9341</td>
+ </tr>
+ <tr>
+ <td>Tencent Blade 团队</td>
+ <td>CVE-2018-9345、CVE-2018-9346</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司 IceSword 实验室的 Yonggang Guo (<a href="https://twitter.com/guoygang">@guoygang</a>)</td>
+ <td>CVE-2017-0564</td>
+ </tr>
+ <tr>
+ <td>C0RE 团队的 Yuan-Tsung Lo</td>
+ <td>CVE-2017-13079、CVE-2017-13081</td>
+ </tr>
+ <tr>
+ <td>华为移动安全实验室的钱育波</td>
+ <td>CVE-2018-9363</td>
+ </tr>
+ <tr>
+ <td>奇虎 360 科技有限公司成都安全响应中心的 Zinuo Han</td>
+ <td>CVE-2018-9340、CVE-2018-9338、<br />CVE-2018-9378</td>
+ </tr>
+</tbody></table>
+
<h4 id="may-2018">5 月</h4>
<table>
<colgroup><col width="70%" />
@@ -46,7 +203,7 @@
<td>CVE-2017-18153</td>
</tr>
<tr>
- <td><a href="http://c0reteam.org">C0RE 团队</a>的 <a href="mailto:arnow117@gmail.com">Hanxiang Wen</a> 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
+ <td><a href="http://c0reteam.org">C0RE</a> 团队的 <a href="mailto:arnow117@gmail.com">Hanxiang Wen</a> 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
<td>CVE-2017-18154</td>
</tr>
<tr>
@@ -124,7 +281,6 @@
</tr>
<tr>
<td><a href="http://www.ms509.com">MS509Team</a> 的 En He (<a href="https://twitter.com/heeeeen4x">@heeeeen4x</a>) 和 Bo Liu
-
</td>
<td>CVE-2017-13294
</td>
@@ -154,7 +310,7 @@
</td>
</tr>
<tr>
- <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和 Guang Gong
+ <td>奇虎 360 科技有限公司 Alpha 团队的 Jianjun Dai (<a href="https://twitter.com/Jioun_dai">@Jioun_dai</a>) 和龚广
</td>
<td>CVE-2017-13291、CVE-2017-13283、CVE-2017-13282、CVE-2017-13281、CVE-2017-13267
</td>
@@ -253,12 +409,12 @@
<td>CVE-2017-13258</td>
</tr>
<tr>
- <td><a href="http://c0reteam.org">C0RE 团队</a>的 Hongli Han (<a href="https://twitter.com/hexb1n">@HexB1n</a>)、<a href="mailto:shaodacheng2016@gmail.com">Dacheng Shao</a> 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
+ <td><a href="http://c0reteam.org">C0RE 团队</a>的 Hongli Han (<a href="https://twitter.com/hexb1n">@hexb1n</a>)、<a href="mailto:shaodacheng2016@gmail.com">Dacheng Shao</a> 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
<td>CVE-2017-6287</td>
</tr>
<tr>
<td><a href="http://c0reteam.org">C0RE 团队</a>的 Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>) 和周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)</td>
- <td>CVE-2017-6286、CVE-2017-6285、CVE-2017-6281</td>
+ <td>CVE-2017-6286、CVE-2017-6285,<br />CVE-2017-6281</td>
</tr>
<tr>
<td>百度安全实验室的丁鹏飞、包沉浮和韦韬</td>
@@ -277,7 +433,7 @@
<td>CVE-2017-13249、CVE-2017-13248、CVE-2017-13264</td>
</tr>
<tr>
- <td>蚂蚁金服巴斯光年安全实验室的<a href="http://www.weibo.com/wishlinux">吴潍浠</a> (<a href=" https://twitter.com/wish_wu">@wish_wu</a>)</td>
+ <td>蚂蚁金服巴斯光年安全实验室的<a href="http://www.weibo.com/wishlinux">吴潍浠</a> (<a href=" https://twitter.com/wish_wu">@wish_wu</a></td>
<td>CVE-2017-13259、CVE-2017-13272</td>
</tr>
<tr>
@@ -350,7 +506,7 @@
</td>
</tr>
<tr>
- <td><a href="http://c0reteam.org">CORE 团队</a>的 Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>)、周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)
+ <td><a href="http://c0reteam.org">C0RE 团队</a>的 Hongli Han (<a href="https://twitter.com/HexB1n">@HexB1n</a>)、周明建 (<a href="https://twitter.com/Mingjian_Zhou">@Mingjian_Zhou</a>)
</td>
<td>CVE-2017-17767、CVE-2017-6279
</td>
@@ -368,7 +524,7 @@
</td>
</tr>
<tr>
- <td><a href="mailto:jiych.guru@gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)
+ <td><a href="mailto:jiych.guru@gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)
</td>
<td>CVE-2017-13230、CVE-2017-13234
</td>
@@ -473,7 +629,7 @@
<td>CVE-2017-13184、CVE-2017-13201</td>
</tr>
<tr>
- <td><a href="mailto:jiych.guru@gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
+ <td><a href="mailto:jiych.guru@gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
<td>CVE-2017-0855、CVE-2017-13195、CVE-2017-13181</td>
</tr>
<tr>
@@ -708,7 +864,8 @@
<td>CVE-2017-0496</td>
</tr>
<tr>
- <td><a href="http://tuncay2.web.engr.illinois.edu/">伊利诺伊大学厄巴纳-尚佩恩分校</a>的 <a href="https://www.linkedin.com/in/g%C3%BCliz-seray-tuncay-952a1b9/">Güliz Seray Tuncay</a></td>
+ <td>
+ <a href="http://tuncay2.web.engr.illinois.edu/">伊利诺伊大学厄巴纳-尚佩恩分校</a>的 <a href="https://www.linkedin.com/in/g%C3%BCliz-seray-tuncay-952a1b9/">Güliz Seray Tuncay</a></td>
<td>CVE-2017-0593</td>
</tr>
<tr>
@@ -784,7 +941,8 @@
<td>CVE-2016-8461、CVE-2016-8462</td>
</tr>
<tr>
- <td><a href="https://www.linkedin.com/in/jose-maria-ariel-martinez-juarez-7910a189/">Jose Martinez</a></td>
+ <td><a href="https://www.linkedin.com/in/jose-maria-ariel-martinez-juarez-7910a189/">
+ Jose Martinez</a></td>
<td>CVE-2017-0841</td>
</tr>
<tr>
@@ -880,7 +1038,7 @@
<td>CVE-2016-5552</td>
</tr>
<tr>
- <td><a href="mailto:jiych.guru@gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
+ <td><a href="mailto:jiych.guru@gmail.com">Niky1235</a> (<a href="https://twitter.com/jiych_guru">@jiych_guru</a>)</td>
<td>CVE-2017-0603、CVE-2017-0670、CVE-2017-0697、CVE-2017-0726、CVE-2017-0818</td>
</tr>
<tr>
@@ -1668,11 +1826,12 @@
<p><a href="http://www.search-lab.hu/">Search-Lab Ltd.</a> 的 Imre Rad</p>
-<p><a href="http://thejh.net/">Jann Horn</a> <a href="https://android-review.googlesource.com/#/c/98197/">
+<p><a href="http://thejh.net/">Jann Horn</a>
+<a href="https://android-review.googlesource.com/#/c/98197/">
<img style="vertical-align:middle;" src="../images/tiny-robot.png" alt="绿色机器人补丁程序符号" title="此人贡献了有助于提高 Android 安全性的代码"/>
</a></p>
-<p><a href="http://www.bluebox.com/">Bluebox Security</a> 的 Jeff Forristal</p>
+<p><a href="http://www.bluebox.com/">Bluebox Security</a> 的 Jeff Forrista</p>
<p><a href="https://labs.mwrinfosecurity.com/">MWR 实验室</a>的 <a href="http://blog.redfern.me/">Joseph Redfern</a> <br />(<a href="https://twitter.com/JosephRedfern">@JosephRedfern</a>)</p>
@@ -1748,7 +1907,7 @@
</div>
-<h2 id="2013">2013 年</h2>
+<h2 id="2013">2013</h2>
<div style="LINE-HEIGHT:25px;">
@@ -1797,7 +1956,7 @@
</div>
-<h2 id="2012">2012 年</h2>
+<h2 id="2012">2012</h2>
<div style="LINE-HEIGHT:25px;">
@@ -1824,7 +1983,7 @@
</div>
-<h2 id="2011">2011 年</h2>
+<h2 id="2011">2011</h2>
<div style="LINE-HEIGHT:25px;">
diff --git a/zh-cn/setup/build/building.html b/zh-cn/setup/build/building.html
index 2c62be3..dc2cd27 100644
--- a/zh-cn/setup/build/building.html
+++ b/zh-cn/setup/build/building.html
@@ -61,27 +61,32 @@
<p>如果您没有提供任何参数就运行命令,<code>lunch</code> 将提示您从菜单中选择一个目标。</p>
<p>所有编译目标都采用 <code>BUILD-BUILDTYPE</code> 形式,其中 <code>BUILD</code> 是表示特定功能组合的代号。<code>BUILDTYPE</code> 是以下类型之一:</p>
<table>
-<thead>
-<tr>
-<th>编译类型</th>
-<th>使用情况</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>user</td>
-<td>权限受限;适用于生产环境</td>
-</tr>
-<tr>
-<td>userdebug</td>
-<td>与“user”类似,但具有 root 权限和可调试性;是进行调试时的首选编译类型</td>
-</tr>
-<tr>
-<td>eng</td>
-<td>具有额外调试工具的开发配置</td>
-</tr>
-</tbody>
+ <thead>
+ <tr>
+ <th>编译类型</th>
+ <th>使用情况</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>user</td>
+ <td>权限受限;适用于生产环境</td>
+ </tr>
+ <tr>
+ <td>userdebug</td>
+ <td>与“user”类似,但具有 root 权限和可调试性;是进行调试时的首选编译类型</td>
+ </tr>
+ <tr>
+ <td>eng</td>
+ <td>具有额外调试工具的开发配置</td>
+ </tr>
+ </tbody>
</table>
+
+<p>userdebug 版本应和 user 版本以相同的方式运行,且能够启用通常会破坏平台安全模型的额外调试。这可让 userdebug 版本具有更强大的诊断功能,从而成为进行 user 测试的最佳选择。使用 userdebug 版本进行开发时,您应遵循 <a href="../develop/new-device.html#userdebug-guidelines">userdebug 准则</a>。</p>
+
+<p>eng 版本会优先考虑平台负责工程师的工程生产力。eng 版本会关闭用于提供良好用户体验的各种优化。否则,eng 版本的运行方式将类似于 user 和 userdebug 版本,以便设备开发者看到代码在这些环境下的运行方式。</p>
+
<p>要详细了解如何针对实际硬件进行编译以及如何在实际硬件上运行编译系统,请参阅<a href="running.html">运行编译系统</a>。</p>
<h2 id="build-the-code">编译代码</h2>
diff --git a/zh-cn/setup/build/devices.html b/zh-cn/setup/build/devices.html
index 19dc014..ab2e16d 100644
--- a/zh-cn/setup/build/devices.html
+++ b/zh-cn/setup/build/devices.html
@@ -28,7 +28,7 @@
<h2 id="960hikey">HiKey960 开发板</h2>
-<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 配置。
+<p>HiKey960 开发板由 <a href="https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Delectronics&field-keywords=hikey960" class="external">Amazon.com</a> 和 <a href="http://www.lenovator.com/product/80.html" class="external">Lenovator</a><a> 提供,采用 3GB RAM 配置。
</a></p><a>
<img src="../images/hikey960.png" alt="HiKey960 开发板图片"/>
@@ -37,8 +37,8 @@
<h3 id="additional-resources">其他资源</h3>
</a><ul><a>
</a><li><a>
-</a><a href="https://github.com/96boards/documentation/blob/master/consumer/hikey960/hardware-docs/HiKey960_Schematics.pdf" class="external">HiKey960 示意图</a>
-</li>
+</a><a href="https://github.com/96boards/documentation/blob/master/consumer/hikey960/hardware-docs/HiKey960_Schematics.pdf" class="external">HiKey960 示意图
+</a></li>
<li>
<a href="https://github.com/96boards/documentation/blob/master/consumer/hikey960/hardware-docs/hardware-user-manual.md" class="external">HiKey960 用户指南</a></li>
<li>
diff --git a/zh-cn/setup/build/running.html b/zh-cn/setup/build/running.html
index 6f7a20f..3e4c673 100644
--- a/zh-cn/setup/build/running.html
+++ b/zh-cn/setup/build/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>
diff --git a/zh-cn/setup/develop/new-device.html b/zh-cn/setup/develop/new-device.html
index 6964d6c..8d0ad56 100644
--- a/zh-cn/setup/develop/new-device.html
+++ b/zh-cn/setup/develop/new-device.html
@@ -102,6 +102,21 @@
</tr>
</tbody></table>
+<h3 id="userdebug-guidelines">userdebug 准则</h3>
+
+<p>在测试中运行 userdebug 版本可帮助开发者了解开发中版本的性能和功耗。为了让 user 版本和 userdebug 版本保持一致,并在用于调试的版本中获得可靠的指标,设备开发者应遵循以下准则:</p>
+
+<ul>
+ <li>userdebug 定义为已启用 root 权限的 user 版本,以下情况除外:
+ <ul>
+ <li>仅由用户视需要运行且仅用于 userdebug 版本的应用</li>
+ <li>仅在空闲维护状态(连接充电器/充满电)下执行的操作,例如,使用 <code>dex2oatd</code> 与 <code>dex2oat</code> 比较后台编译情况</li>
+ </ul>
+ </li>
+ <li>请勿使用任何依靠编译类型以在默认状态下启用/不启用的功能。建议开发者不要使用任何影响电池续航时间的日志记录形式(例如调试日志记录或堆转储)。</li>
+ <li>在 userdebug 版本中默认启用的任何调试功能都应明确定义,并告知负责该项目的所有开发者。请仅在限定时间里启用这些调试功能,直到问题得以解决。</li>
+</ul>
+
<h2 id="use-resource-overlays">利用资源叠加层定制版本</h2>
<p>Android 编译系统会在编译时利用资源叠加层定制产品。资源叠加层用于指定在默认文件之上应用的资源文件。要使用资源叠加层,请修改项目编译文件,将 <code>PRODUCT_PACKAGE_OVERLAYS</code> 设为相对于顶级目录的路径。当编译系统搜索资源时,该路径将成为影子根目录,系统除了在当前根目录中进行搜索外,还会一并在该路径中搜索。</p>
@@ -194,7 +209,7 @@
<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 class="devsite-click-to-copy">
+ <li>创建一个 <code>vendorsetup.sh</code> 文件,以便将您的产品(“午餐套餐”)与<a href="#build-variants">编译变体</a>(使用短划线将两者分隔开)一起添加到版本中。例如:<pre class="devsite-click-to-copy">
add_lunch_combo <var><PRODUCT_NAME></var>-userdebug
</pre>
</li>
diff --git a/zh-cn/setup/start/brands.html b/zh-cn/setup/start/brands.html
index 57f52d4..9451926 100644
--- a/zh-cn/setup/start/brands.html
+++ b/zh-cn/setup/start/brands.html
@@ -22,7 +22,7 @@
<p>“Android”名称、<img src="/setup/assets/images/sac_logo.png" alt="Android" style="margin:0;padding:0 2px;vertical-align:baseline"/> 徽标、“Google Play”品牌以及其他商标均为 Google LLC 的资产,不属于通过 Android 开源项目提供的资源。</p>
-<p>如果您希望使用这些品牌,以表明它们与您的设备之间存在关联,请遵循本页所述的准则。这些准则与 <a href="https://developer.android.com/distribute/tools/promote/brand.html">Android 应用开发者品牌推广指南</a>和 <a href="https://www.google.com/permissions/">Google 品牌权限</a>之间是相辅相成的关系。</p>
+<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/">知识共享许可</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/">知识共享许可</a>。</p>
</div>
</div>
diff --git a/zh-cn/setup/start/site-updates.html b/zh-cn/setup/start/site-updates.html
index 3f9184f..dc39818 100644
--- a/zh-cn/setup/start/site-updates.html
+++ b/zh-cn/setup/start/site-updates.html
@@ -128,8 +128,8 @@
<h4>模糊测试</h4>
<p>
AOSP 提供了用于测试 <a href="/devices/tech/dalvik/">Android Runtime (ART)</a> 基础架构的全新模糊测试套件。全新的工具包 JFuzz 以及经过改进的 DexFuzz 现在可以直接在 AOSP 中获得,并且随附了相关文档。请参阅:
- <a href="https://android.googlesource.com/platform/art/+/master/tools/jfuzz/README.md">https://android.googlesource.com/platform/art/+/master/tools/jfuzz/README.md</a>
- <a href="https://android.googlesource.com/platform/art/+/master/tools/dexfuzz/README">https://android.googlesource.com/platform/art/+/master/tools/dexfuzz/README</a>
+<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>
无需执行任何操作,即可实现或使用这些新工具。必要时您可以对这些工具进行更改,就像您可以更改运行时/编译器一样。
@@ -335,8 +335,7 @@
他们必须确保自己的代码不含未定义的行为(通过使用 UBSan 等工具),以使之不易受到新工具链带来的问题的影响。所有工具链都始终在 AOSP 中直接更新。远远在 OC 发布之前,所有功能便都已可用,因此 OEM 应已遵循相关规定。
</p>
<p>
- 如需常规说明,请参阅<a href="https://llvm.org/" class="external">公开的 Clang/LLVM</a> 文档;如需 Android 专属指南,请参阅 AOSP 中的 <a href="https://android.googlesource.com/platform/external/clang/+/master/ReadmeAndroid.md" class="external">Android
- Clang/LLVM</a> 文档集。最后,请加入 <a href="https://groups.google.com/forum/#!forum/android-llvm">android-llvm</a> 公开论坛,以获取帮助和参与开发。
+如需常规说明,请参阅<a href="https://llvm.org/" class="external">公开的 Clang/LLVM</a> 文档;如需 Android 专属指南,请参阅 AOSP 中的 <a href="https://android.googlesource.com/platform/external/clang/+/master/ReadmeAndroid.md" class="external">Android Clang/LLVM</a> 文档集。最后,请加入 <a href="https://groups.google.com/forum/#!forum/android-llvm">android-llvm</a> 公开论坛,以获取帮助和参与开发。
</p>
<h3 id="drm-kms">DRM/KMS</h3>
@@ -462,17 +461,17 @@
<h3 id="reference-materials">更好的参考资料</h3>
<p>
- 您可以直接从顶层的<a href="/reference/">参考资料</a>标签获得<a href="/reference/hal/">硬件抽象层</a>和 <a href="/reference/tradefed/packages">Trade Federation</a> 参考资料。
+ 您可以直接从顶层的<a href="/reference/hal/">参考资料</a>标签获得<a href="/reference/tradefed/packages">硬件抽象层</a>和 <a href="/reference/">Trade Federation</a> 参考资料。
</p>
<h3 id="code-links">每页都有的代码链接</h3>
<p>
-在每个页面中,您只需点击一下右上角的<strong>转到源代码</strong>按钮,即可访问 <a href="https://android.googlesource.com/" class="external">AOSP 代码库</a>。
+在每个页面中,只需点击一下右上角的<strong>转到源代码</strong>按钮,即可访问 <a href="https://android.googlesource.com/" class="external">AOSP 代码库</a>。
</p>
<h3 id="comprehensive-footers">包罗广泛的页脚</h3>
<p>
-<em></em><em></em><em></em>除了已有的“关于”、“社区”和“法律”页脚之外,现在您还可以在每个页面的底部找到完整的链接列表。通过这些链接,您可以编译 Android、与 Android 生态系统建立联系,以及获得使用操作系统方面的帮助。
+<em></em><em></em><em></em>除了已有的“关于”、“社区”和“法律”页脚之外,现在您还可以在每个页面的底部找到完整的链接列表。通过这些链接,您可以编译 Android、与 Android 生态系统建立联系,以及获得使用 Android 操作系统方面的帮助。
</p>
</body></html>
\ No newline at end of file