Home | History | Annotate | Download | only in 5.0
      1 <!DOCTYPE html>
      2 <head>
      3 <title>Android 5.0 Compatibility Definition</title>
      4 <link rel="stylesheet" type="text/css" href="/compatibility/android-cdd.css"/>
      5 </head>
      6 <body>
      7 <h1>Android 5.0 Compatibility Definition</h1>
      8 <!--
      9 <span style="color: red; font-weight: bold;"><h2>Revision 1</h2></span><br/>
     10 <span style="color: red;">Last updated: July 23, 2013</span>
     11 -->
     12 <p><b><font color="red">Revision 1</font></b><br/>
     13 Last updated: January 12, 2015
     14 </p>
     15 <p>Copyright &copy; 2015, Google Inc. All rights reserved.<br/>
     16 <a href="mailto:compatibility (a] android.com">compatibility (a] android.com</a>
     17 </p>
     18 
     19 <h1 id=table_of_contents>Table of Contents</h1>
     20 
     21 <table>
     22  <tr>
     23     <td>
     24 <p><a href="#1_introduction">1. Introduction</a></p>
     25 
     26 <p><a href="#2_device_types">2. Device Types</a></p>
     27 
     28 <p><a href="#2_1_device_configurations">2.1 Device Configurations</a></p>
     29 
     30 <p><a href="#3_software">3. Software</a></p>
     31 
     32 <p><a href="#3_1_managed_api_compatibility">3.1. Managed API Compatibility</a></p>
     33 
     34 <p><a href="#3_2_soft_api_compatibility">3.2. Soft API Compatibility</a></p>
     35 
     36 <p><a href="#3_2_1_permissions">3.2.1. Permissions</a></p>
     37 
     38 <p><a href="#3_2_2_build_parameters">3.2.2. Build Parameters</a></p>
     39 
     40 <p><a href="#3_2_3_intent_compatibility">3.2.3. Intent Compatibility</a></p>
     41 
     42 <p><a href="#3_2_3_1_core_application_intents">3.2.3.1. Core Application Intents</a></p>
     43 
     44 <p><a href="#3_2_3_2_intent_overrides">3.2.3.2. Intent Overrides</a></p>
     45 
     46 <p><a href="#3_2_3_3_intent_namespaces">3.2.3.3. Intent Namespaces</a></p>
     47 
     48 <p><a href="#3_2_3_4_broadcast_intents">3.2.3.4. Broadcast Intents</a></p>
     49 
     50 <p><a href="#3_2_3_5_default_app_settings">3.2.3.5. Default App Settings</a></p>
     51 
     52 <p><a href="#3_3_native_api_compatibility">3.3. Native API Compatibility</a></p>
     53 
     54 <p><a href="#3_3_1_application_binary_interfaces">3.3.1 Application Binary Interfaces</a></p>
     55 
     56 <p><a href="#3_4_web_compatibility">3.4. Web Compatibility</a></p>
     57 
     58 <p><a href="#3_4_1_webview_compatibility">3.4.1. WebView Compatibility</a></p>
     59 
     60 <p><a href="#3_4_2_browser_compatibility">3.4.2. Browser Compatibility</a></p>
     61 
     62 <p><a href="#3_5_api_behavioral_compatibility">3.5. API Behavioral Compatibility</a></p>
     63 
     64 <p><a href="#3_6_api_namespaces">3.6. API Namespaces</a></p>
     65 
     66 <p><a href="#3_7_runtime_compatibility">3.7. Runtime Compatibility</a></p>
     67 
     68 <p><a href="#3_8_user_interface_compatibility">3.8. User Interface Compatibility</a></p>
     69 
     70 <p><a href="#3_8_1_launcher_home_screen">3.8.1. Launcher (Home Screen)</a></p>
     71 
     72 <p><a href="#3_8_2_widgets">3.8.2. Widgets</a></p>
     73 
     74 <p><a href="#3_8_3_notifications">3.8.3. Notifications</a></p>
     75 
     76 <p><a href="#3_8_4_search">3.8.4. Search</a></p>
     77 
     78 <p><a href="#3_8_5_toasts">3.8.5. Toasts</a></p>
     79 
     80 <p><a href="#3_8_6_themes">3.8.6. Themes</a></p>
     81 
     82 <p><a href="#3_8_7_live_wallpapers">3.8.7. Live Wallpapers</a></p>
     83 
     84 <p><a href="#3_8_8_activity_switching">3.8.8. Activity Switching</a></p>
     85 
     86 <p><a href="#3_8_9_input_management">3.8.9. Input Management</a></p>
     87 
     88 <p><a href="#3_8_10_lock_screen_media_control">3.8.10. Lock Screen Media Control</a></p>
     89 
     90 <p><a href="#3_8_11_dreams">3.8.11. Dreams</a></p>
     91 
     92 <p><a href="#3_8_12_location">3.8.12. Location</a></p>
     93 
     94 <p><a href="#3_8_13_unicode_and_font">3.8.13. Unicode and Font</a></p>
     95 
     96 <p><a href="#3_9_device_administration">3.9. Device Administration</a></p>
     97 
     98 <p><a href="#3_10_accessibility">3.10. Accessibility</a></p>
     99 
    100 <p><a href="#3_11_text-to-speech">3.11. Text-to-Speech</a></p>
    101 
    102 <p><a href="#3_12_tv_input_framework">3.12. TV Input Framework</a></p>
    103 
    104 <p><a href="#4_application_packaging_compatibility">4. Application Packaging Compatibility</a></p>
    105 
    106 <p><a href="#5_multimedia_compatibility">5. Multimedia Compatibility</a></p>
    107 
    108 <p><a href="#5_1_media_codecs">5.1. Media Codecs</a></p>
    109 
    110 <p><a href="#5_1_1_audio_codecs">5.1.1. Audio Codecs</a></p>
    111 
    112 <p><a href="#5_1_2_image_codecs">5.1.2. Image Codecs</a></p>
    113 
    114 <p><a href="#5_1_3_video_codecs">5.1.3. Video Codecs</a></p>
    115 
    116 <p><a href="#5_2_video_encoding">5.2. Video Encoding</a></p>
    117 
    118 <p><a href="#5_3_video_decoding">5.3. Video Decoding</a></p>
    119 
    120 <p><a href="#5_4_audio_recording">5.4. Audio Recording</a></p>
    121 
    122 <p><a href="#5_4_1_raw_audio_capture">5.4.1. Raw Audio Capture</a></p>
    123 
    124 <p><a href="#5_4_2_capture_for_voice_recognition">5.4.2. Capture for Voice Recognition</a></p>
    125 
    126 <p><a href="#5_4_3_capture_for_rerouting_of_playback">5.4.3. Capture for Rerouting of Playback</a></p>
    127 
    128 <p><a href="#5_5_audio_playback">5.5. Audio Playback</a></p>
    129 
    130 <p><a href="#5_5_1_raw_audio_playback">5.5.1. Raw Audio Playback</a></p>
    131 
    132 <p><a href="#5_5_2_audio_effects">5.5.2. Audio Effects</a></p>
    133 
    134 <p><a href="#5_5_3_audio_output_volume">5.5.3. Audio Output Volume</a></p>
    135 
    136 <p><a href="#5_6_audio_latency">5.6. Audio Latency</a></p>
    137 
    138 <p><a href="#5_7_network_protocols">5.7. Network Protocols</a></p>
    139 
    140 <p><a href="#5_8_secure_media">5.8. Secure Media</a></p>
    141 
    142 <p><a href="#6_developer_tools_and_options_compatibility">6. Developer Tools and Options Compatibility</a></p>
    143 
    144 <p><a href="#6_1_developer_tools">6.1. Developer Tools</a></p>
    145 
    146 <p><a href="#6_2_developer_options">6.2. Developer Options</a></p>
    147 
    148 <p><a href="#7_hardware_compatibility">7. Hardware Compatibility</a></p>
    149 
    150 <p><a href="#7_1_display_and_graphics">7.1. Display and Graphics</a></p>
    151 
    152 <p><a href="#7_1_1_screen_configuration">7.1.1. Screen Configuration</a></p>
    153 
    154 <p><a href="#7_1_1_1_screen_size">7.1.1.1. Screen Size</a></p>
    155 
    156 <p><a href="#7_1_1_2_screen_aspect_ratio">7.1.1.2. Screen Aspect Ratio</a></p>
    157 
    158 <p><a href="#7_1_1_3_screen_density">7.1.1.3. Screen Density</a></p>
    159 
    160 <p><a href="#7_1_2_display_metrics">7.1.2. Display Metrics</a></p>
    161 </td>
    162  </tr>
    163 </table>
    164 
    165 <table>
    166  <tr>
    167     <td>
    168 <p><a href="#7_1_3_screen_orientation">7.1.3. Screen Orientation</a></p>
    169 
    170 <p><a href="#7_1_4_2d_and_3d_graphics_acceleration">7.1.4. 2D and 3D Graphics Acceleration</a></p>
    171 
    172 <p><a href="#7_1_5_legacy_application_compatibility_mode">7.1.5. Legacy Application Compatibility Mode</a></p>
    173 
    174 <p><a href="#7_1_6_screen_technology">7.1.6. Screen Technology</a></p>
    175 
    176 <p><a href="#7_1_7_external_displays">7.1.7. External Displays</a></p>
    177 
    178 <p><a href="#7_2_input_devices">7.2. Input Devices</a></p>
    179 
    180 <p><a href="#7_2_1_keyboard">7.2.1. Keyboard</a></p>
    181 
    182 <p><a href="#7_2_2_non-touch_navigation">7.2.2. Non-touch Navigation</a></p>
    183 
    184 <p><a href="#7_2_3_navigation_keys">7.2.3. Navigation Keys</a></p>
    185 
    186 <p><a href="#7_2_4_touchscreen_input">7.2.4. Touchscreen Input</a></p>
    187 
    188 <p><a href="#7_2_5_fake_touch_input">7.2.5. Fake Touch Input</a></p>
    189 
    190 <p><a href="#7_2_6_game_controller_support">7.2.6. Game Controller Support</a></p>
    191 
    192 <p><a href="#7_2_6_1_button_mappings">7.2.6.1. Button Mappings</a></p>
    193 
    194 <p><a href="#7_2_7_remote_control">7.2.7. Remote Control</a></p>
    195 
    196 <p><a href="#7_3_sensors">7.3. Sensors</a></p>
    197 
    198 <p><a href="#7_3_1_accelerometer">7.3.1. Accelerometer</a></p>
    199 
    200 <p><a href="#7_3_2_magnetometer">7.3.2. Magnetometer</a></p>
    201 
    202 <p><a href="#7_3_3_gps">7.3.3. GPS</a></p>
    203 
    204 <p><a href="#7_3_4_gyroscope">7.3.4. Gyroscope</a></p>
    205 
    206 <p><a href="#7_3_5_barometer">7.3.5. Barometer</a></p>
    207 
    208 <p><a href="#7_3_6_thermometer">7.3.6. Thermometer</a></p>
    209 
    210 <p><a href="#7_3_7_photometer">7.3.7. Photometer</a></p>
    211 
    212 <p><a href="#7_3_8_proximity_sensor">7.3.8. Proximity Sensor</a></p>
    213 
    214 <p><a href="#7_4_data_connectivity">7.4. Data Connectivity</a></p>
    215 
    216 <p><a href="#7_4_1_telephony">7.4.1. Telephony</a></p>
    217 
    218 <p><a href="#7_4_2_ieee_802_11_wi-fi">7.4.2. IEEE 802.11 (Wi-Fi)</a></p>
    219 
    220 <p><a href="#7_4_2_1_wi-fi_direct">7.4.2.1. Wi-Fi Direct</a></p>
    221 
    222 <p><a href="#7_4_2_2_wi-fi_tunneled_direct_link_setup">7.4.2.2. Wi-Fi Tunneled Direct Link Setup</a></p>
    223 
    224 <p><a href="#7_4_3_bluetooth">7.4.3. Bluetooth</a></p>
    225 
    226 <p><a href="#7_4_4_near-field_communications">7.4.4. Near-Field Communications</a></p>
    227 
    228 <p><a href="#7_4_5_minimum_network_capability">7.4.5. Minimum Network Capability</a></p>
    229 
    230 <p><a href="#7_4_6_sync_settings">7.4.6. Sync Settings</a></p>
    231 
    232 <p><a href="#7_5_cameras">7.5. Cameras</a></p>
    233 
    234 <p><a href="#7_5_1_rear-facing_camera">7.5.1. Rear-Facing Camera</a></p>
    235 
    236 <p><a href="#7_5_2_front-facing_camera">7.5.2. Front-Facing Camera</a></p>
    237 
    238 <p><a href="#7_5_3_external_camera">7.5.3. External Camera</a></p>
    239 
    240 <p><a href="#7_5_4_camera_api_behavior">7.5.4. Camera API Behavior</a></p>
    241 
    242 <p><a href="#7_5_5_camera_orientation">7.5.5. Camera Orientation</a></p>
    243 
    244 <p><a href="#7_6_memory_and_storage">7.6. Memory and Storage</a></p>
    245 
    246 <p><a href="#7_6_1_minimum_memory_and_storage">7.6.1. Minimum Memory and Storage</a></p>
    247 
    248 <p><a href="#7_6_2_application_shared_storage">7.6.2. Application Shared Storage</a></p>
    249 
    250 <p><a href="#7_7_usb">7.7. USB</a></p>
    251 
    252 <p><a href="#7_8_audio">7.8. Audio</a></p>
    253 
    254 <p><a href="#7_8_1_microphone">7.8.1. Microphone</a></p>
    255 
    256 <p><a href="#7_8_2_audio_output">7.8.2. Audio Output</a></p>
    257 
    258 <p><a href="#7_8_2_1_analog_audio_ports">7.8.2.1. Analog Audio Ports</a></p>
    259 
    260 <p><a href="#8_performance_compatibility">8. Performance Compatibility</a></p>
    261 
    262 <p><a href="#8_1_user_experience_consistency">8.1. User Experience Consistency</a></p>
    263 
    264 <p><a href="#8_2_file_i_o_access_performance">8.2. Memory Performance</a></p>
    265 
    266 <p><a href="#9_security_model_compatibility">9. Security Model Compatibility</a></p>
    267 
    268 <p><a href="#9_1_permissions">9.1. Permissions</a></p>
    269 
    270 <p><a href="#9_2_uid_and_process_isolation">9.2. UID and Process Isolation</a></p>
    271 
    272 <p><a href="#9_3_filesystem_permissions">9.3. Filesystem Permissions</a></p>
    273 
    274 <p><a href="#9_4_alternate_execution_environments">9.4. Alternate Execution Environments</a></p>
    275 
    276 <p><a href="#9_5_multi-user_support">9.5. Multi-User Support</a></p>
    277 
    278 <p><a href="#9_6_premium_sms_warning">9.6. Premium SMS Warning</a></p>
    279 
    280 <p><a href="#9_7_kernel_security_features">9.7. Kernel Security Features</a></p>
    281 
    282 <p><a href="#9_8_privacy">9.8. Privacy</a></p>
    283 
    284 <p><a href="#9_9_full-disk_encryption">9.9. Full-Disk Encryption</a></p>
    285 
    286 <p><a href="#9_10_verified_boot">9.10. Verified Boot</a></p>
    287 
    288 <p><a href="#10_software_compatibility_testing">10. Software Compatibility Testing</a></p>
    289 
    290 <p><a href="#10_1_compatibility_test_suite">10.1. Compatibility Test Suite</a></p>
    291 
    292 <p><a href="#10_2_cts_verifier">10.2. CTS Verifier</a></p>
    293 
    294 <p><a href="#11_updatable_software">11. Updatable Software</a></p>
    295 
    296 <p><a href="#12_document_changelog">12. Document Changelog</a></p>
    297 
    298 <p><a href="#13_contact_us">13. Contact Us</a></p>
    299 
    300 <p><a href="#14_resources">14. Resources</a></p>
    301 </td>
    302  </tr>
    303 </table>
    304 
    305 <h1 id=1_introduction>1. Introduction</h1>
    306 
    307 
    308 <p>This document enumerates the requirements that must be met in order for devices
    309 to be compatible with Android 5.0.</p>
    310 
    311 <p>The use of "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
    312 "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" is per the IETF standard
    313 defined in RFC2119 [<a href="http://www.ietf.org/rfc/rfc2119.txt">Resources, 1</a>].</p>
    314 
    315 <p>As used in this document, a "device implementer" or "implementer" is a person
    316 or organization developing a hardware/software solution running Android 5.0. A
    317 "device implementation" or "implementation" is the hardware/software solution
    318 so developed.</p>
    319 
    320 <p>To be considered compatible with Android 5.0, device implementations MUST meet
    321 the requirements presented in this Compatibility Definition, including any
    322 documents incorporated via reference.</p>
    323 
    324 <p>Where this definition or the software tests described in <a href="#heading=h.rafv96b0uwer">section 10</a> is silent, ambiguous, or incomplete, it is the responsibility of the device
    325 implementer to ensure compatibility with existing implementations.</p>
    326 
    327 <p>For this reason, the Android Open Source Project [<a href="http://source.android.com/">Resources, 2</a>] is both the reference and preferred implementation of Android. Device
    328 implementers are strongly encouraged to base their implementations to the
    329 greatest extent possible on the "upstream" source code available from the
    330 Android Open Source Project. While some components can hypothetically be
    331 replaced with alternate implementations this practice is strongly discouraged,
    332 as passing the software tests will become substantially more difficult. It is
    333 the implementer's responsibility to ensure full behavioral compatibility with
    334 the standard Android implementation, including and beyond the Compatibility
    335 Test Suite. Finally, note that certain component substitutions and
    336 modifications are explicitly forbidden by this document.</p>
    337 
    338 <p>Many of the resources listed in <a href="#heading=h.jhgs5yq2lqtj">section 14</a> are derived directly or indirectly from the Android SDK, and will be
    339 functionally identical to the information in that SDK's documentation. For any
    340 case where this Compatibility Definition or the Compatibility Test Suite
    341 disagrees with the SDK documentation, the SDK documentation is considered
    342 authoritative. Any technical details provided in the references included in <a href="#heading=h.jhgs5yq2lqtj">section 14</a> are considered by inclusion to be part of this Compatibility Definition. </p>
    343 
    344 <h1 id=2_device_types>2. Device Types</h1>
    345 
    346 
    347 <p>While the Android Open Source Project has been used in the implementation of a
    348 variety of device types and form factors, many aspects of the architecture and
    349 compatibility requirements were optimized for handheld devices. Starting from
    350 Android 5.0, the Android Open Source Project aims to embrace a wider variety of
    351 device types as described in this section.</p>
    352 
    353 <p><strong>Android Handheld device</strong> refers to an Android device implementation that is typically used by holding
    354 it in the hand, such as mp3 players, phones, and tablets. Android Handheld
    355 device implementations:</p>
    356 
    357 <ul>
    358   <li> MUST have a touchscreen embedded in the device
    359   <li> MUST have a power source that provides mobility, such as a battery 
    360 </ul>
    361 
    362 <p><strong>Android Television device</strong> refers to an Android device implementation that is an entertainment interface
    363 for consuming digital media, movies, games, apps, and/or live TV for users
    364 sitting about ten feet away (a lean back or 10-foot user interface).
    365 Android Television devices:</p>
    366 
    367 <ul>
    368   <li> MUST have an embedded screen OR include a video output port, such as VGA, HDMI,
    369 or a wireless port for display
    370   <li> MUST declare the features android.software.leanback and
    371 android.hardware.type.television [<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_LEANBACK">Resources, 3</a>]
    372 </ul>
    373 
    374 <p><strong>Android Watch device</strong> refers to an Android device implementation intended to be worn on the body,
    375 perhaps on the wrist, and:</p>
    376 
    377 <ul>
    378   <li> MUST have a screen with the physical diagonal length in the range from 1.1 to
    379 2.5 inches
    380   <li> MUST declare the feature android.hardware.type.watch
    381   <li> MUST support uiMode = UI_MODE_TYPE_WATCH [<a href="http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_WATCH">Resources, 4</a>]
    382 </ul>
    383 
    384 <p>All Android device implementations that do not fit into any of the above device
    385 types still MUST meet all requirements in this document to be Android 5.0
    386 compatible, unless the requirement is explicitly described to be only
    387 applicable to a specific Android device type. </p>
    388 
    389 <h2 id=2_1_device_configurations>2.1 Device Configurations</h2>
    390 
    391 
    392 <p>This is a summary of major differences in hardware configuration by device
    393 type. (Empty cells denote a MAY). Not all configurations are covered in this
    394 table; see relevant hardware sections for more detail.</p>
    395 <table>
    396  <tr>
    397     <td class="tab0">
    398 <p><strong>Category</strong></p>
    399 </td>
    400     <td class="tab0">
    401 <p><strong>Feature </strong></p>
    402 </td>
    403     <td class="tab0">
    404 <p><strong>Section</strong></p>
    405 </td>
    406     <td class="tab0">
    407 <p><strong>Handheld</strong></p>
    408 </td>
    409     <td class="tab0">
    410 <p><strong>Television</strong></p>
    411 </td>
    412     <td class="tab0">
    413 <p><strong>Watch</strong></p>
    414 </td>
    415     <td class="tab0">
    416 <p><strong>Other</strong></p>
    417 </td>
    418  </tr>
    419  <tr>
    420     <td>
    421 <p>Input</p>
    422 </td>
    423     <td>
    424 <p>D-pad</p>
    425 </td>
    426     <td>
    427 <p><a href="#heading=h.h86aqgcxrqbz">7.2.2. Non-touch Navigation</a></p>
    428 </td>
    429     <td></td>
    430     <td>
    431 <p>MUST</p>
    432 </td>
    433     <td></td>
    434     <td></td>
    435  </tr>
    436  <tr>
    437     <td></td>
    438     <td>
    439 <p>Touchscreen </p>
    440 </td>
    441     <td>
    442 <p> <a href="#heading=h.p7pmjzzatkph">7.2.4. Touchscreen input</a></p>
    443 </td>
    444     <td>
    445 <p>MUST</p>
    446 </td>
    447     <td></td>
    448     <td>
    449 <p>MUST</p>
    450 </td>
    451     <td>
    452 <p>SHOULD</p>
    453 </td>
    454  </tr>
    455  <tr>
    456     <td></td>
    457     <td>
    458 <p>Microphone </p>
    459 </td>
    460     <td>
    461 <p><a href="#heading=h.74o7ndqnyrjr">7.8.1. Microphone</a></p>
    462 </td>
    463     <td>
    464 <p>MUST</p>
    465 </td>
    466     <td>
    467 <p>SHOULD </p>
    468 </td>
    469     <td>
    470 <p>MUST</p>
    471 </td>
    472     <td>
    473 <p>SHOULD</p>
    474 </td>
    475  </tr>
    476  <tr>
    477     <td>
    478 <p>Sensors</p>
    479 </td>
    480     <td>
    481 <p>Accelerometer </p>
    482 </td>
    483     <td>
    484 <p><a href="#heading=h.3u857dtnrtuj">7.3.1 Accelerometer</a></p>
    485 </td>
    486     <td>
    487 <p>SHOULD</p>
    488 </td>
    489     <td></td>
    490     <td>
    491 <p>SHOULD</p>
    492 </td>
    493     <td>
    494 <p>SHOULD</p>
    495 </td>
    496  </tr>
    497  <tr>
    498     <td></td>
    499     <td>
    500 <p>GPS </p>
    501 </td>
    502     <td>
    503 <p><a href="#heading=h.2x1nre62p60d">7.3.3. GPS</a></p>
    504 </td>
    505     <td>
    506 <p>SHOULD</p>
    507 </td>
    508     <td></td>
    509     <td></td>
    510     <td></td>
    511  </tr>
    512  <tr>
    513     <td>
    514 <p>Connectivity</p>
    515 </td>
    516     <td>
    517 <p>Wi-Fi </p>
    518 </td>
    519     <td>
    520 <p><a href="#heading=h.39g0jrqcl40">7.4.2. IEEE 802.11</a></p>
    521 </td>
    522     <td>
    523 <p>SHOULD</p>
    524 </td>
    525     <td>
    526 <p> MUST</p>
    527 </td>
    528     <td></td>
    529     <td>
    530 <p>SHOULD</p>
    531 </td>
    532  </tr>
    533  <tr>
    534     <td></td>
    535     <td>
    536 <p>Wi-Fi Direct </p>
    537 </td>
    538     <td>
    539 <p><a href="#heading=h.82i6ovyqynfx">7.4.2.1. Wi-Fi Direct</a></p>
    540 </td>
    541     <td>
    542 <p>SHOULD</p>
    543 </td>
    544     <td>
    545 <p>SHOULD</p>
    546 </td>
    547     <td></td>
    548     <td>
    549 <p>SHOULD</p>
    550 </td>
    551  </tr>
    552  <tr>
    553     <td></td>
    554     <td>
    555 <p>Bluetooth </p>
    556 </td>
    557     <td>
    558 <p><a href="#heading=h.420i0exy2mxj">7.4.3. Bluetooth</a></p>
    559 </td>
    560     <td>
    561 <p>SHOULD</p>
    562 </td>
    563     <td>
    564 <p>MUST</p>
    565 </td>
    566     <td>
    567 <p>MUST</p>
    568 </td>
    569     <td>
    570 <p>SHOULD</p>
    571 </td>
    572  </tr>
    573  <tr>
    574     <td></td>
    575     <td>
    576 <p>Bluetooth Low Energy </p>
    577 </td>
    578     <td>
    579 <p><a href="#heading=h.420i0exy2mxj">7.4.3. Bluetooth</a></p>
    580 </td>
    581     <td>
    582 <p>SHOULD</p>
    583 </td>
    584     <td>
    585 <p>MUST</p>
    586 </td>
    587     <td>
    588 <p>SHOULD</p>
    589 </td>
    590     <td>
    591 <p>SHOULD</p>
    592 </td>
    593  </tr>
    594  <tr>
    595     <td></td>
    596     <td>
    597 <p>USB peripheral/ host mode </p>
    598 </td>
    599     <td>
    600 <p><a href="#heading=h.rp4zc78xvn6s">7.7. USB</a></p>
    601 </td>
    602     <td>
    603 <p>SHOULD</p>
    604 </td>
    605     <td>
    606 <p> </p>
    607 </td>
    608     <td></td>
    609     <td>
    610 <p>SHOULD</p>
    611 </td>
    612  </tr>
    613  <tr>
    614     <td>
    615 <p>Output</p>
    616 </td>
    617     <td>
    618 <p>Speaker and/or Audio output ports </p>
    619 </td>
    620     <td>
    621 <p><a href="#heading=h.ro0d402dzkaq">7.8.2. Audio Output</a></p>
    622 </td>
    623     <td>
    624 <p>MUST</p>
    625 </td>
    626     <td>
    627 <p>MUST</p>
    628 </td>
    629     <td></td>
    630     <td>
    631 <p>MUST</p>
    632 </td>
    633  </tr>
    634 </table>
    635 
    636 
    637 <h1 id=3_software>3. Software</h1>
    638 
    639 
    640 <h2 id=3_1_managed_api_compatibility>3.1. Managed API Compatibility</h2>
    641 
    642 
    643 <p>The managed Dalvik bytecode execution environment is the primary vehicle for
    644 Android applications. The Android application programming interface (API) is
    645 the set of Android platform interfaces exposed to applications running in the
    646 managed runtime environment. Device implementations MUST provide complete
    647 implementations, including all documented behaviors, of any documented API
    648 exposed by the Android SDK [<a href="http://developer.android.com/reference/packages.html">Resources, 5</a>] or any API decorated with the "@SystemApi" marker in the upstream Android
    649 source code. </p>
    650 
    651 <p>Device implementations MUST NOT omit any managed APIs, alter API interfaces or
    652 signatures, deviate from the documented behavior, or include no-ops, except
    653 where specifically allowed by this Compatibility Definition.</p>
    654 
    655 <p>This Compatibility Definition permits some types of hardware for which Android
    656 includes APIs to be omitted by device implementations. In such cases, the APIs
    657 MUST still be present and behave in a reasonable way. See <a href="#heading=h.5h5uvpadidzr">section 7</a> for specific requirements for this scenario.</p>
    658 
    659 <h2 id=3_2_soft_api_compatibility>3.2. Soft API Compatibility</h2>
    660 
    661 
    662 <p>In addition to the managed APIs from <a href="#heading=h.kr68507hndy4">section 3.1</a>, Android also includes a significant runtime-only "soft" API, in the form of
    663 such things as intents, permissions, and similar aspects of Android
    664 applications that cannot be enforced at application compile time.</p>
    665 
    666 <h3 id=3_2_1_permissions>3.2.1. Permissions</h3>
    667 
    668 
    669 <p>Device implementers MUST support and enforce all permission constants as
    670 documented by the Permission reference page [<a href="http://developer.android.com/reference/android/Manifest.permission.html">Resources, 6]</a>. Note that <a href="#heading=h.a32osmf1tmwt">section 9</a> lists additional requirements related to the Android security model.</p>
    671 
    672 <h3 id=3_2_2_build_parameters>3.2.2. Build Parameters</h3>
    673 
    674 
    675 <p>The Android APIs include a number of constants on the android.os.Build class [<a href="http://developer.android.com/reference/android/os/Build.html">Resources, 7</a>] that are intended to describe the current device. To provide consistent,
    676 meaningful values across device implementations, the table below includes
    677 additional restrictions on the formats of these values to which device
    678 implementations MUST conform.</p>
    679 <table>
    680  <tr>
    681     <td class="tab0">
    682 <p><strong>Parameter</strong></p>
    683 </td>
    684     <td class="tab0">
    685 <p><strong>Details</strong></p>
    686 </td>
    687  </tr>
    688  <tr>
    689     <td>
    690 <p>VERSION.RELEASE</p>
    691 </td>
    692     <td>
    693 <p>The version of the currently-executing Android system, in human-readable
    694 format. This field MUST have one of the string values defined in [<a href="http://source.android.com/compatibility/5.0/versions.html">Resources, 8]</a>.</p>
    695 </td>
    696  </tr>
    697  <tr>
    698     <td>
    699 <p>VERSION.SDK</p>
    700 </td>
    701     <td>
    702 <p>The version of the currently-executing Android system, in a format accessible
    703 to third-party application code. For Android 5.0, this field MUST have the
    704 integer value 21.</p>
    705 </td>
    706  </tr>
    707  <tr>
    708     <td>
    709 <p>VERSION.SDK_INT</p>
    710 </td>
    711     <td>
    712 <p>The version of the currently-executing Android system, in a format accessible
    713 to third-party application code. For Android 5.0, this field MUST have the
    714 integer value 21.</p>
    715 </td>
    716  </tr>
    717  <tr>
    718     <td>
    719 <p>VERSION.INCREMENTAL</p>
    720 </td>
    721     <td>
    722 <p>A value chosen by the device implementer designating the specific build of the
    723 currently-executing Android system, in human-readable format. This value MUST
    724 NOT be reused for different builds made available to end users. A typical use
    725 of this field is to indicate which build number or source-control change
    726 identifier was used to generate the build. There are no requirements on the
    727 specific format of this field, except that it MUST NOT be null or the empty
    728 string ("").</p>
    729 </td>
    730  </tr>
    731  <tr>
    732     <td>
    733 <p>BOARD</p>
    734 </td>
    735     <td>
    736 <p>A value chosen by the device implementer identifying the specific internal
    737 hardware used by the device, in human-readable format. A possible use of this
    738 field is to indicate the specific revision of the board powering the device.
    739 The value of this field MUST be encodable as 7-bit ASCII and match the regular
    740 expression "^[a-zA-Z0-9_-]+$".</p>
    741 </td>
    742  </tr>
    743  <tr>
    744     <td>
    745 <p>BRAND</p>
    746 </td>
    747     <td>
    748 <p>A value reflecting the brand name associated with the device as known to the
    749 end users. MUST be in human-readable format and SHOULD represent the
    750 manufacturer of the device or the company brand under which the device is
    751 marketed. The value of this field MUST be encodable as 7-bit ASCII and match
    752 the regular expression "^[a-zA-Z0-9_-]+$".</p>
    753 </td>
    754  </tr>
    755  <tr>
    756     <td class="tab1">
    757 <p>SUPPORTED_ABIS</p>
    758 </td>
    759     <td>
    760 <p>The name of the instruction set (CPU type + ABI convention) of native code. See <a href="#heading=h.3dpths90svxf">section 3.3. Native API Compatibility</a>.</p>
    761 </td>
    762  </tr>
    763  <tr>
    764     <td class="tab1">
    765 <p>SUPPORTED_32_BIT_ABIS</p>
    766 </td>
    767     <td>
    768 <p>The name of the instruction set (CPU type + ABI convention) of native code. See <a href="#heading=h.3dpths90svxf">section 3.3. Native API Compatibility</a>.</p>
    769 </td>
    770  </tr>
    771  <tr>
    772     <td class="tab1">
    773 <p>SUPPORTED_64_BIT_ABIS</p>
    774 </td>
    775     <td>
    776 <p>The name of the second instruction set (CPU type + ABI convention) of native
    777 code. See <a href="#heading=h.3dpths90svxf">section 3.3. Native API Compatibility</a>.</p>
    778 </td>
    779  </tr>
    780  <tr>
    781     <td>
    782 <p>CPU_ABI</p>
    783 </td>
    784     <td>
    785 <p>The name of the instruction set (CPU type + ABI convention) of native code. See <a href="#heading=h.3dpths90svxf">section 3.3. Native API Compatibility</a>.</p>
    786 </td>
    787  </tr>
    788  <tr>
    789     <td>
    790 <p>CPU_ABI2</p>
    791 </td>
    792     <td>
    793 <p>The name of the second instruction set (CPU type + ABI convention) of native
    794 code. See <a href="#heading=h.3dpths90svxf">section 3.3. Native API Compatibility</a>.</p>
    795 </td>
    796  </tr>
    797  <tr>
    798     <td>
    799 <p>DEVICE</p>
    800 </td>
    801     <td>
    802 <p>A value chosen by the device implementer containing the development name or
    803 code name identifying the configuration of the hardware features and industrial
    804 design of the device. The value of this field MUST be encodable as 7-bit ASCII
    805 and match the regular expression "^[a-zA-Z0-9_-]+$".</p>
    806 </td>
    807  </tr>
    808  <tr>
    809     <td>
    810 <p>FINGERPRINT</p>
    811 </td>
    812     <td>
    813 <p>A string that uniquely identifies this build. It SHOULD be reasonably
    814 human-readable. It MUST follow this template:</p>
    815 
    816 <p>$(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)</p>
    817 
    818 <p>For example:</p>
    819 
    820 <p>acme/myproduct/mydevice:5.0/LRWXX/3359:userdebug/test-keys</p>
    821 
    822 <p>The fingerprint MUST NOT include whitespace characters. If other fields
    823 included in the template above have whitespace characters, they MUST be
    824 replaced in the build fingerprint with another character, such as the
    825 underscore ("_") character. The value of this field MUST be encodable as 7-bit
    826 ASCII.</p>
    827 </td>
    828  </tr>
    829  <tr>
    830     <td>
    831 <p>HARDWARE</p>
    832 </td>
    833     <td>
    834 <p>The name of the hardware (from the kernel command line or /proc). It SHOULD be
    835 reasonably human-readable. The value of this field MUST be encodable as 7-bit
    836 ASCII and match the regular expression "^[a-zA-Z0-9_-]+$". </p>
    837 </td>
    838  </tr>
    839  <tr>
    840     <td>
    841 <p>HOST</p>
    842 </td>
    843     <td>
    844 <p>A string that uniquely identifies the host the build was built on, in
    845 human-readable format. There are no requirements on the specific format of this
    846 field, except that it MUST NOT be null or the empty string ("").</p>
    847 </td>
    848  </tr>
    849  <tr>
    850     <td>
    851 <p>ID</p>
    852 </td>
    853     <td>
    854 <p>An identifier chosen by the device implementer to refer to a specific release,
    855 in human-readable format. This field can be the same as
    856 android.os.Build.VERSION.INCREMENTAL, but SHOULD be a value sufficiently
    857 meaningful for end users to distinguish between software builds. The value of
    858 this field MUST be encodable as 7-bit ASCII and match the regular expression
    859 "^[a-zA-Z0-9._-]+$".</p>
    860 </td>
    861  </tr>
    862  <tr>
    863     <td>
    864 <p>MANUFACTURER</p>
    865 </td>
    866     <td>
    867 <p>The trade name of the Original Equipment Manufacturer (OEM) of the product.
    868 There are no requirements on the specific format of this field, except that it
    869 MUST NOT be null or the empty string ("").</p>
    870 </td>
    871  </tr>
    872  <tr>
    873     <td>
    874 <p>MODEL</p>
    875 </td>
    876     <td>
    877 <p>A value chosen by the device implementer containing the name of the device as
    878 known to the end user. This SHOULD be the same name under which the device is
    879 marketed and sold to end users. There are no requirements on the specific
    880 format of this field, except that it MUST NOT be null or the empty string ("").</p>
    881 </td>
    882  </tr>
    883  <tr>
    884     <td>
    885 <p>PRODUCT</p>
    886 </td>
    887     <td>
    888 <p>A value chosen by the device implementer containing the development name or
    889 code name of the specific product (SKU) that MUST be unique within the same
    890 brand. MUST be human-readable, but is not necessarily intended for view by end
    891 users. The value of this field MUST be encodable as 7-bit ASCII and match the
    892 regular expression "^[a-zA-Z0-9_-]+$".</p>
    893 </td>
    894  </tr>
    895  <tr>
    896     <td>
    897 <p>SERIAL</p>
    898 </td>
    899     <td>
    900 <p>A hardware serial number, which MUST be available. The value of this field MUST
    901 be encodable as 7-bit ASCII and match the regular expression
    902 "^([a-zA-Z0-9]{6,20})$".</p>
    903 </td>
    904  </tr>
    905  <tr>
    906     <td>
    907 <p>TAGS</p>
    908 </td>
    909     <td>
    910 <p>A comma-separated list of tags chosen by the device implementer that further
    911 distinguishes the build. This field MUST have one of the values corresponding
    912 to the three typical Android platform signing configurations: release-keys,
    913 dev-keys, test-keys. </p>
    914 </td>
    915  </tr>
    916  <tr>
    917     <td>
    918 <p>TIME</p>
    919 </td>
    920     <td>
    921 <p>A value representing the timestamp of when the build occurred.</p>
    922 </td>
    923  </tr>
    924  <tr>
    925     <td>
    926 <p>TYPE</p>
    927 </td>
    928     <td>
    929 <p>A value chosen by the device implementer specifying the runtime configuration
    930 of the build. This field MUST have one of the values corresponding to the three
    931 typical Android runtime configurations: user, userdebug, or eng.</p>
    932 </td>
    933  </tr>
    934  <tr>
    935     <td>
    936 <p>USER</p>
    937 </td>
    938     <td>
    939 <p>A name or user ID of the user (or automated user) that generated the build.
    940 There are no requirements on the specific format of this field, except that it
    941 MUST NOT be null or the empty string ("").</p>
    942 </td>
    943  </tr>
    944 </table>
    945 
    946 
    947 <h3 id=3_2_3_intent_compatibility>3.2.3. Intent Compatibility</h3>
    948 
    949 
    950 <p>Device implementations MUST honor Android's loose-coupling intent system, as
    951 described in the sections below. By "honored", it is meant that the device
    952 implementer MUST provide an Android Activity or Service that specifies a
    953 matching intent filter that binds to and implements correct behavior for each
    954 specified intent pattern.</p>
    955 
    956 <h4 id=3_2_3_1_core_application_intents>3.2.3.1. Core Application Intents</h4>
    957 
    958 
    959 <p>Android intents allow application components to request functionality from
    960 other Android components. The Android upstream project includes a list of
    961 applications considered core Android applications, which implements several
    962 intent patterns to perform common actions. The core Android applications are:</p>
    963 
    964 <ul>
    965   <li> Desk Clock
    966   <li> Browser 
    967   <li> Calendar
    968   <li> Contacts
    969   <li> Gallery
    970   <li> GlobalSearch
    971   <li> Launcher
    972   <li> Music
    973   <li> Settings
    974 </ul>
    975 
    976 <p>Device implementations SHOULD include the core Android applications as
    977 appropriate but MUST include a component implementing the same intent patterns
    978 defined by all the public Activity or Service components of these core
    979 Android applications. Note that Activity or Service components are considered
    980 "public" when the attribute android:exported is absent or has the value true.</p>
    981 
    982 <h4 id=3_2_3_2_intent_overrides>3.2.3.2. Intent Overrides</h4>
    983 
    984 
    985 <p>As Android is an extensible platform, device implementations MUST allow each
    986 intent pattern referenced in <a href="#heading=h.qiy4ddbiirgy">section 3.2.3.1</a> to be overridden by third-party applications. The upstream Android open source
    987 implementation allows this by default; device implementers MUST NOT attach
    988 special privileges to system applications' use of these intent patterns, or
    989 prevent third-party applications from binding to and assuming control of these
    990 patterns. This prohibition specifically includes but is not limited to
    991 disabling the "Chooser" user interface that allows the user to select between
    992 multiple applications that all handle the same intent pattern.</p>
    993 
    994 <p>However, device implementations MAY provide default activities for specific URI
    995 patterns (eg. http://play.google.com) if the default activity provides a more
    996 specific filter for the data URI. For example, an intent filter specifying the
    997 data URI "http://www.android.com" is more specific than the browser filter for
    998 "http://". Device implementations MUST provide a user interface for users to
    999 modify the default activity for intents.</p>
   1000 
   1001 <h4 id=3_2_3_3_intent_namespaces>3.2.3.3. Intent Namespaces</h4>
   1002 
   1003 
   1004 <p>Device implementations MUST NOT include any Android component that honors any
   1005 new intent or broadcast intent patterns using an ACTION, CATEGORY, or other key
   1006 string in the android.* or com.android.* namespace. Device implementers MUST
   1007 NOT include any Android components that honor any new intent or broadcast
   1008 intent patterns using an ACTION, CATEGORY, or other key string in a package
   1009 space belonging to another organization. Device implementers MUST NOT alter or
   1010 extend any of the intent patterns used by the core apps listed in <a href="#heading=h.qiy4ddbiirgy">section 3.2.3.1</a>. Device implementations MAY include intent patterns using namespaces clearly
   1011 and obviously associated with their own organization. This prohibition is
   1012 analogous to that specified for Java language classes in <a href="#heading=h.blmhfmxlmvir">section 3.6</a>.</p>
   1013 
   1014 <h4 id=3_2_3_4_broadcast_intents>3.2.3.4. Broadcast Intents</h4>
   1015 
   1016 
   1017 <p>Third-party applications rely on the platform to broadcast certain intents to
   1018 notify them of changes in the hardware or software environment.
   1019 Android-compatible devices MUST broadcast the public broadcast intents in
   1020 response to appropriate system events. Broadcast intents are described in the
   1021 SDK documentation.</p>
   1022 
   1023 <h4 id=3_2_3_5_default_app_settings>3.2.3.5. Default App Settings</h4>
   1024 
   1025 
   1026 <p>Android includes settings that provide users an easy way to select their
   1027 default applications, for example for Home screen or SMS. Where it makes sense,
   1028 device implementations MUST provide a similar settings menu and be compatible
   1029 with the intent filter pattern and API methods described in the SDK
   1030 documentation as below.</p>
   1031 
   1032 <p>Device implementations:</p>
   1033 
   1034 <ul>
   1035   <li> MUST honor the android.settings.HOME_SETTINGS intent to show a default app
   1036 settings menu for Home Screen, if the device implementation reports
   1037 android.software.home_screen [<a href="http://developer.android.com/reference/android/provider/Settings.html">Resources, 10]</a>
   1038   <li> MUST provide a settings menu that will call the
   1039 android.provider.Telephony.ACTION_CHANGE_DEFAULT intent to show a dialog to
   1040 change the default SMS application, if the device implementation reports
   1041 android.hardware.telephony [<a href="https://developer.android.com/reference/android/provider/Telephony.Sms.Intents.html">Resources, 9</a>] 
   1042   <li> MUST honor the android.settings.NFC_PAYMENT_SETTINGS intent to show a default
   1043 app settings menu for Tap and Pay, if the device implementation reports
   1044 android.hardware.nfc.hce [<a href="http://developer.android.com/reference/android/provider/Settings.html">Resources, 10]</a>
   1045 </ul>
   1046 
   1047 <h2 id=3_3_native_api_compatibility>3.3. Native API Compatibility</h2>
   1048 
   1049 
   1050 <h3 id=3_3_1_application_binary_interfaces>3.3.1 Application Binary Interfaces</h3>
   1051 
   1052 
   1053 <p>Managed Dalvik bytecode can call into native code provided in the application
   1054 .apk file as an ELF .so file compiled for the appropriate device hardware
   1055 architecture. As native code is highly dependent on the underlying processor
   1056 technology, Android defines a number of Application Binary Interfaces (ABIs) in
   1057 the Android NDK. Device implementations MUST be compatible with one or more
   1058 defined ABIs, and MUST implement compatibility with the Android NDK, as below.</p>
   1059 
   1060 <p>If a device implementation includes support for an Android ABI, it:</p>
   1061 
   1062 <ul>
   1063   <li> MUST include support for code running in the managed environment to call into
   1064 native code, using the standard Java Native Interface (JNI) semantics
   1065   <li> MUST be source-compatible (i.e. header compatible) and binary-compatible (for
   1066 the ABI) with each required library in the list below
   1067   <li> MUST support the equivalent 32-bit ABI if any 64-bit ABI is supported
   1068   <li> MUST accurately report the native Application Binary Interface (ABI) supported
   1069 by the device, via the android.os.Build.SUPPORTED_ABIS,
   1070 android.os.Build.SUPPORTED_32_BIT_ABIS, and
   1071 android.os.Build.SUPPORTED_64_BIT_ABIS parameters, each a comma separated list
   1072 of ABIs ordered from the most to the least preferred one
   1073   <li> MUST report, via the above parameters, only those ABIs documented in the latest
   1074 version of the Android NDK, NDK Programmer's Guide | ABI Management in docs/
   1075 directory
   1076   <li> SHOULD be built using the source code and header files available in the
   1077 upstream Android Open Source Project
   1078 </ul>
   1079 
   1080 <p>The following native code APIs MUST be available to apps that include native
   1081 code:</p>
   1082 
   1083 <ul>
   1084   <li> libc (C library)
   1085   <li> libm (math library)
   1086   <li> Minimal support for C++
   1087   <li> JNI interface
   1088   <li> liblog (Android logging)
   1089   <li> libz (Zlib compression)
   1090   <li> libdl (dynamic linker)
   1091   <li> libGLESv1_CM.so (OpenGL ES 1.x)
   1092   <li> libGLESv2.so (OpenGL ES 2.0)
   1093   <li> libGLESv3.so (OpenGL ES 3.x)
   1094   <li> libEGL.so (native OpenGL surface management)
   1095   <li> libjnigraphics.so
   1096   <li> libOpenSLES.so (OpenSL ES 1.0.1 audio support)
   1097   <li> libOpenMAXAL.so (OpenMAX AL 1.0.1 support)
   1098   <li> libandroid.so (native Android activity support)
   1099   <li> libmediandk.so (native media APIs support)
   1100   <li> Support for OpenGL, as described below
   1101 </ul>
   1102 
   1103 <p>Note that future releases of the Android NDK may introduce support for
   1104 additional ABIs. If a device implementation is not compatible with an existing
   1105 predefined ABI, it MUST NOT report support for any ABIs at all.</p>
   1106 
   1107 <p>Note that device implementations MUST include libGLESv3.so and it MUST symlink
   1108 (symbolic link) to libGLESv2.so. in turn, MUST export all the OpenGL ES 3.1 and
   1109 Android Extension Pack [<a href="http://developer.android.com/guide/topics/graphics/opengl.html#aep">Resources, 11</a>] function symbols as defined in the NDK release android-21. Although all the
   1110 symbols must be present, only the corresponding functions for OpenGL ES
   1111 versions and extensions actually supported by the device must be fully
   1112 implemented.</p>
   1113 
   1114 <p>Native code compatibility is challenging. For this reason, device implementers
   1115 are <strong>very strongly encouraged</strong> to use the implementations of the libraries listed above from the upstream
   1116 Android Open Source Project. </p>
   1117 
   1118 <h2 id=3_4_web_compatibility>3.4. Web Compatibility</h2>
   1119 
   1120 
   1121 <h3 id=3_4_1_webview_compatibility>3.4.1. WebView Compatibility</h3>
   1122 
   1123 <table>
   1124  <tr>
   1125     <td class="tab2"></td>
   1126     <td>
   1127 <p>The complete implementation of the android.webkit.Webview API MAY be provided
   1128 on Android Watch devices but MUST be provided on all other types of device
   1129 implementations.</p>
   1130 </td>
   1131  </tr>
   1132 </table>
   1133 
   1134 
   1135 <p>The platform feature android.software.webview MUST be reported on any device
   1136 that provides a complete implementation of the android.webkit.WebView API, and
   1137 MUST NOT be reported on devices without a complete implementation of the API.
   1138 The Android Open Source implementation uses code from the Chromium Project to
   1139 implement the android.webkit.WebView [<a href="http://developer.android.com/reference/android/webkit/WebView.html">Resources, 12</a>]. Because it is not feasible to develop a comprehensive test suite for a web
   1140 rendering system, device implementers MUST use the specific upstream build of
   1141 Chromium in the WebView implementation. Specifically:</p>
   1142 
   1143 <ul>
   1144   <li> Device android.webkit.WebView implementations MUST be based on the Chromium
   1145 build from the upstream Android Open Source Project for Android 5.0. This build
   1146 includes a specific set of functionality and security fixes for the WebView [<a href="http://www.chromium.org/">Resources, 13</a>].
   1147   <li> The user agent string reported by the WebView MUST be in this format: 
   1148 </ul>
   1149 
   1150 <p>Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD))
   1151 AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile
   1152 Safari/537.36</p>
   1153   <ul>
   1154     <li> The value of the $(VERSION) string MUST be the same as the value for
   1155 android.os.Build.VERSION.RELEASE.
   1156     <li> The value of the $(MODEL) string MUST be the same as the value for
   1157 android.os.Build.MODEL.
   1158     <li> The value of the $(BUILD) string MUST be the same as the value for
   1159 android.os.Build.ID.
   1160     <li> The value of the $(CHROMIUM_VER) string MUST be the version of Chromium in the
   1161 upstream Android Open Source Project.
   1162     <li> Device implementations MAY omit Mobile in the user agent string.
   1163   </ul>
   1164 
   1165 <p>The WebView component SHOULD include support for as many HTML5 features as
   1166 possible and if it supports the feature SHOULD conform to the HTML5
   1167 specification [<a href="https://www.google.com/url?q=https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2F&sa=D&sntz=1&usg=AFQjCNH7pPjEWho8n19H_n0ZXrQbI9RVlg">Resources, 14</a>].</p>
   1168 
   1169 <h3 id=3_4_2_browser_compatibility>3.4.2. Browser Compatibility</h3>
   1170 
   1171 <table>
   1172  <tr>
   1173     <td class="tab2"></td>
   1174     <td>
   1175 <p>Android Television and Watch Devices MAY omit a browser application, but MUST
   1176 support the public intent patterns as described in <a href="#heading=h.qiy4ddbiirgy">section 3.2.3.1</a>. All other types of device implementations MUST include a standalone Browser
   1177 application for general user web browsing. </p>
   1178 </td>
   1179  </tr>
   1180 </table>
   1181 
   1182 
   1183 <p>The standalone Browser MAY be based on a browser technology other than WebKit.
   1184 However, even if an alternate Browser application is used, the
   1185 android.webkit.WebView component provided to third-party applications MUST be
   1186 based on WebKit, as described in <a href="#heading=h.swqsalizdkk8">section 3.4.1</a>.</p>
   1187 
   1188 <p>Implementations MAY ship a custom user agent string in the standalone Browser
   1189 application.</p>
   1190 
   1191 <p>The standalone Browser application (whether based on the upstream WebKit
   1192 Browser application or a third-party replacement) SHOULD include support for as
   1193 much of HTML5 [<a href="https://www.google.com/url?q=https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2F&sa=D&sntz=1&usg=AFQjCNH7pPjEWho8n19H_n0ZXrQbI9RVlg">Resources, 14</a>] as possible. Minimally, device implementations MUST support each of these
   1194 APIs associated with HTML5:</p>
   1195 
   1196 <ul>
   1197   <li> application cache/offline operation [<a href="http://www.w3.org/html/wg/drafts/html/master/browsers.html#offline">Resources, 15</a>]
   1198   <li> the <video> tag [<a href="http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#video">Resources, 16</a>]
   1199   <li> geolocation [<a href="http://www.w3.org/TR/geolocation-API/">Resources, 17</a>]
   1200 </ul>
   1201 
   1202 <p>Additionally, device implementations MUST support the HTML5/W3C webstorage API
   1203 [<a href="http://www.w3.org/TR/webstorage/">Resources, 18</a>], and SHOULD support the HTML5/W3C IndexedDB API [<a href="http://www.w3.org/TR/IndexedDB/">Resources, 19</a>]. Note that as the web development standards bodies are transitioning to favor
   1204 IndexedDB over webstorage, IndexedDB is expected to become a required component
   1205 in a future version of Android.</p>
   1206 
   1207 <h2 id=3_5_api_behavioral_compatibility>3.5. API Behavioral Compatibility</h2>
   1208 
   1209 
   1210 <p>The behaviors of each of the API types (managed, soft, native, and web) must be
   1211 consistent with the preferred implementation of the upstream Android Open
   1212 Source Project [<a href="http://source.android.com/">Resources, 2</a>]. Some specific areas of compatibility are:</p>
   1213 
   1214 <ul>
   1215   <li> Devices MUST NOT change the behavior or semantics of a standard intent.
   1216   <li> Devices MUST NOT alter the lifecycle or lifecycle semantics of a particular
   1217 type of system component (such as Service, Activity, ContentProvider, etc.).
   1218   <li> Devices MUST NOT change the semantics of a standard permission.
   1219 </ul>
   1220 
   1221 <p>The above list is not comprehensive. The Compatibility Test Suite (CTS) tests
   1222 significant portions of the platform for behavioral compatibility, but not all.
   1223 It is the responsibility of the implementer to ensure behavioral compatibility
   1224 with the Android Open Source Project. For this reason, device implementers
   1225 SHOULD use the source code available via the Android Open Source Project where
   1226 possible, rather than re-implement significant parts of the system.</p>
   1227 
   1228 <h2 id=3_6_api_namespaces>3.6. API Namespaces</h2>
   1229 
   1230 
   1231 <p>Android follows the package and class namespace conventions defined by the Java
   1232 programming language. To ensure compatibility with third-party applications,
   1233 device implementers MUST NOT make any prohibited modifications (see below) to
   1234 these package namespaces:</p>
   1235 
   1236 <ul>
   1237   <li> java.*
   1238   <li> javax.*
   1239   <li> sun.*
   1240   <li> android.*
   1241   <li> com.android.*
   1242 </ul>
   1243 
   1244 <p><strong>Prohibited modifications include</strong>:</p>
   1245 
   1246 <ul>
   1247   <li> Device implementations MUST NOT modify the publicly exposed APIs on the Android
   1248 platform by changing any method or class signatures, or by removing classes or
   1249 class fields.
   1250   <li> Device implementers MAY modify the underlying implementation of the APIs, but
   1251 such modifications MUST NOT impact the stated behavior and Java-language
   1252 signature of any publicly exposed APIs.
   1253   <li> Device implementers MUST NOT add any publicly exposed elements (such as classes
   1254 or interfaces, or fields or methods to existing classes or interfaces) to the
   1255 APIs above.
   1256 </ul>
   1257 
   1258 <p>A "publicly exposed element is any construct which is not decorated with the
   1259 "@hide" marker as used in the upstream Android source code. In other words,
   1260 device implementers MUST NOT expose new APIs or alter existing APIs in the
   1261 namespaces noted above. Device implementers MAY make internal-only
   1262 modifications, but those modifications MUST NOT be advertised or otherwise
   1263 exposed to developers.</p>
   1264 
   1265 <p>Device implementers MAY add custom APIs, but any such APIs MUST NOT be in a
   1266 namespace owned by or referring to another organization. For instance, device
   1267 implementers MUST NOT add APIs to the com.google.* or similar namespace: only
   1268 Google may do so. Similarly, Google MUST NOT add APIs to other companies'
   1269 namespaces. Additionally, if a device implementation includes custom APIs
   1270 outside the standard Android namespace, those APIs MUST be packaged in an
   1271 Android shared library so that only apps that explicitly use them (via the
   1272 <uses-library> mechanism) are affected by the increased memory usage of such
   1273 APIs.</p>
   1274 
   1275 <p>If a device implementer proposes to improve one of the package namespaces above
   1276 (such as by adding useful new functionality to an existing API, or adding a new
   1277 API), the implementer SHOULD visit <a href="https://source.android.com/">source.android.com</a> and begin the process for contributing changes and code, according to the
   1278 information on that site.</p>
   1279 
   1280 <p>Note that the restrictions above correspond to standard conventions for naming
   1281 APIs in the Java programming language; this section simply aims to reinforce
   1282 those conventions and make them binding through inclusion in this Compatibility
   1283 Definition.</p>
   1284 
   1285 <h2 id=3_7_runtime_compatibility>3.7. Runtime Compatibility</h2>
   1286 
   1287 
   1288 <p>Device implementations MUST support the full Dalvik Executable (DEX) format and
   1289 Dalvik bytecode specification and semantics [<a href="https://android.googlesource.com/platform/dalvik/+/lollipop-release/docs/">Resources, 20</a>]. Device implementers SHOULD use ART, the reference upstream implementation of
   1290 the Dalvik Executable Format, and the reference implementation's package
   1291 management system.</p>
   1292 
   1293 <p>Device implementations MUST configure Dalvik runtimes to allocate memory in
   1294 accordance with the upstream Android platform, and as specified by the
   1295 following table. (See <a href="#heading=h.6fey5v3qb5m3">section 7.1.1</a> for screen size and screen density definitions.)</p>
   1296 
   1297 <p>Note that memory values specified below are considered minimum values and
   1298 device implementations MAY allocate more memory per application.</p>
   1299 <table>
   1300  <tr>
   1301     <td class="tab0">
   1302 <p><strong>Screen Layout</strong></p>
   1303 </td>
   1304     <td class="tab0">
   1305 <p><strong>Screen Density</strong></p>
   1306 </td>
   1307     <td class="tab0">
   1308 <p><strong>Minimum Application Memory</strong></p>
   1309 </td>
   1310  </tr>
   1311  <tr>
   1312     <td>
   1313 <p>small / normal</p>
   1314 </td>
   1315     <td>
   1316 <p>120 dpi (ldpi) </p>
   1317 </td>
   1318     <td>
   1319 <p>16MB</p>
   1320 </td>
   1321  </tr>
   1322  <tr>
   1323     <td></td>
   1324     <td>
   1325 <p>160 dpi (mdpi)</p>
   1326 </td>
   1327     <td></td>
   1328  </tr>
   1329  <tr>
   1330     <td></td>
   1331     <td>
   1332 <p>213 dpi (tvdpi)</p>
   1333 </td>
   1334     <td>
   1335 <p>32MB</p>
   1336 </td>
   1337  </tr>
   1338  <tr>
   1339     <td></td>
   1340     <td>
   1341 <p>240 dpi (hdpi)</p>
   1342 </td>
   1343     <td></td>
   1344  </tr>
   1345  <tr>
   1346     <td></td>
   1347     <td>
   1348 <p>320 dpi (xhdpi)</p>
   1349 </td>
   1350     <td>
   1351 <p>64MB</p>
   1352 </td>
   1353  </tr>
   1354  <tr>
   1355     <td></td>
   1356     <td>
   1357 <p>400 dpi (400dpi)</p>
   1358 </td>
   1359     <td>
   1360 <p>96MB</p>
   1361 </td>
   1362  </tr>
   1363  <tr>
   1364     <td></td>
   1365     <td>
   1366 <p>480 dpi (xxhdpi)</p>
   1367 </td>
   1368     <td>
   1369 <p>128MB</p>
   1370 </td>
   1371  </tr>
   1372  <tr>
   1373     <td></td>
   1374     <td>
   1375 <p>560 dpi (560dpi)</p>
   1376 </td>
   1377     <td>
   1378 <p>192MB</p>
   1379 </td>
   1380  </tr>
   1381  <tr>
   1382     <td></td>
   1383     <td>
   1384 <p>640 dpi (xxxhdpi)</p>
   1385 </td>
   1386     <td>
   1387 <p>256MB</p>
   1388 </td>
   1389  </tr>
   1390  <tr>
   1391     <td>
   1392 <p>large</p>
   1393 </td>
   1394     <td>
   1395 <p>120 dpi (ldpi) </p>
   1396 </td>
   1397     <td>
   1398 <p>16MB</p>
   1399 </td>
   1400  </tr>
   1401  <tr>
   1402     <td></td>
   1403     <td>
   1404 <p>160 dpi (mdpi)</p>
   1405 </td>
   1406     <td>
   1407 <p>32MB</p>
   1408 </td>
   1409  </tr>
   1410  <tr>
   1411     <td></td>
   1412     <td>
   1413 <p>213 dpi (tvdpi)</p>
   1414 </td>
   1415     <td>
   1416 <p>64MB</p>
   1417 </td>
   1418  </tr>
   1419  <tr>
   1420     <td></td>
   1421     <td>
   1422 <p>240 dpi (hdpi)</p>
   1423 </td>
   1424     <td></td>
   1425  </tr>
   1426  <tr>
   1427     <td></td>
   1428     <td>
   1429 <p>320 dpi (xhdpi)</p>
   1430 </td>
   1431     <td>
   1432 <p>128MB</p>
   1433 </td>
   1434  </tr>
   1435  <tr>
   1436     <td></td>
   1437     <td>
   1438 <p>400 dpi (400dpi)</p>
   1439 </td>
   1440     <td>
   1441 <p>192MB</p>
   1442 </td>
   1443  </tr>
   1444  <tr>
   1445     <td></td>
   1446     <td>
   1447 <p>480 dpi (xxhdpi)</p>
   1448 </td>
   1449     <td>
   1450 <p>256MB</p>
   1451 </td>
   1452  </tr>
   1453  <tr>
   1454     <td></td>
   1455     <td>
   1456 <p>560 dpi (560dpi)</p>
   1457 </td>
   1458     <td>
   1459 <p>384MB</p>
   1460 </td>
   1461  </tr>
   1462  <tr>
   1463     <td></td>
   1464     <td>
   1465 <p>640 dpi (xxxhdpi)</p>
   1466 </td>
   1467     <td>
   1468 <p>512MB</p>
   1469 </td>
   1470  </tr>
   1471  <tr>
   1472     <td>
   1473 <p>xlarge</p>
   1474 </td>
   1475     <td>
   1476 <p>160 dpi (mdpi)</p>
   1477 </td>
   1478     <td>
   1479 <p>64MB</p>
   1480 </td>
   1481  </tr>
   1482  <tr>
   1483     <td></td>
   1484     <td>
   1485 <p>213 dpi (tvdpi)</p>
   1486 </td>
   1487     <td>
   1488 <p>96MB</p>
   1489 </td>
   1490  </tr>
   1491  <tr>
   1492     <td></td>
   1493     <td>
   1494 <p>240 dpi (hdpi)</p>
   1495 </td>
   1496     <td></td>
   1497  </tr>
   1498  <tr>
   1499     <td></td>
   1500     <td>
   1501 <p>320 dpi (xhdpi)</p>
   1502 </td>
   1503     <td>
   1504 <p>192MB</p>
   1505 </td>
   1506  </tr>
   1507  <tr>
   1508     <td></td>
   1509     <td>
   1510 <p>400 dpi (400dpi)</p>
   1511 </td>
   1512     <td>
   1513 <p>288MB</p>
   1514 </td>
   1515  </tr>
   1516  <tr>
   1517     <td></td>
   1518     <td>
   1519 <p>480 dpi (xxhdpi)</p>
   1520 </td>
   1521     <td>
   1522 <p>384MB</p>
   1523 </td>
   1524  </tr>
   1525  <tr>
   1526     <td></td>
   1527     <td>
   1528 <p>560 dpi (560dpi)</p>
   1529 </td>
   1530     <td>
   1531 <p>576MB</p>
   1532 </td>
   1533  </tr>
   1534  <tr>
   1535     <td></td>
   1536     <td>
   1537 <p>640 dpi (xxxhdpi)</p>
   1538 </td>
   1539     <td>
   1540 <p>768MB</p>
   1541 </td>
   1542  </tr>
   1543 </table>
   1544 
   1545 
   1546 <h2 id=3_8_user_interface_compatibility>3.8. User Interface Compatibility</h2>
   1547 
   1548 
   1549 <h3 id=3_8_1_launcher_home_screen>3.8.1. Launcher (Home Screen)</h3>
   1550 
   1551 
   1552 <p>Android includes a launcher application (home screen) and support for
   1553 third-party applications to replace the device launcher (home screen). Device
   1554 implementations that allow third-party applications to replace the device home
   1555 screen MUST declare the platform feature android.software.home_screen.</p>
   1556 
   1557 <h3 id=3_8_2_widgets>3.8.2. Widgets</h3>
   1558 
   1559 <table>
   1560  <tr>
   1561     <td class="tab2"></td>
   1562     <td>
   1563 <p>Widgets are optional for all Android device implementations, but SHOULD be
   1564 supported on Android Handheld devices.</p>
   1565 </td>
   1566  </tr>
   1567 </table>
   1568 
   1569 
   1570 <p>Android defines a component type and corresponding API and lifecycle that
   1571 allows applications to expose an "AppWidget" to the end user [<a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">Resources, 21</a>] a feature that is strongly RECOMMENDED to be supported on Handheld Device
   1572 implementations. Device implementations that support embedding widgets on the
   1573 home screen MUST meet the following requirements and declare support for
   1574 platform feature android.software.app_widgets.</p>
   1575 
   1576 <ul>
   1577   <li> Device launchers MUST include built-in support for AppWidgets, and expose user
   1578 interface affordances to add, configure, view, and remove AppWidgets directly
   1579 within the Launcher.
   1580   <li> Device implementations MUST be capable of rendering widgets that are 4 x 4 in
   1581 the standard grid size. See the App Widget Design Guidelines in the Android SDK
   1582 documentation [<a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">Resources, 21</a>] for details.
   1583   <li> Device implementations that include support for lock screen MAY support
   1584 application widgets on the lock screen.
   1585 </ul>
   1586 
   1587 <h3 id=3_8_3_notifications>3.8.3. Notifications</h3>
   1588 
   1589 
   1590 <p>Android includes APIs that allow developers to notify users of notable events [<a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html">Resources, 22</a>], using hardware and software features of the device.</p>
   1591 
   1592 <p>Some APIs allow applications to perform notifications or attract attention
   1593 using hardwarespecifically sound, vibration, and light. Device implementations
   1594 MUST support notifications that use hardware features, as described in the SDK
   1595 documentation, and to the extent possible with the device implementation
   1596 hardware. For instance, if a device implementation includes a vibrator, it MUST
   1597 correctly implement the vibration APIs. If a device implementation lacks
   1598 hardware, the corresponding APIs MUST be implemented as no-ops. This behavior
   1599 is further detailed in <a href="#heading=h.5h5uvpadidzr">section 7</a>.</p>
   1600 
   1601 <p>Additionally, the implementation MUST correctly render all resources (icons,
   1602 sound files, etc.) provided for in the APIs [<a href="https://developer.android.com/guide/topics/resources/available-resources.html">Resources, 23</a>], or in the Status/System Bar icon style guide [<a href="http://developer.android.com/design/style/iconography.html">Resources, 24</a>]. Device implementers MAY provide an alternative user experience for
   1603 notifications than that provided by the reference Android Open Source
   1604 implementation; however, such alternative notification systems MUST support
   1605 existing notification resources, as above. </p>
   1606 
   1607 <p>Android includes support for various notifications, such as:</p>
   1608 
   1609 <ul>
   1610   <li> <strong>Rich notifications</strong>Interactive Views for ongoing notifications. 
   1611   <li> <strong>Heads-up notifications</strong>Interactive Views users can act on or dismiss without leaving the current app.
   1612   <li> <strong>Lockscreen notifications</strong>Notifications shown over a lock screen with granular control on visibility.
   1613 </ul>
   1614 
   1615 <p>Device implementations MUST properly display and execute these notifications,
   1616 including the title/name, icon, text as documented in the Android APIs <a href="https://developer.android.com/design/patterns/notifications.html">[Resources, 25]</a>.</p>
   1617 
   1618 <p>Android includes Notification Listener Service APIs that allow apps (once
   1619 explicitly enabled by the user) to receive a copy of all notifications as they
   1620 are posted or updated. Device implementations MUST correctly and promptly send
   1621 notifications in their entirety to all such installed and user-enabled listener
   1622 services, including any and all metadata attached to the Notification object.</p>
   1623 
   1624 <h3 id=3_8_4_search>3.8.4. Search</h3>
   1625 
   1626 
   1627 <p>Android includes APIs [<a href="http://developer.android.com/reference/android/app/SearchManager.html">Resources, 26</a>] that allow developers to incorporate search into their applications, and
   1628 expose their application's data into the global system search. Generally
   1629 speaking, this functionality consists of a single, system-wide user interface
   1630 that allows users to enter queries, displays suggestions as users type, and
   1631 displays results. The Android APIs allow developers to reuse this interface to
   1632 provide search within their own apps, and allow developers to supply results to
   1633 the common global search user interface.</p>
   1634 
   1635 <p>Android device implementations SHOULD include global search, a single, shared,
   1636 system-wide search user interface capable of real-time suggestions in response
   1637 to user input. Device implementations SHOULD implement the APIs that allow
   1638 developers to reuse this user interface to provide search within their own
   1639 applications. Device implementations that implement the global search interface
   1640 MUST implement the APIs that allow third-party applications to add suggestions
   1641 to the search box when it is run in global search mode. If no third-party
   1642 applications are installed that make use of this functionality, the default
   1643 behavior SHOULD be to display web search engine results and suggestions.</p>
   1644 
   1645 <h3 id=3_8_5_toasts>3.8.5. Toasts</h3>
   1646 
   1647 
   1648 <p>Applications can use the "Toast" API to display short non-modal strings to the
   1649 end user, that disappear after a brief period of time [<a href="http://developer.android.com/reference/android/widget/Toast.html">Resources, 27</a>]. Device implementations MUST display Toasts from applications to end users in
   1650 some high-visibility manner.</p>
   1651 
   1652 <h3 id=3_8_6_themes>3.8.6. Themes</h3>
   1653 
   1654 
   1655 <p>Android provides "themes" as a mechanism for applications to apply styles
   1656 across an entire Activity or application.</p>
   1657 
   1658 <p>Android includes a "Holo" theme family as a set of defined styles for
   1659 application developers to use if they want to match the Holo theme look and
   1660 feel as defined by the Android SDK [<a href="http://developer.android.com/guide/topics/ui/themes.html">Resources, 28</a>]. Device implementations MUST NOT alter any of the Holo theme attributes
   1661 exposed to applications [<a href="http://developer.android.com/reference/android/R.style.html">Resources, 29</a>].</p>
   1662 
   1663 <p>Android 5.0 includes a Material theme family as a set of defined styles for
   1664 application developers to use if they want to match the design themes look and
   1665 feel across the wide variety of different Android device types. Device
   1666 implementations MUST support the Material theme family and MUST NOT alter any
   1667 of the Material theme attributes or their assets exposed to applications [<a href="http://developer.android.com/reference/android/R.style.html#Theme_Material">Resources, 30</a>].</p>
   1668 
   1669 <p>Android also includes a "Device Default" theme family as a set of defined
   1670 styles for application developers to use if they want to match the look and
   1671 feel of the device theme as defined by the device implementer. Device
   1672 implementations MAY modify the Device Default theme attributes exposed to
   1673 applications [<a href="http://developer.android.com/reference/android/R.style.html">Resources, 29</a>].</p>
   1674 
   1675 <p>Android supports a new variant theme with translucent system bars, which allows
   1676 application developers to fill the area behind the status and navigation bar
   1677 with their app content. To enable a consistent developer experience in this
   1678 configuration, it is important the status bar icon style is maintained across
   1679 different device implementations. Therefore, Android device implementations
   1680 MUST use white for system status icons (such as signal strength and battery
   1681 level) and notifications issued by the system, unless the icon is indicating a
   1682 problematic status [<a href="http://developer.android.com/reference/android/R.style.html">Resources, 29</a>].</p>
   1683 
   1684 <h3 id=3_8_7_live_wallpapers>3.8.7. Live Wallpapers</h3>
   1685 
   1686 
   1687 <p>Android defines a component type and corresponding API and lifecycle that
   1688 allows applications to expose one or more "Live Wallpapers" to the end user [<a href="http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html">Resources, 31</a>]. Live wallpapers are animations, patterns, or similar images with limited
   1689 input capabilities that display as a wallpaper, behind other applications.</p>
   1690 
   1691 <p>Hardware is considered capable of reliably running live wallpapers if it can
   1692 run all live wallpapers, with no limitations on functionality, at a reasonable
   1693 frame rate with no adverse effects on other applications. If limitations in the
   1694 hardware cause wallpapers and/or applications to crash, malfunction, consume
   1695 excessive CPU or battery power, or run at unacceptably low frame rates, the
   1696 hardware is considered incapable of running live wallpaper. As an example, some
   1697 live wallpapers may use an OpenGL 2.0 or 3.x context to render their content.
   1698 Live wallpaper will not run reliably on hardware that does not support multiple
   1699 OpenGL contexts because the live wallpaper use of an OpenGL context may
   1700 conflict with other applications that also use an OpenGL context.</p>
   1701 
   1702 <p>Device implementations capable of running live wallpapers reliably as described
   1703 above SHOULD implement live wallpapers, and when implemented MUST report the
   1704 platform feature flag android.software.live_wallpaper.</p>
   1705 
   1706 <h3 id=3_8_8_activity_switching>3.8.8. Activity Switching</h3>
   1707 
   1708 <table>
   1709  <tr>
   1710     <td class="tab2"></td>
   1711     <td>
   1712 <p>As the Recent function navigation key is OPTIONAL, the requirements to
   1713 implement the overview screen is OPTIONAL for Android Television devices and
   1714 Android Watch devices.</p>
   1715 </td>
   1716  </tr>
   1717 </table>
   1718 
   1719 
   1720 <p>The upstream Android source code includes the overview screen [<a href="http://developer.android.com/guide/components/recents.html">Resources, 32</a>], a system-level user interface for task switching and displaying recently
   1721 accessed activities and tasks using a thumbnail image of the application's
   1722 graphical state at the moment the user last left the application. Device
   1723 implementations including the recents function navigation key as detailed in <a href="#heading=h.dzfhwcjzm5z6">section 7.2.3</a>, MAY alter the interface but MUST meet the following requirements:</p>
   1724 
   1725 <ul>
   1726   <li> MUST display affiliated recents as a group that moves together
   1727   <li> MUST support at least up to 20 displayed activities
   1728   <li> MUST at least display the title of 4 activities at a time
   1729   <li> SHOULD display highlight color, icon, screen title in recents
   1730   <li> MUST implement the screen pinning behavior [<a href="https://developer.android.com/about/versions/android-5.0.html#ScreenPinning">Resources, 33</a>] and provide the user with a settings menu to toggle the feature
   1731   <li> SHOULD display a closing affordance ("x") but MAY delay this until user
   1732 interacts with screens 
   1733 </ul>
   1734 
   1735 <p>Device implementations are STRONGLY ENCOURAGED to use the upstream Android user
   1736 interface (or a similar thumbnail-based interface) for the overview screen.</p>
   1737 
   1738 <h3 id=3_8_9_input_management>3.8.9. Input Management</h3>
   1739 
   1740 
   1741 <p>Android includes support for Input Management and support for third-party input
   1742 method editors [<a href="http://developer.android.com/guide/topics/text/creating-input-method.html">Resources, 34</a>]. Device implementations that allow users to use third-party input methods on
   1743 the device MUST declare the platform feature android.software.input_methods and
   1744 support IME APIs as defined in the Android SDK documentation.</p>
   1745 
   1746 <p>Device implementations that declare the android.software.input_methods feature
   1747 MUST provide a user-accessible mechanism to add and configure third-party input
   1748 methods. Device implementations MUST display the settings interface in response
   1749 to the android.settings.INPUT_METHOD_SETTINGS intent.</p>
   1750 
   1751 <h3 id=3_8_10_lock_screen_media_control>3.8.10. Lock Screen Media Control</h3>
   1752 
   1753 
   1754 <p>The Remote Control Client API is deprecated from Android 5.0 in favor of the
   1755 Media Notification Template that allows media applications to integrate with
   1756 playback controls that are displayed on the lock screen [<a href="https://developer.android.com/reference/android/app/Notification.MediaStyle.html">Resources, 35</a>]. Device implementations that support a lock screen in the device MUST support
   1757 the Media Notification Template along with other notifications.</p>
   1758 
   1759 <h3 id=3_8_11_dreams>3.8.11. Dreams</h3>
   1760 
   1761 
   1762 <p>Android includes support for interactive screensavers called Dreams [<a href="http://developer.android.com/reference/android/service/dreams/DreamService.html">Resources, 36</a>]. Dreams allows users to interact with applications when a device connected to
   1763 a power source is idle or docked in a desk dock. Android Watch devices MAY
   1764 implement Dreams, but other types of device implementations SHOULD include
   1765 support for Dreams and provide a settings option for users to configure Dreams
   1766 in response to the android.settings.DREAM_SETTINGS intent.</p>
   1767 
   1768 <h3 id=3_8_12_location>3.8.12. Location</h3>
   1769 
   1770 
   1771 <p>When a device has a hardware sensor (e.g. GPS) that is capable of providing the
   1772 location coordinates, location modes MUST be displayed in the Location menu
   1773 within Settings [<a href="http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE">Resources, 37</a>]. </p>
   1774 
   1775 <h3 id=3_8_13_unicode_and_font>3.8.13. Unicode and Font</h3>
   1776 
   1777 
   1778 <p>Android includes support for color emoji characters. When Android device
   1779 implementations include an IME, devices MUST provide an input method to the
   1780 user for the Emoji characters defined in Unicode 6.1 [<a href="http://www.unicode.org/versions/Unicode6.1.0/">Resources, 38</a>]. All devices MUST be capable of rendering these emoji characters in color
   1781 glyph.</p>
   1782 
   1783 <p>Android 5.0 includes support for Roboto 2 font with different
   1784 weightssans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black,
   1785 sans-serif-condensed, sans-serif-condensed-lightwhich MUST all be included for
   1786 the languages available on the device and full Unicode 7.0 coverage of Latin,
   1787 Greek, and Cyrillic, including the Latin Extended A, B, C, and D ranges, and
   1788 all glyphs in the currency symbols block of Unicode 7.0.</p>
   1789 
   1790 <h2 id=3_9_device_administration>3.9. Device Administration</h2>
   1791 
   1792 
   1793 <p>Android includes features that allow security-aware applications to perform
   1794 device administration functions at the system level, such as enforcing password
   1795 policies or performing remote wipe, through the Android Device Administration
   1796 API [<a href="http://developer.android.com/guide/topics/admin/device-admin.html">Resources, 39</a>]. Device implementations MUST provide an implementation of the
   1797 DevicePolicyManager class [<a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html">Resources, 40</a>]. Device implementations that include support for lock screen MUST support the
   1798 full range of device administration policies defined in the Android SDK
   1799 documentation [<a href="http://developer.android.com/guide/topics/admin/device-admin.html">Resources, 39</a>] and report the platform feature android.software.device_admin.</p>
   1800 
   1801 <p>Device implementations MAY have a preinstalled application performing device
   1802 administration functions but this application MUST NOT be set out-of-the box as
   1803 the default Device Owner app [<a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#isDeviceOwnerApp(java.lang.String)">Resources, 41</a>].</p>
   1804 
   1805 <h2 id=3_10_accessibility>3.10. Accessibility</h2>
   1806 
   1807 
   1808 <p>Android provides an accessibility layer that helps users with disabilities to
   1809 navigate their devices more easily. In addition, Android provides platform APIs
   1810 that enable accessibility service implementations to receive callbacks for user
   1811 and system events and generate alternate feedback mechanisms, such as
   1812 text-to-speech, haptic feedback, and trackball/d-pad navigation [<a href="http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html">Resources, 42</a>]. Device implementations MUST provide an implementation of the Android
   1813 accessibility framework consistent with the default Android implementation.
   1814 Device implementations MUST meet the following requirements:</p>
   1815 
   1816 <ul>
   1817   <li> MUST support third-party accessibility service implementations through the
   1818 android.accessibilityservice APIs [<a href="http://developer.android.com/reference/android/view/accessibility/package-summary.html">Resources, 43</a>]
   1819   <li> MUST generate AccessibilityEvents and deliver these events to all registered
   1820 AccessibilityService implementations in a manner consistent with the default
   1821 Android implementation
   1822   <li> Unless an Android Watch device with no audio output, device implementations
   1823 MUST provide a user-accessible mechanism to enable and disable accessibility
   1824 services, and MUST display this interface in response to the
   1825 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent.
   1826 </ul>
   1827 
   1828 <p>Additionally, device implementations SHOULD provide an implementation of an
   1829 accessibility service on the device, and SHOULD provide a mechanism for users
   1830 to enable the accessibility service during device setup. An open source
   1831 implementation of an accessibility service is available from the Eyes Free
   1832 project [<a href="https://code.google.com/p/eyes-free/">Resources, 44</a>].</p>
   1833 
   1834 <h2 id=3_11_text-to-speech>3.11. Text-to-Speech</h2>
   1835 
   1836 
   1837 <p>Android includes APIs that allow applications to make use of text-to-speech
   1838 (TTS) services and allows service providers to provide implementations of TTS
   1839 services [<a href="http://developer.android.com/reference/android/speech/tts/package-summary.html">Resources, 45</a>]. Device implementations reporting the feature android.hardware.audio.output
   1840 MUST meet these requirements related to the Android TTS framework. </p>
   1841 
   1842 <p>Device implementations:</p>
   1843 
   1844 <ul>
   1845   <li> MUST support the Android TTS framework APIs and SHOULD include a TTS engine
   1846 supporting the languages available on the device. Note that the upstream
   1847 Android open source software includes a full-featured TTS engine
   1848 implementation.
   1849   <li>  MUST support installation of third-party TTS engines
   1850   <li> MUST provide a user-accessible interface that allows users to select a TTS
   1851 engine for use at the system level
   1852 </ul>
   1853 
   1854 <h2 id=3_12_tv_input_framework>3.12. TV Input Framework</h2>
   1855 
   1856 
   1857 <p>The Android Television Input Framework (TIF) simplifies the delivery of live
   1858 content to Android Television devices. TIF provides a standard API to create
   1859 input modules that control Android Television devices. Android Television
   1860 device implementations MUST support Television Input Framework [<a href="https://source.android.com/devices/tv/index.html">Resources, 46</a>].</p>
   1861 
   1862 <p>Device implementations that support TIF MUST declare the platform feature
   1863 android.software.live_tv. </p>
   1864 
   1865 <h1 id=4_application_packaging_compatibility>4. Application Packaging Compatibility</h1>
   1866 
   1867 
   1868 <p>Device implementations MUST install and run Android ".apk" files as generated
   1869 by the "aapt" tool included in the official Android SDK [<a href="http://developer.android.com/guide/developing/tools/index.html">Resources, 47</a>].</p>
   1870 
   1871 <p>Devices implementations MUST NOT extend either the .apk [<a href="http://developer.android.com/guide/components/fundamentals.html">Resources, 48</a>], Android Manifest [<a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html">Resources, 49</a>], Dalvik bytecode [<a href="https://android.googlesource.com/platform/dalvik/+/lollipop-release/docs/">Resources, 20</a>], or RenderScript bytecode formats in such a way that would prevent those
   1872 files from installing and running correctly on other compatible devices</p>
   1873 
   1874 <h1 id=5_multimedia_compatibility>5. Multimedia Compatibility</h1>
   1875 
   1876 
   1877 <h2 id=5_1_media_codecs>5.1. Media Codecs</h2>
   1878 
   1879 
   1880 <p>Device implementations MUST support the core media formats specified in the
   1881 Android SDK documentation [<a href="http://developer.android.com/guide/appendix/media-formats.html">Resources, 50</a>] except where explicitly permitted in this document. Specifically, device
   1882 implementations MUST support the media formats, encoders, decoders, file types,
   1883 and container formats defined in the tables below. All of these codecs are
   1884 provided as software implementations in the preferred Android implementation
   1885 from the Android Open Source Project.</p>
   1886 
   1887 <p>Please note that neither Google nor the Open Handset Alliance make any
   1888 representation that these codecs are free from third-party patents. Those
   1889 intending to use this source code in hardware or software products are advised
   1890 that implementations of this code, including in open source software or
   1891 shareware, may require patent licenses from the relevant patent holders.</p>
   1892 
   1893 <h3 id=5_1_1_audio_codecs>5.1.1. Audio Codecs</h3>
   1894 
   1895 <table>
   1896  <tr>
   1897     <td class="tab0">
   1898 <p><strong>Format / Codec</strong></p>
   1899 </td>
   1900     <td class="tab0">
   1901 <p><strong>Encoder</strong></p>
   1902 </td>
   1903     <td class="tab0">
   1904 <p><strong>Decoder</strong></p>
   1905 </td>
   1906     <td class="tab0">
   1907 <p><strong>Details</strong></p>
   1908 </td>
   1909     <td class="tab0">
   1910 <p><strong>Supported File Type(s) / Container Formats</strong></p>
   1911 </td>
   1912  </tr>
   1913  <tr>
   1914     <td class="tab3">
   1915 <p>MPEG-4 AAC Profile</p>
   1916 
   1917 <p>(AAC LC)</p>
   1918 </td>
   1919     <td class="tab3">
   1920 <p>REQUIRED1</p>
   1921 </td>
   1922     <td class="tab3">
   1923 <p>REQUIRED</p>
   1924 </td>
   1925     <td class="tab3">
   1926 <p>Support for mono/stereo/5.0/5.12 content with standard sampling rates from 8 to
   1927 48 kHz.</p>
   1928 </td>
   1929     <td class="tab4">
   1930 <p> 3GPP (.3gp)</p>
   1931 
   1932 <p> MPEG-4 (.mp4, .m4a)</p>
   1933 
   1934 <p> ADTS raw AAC (.aac, decode in Android 3.1+, encode in Android 4.0+, ADIF not
   1935 supported)</p>
   1936 
   1937 <p> MPEG-TS (.ts, not seekable, Android 3.0+)</p>
   1938 </td>
   1939  </tr>
   1940  <tr>
   1941     <td class="tab3">
   1942 <p>MPEG-4 HE AAC Profile (AAC+)</p>
   1943 </td>
   1944     <td>
   1945 <p>REQUIRED1</p>
   1946 
   1947 <p>(Android 4.1+)</p>
   1948 </td>
   1949     <td class="tab3">
   1950 <p>REQUIRED</p>
   1951 </td>
   1952     <td class="tab3">
   1953 <p>Support for mono/stereo/5.0/5.12 content with standard sampling rates from 16
   1954 to 48 kHz.</p>
   1955 </td>
   1956     <td class="tab4"></td>
   1957  </tr>
   1958  <tr>
   1959     <td class="tab3">
   1960 <p>MPEG-4 HE AACv2</p>
   1961 
   1962 <p>Profile (enhanced AAC+)</p>
   1963 </td>
   1964     <td class="tab3">
   1965 <p> </p>
   1966 </td>
   1967     <td class="tab3">
   1968 <p>REQUIRED</p>
   1969 </td>
   1970     <td class="tab3">
   1971 <p>Support for mono/stereo/5.0/5.12 content with standard sampling rates from 16
   1972 to 48 kHz.</p>
   1973 </td>
   1974     <td class="tab4"></td>
   1975  </tr>
   1976  <tr>
   1977     <td class="tab3">
   1978 <p>AAC ELD (enhanced low delay AAC)</p>
   1979 </td>
   1980     <td>
   1981 <p>REQUIRED1 </p>
   1982 
   1983 <p>(Android 4.1+)</p>
   1984 </td>
   1985     <td>
   1986 <p>REQUIRED</p>
   1987 
   1988 <p>(Android 4.1+)</p>
   1989 </td>
   1990     <td class="tab3">
   1991 <p>Support for mono/stereo content with standard sampling rates from 16 to 48 kHz.</p>
   1992 </td>
   1993     <td class="tab4"></td>
   1994  </tr>
   1995  <tr>
   1996     <td class="tab3">
   1997 <p>AMR-NB</p>
   1998 </td>
   1999     <td class="tab3">
   2000 <p>REQUIRED3</p>
   2001 </td>
   2002     <td class="tab3">
   2003 <p>REQUIRED3</p>
   2004 </td>
   2005     <td class="tab3">
   2006 <p>4.75 to 12.2 kbps sampled @ 8kHz</p>
   2007 </td>
   2008     <td class="tab4">
   2009 <p>3GPP (.3gp)</p>
   2010 </td>
   2011  </tr>
   2012  <tr>
   2013     <td class="tab3">
   2014 <p>AMR-WB</p>
   2015 </td>
   2016     <td class="tab3">
   2017 <p>REQUIRED3 </p>
   2018 </td>
   2019     <td class="tab3">
   2020 <p>REQUIRED3</p>
   2021 </td>
   2022     <td class="tab3">
   2023 <p>9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz</p>
   2024 </td>
   2025     <td class="tab4"></td>
   2026  </tr>
   2027  <tr>
   2028     <td class="tab3">
   2029 <p>FLAC</p>
   2030 </td>
   2031     <td class="tab3">
   2032 <p> </p>
   2033 </td>
   2034     <td>
   2035 <p>REQUIRED</p>
   2036 
   2037 <p>(Android 3.1+)</p>
   2038 </td>
   2039     <td class="tab3">
   2040 <p>Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1 kHz is
   2041 recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler
   2042 does not include a low-pass filter). 16-bit recommended; no dither applied for
   2043 24-bit.</p>
   2044 </td>
   2045     <td class="tab3">
   2046 <p>FLAC (.flac) only</p>
   2047 </td>
   2048  </tr>
   2049  <tr>
   2050     <td class="tab3">
   2051 <p>MP3</p>
   2052 </td>
   2053     <td class="tab3">
   2054 <p> </p>
   2055 </td>
   2056     <td class="tab3">
   2057 <p>REQUIRED</p>
   2058 </td>
   2059     <td>
   2060 <p>Mono/Stereo 8-320Kbps constant (CBR) or variable bitrate (VBR)</p>
   2061 </td>
   2062     <td class="tab3">
   2063 <p>MP3 (.mp3)</p>
   2064 </td>
   2065  </tr>
   2066  <tr>
   2067     <td class="tab3">
   2068 <p>MIDI</p>
   2069 </td>
   2070     <td class="tab3">
   2071 <p> </p>
   2072 </td>
   2073     <td class="tab3">
   2074 <p>REQUIRED</p>
   2075 </td>
   2076     <td class="tab3">
   2077 <p>MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for
   2078 ringtone formats RTTTL/RTX, OTA, and iMelody</p>
   2079 </td>
   2080     <td class="tab3">
   2081 <p> Type 0 and 1 (.mid, .xmf, .mxmf)</p>
   2082 
   2083 <p> RTTTL/RTX (.rtttl, .rtx)</p>
   2084 
   2085 <p> OTA (.ota)</p>
   2086 
   2087 <p> iMelody (.imy)</p>
   2088 </td>
   2089  </tr>
   2090  <tr>
   2091     <td class="tab3">
   2092 <p>Vorbis</p>
   2093 </td>
   2094     <td class="tab3">
   2095 <p> </p>
   2096 </td>
   2097     <td class="tab3">
   2098 <p>REQUIRED</p>
   2099 </td>
   2100     <td class="tab3">
   2101 <p> </p>
   2102 </td>
   2103     <td class="tab3">
   2104 <p> Ogg (.ogg)</p>
   2105 
   2106 <p> Matroska (.mkv, Android 4.0+)</p>
   2107 </td>
   2108  </tr>
   2109  <tr>
   2110     <td class="tab3">
   2111 <p>PCM/WAVE</p>
   2112 </td>
   2113     <td>
   2114 <p>REQUIRED4</p>
   2115 
   2116 <p>(Android 4.1+)</p>
   2117 </td>
   2118     <td class="tab3">
   2119 <p>REQUIRED</p>
   2120 </td>
   2121     <td class="tab3">
   2122 <p>16-bit linear PCM (rates up to limit of hardware). Devices MUST support
   2123 sampling rates for raw PCM recording at 8000, 11025, 16000, and 44100 Hz
   2124 frequencies.</p>
   2125 </td>
   2126     <td class="tab3">
   2127 <p>WAVE (.wav)</p>
   2128 </td>
   2129  </tr>
   2130  <tr>
   2131     <td class="tab3">
   2132 <p>Opus</p>
   2133 </td>
   2134     <td class="tab3"></td>
   2135     <td class="tab3">
   2136 <p>REQUIRED</p>
   2137 
   2138 <p>(Android 5.0+)</p>
   2139 </td>
   2140     <td class="tab3"></td>
   2141     <td class="tab3">
   2142 <p>Matroska (.mkv)</p>
   2143 </td>
   2144  </tr>
   2145 </table>
   2146 
   2147 
   2148 <p>1 Required for device implementations that define android.hardware.microphone
   2149 but optional for Android Watch device implementations.</p>
   2150 
   2151 <p>2 Only downmix of 5.0/5.1 content is required; recording or rendering more than
   2152 2 channels is optional.</p>
   2153 
   2154 <p>3 Required for Android Handheld device implementations. </p>
   2155 
   2156 <p>4 Required for device implementations that define android.hardware.microphone,
   2157 including Android Watch device implementations.</p>
   2158 
   2159 <h3 id=5_1_2_image_codecs>5.1.2. Image Codecs</h3>
   2160 
   2161 <table>
   2162  <tr>
   2163     <td class="tab0">
   2164 <p><strong>Format / Codec</strong></p>
   2165 </td>
   2166     <td class="tab0">
   2167 <p><strong>Encoder</strong></p>
   2168 </td>
   2169     <td class="tab0">
   2170 <p><strong>Decoder</strong></p>
   2171 </td>
   2172     <td class="tab0">
   2173 <p><strong>Details</strong></p>
   2174 </td>
   2175     <td class="tab0">
   2176 <p><strong>Supported File Type(s) / Container Formats</strong></p>
   2177 </td>
   2178  </tr>
   2179  <tr>
   2180     <td class="tab3">
   2181 <p>JPEG</p>
   2182 </td>
   2183     <td class="tab3">
   2184 <p>REQUIRED</p>
   2185 </td>
   2186     <td class="tab3">
   2187 <p>REQUIRED</p>
   2188 </td>
   2189     <td class="tab3">
   2190 <p>Base+progressive</p>
   2191 </td>
   2192     <td class="tab3">
   2193 <p>JPEG (.jpg)</p>
   2194 </td>
   2195  </tr>
   2196  <tr>
   2197     <td class="tab3">
   2198 <p>GIF</p>
   2199 </td>
   2200     <td class="tab3">
   2201 <p> </p>
   2202 </td>
   2203     <td class="tab3">
   2204 <p>REQUIRED</p>
   2205 </td>
   2206     <td class="tab3">
   2207 <p> </p>
   2208 </td>
   2209     <td class="tab3">
   2210 <p>GIF (.gif)</p>
   2211 </td>
   2212  </tr>
   2213  <tr>
   2214     <td class="tab3">
   2215 <p>PNG</p>
   2216 </td>
   2217     <td class="tab3">
   2218 <p>REQUIRED</p>
   2219 </td>
   2220     <td class="tab3">
   2221 <p>REQUIRED</p>
   2222 </td>
   2223     <td class="tab3">
   2224 <p> </p>
   2225 </td>
   2226     <td class="tab3">
   2227 <p>PNG (.png)</p>
   2228 </td>
   2229  </tr>
   2230  <tr>
   2231     <td class="tab3">
   2232 <p>BMP</p>
   2233 </td>
   2234     <td class="tab3">
   2235 <p> </p>
   2236 </td>
   2237     <td class="tab3">
   2238 <p>REQUIRED</p>
   2239 </td>
   2240     <td class="tab3">
   2241 <p> </p>
   2242 </td>
   2243     <td class="tab3">
   2244 <p>BMP (.bmp)</p>
   2245 </td>
   2246  </tr>
   2247  <tr>
   2248     <td class="tab3">
   2249 <p>WebP</p>
   2250 </td>
   2251     <td class="tab3">
   2252 <p>REQUIRED</p>
   2253 </td>
   2254     <td class="tab3">
   2255 <p>REQUIRED</p>
   2256 </td>
   2257     <td class="tab3">
   2258 <p> </p>
   2259 </td>
   2260     <td class="tab3">
   2261 <p>WebP (.webp)</p>
   2262 </td>
   2263  </tr>
   2264 </table>
   2265 
   2266 
   2267 <h3 id=5_1_3_video_codecs>5.1.3. Video Codecs</h3>
   2268 
   2269 <table>
   2270  <tr>
   2271     <td class="tab2"></td>
   2272     <td>
   2273 <p>Video codecs are optional for Android Watch device implementations.</p>
   2274 </td>
   2275  </tr>
   2276 </table>
   2277 
   2278 <table>
   2279  <tr>
   2280     <td class="tab0">
   2281 <p><strong>Format / Codec</strong></p>
   2282 </td>
   2283     <td class="tab0">
   2284 <p><strong>Encoder</strong></p>
   2285 </td>
   2286     <td class="tab0">
   2287 <p><strong>Decoder</strong></p>
   2288 </td>
   2289     <td class="tab0">
   2290 <p><strong>Details</strong></p>
   2291 </td>
   2292     <td class="tab0">
   2293 <p><strong>Supported File Type(s) / Container Formats</strong></p>
   2294 </td>
   2295  </tr>
   2296  <tr>
   2297     <td class="tab3">
   2298 <p>H.263</p>
   2299 </td>
   2300     <td class="tab3">
   2301 <p>REQUIRED1</p>
   2302 </td>
   2303     <td class="tab3">
   2304 <p>REQUIRED2</p>
   2305 </td>
   2306     <td class="tab3">
   2307 <p> </p>
   2308 </td>
   2309     <td class="tab3">
   2310 <p> 3GPP (.3gp)</p>
   2311 
   2312 <p> MPEG-4 (.mp4)</p>
   2313 </td>
   2314  </tr>
   2315  <tr>
   2316     <td class="tab3">
   2317 <p>H.264 AVC</p>
   2318 </td>
   2319     <td class="tab3">
   2320 <p>REQUIRED2</p>
   2321 </td>
   2322     <td class="tab3">
   2323 <p>REQUIRED2</p>
   2324 </td>
   2325     <td>
   2326 <p>See <a href="#heading=h.be1ledetmole">section 5.2 </a>and <a href="#heading=h.ogx7l5t9zub6">5.3</a> for details</p>
   2327 </td>
   2328     <td class="tab3">
   2329 <p> 3GPP (.3gp)</p>
   2330 
   2331 <p> MPEG-4 (.mp4)</p>
   2332 
   2333 <p> MPEG-TS (.ts, AAC audio only, not seekable, Android 3.0+)</p>
   2334 </td>
   2335  </tr>
   2336  <tr>
   2337     <td class="tab3">
   2338 <p>H.265 HEVC</p>
   2339 </td>
   2340     <td class="tab3"></td>
   2341     <td class="tab3">
   2342 <p>REQUIRED2</p>
   2343 </td>
   2344     <td>
   2345 <p>See <a href="#heading=h.be1ledetmole">section 5.3</a> for details</p>
   2346 </td>
   2347     <td class="tab3">
   2348 <p>MPEG-4 (.mp4)</p>
   2349 </td>
   2350  </tr>
   2351  <tr>
   2352     <td class="tab3">
   2353 <p>MPEG-4 SP</p>
   2354 </td>
   2355     <td class="tab3">
   2356 <p> </p>
   2357 </td>
   2358     <td class="tab3">
   2359 <p>REQUIRED2</p>
   2360 </td>
   2361     <td class="tab3">
   2362 <p> </p>
   2363 </td>
   2364     <td class="tab3">
   2365 <p>3GPP (.3gp)</p>
   2366 </td>
   2367  </tr>
   2368  <tr>
   2369     <td class="tab3">
   2370 <p>VP83</p>
   2371 </td>
   2372     <td>
   2373 <p>REQUIRED2</p>
   2374 
   2375 <p>(Android 4.3+)</p>
   2376 </td>
   2377     <td>
   2378 <p>REQUIRED2</p>
   2379 
   2380 <p>(Android 2.3.3+)</p>
   2381 </td>
   2382     <td>
   2383 <p>See <a href="#heading=h.be1ledetmole">section 5.2</a> and <a href="#heading=h.ogx7l5t9zub6">5.3</a> for details</p>
   2384 </td>
   2385     <td>
   2386 <p> WebM (.webm) [<a href="http://www.webmproject.org/">Resources, 110</a>]</p>
   2387 
   2388 <p> Matroska (.mkv, Android 4.0+)4</p>
   2389 </td>
   2390  </tr>
   2391  <tr>
   2392     <td class="tab3">
   2393 <p>VP9</p>
   2394 </td>
   2395     <td class="tab3"></td>
   2396     <td class="tab3">
   2397 <p>REQUIRED2</p>
   2398 
   2399 <p>(Android 4.4+)</p>
   2400 </td>
   2401     <td>
   2402 <p>See <a href="#heading=h.be1ledetmole">section 5.</a><u>3</u> for details</p>
   2403 </td>
   2404     <td>
   2405 <p> WebM (.webm) [<a href="http://www.webmproject.org/">Resources, 110</a>]</p>
   2406 
   2407 <p> Matroska (.mkv, Android 4.0+)4</p>
   2408 </td>
   2409  </tr>
   2410 </table>
   2411 
   2412 
   2413 <p>1 Required for device implementations that include camera hardware and define
   2414 android.hardware.camera or android.hardware.camera.front.</p>
   2415 
   2416 <p>2 Required for device implementations except Android Watch devices. </p>
   2417 
   2418 <p>3 For acceptable quality of web video streaming and video-conference services,
   2419 device implementations SHOULD use a hardware VP8 codec that meets the
   2420 requirements in [<a href="http://www.webmproject.org/hardware/rtc-coding-requirements/">Resources, 51</a>].</p>
   2421 
   2422 <p>4 Device implementations SHOULD support writing Matroska WebM files.</p>
   2423 
   2424 <h2 id=5_2_video_encoding>5.2. Video Encoding</h2>
   2425 
   2426 <table>
   2427  <tr>
   2428     <td class="tab2"></td>
   2429     <td>
   2430 <p>Video codecs are optional for Android Watch device implementations.</p>
   2431 </td>
   2432  </tr>
   2433 </table>
   2434 
   2435 
   2436 <p>Android device implementations with H.264 codec support, MUST support Baseline
   2437 Profile Level 3 and the following SD (Standard Definition) video encoding
   2438 profiles and SHOULD support Main Profile Level 4 and the following HD (High
   2439 Definition) video encoding profiles. Android Television devices are STRONGLY
   2440 RECOMMENDED to encode HD 1080p video at 30 fps.</p>
   2441 <table>
   2442  <tr>
   2443     <td class="tab0"></td>
   2444     <td class="tab0">
   2445 <p><strong>SD (Low quality)</strong></p>
   2446 </td>
   2447     <td class="tab0">
   2448 <p><strong>SD (High quality)</strong></p>
   2449 </td>
   2450     <td class="tab0">
   2451 <p><strong>HD 720p1</strong></p>
   2452 </td>
   2453     <td class="tab0">
   2454 <p><strong>HD 1080p1</strong></p>
   2455 </td>
   2456  </tr>
   2457  <tr>
   2458     <td>
   2459 <p><strong>  Video resolution</strong></p>
   2460 </td>
   2461     <td class="tab3">
   2462 <p>320 x 240 px</p>
   2463 </td>
   2464     <td class="tab3">
   2465 <p>720 x 480 px</p>
   2466 </td>
   2467     <td class="tab3">
   2468 <p>1280 x 720 px</p>
   2469 </td>
   2470     <td>
   2471 <p>1920 x 1080 px</p>
   2472 </td>
   2473  </tr>
   2474  <tr>
   2475     <td>
   2476 <p><strong>  Video frame rate</strong></p>
   2477 </td>
   2478     <td class="tab3">
   2479 <p>20 fps</p>
   2480 </td>
   2481     <td class="tab3">
   2482 <p>30 fps</p>
   2483 </td>
   2484     <td class="tab3">
   2485 <p>30 fps</p>
   2486 </td>
   2487     <td>
   2488 <p>30 fps</p>
   2489 </td>
   2490  </tr>
   2491  <tr>
   2492     <td>
   2493 <p><strong>  Video bitrate</strong></p>
   2494 </td>
   2495     <td class="tab3">
   2496 <p>384 Kbps</p>
   2497 </td>
   2498     <td class="tab3">
   2499 <p>2 Mbps</p>
   2500 </td>
   2501     <td class="tab3">
   2502 <p>4 Mbps</p>
   2503 </td>
   2504     <td>
   2505 <p>10 Mbps</p>
   2506 </td>
   2507  </tr>
   2508 </table>
   2509 
   2510 
   2511 <p>1 When supported by hardware, but STRONGLY RECOMMENDED for Android Television
   2512 devices.</p>
   2513 
   2514 <p>Android device implementations with VP8 codec support MUST support the SD video
   2515 encoding profiles and SHOULD support the following HD (High Definition) video
   2516 encoding profiles.</p>
   2517 <table>
   2518  <tr>
   2519     <td class="tab0"></td>
   2520     <td class="tab0">
   2521 <p><strong>SD (Low quality)</strong></p>
   2522 </td>
   2523     <td class="tab0">
   2524 <p><strong>SD (High quality)</strong></p>
   2525 </td>
   2526     <td class="tab0">
   2527 <p><strong>HD 720p1</strong></p>
   2528 </td>
   2529     <td class="tab0">
   2530 <p><strong>HD 1080p1</strong></p>
   2531 </td>
   2532  </tr>
   2533  <tr>
   2534     <td>
   2535 <p><strong>Video resolution</strong></p>
   2536 </td>
   2537     <td>
   2538 <p>320 x 180 px</p>
   2539 </td>
   2540     <td>
   2541 <p>640 x 360 px</p>
   2542 </td>
   2543     <td>
   2544 <p>1280 x 720 px</p>
   2545 </td>
   2546     <td>
   2547 <p>1920 x 1080 px</p>
   2548 </td>
   2549  </tr>
   2550  <tr>
   2551     <td>
   2552 <p><strong>Video frame rate</strong></p>
   2553 </td>
   2554     <td>
   2555 <p>30 fps</p>
   2556 </td>
   2557     <td>
   2558 <p>30 fps</p>
   2559 </td>
   2560     <td>
   2561 <p>30 fps</p>
   2562 </td>
   2563     <td>
   2564 <p>30 fps</p>
   2565 </td>
   2566  </tr>
   2567  <tr>
   2568     <td>
   2569 <p><strong>Video bitrate</strong></p>
   2570 </td>
   2571     <td>
   2572 <p>800 Kbps </p>
   2573 </td>
   2574     <td>
   2575 <p>2 Mbps</p>
   2576 </td>
   2577     <td>
   2578 <p>4 Mbps</p>
   2579 </td>
   2580     <td>
   2581 <p>10 Mbps</p>
   2582 </td>
   2583  </tr>
   2584 </table>
   2585 
   2586 
   2587 <p>1 When supported by hardware.</p>
   2588 
   2589 <h2 id=5_3_video_decoding>5.3. Video Decoding</h2>
   2590 
   2591 <table>
   2592  <tr>
   2593     <td class="tab2"></td>
   2594     <td>
   2595 <p>Video codecs are optional for Android Watch device implementations.</p>
   2596 </td>
   2597  </tr>
   2598 </table>
   2599 
   2600 
   2601 <p>Device implementations MUST support dynamic video resolution switching within
   2602 the same stream for VP8, VP9 ,H.264, and H.265 codecs.</p>
   2603 
   2604 <p>Android device implementations with H.264 decoders, MUST support Baseline
   2605 Profile Level 3 and the following SD video decoding profiles and SHOULD support
   2606 the HD decoding profiles. Android Television devices MUST support High Profile
   2607 Level 4.2 and the HD 1080p decoding profile.</p>
   2608 <table>
   2609  <tr>
   2610     <td class="tab0"></td>
   2611     <td class="tab0">
   2612 <p><strong>SD (Low quality)</strong></p>
   2613 </td>
   2614     <td class="tab0">
   2615 <p><strong>SD (High quality)</strong></p>
   2616 </td>
   2617     <td class="tab0">
   2618 <p><strong>HD 720p1</strong></p>
   2619 </td>
   2620     <td class="tab0">
   2621 <p><strong>HD 1080p1</strong></p>
   2622 </td>
   2623  </tr>
   2624  <tr>
   2625     <td>
   2626 <p><strong>Video resolution</strong></p>
   2627 </td>
   2628     <td>
   2629 <p>320 x 240 px</p>
   2630 </td>
   2631     <td>
   2632 <p>720 x 480 px</p>
   2633 </td>
   2634     <td>
   2635 <p>1280 x 720 px</p>
   2636 </td>
   2637     <td>
   2638 <p>1920 x 1080 px</p>
   2639 </td>
   2640  </tr>
   2641  <tr>
   2642     <td>
   2643 <p><strong>Video frame rate</strong></p>
   2644 </td>
   2645     <td>
   2646 <p>30 fps</p>
   2647 </td>
   2648     <td>
   2649 <p>30 fps</p>
   2650 </td>
   2651     <td>
   2652 <p>30 fps / 60 fps2</p>
   2653 </td>
   2654     <td>
   2655 <p>30 fps / 60 fps2</p>
   2656 </td>
   2657  </tr>
   2658  <tr>
   2659     <td></td>
   2660     <td></td>
   2661     <td></td>
   2662     <td></td>
   2663     <td></td>
   2664  </tr>
   2665  <tr>
   2666     <td>
   2667 <p><strong>Video bitrate</strong></p>
   2668 </td>
   2669     <td>
   2670 <p>800 Kbps </p>
   2671 </td>
   2672     <td>
   2673 <p>2 Mbps</p>
   2674 </td>
   2675     <td>
   2676 <p>8 Mbps</p>
   2677 </td>
   2678     <td>
   2679 <p>20 Mbps</p>
   2680 </td>
   2681  </tr>
   2682 </table>
   2683 
   2684 
   2685 <p>1 Required for Android Television device implementations, but for other device
   2686 types only when supported by hardware.</p>
   2687 
   2688 <p>2 Required for Android Television device implementations.</p>
   2689 
   2690 <p>Android device implementations when supporting VP8 codec as described in <a href="#heading=h.hitn8abpwkj2">section 5.1.3</a>, MUST support the following SD decoding profiles and SHOULD support the HD
   2691 decoding profiles. Android Television devices MUST support the HD 1080p
   2692 decoding profile.  </p>
   2693 <table>
   2694  <tr>
   2695     <td class="tab0"></td>
   2696     <td class="tab0">
   2697 <p><strong>SD (Low quality)</strong></p>
   2698 </td>
   2699     <td class="tab0">
   2700 <p><strong>SD (High quality)</strong></p>
   2701 </td>
   2702     <td class="tab0">
   2703 <p><strong>HD 720p1</strong></p>
   2704 </td>
   2705     <td class="tab0">
   2706 <p><strong>HD 1080p1</strong></p>
   2707 </td>
   2708  </tr>
   2709  <tr>
   2710     <td>
   2711 <p><strong>Video resolution</strong></p>
   2712 </td>
   2713     <td>
   2714 <p>320 x 180 px</p>
   2715 </td>
   2716     <td>
   2717 <p>640 x 360 px</p>
   2718 </td>
   2719     <td>
   2720 <p>1280 x 720 px</p>
   2721 </td>
   2722     <td>
   2723 <p>1920 x 1080 px</p>
   2724 </td>
   2725  </tr>
   2726  <tr>
   2727     <td>
   2728 <p><strong>Video frame rate</strong></p>
   2729 </td>
   2730     <td>
   2731 <p>30 fps</p>
   2732 </td>
   2733     <td>
   2734 <p>30 fps</p>
   2735 </td>
   2736     <td>
   2737 <p>30 fps / 60 fps2</p>
   2738 </td>
   2739     <td>
   2740 <p>30 / 60 fps2</p>
   2741 </td>
   2742  </tr>
   2743  <tr>
   2744     <td></td>
   2745     <td></td>
   2746     <td></td>
   2747     <td></td>
   2748     <td></td>
   2749  </tr>
   2750  <tr>
   2751     <td>
   2752 <p><strong>Video bitrate</strong></p>
   2753 </td>
   2754     <td>
   2755 <p>800 Kbps </p>
   2756 </td>
   2757     <td>
   2758 <p>2 Mbps</p>
   2759 </td>
   2760     <td>
   2761 <p>8 Mbps</p>
   2762 </td>
   2763     <td>
   2764 <p>20 Mbps</p>
   2765 </td>
   2766  </tr>
   2767 </table>
   2768 
   2769 
   2770 <p>1 Required for Android Television device implementations, but for other type of
   2771 devices only when supported by hardware.</p>
   2772 
   2773 <p>2 Required for Android Television device implementations.</p>
   2774 
   2775 <p>Android device implementations, when supporting VP9 codec as described in <a href="#heading=h.hitn8abpwkj2">section 5.1.3</a>, MUST support the following SD video decoding profiles and SHOULD support the
   2776 HD decoding profiles. Android Television devices are STRONGLY RECOMMENDED to
   2777 support the HD 1080p decoding profile and SHOULD support the UHD decoding
   2778 profile. When the UHD video decoding profile is supported, it MUST support 8
   2779 bit color depth.</p>
   2780 <table>
   2781  <tr>
   2782     <td class="tab0"></td>
   2783     <td class="tab0">
   2784 <p><strong>SD (Low quality)</strong></p>
   2785 </td>
   2786     <td class="tab0">
   2787 <p><strong>SD (High quality)</strong></p>
   2788 </td>
   2789     <td class="tab0">
   2790 <p><strong>HD 720p 1</strong></p>
   2791 </td>
   2792     <td class="tab0">
   2793 <p><strong>HD 1080p 2</strong></p>
   2794 </td>
   2795     <td class="tab0">
   2796 <p><strong>UHD 2</strong></p>
   2797 </td>
   2798  </tr>
   2799  <tr>
   2800     <td>
   2801 <p><strong>Video resolution</strong></p>
   2802 </td>
   2803     <td>
   2804 <p>320 x 180 px</p>
   2805 </td>
   2806     <td>
   2807 <p>640 x 360 px</p>
   2808 </td>
   2809     <td>
   2810 <p>1280 x 720 px</p>
   2811 </td>
   2812     <td>
   2813 <p>1920 x 1080 px</p>
   2814 </td>
   2815     <td>
   2816 <p>3840 x 2160 px</p>
   2817 </td>
   2818  </tr>
   2819  <tr>
   2820     <td>
   2821 <p><strong>Video frame rate</strong></p>
   2822 </td>
   2823     <td>
   2824 <p>30 fps</p>
   2825 </td>
   2826     <td>
   2827 <p>30 fps</p>
   2828 </td>
   2829     <td>
   2830 <p>30 fps</p>
   2831 </td>
   2832     <td>
   2833 <p>30 fps</p>
   2834 </td>
   2835     <td>
   2836 <p>30 fps</p>
   2837 </td>
   2838  </tr>
   2839  <tr>
   2840     <td>
   2841 <p><strong>Video bitrate</strong></p>
   2842 </td>
   2843     <td>
   2844 <p>600 Kbps </p>
   2845 </td>
   2846     <td>
   2847 <p>1.6 Mbps</p>
   2848 </td>
   2849     <td>
   2850 <p>4 Mbps</p>
   2851 </td>
   2852     <td>
   2853 <p>10 Mbps</p>
   2854 </td>
   2855     <td>
   2856 <p>20 Mbps</p>
   2857 </td>
   2858  </tr>
   2859 </table>
   2860 
   2861 
   2862 <p>1 Required for Android Television device implementations, but for other type of
   2863 devices only when supported by hardware.</p>
   2864 
   2865 <p>2 STRONGLY RECOMMENDED for Android Television device implementations when
   2866 supported by hardware.</p>
   2867 
   2868 <p>Android device implementations, when supporting H.265 codec as described in <a href="#heading=h.hitn8abpwkj2">section 5.1.3</a>, MUST support the Main Profile Level 3 Main tier and the following SD video
   2869 decoding profiles and SHOULD support the HD decoding profiles. Android
   2870 Television devices MUST support the Main Profile Level 4.1 Main tier and the HD
   2871 1080p decoding profile and SHOULD support Main10 Level 5 Main Tier profile and
   2872 the UHD decoding profile.</p>
   2873 <table>
   2874  <tr>
   2875     <td class="tab0"></td>
   2876     <td class="tab0">
   2877 <p><strong>SD (Low quality)</strong></p>
   2878 </td>
   2879     <td class="tab0">
   2880 <p><strong>SD (High quality)</strong></p>
   2881 </td>
   2882     <td class="tab0">
   2883 <p><strong>HD 720p </strong>1 </p>
   2884 </td>
   2885     <td class="tab0">
   2886 <p><strong>HD 1080p </strong>1 </p>
   2887 </td>
   2888     <td class="tab0">
   2889 <p><strong>UHD </strong>2</p>
   2890 </td>
   2891  </tr>
   2892  <tr>
   2893     <td>
   2894 <p><strong>Video resolution</strong></p>
   2895 </td>
   2896     <td>
   2897 <p>352 x 288 px</p>
   2898 </td>
   2899     <td>
   2900 <p>640 x 360 px</p>
   2901 </td>
   2902     <td>
   2903 <p>1280 x 720 px</p>
   2904 </td>
   2905     <td>
   2906 <p>1920 x 1080 px</p>
   2907 </td>
   2908     <td>
   2909 <p>3840 x 2160 px</p>
   2910 </td>
   2911  </tr>
   2912  <tr>
   2913     <td>
   2914 <p><strong>Video frame rate</strong></p>
   2915 </td>
   2916     <td>
   2917 <p>30 fps</p>
   2918 </td>
   2919     <td>
   2920 <p>30 fps</p>
   2921 </td>
   2922     <td>
   2923 <p>30 fps</p>
   2924 </td>
   2925     <td>
   2926 <p>30 fps</p>
   2927 </td>
   2928     <td>
   2929 <p>30 fps</p>
   2930 </td>
   2931  </tr>
   2932  <tr>
   2933     <td>
   2934 <p><strong>Video bitrate</strong></p>
   2935 </td>
   2936     <td>
   2937 <p>600 Kbps </p>
   2938 </td>
   2939     <td>
   2940 <p>1.6 Mbps</p>
   2941 </td>
   2942     <td>
   2943 <p>4 Mbps</p>
   2944 </td>
   2945     <td>
   2946 <p>10 Mbps</p>
   2947 </td>
   2948     <td>
   2949 <p>20 Mbps</p>
   2950 </td>
   2951  </tr>
   2952 </table>
   2953 
   2954 
   2955 <p>1 Required for Android Television device implementation, but for other type of
   2956 devices only when supported by hardware.</p>
   2957 
   2958 <p>2 Required for Android Television device implementations when supported by
   2959 hardware.</p>
   2960 
   2961 <h2 id=5_4_audio_recording>5.4. Audio Recording</h2>
   2962 
   2963 
   2964 <p>While some of the requirements outlined in this section are stated as SHOULD
   2965 since Android 4.3, the Compatibility Definition for a future version is planned
   2966 to change these to MUST. Existing and new Android devices are <strong>very strongly encouraged</strong> to meet these requirements, or they will not be able to attain Android
   2967 compatibility when upgraded to the future version.</p>
   2968 
   2969 <h3 id=5_4_1_raw_audio_capture>5.4.1. Raw Audio Capture</h3>
   2970 
   2971 
   2972 <p>Device implementations that declare android.hardware.microphone MUST allow
   2973 capture of raw audio content with the following characteristics:</p>
   2974 
   2975 <ul>
   2976   <li> <strong>Format</strong>: Linear PCM, 16-bit
   2977   <li> <strong>Sampling rates</strong>: 8000, 11025, 16000, 44100
   2978   <li> <strong>Channels</strong>: Mono
   2979 </ul>
   2980 
   2981 <p>Device implementations that declare android.hardware.microphone SHOULD allow
   2982 capture of raw audio content with the following characteristics:</p>
   2983 
   2984 <ul>
   2985   <li> <strong>Format</strong>: Linear PCM, 16-bit
   2986   <li> <strong>Sampling rates</strong>: 22050, 48000
   2987   <li> <strong>Channels</strong>: Stereo
   2988 </ul>
   2989 
   2990 <h3 id=5_4_2_capture_for_voice_recognition>5.4.2. Capture for Voice Recognition</h3>
   2991 
   2992 
   2993 <p>In addition to the above recording specifications, when an application has
   2994 started recording an audio stream using the
   2995 android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION audio source:</p>
   2996 
   2997 <ul>
   2998   <li> The device SHOULD exhibit approximately flat amplitude versus frequency
   2999 characteristics: specifically, 3 dB, from 100 Hz to 4000 Hz.
   3000   <li> Audio input sensitivity SHOULD be set such that a 90 dB sound power level (SPL)
   3001 source at 1000 Hz yields RMS of 2500 for 16-bit samples.
   3002   <li> PCM amplitude levels SHOULD linearly track input SPL changes over at least a 30
   3003 dB range from -18 dB to +12 dB re 90 dB SPL at the microphone.
   3004   <li> Total harmonic distortion SHOULD be less than 1% for 1Khz at 90 dB SPL input
   3005 level at the microphone.
   3006   <li> Noise reduction processing, if present, MUST be disabled.
   3007   <li> Automatic gain control, if present, MUST be disabled
   3008 </ul>
   3009 
   3010 <p>If the platform supports noise suppression technologies tuned for speech
   3011 recognition, the effect MUST be controllable from the
   3012 android.media.audiofx.NoiseSuppressor API. Moreover, the UUID field for the
   3013 noise suppressor's effect descriptor MUST uniquely identify each implementation
   3014 of the noise suppression technology.</p>
   3015 
   3016 <h3 id=5_4_3_capture_for_rerouting_of_playback>5.4.3. Capture for Rerouting of Playback</h3>
   3017 
   3018 
   3019 <p>The android.media.MediaRecorder.AudioSource class includes the REMOTE_SUBMIX
   3020 audio source. Devices that declare android.hardware.audio.output MUST properly
   3021 implement the REMOTE_SUBMIX audio source so that when an application uses the
   3022 android.media.AudioRecord API to record from this audio source, it can capture
   3023 a mix of all audio streams except for the following:</p>
   3024 
   3025 <ul>
   3026   <li> STREAM_RING
   3027   <li> STREAM_ALARM
   3028   <li> STREAM_NOTIFICATION
   3029 </ul>
   3030 
   3031 <h2 id=5_5_audio_playback>5.5. Audio Playback</h2>
   3032 
   3033 
   3034 <p>Device implementations that declare android.hardware.audio.output MUST conform
   3035 to the requirements in this section.</p>
   3036 
   3037 <h3 id=5_5_1_raw_audio_playback>5.5.1. Raw Audio Playback</h3>
   3038 
   3039 
   3040 <p>The device MUST allow playback of raw audio content with the following
   3041 characteristics:</p>
   3042 
   3043 <ul>
   3044   <li> <strong>Format</strong>: Linear PCM, 16-bit
   3045   <li> <strong>Sampling rates</strong>: 8000, 11025, 16000, 22050, 32000, 44100
   3046   <li> <strong>Channels</strong>: Mono, Stereo
   3047 </ul>
   3048 
   3049 <p>The device SHOULD allow playback of raw audio content with the following
   3050 characteristics:</p>
   3051 
   3052 <ul>
   3053   <li> <strong>Sampling rates</strong>: 24000, 48000
   3054 </ul>
   3055 
   3056 <h3 id=5_5_2_audio_effects>5.5.2. Audio Effects</h3>
   3057 
   3058 
   3059 <p>Android provides an API for audio effects for device implementations [<a href="http://developer.android.com/reference/android/media/audiofx/AudioEffect.html">Resources, 52</a>]. Device implementations that declare the feature
   3060 android.hardware.audio.output:</p>
   3061 
   3062 <ul>
   3063   <li> MUST support the EFFECT_TYPE_EQUALIZER and EFFECT_TYPE_LOUDNESS_ENHANCER
   3064 implementations controllable through the AudioEffect subclasses Equalizer,
   3065 LoudnessEnhancer
   3066   <li> MUST support the visualizer API implementation, controllable through the
   3067 Visualizer class
   3068   <li> SHOULD support the EFFECT_TYPE_BASS_BOOST, EFFECT_TYPE_ENV_REVERB,
   3069 EFFECT_TYPE_PRESET_REVERB, and EFFECT_TYPE_VIRTUALIZER implementations
   3070 controllable through the AudioEffect sub-classes BassBoost,
   3071 EnvironmentalReverb, PresetReverb, and Virtualizer
   3072 </ul>
   3073 
   3074 <h3 id=5_5_3_audio_output_volume>5.5.3. Audio Output Volume</h3>
   3075 
   3076 
   3077 <p>Android Television device implementations MUST include support for system
   3078 Master Volume and digital audio output volume attenuation on supported outputs,
   3079 except for compressed audio passthrough output (where no audio decoding is done
   3080 on the device).</p>
   3081 
   3082 <h2 id=5_6_audio_latency>5.6. Audio Latency</h2>
   3083 
   3084 
   3085 <p>Audio latency is the time delay as an audio signal passes through a system.
   3086 Many classes of applications rely on short latencies, to achieve real-time
   3087 sound effects.</p>
   3088 
   3089 <p>For the purposes of this section, use the following definitions:</p>
   3090 
   3091 <ul>
   3092   <li> <strong>output latency</strong>The interval between when an application writes a frame of PCM-coded data and
   3093 when the corresponding sound can be heard by an external listener or observed
   3094 by a transducer.
   3095   <li> <strong>cold output latency</strong>The output latency for the first frame, when the audio output system has been
   3096 idle and powered down prior to the request.
   3097   <li> <strong>continuous output latency</strong>The output latency for subsequent frames, after the device is playing audio.
   3098   <li> <strong>input latency</strong>The interval between when an external sound is presented to the device and
   3099 when an application reads the corresponding frame of PCM-coded data.
   3100   <li> <strong>cold input latency</strong>The sum of lost input time and the input latency for the first frame, when the
   3101 audio input system has been idle and powered down prior to the request.
   3102   <li> <strong>continuous input latency</strong>The input latency for subsequent frames, while the device is capturing audio.
   3103   <li> <strong>cold output jitter</strong>The variance among separate measurements of cold output latency values.
   3104   <li> <strong>cold input jitter</strong>The variance among separate measurements of cold input latency values. 
   3105   <li> <strong>continuous round-trip latency</strong>The sum of continuous input latency plus continuous output latency plus 5
   3106 milliseconds.
   3107   <li> <strong>OpenSL ES PCM buffer queue API</strong>The set of PCM-related OpenSL ES APIs within Android NDK; see
   3108 NDK_root/docs/opensles/index.html.
   3109 </ul>
   3110 
   3111 <p>Device implementations that declare android.hardware.audio.output SHOULD meet
   3112 or exceed these audio output requirements:</p>
   3113 
   3114 <ul>
   3115   <li> cold output latency of 100 milliseconds or less
   3116   <li> continuous output latency of 45 milliseconds or less
   3117   <li> minimize the cold output jitter
   3118 </ul>
   3119 
   3120 <p>If a device implementation meets the requirements of this section after any
   3121 initial calibration when using the OpenSL ES PCM buffer queue API, for
   3122 continuous output latency and cold output latency over at least one supported
   3123 audio output device, it MAY report support for low-latency audio, by reporting
   3124 the feature android.hardware.audio.low_latency via the
   3125 android.content.pm.PackageManager class [<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">Resources, 53</a>]. Conversely, if the device implementation does not meet these requirements it
   3126 MUST NOT report support for low-latency audio.</p>
   3127 
   3128 <p>Device implementations that include android.hardware.microphone SHOULD meet
   3129 these input audio requirements:</p>
   3130 
   3131 <ul>
   3132   <li> cold input latency of 100 milliseconds or less
   3133   <li> continuous input latency of 30 milliseconds or less
   3134   <li> continuous round-trip latency of 50 milliseconds or less
   3135   <li> minimize the cold input jitter
   3136 </ul>
   3137 
   3138 <h2 id=5_7_network_protocols>5.7. Network Protocols</h2>
   3139 
   3140 
   3141 <p>Devices MUST support the media network protocols for audio and video playback
   3142 as specified in the Android SDK documentation [<a href="http://developer.android.com/guide/appendix/media-formats.html">Resources, 50</a>]. Specifically, devices MUST support the following media network protocols:</p>
   3143 
   3144 <ul>
   3145   <li> RTSP (RTP, SDP)
   3146   <li> HTTP(S) progressive streaming
   3147   <li> HTTP(S) Live Streaming draft protocol, Version 3 [<a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-03">Resources, 54</a>]
   3148 </ul>
   3149 
   3150 <h2 id=5_8_secure_media>5.8. Secure Media</h2>
   3151 
   3152 
   3153 <p>Device implementations that support secure video output and are capable of
   3154 supporting secure surfaces MUST declare support for Display.FLAG_SECURE. Device
   3155 implementations that declare support for Display.FLAG_SECURE, if they support a
   3156 wireless display protocol, MUST secure the link with a cryptographically strong
   3157 mechanism such as HDCP 2.x or higher for Miracast wireless displays. Similarly
   3158 if they support a wired external display, the device implementations MUST
   3159 support HDCP 1.2 or higher. Android Television device implementations MUST
   3160 support HDCP 2.2 for devices supporting 4K resolution and HDCP 1.4 or above for
   3161 lower resolutions. The upstream Android open source implementation includes
   3162 support for wireless (Miracast) and wired (HDMI) displays that satisfies this
   3163 requirement.</p>
   3164 
   3165 <h1 id=6_developer_tools_and_options_compatibility>6. Developer Tools and Options Compatibility</h1>
   3166 
   3167 
   3168 <h2 id=6_1_developer_tools>6.1. Developer Tools</h2>
   3169 
   3170 
   3171 <p>Device implementations MUST support the Android Developer Tools provided in the
   3172 Android SDK. Android compatible devices MUST be compatible with:</p>
   3173 
   3174 <ul>
   3175   <li> <strong>Android Debug Bridge (adb)</strong> [<a href="http://developer.android.com/tools/help/adb.html">Resources, 55</a>]
   3176 </ul>
   3177 
   3178 <p>Device implementations MUST support all adb functions as documented in the
   3179 Android SDK including dumpsys [<a href="https://source.android.com/devices/tech/input/dumpsys.html">Resources, 56</a>]. The device-side adb daemon MUST be inactive by default and there MUST be a
   3180 user-accessible mechanism to turn on the Android Debug Bridge. If a device
   3181 implementation omits USB peripheral mode, it MUST implement the Android Debug
   3182 Bridge via local-area network (such as Ethernet or 802.11). </p>
   3183 
   3184 <p>Android includes support for secure adb. Secure adb enables adb on known
   3185 authenticated hosts. Device implementations MUST support secure adb.</p>
   3186 
   3187 <ul>
   3188   <li> <strong>Dalvik Debug Monitor Service (ddms)</strong> [<a href="http://developer.android.com/tools/debugging/ddms.html">Resources, 57</a>]
   3189 </ul>
   3190 
   3191 <p>Device implementations MUST support all ddms features as documented in the
   3192 Android SDK. As ddms uses adb, support for ddms SHOULD be inactive by default,
   3193 but MUST be supported whenever the user has activated the Android Debug Bridge,
   3194 as above.</p>
   3195 
   3196 <ul>
   3197   <li> <strong>Monkey</strong> [<a href="http://developer.android.com/tools/help/monkey.html">Resources, 58</a>]
   3198 </ul>
   3199 
   3200 <p>Device implementations MUST include the Monkey framework, and make it available
   3201 for applications to use.</p>
   3202 
   3203 <ul>
   3204   <li> <strong>SysTrace</strong> [<a href="http://developer.android.com/tools/help/systrace.html">Resources, 59</a>]
   3205 </ul>
   3206 
   3207 <p>Device implementations MUST support systrace tool as documented in the Android
   3208 SDK. Systrace must be inactive by default, and there MUST be a user-accessible
   3209 mechanism to turn on Systrace.</p>
   3210 
   3211 <p>Most Linux-based systems and Apple Macintosh systems recognize Android devices
   3212 using the standard Android SDK tools, without additional support; however
   3213 Microsoft Windows systems typically require a driver for new Android devices.
   3214 (For instance, new vendor IDs and sometimes new device IDs require custom USB
   3215 drivers for Windows systems.) If a device implementation is unrecognized by the
   3216 adb tool as provided in the standard Android SDK, device implementers MUST
   3217 provide Windows drivers allowing developers to connect to the device using the
   3218 adb protocol. These drivers MUST be provided for Windows XP, Windows Vista,
   3219 Windows 7, Windows 8, and Windows 9 in both 32-bit and 64-bit versions.</p>
   3220 
   3221 <h2 id=6_2_developer_options>6.2. Developer Options</h2>
   3222 
   3223 
   3224 <p>Android includes support for developers to configure application
   3225 development-related settings. Device implementations MUST honor the
   3226 android.settings.APPLICATION_DEVELOPMENT_SETTINGS intent to show application
   3227 development-related settings [<a href="http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS">Resources, 60</a>]. The upstream Android implementation hides the Developer Options menu by
   3228 default and enables users to launch Developer Options after pressing seven (7)
   3229 times on the <strong>Settings</strong> > <strong>About Device</strong> > <strong>Build Number</strong> menu item. Device implementations MUST provide a consistent experience for
   3230 Developer Options. Specifically, device implementations MUST hide Developer
   3231 Options by default and MUST provide a mechanism to enable Developer Options
   3232 that is consistent with the upstream Android implementation.</p>
   3233 
   3234 <h1 id=7_hardware_compatibility>7. Hardware Compatibility</h1>
   3235 
   3236 
   3237 <p>If a device includes a particular hardware component that has a corresponding
   3238 API for third-party developers, the device implementation MUST implement that
   3239 API as described in the Android SDK documentation. If an API in the SDK
   3240 interacts with a hardware component that is stated to be optional and the
   3241 device implementation does not possess that component:</p>
   3242 
   3243 <ul>
   3244   <li> Complete class definitions (as documented by the SDK) for the component's APIs
   3245 MUST still be presented. 
   3246   <li> The API's behaviors MUST be implemented as no-ops in some reasonable fashion.
   3247   <li> API methods MUST return null values where permitted by the SDK documentation.
   3248   <li> API methods MUST return no-op implementations of classes where null values are
   3249 not permitted by the SDK documentation.
   3250   <li> API methods MUST NOT throw exceptions not documented by the SDK documentation.
   3251 </ul>
   3252 
   3253 <p>A typical example of a scenario where these requirements apply is the telephony
   3254 API: even on non-phone devices, these APIs must be implemented as reasonable
   3255 no-ops.</p>
   3256 
   3257 <p>Device implementations MUST consistently report accurate hardware configuration
   3258 information via the getSystemAvailableFeatures() and hasSystemFeature(String)
   3259 methods on the android.content.pm.PackageManager class for the same build
   3260 fingerprint. [<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">Resources, 53]</a></p>
   3261 
   3262 <h2 id=7_1_display_and_graphics>7.1. Display and Graphics</h2>
   3263 
   3264 
   3265 <p>Android includes facilities that automatically adjust application assets and UI
   3266 layouts appropriately for the device, to ensure that third-party applications
   3267 run well on a variety of hardware configurations [<a href="http://developer.android.com/guide/practices/screens_support.html">Resources, 61</a>]. Devices MUST properly implement these APIs and behaviors, as detailed in
   3268 this section.</p>
   3269 
   3270 <p>The units referenced by the requirements in this section are defined as
   3271 follows:</p>
   3272 
   3273 <ul>
   3274   <li> <strong>physical diagonal size</strong>The distance in inches between two opposing corners of the illuminated portion
   3275 of the display.
   3276   <li> <strong>dots per inch (dpi)</strong>The number of pixels encompassed by a linear horizontal or vertical span of
   3277 1". Where dpi values are listed, both horizontal and vertical dpi must fall
   3278 within the range.
   3279   <li> <strong>aspect ratio</strong>The ratio of the longer dimension of the screen to the shorter dimension. For
   3280 example, a display of 480x854 pixels would be 854 / 480 = 1.779, or roughly
   3281 "16:9".
   3282   <li> <strong>density-independent pixel (dp)</strong>The virtual pixel unit normalized to a 160 dpi screen, calculated as: pixels =
   3283 dps * (density / 160).
   3284 </ul>
   3285 
   3286 <h3 id=7_1_1_screen_configuration>7.1.1. Screen Configuration</h3>
   3287 
   3288 
   3289 <h4 id=7_1_1_1_screen_size>7.1.1.1. Screen Size</h4>
   3290 
   3291 <table>
   3292  <tr>
   3293     <td class="tab2"></td>
   3294     <td>
   3295 <p>Android Watch devices (detailed in <a href="#heading=h.40sdoojaw5k9">section 2</a>) MAY have smaller screen sizes as described in this section.</p>
   3296 </td>
   3297  </tr>
   3298 </table>
   3299 
   3300 
   3301 <p>The Android UI framework supports a variety of different screen sizes, and
   3302 allows applications to query the device screen size (aka "screen layout") via
   3303 android.content.res.Configuration.screenLayout with the SCREENLAYOUT_SIZE_MASK.
   3304 Device implementations MUST report the correct screen size as defined in the
   3305 Android SDK documentation [<a href="http://developer.android.com/guide/practices/screens_support.html">Resources, 61</a>] and determined by the upstream Android platform. Specifically, device
   3306 implementations MUST report the correct screen size according to the following
   3307 logical density-independent pixel (dp) screen dimensions.</p>
   3308 
   3309 <ul>
   3310   <li> Devices MUST have screen sizes of at least 426 dp x 320 dp ('small'), unless it
   3311 is an Android Watch device.
   3312   <li> Devices that report screen size 'normal' MUST have screen sizes of at least 480
   3313 dp x 320 dp.
   3314   <li> Devices that report screen size 'large' MUST have screen sizes of at least 640
   3315 dp x 480 dp.
   3316   <li> Devices that report screen size 'xlarge' MUST have screen sizes of at least 960
   3317 dp x 720 dp.
   3318 </ul>
   3319 
   3320 <p>In addition, </p>
   3321 
   3322 <ul>
   3323   <li> Android Watch devices MUST have a screen with the physical diagonal size in the
   3324 range from 1.1 to 2.5 inches
   3325   <li> Other types of Android device implementations, with a physically integrated
   3326 screen, MUST have a screen at least 2.5 inches in physical diagonal size.
   3327 </ul>
   3328 
   3329 <p>Devices MUST NOT change their reported screen size at any time.</p>
   3330 
   3331 <p>Applications optionally indicate which screen sizes they support via the
   3332 <supports-screens> attribute in the AndroidManifest.xml file. Device
   3333 implementations MUST correctly honor applications' stated support for small,
   3334 normal, large, and xlarge screens, as described in the Android SDK
   3335 documentation.</p>
   3336 
   3337 <h4 id=7_1_1_2_screen_aspect_ratio>7.1.1.2. Screen Aspect Ratio</h4>
   3338 
   3339 <table>
   3340  <tr>
   3341     <td class="tab2"></td>
   3342     <td>
   3343 <p>Android Watch devices MAY have an aspect ratio of 1.0 (1:1).</p>
   3344 </td>
   3345  </tr>
   3346 </table>
   3347 
   3348 
   3349 <p>The screen aspect ratio MUST be a value from 1.3333 (4:3) to 1.86 (roughly
   3350 16:9), but Android Watch devices MAY have an aspect ratio of 1.0 (1:1) because
   3351 such a device implementation will use a UI_MODE_TYPE_WATCH as the
   3352 android.content.res.Configuration.uiMode.</p>
   3353 
   3354 <h4 id=7_1_1_3_screen_density>7.1.1.3. Screen Density</h4>
   3355 
   3356 
   3357 <p>The Android UI framework defines a set of standard logical densities to help
   3358 application developers target application resources. Device implementations
   3359 MUST report only one of the following logical Android framework densities
   3360 through the android.util.DisplayMetrics APIs, and MUST execute applications at
   3361 this standard density and MUST NOT change the value at at any time for the
   3362 default display.</p>
   3363 
   3364 <ul>
   3365   <li> 120 dpi (ldpi)
   3366   <li> 160 dpi (mdpi)
   3367   <li> 213 dpi (tvdpi)
   3368   <li> 240 dpi (hdpi)
   3369   <li> 320 dpi (xhdpi)
   3370   <li> 400 dpi (400dpi)
   3371   <li> 480 dpi (xxhdpi)
   3372   <li> 560 dpi (560dpi)
   3373   <li> 640 dpi (xxxhdpi)
   3374 </ul>
   3375 
   3376 <p>Device implementations SHOULD define the standard Android framework density
   3377 that is numerically closest to the physical density of the screen, unless that
   3378 logical density pushes the reported screen size below the minimum supported. If
   3379 the standard Android framework density that is numerically closest to the
   3380 physical density results in a screen size that is smaller than the smallest
   3381 supported compatible screen size (320 dp width), device implementations SHOULD
   3382 report the next lowest standard Android framework density.</p>
   3383 
   3384 <h3 id=7_1_2_display_metrics>7.1.2. Display Metrics</h3>
   3385 
   3386 
   3387 <p>Device implementations MUST report correct values for all display metrics
   3388 defined in android.util.DisplayMetrics [<a href="http://developer.android.com/reference/android/util/DisplayMetrics.html">Resources, 62</a>] and MUST report the same values regardless of whether the embedded or
   3389 external screen is used as the default display.</p>
   3390 
   3391 <h3 id=7_1_3_screen_orientation>7.1.3. Screen Orientation</h3>
   3392 
   3393 
   3394 <p>Devices MUST report which screen orientations they support
   3395 (android.hardware.screen.portrait and/or android.hardware.screen.landscape) and
   3396 MUST report at least one supported orientation. For example, a device with a
   3397 fixed orientation landscape screen, such as a television or laptop, SHOULD only
   3398 report android.hardware.screen.landscape.</p>
   3399 
   3400 <p>Devices that report both screen orientations MUST support dynamic orientation
   3401 by applications to either portrait or landscape screen orientation. That is,
   3402 the device must respect the application's request for a specific screen
   3403 orientation. Device implementations MAY select either portrait or landscape
   3404 orientation as the default.</p>
   3405 
   3406 <p>Devices MUST report the correct value for the device's current orientation,
   3407 whenever queried via the android.content.res.Configuration.orientation,
   3408 android.view.Display.getOrientation(), or other APIs.</p>
   3409 
   3410 <p>Devices MUST NOT change the reported screen size or density when changing
   3411 orientation.</p>
   3412 
   3413 <h3 id=7_1_4_2d_and_3d_graphics_acceleration>7.1.4. 2D and 3D Graphics Acceleration</h3>
   3414 
   3415 
   3416 <p>Device implementations MUST support both OpenGL ES 1.0 and 2.0, as embodied and
   3417 detailed in the Android SDK documentations. Device implementations SHOULD
   3418 support OpenGL ES 3.0 or 3.1 on devices capable of supporting it. Device
   3419 implementations MUST also support Android RenderScript, as detailed in the
   3420 Android SDK documentation [<a href="http://developer.android.com/guide/topics/renderscript/">Resources, 63</a>].</p>
   3421 
   3422 <p>Device implementations MUST also correctly identify themselves as supporting
   3423 OpenGL ES 1.0, OpenGL ES 2.0, OpenGL ES 3.0 or OpenGL 3.1. That is:</p>
   3424 
   3425 <ul>
   3426   <li> The managed APIs (such as via the GLES10.getString()method MUST report support
   3427 for OpenGL ES 1.0 and OpenGL ES 2.0.
   3428   <li> The native C/C++ OpenGL APIs (APIs available to apps via libGLES_v1CM.so,
   3429 libGLES_v2.so, or libEGL.so) MUST report support for OpenGL ES 1.0 and OpenGL
   3430 ES 2.0.
   3431   <li> Device implementations that declare support for OpenGL ES 3.0 or 3.1 MUST
   3432 support the corresponding managed APIs and include support for native C/C++
   3433 APIs. On device implementations that declare support for OpenGL ES 3.0 or 3.1,
   3434 libGLESv2.so MUST export the corresponding function symbols in addition to the
   3435 OpenGL ES 2.0 function symbols.
   3436 </ul>
   3437 
   3438 <p>In addition to OpenGL ES 3.1, Android provides an extension pack with Java
   3439 interfaces [<a href="https://developer.android.com/reference/android/opengl/GLES31Ext.html">Resources, 64</a>] and native support for advanced graphics functionality such as tessellation
   3440 and the ASTC texture compression format. Android device implementations MAY
   3441 support this extension pack, andonly if fully implementedMUST identify the
   3442 support through the android.hardware.opengles.aep feature flag.</p>
   3443 
   3444 <p>Also, device implementations MAY implement any desired OpenGL ES extensions.
   3445 However, device implementations MUST report via the OpenGL ES managed and
   3446 native APIs all extension strings that they do support, and conversely MUST NOT
   3447 report extension strings that they do not support.</p>
   3448 
   3449 <p>Note that Android includes support for applications to optionally specify that
   3450 they require specific OpenGL texture compression formats. These formats are
   3451 typically vendor-specific. Device implementations are not required by Android
   3452 to implement any specific texture compression format. However, they SHOULD
   3453 accurately report any texture compression formats that they do support, via the
   3454 getString() method in the OpenGL API.</p>
   3455 
   3456 <p>Android includes a mechanism for applications to declare that they want to
   3457 enable hardware acceleration for 2D graphics at the Application, Activity,
   3458 Window, or View level through the use of a manifest tag
   3459 android:hardwareAccelerated or direct API calls [<a href="http://developer.android.com/guide/topics/graphics/hardware-accel.html">Resources, 65</a>].</p>
   3460 
   3461 <p>Device implementations MUST enable hardware acceleration by default, and MUST
   3462 disable hardware acceleration if the developer so requests by setting
   3463 android:hardwareAccelerated="false" or disabling hardware acceleration directly
   3464 through the Android View APIs.</p>
   3465 
   3466 <p>In addition, device implementations MUST exhibit behavior consistent with the
   3467 Android SDK documentation on hardware acceleration [<a href="http://developer.android.com/guide/topics/graphics/hardware-accel.html">Resources, 65</a>].</p>
   3468 
   3469 <p>Android includes a TextureView object that lets developers directly integrate
   3470 hardware-accelerated OpenGL ES textures as rendering targets in a UI hierarchy.
   3471 Device implementations MUST support the TextureView API, and MUST exhibit
   3472 consistent behavior with the upstream Android implementation.</p>
   3473 
   3474 <p>Android includes support for EGL_ANDROID_RECORDABLE, an EGLConfig attribute
   3475 that indicates whether the EGLConfig supports rendering to an ANativeWindow
   3476 that records images to a video. Device implementations MUST support
   3477 EGL_ANDROID_RECORDABLE extension [<a href="https://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt">Resources, 66</a>].</p>
   3478 
   3479 <h3 id=7_1_5_legacy_application_compatibility_mode>7.1.5. Legacy Application Compatibility Mode</h3>
   3480 
   3481 
   3482 <p>Android specifies a "compatibility mode" in which the framework operates in a
   3483 'normal' screen size equivalent (320dp width) mode for the benefit of legacy
   3484 applications not developed for old versions of Android that pre-date
   3485 screen-size independence. Device implementations MUST include support for
   3486 legacy application compatibility mode as implemented by the upstream Android
   3487 open source code. That is, device implementations MUST NOT alter the triggers
   3488 or thresholds at which compatibility mode is activated, and MUST NOT alter the
   3489 behavior of the compatibility mode itself.</p>
   3490 
   3491 <h3 id=7_1_6_screen_technology>7.1.6. Screen Technology</h3>
   3492 
   3493 
   3494 <p>The Android platform includes APIs that allow applications to render rich
   3495 graphics to the display. Devices MUST support all of these APIs as defined by
   3496 the Android SDK unless specifically allowed in this document. </p>
   3497 
   3498 <ul>
   3499   <li> Devices MUST support displays capable of rendering 16-bit color graphics and
   3500 SHOULD support displays capable of 24-bit color graphics.
   3501   <li> Devices MUST support displays capable of rendering animations.
   3502   <li> The display technology used MUST have a pixel aspect ratio (PAR) between 0.9
   3503 and 1.15. That is, the pixel aspect ratio MUST be near square (1.0) with a 10 ~
   3504 15% tolerance.
   3505 </ul>
   3506 
   3507 <h3 id=7_1_7_external_displays>7.1.7. External Displays</h3>
   3508 
   3509 
   3510 <p>Android includes support for secondary display to enable media sharing
   3511 capabilities and developer APIs for accessing external displays. If a device
   3512 supports an external display either via a wired, wireless, or an embedded
   3513 additional display connection then the device implementation MUST implement the
   3514 display manager API as described in the Android SDK documentation [<a href="http://developer.android.com/reference/android/hardware/display/DisplayManager.html">Resources, 67</a>].</p>
   3515 
   3516 <h2 id=7_2_input_devices>7.2. Input Devices</h2>
   3517 
   3518 
   3519 <h3 id=7_2_1_keyboard>7.2.1. Keyboard</h3>
   3520 
   3521 <table>
   3522  <tr>
   3523     <td class="tab2"></td>
   3524     <td>
   3525 <p>Android Watch devices MAY but other type of device implementations MUST
   3526 implement a soft keyboard.</p>
   3527 </td>
   3528  </tr>
   3529 </table>
   3530 
   3531 
   3532 <p>Device implementations:</p>
   3533 
   3534 <ul>
   3535   <li> MUST include support for the Input Management Framework (which allows
   3536 third-party developers to create Input Method Editorsi.e. soft keyboard) as
   3537 detailed at <a href="http://developer.android.com">http://developer.android.com</a>
   3538   <li> MUST provide at least one soft keyboard implementation (regardless of whether a
   3539 hard keyboard is present) except for Android Watch devices where the screen
   3540 size makes it less reasonable to have a soft keyboard
   3541   <li> MAY include additional soft keyboard implementations
   3542   <li> MAY include a hardware keyboard
   3543   <li> MUST NOT include a hardware keyboard that does not match one of the formats
   3544 specified in android.content.res.Configuration.keyboard [<a href="http://developer.android.com/reference/android/content/res/Configuration.html">Resources, 68</a>] (QWERTY or 12-key)
   3545 </ul>
   3546 
   3547 <h3 id=7_2_2_non-touch_navigation>7.2.2. Non-touch Navigation</h3>
   3548 
   3549 <table>
   3550  <tr>
   3551     <td class="tab2"></td>
   3552     <td>
   3553 <p>Android Television devices MUST support D-pad.</p>
   3554 </td>
   3555  </tr>
   3556 </table>
   3557 
   3558 
   3559 <p>Device implementations:</p>
   3560 
   3561 <ul>
   3562   <li> MAY omit a non-touch navigation option (trackball, d-pad, or wheel) if the
   3563 device implementation is not an Android Television device
   3564   <li> MUST report the correct value for android.content.res.Configuration.navigation
   3565 [<a href="http://developer.android.com/reference/android/content/res/Configuration.html">Resources, 68</a>]
   3566   <li> MUST provide a reasonable alternative user interface mechanism for the
   3567 selection and editing of text, compatible with Input Management Engines. The
   3568 upstream Android open source implementation includes a selection mechanism
   3569 suitable for use with devices that lack non-touch navigation inputs.
   3570 </ul>
   3571 
   3572 <h3 id=7_2_3_navigation_keys>7.2.3. Navigation Keys</h3>
   3573 
   3574 <table>
   3575  <tr>
   3576     <td class="tab2"></td>
   3577     <td>
   3578 <p>The availability and visibility requirement of the Home, Recents, and Back
   3579 functions differ between device types as described in this section.</p>
   3580 </td>
   3581  </tr>
   3582 </table>
   3583 
   3584 
   3585 <p>The Home, Recents, and Back functions (mapped to the key events KEYCODE_HOME,
   3586 KEYCODE_APP_SWITCH, KEYCODE_BACK, respectively) are essential to the Android
   3587 navigation paradigm and therefore;</p>
   3588 
   3589 <ul>
   3590   <li> Android Handheld device implementations MUST provide the Home, Recents, and
   3591 Back functions. 
   3592   <li> Android Television device implementations MUST provide the Home and Back
   3593 functions.
   3594   <li> Android Watch device implementations MUST have the Home function available to
   3595 the user, and the Back function except for when it is in UI_MODE_TYPE_WATCH.
   3596   <li> All other types of device implementations MUST provide the Home and Back
   3597 functions.
   3598 </ul>
   3599 
   3600 <p>These functions MAY be implemented via dedicated physical buttons (such as
   3601 mechanical or capacitive touch buttons), or MAY be implemented using dedicated
   3602 software keys on a distinct portion of the screen, gestures, touch panel, etc.
   3603 Android supports both implementations. All of these functions MUST be
   3604 accessible with a single action (e.g. tap, double-click or gesture) when
   3605 visible.</p>
   3606 
   3607 <p>Recents function, if provided, MUST have a visible button or icon unless hidden
   3608 together with other navigation functions in full-screen mode. This does not
   3609 apply to devices upgrading from earlier Android versions that have physical
   3610 buttons for navigation and no recents key.</p>
   3611 
   3612 <p> The Home and Back functions, if provided, MUST each have a visible button or
   3613 icon unless hidden together with other navigation functions in full-screen mode
   3614 or when the uiMode UI_MODE_TYPE_MASK is set to UI_MODE_TYPE_WATCH.</p>
   3615 
   3616 <p>The Menu function is deprecated in favor of action bar since Android 4.0.
   3617 Therefore the new device implementations shipping with Android 5.0 MUST NOT
   3618 implement a dedicated physical button for the Menu function. Older device
   3619 implementations SHOULD NOT implement a dedicated physical button for the Menu
   3620 function, but if the physical Menu button is implemented and the device is
   3621 running applications with targetSdkVersion > 10, the device implementation:</p>
   3622 
   3623 <ul>
   3624   <li> MUST display the action overflow button on the action bar when it is visible
   3625 and the resulting action overflow menu popup is not empty. For a device
   3626 implementation launched before Android 4.4 but upgrading to Android 5.0, this
   3627 is RECOMMENDED.
   3628   <li> MUST NOT modify the position of the action overflow popup displayed by
   3629 selecting the overflow button in the action bar
   3630   <li> MAY render the action overflow popup at a modified position on the screen when
   3631 it is displayed by selecting the physical menu button
   3632 </ul>
   3633 
   3634 <p>For backwards compatibility, device implementations MUST make the Menu function
   3635 available to applications when targetSdkVersion <= 10, either by a physical
   3636 button, a software key, or gestures. This Menu function should be presented
   3637 unless hidden together with other navigation functions.</p>
   3638 
   3639 <p>Android supports Assist action [<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST">Resources, 69</a>]. Android device implementations except for Android Watch devices MUST make
   3640 the Assist action available to the user at all times when running applications.
   3641 The Assist action SHOULD be implemented as a long-press on the Home button or a
   3642 swipe-up gesture on the software Home key. This function MAY be implemented via
   3643 another physical button, software key, or gesture, but MUST be accessible with
   3644 a single action (e.g. tap, double-click, or gesture) when other navigation keys
   3645 are visible.</p>
   3646 
   3647 <p>Device implementations MAY use a distinct portion of the screen to display the
   3648 navigation keys, but if so, MUST meet these requirements:</p>
   3649 
   3650 <ul>
   3651   <li> Device implementation navigation keys MUST use a distinct portion of the
   3652 screen, not available to applications, and MUST NOT obscure or otherwise
   3653 interfere with the portion of the screen available to applications.
   3654   <li> Device implementations MUST make available a portion of the display to
   3655 applications that meets the requirements defined in <a href="#heading=h.mrv5xyps1ba8">section 7.1.1</a>.
   3656   <li> Device implementations MUST display the navigation keys when applications do
   3657 not specify a system UI mode, or specify SYSTEM_UI_FLAG_VISIBLE.
   3658   <li> Device implementations MUST present the navigation keys in an unobtrusive "low
   3659 profile" (eg. dimmed) mode when applications specify
   3660 SYSTEM_UI_FLAG_LOW_PROFILE.
   3661   <li> Device implementations MUST hide the navigation keys when applications specify
   3662 SYSTEM_UI_FLAG_HIDE_NAVIGATION.
   3663 </ul>
   3664 
   3665 <h3 id=7_2_4_touchscreen_input>7.2.4. Touchscreen Input</h3>
   3666 
   3667 <table>
   3668  <tr>
   3669     <td class="tab2"></td>
   3670     <td>
   3671 <p>Android Handhelds and Watch Devices MUST support touchscreen input.</p>
   3672 </td>
   3673  </tr>
   3674 </table>
   3675 
   3676 
   3677 <p>Device implementations SHOULD have a pointer input system of some kind (either
   3678 mouse-like or touch). However, if a device implementation does not support a
   3679 pointer input system, it MUST NOT report the android.hardware.touchscreen or
   3680 android.hardware.faketouch feature constant. Device implementations that do
   3681 include a pointer input system:</p>
   3682 
   3683 <ul>
   3684   <li> SHOULD support fully independently tracked pointers, if the device input system
   3685 supports multiple pointers
   3686   <li> MUST report the value of android.content.res.Configuration.touchscreen [<a href="http://developer.android.com/reference/android/content/res/Configuration.html">Resources, 68</a>] corresponding to the type of the specific touchscreen on the device
   3687 </ul>
   3688 
   3689 <p>Android includes support for a variety of touchscreens, touch pads, and fake
   3690 touch input devices. Touchscreen based device implementations are associated
   3691 with a display [<a href="http://source.android.com/devices/tech/input/touch-devices.html">Resources, 70</a>] such that the user has the impression of directly manipulating items on
   3692 screen. Since the user is directly touching the screen, the system does not
   3693 require any additional affordances to indicate the objects being manipulated.
   3694 In contrast, a fake touch interface provides a user input system that
   3695 approximates a subset of touchscreen capabilities. For example, a mouse or
   3696 remote control that drives an on-screen cursor approximates touch, but requires
   3697 the user to first point or focus then click. Numerous input devices like the
   3698 mouse, trackpad, gyro-based air mouse, gyro-pointer, joystick, and multi-touch
   3699 trackpad can support fake touch interactions. Android 5.0 includes the feature
   3700 constant android.hardware.faketouch, which corresponds to a high-fidelity
   3701 non-touch (pointer-based) input device such as a mouse or trackpad that can
   3702 adequately emulate touch-based input (including basic gesture support), and
   3703 indicates that the device supports an emulated subset of touchscreen
   3704 functionality. Device implementations that declare the fake touch feature MUST
   3705 meet the fake touch requirements in <a href="#heading=h.7tz929qk2hjr">section 7.2.5</a>.</p>
   3706 
   3707 <p>Device implementations MUST report the correct feature corresponding to the
   3708 type of input used. Device implementations that include a touchscreen
   3709 (single-touch or better) MUST report the platform feature constant
   3710 android.hardware.touchscreen. Device implementations that report the platform
   3711 feature constant android.hardware.touchscreen MUST also report the platform
   3712 feature constant android.hardware.faketouch. Device implementations that do not
   3713 include a touchscreen (and rely on a pointer device only) MUST NOT report any
   3714 touchscreen feature, and MUST report only android.hardware.faketouch if they
   3715 meet the fake touch requirements in <a href="#heading=h.7tz929qk2hjr">section 7.2.5</a>.</p>
   3716 
   3717 <h3 id=7_2_5_fake_touch_input>7.2.5. Fake Touch Input</h3>
   3718 
   3719 
   3720 <p>Device implementations that declare support for android.hardware.faketouch:</p>
   3721 
   3722 <ul>
   3723   <li> MUST report the absolute X and Y screen positions of the pointer location and
   3724 display a visual pointer on the screen [<a href="http://developer.android.com/reference/android/view/MotionEvent.html">Resources, 71</a>]
   3725   <li> MUST report touch event with the action code that specifies the state change
   3726 that occurs on the pointer going down or up on the screen [<a href="http://developer.android.com/reference/android/view/MotionEvent.html">Resources, 71</a>]
   3727   <li> MUST support pointer down and up on an object on the screen, which allows users
   3728 to emulate tap on an object on the screen
   3729   <li> MUST support pointer down, pointer up, pointer down then pointer up in the same
   3730 place on an object on the screen within a time threshold, which allows users to
   3731 emulate double tap on an object on the screen [<a href="http://developer.android.com/reference/android/view/MotionEvent.html">Resources, 71</a>]
   3732   <li> MUST support pointer down on an arbitrary point on the screen, pointer move to
   3733 any other arbitrary point on the screen, followed by a pointer up, which allows
   3734 users to emulate a touch drag
   3735   <li> MUST support pointer down then allow users to quickly move the object to a
   3736 different position on the screen and then pointer up on the screen, which
   3737 allows users to fling an object on the screen
   3738 </ul>
   3739 
   3740 <p>Devices that declare support for android.hardware.faketouch.multitouch.distinct
   3741 MUST meet the requirements for faketouch above, and MUST also support distinct
   3742 tracking of two or more independent pointer inputs.</p>
   3743 
   3744 <h3 id=7_2_6_game_controller_support>7.2.6. Game Controller Support</h3>
   3745 
   3746 
   3747 <p>Android Television device implementations MUST support button mappings for game
   3748 controllers as listed below. The upstream Android implementation includes
   3749 implementation for game controllers that satisfies this requirement. </p>
   3750 
   3751 <h4 id=7_2_6_1_button_mappings>7.2.6.1. Button Mappings</h4>
   3752 
   3753 
   3754 <p>Android Television device implementations MUST support the following key
   3755 mappings:</p>
   3756 <table>
   3757  <tr>
   3758     <td class="tab0">
   3759 <p><strong>Button</strong></p>
   3760 </td>
   3761     <td class="tab0">
   3762 <p><strong>HID Usage</strong>2</p>
   3763 </td>
   3764     <td class="tab0">
   3765 <p><strong>Android Button</strong></p>
   3766 </td>
   3767  </tr>
   3768  <tr>
   3769     <td>
   3770 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_A">A</a>1</p>
   3771 </td>
   3772     <td>
   3773 <p>0x09 0x0001</p>
   3774 </td>
   3775     <td>
   3776 <p>KEYCODE_BUTTON_A (96)</p>
   3777 </td>
   3778  </tr>
   3779  <tr>
   3780     <td>
   3781 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_B">B</a>1</p>
   3782 </td>
   3783     <td>
   3784 <p>0x09 0x0002</p>
   3785 </td>
   3786     <td>
   3787 <p>KEYCODE_BUTTON_B (97)</p>
   3788 </td>
   3789  </tr>
   3790  <tr>
   3791     <td>
   3792 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_X">X</a>1</p>
   3793 </td>
   3794     <td>
   3795 <p>0x09 0x0004</p>
   3796 </td>
   3797     <td>
   3798 <p>KEYCODE_BUTTON_X (99)</p>
   3799 </td>
   3800  </tr>
   3801  <tr>
   3802     <td>
   3803 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_Y">Y</a>1</p>
   3804 </td>
   3805     <td>
   3806 <p>0x09 0x0005</p>
   3807 </td>
   3808     <td>
   3809 <p>KEYCODE_BUTTON_Y (100)</p>
   3810 </td>
   3811  </tr>
   3812  <tr>
   3813     <td>
   3814 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_DPAD_UP">D-pad up</a>1</p>
   3815 
   3816 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_DPAD_DOWN">D-pad down</a>1</p>
   3817 </td>
   3818     <td>
   3819 <p>0x01 0x00393</p>
   3820 </td>
   3821     <td>
   3822 <p><a href="http://developer.android.com/reference/android/view/MotionEvent.html#AXIS_HAT_Y">AXIS_HAT_Y</a>4</p>
   3823 </td>
   3824  </tr>
   3825  <tr>
   3826     <td>
   3827 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_DPAD_LEFT">D-pad left</a>1</p>
   3828 
   3829 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_DPAD_RIGHT">D-pad right</a>1</p>
   3830 </td>
   3831     <td>
   3832 <p>0x01 0x00393</p>
   3833 </td>
   3834     <td>
   3835 <p><a href="http://developer.android.com/reference/android/view/MotionEvent.html#AXIS_HAT_X">AXIS_HAT_X4 </a></p>
   3836 </td>
   3837  </tr>
   3838  <tr>
   3839     <td>
   3840 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_L1">Left shoulder button</a>1</p>
   3841 </td>
   3842     <td>
   3843 <p>0x09 0x0007</p>
   3844 </td>
   3845     <td>
   3846 <p>KEYCODE_BUTTON_L1 (102)</p>
   3847 </td>
   3848  </tr>
   3849  <tr>
   3850     <td>
   3851 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_R1">Right shoulder button</a>1</p>
   3852 </td>
   3853     <td>
   3854 <p>0x09 0x0008</p>
   3855 </td>
   3856     <td>
   3857 <p>KEYCODE_BUTTON_R1 (103)</p>
   3858 </td>
   3859  </tr>
   3860  <tr>
   3861     <td>
   3862 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_THUMBL">Left stick click</a>1</p>
   3863 </td>
   3864     <td>
   3865 <p>0x09 0x000E</p>
   3866 </td>
   3867     <td>
   3868 <p>KEYCODE_BUTTON_THUMBL (106)</p>
   3869 </td>
   3870  </tr>
   3871  <tr>
   3872     <td>
   3873 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BUTTON_THUMBR">Right stick click</a>1</p>
   3874 </td>
   3875     <td>
   3876 <p>0x09 0x000F</p>
   3877 </td>
   3878     <td>
   3879 <p>KEYCODE_BUTTON_THUMBR (107)</p>
   3880 </td>
   3881  </tr>
   3882  <tr>
   3883     <td>
   3884 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME">Home</a>1</p>
   3885 </td>
   3886     <td>
   3887 <p>0x0c 0x0223</p>
   3888 </td>
   3889     <td>
   3890 <p>KEYCODE_HOME (3)</p>
   3891 </td>
   3892  </tr>
   3893  <tr>
   3894     <td>
   3895 <p><a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_BACK">Back</a>1</p>
   3896 </td>
   3897     <td>
   3898 <p>0x0c 0x0224</p>
   3899 </td>
   3900     <td>
   3901 <p>KEYCODE_BACK (4)</p>
   3902 </td>
   3903  </tr>
   3904 </table>
   3905 
   3906 
   3907 <p>1 [<a href="http://developer.android.com/reference/android/view/KeyEvent.html">Resources, 72</a>]</p>
   3908 
   3909 <p>2 The above HID usages must be declared within a Game pad CA (0x01 0x0005).</p>
   3910 
   3911 <p>3 This usage must have a Logical Minimum of 0, a Logical Maximum of 7, a
   3912 Physical Minimum of 0, a Physical Maximum of 315, Units in Degrees, and a
   3913 Report Size of 4. The logical value is defined to be the clockwise rotation
   3914 away from the vertical axis; for example, a logical value of 0 represents no
   3915 rotation and the up button being pressed, while a logical value of 1 represents
   3916 a rotation of 45 degrees and both the up and left keys being pressed.</p>
   3917 
   3918 <p>4 [<a href="http://developer.android.com/reference/android/view/MotionEvent.html">Resources, 71</a>]</p>
   3919 <table>
   3920  <tr>
   3921     <td class="tab0">
   3922 <p><strong>Analog Controls</strong>1</p>
   3923 </td>
   3924     <td class="tab0">
   3925 <p><strong>HID Usage</strong></p>
   3926 </td>
   3927     <td class="tab0">
   3928 <p><strong>Android Button</strong></p>
   3929 </td>
   3930  </tr>
   3931  <tr>
   3932     <td>
   3933 <p><a href="http://developer.android.com/reference/android/view/MotionEvent.html#AXIS_LTRIGGER">Left Trigger</a></p>
   3934 </td>
   3935     <td>
   3936 <p>0x02 0x00C5</p>
   3937 </td>
   3938     <td>
   3939 <p>AXIS_LTRIGGER </p>
   3940 </td>
   3941  </tr>
   3942  <tr>
   3943     <td>
   3944 <p><a href="http://developer.android.com/reference/android/view/MotionEvent.html#AXIS_THROTTLE">Right Trigger</a></p>
   3945 </td>
   3946     <td>
   3947 <p>0x02 0x00C4</p>
   3948 </td>
   3949     <td>
   3950 <p>AXIS_RTRIGGER </p>
   3951 </td>
   3952  </tr>
   3953  <tr>
   3954     <td>
   3955 <p><a href="http://developer.android.com/reference/android/view/MotionEvent.html#AXIS_Y">Left Joystick</a></p>
   3956 </td>
   3957     <td>
   3958 <p>0x01 0x0030</p>
   3959 
   3960 <p>0x01 0x0031</p>
   3961 </td>
   3962     <td>
   3963 <p>AXIS_X</p>
   3964 
   3965 <p>AXIS_Y</p>
   3966 </td>
   3967  </tr>
   3968  <tr>
   3969     <td>
   3970 <p><a href="http://developer.android.com/reference/android/view/MotionEvent.html#AXIS_Z">Right Joystick</a></p>
   3971 </td>
   3972     <td>
   3973 <p>0x01 0x0032</p>
   3974 
   3975 <p>0x01 0x0035</p>
   3976 </td>
   3977     <td>
   3978 <p>AXIS_Z</p>
   3979 
   3980 <p>AXIS_RZ</p>
   3981 </td>
   3982  </tr>
   3983 </table>
   3984 
   3985 
   3986 <p>1 [<a href="http://developer.android.com/reference/android/view/MotionEvent.html">Resources, 71</a>]</p>
   3987 
   3988 <h3 id=7_2_7_remote_control>7.2.7. Remote Control</h3>
   3989 
   3990 
   3991 <p>Android Television device implementations SHOULD provide a remote control to
   3992 allow users to access the TV interface. The remote control MAY be a physical
   3993 remote or can be a software-based remote that is accessible from a mobile phone
   3994 or tablet. The remote control MUST meet the requirements defined below.</p>
   3995 
   3996 <ul>
   3997   <li> <strong>Search affordance</strong>Device implementations MUST fire KEYCODE_SEARCH when the user invokes voice
   3998 search either on the physical or software-based remote.
   3999   <li> <strong>Navigation</strong>All Android Television remotes MUST include Back, Home, and Select buttons and
   4000 support for D-pad events [<a href="http://developer.android.com/reference/android/view/KeyEvent.html">Resources, 72</a>].
   4001 </ul>
   4002 
   4003 <h2 id=7_3_sensors>7.3. Sensors</h2>
   4004 
   4005 
   4006 <p>Android includes APIs for accessing a variety of sensor types. Devices
   4007 implementations generally MAY omit these sensors, as provided for in the
   4008 following subsections. If a device includes a particular sensor type that has a
   4009 corresponding API for third-party developers, the device implementation MUST
   4010 implement that API as described in the Android SDK documentation and the
   4011 Android Open Source documentation on sensors [<a href="http://source.android.com/devices/sensors">Resources, 73</a>]. For example, device implementations:</p>
   4012 
   4013 <ul>
   4014   <li> MUST accurately report the presence or absence of sensors per the
   4015 android.content.pm.PackageManager class [<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">Resources, 53]</a>
   4016   <li> MUST return an accurate list of supported sensors via the
   4017 SensorManager.getSensorList() and similar methods
   4018   <li> MUST behave reasonably for all other sensor APIs (for example, by returning
   4019 true or false as appropriate when applications attempt to register listeners,
   4020 not calling sensor listeners when the corresponding sensors are not present;
   4021 etc.)
   4022   <li> MUST report all sensor measurements using the relevant International System of
   4023 Units (metric) values for each sensor type as defined in the Android SDK
   4024 documentation [<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">Resources, 74</a>]
   4025   <li> SHOULD report the event time in nanoseconds as defined in the Android SDK
   4026 documentation, representing the time the event happened and synchronized with
   4027 the SystemClock.elapsedRealtimeNano() clock. Existing and new Android devices
   4028 are <strong>very strongly encouraged</strong> to meet these requirement so they will be able to upgrade to the future
   4029 platform releases where this might become a REQUIRED component. The
   4030 synchronization error SHOULD be below 100 milliseconds [<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp">Resources, 75</a>].
   4031 </ul>
   4032 
   4033 <p>The list above is not comprehensive; the documented behavior of the Android SDK
   4034 and the Android Open Source Documentations on Sensors [<a href="http://source.android.com/devices/sensors">Resources, 73</a>] is to be considered authoritative.</p>
   4035 
   4036 <p>Some sensor types are composite, meaning they can be derived from data provided
   4037 by one or more other sensors. (Examples include the orientation sensor, and the
   4038 linear acceleration sensor.) Device implementations SHOULD implement these
   4039 sensor types, when they include the prerequisite physical sensors as described
   4040 in [<a href="http://source.android.com/devices/sensors/composite_sensors.html">Resources, 76</a>]. If a device implementation includes a composite sensor it MUST implement the
   4041 sensor as described in the Android Open Source documentation on composite
   4042 sensors [<a href="http://source.android.com/devices/sensors/composite_sensors.html">Resources, 76</a>].</p>
   4043 
   4044 <p>Some Android sensor supports a "continuous" trigger mode, which returns data
   4045 continuously [<a href="http://source.android.com/devices/sensors/base_triggers.html#continuous">Resources, 77</a>]. For any API indicated by the Android SDK documentation to be a continuous
   4046 sensor, device implementations MUST continuously provide periodic data samples
   4047 that SHOULD have a jitter below 3%, where jitter is defined as the standard
   4048 deviation of the difference of the reported timestamp values between
   4049 consecutive events.</p>
   4050 
   4051 <p>Note that the device implementations MUST ensure that the sensor event stream
   4052 MUST NOT prevent the device CPU from entering a suspend state or waking up from
   4053 a suspend state.</p>
   4054 
   4055 <p>Finally, when several sensors are activated, the power consumption SHOULD NOT
   4056 exceed the sum of the individual sensors reported power consumption.</p>
   4057 
   4058 <h3 id=7_3_1_accelerometer>7.3.1. Accelerometer</h3>
   4059 
   4060 
   4061 <p>Device implementations SHOULD include a 3-axis accelerometer. Android Handheld
   4062 devices and Android Watch devices are strongly encouraged to include this
   4063 sensor. If a device implementation does include a 3-axis accelerometer, it:</p>
   4064 
   4065 <ul>
   4066   <li> MUST implement and report TYPE_ACCELEROMETER sensor [<a href="http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER">Resources, 78</a>]
   4067   <li> MUST be able to report events up to a frequency of at least 100 Hz and SHOULD
   4068 report events up to at least 200 Hz
   4069   <li> MUST comply with the Android sensor coordinate system as detailed in the
   4070 Android APIs [<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">Resources, 74</a>]
   4071   <li> MUST be capable of measuring from freefall up to four times the gravity (4g) or
   4072 more on any axis
   4073   <li> MUST have a resolution of at least 8-bits and SHOULD have a resolution of at
   4074 least 16-bits
   4075   <li> SHOULD be calibrated while in use if the characteristics changes over the life
   4076 cycle and compensated, and preserve the compensation parameters between device
   4077 reboots
   4078   <li> SHOULD be temperature compensated
   4079   <li> MUST have a standard deviation no greater than 0.05 m/s^, where the standard
   4080 deviation should be calculated on a per axis basis on samples collected over a
   4081 period of at least 3 seconds at the fastest sampling rate
   4082   <li> SHOULD implement the TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR,
   4083 TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER composite sensors as described in the
   4084 Android SDK document. Existing and new Android devices are <strong>very strongly encouraged</strong> to implement the TYPE_SIGNIFICANT_MOTION composite sensor. If any of these
   4085 sensors are implemented, the sum of their power consumption MUST always be less
   4086 than 4 mW and SHOULD each be below 2 mW and 0.5 mW for when the device is in a
   4087 dynamic or static condition.
   4088   <li> If a gyroscope sensor is included, MUST implement the TYPE_GRAVITY and
   4089 TYPE_LINEAR_ACCELERATION composite sensors and SHOULD implement the
   4090 TYPE_GAME_ROTATION_VECTOR composite sensor. Existing and new Android devices
   4091 are strongly encouraged to implement the TYPE_GAME_ROTATION_VECTOR sensor.
   4092   <li> SHOULD implement a TYPE_ROTATION_VECTOR composite sensor, if a gyroscope sensor
   4093 and a magnetometer sensor is also included
   4094 </ul>
   4095 
   4096 <h3 id=7_3_2_magnetometer>7.3.2. Magnetometer</h3>
   4097 
   4098 
   4099 <p>Device implementations SHOULD include a 3-axis magnetometer (compass). If a
   4100 device does include a 3-axis magnetometer, it:</p>
   4101 
   4102 <ul>
   4103   <li> MUST implement the TYPE_MAGNETIC_FIELD sensor and SHOULD also implement
   4104 TYPE_MAGNETIC_FIELD_UNCALIBRATED sensor. Existing and new Android devices are
   4105 strongly encouraged to implement the TYPE_MAGNETIC_FIELD_UNCALIBRATED sensor.
   4106   <li> MUST be able to report events up to a frequency of at least 10 Hz and SHOULD
   4107 report events up to at least 50 Hz
   4108   <li> MUST comply with the Android sensor coordinate system as detailed in the
   4109 Android APIs [<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">Resources, 74</a>]
   4110   <li> MUST be capable of measuring between -900 T and +900 T on each axis before
   4111 saturating
   4112   <li> MUST have a hard iron offset value less than 700 T and SHOULD have a value
   4113 below 200 T, by placing the magnetometer far from dynamic (current-induced)
   4114 and static (magnet-induced) magnetic fields
   4115   <li> MUST have a resolution equal or denser than 0.6 T and SHOULD have a resolution
   4116 equal or denser than 0.2 T
   4117   <li> SHOULD be temperature compensated
   4118   <li> MUST support online calibration and compensation of the hard iron bias, and
   4119 preserve the compensation parameters between device reboots
   4120   <li> MUST have the soft iron compensation appliedthe calibration can be done either
   4121 while in use or during the production of the device
   4122   <li> SHOULD have a standard deviation, calculated on a per axis basis on samples
   4123 collected over a period of at least 3 seconds at the fastest sampling rate, no
   4124 greater than 0.5 T
   4125   <li> SHOULD implement a TYPE_ROTATION_VECTOR composite sensor, if an accelerometer
   4126 sensor and a gyroscope sensor is also included
   4127   <li> MAY implement the TYPE_GEOMAGNETIC_ROTATION_VECTOR sensor if an accelerometer
   4128 sensor is also implemented. However if implemented, it MUST consume less than
   4129 10 mW and SHOULD consume less than 3 mW when the sensor is registered for batch
   4130 mode at 10 Hz. 
   4131 </ul>
   4132 
   4133 <h3 id=7_3_3_gps>7.3.3. GPS</h3>
   4134 
   4135 
   4136 <p>Device implementations SHOULD include a GPS receiver. If a device
   4137 implementation does include a GPS receiver, it SHOULD include some form of
   4138 "assisted GPS" technique to minimize GPS lock-on time.</p>
   4139 
   4140 <h3 id=7_3_4_gyroscope>7.3.4. Gyroscope</h3>
   4141 
   4142 
   4143 <p>Device implementations SHOULD include a gyroscope (angular change sensor).
   4144 Devices SHOULD NOT include a gyroscope sensor unless a 3-axis accelerometer is
   4145 also included. If a device implementation includes a gyroscope, it:</p>
   4146 
   4147 <ul>
   4148   <li> MUST implement the TYPE_GYROSCOPE sensor and SHOULD also implement
   4149 TYPE_GYROSCOPE_UNCALIBRATED sensor. Existing and new Android devices are
   4150 strongly encouraged to implement the SENSOR_TYPE_GYROSCOPE_UNCALIBRATED sensor. 
   4151   <li> MUST be capable of measuring orientation changes up to 1,000 degrees per second
   4152   <li> MUST be able to report events up to a frequency of at least 100 Hz and SHOULD
   4153 report events up to at least 200 Hz
   4154   <li> MUST have a resolution of 12-bits or more and SHOULD have a resolution of
   4155 16-bits or more
   4156   <li> MUST be temperature compensated
   4157   <li> MUST be calibrated and compensated while in use, and preserve the compensation
   4158 parameters between device reboots
   4159   <li> MUST have a variance no greater than 1e-7 rad^2 / s^2 per Hz (variance per Hz,
   4160 or rad^2 / s). The variance is allowed to vary with the sampling rate, but must
   4161 be constrained by this value. In other words, if you measure the variance of
   4162 the gyro at 1 Hz sampling rate it should be no greater than 1e-7 rad^2/s^2.
   4163   <li> SHOULD implement a TYPE_ROTATION_VECTOR composite sensor, if an accelerometer
   4164 sensor and a magnetometer sensor is also included
   4165   <li> If an accelerometer sensor is included, MUST implement the TYPE_GRAVITY and
   4166 TYPE_LINEAR_ACCELERATION composite sensors and SHOULD implement the
   4167 TYPE_GAME_ROTATION_VECTOR composite sensor. Existing and new Android devices
   4168 are strongly encouraged to implement the TYPE_GAME_ROTATION_VECTOR sensor.
   4169 </ul>
   4170 
   4171 <h3 id=7_3_5_barometer>7.3.5. Barometer</h3>
   4172 
   4173 
   4174 <p>Device implementations SHOULD include a barometer (ambient air pressure
   4175 sensor). If a device implementation includes a barometer, it:</p>
   4176 
   4177 <ul>
   4178   <li> MUST implement and report TYPE_PRESSURE sensor
   4179   <li> MUST be able to deliver events at 5 Hz or greater
   4180   <li> MUST have adequate precision to enable estimating altitude
   4181   <li> MUST be temperature compensated
   4182 </ul>
   4183 
   4184 <h3 id=7_3_6_thermometer>7.3.6. Thermometer</h3>
   4185 
   4186 
   4187 <p>Device implementations MAY include an ambient thermometer (temperature sensor).
   4188 If present, it MUST be defined as SENSOR_TYPE_AMBIENT_TEMPERATURE and it MUST
   4189 measure the ambient (room) temperature in degrees Celsius.</p>
   4190 
   4191 <p>Device implementations MAY but SHOULD NOT include a CPU temperature sensor. If
   4192 present, it MUST be defined as SENSOR_TYPE_TEMPERATURE, it MUST measure the
   4193 temperature of the device CPU, and it MUST NOT measure any other temperature.
   4194 Note the SENSOR_TYPE_TEMPERATURE sensor type was deprecated in Android 4.0.</p>
   4195 
   4196 <h3 id=7_3_7_photometer>7.3.7. Photometer</h3>
   4197 
   4198 
   4199 <p>Device implementations MAY include a photometer (ambient light sensor).</p>
   4200 
   4201 <h3 id=7_3_8_proximity_sensor>7.3.8. Proximity Sensor</h3>
   4202 
   4203 
   4204 <p>Device implementations MAY include a proximity sensor. Devices that can make a
   4205 voice call and indicate any value other than PHONE_TYPE_NONE in getPhoneType
   4206 SHOULD include a proximity sensor. If a device implementation does include a
   4207 proximity sensor, it:</p>
   4208 
   4209 <ul>
   4210   <li> MUST measure the proximity of an object in the same direction as the screen.
   4211 That is, the proximity sensor MUST be oriented to detect objects close to the
   4212 screen, as the primary intent of this sensor type is to detect a phone in use
   4213 by the user. If a device implementation includes a proximity sensor with any
   4214 other orientation, it MUST NOT be accessible through this API.
   4215   <li> MUST have 1-bit of accuracy or more
   4216 </ul>
   4217 
   4218 <h2 id=7_4_data_connectivity>7.4. Data Connectivity</h2>
   4219 
   4220 
   4221 <h3 id=7_4_1_telephony>7.4.1. Telephony</h3>
   4222 
   4223 
   4224 <p>"Telephony" as used by the Android APIs and this document refers specifically
   4225 to hardware related to placing voice calls and sending SMS messages via a GSM
   4226 or CDMA network. While these voice calls may or may not be packet-switched,
   4227 they are for the purposes of Android considered independent of any data
   4228 connectivity that may be implemented using the same network. In other words,
   4229 the Android "telephony" functionality and APIs refer specifically to voice
   4230 calls and SMS. For instance, device implementations that cannot place calls or
   4231 send/receive SMS messages MUST NOT report the android.hardware.telephony
   4232 feature or any subfeatures, regardless of whether they use a cellular network
   4233 for data connectivity.</p>
   4234 
   4235 <p>Android MAY be used on devices that do not include telephony hardware. That is,
   4236 Android is compatible with devices that are not phones. However, if a device
   4237 implementation does include GSM or CDMA telephony, it MUST implement full
   4238 support for the API for that technology. Device implementations that do not
   4239 include telephony hardware MUST implement the full APIs as no-ops.</p>
   4240 
   4241 <h3 id=7_4_2_ieee_802_11_wi-fi>7.4.2. IEEE 802.11 (Wi-Fi)</h3>
   4242 
   4243 <table>
   4244  <tr>
   4245     <td class="tab2"></td>
   4246     <td>
   4247 <p>Android Television device implementations MUST include Wi-Fi support. </p>
   4248 </td>
   4249  </tr>
   4250 </table>
   4251 
   4252 
   4253 <p>Android Television device implementations MUST include support for one or more
   4254 forms of 802.11 (b/g/a/n, etc.) and other types of Android device
   4255 implementation SHOULD include support for one or more forms of 802.11. If a
   4256 device implementation does include support for 802.11 and exposes the
   4257 functionality to a third-party application, it MUST implement the corresponding
   4258 Android API and:</p>
   4259 
   4260 <ul>
   4261   <li> MUST report the hardware feature flag android.hardware.wifi
   4262   <li> MUST implement the multicast API as described in the SDK documentation [<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html">Resources, 79</a>]
   4263   <li> MUST support multicast DNS (mDNS) and MUST NOT filter mDNS packets
   4264 (224.0.0.251) at any time of operation including when the screen is not in an
   4265 active state
   4266 </ul>
   4267 
   4268 <h4 id=7_4_2_1_wi-fi_direct>7.4.2.1. Wi-Fi Direct</h4>
   4269 
   4270 
   4271 <p>Device implementations SHOULD include support for Wi-Fi Direct (Wi-Fi
   4272 peer-to-peer). If a device implementation does include support for Wi-Fi
   4273 Direct, it MUST implement the corresponding Android API as described in the SDK
   4274 documentation [<a href="http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html">Resources, 80</a>]. If a device implementation includes support for Wi-Fi Direct, then it:</p>
   4275 
   4276 <ul>
   4277   <li> MUST report the hardware feature android.hardware.wifi.direct
   4278   <li> MUST support regular Wi-Fi operation
   4279   <li> SHOULD support concurrent Wi-Fi and Wi-Fi Direct operation
   4280 </ul>
   4281 
   4282 <h4 id=7_4_2_2_wi-fi_tunneled_direct_link_setup>7.4.2.2. Wi-Fi Tunneled Direct Link Setup</h4>
   4283 
   4284 <table>
   4285  <tr>
   4286     <td class="tab2"></td>
   4287     <td>
   4288 <p>Android Television device implementations MUST include support for Wi-Fi
   4289 Tunneled Direct Link Setup (TDLS).</p>
   4290 </td>
   4291  </tr>
   4292 </table>
   4293 
   4294 
   4295 <p>Android Television device implementations MUST include support for Wi-Fi
   4296 Tunneled Direct Link Setup (TDLS) and other types of Android device
   4297 implementations SHOULD include support for Wi-Fi TDLS as described in the
   4298 Android SDK Documentation [<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html">Resources, 81</a>]. If a device implementation does include support for TDLS and TDLS is enabled
   4299 by the WiFiManager API, the device:</p>
   4300 
   4301 <ul>
   4302   <li> SHOULD use TDLS only when it is possible AND beneficial
   4303   <li> SHOULD have some heuristic and NOT use TDLS when its performance might be worse
   4304 than going through the Wi-Fi access point
   4305 </ul>
   4306 
   4307 <h3 id=7_4_3_bluetooth>7.4.3. Bluetooth</h3>
   4308 
   4309 <table>
   4310  <tr>
   4311     <td class="tab2"></td>
   4312     <td>
   4313 <p>Android Television device implementations MUST support Bluetooth and Bluetooth
   4314 LE and Android Watch device implementations MUST support Bluetooth.</p>
   4315 </td>
   4316  </tr>
   4317 </table>
   4318 
   4319 
   4320 <p>Android includes support for Bluetooth and Bluetooth Low Energy [<a href="http://developer.android.com/reference/android/bluetooth/package-summary.html">Resources, 82</a>]. Device implementations that include support for Bluetooth and Bluetooth Low
   4321 Energy MUST declare the relevant platform features (android.hardware.bluetooth
   4322 and android.hardware.bluetooth_le respectively) and implement the platform
   4323 APIs. Device implementations SHOULD implement relevant Bluetooth profiles such
   4324 as A2DP, AVCP, OBEX, etc. as appropriate for the device. Android Television
   4325 device implementations MUST support Bluetooth and Bluetooth LE. </p>
   4326 
   4327 <p>Device implementations including support for Bluetooth Low Energy:</p>
   4328 
   4329 <ul>
   4330   <li> MUST declare the hardware feature android.hardware.bluetooth_le
   4331   <li> MUST enable the GATT (generic attribute profile) based Bluetooth APIs as
   4332 described in the SDK documentation and [<a href="http://developer.android.com/reference/android/bluetooth/package-summary.html">Resources, 82</a>]
   4333   <li> SHOULD support offloading of the filtering logic to the bluetooth chipset when
   4334 implementing the ScanFilter API [<a href="https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html">Resources, 83</a>], and MUST report the correct value of where the filtering logic is
   4335 implemented whenever queried via the
   4336 android.bluetooth.BluetoothAdapter.isOffloadedFilteringSupported() method
   4337   <li> SHOULD support offloading of the batched scanning to the bluetooth chipset, but
   4338 if not supported, MUST report false whenever queried via the
   4339 android.bluetooth.BluetoothAdapater.isOffloadedScanBatchingSupported() method.
   4340   <li> SHOULD support multi advertisement with at least 4 slots, but if not supported,
   4341 MUST report false whenever queried via the
   4342 android.bluetooth.BluetoothAdapter.isMultipleAdvertisementSupported() method
   4343 </ul>
   4344 
   4345 <h3 id=7_4_4_near-field_communications>7.4.4. Near-Field Communications</h3>
   4346 
   4347 
   4348 <p>Device implementations SHOULD include a transceiver and related hardware for
   4349 Near-Field Communications (NFC). If a device implementation does include NFC
   4350 hardware and plans to make it available to third-party apps, then it:</p>
   4351 
   4352 <ul>
   4353   <li> MUST report the android.hardware.nfc feature from the
   4354 android.content.pm.PackageManager.hasSystemFeature() method [<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">Resources, 53</a>]
   4355   <li> MUST be capable of reading and writing NDEF messages via the following NFC
   4356 standards:
   4357   <ul>
   4358     <li> MUST be capable of acting as an NFC Forum reader/writer (as defined by the NFC
   4359 Forum technical specification NFCForum-TS-DigitalProtocol-1.0) via the
   4360 following NFC standards:
   4361     <ul>
   4362       <li> NfcA (ISO14443-3A)
   4363       <li> NfcB (ISO14443-3B)
   4364       <li> NfcF (JIS 6319-4)
   4365       <li> IsoDep (ISO 14443-4)
   4366       <li> NFC Forum Tag Types 1, 2, 3, 4 (defined by the NFC Forum)
   4367     </ul>
   4368   <li> SHOULD be capable of reading and writing NDEF messages via the following NFC
   4369 standards. Note that while the NFC standards below are stated as SHOULD, the
   4370 Compatibility Definition for a future version is planned to change these to
   4371 MUST. These standards are optional in this version but will be required in
   4372 future versions. Existing and new devices that run this version of Android are <strong>very strongly encouraged</strong> to meet these requirements now so they will be able to upgrade to the future
   4373 platform releases.
   4374   <ul>
   4375     <li> NfcV (ISO 15693)
   4376   </ul>
   4377   <li> MUST be capable of transmitting and receiving data via the following
   4378 peer-to-peer standards and protocols:
   4379   <ul>
   4380     <li> ISO 18092
   4381     <li> LLCP 1.0 (defined by the NFC Forum)
   4382     <li> SDP 1.0 (defined by the NFC Forum)
   4383     <li> NDEF Push Protocol [<a href="http://static.googleusercontent.com/media/source.android.com/en/us/compatibility/ndef-push-protocol.pdf">Resources, 84</a>]
   4384     <li> SNEP 1.0 (defined by the NFC Forum)
   4385   </ul>
   4386   <li> MUST include support for Android Beam [<a href="http://developer.android.com/guide/topics/connectivity/nfc/nfc.html">Resources, 85</a>]:
   4387   <ul>
   4388     <li> MUST implement the SNEP default server. Valid NDEF messages received by the
   4389 default SNEP server MUST be dispatched to applications using the
   4390 android.nfc.ACTION_NDEF_DISCOVERED intent. Disabling Android Beam in settings
   4391 MUST NOT disable dispatch of incoming NDEF message.
   4392     <li> MUST honor the android.settings.NFCSHARING_SETTINGS intent to show NFC sharing
   4393 settings [<a href="http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS">Resources, 86</a>]
   4394     <li> MUST implement the NPP server. Messages received by the NPP server MUST be
   4395 processed the same way as the SNEP default server.
   4396     <li> MUST implement a SNEP client and attempt to send outbound P2P NDEF to the
   4397 default SNEP server when Android Beam is enabled. If no default SNEP server is
   4398 found then the client MUST attempt to send to an NPP server.
   4399     <li> MUST allow foreground activities to set the outbound P2P NDEF message using
   4400 android.nfc.NfcAdapter.setNdefPushMessage, and
   4401 android.nfc.NfcAdapter.setNdefPushMessageCallback, and
   4402 android.nfc.NfcAdapter.enableForegroundNdefPush
   4403     <li> SHOULD use a gesture or on-screen confirmation, such as 'Touch to Beam', before
   4404 sending outbound P2P NDEF messages
   4405     <li> SHOULD enable Android Beam by default and MUST be able to send and receive
   4406 using Android Beam, even when another proprietary NFC P2p mode is turned on
   4407     <li> MUST support NFC Connection handover to Bluetooth when the device supports
   4408 Bluetooth Object Push Profile. Device implementations MUST support connection
   4409 handover to Bluetooth when using android.nfc.NfcAdapter.setBeamPushUris, by
   4410 implementing the "Connection Handover version 1.2" [<a href="http://www.nfc-forum.org/specs/spec_list/#conn_handover">Resources, 87</a>] and "Bluetooth Secure Simple Pairing Using NFC version 1.0" [<a href="http://members.nfc-forum.org/apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf">Resources, 88</a>] specs from the NFC Forum. Such an implementation MUST implement the handover
   4411 LLCP service with service name "urn:nfc:sn:handover" for exchanging the
   4412 handover request/select records over NFC, and it MUST use the Bluetooth Object
   4413 Push Profile for the actual Bluetooth data transfer. For legacy reasons (to
   4414 remain compatible with Android 4.1 devices), the implementation SHOULD still
   4415 accept SNEP GET requests for exchanging the handover request/select records
   4416 over NFC. However an implementation itself SHOULD NOT send SNEP GET requests
   4417 for performing connection handover.
   4418   </ul>
   4419   <li> MUST poll for all supported technologies while in NFC discovery mode
   4420   <li> SHOULD be in NFC discovery mode while the device is awake with the screen
   4421 active and the lock-screen unlocked
   4422 </ul>
   4423 </ul>
   4424 
   4425 <p>(Note that publicly available links are not available for the JIS, ISO, and NFC
   4426 Forum specifications cited above.)</p>
   4427 
   4428 <p>Android 5.0 includes support for NFC Host Card Emulation (HCE) mode. If a
   4429 device implementation does include an NFC controller capable of HCE and
   4430 Application ID (AID) routing, then it:</p>
   4431 
   4432 <ul>
   4433   <li> MUST report the android.hardware.nfc.hce feature constant
   4434   <li> MUST support NFC HCE APIs as defined in the Android SDK [<a href="http://developer.android.com/guide/topics/connectivity/nfc/hce.html">Resources, 10</a>]
   4435 </ul>
   4436 
   4437 <p>Additionally, device implementations MAY include reader/writer support for the
   4438 following MIFARE technologies.</p>
   4439 
   4440 <ul>
   4441   <li> MIFARE Classic
   4442   <li> MIFARE Ultralight 
   4443   <li> NDEF on MIFARE Classic 
   4444 </ul>
   4445 
   4446 <p>Note that Android includes APIs for these MIFARE types. If a device
   4447 implementation supports MIFARE in the reader/writer role, it:</p>
   4448 
   4449 <ul>
   4450   <li> MUST implement the corresponding Android APIs as documented by the Android SDK
   4451   <li> MUST report the feature com.nxp.mifare from the
   4452 android.content.pm.PackageManager.hasSystemFeature() meth<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">od [Resources, 53]</a>. Note that this is not a standard Android feature and as such does not appear
   4453 as a constant on the PackageManager class.
   4454   <li> MUST NOT implement the corresponding Android APIs nor report the com.nxp.mifare
   4455 feature unless it also implements general NFC support as described in this
   4456 section
   4457 </ul>
   4458 
   4459 <p>If a device implementation does not include NFC hardware, it MUST NOT declare
   4460 the android.hardware.nfc feature from the
   4461 android.content.pm.PackageManager.hasSystemFeature() method [<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">Resources, 53]</a>, and MUST implement the Android NFC API as a no-op.</p>
   4462 
   4463 <p>As the classes android.nfc.NdefMessage and android.nfc.NdefRecord represent a
   4464 protocol-independent data representation format, device implementations MUST
   4465 implement these APIs even if they do not include support for NFC or declare the
   4466 android.hardware.nfc feature.</p>
   4467 
   4468 <h3 id=7_4_5_minimum_network_capability>7.4.5. Minimum Network Capability</h3>
   4469 
   4470 
   4471 <p>Device implementations MUST include support for one or more forms of data
   4472 networking. Specifically, device implementations MUST include support for at
   4473 least one data standard capable of 200Kbit/sec or greater. Examples of
   4474 technologies that satisfy this requirement include EDGE, HSPA, EV-DO, 802.11g,
   4475 Ethernet, Bluetooth PAN, etc.</p>
   4476 
   4477 <p>Device implementations where a physical networking standard (such as Ethernet)
   4478 is the primary data connection SHOULD also include support for at least one
   4479 common wireless data standard, such as 802.11 (Wi-Fi).</p>
   4480 
   4481 <p>Devices MAY implement more than one form of data connectivity.</p>
   4482 
   4483 <h3 id=7_4_6_sync_settings>7.4.6. Sync Settings</h3>
   4484 
   4485 
   4486 <p>Device implementations MUST have the master auto-sync setting on by default so
   4487 that the method getMasterSyncAutomatically() returns "true" [<a href="http://developer.android.com/reference/android/content/ContentResolver.html">Resources, 89</a>].</p>
   4488 
   4489 <h2 id=7_5_cameras>7.5. Cameras</h2>
   4490 
   4491 
   4492 <p>Device implementations SHOULD include a rear-facing camera and MAY include a
   4493 front-facing camera. A rear-facing camera is a camera located on the side of
   4494 the device opposite the display; that is, it images scenes on the far side of
   4495 the device, like a traditional camera. A front-facing camera is a camera
   4496 located on the same side of the device as the display; that is, a camera
   4497 typically used to image the user, such as for video conferencing and similar
   4498 applications.</p>
   4499 
   4500 <p>If a device implementation includes at least one camera, it SHOULD be possible
   4501 for an application to simultaneously allocate 3 bitmaps equal to the size of
   4502 the images produced by the largest-resolution camera sensor on the device.</p>
   4503 
   4504 <h3 id=7_5_1_rear-facing_camera>7.5.1. Rear-Facing Camera</h3>
   4505 
   4506 
   4507 <p>Device implementations SHOULD include a rear-facing camera. If a device
   4508 implementation includes at least one rear-facing camera, it:</p>
   4509 
   4510 <ul>
   4511   <li> MUST report the feature flag android.hardware.camera and
   4512 android.hardware.camera.any 
   4513   <li> MUST have a resolution of at least 2 megapixels
   4514   <li> SHOULD have either hardware auto-focus or software auto-focus implemented in
   4515 the camera driver (transparent to application software)
   4516   <li> MAY have fixed-focus or EDOF (extended depth of field) hardware
   4517   <li> MAY include a flash. If the Camera includes a flash, the flash lamp MUST NOT be
   4518 lit while an android.hardware.Camera.PreviewCallback instance has been
   4519 registered on a Camera preview surface, unless the application has explicitly
   4520 enabled the flash by enabling the FLASH_MODE_AUTO or FLASH_MODE_ON attributes
   4521 of a Camera.Parameters object. Note that this constraint does not apply to the
   4522 device's built-in system camera application, but only to third-party
   4523 applications using Camera.PreviewCallback.
   4524 </ul>
   4525 
   4526 <h3 id=7_5_2_front-facing_camera>7.5.2. Front-Facing Camera</h3>
   4527 
   4528 
   4529 <p>Device implementations MAY include a front-facing camera. If a device
   4530 implementation includes at least one front-facing camera, it:</p>
   4531 
   4532 <ul>
   4533   <li> MUST report the feature flag android.hardware.camera.any and
   4534 android.hardware.camera.front
   4535   <li> MUST have a resolution of at least VGA (640x480 pixels)
   4536   <li> MUST NOT use a front-facing camera as the default for the Camera API. The
   4537 camera API in Android has specific support for front-facing cameras and device
   4538 implementations MUST NOT configure the API to to treat a front-facing camera as
   4539 the default rear-facing camera, even if it is the only camera on the device.
   4540   <li> MAY include features (such as auto-focus, flash, etc.) available to rear-facing
   4541 cameras as described in <a href="#heading=h.v6dmzvarwqkm">section 7.5.1</a>
   4542   <li> MUST horizontally reflect (i.e. mirror) the stream displayed by an app in a
   4543 CameraPreview, as follows:
   4544   <ul>
   4545     <li> If the device implementation is capable of being rotated by user (such as
   4546 automatically via an accelerometer or manually via user input), the camera
   4547 preview MUST be mirrored horizontally relative to the device's current
   4548 orientation.
   4549     <li> If the current application has explicitly requested that the Camera display be
   4550 rotated via a call to the android.hardware.Camera.setDisplayOrientation()[<a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)">Resources, 90</a>] method, the camera preview MUST be mirrored horizontally relative to the
   4551 orientation specified by the application.
   4552     <li> Otherwise, the preview MUST be mirrored along the device's default horizontal
   4553 axis.
   4554   </ul>
   4555   <li> MUST mirror the image displayed by the postview in the same manner as the
   4556 camera preview image stream. If the device implementation does not support
   4557 postview, this requirement obviously does not apply.
   4558   <li> MUST NOT mirror the final captured still image or video streams returned to
   4559 application callbacks or committed to media storage
   4560 </ul>
   4561 
   4562 <h3 id=7_5_3_external_camera>7.5.3. External Camera</h3>
   4563 
   4564 
   4565 <p>Device implementations with USB host mode MAY include support for an external
   4566 camera that connects to the USB port. If a device includes support for an
   4567 external camera, it:</p>
   4568 
   4569 <ul>
   4570   <li> MUST declare the platform feature android.hardware.camera.external and
   4571 android.hardware camera.any
   4572   <li> MUST support USB Video Class (UVC 1.0 or higher)
   4573   <li> MAY support multiple cameras
   4574 </ul>
   4575 
   4576 <p>Video compression (such as MJPEG) support is RECOMMENDED to enable transfer of
   4577 high-quality unencoded streams (i.e. raw or independently compressed picture
   4578 streams). Camera-based video encoding MAY be supported. If so, a simultaneous
   4579 unencoded/ MJPEG stream (QVGA or greater resolution) MUST be accessible to the
   4580 device implementation. </p>
   4581 
   4582 <h3 id=7_5_4_camera_api_behavior>7.5.4. Camera API Behavior</h3>
   4583 
   4584 
   4585 <p>Android includes two API packages to access the camera, the newer
   4586 android.hardware.camera2 API expose lower-level camera control to the app,
   4587 including efficient zero-copy burst/streaming flows and per-frame controls of
   4588 exposure, gain, white balance gains, color conversion, denoising, sharpening,
   4589 and more. </p>
   4590 
   4591 <p>The older API package, android.hardware.Camera, is marked as deprecated in
   4592 Android 5.0 but as it should still be available for apps to use Android device
   4593 implementations MUST ensure the continued support of the API as described in
   4594 this section and in the Android SDK.</p>
   4595 
   4596 <p>Device implementations MUST implement the following behaviors for the
   4597 camera-related APIs, for all available cameras:</p>
   4598 
   4599 <ul>
   4600   <li> If an application has never called
   4601 android.hardware.Camera.Parameters.setPreviewFormat(int), then the device MUST
   4602 use android.hardware.PixelFormat.YCbCr_420_SP for preview data provided to
   4603 application callbacks.
   4604   <li> If an application registers an android.hardware.Camera.PreviewCallback instance
   4605 and the system calls the onPreviewFrame() method when the preview format is
   4606 YCbCr_420_SP, the data in the byte[] passed into onPreviewFrame() must further
   4607 be in the NV21 encoding format. That is, NV21 MUST be the default.
   4608   <li> For android.hardware.Camera, device implementations MUST support the YV12
   4609 format (as denoted by the android.graphics.ImageFormat.YV12 constant) for
   4610 camera previews for both front- and rear-facing cameras. (The hardware video
   4611 encoder and camera may use any native pixel format, but the device
   4612 implementation MUST support conversion to YV12.)
   4613   <li> For android.hardware.camera2, device implementations must support the
   4614 android.hardware.ImageFormat.YUV_420_888 and android.hardware.ImageFormat.JPEG
   4615 formats as outputs through the android.media.ImageReader API.
   4616 </ul>
   4617 
   4618 <p>Device implementations MUST still implement the full Camera API included in the
   4619 Android SDK documentation [<a href="http://developer.android.com/reference/android/hardware/Camera.html">Resources, 91</a>], regardless of whether the device includes hardware autofocus or other
   4620 capabilities. For instance, cameras that lack autofocus MUST still call any
   4621 registered android.hardware.Camera.AutoFocusCallback instances (even though
   4622 this has no relevance to a non-autofocus camera.) Note that this does apply to
   4623 front-facing cameras; for instance, even though most front-facing cameras do
   4624 not support autofocus, the API callbacks must still be "faked" as described.</p>
   4625 
   4626 <p>Device implementations MUST recognize and honor each parameter name defined as
   4627 a constant on the android.hardware.Camera.Parameters class, if the underlying
   4628 hardware supports the feature. If the device hardware does not support a
   4629 feature, the API must behave as documented. Conversely, device implementations
   4630 MUST NOT honor or recognize string constants passed to the
   4631 android.hardware.Camera.setParameters() method other than those documented as
   4632 constants on the android.hardware.Camera.Parameters. That is, device
   4633 implementations MUST support all standard Camera parameters if the hardware
   4634 allows, and MUST NOT support custom Camera parameter types. For instance,
   4635 device implementations that support image capture using high dynamic range
   4636 (HDR) imaging techniques MUST support camera parameter Camera.SCENE_MODE_HDR [<a href="http://developer.android.com/reference/android/hardware/Camera.Parameters.html">Resources, 92</a>].</p>
   4637 
   4638 <p>Because not all device implementations can fully support all the features of
   4639 the android.hardware.camera2 API, device implementations MUST report the proper
   4640 level of support with the android.info.supportedHardwareLevel property as
   4641 described in the Android SDK [<a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL">Resources, 93]</a> and report the appropriate framework feature flags [<a href="http://source.android.com/devices/camera/versioning.html">Resources, 94]</a>. </p>
   4642 
   4643 <p>Device implementations MUST also declare its Individual camera capabilities of
   4644 android.hardware.camera2 via the android.request.availableCapabilities property
   4645 and declare the appropriate feature flags [<a href="http://source.android.com/devices/camera/versioning.html">Resources, 94]</a>; a device must define the feature flag if any of its attached camera devices
   4646 supports the feature. </p>
   4647 
   4648 <p>Device implementations MUST broadcast the Camera.ACTION_NEW_PICTURE intent
   4649 whenever a new picture is taken by the camera and the entry of the picture has
   4650 been added to the media store.</p>
   4651 
   4652 <p>Device implementations MUST broadcast the Camera.ACTION_NEW_VIDEO intent
   4653 whenever a new video is recorded by the camera and the entry of the picture has
   4654 been added to the media store.</p>
   4655 
   4656 <h3 id=7_5_5_camera_orientation>7.5.5. Camera Orientation</h3>
   4657 
   4658 
   4659 <p>Both front- and rear-facing cameras, if present, MUST be oriented so that the
   4660 long dimension of the camera aligns with the screen's long dimension. That is,
   4661 when the device is held in the landscape orientation, cameras MUST capture
   4662 images in the landscape orientation. This applies regardless of the device's
   4663 natural orientation; that is, it applies to landscape-primary devices as well
   4664 as portrait-primary devices.</p>
   4665 
   4666 <h2 id=7_6_memory_and_storage>7.6. Memory and Storage</h2>
   4667 
   4668 
   4669 <h3 id=7_6_1_minimum_memory_and_storage>7.6.1. Minimum Memory and Storage</h3>
   4670 
   4671 <table>
   4672  <tr>
   4673     <td class="tab2"></td>
   4674     <td>
   4675 <p>Android Television devices MUST have at least 5GB of non-volatile storage
   4676 available for application private data.</p>
   4677 </td>
   4678  </tr>
   4679 </table>
   4680 
   4681 
   4682 <p>The memory available to the kernel and userspace on device implementations MUST
   4683 be at least equal or larger than the minimum values specified by the following
   4684 table. (See <a href="#heading=h.6fey5v3qb5m3">section 7.1.1</a> for screen size and density definitions.)</p>
   4685 <table>
   4686  <tr>
   4687     <td class="tab0">
   4688 <p><strong>Density and screen size</strong></p>
   4689 </td>
   4690     <td class="tab0">
   4691 <p><strong>32-bit device</strong></p>
   4692 </td>
   4693     <td class="tab0">
   4694 <p><strong>64-bit device</strong></p>
   4695 </td>
   4696  </tr>
   4697  <tr>
   4698     <td>
   4699 <p>Android Watch devices (due to smaller screens)</p>
   4700 </td>
   4701     <td>
   4702 <p>416MB</p>
   4703 </td>
   4704     <td>
   4705 <p>Not applicable</p>
   4706 </td>
   4707  </tr>
   4708  <tr>
   4709     <td>
   4710 <p>xhdpi or lower on small/normal screens</p>
   4711 
   4712 <p>hdpi or lower on large screens</p>
   4713 
   4714 <p>mdpi or lower on extra large screens</p>
   4715 </td>
   4716     <td>
   4717 <p>512MB</p>
   4718 </td>
   4719     <td>
   4720 <p>832MB</p>
   4721 </td>
   4722  </tr>
   4723  <tr>
   4724     <td>
   4725 <p>400dpi or higher on small/normal screens</p>
   4726 
   4727 <p>xhdpi or higher on large screens</p>
   4728 
   4729 <p>tvdpi or higher on extra large screens</p>
   4730 </td>
   4731     <td>
   4732 <p>896MB</p>
   4733 </td>
   4734     <td>
   4735 <p>1280MB</p>
   4736 </td>
   4737  </tr>
   4738  <tr>
   4739     <td>
   4740 <p>560dpi or higher on small/normal screens</p>
   4741 
   4742 <p>400dpi or higher on large screens</p>
   4743 
   4744 <p>xhdpi or higher on extra large screens</p>
   4745 </td>
   4746     <td>
   4747 <p>1344MB</p>
   4748 </td>
   4749     <td>
   4750 <p>1824MB</p>
   4751 </td>
   4752  </tr>
   4753 </table>
   4754 
   4755 
   4756 <p>The minimum memory values MUST be in addition to any memory space already
   4757 dedicated to hardware components such as radio, video, and so on that is not
   4758 under the kernel's control.</p>
   4759 
   4760 <p>Android Television devices MUST have at least 5GB and other device
   4761 implementations MUST have at least 1.5GB of non-volatile storage available for
   4762 application private data. That is, the /data partition MUST be at least 5GB for
   4763 Android Television devices and at least 1.5GB for other device implementations.
   4764 Device implementations that run Android are <strong>very strongly encouraged</strong> to have at least 3GB of non-volatile storage for application private data so
   4765 they will be able to upgrade to the future platform releases.</p>
   4766 
   4767 <p>The Android APIs include a Download Manager that applications MAY use to
   4768 download data files [<a href="http://developer.android.com/reference/android/app/DownloadManager.html">Resources, 95</a>]. The device implementation of the Download Manager MUST be capable of
   4769 downloading individual files of at least 100MB in size to the default "cache"
   4770 location.</p>
   4771 
   4772 <h3 id=7_6_2_application_shared_storage>7.6.2. Application Shared Storage</h3>
   4773 
   4774 
   4775 <p>Device implementations MUST offer shared storage for applications also often
   4776 referred as shared external storage. </p>
   4777 
   4778 <p>Device implementations MUST be configured with shared storage mounted by
   4779 default, "out of the box". If the shared storage is not mounted on the Linux
   4780 path /sdcard, then the device MUST include a Linux symbolic link from /sdcard
   4781 to the actual mount point.</p>
   4782 
   4783 <p>Device implementations MAY have hardware for user-accessible removable storage,
   4784 such as a Secure Digital (SD) card slot. If this slot is used to satisfy the
   4785 shared storage requirement, the device implementation:</p>
   4786 
   4787 <ul>
   4788   <li> MUST implement a toast or pop-up user interface warning the user when there is
   4789 no SD card
   4790   <li> MUST include a FAT-formatted SD card 1GB in size or larger OR show on the box
   4791 and other material available at time of purchase that the SD card has to be
   4792 separately purchased
   4793   <li> MUST mount the SD card by default
   4794 </ul>
   4795 
   4796 <p>Alternatively, device implementations MAY allocate internal (non-removable)
   4797 storage as shared storage for apps as included in the upstream Android Open
   4798 Source Project; device implementations SHOULD use this configuration and
   4799 software implementation. If a device implementation uses internal
   4800 (non-removable) storage to satisfy the shared storage requirement, that storage
   4801 MUST be 1GB in size or larger and mounted on /sdcard (or /sdcard MUST be a
   4802 symbolic link to the physical location if it is mounted elsewhere).</p>
   4803 
   4804 <p>Device implementations MUST enforce as documented the
   4805 android.permission.WRITE_EXTERNAL_STORAGE permission on this shared storage.
   4806 Shared storage MUST otherwise be writable by any application that obtains that
   4807 permission.</p>
   4808 
   4809 <p>Device implementations that include multiple shared storage paths (such as both
   4810 an SD card slot and shared internal storage) MUST NOT allow Android
   4811 applications to write to the secondary external storage, except for their
   4812 package-specific directories on the secondary external storage, but SHOULD
   4813 expose content from both storage paths transparently through Android's media
   4814 scanner service and android.provider.MediaStore.</p>
   4815 
   4816 <p>Regardless of the form of shared storage used, device implementations MUST
   4817 provide some mechanism to access the contents of shared storage from a host
   4818 computer, such as USB mass storage (UMS) or Media Transfer Protocol (MTP).
   4819 Device implementations MAY use USB mass storage, but SHOULD use Media Transfer
   4820 Protocol. If the device implementation supports Media Transfer Protocol, it:</p>
   4821 
   4822 <ul>
   4823   <li> SHOULD be compatible with the reference Android MTP host, Android File Transfer
   4824 [<a href="http://www.android.com/filetransfer">Resources, 96</a>]
   4825   <li> SHOULD report a USB device class of 0x00
   4826   <li> SHOULD report a USB interface name of 'MTP'
   4827 </ul>
   4828 
   4829 <p>If the device implementation lacks USB ports, it MUST provide a host computer
   4830 with access to the contents of shared storage by some other means, such as a
   4831 network file system.</p>
   4832 
   4833 <h2 id=7_7_usb>7.7. USB</h2>
   4834 
   4835 
   4836 <p>Device implementations SHOULD support USB peripheral mode and SHOULD support
   4837 USB host mode.</p>
   4838 
   4839 <p>If a device implementation includes a USB port supporting peripheral mode:</p>
   4840 
   4841 <ul>
   4842   <li> The port MUST be connectable to a USB host that has a standard type-A or type
   4843 -C USB port.
   4844   <li> The port SHOULD use micro-A, micro-AB or type-C USB form factor. Existing and
   4845 new Android devices are <strong>very strongly encouraged to meet these requirements</strong> so they will be able to upgrade to the future platform releases.
   4846   <li> The port SHOULD be centered in the middle of an edge. Device implementations
   4847 SHOULD either locate the port on the bottom of the device (according to natural
   4848 orientation) or enable software screen rotation for all apps (including home
   4849 screen), so that the display draws correctly when the device is oriented with
   4850 the port at bottom. Existing and new Android devices are <strong>very strongly encouraged to meet these requirements</strong> so they will be able to upgrade to future platform releases.
   4851   <li> It MUST allow a USB host connected with the Android device to access the
   4852 contents of the shared storage volume using either USB mass storage or Media
   4853 Transfer.
   4854   <li> It SHOULD implement the Android Open Accessory (AOA) API and specification as
   4855 documented in the Android SDK documentation, and if it is an Android Handheld
   4856 device it MUST implement the AOA API. Device implementations implementing the
   4857 AOA specification:
   4858   <ul>
   4859     <li> MUST declare support for the hardware feature android.hardware.usb.accessory [<a href="http://developer.android.com/guide/topics/connectivity/usb/accessory.html">Resources, 97</a>]
   4860     <li> MUST implement the USB audio class as documented in the Android SDK
   4861 documentation [<a href="http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO">Resources, 98</a>]
   4862   </ul>
   4863   <li> It SHOULD implement support to draw 1.5 A current during HS chirp and traffic
   4864 as specified in the USB battery charging specification [<a href="http://www.usb.org/developers/docs/devclass_docs/USB_Battery_Charging_1.2.pdf">Resources, 99</a>]. Existing and new Android devices are <strong>very strongly encouraged to meet these requirements</strong> so they will be able to upgrade to the future platform releases.
   4865   <li> The value of iSerialNumber in USB standard device descriptor MUST be equal to
   4866 the value of android.os.Build.SERIAL.
   4867 </ul>
   4868 
   4869 <p>If a device implementation includes a USB port supporting host mode, it:</p>
   4870 
   4871 <ul>
   4872   <li> SHOULD use a type-C USB port, if the device implementation supports USB 3.1
   4873   <li> MAY use a non-standard port form factor, but if so MUST ship with a cable or
   4874 cables adapting the port to a standard type-A or type-C USB port
   4875   <li> MAY use a micro-AB USB port, but if so SHOULD ship with a cable or cables
   4876 adapting the port to a standard type-A or type-C USB port
   4877   <li> is <strong>very strongly RECOMMENDED</strong> to implement the USB audio class as documented in the Android SDK
   4878 documentation [<a href="http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO">Resources, 98</a>]
   4879   <li> MUST implement the Android USB host API as documented in the Android SDK, and
   4880 MUST declare support for the hardware feature android.hardware.usb.host [<a href="http://developer.android.com/guide/topics/connectivity/usb/host.html">Resources, 100</a>]
   4881   <li> SHOULD support the Charging Downstream Port output current range of 1.5 A ~ 5 A
   4882 as specified in the USB Battery Charging Specifications [<a href="http://www.usb.org/developers/docs/devclass_docs/USB_Battery_Charging_1.2.pdf">Resources, 99</a>]
   4883 </ul>
   4884 
   4885 <h2 id=7_8_audio>7.8. Audio</h2>
   4886 
   4887 
   4888 <h3 id=7_8_1_microphone>7.8.1. Microphone</h3>
   4889 
   4890 <table>
   4891  <tr>
   4892     <td class="tab2"></td>
   4893     <td>
   4894 <p>Android Handheld and Watch devices MUST include a microphone.</p>
   4895 </td>
   4896  </tr>
   4897 </table>
   4898 
   4899 
   4900 <p>Device implementations MAY omit a microphone. However, if a device
   4901 implementation omits a microphone, it MUST NOT report the
   4902 android.hardware.microphone feature constant, and MUST implement the audio
   4903 recording API at least as no-ops, per <a href="#heading=h.5h5uvpadidzr">section 7</a>. Conversely, device implementations that do possess a microphone:</p>
   4904 
   4905 <ul>
   4906   <li> MUST report the android.hardware.microphone feature constant
   4907   <li> MUST meet the audio recording requirements in <a href="#heading=h.q24elivs4xtv">section 5.4</a>
   4908   <li> MUST meet the audio latency requirements in <a href="#heading=h.1p55xhbym9l4">section 5.6</a>
   4909 </ul>
   4910 
   4911 <h3 id=7_8_2_audio_output>7.8.2. Audio Output</h3>
   4912 
   4913 <table>
   4914  <tr>
   4915     <td class="tab2"></td>
   4916     <td>
   4917 <p>Android Watch devices MAY include an audio output.</p>
   4918 </td>
   4919  </tr>
   4920 </table>
   4921 
   4922 
   4923 <p>Device implementations including a speaker or with an audio/multimedia output
   4924 port for an audio output peripheral as a headset or an external speaker:</p>
   4925 
   4926 <ul>
   4927   <li> MUST report the android.hardware.audio.output feature constant
   4928   <li> MUST meet the audio playback requirements in <a href="#heading=h.1xocvxnwynnm">section 5.5</a>
   4929   <li> MUST meet the audio latency requirements in <a href="#heading=h.1p55xhbym9l4">section 5.6</a>
   4930 </ul>
   4931 
   4932 <p>Conversely, if a device implementation does not include a speaker or audio
   4933 output port, it MUST NOT report the android.hardware.audio output feature, and
   4934 MUST implement the Audio Output related APIs as no-ops at least. </p>
   4935 
   4936 <p>Android Watch device implementation MAY but SHOULD NOT have audio output, but
   4937 other types of Android device implementations MUST have an audio output and
   4938 declare android.hardware.audio.output.</p>
   4939 
   4940 <h4 id=7_8_2_1_analog_audio_ports>7.8.2.1. Analog Audio Ports</h4>
   4941 
   4942 
   4943 <p>In order to be compatible with the headsets and other audio accessories using
   4944 the 3.5mm audio plug across the Android ecosystem [<a href="http://source.android.com/accessories/headset-spec.html">Resources, 101</a>], if a device implementation includes one or more analog audio ports, at least
   4945 one of the audio port(s) SHOULD be a 4 conductor 3.5mm audio jack. If a device
   4946 implementation has a 4 conductor 3.5mm audio jack, it:</p>
   4947 
   4948 <ul>
   4949   <li> MUST support audio playback to stereo headphones and stereo headsets with a
   4950 microphone, and SHOULD support audio recording from stereo headsets with a
   4951 microphone
   4952   <li> MUST support TRRS audio plugs with the CTIA pin-out order, and SHOULD support
   4953 audio plugs with the OMTP pin-out order
   4954   <li> MUST support the detection of microphone on the plugged in audio accessory, if
   4955 the device implementation supports a microphone, and broadcast the
   4956 android.intent.action.HEADSET_PLUG with the extra value microphone set as 1
   4957   <li> SHOULD support the detection and mapping to the keycodes for the following 3
   4958 ranges of equivalent impedance between the microphone and ground conductors on
   4959 the audio plug:
   4960   <ul>
   4961     <li> <strong>70 ohm or less</strong>: KEYCODE_HEADSETHOOK
   4962     <li> <strong>210290 Ohm</strong>:<strong> </strong>KEYCODE_VOLUME_UP
   4963     <li> <strong>360680 Ohm</strong>: KEYCODE_VOLUME_DOWN
   4964   </ul>
   4965   <li> SHOULD support the detection and mapping to the keycode for the following range
   4966 of equivalent impedance between the microphone and ground conductors on the
   4967 audio plug:
   4968   <ul>
   4969     <li> <strong>110180 Ohm: </strong>KEYCODE_VOICE_ASSIST
   4970   </ul>
   4971   <li> MUST trigger ACTION_HEADSET_PLUG upon a plug insert, but only after all
   4972 contacts on plug are touching their relevant segments on the jack
   4973   <li> MUST be capable of driving at least 150mV +/- 10% of output voltage on a 32 Ohm
   4974 speaker impedance
   4975   <li> MUST have a microphone bias voltage between 1.8V ~ 2.9V
   4976 </ul>
   4977 
   4978 <h1 id=8_performance_compatibility>8. Performance Compatibility</h1>
   4979 
   4980 
   4981 <p>Some minimum performance criterias are critical to the user experience and
   4982 impacts the baseline assumptions developers would have when developing an app.
   4983 Android Watch devices SHOULD and other type of device implementations MUST meet
   4984 the following criteria:</p>
   4985 
   4986 <h2 id=8_1_user_experience_consistency>8.1. User Experience Consistency</h2>
   4987 
   4988 
   4989 <p>Device implementations MUST provide a smooth user interface by ensuring a
   4990 consistent frame rate and response times for applications and games. Device
   4991 implementations MUST meet the following requirements: </p>
   4992 
   4993 <ul>
   4994   <li> <strong>Consistent frame latency</strong>Inconsistent frame latency or a delay to render frames MUST NOT happen more
   4995 often than 5 frames in a second, and SHOULD be below 1 frames in a second. 
   4996   <li> <strong>User interface latency</strong>Device implementations MUST ensure low latency user experience by scrolling a
   4997 list of 10K list entries as defined by the Android Compatibility Test Suite
   4998 (CTS) in less than 36 secs. 
   4999   <li> <strong>Task switching</strong>When multiple applications have been launched, re-launching an already-running
   5000 application after it has been launched MUST take less than 1 second.
   5001 </ul>
   5002 
   5003 <h2 id=8_2_file_i_o_access_performance>8.2. File I/O Access Performance</h2>
   5004 
   5005 
   5006 <p>Device implementations MUST ensure file access performance consistency for read
   5007 and write operations. </p>
   5008 
   5009 <ul>
   5010   <li> <strong>Sequential write</strong>Device implementations MUST ensure a sequential write performance of 5MB/s
   5011 for a 256MB file using 10MB write buffer. 
   5012   <li> <strong>Random write</strong>Device implementations MUST ensure a random write performance of 0.5MB/s for a
   5013 256MB file using 4KB write buffer. 
   5014   <li> <strong>Sequential read</strong>Device implementations MUST ensure a sequential read performance of 15MB/s for
   5015 a 256MB file using 10MB write buffer. 
   5016   <li> <strong>Random read</strong>Device implementations MUST ensure a random read performance of 3.5MB/s for a
   5017 256MB file using 4KB write buffer. 
   5018 </ul>
   5019 
   5020 <h1 id=9_security_model_compatibility>9. Security Model Compatibility</h1>
   5021 
   5022 
   5023 <p>Device implementations MUST implement a security model consistent with the
   5024 Android platform security model as defined in Security and Permissions
   5025 reference document in the APIs [<a href="http://developer.android.com/guide/topics/security/permissions.html">Resources, 102</a>] in the Android developer documentation. Device implementations MUST support
   5026 installation of self-signed applications without requiring any additional
   5027 permissions/certificates from any third parties/authorities. Specifically,
   5028 compatible devices MUST support the security mechanisms described in the follow
   5029 subsections.</p>
   5030 
   5031 <h2 id=9_1_permissions>9.1. Permissions</h2>
   5032 
   5033 
   5034 <p>Device implementations MUST support the Android permissions model as defined in
   5035 the Android developer documentation [<a href="http://developer.android.com/guide/topics/security/permissions.html">Resources, 102</a>]. Specifically, implementations MUST enforce each permission defined as
   5036 described in the SDK documentation; no permissions may be omitted, altered, or
   5037 ignored. Implementations MAY add additional permissions, provided the new
   5038 permission ID strings are not in the android.* namespace.</p>
   5039 
   5040 <h2 id=9_2_uid_and_process_isolation>9.2. UID and Process Isolation</h2>
   5041 
   5042 
   5043 <p>Device implementations MUST support the Android application sandbox model, in
   5044 which each application runs as a unique Unixstyle UID and in a separate
   5045 process. Device implementations MUST support running multiple applications as
   5046 the same Linux user ID, provided that the applications are properly signed and
   5047 constructed, as defined in the Security and Permissions reference [<a href="http://developer.android.com/guide/topics/security/permissions.html">Resources, 102</a>].</p>
   5048 
   5049 <h2 id=9_3_filesystem_permissions>9.3. Filesystem Permissions</h2>
   5050 
   5051 
   5052 <p>Device implementations MUST support the Android file access permissions model
   5053 as defined in the Security and Permissions reference [<a href="http://developer.android.com/guide/topics/security/permissions.html">Resources, 102</a>].</p>
   5054 
   5055 <h2 id=9_4_alternate_execution_environments>9.4. Alternate Execution Environments</h2>
   5056 
   5057 
   5058 <p>Device implementations MAY include runtime environments that execute
   5059 applications using some other software or technology than the Dalvik Executable
   5060 Format or native code. However, such alternate execution environments MUST NOT
   5061 compromise the Android security model or the security of installed Android
   5062 applications, as described in this section.</p>
   5063 
   5064 <p>Alternate runtimes MUST themselves be Android applications, and abide by the
   5065 standard Android security model, as described elsewhere in <a href="#heading=h.a32osmf1tmwt">section 9</a>.</p>
   5066 
   5067 <p>Alternate runtimes MUST NOT be granted access to resources protected by
   5068 permissions not requested in the runtime's AndroidManifest.xml file via the
   5069 <uses-permission> mechanism.</p>
   5070 
   5071 <p>Alternate runtimes MUST NOT permit applications to make use of features
   5072 protected by Android permissions restricted to system applications.</p>
   5073 
   5074 <p>Alternate runtimes MUST abide by the Android sandbox model. Specifically,
   5075 alternate runtimes:</p>
   5076 
   5077 <ul>
   5078   <li> SHOULD install apps via the PackageManager into separate Android sandboxes (
   5079 Linux user IDs, etc.)
   5080   <li> MAY provide a single Android sandbox shared by all applications using the
   5081 alternate runtime
   5082   <li> and installed applications using an alternate runtime, MUST NOT reuse the
   5083 sandbox of any other app installed on the device, except through the standard
   5084 Android mechanisms of shared user ID and signing certificate
   5085   <li> MUST NOT launch with, grant, or be granted access to the sandboxes
   5086 corresponding to other Android applications
   5087   <li> MUST NOT be launched with, be granted, or grant to other applications any
   5088 privileges of the superuser (root), or of any other user ID
   5089 </ul>
   5090 
   5091 <p>The .apk files of alternate runtimes MAY be included in the system image of a
   5092 device implementation, but MUST be signed with a key distinct from the key used
   5093 to sign other applications included with the device implementation.</p>
   5094 
   5095 <p>When installing applications, alternate runtimes MUST obtain user consent for
   5096 the Android permissions used by the application. If an application needs to
   5097 make use of a device resource for which there is a corresponding Android
   5098 permission (such as Camera, GPS, etc.), the alternate runtime MUST inform the
   5099 user that the application will be able to access that resource. If the runtime
   5100 environment does not record application capabilities in this manner, the
   5101 runtime environment MUST list all permissions held by the runtime itself when
   5102 installing any application using that runtime.</p>
   5103 
   5104 <h2 id=9_5_multi-user_support>9.5. Multi-User Support</h2>
   5105 
   5106 <table>
   5107  <tr>
   5108     <td class="tab2"></td>
   5109     <td>
   5110 <p>This feature is optional for all device types.</p>
   5111 </td>
   5112  </tr>
   5113 </table>
   5114 
   5115 
   5116 <p>Android includes support for multiple users and provides support for full user
   5117 isolation [<a href="http://developer.android.com/reference/android/os/UserManager.html">Resources, 103]</a>. Device implementations MAY enable multiple users, but when enabled MUST meet
   5118 the following requirements related to multi-user support [<a href="http://source.android.com/devices/tech/storage">Resources, 104</a>]:</p>
   5119 
   5120 <ul>
   5121   <li> Device implementations that do not declare the android.hardware.telephony
   5122 feature flag MUST support restricted profiles, a feature that allows device
   5123 owners to manage additional users and their capabilities on the device. With
   5124 restricted profiles, device owners can quickly set up separate environments for
   5125 additional users to work in, with the ability to manage finer-grained
   5126 restrictions in the apps that are available in those environments.
   5127   <li> Conversely device implementations that declare the android.hardware.telephony
   5128 feature flag MUST NOT support restricted profiles but MUST align with the AOSP
   5129 implementation of controls to enable /disable other users from accessing the
   5130 voice calls and SMS.
   5131   <li> Device implementations MUST, for each user, implement a security model
   5132 consistent with the Android platform security model as defined in Security and
   5133 Permissions reference document in the APIs [<a href="http://developer.android.com/guide/topics/security/permissions.html">Resources, 102</a>]
   5134   <li> Device implementations MAY support creating users and managed profiles via the
   5135 android.app.admin.DevicePolicyManager APIs, and if supported, MUST declare the
   5136 platform feature flag android.software.managed_users. 
   5137   <li> Device implementations that declare the feature flag
   5138 android.software.managed_users MUST use the upstream AOSP icon badge to
   5139 represent the managed applications and other badge UI elements like Recents &
   5140 Notifications. 
   5141   <li> Each user instance on an Android device MUST have separate and isolated
   5142 external storage directories. Device implementations MAY store multiple users'
   5143 data on the same volume or filesystem. However, the device implementation MUST
   5144 ensure that applications owned by and running on behalf a given user cannot
   5145 list, read, or write to data owned by any other user. Note that removable
   5146 media, such as SD card slots, can allow one user to access another's data by
   5147 means of a host PC. For this reason, device implementations that use removable
   5148 media for the external storage APIs MUST encrypt the contents of the SD card if
   5149 multiuser is enabled using a key stored only on non-removable media accessible
   5150 only to the system. As this will make the media unreadable by a host PC, device
   5151 implementations will be required to switch to MTP or a similar system to
   5152 provide host PCs with access to the current user's data. Accordingly, device
   5153 implementations MAY but SHOULD NOT enable multi-user if they use removable
   5154 media [<a href="http://developer.android.com/reference/android/os/Environment.html">Resources, 105</a>] for primary external storage. 
   5155 </ul>
   5156 
   5157 <h2 id=9_6_premium_sms_warning>9.6. Premium SMS Warning</h2>
   5158 
   5159 
   5160 <p>Android includes support for warning users of any outgoing premium SMS message
   5161 [<a href="http://en.wikipedia.org/wiki/Short_code">Resources, 106</a>] . Premium SMS messages are text messages sent to a service registered with a
   5162 carrier that may incur a charge to the user. Device implementations that
   5163 declare support for android.hardware.telephony MUST warn users before sending a
   5164 SMS message to numbers identified by regular expressions defined in
   5165 /data/misc/sms/codes.xml file in the device. The upstream Android Open Source
   5166 Project provides an implementation that satisfies this requirement.</p>
   5167 
   5168 <h2 id=9_7_kernel_security_features>9.7. Kernel Security Features</h2>
   5169 
   5170 
   5171 <p>The Android Sandbox includes features that use the Security-Enhanced Linux
   5172 (SELinux) mandatory access control (MAC) system and other security features in
   5173 the Linux kernel. SELinux or any other security features implemented below
   5174 the Android framework:</p>
   5175 
   5176 <ul>
   5177   <li> MUST maintain compatibility with existing applications
   5178   <li> MUST NOT have a visible user interface when a security violation is detected
   5179 and successfully blocked, but MAY have a visible user interface when an
   5180 unblocked security violation occurs resulting in a successful exploit
   5181   <li> SHOULD NOT be user or developer configurable
   5182 </ul>
   5183 
   5184 <p>If any API for configuration of policy is exposed to an application that can
   5185 affect another application (such as a Device Administration API), the API MUST
   5186 NOT allow configurations that break compatibility. </p>
   5187 
   5188 <p>Devices MUST implement SELinux or, if using a kernel other than Linux, an equivalent mandatory access control system.
   5189 Devices must also meet the following requirements, which
   5190 are satisfied by the reference implementation in the upstream Android Open
   5191 Source Project.</p>
   5192 
   5193 <p>Device implementations:</p>
   5194 
   5195 <ul>
   5196   <li> MUST set SELinux to global enforcing mode,
   5197   <li> MUST configure all domains in enforcing mode. No
   5198 permissive mode domains are allowed, including domains specific to a
   5199 device/vendor.
   5200   <li> MUST NOT modify, omit, or replace the neverallow rules present within the
   5201 external/sepolicy folder provided in the upstream Android Open Source Project (AOSP) and
   5202 the policy MUST compile with all neverallow rules present, for both AOSP SELinux
   5203 domains as well as device/vendor specific domains.
   5204 </ul>
   5205 
   5206 <p>Device implementations SHOULD retain the default SELinux policy provided in the external/sepolicy folder of the
   5207 upstream Android Open Source Project and only further add to this policy for their own device-specific configuration. Device implementations MUST be compatible with
   5208 the upstream Android Open Source Project.</p>
   5209 
   5210 <h2 id=9_8_privacy>9.8. Privacy</h2>
   5211 
   5212 
   5213 <p>If the device implements functionality in the system that captures the contents
   5214 displayed on the screen and/or records the audio stream played on the device,
   5215 it MUST continuously notify the user whenever this functionality is enabled and
   5216 actively capturing/recording.</p>
   5217 
   5218 <h2 id=9_9_full-disk_encryption>9.9. Full-Disk Encryption</h2>
   5219 
   5220 <table>
   5221  <tr>
   5222     <td class="tab2"></td>
   5223     <td>
   5224 <p>Optional for Android device implementations without a lock screen.</p>
   5225 </td>
   5226  </tr>
   5227 </table>
   5228 
   5229 
   5230 <p>If the device implementation has a lock screen, the device MUST support
   5231 full-disk encryption of the application private data, (/data partition) as well
   5232 as the SD card partition if it is a permanent, non-removable part of the device
   5233 [<a href="http://source.android.com/devices/tech/encryption/index.html">Resources, 107</a>]. For devices supporting full-disk encryption, the full-disk encryption SHOULD
   5234 be enabled all the time after the user has completed the out-of-box experience.
   5235 While this requirement is stated as SHOULD for this version of the Android
   5236 platform, it is <strong>very strongly RECOMMENDED</strong> as we expect this to change to MUST in the future versions of Android.
   5237 Encryption MUST use AES with a key of 128-bits (or greater) and a mode designed
   5238 for storage (for example, AES-XTS, AES-CBC-ESSIV). The encryption key MUST NOT
   5239 be written to storage at any time without being encrypted. Other than when in
   5240 active use, the encryption key SHOULD be AES encrypted with the lockscreen
   5241 passcode stretched using a slow stretching algorithm (e.g. PBKDF2 or scrypt).
   5242 If the user has not specified a lockscreen passcode or has disabled use of the
   5243 passcode for encryption, the system SHOULD use a default passcode to wrap the
   5244 encryption key. If the device provides a hardware-backed keystore, the password
   5245 stretching algorithm MUST be cryptographically bound to that keystore. The
   5246 encryption key MUST NOT be sent off the device (even when wrapped with the user
   5247 passcode and/or hardware bound key). The upstream Android Open Source project
   5248 provides a preferred implementation of this feature based on the linux kernel
   5249 feature dm-crypt.</p>
   5250 
   5251 <h2 id=9_10_verified_boot>9.10. Verified Boot</h2>
   5252 
   5253 
   5254 <p>Device implementations SHOULD support verified boot for device integrity, and
   5255 if the feature is supported it MUST declare the platform feature flag
   5256 android.software.verified_boot. While this requirement is stated as SHOULD for
   5257 this version of the Android platform, it is <strong>very strongly RECOMMENDED</strong> as we expect this to change to MUST in the future versions of Android. The
   5258 upstream Android Open Source Project provides a preferred implementation of
   5259 this feature based on the linux kernel feature dm-verity.</p>
   5260 
   5261 <h1 id=10_software_compatibility_testing>10. Software Compatibility Testing</h1>
   5262 
   5263 
   5264 <p>Device implementations MUST pass all tests described in this section.</p>
   5265 
   5266 <p>However, note that no software test package is fully comprehensive. For this
   5267 reason, device implementers are <strong>very strongly encouraged</strong> to make the minimum number of changes as possible to the reference and
   5268 preferred implementation of Android available from the Android Open Source
   5269 Project. This will minimize the risk of introducing bugs that create
   5270 incompatibilities requiring rework and potential device updates.</p>
   5271 
   5272 <h2 id=10_1_compatibility_test_suite>10.1. Compatibility Test Suite</h2>
   5273 
   5274 
   5275 <p>Device implementations MUST pass the Android Compatibility Test Suite (CTS) [<a href="http://source.android.com/compatibility/index.html">Resources, 108</a>] available from the Android Open Source Project, using the final shipping
   5276 software on the device. Additionally, device implementers SHOULD use the
   5277 reference implementation in the Android Open Source tree as much as possible,
   5278 and MUST ensure compatibility in cases of ambiguity in CTS and for any
   5279 reimplementations of parts of the reference source code.</p>
   5280 
   5281 <p>The CTS is designed to be run on an actual device. Like any software, the CTS
   5282 may itself contain bugs. The CTS will be versioned independently of this
   5283 Compatibility Definition, and multiple revisions of the CTS may be released for
   5284 Android 5.0. Device implementations MUST pass the latest CTS version available
   5285 at the time the device software is completed.</p>
   5286 
   5287 <h2 id=10_2_cts_verifier>10.2. CTS Verifier</h2>
   5288 
   5289 
   5290 <p>Device implementations MUST correctly execute all applicable cases in the CTS
   5291 Verifier. The CTS Verifier is included with the Compatibility Test Suite, and
   5292 is intended to be run by a human operator to test functionality that cannot be
   5293 tested by an automated system, such as correct functioning of a camera and
   5294 sensors.</p>
   5295 
   5296 <p>The CTS Verifier has tests for many kinds of hardware, including some hardware
   5297 that is optional. Device implementations MUST pass all tests for hardware that
   5298 they possess; for instance, if a device possesses an accelerometer, it MUST
   5299 correctly execute the Accelerometer test case in the CTS Verifier. Test cases
   5300 for features noted as optional by this Compatibility Definition Document MAY be
   5301 skipped or omitted.</p>
   5302 
   5303 <p>Every device and every build MUST correctly run the CTS Verifier, as noted
   5304 above. However, since many builds are very similar, device implementers are not
   5305 expected to explicitly run the CTS Verifier on builds that differ only in
   5306 trivial ways. Specifically, device implementations that differ from an
   5307 implementation that has passed the CTS Verifier only by the set of included
   5308 locales, branding, etc. MAY omit the CTS Verifier test.</p>
   5309 
   5310 <h1 id=11_updatable_software>11. Updatable Software</h1>
   5311 
   5312 
   5313 <p>Device implementations MUST include a mechanism to replace the entirety of the
   5314 system software. The mechanism need not perform "live" upgradesthat is, a
   5315 device restart MAY be required.</p>
   5316 
   5317 <p>Any method can be used, provided that it can replace the entirety of the
   5318 software preinstalled on the device. For instance, any of the following
   5319 approaches will satisfy this requirement:</p>
   5320 
   5321 <ul>
   5322   <li> Over-the-air (OTA) downloads with offline update via reboot
   5323   <li> "Tethered" updates over USB from a host PC
   5324   <li> "Offline" updates via a reboot and update from a file on removable storage
   5325 </ul>
   5326 
   5327 <p>However, if the device implementation includes support for an unmetered data
   5328 connection such as 802.11 or Bluetooth PAN (Personal Area Network) profile, the
   5329 device MUST support Over-the-air download with offline update via reboot.</p>
   5330 
   5331 <p>The update mechanism used MUST support updates without wiping user data. That
   5332 is, the update mechanism MUST preserve application private data and application
   5333 shared data. Note that the upstream Android software includes an update
   5334 mechanism that satisfies this requirement.</p>
   5335 
   5336 <p>For device implementations that are launching with Android 5.0 and later, the
   5337 update mechanism SHOULD support verifying that the system image is binary
   5338 identical to expected result following an OTA. The block-based OTA
   5339 implementation in the upstream Android Open Source Project, added since Android
   5340 5.0, satisfies this requirement.</p>
   5341 
   5342 <p>If an error is found in a device implementation after it has been released but
   5343 within its reasonable product lifetime that is determined in consultation with
   5344 the Android Compatibility Team to affect the compatibility of third-party
   5345 applications, the device implementer MUST correct the error via a software
   5346 update available that can be applied per the mechanism just described.</p>
   5347 
   5348 <h1 id=12_document_changelog>12. Document Changelog</h1>
   5349 
   5350 
   5351 <p>The following table contains a summary of the changes to the Compatibility
   5352 Definition in this release. </p>
   5353 <table>
   5354  <tr>
   5355     <td class="tab0">
   5356 <p><strong>Section(s)</strong></p>
   5357 </td>
   5358     <td class="tab0">
   5359 <p><strong>Summary of change</strong></p>
   5360 </td>
   5361  </tr>
   5362  <tr>
   5363     <td>
   5364 <p>1. Introduction</p>
   5365 </td>
   5366     <td>
   5367 <p>Updated requirements to refer to SDK documentation as source of truth.</p>
   5368 </td>
   5369  </tr>
   5370  <tr>
   5371     <td>
   5372 <p>2. Device Types</p>
   5373 </td>
   5374     <td>
   5375 <p>Included definitions for device types for handheld, television, and watch
   5376 devices.</p>
   5377 </td>
   5378  </tr>
   5379  <tr>
   5380     <td>
   5381 <p>2.1 Device Configuration</p>
   5382 </td>
   5383     <td>
   5384 <p>Added non-exhaustive list to illustrate hardware configuration deviation across
   5385 devices.</p>
   5386 </td>
   5387  </tr>
   5388  <tr>
   5389     <td>
   5390 <p>3.1. Managed API Compatibility</p>
   5391 </td>
   5392     <td>
   5393 <p>MUST also provide complete implementations of APIs with "@SystemApi" marker in
   5394 the upstream Android source code.</p>
   5395 </td>
   5396  </tr>
   5397  <tr>
   5398     <td>
   5399 <p>3.2.2. Build Parameters</p>
   5400 </td>
   5401     <td>
   5402 <p>Included SUPPORTED_ABIS, SUPPORTED_32_BIT_ABIS, and SUPPORTED_64_BIT_ABIS
   5403 parameters in list, updated PRODUCT to require unique Product SKUs, and updated
   5404 TAGS.</p>
   5405 </td>
   5406  </tr>
   5407  <tr>
   5408     <td>
   5409 <p>3.2.3.1. Core Application Intents</p>
   5410 </td>
   5411     <td>
   5412 <p>Clarified language that the compatibility requirement is for mainly the intents
   5413 pattern </p>
   5414 </td>
   5415  </tr>
   5416  <tr>
   5417     <td>
   5418 <p>3.2.3.5. Default App Settings</p>
   5419 </td>
   5420     <td>
   5421 <p>Included new requirements for home screen, NFC, and default SMS applications.</p>
   5422 </td>
   5423  </tr>
   5424  <tr>
   5425     <td>
   5426 <p>3.3.1 Application Binary Interfaces</p>
   5427 </td>
   5428     <td>
   5429 <p>Added requirements to support equivalent 32-bit ABI if any 64-bit ABI is
   5430 supported. Updated parameters to reflect this change.</p>
   5431 </td>
   5432  </tr>
   5433  <tr>
   5434     <td>
   5435 <p>3.4.1. WebView Compatibility</p>
   5436 </td>
   5437     <td>
   5438 <p>Webview compatibility required for all devices except Android Watch devices.
   5439 Removed Locale string requirement.</p>
   5440 </td>
   5441  </tr>
   5442  <tr>
   5443     <td>
   5444 <p>3.4.2. Browser compatibility</p>
   5445 </td>
   5446     <td>
   5447 <p>Android Television and Watch Devices MAY omit a browser application, but all
   5448 other types of device implementations MUST include one.</p>
   5449 </td>
   5450  </tr>
   5451  <tr>
   5452     <td>
   5453 <p>3.7. Runtime compatibility</p>
   5454 </td>
   5455     <td>
   5456 <p>Updated Minimum application memory requirements</p>
   5457 </td>
   5458  </tr>
   5459  <tr>
   5460     <td>
   5461 <p>3.8.2. Widgets</p>
   5462 </td>
   5463     <td>
   5464 <p>Widget support is optional for all device types, but recommended for Handheld
   5465 Devices.</p>
   5466 </td>
   5467  </tr>
   5468  <tr>
   5469     <td>
   5470 <p>3.8.3. Notifications</p>
   5471 </td>
   5472     <td>
   5473 <p>Expanded definitions for types of supported notifications. </p>
   5474 </td>
   5475  </tr>
   5476  <tr>
   5477     <td>
   5478 <p>3.8.4. Search</p>
   5479 </td>
   5480     <td>
   5481 <p>Android Television devices MUST include global search. All other device types
   5482 SHOULD.</p>
   5483 </td>
   5484  </tr>
   5485  <tr>
   5486     <td>
   5487 <p>3.8.6. Themes</p>
   5488 </td>
   5489     <td>
   5490 <p>Devices MUST support material theme.</p>
   5491 </td>
   5492  </tr>
   5493  <tr>
   5494     <td>
   5495 <p>3.8.7. Live Wallpapers</p>
   5496 </td>
   5497     <td>
   5498 <p>Devices that include live wallpaper MUST report the platform feature flag
   5499 android.software.live_wallpaper.</p>
   5500 </td>
   5501  </tr>
   5502  <tr>
   5503     <td>
   5504 <p>3.8.8. Activity Switching</p>
   5505 </td>
   5506     <td>
   5507 <p>Advised requirement to support new Recents User Interface</p>
   5508 </td>
   5509  </tr>
   5510  <tr>
   5511     <td>
   5512 <p>3.8.10. Lock Screen Media Remote Control</p>
   5513 </td>
   5514     <td>
   5515 <p> Remote Control Client API deprecated in favor of the Media Notification
   5516 Template</p>
   5517 </td>
   5518  </tr>
   5519  <tr>
   5520     <td>
   5521 <p>3.8.11. Dreams</p>
   5522 </td>
   5523     <td>
   5524 <p>Optional for Android Watch devices. Required for all other device types.</p>
   5525 </td>
   5526  </tr>
   5527  <tr>
   5528     <td>
   5529 <p>3.8.13 Unicode and font</p>
   5530 </td>
   5531     <td>
   5532 <p>MUST support Roboto 2 in addition to existing requirements.</p>
   5533 </td>
   5534  </tr>
   5535  <tr>
   5536     <td>
   5537 <p>3.12. TV Input Framework</p>
   5538 </td>
   5539     <td>
   5540 <p>Android Television device implementations MUST support Television Input
   5541 Framework.</p>
   5542 </td>
   5543  </tr>
   5544  <tr>
   5545     <td>
   5546 <p>5.1. Media Codecs</p>
   5547 </td>
   5548     <td>
   5549 <p>Added 3 sections for Audio, Image, and Video codecs.</p>
   5550 </td>
   5551  </tr>
   5552  <tr>
   5553     <td>
   5554 <p>5.4 Audio Recording</p>
   5555 </td>
   5556     <td>
   5557 <p>Broken into subsections</p>
   5558 </td>
   5559  </tr>
   5560  <tr>
   5561     <td>
   5562 <p>5.4.1. Raw audio capture</p>
   5563 </td>
   5564     <td>
   5565 <p>Defined characteristics for raw audio capture on devices that declare
   5566 android.hardware.microphone</p>
   5567 </td>
   5568  </tr>
   5569  <tr>
   5570     <td>
   5571 <p>5.5. Audio Playback</p>
   5572 </td>
   5573     <td>
   5574 <p>Added section 5.5. Audio Playback with 2 subsections: 5.5.1 Audio Effects and
   5575 5.5.2. Audio Output Volume</p>
   5576 </td>
   5577  </tr>
   5578  <tr>
   5579     <td>
   5580 <p>5.6 Audio Latency</p>
   5581 </td>
   5582     <td>
   5583 <p>Added definitions and requirements for cold output jitter, cold input jitter,
   5584 and continuous round-trip latency.</p>
   5585 </td>
   5586  </tr>
   5587  <tr>
   5588     <td>
   5589 <p>5.8 Secure Media</p>
   5590 </td>
   5591     <td>
   5592 <p>Included secure media requirements from 7.1.8. External Displays and added
   5593 requirements for Android Television.</p>
   5594 </td>
   5595  </tr>
   5596  <tr>
   5597     <td>
   5598 <p>6.1. Developer Tools</p>
   5599 </td>
   5600     <td>
   5601 <p>Updated resources.</p>
   5602 </td>
   5603  </tr>
   5604  <tr>
   5605     <td>
   5606 <p>6.2.1. Experimental</p>
   5607 </td>
   5608     <td>
   5609 <p>Removed section</p>
   5610 </td>
   5611  </tr>
   5612  <tr>
   5613     <td>
   5614 <p>7. Hardware Compatibility</p>
   5615 </td>
   5616     <td>
   5617 <p>Updated to reflect that device implementations MUST consistently report
   5618 accurate hardware configuration for the same build fingerprint.</p>
   5619 </td>
   5620  </tr>
   5621  <tr>
   5622     <td>
   5623 <p>7.1.1.1. Screen Size</p>
   5624 </td>
   5625     <td>
   5626 <p>Updated to reflect Android Watch devices screen size and that the value cant
   5627 change</p>
   5628 </td>
   5629  </tr>
   5630  <tr>
   5631     <td>
   5632 <p>7.1.1.2. Screen Aspect Ratio</p>
   5633 </td>
   5634     <td>
   5635 <p>Updated to reflect Android Watch devices screen aspect ratio (1:1).</p>
   5636 </td>
   5637  </tr>
   5638  <tr>
   5639     <td>
   5640 <p>7.1.3. Screen Orientation</p>
   5641 </td>
   5642     <td>
   5643 <p>Updated to reflect that devices with a fixed orientation landscape screen
   5644 SHOULD only report that orientation. </p>
   5645 </td>
   5646  </tr>
   5647  <tr>
   5648     <td>
   5649 <p>7.1.4. 2D and 3D Graphics Acceleration</p>
   5650 </td>
   5651     <td>
   5652 <p>Added that Android devices MAY support the Android extension pack. </p>
   5653 </td>
   5654  </tr>
   5655  <tr>
   5656     <td>
   5657 <p>(old) 7.1.6. Screen Types</p>
   5658 </td>
   5659     <td>
   5660 <p>Section Removed </p>
   5661 </td>
   5662  </tr>
   5663  <tr>
   5664     <td>
   5665 <p>7.1.6. Screen Technology</p>
   5666 </td>
   5667     <td>
   5668 <p>Updated pixel aspect ratio (PAR) to be between 0.9 and 1.15. (~15% tolerance)</p>
   5669 </td>
   5670  </tr>
   5671  <tr>
   5672     <td>
   5673 <p>7.1.7. External Displays</p>
   5674 </td>
   5675     <td>
   5676 <p>Moved part of section to section 5.8. Secure Media.</p>
   5677 </td>
   5678  </tr>
   5679  <tr>
   5680     <td>
   5681 <p>7.2.2. Non-touch Navigation</p>
   5682 </td>
   5683     <td>
   5684 <p>Android Television devices MUST support D-pad. </p>
   5685 </td>
   5686  </tr>
   5687  <tr>
   5688     <td>
   5689 <p>7.2.3. Navigation keys</p>
   5690 </td>
   5691     <td>
   5692 <p>Included language for support across different device types. </p>
   5693 </td>
   5694  </tr>
   5695  <tr>
   5696     <td>
   5697 <p>7.2.4. Touchscreen input</p>
   5698 </td>
   5699     <td>
   5700 <p>Android Watch devices MUST support touchscreen input. </p>
   5701 </td>
   5702  </tr>
   5703  <tr>
   5704     <td>
   5705 <p>7.2.6. Game Controller Support</p>
   5706 </td>
   5707     <td>
   5708 <p>Added section with Android Television requirements.</p>
   5709 </td>
   5710  </tr>
   5711  <tr>
   5712     <td>
   5713 <p>7.2.7. Remote Control </p>
   5714 </td>
   5715     <td>
   5716 <p>Added section with Android Television requirements.</p>
   5717 </td>
   5718  </tr>
   5719  <tr>
   5720     <td>
   5721 <p>7.3. Sensors</p>
   5722 </td>
   5723     <td>
   5724 <p>Redefined synthetic sensors as composite sensors and streaming sensors as
   5725 continuous sensors. Sensors should report event time in nanoseconds.</p>
   5726 </td>
   5727  </tr>
   5728  <tr>
   5729     <td>
   5730 <p>7.3.1. Accelerometer</p>
   5731 </td>
   5732     <td>
   5733 <p>Clarified required sensor types and revised requirement thresholds. </p>
   5734 </td>
   5735  </tr>
   5736  <tr>
   5737     <td>
   5738 <p>7.3.2. Magnetometer</p>
   5739 </td>
   5740     <td>
   5741 <p>Clarified required sensor types and revised requirement thresholds.</p>
   5742 </td>
   5743  </tr>
   5744  <tr>
   5745     <td>
   5746 <p>7.3.4. Gyroscope</p>
   5747 </td>
   5748     <td>
   5749 <p>Clarified required sensor types and revised requirement thresholds.</p>
   5750 </td>
   5751  </tr>
   5752  <tr>
   5753     <td>
   5754 <p>7.3.5. Barometer</p>
   5755 </td>
   5756     <td>
   5757 <p>Changed from MAY to SHOULD implement barometer. MUST implement and report
   5758 TYPE_PRESSURE sensor.</p>
   5759 </td>
   5760  </tr>
   5761  <tr>
   5762     <td>
   5763 <p>7.3.6. Thermometer</p>
   5764 </td>
   5765     <td>
   5766 <p>Devices MAY include ambient thermometer. MAY but SHOULD NOT include CPU
   5767 thermometer.</p>
   5768 </td>
   5769  </tr>
   5770  <tr>
   5771     <td>
   5772 <p>7.3.8. Proximity Sensor</p>
   5773 </td>
   5774     <td>
   5775 <p>Devices that can make a voice call and indicate any value other than
   5776 PHONE_TYPE_NONE in getPhoneType SHOULD include a proximity sensor.</p>
   5777 </td>
   5778  </tr>
   5779  <tr>
   5780     <td>
   5781 <p>7.4.2. IEEE 802.11 (Wi-Fi)</p>
   5782 </td>
   5783     <td>
   5784 <p>Android Television devices MUST include Wi-Fi support. Devices that DO support
   5785 wifi must report android.hardware.wifi. </p>
   5786 </td>
   5787  </tr>
   5788  <tr>
   5789     <td>
   5790 <p>7.4.2.1. Wi-Fi Direct</p>
   5791 </td>
   5792     <td>
   5793 <p>MUST report the hardware feature android.hardware.wifi.direct.</p>
   5794 </td>
   5795  </tr>
   5796  <tr>
   5797     <td>
   5798 <p>7.4.2.2. Wi-Fi Tunneled Direct Link Setup</p>
   5799 </td>
   5800     <td>
   5801 <p>Android Television devices MUST include support for Wi-Fi TDLS.</p>
   5802 </td>
   5803  </tr>
   5804  <tr>
   5805     <td>
   5806 <p>7.5. Cameras</p>
   5807 </td>
   5808     <td>
   5809 <p>If a device implementation includes at least one camera, it SHOULD be possible
   5810 for an application to simultaneously allocate 3 bitmaps equal to the size of
   5811 the images produced by the largest-resolution camera sensor on the device.</p>
   5812 </td>
   5813  </tr>
   5814  <tr>
   5815     <td>
   5816 <p>7.5.3. External Cameras</p>
   5817 </td>
   5818     <td>
   5819 <p>Added requirements that device implementations with USB host mode MAY include
   5820 support for an external camera.</p>
   5821 </td>
   5822  </tr>
   5823  <tr>
   5824     <td>
   5825 <p>7.5.5. Camera System Features</p>
   5826 </td>
   5827     <td>
   5828 <p>Added list of camera features and when they should be defined. </p>
   5829 </td>
   5830  </tr>
   5831  <tr>
   5832     <td>
   5833 <p>7.6.1. Minimum Memory and Storage</p>
   5834 </td>
   5835     <td>
   5836 <p>Updated requirements for 32- and 64-bit devices. SVELTE memory requirement
   5837 removed. Devices MUST have at least 1.5GB of non-volatile storage</p>
   5838 </td>
   5839  </tr>
   5840  <tr>
   5841     <td>
   5842 <p>7.6.2. Application Shared Storage</p>
   5843 </td>
   5844     <td>
   5845 <p>Updated requirements for user-accessible removable storage</p>
   5846 </td>
   5847  </tr>
   5848  <tr>
   5849     <td>
   5850 <p>7.7. USB</p>
   5851 </td>
   5852     <td>
   5853 <p>Removed requirements for non-charging ports being on the same edge as the
   5854 micro-USB port. Updated requirements for Host and Peripheral mode. </p>
   5855 </td>
   5856  </tr>
   5857  <tr>
   5858     <td>
   5859 <p>7.8.1. Audio</p>
   5860 </td>
   5861     <td>
   5862 <p>Moved microphone section here. Added requirements for Audio Output and Audio
   5863 Analog ports. </p>
   5864 </td>
   5865  </tr>
   5866  <tr>
   5867     <td>
   5868 <p>8. Performance Compatibility</p>
   5869 </td>
   5870     <td>
   5871 <p>Added requirements for user interface consistency.</p>
   5872 </td>
   5873  </tr>
   5874  <tr>
   5875     <td>
   5876 <p>9.5. Multi-User Support</p>
   5877 </td>
   5878     <td>
   5879 <p>Multi-user support feature is optional for all device types. Detailed
   5880 requirements by device type in section.</p>
   5881 </td>
   5882  </tr>
   5883  <tr>
   5884     <td>
   5885 <p>9.7. Kernel Security Features</p>
   5886 </td>
   5887     <td>
   5888 <p>MAY have a visible user interface when an unblocked security violation occurs
   5889 resulting in a successful exploit. No permissive mode domains allowed.</p>
   5890 </td>
   5891  </tr>
   5892  <tr>
   5893     <td>
   5894 <p>9.9. Full-Disk Encryption</p>
   5895 </td>
   5896     <td>
   5897 <p>Devices with a lock screen SHOULD support full-disk encryption. For new devices,
   5898 full-disk encryption must be enabled out of box. </p>
   5899 </td>
   5900  </tr>
   5901  <tr>
   5902     <td>
   5903 <p>9.10 Verified boot</p>
   5904 </td>
   5905     <td>
   5906 <p>Added section to recommend that Device implementations support verified boot
   5907 for device integrity.</p>
   5908 </td>
   5909  </tr>
   5910  <tr>
   5911     <td>
   5912 <p>10.3. Reference Applications</p>
   5913 </td>
   5914     <td>
   5915 <p>Removed section from CDD.</p>
   5916 </td>
   5917  </tr>
   5918  <tr>
   5919     <td>
   5920 <p>11. Updatable Software</p>
   5921 </td>
   5922     <td>
   5923 <p>If a device supports 802.11 or Bluetooth PAN (Personal Area Network) profile,
   5924 then it MUST support Over-the-air download with offline update via reboot.</p>
   5925 </td>
   5926  </tr>
   5927  <tr>
   5928     <td>
   5929 <p>14. Resources</p>
   5930 </td>
   5931     <td>
   5932 <p>Resources moved from section 2 to section 14</p>
   5933 </td>
   5934  </tr>
   5935 </table>
   5936 
   5937 
   5938 <h1 id=13_contact_us>13. Contact Us</h1>
   5939 
   5940 
   5941 <p>You can join the android-compatibility forum <a href="https://groups.google.com/forum/#!forum/android-compatibility">[Resources, 109</a>] and ask for clarifications or bring up any issues that you think the document
   5942 does not cover.</p>
   5943 
   5944 <h1 id=14_resources>14. Resources</h1>
   5945 
   5946 
   5947 <p>1. IETF RFC2119 Requirement Levels: <a href="http://www.ietf.org/rfc/rfc2119.txt">http://www.ietf.org/rfc/rfc2119.txt</a></p>
   5948 
   5949 <p>2. Android Open Source Project: <a href="http://source.android.com/">http://source.android.com/</a></p>
   5950 
   5951 <p>3. Android Television features: <a href="http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_LEANBACK">http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_LEANBACK</a> </p>
   5952 
   5953 <p>4. Android Watch feature: <a href="http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_WATCH">http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_WATCH</a></p>
   5954 
   5955 <p>5. API definitions and documentation: <a href="http://developer.android.com/reference/packages.html">http://developer.android.com/reference/packages.html</a></p>
   5956 
   5957 <p>6. Android Permissions reference: <a href="http://developer.android.com/reference/android/Manifest.permission.html">http://developer.android.com/reference/android/Manifest.permission.html</a></p>
   5958 
   5959 <p>7. android.os.Build reference: <a href="http://developer.android.com/reference/android/os/Build.html">http://developer.android.com/reference/android/os/Build.html</a></p>
   5960 
   5961 <p>8. Android 5.0 allowed version strings: <a href="http://source.android.com/compatibility/5.0/versions.html">http://source.android.com/compatibility/5.0/versions.html</a></p>
   5962 
   5963 <p>9. Telephony Provider: <a href="http://developer.android.com/reference/android/provider/Telephony.html">http://developer.android.com/reference/android/provider/Telephony.html</a></p>
   5964 
   5965 <p>10. Host-based Card Emulation: <a href="http://developer.android.com/guide/topics/connectivity/nfc/hce.html">http://developer.android.com/guide/topics/connectivity/nfc/hce.html</a></p>
   5966 
   5967 <p>11. Android Extension Pack: <a href="http://developer.android.com/guide/topics/graphics/opengl.html#aep">http://developer.android.com/guide/topics/graphics/opengl.html#aep</a> </p>
   5968 
   5969 <p>12. android.webkit.WebView class: <a href="http://developer.android.com/reference/android/webkit/WebView.html">http://developer.android.com/reference/android/webkit/WebView.html</a></p>
   5970 
   5971 <p>13. WebView compatibility: <a href="http://www.chromium.org/">http://www.chromium.org/</a></p>
   5972 
   5973 <p>14. HTML5: <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">http://www.whatwg.org/specs/web-apps/current-work/multipage/</a></p>
   5974 
   5975 <p>15. HTML5 offline capabilities:<a href="http://dev.w3.org/html5/spec/Overview.html#offline"> http://dev.w3.org/html5/spec/Overview.html#offline</a></p>
   5976 
   5977 <p>16. HTML5 video tag: <a href="http://dev.w3.org/html5/spec/Overview.html#video">http://dev.w3.org/html5/spec/Overview.html#video</a></p>
   5978 
   5979 <p>17. HTML5/W3C geolocation API: <a href="http://www.w3.org/TR/geolocation-API/">http://www.w3.org/TR/geolocation-API/</a></p>
   5980 
   5981 <p>18. HTML5/W3C webstorage API: <a href="http://www.w3.org/TR/webstorage/">http://www.w3.org/TR/webstorage/</a></p>
   5982 
   5983 <p>19. HTML5/W3C IndexedDB API: <a href="http://www.w3.org/TR/IndexedDB/">http://www.w3.org/TR/IndexedDB/</a></p>
   5984 
   5985 <p>20. Dalvik Executable Format and bytecode specification: available in the
   5986 Android source code, at dalvik/docs</p>
   5987 
   5988 <p>21. AppWidgets: <a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">http://developer.android.com/guide/practices/ui_guidelines/widget_design.html</a></p>
   5989 
   5990 <p>22. Notifications: <a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html">http://developer.android.com/guide/topics/ui/notifiers/notifications.html</a></p>
   5991 
   5992 <p>23. Application Resources: <a href="https://developer.android.com/guide/topics/resources/available-resources.html">https://developer.android.com/guide/topics/resources/available-resources.html</a></p>
   5993 
   5994 <p>24. Status Bar icon style guide: <a href="http://developer.android.com/design/style/iconography.html">http://developer.android.com/design/style/iconography.html</a></p>
   5995 
   5996 <p>25. Notifications Resources: <a href="https://developer.android.com/design/patterns/notifications.html">https://developer.android.com/design/patterns/notifications.html</a> </p>
   5997 
   5998 <p>26. Search Manager: <a href="http://developer.android.com/reference/android/app/SearchManager.html">http://developer.android.com/reference/android/app/SearchManager.html</a> </p>
   5999 
   6000 <p>27. Toasts: <a href="http://developer.android.com/reference/android/widget/Toast.html">http://developer.android.com/reference/android/widget/Toast.html</a></p>
   6001 
   6002 <p>28. Themes: <a href="http://developer.android.com/guide/topics/ui/themes.html">http://developer.android.com/guide/topics/ui/themes.html</a></p>
   6003 
   6004 <p>29. R.style class: <a href="http://developer.android.com/reference/android/R.style.html">http://developer.android.com/reference/android/R.style.html</a></p>
   6005 
   6006 <p>30. Material design: <a href="http://developer.android.com/reference/android/R.style.html#Theme_Material">http://developer.android.com/reference/android/R.style.html#Theme_Material</a> </p>
   6007 
   6008 <p>31. Live Wallpapers: <a href="http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html">http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html</a></p>
   6009 
   6010 <p>32. Overview screen resources: <a href="http://developer.android.com/guide/components/recents.html">http://developer.android.com/guide/components/recents.html</a> </p>
   6011 
   6012 <p>33. Screen pinning: <a href="https://developer.android.com/about/versions/android-5.0.html#ScreenPinning">https://developer.android.com/about/versions/android-5.0.html#ScreenPinning</a> </p>
   6013 
   6014 <p>34. Input methods: <a href="http://developer.android.com/guide/topics/text/creating-input-method.html">http://developer.android.com/guide/topics/text/creating-input-method.html</a> </p>
   6015 
   6016 <p>35. Media Notification: <a href="https://developer.android.com/reference/android/app/Notification.MediaStyle.html">https://developer.android.com/reference/android/app/Notification.MediaStyle.html</a></p>
   6017 
   6018 <p>36. Dreams: <a href="http://developer.android.com/reference/android/service/dreams/DreamService.html">http://developer.android.com/reference/android/service/dreams/DreamService.html</a></p>
   6019 
   6020 <p>37. Settings.Secure LOCATION_MODE:</p>
   6021 
   6022 <p><a href="http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE">http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE</a></p>
   6023 
   6024 <p>38. Unicode 6.1.0: <a href="http://www.unicode.org/versions/Unicode6.1.0/">http://www.unicode.org/versions/Unicode6.1.0/</a></p>
   6025 
   6026 <p>39. Android Device Administration: <a href="http://developer.android.com/guide/topics/admin/device-admin.html">http://developer.android.com/guide/topics/admin/device-admin.html</a></p>
   6027 
   6028 <p>40. DevicePolicyManager reference: <a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html">http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html</a></p>
   6029 
   6030 <p>41. Android Device Owner App:</p>
   6031 
   6032 <p><a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#isDeviceOwnerApp(java.lang.String)">http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#isDeviceOwnerApp(java.lang.String)</a></p>
   6033 
   6034 <p>42. Android Accessibility Service APIs: <a href="http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html">http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html</a></p>
   6035 
   6036 <p>43. Android Accessibility APIs: <a href="http://developer.android.com/reference/android/view/accessibility/package-summary.html">http://developer.android.com/reference/android/view/accessibility/package-summary.html</a></p>
   6037 
   6038 <p>44. Eyes Free project: <a href="http://code.google.com/p/eyes-free">http://code.google.com/p/eyes-free</a></p>
   6039 
   6040 <p>45. Text-To-Speech APIs: <a href="http://developer.android.com/reference/android/speech/tts/package-summary.html">http://developer.android.com/reference/android/speech/tts/package-summary.html</a></p>
   6041 
   6042 <p>46. Television Input Framework: <a href="https://source.android.com/devices/tv/index.html">https://source.android.com/devices/tv/index.html</a></p>
   6043 
   6044 <p>47. Reference tool documentation (for adb, aapt, ddms, systrace): <a href="http://developer.android.com/guide/developing/tools/index.html">http://developer.android.com/guide/developing/tools/index.html</a></p>
   6045 
   6046 <p>48. Android apk file description: <a href="http://developer.android.com/guide/components/fundamentals.html">http://developer.android.com/guide/components/fundamentals.html </a></p>
   6047 
   6048 <p>49. Manifest files: <a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html">http://developer.android.com/guide/topics/manifest/manifest-intro.html</a></p>
   6049 
   6050 <p>50. Android Media Formats: <a href="http://developer.android.com/guide/appendix/media-formats.html">http://developer.android.com/guide/appendix/media-formats.html</a></p>
   6051 
   6052 <p>51. RTC Hardware Coding Requirements: <a href="http://www.webmproject.org/hardware/rtc-coding-requirements/">http://www.webmproject.org/hardware/rtc-coding-requirements/</a></p>
   6053 
   6054 <p>52. AudioEffect API: <a href="http://developer.android.com/reference/android/media/audiofx/AudioEffect.html">http://developer.android.com/reference/android/media/audiofx/AudioEffect.html</a></p>
   6055 
   6056 <p>53. Android android.content.pm.PackageManager class and Hardware Features List:</p>
   6057 
   6058 <p><a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">http://developer.android.com/reference/android/content/pm/PackageManager.html</a></p>
   6059 
   6060 <p>54. HTTP Live Streaming Draft Protocol: <a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-03">http://tools.ietf.org/html/draft-pantos-http-live-streaming-03</a></p>
   6061 
   6062 <p>55. ADB: <a href="http://developer.android.com/tools/help/adb.html">http://developer.android.com/tools/help/adb.html</a> </p>
   6063 
   6064 <p>56. Dumpsys: <a href="https://source.android.com/devices/tech/input/dumpsys.html">https://source.android.com/devices/tech/input/dumpsys.html</a> </p>
   6065 
   6066 <p>57. DDMS: <a href="http://developer.android.com/tools/debugging/ddms.html">http://developer.android.com/tools/debugging/ddms.html</a> </p>
   6067 
   6068 <p>58. Monkey testing tool: <a href="http://developer.android.com/tools/help/monkey.html">http://developer.android.com/tools/help/monkey.html</a> </p>
   6069 
   6070 <p>59. SysyTrace tool: <a href="http://developer.android.com/tools/help/systrace.html">http://developer.android.com/tools/help/systrace.html</a></p>
   6071 
   6072 <p>60. Android Application Development-Related Settings:</p>
   6073 
   6074 <p><a href="http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS">http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS</a></p>
   6075 
   6076 <p>61. Supporting Multiple Screens: <a href="http://developer.android.com/guide/practices/screens_support.html">http://developer.android.com/guide/practices/screens_support.html</a></p>
   6077 
   6078 <p>62. android.util.DisplayMetrics: <a href="http://developer.android.com/reference/android/util/DisplayMetrics.html">http://developer.android.com/reference/android/util/DisplayMetrics.html</a></p>
   6079 
   6080 <p>63. RenderScript: <a href="http://developer.android.com/guide/topics/renderscript/">http://developer.android.com/guide/topics/renderscript/</a></p>
   6081 
   6082 <p>64. Android extension pack for OpenGL ES: <a href="https://developer.android.com/reference/android/opengl/GLES31Ext.html">https://developer.android.com/reference/android/opengl/GLES31Ext.html</a> </p>
   6083 
   6084 <p>65. Hardware Acceleration: <a href="http://developer.android.com/guide/topics/graphics/hardware-accel.html">http://developer.android.com/guide/topics/graphics/hardware-accel.html</a></p>
   6085 
   6086 <p>66. EGL Extension-EGL_ANDROID_RECORDABLE:</p>
   6087 
   6088 <p><a href="http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt">http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt</a></p>
   6089 
   6090 <p>67. Display Manager: <a href="http://developer.android.com/reference/android/hardware/display/DisplayManager.html">http://developer.android.com/reference/android/hardware/display/DisplayManager.html</a></p>
   6091 
   6092 <p>68. android.content.res.Configuration: <a href="http://developer.android.com/reference/android/content/res/Configuration.html">http://developer.android.com/reference/android/content/res/Configuration.html</a></p>
   6093 
   6094 <p>69. Action Assist: <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST">http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST</a></p>
   6095 
   6096 <p>70. Touch Input Configuration: <a href="http://source.android.com/devices/tech/input/touch-devices.html">http://source.android.com/devices/tech/input/touch-devices.html</a></p>
   6097 
   6098 <p>71. Motion Event API: <a href="http://developer.android.com/reference/android/view/MotionEvent.html">http://developer.android.com/reference/android/view/MotionEvent.html</a></p>
   6099 
   6100 <p>72. Key Event API: <a href="http://developer.android.com/reference/android/view/KeyEvent.html">http://developer.android.com/reference/android/view/KeyEvent.html</a> </p>
   6101 
   6102 <p>73. Android Open Source sensors: <a href="http://source.android.com/devices/sensors/">http://source.android.com/devices/sensors/</a></p>
   6103 
   6104 <p>74. android.hardware.SensorEvent: <a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">http://developer.android.com/reference/android/hardware/SensorEvent.html</a></p>
   6105 
   6106 <p>75. Timestamp sensor event: <a href="http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp">http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp</a></p>
   6107 
   6108 <p>76. Android Open Source composite sensors: <a href="http://source.android.com/devices/sensors/composite_sensors.html">http://source.android.com/devices/sensors/composite_sensors.html</a></p>
   6109 
   6110 <p>77. Continuous trigger mode: <a href="http://source.android.com/devices/sensors/base_triggers.html#continuous">http://source.android.com/devices/sensors/base_triggers.html#continuous</a></p>
   6111 
   6112 <p>78. Accelerometer sensor: <a href="http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER">http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER</a></p>
   6113 
   6114 <p>79. Wi-Fi Multicast API: <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html">http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html</a></p>
   6115 
   6116 <p>80. Wi-Fi Direct (Wi-Fi P2P): <a href="http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html">http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html</a></p>
   6117 
   6118 <p>81. WifiManager API: <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html">http://developer.android.com/reference/android/net/wifi/WifiManager.html</a></p>
   6119 
   6120 <p>82. Bluetooth API: <a href="http://developer.android.com/reference/android/bluetooth/package-summary.html">http://developer.android.com/reference/android/bluetooth/package-summary.html</a></p>
   6121 
   6122 <p>83. Bluetooth ScanFilter API: <a href="https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html">https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html</a></p>
   6123 
   6124 <p>84. NDEF Push Protocol: <a href="http://source.android.com/compatibility/ndef-push-protocol.pdf">http://source.android.com/compatibility/ndef-push-protocol.pdf</a></p>
   6125 
   6126 <p>85. Android Beam: <a href="http://developer.android.com/guide/topics/connectivity/nfc/nfc.html">http://developer.android.com/guide/topics/connectivity/nfc/nfc.html</a> </p>
   6127 
   6128 <p>86. Android NFC Sharing Settings:</p>
   6129 
   6130 <p><a href="http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS">http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS</a></p>
   6131 
   6132 <p>87. NFC Connection Handover: <a href="http://www.nfc-forum.org/specs/spec_list/#conn_handover">http://www.nfc-forum.org/specs/spec_list/#conn_handover</a></p>
   6133 
   6134 <p>88. Bluetooth Secure Simple Pairing Using NFC: <a href="http://members.nfc-forum.org/apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf">http://members.nfc-forum.org/apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf</a> </p>
   6135 
   6136 <p>89. Content Resolver: <a href="http://developer.android.com/reference/android/content/ContentResolver.html">http://developer.android.com/reference/android/content/ContentResolver.html</a></p>
   6137 
   6138 <p>90. Camera orientation API: <a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)">http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)</a></p>
   6139 
   6140 <p>91. Camera: <a href="http://developer.android.com/reference/android/hardware/Camera.html">http://developer.android.com/reference/android/hardware/Camera.html</a></p>
   6141 
   6142 <p>92. Camera: <a href="http://developer.android.com/reference/android/hardware/Camera.Parameters.html">http://developer.android.com/reference/android/hardware/Camera.Parameters.html</a></p>
   6143 
   6144 <p>93. Camera hardware level: <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL">https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL</a> </p>
   6145 
   6146 <p>94. Camera version support: <a href="http://source.android.com/devices/camera/versioning.html">http://source.android.com/devices/camera/versioning.html</a> </p>
   6147 
   6148 <p>95. Android DownloadManager: <a href="http://developer.android.com/reference/android/app/DownloadManager.html">http://developer.android.com/reference/android/app/DownloadManager.html</a></p>
   6149 
   6150 <p>96. Android File Transfer: <a href="http://www.android.com/filetransfer">http://www.android.com/filetransfer</a></p>
   6151 
   6152 <p>97. Android Open Accessories: <a href="http://developer.android.com/guide/topics/usb/accessory.html">http://developer.android.com/guide/topics/usb/accessory.html</a></p>
   6153 
   6154 <p>98. Android USB Audio: <a href="http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO">http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO</a></p>
   6155 
   6156 <p>99. USB Charging Specification: <a href="http://www.usb.org/developers/docs/devclass_docs/USB_Battery_Charging_1.2.pdf">http://www.usb.org/developers/docs/devclass_docs/USB_Battery_Charging_1.2.pdf</a></p>
   6157 
   6158 <p>100. USB Host API:<a href="http://developer.android.com/guide/topics/usb/host.html"> http://developer.android.com/guide/topics/usb/host.html</a></p>
   6159 
   6160 <p>101. Wired audio headset: <a href="http://source.android.com/accessories/headset-spec.html">http://source.android.com/accessories/headset-spec.html</a> </p>
   6161 
   6162 <p>102. Android Security and Permissions reference: <a href="http://developer.android.com/guide/topics/security/permissions.html">http://developer.android.com/guide/topics/security/permissions.html</a></p>
   6163 
   6164 <p>103. UserManager reference: <a href="http://developer.android.com/reference/android/os/UserManager.html">http://developer.android.com/reference/android/os/UserManager.html</a></p>
   6165 
   6166 <p>104. External Storage reference: <a href="http://source.android.com/devices/tech/storage">http://source.android.com/devices/tech/storage</a></p>
   6167 
   6168 <p>105. External Storage APIs: <a href="http://developer.android.com/reference/android/os/Environment.html">http://developer.android.com/reference/android/os/Environment.html</a></p>
   6169 
   6170 <p>106. SMS Short Code: <a href="http://en.wikipedia.org/wiki/Short_code">http://en.wikipedia.org/wiki/Short_code</a></p>
   6171 
   6172 <p>107. Android Open Source Encryption: <a href="http://source.android.com/devices/tech/encryption/index.html">http://source.android.com/devices/tech/encryption/index.html</a></p>
   6173 
   6174 <p>108. Android Compatibility Program Overview: <a href="http://source.android.com/compatibility/index.html">http://source.android.com/compatibility/index.html</a></p>
   6175 
   6176 <p>109. Android Compatibility forum: <a href="https://groups.google.com/forum/#!forum/android-compatibility">https://groups.google.com/forum/#!forum/android-compatibility</a></p>
   6177 
   6178 <p>110. WebM project: <a href="http://www.webmproject.org/">http://www.webmproject.org/</a>  </p>
   6179 
   6180 <p>Many of these resources are derived directly or indirectly from the Android
   6181 SDK, and will be functionally identical to the information in that SDK's
   6182 documentation. In any cases where this Compatibility Definition or the
   6183 Compatibility Test Suite disagrees with the SDK documentation, the SDK
   6184 documentation is considered authoritative. Any technical details provided in
   6185 the references included above are considered by inclusion to be part of this
   6186 Compatibility Definition.</p>
   6187 <div style="page-break-before: always;"></div>
   6188 
   6189 <div id="footerContent" xmlns:pdf="https://source.android.com">
   6190 <pdf:pagenumber/>
   6191 </div>
   6192 </body>
   6193 </html>
   6194