aboutsummaryrefslogtreecommitdiff
path: root/en/compatibility/android-cdd.html
diff options
context:
space:
mode:
Diffstat (limited to 'en/compatibility/android-cdd.html')
-rw-r--r--en/compatibility/android-cdd.html533
1 files changed, 271 insertions, 262 deletions
diff --git a/en/compatibility/android-cdd.html b/en/compatibility/android-cdd.html
index 30b613dd..52557f99 100644
--- a/en/compatibility/android-cdd.html
+++ b/en/compatibility/android-cdd.html
@@ -1,7 +1,7 @@
<html devsite="" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
- Android 8.0 Compatibility Definition
+ Android 8.1 Compatibility Definition
</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
@@ -26,16 +26,16 @@
1. Introduction
</h2>
<p>
- This document enumerates the requirements that must be met in order for devices to be compatible with Android 8.0.
+ This document enumerates the requirements that must be met in order for devices to be compatible with Android 8.1.
</p>
<p>
The use of “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” is per the IETF standard defined in <a href="http://www.ietf.org/rfc/rfc2119.txt">RFC2119</a>.
</p>
<p>
- As used in this document, a “device implementer” or “implementer” is a person or organization developing a hardware/software solution running Android 8.0. A “device implementation” or “implementation is the hardware/software solution so developed.
+ As used in this document, a “device implementer” or “implementer” is a person or organization developing a hardware/software solution running Android 8.1. A “device implementation” or “implementation is the hardware/software solution so developed.
</p>
<p>
- To be considered compatible with Android 8.0, device implementations MUST meet the requirements presented in this Compatibility Definition, including any documents incorporated via reference.
+ To be considered compatible with Android 8.1, device implementations MUST meet the requirements presented in this Compatibility Definition, including any documents incorporated via reference.
</p>
<p>
Where this definition or the software tests described in <a href="#10_software_compatibility_testing">section 10</a> is silent, ambiguous, or incomplete, it is the responsibility of the device implementer to ensure compatibility with existing implementations.
@@ -76,7 +76,7 @@
Each ID is defined as below:
</p>
<ul>
- <li>Device Type ID (see more on <a href="#2_device_types">2. Device Types</a>)
+ <li>Device Type ID (see more on <a href="#2_device_types">2. Device Types</a>
<ul>
<li>C: Core (Requirements that are applied to any Android device implementations)
</li>
@@ -86,8 +86,6 @@
</li>
<li>A: Android Automotive implementation
</li>
- <li>W: Android Watch implementation
- </li>
</ul>
</li>
<li>Condition ID
@@ -201,7 +199,7 @@
</li>
<li>
<p>
- [H-0-2] MUST send both the normal and long press event of the Back function (<a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK"><code>KEYCODE_BACK</code></a>) to the foreground application.
+ [H-0-2] MUST send both the normal and long press event of the the Back function (<a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK"><code>KEYCODE_BACK</code></a>) to the foreground application.
</p>
</li>
</ul>
@@ -286,132 +284,77 @@
<strong>Minimum Memory and Storage (Section 7.6.1)</strong>
</p>
<p>
- Handheld device implementations:
- </p>
- <ul>
- <li>[H-0-1] MUST have at least 4GB of non-volatile storage available for application private data (a.k.a. "/data" partition)
- </li>
- <li>[H-0-2] MUST return “true” for <code>ActivityManager.isLowRamDevice()</code> when there is less than 1GB of memory available to the kernel and userspace.
- </li>
- </ul>
- <p>
- If Handheld device implementations are 32-bit:
+ If Handheld device implementations declare support of only a 32-bit ABI:
</p>
<ul>
<li>
<p>
- [H-1-1] The memory available to the kernel and userspace MUST be at least 512MB if any of the following densities are used:
+ [H-1-1] The memory available to the kernel and userspace MUST be at least 416MB if the default display uses framebuffer resolutions up to qHD (e.g. FWVGA).
</p>
- <ul>
- <li>280dpi or lower on small/normal screens<sup>*</sup>
- </li>
- <li>ldpi or lower on extra large screens
- </li>
- <li>mdpi or lower on large screens
- </li>
- </ul>
</li>
<li>
<p>
- [H-2-1] The memory available to the kernel and userspace MUST be at least 608MB if any of the following densities are used:
+ [H-2-1] The memory available to the kernel and userspace MUST be at least 592MB if the default display uses framebuffer resolutions up to HD+ (e.g. HD, WSVGA).
</p>
- <ul>
- <li>xhdpi or higher on small/normal screens<sup>*</sup>
- </li>
- <li>hdpi or higher on large screens
- </li>
- <li>mdpi or higher on extra large screens
- </li>
- </ul>
</li>
<li>
<p>
- [H-3-1] The memory available to the kernel and userspace MUST be at least 896MB if any of the following densities are used:
+ [H-3-1] The memory available to the kernel and userspace MUST be at least 896MB if the default display uses framebuffer resolutions up to FHD (e.g. WSXGA+).
</p>
- <ul>
- <li>400dpi or higher on small/normal screens<sup>*</sup>
- </li>
- <li>xhdpi or higher on large screens
- </li>
- <li>tvdpi or higher on extra large screens
- </li>
- </ul>
</li>
<li>
<p>
- [H-4-1] The memory available to the kernel and userspace MUST be at least 1344MB if any of the following densities are used:
+ [H-4-1] The memory available to the kernel and userspace MUST be at least 1344MB if the default display uses framebuffer resolutions up to QHD (e.g. QWXGA).
</p>
- <ul>
- <li>560dpi or higher on small/normal screens<sup>*</sup>
- </li>
- <li>400dpi or higher on large screens
- </li>
- <li>xhdpi or higher on extra large screens
- </li>
- </ul>
</li>
</ul>
<p>
- If Handheld device implementations are 64-bit:
+ If Handheld device implementations declare support of 32-bit and 64-bit ABIs:
</p>
<ul>
<li>
<p>
- [H-5-1] The memory available to the kernel and userspace MUST be at least 816MB if any of the following densities are used:
+ [H-5-1] The memory available to the kernel and userspace MUST be at least 816MB if the default display uses framebuffer resolutions up to qHD (e.g. FWVGA).
</p>
- <ul>
- <li>280dpi or lower on small/normal screens<sup>*</sup>
- </li>
- <li>ldpi or lower on extra large screens
- </li>
- <li>mdpi or lower on large screens
- </li>
- </ul>
</li>
<li>
<p>
- [H-6-1] The memory available to the kernel and userspace MUST be at least 944MB if any of the following densities are used:
+ [H-6-1] The memory available to the kernel and userspace MUST be at least 944MB if the default display uses framebuffer resolutions up to HD+ (e.g. HD, WSVGA).
</p>
- <ul>
- <li>xhdpi or higher on small/normal screens<sup>*</sup>
- </li>
- <li>hdpi or higher on large screens
- </li>
- <li>mdpi or higher on extra large screens
- </li>
- </ul>
</li>
<li>
<p>
- [H-7-1] The memory available to the kernel and userspace MUST be at least 1280MB if any of the following densities are used:
+ [H-7-1] The memory available to the kernel and userspace MUST be at least 1280MB if the default display uses framebuffer resolutions up to FHD (e.g. WSXGA+).
</p>
- <ul>
- <li>400dpi or higher on small/normal screens<sup>*</sup>
- </li>
- <li>xhdpi or higher on large screens
- </li>
- <li>tvdpi or higher on extra large screens
- </li>
- </ul>
</li>
<li>
<p>
- [H-8-1] The memory available to the kernel and userspace MUST be at least 1824MB if any of the following densities are used:
+ [H-8-1] The memory available to the kernel and userspace MUST be at least 1824MB if the default display uses framebuffer resolutions up to QHD (e.g. QWXGA).
</p>
- <ul>
- <li>560dpi or higher on small/normal screens<sup>*</sup>
- </li>
- <li>400dpi or higher on large screens
- </li>
- <li>xhdpi or higher on extra large screens
- </li>
- </ul>
</li>
</ul>
<p>
Note that the "memory available to the kernel and userspace" above refers to the memory space provided in addition to any memory already dedicated to hardware components such as radio, video, and so on that are not under the kernel’s control on device implementations.
</p>
<p>
+ If Handheld device implementations include less than or equal to 1GB of memory available to the kernel and userspace, they:
+ </p>
+ <ul>
+ <li>[H-9-1] MUST declare the feature flag <a href="https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_RAM_LOW"><code>android.hardware.ram.low</code></a>.
+ </li>
+ <li>[H-9-2] MUST have at least 1.1 GB of non-volatile storage for application private data (a.k.a. "/data" partition).
+ </li>
+ </ul>
+ <p>
+ If Handheld device implementations include more than 1GB of memory available to the kernel and userspace, they:
+ </p>
+ <ul>
+ <li>[H-10-1] MUST have at least 4GB of non-volatile storage available for application private data (a.k.a. "/data" partition).
+ </li>
+ <li>SHOULD declare the feature flag <a href="https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_RAM_NORMAL"><code>android.hardware.ram.normal</code></a>.
+ </li>
+ </ul>
+ <p>
<strong>Application Shared Storage (Section 7.6.2)</strong>
</p>
<p>
@@ -829,7 +772,7 @@
<ul>
<li>[T-0-1] MUST provide the Home and Back functions.
</li>
- <li>[T-0-2] MUST send both the normal and long press event of the Back function (<a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK"><code>KEYCODE_BACK</code></a>) to the foreground application.
+ <li>[T-0-2] MUST send both the normal and long press event of the the Back function (<a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK"><code>KEYCODE_BACK</code></a>) to the foreground application.
</li>
</ul>
<p>
@@ -881,6 +824,8 @@
<ul>
<li>[T-0-1] MUST have at least 4GB of non-volatile storage available for application private data (a.k.a. "/data" partition)
</li>
+ <li>[T-0-2] MUST return “true” for <code>ActivityManager.isLowRamDevice()</code> when there is less than 1GB of memory available to the kernel and userspace.
+ </li>
</ul>
<p>
<strong>Microphone (Section 7.8.1)</strong>
@@ -1153,8 +1098,8 @@
<li>[T-0-1] MUST support TV Input Framework.
</li>
</ul>
- <h4 id="2_3_4_performance_and_power">
- 2.3.4. Performance and Power
+ <h4 id="2_2_4_performance_and_power">
+ 2.2.4. Performance and Power
</h4>
<p>
<strong>User Experience Consistency (Section 8.1)</strong>
@@ -1421,7 +1366,7 @@
<ul>
<li>[A-0-1] MUST provide the Home function and MAY provide Back and Recent functions.
</li>
- <li>[A-0-2] MUST send both the normal and long press event of the Back function (<a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK"><code>KEYCODE_BACK</code></a>) to the foreground application.
+ <li>[A-0-2] MUST send both the normal and long press event of the the Back function (<a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK"><code>KEYCODE_BACK</code></a>) to the foreground application.
</li>
</ul>
<p>
@@ -1693,8 +1638,8 @@
<li>[A-0-1] MUST include a UI framework to support third-party apps using the media APIs as described in section 3.14.
</li>
</ul>
- <h4 id="2_5_4_performance_and_power">
- 2.5.4. Performance and Power
+ <h4 id="2_2_4_performance_and_power">
+ 2.2.4. Performance and Power
</h4>
<p>
<strong>Power-Saving Modes (Section 8.3)</strong>
@@ -1726,8 +1671,8 @@
<li>[A-0-4] MUST make this power usage available via the <a href="http://source.android.com/devices/tech/power/batterystats.html"><code>adb shell dumpsys batterystats</code></a> shell command to the app developer.
</li>
</ul>
- <h4 id="2_5_5_security_model">
- 2.5.5. Security Model
+ <h4 id="2_2_5_security_model">
+ 2.2.5. Security Model
</h4>
<p>
<strong>Multi-User Support (Section 9.5)</strong>
@@ -1769,8 +1714,8 @@
<p>
Tablet device implementations have similar requirements to handheld device implementations. The exceptions are in indicated by and * in that section and noted for reference in this section.
</p>
- <h4 id="2_6_1_hardware">
- 2.6.1. Hardware
+ <h4 id="2_4_1_hardware">
+ 2.4.1. Hardware
</h4>
<p>
<strong>Screen Size (Section 7.1.1.1)</strong>
@@ -1885,7 +1830,7 @@
VERSION.RELEASE
</td>
<td>
- The version of the currently-executing Android system, in human-readable format. This field MUST have one of the string values defined in <a href="http://source.android.com/compatibility/8.0/versions.html">8.0</a>.
+ The version of the currently-executing Android system, in human-readable format. This field MUST have one of the string values defined in <a href="http://source.android.com/compatibility/8.1/versions.html">8.1</a>.
</td>
</tr>
<tr>
@@ -1893,7 +1838,7 @@
VERSION.SDK
</td>
<td>
- The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 8.0, this field MUST have the integer value 8.0_INT.
+ The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 8.1, this field MUST have the integer value 8.1_INT.
</td>
</tr>
<tr>
@@ -1901,7 +1846,7 @@
VERSION.SDK_INT
</td>
<td>
- The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 8.0, this field MUST have the integer value 8.0_INT.
+ The version of the currently-executing Android system, in a format accessible to third-party application code. For Android 8.1, this field MUST have the integer value 8.1_INT.
</td>
</tr>
<tr>
@@ -1991,7 +1936,7 @@
</p>
<p class="small">
acme/myproduct/<br />
- &nbsp;&nbsp;&nbsp;&nbsp;mydevice:8.0/LMYXX/3359:userdebug/test-keys
+ &nbsp;&nbsp;&nbsp;&nbsp;mydevice:8.1/LMYXX/3359:userdebug/test-keys
</p>
<p>
The fingerprint MUST NOT include whitespace characters. If other fields included in the template above have whitespace characters, they MUST be replaced in the build fingerprint with another character, such as the underscore ("_") character. The value of this field MUST be encodable as 7-bit ASCII.
@@ -2131,7 +2076,7 @@
<ul>
<li>
<p>
- [C-0-1] Device implementations MUST include these application, service components, or at least a handler, for all the public intent filter patterns defined by the following core Android applications in AOSP:
+ [C-0-1] Device implementations MUST preload one or more applications or service components with an intent handler, for all the public intent filter patterns defined by the following core android applications in AOSP:
</p>
<ul>
<li>Desk Clock
@@ -2239,14 +2184,27 @@
If device implementations report <code>android.software.home_screen</code>, they:
</p>
<ul>
- <li>[C-1-1] MUST honor the <a href="http://developer.android.com/reference/android/provider/Settings.html#ACTION_HOME_SETTINGS">android.settings.HOME_SETTINGS</a> intent to show a default app settings menu for Home Screen.
+ <li>[C-1-1] MUST honor the <a href="http://developer.android.com/reference/android/provider/Settings.html#ACTION_HOME_SETTINGS"><code>android.settings.HOME_SETTINGS</code></a> intent to show a default app settings menu for Home Screen.
</li>
</ul>
<p>
If device implementations report <code>android.hardware.telephony</code>, they:
</p>
<ul>
- <li>[C-2-1] MUST provide a settings menu that will call the <a href="http://developer.android.com/reference/android/provider/Telephony.Sms.Intents.html">android.provider.Telephony.ACTION_CHANGE_DEFAULT</a> intent to show a dialog to change the default SMS application.
+ <li>
+ <p>
+ [C-2-1] MUST provide a settings menu that will call the <a href="http://developer.android.com/reference/android/provider/Telephony.Sms.Intents.html"><code>android.provider.Telephony.ACTION_CHANGE_DEFAULT</code></a> intent to show a dialog to change the default SMS application.
+ </p>
+ </li>
+ <li>
+ <p>
+ [C-2-2] MUST honor the <a href="https://developer.android.com/reference/android/telecom/TelecomManager.html#ACTION_CHANGE_DEFAULT_DIALER"><code>android.telecom.action.CHANGE_DEFAULT_DIALER</code></a> intent to show a dialog to allow the user to change the default Phone application.
+ </p>
+ </li>
+ <li>
+ <p>
+ [C-2-3] MUST honor the <a href="https://developer.android.com/reference/android/telecom/TelecomManager.html#ACTION_CHANGE_PHONE_ACCOUNTS">android.telecom.action.CHANGE_PHONE_ACCOUNTS</a> intent to provide user affordance to configure the <a href="https://developer.android.com/reference/android/telecom/ConnectionService.html"><code>ConnectionServices</code></a> associated with the <a href="https://developer.android.com/reference/android/telecom/PhoneAccount.html"><code>PhoneAccounts</code></a>, as well as a default PhoneAccount that the telecommunications service provider will use to place outgoing calls. The AOSP implementation meets this requirement by including a "Calling Accounts option" menu within the "Calls" settings menu.
+ </p>
</li>
</ul>
<p>
@@ -2257,17 +2215,10 @@
</li>
</ul>
<p>
- If device implementations report <code>android.hardware.telephony</code>, they:
+ If device implementations support the <code>VoiceInteractionService</code> and have more than one application using this API installed at a time, they:
</p>
<ul>
- <li>[C-4-1] MUST honor the <a href="https://developer.android.com/reference/android/telecom/TelecomManager.html#ACTION_CHANGE_DEFAULT_DIALER">android.telecom.action.CHANGE_DEFAULT_DIALER</a> intent to show a dialog to allow the user to change the default Phone application.
- </li>
- </ul>
- <p>
- If device implementations support the VoiceInteractionService, they:
- </p>
- <ul>
- <li>[C-5-1] MUST honor the <a href="https://developer.android.com/reference/android/provider/Settings.html#ACTION_VOICE_INPUT_SETTINGS">android.settings.ACTION_VOICE_INPUT_SETTINGS</a> intent to show a default app settings menu for voice input and assist.
+ <li>[C-4-1] MUST honor the <a href="https://developer.android.com/reference/android/provider/Settings.html#ACTION_VOICE_INPUT_SETTINGS"><code>android.settings.ACTION_VOICE_INPUT_SETTINGS</code></a> intent to show a default app settings menu for voice input and assist.
</li>
</ul>
<h4 id="3_2_4_activities_on_secondary_displays">
@@ -2469,7 +2420,7 @@
<ul>
<li>[C-1-1] MUST report <code>android.software.webview</code>.
</li>
- <li>[C-1-2] MUST use the <a href="http://www.chromium.org/">Chromium</a> Project build from the upstream Android Open Source Project on the Android 8.0 branch for the implementation of the <a href="http://developer.android.com/reference/android/webkit/WebView.html"><code>android.webkit.WebView</code></a> API.
+ <li>[C-1-2] MUST use the <a href="http://www.chromium.org/">Chromium</a> Project build from the upstream Android Open Source Project on the Android 8.1 branch for the implementation of the <a href="http://developer.android.com/reference/android/webkit/WebView.html"><code>android.webkit.WebView</code></a> API.
</li>
<li>
<p>
@@ -3047,19 +2998,21 @@
</li>
</ul>
<p>
- If device implementations include a default launcher that supports in-app pinning of shortcuts and widgets, they:
+ If device implementations include a default launcher that supports in-app pinning of shortcuts, they:
</p>
<ul>
- <li>[C-2-1] MUST report <code>true</code> for <a href="https://developer.android.com/reference/android/content/pm/ShortcutManager.html#isRequestPinShortcutSupported%28%29"><code>ShortcutManager.isRequestPinShortcutSupported()</code></a> and <a href="https://developer.android.com/reference/android/appwidget/AppWidgetManager.html#isRequestPinAppWidgetSupported%28%29"><code>AppWidgetManager.html.isRequestPinAppWidgetSupported()</code></a>.
+ <li>[C-2-1] MUST report <code>true</code> for <a href="https://developer.android.com/reference/android/content/pm/ShortcutManager.html#isRequestPinShortcutSupported%28%29"><code>ShortcutManager.isRequestPinShortcutSupported()</code></a>.
+ </li>
+ <li>[C-2-2] MUST have user affordance asking the user before adding a shortcut requested by apps via the <a href="https://developer.android.com/reference/android/content/pm/ShortcutManager.html#requestPinShortcut%28android.content.pm.ShortcutInfo,%20android.content.IntentSender%29"><code>ShortcutManager.requestPinShortcut()</code></a> API method.
</li>
- <li>[C-2-2] MUST have user affordance asking the user before adding a shortcut requested by apps via the <a href="https://developer.android.com/reference/android/content/pm/ShortcutManager.html#requestPinShortcut%28android.content.pm.ShortcutInfo,%20android.content.IntentSender%29"><code>ShortcutManager.requestPinShortcut()</code></a> and the <a href="https://developer.android.com/reference/android/appwidget/AppWidgetManager.html#requestPinAppWidget%28android.content.ComponentName,android.os.Bundle,%20android.app.PendingIntent%29"><code>AppWidgetManager.requestPinAddWidget()</code></a> API method.
+ <li>[C-2-3] MUST support pinned shortcuts and dynamic and static shortcuts as documented on the <a href="https://developer.android.com/guide/topics/ui/shortcuts.html">App Shortcuts page</a>.
</li>
</ul>
<p>
- Conversely, if device implementations do not support in-app pinning, they:
+ Conversely, if device implementations do not support in-app pinning of shortcuts, they:
</p>
<ul>
- <li>[C-3-1] MUST report <code>false</code> for <a href="https://developer.android.com/reference/android/content/pm/ShortcutManager.html#isRequestPinShortcutSupported%28%29"><code>ShortcutManager.isRequestPinShortcutSupported()</code></a> and <a href="https://developer.android.com/reference/android/appwidget/AppWidgetManager.html#isRequestPinAppWidgetSupported%28%29"><code>AppWidgetManager.html#isRequestPinAppWidgetSupported()</code></a>.
+ <li>[C-3-1] MUST report <code>false</code> for <a href="https://developer.android.com/reference/android/content/pm/ShortcutManager.html#isRequestPinShortcutSupported%28%29"><code>ShortcutManager.isRequestPinShortcutSupported()</code></a>.
</li>
</ul>
<p>
@@ -3088,15 +3041,24 @@
If device implementations support third-party app widgets, they:
</p>
<ul>
- <li>[C-1-1] MUST declare support for platform feature android.software.app_widgets.
+ <li>[C-1-1] MUST declare support for platform feature <code>android.software.app_widgets</code>.
</li>
<li>[C-1-2] MUST include built-in support for AppWidgets and expose user interface affordances to add, configure, view, and remove AppWidgets directly within the Launcher.
</li>
- <li>[C-1-3] MUST be capable of rendering widgets that are 4 x 4 in the standard grid size. See the <a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">App Widget Design Guidelines</a> in the Android SDK documentation for details.
+ <li>[C-1-3] MUST be capable of rendering widgets that are 4 x 4 in the standard grid size. See the <a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">App Widget DesignGuidelines</a> in the Android SDK documentation for details.
</li>
<li>MAY support application widgets on the lock screen.
</li>
</ul>
+ <p>
+ If device implementations support third-party app widgets and in-app pinning of shortcuts, they:
+ </p>
+ <ul>
+ <li>[C-2-1] MUST report <code>true</code> for <a href="https://developer.android.com/reference/android/appwidget/AppWidgetManager.html#isRequestPinAppWidgetSupported%28%29"><code>AppWidgetManager.html.isRequestPinAppWidgetSupported()</code></a>.
+ </li>
+ <li>[C-2-2] MUST have user affordance asking the user before adding a shortcut requested by apps via the <a href="https://developer.android.com/reference/android/appwidget/AppWidgetManager.html#requestPinAppWidget%28android.content.ComponentName,android.os.Bundle,%20android.app.PendingIntent%29"><code>AppWidgetManager.requestPinAppWidget()</code></a> API method.
+ </li>
+ </ul>
<h4 id="3_8_3_notifications">
3.8.3. Notifications
</h4>
@@ -3126,7 +3088,7 @@
</li>
<li>SHOULD present some higher priority notifications as heads-up notifications.
</li>
- <li>SHOULD have user affordance to snooze notifications.
+ <li>SHOULD have a user affordance to snooze notifications.
</li>
<li>MAY only manage the visibility and timing of when third-party apps can notify users of notable events to mitigate safety issues such as driver distraction.
</li>
@@ -3154,21 +3116,21 @@
Android includes the <a href="https://developer.android.com/reference/android/service/notification/NotificationListenerService.html"><code>NotificationListenerService</code></a> APIs that allow apps (once explicitly enabled by the user) to receive a copy of all notifications as they are posted or updated.
</p>
<p>
- Device implementations:
+ If device implementations report the feature flag <a href="https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_RAM_NORMAL"><code>android.hardware.ram.normal</code></a>, they:
</p>
<ul>
- <li>[C-0-1] MUST correctly and promptly update notifications in their entirety to all such installed and user-enabled listener services, including any and all metadata attached to the Notification object.
+ <li>[C-1-1] MUST correctly and promptly update notifications in their entirety to all such installed and user-enabled listener services, including any and all metadata attached to the Notification object.
</li>
- <li>[C-0-2] MUST respect the <a href="https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#snoozeNotification%28java.lang.String,%20long%29"><code>snoozeNotification()</code></a> API call, and dismiss the notification and make a callback after the snooze duration that is set in the API call.
+ <li>[C-1-2] MUST respect the <a href="https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#snoozeNotification%28java.lang.String,%20long%29"><code>snoozeNotification()</code></a> API call, and dismiss the notification and make a callback after the snooze duration that is set in the API call.
</li>
</ul>
<p>
If device implementations have a user affordance to snooze notifications, they:
</p>
<ul>
- <li>[C-1-1] MUST reflect the snoozed notification status properly through the standard APIs such as <a href="https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getSnoozedNotifications%28%29"><code>NotificationListenerService.getSnoozedNotifications()</code></a>.
+ <li>[C-2-1] MUST reflect the snoozed notification status properly through the standard APIs such as <a href="https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getSnoozedNotifications%28%29"><code>NotificationListenerService.getSnoozedNotifications()</code></a>.
</li>
- <li>[C-1-2] MUST make this user affordance available to snooze notifications from each installed third-party app's, unless they are from persistent/foreground services.
+ <li>[C-2-2] MUST make this user affordance available to snooze notifications from each installed third-party app's, unless they are from persistent/foreground services.
</li>
</ul>
<h5 id="3_8_3_3_dnd_(do_not_disturb)">
@@ -3320,7 +3282,7 @@
If device implementations including the recents function navigation key as detailed in <a href="#7_2_3_navigation_keys">section 7.2.3</a> alter the interface, they:
</p>
<ul>
- <li>[C-1-1] MUST support at least up to 20 displayed activities.
+ <li>[C-1-1] MUST support at least up to 7 displayed activities.
</li>
<li>SHOULD at least display the title of 4 activities at a time.
</li>
@@ -3343,7 +3305,7 @@
</li>
<li>
<p>
- [SR] Device implementations are STRONGLY RECOMMENDED to use the upstream Android user interface (or a similar thumbnail-based interface) for the overview screen.
+ [SR] Are STRONGLY RECOMMENDED to use the upstream Android user interface (or a similar thumbnail-based interface) for the overview screen.
</p>
</li>
</ul>
@@ -3430,7 +3392,7 @@
</li>
<li>[C-1-2] Applications can indicate whether they are capable of operating in multi-window mode in the <code>AndroidManifest.xml</code> file, either explicitly via setting the <a href="https://developer.android.com/reference/android/R.attr.html#resizeableActivity"><code>android:resizeableActivity</code></a> attribute to <code>true</code> or implicitly by having the targetSdkVersion &gt; 24. Apps that explicitly set this attribute to <code>false</code> in their manifest MUST NOT be launched in multi-window mode. Older apps with targetSdkVersion &lt; 24 that did not set this <code>android:resizeableActivity</code> attribute MAY be launched in multi-window mode, but the system MUST provide warning that the app may not work as expected in multi-window mode.
</li>
- <li>[C-1-3] MUST NOT offer split-screen or freeform mode if the screen height &lt; 440 dp and the screen width &lt; 440 dp.
+ <li>[C-1-3] MUST NOT offer split-screen or freeform mode if the screen height &lt; 440 dp and the the screen width &lt; 440 dp.
</li>
<li>Device implementations with screen size <code>xlarge</code> SHOULD support freeform mode.
</li>
@@ -3726,7 +3688,7 @@
</li>
<li>Opening EPG
</li>
- <li>Configuring and tuning to third-party TIF-based inputs
+ <li>Configuring and tuning to third-party TIF-based inputs (if those inputs are supported)
</li>
<li>Opening Settings menu
</li>
@@ -3742,14 +3704,8 @@
3.12.1.3. TV input app linking
</h5>
<p>
- If device implementations support TIF, they:
+ Android Television device implementations SHOULD support <a href="http://developer.android.com/reference/android/media/tv/TvContract.Channels.html#COLUMN_APP_LINK_INTENT_URI">TV input app linking</a>, which allows all inputs to provide activity links from the current activity to another activity (i.e. a link from live programming to related content). The TV App SHOULD show TV input app linking when it is provided.
</p>
- <ul>
- <li>[C-1-1] Android Television device implementations MUST support <a href="http://developer.android.com/reference/android/media/tv/TvContract.Channels.html#COLUMN_APP_LINK_INTENT_URI">TV input app linking</a>, which allows all inputs to provide activity links from the current activity to another activity (i.e. a link from live programming to related content).
- </li>
- <li>[C-1-2] The TV App MUST show TV input app linking when it is provided.
- </li>
- </ul>
<h5 id="3_12_1_4_time_shifting">
3.12.1.4. Time shifting
</h5>
@@ -3771,15 +3727,7 @@
<ul>
<li>[SR] STRONGLY RECOMMENDED to support TV recording.
</li>
- <li>
- <p>
- If the TV input supports recording and the recording of a program is not <a href="https://developer.android.com/reference/android/media/tv/TvContract.Programs.html#COLUMN_RECORDING_PROHIBITED">prohibited</a>, the EPG MAY provide a way to <a href="https://developer.android.com/reference/android/media/tv/TvInputInfo.html#canRecord%28%29">record a program</a>.
- </p>
- </li>
- <li>
- <p>
- SHOULD provide a user interface to play recorded programs.
- </p>
+ <li>If the TV input supports recording and the recording of a program is not <a href="https://developer.android.com/reference/android/media/tv/TvContract.Programs.html#COLUMN_RECORDING_PROHIBITED">prohibited</a>, the EPG MAY provide a way to <a href="https://developer.android.com/reference/android/media/tv/TvInputInfo.html#canRecord%28%29">record a program</a>.
</li>
</ul>
<h3 id="3_13_quick_settings">
@@ -3814,6 +3762,8 @@
</li>
<li>[C-1-4] MUST have drawer to present <a href="http://developer.android.com/reference/android/media/browse/MediaBrowser.html">MediaBrowser</a> hierarchy.
</li>
+ <li>[C-1-5] MUST consider double tap of <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HEADSETHOOK"><code>KEYCODE_HEADSETHOOK</code></a> or <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE"><code>KEYCODE_MEDIA_PLAY_PAUSE</code></a> as <a href="https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MEDIA_NEXT"><code>KEYCODE_MEDIA_NEXT</code></a> for <a href="https://developer.android.com/reference/android/media/session/MediaSession.Callback.html#onMediaButtonEvent%28android.content.Intent%29"><code>MediaSession.Callback#onMediaButtonEvent</code></a>.
+ </li>
</ul>
<h3 id="3_15_instant_apps">
3.15. Instant Apps
@@ -5591,28 +5541,26 @@
5.9. Musical Instrument Digital Interface (MIDI)
</h3>
<p>
- If a device implementation supports the inter-app MIDI software transport (virtual MIDI devices), and it supports MIDI over <em>all</em> of the following MIDI-capable hardware transports for which it provides generic non-MIDI connectivity, it is:
- </p>
- <ul>
- <li>[SR] STRONGLY RECOMMENDED to report support for feature android.software.midi via the <a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">android.content.pm.PackageManager</a> class.
- </li>
- </ul>
- <p>
- The MIDI-capable hardware transports are:
+ If device implementations report support for feature <code>android.software.midi</code> via the <a href="http://developer.android.com/reference/android/content/pm/PackageManager.html"><code>android.content.pm.PackageManager</code></a> class, they:
</p>
<ul>
- <li>USB host mode (section 7.7 USB)
- </li>
- <li>USB peripheral mode (section 7.7 USB)
- </li>
- <li>MIDI over Bluetooth LE acting in central role (section 7.4.3 Bluetooth)
+ <li>
+ <p>
+ [C-1-1] MUST support MIDI over <em>all</em> MIDI-capable hardware transports for which they provide generic non-MIDI connectivity, where such transports are:
+ </p>
+ <ul>
+ <li>USB host mode, <a href="#7_7_USB">section 7.7</a>
+ </li>
+ <li>USB peripheral mode, <a href="#7_7_USB">section 7.7</a>
+ </li>
+ <li>MIDI over Bluetooth LE acting in central role, <a href="#7_4_3_bluetooth">section 7.4.3</a>
+ </li>
+ </ul>
</li>
- </ul>
- <p>
- If the device implementation provides generic non-MIDI connectivity over a particular MIDI-capable hardware transport listed above, but does not support MIDI over that hardware transport, it:
- </p>
- <ul>
- <li>[C-1-1] MUST NOT report support for feature android.software.midi.
+ <li>
+ <p>
+ [C-1-2] MUST support the inter-app MIDI software transport (virtual MIDI devices)
+ </p>
</li>
</ul>
<h3 id="5_10_professional_audio">
@@ -5632,7 +5580,15 @@
</li>
<li>[C-1-5] MUST meet latencies and USB audio requirements using the <a href="https://developer.android.com/ndk/guides/audio/opensl-for-android.html">OpenSL ES</a> PCM buffer queue API.
</li>
- <li>SHOULD provide a sustainable level of CPU performance while audio is active.
+ <li>[SR] Are STRONGLY RECOMMENDED to provide a consistent level of CPU performance while audio is active and CPU load is varying. This should be tested using <a href="https://github.com/googlesamples/android-audio-high-performance/tree/master/SimpleSynth">SimpleSynth</a> commit <a href="https://github.com/googlesamples/android-audio-high-performance/commit/1bd6391f8ba9512f9f8798e979bc55b899f856d1">1bd6391</a>. The SimpleSynth app needs to be run with below parameters and achieve zero underruns after 10 minutes:
+ <ul>
+ <li>Work cycles: 200,000
+ </li>
+ <li>Variable load: ON (this will switch between 100% and 10% of the work cycles value every 2 seconds and is designed to test CPU governor behavior)
+ </li>
+ <li>Stabilized load: OFF
+ </li>
+ </ul>
</li>
<li>SHOULD minimize audio clock inaccuracy and drift relative to standard time.
</li>
@@ -5695,26 +5651,21 @@
</li>
</ul>
<p>
- If device implementations omit a 4 conductor 3.5mm audio jack, they:
+ If device implementations omit a 4 conductor 3.5mm audio jack and include a USB port(s) supporting USB host mode, they:
</p>
<ul>
- <li>[C-3-1] MUST have a continuous round-trip audio latency of 20 milliseconds or less.
+ <li>[C-3-1] MUST implement the USB audio class.
</li>
- <li>The continuous round-trip audio latency SHOULD be 10 milliseconds or less over the USB host mode port using USB audio class.
+ <li>[C-3-2] MUST have a continuous round-trip audio latency of 20 milliseconds or less over the USB host mode port using USB audio class.
</li>
- </ul>
- <p>
- If device implementations include a USB port(s) supporting USB host mode, they:
- </p>
- <ul>
- <li>[C-4-1] MUST implement the USB audio class.
+ <li>The continuous round-trip audio latency SHOULD be 10 milliseconds or less over the USB host mode port using USB audio class.
</li>
</ul>
<p>
If device implementations include an HDMI port, they:
</p>
<ul>
- <li>[C-5-1] MUST support output in stereo and eight channels at 20-bit or 24-bit depth and 192 kHz without bit-depth loss or resampling.
+ <li>[C-4-1] MUST support output in stereo and eight channels at 20-bit or 24-bit depth and 192 kHz without bit-depth loss or resampling.
</li>
</ul>
<h3 id="5_11_capture_for_unprocessed">
@@ -6342,10 +6293,10 @@
7.2.3. Navigation Keys
</h4>
<p>
- The <a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME">Home</a>, <a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_APP_SWITCH">Recents</a>, and <a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK">Back</a> functions typically provided via an interaction with a dedicated physical button or a distinct portion of the touch screen, are essential to the Android navigation paradigm and therefore:
+ The <a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME">Home</a>, <a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_APP_SWITCH">Recents</a>, and <a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK">Back</a> functions typically provided via an interaction with a dedicated physical button or a distinct portion of the touch screen, are essential to the Android navigation paradigm and therefore, device implementations:
</p>
<ul>
- <li>[C-0-1] MUST provide the Home function.
+ <li>[C-0-1] MUST provide a user affordance to launch installed applications that have an activity with the <code>&lt;intent-filter&gt;</code> set with <code>ACTION=MAIN</code> and <code>CATEGORY=LAUNCHER</code> or <code>CATEGORY=LEANBACK_LAUNCHER</code> for Television device implementations. The Home function SHOULD be the mechanism for this user affordance.
</li>
<li>SHOULD provide buttons for the Recents and Back function.
</li>
@@ -7313,37 +7264,33 @@
<ul>
<li>[C-3-1] MUST correctly declare support of direct channel types and direct report rates level through the <a href="https://developer.android.com/reference/android/hardware/Sensor.html#isDirectChannelTypeSupported%28int%29"><code>isDirectChannelTypeSupported</code></a> and <a href="https://developer.android.com/reference/android/hardware/Sensor.html#getHighestDirectReportRateLevel%28%29"><code>getHighestDirectReportRateLevel</code></a> API.
</li>
- <li>[C-3-2] MUST support at least one of the two sensor direct channel types for all sensors that declare support for sensor direct channel:
- <ul>
- <li>
- <a href="https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_HARDWARE_BUFFER"><code>TYPE_HARDWARE_BUFFER</code></a>
- </li>
- <li>
- <a href="https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_MEMORY_FILE"><code>TYPE_MEMORY_FILE</code></a>
- </li>
- </ul>
+ <li>[C-3-2] MUST support at least one of the two sensor direct channel types for all sensors that declare support for sensor direct channel
+ </li>
+ <li>
+ <a href="https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_HARDWARE_BUFFER"><code>TYPE_HARDWARE_BUFFER</code></a>
+ </li>
+ <li>
+ <a href="https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_MEMORY_FILE"><code>TYPE_MEMORY_FILE</code></a>
</li>
<li>SHOULD support event reporting through sensor direct channel for primary sensor (non-wakeup variant) of the following types:
- <ul>
- <li>
- <code>TYPE_ACCELEROMETER</code>
- </li>
- <li>
- <code>TYPE_ACCELEROMETER_UNCALIBRATED</code>
- </li>
- <li>
- <code>TYPE_GYROSCOPE</code>
- </li>
- <li>
- <code>TYPE_GYROSCOPE_UNCALIBRATED</code>
- </li>
- <li>
- <code>TYPE_MAGNETIC_FIELD</code>
- </li>
- <li>
- <code>TYPE_MAGNETIC_FIELD_UNCALIBRATED</code>
- </li>
- </ul>
+ </li>
+ <li>
+ <code>TYPE_ACCELEROMETER</code>
+ </li>
+ <li>
+ <code>TYPE_ACCELEROMETER_UNCALIBRATED</code>
+ </li>
+ <li>
+ <code>TYPE_GYROSCOPE</code>
+ </li>
+ <li>
+ <code>TYPE_GYROSCOPE_UNCALIBRATED</code>
+ </li>
+ <li>
+ <code>TYPE_MAGNETIC_FIELD</code>
+ </li>
+ <li>
+ <code>TYPE_MAGNETIC_FIELD_UNCALIBRATED</code>
</li>
</ul>
<h4 id="7_3_10_fingerprint_sensor">
@@ -7366,23 +7313,27 @@
</li>
<li>[C-1-3] MUST have a false acceptance rate not higher than 0.002%.
</li>
- <li>[C-1-4] MUST rate limit attempts for at least 30 seconds after five false trials for fingerprint verification.
+ <li>[SR] Are STRONGLY RECOMMENDED to have a spoof and imposter acceptance rate not higher than 7%.
+ </li>
+ <li>[C-1-4] MUST disclose that this mode may be less secure than a strong PIN, pattern, or password and clearly enumerate the risks of enabling it, if the spoof and imposter acceptance rates are higher than 7%.
+ </li>
+ <li>[C-1-5] MUST rate limit attempts for at least 30 seconds after five false trials for fingerprint verification.
</li>
- <li>[C-1-5] MUST have a hardware-backed keystore implementation, and perform the fingerprint matching in a Trusted Execution Environment (TEE) or on a chip with a secure channel to the TEE.
+ <li>[C-1-6] MUST have a hardware-backed keystore implementation, and perform the fingerprint matching in a Trusted Execution Environment (TEE) or on a chip with a secure channel to the TEE.
</li>
- <li>[C-1-6] MUST have all identifiable fingerprint data encrypted and cryptographically authenticated such that they cannot be acquired, read or altered outside of the Trusted Execution Environment (TEE) as documented in the <a href="https://source.android.com/devices/tech/security/authentication/fingerprint-hal.html">implementation guidelines</a> on the Android Open Source Project site.
+ <li>[C-1-7] MUST have all identifiable fingerprint data encrypted and cryptographically authenticated such that they cannot be acquired, read or altered outside of the Trusted Execution Environment (TEE) as documented in the <a href="https://source.android.com/devices/tech/security/authentication/fingerprint-hal.html">implementation guidelines</a> on the Android Open Source Project site.
</li>
- <li>[C-1-7] MUST prevent adding a fingerprint without first establishing a chain of trust by having the user confirm existing or add a new device credential (PIN/pattern/password) that's secured by TEE; the Android Open Source Project implementation provides the mechanism in the framework to do so.
+ <li>[C-1-8] MUST prevent adding a fingerprint without first establishing a chain of trust by having the user confirm existing or add a new device credential (PIN/pattern/password) that's secured by TEE; the Android Open Source Project implementation provides the mechanism in the framework to do so.
</li>
- <li>[C-1-8] MUST NOT enable 3rd-party applications to distinguish between individual fingerprints.
+ <li>[C-1-9] MUST NOT enable 3rd-party applications to distinguish between individual fingerprints.
</li>
- <li>[C-1-9] MUST honor the DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT flag.
+ <li>[C-1-10] MUST honor the DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT flag.
</li>
- <li>[C-1-10] MUST, when upgraded from a version earlier than Android 6.0, have the fingerprint data securely migrated to meet the above requirements or removed.
+ <li>[C-1-11] MUST, when upgraded from a version earlier than Android 6.0, have the fingerprint data securely migrated to meet the above requirements or removed.
</li>
- <li>[SR] STRONGLY RECOMMENDED to have a false rejection rate of less than 10%, as measured on the device.
+ <li>[SR] Are STRONGLY RECOMMENDED to have a false rejection rate of less than 10%, as measured on the device.
</li>
- <li>[SR] STRONGLY RECOMMENDED to have a latency below 1 second, measured from when the fingerprint sensor is touched until the screen is unlocked, for one enrolled finger.
+ <li>[SR] Are STRONGLY RECOMMENDED to have a latency below 1 second, measured from when the fingerprint sensor is touched until the screen is unlocked, for one enrolled finger.
</li>
<li>SHOULD use the Android Fingerprint icon provided in the Android Open Source Project.
</li>
@@ -7489,6 +7440,26 @@
<li>SHOULD migrate the blocked numbers into the provider when a device updates to Android 7.0.
</li>
</ul>
+ <h5 id="7_4_1_2_telecom_api">
+ 7.4.1.2. Telecom API
+ </h5>
+ <p>
+ If device implementations report <code>android.hardware.telephony</code>, they:
+ </p>
+ <ul>
+ <li>[C-SR] Are STRONGLY RECOMMENDED to handle the the audio headset's <code>KEYCODE_MEDIA_PLAY_PAUSE</code> and <code>KEYCODE_HEADSETHOOK</code> events for the <a href="https://developer.android.com/reference/android/telecom/package-summary.html"><code>android.telecom</code></a> APIs as below:
+ <ul>
+ <li>Call <a href="https://developer.android.com/reference/android/telecom/Connection.html#onDisconnect%28%29"><code>Connection.onDisconnect()</code></a> when a short press of the key event is detected during an ongoing call.
+ </li>
+ <li>Call <a href="https://developer.android.com/reference/android/telecom/Connection.html#onAnswer%28%29"><code>Connection.onAnswer()</code></a> when a short press of the key event is detected during an incoming call.
+ </li>
+ <li>Call <a href="https://developer.android.com/reference/android/telecom/Connection.html#onReject%28%29"><code>Connection.onReject()</code></a> when a long press of the key event is detected during an incoming call.
+ </li>
+ <li>Toggle the mute status of the <a href="https://developer.android.com/reference/android/telecom/CallAudioState.html"><code>CallAudioState</code></a>
+ </li>
+ </ul>
+ </li>
+ </ul>
<h4 id="7_4_2_ieee_802_11_(wi-fi)">
7.4.2. IEEE 802.11 (Wi-Fi)
</h4>
@@ -7958,7 +7929,7 @@
</li>
<li>[C-1-3] MUST NOT use a front-facing camera as the default for the Camera API and MUST NOT configure the API to treat a front-facing camera as the default rear-facing camera, even if it is the only camera on the device.
</li>
- <li>[C-1-5] The camera preview MUST be mirrored horizontally relative to the orientation specified by the application when the current application has explicitly requested that the Camera display be rotated via a call to the <a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)"><code>android.hardware.Camera.setDisplayOrientation()</code></a> method. Conversely, the preview MUST be mirrored along the device’s default horizontal axis when the current application does not explicitly request that the Camera display be rotated via a call to the <a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)"><code>android.hardware.Camera.setDisplayOrientation()</code></a> method.
+ <li>[C-1-5] The camera preview MUST be mirrored horizontally relative to the orientation specified by the application when the current application has explicitly requested that the Camera display be rotated via a call to the <a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)"><code>android.hardware.Camera.setDisplayOrientation()</code></a> method. Conversely, the preview MUST be mirrored along the device’s default horizontal axis when the the current application does not explicitly request that the Camera display be rotated via a call to the <a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)"><code>android.hardware.Camera.setDisplayOrientation()</code></a> method.
</li>
<li>[C-1-6] MUST NOT mirror the final captured still image or video streams returned to application callbacks or committed to media storage.
</li>
@@ -8018,7 +7989,7 @@
</li>
<li>[C-0-3] MUST support the YV12 format (as denoted by the <code>android.graphics.ImageFormat.YV12</code> constant) for camera previews for both front- and rear-facing cameras for <code>android.hardware.Camera</code>. (The hardware video encoder and camera may use any native pixel format, but the device implementation MUST support conversion to YV12.)
</li>
- <li>[C-0-4] MUST support the <code>android.hardware.ImageFormat.YUV_420_888</code> and <code>android.hardware.ImageFormat.JPEG</code> formats as outputs through the <code>android.media.ImageReader</code> API for <code>android.hardware.camera2</code>.
+ <li>[C-0-4] MUST support the <code>android.hardware.ImageFormat.YUV_420_888</code> and <code>android.hardware.ImageFormat.JPEG</code> formats as outputs through the <code>android.media.ImageReader</code> API for <code>android.hardware.camera2</code> devices that advertise <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE"><code>REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE</code></a> capability in <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#REQUEST_AVAILABLE_CAPABILITIES"><code>android.request.availableCapabilities</code></a>.
</li>
<li>[C-0-5] MUST still implement the full <a href="http://developer.android.com/reference/android/hardware/Camera.html">Camera API</a> included in the Android SDK documentation, regardless of whether the device includes hardware autofocus or other capabilities. For instance, cameras that lack autofocus MUST still call any registered <code>android.hardware.Camera.AutoFocusCallback</code> instances (even though this has no relevance to a non-autofocus camera.) Note that this does apply to front-facing cameras; for instance, even though most front-facing cameras do not support autofocus, the API callbacks must still be “faked” as described.
</li>
@@ -8309,7 +8280,7 @@
If device implementations do not include a speaker or audio output port, they:
</p>
<ul>
- <li>[C-2-1] MUST NOT report the <code>android.hardware.audio output</code> feature.
+ <li>[C-2-1] MUST NOT report the <code>android.hardware.audio.output</code> feature.
</li>
<li>[C-2-2] MUST implement the Audio Output related APIs as no-ops at least.
</li>
@@ -8431,7 +8402,7 @@
</li>
<li>[C-1-7] The GPU and display MUST be able to synchronize access to the shared front buffer such that alternating-eye rendering of VR content at 60fps with two render contexts will be displayed with no visible tearing artifacts.
</li>
- <li>[C-1-8] MUST implement <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_multisampled_render_to_texture.txt"><code>GL_EXT_multisampled_render_to_texture</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview.txt"><code>GL_OVR_multiview</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview2.txt"><code>GL_OVR_multiview2</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview_multisampled_render_to_texture.txt"><code>GL_OVR_multiview_multisampled_render_to_texture</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_protected_textures.txt"><code>GL_EXT_protected_textures</code></a>, and expose the extensions in the list of available GL extensions.
+ <li>[C-1-8] MUST implement <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_multisampled_render_to_texture.txt"><code>GL_EXT_multisampled_render_to_texture</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview.txt"><code>GL_OVR_multiview</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview2.txt"><code>GL_OVR_multiview2</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview_multisampled_render_to_texture.txt"><code>GL_OVR_multiview_multisampled_render_to_texture</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_protected_textures.txt"><code>GL_EXT_protected_textures</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_EGL_image_array.txt"><code>GL_EXT_EGL_image_array</code></a>, <a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_external_buffer.txt"><code>GL_EXT_external_buffer</code></a>, and expose the extensions in the list of available GL extensions.
</li>
<li>[C-1-9] MUST implement support for <a href="https://developer.android.com/ndk/reference/hardware__buffer_8h.html"><code>AHardwareBuffer</code></a> flags <code>AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER</code> and <code>AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA</code> as described in the NDK.
</li>
@@ -8445,17 +8416,39 @@
</li>
<li>[C-1-14] MUST have an embedded screen, and its resolution MUST be at least be FullHD(1080p) and STRONGLY RECOMMENDED TO BE be QuadHD (1440p) or higher.
</li>
- <li>[C-1-15] The display MUST measure between 4.7" and 6.3" diagonal.
+ <li>[C-1-15] The display MUST update at least 60 Hz while in VR Mode.
</li>
- <li>[C-1-16] The display MUST update at least 60 Hz while in VR Mode.
+ <li>[C-1-16] The display latency (as measured on Gray-to-Gray, White-to-Black, and Black-to-White switching time) MUST be ≤ 6 milliseconds.
</li>
- <li>[C-1-17] The display latency on Gray-to-Gray, White-to-Black, and Black-to-White switching time MUST be ≤ 3 ms.
+ <li>[C-1-17] The display MUST support a low-persistence mode with ≤ 5 milliseconds persistence, persistence being defined as the amount of time for which a pixel is emitting light.
</li>
- <li>[C-1-18] The display MUST support a low-persistence mode with ≤5 ms persistence, persistence being defined as the amount of time for which a pixel is emitting light.
+ <li>[C-1-18] MUST support Bluetooth 4.2 and Bluetooth LE Data Length Extension <a href="#7_4_3_bluetooth">section 7.4.3</a>.
</li>
- <li>[C-1-19] MUST support Bluetooth 4.2 and Bluetooth LE Data Length Extension <a href="#7_4_3_bluetooth">section 7.4.3</a>.
+ <li>[C-1-19] MUST support and properly report <a href='https://developer.android.com/reference/android/hardware/Sensor.html#isDirectChannelTypeSupported%28int%29"'>Direct Channel Type</a> for all of the following default sensor types:
+ <ul>
+ <li>
+ <code>TYPE_ACCELEROMETER</code>
+ </li>
+ <li>
+ <code>TYPE_ACCELEROMETER_UNCALIBRATED</code>
+ </li>
+ <li>
+ <code>TYPE_GYROSCOPE</code>
+ </li>
+ <li>
+ <code>TYPE_GYROSCOPE_UNCALIBRATED</code>
+ </li>
+ <li>
+ <code>TYPE_MAGNETIC_FIELD</code>
+ </li>
+ <li>
+ <code>TYPE_MAGNETIC_FIELD_UNCALIBRATED</code>
+ </li>
+ </ul>
</li>
- <li>[SR] STRONGLY RECOMMENDED to support <code>android.hardware.sensor.hifi_sensors</code> feature and MUST meet the gyroscope, accelerometer, and magnetometer related requirements for <code>android.hardware.hifi_sensors</code>.
+ <li>[C-1-20] MUST support the <a href="https://developer.android.com/reference/android/hardware/SensorDirectChannel.html#TYPE_HARDWARE_BUFFER"><code>TYPE_HARDWARE_BUFFER</code></a> direct channel type for all Direct Channel Types listed above.
+ </li>
+ <li>[SR] Are STRONGLY RECOMMENDED to support <code>android.hardware.sensor.hifi_sensors</code> feature and MUST meet the gyroscope, accelerometer, and magnetometer related requirements for <code>android.hardware.hifi_sensors</code>.
</li>
<li>MAY provide an exclusive core to the foreground application and MAY support the <code>Process.getExclusiveCores</code> API to return the numbers of the cpu cores that are exclusive to the top foreground application. If exclusive core is supported then the core MUST not allow any other userspace processes to run on it (except device drivers used by the application), but MAY allow some kernel processes to run as necessary.
</li>
@@ -8937,6 +8930,13 @@
<li>[C-2-1] MUST ask for the user's consent before enabling that mechanism, unless that VPN is enabled by the Device Policy Controller via the <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setAlwaysOnVpnPackage%28android.content.ComponentName,%20java.lang.String,%20boolean%29"><code>DevicePolicyManager.setAlwaysOnVpnPackage()</code></a> , in which case the user does not need to provide a separate consent, but MUST only be notified.
</li>
</ul>
+ <p>
+ If device implementations implement a user affordance to toggle on the "always-on VPN" function of a 3rd-party VPN app, they:
+ </p>
+ <ul>
+ <li>[C-3-1] MUST disable this user affordance for apps that do not support always-on VPN service in the <code>AndroidManifest.xml</code> file via setting the <a href="https://developer.android.com/reference/android/net/VpnService.html#SERVICE_META_DATA_SUPPORTS_ALWAYS_ON"><code>SERVICE_META_DATA_SUPPORTS_ALWAYS_ON</code></a> attribute to <code>false</code>.
+ </li>
+ </ul>
<h3 id="9_9_data_storage_encryption">
9.9. Data Storage Encryption
</h3>
@@ -9043,11 +9043,11 @@
</li>
<li>[C-1-2] MUST use a default passcode to wrap the encryption key and MUST NOT write the encryption key to storage at any time without being encrypted.
</li>
- <li>[C-1-3] MUST provide the user the possibility to AES encrypt the encryption key, except when it is in active use, with the lock screen credentials stretched using a slow stretching algorithm (e.g. PBKDF2 or scrypt).
+ <li>[C-1-3] MUST AES encrypt the encryption key by default unless the user explicitly opts out, except when it is in active use, with the lock screen credentials stretched using a slow stretching algorithm (e.g. PBKDF2 or scrypt).
</li>
<li>[C-1-4] The above default password stretching algorithm MUST be cryptographically bound to that keystore when the user has not specified a lock screen credentials or has disabled use of the passcode for encryption and the device provides a hardware-backed keystore.
</li>
- <li>[C-1-5] MUST NOT send encryption key off the device (even when wrapped with the user passcode and/or hardware bound key).
+ <li>[C-1-5] MUST NOT send encryption key off the the device (even when wrapped with the user passcode and/or hardware bound key).
</li>
</ul>
<p>
@@ -9069,17 +9069,17 @@
<ul>
<li>[C-1-1] MUST declare the platform feature flag <code>android.software.verified_boot</code>.
</li>
- <li>[C-2-1] MUST perform verification on every boot sequence.
+ <li>[C-1-2] MUST perform verification on every boot sequence.
</li>
- <li>[C-3-1] MUST start verification from an immutable hardware key that is the root of trust and go all the way up to the system partition.
+ <li>[C-1-3] MUST start verification from an immutable hardware key that is the root of trust and go all the way up to the system partition.
</li>
- <li>[C-4-1] MUST implement each stage of verification to check the integrity and authenticity of all the bytes in the next stage before executing the code in the next stage.
+ <li>[C-1-4] MUST implement each stage of verification to check the integrity and authenticity of all the bytes in the next stage before executing the code in the next stage.
</li>
- <li>[C-5-1] MUST use verification algorithms as strong as current recommendations from NIST for hashing algorithms (SHA-256) and public key sizes (RSA-2048).
+ <li>[C-1-5] MUST use verification algorithms as strong as current recommendations from NIST for hashing algorithms (SHA-256) and public key sizes (RSA-2048).
</li>
- <li>[C-6-1] MUST NOT allow boot to complete when system verification fails, unless the user consents to attempt booting anyway, in which case the data from any non-verified storage blocks MUST not be used.
+ <li>[C-1-6] MUST NOT allow boot to complete when system verification fails, unless the user consents to attempt booting anyway, in which case the data from any non-verified storage blocks MUST not be used.
</li>
- <li>[C-7-1] MUST NOT allow verified partitions on the device to be modified unless the user has explicitly unlocked the boot loader.
+ <li>[C-1-7] MUST NOT allow verified partitions on the device to be modified unless the user has explicitly unlocked the boot loader.
</li>
<li>[SR] If there are multiple discrete chips in the device (e.g. radio, specialized image processor), the boot process of each of those chips is STRONGLY RECOMMENDED to verify every stage upon booting.
</li>
@@ -9096,10 +9096,10 @@
The upstream Android Open Source Project provides a preferred implementation of this feature in the <a href="http://android.googlesource.com/platform/external/avb/"><code>external/avb/</code></a> repository, which can be integrated into the boot loader used for loading Android.
</p>
<p>
- Device implementations with Advanced Encryption Standard (AES) crypto performance above 50 MiB/seconds:
+ If device implementations report the feature flag <a href="https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_RAM_NORMAL"><code>android.hardware.ram.normal</code></a> , they:
</p>
<ul>
- <li>[C-8-1] MUST support verified boot for device integrity.
+ <li>[C-2-1] MUST support verified boot for device integrity.
</li>
</ul>
<p>
@@ -9127,7 +9127,7 @@
</li>
<li>[C-1-2] MUST have implementations of RSA, AES, ECDSA and HMAC cryptographic algorithms and MD5, SHA1, and SHA-2 family hash functions to properly support the Android Keystore system's supported algorithms in an area that is securely isolated from the code running on the kernel and above. Secure isolation MUST block all potential mechanisms by which kernel or userspace code might access the internal state of the isolated environment, including DMA. The upstream Android Open Source Project (AOSP) meets this requirement by using the <a href="https://source.android.com/security/trusty/">Trusty</a> implementation, but another ARM TrustZone-based solution or a third-party reviewed secure implementation of a proper hypervisor-based isolation are alternative options.
</li>
- <li>[C-1-3] MUST perform the lock screen authentication in the isolated execution environment and only when successful, allow the authentication-bound keys to be used. The upstream Android Open Source Project provides the <a href="http://source.android.com/devices/tech/security/authentication/gatekeeper.html">Gatekeeper Hardware Abstraction Layer (HAL)</a> and Trusty, which can be used to satisfy this requirement.
+ <li>[C-1-3] MUST perform the lock screen authentication in the isolated execution environment and only when successful, allow the authentication-bound keys to be used. Lock screen credentials MUST be stored in a way that allows only the isolated execution environment to perform lock screen authentication. The upstream Android Open Source Project provides the <a href="http://source.android.com/devices/tech/security/authentication/gatekeeper.html">Gatekeeper Hardware Abstraction Layer (HAL)</a> and Trusty, which can be used to satisfy this requirement.
</li>
<li>[C-1-4] MUST support key attestation where the attestation signing key is protected by secure hardware and signing is performed in secure hardware. The attestation signing keys MUST be shared across large enough number of devices to prevent the keys from being used as device identifiers. One way of meeting this requirement is to share the same attestation key unless at least 100,000 units of a given SKU are produced. If more than 100,000 units of an SKU are produced, a different key MAY be used for each 100,000 units.
</li>
@@ -9198,20 +9198,29 @@
</li>
<li>[C-5-3] MUST have a false acceptance rate that is equal or stronger than what is required for a fingerprint sensor as described in section 7.3.10, or otherwise MUST be disabled and only allow the primary authentication to unlock the screen when the Device Policy Controller (DPC) application has set the password quality policy via the <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordQuality%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setPasswordQuality()</code></a> method with a more restrictive quality constant than <code>PASSWORD_QUALITY_BIOMETRIC_WEAK</code>.
</li>
- <li>[C-5-4] The user MUST be challenged for the primary authentication (e.g.PIN, pattern, password) at least once every 72 hours or less.
+ <li>[SR] Are STRONGLY RECOMMENDED to have spoof and imposter acceptance rates that are equal to or stronger than what is required for a fingerprint sensor as described in section 7.3.10.
+ </li>
+ </ul>
+ <p>
+ If the spoof and imposter acceptance rates are not equal to or stronger than what is required for a fingerprint sensor as described in <a href="#7_3_10_fingerprint_sensor">section 7.3.10</a> and the Device Policy Controller (DPC) application has set the password quality policy via the <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordQuality%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setPasswordQuality()</code></a> method with a more restrictive quality constant than <code>PASSWORD_QUALITY_BIOMETRIC_WEAK</code>, then:
+ </p>
+ <ul>
+ <li>[C-6-1] MUST disable these biometric methods and allow only the primary authentication to unlock the screen.
+ </li>
+ <li>[C-6-2] MUST challenge the user for the primary authentication (e.g.PIN, pattern, password) at least once every 72 hours or less.
</li>
</ul>
<p>
If device implementations add or modify the authentication methods to unlock the lock screen and if such an authentication method will be used to unlock the keyguard, but will not be treated as a secure lock screen, then they:
</p>
<ul>
- <li>[C-6-1] MUST return <code>false</code> for both the <a href="http://developer.android.com/reference/android/app/KeyguardManager.html#isKeyguardSecure%28%29"><code>KeyguardManager.isKeyguardSecure()</code></a> and the <a href="https://developer.android.com/reference/android/app/KeyguardManager.html#isDeviceSecure%28%29"><code>KeyguardManager.isDeviceSecure()</code></a> methods.
+ <li>[C-7-1] MUST return <code>false</code> for both the <a href="http://developer.android.com/reference/android/app/KeyguardManager.html#isKeyguardSecure%28%29"><code>KeyguardManager.isKeyguardSecure()</code></a> and the <a href="https://developer.android.com/reference/android/app/KeyguardManager.html#isDeviceSecure%28%29"><code>KeyguardManager.isDeviceSecure()</code></a> methods.
</li>
- <li>[C-6-2] MUST be disabled when the Device Policy Controller (DPC) application has set the password quality policy via the <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordQuality%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setPasswordQuality()</code></a> method with a more restrictive quality constant than <code>PASSWORD_QUALITY_UNSPECIFIED</code>.
+ <li>[C-7-2] MUST be disabled when the Device Policy Controller (DPC) application has set the password quality policy via the <a href="https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordQuality%28android.content.ComponentName,%20int%29"><code>DevicePolicyManager.setPasswordQuality()</code></a> method with a more restrictive quality constant than <code>PASSWORD_QUALITY_UNSPECIFIED</code>.
</li>
- <li>[C-6-3] MUST NOT reset the password expiration timers set by <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordExpirationTimeout%28android.content.ComponentName,%20long%29"><code>DevicePolicyManager.setPasswordExpirationTimeout()</code></a>.
+ <li>[C-7-3] MUST NOT reset the password expiration timers set by <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPasswordExpirationTimeout%28android.content.ComponentName,%20long%29"><code>DevicePolicyManager.setPasswordExpirationTimeout()</code></a>.
</li>
- <li>[C-6-4] MUST NOT authenticate access to keystores if the application has called <a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.Builder.html#setUserAuthenticationRequired%28boolean%29"><code>KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)</code></a>).
+ <li>[C-7-4] MUST NOT authenticate access to keystores if the application has called <a href="https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.Builder.html#setUserAuthenticationRequired%28boolean%29"><code>KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)</code></a>).
</li>
</ul>
<h3 id="9_12_data_deletion">
@@ -9296,7 +9305,7 @@
Device implementations MUST pass the <a href="http://source.android.com/compatibility/index.html">Android Compatibility Test Suite (CTS)</a> available from the Android Open Source Project, using the final shipping software on the device. Additionally, device implementers SHOULD use the reference implementation in the Android Open Source tree as much as possible, and MUST ensure compatibility in cases of ambiguity in CTS and for any reimplementations of parts of the reference source code.
</p>
<p>
- The CTS is designed to be run on an actual device. Like any software, the CTS may itself contain bugs. The CTS will be versioned independently of this Compatibility Definition, and multiple revisions of the CTS may be released for Android 8.0. Device implementations MUST pass the latest CTS version available at the time the device software is completed.
+ The CTS is designed to be run on an actual device. Like any software, the CTS may itself contain bugs. The CTS will be versioned independently of this Compatibility Definition, and multiple revisions of the CTS may be released for Android 8.1. Device implementations MUST pass the latest CTS version available at the time the device software is completed.
</p>
<h3 id="10_2_cts_verifier">
10.2. CTS Verifier
@@ -9353,7 +9362,7 @@
</p>
<ul>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/?pretty=full&amp;no-merges">Document changelog</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/?pretty=full&amp;no-merges">Document changelog</a>
</li>
</ul>
<p>
@@ -9361,43 +9370,43 @@
</p>
<ol>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/1_introduction?pretty=full&amp;no-merges">Introduction</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/1_introduction?pretty=full&amp;no-merges">Introduction</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/2_device_types?pretty=full&amp;no-merges">Device Types</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/2_device_types?pretty=full&amp;no-merges">Device Types</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/3_software?pretty=full&amp;no-merges">Software</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/3_software?pretty=full&amp;no-merges">Software</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/4_application-packaging?pretty=full&amp;no-merges">Application Packaging</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/4_application-packaging?pretty=full&amp;no-merges">Application Packaging</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/5_multimedia?pretty=full&amp;no-merges">Multimedia</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/5_multimedia?pretty=full&amp;no-merges">Multimedia</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/6_dev-tools-and-options?pretty=full&amp;no-merges">Developer Tools and Options</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/6_dev-tools-and-options?pretty=full&amp;no-merges">Developer Tools and Options</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/7_hardware-compatibility?pretty=full&amp;no-merges">Hardware Compatibility</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/7_hardware-compatibility?pretty=full&amp;no-merges">Hardware Compatibility</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/8_performance-and-power?pretty=full&amp;no-merges">Performance and Power</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/8_performance-and-power?pretty=full&amp;no-merges">Performance and Power</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/9_security-model?pretty=full&amp;no-merges">Security Model</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/9_security-model?pretty=full&amp;no-merges">Security Model</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/10_software-compatibility-testing?pretty=full&amp;no-merges">Software Compatibility Testing</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/10_software-compatibility-testing?pretty=full&amp;no-merges">Software Compatibility Testing</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/11_updatable-software?pretty=full&amp;no-merges">Updatable Software</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/11_updatable-software?pretty=full&amp;no-merges">Updatable Software</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/12_document-changelog?pretty=full&amp;no-merges">Document Changelog</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/12_document-changelog?pretty=full&amp;no-merges">Document Changelog</a>
</li>
<li>
- <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-dev/13_contact-us?pretty=full&amp;no-merges">Contact Us</a>
+ <a href="https://android.googlesource.com/platform/compatibility/cdd/+log/oreo-mr1-dev/13_contact-us?pretty=full&amp;no-merges">Contact Us</a>
</li>
</ol>
<h3 id="12_1_changelog_viewing_tips">