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