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