aboutsummaryrefslogtreecommitdiff
path: root/en
diff options
context:
space:
mode:
authorMark Hecomovich <mheco@google.com>2018-11-12 19:18:54 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-11-12 19:18:54 +0000
commitef9d83d7f86c7f2bf6c4cf2967abb3dfea7e8636 (patch)
treebe8019bc8baef8b03fdaf36bdb5fc2e2d4788ffc /en
parentc1e42576367b058286943f85117e2cf1caccdd59 (diff)
parentc331c4c429cc28bfe87f1e7fe8c954ba2f7509fc (diff)
downloadsource.android.com-ef9d83d7f86c7f2bf6c4cf2967abb3dfea7e8636.tar.gz
Diffstat (limited to 'en')
-rw-r--r--en/_index.yaml26
-rw-r--r--en/compatibility/_toc-tests.yaml34
-rw-r--r--en/compatibility/cts/camera-wfov-box-assembly.md45
-rw-r--r--en/compatibility/cts/wfov_its_box_assembly_2.6.zipbin2406966 -> 0 bytes
-rw-r--r--en/compatibility/cts/wfov_its_box_assembly_2_7.zipbin0 -> 2411891 bytes
-rw-r--r--en/compatibility/tests.md63
-rw-r--r--en/compatibility/tests/development/blueprints.md136
-rw-r--r--en/compatibility/tests/development/index.md64
-rw-r--r--en/compatibility/tests/development/instr-app-e2e.md291
-rw-r--r--en/compatibility/tests/development/instr-self-e2e.md330
-rw-r--r--en/compatibility/tests/development/instrumentation.md162
-rw-r--r--en/compatibility/tests/development/jar.md93
-rw-r--r--en/compatibility/tests/development/metrics.md63
-rw-r--r--en/compatibility/tests/development/native-func-e2e.md179
-rw-r--r--en/compatibility/tests/development/native.md85
-rw-r--r--en/compatibility/tests/development/test-config.md185
-rw-r--r--en/compatibility/tests/index.md122
-rw-r--r--en/compatibility/vts/codelab-video.html608
-rw-r--r--en/compatibility/vts/index.html3
-rw-r--r--en/devices/architecture/hidl-java/index.html2
-rw-r--r--en/devices/architecture/vintf/objects.html47
-rw-r--r--en/devices/audio/debugging.html24
-rw-r--r--en/devices/bluetooth/asha.html101
-rw-r--r--en/devices/input/index.html2
-rw-r--r--en/devices/tech/admin/ota-updates.html61
-rw-r--r--en/devices/tech/ota/ab/ab_implement.html14
-rw-r--r--en/security/_toc-bulletins.yaml4
-rw-r--r--en/security/advisory/index.html2
-rw-r--r--en/security/bulletin/2018-11-01.html760
-rw-r--r--en/security/bulletin/2018.html16
-rw-r--r--en/security/bulletin/index.html16
-rw-r--r--en/security/bulletin/pixel/2018-07-01.html9
-rw-r--r--en/security/bulletin/pixel/2018-11-01.html301
-rw-r--r--en/security/bulletin/pixel/2018.html15
-rw-r--r--en/security/bulletin/pixel/index.html15
-rw-r--r--en/security/encryption/file-based.html120
-rw-r--r--en/security/overview/acknowledgements.html317
-rw-r--r--en/security/overview/updates-resources.html10
-rw-r--r--en/security/trusty/index.html2
-rw-r--r--en/setup/build/gsi.html99
-rw-r--r--en/setup/develop/repo.html4
-rw-r--r--en/setup/start/build-numbers.html2320
42 files changed, 5317 insertions, 1433 deletions
diff --git a/en/_index.yaml b/en/_index.yaml
index 1a28e7a3..1694a614 100644
--- a/en/_index.yaml
+++ b/en/_index.yaml
@@ -77,14 +77,22 @@ landing_page:
image_path: /images/android_stack.png
- heading: News
items:
- - heading: October Security Bulletins
+ - heading: November Security Bulletins
description: >
- The October 2018 Android and Pixel/Nexus Security Bulletins have been
+ The November 2018 Android and Pixel/Nexus Security Bulletins have been
published along with links to associated fixes and new build numbers
- to support the October security release.
+ to support the November security release.
buttons:
- - label: October 1st, 2018
- path: /security/bulletin/2018-10-01
+ - label: November 5th, 2018
+ path: /security/bulletin/2018-11-01
+ - heading: Platform Testing Overview
+ description: >
+ The Tests section now contains a thorough introduction
+ to all primary test types with end-to-end examples employing the new Soong build system. See
+ the Test Development Workflow.
+ buttons:
+ - label: November 1st, 2018
+ path: /compatibility/tests
- heading: Android 9 Documentation
description: >
Android 9 has been released! This site includes documentation for
@@ -93,14 +101,6 @@ landing_page:
buttons:
- label: August 6th, 2018
path: /setup/start/p-release-notes
- - heading: Site Updates
- description: >
- This site has been overhauled to make it easier for you to navigate,
- search, and read its ever-growing set of information. Check out the
- reorganized sections and new navigation.
- buttons:
- - label: August 6th, 2018
- path: /setup/start/site-updates
- classname: devsite-landing-row-100 tf-row-centered
items:
- buttons:
diff --git a/en/compatibility/_toc-tests.yaml b/en/compatibility/_toc-tests.yaml
index e631cc6b..03c550c7 100644
--- a/en/compatibility/_toc-tests.yaml
+++ b/en/compatibility/_toc-tests.yaml
@@ -1,7 +1,33 @@
toc:
- title: Overview
- path: /compatibility/tests
-- title: Compatibility Test Suite
+ path: /compatibility/tests/
+- title: Test Development Workflow
+ section:
+ - title: Overview
+ path: /compatibility/tests/development/
+ - title: Simple Configuration
+ path: /compatibility/tests/development/blueprints.md
+ - title: Complex Configuration
+ path: /compatibility/tests/development/test-config.md
+ - title: Instrumentation Tests
+ section:
+ - title: Overview
+ path: /compatibility/tests/development/instrumentation.md
+ - title: Self-Instrumenting Tests
+ path: /compatibility/tests/development/instr-self-e2e.md
+ - title: Targeting an Application
+ path: /compatibility/tests/development/instr-app-e2e.md
+ - title: Native Tests
+ section:
+ - title: Overview
+ path: /compatibility/tests/development/native.md
+ - title: Adding a New Native Test
+ path: /compatibility/tests/development/native-func-e2e.md
+ - title: Native Metric Tests
+ path: /compatibility/tests/development/metrics.md
+ - title: JAR Host Tests
+ path: /compatibility/tests/development/jar.md
+- title: Compatibility Test Suite (CTS)
section:
- title: Overview
path: /compatibility/cts/
@@ -47,6 +73,8 @@ toc:
section:
- title: Overview
path: /compatibility/vts/
+ - title: Codelab and Video Tutorials
+ path: /compatibility/vts/codelab-video
- title: Systems Testing with VTS
path: /compatibility/vts/systems
- title: Test Framework
@@ -77,7 +105,7 @@ toc:
path: /compatibility/vts/host-controller
- title: Performance Testing
path: /compatibility/vts/performance
-- title: Testing Infrastructure
+- title: Trade Federation Test Harness
section:
- title: Overview
path: /devices/tech/test_infra/tradefed/
diff --git a/en/compatibility/cts/camera-wfov-box-assembly.md b/en/compatibility/cts/camera-wfov-box-assembly.md
index 3e7ab382..cadc0b42 100644
--- a/en/compatibility/cts/camera-wfov-box-assembly.md
+++ b/en/compatibility/cts/camera-wfov-box-assembly.md
@@ -65,10 +65,10 @@ internal lighting system, and a plastic box that is laser cut from CAD drawings
### Required tools
-Before getting started, ensure you have downloaded the
-[technical drawings for the WFoV ITS-in-a-box](/compatibility/cts/wfov_its_box_assembly_2.6.zip),
-cut the plastic and vinyl pieces, purchased the hardware
-from the BOM, and have the following tools available:
+To get started, download the latest
+[technical drawings for the WFoV ITS-in-a-box](/compatibility/cts/wfov_its_box_assembly_2_7.zip),
+cut the plastic and vinyl pieces, purchase the hardware from the bill of
+materials (BOM), and gather these tools:
+ Phillips head screwdriver
+ Pliers
@@ -77,6 +77,8 @@ from the BOM, and have the following tools available:
+ Water spray bottle
+ X-acto knife
+Note: For more information on past versions, see [Revision history](#revision_history).
+
### Step 1: Apply colored vinyl
To apply colored vinyl:
@@ -246,3 +248,38 @@ To assemble the WFoV ITS box:
![Assembled WFoV box](/compatibility/cts/images/wfov-assembled-box.png){: width="500"}
**Figure 22.** Assembled WFoV box: rear view (left) and front view (right)
+
+### Revision history
+
+The following describes the changes made to the WFoV ITS-in-a-box.
+
+#### Revision 2.7
+
+- Switched light in the BOM (#16) to UL listed LED tape for better manufacturing
+ consistency.
+- Switched power supply in the BOM (#17) to the same source as #16.
+- Revised the tablet mount to be 35mm wider to match the tablet opening (page 4
+ on mechanical drawing)
+- Revised the front clamp hole spacing (distance) to align with the clamp slot
+ length (page 5 on mechanical drawing)
+- Reduced the front aperture circle diameter by 20mm to match the [RFoV
+ ITS-in-a-box (revision 1)](/compatibility/cts/camera-its-box-assembly) (page
+ 5 on mechanical drawing)
+
+#### Revision 2.6 (released internally)
+
+- Made a correction to the mechanical drawing
+
+#### Revision 2.5
+
+- Simplified tablet holder to be similar to the phone mount
+- Used a sandblast finish instead of an anodized finish to reduce costs
+- Corrected specifications for LED lights on the BOM
+
+#### Revision 2.4
+
+- Switched from acrylic to ABS material to reduce shipping damage
+- Removed 3D printing elements and replaced them with laser-cut ABS to reduce
+ costs
+- Changed the box handles to use ABS instead of being a separate item to
+ purchase on the BOM
diff --git a/en/compatibility/cts/wfov_its_box_assembly_2.6.zip b/en/compatibility/cts/wfov_its_box_assembly_2.6.zip
deleted file mode 100644
index e8e411eb..00000000
--- a/en/compatibility/cts/wfov_its_box_assembly_2.6.zip
+++ /dev/null
Binary files differ
diff --git a/en/compatibility/cts/wfov_its_box_assembly_2_7.zip b/en/compatibility/cts/wfov_its_box_assembly_2_7.zip
new file mode 100644
index 00000000..1daf5da9
--- /dev/null
+++ b/en/compatibility/cts/wfov_its_box_assembly_2_7.zip
Binary files differ
diff --git a/en/compatibility/tests.md b/en/compatibility/tests.md
deleted file mode 100644
index 9b22f0bf..00000000
--- a/en/compatibility/tests.md
+++ /dev/null
@@ -1,63 +0,0 @@
-Project: /_project.yaml
-Book: /_book.yaml
-
-{% include "_versions.html" %}
-
-<!--
- 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.
--->
-
-# Tests
-
-As an open source operating system, Android offers many testing and debugging
-tools. First, take a moment to understand the
-[basics](https://android.googlesource.com/platform/platform_testing/+/master/docs/basics/index.md){: .external}
-of testing and then explore the options below.
-
-## Atest
-
-[Atest](https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md){: .external}
-is a command line tool that allows users to build, install and run Android tests
-locally.
-
-## Compatibility Test Suite (CTS)
-
-The [Compatibility Test Suite](/compatibility/cts/) (CTS) is a free,
-commercial-grade test suite that runs on a desktop machine and executes test
-cases directly on attached devices or an emulator.
-
-## Vendor Test Suite (VTS)
-
-The [Vendor Test Suite](/compatibility/vts/) (VTS) automates HAL and OS kernel
-testing. To use VTS to test an Android native system implementation, set up a
-testing environment then test a patch using a VTS plan.
-
-## Trade Federation Testing Infrastructure
-
-[Trade Federation](/devices/tech/test_infra/tradefed/) (tradefed or TF for
-short) is a continuous test framework designed for running tests on Android
-devices. TF can run functional tests locally, at your desk, within your platform
-checkout. There are two required files to run a test in TF, a java test source
-and an XML config. See
-[RebootTest.java](https://android.googlesource.com/platform/tools/tradefederation/contrib/+/master/src/com/android/example/RebootTest.java){: .external}
-and
-[reboot.xml](https://android.googlesource.com/platform/tools/tradefederation/contrib/+/master/res/config/example/reboot.xml){: .external}
-for examples.
-
-## Debugging
-
-The [Debugging](/devices/tech/debug/) section summarizes useful tools and related
-commands for debugging, tracing, and profiling native Android platform code when
-developing platform-level features.
diff --git a/en/compatibility/tests/development/blueprints.md b/en/compatibility/tests/development/blueprints.md
new file mode 100644
index 00000000..96054162
--- /dev/null
+++ b/en/compatibility/tests/development/blueprints.md
@@ -0,0 +1,136 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Simple Test Configuration
+
+Each new test module must have a configuration file to direct the build system
+with module metadata, compile-time dependencies and packaging instructions.
+
+The [Soong build system](https://android.googlesource.com/platform/build/soong/)
+was introduced in Android 8.0 (Oreo) with support for `android_test` arriving in
+Android Q, now available in the Android Open Source Project (AOSP) master
+branch.
+
+Soong uses Blueprint or `.bp` files, which are JSON-like simple declarative
+descriptions of modules to build. This format replaces the
+Make-based system used in previous releases. To accommodate custom testing or
+use the Android [Compatibility Test Suite](compatibility/cts) (CTS), follow the
+[Complex Test Configuration](/compatibility/tests/development/test-config)
+instead.
+
+## Example
+
+The entries below come from this example Blueprint configuration file:
+[/platform_testing/tests/example/instrumentation/Android.bp](https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/Android.bp)
+
+A snapshot is included here for convenience:
+
+```
+android_test {
+ name: "HelloWorldTests",
+ srcs: ["src/**/*.java"],
+ sdk_version: "current",
+ static_libs: ["android-support-test"],
+ certificate: "platform",
+ test_suites: ["device-tests"],
+}
+```
+
+Note the `android_test` declaration at the beginning indicates this is a test.
+Including `android_app` would conversely indicate this is instead a build
+package.
+
+## Settings
+
+The following settings garner explanation:
+
+```
+ name: "HelloWorldTests",
+```
+
+The `name` setting is required when the `android_test` module type is specified
+(at the start of the block). It gives a name to your module, and the resulting
+APK will be named the same and with a `.apk` suffix, e.g. in this case,
+resulting test apk is named as `HelloWorldTests.apk`. In addition, this also
+defines a make target name for your module, so that you can use `make [options]
+<HelloWorldTests>` to build your test module and all its dependencies.
+
+```
+ static_libs: ["android-support-test"],
+```
+
+The `static_libs` setting instructs the build system to incorporate the contents
+of the named modules into the resulting apk of current module. This means that
+each named module is expected to produce a `.jar` file, and its content will be
+used for resolving classpath references during compile time, as well as
+incorporated into the resulting apk.
+
+In this example, things that might be generally useful for tests:
+
+The `android-support-test` is the prebuilt for the Android Test Support Library,
+which includes the new test runner `AndroidJUnitRunner`: a replacement for the
+now deprecated built-in `InstrumentationTestRunner`, with support for JUnit4
+testing framework. Read more at
+[Test apps on Android](https://developer.android.com/training/testing/){:
+.external}.
+
+If you are building a new instrumentation module, you should always start with
+the `android-support-test` library as your test runner. The platform source tree
+also includes other useful testing frameworks such as `ub-uiautomator`,
+`mockito-target`, `easymock` and more.
+
+```
+ certificate: "platform",
+```
+
+The `certificate` setting instructs the build system to sign the apk with the same
+certificate as the core platform. This is needed if your test uses a signature
+protected permission or API. Note that this is suitable for platform continuous
+testing, but should *not* be used in CTS test modules. Note that this example
+uses this certificate setting only for the purpose of illustration: the test code
+of the example does not actually need for the test apk to be signed with the
+special platform certificate.
+
+If you are writing an instrumentation for your component that lives outside of
+system server, that is, it's packaged more or less like a regular app apk,
+except that it's built into system image and may be a privileged app, chances
+are that your instrumentation will be targeting the app package (see below
+section about manifest) of your component. In this case, your application
+makefile may have its own `certificate` setting, and your instrumentation
+module should retain the same setting. This is because to target your
+instrumentation on the app under test, your test apk and app apk must be signed
+with the same certificate.
+
+In other cases, you don't need to have this setting at all: the build system
+will simply sign it with a default built-in certificate, based on the build
+variant, and it's typically called the `dev-keys`.
+
+```
+ test_suites: ["device-tests"],
+```
+
+The `test_suites` setting makes the test easily discoverable by the Trade
+Federation test harness. Other suites can be added here such as CTS so that this
+test may be shared.
+
+```
+${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk
+```
diff --git a/en/compatibility/tests/development/index.md b/en/compatibility/tests/development/index.md
new file mode 100644
index 00000000..12f1b610
--- /dev/null
+++ b/en/compatibility/tests/development/index.md
@@ -0,0 +1,64 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Test Types and Guidelines
+
+To integrate tests into a platform continuous testing service, they should meet
+the following guidelines.
+
+## Test types
+
+Supported test types are:
+
+* [Instrumentation tests](/compatibility/tests/development/instrumentation)
+ support both functional and metrics tests. See
+ [Test your app](https://developer.android.com/studio/test/){: .external} for
+ general app testing guidance.
+* [Native tests](/compatibility/tests/development/native) support these types:
+ * [Native functional
+ tests](/compatibility/tests/development/native-func-e2e) using the
+ [gtest](https://github.com/google/googletest){: .external} framework
+ * [Native metric tests](/compatibility/tests/development/metrics.md) are
+ native benchmark tests using
+ [google-benchmark](https://github.com/google/benchmark){: .external}
+* [JAR host tests](/compatibility/tests/development/jar)
+ using JUnit
+
+Functional tests make assertions of pass or fail on test cases, while metrics
+tests generally perform an action repeatedly to collect timing metrics.
+
+With standardized input/output format, the need for customized result parsing
+and post-processing per test is eliminated, and generic test harnesses can be
+used for all tests that fit into the convention. See the [Trade Federation
+Overview](/devices/tech/test_infra/tradefed) for the continuous test framework
+included with Android.
+
+## Test case guidelines
+
+Test cases executed via continuous testing service are expected to be
+**hermetic** meaning all dependencies are declared and provided with the tests.
+See [Hermetic Servers on the Google Testing Blog](https://testing.googleblog.com/2012/10/hermetic-servers.html){: .external}
+for an understanding of this principle. In short, hermetic tests require **no**:
+
+* Google account sign-in
+* connectivity configured (telephony/Wi-Fi/Bluetooth/NFC)
+* test parameters passed in
+* setup or tear down performed by test harness for a specific test case
diff --git a/en/compatibility/tests/development/instr-app-e2e.md b/en/compatibility/tests/development/instr-app-e2e.md
new file mode 100644
index 00000000..b61d6644
--- /dev/null
+++ b/en/compatibility/tests/development/instr-app-e2e.md
@@ -0,0 +1,291 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Targeting an Application Example
+
+This category of instrumentation test isn't that different from those targeting
+the regular Android applications. It's worth noting that the test application
+that included the instrumentation needs to be signed with the same certificate
+as the application that it's targeting.
+
+Note that this guide assumes that you already have some knowledge in the
+platform source tree workflow. If not, please refer to
+https://source.android.com/source/requirements. The example
+covered here is writing an new instrumentation test with target package set at
+its own test application package. If you are unfamiliar with the concept, please
+read through the [Platform testing introduction](../development/index.md).
+
+This guide uses the follow test to serve as an sample:
+
+* frameworks/base/packages/Shell/tests
+
+It's recommended to browse through the code first to get a rough impression
+before proceeding.
+
+## Deciding on a source location
+
+Because the instrumentation test will be targeting an application, the convention
+is to place the test source code in a `tests` directory under the root of your
+component source directory in platform source tree.
+
+See more discussions about source location in the [end-to-end example for
+self-instrumenting tests](instr-self-e2e.md).
+
+## Manifest file
+
+Just like a regular application, each instrumentation test module needs a
+manifest file. If you name the file as `AndroidManifest.xml` and provide it next
+to `Android.mk` for your test tmodule, it will get included automatically by the
+`BUILD_PACKAGE` core makefile.
+
+Before proceeding further, it's highly recommended to go through the external
+[documentation on manifest file](https://developer.android.com/guide/topics/manifest/manifest-intro.html)
+first.
+
+This gives an overview of basic components of a manifest file and their
+functionalities.
+
+Latest version of the manifest file for the sample gerrit change can be accessed
+at:
+https://android.googlesource.com/platform/frameworks/base/+/master/packages/Shell/tests/AndroidManifest.xml
+
+A snapshot is included here for convenience:
+
+```xml
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.shell.tests">
+
+ <application>
+ <uses-library android:name="android.test.runner" />
+
+ <activity
+ android:name="com.android.shell.ActionSendMultipleConsumerActivity"
+ android:label="ActionSendMultipleConsumer"
+ android:theme="@android:style/Theme.NoDisplay"
+ android:noHistory="true"
+ android:excludeFromRecents="true">
+ <intent-filter>
+ <action android:name="android.intent.action.SEND_MULTIPLE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="*/*" />
+ </intent-filter>
+ </activity>
+ </application>
+
+ <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.shell"
+ android:label="Tests for Shell" />
+
+</manifest>
+```
+
+Some select remarks on the manifest file:
+
+```xml
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.shell.tests">
+```
+
+The `package` attribute is the application package name: this is the unique
+identifier that the Android application framework uses to identify an
+application (or in this context: your test application). Each user in the system
+can only install one application with that package name.
+
+Since this is a test application package, independent from the application
+package under test, a different package name must be used: one common convention
+is to add a suffix `.test`.
+
+Furthermore, this `package` attribute is the same as what
+[`ComponentName#getPackageName()`](https://developer.android.com/reference/android/content/ComponentName.html#getPackageName\(\))
+returns, and also the same you would use to interact with various `pm` sub
+commands via `adb shell`.
+
+Please also note that although the package name is typically in the same style
+as a Java package name, it actually has very few things to do with it. In other
+words, your application (or test) package may contain classes with any package
+names, though on the other hand, you could opt for simplicity and have your top
+level Java package name in your application or test identical to the application
+package name.
+
+```xml
+<uses-library android:name="android.test.runner" />
+```
+
+This is required for all Instrumentation tests since the related classes are
+packaged in a separate framework jar library file, therefore requires additional
+classpath entries when the test package is invoked by application framework.
+
+```xml
+android:targetPackage="com.android.shell"
+```
+
+This sets the target package of the instrumentation to `com.android.shell.tests`.
+When the instrumentation is invoked via `am instrument` command, the framework
+restarts `com.android.shell.tests` process, and injects instrumentation code into
+the process for test execution. This also means that the test code will have
+access to all the class instances running in the application under test and may
+be able to manipulate state depends on the test hooks exposed.
+
+## Simple configuration file
+
+Each new test module must have a configuration file to direct
+the build system with module metadata, compile-time dependencies and packaging
+instructions. In most cases, the Soong-based, Blueprint file option is
+sufficient. See [Simple Test Configuration](blueprints.md) for details.
+
+## Complex configuration file
+
+Important: The instructions in this section are needed only for CTS tests or those
+that require special setup, such as disabling Bluetooth or collecting sample data.
+All other cases can be covered through the
+[Simple Test Configuration](blueprints.md). See the
+[Complex Test Configuration](compatibility/tests/development/test-config) for
+more details applicable to this section.
+
+For more complex tests, you also need write a test configuration
+file for Android's test harness, [Trade Federation](https://source.android.com/devices/tech/test_infra/tradefed/).
+
+The test configuration can specify special device setup options and default
+arguments to supply the test class.
+
+Latest version of the config file for the sample gerrit change can be accessed
+at:
+https://android.googlesource.com/platform/frameworks/base/+/master/packages/Shell/tests/AndroidTest.xml
+
+A snapshot is included here for convenience:
+
+```xml
+<configuration description="Runs Tests for Shell.">
+ <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+ <option name="test-file-name" value="ShellTests.apk" />
+ </target_preparer>
+
+ <option name="test-suite-tag" value="apct" />
+ <option name="test-tag" value="ShellTests" />
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+ <option name="package" value="com.android.shell.tests" />
+ <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
+ </test>
+</configuration>
+```
+
+Some select remarks on the test configuration file:
+
+```xml
+<target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+ <option name="test-file-name" value="ShellTests.apk"/>
+</target_preparer>
+```
+This tells Trade Federation to install the ShellTests.apk onto the target
+device using a specified target_preparer. There are many target preparers
+available to developers in Trade Federation and these can be used to ensure
+the device is setup properly prior to test execution.
+
+```xml
+<test class="com.android.tradefed.testtype.AndroidJUnitTest">
+ <option name="package" value="com.android.shell.tests"/>
+ <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
+</test>
+```
+This specifies the Trade Federation test class to use to execute the test and
+passes in the package on the device to be executed and the test runner
+framework which is JUnit in this case.
+
+Look here for more information on [Test Module Configs](test-config.md)
+
+## JUnit4 features
+
+Using `android-support-test` library as test runner enables adoptation of new
+JUnit4 style test classes, and the sample gerrit change contains some very basic
+use of its features.
+
+Latest source code for the sample gerrit change can be accessed at:
+frameworks/base/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.javast.java
+
+While testing patterns are usually specific to component teams, there are some
+generally useful usage patterns.
+
+```java
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public final class FeatureFactoryImplTest {
+```
+
+A significant difference in JUnit4 is that tests are no longer required to
+inherit from a common base test class; instead, you write tests in plain Java
+classes and use annotation to indicate certain test setup and constraints. In
+this example, we are instructing that this class should be run as an Android
+JUnit4 test.
+
+The `@SmallTest` annotation specified a test size for the entire test class: all
+test methods added into this test class inherit this test size annotation.
+pre test class setup, post test tear down, and post test class tear down:
+similar to `setUp` and `tearDown` methods in JUnit4.
+`Test` annotation is used for annotating the actual test.
+
+Important: the test methods themselves are annotated with `@Test`
+annotation; and note that for tests to be executed via APCT, they must be
+annotated with test sizes. Such annotation may be applied at method scope, or
+class scope.
+
+```java
+ @Before
+ public void setup() {
+ ...
+ @Test
+ public void testGetProvider_shouldCacheProvider() {
+ ...
+```
+
+The `@Before` annotation is used on methods by JUnit4 to perform pre test setup.
+Although not used in this example, there's also `@After` for post test teardown.
+Similarly, the `@BeforeClass` and `@AfterClass` annotations are can be used on
+methods by JUnit4 to perform setup before executing all tests in a test class,
+and teardown afterwards. Note that the class-scope setup and teardown methods
+must be static.
+
+As for the test methods, unlike in earlier version of JUnit, they no longer need
+to start the method name with `test`, instead, each of them must be annotated
+with `@Test`. As usual, test methods must be public, declare no return value,
+take no parameters, and may throw exceptions.
+
+```java
+ Context context = InstrumentationRegistry.getTargetContext();
+```
+
+Because the JUnit4 tests no longer require a common base class, it's no longer
+necessary to obtain `Context` instances via `getContext()` or
+`getTargetContext()` via base class methods; instead, the new test runner
+manages them via [`InstrumentationRegistry`](https://developer.android.com/reference/android/support/test/InstrumentationRegistry.html)
+where contextual and environmental setup created by instrumentation framework is
+stored. Through this class, you can also call:
+
+* `getInstrumentation()`: the instance to the `Instrumentation` class
+* `getArguments()`: the command line arguments passed to `am instrument` via
+ `-e <key> <value>`
+
+## Build and test locally
+
+For the most common use cases, employ
+[Atest](https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md).
+
+For more complex cases requiring heavier customization, follow the
+[instrumentation instructions](instrumentation.md).
diff --git a/en/compatibility/tests/development/instr-self-e2e.md b/en/compatibility/tests/development/instr-self-e2e.md
new file mode 100644
index 00000000..6c8885e9
--- /dev/null
+++ b/en/compatibility/tests/development/instr-self-e2e.md
@@ -0,0 +1,330 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Self-Instrumenting Tests Example
+
+When an instrumentation test is started, its target package is
+restarted with instrumentation code injected and initiated for execution. One
+exception is that the target package here cannot be the Android application
+framework itself, i.e. the package `android`, because doing so would lead to the
+paradoxical situation where Android framework would need to be restarted, which
+is what supports the system functions, including the instrumentation itself.
+
+This means that an instrumentation test cannot inject itself into Android
+framework, a.k.a. the system server, for execution. In order to test the Android
+framework, the test code can invoke only public API surfaces, or those exposed
+via Android Interface Definition Language
+[AIDL](https://developer.android.com/guide/components/aidl.html){: .external} available
+in the platform source tree. For this category of tests, it's not meaningful to
+target any particular package. Therefore, it's customary for such
+instrumentations to be declared to target its own test application package, as
+defined in its own `<manifest>` tag of `AndroidManifest.xml`.
+
+Depending on the requirements, test application packages in this category may
+also:
+
+* Bundle activities needed for testing.
+* Share the user ID with the system.
+* Be signed with the platform key.
+* Be compiled against the framework source rather than the public SDK.
+
+This category of instrumentation tests is sometimes referred to as
+self-instrumentation. Here are some examples of self-instrumentation tests in
+the platform source:
+
+* [frameworks/base/core/tests/](https://android.googlesource.com/platform/frameworks/base/+/master/core/tests/)
+* [frameworks/base/services/tests/servicestests](https://android.googlesource.com/platform/frameworks/base/+/master/services/tests/servicestests/)
+
+
+The example covered here is writing a new instrumentation test with target
+package set at its own test application package. This guide uses the following
+test to serve as an example:
+
+* [Hello World Instrumentation Test](https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/)
+
+It's recommended to browse through the code first to get a rough impression
+before proceeding.
+
+## Deciding on a source location
+
+Typically your team will already have an established pattern of places to check
+in code, and places to add tests. Most team owns a single git repository, or
+share one with other teams but have a dedicated sub directory that contains
+component source code.
+
+Assuming the root location for your component source is at `<component source
+root>`, most components have `src` and `tests` folders under it, and some
+additional files such as `Android.mk` (or broken up into additional `.mk` files),
+the manifest file `AndroidManifest.xml`, and the test configuration file
+'AndroidTest.xml'.
+
+Since you are adding a brand new test, you'll probably need to create the
+`tests` directory next to your component `src`, and populate it with content.
+
+In some cases, your team might have further directory structures under `tests`
+due to the need to package different suites of tests into individual apks. And
+in this case, you'll need to create a new sub directory under `tests`.
+
+Regardless of the structure, you'll end up populating the `tests` directory or
+the newly created sub directory with files similar to what's in
+`instrumentation` directory in the sample gerrit change. The sections below will
+explain in further details of each file.
+
+## Manifest file
+
+Just like a regular application, each instrumentation test module needs a
+manifest file. If you name the file as `AndroidManifest.xml` and provide it next
+to `Android.mk` for your test tmodule, it will get included automatically by the
+`BUILD_PACKAGE` core makefile.
+
+Before proceeding further, it's highly recommended to go through the external
+[documentation on manifest file](https://developer.android.com/guide/topics/manifest/manifest-intro.html)
+first.
+
+This gives an overview of basic components of a manifest file and their
+functionalities. See the example at
+[platform_testing/tests/example/instrumentation/AndroidManifest.xml](https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/AndroidManifest.xml).
+
+A snapshot is included here for convenience:
+
+```xml
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="android.test.example.helloworld"
+
+ <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />
+
+ <application>
+ <uses-library android:name="android.test.runner" />
+ </application>
+
+ <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+ android:targetPackage="android.test.example.helloworld"
+ android:label="Hello World Test"/>
+
+</manifest>
+```
+
+Some select remarks on the manifest file:
+
+```xml
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="android.test.example.helloworld"
+```
+
+The `package` attribute is the application package name: this is the unique
+identifier that the Android application framework uses to identify an
+application (or in this context: your test application). Each user in the system
+can only install one application with that package name.
+
+Furthermore, this `package` attribute is the same as what
+[`ComponentName#getPackageName()`](https://developer.android.com/reference/android/content/ComponentName.html#getPackageName\(\))
+returns, and also the same you would use to interact with various `pm` sub
+commands via `adb shell`.
+
+Please also note that although the package name is typically in the same style
+as a Java package name, it actually has very few things to do with it. In other
+words, your application (or test) package may contain classes with any package
+names, though on the other hand, you could opt for simplicity and have your top
+level Java package name in your application or test identical to the application
+package name.
+
+```xml
+android:sharedUserId="android.uid.system"
+```
+
+This declares that at installation time, this apk should be granted the same
+user id, i.e. runtime identity, as the core platform. Note that this is
+dependent on the apk being signed with same certificate as the core platform
+(see `LOCAL_CERTIFICATE` in above section), yet they are different concepts:
+
+* some permissions or APIs are signature protected, which requires same
+ signing certificate
+* some permissions or APIs requires the `system` user identity of the caller,
+ which requires the calling package to share user id with `system`, if it's a
+ separate package from core platform itself
+
+```xml
+<uses-library android:name="android.test.runner" />
+```
+
+This is required for all Instrumentation tests since the related classes are
+packaged in a separate framework jar library file, therefore requires additional
+classpath entries when the test package is invoked by application framework.
+
+```xml
+android:targetPackage="android.test.example.helloworld"
+```
+
+You might have noticed that the `targetPackage` here is declared the same as the
+`package` attribute declared in the `manifest` tag of this file. As mentioned in
+[testing basics](../basics/index.md), this category of instrumentation test are
+typically intended for testing framework APIs, so it's not very meaningful for
+them to have a specific targeted application package, other then itself.
+
+## Simple configuration file
+
+Each new test module must have a configuration file to direct
+the build system with module metadata, compile-time dependencies and packaging
+instructions. In most cases, the Soong-based, Blueprint file option is
+sufficient. See [Simple Test Configuration](blueprints.md) for details.
+
+## Complex configuration file
+
+Important: The instructions in this section are needed only for CTS tests or those
+that require special setup, such as disabling Bluetooth or collecting sample data.
+All other cases can be covered through the
+[Simple Test Configuration](blueprints.md). See the
+[Complex Test Configuration](compatibility/tests/development/test-config) for
+more details applicable to this section.
+
+For these more complex cases, you also need to write a test configuration
+file for Android's test harness, [Trade Federation](https://source.android.com/devices/tech/test_infra/tradefed/).
+
+The test configuration can specify special device setup options and default
+arguments to supply the test class. See the example at
+[/platform_testing/tests/example/instrumentation/AndroidTest.xml](/platform_testing/+/master/tests/example/instrumentation/AndroidTest.xml).
+
+A snapshot is included here for convenience:
+
+```xml
+<configuration description="Runs sample instrumentation test.">
+ <target_preparer class="com.android.tradefed.targetprep.TestFilePushSetup"/>
+ <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+ <option name="test-file-name" value="HelloWorldTests.apk"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer"/>
+ <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"/>
+ <option name="test-suite-tag" value="apct"/>
+ <option name="test-tag" value="SampleInstrumentationTest"/>
+
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest">
+ <option name="package" value="android.test.example.helloworld"/>
+ <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
+ </test>
+</configuration>
+```
+
+Some select remarks on the test configuration file:
+
+```xml
+<target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+ <option name="test-file-name" value="HelloWorldTests.apk"/>
+</target_preparer>
+```
+This tells Trade Federation to install the HelloWorldTests.apk onto the target
+device using a specified target_preparer. There are many target preparers
+available to developers in Trade Federation and these can be used to ensure
+the device is setup properly prior to test execution.
+
+```xml
+<test class="com.android.tradefed.testtype.AndroidJUnitTest">
+ <option name="package" value="android.test.example.helloworld"/>
+ <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
+</test>
+```
+This specifies the Trade Federation test class to use to execute the test and
+passes in the package on the device to be executed and the test runner
+framework which is JUnit in this case.
+
+Look here for more information on [Test Module Configs](test-config.md)
+
+## JUnit4 features
+
+Using `android-support-test` library as test runner enables adoptation of new
+JUnit4 style test classes, and the sample gerrit change contains some very basic
+use of its features. See the example at
+[/platform_testing/tests/example/instrumentation/src/android/test/example/helloworld/HelloWorldTest.java](https://android.googlesource.com/platform/platform_testing/+/master/tests/example/instrumentation/src/android/test/example/helloworld/HelloWorldTest.java).
+
+While testing patterns are usually specific to component teams, there are some
+generally useful usage patterns.
+
+```java
+@RunWith(JUnit4.class)
+public class HelloWorldTest {
+```
+
+A significant difference in JUnit4 is that tests are no longer required to
+inherit from a common base test class; instead, you write tests in plain Java
+classes and use annotation to indicate certain test setup and constraints. In
+this example, we are instructing that this class should be run as a JUnit4 test.
+
+```java
+ @BeforeClass
+ public static void beforeClass() {
+ ...
+ @AfterClass
+ public static void afterClass() {
+ ...
+ @Before
+ public void before() {
+ ...
+ @After
+ public void after() {
+ ...
+ @Test
+ @SmallTest
+ public void testHelloWorld() {
+ ...
+```
+
+The `@Before` and `@After` annotations are used on methods by JUnit4 to perform
+pre test setup and post test teardown. Similarly, the `@BeforeClass` and
+`@AfterClass` annotations are used on methods by JUnit4 to perform setup before
+executing all tests in a test class, and teardown afterwards. Note that the
+class-scope setup and teardown methods must be static. As for the test methods,
+unlike in earlier version of JUnit, they no longer need to start the method name
+with `test`, instead, each of them must be annotated with `@Test`. As usual,
+test methods must be public, declare no return value, take no parameters, and
+may throw exceptions.
+
+**Important**: the test methods themselves are annotated with `@Test`
+annotation; and note that for tests to be executed via APCT, they must be
+annotated with test sizes: the example annotated method `testHelloWorld` as
+`@SmallTest`. The annotation may be applied at method scope, or class scope.
+
+## Accessing `instrumentation`
+
+Although not covered in the basic hello world example, it's fairly common for an
+Android test to require access `Instrumentation` instance: this is the core API
+interface that provides access to application contexts, activity lifecycle
+related test APIs and more.
+
+Because the JUnit4 tests no longer require a common base class, it's no longer
+necessary to obtain `Instrumentation` instance via
+`InstrumentationTestCase#getInstrumentation()`, instead, the new test runner
+manages it via [`InstrumentationRegistry`](https://developer.android.com/reference/android/support/test/InstrumentationRegistry.html)
+where contextual and environmental setup created by instrumentation framework is
+stored.
+
+To access the instance of `Instrumentation` class, simply call static method
+`getInstrumentation()` on `InstrumentationRegistry` class:
+
+```java
+Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation()
+```
+
+## Build and test locally
+
+For the most common use cases, employ
+[Atest](https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md).
+
+For more complex cases requiring heavier customization, follow the
+[instrumentation instructions](instrumentation.md).
diff --git a/en/compatibility/tests/development/instrumentation.md b/en/compatibility/tests/development/instrumentation.md
new file mode 100644
index 00000000..70439a7c
--- /dev/null
+++ b/en/compatibility/tests/development/instrumentation.md
@@ -0,0 +1,162 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Instrumentation Tests
+
+First read [Test your app](https://developer.android.com/studio/test/){: .external}
+on developer.android.com. Take note there are some differences in
+how instrumentation tests are used in platform testing.
+
+In summary, an instrumentation test provides a special test execution
+environment as launched via the `am instrument` command, where the targeted
+application process is restarted and initialized with basic application context,
+and an instrumentation thread is started inside the application process VM. Your
+test code starts execution on this instrumentation thread and is provided with
+an `Instrumentation` instance that provides access to the application context
+and APIs to manipulate the application process under test.
+
+
+## Key concepts
+
+* an instrumentation must be declared in an application package, with an
+ [`<instrumentation>`](https://developer.android.com/guide/topics/manifest/instrumentation-element.html)
+ tag nested under the `<manifest>` tag of the application package manifest.
+* an application package manifest may technically contain multiple
+ `<instrumentation>` tags, though it's not commonly used in this fashion.
+* each `<instrumentation>` must contain:
+ * an `android:name` attribute: it should be the name of a subclass of
+ [`Instrumentation`](https://developer.android.com/reference/android/app/Instrumentation.html)
+ that's included in the test application, which is typically the test
+ runner that's being used, e.g.:
+ `android.support.test.runner.AndroidJUnitRunner`
+ * an `android:targetPackage` attribute must be defined. Its value should
+ be set to the application package under test.
+
+## Summary of steps
+
+1. Below are common destinations for hermetic tests against framework services:
+
+ ```
+ frameworks/base/core/tests/coretests
+ frameworks/base/services/tests/servicestests
+ ```
+
+ If you are adding a brand new instrumentation module for your component, see
+
+ * [Self-Instrumenting Tests: A Complete Example](instr-self-e2e.md)
+ * [Instrumentation Targeting an Application: A Complete Example]
+ (instr-app-e2e.md)
+
+1. Following the existing convention if you are adding tests into one of the
+ locations above. If you are setting up a new test module, please follow the
+ setup of `AndroidManifest.xml` and `Android.mk` in one of the locations
+ above
+
+1. See
+ [frameworks/base/core/tests/coretests/](https://android.googlesource.com/platform/frameworks/base.git/+/master/core/tests/coretests/)
+ for an example.
+ Note these lines install extra apps:
+
+ ```
+ <option name="test-file-name" value="FrameworksCoreTests.apk" />
+ <option name="test-file-name" value="BstatsTestApp.apk" />
+ ```
+
+1. Do not forget to mark your test as `@SmallTest`, `@MediumTest` or
+ `@LargeTest`
+
+1. Build the test module with make, e.g.:
+
+ ```
+ make FrameworksCoreTests -j
+ ```
+
+1. Run the tests:
+ * The simplest solution is to use
+ [Atest](https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md){: .external}
+ like so:
+
+ ```
+ atest FrameworksCoreTests
+ ```
+ * Or for more complex tests, use the Trade Federation test harness:
+
+ ```
+ make tradefed-all -j
+ tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
+ ```
+
+1. If using Trade Fed, manually install and run the tests:
+ 1. Install the generated apk:
+
+ ```
+ adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
+ ```
+
+ Tip: you use `adb shell pm list instrumentation` to find the
+ instrumentations inside the apk just installed
+
+ 1. Run the tests with various options:
+
+ 1. all tests in the apk
+
+ ```
+ adb shell am instrument -w com.android.frameworks.coretests\
+ /android.support.test.runner.AndroidJUnitRunner
+ ```
+
+ 1. all tests under a specific Java package
+
+ ```
+ adb shell am instrument -w -e package android.animation \
+ com.android.frameworks.coretests\
+ /android.support.test.runner.AndroidJUnitRunner
+ ```
+
+ 1. all tests under a specific class
+
+ ```
+ adb shell am instrument -w -e class \
+ android.animation.AnimatorSetEventsTest \
+ com.android.frameworks.coretests\
+ /android.support.test.runner.AndroidJUnitRunner
+ ```
+
+ 1. a specific test method
+
+ ```
+ adb shell am instrument -w -e class \
+ android.animation.AnimatorSetEventsTest#testCancel \
+ com.android.frameworks.coretests\
+ /android.support.test.runner.AndroidJUnitRunner
+ ```
+
+Your test can make an explicit assertion on pass or fail using `JUnit` APIs; in
+addition, any uncaught exceptions will also cause a functional failure.
+
+To emit performance metrics, your test code can call
+[`Instrumentation#sendStatus`](http://developer.android.com/reference/android/app/Instrumentation.html#sendStatus\(int, android.os.Bundle\))
+to send out a list of key-value pairs. It's important to note that:
+
+1. metrics can be integer or floating point
+1. any non-numerical values will be discarded
+1. your test apk can be either functional tests or metrics tests, however
+ mixing both are not currently supported
diff --git a/en/compatibility/tests/development/jar.md b/en/compatibility/tests/development/jar.md
new file mode 100644
index 00000000..6ec60f47
--- /dev/null
+++ b/en/compatibility/tests/development/jar.md
@@ -0,0 +1,93 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# JAR (Java) Host Tests
+
+JAR host tests should be implemented to provide complete code coverage of your
+software. Follow the instructions to [Build local unit
+tests](https://developer.android.com/training/testing/unit-testing/local-unit-tests){: .external}.
+Write small unit tests to validate a specific function and nothing more.
+
+## Example
+
+The following Blueprint file provides a simple Hello World JAR host test example to
+copy and adapt to your needs:
+[platform_testing/tests/example/jarhosttest/Android.bp](https://android.googlesource.com/platform/platform_testing/+/master/tests/example/jarhosttest/Android.bp)
+
+This corresponds to the actual test code found at:
+[platform_testing/tests/example/jarhosttest/test/android/test/example/helloworld/HelloWorldTest.java](platform_testing/+/master/tests/example/jarhosttest/test/android/test/example/helloworld/HelloWorldTest.java)
+
+A snapshot of the Blueprint file is included here for convenience:
+
+ ```
+ java_test_host {
+ name: "HelloWorldHostTest",
+
+ test_suites: ["general-tests"],
+
+ srcs: ["test/**/*.java"],
+
+ static_libs: [
+ "junit",
+ "mockito",
+ ],
+}
+ ```
+
+Note the `java_host_test` declaration at the beginning indicates this is a JAR
+host test.
+
+## Settings
+
+The following settings garner explanation:
+
+ ```
+ name: "HelloWorldHostTest",
+ ```
+
+
+The `name` setting is required when the `java_test_host` module type is specified
+(at the start of the block). It gives a name to your module, and the resulting
+JAR will be named the same and with a `.jar` suffix, e.g. in this case, the
+resulting test JAR is named as `HelloWorldHostTest.jar`. In addition, this also
+defines a make target name for your module, so that you can use `make [options]
+<HelloWorldHostTest>` to build your test module and all its dependencies.
+
+
+```
+ test_suites: ["general-tests"],
+```
+
+The `test_suites` setting makes the test easily discoverable by the Trade
+Federation test harness. Other suites can be added here such as CTS so that this
+test may be shared.
+
+ ```
+ static_libs: [
+ "junit",
+ ],
+ ```
+
+The `static_libs` setting instructs the build system to incorporate the contents
+of the named modules into the resulting apk of current module. This means that
+each named module is expected to produce a `.jar` file, and its content will be
+used for resolving classpath references during compile time, as well as
+incorporated into the resulting apk.
diff --git a/en/compatibility/tests/development/metrics.md b/en/compatibility/tests/development/metrics.md
new file mode 100644
index 00000000..98eb3c8a
--- /dev/null
+++ b/en/compatibility/tests/development/metrics.md
@@ -0,0 +1,63 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Native Metric Tests
+
+Native metric tests are typically used for exercising hardware abstraction
+layers (HALs) or interacting directly with lower-level system services. To
+leverage continuous testing service, native metric tests should be built with
+the [google-benchmark](https://github.com/google/benchmark){: .external}
+framework.
+
+## Example
+
+See sample native test module setup at:
+[bionic/benchmarks/bionic-benchmarks](https://android.googlesource.com/platform/bionic/+/master/benchmarks/bionic_benchmarks.cpp)
+
+## Summary of steps
+
+1. Test module configuration file should use the `BUILD_NATIVE_BENCHMARK` build
+ rule so that google-benchmark dependencies are included automatically.
+1. Build the test module with make:
+
+ ```shell
+ make -j40 bionic-benchmarks
+ ```
+1. Automatic installation and run with the Trade Federation test harness:
+
+ ```
+ make tradefed-all -j
+ tradefed.sh run template/local_min --template:map test=bionic-benchmarks
+ ```
+
+1. Manually install and run like so:
+
+ 1. Push the generated test binary onto device:
+
+ ```
+ adb push ${OUT}/data/benchmarktest/bionic-benchmarks/bionic-benchmarks32 \
+ /data/benchmarktest/bionic-benchmarks/bionic-benchmarks32
+ ```
+ 1. Execute the test by invoking test binary on device:
+
+ ```
+ adb shell /data/benchmarktest/bionic-benchmarks/bionic-benchmarks32
+ ```
diff --git a/en/compatibility/tests/development/native-func-e2e.md b/en/compatibility/tests/development/native-func-e2e.md
new file mode 100644
index 00000000..7f143c3e
--- /dev/null
+++ b/en/compatibility/tests/development/native-func-e2e.md
@@ -0,0 +1,179 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Adding a New Native Test Example
+
+If you are new to Android platform development, you might find this complete
+example of adding a brand new native test from scratch useful to demonstrate the
+typical workflow involved. In addition, if you are also unfamiliar with the
+gtest framework for C++, please review the [gtest project
+site](https://github.com/google/googletest) for additional documentation.
+
+This guide uses the follow test to serve as an sample:
+
+[Hello World Native Test](https://android.googlesource.com/platform/platform_testing/+/master/tests/example/native/)
+
+It's recommended to browse through the code first to get a rough impression
+before proceeding.
+
+## Deciding on a source location
+
+Typically your team will already have an established pattern of places to check
+in code, and places to add tests. Most team owns a single git repository, or
+share one with other teams but have a dedicated sub directory that contains
+component source code.
+
+Assuming the root location for your component source is at `<component source
+root>`, most components have `src` and `tests` folders under it, and some
+additional files such as `Android.mk` (or broken up into additional `.bp`
+files).
+
+Since you are adding a brand new test, you'll probably need to create the
+`tests` directory next to your component `src`, and populate it with content.
+
+In some cases, your team might have further directory structures under `tests`
+due to the need to package different suites of tests into individual binaries.
+And in this case, you'll need to create a new sub directory under `tests`.
+
+To illustrate, here's a typical directory outline for components with a single
+`tests` folder:
+
+```
+\
+ <component source root>
+ \-- Android.bp (component makefile)
+ \-- AndroidTest.bp (test config file)
+ \-- src (component source)
+ | \-- foo.cpp
+ | \-- ...
+ \-- tests (test source root)
+ \-- Android.bp (test makefile)
+ \-- src (test source)
+ \-- foo_test.cpp
+ \-- ...
+```
+
+and here's a typical directory outline for components with multiple test source
+directories:
+
+```
+\
+ <component source root>
+ \-- Android.bp (component makefile)
+ \-- AndroidTest.bp (test config file)
+ \-- src (component source)
+ | \-- foo.cpp
+ | \-- ...
+ \-- tests (test source root)
+ \-- Android.bp (test makefile)
+ \-- testFoo (sub test source root)
+ | \-- Android.bp (sub test makefile)
+ | \-- src (sub test source)
+ | \-- test_foo.cpp
+ | \-- ...
+ \-- testBar
+ | \-- Android.bp
+ | \-- src
+ | \-- test_bar.cpp
+ | \-- ...
+ \-- ...
+```
+
+Regardless of the structure, you'll end up populating the `tests` directory or
+the newly created sub directory with files similar to what's in `native`
+directory in the sample gerrit change. The sections below will explain in
+further details of each file.
+
+## Source code
+
+See the [Hello World Native
+Test](https://android.googlesource.com/platform/platform_testing/+/master/tests/example/native/HelloWorldTest.cpp)
+for an example.
+
+Annotated source code is listed below:
+
+```c++
+#include <gtest/gtest.h>
+```
+
+Header file include for gtest. Note that the include file dependency is
+automatically resolved by using `BUILD_NATIVE_TEST` in the makefile
+
+```c++
+#include <stdio.h>
+
+TEST(HelloWorldTest, PrintHelloWorld) {
+ printf("Hello, World!");
+}
+```
+
+gtests are written by using `TEST` macro: the first parameter is the test case
+name, and the second is test name; together with test binary name, they form the
+hierarchy below when visualized in result dashboard:
+
+```
+<test binary 1>
+| \-- <test case 1>
+| | \-- <test 1>
+| | \-- <test 2>
+| | \-- ...
+| \-- <test case 2>
+| | \-- <test 1>
+| | \-- ...
+| \-- ...
+<test binary 2>
+|
+...
+```
+
+For more information on writing tests with gtest, see its documentation:
+
+* https://github.com/google/googletest/blob/master/googletest/docs/Primer.md
+
+## Simple configuration file
+
+Each new test module must have a configuration file to direct
+the build system with module metadata, compile-time dependencies and packaging
+instructions. In most cases, the Soong-based, Blueprint file option is
+sufficient. See [Simple Test Configuration](blueprints.md) for details.
+
+## Complex configuration file
+
+Important: The instructions in this section are needed only for CTS tests or those
+that require special setup, such as disabling Bluetooth or collecting sample data.
+All other cases can be covered through the
+[Simple Test Configuration](blueprints.md). See the
+[Complex Test Configuration](compatibility/tests/development/test-config) for
+more details applicable to this section.
+
+To use Trade Federation instead, write a test configuration
+file for Android's test harness, [Trade Federation](/devices/tech/test_infra/tradefed/).
+
+The test configuration can specify special device setup options and default
+arguments to supply the test class.
+
+## Build and test locally
+
+For the most common use cases, employ
+[Atest](https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md).
+
+For more complex cases requiring heavier customization, follow the
+[instrumentation instructions](instrumentation.md).
diff --git a/en/compatibility/tests/development/native.md b/en/compatibility/tests/development/native.md
new file mode 100644
index 00000000..cb798694
--- /dev/null
+++ b/en/compatibility/tests/development/native.md
@@ -0,0 +1,85 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Native Tests
+
+A native test for the platform typically accesses lower-level HALs or
+performs raw IPC against various system services. Therefore, the testing approach
+is usually tightly coupled with the service under test.
+
+Build native tests using the [gtest](https://github.com/google/googletest){: .external}
+framework. This is a prerequisite for integration with continuous testing
+infrastructure.
+
+## Examples
+
+Here are some examples of native tests in the platform source:
+
+* [frameworks/av/camera/tests](https://android.googlesource.com/platform/frameworks/av/+/master/camera/tests/)
+* [frameworks/native/libs/gui/tests](https://android.googlesource.com/platform/frameworks/native/+/master/libs/gui/tests/)
+
+## Summary of steps
+
+1. See sample native test module setup at:
+ [frameworks/base/libs/hwui/tests/unit/](https://android.googlesource.com/platform/frameworks/base/+/master/libs/hwui/tests/unit/)
+1. Test module configuation should use the `BUILD_NATIVE_TEST` build rule so
+ gtest dependencies are included automatically
+1. Write a test configuration. See the
+ [simple](/compatibility/tests/development/blueprints) and
+ [complex](/compatibility/tests/development/test-config) options.
+1. Build the test module with `mmm` or `mma` (depends on if it's an
+incremental or full build), e.g.:
+
+ ```shell
+ make hwui_unit_tests -j
+ ```
+1. Use
+ [Atest](https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md)
+ to run the test locally:
+
+ ```
+ atest hwui_unit_tests
+ ```
+
+1. Run the test with the Trade Federation test harness:
+
+ ```
+ make tradefed-all -j
+ tradefed.sh run template/local_min --template:map test=hwui_unit_tests
+ ```
+1. Manually install and run:
+ 1. Push the generated test binary onto device:
+
+ ```shell
+ adb push ${OUT}/data/nativetest/hwui_unit_tests/hwui_unit_tests \
+ /data/nativetest/hwui_unit_tests/hwui_unit_tests
+ ```
+ 1. Execute the test by invoking test binary on device:
+
+ ```shell
+ adb shell /data/nativetest/hwui_unit_tests/hwui_unit_tests
+ ```
+
+ This launches the native test. You can also add the `--help` parameter to your test
+ binary to find out more about the different ways to customize test execution.
+ Finally, see the [gtest advanced
+ guide](https://github.com/google/googletest/blob/master/googletest/docs/advanced.md)
+ for more parameters and their use.
diff --git a/en/compatibility/tests/development/test-config.md b/en/compatibility/tests/development/test-config.md
new file mode 100644
index 00000000..2e631da0
--- /dev/null
+++ b/en/compatibility/tests/development/test-config.md
@@ -0,0 +1,185 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Complex Test Configuration
+
+Important: The instructions on this page are needed only for Android
+[Compatibility Test Suite](compatibility/cts) (CTS) tests or those that require
+special setup, such as disabling Bluetooth or collecting sample data. All other
+cases can be covered by the Soong-based [Simple Test
+Configuration](blueprints.md) using Blueprints that automate much of the
+configuration previously conducted manually.
+
+Some test modules may require customized setup and tear down steps that cannot
+be performed within the test case itself. Typical examples may include:
+
+* install other apks (in addition to the test apk)
+* push some files to the device
+* run commands (e.g. adb shell pm ...)
+
+In the past, component teams usually resort to writing a host side test to
+perform such tasks, which requires understanding of Trade Federation harness
+and typically increases the complexity of a test module .
+
+Borrowing from CTS, we introduced the concept of test module config to support
+such tasks, the common tasks list above can be achieved by just a few lines of
+config. For maximum flexibility, you can even implement your own target
+preparer, as defined by [ITargetPreparer]
+(/reference/com/android/tradefed/targetprep/ITargetPreparer.html)
+or [ITargetCleaner]
+(/reference/com/android/tradefed/targetprep/ITargetCleaner.html),
+and configure them to use in your own test module config.
+
+A test module config for a test module is a required XML file added to the top
+level module source folder, named ‘AndroidTest.xml’. The XML follows the format
+of a configuration file used by Trade Federation test automation harness.
+Currently the main tags handled via the test module configs are the “target_preparer” and
+"test" tags.
+
+## Target preparers
+A “target_preparer” tag, as the name suggests, defines a target preparer
+(see [ITargetPreparer](/reference/com/android/tradefed/targetprep/ITargetPreparer.html))
+that offers a setup method, which gets called before the test module is executed
+for testing; and if the class referenced in the “target_preparer” tag also
+implements
+[ITargetCleaner](/reference/com/android/tradefed/targetprep/ITargetCleaner.html),
+its teardown method will be invoked after the test module has finished.
+
+To use the built-in common module config, add a new file ‘AndroidTest.xml’ at
+the top level folder for your test module, and populate it with the following
+content:
+
+```xml
+<?xml version="1.0" encoding="utf-8"?>
+<!-- [insert standard AOSP copyright here] -->
+<configuration description="Test module config for Foo">
+<!-- insert options here -->
+</configuration>
+```
+
+As an example, we can add the following option tags (at the “insert” comment
+above):
+
+```xml
+ <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+ <option name="run-command" value="settings put secure accessibility_enabled 1" />
+ <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
+ </target_preparer>
+```
+
+The options will configure the test harness to:
+
+1. before test module is invoked, execute shell command “settings put secure
+ accessibility_enabled 1” on device
+2. after test module is finished, execute shell command “settings put secure
+ accessibility_enabled 0”
+
+In this particular example, accessibility is enabled/disabled before/after the
+test module execution, respectively. With a simple example demonstrated, it’s
+necessary to cover more details on how the “option” tag is used. As shown above,
+the tag can have two attributes: name, value. The name attribute indicated the
+name of the option, and is further broken down into two parts separated by a
+colon: short name for the preparer, and the actual option name offered by the
+preparer.
+
+The exact purpose of value field is dependent on how preparer defined
+the option: it can be a string, a number, a boolean, or even a file path etc. In
+the example above, name “run-command:run-command” means that we are setting
+value for the option “run-command” defined by a target preparer with short name
+“run-command”; and name “run-command:teardown-command” means that we are setting
+value for the option “teardown-command” also defined by the same target preparer
+with short name “run-command”. Here's a summary of the three common target
+preparers:
+
+* class name: [PushFilePreparer](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/targetprep/PushFilePreparer.java)
+
+ * **short name**: push-file
+ * **function**: pushes arbitrary files under test case folder into
+ destination on device
+ * **notes**:
+ * this preparer can push from folder to folder, or file to file; that
+ is, you cannot push a file under a folder on device: you must
+ specify the destination filename under that folder as well
+ * **options**:
+ * **push:** A push-spec, formatted as
+ '`/path/to/srcfile.txt->/path/to/destfile.txt`' or
+ '`/path/to/srcfile.txt->/path/to/destdir/`'. May be repeated
+ This path may be relative to the test module directory or the out
+ directory itself.
+ * **post-push: **A command to run on the device (with \``adb shell
+ <your command>`\`) after all pushes have been attempted. Typical use
+ case would be using chmod for permissions
+
+* class name: [InstallApkSetup](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/targetprep/InstallApkSetup.java)
+
+ * **short name:**install-apk
+ * **function:** pushes arbitrary apk files under into destination on
+ device
+ * **options:**
+ * **test-file-name:** the name of the apk to be installed on to
+ device.
+ * **install-arg:** Additional arguments to be passed to the pm install
+ command, including leading dash, e.g. “-d". May be repeated
+
+* class name: [RunCommandTargetPreparer](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/targetprep/RunCommandTargetPreparer.java)
+
+ * **short name:** run-command
+ * **function:** executes arbitrary shell commands before or after test
+ module execution
+ * **options:**
+ * **run-command:**adb shell command to run. May be repeated
+ * **teardown-command:**adb shell command to run during teardown phase.
+ May be repeated
+
+## Test class
+A test class is the Trade Federation class to use to execute the test.
+
+```xml
+<test class="com.android.tradefed.testtype.AndroidJUnitTest">
+ <option name="package" value="android.test.example.helloworld"/>
+ <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
+</test>
+```
+
+Here are three common test classes:
+
+* class name: [GTest](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/testtype/GTest.java)
+
+ * **short name:** gtest
+ * **function:** A Test that runs a native test package on given device.
+ * **options:**
+ * **native-test-device-path:**The path on the device where native tests are located.
+
+* class name: [InstrumentationTest](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/testtype/InstrumentationTest.java)
+
+ * **short name:** instrumentation
+ * **function:** A Test that runs an instrumentation test package on given device
+ * **options:**
+ * **package:**The manifest package name of the Android test application to run.
+ * **class:**The test class name to run.
+ * **method:**The test method name to run.
+
+* class name: [AndroidJUnitTest](https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/testtype/AndroidJUnitTest.java)
+
+ * **function:** A Test that runs an instrumentation test package on given
+ device using the android.support.test.runner.AndroidJUnitRunner
+ This is the main way to execute an instrumentation test.
+
diff --git a/en/compatibility/tests/index.md b/en/compatibility/tests/index.md
new file mode 100644
index 00000000..ac6bbe60
--- /dev/null
+++ b/en/compatibility/tests/index.md
@@ -0,0 +1,122 @@
+Project: /_project.yaml
+Book: /_book.yaml
+
+{% include "_versions.html" %}
+
+<!--
+ 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.
+-->
+
+# Android Platform Testing
+
+This content is geared toward Android platform developers.
+Before understanding how testing is done on the Android platform,
+please refer to the [Android platform architecture](/devices/architecture)
+for an overview.
+
+## What's new
+
+### Test development workflow
+
+The [Test Development Workflow](/compatibility/tests/development) subsection now
+contains introductory materials including end-to-end examples for all primary
+test types.
+
+### Simple test configuration
+
+The [Soong build system](https://android.googlesource.com/platform/build/soong/)
+was introduced in Android 8.0 (Oreo) with support for `android_test` arriving in
+Android Q, now available in the Android Open Source Project (AOSP) master
+branch. Soong's Blueprint-based configuration is far simpler than the previous
+Make solution.
+
+### Atest
+
+[Atest](https://android.googlesource.com/platform/tools/tradefederation/+/master/atest/README.md){: .external}
+is a command line tool that allows users to build, install and run Android tests
+locally. It is the recommended standard for initial testing of your feature.
+
+## What and how to test
+
+A platform test typically interacts with one or more of the Android system
+services, or Hardware abstraction layer (HAL) layers, exercises the
+functionalities of the subject under test, and asserts correctness of the
+testing outcome.
+
+As such, a platform test may:
+
+1. exercise framework APIs via application framework; specific APIs being
+ exercised may include:
+ * public APIs intended for third-party applications
+ * hidden APIs intended for privileged applications, namely system APIs
+ * private APIs (@hide, or protected, package private)
+1. invoke Android system services via raw binder/IPC proxies directly
+1. interact directly with HALs via low-level APIs or IPC interfaces
+
+Types 1 and 2 are typically written as [instrumentation
+tests](/compatibility/tests/development/instrumentation), while
+type 3 are usually written as [native
+tests](/compatibility/tests/development/native) using the
+[gtest](https://github.com/google/googletest){: .external} framework.
+
+To learn more, see our end-to-end examples:
+
+* [instrumentation targeting an application](/compatibility/tests/development/instr-app-e2e.md)
+* [self-instrumentation](/compatibility/tests/development/instr-self-e2e.md)
+* [native test](/compatibility/tests/development/native-func-e2e.md)
+
+Become familiar with these tools, as they are intrinsic to testing in Android.
+
+## Compatibility Test Suite (CTS)
+
+[Android Compatibility Test Suite](/compatibility/cts/)
+is a suite of various types of tests, used to ensure compatibility of
+Android framework implementations across OEM partners, and across platform
+releases. **The suite also includes instrumentation tests and native tests
+(also using gtest framework).**
+
+CTS and platform tests are not mutually exclusive, and here are some general
+guidelines:
+
+* if a test is asserting correctness of framework API functions/behaviors, and
+ it should be enforced across OEM partners, it should be in CTS
+* if a test is intended to catch regressions during platform development
+ cycle, and may require privileged permission to carry out, and may be
+ dependent on implementation details (as released in AOSP), it should only be
+ platform tests
+
+## Vendor Test Suite (VTS)
+
+The [Vendor Test Suite](/compatibility/vts/) (VTS) automates HAL and OS kernel
+testing. To use VTS to test an Android native system implementation, set up a
+testing environment then test a patch using a VTS plan.
+
+## Trade Federation Testing Infrastructure
+
+[Trade Federation](/devices/tech/test_infra/tradefed/) (tradefed or TF for
+short) is a continuous test framework designed for running tests on Android
+devices. TF can run functional tests locally, at your desk, within your platform
+checkout. There are two required files to run a test in TF, a java test source
+and an XML config. See
+[RebootTest.java](https://android.googlesource.com/platform/tools/tradefederation/contrib/+/master/src/com/android/example/RebootTest.java){: .external}
+and
+[reboot.xml](https://android.googlesource.com/platform/tools/tradefederation/contrib/+/master/res/config/example/reboot.xml){: .external}
+for examples.
+
+## Debugging
+
+The [Debugging](/devices/tech/debug/) section summarizes useful tools and related
+commands for debugging, tracing, and profiling native Android platform code when
+developing platform-level features.
diff --git a/en/compatibility/vts/codelab-video.html b/en/compatibility/vts/codelab-video.html
new file mode 100644
index 00000000..0144a45e
--- /dev/null
+++ b/en/compatibility/vts/codelab-video.html
@@ -0,0 +1,608 @@
+<html devsite="">
+<head>
+ <title>Video and Codelab Tutorials</title>
+ <meta name="project_path" value="/_project.yaml">
+ <meta name="book_path" value="/_book.yaml">
+</head>
+
+<body>
+ {% include "_versions.html" %} <!--
+ 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>The Vendor Test Suite (VTS) codelabs and video tutorials provide details
+ on running and developing VTS and CTS-on-GSI on Android {{
+ androidPVersionNumber }} and Android 8.1.</p>
+
+ <h2> Videos and Codelabs for Android 9</h2>
+
+ <table>
+ <tr>
+ <th>Subject</th>
+
+ <th>Topic</th>
+
+ <th>Videos</th>
+
+ <th>Codelabs/SAC</th>
+ </tr>
+
+ <tr>
+ <th>Prologue</th>
+
+ <td><strong>Overview</strong>
+ </td>
+
+ <td>Android Vendor Test Suite (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#0">Introduction</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="2">User Manual</th>
+
+ <td><strong>How to Run VTS and CTS-on-GSI</strong>
+ </td>
+
+ <td>How to Run VTS and CTS-on-GSI (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#1">Build
+ and Run a VTS Test Plan</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>How to Flash GSI</strong>
+ </td>
+
+ <td>How to Flash General System Image (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#3">Prepare
+ a device with GSI for CTS-on-GSI test plan</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="3">Vendor Test Framework (VTF)</th>
+
+ <td><strong>Test Framework</strong>
+ </td>
+
+ <td>Test Framework Changes (Coming Soon)</td>
+
+ <td><a href=
+ "https://source.android.com/compatibility/vts/shell-commands">Test
+ Framework on SAC</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Test Time Optimization</strong>
+ </td>
+
+ <td>Test Time Optimization (Coming Soon)</td>
+
+ <td>--</td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Multi-Device Testing</strong>
+ </td>
+
+ <td>Multi-Device Tests (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#12">Write a
+ Multi-Device Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="2">Basic Test Development</th>
+
+ <td><strong>VTS Tests</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=DVanlGPV0wA&amp;index=4&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ VTS Tests</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#2">Write
+ a VTS Test (Getting Started)</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Test Templates</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=O4LuIBzB2y8&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=8">
+ Test Templates</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#3">Choose
+ a Template and Write a Customized VTS Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="4">Develop and Understand HAL Tests</th>
+
+ <td><strong>Conditional Tests</strong>
+ </td>
+
+ <td>Conditional Tests (Coming Soon)</td>
+
+ <td>--</td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Service Name Aware Testing</strong>
+ </td>
+
+ <td>Service name aware HAL (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#5">Choose a
+ Template and Write a Customized VTS Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>HAL Extension Tests</strong>
+ </td>
+
+ <td>HAL Extension Test (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#6">Write a
+ VTS HAL Extension Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Framework Backward Compatibility</strong>
+ </td>
+
+ <td>Android Framework Backward Compatibility (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#7">Write a
+ HAL adapter test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="2">Other Interface Tests</th>
+
+ <td><strong>Kernel Testing</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=qWxNFhMM0Lc&amp;index=5&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ Kernel Testing</a>
+ </td>
+
+ <td>--</td>
+ </tr>
+
+
+ <tr>
+ <td><strong>VNDK Tests</strong>
+ </td>
+
+ <td>--</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#9">Maintain
+ VNDK ABI Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="2">Non-functional Tests</th>
+
+ <td><strong>Performance Profiling</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=F41dHKYPoic&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=6">
+ Performance Testing</a>
+ </td>
+
+ <td>
+ <a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#5">Write
+ a VTS Performance Profiling Test</a>
+
+ <p><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#4">Measure
+ VINTF Performance Using VTS</a>
+ </p>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Fuzzing</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=AkQcNb0Mf94&amp;index=10&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ HIDL and HAL Interface Fuzzing</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#7">Write
+ a VTS HIDL HAL Interface Fuzz Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="4">Vendor Test Infrastructure (VTI)</th>
+
+ <td><strong>Code Coverage</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=tJprsmiTn4g&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=9">
+ Coverage Instrumentation and Collection in VTS</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#6">Measure
+ Native Code Coverage Using VTS</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Record-and-Replay Tests</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=pwbFCKaldNU&amp;index=11&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ Record-and-Replay Testing</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#8">Write
+ a Record-and-Replay Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>End-to-End Automation</strong>
+ </td>
+
+ <td>Automatic Measurement Infrastructure (Coming Soon)</td>
+
+ <td>--</td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Dashboard</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=3VwSCYUv2Eo&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=3">
+ Continuous Integration Dashboard</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#10">Build
+ a VTS Dashboard and Notification Service</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="2">Epilogue</th>
+
+ <td><strong>Partner Engineering</strong>
+ </td>
+
+ <td>Treble Readiness (Coming Soon)</td>
+
+ <td>--</td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Conclusion</strong>
+ </td>
+
+ <td>Call for Contributions (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#14">Report
+ Issues</a>
+ </td>
+ </tr>
+ </table>
+
+ <h2> Videos and Codelabs for Android 8.1</h2>
+
+
+ <table>
+ <tr>
+ <th>Subject</th>
+
+ <th>Topic</th>
+
+ <th>Videos</th>
+
+ <th>Codelabs/SAC</th>
+ </tr>
+
+ <tr>
+ <th>Prologue</th>
+
+ <td><strong>Overview</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=7BX7oSHc7nk&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ Android Vendor Test Suite (VTS) Products</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#0">Introduction</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="2">User Manual</th>
+
+ <td><strong>How to Run VTS and CTS-on-GSI</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=BOAxwX8khlg&amp;index=2&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ How To Run VTS</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#1">Build
+ and Run a VTS Test Plan</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>How to Flash GSI</strong>
+ </td>
+
+ <td>How to Flash General System Image (Coming Soon)</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts/#3">Prepare
+ a device with GSI for CTS-on-GSI test plan</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th>Vendor Test Framework (VTF)</th>
+
+ <td><strong>Test Framework</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=H6sgKtvyprA&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=7">
+ VTS Test Framework</a>
+ </td>
+
+ <td><a href=
+ "https://source.android.com/compatibility/vts/shell-commands">Test
+ Framework on SAC</a>
+ </td>
+ </tr>
+
+ <tr>
+ <th rowspan="2">Basic Test Development</th>
+
+ <td><strong>VTS Tests</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=DVanlGPV0wA&amp;index=4&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ VTS Tests</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#2">Write
+ a VTS Test (Getting Started)</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Test Templates</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=O4LuIBzB2y8&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=8">
+ Test Templates</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#3">Choose
+ a Template and Write a Customized VTS Test</a>
+ </td>
+ </tr>
+
+ <tr>
+ <th rowspan="2">Other Interface Tests</th>
+
+ <td><strong>Kernel Testing</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=qWxNFhMM0Lc&amp;index=5&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ Kernel Testing</a>
+ </td>
+
+ <td>--</td>
+ </tr>
+
+
+ <tr>
+ <td><strong>VNDK Tests</strong>
+ </td>
+
+ <td>--</td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#9">Maintain
+ VNDK ABI Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="2">Non-functional Tests</th>
+
+ <td><strong>Performance Profiling</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=F41dHKYPoic&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=6">
+ Performance Testing</a>
+ </td>
+
+ <td>
+ <a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#5">Write
+ a VTS Performance Profiling Test</a>
+
+ <p><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#4">Measure
+ VINTF Performance Using VTS</a>
+ </p>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Fuzzing</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=AkQcNb0Mf94&amp;index=10&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ HIDL and HAL Interface Fuzzing</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#7">Write
+ a VTS HIDL HAL Interface Fuzz Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th rowspan="3">Vendor Test Infrastructure (VTI)</th>
+
+ <td><strong>Code Coverage</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=tJprsmiTn4g&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=9">
+ Coverage Instrumentation and Collection in VTS</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#6">Measure
+ Native Code Coverage Using VTS</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Record-and-Replay Tests</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=pwbFCKaldNU&amp;index=11&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ Record-and-Replay Testing</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#8">Write
+ a Record-and-Replay Test</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><strong>Dashboard</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=3VwSCYUv2Eo&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva&amp;index=3">
+ Continuous Integration Dashboard</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#10">Build
+ a VTS Dashboard and Notification Service</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <th>Epilogue</th>
+ <td><strong>Conclusion</strong>
+ </td>
+
+ <td><a href=
+ "https://www.youtube.com/watch?v=-ydHIqD8-o4&amp;index=12&amp;list=PLWz5rJ2EKKc9JOMtoWWMJHFHgvXDoThva">
+ Future Plans</a>
+ </td>
+
+ <td><a href=
+ "https://codelabs.developers.google.com/codelabs/android-vts-8/#11">Report
+ Issues</a>
+ </td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/en/compatibility/vts/index.html b/en/compatibility/vts/index.html
index 12575b3d..982dbed9 100644
--- a/en/compatibility/vts/index.html
+++ b/en/compatibility/vts/index.html
@@ -31,6 +31,9 @@
</p>
<ul>
+ <li><a href="/compatibility/vts/codelab-video">Codelab and Video Tutorials</a>.
+ Describes the videos and codelabs on running and developing VTS and CTS-on-GSI on Android {{
+ androidPVersionNumber }} and Android 8.1.</li>
<li><a href="/compatibility/vts/systems">Systems Testing with VTS</a>.
Describes how to use VTS to test an Android native system implementation, set
up a testing environment, then test a patch using a VTS plan.</li>
diff --git a/en/devices/architecture/hidl-java/index.html b/en/devices/architecture/hidl-java/index.html
index d56fd1cc..f98d1b64 100644
--- a/en/devices/architecture/hidl-java/index.html
+++ b/en/devices/architecture/hidl-java/index.html
@@ -72,6 +72,8 @@ IFoo server = IFoo.getService(true /* retry */); // throws NoSuchElementExceptio
IFoo anotherServer = IFoo.getService("second_impl", true /* retry */);
server.doSomething(&hellip;);
</pre>
+<p class=caution><strong>Warning</strong>: Java <code>getService</code> with no arguments will not
+wait for the service to start.</p>
</li>
</ol>
diff --git a/en/devices/architecture/vintf/objects.html b/en/devices/architecture/vintf/objects.html
index a5e34a2c..825b20d9 100644
--- a/en/devices/architecture/vintf/objects.html
+++ b/en/devices/architecture/vintf/objects.html
@@ -4,6 +4,7 @@
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
+ {% include "_versions.html" %}
<body>
<!--
Copyright 2017 The Android Open Source Project
@@ -30,18 +31,54 @@ on the schema, see <a href="#manifest-file-schema">Manifest file schema</a>).
<h2 id="device-manifest-file">Device manifest</h2>
<p>The Device manifest (provided by the device) consists of the vendor manifest
-and the ODM manifest:</p>
+and the ODM manifest.</p>
<ul>
<li>The vendor manifest specifies HALs, VNDK versions, etc. common to an SoC. It
is recommended to be placed in the Android source tree at
-<code>device/${VENDOR}/${DEVICE}/manifest.xml</code>, but multiple fragment
+<code>device/<var>VENDOR</var>/<var>DEVICE</var>/manifest.xml</code>, but multiple fragment
files can be used. For details, see
<a href="/devices/architecture/vintf/resources.html#manifest-fragments">Generate
DM from fragments</a>.
</li>
-<li>The ODM manifest overrides the vendor manifest and lists HALs specific to
-the product.</li>
+<li>The ODM manifest lists HALs specific to the product. VINTF Object loads the ODM manifest as
+ follows:
+ <ol>
+ <li>If <code><var>SKU</var></code> is defined (where <code><var>SKU</var></code> is the value of
+ the property <code>ro.boot.product.hardware.sku</code>),
+ <code>/odm/etc/vintf/manifest_<var>SKU</var>.xml</code>
+ </li>
+ <li><code>/odm/etc/vintf/manifest.xml</code></li>
+ <li>If <code><var>SKU</var></code> is defined,
+ <code>/odm/etc/manifest_<var>SKU</var>.xml</code></li>
+ <li><code>/odm/etc/manifest.xml</code></li>
+ </ol>
+</li>
+<li>VINTF Object loads the device manifest as follows:
+ <ol>
+ <li>If <code>/vendor/etc/vintf/manifest.xml</code> exists, combine the following:
+ <ol>
+ <li><code>/vendor/etc/vintf/manifest.xml</code></li>
+ <li>optional vendor manifest fragments</li>
+ <li>optional ODM manifest
+ <li>optional ODM manifest fragments</li>
+ </ol>
+ <li>If ODM manifest exists, combine ODM manifest with optional ODM manifest fragments.</li>
+ <li><code>/vendor/manfiest.xml</code> (legacy, no fragments)</li>
+ </ol>
+Note that:
+ <ul>
+ <li>On legacy devices, the legacy vendor manifest and ODM manifest are used. The
+ ODM manifest may completely override the legacy vendor manifest.</li>
+ <li>On devices launched with Android {{ androidPVersionNumber }}, the ODM manifest is combined
+ with vendor manifest.</li>
+ <li>When combining a list of manifests, manifests that appear later in the list may override
+ tags in manifests that appear earlier in the list, provided that the tags in the later
+ manifest has attribute <code>override="true"</code>. For example, ODM manifest may override
+ some <code>&lt;hal></code> tags from vendor manifest. See documentation for attribute
+ <code>override</code> below.</li>
+ </ul>
+</li>
</ul>
<p>This setup enables multiple products with the same board to share the same
@@ -120,6 +157,7 @@ specify product-specific HALs).</p>
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!-- Comments, Legal notices, etc. here -->
&lt;manifest version="1.0" type="device">
+ &lt;!-- camera 3.4 in vendor manifest is ignored -->
&lt;hal override="true">
&lt;name>android.hardware.camera&lt;/name>
&lt;transport>hwbinder&lt;/transport>
@@ -129,6 +167,7 @@ specify product-specific HALs).</p>
&lt;instance>legacy/0&lt;/instance>
&lt;/interface>
&lt;/hal>
+ &lt;!-- NFC is disabled -->
&lt;hal override="true">
&lt;name>android.hardware.nfc&lt;/name>
&lt;transport>hwbinder&lt;/transport>
diff --git a/en/devices/audio/debugging.html b/en/devices/audio/debugging.html
index c2b7cd73..26f77314 100644
--- a/en/devices/audio/debugging.html
+++ b/en/devices/audio/debugging.html
@@ -45,11 +45,11 @@ done debugging; the tee sink should not be left enabled in production builds.
</p>
<p>
-The instructions in the remainder of this section are for Android 5.x and 6.x.
-For Android 7.x, replace <code>/data/misc/media</code> with
-<code>/data/misc/audioserver</code>.
-Additionally, you must use a userdebug or eng build.
-If you use a userdebug build, then disable verity with:</p>
+ The instructions in this section are for Android 7.x and higher. For Android
+ 5.x and 6.x, replace <code>/data/misc/audioserver</code> with
+ <code>/data/misc/media</code>. Additionally, you must use a userdebug or
+ eng build. If you use a userdebug build, then disable verity with:
+</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb root &amp;&amp; adb disable-verity &amp;&amp; adb reboot
@@ -74,7 +74,7 @@ adb root &amp;&amp; adb disable-verity &amp;&amp; adb reboot
<br />Confirm that the output is: <code>[ro.debuggable]: [1]</code>
</li>
<li><code class="devsite-terminal">adb shell</code></li>
-<li><code class="devsite-terminal">ls -ld /data/misc/media</code>
+<li><code class="devsite-terminal">ls -ld /data/misc/audioserver</code>
<br />
<p>
Confirm that the output is:
@@ -86,8 +86,8 @@ drwx------ media media ... media
If the directory does not exist, create it as follows:
</p>
<pre class="devsite-click-to-copy">
-<code class="devsite-terminal">mkdir /data/misc/media</code>
-<code class="devsite-terminal">chown media:media /data/misc/media</code>
+<code class="devsite-terminal">mkdir /data/misc/audioserver</code>
+<code class="devsite-terminal">chown media:media /data/misc/audioserver</code>
</pre>
</li>
<li><code class="devsite-terminal">echo af.tee=# &gt; /data/local.prop</code>
@@ -122,13 +122,13 @@ but you can get similar results using "4."
<li>Run your audio test.</li>
<li><code class="devsite-terminal">adb shell dumpsys media.audio_flinger</code></li>
<li>Look for a line in <code>dumpsys</code> output such as this:<br />
-<code>tee copied to /data/misc/media/20131010101147_2.wav</code>
+<code>tee copied to /data/misc/audioserver/20131010101147_2.wav</code>
<br />This is a PCM .wav file.
</li>
-<li>Then <code>adb pull</code> any <code>/data/misc/media/*.wav</code> files of interest;
+<li>Then <code>adb pull</code> any <code>/data/misc/audioserver/*.wav</code> files of interest;
note that track-specific dump filenames do not appear in the
<code>dumpsys</code> output,
-but are still saved to <code>/data/misc/media</code> upon track closure.
+but are still saved to <code>/data/misc/audioserver</code> upon track closure.
</li>
<li>Review the dump files for privacy concerns before sharing with others.</li>
</ol>
@@ -168,7 +168,7 @@ to the device's <code>/system/lib</code>.
</li>
<li><code class="devsite-terminal">adb shell</code></li>
<li><code class="devsite-terminal">rm /data/local.prop</code></li>
-<li><code class="devsite-terminal">rm /data/misc/media/*.wav</code></li>
+<li><code class="devsite-terminal">rm /data/misc/audioserver/*.wav</code></li>
<li><code class="devsite-terminal">reboot</code></li>
</ol>
diff --git a/en/devices/bluetooth/asha.html b/en/devices/bluetooth/asha.html
index f6a6c193..d3c879d7 100644
--- a/en/devices/bluetooth/asha.html
+++ b/en/devices/bluetooth/asha.html
@@ -34,7 +34,7 @@
The design of CoC references the
<a href="https://www.bluetooth.com/specifications/bluetooth-core-specification">Bluetooth Core Specification Version 5</a>
(BT). To stay aligned with the core specifications, all multi-byte
- values on this page should be read as little-endian.
+ values on this page shall be read as little-endian.
</p>
<h2 id="terminology">Terminology</h2>
@@ -85,17 +85,16 @@
</aside>
<p>
- When pairing and connecting hearing devices, the central should:
+ When pairing and connecting hearing devices, the central shall:
</p>
<ul>
<li>
Keep track of the more recent left and right peripherals paired.
- Those two peripherals should be considered the audio sink.
</li>
<li>
Assume the peripherals are in use if a valid pairing exists. The
- central should attempt to connect or reconnect with the paired
+ central shall attempt to connect or reconnect with the paired
device when the connection is lost.
</li>
<li>
@@ -113,34 +112,39 @@
<p>
To properly implement CoC for a good user experience, the Bluetooth
- systems in the central and peripheral devices should:
+ systems in the central and peripheral devices shall:
</p>
<ul>
<li>
- implement a compliant BT 4.2 or higher controller
+ implement a compliant BT 4.2 or higher controller.
</li>
<li>
- support at least 2 simultaneous LE links with parameters as
+ have the central support at least 2 simultaneous LE links with parameters as
+ described in <a href="#audio-packet-format-and-timing">Audio packet
+ format and timing</a>.
+ </li>
+ <li>
+ have the peripheral support at least 1 LE link with the parameters
described in <a href="#audio-packet-format-and-timing">Audio packet
format and timing</a>.
</li>
<li>
have an LE credit based flow control [BT Vol 3, Part A, Sec 10.1].
- Devices should support an MTU and MPS size of at least 240 bytes on
+ Devices shall support an MTU and MPS size of at least 241 bytes on
CoC and be able to buffer up to 8 packets.
</li>
<li>
have an LE data length extension [BT Vol 6, Part B, Sec 5.1.9] with
- a payload of at least 87 bytes. It is recommended that the data
- length is at least 250 bytes.
+ a payload of at least 167 bytes. For peripherals that support the
+ codec G.722 @ 24 kHz, the length is at least 247 bytes.
</li>
<li>
have the central device support the HCI LE Connection Update Command
and comply with the non-zero minimum_CE_Length parameter.
</li>
<li>
- maintain the data throughput for two LE CoC connections to two
+ have the central maintain the data throughput for two LE CoC connections to two
different peripherals with the connection intervals and payload
sizes in <a href="#audio-packet-format-and-timing">Audio packet
format and timing</a>.
@@ -156,11 +160,11 @@
</ul>
<p>
- The peripheral and central may implement 2 Mbit PHY as specified in
- BT 5. The central should support audio links up to 64 kbit/s on both 1
- Mbit and 2 Mbit PHY but can choose to limit support for links
- requiring more than 64 kbit/s to the 2 Mbit PHY in order to improve
- coexistence with other 2.4 GHz devices. The BLE long range PHY should
+ The peripheral and central may implement 2M PHY as specified in
+ BT 5. The central shall support audio links up to 64 kbit/s on both 1M
+ and 2M PHY but can choose to limit support for links
+ requiring more than 64 kbit/s to the 2M PHY in order to improve
+ coexistence with other 2.4 GHz devices. The BLE long range PHY shall
not be used.
</p>
@@ -172,8 +176,8 @@
<h2 id="asha-gatt-services">ASHA GATT services</h2>
<p>
- A peripheral should implement the Audio Streaming for Hearing Aid
- (ASHA) GATT server service described below. The peripheral should
+ A peripheral shall implement the Audio Streaming for Hearing Aid
+ (ASHA) GATT server service described below. The peripheral shall
advertise this service when in general discoverable mode to let the
central recognize an audio sink. Any LE audio streaming operations
shall require encryption. The BLE audio streaming consists of the
@@ -215,16 +219,16 @@
<td>Volume</td>
<td>Write without Response</td>
<td>
- Byte between -128 and 0 indicating volume in dB. -128 should be
+ Byte between -128 and 0 indicating volume in dB. -128 shall be
interpreted as mute. 0 dB with a rail-to-rail sine tone streamed
- should represent a 100 dBSPL input equivalent on the hearing
- instrument. The central should stream in nominal full scale and
+ shall represent a 100 dBSPL input equivalent on the hearing
+ instrument. The central shall stream in nominal full scale and
use this variable to set the desired presentation level in the
peripheral.
</td>
</tr>
<tr>
- <td>LE_PSM</td>
+ <td>LE_PSM_OUT</td>
<td>Read</td>
<td>
PSM to use for connecting the audio channel. To be picked from the
@@ -259,13 +263,13 @@
<td><code>{00e4ca9e-ab14-41e4-8823-f9e70c7e91df}</code></td>
</tr>
<tr>
- <td>LE_PSM</td>
+ <td>LE_PSM_OUT</td>
<td><code>{2d410339-82b6-42aa-b34e-e2e01df8cc1a}</code></td>
</tr>
</table>
<p>
- In addition to the ASHA GATT service, the peripheral should also
+ In addition to the ASHA GATT service, the peripheral shall also
implement the Device Information Service to let the central detect the
manufacturer names and device names of the peripheral.
</p>
@@ -319,7 +323,7 @@
<td>
Supported <a href="#codec-ids">Codec IDs</a>. This is a bitmask
of supported codec IDs. A 1 in a bit location corresponds to a
- supported codec. All other bits should be set to 0.
+ supported codec. All other bits shall be set to 0.
</td>
</tr>
</table>
@@ -359,7 +363,9 @@
</tr>
<tr>
<td>0-1</td>
- <td>ID of the manufacturer.</td>
+ <td>ID of the manufacturer. It is the
+ <a href="https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers">Company Identifiers</a>
+ assigned by BTSIG.
</tr>
<tr>
<td>2-7</td>
@@ -379,7 +385,7 @@
</tr>
<tr>
<td>0</td>
- <td>LE CoC audio streaming supported (Yes/No).</td>
+ <td>LE CoC audio output streaming supported (Yes/No).</td>
</tr>
<tr>
<td>1-7</td>
@@ -466,7 +472,7 @@
<li><strong>2</strong> - Phonecall</li>
<li><strong>3</strong> - Media</li>
</ul>
- The peripheral should not request connection updates before a
+ The peripheral shall not request connection updates before a
<code>«Stop»</code> opcode has been received.
</td>
</tr>
@@ -476,8 +482,7 @@
<td>
Instructs the peripheral to stop rendering audio. A new audio
setup sequence should be initiated following this stop in order
- to render audio again. The peripheral may request a connection
- update following this command.
+ to render audio again.
</td>
</tr>
</table>
@@ -548,14 +553,15 @@
The peripherals must have a <strong>Complete Local Name</strong>
data type that indicates the name of the hearing aid. This name will
be used on the mobile device's user interface so the user can select
- the right device. The name should not indicate the left or right
+ the right device. The name shall not indicate the left or right
channel since this information is provided in
<a href="#devicecapabilities">DeviceCapabilities</a>.
</p>
<p>
If the peripherals put the name and ASHA service data types in the same
- frame type (ADV or SCAN RESP), then the two data types should appear
+ frame type (ADV or SCAN RESP), then the two data types ("Complete Local Name"
+ and "Service Data for ASHA service") shall appear
in the same frame. This lets the mobile device scanner get both data
in the same scan result.
</p>
@@ -601,8 +607,8 @@
<ul>
<li>
An audio frame should always match the connection interval in time.
- For example, if the connection interval is 15ms and sample rate is
- 1 kHz, then the audio frame should contain 240 samples.
+ For example, if the connection interval is 10ms and sample rate is
+ 16 kHz, then the audio frame shall contain 160 samples.
</li>
<li>
Sample rates in the system are restricted to multiples of 8kHz to
@@ -610,14 +616,14 @@
the frame time or the connection interval.
</li>
<li>
- A sequence byte should prepend audio frames. The sequence byte
- should be counting with wrap-around and allow the peripheral to
+ A sequence byte shall prepend audio frames. The sequence byte
+ shall be counting with wrap-around and allow the peripheral to
detect buffer mismatch or underflow.
</li>
<li>
- An audio frame should always fit into a single LE packet. The audio
- frame should be sent as a separate L2CAP packet. The size of the LE
- LL PDU should be:<br />
+ An audio frame shall always fit into a single LE packet. The audio
+ frame shall be sent as a separate L2CAP packet. The size of the LE
+ LL PDU shall be:<br />
<em>audio payload size + 1 (sequence counter) + 6
(4 for L2CAP header, 2 for SDU)</em>
</li>
@@ -635,7 +641,7 @@
</p>
<p>
- For all the codecs that a peripheral supports, the peripheral should
+ For all the codecs that a peripheral supports, the peripheral shall
support the connection parameters below. This is a non-exhaustive list
of configurations that the central can implement.
</p>
@@ -645,7 +651,7 @@
<th>Codec</th>
<th>Bitrate</th>
<th>Connection interval</th>
- <th>CE Length (1/2 Mbit)</th>
+ <th>CE Length (1M/2M PHY)</th>
<th>Audio payload size</th>
</tr>
<tr>
@@ -693,19 +699,22 @@
<p>
Before starting an audio stream, the central queries the peripherals
- and establishes the best quality common denominator codec. The stream
+ and establishes a common denominator codec. The stream
setup then proceeds through sequence:
</p>
<ol>
- <li>PSM, and optionally, PreparationDelay is read.</li>
+ <li>PSM, and optionally, PreparationDelay and RenderDelay are read. These values
+ may be cached by the central.
+ </li>
<li>
- CoC L2CAP channel is opened – the peripheral should grant 8 credits
+ CoC L2CAP channel is opened – the peripheral shall grant 8 credits
initially.
</li>
<li>
A connection update is issued to switch the link to the parameters
- required for the chosen codec.
+ required for the chosen codec. The central may do this connection update
+ before the CoC connection in the previous step.
</li>
<li>
Both the central and the peripheral host wait for the update
@@ -734,7 +743,7 @@
</p>
<p>
- The peripheral should not issue a connection update to the central.
+ The peripheral shall not issue a connection update to the central.
To save power, the central may issue a connection update to the
peripheral when it is not streaming audio.
</p>
diff --git a/en/devices/input/index.html b/en/devices/input/index.html
index 67247b63..f9f675a1 100644
--- a/en/devices/input/index.html
+++ b/en/devices/input/index.html
@@ -1,6 +1,6 @@
<html devsite>
<head>
- <title>Overview</title>
+ <title>Input</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
diff --git a/en/devices/tech/admin/ota-updates.html b/en/devices/tech/admin/ota-updates.html
index 62f07bd1..c3ef1404 100644
--- a/en/devices/tech/admin/ota-updates.html
+++ b/en/devices/tech/admin/ota-updates.html
@@ -31,22 +31,43 @@
<a
href="https://developer.android.com/reference/android/app/admin/SystemUpdatePolicy.html"
class="external"><code>SystemUpdatePolicy</code></a>
- class. <code>SystemUpdatePolicy</code> lets the Device Owner (DO) app, if
+ class. <code>SystemUpdatePolicy</code> lets the device owner (DO) app, if
present, control the installation of system updates.
</p>
- <p>
- Android {{ androidPVersionNumber }} enhances the ability for device
- owners to control updates by allowing device owners to postpone
- over-the-air (OTA) updates for up to 90 days. Focusing on
- corporate-owned, single-use (COSU) solutions, this feature lets owners
- pause the OS version running on devices over critical periods, such as
- holidays.
- </p>
+ <h2 id="notify-do">Notifying device owners</h2>
+
+ <p>
+ The over-the-air (OTA) client must notify device owner apps about
+ incoming OTA updates using a system API. The OTA client must also
+ include a timestamp recording when the OTA update first became
+ available. OTA clients can call
+ <code>DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch)</code>
+ to notify device owner apps. If the OTA client doesn’t know if an update
+ is a security patch, the OTA client can fall back to using
+ <code>DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime)</code>.
+ </p>
+
+ <p>
+ If an update isn’t currently available, the OTA client reports this by
+ setting the <code>updateReceivedTime</code> argument to <code>-1</code>.
+ We recommend sending notifications whenever the OTA client polls the
+ OTA server, or when an OTA is pushed to the client. You can also send
+ out notifications more frequently.
+ </p>
<h2 id="system-update-policy">System update policy</h2>
<p>
+ Android {{ androidPVersionNumber }} enhances the ability for device
+ owners to
+ <a href="https://developer.android.com/work/dpc/system-updates">control
+ updates</a> by allowing device owners to postpone OTA updates for up to
+ 90 days. Focusing on dedicated device (previously called COSU)
+ solutions, this feature lets owners pause the OS version running on
+ devices over critical periods, such as holidays.
+ </p>
+ <p>
To comply with the CDD, the OTA client must implement behavioral
policies. The DO can set the following policies, which must be
respected by the device system update subsystems:
@@ -70,6 +91,19 @@
</li>
</ul>
+ <p>
+ Device owners can also
+ <a href="https://developer.android.com/work/dpc/system-updates#freeze-periods">set
+ freeze periods</a> (in Android 9 or later) that freeze the OS version
+ over critical periods, such as holidays or other busy times. The system
+ doesn't install OTA updates during a freeze period. We recommend using
+ <code>SystemUpdatePolicy.InstallationOption</code> (see
+ following section), however the OTA client can also call
+ <a href="https://developer.android.com/reference/android/app/admin/SystemUpdatePolicy#getFreezePeriods()"><code>SystemUpdatePolicy.getFreezePeriods()</code></a>
+ to check if the device is in a freeze period.
+ </p>
+
+
<h2 id="implementing-installation-options">
Implementing installation options
</h2>
@@ -79,10 +113,11 @@
<code>SystemUpdatePolicy.InstallationOption</code>, that is designed
for the system update clients.
<code>SystemUpdatePolicy.InstallationOption</code> serves as a wrapper
- class for the policies. An installation option tells clients how to act
- on incoming system updates and how long that action is valid for, given
- the current system update policy. An installation option can be one of
- the following:
+ class for the policies and freeze periods. An installation option tells
+ clients how to act on incoming system updates and how long that action
+ is valid for, given the current system update policy or any freeze
+ period that might be set. An installation option can be one of the
+ following:
</p>
<ul>
diff --git a/en/devices/tech/ota/ab/ab_implement.html b/en/devices/tech/ota/ab/ab_implement.html
index 14d43c08..856a5952 100644
--- a/en/devices/tech/ota/ab/ab_implement.html
+++ b/en/devices/tech/ota/ab/ab_implement.html
@@ -187,15 +187,15 @@ the <code>/vendor</code> mount point.</p>
tree (DT) node (<code>/firmware/android/slot_suffix</code>) or through the
<code>androidboot.slot_suffix</code> command line argument.</p>
-<p>By default, fastboot flashes only slot <code>a</code> on an A/B device and
-sets the current slot to <code>a</code>. If the update package also contains
-images for slot <code>b</code>, fastboot flashes those images as well. Available
-options include:</p>
+<p>By default, fastboot flashes the current slot on an A/B device. If the update
+ package also contains images for the other, non-current slot, fastboot flashes those
+ images as well. Available options include:</p>
<ul>
-<li><code>--slot</code>. Prompt fastboot to use slot <code>b</code> instead of
-slot <code>a</code>.</li>
-<li><code>--set-active</code>. Set the slot as active.</li>
+ <li><code>--slot <var>SLOT</var></code>. Override the default behavior and
+ prompt fastboot to flash the slot that is passed in as an argument.</li>
+ <li><code>--set-active [<var>SLOT</var>]</code>. Set the slot as active. If
+ no optional argument is specified, then the current slot is set as active.</li>
<li><code>fastboot --help</code>. Get details on commands.</li>
</ul>
diff --git a/en/security/_toc-bulletins.yaml b/en/security/_toc-bulletins.yaml
index b3f51c04..5914969e 100644
--- a/en/security/_toc-bulletins.yaml
+++ b/en/security/_toc-bulletins.yaml
@@ -11,6 +11,8 @@ toc:
section:
- title: 2018 Bulletins
section:
+ - title: November
+ path: /security/bulletin/2018-11-01
- title: October
path: /security/bulletin/2018-10-01
- title: September
@@ -109,6 +111,8 @@ toc:
path: /security/bulletin/pixel/index
- title: 2018 Bulletins
section:
+ - title: November
+ path: /security/bulletin/pixel/2018-11-01
- title: October
path: /security/bulletin/pixel/2018-10-01
- title: September
diff --git a/en/security/advisory/index.html b/en/security/advisory/index.html
index 2a8a1688..15a8555f 100644
--- a/en/security/advisory/index.html
+++ b/en/security/advisory/index.html
@@ -49,7 +49,7 @@ group to receive a notification when we publish an advisory.</p>
<th>Published Date</th>
</tr>
<tr>
- <td><a href="2016-03-18.html">2016-03-18</a></td>
+ <td><a href="/security/advisory/2016-03-18.html">2016-03-18</a></td>
<td>
<a href="/security/advisory/2016-03-18.html">English</a>&nbsp;/
<a href="/security/advisory/2016-03-18.html?hl=ja">日本語</a>&nbsp;/
diff --git a/en/security/bulletin/2018-11-01.html b/en/security/bulletin/2018-11-01.html
new file mode 100644
index 00000000..9bfd16ae
--- /dev/null
+++ b/en/security/bulletin/2018-11-01.html
@@ -0,0 +1,760 @@
+<html devsite>
+ <head>
+ <title>Android Security Bulletin—November 2018</title>
+ <meta name="project_path" value="/_project.yaml" />
+ <meta name="book_path" value="/_book.yaml" />
+ </head>
+ <body>
+ <!--
+ Copyright 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ //www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<p><em>Published November 5, 2018 | Updated November 5, 2018</em></p>
+
+<p>
+The Android Security Bulletin contains details of security vulnerabilities
+affecting Android devices. Security patch levels of 2018-11-05 or later address
+all of these issues. To learn how to check a device's security patch level, see
+<a href="https://support.google.com/pixelphone/answer/4457705"
+ class="external">Check and update your Android version</a>.
+</p>
+<p>
+Android partners are notified of all issues at least a month before
+publication. Source code patches for these issues have been released to the
+Android Open Source Project (AOSP) repository and linked from this bulletin.
+This bulletin also includes links to patches outside of AOSP.</p>
+<p>
+The most severe vulnerability in this section could enable a proximate
+attacker using a specially crafted file to execute arbitrary code within
+the context of a privileged process. The
+<a href="/security/overview/updates-resources.html#severity">severity
+assessment</a> is based on the effect that exploiting the vulnerability would
+possibly have on an affected device, assuming the platform and service
+mitigations are turned off for development purposes or if successfully bypassed.
+</p>
+<p>
+We have had no reports of active customer exploitation or abuse of these newly
+reported issues. Refer to the
+<a href="#mitigations">Android and Google Play Protect mitigations</a>
+section for details on the
+<a href="/security/enhancements/">Android security platform protections</a>
+and Google Play Protect, which improve the security of the Android platform.
+</p>
+<p class="note">
+<strong>Note:</strong> Information on the latest over-the-air update (OTA) and
+firmware images for Google devices is available in the
+<a href="/security/bulletin/pixel/2018-11-01">November 2018
+Pixel&hairsp;/&hairsp;Nexus Security Bulletin</a>.
+</p>
+<h2 id="announcements">Announcements</h2>
+<p>
+Several security issues have been identified in the Libxaac library including
+CVE-2018-9528, CVE-2018-9529, CVE-2018-9530, CVE-2018-9531, CVE-2018-9532,
+CVE-2018-9533, CVE-2018-9534, CVE-2018-9535, CVE-2018-9569, CVE-2018-9570,
+CVE-2018-9571, CVE-2018-9572, CVE-2018-9573, CVE-2018-9574, CVE-2018-9575,
+CVE-2018-9576, CVE-2018-9577, and CVE-2018-9578.</p>
+<p>The library has been marked as experimental and is no longer included in
+any production Android builds.</p>
+
+<h2 id="mitigations">Android and Google service mitigations</h2>
+<p>
+This is a summary of the mitigations provided by the
+<a href="/security/enhancements/">Android security platform</a>
+and service protections such as
+<a href="https://www.android.com/play-protect" class="external">Google Play
+Protect</a>. These capabilities reduce the likelihood that security
+vulnerabilities could be successfully exploited on Android.
+</p>
+<ul>
+<li>Exploitation for many issues on Android is made more difficult by
+enhancements in newer versions of the Android platform. We encourage all users
+to update to the latest version of Android where possible.</li>
+<li>The Android security team actively monitors for abuse through
+<a href="https://www.android.com/play-protect" class="external">Google Play
+Protect</a> and warns users about
+<a href="/security/reports/Google_Android_Security_PHA_classifications.pdf">Potentially
+Harmful Applications</a>. Google Play Protect is enabled by default on devices
+with <a href="http://www.android.com/gms" class="external">Google Mobile
+Services</a>, and is especially important for users who install apps from
+outside of Google Play.</li>
+</ul>
+<h2 id="2018-11-01-details">2018-11-01 security patch level vulnerability details</h2>
+<p>
+In the sections below, we provide details for each of the security
+vulnerabilities that apply to the 2018-11-01 patch level. Vulnerabilities are
+grouped under the component they affect. There is a description of the
+issue and a table with the CVE, associated references,
+<a href="#type">type of vulnerability</a>,
+<a href="/security/overview/updates-resources.html#severity">severity</a>,
+and updated AOSP versions (where applicable). When available, we link the public
+change that addressed the issue to the bug ID, such as the AOSP change list. When
+multiple changes relate to a single bug, additional references are linked to
+numbers following the bug ID.
+</p>
+
+<h3 id="framework">Framework</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to execute arbitrary code within the context of a privileged
+process.</p>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9522</td>
+ <td><a
+ href="https://android.googlesource.com/platform/frameworks/base/+/181dc252ddec574464882970d3fab290e8b625b5"
+ class="external">A-112550251</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9524</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/c9bc35a45da1e765eb36af604c0c580bd66644cc"
+ class="external">A-34170870</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9525</td>
+ <td><a
+ href="https://android.googlesource.com/platform/packages/apps/Settings/+/6409cf5c94cc1feb72dc078e84e66362fbecd6d5"
+ class="external">A-111330641</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>9</td>
+ </tr>
+</table>
+
+
+<h3 id="media-framework">Media framework</h3>
+<p>The most severe vulnerability in this section could enable a remote attacker
+using a specially crafted file to execute arbitrary code within the context of
+a privileged process.</p>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9527</td>
+ <td><a
+ href="https://android.googlesource.com/platform/external/tremolo/+/cafff8f4535c8bf933c5a2fcb1a0dd66fb75a1c2"
+ class="external">A-112159345</a></td>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9531</td>
+ <td><a
+ href="https://android.googlesource.com/platform/external/aac/+/c2208f2a3098410c5a4c79ad6bd4b6d7e1c0b03f"
+ class="external">A-112661641</a></td>
+ <td>RCE</td>
+ <td>Critical</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9536</td>
+ <td><a
+ href="https://android.googlesource.com/platform/external/aac/+/9744e41c40598c6a0b74440f3b5be63f9f3708a5"
+ class="external">A-112662184</a></td>
+ <td>EoP</td>
+ <td>Critical</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9537</td>
+ <td><a
+ href="https://android.googlesource.com/platform/external/aac/+/61381bd0f4bc012876ccf4b63eafddd2d60c35c9"
+ class="external">A-112891564</a></td>
+ <td>EoP</td>
+ <td>Critical</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9521</td>
+ <td><a
+ href="https://android.googlesource.com/platform/frameworks/av/+/083263937bfb1623adf6015da7ca3cdc258e0352"
+ class="external">A-111874331</a></td>
+ <td>RCE</td>
+ <td>High</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9539</td>
+ <td><a
+ href="https://android.googlesource.com/platform/frameworks/av/+/efe34a570d91b826b009d40e44c2e470dd180ace"
+ class="external">A-113027383</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+<h3 id="system">System</h3>
+<p>The most severe vulnerability in this section could enable a remote attacker
+to access data normally accessible only to locally installed applications with
+permissions.</p>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9540</td>
+ <td><a
+ href="https://android.googlesource.com/platform/system/bt/+/99d54d0c7dbab6c80f15bbf886ed203b2a547453"
+ class="external">A-111450417</a></td>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9542</td>
+ <td><a
+ href="https://android.googlesource.com/platform/system/bt/+/cc364611362cc5bc896b400bdc471a617d1ac628"
+ class="external">A-111896861</a></td>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9543</td>
+ <td><a
+ href="https://android.googlesource.com/platform/external/f2fs-tools/+/71313114a147ee3fc4a411904de02ea8b6bf7f91"
+ class="external">A-112868088</a></td>
+ <td>ID</td>
+ <td>High</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9544</td>
+ <td><a
+ href="https://android.googlesource.com/platform/system/bt/+/e3fbbdeb251dc59890e469c627fce322614944c0"
+ class="external">A-113037220</a></td>
+ <td>ID</td>
+ <td>High</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9545</td>
+ <td><a
+ href="https://android.googlesource.com/platform/system/bt/+/e3fbbdeb251dc59890e469c627fce322614944c0"
+ class="external">A-113111784</a></td>
+ <td>ID</td>
+ <td>High</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td rowspan="2">CVE-2018-9541</td>
+ <td rowspan="2"><a
+ href="https://android.googlesource.com/platform/system/bt/+/cc364611362cc5bc896b400bdc471a617d1ac628"
+ class="external">A-111450531</a></td>
+ <td>ID</td>
+ <td>Moderate</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>ID</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1</td>
+ </tr>
+</table>
+
+
+<h3 id="update-media-framework">Update: Media framework</h3>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9347</td>
+ <td><a
+ href="https://android.googlesource.com/platform/external/sonivox/+/2992eec4359d66debd0aad8f745315f57de761ae"
+ class="external">A-68664359</a>
+ [<a href="https://android.googlesource.com/platform/external/sonivox/+/3cc5df82112cbb5b75349f0f2b733dcba3660a2f">2</a>]
+ [<a href="https://android.googlesource.com/platform/frameworks/av/+/9bc021a323873091ea98f77b3b3dc4732d1c92e6">3</a>]
+ </td>
+ <td>DoS</td>
+ <td>Moderate</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+<h3 id="update-system">Update: System</h3>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9457</td>
+ <td><a
+ href="https://android.googlesource.com/platform/packages/apps/Settings/+/0f52a07037e3795b9173af1397086afa3c2e1913"
+ class="external">A-72872376</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>8.0, 8.1, 9</td>
+ </tr>
+</table>
+
+
+
+<h2 id="2018-11-05-details">2018-11-05 security patch level vulnerability details</h2>
+<p>
+In the sections below, we provide details for each of the security
+vulnerabilities that apply to the 2018-11-05 patch level. Vulnerabilities are
+grouped under the component they affect and include details such as the
+CVE, associated references, <a href="#type">type of vulnerability</a>,
+<a href="/security/overview/updates-resources.html#severity">severity</a>,
+component (where applicable), and updated AOSP versions (where applicable). When
+available, we link the public change that addressed the issue to the bug ID,
+such as the AOSP change list. When multiple changes relate to a single bug,
+additional references are linked to numbers following the bug ID.
+</p>
+
+<h3 id="framework-05">Framework</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to execute arbitrary code within the context of a privileged
+process.</p>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Updated AOSP versions</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9523</td>
+ <td><a href="https://android.googlesource.com/platform/frameworks/base/+/6a947f048a76a5936fd2b693e01f849aef22c907"
+ class="external">A-112859604</a></td>
+ <td>EoP</td>
+ <td>High</td>
+ <td>7.0, 7.1.1, 7.1.2, 8.0, 8.1, 9</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-9526</td>
+ <td><a
+ href="https://android.googlesource.com/device/google/marlin/+/fa7f7382e8b39f7ca209824f97788ab25c44f6a3"
+ class="external">A-112159033</a>
+ [<a href="https://android.googlesource.com/platform/frameworks/base/+/8e81142af3dceb913ca50f67df3ded84233f932a">2</a>]
+ [<a href="https://android.googlesource.com/platform/hardware/qcom/sdm845/gps/+/a5f7c07edd96c69171e8bd758addda7d5c30e3eb">3</a>]
+ </td>
+ <td>ID</td>
+ <td>High</td>
+ <td>9</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-components">Qualcomm components</h3>
+<p>The most severe vulnerability in this section could enable a local malicious
+application to execute arbitrary code within the context of a privileged
+process.</p>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-15818</td>
+ <td>A-68992408<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/lk/commit/?id=abe4f7042cbdef928ffc152335a17150fb39b096">
+QC-CR#2078580</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>EcoSystem</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11995</td>
+ <td>A-71501677<br />
+ <a
+ href="https://source.codeaurora.org/quic/la/abl/tianocore/edk2/commit/?id=e3688be47d2b72f130f90dafd24b5f5acc4684ca">
+QC-CR#2129639</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Bootloader</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11905</td>
+ <td>A-112277889<br />
+ <a
+href="https://source.codeaurora.org/quic/la/kernel/msm-4.4/commit/?id=0cdcf0409bdad7ed91c11d7715c89acc2e521e96">
+QC-CR#2090797</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>DSP_Services</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-closed-source-components">Qualcomm closed-source
+components</h3>
+<p>These vulnerabilities affect Qualcomm components and are described in
+further detail in the appropriate Qualcomm AMSS security bulletin or security
+alert. The severity assessment of these issues is provided directly by
+Qualcomm.</p>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-18317</td>
+ <td>A-78244877<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5912</td>
+ <td>A-79420111<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11264</td>
+ <td>A-109677962<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>Critical</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2016-10502</td>
+ <td>A-68326808<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18316</td>
+ <td>A-78240714<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18318</td>
+ <td>A-78240675<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-18315</td>
+ <td>A-78241957<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11994</td>
+ <td>A-72950294<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11996</td>
+ <td>A-74235967<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5870</td>
+ <td>A-77484722<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5877</td>
+ <td>A-77484786<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5916</td>
+ <td>A-79420492<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-5917</td>
+ <td>A-79420096<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+ <tr>
+ <td>CVE-2018-11269</td>
+ <td>A-109678529<a href="#asterisk">*</a></td>
+ <td>N/A</td>
+ <td>High</td>
+ <td>Closed-source component</td>
+ </tr>
+</table>
+
+
+
+
+
+<h2 id="common-questions-and-answers">Common questions and answers</h2>
+<p>This section answers common questions that may occur after reading this
+bulletin.</p>
+<p><strong>1. How do I determine if my device is updated to address these
+issues?</strong></p>
+<p>To learn how to check a device's security patch level, see
+<a href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices"
+ class="external">Check and update your Android version</a>.</p>
+<ul>
+<li>Security patch levels of 2018-11-01 or later address all issues associated
+with the 2018-11-01 security patch level.</li>
+<li>Security patch levels of 2018-11-05 or later address all issues associated
+with the 2018-11-05 security patch level and all previous patch levels.</li>
+</ul>
+<p>Device manufacturers that include these updates should set the patch string
+level to:</p>
+<ul>
+ <li>[ro.build.version.security_patch]:[2018-11-01]</li>
+ <li>[ro.build.version.security_patch]:[2018-11-05]</li>
+</ul>
+<p><strong>2. Why does this bulletin have two security patch levels?</strong></p>
+<p>
+This bulletin has two security patch levels so that Android partners have the
+flexibility to fix a subset of vulnerabilities that are similar across all
+Android devices more quickly. Android partners are encouraged to fix all issues
+in this bulletin and use the latest security patch level.
+</p>
+<ul>
+<li>Devices that use the 2018-11-01 security patch level must include all
+issues associated with that security patch level, as well as fixes for all
+issues reported in previous security bulletins.</li>
+<li>Devices that use the security patch level of 2018-11-05 or newer must
+include all applicable patches in this (and previous) security
+bulletins.</li>
+</ul>
+<p>
+Partners are encouraged to bundle the fixes for all issues they are addressing
+in a single update.
+</p>
+<p id="type">
+<strong>3. What do the entries in the <em>Type</em> column mean?</strong>
+</p>
+<p>
+Entries in the <em>Type</em> column of the vulnerability details table
+reference the classification of the security vulnerability.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Abbreviation</th>
+ <th>Definition</th>
+ </tr>
+ <tr>
+ <td>RCE</td>
+ <td>Remote code execution</td>
+ </tr>
+ <tr>
+ <td>EoP</td>
+ <td>Elevation of privilege</td>
+ </tr>
+ <tr>
+ <td>ID</td>
+ <td>Information disclosure</td>
+ </tr>
+ <tr>
+ <td>DoS</td>
+ <td>Denial of service</td>
+ </tr>
+ <tr>
+ <td>N/A</td>
+ <td>Classification not available</td>
+ </tr>
+</table>
+<p>
+<strong>4. What do the entries in the <em>References</em> column mean?</strong>
+</p>
+<p>
+Entries under the <em>References</em> column of the vulnerability details table
+may contain a prefix identifying the organization to which the reference value
+belongs.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Prefix</th>
+ <th>Reference</th>
+ </tr>
+ <tr>
+ <td>A-</td>
+ <td>Android bug ID</td>
+ </tr>
+ <tr>
+ <td>QC-</td>
+ <td>Qualcomm reference number</td>
+ </tr>
+ <tr>
+ <td>M-</td>
+ <td>MediaTek reference number</td>
+ </tr>
+ <tr>
+ <td>N-</td>
+ <td>NVIDIA reference number</td>
+ </tr>
+ <tr>
+ <td>B-</td>
+ <td>Broadcom reference number</td>
+ </tr>
+</table>
+<p id="asterisk">
+<strong>5. What does a * next to the Android bug ID in the <em>References</em>
+column mean?</strong>
+</p>
+<p>
+Issues that are not publicly available have a * next to the Android bug ID in
+the <em>References</em> column. The update for that issue is generally
+contained in the latest binary drivers for Pixel&hairsp;/&hairsp;Nexus devices
+available from the
+<a href="https://developers.google.com/android/drivers" class="external">Google
+Developer site</a>.
+</p>
+<p>
+<strong>6. Why are security vulnerabilities split between this bulletin and
+device&hairsp;/&hairsp;partner security bulletins, such as the
+Pixel&hairsp;/&hairsp;Nexus bulletin?</strong>
+</p>
+<p>
+Security vulnerabilities that are documented in this security bulletin are
+required to declare the latest security patch level on Android
+devices. Additional security vulnerabilities that are documented in the
+device&hairsp;/&hairsp;partner security bulletins are not required for
+declaring a security patch level. Android device and chipset manufacturers are
+encouraged to document the presence of other fixes on their devices through
+their own security websites, such as the
+<a href="https://security.samsungmobile.com/securityUpdate.smsb"
+ class="external">Samsung</a>,
+<a href="https://lgsecurity.lge.com/security_updates.html"
+ class="external">LGE</a>, or
+<a href="/security/bulletin/pixel/"
+ class="external">Pixel&hairsp;/&hairsp;Nexus</a> security bulletins.
+</p>
+
+<h2 id="versions">Versions</h2>
+<table>
+ <col width="25%">
+ <col width="25%">
+ <col width="50%">
+ <tr>
+ <th>Version</th>
+ <th>Date</th>
+ <th>Notes</th>
+ </tr>
+ <tr>
+ <td>1.0</td>
+ <td>November 5, 2018</td>
+ <td>Bulletin published.</td>
+ </tr>
+ <tr>
+ <td>1.1</td>
+ <td>November 5, 2018</td>
+ <td>Bulletin revised to include AOSP links.</td>
+ </tr>
+</table>
+</body></html>
+
diff --git a/en/security/bulletin/2018.html b/en/security/bulletin/2018.html
index 19d6791d..1cf0b6a7 100644
--- a/en/security/bulletin/2018.html
+++ b/en/security/bulletin/2018.html
@@ -37,6 +37,22 @@ of all bulletins, see the <a href="/security/bulletin/index.html">Android Securi
<th>Security patch level</th>
</tr>
<tr>
+ <td><a href="/security/bulletin/2018-11-01.html">November 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/2018-11-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>November 5, 2018</td>
+ <td>2018-11-01<br>
+ 2018-11-05</td>
+ </tr>
+ <tr>
<td><a href="/security/bulletin/2018-10-01.html">October 2018</a></td>
<td>
<a href="/security/bulletin/2018-10-01.html">English</a>&nbsp;/
diff --git a/en/security/bulletin/index.html b/en/security/bulletin/index.html
index 954084d3..e11d1962 100644
--- a/en/security/bulletin/index.html
+++ b/en/security/bulletin/index.html
@@ -68,6 +68,22 @@ Android Open Source Project (AOSP), the upstream Linux kernel, and system-on-chi
<th>Published date</th>
<th>Security patch level</th>
</tr>
+ <tr>
+ <td><a href="/security/bulletin/2018-11-01.html">November 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/2018-11-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/2018-11-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>November 5, 2018</td>
+ <td>2018-11-01<br>
+ 2018-11-05</td>
+ </tr>
<tr>
<td><a href="/security/bulletin/2018-10-01.html">October 2018</a></td>
<td>
diff --git a/en/security/bulletin/pixel/2018-07-01.html b/en/security/bulletin/pixel/2018-07-01.html
index 44f97780..4f1bcb47 100644
--- a/en/security/bulletin/pixel/2018-07-01.html
+++ b/en/security/bulletin/pixel/2018-07-01.html
@@ -21,7 +21,7 @@
limitations under the License.
-->
-<p><em>Published July 2, 2018 | Updated July 3, 2018</em></p>
+<p><em>Published July 2, 2018 | Updated November 8, 2018</em></p>
<p>
The Pixel&hairsp;/&hairsp;Nexus Security Bulletin contains details of security
@@ -248,7 +248,7 @@ additional references are linked to numbers following the bug ID.
</tr>
<tr>
- <td>CVE-2017-1000</td>
+ <td>CVE-2017-1000112</td>
<td>A-68806309<br>
<a href="https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git/commit/?id=85f1bd9a7b5a79d5baa8bf44af19658f7bf77bfa">Upstream kernel</a></td>
<td>EoP</td>
@@ -508,6 +508,11 @@ bulletin are not required for declaring a security patch level.
<td>July 3, 2018</td>
<td>Bulletin revised to include AOSP links.</td>
</tr>
+ <tr>
+ <td>1.2</td>
+ <td>November 8, 2018</td>
+ <td>Bulletin revised to correct CVE-2017-1000112.</td>
+ </tr>
</table>
</body>
diff --git a/en/security/bulletin/pixel/2018-11-01.html b/en/security/bulletin/pixel/2018-11-01.html
new file mode 100644
index 00000000..ecdadb18
--- /dev/null
+++ b/en/security/bulletin/pixel/2018-11-01.html
@@ -0,0 +1,301 @@
+<html devsite>
+ <head>
+ <title>Pixel&hairsp;/&hairsp;Nexus Security Bulletin—November 2018</title>
+ <meta name="project_path" value="/_project.yaml" />
+ <meta name="book_path" value="/_book.yaml" />
+ </head>
+ <body>
+ <!--
+ Copyright 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ //www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<p><em>Published November 5, 2018</em></p>
+
+<p>
+The Pixel&hairsp;/&hairsp;Nexus Security Bulletin contains details of security
+vulnerabilities and functional improvements affecting <a
+href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices"
+class="external">supported Google Pixel and Nexus devices</a> (Google devices).
+For Google devices, security patch levels of 2018-11-05 or later address all
+issues in this bulletin and all issues in the November 2018 Android Security
+Bulletin. To learn how to check a device's security patch level, see <a
+href="https://support.google.com/pixelphone/answer/4457705"
+class="external">Check & update your Android version</a>.
+</p>
+<p>
+All supported Google devices will receive an update to the 2018-11-05 patch
+level. We encourage all customers to accept these updates to their devices.
+</p>
+<p class="note">
+<strong>Note:</strong> The Google device firmware images are available on the
+<a href="https://developers.google.com/android/images" class="external">Google
+Developer site</a>.
+</p>
+
+<h2 id="announcements">Announcements</h2>
+
+<p>In addition to the security vulnerabilities described in the
+<a href="/security/bulletin/2018-11-01">November 2018 Android Security
+Bulletin</a>, Pixel and Nexus devices also contain patches for the security
+vulnerabilities described below. Partners were notified of these issues at
+least a month ago and may choose to incorporate them as part of their device
+updates.
+</p>
+
+<h2 id="security-patches">Security patches</h2>
+<p>
+Vulnerabilities are grouped under the component they affect. There is a
+description of the issue and a table with the CVE, associated references,
+<a href="#type">type of vulnerability</a>,
+<a href="/security/overview/updates-resources#severity">severity</a>,
+and updated Android Open Source Project (AOSP) versions (where applicable).
+When available, we link the public change that addressed the issue to the bug
+ID, such as the AOSP change list. When multiple changes relate to a single bug,
+additional references are linked to numbers following the bug ID.
+</p>
+
+
+<h3 id="htc-components">HTC components</h3>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2018-9580</td>
+ <td>A-76222002<a href="#asterisk">*</a></td>
+ <td>EoP</td>
+ <td>Moderate</td>
+ <td>Bootloader</td>
+ </tr>
+</table>
+
+
+<h3 id="qualcomm-components">Qualcomm components</h3>
+
+<table>
+<col width="21%">
+<col width="21%">
+<col width="14%">
+<col width="14%">
+<col width="30%">
+ <tr>
+ <th>CVE</th>
+ <th>References</th>
+ <th>Type</th>
+ <th>Severity</th>
+ <th>Component</th>
+ </tr>
+ <tr>
+ <td>CVE-2017-14888</td>
+ <td>A-70237718<br>
+<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=d50dfd647b2396d2e2c05b7aee84d831e4a18d68">QC-CR#2119729</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+ <tr>
+ <td>CVE-2017-15835</td>
+ <td>A-72957155<br>
+<a href="https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/commit/?id=b6eeed234707244c799ae7009e67312b8bf33ccd">QC-CR#2125781</a></td>
+ <td>N/A</td>
+ <td>Moderate</td>
+ <td>WLAN Host</td>
+ </tr>
+</table>
+
+
+
+
+<h2 id="functional-patches">Functional patches</h2>
+
+<p>All Pixel devices running Android 9 will receive an Android 9 update as
+ part of the November OTA. This quarterly release contains many functional
+ updates and improvements to various parts of the Android platform and
+ supported Pixel devices.</p>
+
+<p>This release also contains the following fixes, which will be mandatory for
+ Android device manufacturers.</p>
+
+<table>
+ <tr>
+ <th>References</th>
+ <th>Category</th>
+ <th>Improvements</th>
+ <th>Devices</th>
+ </tr>
+ <tr>
+ <td>A-111401911</td>
+ <td>Display</td>
+ <td>Improved performance for devices using
+ <a href="/devices/tech/display/pip">picture-in-picture</a></td>
+ <td>Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL</td>
+ </tr>
+ <tr>
+ <td>A-109769728</td>
+ <td>Framework</td>
+ <td>Improved Strongbox symmetric key generation requests</td>
+ <td>Pixel 3, Pixel 3 XL</td>
+ </tr>
+ <tr>
+ <td>A-112198479</td>
+ <td>Display</td>
+ <td>Improved performance for apps using
+ <a href="/devices/tech/display/pip">picture-in-picture</a></td>
+ <td>Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL</td>
+ </tr>
+ <tr>
+ <td>A-112714177</td>
+ <td>Notifications</td>
+ <td>Improved stability for notifications</td>
+ <td>Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL</td>
+ </tr>
+</table>
+
+<h2 id="common-questions-and-answers">Common questions and answers</h2>
+<p>
+This section answers common questions that may occur after reading this
+bulletin.
+</p>
+<p>
+<strong>1. How do I determine if my device is updated to address these issues?
+</strong>
+</p>
+<p>
+Security patch levels of 2018-11-05 or later address all issues associated with
+the 2018-11-05 security patch level and all previous patch levels. To learn how
+to check a device's security patch level, read the instructions on the <a
+href="https://support.google.com/pixelphone/answer/4457705#pixel_phones&nexus_devices"
+class="external">Pixel and Nexus update schedule</a>.
+</p>
+<p id="type">
+<strong>2. What do the entries in the <em>Type</em> column mean?</strong>
+</p>
+<p>
+Entries in the <em>Type</em> column of the vulnerability details table reference
+the classification of the security vulnerability.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Abbreviation</th>
+ <th>Definition</th>
+ </tr>
+ <tr>
+ <td>RCE</td>
+ <td>Remote code execution</td>
+ </tr>
+ <tr>
+ <td>EoP</td>
+ <td>Elevation of privilege</td>
+ </tr>
+ <tr>
+ <td>ID</td>
+ <td>Information disclosure</td>
+ </tr>
+ <tr>
+ <td>DoS</td>
+ <td>Denial of service</td>
+ </tr>
+ <tr>
+ <td>N/A</td>
+ <td>Classification not available</td>
+ </tr>
+</table>
+<p>
+<strong>3. What do the entries in the <em>References</em> column mean?</strong>
+</p>
+<p>
+Entries under the <em>References</em> column of the vulnerability details table
+may contain a prefix identifying the organization to which the reference value
+belongs.
+</p>
+<table>
+ <col width="25%">
+ <col width="75%">
+ <tr>
+ <th>Prefix</th>
+ <th>Reference</th>
+ </tr>
+ <tr>
+ <td>A-</td>
+ <td>Android bug ID</td>
+ </tr>
+ <tr>
+ <td>QC-</td>
+ <td>Qualcomm reference number</td>
+ </tr>
+ <tr>
+ <td>M-</td>
+ <td>MediaTek reference number</td>
+ </tr>
+ <tr>
+ <td>N-</td>
+ <td>NVIDIA reference number</td>
+ </tr>
+ <tr>
+ <td>B-</td>
+ <td>Broadcom reference number</td>
+ </tr>
+</table>
+<p id="asterisk">
+<strong>4. What does a * next to the Android bug ID in the <em>References</em>
+column mean?</strong>
+</p>
+<p>
+Issues that are not publicly available have a * next to the Android bug ID in
+the <em>References</em> column. The update for that issue is generally contained
+in the latest binary drivers for Pixel&hairsp;/&hairsp;Nexus devices available
+from the <a href="https://developers.google.com/android/nexus/drivers"
+class="external">Google Developer site</a>.
+</p>
+<p>
+<strong>5. Why are security vulnerabilities split between this bulletin and the
+Android Security Bulletins?</strong>
+</p>
+<p>
+Security vulnerabilities that are documented in the Android Security Bulletins
+are required to declare the latest security patch level on Android
+devices. Additional security vulnerabilities, such as those documented in this
+bulletin are not required for declaring a security patch level.
+</p>
+<h2 id="versions">Versions</h2>
+<table>
+ <col width="25%">
+ <col width="25%">
+ <col width="50%">
+ <tr>
+ <th>Version</th>
+ <th>Date</th>
+ <th>Notes</th>
+ </tr>
+ <tr>
+ <td>1.0</td>
+ <td>November 5, 2018</td>
+ <td>Bulletin published.</td>
+ </tr>
+</table>
+</body>
+</html>
diff --git a/en/security/bulletin/pixel/2018.html b/en/security/bulletin/pixel/2018.html
index c8975ba4..93e0b219 100644
--- a/en/security/bulletin/pixel/2018.html
+++ b/en/security/bulletin/pixel/2018.html
@@ -38,6 +38,21 @@ Bulletins</a> homepage.</p>
<th>Published date</th>
<th>Security patch level</th>
</tr>
+ <tr>
+ <td><a href="/security/bulletin/pixel/2018-11-01.html">November 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/pixel/2018-11-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>November 5, 2018</td>
+ <td>2018-11-05</td>
+ </tr>
<tr>
<td><a href="/security/bulletin/pixel/2018-10-01.html">October 2018</a></td>
<td>
diff --git a/en/security/bulletin/pixel/index.html b/en/security/bulletin/pixel/index.html
index 0d348f72..9cebd9b7 100644
--- a/en/security/bulletin/pixel/index.html
+++ b/en/security/bulletin/pixel/index.html
@@ -58,6 +58,21 @@ AOSP 24&ndash;48 hours after the Pixel&hairsp;/&hairsp;Nexus bulletin is release
<th>Published date</th>
<th>Security patch level</th>
</tr>
+ <tr>
+ <td><a href="/security/bulletin/pixel/2018-11-01.html">November 2018</a></td>
+ <td>Coming soon
+ <!--
+ <a href="/security/bulletin/pixel/2018-11-01.html">English</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=ja">日本語</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=ko">한국어</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=ru">ру́сский</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-cn">中文&nbsp;(中国)</a>&nbsp;/
+ <a href="/security/bulletin/pixel/2018-11-01.html?hl=zh-tw">中文&nbsp;(台灣)</a>
+ -->
+ </td>
+ <td>November 5, 2018</td>
+ <td>2018-11-05</td>
+ </tr>
<tr>
<td><a href="/security/bulletin/pixel/2018-10-01.html">October 2018</a></td>
<td>
diff --git a/en/security/encryption/file-based.html b/en/security/encryption/file-based.html
index 6695b466..d62bac19 100644
--- a/en/security/encryption/file-based.html
+++ b/en/security/encryption/file-based.html
@@ -88,11 +88,11 @@ lifecycles regardless of whether or not they implement FBE. Although, without
FBE, DE and CE storage will always be in the unlocked state.
</p>
<p>
-A complete implementation of file-based encryption on an Ext4 file system is
-provided in the Android Open Source Project (AOSP) and needs only be enabled on
-devices that meet the requirements. Manufacturers electing to use FBE may wish
-to explore ways of optimizing the feature based on the system on chip (SoC)
-used.
+A complete implementation of file-based encryption on the Ext4 and F2FS file
+systems is provided in the Android Open Source Project (AOSP) and needs only be
+enabled on devices that meet the requirements. Manufacturers electing to use FBE
+may wish to explore ways of optimizing the feature based on the system on chip
+(SoC) used.
</p>
<p>
All the necessary packages in AOSP have been updated to be direct-boot aware.
@@ -114,10 +114,10 @@ vold (<a href="https://android.googlesource.com/platform/system/vold/">system/vo
provides the functionality for managing storage devices and
volumes on Android. The addition of FBE provides vold with several new commands
to support key management for the CE and DE keys of multiple users. In addition
-to the core changes to use the <a href="#kernel-support">ext4 Encryption</a>
-capabilities in kernel many system packages including the lockscreen and the
-SystemUI have been modified to support the FBE and Direct Boot features. These
-include:
+to the core changes to use the <a href="#kernel-support">file-based
+encryption</a> capabilities in kernel, many system packages including the
+lockscreen and the SystemUI have been modified to support the FBE and Direct
+Boot features. These include:
</p>
<ul>
@@ -144,8 +144,9 @@ following dependencies:
</p>
<ul>
-<li><strong>Kernel Support</strong> for ext4 encryption (Kernel config option:
-EXT4_FS_ENCRYPTION)
+<li><strong>Kernel Support</strong> for Ext4 encryption or F2FS encryption
+(Kernel config option: <code>EXT4_FS_ENCRYPTION</code> or
+<code>F2FS_FS_ENCRYPTION</code>)
<li><strong><a
href="/security/keystore/index.html">Keymaster
Support</a></strong> with a HAL version 1.0 or 2.0. There is no support for
@@ -183,65 +184,13 @@ Boot</a> developer documentation.
</p>
<h3 id="kernel-support">Kernel Support</h3>
<p>
-The AOSP implementation of file-based encryption uses the ext4 encryption
-features in the Linux 4.4 kernel. The recommended solution is to use a kernel
-based on 4.4 or later. Ext4 encryption has also been backported to a 3.10 kernel
-in the Android common repositories and for the supported Nexus kernels.
-</p>
-<p>
-The android-3.10.y branch in the AOSP kernel/common git repository may
-provide a good starting point for device manufacturers that want to import this
-capability into their own device kernels. However, it is necessary to apply
-the most recent patches from the latest stable Linux kernel (currently <a
-href="https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/log/?id=refs/tags/v4.6">linux-4.6</a>)
-of the ext4 and jbd2 projects. The Nexus device kernels already include many of
-these patches.
-</p>
-<table>
- <tr>
- <th>Device</th>
- <th>Kernel</th>
- </tr>
- <tr>
- <td>Android Common
- </td>
- <td><strong>kernel/common</strong> android-3.10.y (<a
-href="https://android.googlesource.com/kernel/common/+/android-3.10.y">git</a>)
- </td>
- </tr>
- <tr>
- <td>Nexus 5X (bullhead)
- </td>
- <td><strong>kernel/msm</strong> android-msm-bullhead-3.10-n-preview-2 (<a
-href="https://android.googlesource.com/kernel/msm/+/android-msm-bullhead-3.10-n-preview-2">git</a>)
- </td>
- </tr>
- <tr>
- <td>Nexus 6P (angler)
- </td>
- <td><strong>kernel/msm</strong> android-msm-angler-3.10-n-preview-2 (<a
-href="https://android.googlesource.com/kernel/msm/+/android-msm-angler-3.10-n-preview-2">git</a>)
- </td>
- </tr>
-</table>
-<p>
-Note that each of these kernels uses a backport to 3.10. The ext4
-and jbd2 drivers from linux 3.18 were transplanted into existing kernels based
-on 3.10. Due to interdependencies between parts of the kernel, this backport
-breaks support for a number of features that are not used by Nexus devices.
-These include:
+Kernel support for Ext4 and F2FS encryption is available in the Android common
+kernels, version 3.18 or higher.
</p>
-
-<ul>
-<li>The ext3 driver, although ext4 can still mount and use ext3 filesystems
-<li>Global File Sytem (GFS) Support
-<li>ACL support in ext4</li>
-</ul>
-
<p>
-In addition to functional support for ext4 encryption, device manufacturers may
-also consider implementing cryptographic acceleration to speed up file-based
-encryption and improve the user experience.
+In addition to functional support for Ext4 or F2FS encryption, device
+manufacturers may also consider implementing cryptographic acceleration to speed
+up file-based encryption and improve the user experience.
</p>
<h3 id="enabling-file-based-encryption">Enabling file-based encryption</h3>
<p>
@@ -285,19 +234,24 @@ effect, both CE and DE keys are 512-bit keys.
<h3 id="encryption-policy">Encryption policy</h3>
<p>
-Ext4 encryption applies the encryption policy at the directory level. When a
-device’s <code>userdata</code> partition is first created, the basic structures
-and policies are applied by the <code>init</code> scripts. These scripts will
-trigger the creation of the first user’s (user 0’s) CE and DE keys as well as
-define which directories are to be encrypted with these keys. When additional
-users and profiles are created, the necessary additional keys are generated and
-stored in the keystore; their credential and devices storage locations are
-created and the encryption policy links these keys to those directories.
+File-based encryption applies the encryption policy at the directory level. When
+a device’s <code>userdata</code> partition is first created, the basic
+structures and policies are applied by the <code>init</code> scripts. These
+scripts will trigger the creation of the first user’s (user 0’s) CE and DE keys
+as well as define which directories are to be encrypted with these keys. When
+additional users and profiles are created, the necessary additional keys are
+generated and stored in the keystore; their credential and devices storage
+locations are created and the encryption policy links these keys to those
+directories.
</p>
<p>
In the current AOSP implementation, the encryption policy is hardcoded into this
location:
</p>
+<pre class="devsite-click-to-copy">/system/extras/libfscrypt/fscrypt_init_extensions.cpp</pre>
+<p>
+In Android P and earlier, the location was:
+</p>
<pre class="devsite-click-to-copy">/system/extras/ext4_utils/ext4_crypt_init_extensions.cpp</pre>
<p>
It is possible to add exceptions in this file to prevent certain directories
@@ -409,13 +363,19 @@ many
CTS encryption tests</a>.
</p>
<p>
-Once the kernel builds for your board, also build for x86 and run under QEMU in
-order to test with <a
+After the kernel builds for your board, you should also build for x86
+and run under QEMU to test with <a
hre="https://git.kernel.org/cgit/fs/ext2/xfstests-bld.git/plain/quick-start?h=META">
-xfstest</a> by using:
+kvm-xfstests</a>. For Ext4, use:
+</p>
+<pre class="devsite-terminal devsite-click-to-copy">
+kvm-xfstests -c ext4/encrypt -g auto
+</pre>
+<p>
+For F2FS, use:
</p>
<pre class="devsite-terminal devsite-click-to-copy">
-kvm-xfstests -c encrypt -g auto
+kvm-xfstests -c f2fs/encrypt -g auto
</pre>
<p>
In addition, device manufacturers may perform these manual tests. On a device
diff --git a/en/security/overview/acknowledgements.html b/en/security/overview/acknowledgements.html
index cb24c0bf..d63ad8f0 100644
--- a/en/security/overview/acknowledgements.html
+++ b/en/security/overview/acknowledgements.html
@@ -37,6 +37,68 @@ Rewards</a> program.</p>
<p>In 2018, the security acknowledgements are listed by month. In prior years,
acknowledgements were listed together.</p>
+<h4 id="nov-2018">November</h4>
+
+<table>
+ <tr>
+ <th>Researchers</th>
+ <th>CVEs</th>
+ </tr>
+ <tr>
+ <td><a href="https://twitter.com/amarekano" class="external">Amar
+ Menezes</a> of <a href="https://labs.mwrinfosecurity.com/"
+ class="external">MWR Labs</a></td>
+ <td>CVE-2018-9524</td>
+ </tr>
+ <tr>
+ <td>Elphet and Gong Guang of Alpha Team, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2018-9569, CVE-2018-9570, CVE-2018-9573, CVE-2018-9576,
+ CVE-2018-9577</td>
+ </tr>
+ <tr>
+ <td>En He (<a href="https://twitter.com/@heeeeen4x"
+ class="external">@heeeeen4x</a>) and Bo Liu of MS509Team
+ (<a href="http://www.ms509.com" class="external">www.ms509.com</a>)</td>
+ <td>CVE-2018-9457</td>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/michalbednarski" class="external">Michał
+ Bednarski</a></td>
+ <td>CVE-2018-9522, CVE-2018-9523</td>
+ </tr>
+ <tr>
+ <td>Niky1235 (<a href="https://twitter.com/jiych_guru"
+ class="external">@jiych_guru</a>)</td>
+ <td>CVE-2018-9347</td>
+ </tr>
+ <tr>
+ <td>Tamir Zahavi-Brunner (<a href="https://twitter.com/tamir_zb"
+ class="external">@tamir_zb</a>)
+ of Zimperium zLabs Team</td>
+ <td>CVE-2018-9539</td>
+ </tr>
+ <tr>
+ <td>Xiaobo Xiang of IIE; Gong Guang of Alpha Team, Qihoo 360 Technology Co.
+Ltd.</td>
+ <td>CVE-2018-9571, CVE-2018-9572, CVE-2018-9574, CVE-2018-9575</td>
+ </tr>
+ <tr>
+ <td>Yongke Wang
+ (<a href="https://twitter.com/rudykewang" class="external">@Rudykewang</a>)
+ and Xiangqian Zhang
+ (<a href="https://twitter.com/h3rb0x" class="external">@h3rb0x</a>) of
+ <a href="https://xlab.tencent.com/en/" class="external">Tencent Security
+ Xuanwu Lab</a></td>
+ <td>CVE-2018-9540, CVE-2018-9541</td>
+ </tr>
+ <tr>
+ <td>Zinuo Han(<a href="http://weibo.com/ele7enxxh"
+ class="external">weibo.com/ele7enxxh</a>)
+ of Chengdu Security Response Center, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2018-9527, CVE-2018-9544, CVE-2018-9545, CVE-2018-9578</td>
+ </tr>
+</table>
+
<h4 id="oct-2018">October</h4>
<table>
@@ -144,8 +206,7 @@ Chengdu Security Response Center, Qihoo 360 Technology Co. Ltd.</td>
<td>En He
(<a href="https://twitter.com/@heeeeen4x" class="external">@heeeeen4x</a>)
and Bo Liu of MS509Team
- (<a href="http://www.ms509.com" class="external">ms509.com</a>)
- </td>
+ (<a href="http://www.ms509.com" class="external">ms509.com</a>)</td>
<td>CVE-2018-9475</td>
</tr>
<tr>
@@ -202,8 +263,7 @@ Chengdu Security Response Center, Qihoo 360 Technology Co. Ltd.</td>
<td>Zinuo Han
(<a href="http://weibo.com/ele7enxxh" class="external">weibo.com/ele7enxxh</a>)
of Chengdu Security Response Center, Qihoo 360 Technology Co. Ltd.</td>
- <td>CVE-2018-9471, CVE-2018-9474, CVE-2018-9483, CVE-2018-9484, CVE-2018-9486
- </td>
+ <td>CVE-2018-9471, CVE-2018-9474, CVE-2018-9483, CVE-2018-9484, CVE-2018-9486</td>
</tr>
</table>
@@ -557,146 +617,102 @@ class="external">Mobile Security Research Team</a>,
<th>CVEs</th>
</tr>
<tr>
- <td>Billy Lau of Google
- </td>
- <td>CVE-2017-13305
- </td>
+ <td>Billy Lau of Google</td>
+ <td>CVE-2017-13305</td>
</tr>
<tr>
<td><a href="http://weibo.com/csddl">Chong Wang</a> of Chengdu Security Response Center, Qihoo
- 360 Technology Co. Ltd
- </td>
- <td>CVE-2017-13287
- </td>
+ 360 Technology Co. Ltd</td>
+ <td>CVE-2017-13287</td>
</tr>
<tr>
<td><a href="http://weibo.com/csddl">Chong Wang</a> and
<a href="http://weibo.com/ele7enxxh">Zinuo Han</a> of Chengdu Security Response Center,
- Qihoo 360 Technology Co. Ltd
- </td>
- <td>CVE-2017-13289, CVE-2017-13286
- </td>
+ Qihoo 360 Technology Co. Ltd</td>
+ <td>CVE-2017-13289, CVE-2017-13286</td>
</tr>
<tr>
- <td>Cusas @ Huawei L.O. Team
- </td>
- <td>CVE-2017-13279
- </td>
+ <td>Cusas @ Huawei L.O. Team</td>
+ <td>CVE-2017-13279</td>
</tr>
<tr>
- <td>Daxing Guo of Tencent's Xuanwu Lab
- </td>
- <td>CVE-2017-13292, CVE-2017-13303
- </td>
+ <td>Daxing Guo of Tencent's Xuanwu Lab</td>
+ <td>CVE-2017-13292, CVE-2017-13303</td>
</tr>
<tr>
<td>Dinesh Venkatesan (<a href="https://twitter.com/malwareresearch">&#64;malwareresearch</a>)
- of Symantec
- </td>
- <td>CVE-2017-13295
- </td>
+ of Symantec</td>
+ <td>CVE-2017-13295</td>
</tr>
<tr>
- <td>Elphet and Gong Guang of Alpha Team, Qihoo 360 Technology Co. Ltd
- </td>
- <td>CVE-2017-13276
- </td>
+ <td>Elphet and Gong Guang of Alpha Team, Qihoo 360 Technology Co. Ltd</td>
+ <td>CVE-2017-13276</td>
</tr>
<tr>
<td>En He (<a href="https://twitter.com/heeeeen4x">&#64;heeeeen4x</a>) and Bo Liu of
- <a href="http://www.ms509.com">MS509Team</a>
- </td>
- <td>CVE-2017-13294
- </td>
+ <a href="http://www.ms509.com">MS509Team</a></td>
+ <td>CVE-2017-13294</td>
</tr>
<tr>
- <td>Eric Leong (<a href="https://twitter.com/ericwleong">&#64;ericwleong</a>)
- </td>
- <td>CVE-2017-13301
- </td>
+ <td>Eric Leong (<a href="https://twitter.com/ericwleong">&#64;ericwleong</a>)</td>
+ <td>CVE-2017-13301</td>
</tr>
<tr>
- <td>Hao Chen and Guang Gong of Alpha Team, Qihoo 360 Technology Co. Ltd.
- </td>
- <td>CVE-2018-3596
- </td>
+ <td>Hao Chen and Guang Gong of Alpha Team, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2018-3596</td>
</tr>
<tr>
- <td>Haosheng Wang (<a href="https://twitter.com/gnehsoah">&#64;gnehsoah</a>)
- </td>
- <td>CVE-2017-13280
- </td>
+ <td>Haosheng Wang (<a href="https://twitter.com/gnehsoah">&#64;gnehsoah</a>)</td>
+ <td>CVE-2017-13280</td>
</tr>
<tr>
- <td>Jean-Baptiste Cayrou (<a href="https://twitter.com/jbcayrou">&#64;jbcayrou</a>)
- </td>
- <td>CVE-2017-13284
- </td>
+ <td>Jean-Baptiste Cayrou (<a href="https://twitter.com/jbcayrou">&#64;jbcayrou</a>)</td>
+ <td>CVE-2017-13284</td>
</tr>
<tr>
<td>Jianjun Dai (<a href="https://twitter.com/Jioun_dai">&#64;Jioun_dai</a>) and
- Guang Gong of Alpha Team, Qihoo 360 Technology Co. Ltd
- </td>
- <td>CVE-2017-13291, CVE-2017-13283, CVE-2017-13282, CVE-2017-13281, CVE-2017-13267
- </td>
+ Guang Gong of Alpha Team, Qihoo 360 Technology Co. Ltd</td>
+ <td>CVE-2017-13291, CVE-2017-13283, CVE-2017-13282, CVE-2017-13281, CVE-2017-13267</td>
</tr>
<tr>
- <td>Patrick Delvenne (<a href="https://twitter.com/wintzx">&#64;wintzx</a>) of Orange Labs
- </td>
- <td>CVE-2018-3584
- </td>
+ <td>Patrick Delvenne (<a href="https://twitter.com/wintzx">&#64;wintzx</a>) of Orange Labs</td>
+ <td>CVE-2018-3584</td>
</tr>
<tr>
- <td>Pengfei Ding (丁鹏飞), Chenfu Bao (包沉浮), Lenx Wei (韦韬) of Baidu X-Lab (百度安全实验室)
- </td>
- <td>CVE-2017-13306, CVE-2017-13290, CVE-2017-15837
- </td>
+ <td>Pengfei Ding (丁鹏飞), Chenfu Bao (包沉浮), Lenx Wei (韦韬) of Baidu X-Lab (百度安全实验室)</td>
+ <td>CVE-2017-13306, CVE-2017-13290, CVE-2017-15837</td>
</tr>
<tr>
- <td>Tencent Blade Team
- </td>
- <td>CVE-2017-15853
- </td>
+ <td>Tencent Blade Team</td>
+ <td>CVE-2017-15853</td>
</tr>
<tr>
- <td>Vasily Vasiliev
- </td>
- <td>CVE-2017-13297
- </td>
+ <td>Vasily Vasiliev</td>
+ <td>CVE-2017-13297</td>
</tr>
<tr>
- <td>Weichao Sun of Alibaba Inc (<a href="https://twitter.com/sunblate">&#64;sunblate</a>)
- </td>
- <td>CVE-2017-13277
- </td>
+ <td>Weichao Sun of Alibaba Inc (<a href="https://twitter.com/sunblate">&#64;sunblate</a>)</td>
+ <td>CVE-2017-13277</td>
</tr>
<tr>
<td><a href="mailto:huahuaisadog@gmail.com">Yang Dai</a> and
- <a href="http://weibo.com/panyu6325">Yu Pan</a> of Vulpecker Team, Qihoo 360 Technology Co. Ltd
- </td>
- <td>CVE-2017-13304
- </td>
+ <a href="http://weibo.com/panyu6325">Yu Pan</a> of Vulpecker Team, Qihoo 360 Technology Co. Ltd</td>
+ <td>CVE-2017-13304</td>
</tr>
<tr>
<td>Yonggang Guo (<a href="https://twitter.com/guoygang">&#64;guoygang</a>) of IceSword Lab,
- Qihoo 360 Technology Co. Ltd
- </td>
- <td>CVE-2017-8269, CVE-2017-13307, CVE-2018-5826
- </td>
+ Qihoo 360 Technology Co. Ltd</td>
+ <td>CVE-2017-8269, CVE-2017-13307, CVE-2018-5826</td>
</tr>
<tr>
- <td>Zhongwen & Chao Dai @ Huawei L.O. Team
- </td>
- <td>CVE-2017-13274
- </td>
+ <td>Zhongwen & Chao Dai @ Huawei L.O. Team</td>
+ <td>CVE-2017-13274</td>
</tr>
<tr>
<td><a href="http://weibo.com/ele7enxxh">Zinuo Han</a> of Chengdu Security Response Center,
- Qihoo 360 Technology Co. Ltd
- </td>
+ Qihoo 360 Technology Co. Ltd</td>
<td>CVE-2017-13288, CVE-2017-13298, CVE-2017-13296, CVE-2017-13299,
- CVE-2017-13275, CVE-2017-13285
- </td>
+ CVE-2017-13275, CVE-2017-13285</td>
</tr>
</table>
@@ -816,119 +832,85 @@ Response Center of Qihoo 360 Technology Co. Ltd.</td>
<tr>
<td>Aaron Willey, autoprime (<a
href="https://twitter.com/utoprime?lang=en">&#64;utoprime</a>), and Tyler Montgomery
-(<a href="https://twitter.com/tylerfixer">&#64;tylerfixer</a>) of Team Codefire
- </td>
- <td>CVE-2017-13238
- </td>
+(<a href="https://twitter.com/tylerfixer">&#64;tylerfixer</a>) of Team Codefire</td>
+ <td>CVE-2017-13238</td>
</tr>
<tr>
- <td>Cusas (华为公司的cusas)
- </td>
- <td>CVE-2017-13235
- </td>
+ <td>Cusas (华为公司的cusas)</td>
+ <td>CVE-2017-13235</td>
</tr>
<tr>
<td>Elphet and Gong Guang of
-Alpha Team, Qihoo 360 Technology Co. Ltd.
- </td>
- <td>CVE-2017-13229
- </td>
+Alpha Team, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2017-13229</td>
</tr>
<tr>
<td>En He (<a href="https://twitter.com/heeeeen4x">&#64;heeeeen4x</a>) and Bo Liu
-of <a href="http://www.ms509.com">MS509Team</a>
- </td>
- <td>CVE-2017-13242
- </td>
+of <a href="http://www.ms509.com">MS509Team</a></td>
+ <td>CVE-2017-13242</td>
</tr>
<tr>
- <td>Gal Beniamini of Google
- </td>
- <td>CVE-2017-13236
- </td>
+ <td>Gal Beniamini of Google</td>
+ <td>CVE-2017-13236</td>
</tr>
<tr>
- <td>Hao Chen and Guang Gong of Alpha Team, Qihoo 360 Technology Co. Ltd.
- </td>
- <td>CVE-2017-13245
- </td>
+ <td>Hao Chen and Guang Gong of Alpha Team, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2017-13245</td>
</tr>
<tr>
<td>Hongli Han (<a href="https://twitter.com/HexB1n">&#64;HexB1n</a>),
<a href="mailto:shaodacheng2016@gmail.com">Dacheng Shao</a> and Mingjian Zhou
(<a href="https://twitter.com/Mingjian_Zhou">&#64;Mingjian_Zhou</a>) of
-<a href="http://c0reteam.org">C0RE Team</a>
- </td>
- <td>CVE-2017-6258
- </td>
+<a href="http://c0reteam.org">C0RE Team</a></td>
+ <td>CVE-2017-6258</td>
</tr>
<tr>
<td>Hongli Han (<a href="https://twitter.com/HexB1n">&#64;HexB1n</a>), Mingjian
Zhou (<a href="https://twitter.com/Mingjian_Zhou">&#64;Mingjian_Zhou</a>) of
-<a href="http://c0reteam.org">C0RE Team</a>
- </td>
- <td>CVE-2017-17767, CVE-2017-6279
- </td>
+<a href="http://c0reteam.org">C0RE Team</a></td>
+ <td>CVE-2017-17767, CVE-2017-6279</td>
</tr>
<tr>
<td>Mingjian Zhou (周明建) (<a
href="https://twitter.com/Mingjian_Zhou">&#64;Mingjian_Zhou</a>) of
-<a href="http://c0reteam.org">C0RE Team</a>
- </td>
- <td>CVE-2017-13241, CVE-2017-13231
- </td>
+<a href="http://c0reteam.org">C0RE Team</a></td>
+ <td>CVE-2017-13241, CVE-2017-13231</td>
</tr>
<tr>
- <td>Nightwatch Cybersecurity Research
- </td>
- <td>CVE-2017-13243
- </td>
+ <td>Nightwatch Cybersecurity Research</td>
+ <td>CVE-2017-13243</td>
</tr>
<tr>
<td><a href="mailto:jiych.guru@gmail.com">Niky1235</a>
- (<a href="https://twitter.com/jiych_guru">&#64;jiych_guru</a>)
- </td>
- <td>CVE-2017-13230, CVE-2017-13234
- </td>
+ (<a href="https://twitter.com/jiych_guru">&#64;jiych_guru</a>)</td>
+ <td>CVE-2017-13230, CVE-2017-13234</td>
</tr>
<tr>
- <td>Outware
- </td>
- <td>CVE-2017-13239
- </td>
+ <td>Outware</td>
+ <td>CVE-2017-13239</td>
</tr>
<tr>
<td>Qidan He (<a href="https://twitter.com/flanker_hqd?lang=en">&#64;flanker_hqd</a>)
- of PDD Security Team
- </td>
- <td>CVE-2017-13246
- </td>
+ of PDD Security Team</td>
+ <td>CVE-2017-13246</td>
</tr>
<tr>
- <td>Xiling Gong of Tencent Security Platform Department
- </td>
- <td>CVE-2017-15852
- </td>
+ <td>Xiling Gong of Tencent Security Platform Department</td>
+ <td>CVE-2017-15852</td>
</tr>
<tr>
<td>Yonggang Guo (<a href="https://twitter.com/guoygang">&#64;guoygang</a>) of
-IceSword Lab, Qihoo 360 Technology Co. Ltd.
- </td>
- <td>CVE-2017-13273
- </td>
+IceSword Lab, Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2017-13273</td>
</tr>
<tr>
- <td>ZhangBo of Tencent Security Platform Department
- </td>
- <td>CVE-2015-9016
- </td>
+ <td>ZhangBo of Tencent Security Platform Department</td>
+ <td>CVE-2015-9016</td>
</tr>
<tr>
<td><a href="http://weibo.com/ele7enxxh">Zinuo Han</a> from Chengdu Security
-Response Center of Qihoo 360 Technology Co. Ltd.
- </td>
- <td>CVE-2017-13232
- </td>
+Response Center of Qihoo 360 Technology Co. Ltd.</td>
+ <td>CVE-2017-13232</td>
</tr>
</table>
@@ -1351,8 +1333,7 @@ CVE-2017-0792, CVE-2017-0825, CVE-2017-6424</td>
(<a href="https://twitter.com/HexB1n">&#64;HexB1n</a>) of
<a href="http://c0reteam.org/">C0RE Team</a></td>
<td>CVE-2017-0384, CVE-2017-0385, CVE-2017-0731, CVE-2017-0739,
- CVE-2017-13154, CVE-2017-6276
- </td>
+ CVE-2017-13154, CVE-2017-6276</td>
</tr>
<tr>
<td>hujianfei of Qihoo360 Qex Team</td>
@@ -1494,8 +1475,7 @@ CVE-2017-0666, CVE-2017-0681, CVE-2017-0684, CVE-2017-0731, CVE-2017-0737,
CVE-2017-0739, CVE-2017-0765, CVE-2017-0768, CVE-2017-0769, CVE-2017-0779,
CVE-2017-0801, CVE-2017-0812, CVE-2017-0815, CVE-2017-0816, CVE-2017-0836,
CVE-2017-0837, CVE-2017-0840, CVE-2017-0857, CVE-2017-8080, CVE-2017-6276,
-CVE-2017-13152, CVE-2017-13154, CVE-2017-13166, CVE-2017-13169, CVE-2017-14904
- </td>
+CVE-2017-13152, CVE-2017-13154, CVE-2017-13166, CVE-2017-13169, CVE-2017-14904</td>
</tr>
<tr>
<td>Monk Avel</td>
@@ -1804,8 +1784,7 @@ CVE-2017-0801, CVE-2017-7368, CVE-2017-8264, CVE-2017-10661</td>
<td><a href="mailto:huahuaisadog@gmail.com">Yang Dai</a> of Vulpecker Team,
Qihoo 360 Technology Co. Ltd</td>
<td>CVE-2017-0795, CVE-2017-0799, CVE-2017-0804, CVE-2017-0803,
- CVE-2017-6262, CVE-2017-6263, CVE-2017-6280
- </td>
+ CVE-2017-6262, CVE-2017-6263, CVE-2017-6280</td>
</tr>
<tr>
<td>Yang Song of Alibaba Mobile Security Group</td>
@@ -1813,8 +1792,7 @@ Qihoo 360 Technology Co. Ltd</td>
CVE-2017-0565, CVE-2017-0711, CVE-2017-0741, CVE-2017-0742, CVE-2017-0751,
CVE-2017-0796, CVE-2017-0798, CVE-2017-0800, CVE-2017-0827, CVE-2017-0842,
CVE-2017-0843, CVE-2017-0864, CVE-2017-11000, CVE-2017-11059, CVE-2017-9703,
-CVE-2017-9708, CVE-2017-13170
- </td>
+CVE-2017-9708, CVE-2017-13170</td>
</tr>
<tr>
<td>Yanick Fratantonio (UC Santa Barbara, Shellphish Grill Team, EURECOM)</td>
@@ -1860,8 +1838,7 @@ Lab</a></td>
<td>Yu Pan of Vulpecker Team, Qihoo 360 Technology Co. Ltd</td>
<td>CVE-2016-10282, CVE-2017-0517, CVE-2017-0532, CVE-2017-0615,
CVE-2017-0618, CVE-2017-0625, CVE-2017-0795, CVE-2017-0799, CVE-2017-0804,
-CVE-2017-0803, CVE-2017-6262, CVE-2017-6263, CVE-2017-6280
- </td>
+CVE-2017-0803, CVE-2017-6262, CVE-2017-6263, CVE-2017-6280</td>
</tr>
<tr>
<td><a href="mailto:computernik@gmail.com">Yuan-Tsung Lo</a> of <a
diff --git a/en/security/overview/updates-resources.html b/en/security/overview/updates-resources.html
index ddc053a4..d1aa9b61 100644
--- a/en/security/overview/updates-resources.html
+++ b/en/security/overview/updates-resources.html
@@ -225,10 +225,12 @@ remote. These include bugs that can be exploited only by an attacker who is
physically near the target device, for example a bug that requires sending
malformed Wi-Fi or Bluetooth packets.</p>
-<p>Local attacks require the victim to install an app. For the purpose of severity
-ratings, the Android security team also considers physical attack vectors as
-local. These include bugs that can be exploited only by an attacker who has
-physical access to the device, for example a bug in a lock screen or one that
+<p>Local attacks require the victim to run an app, either by installing and running
+an app or by consenting to run an
+<a href="https://developer.android.com/topic/google-play-instant/">Instant App</a>.
+For the purpose of severity ratings, the Android security team also considers physical
+attack vectors as local. These include bugs that can be exploited only by an attacker
+who has physical access to the device, for example a bug in a lock screen or one that
requires plugging in a USB cable. The Android security team also considers
NFC-based attacks as local.</p>
diff --git a/en/security/trusty/index.html b/en/security/trusty/index.html
index dbdba9a3..c5bacdad 100644
--- a/en/security/trusty/index.html
+++ b/en/security/trusty/index.html
@@ -42,7 +42,7 @@ drivers
to change.</p>
<p>For information about the Trusty API, see the <a
-href="trusty-ref.html">API Reference</a>.</p>
+href="/security/trusty/trusty-ref">API Reference</a>.</p>
<h2 id=uses_examples>Uses and examples</h2>
diff --git a/en/setup/build/gsi.html b/en/setup/build/gsi.html
index a80be991..c7e32c3a 100644
--- a/en/setup/build/gsi.html
+++ b/en/setup/build/gsi.html
@@ -26,26 +26,38 @@
A generic system image (GSI) is a system image with adjusted configurations
for Android devices. It is considered a "pure Android" implementation with
unmodified Android Open Source Project (AOSP) code that any Android device
- should be able to run successfully.
+ running Android 8.1 or higher can run successfully.
</p>
<p>
- The content in a GSI does not depend on the vendor image. To verify GSI
- independence, the system image of an Android device is replaced with a GSI
- then tested thoroughly with the <a href="/compatibility/vts/">Vendor Test
+ GSI compliance is part of the <a href="/compatibility/overview">Android
+ Compatibility program</a>. The system image of an Android device is replaced
+ with a GSI then tested with the <a href="/compatibility/vts/">Vendor Test
Suite (VTS)</a> and the <a href="/compatibility/cts/">Compatibility Test Suite
- (CTS)</a>. Similarly, you can use a GSI in place of your own system image
- to verify your Android device implements vendor interfaces correctly.
+ (CTS)</a> to ensure the device implements vendor inferfaces correctly with the
+ latest version of Android.
</p>
-<h2 id="gsi-configuration-and-variances">GSI configuration and variances</h2>
+<aside class="note"><strong>Note:</strong>
+ This article describes GSI topics for Android OEM and ROM developers; Android
+ application developers should refer to
+ <a href="https://developer.android.com/topic/generic-system-image/">developer.android.com</a>
+ for developer-focused GSI details.
+</aside>
<p>
- The goal of a GSI is to offer a specific, universal configuration for all
- Android devices while allowing for variances between different vendor devices.
- The current GSI is based on Android {{ androidPVersionNumber }}.
+ To get started with GSIs, review the following sections for details on
+ <a href="#gsi-configuration-and-variances">GSI configurations</a> (and allowed
+ variances), <a href="#gsi-types">types</a> (Android GSI and Legacy GSI), and
+ <a href="#vendor-binaries-and-vndk-dependencies">vendor binaries and VNDK
+ dependencies</a>. When you are ready to use a GSI,
+ <a href="#building-gsis">download and build the GSI</a> for your device
+ target then <a href="#flashing-gsis">flash the GSI</a> to an Android
+ device.
</p>
+<h2 id="gsi-configuration-and-variances">GSI configuration and variances</h2>
+
<p>
The current GSI has the following configuration:
</p>
@@ -88,8 +100,9 @@
<h2 id="gsi-types">GSI types</h2>
<p>
- The GSI type is determined by the Android version the device launches with.
- Android {{ androidPVersionNumber }} supports the following GSIs:
+ The GSI used for compliance testing is determined by the Android version the
+ device launches with. Android {{ androidPVersionNumber }} supports the
+ following GSIs:
</p>
<table>
@@ -110,29 +123,16 @@
</tr>
</table>
-<aside class="note">
- <strong>Note:</strong> To determine the appropriate GSI for a device, connect
- the device to a workstation and run
- <code>adb shell getprop ro.product.first_api_level</code>. If the API level is 28,
- use the Android GSI; if the API level is 27, use the Legacy GSI. If there is no
- system property then it may not be supported.
-</aside>
-
<p>
- All GSIs are built from the Android {{ androidPVersionNumber }} codebase. As
- Legacy GSI support depends on the vendor interface implementation of the
- device, not all devices launching with Android 8.0 or Android 8.1 can use the
- Legacy GSI. For details, see
- <a href="#vendor-binaries-and-vndk-dependencies">Vendor binaries and VNDK
- dependencies</a>.
+ All GSIs are built from the Android {{ androidPVersionNumber }} codebase.
</p>
<h3 id="changes-in-p-gsis">Android {{ androidPVersionNumber }} GSI changes</h3>
<p>
Devices launching with Android {{ androidPVersionNumber }} must use Android
- {{ androidPVersionNumber }} GSIs, which include the following major changes
- from earlier GSIs:
+ {{ androidPVersionNumber }} GSIs for compliance testing, which includes the
+ following major changes from earlier GSIs:
</p>
<ul>
@@ -168,8 +168,8 @@ changes</h3>
<p>
Devices upgrading to Android {{ androidPVersionNumber }} can use Legacy GSI
product named with suffix <code>_ab</code> or <code>_a</code> (e.g.
- <code>aosp_arm64_ab</code>, <code>aosp_x86_a</code> ). This GSI supports the
- following upgrade use cases:
+ <code>aosp_arm64_ab</code>, <code>aosp_x86_a</code>) for compliance testing.
+ This GSI supports the following upgrade use cases:
</p>
<ul>
@@ -244,10 +244,10 @@ dependencies</h2>
<table>
<tr>
<th>Use case</th>
- <th>Vendor binaries version</th>
+ <th>Vendor<br>binaries<br>version</th>
<th><code>BOARD_VNDK_VERSION</code></th>
<th><code>BOARD_VNDK_RUNTIME_DISABLE</code></th>
- <th>Legacy GSI system binaries version</th>
+ <th>Legacy GSI<br>system binaries version</th>
<th>Legacy GSI support</th>
</tr>
<tr>
@@ -315,12 +315,8 @@ dependencies</h2>
<code>BOARD_VNDK_RUNTIME_DISABLE</code> (i.e. runtime enforcement WAS
disabled). These devices are not supported because their vendor binaries
depend on Android 8.1 non-VNDK shared libraries, which are not included in
- Legacy GSIs.
-</p>
-
-<p>
- To make these devices compatible with the Legacy GSI, vendors must do one of
- the following:
+ Legacy GSIs. To make these devices compatible with the Legacy GSI, vendors
+ must do one of the following:
</p>
<ul>
@@ -339,7 +335,7 @@ dependencies</h2>
<code>pie-gsi</code> is the GSI branch on Android
{{ androidPVersionNumber }}). GSI branches include the content of Android with
all <a href="/security/bulletin/">security patches</a> and
- <a href="#contributing-to-a-gsi">GSI patches</a> applied.
+ <a href="#contributing-to-gsis">GSI patches</a> applied.
</p>
<p>
@@ -356,8 +352,9 @@ dependencies</h2>
<p>
<p>
- Example: The following commands build the Legacy GSI build target
- <code>aosp_arm64_ab-userdebug</code> on GSI branch <code>pie-gsi</code>:
+ For example, to build the Legacy GSI build target
+ <code>aosp_arm64_ab-userdebug</code> on GSI branch <code>pie-gsi</code>, run
+ the following commands:
</p>
<pre class="prettyprint">
@@ -522,16 +519,17 @@ GSI build targets</h3>
<em>** Could be added by request</em>
<aside class="aside">
- <strong>Note: </strong>These build targets will likely be removed in a
+ <strong>Note:</strong> These build targets will likely be removed in a
future version of Android.
</aside>
-<h2 id="flashing-gsis">Flashing GSIs</h2>
+<h2 id="flashing-gsis">Flashing GSIs Requirements</h2>
<p>
Android devices can have different designs, so no single command or set of
- instructions for flashing a GSI to a specific device is possible. Use the
- following general steps as guidelines:
+ instructions for flashing a GSI to a specific device is possible. You can
+ check with the manufacturer of the Android device for explicit flashing
+ instructions or use the following general steps as guidelines:
</p>
<ol>
@@ -543,10 +541,9 @@ GSI build targets</h3>
<li>A method for disabling verify boot (e.g.
<a href="/security/verifiedboot/">vboot 1.0</a>,
<a href="/security/verifiedboot/avb">AVB</a>, etc.).</li>
- <li>Unlock the device to make it flashable via <code>fastboot</code>.</li>
- <aside class="note">
- <strong>Note:</strong> Ensure you have the latest version of
- <code>fastboot</code> by building it from Android source tree.</aside>
+ <li>Unlock the device to make it flashable via <code>fastboot</code>. (To
+ ensure you have the latest version of <code>fastboot</code>, build it
+ from Android source tree.)</li>
</ul>
</li>
<li>Disable verify boot.</li>
@@ -558,7 +555,7 @@ GSI build targets</h3>
</ol>
<p>
- For example, to flash a GSI to a Pixel 2 device:
+ For example, to flash a GSI to any Pixel device:
</p>
<ol>
@@ -570,7 +567,7 @@ GSI build targets</h3>
<pre class="prettyprint">$ fastboot flash vbmeta vbmeta.img</pre></li>
<li>Erase and flash the GSI to system partition:
<pre class="prettyprint">
-$ fastboot erase system
+$ fastboot erase system
$ fastboot flash system system.img
</pre></li>
<li>Wipe userdata and clear other necessary partitions:
diff --git a/en/setup/develop/repo.html b/en/setup/develop/repo.html
index b84d9d2f..bc96989f 100644
--- a/en/setup/develop/repo.html
+++ b/en/setup/develop/repo.html
@@ -60,8 +60,8 @@ directory that contains Git repositories for the Repo source code and the
standard Android manifest files. The <code>.repo/</code> directory also
contains <code>manifest.xml</code>, which is a symlink to the selected manifest
in the <code>.repo/manifests/</code> directory. See <a
- href="https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt"
- class="external">manifest-format.txt</a> for instructions on updating the
+ href="https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.md"
+ class="external">manifest-format.md</a> for instructions on updating the
manifest.</p>
<p>Options:</p>
<ul>
diff --git a/en/setup/start/build-numbers.html b/en/setup/start/build-numbers.html
index 30ed8689..545f93f9 100644
--- a/en/setup/start/build-numbers.html
+++ b/en/setup/start/build-numbers.html
@@ -236,2333 +236,2741 @@ following table.
<th>Branch</th>
<th>Version</th>
<th>Supported devices</th>
+ <th>Security Patch Level</th>
</tr>
</thead>
<tbody>
<tr>
+ <td>PQ1A.181105.017.A1</td>
+ <td>android-9.0.0_r16</td>
+ <td>Pie</td>
+ <td>Pixel 3 XL, Pixel 3, Pixel 2 XL, Pixel 2</td>
+ <td>2018-11-05</td>
+ </tr>
+ <tr>
<td>PD1A.180720.031</td>
<td>android-9.0.0_r12</td>
<td>Pie</td>
<td>Pixel 3 XL, Pixel 3</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>PD1A.180720.030</td>
<td>android-9.0.0_r11</td>
<td>Pie</td>
<td>Pixel 3 XL, Pixel 3</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>PPR2.181005.003</td>
<td>android-9.0.0_r10</td>
<td>Pie</td>
<td>Pixel XL, Pixel, Pixel 2 XL, Pixel 2</td>
+ <td>2018-10-05</td>
</tr>
<tr>
<td>PPR1.181005.003</td>
<td>android-9.0.0_r9</td>
<td>Pie</td>
<td>Pixel XL, Pixel</td>
+ <td>2018-10-05</td>
</tr>
<tr>
<td>PPR2.180905.006.A1</td>
<td>android-9.0.0_r8</td>
<td>Pie</td>
<td>Pixel XL, Pixel</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>PPR2.180905.006</td>
<td>android-9.0.0_r7</td>
<td>Pie</td>
<td>Pixel XL, Pixel</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>PPR2.180905.005</td>
<td>android-9.0.0_r6</td>
<td>Pie</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>PPR1.180905.003</td>
<td>android-9.0.0_r5</td>
<td>Pie</td>
<td>Pixel XL, Pixel</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>PPR1.180610.011</td>
<td>android-9.0.0_r3</td>
<td>Pie</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2018-08-05</td>
</tr>
<tr>
<td>PPR1.180610.010</td>
<td>android-9.0.0_r2</td>
<td>Pie</td>
<td>Pixel XL, Pixel</td>
+ <td>2018-08-05</td>
</tr>
<tr>
<td>PPR1.180610.009</td>
<td>android-9.0.0_r1</td>
<td>Pie</td>
<td>Pixel 2 XL, Pixel 2, Pixel XL, Pixel</td>
+ <td>2018-08-05</td>
+ </tr>
+ <tr>
+ <td>OPM8.181105.002</td>
+ <td>android-8.1.0_r51</td>
+ <td>Oreo</td>
+ <td>Pixel C</td>
+ <td>2018-11-05</td>
+ </tr>
+ <tr>
+ <td>OPM7.181105.004</td>
+ <td>android-8.1.0_r50</td>
+ <td>Oreo</td>
+ <td>Nexus 5X and Nexus 6P</td>
+ <td>2018-11-05</td>
</tr>
<tr>
<td>OPM8.181005.003</td>
<td>android-8.1.0_r48</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-10-05</td>
</tr>
<tr>
<td>OPM7.181005.003</td>
<td>android-8.1.0_r47</td>
<td>Oreo</td>
<td>Nexus 5X and Nexus 6P</td>
+ <td>2018-10-05</td>
</tr>
<tr>
<td>OPM6.171019.030.K1</td>
<td>android-8.1.0_r46</td>
<td>Oreo</td>
<td>Nexus 5X and Nexus 6P</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>OPM4.171019.021.Z1</td>
<td>android-8.1.0_r45</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-09-05</td>
</tr>
<tr>
<td>OPM6.171019.030.H1</td>
<td>android-8.1.0_r43</td>
<td>Oreo</td>
<td>Nexus 5X and Nexus 6P</td>
+ <td>2018-08-05</td>
</tr>
<tr>
<td>OPM4.171019.021.Y1</td>
<td>android-8.1.0_r42</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-08-05</td>
</tr>
<tr>
<td>OPM6.171019.030.E1</td>
<td>android-8.1.0_r41</td>
<td>Oreo</td>
<td>Nexus 5X and Nexus 6P</td>
+ <td>2018-07-05</td>
</tr>
<tr>
<td>OPM4.171019.021.R1</td>
<td>android-8.1.0_r40</td>
<td>Oreo</td>
<td>Pixel 2 XL</td>
+ <td>2018-07-05</td>
</tr>
<tr>
<td>OPM4.171019.021.Q1</td>
<td>android-8.1.0_r39</td>
<td>Oreo</td>
<td>Pixel 2</td>
+ <td>2018-07-05</td>
</tr>
<tr>
<td>OPM4.171019.021.P1</td>
<td>android-8.1.0_r38</td>
<td>Oreo</td>
<td>Pixel, Pixel XL</td>
+ <td>2018-07-05</td>
</tr>
<tr>
<td>OPM4.171019.021.N1</td>
<td>android-8.1.0_r37</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-07-05</td>
</tr>
<tr>
<td>OPM2.171026.006.H1</td>
<td>android-8.1.0_r36</td>
<td>Oreo</td>
<td>Pixel 2 XL</td>
+ <td>2018-07-05</td>
</tr>
<tr>
<td>OPM2.171026.006.G1</td>
<td>android-8.1.0_r35</td>
<td>Oreo</td>
<td>Pixel 2</td>
+ <td>2018-07-05</td>
</tr>
<tr>
<td>OPM6.171019.030.B1</td>
<td>android-8.1.0_r33</td>
<td>Oreo</td>
<td>Nexus 6P, Nexus 5X</td>
+ <td>2018-06-05</td>
</tr>
<tr>
<td>OPM4.171019.021.E1</td>
<td>android-8.1.0_r32</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2018-06-05</td>
</tr>
<tr>
<td>OPM4.171019.021.D1</td>
<td>android-8.1.0_r31</td>
<td>Oreo</td>
<td>Pixel XL, Pixel</td>
+ <td>2018-06-05</td>
</tr>
<tr>
<td>OPM2.171026.006.C1</td>
<td>android-8.1.0_r30</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2018-06-05</td>
</tr>
<tr>
<td>OPM4.171019.016.C1</td>
<td>android-8.1.0_r29</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-05-05</td>
</tr>
<tr>
<td>OPM4.171019.016.B1</td>
<td>android-8.1.0_r28</td>
<td>Oreo</td>
<td>Pixel XL, Pixel, Pixel 2 XL, Pixel 2</td>
+ <td>2018-05-05</td>
</tr>
<tr>
<td>OPM4.171019.016.A1</td>
<td>android-8.1.0_r27</td>
<td>Oreo</td>
<td>Nexus 5X</td>
+ <td>2018-05-05</td>
</tr>
<tr>
<td>OPM2.171019.029.B1</td>
<td>android-8.1.0_r26</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2018-05-05</td>
</tr>
<tr>
<td>OPM2.171019.029.A1</td>
<td>android-8.1.0_r25</td>
<td>Oreo</td>
<td>Nexus 6P</td>
+ <td>2018-05-05</td>
</tr>
<tr>
<td>OPM4.171019.015.A1</td>
<td>android-8.1.0_r23</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2018-04-01</td>
</tr>
<tr>
<td>OPM5.171019.019</td>
<td>android-8.1.0_r22</td>
<td>Oreo</td>
<td>Nexus 6P</td>
+ <td>2018-04-01</td>
</tr>
<tr>
<td>OPM3.171019.019</td>
<td>android-8.1.0_r21</td>
<td>Oreo</td>
<td>Nexus 6P</td>
+ <td>2018-04-01</td>
</tr>
<tr>
<td>OPM2.171019.029</td>
<td>android-8.1.0_r20</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2, Pixel XL, Pixel, Nexus 5X</td>
+ <td>2018-04-05</td>
</tr>
<tr>
<td>OPM1.171019.026</td>
<td>android-8.1.0_r19</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-04-05</td>
</tr>
<tr>
<td>OPM5.171019.017</td>
<td>android-8.1.0_r18</td>
<td>Oreo</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2018-03-05</td>
</tr>
<tr>
<td>OPM3.171019.016</td>
<td>android-8.1.0_r17</td>
<td>Oreo</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2018-03-05</td>
</tr>
<tr>
<td>OPM1.171019.022.A1</td>
<td>android-8.1.0_r16</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-03-05</td>
</tr>
<tr>
<td>OPM1.171019.021</td>
<td>android-8.1.0_r15</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2, Pixel XL, Pixel</td>
+ <td>2018-03-05</td>
</tr>
<tr>
<td>OPM5.171019.015</td>
<td>android-8.1.0_r14</td>
<td>Oreo</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2018-02-05</td>
</tr>
<tr>
<td>OPM3.171019.014</td>
<td>android-8.1.0_r13</td>
<td>Oreo</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2018-02-05</td>
</tr>
<tr>
<td>OPM1.171019.019</td>
<td>android-8.1.0_r12</td>
<td>Oreo</td>
<td>Pixel 2</td>
+ <td>2018-02-05</td>
</tr>
<tr>
<td>OPM1.171019.018</td>
<td>android-8.1.0_r11</td>
<td>Oreo</td>
<td>Pixel 2 XL</td>
+ <td>2018-02-05</td>
</tr>
<tr>
<td>OPM1.171019.016</td>
<td>android-8.1.0_r10</td>
<td>Oreo</td>
<td>Pixel, Pixel XL, Pixel C</td>
+ <td>2018-02-05</td>
</tr>
<tr>
<td>OPM5.171019.014</td>
<td>android-8.1.0_r9</td>
<td>Oreo</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2018-01-05</td>
</tr>
<tr>
<td>OPM2.171019.016</td>
<td>android-8.1.0_r8</td>
<td>Oreo</td>
<td>Pixel 2</td>
+ <td>2018-01-05</td>
</tr>
<tr>
<td>OPM3.171019.013</td>
<td>android-8.1.0_r7</td>
<td>Oreo</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2018-01-05</td>
</tr>
<tr>
<td>OPM1.171019.015</td>
<td>android-8.1.0_r6</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2018-01-05</td>
</tr>
<tr>
<td>OPM1.171019.014</td>
<td>android-8.1.0_r5</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2, Pixel XL, Pixel</td>
+ <td>2018-01-05</td>
</tr>
<tr>
<td>OPM1.171019.013</td>
<td>android-8.1.0_r4</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2018-01-05</td>
</tr>
<tr>
<td>OPM1.171019.012</td>
<td>android-8.1.0_r3</td>
<td>Oreo</td>
<td>Pixel XL, Pixel</td>
+ <td>2018-01-05</td>
</tr>
<tr>
<td>OPM2.171019.012</td>
<td>android-8.1.0_r2</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2017-12-05</td>
</tr>
<tr>
<td>OPM1.171019.011</td>
<td>android-8.1.0_r1</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2, Pixel XL, Pixel, Pixel C, Nexus 6P, Nexus 5X</td>
+ <td>2017-12-05</td>
</tr>
<tr>
<td>OPR5.170623.014</td>
<td>android-8.0.0_r36</td>
<td>Oreo</td>
<td>Nexus 6P</td>
+ <td>2017-12-01</td>
</tr>
<tr>
<td>OPR4.170623.020</td>
<td>android-8.0.0_r35</td>
<td>Oreo</td>
<td>Nexus 5X</td>
+ <td>2017-12-01</td>
</tr>
<tr>
<td>OPD3.170816.023</td>
<td>android-8.0.0_r34</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPD1.170816.025</td>
<td>android-8.0.0_r33</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPR6.170623.023</td>
<td>android-8.0.0_r32</td>
<td>Oreo</td>
<td>Nexus 5X</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPR5.170623.011</td>
<td>android-8.0.0_r31</td>
<td>Oreo</td>
<td>Nexus 6P</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPR3.170623.013</td>
<td>android-8.0.0_r30</td>
<td>Oreo</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPR2.170623.027</td>
<td>android-8.0.0_r29</td>
<td>Oreo</td>
<td>Nexus Player</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPR1.170623.032</td>
<td>android-8.0.0_r28</td>
<td>Oreo</td>
<td>Pixel XL, Pixel, Pixel C</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPD3.170816.016</td>
<td>android-8.0.0_r27</td>
<td>Oreo</td>
<td>Pixel 2</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPD2.170816.015</td>
<td>android-8.0.0_r26</td>
<td>Oreo</td>
<td>Pixel 2</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPD1.170816.018</td>
<td>android-8.0.0_r25</td>
<td>Oreo</td>
<td>Pixel 2</td>
+ <td>2017-11-05</td>
</tr>
<tr>
<td>OPD3.170816.012</td>
<td>android-8.0.0_r24</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPD1.170816.012</td>
<td>android-8.0.0_r23</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPD1.170816.011</td>
<td>android-8.0.0_r22</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPD1.170816.010</td>
<td>android-8.0.0_r21</td>
<td>Oreo</td>
<td>Pixel 2 XL, Pixel 2</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPR5.170623.007</td>
<td>android-8.0.0_r17</td>
<td>Oreo</td>
<td>Nexus 6P</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>OPR4.170623.009</td>
<td>android-8.0.0_r16</td>
<td>Oreo</td>
<td>Nexus 5X</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>OPR3.170623.008</td>
<td>android-8.0.0_r15</td>
<td>Oreo</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>OPR1.170623.027</td>
<td>android-8.0.0_r13</td>
<td>Oreo</td>
<td>Pixel XL, Pixel, Pixel C</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>OPR6.170623.021</td>
<td>android-8.0.0_r12</td>
<td>Oreo</td>
<td>Nexus Player</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPR6.170623.019</td>
<td>android-8.0.0_r11</td>
<td>Oreo</td>
<td>Nexus 6P</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPR4.170623.006</td>
<td>android-8.0.0_r10</td>
<td>Oreo</td>
<td>Nexus 5X</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPR3.170623.007</td>
<td>android-8.0.0_r9</td>
<td>Oreo</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPR1.170623.026</td>
<td>android-8.0.0_r7</td>
<td>Oreo</td>
<td>Pixel XL, Pixel, Pixel C</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>OPR6.170623.013</td>
<td>android-8.0.0_r4</td>
<td>Oreo</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>OPR6.170623.012</td>
<td>android-8.0.0_r3</td>
<td>Oreo</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>OPR6.170623.011</td>
<td>android-8.0.0_r2</td>
<td>Oreo</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>OPR6.170623.010</td>
<td>android-8.0.0_r1</td>
<td>Oreo</td>
<td>Pixel C</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>N2G48H</td>
<td>android-7.1.2_r36</td>
<td>Nougat</td>
<td></td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>NZH54D</td>
<td>android-7.1.2_r33</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>NKG47S</td>
<td>android-7.1.2_r32</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>NHG47Q</td>
<td>android-7.1.2_r30</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>NJH47F</td>
<td>android-7.1.2_r29</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>N2G48C</td>
<td>android-7.1.2_r28</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P, Nexus Player, Pixel C</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>NZH54B</td>
<td>android-7.1.2_r27</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-07-05</td>
</tr>
<tr>
- <tr>
<td>NKG47M</td>
<td>android-7.1.2_r25</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>NJH47D</td>
<td>android-7.1.2_r24</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>NHG47O</td>
<td>android-7.1.2_r23</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>N2G48B</td>
<td>android-7.1.2_r19</td>
<td>Nougat</td>
<td>Nexus 6P, Nexus Player, Pixel C</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>N2G47Z</td>
<td>android-7.1.2_r18</td>
<td>Nougat</td>
<td>Nexus 5X</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>NJH47B</td>
<td>android-7.1.2_r17</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>NJH34C</td>
<td>android-7.1.2_r16</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>NKG47L</td>
<td>android-7.1.2_r15</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>NHG47N</td>
<td>android-7.1.2_r14</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>N2G47X</td>
<td>android-7.1.2_r13</td>
<td>Nougat</td>
<td>Nexus Player</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>N2G47W</td>
<td>android-7.1.2_r12</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P, Pixel C</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>NHG47L</td>
<td>android-7.1.2_r11</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-05-05</td>
</tr>
<tr>
<td>N2G47T</td>
<td>android-7.1.2_r10</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-05-05</td>
</tr>
<tr>
<td>N2G47R</td>
<td>android-7.1.2_r9</td>
<td>Nougat</td>
<td>Nexus Player</td>
+ <td>2017-05-05</td>
</tr>
<tr>
<td>N2G47O</td>
<td>android-7.1.2_r8</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P, Pixel XL, Pixel, Pixel C</td>
+ <td>2017-05-05</td>
</tr>
<tr>
<td>NHG47K</td>
<td>android-7.1.2_r6</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-04-05</td>
</tr>
<tr>
<td>N2G47J</td>
<td>android-7.1.2_r5</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-04-05</td>
</tr>
<tr>
<td>N2G47H</td>
<td>android-7.1.2_r4</td>
<td>Nougat</td>
<td>Nexus 6P, Nexus Player</td>
+ <td>2017-04-05</td>
</tr>
<tr>
<td>N2G47F</td>
<td>android-7.1.2_r3</td>
<td>Nougat</td>
<td>Nexus 5X</td>
+ <td>2017-04-05</td>
</tr>
<tr>
<td>N2G47E</td>
<td>android-7.1.2_r2</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-04-05</td>
</tr>
<tr>
<td>N2G47D</td>
<td>android-7.1.2_r1</td>
<td>Nougat</td>
<td>Pixel C</td>
+ <td>2017-04-05</td>
</tr>
<tr>
<td>N9F27M</td>
<td>android-7.1.1_r58</td>
<td>Nougat</td>
<td>Nexus 9 (volantis)</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>NGI77B</td>
<td>android-7.1.1_r57</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>N8I11F</td>
<td>android-7.1.1_r56</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>N6F27M</td>
<td>android-7.1.1_r55</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>N4F27P</td>
<td>android-7.1.1_r54</td>
<td>Nougat</td>
<td>Nexus 9 (volantisg)</td>
+ <td>2017-10-05</td>
</tr>
<tr>
<td>N9F27L</td>
<td>android-7.1.1_r53</td>
<td>Nougat</td>
<td>Nexus 9</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>NGI55D</td>
<td>android-7.1.1_r52</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>N4F27O</td>
<td>android-7.1.1_r51</td>
<td>Nougat</td>
<td>Nexus 9 (volantisg)</td>
+ <td>2017-09-05</td>
</tr>
<tr>
<td>N8I11B</td>
<td>android-7.1.1_r50</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>N9F27H</td>
<td>android-7.1.1_r49</td>
<td>Nougat</td>
<td>Nexus 9 (volantis)</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>N6F27I</td>
<td>android-7.1.1_r48</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>N4F27K</td>
<td>android-7.1.1_r47</td>
<td>Nougat</td>
<td>Nexus 9 (volantisg)</td>
+ <td>2017-08-05</td>
</tr>
<tr>
<td>N9F27F</td>
<td>android-7.1.1_r46</td>
<td>Nougat</td>
<td>Nexus 9 (volantis)</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>N6F27H</td>
<td>android-7.1.1_r45</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>N4F27I</td>
<td>android-7.1.1_r44</td>
<td>Nougat</td>
<td>Nexus 9 (volantisg)</td>
+ <td>2017-07-05</td>
</tr>
<tr>
<td>N9F27C</td>
<td>android-7.1.1_r43</td>
<td>Nougat</td>
<td>Nexus 9 (volantis)</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>N6F27E</td>
<td>android-7.1.1_r42</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>N4F27E</td>
<td>android-7.1.1_r41</td>
<td>Nougat</td>
<td>Nexus 9 (volantisg)</td>
+ <td>2017-06-05</td>
</tr>
<tr>
<td>N6F27C</td>
<td>android-7.1.1_r40</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-05-05</td>
</tr>
<tr>
<td>N4F27B</td>
<td>android-7.1.1_r39</td>
<td>Nougat</td>
<td>Nexus 9 (volantis/volantisg)</td>
+ <td>2017-05-05</td>
</tr>
<tr>
<td>N6F26Y</td>
<td>android-7.1.1_r38</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-04-01</td>
</tr>
<tr>
<td>NOF27D</td>
<td>android-7.1.1_r35</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-04-01</td>
</tr>
<tr>
<td>N4F26X</td>
<td>android-7.1.1_r33</td>
<td>Nougat</td>
<td>Nexus 9 (volantis/volantisg)</td>
+ <td>2017-04-01</td>
</tr>
<tr>
<td>N4F26U</td>
<td>android-7.1.1_r31</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2017-04-01</td>
</tr>
<tr>
<td>N6F26U</td>
<td>android-7.1.1_r28</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>NUF26N</td>
<td>android-7.1.1_r27</td>
<td>Nougat</td>
<td>Nexus 6P</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>NOF27C</td>
<td>android-7.1.1_r26</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>NOF27B</td>
<td>android-7.1.1_r25</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>N4F26T</td>
<td>android-7.1.1_r24</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P, Nexus 9 (volantis/volantisg), Pixel C</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>NMF27D</td>
<td>android-7.1.1_r23</td>
<td>Nougat</td>
<td>Nexus Player</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>NMF26X</td>
<td>android-7.1.1_r22</td>
<td>Nougat</td>
<td>Nexus Player</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>NOF26W</td>
<td>android-7.1.1_r21</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>NOF26V</td>
<td>android-7.1.1_r20</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>N6F26R</td>
<td>android-7.1.1_r17</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>NUF26K</td>
<td>android-7.1.1_r16</td>
<td>Nougat</td>
<td>Nexus 6P</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>N4F26Q</td>
<td>android-7.1.1_r15</td>
<td>Nougat</td>
<td>Nexus 9 (volantis/volantisg)</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>N4F26O</td>
<td>android-7.1.1_r14</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P, Pixel C</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>N6F26Q</td>
<td>android-7.1.1_r13</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>N4F26M</td>
<td>android-7.1.1_r12</td>
<td>Nougat</td>
<td>Nexus 9 (volantis)</td>
+ <td>2017-01-01</td>
</tr>
<tr>
<td>N4F26J</td>
<td>android-7.1.1_r11</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>N4F26I</td>
<td>android-7.1.1_r10</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P, Pixel C</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>NMF26V</td>
<td>android-7.1.1_r9</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>NMF26U</td>
<td>android-7.1.1_r8</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>NMF26R</td>
<td>android-7.1.1_r7</td>
<td>Nougat</td>
<td>Nexus Player</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>NMF26Q</td>
<td>android-7.1.1_r6</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-12-05</td>
</tr>
<tr>
<td>NMF26O</td>
<td>android-7.1.1_r4</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-12-05</td>
</tr>
<tr>
<td>NMF26J</td>
<td>android-7.1.1_r3</td>
<td>Nougat</td>
<td>Nexus Player</td>
+ <td>2016-12-05</td>
</tr>
<tr>
<td>NMF26H</td>
<td>android-7.1.1_r2</td>
<td>Nougat</td>
<td>Pixel C</td>
+ <td>2016-12-05</td>
</tr>
<tr>
<td>NMF26F</td>
<td>android-7.1.1_r1</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 6P, Nexus 9 (volantis/volantisg)</td>
+ <td>2016-12-05</td>
</tr>
<tr>
<td>NDE63X</td>
<td>android-7.1.0_r7</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>NDE63V</td>
<td>android-7.1.0_r6</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>NDE63U</td>
<td>android-7.1.0_r5</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>NDE63P</td>
<td>android-7.1.0_r4</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>NDE63L</td>
<td>android-7.1.0_r2</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>NDE63H</td>
<td>android-7.1.0_r1</td>
<td>Nougat</td>
<td>Pixel XL, Pixel</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>NBD92Q</td>
<td>android-7.0.0_r35</td>
<td>Nougat</td>
<td></td>
+ <td>2017-11-01</td>
</tr>
<tr>
<td>NBD92N</td>
<td>android-7.0.0_r34</td>
<td>Nougat</td>
<td></td>
+ <td>2017-10-01</td>
</tr>
<tr>
<td>NBD92G</td>
<td>android-7.0.0_r33</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-04-01</td>
</tr>
<tr>
<td>NBD92F</td>
<td>android-7.0.0_r32</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-04-01</td>
</tr>
<tr>
<td>NBD92E</td>
<td>android-7.0.0_r31</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>NBD92D</td>
<td>android-7.0.0_r30</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-03-05</td>
</tr>
<tr>
<td>NBD91Z</td>
<td>android-7.0.0_r29</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>NBD91Y</td>
<td>android-7.0.0_r28</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-02-05</td>
</tr>
<tr>
<td>NBD91X</td>
<td>android-7.0.0_r27</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>NBD91U</td>
<td>android-7.0.0_r24</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2016-12-05</td>
</tr>
<tr>
<td>N5D91L</td>
<td>android-7.0.0_r21</td>
<td>Nougat</td>
<td>Nexus 5X</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>NBD91P</td>
<td>android-7.0.0_r19</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>NRD91K</td>
<td>android-7.0.0_r17</td>
<td>Nougat</td>
<td>Nexus 6P</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>NRD91N</td>
<td>android-7.0.0_r15</td>
<td>Nougat</td>
<td>Nexus 5X, Pixel C, Nexus Player, Nexus 9 (volantis/volantisg)</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>NBD90Z</td>
<td>android-7.0.0_r14</td>
<td>Nougat</td>
<td>Nexus 6</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>NBD90X</td>
<td>android-7.0.0_r13</td>
<td>Nougat</td>
<td>Nexus 6P</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>NBD90W</td>
<td>android-7.0.0_r12</td>
<td>Nougat</td>
<td>Nexus 5X</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>NRD91D</td>
<td>android-7.0.0_r7</td>
<td>Nougat</td>
<td>Pixel C, Nexus Player, Nexus 9 (Wi-Fi)</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>NRD90U</td>
<td>android-7.0.0_r6</td>
<td>Nougat</td>
<td>Nexus 6P</td>
+ <td>2016-09-06</td>
</tr>
<tr>
<td>NRD90T</td>
<td>android-7.0.0_r5</td>
<td>Nougat</td>
<td>Nexus 6P</td>
+ <td>2016-09-06</td>
</tr>
<tr>
<td>NRD90S</td>
<td>android-7.0.0_r4</td>
<td>Nougat</td>
<td>Nexus 5X</td>
+ <td>2016-09-06</td>
</tr>
<tr>
<td>NRD90R</td>
<td>android-7.0.0_r3</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 9 (volantis), Nexus Player, Pixel C</td>
+ <td>2016-09-06</td>
</tr>
<tr>
<td>NRD90M</td>
<td>android-7.0.0_r1</td>
<td>Nougat</td>
<td>Nexus 5X, Nexus 9 (volantis), Nexus Player, Pixel C</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MOI10E</td>
<td>android-6.0.1_r81</td>
<td>Marshmallow</td>
<td></td>
+ <td>2017-10-01</td>
</tr>
<tr>
<td>MOB31Z</td>
<td>android-6.0.1_r80</td>
<td>Marshmallow</td>
<td></td>
+ <td>2017-07-01</td>
</tr>
<tr>
<td>MOB31T</td>
<td>android-6.0.1_r79</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2017-02-01</td>
</tr>
<tr>
<td>MOB31S</td>
<td>android-6.0.1_r78</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2017-01-05</td>
</tr>
<tr>
<td>M4B30Z</td>
<td>android-6.0.1_r77</td>
<td>Marshmallow</td>
<td>Nexus 5</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>MOB31K</td>
<td>android-6.0.1_r74</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>MMB31C</td>
<td>android-6.0.1_r73</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-11-05</td>
</tr>
<tr>
<td>M4B30X</td>
<td>android-6.0.1_r72</td>
<td>Marshmallow</td>
<td>Nexus 5</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>MOB31H</td>
<td>android-6.0.1_r70</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>MMB30Y</td>
<td>android-6.0.1_r69</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-10-05</td>
</tr>
<tr>
<td>MTC20K</td>
<td>android-6.0.1_r67</td>
<td>Marshmallow</td>
<td>Nexus 5X</td>
+ <td>2016-09-06</td>
</tr>
<tr>
<td>MOB31E</td>
<td>android-6.0.1_r66</td>
<td>Marshmallow</td>
<td>Nexus 5, Nexus 6, Nexus 9 (volantis)</td>
+ <td>2016-09-06</td>
</tr>
<tr>
<td>MMB30W</td>
<td>android-6.0.1_r65</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-09-06</td>
</tr>
<tr>
<td>MXC89L</td>
<td>android-6.0.1_r63</td>
<td>Marshmallow</td>
<td>Pixel C</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MTC20F</td>
<td>android-6.0.1_r62</td>
<td>Marshmallow</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MOB30Y</td>
<td>android-6.0.1_r60</td>
<td>Marshmallow</td>
<td>Nexus 5</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MOB30X</td>
<td>android-6.0.1_r59</td>
<td>Marshmallow</td>
<td>Nexus 7 (flo/deb)</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MOB30W</td>
<td>android-6.0.1_r58</td>
<td>Marshmallow</td>
<td>Nexus 6, Nexus 9 (volantis/volantisg), Nexus Player</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MMB30S</td>
<td>android-6.0.1_r57</td>
<td>Marshmallow</td>
<td>Nexus 7 (deb)</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MMB30R</td>
<td>android-6.0.1_r56</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-08-05</td>
</tr>
<tr>
<td>MXC89K</td>
<td>android-6.0.1_r55</td>
<td>Marshmallow</td>
<td>Pixel C</td>
+ <td>2016-07-05</td>
</tr>
<tr>
<td>MTC19Z</td>
<td>android-6.0.1_r54</td>
<td>Marshmallow</td>
<td>Nexus 5X</td>
+ <td>2016-07-05</td>
</tr>
<tr>
<td>MTC19X</td>
<td>android-6.0.1_r53</td>
<td>Marshmallow</td>
<td>Nexus 6P</td>
+ <td>2016-07-05</td>
</tr>
<tr>
<td>MOB30P</td>
<td>android-6.0.1_r50</td>
<td>Marshmallow</td>
<td>Nexus 5, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
+ <td>2016-07-05</td>
</tr>
<tr>
<td>MOB30O</td>
<td>android-6.0.1_r49</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-07-05</td>
</tr>
<tr>
<td>MMB30M</td>
<td>android-6.0.1_r48</td>
<td>Marshmallow</td>
<td>Nexus 7 (deb)</td>
+ <td>2016-07-05</td>
</tr>
<tr>
<td>MMB30K</td>
<td>android-6.0.1_r47</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-07-05</td>
</tr>
<tr>
<td>MOB30M</td>
<td>android-6.0.1_r46</td>
<td>Marshmallow</td>
<td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
+ <td>2016-06-01</td>
</tr>
<tr>
<td>MTC19V</td>
<td>android-6.0.1_r45</td>
<td>Marshmallow</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2016-06-01</td>
</tr>
<tr>
<td>MOB30J</td>
<td>android-6.0.1_r43</td>
<td>Marshmallow</td>
<td>Nexus 7 (flo/deb)</td>
+ <td>2016-05-01</td>
</tr>
<tr>
<td>MOB30I</td>
<td>android-6.0.1_r42</td>
<td>Marshmallow</td>
<td>Nexus 6</td>
+ <td>2016-05-01</td>
</tr>
<tr>
<td>MOB30H</td>
<td>android-6.0.1_r41</td>
<td>Marshmallow</td>
<td>Nexus 5</td>
+ <td>2016-05-01</td>
</tr>
<tr>
<td>MOB30G</td>
<td>android-6.0.1_r40</td>
<td>Marshmallow</td>
<td>Nexus 9 (volantis/volantisg), Nexus Player</td>
+ <td>2016-05-01</td>
</tr>
<tr>
<td>MXC89H</td>
<td>android-6.0.1_r33</td>
<td>Marshmallow</td>
<td>Pixel C</td>
+ <td>2016-06-01</td>
</tr>
<tr>
<td>MXC89F</td>
<td>android-6.0.1_r32</td>
<td>Marshmallow</td>
<td>Pixel C</td>
+ <td>2016-05-01</td>
</tr>
<tr>
<td>MMB30J</td>
<td>android-6.0.1_r28</td>
<td>Marshmallow</td>
<td>Nexus 6, Nexus 7 (deb)</td>
+ <td>2016-06-01</td>
</tr>
<tr>
<td>MTC19T</td>
<td>android-6.0.1_r25</td>
<td>Marshmallow</td>
<td>Nexus 5X, Nexus 6P</td>
+ <td>2016-05-01</td>
</tr>
-<tr>
- <td>M5C14J</td>
- <td>android-6.0.1_r31</td>
- <td>Marshmallow</td>
- <td>Pixel C</td>
-</tr>
-<tr>
- <td>MOB30D</td>
- <td>android-6.0.1_r30</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
-</tr>
-<tr>
- <td>MHC19Q</td>
- <td>android-6.0.1_r24</td>
- <td>Marshmallow</td>
- <td>Nexus 5X, Nexus 6P</td>
-</tr>
-<tr>
- <td>MHC19J</td>
- <td>android-6.0.1_r22</td>
- <td>Marshmallow</td>
- <td>Nexus 5X</td>
-</tr>
-<tr>
- <td>MHC19I</td>
- <td>android-6.0.1_r21</td>
- <td>Marshmallow</td>
- <td>Nexus 6P</td>
-</tr>
-<tr>
- <td>MMB29X</td>
- <td>android-6.0.1_r20</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 6, Nexus 7 (deb), Nexus 9 (volantisg)</td>
-</tr>
-<tr>
- <td>MXC14G</td>
- <td>android-6.0.1_r18</td>
- <td>Marshmallow</td>
- <td>Pixel C</td>
-</tr>
-<tr>
- <td>MMB29V</td>
- <td>android-6.0.1_r17</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 5X, Nexus 6, Nexus 6P, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg)</td>
-</tr>
-<tr>
- <td>MXB48T</td>
- <td>android-6.0.1_r16</td>
- <td>Marshmallow</td>
- <td>Pixel C</td>
-</tr>
-<tr>
- <td>MMB29U</td>
- <td>android-6.0.1_r13</td>
- <td>Marshmallow</td>
- <td>Nexus Player</td>
-</tr>
-<tr>
- <td>MMB29R</td>
- <td>android-6.0.1_r12</td>
- <td>Marshmallow</td>
- <td>Nexus 9 (volantis/volantisg)</td>
-</tr>
-<tr>
- <td>MMB29Q</td>
- <td>android-6.0.1_r11</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 5X, Nexus 6, Nexus 6P, Nexus 7 (flo/deb)</td>
-</tr>
-<tr>
- <td>MMB29T</td>
- <td>android-6.0.1_r10</td>
- <td>Marshmallow</td>
- <td>Nexus Player</td>
-</tr>
-<tr>
- <td>MMB29S</td>
- <td>android-6.0.1_r9</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 6, Nexus 9 (volantis/volantisg)</td>
-</tr>
-<tr>
- <td>MMB29P</td>
- <td>android-6.0.1_r8</td>
- <td>Marshmallow</td>
- <td>Nexus 5X, Nexus 6P</td>
-</tr>
-<tr>
- <td>MMB29O</td>
- <td>android-6.0.1_r7</td>
- <td>Marshmallow</td>
- <td>Nexus 7 (flo/deb)</td>
-</tr>
-<tr>
- <td>MXB48K</td>
- <td>android-6.0.1_r5</td>
- <td>Marshmallow</td>
- <td>Pixel C</td>
-</tr>
-<tr>
- <td>MXB48J</td>
- <td>android-6.0.1_r4</td>
- <td>Marshmallow</td>
- <td>Pixel C</td>
-</tr>
-<tr>
- <td>MMB29M</td>
- <td>android-6.0.1_r3</td>
- <td>Marshmallow</td>
- <td>Nexus 6P, Nexus Player</td>
-</tr>
-<tr>
- <td>MMB29K</td>
- <td>android-6.0.1_r1</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 5X, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg)</td>
-</tr>
-<tr>
- <td>MMB29N</td>
- <td>android-6.0.0_r41</td>
- <td>Marshmallow</td>
- <td>Nexus 6P</td>
-</tr>
-<tr>
- <td>MDB08M</td>
- <td>android-6.0.0_r26</td>
- <td>Marshmallow</td>
- <td>Nexus 5X, Nexus 6P</td>
-</tr>
-<tr>
- <td>MDB08L</td>
- <td>android-6.0.0_r25</td>
- <td>Marshmallow</td>
- <td>Nexus 5X, Nexus 6P</td>
-</tr>
-<tr>
- <td>MDB08K</td>
- <td>android-6.0.0_r24</td>
- <td>Marshmallow</td>
- <td>Nexus 6P</td>
-</tr>
-<tr>
- <td>MDB08I</td>
- <td>android-6.0.0_r23</td>
- <td>Marshmallow</td>
- <td>Nexus 5X</td>
-</tr>
-<tr>
- <td>MDA89E</td>
- <td>android-6.0.0_r12</td>
- <td>Marshmallow</td>
- <td>Nexus 5X</td>
-</tr>
-<tr>
- <td>MDA89D</td>
- <td>android-6.0.0_r11</td>
- <td>Marshmallow</td>
- <td>Nexus 6P</td>
-</tr>
-<tr>
- <td>MRA59B</td>
- <td>android-6.0.0_r7</td>
- <td>Marshmallow</td>
- <td>Nexus 7 (deb)</td>
-</tr>
-<tr>
- <td>MRA58X</td>
- <td>android-6.0.0_r6</td>
- <td>Marshmallow</td>
- <td>Nexus 6</td>
-</tr>
-<tr>
- <td>MRA58V</td>
- <td>android-6.0.0_r5</td>
- <td>Marshmallow</td>
- <td>Nexus 7 (flo/deb)</td>
-</tr>
-<tr>
- <td>MRA58U</td>
- <td>android-6.0.0_r4</td>
- <td>Marshmallow</td>
- <td>Nexus 7 (flo)</td>
-</tr>
-<tr>
- <td>MRA58N</td>
- <td>android-6.0.0_r2</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
-</tr>
-<tr>
- <td>MRA58K</td>
- <td>android-6.0.0_r1</td>
- <td>Marshmallow</td>
- <td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
-</tr>
-<tr>
- <td>LMY49M</td>
- <td>android-5.1.1_r38</td>
- <td>Lollipop</td>
- <td>Nexus 10</td>
-</tr>
-<tr>
- <td>LMY49J</td>
- <td>android-5.1.1_r37</td>
- <td>Lollipop</td>
- <td>Nexus 10</td>
-</tr>
-<tr>
- <td>LMY49I</td>
- <td>android-5.1.1_r36</td>
- <td>Lollipop</td>
- <td>Nexus 10</td>
-</tr>
-<tr>
- <td>LMY49H</td>
- <td>android-5.1.1_r35</td>
- <td>Lollipop</td>
- <td>Nexus 10</td>
-</tr>
-<tr>
- <td>LMY49G</td>
- <td>android-5.1.1_r34</td>
- <td>Lollipop</td>
- <td>Nexus 10</td>
-</tr>
-<tr>
- <td>LMY49F</td>
- <td>android-5.1.1_r33</td>
- <td>Lollipop</td>
- <td>Nexus 9 (volantisg), Nexus 10</td>
-</tr>
-<tr>
- <td>LMY48Z</td>
- <td>android-5.1.1_r30</td>
- <td>Lollipop</td>
- <td>Nexus 6, Nexus 7 (deb), Nexus 9 (volantisg), Nexus 10</td>
-</tr>
-<tr>
- <td>LYZ28N</td>
- <td>android-5.1.1_r28</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For T-Mobile ONLY)</td>
-</tr>
-<tr>
- <td>LMY48Y</td>
- <td>android-5.1.1_r26</td>
- <td>Lollipop</td>
- <td>Nexus 6</td>
-</tr>
-<tr>
- <td>LMY48X</td>
- <td>android-5.1.1_r25</td>
- <td>Lollipop</td>
- <td>Nexus 6, Nexus 7 (deb), Nexus 9 (volantisg), Nexus 10</td>
-</tr>
-<tr>
- <td>LMY48W</td>
- <td>android-5.1.1_r24</td>
- <td>Lollipop</td>
- <td>Nexus 6</td>
-</tr>
-<tr>
- <td>LVY48H</td>
- <td>android-5.1.1_r23</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For Project Fi ONLY)</td>
-</tr>
-<tr>
- <td>LYZ28M</td>
- <td>android-5.1.1_r22</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For T-Mobile ONLY)</td>
-</tr>
-<tr>
- <td>LMY48U</td>
- <td>android-5.1.1_r20</td>
- <td>Lollipop</td>
- <td>Nexus 7 (deb)</td>
-</tr>
-<tr>
- <td>LMY48T</td>
- <td>android-5.1.1_r19</td>
- <td>Lollipop</td>
- <td>Nexus 4, Nexus 6, Nexus 9 (volantis/volantisg), Nexus 10</td>
-</tr>
-<tr>
- <td>LVY48F</td>
- <td>android-5.1.1_r18</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For Project Fi ONLY)</td>
-</tr>
-<tr>
- <td>LYZ28K</td>
- <td>android-5.1.1_r17</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For T-Mobile ONLY)</td>
-</tr>
-<tr>
- <td>LMY48P</td>
- <td>android-5.1.1_r16</td>
- <td>Lollipop</td>
- <td>Nexus 7 (deb)</td>
-</tr>
-<tr>
- <td>LMY48N</td>
- <td>android-5.1.1_r15</td>
- <td>Lollipop</td>
- <td>Nexus Player</td>
-</tr>
-<tr>
- <td>LMY48M</td>
- <td>android-5.1.1_r14</td>
- <td>Lollipop</td>
- <td>Nexus 4, Nexus 5, Nexus 6, Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10</td>
-</tr>
-<tr>
- <td>LVY48E</td>
- <td>android-5.1.1_r13</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For Project Fi ONLY)</td>
-</tr>
-<tr>
- <td>LYZ28J</td>
- <td>android-5.1.1_r12</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For T-Mobile ONLY)</td>
-</tr>
-<tr>
- <td>LMY48J</td>
- <td>android-5.1.1_r10</td>
- <td>Lollipop</td>
- <td>Nexus Player</td>
-</tr>
-<tr>
- <td>LMY48I</td>
- <td>android-5.1.1_r9</td>
- <td>Lollipop</td>
- <td>Nexus 4, Nexus 5, Nexus 6, Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10</td>
-</tr>
-<tr>
- <td>LVY48C</td>
- <td>android-5.1.1_r8</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For Project Fi ONLY)</td>
-</tr>
-<tr>
- <td>LMY48G</td>
- <td>android-5.1.1_r6</td>
- <td>Lollipop</td>
- <td>Nexus 7 (flo)</td>
-</tr>
-<tr>
- <td>LYZ28E</td>
- <td>android-5.1.1_r5</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For T-Mobile ONLY)</td>
-</tr>
-<tr>
- <td>LMY47Z</td>
- <td>android-5.1.1_r4</td>
- <td>Lollipop</td>
- <td>Nexus 6 (All carriers except T-Mobile US)</td>
-</tr>
-<tr>
- <td>LMY48B</td>
- <td>android-5.1.1_r3</td>
- <td>Lollipop</td>
- <td>Nexus 5</td>
-</tr>
-<tr>
- <td>LMY47X</td>
- <td>android-5.1.1_r2</td>
- <td>Lollipop</td>
- <td>Nexus 9 (volantis)</td>
-</tr>
-<tr>
- <td>LMY47V</td>
- <td>android-5.1.1_r1</td>
- <td>Lollipop</td>
- <td>Nexus 7 (flo/grouper), Nexus 10, Nexus Player</td>
-</tr>
-<tr>
- <td>LMY47O</td>
- <td>android-5.1.0_r5</td>
- <td>Lollipop</td>
- <td>Nexus 4, Nexus 7 (flo/deb)</td>
-</tr>
-<tr>
- <td>LMY47M</td>
- <td>android-5.1.0_r4</td>
- <td>Lollipop</td>
- <td>Nexus 6 (For T-Mobile ONLY)</td>
-</tr>
-<tr>
- <td>LMY47I</td>
- <td>android-5.1.0_r3</td>
- <td>Lollipop</td>
- <td>Nexus 5, Nexus 6</td>
-</tr>
-<tr>
- <td>LMY47E</td>
- <td>android-5.1.0_r2</td>
- <td>Lollipop</td>
- <td>Nexus 6</td>
-</tr>
-<tr>
- <td>LMY47D</td>
- <td>android-5.1.0_r1</td>
- <td>Lollipop</td>
- <td>Nexus 5, Nexus 6, Nexus 7 (grouper/tilapia), Nexus 10, Nexus Player</td>
-</tr>
-<tr>
- <td>LRX22L</td>
- <td>android-5.0.2_r3</td>
- <td>Lollipop</td>
- <td>Nexus 9 (volantis/volantisg)</td>
-</tr>
-<tr>
- <td>LRX22G</td>
- <td>android-5.0.2_r1</td>
- <td>Lollipop</td>
- <td>Nexus 7 (flo/deb/grouper/tilapia), Nexus 10</td>
-</tr>
-<tr>
- <td>LRX22C</td>
- <td>android-5.0.1_r1</td>
- <td>Lollipop</td>
- <td>Nexus 4, Nexus 5, Nexus 6 (shamu), Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10</td>
-</tr>
-<tr>
- <td>LRX21V</td>
- <td>android-5.0.0_r7.0.1</td>
- <td>Lollipop</td>
- <td>Nexus Player (fugu)</td>
-</tr>
-<tr>
- <td>LRX21T</td>
- <td>android-5.0.0_r6.0.1</td>
- <td>Lollipop</td>
- <td>Nexus 4</td>
-</tr>
-<tr>
- <td>LRX21R</td>
- <td>android-5.0.0_r5.1.0.1</td>
- <td>Lollipop</td>
- <td>Nexus 9 (volantis)</td>
-</tr>
-<tr>
- <td>LRX21Q</td>
- <td>android-5.0.0_r5.0.1</td>
- <td>Lollipop</td>
- <td>Nexus 9 (volantis)</td>
-</tr>
-<tr>
- <td>LRX21P</td>
- <td>android-5.0.0_r4.0.1</td>
- <td>Lollipop</td>
- <td>Nexus 7 (flo/grouper), Nexus 10</td>
-</tr>
-<tr>
- <td>LRX21O</td>
- <td>android-5.0.0_r3.0.1</td>
- <td>Lollipop</td>
- <td>Nexus 5 (hammerhead), Nexus 6 (shamu)</td>
-</tr>
-<tr>
- <td>LRX21M</td>
- <td>android-5.0.0_r2.0.1</td>
- <td>Lollipop</td>
- <td>Nexus Player (fugu)</td>
-</tr>
-<tr>
- <td>LRX21L</td>
- <td>android-5.0.0_r1.0.1</td>
- <td>Lollipop</td>
- <td>Nexus 9 (volantis)</td>
-</tr>
-<tr>
- <td>KTU84Q</td>
- <td>android-4.4.4_r2</td>
- <td>KitKat</td>
- <td>Nexus 5 (hammerhead) (For 2Degrees/NZ, Telstra/AUS and India ONLY)</td>
-</tr>
-<tr>
- <td>KTU84P</td>
- <td>android-4.4.4_r1</td>
- <td>KitKat</td>
- <td>Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>KTU84M</td>
- <td>android-4.4.3_r1.1</td>
- <td>KitKat</td>
- <td>Nexus 5 (hammerhead)</td>
-</tr>
-<tr>
- <td>KTU84L</td>
- <td>android-4.4.3_r1</td>
- <td>KitKat</td>
- <td>Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>KVT49L</td>
- <td>android-4.4.2_r2</td>
- <td>KitKat</td>
- <td>Nexus 7 (deb Verizon)</td>
-</tr>
-<tr>
- <td>KOT49H</td>
- <td>android-4.4.2_r1</td>
- <td>KitKat</td>
- <td> Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>KOT49E</td>
- <td>android-4.4.1_r1</td>
- <td>KitKat</td>
- <td>Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>KRT16S</td>
- <td>android-4.4_r1.2</td>
- <td>KitKat</td>
- <td>Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>KRT16M</td>
- <td>android-4.4_r1</td>
- <td>KitKat</td>
- <td>Nexus 5 (hammerhead)</td>
-</tr>
-<tr>
- <td>JLS36I</td>
- <td>android-4.3.1_r1</td>
- <td>Jelly Bean</td>
- <td>Nexus 7 (deb)</td>
-</tr>
-<tr>
- <td>JLS36C</td>
- <td>android-4.3_r3</td>
- <td>Jelly Bean</td>
- <td> Nexus 7 (deb)</td>
-</tr>
-<tr>
- <td>JSS15R</td>
- <td>android-4.3_r2.3</td>
- <td>Jelly Bean</td>
- <td>Nexus 7 (flo)</td>
-</tr>
-<tr>
- <td>JSS15Q</td>
- <td>android-4.3_r2.2</td>
- <td>Jelly Bean</td>
- <td>Nexus 7 (flo)</td>
-</tr>
-<tr>
- <td>JSS15J</td>
- <td>android-4.3_r2.1</td>
- <td>Jelly Bean</td>
- <td>Nexus 7 (flo/deb)</td>
-</tr>
-<tr>
- <td>JSR78D</td>
- <td>android-4.3_r2</td>
- <td>Jelly Bean</td>
- <td>Nexus 7 (deb)</td>
-</tr>
-<tr>
- <td>JWR66Y</td>
- <td>android-4.3_r1.1</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus, Nexus 7 (grouper/tilapia), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>JWR66V</td>
- <td>android-4.3_r1</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus, Nexus 7 (grouper/tilapia), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>JWR66N</td>
- <td>android-4.3_r0.9.1</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus, Nexus 7 (grouper/tilapia/flo), Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>JWR66L</td>
- <td>android-4.3_r0.9</td>
- <td>Jelly Bean</td>
- <td>Nexus 7</td>
-</tr>
-<tr>
- <td>JDQ39E</td>
- <td>android-4.2.2_r1.2</td>
- <td>Jelly Bean</td>
- <td>Nexus 4</td>
-</tr>
-<tr>
- <td>JDQ39B</td>
- <td>android-4.2.2_r1.1</td>
- <td>Jelly Bean</td>
- <td>Nexus 7</td>
-</tr>
-<tr>
- <td>JDQ39</td>
- <td>android-4.2.2_r1</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>JOP40G</td>
- <td>android-4.2.1_r1.2</td>
- <td>Jelly Bean</td>
- <td>Nexus 4</td>
-</tr>
-<tr>
- <td>JOP40F</td>
- <td>android-4.2.1_r1.1</td>
- <td>Jelly Bean</td>
- <td>Nexus 10</td>
-</tr>
-<tr>
- <td>JOP40D</td>
- <td>android-4.2.1_r1</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>JOP40C</td>
- <td>android-4.2_r1</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10</td>
-</tr>
-<tr>
- <td>JZO54M</td>
- <td>android-4.1.2_r2.1</td>
- <td>Jelly Bean</td>
- <td></td>
-</tr>
-<tr>
- <td>JZO54L</td>
- <td>android-4.1.2_r2</td>
- <td>Jelly Bean</td>
- <td></td>
-</tr>
-<tr>
- <td>JZO54K</td>
- <td>android-4.1.2_r1</td>
- <td>Jelly Bean</td>
- <td>Nexus S, Galaxy Nexus, Nexus 7</td>
-</tr>
-<tr>
- <td>JRO03S</td>
- <td>android-4.1.1_r6.1</td>
- <td>Jelly Bean</td>
- <td>Nexus 7</td>
-</tr>
-<tr>
- <td>JRO03R</td>
- <td>android-4.1.1_r6</td>
- <td>Jelly Bean</td>
- <td>Nexus S 4G</td>
-</tr>
-<tr>
- <td>JRO03O</td>
- <td>android-4.1.1_r5</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>JRO03L</td>
- <td>android-4.1.1_r4</td>
- <td>Jelly Bean</td>
- <td>Nexus S</td>
-</tr>
-<tr>
- <td>JRO03H</td>
- <td>android-4.1.1_r3</td>
- <td>Jelly Bean</td>
- <td></td>
-</tr>
-<tr>
- <td>JRO03E</td>
- <td>android-4.1.1_r2</td>
- <td>Jelly Bean</td>
- <td>Nexus S</td>
-</tr>
-<tr>
- <td>JRO03D</td>
- <td>android-4.1.1_r1.1</td>
- <td>Jelly Bean</td>
- <td>Nexus 7</td>
-</tr>
-<tr>
- <td>JRO03C</td>
- <td>android-4.1.1_r1</td>
- <td>Jelly Bean</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>IMM76L</td>
- <td>android-4.0.4_r2.1</td>
- <td>Ice Cream Sandwich</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td>IMM76K</td>
- <td>android-4.0.4_r2</td>
- <td>Ice Cream Sandwich</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>IMM76I</td>
- <td>android-4.0.4_r1.2</td>
- <td>Ice Cream Sandwich</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>IMM76D</td>
- <td>android-4.0.4_r1.1</td>
- <td>Ice Cream Sandwich</td>
- <td>Nexus S, Nexus S 4G, Galaxy Nexus</td>
-</tr>
-<tr>
- <td>IMM76</td>
- <td>android-4.0.4_r1</td>
- <td>Ice Cream Sandwich</td>
- <td></td>
-</tr>
-<tr>
- <td>IML77</td>
- <td>android-4.0.3_r1.1</td>
- <td>Ice Cream Sandwich</td>
- <td></td>
-</tr>
-<tr>
- <td>IML74K</td>
- <td>android-4.0.3_r1</td>
- <td>Ice Cream Sandwich</td>
- <td>Nexus S</td>
-</tr>
-<tr>
- <td>ICL53F</td>
- <td>android-4.0.2_r1</td>
- <td>Ice Cream Sandwich</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>ITL41F</td>
- <td>android-4.0.1_r1.2</td>
- <td>Ice Cream Sandwich</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>ITL41D</td>
- <td>android-4.0.1_r1.1</td>
- <td>Ice Cream Sandwich</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>ITL41D</td>
- <td>android-4.0.1_r1</td>
- <td>Ice Cream Sandwich</td>
- <td>Galaxy Nexus</td>
-</tr>
-<tr>
- <td>GWK74</td>
- <td>android-2.3.7_r1</td>
- <td>Gingerbread</td>
- <td>Nexus S 4G</td>
-</tr>
-<tr>
- <td>GRK39F</td>
- <td>android-2.3.6_r1</td>
- <td>Gingerbread</td>
- <td>Nexus One, Nexus S</td>
-</tr>
-<tr>
- <td>GRK39C</td>
- <td>android-2.3.6_r0.9</td>
- <td>Gingerbread</td>
- <td>Nexus S</td>
-</tr>
-<tr>
- <td>GRJ90</td>
- <td>android-2.3.5_r1</td>
- <td>Gingerbread</td>
- <td>Nexus S 4G</td>
-</tr>
-<tr>
- <td>GRJ22</td>
- <td>android-2.3.4_r1</td>
- <td>Gingerbread</td>
- <td>Nexus One, Nexus S, Nexus S 4G</td>
-</tr>
-<tr>
- <td>GRJ06D</td>
- <td>android-2.3.4_r0.9</td>
- <td>Gingerbread</td>
- <td>Nexus S 4G</td>
-</tr>
-<tr>
- <td>GRI54</td>
- <td>android-2.3.3_r1.1</td>
- <td>Gingerbread</td>
- <td>Nexus S</td>
-</tr>
-<tr>
- <td>GRI40</td>
- <td>android-2.3.3_r1</td>
- <td>Gingerbread</td>
- <td>Nexus One, Nexus S</td>
-</tr>
-<tr>
- <td>GRH78C</td>
- <td>android-2.3.2_r1</td>
- <td>Gingerbread</td>
- <td>Nexus S</td>
-</tr>
-<tr>
- <td>GRH78</td>
- <td>android-2.3.1_r1</td>
- <td>Gingerbread</td>
- <td>Nexus S</td>
-</tr>
-<tr>
- <td>GRH55</td>
- <td>android-2.3_r1</td>
- <td>Gingerbread</td>
- <td>earliest Gingerbread version, Nexus S</td>
-</tr>
-<tr>
- <td>FRK76C</td>
- <td>android-2.2.3_r2</td>
- <td>Froyo</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td>FRK76</td>
- <td>android-2.2.3_r1</td>
- <td>Froyo</td>
- <td></td>
-</tr>
-<tr>
- <td>FRG83G</td>
- <td>android-2.2.2_r1</td>
- <td>Froyo</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>FRG83D</td>
- <td>android-2.2.1_r2</td>
- <td>Froyo</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>FRG83</td>
- <td>android-2.2.1_r1</td>
- <td>Froyo</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>FRG22D</td>
- <td>android-2.2_r1.3</td>
- <td>Froyo</td>
- <td></td>
-</tr>
-<tr>
- <td>FRG01B</td>
- <td>android-2.2_r1.2</td>
- <td>Froyo</td>
- <td></td>
-</tr>
-<tr>
- <td>FRF91</td>
- <td>android-2.2_r1.1</td>
- <td>Froyo</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>FRF85B</td>
- <td>android-2.2_r1</td>
- <td>Froyo</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>EPF21B</td>
- <td>android-2.1_r2.1p2</td>
- <td>Eclair</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td>ESE81</td>
- <td>android-2.1_r2.1s</td>
- <td>Eclair</td>
- <td></td>
-</tr>
-<tr>
- <td>EPE54B</td>
- <td>android-2.1_r2.1p</td>
- <td>Eclair</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>ERE27</td>
- <td>android-2.1_r2</td>
- <td>Eclair</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>ERD79</td>
- <td>android-2.1_r1</td>
- <td>Eclair</td>
- <td>Nexus One</td>
-</tr>
-<tr>
- <td>ESD56</td>
- <td>android-2.0.1_r1</td>
- <td>Eclair</td>
- <td></td>
-</tr>
-<tr>
- <td>ESD20</td>
- <td>android-2.0_r1</td>
- <td>Eclair</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td>DMD64</td>
- <td>android-1.6_r1.5</td>
- <td>Donut</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
- <td>DRD20</td>
- <td>android-1.6_r1.4</td>
- <td></td>
- <td></td>
-</tr>
-<tr>
- <td>DRD08</td>
- <td>android-1.6_r1.3</td>
- <td></td>
- <td></td>
-</tr>
-<tr>
- <td>DRC92</td>
- <td>android-1.6_r1.2</td>
- <td></td>
- <td></td>
-</tr>
-</tbody>
+ <tr>
+ <td>M5C14J</td>
+ <td>android-6.0.1_r31</td>
+ <td>Marshmallow</td>
+ <td>Pixel C</td>
+ <td>2016-04-01</td>
+ </tr>
+ <tr>
+ <td>MOB30D</td>
+ <td>android-6.0.1_r30</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
+ <td>2016-04-02</td>
+ </tr>
+ <tr>
+ <td>MHC19Q</td>
+ <td>android-6.0.1_r24</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5X, Nexus 6P</td>
+ <td>2016-04-02</td>
+ </tr>
+ <tr>
+ <td>MHC19J</td>
+ <td>android-6.0.1_r22</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5X</td>
+ <td>2016-03-01</td>
+ </tr>
+ <tr>
+ <td>MHC19I</td>
+ <td>android-6.0.1_r21</td>
+ <td>Marshmallow</td>
+ <td>Nexus 6P</td>
+ <td>2016-03-01</td>
+ </tr>
+ <tr>
+ <td>MMB29X</td>
+ <td>android-6.0.1_r20</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 6, Nexus 7 (deb), Nexus 9 (volantisg)</td>
+ <td>2016-04-02</td>
+ </tr>
+ <tr>
+ <td>MXC14G</td>
+ <td>android-6.0.1_r18</td>
+ <td>Marshmallow</td>
+ <td>Pixel C</td>
+ <td>2016-03-01</td>
+ </tr>
+ <tr>
+ <td>MMB29V</td>
+ <td>android-6.0.1_r17</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 5X, Nexus 6, Nexus 6P, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg)</td>
+ <td>2016-03-01</td>
+ </tr>
+ <tr>
+ <td>MXB48T</td>
+ <td>android-6.0.1_r16</td>
+ <td>Marshmallow</td>
+ <td>Pixel C</td>
+ <td>2016-02-01</td>
+ </tr>
+ <tr>
+ <td>MMB29U</td>
+ <td>android-6.0.1_r13</td>
+ <td>Marshmallow</td>
+ <td>Nexus Player</td>
+ <td>2016-02-01</td>
+ </tr>
+ <tr>
+ <td>MMB29R</td>
+ <td>android-6.0.1_r12</td>
+ <td>Marshmallow</td>
+ <td>Nexus 9 (volantis/volantisg)</td>
+ <td>2016-02-01</td>
+ </tr>
+ <tr>
+ <td>MMB29Q</td>
+ <td>android-6.0.1_r11</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 5X, Nexus 6, Nexus 6P, Nexus 7 (flo/deb)</td>
+ <td>2016-02-01</td>
+ </tr>
+ <tr>
+ <td>MMB29T</td>
+ <td>android-6.0.1_r10</td>
+ <td>Marshmallow</td>
+ <td>Nexus Player</td>
+ <td>2016-01-01</td>
+ </tr>
+ <tr>
+ <td>MMB29S</td>
+ <td>android-6.0.1_r9</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 6, Nexus 9 (volantis/volantisg)</td>
+ <td>2016-01-01</td>
+ </tr>
+ <tr>
+ <td>MMB29P</td>
+ <td>android-6.0.1_r8</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5X, Nexus 6P</td>
+ <td>2016-01-01</td>
+ </tr>
+ <tr>
+ <td>MMB29O</td>
+ <td>android-6.0.1_r7</td>
+ <td>Marshmallow</td>
+ <td>Nexus 7 (flo/deb)</td>
+ <td>2016-01-01</td>
+ </tr>
+ <tr>
+ <td>MXB48K</td>
+ <td>android-6.0.1_r5</td>
+ <td>Marshmallow</td>
+ <td>Pixel C</td>
+ <td>2015-12-01</td>
+ </tr>
+ <tr>
+ <td>MXB48J</td>
+ <td>android-6.0.1_r4</td>
+ <td>Marshmallow</td>
+ <td>Pixel C</td>
+ <td>2015-12-01</td>
+ </tr>
+ <tr>
+ <td>MMB29M</td>
+ <td>android-6.0.1_r3</td>
+ <td>Marshmallow</td>
+ <td>Nexus 6P, Nexus Player</td>
+ <td>2015-12-01</td>
+ </tr>
+ <tr>
+ <td>MMB29K</td>
+ <td>android-6.0.1_r1</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 5X, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg)</td>
+ <td>2015-12-01</td>
+ </tr>
+ <tr>
+ <td>MMB29N</td>
+ <td>android-6.0.0_r41</td>
+ <td>Marshmallow</td>
+ <td>Nexus 6P</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>MDB08M</td>
+ <td>android-6.0.0_r26</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5X, Nexus 6P</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>MDB08L</td>
+ <td>android-6.0.0_r25</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5X, Nexus 6P</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>MDB08K</td>
+ <td>android-6.0.0_r24</td>
+ <td>Marshmallow</td>
+ <td>Nexus 6P</td>
+ <td>2015-10-01</td>
+ </tr>
+ <tr>
+ <td>MDB08I</td>
+ <td>android-6.0.0_r23</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5X</td>
+ <td>2015-10-01</td>
+ </tr>
+ <tr>
+ <td>MDA89E</td>
+ <td>android-6.0.0_r12</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5X</td>
+ <td>2015-10-01</td>
+ </tr>
+ <tr>
+ <td>MDA89D</td>
+ <td>android-6.0.0_r11</td>
+ <td>Marshmallow</td>
+ <td>Nexus 6P</td>
+ <td>2015-10-01</td>
+ </tr>
+ <tr>
+ <td>MRA59B</td>
+ <td>android-6.0.0_r7</td>
+ <td>Marshmallow</td>
+ <td>Nexus 7 (deb)</td>
+ <td>2015-12-01</td>
+ </tr>
+ <tr>
+ <td>MRA58X</td>
+ <td>android-6.0.0_r6</td>
+ <td>Marshmallow</td>
+ <td>Nexus 6</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>MRA58V</td>
+ <td>android-6.0.0_r5</td>
+ <td>Marshmallow</td>
+ <td>Nexus 7 (flo/deb)</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>MRA58U</td>
+ <td>android-6.0.0_r4</td>
+ <td>Marshmallow</td>
+ <td>Nexus 7 (flo)</td>
+ <td>2015-10-01</td>
+ </tr>
+ <tr>
+ <td>MRA58N</td>
+ <td>android-6.0.0_r2</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>MRA58K</td>
+ <td>android-6.0.0_r1</td>
+ <td>Marshmallow</td>
+ <td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
+ <td>2015-10-01</td>
+ </tr>
+ <tr>
+ <td>LMY49M</td>
+ <td>android-5.1.1_r38</td>
+ <td>Lollipop</td>
+ <td>Nexus 10</td>
+ <td>2016-07-05</td>
+ </tr>
+ <tr>
+ <td>LMY49J</td>
+ <td>android-5.1.1_r37</td>
+ <td>Lollipop</td>
+ <td>Nexus 10</td>
+ <td>2016-04-01</td>
+ </tr>
+ <tr>
+ <td>LMY49I</td>
+ <td>android-5.1.1_r36</td>
+ <td>Lollipop</td>
+ <td>Nexus 10</td>
+ <td>2016-03-01</td>
+ </tr>
+ <tr>
+ <td>LMY49H</td>
+ <td>android-5.1.1_r35</td>
+ <td>Lollipop</td>
+ <td>Nexus 10</td>
+ <td>2016-03-01</td>
+ </tr>
+ <tr>
+ <td>LMY49G</td>
+ <td>android-5.1.1_r34</td>
+ <td>Lollipop</td>
+ <td>Nexus 10</td>
+ <td>2016-02-01</td>
+ </tr>
+ <tr>
+ <td>LMY49F</td>
+ <td>android-5.1.1_r33</td>
+ <td>Lollipop</td>
+ <td>Nexus 9 (volantisg), Nexus 10</td>
+ <td>2016-01-01</td>
+ </tr>
+ <tr>
+ <td>LMY48Z</td>
+ <td>android-5.1.1_r30</td>
+ <td>Lollipop</td>
+ <td>Nexus 6, Nexus 7 (deb), Nexus 9 (volantisg), Nexus 10</td>
+ <td>2015-12-01</td>
+ </tr>
+ <tr>
+ <td>LYZ28N</td>
+ <td>android-5.1.1_r28</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For T-Mobile ONLY)</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>LMY48Y</td>
+ <td>android-5.1.1_r26</td>
+ <td>Lollipop</td>
+ <td>Nexus 6</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>LMY48X</td>
+ <td>android-5.1.1_r25</td>
+ <td>Lollipop</td>
+ <td>Nexus 6, Nexus 7 (deb), Nexus 9 (volantisg), Nexus 10</td>
+ <td>2015-11-01</td>
+ </tr>
+ <tr>
+ <td>LMY48W</td>
+ <td>android-5.1.1_r24</td>
+ <td>Lollipop</td>
+ <td>Nexus 6</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LVY48H</td>
+ <td>android-5.1.1_r23</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For Project Fi ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LYZ28M</td>
+ <td>android-5.1.1_r22</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For T-Mobile ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48U</td>
+ <td>android-5.1.1_r20</td>
+ <td>Lollipop</td>
+ <td>Nexus 7 (deb)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48T</td>
+ <td>android-5.1.1_r19</td>
+ <td>Lollipop</td>
+ <td>Nexus 4, Nexus 6, Nexus 9 (volantis/volantisg), Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LVY48F</td>
+ <td>android-5.1.1_r18</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For Project Fi ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LYZ28K</td>
+ <td>android-5.1.1_r17</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For T-Mobile ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48P</td>
+ <td>android-5.1.1_r16</td>
+ <td>Lollipop</td>
+ <td>Nexus 7 (deb)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48N</td>
+ <td>android-5.1.1_r15</td>
+ <td>Lollipop</td>
+ <td>Nexus Player</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48M</td>
+ <td>android-5.1.1_r14</td>
+ <td>Lollipop</td>
+ <td>Nexus 4, Nexus 5, Nexus 6, Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LVY48E</td>
+ <td>android-5.1.1_r13</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For Project Fi ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LYZ28J</td>
+ <td>android-5.1.1_r12</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For T-Mobile ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48J</td>
+ <td>android-5.1.1_r10</td>
+ <td>Lollipop</td>
+ <td>Nexus Player</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48I</td>
+ <td>android-5.1.1_r9</td>
+ <td>Lollipop</td>
+ <td>Nexus 4, Nexus 5, Nexus 6, Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LVY48C</td>
+ <td>android-5.1.1_r8</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For Project Fi ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48G</td>
+ <td>android-5.1.1_r6</td>
+ <td>Lollipop</td>
+ <td>Nexus 7 (flo)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LYZ28E</td>
+ <td>android-5.1.1_r5</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For T-Mobile ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47Z</td>
+ <td>android-5.1.1_r4</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (All carriers except T-Mobile US)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY48B</td>
+ <td>android-5.1.1_r3</td>
+ <td>Lollipop</td>
+ <td>Nexus 5</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47X</td>
+ <td>android-5.1.1_r2</td>
+ <td>Lollipop</td>
+ <td>Nexus 9 (volantis)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47V</td>
+ <td>android-5.1.1_r1</td>
+ <td>Lollipop</td>
+ <td>Nexus 7 (flo/grouper), Nexus 10, Nexus Player</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47O</td>
+ <td>android-5.1.0_r5</td>
+ <td>Lollipop</td>
+ <td>Nexus 4, Nexus 7 (flo/deb)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47M</td>
+ <td>android-5.1.0_r4</td>
+ <td>Lollipop</td>
+ <td>Nexus 6 (For T-Mobile ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47I</td>
+ <td>android-5.1.0_r3</td>
+ <td>Lollipop</td>
+ <td>Nexus 5, Nexus 6</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47E</td>
+ <td>android-5.1.0_r2</td>
+ <td>Lollipop</td>
+ <td>Nexus 6</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LMY47D</td>
+ <td>android-5.1.0_r1</td>
+ <td>Lollipop</td>
+ <td>Nexus 5, Nexus 6, Nexus 7 (grouper/tilapia), Nexus 10, Nexus Player</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX22L</td>
+ <td>android-5.0.2_r3</td>
+ <td>Lollipop</td>
+ <td>Nexus 9 (volantis/volantisg)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX22G</td>
+ <td>android-5.0.2_r1</td>
+ <td>Lollipop</td>
+ <td>Nexus 7 (flo/deb/grouper/tilapia), Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX22C</td>
+ <td>android-5.0.1_r1</td>
+ <td>Lollipop</td>
+ <td>Nexus 4, Nexus 5, Nexus 6 (shamu), Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21V</td>
+ <td>android-5.0.0_r7.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus Player (fugu)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21T</td>
+ <td>android-5.0.0_r6.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus 4</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21R</td>
+ <td>android-5.0.0_r5.1.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus 9 (volantis)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21Q</td>
+ <td>android-5.0.0_r5.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus 9 (volantis)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21P</td>
+ <td>android-5.0.0_r4.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus 7 (flo/grouper), Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21O</td>
+ <td>android-5.0.0_r3.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus 5 (hammerhead), Nexus 6 (shamu)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21M</td>
+ <td>android-5.0.0_r2.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus Player (fugu)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>LRX21L</td>
+ <td>android-5.0.0_r1.0.1</td>
+ <td>Lollipop</td>
+ <td>Nexus 9 (volantis)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KTU84Q</td>
+ <td>android-4.4.4_r2</td>
+ <td>KitKat</td>
+ <td>Nexus 5 (hammerhead) (For 2Degrees/NZ, Telstra/AUS and India ONLY)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KTU84P</td>
+ <td>android-4.4.4_r1</td>
+ <td>KitKat</td>
+ <td>Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KTU84M</td>
+ <td>android-4.4.3_r1.1</td>
+ <td>KitKat</td>
+ <td>Nexus 5 (hammerhead)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KTU84L</td>
+ <td>android-4.4.3_r1</td>
+ <td>KitKat</td>
+ <td>Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KVT49L</td>
+ <td>android-4.4.2_r2</td>
+ <td>KitKat</td>
+ <td>Nexus 7 (deb Verizon)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KOT49H</td>
+ <td>android-4.4.2_r1</td>
+ <td>KitKat</td>
+ <td>Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KOT49E</td>
+ <td>android-4.4.1_r1</td>
+ <td>KitKat</td>
+ <td>Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KRT16S</td>
+ <td>android-4.4_r1.2</td>
+ <td>KitKat</td>
+ <td>Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>KRT16M</td>
+ <td>android-4.4_r1</td>
+ <td>KitKat</td>
+ <td>Nexus 5 (hammerhead)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JLS36I</td>
+ <td>android-4.3.1_r1</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7 (deb)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JLS36C</td>
+ <td>android-4.3_r3</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7 (deb)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JSS15R</td>
+ <td>android-4.3_r2.3</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7 (flo)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JSS15Q</td>
+ <td>android-4.3_r2.2</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7 (flo)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JSS15J</td>
+ <td>android-4.3_r2.1</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7 (flo/deb)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JSR78D</td>
+ <td>android-4.3_r2</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7 (deb)</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JWR66Y</td>
+ <td>android-4.3_r1.1</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus, Nexus 7 (grouper/tilapia), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JWR66V</td>
+ <td>android-4.3_r1</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus, Nexus 7 (grouper/tilapia), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JWR66N</td>
+ <td>android-4.3_r0.9.1</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus, Nexus 7 (grouper/tilapia/flo), Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JWR66L</td>
+ <td>android-4.3_r0.9</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JDQ39E</td>
+ <td>android-4.2.2_r1.2</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 4</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JDQ39B</td>
+ <td>android-4.2.2_r1.1</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JDQ39</td>
+ <td>android-4.2.2_r1</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JOP40G</td>
+ <td>android-4.2.1_r1.2</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 4</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JOP40F</td>
+ <td>android-4.2.1_r1.1</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JOP40D</td>
+ <td>android-4.2.1_r1</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JOP40C</td>
+ <td>android-4.2_r1</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JZO54M</td>
+ <td>android-4.1.2_r2.1</td>
+ <td>Jelly Bean</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JZO54L</td>
+ <td>android-4.1.2_r2</td>
+ <td>Jelly Bean</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JZO54K</td>
+ <td>android-4.1.2_r1</td>
+ <td>Jelly Bean</td>
+ <td>Nexus S, Galaxy Nexus, Nexus 7</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03S</td>
+ <td>android-4.1.1_r6.1</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03R</td>
+ <td>android-4.1.1_r6</td>
+ <td>Jelly Bean</td>
+ <td>Nexus S 4G</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03O</td>
+ <td>android-4.1.1_r5</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03L</td>
+ <td>android-4.1.1_r4</td>
+ <td>Jelly Bean</td>
+ <td>Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03H</td>
+ <td>android-4.1.1_r3</td>
+ <td>Jelly Bean</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03E</td>
+ <td>android-4.1.1_r2</td>
+ <td>Jelly Bean</td>
+ <td>Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03D</td>
+ <td>android-4.1.1_r1.1</td>
+ <td>Jelly Bean</td>
+ <td>Nexus 7</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>JRO03C</td>
+ <td>android-4.1.1_r1</td>
+ <td>Jelly Bean</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>IMM76L</td>
+ <td>android-4.0.4_r2.1</td>
+ <td>Ice Cream Sandwich</td>
+ <td>&nbsp;</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>IMM76K</td>
+ <td>android-4.0.4_r2</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>IMM76I</td>
+ <td>android-4.0.4_r1.2</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>IMM76D</td>
+ <td>android-4.0.4_r1.1</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Nexus S, Nexus S 4G, Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>IMM76</td>
+ <td>android-4.0.4_r1</td>
+ <td>Ice Cream Sandwich</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>IML77</td>
+ <td>android-4.0.3_r1.1</td>
+ <td>Ice Cream Sandwich</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>IML74K</td>
+ <td>android-4.0.3_r1</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ICL53F</td>
+ <td>android-4.0.2_r1</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ITL41F</td>
+ <td>android-4.0.1_r1.2</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ITL41D</td>
+ <td>android-4.0.1_r1.1</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ITL41D</td>
+ <td>android-4.0.1_r1</td>
+ <td>Ice Cream Sandwich</td>
+ <td>Galaxy Nexus</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GWK74</td>
+ <td>android-2.3.7_r1</td>
+ <td>Gingerbread</td>
+ <td>Nexus S 4G</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRK39F</td>
+ <td>android-2.3.6_r1</td>
+ <td>Gingerbread</td>
+ <td>Nexus One, Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRK39C</td>
+ <td>android-2.3.6_r0.9</td>
+ <td>Gingerbread</td>
+ <td>Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRJ90</td>
+ <td>android-2.3.5_r1</td>
+ <td>Gingerbread</td>
+ <td>Nexus S 4G</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRJ22</td>
+ <td>android-2.3.4_r1</td>
+ <td>Gingerbread</td>
+ <td>Nexus One, Nexus S, Nexus S 4G</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRJ06D</td>
+ <td>android-2.3.4_r0.9</td>
+ <td>Gingerbread</td>
+ <td>Nexus S 4G</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRI54</td>
+ <td>android-2.3.3_r1.1</td>
+ <td>Gingerbread</td>
+ <td>Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRI40</td>
+ <td>android-2.3.3_r1</td>
+ <td>Gingerbread</td>
+ <td>Nexus One, Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRH78C</td>
+ <td>android-2.3.2_r1</td>
+ <td>Gingerbread</td>
+ <td>Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRH78</td>
+ <td>android-2.3.1_r1</td>
+ <td>Gingerbread</td>
+ <td>Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GRH55</td>
+ <td>android-2.3_r1</td>
+ <td>Gingerbread</td>
+ <td>earliest Gingerbread version, Nexus S</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRK76C</td>
+ <td>android-2.2.3_r2</td>
+ <td>Froyo</td>
+ <td>&nbsp;</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRK76</td>
+ <td>android-2.2.3_r1</td>
+ <td>Froyo</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRG83G</td>
+ <td>android-2.2.2_r1</td>
+ <td>Froyo</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRG83D</td>
+ <td>android-2.2.1_r2</td>
+ <td>Froyo</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRG83</td>
+ <td>android-2.2.1_r1</td>
+ <td>Froyo</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRG22D</td>
+ <td>android-2.2_r1.3</td>
+ <td>Froyo</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRG01B</td>
+ <td>android-2.2_r1.2</td>
+ <td>Froyo</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRF91</td>
+ <td>android-2.2_r1.1</td>
+ <td>Froyo</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>FRF85B</td>
+ <td>android-2.2_r1</td>
+ <td>Froyo</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>EPF21B</td>
+ <td>android-2.1_r2.1p2</td>
+ <td>Eclair</td>
+ <td>&nbsp;</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ESE81</td>
+ <td>android-2.1_r2.1s</td>
+ <td>Eclair</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>EPE54B</td>
+ <td>android-2.1_r2.1p</td>
+ <td>Eclair</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ERE27</td>
+ <td>android-2.1_r2</td>
+ <td>Eclair</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ERD79</td>
+ <td>android-2.1_r1</td>
+ <td>Eclair</td>
+ <td>Nexus One</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ESD56</td>
+ <td>android-2.0.1_r1</td>
+ <td>Eclair</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>ESD20</td>
+ <td>android-2.0_r1</td>
+ <td>Eclair</td>
+ <td>&nbsp;</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DMD64</td>
+ <td>android-1.6_r1.5</td>
+ <td>Donut</td>
+ <td>&nbsp;</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DRD20</td>
+ <td>android-1.6_r1.4</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DRD08</td>
+ <td>android-1.6_r1.3</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>DRC92</td>
+ <td>android-1.6_r1.2</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
</table>
<p>The branches froyo, gingerbread, ics-mr0, ics-mr1, jb-dev, jb-mr1-dev,