blob: 5e72ecf90586f3658e870fc5dae3b172a2dc01c0 [file] [log] [blame]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<title>Android 4.1 Compatibility Definition</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="generator" content="pdftohtml 0.36"/>
<meta name="date" content="2013-06-27T14:12:42+00:00"/>
<style type="text/css">
<!--
.xflip {
-moz-transform: scaleX(-1);
-webkit-transform: scaleX(-1);
-o-transform: scaleX(-1);
transform: scaleX(-1);
filter: fliph;
}
.yflip {
-moz-transform: scaleY(-1);
-webkit-transform: scaleY(-1);
-o-transform: scaleY(-1);
transform: scaleY(-1);
filter: flipv;
}
.xyflip {
-moz-transform: scaleX(-1) scaleY(-1);
-webkit-transform: scaleX(-1) scaleY(-1);
-o-transform: scaleX(-1) scaleY(-1);
transform: scaleX(-1) scaleY(-1);
filter: fliph + flipv;
}
-->
</style>
</head>
<a name=1></a><b>Android&#160;4.1&#160;Compatibility&#160;Definition<br/>Revision&#160;3<br/></b>Last&#160;updated:&#160;June&#160;24,&#160;2013<br/>
Copyright&#160;©&#160;2012,&#160;Google&#160;Inc.&#160;Al&#160;&#160;rights&#160;reserved.<br/>compatibility@android.com<br/>
<b>Table&#160;of&#160;Contents</b><br/>
1.&#160;Introduction<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-1">2.&#160;Resources<br/></a><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-2">3.&#160;Software</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3">3.1.&#160;Man</a>aged&#160;API&#160;Compatibility<br/>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.1">.2.&#160;Soft&#160;API&#160;Compatibility</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2">3.2.1.&#160;Permissions<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2.1">.2.2.&#160;Build&#160;Paramete</a>rs<br/>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2.2">.2.3.&#160;Intent&#160;Compatibility</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2.3">3.2.3.1.&#160;Core&#160;Applicatio</a>n&#160;Intents<br/>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2.3.1">.2.3.2.&#160;Intent&#160;Overrides<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2.3.2">.2.3.3.&#160;Intent&#160;Namespaces<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2.3.3">.2.3.4.&#160;Broadcast&#160;Intents</a><br/>
3.3.&#160;Native<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.2.3.4">&#160;API&#160;Compatibility</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.3">3.3.1&#160;Application&#160;Binary&#160;Inte</a>rfaces<br/>
3.4.&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.3.1">Web&#160;Compatibility</a><br/>
3.4.1.&#160;WebView&#160;Compatibility<br/>3.4.2.&#160;Browser&#160;Compatibility<br/>
3.5.&#160;API&#160;Behavioral&#160;Compatibility<br/>3.6.&#160;API&#160;Namespaces<br/>3.7.&#160;Virtual&#160;Machine&#160;Compatibility<br/>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.6">.8.&#160;User&#160;Interface&#160;Comp</a>atibility<br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.7">3.8.1.&#160;Widgets<br/></a><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8">3.8.2.&#160;Notifications<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.1">.8.3.&#160;Search<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.2">.8.4.&#160;Toasts<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.3">.8.5.&#160;Themes<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.4">.8.6.&#160;Live&#160;Wal&#160;</a>papers<br/>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.5">.8.7.&#160;Recent&#160;Ap</a>plication&#160;Display<br/>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.6">.8.8.&#160;Input&#160;Management&#160;</a>Settings<br/>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.7">.8.9.&#160;Lock&#160;Screen&#160;Remote&#160;Control</a><br/>
3.9&#160;D<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.8">evice&#160;Administration<br/></a>3.10&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.8.9">Accessibility<br/></a>3<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.9">.11&#160;Text-to-Speech</a><br/>
4.&#160;Ap<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.10">plication&#160;Packaging</a>&#160;Compatibility<br/>5.&#160;Multimedia&#160;Compatibility<br/>
5.1.&#160;Media&#160;Codecs<br/>5.2.&#160;Video&#160;Encoding<br/>5.3.&#160;Audio&#160;Recording<br/>5.4.&#160;Audio&#160;Latency<br/>5<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-5.2">.5.&#160;Network&#160;Protocols</a><br/>
6.&#160;De<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-5.3">veloper&#160;Tool&#160;Compatibi</a>lity<br/>7.&#160;Ha<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-5.4">rdware&#160;Compatibility</a><br/>
7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-5.5">.1.&#160;Display&#160;and&#160;Graphics</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-6">7.1.1.&#160;Screen&#160;Configurati</a>on<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7">7.1.2.&#160;Display&#160;Metri</a>cs<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1">7.1.3.&#160;Screen&#160;Orientatio</a>n<br/>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.1">.1.4.&#160;2D&#160;and&#160;3D&#160;Graphics&#160;Acc</a>leration<br/>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.2">.1.5.&#160;Legacy&#160;Application</a>&#160;Compatibility&#160;Mode<br/>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.3">.1.6.&#160;Screen&#160;Types<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.4">.1.7.&#160;Screen&#160;Technology</a><br/>
7.2.&#160;In<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.5">put&#160;Devices</a><br/>
7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.6">.2.1.&#160;Keyboard<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.7">.2.2.&#160;Non-touch&#160;Navigation<br/></a>7.2.3.&#160;Navigation&#160;keys<br/>7.2.4.&#160;Touchscreen&#160;input<br/>7.2.5.&#160;Fake&#160;touch&#160;input<br/>7.2.6.&#160;Microphone<br/>
7.3.&#160;Sensors<br/>
7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.2.4">.3.1.&#160;Accelerometer</a><br/>
<hr/>
<a name=2></a>7.3.1.&#160;Accelerometer<br/>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.3.2">.3.2.&#160;Magnetometer<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.3.3">.3.3.&#160;GPS<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.3.4">.3.4.&#160;Gyroscope<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.3.5">.3.5.&#160;Barometer<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.3.6">.3.6.&#160;Thermometer<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.3.7">.3.7.&#160;Photometer<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.3.8">.3.8.&#160;Proximity&#160;Sensor</a><br/>
7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.4">.4.&#160;Data&#160;Connectivity</a><br/>
7.4.1.&#160;Telephony<br/>7.4.2.&#160;IEEE&#160;802.11&#160;(WiFi)<br/>
7.4.2.1.&#160;WiFi&#160;Direct<br/>
7.4.3.&#160;Bluetooth<br/>7.4.4.&#160;Near-Field&#160;Communications<br/>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.4.4">.4.5.&#160;Minimum&#160;Network&#160;Capability</a><br/>
7.5.&#160;C<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.4.5">ameras</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.5">7.5.1.&#160;Rear</a>-Facing&#160;Camera<br/>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.5.1">.5.2.&#160;Front-Facing&#160;Camera<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.5.2">.5.3.&#160;Camera&#160;API&#160;Behavior<br/></a>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.5.3">.5.4.&#160;Camera&#160;Orientation</a><br/>
7.6.&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.5.4">Memory&#160;and&#160;Storage</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.6">7.6.1.&#160;Minimum&#160;Memory</a>&#160;and&#160;Storage<br/>7<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.6.1">.6.2.&#160;Application&#160;Shared&#160;Storage</a><br/>
7.7.&#160;U<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.6.2">SB</a><br/>
8.&#160;Pe<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.7">rformance</a>&#160;Compatibility<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-8">9.&#160;Security&#160;Model&#160;Compatibility</a><br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-9">9.1.&#160;Permissions<br/></a>9<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-9.1">.2.&#160;UID&#160;and&#160;Proce</a>ss&#160;Isolation<br/>9<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-9.2">.3.&#160;Filesystem&#160;Permissions<br/></a>9.4.&#160;Alternate&#160;Execution&#160;Environments<br/>
10.&#160;Software&#160;Compatibility&#160;Testing<br/>
10.1.&#160;Compatibility&#160;Test&#160;Suite<br/>10.2.&#160;CTS&#160;Verifier<br/>10.3.&#160;Reference&#160;Applications<br/>
11.&#160;U<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-10.2">pdatable&#160;Software<br/></a>12.&#160;C<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-10.3">ontact&#160;Us<br/></a><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-11">Appendix&#160;A&#160;-&#160;Bluetooth&#160;Tes</a>t&#160;Procedure<br/>
<hr/>
<a name=3></a><b>1.&#160;Introduction</b><br/>
This&#160;document&#160;enumerates&#160;the&#160;requirements&#160;that&#160;must&#160;be&#160;met&#160;in&#160;order&#160;for&#160;devices&#160;to<br/>be&#160;compatible&#160;with&#160;Android&#160;4.1.<br/>
The&#160;use&#160;of&#160;&#34;must&#34;,&#160;&#34;must&#160;not&#34;,&#160;&#34;required&#34;,&#160;&#34;shal&#160;&#34;,&#160;&#34;shal&#160;&#160;not&#34;,&#160;&#34;should&#34;,&#160;&#34;should&#160;not&#34;,<br/>&#34;recommended&#34;,&#160;&#34;may&#34;&#160;and&#160;&#34;optional&#34;&#160;is&#160;per&#160;the&#160;IETF&#160;standard&#160;defined&#160;in&#160;RFC2119<br/>[<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources01">Resources,&#160;1].</a><br/>
As&#160;used&#160;in&#160;this&#160;document,&#160;a&#160;&#34;device&#160;implementer&#34;&#160;or&#160;&#34;implementer&#34;&#160;is&#160;a&#160;person&#160;or<br/>organization&#160;developing&#160;a&#160;hardware/software&#160;solution&#160;running&#160;Android&#160;4.1.&#160;A&#160;&#34;device<br/>implementation&#34;&#160;or&#160;&#34;implementation&#34;&#160;is&#160;the&#160;hardware/software&#160;solution&#160;so&#160;developed.<br/>
To&#160;be&#160;considered&#160;compatible&#160;with&#160;Android&#160;4.1,&#160;device&#160;implementations&#160;MUST&#160;meet<br/>the&#160;requirements&#160;presented&#160;in&#160;this&#160;Compatibility&#160;Definition,&#160;including&#160;any&#160;documents<br/>incorporated&#160;via&#160;reference.<br/>
Where&#160;this&#160;definition&#160;or&#160;the&#160;software&#160;tests&#160;described&#160;in&#160;Section&#160;10&#160;is&#160;silent,<br/>ambiguous,&#160;or&#160;incomplete,&#160;it&#160;is&#160;the&#160;responsibility&#160;of&#160;the&#160;dev<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-10">ice&#160;impleme</a>nter&#160;to&#160;ensure<br/>compatibility&#160;with&#160;existing&#160;implementations.<br/>
For&#160;this&#160;reason,&#160;the&#160;Android&#160;Open&#160;Source&#160;Project&#160;[Resources,&#160;3]&#160;is&#160;both&#160;the&#160;reference<br/>and&#160;preferred&#160;implementation&#160;of&#160;Android.&#160;Device&#160;impl<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources03">ementers&#160;are&#160;s</a>trongly<br/>encouraged&#160;to&#160;base&#160;their&#160;implementations&#160;to&#160;the&#160;greatest&#160;extent&#160;possible&#160;on&#160;the<br/>&#34;upstream&#34;&#160;source&#160;code&#160;available&#160;from&#160;the&#160;Android&#160;Open&#160;Source&#160;Project.&#160;While&#160;some<br/>components&#160;can&#160;hypothetical&#160;y&#160;be&#160;replaced&#160;with&#160;alternate&#160;implementations&#160;this<br/>practice&#160;is&#160;strongly&#160;discouraged,&#160;as&#160;passing&#160;the&#160;software&#160;tests&#160;wil&#160;&#160;become<br/>substantial&#160;y&#160;more&#160;difficult.&#160;It&#160;is&#160;the&#160;implementer's&#160;responsibility&#160;to&#160;ensure&#160;ful&#160;&#160;behavioral<br/>compatibility&#160;with&#160;the&#160;standard&#160;Android&#160;implementation,&#160;including&#160;and&#160;beyond&#160;the<br/>Compatibility&#160;Test&#160;Suite.&#160;Final&#160;y,&#160;note&#160;that&#160;certain&#160;component&#160;substitutions&#160;and<br/>modifications&#160;are&#160;explicitly&#160;forbidden&#160;by&#160;this&#160;document.<br/>
<b>2.&#160;Resources</b><br/>
1.&#160;&#160;IETF&#160;RFC2119&#160;Requirement&#160;Levels:&#160;http://www.ietf.org/rfc/rfc2119.txt<br/>2.&#160;&#160;Android&#160;Compatibility&#160;Program&#160;Overview:<br/>
http://source.android.com/compatibility/i<a href="http://www.ietf.org/rfc/rfc2119.txt">ndex.html</a><br/>
3.&#160;&#160;Android&#160;Open&#160;Source&#160;Project:&#160;http://source.android.com/<br/>4.&#160;&#160;<a href="http://source.android.com/compatibility/index.html">API&#160;definitions&#160;and&#160;documentation:</a><br/>
http://developer.android.com/refe<a href="http://source.android.com/">rence/packages.html</a><br/>
5.&#160;&#160;Android&#160;Permissions&#160;reference:<br/>
<a href="http://developer.android.com/reference/packages.html">http://developer.android.com/reference/android/Manifest.p</a>ermission.html<br/>
6.&#160;&#160;android.os.Build&#160;reference:<br/>
<a href="http://developer.android.com/reference/android/Manifest.permission.html">http://developer.android.com/reference/android/os/Build.html</a><br/>
7.&#160;&#160;Android&#160;4.1&#160;al&#160;owed&#160;version&#160;strings:<br/>
<a href="http://developer.android.com/reference/android/os/Build.html">http://source.android.com/compatibility/4.1/versions.html</a><br/>
8.&#160;&#160;Renderscript:<br/>
<a href="http://source.android.com/compatibility/4.1/versions.html">http://developer.android.com/guide/topics/graphics/rendersc</a>ript.html<br/>
9.&#160;&#160;Hardware&#160;Acceleration:<br/>
http://developer.android.com/guide/topics/graphics/hardware-accel.html<br/>
10.&#160;&#160;android.webkit.WebView&#160;class:<br/>
http://developer.android.com/reference/android/webkit/WebView.html<br/>
11.&#160;&#160;HTML5:&#160;http://www.whatwg.org/specs/web-apps/current-work/multipage/<br/>
12.&#160;&#160;HTML5&#160;offline&#160;capabilities:&#160;http://dev.w3.org/html5/spec/Overview.html#offline<br/>13.&#160;&#160;<a href="http://developer.android.com/reference/android/webkit/WebView.html">HTML5&#160;video&#160;tag:&#160;http://dev.w3.org/html5/spec/Overview.html#video<br/></a>14.&#160;&#160;HTML5/<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">W3C&#160;geolocation&#160;API:&#160;http://www.w3.org/TR/geolocation-API/<br/></a>15.&#160;&#160;HTML5/W3C&#160;webdatabase&#160;A<a href="http://dev.w3.org/html5/spec/Overview.html#offline">PI:&#160;http://www.w3.org/TR/webdatabase/<br/></a>16.&#160;&#160;HTML5/W3C&#160;Indexe<a href="http://dev.w3.org/html5/spec/Overview.html#video">dDB&#160;API:&#160;http://www.w3.org/TR/IndexedDB/<br/></a>17.&#160;&#160;Dalvik&#160;Virtual&#160;Machine&#160;specificati<a href="http://www.w3.org/TR/geolocation-API/">on:&#160;available&#160;in&#160;the&#160;Android&#160;source&#160;code,</a>&#160;at<br/>
dalvik/docs<br/>
18.&#160;&#160;AppWidgets:<br/>
http://developer.android.com/guide/practices/ui_guidelines/widget_design.html<br/>
19.&#160;&#160;Notifications:<br/>
http://developer.android.com/guide/topics/ui/notifiers/notifications.html<br/>
20.&#160;&#160;<a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">Application&#160;Resources:&#160;http://code.google.com/android/reference/available-</a><br/>
resources.html<br/>
21.&#160;&#160;<a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html">Status&#160;Bar&#160;icon&#160;style&#160;guide:</a><br/>
<a href="http://code.google.com/android/reference/available-resources.html">http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_b</a>ar.html<br/>
22.&#160;&#160;<a href="http://code.google.com/android/reference/available-resources.html">Search&#160;Manager:</a><br/>
http://developer.android.com/reference/android/app/SearchManager.html<br/>
23.&#160;&#160;Toasts:&#160;http://developer.android.com/reference/android/widget/Toast.html<br/>24.&#160;&#160;Themes:&#160;http://developer.android.com/guide/topics/ui/themes.html<br/>
<hr/>
<a name=4></a>25.&#160;&#160;R.style&#160;class:&#160;h<a href="http://developer.android.com/reference/android/R.style.html">ttp://developer.android.com/reference/android/R.style.html<br/></a>26.&#160;&#160;<a href="http://developer.android.com/resources/articles/live-wallpapers.html">Live&#160;Wal&#160;papers:&#160;http://developer.android.com/resources/articles/live-</a><br/>
<a href="http://developer.android.com/resources/articles/live-wallpapers.html">wal&#160;papers.html</a><br/>
27.&#160;&#160;Android&#160;Device&#160;Administration:<br/>
<a href="http://developer.android.com/guide/topics/admin/device-admin.html">http://developer.android.com/guide/topics/admin/device-admin.html</a><br/>
28.&#160;&#160;android.app.admin.DevicePolicyManager&#160;class:<br/>
<a href="http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html">http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html</a><br/>
29.&#160;&#160;Android&#160;Accessibility&#160;Service&#160;APIs:<br/>
http://developer.android.com/reference/android/accessibilityservice/package-<br/><a href="http://developer.android.com/reference/android/accessibilityservice/package-summary.html">summary.html</a><br/>
30.&#160;&#160;Android&#160;Accessibility&#160;APIs:<br/>
http://developer.android.com/reference/android/view/accessibility/package-<br/><a href="http://developer.android.com/reference/android/view/accessibility/package-summary.html">summary.html</a><br/>
31.&#160;&#160;<a href="http://developer.android.com/reference/android/view/accessibility/package-summary.html">Eyes&#160;Free&#160;project:&#160;http://code.google.com/p/eyes-free<br/></a>32.&#160;&#160;Text-To-Speech&#160;APIs<a href="http://http//code.google.com/p/eyes-free">:</a><br/>
http://developer.android.com/reference/android/speech/tts/package-<br/><a href="http://developer.android.com/reference/android/speech/tts/package-summary.html">summary.html</a><br/>
33.&#160;&#160;<a href="http://developer.android.com/reference/android/speech/tts/package-summary.html">Reference&#160;tool&#160;documentation&#160;(for&#160;adb,&#160;aapt,&#160;ddms):</a><br/>
http://developer.android.com/guide/developing/tools/index.html<br/>
34.&#160;&#160;<a href="http://developer.android.com/guide/developing/tools/index.html">Android&#160;apk&#160;file&#160;description:</a><br/>
http://developer.android.com/guide/topics/fundamentals.html<br/>
35.&#160;&#160;<a href="http://developer.android.com/guide/topics/fundamentals.html">Manifest&#160;files:&#160;http://developer.android.com/guide/topics/manifes</a>t/manifest-<br/>
i<a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html">ntro.html</a><br/>
36.&#160;&#160;<a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html">Monkey&#160;testing&#160;tool:</a><br/>
http://developer.android.com/guide/developing/tools/monkey.html<br/>
37.&#160;&#160;<a href="http://developer.android.com/guide/developing/tools/monkey.html">Android&#160;android.content.pm.PackageManager&#160;class&#160;and&#160;Hardware&#160;F</a>eatures<br/>
List:<br/>http://developer.android.com/reference/android/content/pm/PackageManager.html<br/>
38.&#160;&#160;Supporting&#160;Multiple&#160;Screens:<br/>
http://developer.android.com/guide/practices/screens_support.html<br/>
39.&#160;&#160;android.util.DisplayMetrics:<br/>
http://developer.android.com/reference/android/util/DisplayMetrics.html<br/>
40.&#160;&#160;android.content.res.Configuration:<br/>
<a href="http://developer.android.com/reference/android/util/DisplayMetrics.html">http://developer.android.com/reference/android/content/res/Configuration.htm</a>l<br/>
41.&#160;&#160;android.hardware.SensorEvent:<br/>
<a href="http://developer.android.com/reference/android/content/res/Configuration.html">http://developer.android.com/reference/android/hardware/SensorEvent.html</a><br/>
42.&#160;&#160;Bluetooth&#160;API:<br/>
<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">http://developer.android.com/reference/android/bluetooth/package-summary.html</a><br/>
43.&#160;&#160;NDEF&#160;Push&#160;Protocol:&#160;http://source.android.com/compatibility/ndef-push-<br/>
<a href="http://developer.android.com/reference/android/bluetooth/package-summary.html">protocol.pdf</a><br/>
44.&#160;&#160;<a href="http://source.android.com/compatibility/ndef-push-protocol.pdf">MIFARE&#160;MF1S503X:&#160;http://www.nxp.com/documents/data_sheet/MF1S503x.p</a>df<br/>45.&#160;&#160;<a href="http://source.android.com/compatibility/ndef-push-protocol.pdf">MIFARE&#160;MF1S703X:&#160;http://www.nxp.com/documents/data_sheet/MF1S703x.p</a>df<br/>46.&#160;&#160;MIFARE&#160;MF0ICU1:&#160;http<a href="http://www.nxp.com/documents/data_sheet/MF1S503x.pdf">://www.nxp.com/documents/data_sheet/MF0ICU1.pdf<br/></a>47.&#160;&#160;MIFARE&#160;MF0ICU2:<br/>
http://www.nxp.com/d<a href="http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf">ocuments/short_data_sheet/MF0ICU2_SDS.pdf</a><br/>
48.&#160;&#160;MIFARE&#160;AN130511:<br/>
<a href="http://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf">http://www.nxp.com/documents/application_note/AN130511.pdf</a><br/>
49.&#160;&#160;MIFARE&#160;AN130411:<br/>
http://www.nxp.com/documents/application_note/AN130411.pdf<br/>
50.&#160;&#160;Camera&#160;orientation&#160;API:<br/>
http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)<br/>
51.&#160;&#160;android.hardware.Camera:<br/>
http://developer.android.com/reference/android/hardware/Camera.html<br/>
52.&#160;&#160;<a href="http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)">Android&#160;Open&#160;Accessories:</a><br/>
http://developer.android.com/guide/topics/usb/accessory.html<br/>
53.&#160;&#160;<a href="http://developer.android.com/reference/android/hardware/Camera.html">USB&#160;Host&#160;API:&#160;http://developer.android.com/guide/topics/usb/host.html<br/></a>54.&#160;&#160;Android&#160;Security&#160;and&#160;Permissions&#160;reference:<br/>
<a href="http://developer.android.com/guide/topics/usb/accessory.html">http://developer.android.com/guide/topics/security/security.html</a><br/>
55.&#160;&#160;Apps&#160;for&#160;Android<a href="http://developer.android.com/guide/topics/usb/host.html">:&#160;http://code.google.com/p/apps-for-android<br/></a>56.&#160;&#160;android.app.DownloadManager&#160;class:<br/>
<a href="http://developer.android.com/guide/topics/security/security.html">http://developer.android.com/reference/android/app/DownloadMana</a>ger.html<br/>
57.&#160;&#160;Android&#160;File&#160;Transfe<a href="http://code.google.com/p/apps-for-android">r:&#160;http://www.android.com/filetransfer<br/></a>58.&#160;&#160;Android&#160;Media&#160;Formats:&#160;http://developer.android.com/guide/appendix/media-<br/>
f<a href="http://developer.android.com/reference/android/app/DownloadManager.html">ormats.html</a><br/>
59.&#160;&#160;HTTP&#160;Live&#160;Streaming&#160;D<a href="http://www.android.com/filetransfer">raft&#160;Protocol:&#160;http://tools.ietf.org/html/d</a>raft-pantos-http-<br/>
li<a href="http://developer.android.com/guide/appendix/media-formats.html">ve-streaming-03</a><br/>
60.&#160;&#160;<a href="http://developer.android.com/guide/appendix/media-formats.html">NFC&#160;Connection&#160;Handover:&#160;http://www.nfc-</a><br/>
forum.org/specs/spec_list/#conn_handover<br/>
61.&#160;&#160;<a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-03">Bluetooth&#160;Secure&#160;Simple&#160;Pairing&#160;Using&#160;NFC:&#160;http://www.nfc-</a><br/>
forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf<br/>
62.&#160;&#160;<a href="http://www.nfc-forum.org/specs/spec_list/#conn_handover/">Wifi&#160;Multicast&#160;API:</a><br/>
http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html<br/>
<hr/>
<a name=5></a>63.&#160;&#160;Action&#160;Assist:<br/>
<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><br/>
64.&#160;&#160;USB&#160;Charging&#160;Specification:<br/>
<a href="http://www.usb.org/developers/devclass_docs/USB_Battery_Charging_1.2.pdf">http://www.usb.org/developers/devclass_docs/USB_Battery_Charging_1.2.pdf</a><br/>
65.&#160;&#160;Android&#160;Beam:&#160;h<a href="http://developer.android.com/guide/topics/nfc/nfc.html">ttp://developer.android.com/guide/topics/nfc/nfc.html<br/></a>66.&#160;&#160;Android&#160;USB&#160;Audio:<br/>
<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><br/>
67.&#160;&#160;Android&#160;NFC&#160;Sharing&#160;Settings:<br/>
http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS<br/>
68.&#160;&#160;Wifi&#160;Direct&#160;(Wifi&#160;P2P):<br/>
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html<br/>
69.&#160;&#160;Media&#160;Remote&#160;Control&#160;Client:<br/>
http://developer.android.com/reference/android/media/RemoteControlClient.html<br/>
70.&#160;&#160;<a href="http://developer.android.com/reference/android/media/RemoteControlClient.html">Motion&#160;Event&#160;API:</a><br/>
http://developer.android.com/reference/android/view/MotionEvent.html<br/>
71.&#160;&#160;<a href="http://developer.android.com/reference/android/view/MotionEvent.html">Touch&#160;Input&#160;Configuration:&#160;http://source.android.com/tech/input/touch-</a><br/>
<a href="http://source.android.com/tech/input/touch-devices.html">devices.html</a><br/>
Many&#160;of&#160;these&#160;resources&#160;are&#160;derived&#160;directly&#160;or&#160;indirectly&#160;from&#160;the&#160;Android&#160;4.1&#160;SDK,<br/>and&#160;wil&#160;&#160;be&#160;functional&#160;y&#160;identical&#160;to&#160;the&#160;information&#160;in&#160;that&#160;SDK's&#160;documentation.&#160;In&#160;any<br/>cases&#160;where&#160;this&#160;Compatibility&#160;Definition&#160;or&#160;the&#160;Compatibility&#160;Test&#160;Suite&#160;disagrees&#160;with<br/>the&#160;SDK&#160;documentation,&#160;the&#160;SDK&#160;documentation&#160;is&#160;considered&#160;authoritative.&#160;Any<br/>technical&#160;details&#160;provided&#160;in&#160;the&#160;references&#160;included&#160;above&#160;are&#160;considered&#160;by<br/>inclusion&#160;to&#160;be&#160;part&#160;of&#160;this&#160;Compatibility&#160;Definition.<br/>
<b>3.&#160;Software</b><br/>
<b>3.1.&#160;Managed&#160;API&#160;Compatibility</b><br/>
The&#160;managed&#160;(Dalvik-based)&#160;execution&#160;environment&#160;is&#160;the&#160;primary&#160;vehicle&#160;for&#160;Android<br/>applications.&#160;The&#160;Android&#160;application&#160;programming&#160;interface&#160;(API)&#160;is&#160;the&#160;set&#160;of<br/>Android&#160;platform&#160;interfaces&#160;exposed&#160;to&#160;applications&#160;running&#160;in&#160;the&#160;managed&#160;VM<br/>environment.&#160;Device&#160;implementations&#160;MUST&#160;provide&#160;complete&#160;implementations,<br/>including&#160;al&#160;&#160;documented&#160;behaviors,&#160;of&#160;any&#160;documented&#160;API&#160;exposed&#160;by&#160;the&#160;Android<br/>4.1&#160;SDK&#160;[Resources,&#160;4].<br/>
Device&#160;im<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources04">plementations&#160;M</a>UST&#160;NOT&#160;omit&#160;any&#160;managed&#160;APIs,&#160;alter&#160;API&#160;interfaces&#160;or<br/>signatures,&#160;deviate&#160;from&#160;the&#160;documented&#160;behavior,&#160;or&#160;include&#160;no-ops,&#160;except&#160;where<br/>specifical&#160;y&#160;al&#160;owed&#160;by&#160;this&#160;Compatibility&#160;Definition.<br/>
This&#160;Compatibility&#160;Definition&#160;permits&#160;some&#160;types&#160;of&#160;hardware&#160;for&#160;which&#160;Android<br/>includes&#160;APIs&#160;to&#160;be&#160;omitted&#160;by&#160;device&#160;implementations.&#160;In&#160;such&#160;cases,&#160;the&#160;APIs&#160;MUST<br/>stil&#160;&#160;be&#160;present&#160;and&#160;behave&#160;in&#160;a&#160;reasonable&#160;way.&#160;See&#160;Section&#160;7&#160;for&#160;specific<br/>requirements&#160;for&#160;this&#160;scenario.<br/>
<b>3.2.&#160;Soft&#160;API&#160;Compatibility</b><br/>
In&#160;addition&#160;to&#160;the&#160;managed&#160;APIs&#160;from&#160;Section&#160;3.1,&#160;Android&#160;also&#160;includes&#160;a&#160;significant<br/>runtime-only&#160;&#34;soft&#34;&#160;API,&#160;in&#160;the&#160;form&#160;of&#160;such&#160;things&#160;such&#160;as&#160;Intents,&#160;permissions,&#160;and<br/>similar&#160;aspects&#160;of&#160;Android&#160;applications&#160;that&#160;cannot&#160;be&#160;enforced&#160;at&#160;application&#160;compile<br/>time.<br/>
<b>3.2.1.&#160;Permissions</b><br/>
Device&#160;implementers&#160;MUST&#160;support&#160;and&#160;enforce&#160;al&#160;&#160;permission&#160;constants&#160;as<br/>documented&#160;by&#160;the&#160;Permission&#160;reference&#160;page&#160;[Resources,&#160;5].&#160;Note&#160;that&#160;Section&#160;10<br/>lists&#160;additional&#160;requirements&#160;related&#160;to&#160;the&#160;Android&#160;security&#160;model.<br/>
<b>3.2.2.&#160;Build&#160;Parameters</b><br/>
The&#160;Android&#160;APIs&#160;include&#160;a&#160;number&#160;of&#160;constants&#160;on&#160;the&#160;&#160;android.os.Build&#160;class<br/>[Resources,&#160;6]&#160;that&#160;are&#160;intended&#160;to&#160;describe&#160;the&#160;current&#160;device.&#160;To&#160;provide&#160;consistent,<br/>meaningful&#160;values&#160;across&#160;device&#160;implementations,&#160;the&#160;table&#160;below&#160;includes&#160;additional<br/>restrictions&#160;on&#160;the&#160;formats&#160;of&#160;these&#160;values&#160;to&#160;which&#160;device&#160;implementations&#160;MUST<br/>c<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources06">onform.</a><br/>
<b>Parameter</b><br/>
<b>Comments</b><br/>
The&#160;version&#160;of&#160;the&#160;currently-executing&#160;Android&#160;system,&#160;in&#160;human-readable&#160;format.&#160;This&#160;field&#160;MUST&#160;have&#160;one<br/>
android.os.Build.VERSION.RELEASE<br/>
of&#160;the&#160;string&#160;values&#160;defined&#160;in&#160;[Resources,&#160;7].<br/>
The&#160;version&#160;of&#160;the&#160;currently-executing&#160;Android&#160;system,&#160;in&#160;a&#160;format&#160;accessible&#160;to&#160;third-party&#160;application&#160;code.<br/>
android.os.Build.VERSION.SDK<br/>
For&#160;Android&#160;4.1,&#160;this&#160;field&#160;MUST&#160;have&#160;the&#160;integer&#160;value&#160;16.<br/>
<hr/>
<a name=6></a>The&#160;version&#160;of&#160;the&#160;currently-executing&#160;Android&#160;system,&#160;in&#160;a&#160;format&#160;accessible&#160;to&#160;third-party&#160;application&#160;code.<br/>
android.os.Build.VERSION.SDK_INT<br/>
For&#160;Android&#160;4.1,&#160;this&#160;field&#160;MUST&#160;have&#160;the&#160;integer&#160;value&#160;16.<br/>
A&#160;value&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;designating&#160;the&#160;specific&#160;build&#160;of&#160;the&#160;currently-executing&#160;Android<br/>system,&#160;in&#160;human-readable&#160;format.&#160;This&#160;value&#160;MUST&#160;NOT&#160;be&#160;re-used&#160;for&#160;different&#160;builds&#160;made&#160;available&#160;to<br/>
android.os.Build.VERSION.INCREMENTAL<br/>
end&#160;users.&#160;A&#160;typical&#160;use&#160;of&#160;this&#160;field&#160;is&#160;to&#160;indicate&#160;which&#160;build&#160;number&#160;or&#160;source-control&#160;change&#160;identifier&#160;was<br/>used&#160;to&#160;generate&#160;the&#160;build.&#160;There&#160;are&#160;no&#160;requirements&#160;on&#160;the&#160;specific&#160;format&#160;of&#160;this&#160;field,&#160;except&#160;that&#160;it&#160;MUST<br/>NOT&#160;be&#160;nul&#160;&#160;or&#160;the&#160;empty&#160;string&#160;(&#34;&#34;).<br/>
A&#160;value&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;identifying&#160;the&#160;specific&#160;internal&#160;hardware&#160;used&#160;by&#160;the&#160;device,&#160;in<br/>human-readable&#160;format.&#160;A&#160;possible&#160;use&#160;of&#160;this&#160;field&#160;is&#160;to&#160;indicate&#160;the&#160;specific&#160;revision&#160;of&#160;the&#160;board&#160;powering<br/>
android.os.Build.BOARD<br/>
the&#160;device.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI&#160;and&#160;match&#160;the&#160;regular&#160;expression<br/>
&#34;^[a-zA-Z0-9.,_-]+$&#34;.<br/>
A&#160;value&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;identifying&#160;the&#160;name&#160;of&#160;the&#160;company,&#160;organization,&#160;individual,&#160;etc.<br/>who&#160;produced&#160;the&#160;device,&#160;in&#160;human-readable&#160;format.&#160;A&#160;possible&#160;use&#160;of&#160;this&#160;field&#160;is&#160;to&#160;indicate&#160;the&#160;OEM<br/>
android.os.Build.BRAND<br/>
and/or&#160;carrier&#160;who&#160;sold&#160;the&#160;device.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI&#160;and&#160;match&#160;the<br/>regular&#160;expression&#160;&#34;^[a-zA-Z0-9.,_-]+$&#34;.<br/>
The&#160;name&#160;of&#160;the&#160;instruction&#160;set&#160;(CPU&#160;type&#160;+&#160;ABI&#160;convention)&#160;of&#160;native&#160;code.&#160;See&#160;&#160;Section&#160;3.3:&#160;Native&#160;API<br/>
android.os.Build.CPU_ABI<br/>
Co<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.3">mpatibility.</a><br/>
The&#160;name&#160;of&#160;the&#160;second&#160;instruction&#160;set&#160;(CPU&#160;type&#160;+&#160;ABI&#160;convention)&#160;of&#160;native&#160;code.&#160;See&#160;&#160;Section&#160;3.3:&#160;Native<br/>
android.os.Build.CPU_ABI2<br/>
AP<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.3">I&#160;Compatibility.</a><br/>
A&#160;v<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-3.3">alue&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;identifying&#160;the&#160;specific&#160;configuration&#160;or&#160;revision&#160;of&#160;the&#160;body</a><br/>
android.os.Build.DEVICE<br/>
(sometimes&#160;cal&#160;ed&#160;&#34;industrial&#160;design&#34;)&#160;of&#160;the&#160;device.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit<br/>ASCI&#160;and&#160;match&#160;the&#160;regular&#160;expression&#160;&#34;^[a-zA-Z0-9.,_-]+$&#34;.<br/>
A&#160;string&#160;that&#160;uniquely&#160;identifies&#160;this&#160;build.&#160;It&#160;SHOULD&#160;be&#160;reasonably&#160;human-readable.&#160;It&#160;MUST&#160;fol&#160;ow&#160;this<br/>template:&#160;<br/>
$(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)<br/>
For&#160;example:&#160;<br/>
android.os.Build.FINGERPRINT<br/>
acme/mydevice/generic:4.1/JRN53/3359:userdebug/test-keys<br/>
The&#160;fingerprint&#160;MUST&#160;NOT&#160;include&#160;whitespace&#160;characters.&#160;If&#160;other&#160;fields&#160;included&#160;in&#160;the&#160;template&#160;above&#160;have<br/>whitespace&#160;characters,&#160;they&#160;MUST&#160;be&#160;replaced&#160;in&#160;the&#160;build&#160;fingerprint&#160;with&#160;another&#160;character,&#160;such&#160;as&#160;the<br/>underscore&#160;(&#34;_&#34;)&#160;character.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI.<br/>
The&#160;name&#160;of&#160;the&#160;hardware&#160;(from&#160;the&#160;kernel&#160;command&#160;line&#160;or&#160;/proc).&#160;It&#160;SHOULD&#160;be&#160;reasonably&#160;human-<br/>
android.os.Build.HARDWARE<br/>
readable.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI&#160;and&#160;match&#160;the&#160;regular&#160;expression&#160;&#34;^[a-<br/>
zA-Z0-9.,_-]+$&#34;.<br/>
A&#160;string&#160;that&#160;uniquely&#160;identifies&#160;the&#160;host&#160;the&#160;build&#160;was&#160;built&#160;on,&#160;in&#160;human&#160;readable&#160;format.&#160;There&#160;are&#160;no<br/>
android.os.Build.HOST<br/>
requirements&#160;on&#160;the&#160;specific&#160;format&#160;of&#160;this&#160;field,&#160;except&#160;that&#160;it&#160;MUST&#160;NOT&#160;be&#160;nul&#160;&#160;or&#160;the&#160;empty&#160;string&#160;(&#34;&#34;).<br/>
An&#160;identifier&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;to&#160;refer&#160;to&#160;a&#160;specific&#160;release,&#160;in&#160;human&#160;readable&#160;format.&#160;This<br/>field&#160;can&#160;be&#160;the&#160;same&#160;as&#160;android.os.Build.VERSION.INCREMENTAL,&#160;but&#160;SHOULD&#160;be&#160;a&#160;value&#160;sufficiently<br/>
android.os.Build.ID<br/>
meaningful&#160;for&#160;end&#160;users&#160;to&#160;distinguish&#160;between&#160;software&#160;builds.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable<br/>as&#160;7-bit&#160;ASCI&#160;and&#160;match&#160;the&#160;regular&#160;expression&#160;&#34;^[a-zA-Z0-9.,_-]+$&#34;.<br/>
The&#160;trade&#160;name&#160;of&#160;the&#160;Original&#160;Equipment&#160;Manufacturer&#160;(OEM)&#160;of&#160;the&#160;product.&#160;There&#160;are&#160;no&#160;requirements&#160;on<br/>
android.os.Build.MANUFACTURER<br/>
the&#160;specific&#160;format&#160;of&#160;this&#160;field,&#160;except&#160;that&#160;it&#160;MUST&#160;NOT&#160;be&#160;nul&#160;&#160;or&#160;the&#160;empty&#160;string&#160;(&#34;&#34;).<br/>
A&#160;value&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;containing&#160;the&#160;name&#160;of&#160;the&#160;device&#160;as&#160;known&#160;to&#160;the&#160;end&#160;user.&#160;This<br/>
android.os.Build.MODEL<br/>
SHOULD&#160;be&#160;the&#160;same&#160;name&#160;under&#160;which&#160;the&#160;device&#160;is&#160;marketed&#160;and&#160;sold&#160;to&#160;end&#160;users.&#160;There&#160;are&#160;no<br/>requirements&#160;on&#160;the&#160;specific&#160;format&#160;of&#160;this&#160;field,&#160;except&#160;that&#160;it&#160;MUST&#160;NOT&#160;be&#160;nul&#160;&#160;or&#160;the&#160;empty&#160;string&#160;(&#34;&#34;).<br/>
A&#160;value&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;containing&#160;the&#160;development&#160;name&#160;or&#160;code&#160;name&#160;of&#160;the&#160;product<br/>
android.os.Build.PRODUCT<br/>
(SKU).&#160;MUST&#160;be&#160;human-readable,&#160;but&#160;is&#160;not&#160;necessarily&#160;intended&#160;for&#160;view&#160;by&#160;end&#160;users.&#160;The&#160;value&#160;of&#160;this<br/>field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI&#160;and&#160;match&#160;the&#160;regular&#160;expression&#160;&#34;^[a-zA-Z0-9.,_-]+$&#34;.<br/>
A&#160;hardware&#160;serial&#160;number,&#160;if&#160;available.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI&#160;and&#160;match<br/>
android.os.Build.SERIAL<br/>
the&#160;regular&#160;expression&#160;&#34;^([a-zA-Z0-9]{0,20})$&#34;.<br/>
A&#160;comma-separated&#160;list&#160;of&#160;tags&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;that&#160;further&#160;distinguish&#160;the&#160;build.&#160;For<br/>
android.os.Build.TAGS<br/>
example,&#160;&#34;unsigned,debug&#34;.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI&#160;and&#160;match&#160;the&#160;regular<br/>expression&#160;&#34;^[a-zA-Z0-9.,_-]+$&#34;.<br/>
android.os.Build.TIME<br/>
A&#160;value&#160;representing&#160;the&#160;timestamp&#160;of&#160;when&#160;the&#160;build&#160;occurred.<br/>
A&#160;value&#160;chosen&#160;by&#160;the&#160;device&#160;implementer&#160;specifying&#160;the&#160;runtime&#160;configuration&#160;of&#160;the&#160;build.&#160;This&#160;field<br/>SHOULD&#160;have&#160;one&#160;of&#160;the&#160;values&#160;corresponding&#160;to&#160;the&#160;three&#160;typical&#160;Android&#160;runtime&#160;configurations:&#160;&#34;user&#34;,<br/>
android.os.Build.TYPE<br/>
&#34;userdebug&#34;,&#160;or&#160;&#34;eng&#34;.&#160;The&#160;value&#160;of&#160;this&#160;field&#160;MUST&#160;be&#160;encodable&#160;as&#160;7-bit&#160;ASCI&#160;and&#160;match&#160;the&#160;regular<br/>expression&#160;&#34;^[a-zA-Z0-9.,_-]+$&#34;.<br/>
A&#160;name&#160;or&#160;user&#160;ID&#160;of&#160;the&#160;user&#160;(or&#160;automated&#160;user)&#160;that&#160;generated&#160;the&#160;build.&#160;There&#160;are&#160;no&#160;requirements&#160;on<br/>
android.os.Build.USER<br/>
the&#160;specific&#160;format&#160;of&#160;this&#160;field,&#160;except&#160;that&#160;it&#160;MUST&#160;NOT&#160;be&#160;nul&#160;&#160;or&#160;the&#160;empty&#160;string&#160;(&#34;&#34;).<br/>
<b>3.2.3.&#160;Intent&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;honor&#160;Android's&#160;loose-coupling&#160;Intent&#160;system,&#160;as<br/>
<hr/>
<a name=7></a>described&#160;in&#160;the&#160;sections&#160;below.&#160;By&#160;&#34;honored&#34;,&#160;it&#160;is&#160;meant&#160;that&#160;the&#160;device&#160;implementer<br/>MUST&#160;provide&#160;an&#160;Android&#160;Activity&#160;or&#160;Service&#160;that&#160;specifies&#160;a&#160;matching&#160;Intent&#160;filter&#160;and<br/>binds&#160;to&#160;and&#160;implements&#160;correct&#160;behavior&#160;for&#160;each&#160;specified&#160;Intent&#160;pattern.<br/>
<b>3.2.3.1.&#160;Core&#160;Application&#160;Intents</b><br/>
The&#160;Android&#160;upstream&#160;project&#160;defines&#160;a&#160;number&#160;of&#160;core&#160;applications,&#160;such&#160;as&#160;contacts,<br/>calendar,&#160;photo&#160;gal&#160;ery,&#160;music&#160;player,&#160;and&#160;so&#160;on.&#160;Device&#160;implementers&#160;MAY&#160;replace<br/>these&#160;applications&#160;with&#160;alternative&#160;versions.<br/>
However,&#160;any&#160;such&#160;alternative&#160;versions&#160;MUST&#160;honor&#160;the&#160;same&#160;Intent&#160;patterns&#160;provided<br/>by&#160;the&#160;upstream&#160;project.&#160;For&#160;example,&#160;if&#160;a&#160;device&#160;contains&#160;an&#160;alternative&#160;music&#160;player,<br/>it&#160;must&#160;stil&#160;&#160;honor&#160;the&#160;Intent&#160;pattern&#160;issued&#160;by&#160;third-party&#160;applications&#160;to&#160;pick&#160;a&#160;song.<br/>
The&#160;fol&#160;owing&#160;applications&#160;are&#160;considered&#160;core&#160;Android&#160;system&#160;applications:<br/>
Desk&#160;Clock<br/>Browser<br/>Calendar<br/>Contacts<br/>Gal&#160;ery<br/>GlobalSearch<br/>Launcher<br/>Music<br/>Settings<br/>
The&#160;core&#160;Android&#160;system&#160;applications&#160;include&#160;various&#160;Activity,&#160;or&#160;Service&#160;components<br/>that&#160;are&#160;considered&#160;&#34;public&#34;.&#160;That&#160;is,&#160;the&#160;attribute&#160;&#34;android:exported&#34;&#160;may&#160;be&#160;absent,&#160;or<br/>may&#160;have&#160;the&#160;value&#160;&#34;true&#34;.<br/>
For&#160;every&#160;Activity&#160;or&#160;Service&#160;defined&#160;in&#160;one&#160;of&#160;the&#160;core&#160;Android&#160;system&#160;apps&#160;that&#160;is&#160;not<br/>marked&#160;as&#160;non-public&#160;via&#160;an&#160;android:exported&#160;attribute&#160;with&#160;the&#160;value&#160;&#34;false&#34;,&#160;device<br/>implementations&#160;MUST&#160;include&#160;a&#160;compontent&#160;of&#160;the&#160;same&#160;type&#160;implementing&#160;the<br/>same&#160;Intent&#160;filter&#160;patterns&#160;as&#160;the&#160;core&#160;Android&#160;system&#160;app.<br/>
In&#160;other&#160;words,&#160;a&#160;device&#160;implementation&#160;MAY&#160;replace&#160;core&#160;Android&#160;system&#160;apps;<br/>however,&#160;if&#160;it&#160;does,&#160;the&#160;device&#160;implementation&#160;MUST&#160;support&#160;al&#160;&#160;Intent&#160;patterns&#160;defined<br/>by&#160;each&#160;core&#160;Android&#160;system&#160;app&#160;being&#160;replaced.<br/>
<b>3.2.3.2.&#160;Intent&#160;Overrides</b><br/>
As&#160;Android&#160;is&#160;an&#160;extensible&#160;platform,&#160;device&#160;implementations&#160;MUST&#160;al&#160;ow&#160;each&#160;Intent<br/>pattern&#160;referenced&#160;in&#160;Section&#160;3.2.3.2&#160;to&#160;be&#160;overridden&#160;by&#160;third-party&#160;applications.&#160;The<br/>upstream&#160;Android&#160;open&#160;source&#160;implementation&#160;al&#160;ows&#160;this&#160;by&#160;default;&#160;device<br/>implementers&#160;MUST&#160;NOT&#160;attach&#160;special&#160;privileges&#160;to&#160;system&#160;applications'&#160;use&#160;of<br/>these&#160;Intent&#160;patterns,&#160;or&#160;prevent&#160;third-party&#160;applications&#160;from&#160;binding&#160;to&#160;and&#160;assuming<br/>control&#160;of&#160;these&#160;patterns.&#160;This&#160;prohibition&#160;specifical&#160;y&#160;includes&#160;but&#160;is&#160;not&#160;limited&#160;to<br/>disabling&#160;the&#160;&#34;Chooser&#34;&#160;user&#160;interface&#160;which&#160;al&#160;ows&#160;the&#160;user&#160;to&#160;select&#160;between&#160;multiple<br/>applications&#160;which&#160;al&#160;&#160;handle&#160;the&#160;same&#160;Intent&#160;pattern.<br/>
However,&#160;device&#160;implementations&#160;MAY&#160;provide&#160;default&#160;activities&#160;for&#160;specific&#160;URI<br/>patterns&#160;(eg.&#160;http://play.google.com)&#160;if&#160;the&#160;default&#160;activity&#160;provides&#160;a&#160;more&#160;specific&#160;filter<br/>for&#160;the&#160;data&#160;URI.&#160;For&#160;example,&#160;an&#160;intent&#160;filter&#160;specifying&#160;the&#160;data&#160;URI<br/>&#34;http://www.android.com&#34;&#160;is&#160;more&#160;specific&#160;than&#160;the&#160;browser&#160;filter&#160;for&#160;&#34;http://&#34;.&#160;Device<br/>implementations&#160;MUST&#160;provide&#160;a&#160;user&#160;interface&#160;for&#160;users&#160;to&#160;modify&#160;the&#160;default&#160;activity<br/>for&#160;intents.<br/>
<b>3.2.3.3.&#160;Intent&#160;Namespaces</b><br/>
Device&#160;implementations&#160;MUST&#160;NOT&#160;include&#160;any&#160;Android&#160;component&#160;that&#160;honors&#160;any<br/>new&#160;Intent&#160;or&#160;Broadcast&#160;Intent&#160;patterns&#160;using&#160;an&#160;ACTION,&#160;CATEGORY,&#160;or&#160;other&#160;key<br/>string&#160;in&#160;the&#160;android.*&#160;or&#160;com.android.*&#160;namespace.&#160;Device&#160;implementers&#160;MUST&#160;NOT<br/>include&#160;any&#160;Android&#160;components&#160;that&#160;honor&#160;any&#160;new&#160;Intent&#160;or&#160;Broadcast&#160;Intent&#160;patterns<br/>using&#160;an&#160;ACTION,&#160;CATEGORY,&#160;or&#160;other&#160;key&#160;string&#160;in&#160;a&#160;package&#160;space&#160;belonging&#160;to<br/>another&#160;organization.&#160;Device&#160;implementers&#160;MUST&#160;NOT&#160;alter&#160;or&#160;extend&#160;any&#160;of&#160;the&#160;Intent<br/>patterns&#160;used&#160;by&#160;the&#160;core&#160;apps&#160;listed&#160;in&#160;Section&#160;3.2.3.1.&#160;Device&#160;implementations&#160;MAY<br/>include&#160;Intent&#160;patterns&#160;using&#160;namespaces&#160;clearly&#160;and&#160;obviously&#160;associated&#160;with&#160;their<br/>own&#160;organization.<br/>
This&#160;prohibition&#160;is&#160;analogous&#160;to&#160;that&#160;specified&#160;for&#160;Java&#160;language&#160;classes&#160;in&#160;Section<br/>3.6.<br/>
<b>3.2.3.4.&#160;Broadcast&#160;Intents</b><br/>
Third-party&#160;applications&#160;rely&#160;on&#160;the&#160;platform&#160;to&#160;broadcast&#160;certain&#160;Intents&#160;to&#160;notify&#160;them<br/>
<hr/>
<a name=8></a>of&#160;changes&#160;in&#160;the&#160;hardware&#160;or&#160;software&#160;environment.&#160;Android-compatible&#160;devices<br/>MUST&#160;broadcast&#160;the&#160;public&#160;broadcast&#160;Intents&#160;in&#160;response&#160;to&#160;appropriate&#160;system<br/>events.&#160;Broadcast&#160;Intents&#160;are&#160;described&#160;in&#160;the&#160;SDK&#160;documentation.<br/>
<b>3.3.&#160;Native&#160;API&#160;Compatibility</b><br/>
<b>3.3.1&#160;Application&#160;Binary&#160;Interfaces</b><br/>
Managed&#160;code&#160;running&#160;in&#160;Dalvik&#160;can&#160;cal&#160;&#160;into&#160;native&#160;code&#160;provided&#160;in&#160;the&#160;application<br/>.apk&#160;file&#160;as&#160;an&#160;ELF&#160;.so&#160;file&#160;compiled&#160;for&#160;the&#160;appropriate&#160;device&#160;hardware&#160;architecture.<br/>As&#160;native&#160;code&#160;is&#160;highly&#160;dependent&#160;on&#160;the&#160;underlying&#160;processor&#160;technology,&#160;Android<br/>defines&#160;a&#160;number&#160;of&#160;Application&#160;Binary&#160;Interfaces&#160;(ABIs)&#160;in&#160;the&#160;Android&#160;NDK,&#160;in&#160;the&#160;file<br/>
docs/CPU-ARCH-ABIS.html.&#160;If&#160;a&#160;device&#160;implementation&#160;is&#160;compatible&#160;with&#160;one&#160;or&#160;more<br/>
defined&#160;ABIs,&#160;it&#160;SHOULD&#160;implement&#160;compatibility&#160;with&#160;the&#160;Android&#160;NDK,&#160;as&#160;below.<br/>
If&#160;a&#160;device&#160;implementation&#160;includes&#160;support&#160;for&#160;an&#160;Android&#160;ABI,&#160;it:<br/>
MUST&#160;include&#160;support&#160;for&#160;code&#160;running&#160;in&#160;the&#160;managed&#160;environment&#160;to&#160;cal&#160;&#160;into<br/>native&#160;code,&#160;using&#160;the&#160;standard&#160;Java&#160;Native&#160;Interface&#160;(JNI)&#160;semantics.<br/>MUST&#160;be&#160;source-compatible&#160;(i.e.&#160;header&#160;compatible)&#160;and&#160;binary-compatible&#160;(for<br/>the&#160;ABI)&#160;with&#160;each&#160;required&#160;library&#160;in&#160;the&#160;list&#160;below<br/>MUST&#160;accurately&#160;report&#160;the&#160;native&#160;Application&#160;Binary&#160;Interface&#160;(ABI)&#160;supported<br/>by&#160;the&#160;device,&#160;via&#160;the&#160;android.os.Build.CPU_ABI&#160;API<br/>MUST&#160;report&#160;only&#160;those&#160;ABIs&#160;documented&#160;in&#160;the&#160;latest&#160;version&#160;of&#160;the&#160;Android<br/>NDK,&#160;in&#160;the&#160;file&#160;docs/CPU-ARCH-ABIS.txt<br/>SHOULD&#160;be&#160;built&#160;using&#160;the&#160;source&#160;code&#160;and&#160;header&#160;files&#160;available&#160;in&#160;the<br/>upstream&#160;Android&#160;open&#160;source&#160;project<br/>
The&#160;fol&#160;owing&#160;native&#160;code&#160;APIs&#160;MUST&#160;be&#160;available&#160;to&#160;apps&#160;that&#160;include&#160;native&#160;code:<br/>
libc&#160;(C&#160;library)<br/>libm&#160;(math&#160;library)<br/>Minimal&#160;support&#160;for&#160;C++<br/>JNI&#160;interface<br/>liblog&#160;(Android&#160;logging)<br/>libz&#160;(Zlib&#160;compression)<br/>libdl&#160;(dynamic&#160;linker)<br/>libGLESv1_CM.so&#160;(OpenGL&#160;ES&#160;1.0)<br/>libGLESv2.so&#160;(OpenGL&#160;ES&#160;2.0)<br/>libEGL.so&#160;(native&#160;OpenGL&#160;surface&#160;management)<br/>libjnigraphics.so<br/>libOpenSLES.so&#160;(OpenSL&#160;ES&#160;1.0.1&#160;audio&#160;support)<br/>libOpenMAXAL.so&#160;(OpenMAX&#160;AL&#160;1.0.1&#160;support)<br/>libandroid.so&#160;(native&#160;Android&#160;activity&#160;support)<br/>Support&#160;for&#160;OpenGL,&#160;as&#160;described&#160;below<br/>
Note&#160;that&#160;future&#160;releases&#160;of&#160;the&#160;Android&#160;NDK&#160;may&#160;introduce&#160;support&#160;for&#160;additional<br/>ABIs.&#160;If&#160;a&#160;device&#160;implementation&#160;is&#160;not&#160;compatible&#160;with&#160;an&#160;existing&#160;predefined&#160;ABI,&#160;it<br/>MUST&#160;NOT&#160;report&#160;support&#160;for&#160;any&#160;ABI&#160;at&#160;al&#160;.<br/>
Native&#160;code&#160;compatibility&#160;is&#160;chal&#160;enging.&#160;For&#160;this&#160;reason,&#160;it&#160;should&#160;be&#160;repeated&#160;that<br/>device&#160;implementers&#160;are&#160;VERY&#160;strongly&#160;encouraged&#160;to&#160;use&#160;the&#160;upstream<br/>implementations&#160;of&#160;the&#160;libraries&#160;listed&#160;above&#160;to&#160;help&#160;ensure&#160;compatibility.<br/>
<b>3.4.&#160;Web&#160;Compatibility</b><br/>
<b>3.4.1.&#160;WebView&#160;Compatibility</b><br/>
The&#160;Android&#160;Open&#160;Source&#160;implementation&#160;uses&#160;the&#160;WebKit&#160;rendering&#160;engine&#160;to<br/>implement&#160;the&#160;android.webkit.WebView.&#160;Because&#160;it&#160;is&#160;not&#160;feasible&#160;to&#160;develop&#160;a<br/>comprehensive&#160;test&#160;suite&#160;for&#160;a&#160;web&#160;rendering&#160;system,&#160;device&#160;implementers&#160;MUST&#160;use<br/>the&#160;specific&#160;upstream&#160;build&#160;of&#160;WebKit&#160;in&#160;the&#160;WebView&#160;implementation.&#160;Specifical&#160;y:<br/>
Device&#160;implementations'&#160;android.webkit.WebView&#160;implementations&#160;MUST&#160;be<br/>based&#160;on&#160;the&#160;534.30&#160;WebKit&#160;build&#160;from&#160;the&#160;upstream&#160;Android&#160;Open&#160;Source&#160;tree<br/>for&#160;Android&#160;4.1.&#160;This&#160;build&#160;includes&#160;a&#160;specific&#160;set&#160;of&#160;functionality&#160;and&#160;security<br/>fixes&#160;for&#160;the&#160;WebView.&#160;Device&#160;implementers&#160;MAY&#160;include&#160;customizations&#160;to&#160;the<br/>WebKit&#160;implementation;&#160;however,&#160;any&#160;such&#160;customizations&#160;MUST&#160;NOT&#160;alter&#160;the<br/>behavior&#160;of&#160;the&#160;WebView,&#160;including&#160;rendering&#160;behavior.<br/>The&#160;user&#160;agent&#160;string&#160;reported&#160;by&#160;the&#160;WebView&#160;MUST&#160;be&#160;in&#160;this&#160;format:<br/>
Mozilla/5.0&#160;(Linux;&#160;U;&#160;Android&#160;$(VERSION);&#160;$(LOCALE);&#160;$(MODEL)<br/>
Build/$(BUILD))&#160;AppleWebKit/534.30&#160;(KHTML,&#160;like&#160;Gecko)&#160;Version/4.1<br/>
Mobile&#160;Safari/534.30<br/>
The&#160;value&#160;of&#160;the&#160;$(VERSION)&#160;string&#160;MUST&#160;be&#160;the&#160;same&#160;as&#160;the&#160;value&#160;for<br/>
<hr/>
<a name=9></a>The&#160;value&#160;of&#160;the&#160;$(VERSION)&#160;string&#160;MUST&#160;be&#160;the&#160;same&#160;as&#160;the&#160;value&#160;for<br/>
android.os.Build.VERSION.RELEASE<br/>
The&#160;value&#160;of&#160;the&#160;$(LOCALE)&#160;string&#160;SHOULD&#160;fol&#160;ow&#160;the&#160;ISO&#160;conventions&#160;for<br/>country&#160;code&#160;and&#160;language,&#160;and&#160;SHOULD&#160;refer&#160;to&#160;the&#160;current&#160;configured<br/>locale&#160;of&#160;the&#160;device<br/>The&#160;value&#160;of&#160;the&#160;$(MODEL)&#160;string&#160;MUST&#160;be&#160;the&#160;same&#160;as&#160;the&#160;value&#160;for<br/>
android.os.Build.MODEL<br/>
The&#160;value&#160;of&#160;the&#160;$(BUILD)&#160;string&#160;MUST&#160;be&#160;the&#160;same&#160;as&#160;the&#160;value&#160;for<br/>
android.os.Build.ID<br/>
Device&#160;implementations&#160;MAY&#160;omit&#160;Mobile&#160;in&#160;the&#160;user&#160;agent&#160;string<br/>
The&#160;WebView&#160;component&#160;SHOULD&#160;include&#160;support&#160;for&#160;as&#160;much&#160;of&#160;HTML5<br/>[Resources,&#160;11]&#160;as&#160;possible.&#160;Minimal&#160;y,&#160;device&#160;implementations&#160;MUST&#160;support&#160;each&#160;of<br/>these&#160;APIs&#160;associated&#160;with&#160;HTML5&#160;in&#160;the&#160;WebView:<br/>
application&#160;cache/offline&#160;operation&#160;[Resources,&#160;12]<br/>the&#160;&lt;video&gt;&#160;tag&#160;[Resources,&#160;13]<br/>geolocation&#160;[Reso<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources13">urces,&#160;14]</a><br/>
Additional&#160;y,&#160;device&#160;implementations&#160;MUST&#160;support&#160;the&#160;HTML5/W3C&#160;webstorage&#160;API<br/>[Resources,&#160;15],&#160;and&#160;SHOULD&#160;support&#160;the&#160;HTML5/W3C&#160;IndexedDB&#160;API&#160;[Resources,<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources15">16].&#160;<i>Note&#160;that&#160;as</i></a><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources16"><i>&#160;the&#160;web&#160;development&#160;standards&#160;bodies&#160;are&#160;transitioning&#160;to&#160;favor<br/></i></a><i>I<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources16">ndexedDB&#160;over&#160;webstorage,&#160;IndexedDB&#160;is&#160;expected&#160;to&#160;become&#160;a&#160;required<br/></a></i><i>component&#160;in&#160;a&#160;future&#160;version&#160;of&#160;Android.</i><br/>
HTML5&#160;APIs,&#160;like&#160;al&#160;&#160;JavaScript&#160;APIs,&#160;MUST&#160;be&#160;disabled&#160;by&#160;default&#160;in&#160;a&#160;WebView,<br/>unless&#160;the&#160;developer&#160;explicitly&#160;enables&#160;them&#160;via&#160;the&#160;usual&#160;Android&#160;APIs.<br/>
<b>3.4.2.&#160;Browser&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;include&#160;a&#160;standalone&#160;Browser&#160;application&#160;for&#160;general<br/>user&#160;web&#160;browsing.&#160;The&#160;standalone&#160;Browser&#160;MAY&#160;be&#160;based&#160;on&#160;a&#160;browser&#160;technology<br/>other&#160;than&#160;WebKit.&#160;However,&#160;even&#160;if&#160;an&#160;alternate&#160;Browser&#160;application&#160;is&#160;used,&#160;the<br/>
android.webkit.WebView&#160;component&#160;provided&#160;to&#160;third-party&#160;applications&#160;MUST&#160;be<br/>
based&#160;on&#160;WebKit,&#160;as&#160;described&#160;in&#160;Section&#160;3.4.1.<br/>
Implementations&#160;MAY&#160;ship&#160;a&#160;custom&#160;user&#160;agent&#160;string&#160;in&#160;the&#160;standalone&#160;Browser<br/>application.<br/>
The&#160;standalone&#160;Browser&#160;application&#160;(whether&#160;based&#160;on&#160;the&#160;upstream&#160;WebKit&#160;Browser<br/>application&#160;or&#160;a&#160;third-party&#160;replacement)&#160;SHOULD&#160;include&#160;support&#160;for&#160;as&#160;much&#160;of<br/>HTML5&#160;[Resources,&#160;11]&#160;as&#160;possible.&#160;Minimal&#160;y,&#160;device&#160;implementations&#160;MUST&#160;support<br/>each&#160;of&#160;these&#160;APIs&#160;associated&#160;with&#160;HTML5:<br/>
application&#160;cache/offline&#160;operation&#160;[Resources,&#160;12]<br/>the&#160;&lt;video&gt;&#160;tag&#160;[Resources,&#160;13]<br/>geolocation&#160;[Resources,&#160;14]<br/>
Additional&#160;y,&#160;device&#160;implementations&#160;MUST&#160;support&#160;the&#160;HTML5/W3C&#160;webstorage&#160;API<br/>[Resources,&#160;15],&#160;an<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources14">d&#160;SHOULD&#160;supp</a>ort&#160;the&#160;HTML5/W3C&#160;IndexedDB&#160;API&#160;[Resources,<br/>16].&#160;<i>Note&#160;that&#160;as&#160;the&#160;web&#160;development&#160;standards&#160;bodies&#160;are&#160;transitioning&#160;to&#160;favor<br/>IndexedDB&#160;over&#160;webstorage,&#160;IndexedDB&#160;is&#160;expected&#160;to&#160;become&#160;a&#160;required<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources16">component&#160;in&#160;a&#160;future&#160;version&#160;of&#160;Android.</a></i><br/>
<b>3.5.&#160;API&#160;Behavioral&#160;Compatibility</b><br/>
The&#160;behaviors&#160;of&#160;each&#160;of&#160;the&#160;API&#160;types&#160;(managed,&#160;soft,&#160;native,&#160;and&#160;web)&#160;must&#160;be<br/>consistent&#160;with&#160;the&#160;preferred&#160;implementation&#160;of&#160;the&#160;upstream&#160;Android&#160;open&#160;source<br/>project&#160;[Resources,&#160;3].&#160;Some&#160;specific&#160;areas&#160;of&#160;compatibility&#160;are:<br/>
Devices&#160;MUST&#160;NOT&#160;change&#160;the&#160;behavior&#160;or&#160;semantics&#160;of&#160;a&#160;standard&#160;Intent<br/>De<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources03">vices&#160;MUST&#160;N</a>OT&#160;alter&#160;the&#160;lifecycle&#160;or&#160;lifecycle&#160;semantics&#160;of&#160;a&#160;particular&#160;type<br/>of&#160;system&#160;component&#160;(such&#160;as&#160;Service,&#160;Activity,&#160;ContentProvider,&#160;etc.)<br/>Devices&#160;MUST&#160;NOT&#160;change&#160;the&#160;semantics&#160;of&#160;a&#160;standard&#160;permission<br/>
The&#160;above&#160;list&#160;is&#160;not&#160;comprehensive.&#160;The&#160;Compatibility&#160;Test&#160;Suite&#160;(CTS)&#160;tests<br/>significant&#160;portions&#160;of&#160;the&#160;platform&#160;for&#160;behavioral&#160;compatibility,&#160;but&#160;not&#160;al&#160;.&#160;It&#160;is&#160;the<br/>responsibility&#160;of&#160;the&#160;implementer&#160;to&#160;ensure&#160;behavioral&#160;compatibility&#160;with&#160;the&#160;Android<br/>Open&#160;Source&#160;Project.&#160;For&#160;this&#160;reason,&#160;device&#160;implementers&#160;SHOULD&#160;use&#160;the&#160;source<br/>code&#160;available&#160;via&#160;the&#160;Android&#160;Open&#160;Source&#160;Project&#160;where&#160;possible,&#160;rather&#160;than&#160;re-<br/>implement&#160;significant&#160;parts&#160;of&#160;the&#160;system.<br/>
<b>3.6.&#160;API&#160;Namespaces</b><br/>
Android&#160;fol&#160;ows&#160;the&#160;package&#160;and&#160;class&#160;namespace&#160;conventions&#160;defined&#160;by&#160;the&#160;Java<br/>
<hr/>
<a name=10></a>programming&#160;language.&#160;To&#160;ensure&#160;compatibility&#160;with&#160;third-party&#160;applications,&#160;device<br/>implementers&#160;MUST&#160;NOT&#160;make&#160;any&#160;prohibited&#160;modifications&#160;(see&#160;below)&#160;to&#160;these<br/>package&#160;namespaces:<br/>
java.*<br/>javax.*<br/>sun.*<br/>android.*<br/>com.android.*<br/>
Prohibited&#160;modifications&#160;include:<br/>
Device&#160;implementations&#160;MUST&#160;NOT&#160;modify&#160;the&#160;publicly&#160;exposed&#160;APIs&#160;on&#160;the<br/>Android&#160;platform&#160;by&#160;changing&#160;any&#160;method&#160;or&#160;class&#160;signatures,&#160;or&#160;by&#160;removing<br/>classes&#160;or&#160;class&#160;fields.<br/>Device&#160;implementers&#160;MAY&#160;modify&#160;the&#160;underlying&#160;implementation&#160;of&#160;the&#160;APIs,&#160;but<br/>such&#160;modifications&#160;MUST&#160;NOT&#160;impact&#160;the&#160;stated&#160;behavior&#160;and&#160;Java-language<br/>signature&#160;of&#160;any&#160;publicly&#160;exposed&#160;APIs.<br/>Device&#160;implementers&#160;MUST&#160;NOT&#160;add&#160;any&#160;publicly&#160;exposed&#160;elements&#160;(such&#160;as<br/>classes&#160;or&#160;interfaces,&#160;or&#160;fields&#160;or&#160;methods&#160;to&#160;existing&#160;classes&#160;or&#160;interfaces)&#160;to&#160;the<br/>APIs&#160;above.<br/>
A&#160;&#34;publicly&#160;exposed&#160;element&#34;&#160;is&#160;any&#160;construct&#160;which&#160;is&#160;not&#160;decorated&#160;with&#160;the&#160;&#34;@hide&#34;<br/>marker&#160;as&#160;used&#160;in&#160;the&#160;upstream&#160;Android&#160;source&#160;code.&#160;In&#160;other&#160;words,&#160;device<br/>implementers&#160;MUST&#160;NOT&#160;expose&#160;new&#160;APIs&#160;or&#160;alter&#160;existing&#160;APIs&#160;in&#160;the&#160;namespaces<br/>noted&#160;above.&#160;Device&#160;implementers&#160;MAY&#160;make&#160;internal-only&#160;modifications,&#160;but&#160;those<br/>modifications&#160;MUST&#160;NOT&#160;be&#160;advertised&#160;or&#160;otherwise&#160;exposed&#160;to&#160;developers.<br/>
Device&#160;implementers&#160;MAY&#160;add&#160;custom&#160;APIs,&#160;but&#160;any&#160;such&#160;APIs&#160;MUST&#160;NOT&#160;be&#160;in&#160;a<br/>namespace&#160;owned&#160;by&#160;or&#160;referring&#160;to&#160;another&#160;organization.&#160;For&#160;instance,&#160;device<br/>implementers&#160;MUST&#160;NOT&#160;add&#160;APIs&#160;to&#160;the&#160;com.google.*&#160;or&#160;similar&#160;namespace;&#160;only<br/>Google&#160;may&#160;do&#160;so.&#160;Similarly,&#160;Google&#160;MUST&#160;NOT&#160;add&#160;APIs&#160;to&#160;other&#160;companies'<br/>namespaces.&#160;Additional&#160;y,&#160;if&#160;a&#160;device&#160;implementation&#160;includes&#160;custom&#160;APIs&#160;outside<br/>the&#160;standard&#160;Android&#160;namespace,&#160;those&#160;APIs&#160;MUST&#160;be&#160;packaged&#160;in&#160;an&#160;Android<br/>shared&#160;library&#160;so&#160;that&#160;only&#160;apps&#160;that&#160;explicitly&#160;use&#160;them&#160;(via&#160;the&#160;&lt;uses-library&gt;<br/>mechanism)&#160;are&#160;affected&#160;by&#160;the&#160;increased&#160;memory&#160;usage&#160;of&#160;such&#160;APIs.<br/>
If&#160;a&#160;device&#160;implementer&#160;proposes&#160;to&#160;improve&#160;one&#160;of&#160;the&#160;package&#160;namespaces&#160;above<br/>(such&#160;as&#160;by&#160;adding&#160;useful&#160;new&#160;functionality&#160;to&#160;an&#160;existing&#160;API,&#160;or&#160;adding&#160;a&#160;new&#160;API),&#160;the<br/>implementer&#160;SHOULD&#160;visit&#160;source.android.com&#160;and&#160;begin&#160;the&#160;process&#160;for&#160;contributing<br/>changes&#160;and&#160;code,&#160;according&#160;to&#160;the&#160;information&#160;on&#160;that&#160;site.<br/>
Note&#160;that&#160;the&#160;restrictions&#160;above&#160;correspond&#160;to&#160;standard&#160;conventions&#160;for&#160;naming&#160;APIs&#160;in<br/>the&#160;Java&#160;programming&#160;language;&#160;this&#160;section&#160;simply&#160;aims&#160;to&#160;reinforce&#160;those<br/>conventions&#160;and&#160;make&#160;them&#160;binding&#160;through&#160;inclusion&#160;in&#160;this&#160;compatibility&#160;definition.<br/>
<b>3.7.&#160;Virtual&#160;Machine&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;ful&#160;&#160;Dalvik&#160;Executable&#160;(DEX)&#160;bytecode<br/>specification&#160;and&#160;Dalvik&#160;Virtual&#160;Machine&#160;semantics&#160;[Resources,&#160;17].<br/>
Device&#160;implementations&#160;MUST&#160;configure&#160;Dalvik&#160;to&#160;al&#160;ocate&#160;memory&#160;in&#160;accordance<br/>with&#160;the&#160;upstream&#160;Android&#160;platform,&#160;and&#160;as&#160;specified&#160;b<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources17">y&#160;the&#160;fol&#160;owing&#160;ta</a>ble.&#160;(See<br/>Section&#160;7.1.1&#160;for&#160;screen&#160;size&#160;and&#160;screen&#160;density&#160;definitions.)<br/>
Note&#160;that&#160;memory&#160;values&#160;specified&#160;below&#160;are&#160;considered&#160;minimum&#160;values,&#160;and&#160;device<br/>i<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7.1.1">mplementation</a>s&#160;MAY&#160;al&#160;ocate&#160;more&#160;memory&#160;per&#160;application.<br/>
<b>Screen&#160;Size</b><br/>
<b>Screen&#160;Density</b><br/>
<b>Application&#160;Memory</b><br/>
smal&#160;&#160;/&#160;normal&#160;/&#160;large<br/>
ldpi&#160;/&#160;mdpi<br/>
16MB<br/>
smal&#160;&#160;/&#160;normal&#160;/&#160;large<br/>
tvdpi&#160;/&#160;hdpi<br/>
32MB<br/>
smal&#160;&#160;/&#160;normal&#160;/&#160;large<br/>
xhdpi<br/>
64MB<br/>
xlarge<br/>
mdpi<br/>
32MB<br/>
xlarge<br/>
tvdpi&#160;/&#160;hdpi<br/>
64MB<br/>
xlarge<br/>
xhdpi<br/>
128MB<br/>
<b>3.8.&#160;User&#160;Interface&#160;Compatibility</b><br/>
<b>3.8.1.&#160;Widgets</b><br/>
Android&#160;defines&#160;a&#160;component&#160;type&#160;and&#160;corresponding&#160;API&#160;and&#160;lifecycle&#160;that&#160;al&#160;ows<br/>
<hr/>
<a name=11></a>applications&#160;to&#160;expose&#160;an&#160;&#34;AppWidget&#34;&#160;to&#160;the&#160;end&#160;user&#160;[Re<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources18">sources,&#160;18].&#160;The</a>&#160;Android<br/>Open&#160;Source&#160;reference&#160;release&#160;includes&#160;a&#160;Launcher&#160;application&#160;that&#160;includes&#160;user<br/>interface&#160;affordances&#160;al&#160;owing&#160;the&#160;user&#160;to&#160;add,&#160;view,&#160;and&#160;remove&#160;AppWidgets&#160;from&#160;the<br/>home&#160;screen.<br/>
Device&#160;implementations&#160;MAY&#160;substitute&#160;an&#160;alternative&#160;to&#160;the&#160;reference&#160;Launcher&#160;(i.e.<br/>home&#160;screen).&#160;Alternative&#160;Launchers&#160;SHOULD&#160;include&#160;built-in&#160;support&#160;for&#160;AppWidgets,<br/>and&#160;expose&#160;user&#160;interface&#160;affordances&#160;to&#160;add,&#160;configure,&#160;view,&#160;and&#160;remove<br/>AppWidgets&#160;directly&#160;within&#160;the&#160;Launcher.&#160;Alternative&#160;Launchers&#160;MAY&#160;omit&#160;these&#160;user<br/>interface&#160;elements;&#160;however,&#160;if&#160;they&#160;are&#160;omitted,&#160;the&#160;device&#160;implementation&#160;MUST<br/>provide&#160;a&#160;separate&#160;application&#160;accessible&#160;from&#160;the&#160;Launcher&#160;that&#160;al&#160;ows&#160;users&#160;to&#160;add,<br/>configure,&#160;view,&#160;and&#160;remove&#160;AppWidgets.<br/>
Device&#160;implementations&#160;MUST&#160;be&#160;capable&#160;of&#160;rendering&#160;widgets&#160;that&#160;are&#160;4&#160;x&#160;4&#160;in&#160;the<br/>standard&#160;grid&#160;size.&#160;(See&#160;the&#160;App&#160;Widget&#160;Design&#160;Guidelines&#160;in&#160;the&#160;Android&#160;SDK<br/>documentation&#160;[Resources,&#160;18]&#160;for&#160;details.<br/>
<b>3.8.2.&#160;Notifications</b><br/>
Android&#160;includes&#160;APIs&#160;that&#160;al&#160;ow&#160;developers&#160;to&#160;notify&#160;users&#160;of&#160;notable&#160;events<br/>[Resources,&#160;19],&#160;using&#160;hardware&#160;and&#160;software&#160;features&#160;of&#160;the&#160;device.<br/>
Some&#160;APIs&#160;al&#160;ow&#160;applications&#160;to&#160;perform&#160;notifications&#160;or&#160;attract&#160;attention&#160;using<br/>hardware,&#160;specifical&#160;y&#160;sound,&#160;vibration,&#160;and&#160;light.&#160;Device&#160;implementations&#160;MUST<br/>support&#160;notifications&#160;that&#160;use&#160;hardware&#160;features,&#160;as&#160;described&#160;in&#160;the&#160;SDK<br/>documentation,&#160;and&#160;to&#160;the&#160;extent&#160;possible&#160;with&#160;the&#160;device&#160;implementation&#160;hardware.<br/>For&#160;instance,&#160;if&#160;a&#160;device&#160;implementation&#160;includes&#160;a&#160;vibrator,&#160;it&#160;MUST&#160;correctly<br/>implement&#160;the&#160;vibration&#160;APIs.&#160;If&#160;a&#160;device&#160;implementation&#160;lacks&#160;hardware,&#160;the<br/>corresponding&#160;APIs&#160;MUST&#160;be&#160;implemented&#160;as&#160;no-ops.&#160;Note&#160;that&#160;this&#160;behavior&#160;is<br/>further&#160;detailed&#160;in&#160;Section&#160;7.<br/>
Additional&#160;y,&#160;the&#160;im<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#section-7">plementatio</a>n&#160;MUST&#160;correctly&#160;render&#160;al&#160;&#160;resources&#160;(icons,&#160;sound<br/>files,&#160;etc.)&#160;provided&#160;for&#160;in&#160;the&#160;APIs&#160;[Resources,&#160;20],&#160;or&#160;in&#160;the&#160;Status/System&#160;Bar&#160;icon<br/>style&#160;guide&#160;[Resources,&#160;21].&#160;Device&#160;implementers&#160;MAY&#160;provide&#160;an&#160;alternative&#160;user<br/>experience&#160;for&#160;notifications&#160;than&#160;that&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources20">provided&#160;by&#160;the&#160;</a>reference&#160;Android&#160;Open&#160;Source<br/>implementati<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources21">on;&#160;however,&#160;suc</a>h&#160;alternative&#160;notification&#160;systems&#160;MUST&#160;support&#160;existing<br/>notification&#160;resources,&#160;as&#160;above.<br/>
Android&#160;4.1&#160;includes&#160;support&#160;for&#160;rich&#160;notifications,&#160;such&#160;as&#160;interactive&#160;Views&#160;for<br/>ongoing&#160;notifications.&#160;Device&#160;implementations&#160;MUST&#160;properly&#160;display&#160;and&#160;execute&#160;rich<br/>notifications,&#160;as&#160;documented&#160;in&#160;the&#160;Android&#160;APIs.<br/>
<b>3.8.3.&#160;Search</b><br/>
Android&#160;includes&#160;APIs&#160;[Resources,&#160;22]&#160;that&#160;al&#160;ow&#160;developers&#160;to&#160;incorporate&#160;search&#160;into<br/>their&#160;applications,&#160;and&#160;expose&#160;their&#160;application's&#160;data&#160;into&#160;the&#160;global&#160;system&#160;search.<br/>General&#160;y&#160;speaking,&#160;this&#160;f<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources22">unctionality&#160;cons</a>ists&#160;of&#160;a&#160;single,&#160;system-wide&#160;user&#160;interface<br/>that&#160;al&#160;ows&#160;users&#160;to&#160;enter&#160;queries,&#160;displays&#160;suggestions&#160;as&#160;users&#160;type,&#160;and&#160;displays<br/>results.&#160;The&#160;Android&#160;APIs&#160;al&#160;ow&#160;developers&#160;to&#160;reuse&#160;this&#160;interface&#160;to&#160;provide&#160;search<br/>within&#160;their&#160;own&#160;apps,&#160;and&#160;al&#160;ow&#160;developers&#160;to&#160;supply&#160;results&#160;to&#160;the&#160;common&#160;global<br/>search&#160;user&#160;interface.<br/>
Device&#160;implementations&#160;MUST&#160;include&#160;a&#160;single,&#160;shared,&#160;system-wide&#160;search&#160;user<br/>interface&#160;capable&#160;of&#160;real-time&#160;suggestions&#160;in&#160;response&#160;to&#160;user&#160;input.&#160;Device<br/>implementations&#160;MUST&#160;implement&#160;the&#160;APIs&#160;that&#160;al&#160;ow&#160;developers&#160;to&#160;reuse&#160;this&#160;user<br/>interface&#160;to&#160;provide&#160;search&#160;within&#160;their&#160;own&#160;applications.&#160;Device&#160;implementations<br/>MUST&#160;implement&#160;the&#160;APIs&#160;that&#160;al&#160;ow&#160;third-party&#160;applications&#160;to&#160;add&#160;suggestions&#160;to&#160;the<br/>search&#160;box&#160;when&#160;it&#160;is&#160;run&#160;in&#160;global&#160;search&#160;mode.&#160;If&#160;no&#160;third-party&#160;applications&#160;are<br/>instal&#160;ed&#160;that&#160;make&#160;use&#160;of&#160;this&#160;functionality,&#160;the&#160;default&#160;behavior&#160;SHOULD&#160;be&#160;to&#160;display<br/>web&#160;search&#160;engine&#160;results&#160;and&#160;suggestions.<br/>
<b>3.8.4.&#160;Toasts</b><br/>
Applications&#160;can&#160;use&#160;the&#160;&#34;Toast&#34;&#160;API&#160;(defined&#160;in&#160;[Resources,&#160;23])&#160;to&#160;display&#160;short&#160;non-<br/>modal&#160;strings&#160;to&#160;the&#160;end&#160;user,&#160;that&#160;disappear&#160;after&#160;a&#160;brief&#160;period&#160;of&#160;time.&#160;Device<br/>implementations&#160;MUST&#160;display&#160;Toasts&#160;from&#160;applications&#160;to&#160;end&#160;users&#160;in&#160;some&#160;high-<br/>visibility&#160;manner.<br/>
<b>3.8.5.&#160;Themes</b><br/>
Android&#160;provides&#160;&#34;themes&#34;&#160;as&#160;a&#160;mechanism&#160;for&#160;applications&#160;to&#160;apply&#160;styles&#160;across&#160;an<br/>entire&#160;Activity&#160;or&#160;application.&#160;Android&#160;3.0&#160;introduced&#160;a&#160;new&#160;&#34;Holo&#34;&#160;or&#160;&#34;holographic&#34;<br/>theme&#160;as&#160;a&#160;set&#160;of&#160;defined&#160;styles&#160;for&#160;application&#160;developers&#160;to&#160;use&#160;if&#160;they&#160;want&#160;to&#160;match<br/>the&#160;Holo&#160;theme&#160;look&#160;and&#160;feel&#160;as&#160;defined&#160;by&#160;the&#160;Android&#160;SDK&#160;[Resources,&#160;24].&#160;Device<br/>implementations&#160;MUST&#160;NOT&#160;alter&#160;any&#160;of&#160;the&#160;Holo&#160;theme&#160;attributes&#160;exposed&#160;to<br/>
<hr/>
<a name=12></a>applications&#160;[<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources25">Resources,&#160;25].</a><br/>
Android&#160;4.0&#160;introduced&#160;a&#160;new&#160;&#34;Device&#160;Default&#34;&#160;theme&#160;as&#160;a&#160;set&#160;of&#160;defined&#160;styles&#160;for<br/>application&#160;developers&#160;to&#160;use&#160;if&#160;they&#160;want&#160;to&#160;match&#160;the&#160;look&#160;and&#160;feel&#160;of&#160;the&#160;device<br/>theme&#160;as&#160;defined&#160;by&#160;the&#160;device&#160;implementer.&#160;Device&#160;implementations&#160;MAY&#160;modify&#160;the<br/>DeviceDefault&#160;theme&#160;attributes&#160;exposed&#160;to&#160;applications&#160;[Re<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources25">sources,&#160;25].</a><br/>
<b>3.8.6.&#160;Live&#160;Wallpapers</b><br/>
Android&#160;defines&#160;a&#160;component&#160;type&#160;and&#160;corresponding&#160;API&#160;and&#160;lifecycle&#160;that&#160;al&#160;ows<br/>applications&#160;to&#160;expose&#160;one&#160;or&#160;more&#160;&#34;Live&#160;Wal&#160;papers&#34;&#160;to&#160;the&#160;end&#160;user&#160;[Resources,&#160;26].<br/>Live&#160;Wal&#160;papers&#160;are&#160;animations,&#160;patterns,&#160;or&#160;similar&#160;images&#160;with&#160;limited&#160;input<br/>capabilities&#160;that&#160;display&#160;as&#160;a&#160;wal&#160;paper,&#160;behind&#160;other&#160;applications.<br/>
Hardware&#160;is&#160;considered&#160;capable&#160;of&#160;reliably&#160;running&#160;live&#160;wal&#160;papers&#160;if&#160;it&#160;can&#160;run&#160;al&#160;&#160;live<br/>wal&#160;papers,&#160;with&#160;no&#160;limitations&#160;on&#160;functionality,&#160;at&#160;a&#160;reasonable&#160;framerate&#160;with&#160;no<br/>adverse&#160;affects&#160;on&#160;other&#160;applications.&#160;If&#160;limitations&#160;in&#160;the&#160;hardware&#160;cause&#160;wal&#160;papers<br/>and/or&#160;applications&#160;to&#160;crash,&#160;malfunction,&#160;consume&#160;excessive&#160;CPU&#160;or&#160;battery&#160;power,&#160;or<br/>run&#160;at&#160;unacceptably&#160;low&#160;frame&#160;rates,&#160;the&#160;hardware&#160;is&#160;considered&#160;incapable&#160;of&#160;running<br/>live&#160;wal&#160;paper.&#160;As&#160;an&#160;example,&#160;some&#160;live&#160;wal&#160;papers&#160;may&#160;use&#160;an&#160;Open&#160;GL&#160;1.0&#160;or&#160;2.0<br/>context&#160;to&#160;render&#160;their&#160;content.&#160;Live&#160;wal&#160;paper&#160;wil&#160;&#160;not&#160;run&#160;reliably&#160;on&#160;hardware&#160;that<br/>does&#160;not&#160;support&#160;multiple&#160;OpenGL&#160;contexts&#160;because&#160;the&#160;live&#160;wal&#160;paper&#160;use&#160;of&#160;an<br/>OpenGL&#160;context&#160;may&#160;conflict&#160;with&#160;other&#160;applications&#160;that&#160;also&#160;use&#160;an&#160;OpenGL&#160;context.<br/>
Device&#160;implementations&#160;capable&#160;of&#160;running&#160;live&#160;wal&#160;papers&#160;reliably&#160;as&#160;described<br/>above&#160;SHOULD&#160;implement&#160;live&#160;wal&#160;papers.&#160;Device&#160;implementations&#160;determined&#160;to&#160;not<br/>run&#160;live&#160;wal&#160;papers&#160;reliably&#160;as&#160;described&#160;above&#160;MUST&#160;NOT&#160;implement&#160;live&#160;wal&#160;papers.<br/>
<b>3.8.7.&#160;Recent&#160;Application&#160;Display</b><br/>
The&#160;upstream&#160;Android&#160;4.1&#160;source&#160;code&#160;includes&#160;a&#160;user&#160;interface&#160;for&#160;displaying&#160;recent<br/>applications&#160;using&#160;a&#160;thumbnail&#160;image&#160;of&#160;the&#160;application's&#160;graphical&#160;state&#160;at&#160;the<br/>moment&#160;the&#160;user&#160;last&#160;left&#160;the&#160;application.&#160;Device&#160;implementations&#160;MAY&#160;alter&#160;or<br/>eliminate&#160;this&#160;user&#160;interface;&#160;however,&#160;a&#160;future&#160;version&#160;of&#160;Android&#160;is&#160;planned&#160;to&#160;make<br/>more&#160;extensive&#160;use&#160;of&#160;this&#160;functionality.&#160;Device&#160;implementations&#160;are&#160;strongly<br/>encouraged&#160;to&#160;use&#160;the&#160;upstream&#160;Android&#160;4.1&#160;user&#160;interface&#160;(or&#160;a&#160;similar&#160;thumbnail-<br/>based&#160;interface)&#160;for&#160;recent&#160;applications,&#160;or&#160;else&#160;they&#160;may&#160;not&#160;be&#160;compatible&#160;with&#160;a<br/>future&#160;version&#160;of&#160;Android.<br/>
<b>3.8.8.&#160;Input&#160;Management&#160;Settings</b><br/>
Android&#160;4.1&#160;includes&#160;support&#160;for&#160;Input&#160;Management&#160;Engines.&#160;The&#160;Android&#160;4.1&#160;APIs<br/>al&#160;ow&#160;custom&#160;app&#160;IMEs&#160;to&#160;specify&#160;user-tunable&#160;settings.&#160;Device&#160;implementations<br/>MUST&#160;include&#160;a&#160;way&#160;for&#160;the&#160;user&#160;to&#160;access&#160;IME&#160;settings&#160;at&#160;al&#160;&#160;times&#160;when&#160;an&#160;IME&#160;that<br/>provides&#160;such&#160;user&#160;settings&#160;is&#160;displayed.<br/>
<b>3.8.9.&#160;Lock&#160;Screen&#160;Remote&#160;Control</b><br/>
Android&#160;4.0&#160;introduced&#160;support&#160;for&#160;Remote&#160;Control&#160;API&#160;that&#160;lets&#160;media&#160;applications<br/>integrate&#160;with&#160;playback&#160;controls&#160;that&#160;are&#160;displayed&#160;in&#160;a&#160;remote&#160;view&#160;like&#160;the&#160;device<br/>lock&#160;screen&#160;[Resources,&#160;69].&#160;Device&#160;implementations&#160;SHOULD&#160;include&#160;support&#160;for<br/>embedding&#160;remote&#160;controls&#160;in&#160;the&#160;device&#160;lock&#160;screen.<br/>
<b>3.9&#160;Device&#160;Administration</b><br/>
Android&#160;4.1&#160;includes&#160;features&#160;that&#160;al&#160;ow&#160;security-aware&#160;applications&#160;to&#160;perform&#160;device<br/>administration&#160;functions&#160;at&#160;the&#160;system&#160;level,&#160;such&#160;as&#160;enforcing&#160;password&#160;policies&#160;or<br/>performing&#160;remote&#160;wipe,&#160;through&#160;the&#160;Android&#160;Device&#160;Administration&#160;API&#160;[Resources,<br/>27].&#160;Device&#160;implementations&#160;MUST&#160;provide&#160;an&#160;implementation&#160;of&#160;the<br/>
DevicePolicyManager&#160;class&#160;[Resources,&#160;28],&#160;and&#160;SHOULD&#160;support&#160;the&#160;ful&#160;&#160;range&#160;of<br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources27">device&#160;administration&#160;policies&#160;defined&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation&#160;[Resources,<br/>27].</a><br/>
<b>Note:</b>&#160;while&#160;some&#160;of&#160;the&#160;requirements&#160;outlined&#160;above&#160;are&#160;stated&#160;as&#160;&#34;SHOULD&#34;&#160;for<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources27">Android&#160;4.1,&#160;the&#160;Compatibility&#160;Definition&#160;for&#160;a&#160;future&#160;version&#160;is&#160;planned&#160;to&#160;change&#160;these<br/></a>to&#160;&#34;MUST&#34;.&#160;That&#160;is,&#160;these&#160;requirements&#160;are&#160;optional&#160;in&#160;Android&#160;4.1&#160;but&#160;<b>will&#160;be<br/>required</b>&#160;by&#160;a&#160;future&#160;version.&#160;Existing&#160;and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are&#160;<b>very<br/>strongly&#160;encouraged&#160;to&#160;meet&#160;these&#160;requirements&#160;in&#160;Android&#160;4.1</b>,&#160;or&#160;they&#160;wil&#160;&#160;not<br/>be&#160;able&#160;to&#160;attain&#160;Android&#160;compatibility&#160;when&#160;upgraded&#160;to&#160;the&#160;future&#160;version.<br/>
<b>3.10&#160;Accessibility</b><br/>
Android&#160;4.1&#160;provides&#160;an&#160;accessibility&#160;layer&#160;that&#160;helps&#160;users&#160;with&#160;disabilities&#160;to&#160;navigate<br/>their&#160;devices&#160;more&#160;easily.&#160;In&#160;addition,&#160;Android&#160;4.1&#160;provides&#160;platform&#160;APIs&#160;that&#160;enable<br/>
<hr/>
<a name=13></a>accessibility&#160;service&#160;implementations&#160;to&#160;receive&#160;cal&#160;backs&#160;for&#160;user&#160;and&#160;system&#160;events<br/>and&#160;generate&#160;alternate&#160;feedback&#160;mechanisms,&#160;such&#160;as&#160;text-to-speech,&#160;haptic<br/>feedback,&#160;and&#160;trackbal&#160;/d-pad&#160;navigation&#160;[R<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources29">esources,&#160;29].&#160;D</a>evice&#160;implementations<br/>MUST&#160;provide&#160;an&#160;implementation&#160;of&#160;the&#160;Android&#160;accessibility&#160;framework&#160;consistent<br/>with&#160;the&#160;default&#160;Android&#160;implementation.&#160;Specifical&#160;y,&#160;device&#160;implementations&#160;MUST<br/>meet&#160;the&#160;fol&#160;owing&#160;requirements.<br/>
Device&#160;implementations&#160;MUST&#160;support&#160;third&#160;party&#160;accessibility&#160;service<br/>i<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources30">mplementations&#160;through&#160;the&#160;android.accessibilityservice&#160;APIs&#160;[Resources,<br/>30].<br/></a>Device&#160;implementations&#160;MUST&#160;generate&#160;AccessibilityEvents&#160;and&#160;deliver<br/>these&#160;events&#160;to&#160;al&#160;&#160;registered&#160;AccessibilityService&#160;implementations&#160;in&#160;a<br/>manner&#160;consistent&#160;with&#160;the&#160;default&#160;Android&#160;implementation.<br/>Device&#160;implementations&#160;MUST&#160;provide&#160;a&#160;user-accessible&#160;mechanism&#160;to&#160;enable<br/>and&#160;disable&#160;accessibility&#160;services,&#160;and&#160;MUST&#160;display&#160;this&#160;interface&#160;in&#160;response<br/>to&#160;the&#160;android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS&#160;intent.<br/>
Additional&#160;y,&#160;device&#160;implementations&#160;SHOULD&#160;provide&#160;an&#160;implementation&#160;of&#160;an<br/>accessibility&#160;service&#160;on&#160;the&#160;device,&#160;and&#160;SHOULD&#160;provide&#160;a&#160;mechanism&#160;for&#160;users&#160;to<br/>enable&#160;the&#160;accessibility&#160;service&#160;during&#160;device&#160;setup.&#160;An&#160;open&#160;source&#160;implementation<br/>of&#160;an&#160;accessibility&#160;service&#160;is&#160;available&#160;from&#160;the&#160;Eyes&#160;Free&#160;project&#160;[Resources,&#160;31].<br/>
<b>3.11&#160;Text-to-Speech</b><br/>
Android&#160;4.1&#160;includes&#160;APIs&#160;that&#160;al&#160;ow&#160;applications&#160;to&#160;make&#160;use&#160;of&#160;text-to-speech&#160;(TTS)<br/>services,&#160;and&#160;al&#160;ows&#160;service&#160;providers&#160;to&#160;provide&#160;implementations&#160;of&#160;TTS&#160;services<br/>[Resources,&#160;32].&#160;Device&#160;implementations&#160;MUST&#160;meet&#160;these&#160;requirements&#160;related&#160;to<br/>t<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources32">he&#160;Android&#160;TTS&#160;</a>framework:<br/>
Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;Android&#160;TTS&#160;framework&#160;APIs&#160;and<br/>SHOULD&#160;include&#160;a&#160;TTS&#160;engine&#160;supporting&#160;the&#160;languages&#160;available&#160;on&#160;the<br/>device.&#160;Note&#160;that&#160;the&#160;upstream&#160;Android&#160;open&#160;source&#160;software&#160;includes&#160;a&#160;ful&#160;-<br/>featured&#160;TTS&#160;engine&#160;implementation.<br/>Device&#160;implementations&#160;MUST&#160;support&#160;instal&#160;ation&#160;of&#160;third-party&#160;TTS&#160;engines.<br/>Device&#160;implementations&#160;MUST&#160;provide&#160;a&#160;user-accessible&#160;interface&#160;that&#160;al&#160;ows<br/>users&#160;to&#160;select&#160;a&#160;TTS&#160;engine&#160;for&#160;use&#160;at&#160;the&#160;system&#160;level.<br/>
<b>4.&#160;Application&#160;Packaging&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;instal&#160;&#160;and&#160;run&#160;Android&#160;&#34;.apk&#34;&#160;files&#160;as&#160;generated&#160;by&#160;the<br/>&#34;aapt&#34;&#160;tool&#160;included&#160;in&#160;the&#160;official&#160;Android&#160;SDK&#160;[Resources,&#160;33].<br/>
Devices&#160;implementations&#160;MUST&#160;NOT&#160;extend&#160;eithe<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources33">r&#160;the&#160;.apk&#160;[Reso</a>urces,&#160;34],&#160;Android<br/>Manifest&#160;[Resources,&#160;35],&#160;Dalvik&#160;bytecode&#160;[Resources,&#160;17],&#160;or&#160;renderscript&#160;bytecode<br/>formats&#160;in&#160;such&#160;a&#160;way&#160;that&#160;would&#160;prevent&#160;those&#160;files&#160;from&#160;instal&#160;in<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources34">g&#160;and&#160;running&#160;co</a>rrectly<br/>on&#160;other&#160;c<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources35">ompatible&#160;device</a>s.&#160;Device&#160;impleme<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources17">nters&#160;SHOULD&#160;u</a>se&#160;the&#160;reference<br/>upstream&#160;implementation&#160;of&#160;Dalvik,&#160;and&#160;the&#160;reference&#160;implementation's&#160;package<br/>management&#160;system.<br/>
<b>5.&#160;Multimedia&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;include&#160;at&#160;least&#160;one&#160;form&#160;of&#160;audio&#160;output,&#160;such&#160;as<br/>speakers,&#160;headphone&#160;jack,&#160;external&#160;speaker&#160;connection,&#160;etc.<br/>
<b>5.1.&#160;Media&#160;Codecs</b><br/>
Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;core&#160;media&#160;formats&#160;specified&#160;in&#160;the<br/>Android&#160;SDK&#160;documentation&#160;[Resources,&#160;58]&#160;except&#160;where&#160;explicitly&#160;permitted&#160;in&#160;this<br/>document.&#160;Specifical&#160;y,&#160;device&#160;implementations&#160;MUST&#160;support&#160;the&#160;media&#160;formats,<br/>encoders,&#160;decoders,&#160;file&#160;types&#160;and&#160;container&#160;formats&#160;defined&#160;in&#160;the&#160;tables&#160;below.&#160;Al&#160;&#160;of<br/>these&#160;codecs&#160;are&#160;provided&#160;as&#160;s<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources58">oftware&#160;impleme</a>ntations&#160;in&#160;the&#160;preferred&#160;Android<br/>implementation&#160;from&#160;the&#160;Android&#160;Open&#160;Source&#160;Project.<br/>
<b>Please&#160;note&#160;that&#160;neither&#160;Google&#160;nor&#160;the&#160;Open&#160;Handset&#160;Alliance&#160;make&#160;any<br/>representation&#160;that&#160;these&#160;codecs&#160;are&#160;unencumbered&#160;by&#160;third-party&#160;patents.<br/>Those&#160;intending&#160;to&#160;use&#160;this&#160;source&#160;code&#160;in&#160;hardware&#160;or&#160;software&#160;products&#160;are<br/>advised&#160;that&#160;implementations&#160;of&#160;this&#160;code,&#160;including&#160;in&#160;open&#160;source&#160;software<br/>or&#160;shareware,&#160;may&#160;require&#160;patent&#160;licenses&#160;from&#160;the&#160;relevant&#160;patent&#160;holders.</b><br/>
Note&#160;that&#160;these&#160;tables&#160;do&#160;not&#160;list&#160;specific&#160;bitrate&#160;requirements&#160;for&#160;most&#160;video&#160;codecs<br/>because&#160;current&#160;device&#160;hardware&#160;does&#160;not&#160;necessarily&#160;support&#160;bitrates&#160;that&#160;map<br/>exactly&#160;to&#160;the&#160;required&#160;bitrates&#160;specified&#160;by&#160;the&#160;relevant&#160;standards.&#160;Instead,&#160;device<br/>implementations&#160;SHOULD&#160;support&#160;the&#160;highest&#160;bitrate&#160;practical&#160;on&#160;the&#160;hardware,&#160;up&#160;to<br/>
<hr/>
<a name=14></a>the&#160;limits&#160;defined&#160;by&#160;the&#160;specifications.<br/>
<hr/>
<a name=15></a><b>File&#160;Type(s)&#160;/</b><br/>
<b>Format&#160;/</b><br/>
<b>Type</b><br/>
<b>Encoder</b><br/>
<b>Decoder</b><br/>
<b>Details</b><br/>
<b>Container</b><br/>
<b>Codec</b><br/>
<b>Formats</b><br/>
Support&#160;for<br/>
REQUIRED<br/>
mono/stereo/5.0/5.1*<br/>
MPEG-4<br/>
Required&#160;for&#160;device&#160;implementations<br/>
content&#160;with<br/>
AAC&#160;Profile<br/>
that&#160;include&#160;microphone&#160;hardware<br/>
REQUIRED<br/>
standard&#160;sampling<br/>
(AAC&#160;LC)<br/>
and&#160;define<br/>
3GPP<br/>
rates&#160;from&#160;8&#160;to&#160;48<br/>
android.hardware.microphone.<br/>
(.3gp)<br/>
kHz.<br/>
MPEG-4<br/>
Support&#160;for<br/>
(.mp4,<br/>
MPEG-4<br/>
mono/stereo/5.0/5.1*<br/>
.m4a)<br/>
HE&#160;AAC<br/>
content&#160;with<br/>
ADTS&#160;raw<br/>
&#160;<br/>
REQUIRED<br/>
Profile<br/>
standard&#160;sampling<br/>
AAC&#160;(.aac,<br/>
(AAC+)<br/>
rates&#160;from&#160;16&#160;to&#160;48<br/>
decode&#160;in<br/>
kHz.<br/>
Android<br/>3.1+,<br/>
Support&#160;for<br/>
MPEG-4<br/>
REQUIRED&#160;for&#160;device<br/>
encode&#160;in<br/>
mono/stereo/5.0/5.1*<br/>
HE&#160;AAC&#160;v2<br/>
implementations&#160;that&#160;include<br/>
Android<br/>
content&#160;with<br/>
Profile<br/>
microphone&#160;hardware&#160;and<br/>
&#160;<br/>
4.0+,&#160;ADIF<br/>
standard&#160;sampling<br/>
(enhanced<br/>
define<br/>
not<br/>
rates&#160;from&#160;16&#160;to&#160;48<br/>
AAC+)<br/>
android.hardware.microphone<br/>
supported)<br/>
kHz.<br/>
MPEG-TS<br/>
MPEG-4<br/>
(.ts,&#160;not<br/>
Audio<br/>
REQUIRED&#160;for&#160;device<br/>
Support&#160;for<br/>
seekable,<br/>
Object&#160;Type<br/>
implementations&#160;that&#160;include<br/>
mono/stereo&#160;content<br/>
Android<br/>
ER&#160;AAC<br/>
microphone&#160;hardware&#160;and<br/>
REQUIRED<br/>
with&#160;standard<br/>
3.0+)<br/>
ELD<br/>
define<br/>
sampling&#160;rates&#160;from<br/>
(Enhanced<br/>
android.hardware.microphone<br/>
16&#160;to&#160;48&#160;kHz.<br/>
Low&#160;Delay<br/>AAC)<br/>
REQUIRED<br/>
Required&#160;for&#160;device&#160;implementations<br/>
4.75&#160;to&#160;12.2&#160;kbps<br/>
AMR-NB<br/>
that&#160;include&#160;microphone&#160;hardware<br/>
REQUIRED<br/>
3GPP&#160;(.3gp)<br/>
sampled&#160;@&#160;8kHz<br/>
and&#160;define<br/>
android.hardware.microphone.<br/>
REQUIRED<br/>
Required&#160;for&#160;device&#160;implementations<br/>
9&#160;rates&#160;from&#160;6.60<br/>
AMR-WB<br/>
that&#160;include&#160;microphone&#160;hardware<br/>
REQUIRED<br/>
kbit/s&#160;to&#160;23.85&#160;kbit/s<br/>
3GPP&#160;(.3gp)<br/>
and&#160;define<br/>
sampled&#160;@&#160;16kHz<br/>
android.hardware.microphone.<br/>
Mono/Stereo&#160;(no<br/>multichannel).<br/>
Audio<br/>
Sample&#160;rates&#160;up&#160;to<br/>48&#160;kHz&#160;(but&#160;up&#160;to<br/>44.1&#160;kHz&#160;is<br/>recommended&#160;on<br/>devices&#160;with&#160;44.1<br/>
REQUIRED<br/>
FLAC<br/>
&#160;<br/>
kHz&#160;output,&#160;as&#160;the&#160;48<br/>
FLAC&#160;(.flac)&#160;only<br/>
(Android&#160;3.1+)<br/>
to&#160;44.1&#160;kHz<br/>downsampler&#160;does<br/>not&#160;include&#160;a&#160;low-<br/>pass&#160;filter).&#160;16-bit<br/>recommended;&#160;no<br/>dither&#160;applied&#160;for&#160;24-<br/>bit.<br/>
Mono/Stereo&#160;8-<br/>320Kbps&#160;constant<br/>
MP3<br/>
&#160;<br/>
REQUIRED<br/>
MP3&#160;(.mp3)<br/>
(CBR)&#160;or&#160;variable<br/>bit-rate&#160;(VBR)<br/>
Type&#160;0&#160;and<br/>
MIDI&#160;Type&#160;0&#160;and&#160;1.<br/>
1&#160;(.mid,<br/>
DLS&#160;Version&#160;1&#160;and<br/>
.xmf,&#160;.mxmf)<br/>
2.&#160;XMF&#160;and&#160;Mobile<br/>
RTTTL/RTX<br/>
MIDI<br/>
&#160;<br/>
REQUIRED<br/>
XMF.&#160;Support&#160;for<br/>
(.rtttl,&#160;.rtx)<br/>
ringtone&#160;formats<br/>
OTA&#160;(.ota)<br/>
RTTTL/RTX,&#160;OTA,<br/>
iMelody<br/>
and&#160;iMelody<br/>
(.imy)<br/>
<hr/>
<a name=16></a>Ogg&#160;(.ogg)<br/>
Vorbis<br/>
&#160;<br/>
REQUIRED<br/>
&#160;<br/>
Matroska<br/>(.mkv)<br/>
8-bit&#160;and&#160;16-bit<br/>linear&#160;PCM**&#160;(rates<br/>up&#160;to&#160;limit&#160;of<br/>hardware).Devices<br/>MUST&#160;support<br/>
PCM/WAVE<br/>
REQUIRED<br/>
REQUIRED<br/>
WAVE&#160;(.wav)<br/>
sampling&#160;rates&#160;for<br/>raw&#160;PCM&#160;recording<br/>at&#160;8000,16000&#160;and<br/>44100&#160;Hz<br/>frequencies<br/>
JPEG<br/>
REQUIRED<br/>
REQUIRED<br/>
Base+progressive<br/>
JPEG&#160;(.jpg)<br/>
GIF<br/>
&#160;<br/>
REQUIRED<br/>
&#160;<br/>
GIF&#160;(.gif)<br/>
Image<br/>
PNG<br/>
REQUIRED<br/>
REQUIRED<br/>
&#160;<br/>
PNG&#160;(.png)<br/>
BMP<br/>
&#160;<br/>
REQUIRED<br/>
&#160;<br/>
BMP&#160;(.bmp)<br/>
WEBP<br/>
REQUIRED<br/>
REQUIRED<br/>
&#160;<br/>
WebP&#160;(.webp)<br/>
REQUIRED<br/>
Required&#160;for&#160;device&#160;implementations<br/>
3GPP<br/>
that&#160;include&#160;camera&#160;hardware&#160;and<br/>
(.3gp)<br/>
H.263<br/>
REQUIRED<br/>
&#160;<br/>
define&#160;android.hardware.camera<br/>
MPEG-4<br/>
or<br/>
(.mp4)<br/>
android.hardware.camera.front.<br/>
3GPP<br/>(.3gp)<br/>
REQUIRED<br/>
MPEG-4<br/>(.mp4)<br/>
Required&#160;for&#160;device&#160;implementations<br/>
MPEG-TS<br/>
that&#160;include&#160;camera&#160;hardware&#160;and<br/>
Baseline&#160;Profile<br/>
Video<br/>
H.264&#160;AVC<br/>
REQUIRED<br/>
(.ts,&#160;AAC<br/>
define&#160;android.hardware.camera<br/>
(BP)<br/>
audio&#160;only,<br/>
or<br/>
not<br/>
android.hardware.camera.front.<br/>
seekable,<br/>Android<br/>3.0+)<br/>
MPEG-4<br/>
&#160;<br/>
REQUIRED<br/>
&#160;<br/>
3GPP&#160;(.3gp)<br/>
SP<br/>
WebM&#160;(.webm)<br/>
REQUIRED<br/>
and&#160;Matroska<br/>
VP8<br/>
&#160;<br/>
(Android<br/>
&#160;<br/>
(.mkv,&#160;Android<br/>
2.3.3+)<br/>
4.0+)<br/>
*Note:&#160;Only&#160;downmix&#160;of&#160;5.0/5.1&#160;content&#160;is&#160;required;&#160;recording&#160;or&#160;rendering&#160;more&#160;than&#160;2<br/>channels&#160;is&#160;optional.&#160;**Note:&#160;16-bit&#160;linear&#160;PCM&#160;capture&#160;is&#160;mandatory.&#160;8-bit&#160;linear&#160;PCM<br/>capture&#160;is&#160;not&#160;mandatory.<br/>
<b>5.2&#160;Video&#160;Encoding</b><br/>
Android&#160;device&#160;implementations&#160;that&#160;include&#160;a&#160;rear-facing&#160;camera&#160;and&#160;declare<br/>
android.hardware.camera&#160;SHOULD&#160;support&#160;the&#160;fol&#160;owing&#160;video&#160;encoding&#160;profiles.<br/>
<b>HD&#160;(When&#160;supported&#160;by</b><br/>
<b>&#160;</b><br/>
<b>SD&#160;(Low&#160;quality)&#160;SD&#160;(High&#160;quality)</b><br/>
<b>hardware)</b><br/>
H.264&#160;Baseline<br/>
H.264&#160;Baseline<br/>
<b>Video&#160;codec</b><br/>
H.264&#160;Baseline&#160;Profile<br/>
Profile<br/>
Profile<br/>
<b>Video</b><br/>
176&#160;x&#160;144&#160;px<br/>
480&#160;x&#160;360&#160;px<br/>
1280&#160;x&#160;720&#160;px<br/>
<b>resolution</b><br/>
<b>Video&#160;frame&#160;</b>12&#160;fps<br/>
30&#160;fps<br/>
30&#160;fps<br/>
<b>rate</b><br/>
500&#160;Kbps&#160;or<br/>
<b>Video&#160;bitrate&#160;</b>56&#160;Kbps<br/>
2&#160;Mbps&#160;or&#160;higher<br/>
higher<br/>
<b>Audio&#160;codec&#160;</b>AAC-LC<br/>
AAC-LC<br/>
AAC-LC<br/>
<hr/>
<a name=17></a><b>Audio</b><br/>
1&#160;(mono)<br/>
2&#160;(stereo)<br/>
2&#160;(stereo)<br/>
<b>channels</b><br/>
<b>Audio&#160;bitrate&#160;</b>24&#160;Kbps<br/>
128&#160;Kbps<br/>
192&#160;Kbps<br/>
<b>5.3.&#160;Audio&#160;Recording</b><br/>
When&#160;an&#160;application&#160;has&#160;used&#160;the&#160;android.media.AudioRecord&#160;API&#160;to&#160;start&#160;recording<br/>an&#160;audio&#160;stream,&#160;device&#160;implementations&#160;that&#160;include&#160;microphone&#160;hardware&#160;and<br/>declare&#160;android.hardware.microphone&#160;MUST&#160;sample&#160;and&#160;record&#160;audio&#160;with&#160;each&#160;of<br/>these&#160;behaviors:<br/>
The&#160;device&#160;SHOULD&#160;exhibit&#160;approximately&#160;flat&#160;amplitude&#160;versus&#160;frequency<br/>characteristics;&#160;specifical&#160;y,&#160;±3&#160;dB,&#160;from&#160;100&#160;Hz&#160;to&#160;4000&#160;Hz<br/>Audio&#160;input&#160;sensitivity&#160;SHOULD&#160;be&#160;set&#160;such&#160;that&#160;a&#160;90&#160;dB&#160;sound&#160;power&#160;level<br/>(SPL)&#160;source&#160;at&#160;1000&#160;Hz&#160;yields&#160;RMS&#160;of&#160;2500&#160;for&#160;16-bit&#160;samples.<br/>PCM&#160;amplitude&#160;levels&#160;SHOULD&#160;linearly&#160;track&#160;input&#160;SPL&#160;changes&#160;over&#160;at&#160;least&#160;a<br/>30&#160;dB&#160;range&#160;from&#160;-18&#160;dB&#160;to&#160;+12&#160;dB&#160;re&#160;90&#160;dB&#160;SPL&#160;at&#160;the&#160;microphone.<br/>Total&#160;harmonic&#160;distortion&#160;SHOULD&#160;be&#160;less&#160;than&#160;1%&#160;for&#160;1Khz&#160;at&#160;90&#160;dB&#160;SPL&#160;input<br/>level.<br/>
In&#160;addition&#160;to&#160;the&#160;above&#160;recording&#160;specifications,&#160;when&#160;an&#160;application&#160;has&#160;started<br/>recording&#160;an&#160;audio&#160;stream&#160;using&#160;the<br/>
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION&#160;audio&#160;source:<br/>
Noise&#160;reduction&#160;processing,&#160;if&#160;present,&#160;MUST&#160;be&#160;disabled.<br/>Automatic&#160;gain&#160;control,&#160;if&#160;present,&#160;MUST&#160;be&#160;disabled.<br/>
<b>Note:</b>&#160;while&#160;some&#160;of&#160;the&#160;requirements&#160;outlined&#160;above&#160;are&#160;stated&#160;as&#160;&#34;SHOULD&#34;&#160;for<br/>Android&#160;4.1,&#160;the&#160;Compatibility&#160;Definition&#160;for&#160;a&#160;future&#160;version&#160;is&#160;planned&#160;to&#160;change&#160;these<br/>to&#160;&#34;MUST&#34;.&#160;That&#160;is,&#160;these&#160;requirements&#160;are&#160;optional&#160;in&#160;Android&#160;4.1&#160;but&#160;<b>will&#160;be<br/>required</b>&#160;by&#160;a&#160;future&#160;version.&#160;Existing&#160;and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are&#160;<b>very<br/>strongly&#160;encouraged&#160;to&#160;meet&#160;these&#160;requirements&#160;in&#160;Android&#160;4.1</b>,&#160;or&#160;they&#160;wil&#160;&#160;not<br/>be&#160;able&#160;to&#160;attain&#160;Android&#160;compatibility&#160;when&#160;upgraded&#160;to&#160;the&#160;future&#160;version.<br/>
<b>5.4.&#160;Audio&#160;Latency</b><br/>
Audio&#160;latency&#160;is&#160;broadly&#160;defined&#160;as&#160;the&#160;interval&#160;between&#160;when&#160;an&#160;application&#160;requests<br/>an&#160;audio&#160;playback&#160;or&#160;record&#160;operation,&#160;and&#160;when&#160;the&#160;device&#160;implementation&#160;actual&#160;y<br/>begins&#160;the&#160;operation.&#160;Many&#160;classes&#160;of&#160;applications&#160;rely&#160;on&#160;short&#160;latencies,&#160;to&#160;achieve<br/>real-time&#160;effects&#160;such&#160;sound&#160;effects&#160;or&#160;VOIP&#160;communication.&#160;Device&#160;implementations<br/>that&#160;include&#160;microphone&#160;hardware&#160;and&#160;declare&#160;android.hardware.microphone<br/>SHOULD&#160;meet&#160;al&#160;&#160;audio&#160;latency&#160;requirements&#160;outlined&#160;in&#160;this&#160;section.&#160;See&#160;Section&#160;7<br/>for&#160;details&#160;on&#160;the&#160;conditions&#160;under&#160;which&#160;microphone&#160;hardware&#160;may&#160;be&#160;omitted&#160;by<br/>device&#160;implementations.<br/>
For&#160;the&#160;purposes&#160;of&#160;this&#160;section:<br/>
&#34;cold&#160;output&#160;latency&#34;&#160;is&#160;defined&#160;to&#160;be&#160;the&#160;interval&#160;between&#160;when&#160;an&#160;application<br/>requests&#160;audio&#160;playback&#160;and&#160;when&#160;sound&#160;begins&#160;playing,&#160;when&#160;the&#160;audio&#160;system<br/>has&#160;been&#160;idle&#160;and&#160;powered&#160;down&#160;prior&#160;to&#160;the&#160;request<br/>&#34;warm&#160;output&#160;latency&#34;&#160;is&#160;defined&#160;to&#160;be&#160;the&#160;interval&#160;between&#160;when&#160;an&#160;application<br/>requests&#160;audio&#160;playback&#160;and&#160;when&#160;sound&#160;begins&#160;playing,&#160;when&#160;the&#160;audio&#160;system<br/>has&#160;been&#160;recently&#160;used&#160;but&#160;is&#160;currently&#160;idle&#160;(that&#160;is,&#160;silent)<br/>&#34;continuous&#160;output&#160;latency&#34;&#160;is&#160;defined&#160;to&#160;be&#160;the&#160;interval&#160;between&#160;when&#160;an<br/>application&#160;issues&#160;a&#160;sample&#160;to&#160;be&#160;played&#160;and&#160;when&#160;the&#160;speaker&#160;physical&#160;y&#160;plays<br/>the&#160;corresponding&#160;sound,&#160;while&#160;the&#160;device&#160;is&#160;currently&#160;playing&#160;back&#160;audio<br/>&#34;cold&#160;input&#160;latency&#34;&#160;is&#160;defined&#160;to&#160;be&#160;the&#160;interval&#160;between&#160;when&#160;an&#160;application<br/>requests&#160;audio&#160;recording&#160;and&#160;when&#160;the&#160;first&#160;sample&#160;is&#160;delivered&#160;to&#160;the<br/>application&#160;via&#160;its&#160;cal&#160;back,&#160;when&#160;the&#160;audio&#160;system&#160;and&#160;microphone&#160;has&#160;been<br/>idle&#160;and&#160;powered&#160;down&#160;prior&#160;to&#160;the&#160;request<br/>&#34;continuous&#160;input&#160;latency&#34;&#160;is&#160;defined&#160;to&#160;be&#160;when&#160;an&#160;ambient&#160;sound&#160;occurs&#160;and<br/>when&#160;the&#160;sample&#160;corresponding&#160;to&#160;that&#160;sound&#160;is&#160;delivered&#160;to&#160;a&#160;recording<br/>application&#160;via&#160;its&#160;cal&#160;back,&#160;while&#160;the&#160;device&#160;is&#160;in&#160;recording&#160;mode<br/>
Using&#160;the&#160;above&#160;definitions,&#160;device&#160;implementations&#160;SHOULD&#160;exhibit&#160;each&#160;of&#160;these<br/>properties:<br/>
cold&#160;output&#160;latency&#160;of&#160;100&#160;mil&#160;iseconds&#160;or&#160;less<br/>warm&#160;output&#160;latency&#160;of&#160;10&#160;mil&#160;iseconds&#160;or&#160;less<br/>continuous&#160;output&#160;latency&#160;of&#160;45&#160;mil&#160;iseconds&#160;or&#160;less<br/>cold&#160;input&#160;latency&#160;of&#160;100&#160;mil&#160;iseconds&#160;or&#160;less<br/>continuous&#160;input&#160;latency&#160;of&#160;50&#160;mil&#160;iseconds&#160;or&#160;less<br/>
<b>Note:</b>&#160;while&#160;the&#160;requirements&#160;outlined&#160;above&#160;are&#160;stated&#160;as&#160;&#34;SHOULD&#34;&#160;for&#160;Android&#160;4.1,<br/>
<hr/>
<a name=18></a>the&#160;Compatibility&#160;Definition&#160;for&#160;a&#160;future&#160;version&#160;is&#160;planned&#160;to&#160;change&#160;these&#160;to&#160;&#34;MUST&#34;.<br/>That&#160;is,&#160;these&#160;requirements&#160;are&#160;optional&#160;in&#160;Android&#160;4.1&#160;but&#160;<b>will&#160;be&#160;required</b>&#160;by&#160;a&#160;future<br/>version.&#160;Existing&#160;and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are&#160;<b>very&#160;strongly<br/>encouraged&#160;to&#160;meet&#160;these&#160;requirements&#160;in&#160;Android&#160;4.1</b>,&#160;or&#160;they&#160;wil&#160;&#160;not&#160;be&#160;able&#160;to<br/>attain&#160;Android&#160;compatibility&#160;when&#160;upgraded&#160;to&#160;the&#160;future&#160;version.<br/>
If&#160;a&#160;device&#160;implementation&#160;meets&#160;the&#160;requirements&#160;of&#160;this&#160;section,&#160;it&#160;MAY&#160;report<br/>support&#160;for&#160;low-latency&#160;audio,&#160;by&#160;reporting&#160;the&#160;feature&#160;&#34;android.hardware.audio.low-<br/>latency&#34;&#160;via&#160;the&#160;android.content.pm.PackageManager&#160;class.&#160;[Re<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources37">sources,&#160;37]<br/></a>Conversely,&#160;if&#160;the&#160;device&#160;implementation&#160;does&#160;not&#160;meet&#160;these&#160;requirements&#160;it&#160;MUST<br/>NOT&#160;report&#160;support&#160;for&#160;low-latency&#160;audio.<br/>
<b>5.5.&#160;Network&#160;Protocols</b><br/>
Devices&#160;MUST&#160;support&#160;the&#160;media&#160;network&#160;protocols&#160;for&#160;audio&#160;and&#160;video&#160;playback&#160;as<br/>specified&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation&#160;[Resources,&#160;58].&#160;Specifical&#160;y,&#160;devices<br/>MUST&#160;support&#160;the&#160;fol&#160;owing&#160;media&#160;network&#160;proto<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources58">cols:</a><br/>
RTSP&#160;(RTP,&#160;SDP)<br/>HTTP(S)&#160;progressive&#160;streaming<br/>HTTP(S)&#160;Live&#160;Streaming&#160;draft&#160;protocol,&#160;Version&#160;3&#160;[Resources,&#160;59]<br/>
<b>6.&#160;Developer&#160;Tool&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;Android&#160;Developer&#160;Tools&#160;provided&#160;in&#160;the<br/>Android&#160;SDK.&#160;Specifical&#160;y,&#160;Android-compatible&#160;devices&#160;MUST&#160;be&#160;compatible&#160;with:<br/>
<b>Android&#160;Debug&#160;Bridge&#160;(known&#160;as&#160;adb)</b>&#160;[Resources,&#160;33]<br/>Device&#160;implementations&#160;MUST&#160;support&#160;al&#160;&#160;adb&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources33">functions&#160;as&#160;doc</a>umented&#160;in&#160;the<br/>Android&#160;SDK.&#160;The&#160;device-side&#160;adb&#160;daemon&#160;MUST&#160;be&#160;inactive&#160;by&#160;default,&#160;and<br/>there&#160;MUST&#160;be&#160;a&#160;user-accessible&#160;mechanism&#160;to&#160;turn&#160;on&#160;the&#160;Android&#160;Debug<br/>Bridge.<br/><b>Dalvik&#160;Debug&#160;Monitor&#160;Service&#160;(known&#160;as&#160;ddms)</b>&#160;[Resources,&#160;33]<br/>Device&#160;implementations&#160;MUST&#160;support&#160;al&#160;&#160;ddms&#160;features&#160;as&#160;documented&#160;in&#160;the<br/>Android&#160;SDK.&#160;As&#160;ddms&#160;uses&#160;adb,&#160;support&#160;for&#160;ddms&#160;SHOULD&#160;be&#160;inactive&#160;by<br/>default,&#160;but&#160;MUST&#160;be&#160;supported&#160;whenever&#160;the&#160;user&#160;has&#160;activated&#160;the&#160;Android<br/>Debug&#160;Bridge,&#160;as&#160;above.<br/><b>Monkey</b>&#160;[Resources,&#160;36]<br/>Device&#160;implementations&#160;MUST&#160;include&#160;the&#160;Monkey&#160;framework,&#160;and&#160;make&#160;it<br/>available&#160;f<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources36">or&#160;applications&#160;to</a>&#160;use.<br/>
Most&#160;Linux-based&#160;systems&#160;and&#160;Apple&#160;Macintosh&#160;systems&#160;recognize&#160;Android&#160;devices<br/>using&#160;the&#160;standard&#160;Android&#160;SDK&#160;tools,&#160;without&#160;additional&#160;support;&#160;however&#160;Microsoft<br/>Windows&#160;systems&#160;typical&#160;y&#160;require&#160;a&#160;driver&#160;for&#160;new&#160;Android&#160;devices.&#160;(For&#160;instance,<br/>new&#160;vendor&#160;IDs&#160;and&#160;sometimes&#160;new&#160;device&#160;IDs&#160;require&#160;custom&#160;USB&#160;drivers&#160;for<br/>Windows&#160;systems.)&#160;If&#160;a&#160;device&#160;implementation&#160;is&#160;unrecognized&#160;by&#160;the&#160;adb&#160;tool&#160;as<br/>provided&#160;in&#160;the&#160;standard&#160;Android&#160;SDK,&#160;device&#160;implementers&#160;MUST&#160;provide&#160;Windows<br/>drivers&#160;al&#160;owing&#160;developers&#160;to&#160;connect&#160;to&#160;the&#160;device&#160;using&#160;the&#160;adb&#160;protocol.&#160;These<br/>drivers&#160;MUST&#160;be&#160;provided&#160;for&#160;Windows&#160;XP,&#160;Windows&#160;Vista,&#160;and&#160;Windows&#160;7,&#160;in&#160;both<br/>32-bit&#160;and&#160;64-bit&#160;versions.<br/>
<b>7.&#160;Hardware&#160;Compatibility</b><br/>
If&#160;a&#160;device&#160;includes&#160;a&#160;particular&#160;hardware&#160;component&#160;that&#160;has&#160;a&#160;corresponding&#160;API&#160;for<br/>third-party&#160;developers,&#160;the&#160;device&#160;implementation&#160;MUST&#160;implement&#160;that&#160;API&#160;as<br/>described&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation.&#160;If&#160;an&#160;API&#160;in&#160;the&#160;SDK&#160;interacts&#160;with&#160;a<br/>hardware&#160;component&#160;that&#160;is&#160;stated&#160;to&#160;be&#160;optional&#160;and&#160;the&#160;device&#160;implementation&#160;does<br/>not&#160;possess&#160;that&#160;component:<br/>
complete&#160;class&#160;definitions&#160;(as&#160;documented&#160;by&#160;the&#160;SDK)&#160;for&#160;the&#160;component's<br/>APIs&#160;MUST&#160;stil&#160;&#160;be&#160;present<br/>the&#160;API's&#160;behaviors&#160;MUST&#160;be&#160;implemented&#160;as&#160;no-ops&#160;in&#160;some&#160;reasonable<br/>fashion<br/>API&#160;methods&#160;MUST&#160;return&#160;nul&#160;&#160;values&#160;where&#160;permitted&#160;by&#160;the&#160;SDK<br/>documentation<br/>API&#160;methods&#160;MUST&#160;return&#160;no-op&#160;implementations&#160;of&#160;classes&#160;where&#160;nul&#160;&#160;values<br/>are&#160;not&#160;permitted&#160;by&#160;the&#160;SDK&#160;documentation<br/>API&#160;methods&#160;MUST&#160;NOT&#160;throw&#160;exceptions&#160;not&#160;documented&#160;by&#160;the&#160;SDK<br/>documentation<br/>
A&#160;typical&#160;example&#160;of&#160;a&#160;scenario&#160;where&#160;these&#160;requirements&#160;apply&#160;is&#160;the&#160;telephony&#160;API:<br/>even&#160;on&#160;non-phone&#160;devices,&#160;these&#160;APIs&#160;must&#160;be&#160;implemented&#160;as&#160;reasonable&#160;no-ops.<br/>
<hr/>
<a name=19></a>Device&#160;implementations&#160;MUST&#160;accurately&#160;report&#160;accurate&#160;hardware&#160;configuration<br/>information&#160;via&#160;the&#160;getSystemAvailableFeatures()&#160;and&#160;hasSystemFeature(String)<br/>methods&#160;on&#160;the&#160;android.content.pm.PackageManager&#160;class.&#160;[Re<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources37">sources,&#160;37]</a><br/>
<b>7.1.&#160;Display&#160;and&#160;Graphics</b><br/>
Android&#160;4.1&#160;includes&#160;facilities&#160;that&#160;automatical&#160;y&#160;adjust&#160;application&#160;assets&#160;and&#160;UI<br/>layouts&#160;appropriately&#160;for&#160;the&#160;device,&#160;to&#160;ensure&#160;that&#160;third-party&#160;applications&#160;run&#160;wel&#160;&#160;on&#160;a<br/>variety&#160;of&#160;hardware&#160;configurations&#160;[Resources,&#160;38].&#160;Devices&#160;MUST&#160;properly&#160;implement<br/>these&#160;APIs&#160;and&#160;behaviors,&#160;as&#160;detailed&#160;in&#160;this&#160;section.<br/>
The&#160;units&#160;referenced&#160;by&#160;the&#160;requirements&#160;in&#160;this&#160;section&#160;are&#160;defined&#160;as&#160;fol&#160;ows:<br/>
&#34;Physical&#160;diagonal&#160;size&#34;&#160;is&#160;the&#160;distance&#160;in&#160;inches&#160;between&#160;two&#160;opposing&#160;corners<br/>of&#160;the&#160;il&#160;uminated&#160;portion&#160;of&#160;the&#160;display.<br/>&#34;dpi&#34;&#160;(meaning&#160;&#34;dots&#160;per&#160;inch&#34;)&#160;is&#160;the&#160;number&#160;of&#160;pixels&#160;encompassed&#160;by&#160;a&#160;linear<br/>horizontal&#160;or&#160;vertical&#160;span&#160;of&#160;1&#34;.&#160;Where&#160;dpi&#160;values&#160;are&#160;listed,&#160;both&#160;horizontal&#160;and<br/>vertical&#160;dpi&#160;must&#160;fal&#160;&#160;within&#160;the&#160;range.<br/>&#34;Aspect&#160;ratio&#34;&#160;is&#160;the&#160;ratio&#160;of&#160;the&#160;longer&#160;dimension&#160;of&#160;the&#160;screen&#160;to&#160;the&#160;shorter<br/>dimension.&#160;For&#160;example,&#160;a&#160;display&#160;of&#160;480x854&#160;pixels&#160;would&#160;be&#160;854&#160;/&#160;480&#160;=<br/>1.779,&#160;or&#160;roughly&#160;&#34;16:9&#34;.<br/>A&#160;&#34;density-independent&#160;pixel&#34;&#160;or&#160;(&#34;dp&#34;)&#160;is&#160;the&#160;virtual&#160;pixel&#160;unit&#160;normalized&#160;to&#160;a&#160;160<br/>dpi&#160;screen,&#160;calculated&#160;as:&#160;pixels&#160;=&#160;dps&#160;*&#160;(density&#160;/&#160;160).<br/>
<b>7.1.1.&#160;Screen&#160;Configuration</b><br/>
<b>Screen&#160;Size</b><br/>
The&#160;Android&#160;UI&#160;framework&#160;supports&#160;a&#160;variety&#160;of&#160;different&#160;screen&#160;sizes,&#160;and&#160;al&#160;ows<br/>applications&#160;to&#160;query&#160;the&#160;device&#160;screen&#160;size&#160;(aka&#160;&#34;screen&#160;layout&#34;)&#160;via<br/>
android.content.res.Configuration.screenLayout&#160;with&#160;the<br/>
SCREENLAYOUT_SIZE_MASK.&#160;Device&#160;implementations&#160;MUST&#160;report&#160;the&#160;correct&#160;screen<br/>
size&#160;as&#160;defined&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation&#160;[Resources,&#160;38]&#160;and&#160;determined&#160;by<br/>the&#160;upstream&#160;Android&#160;platform.&#160;Specifical&#160;y,&#160;device&#160;implementations&#160;must&#160;report&#160;the<br/>correct&#160;screen&#160;size&#160;according&#160;to&#160;the&#160;fol&#160;owing&#160;logical&#160;d<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources38">ensity-independe</a>nt&#160;pixel&#160;(dp)<br/>screen&#160;dimensions.<br/>
Devices&#160;MUST&#160;have&#160;screen&#160;sizes&#160;of&#160;at&#160;least&#160;426&#160;dp&#160;x&#160;320&#160;dp&#160;('smal&#160;')<br/>Devices&#160;that&#160;report&#160;screen&#160;size&#160;'normal'&#160;MUST&#160;have&#160;screen&#160;sizes&#160;of&#160;at&#160;least&#160;480<br/>dp&#160;x&#160;320&#160;dp<br/>Devices&#160;that&#160;report&#160;screen&#160;size&#160;'large'&#160;MUST&#160;have&#160;screen&#160;sizes&#160;of&#160;at&#160;least&#160;640<br/>dp&#160;x&#160;480&#160;dp<br/>Devices&#160;that&#160;report&#160;screen&#160;size&#160;'xlarge'&#160;MUST&#160;have&#160;screen&#160;sizes&#160;of&#160;at&#160;least&#160;960<br/>dp&#160;x&#160;720&#160;dp<br/>
In&#160;addition,&#160;devices&#160;MUST&#160;have&#160;screen&#160;sizes&#160;of&#160;at&#160;least&#160;2.5&#160;inches&#160;in&#160;physical&#160;diagonal<br/>size.<br/>
Devices&#160;MUST&#160;NOT&#160;change&#160;their&#160;reported&#160;screen&#160;size&#160;at&#160;any&#160;time.<br/>
Applications&#160;optional&#160;y&#160;indicate&#160;which&#160;screen&#160;sizes&#160;they&#160;support&#160;via&#160;the&#160;&lt;supports-<br/>
screens&gt;&#160;attribute&#160;in&#160;the&#160;AndroidManifest.xml&#160;file.&#160;Device&#160;implementations&#160;MUST<br/>
correctly&#160;honor&#160;applications'&#160;stated&#160;support&#160;for&#160;smal&#160;,&#160;normal,&#160;large,&#160;and&#160;xlarge<br/>screens,&#160;as&#160;described&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation.<br/>
<b>Screen&#160;Aspect&#160;Ratio</b><br/>
The&#160;aspect&#160;ratio&#160;MUST&#160;be&#160;between&#160;1.3333&#160;(4:3)&#160;and&#160;1.85&#160;(16:9).<br/>
<b>Screen&#160;Density</b><br/>
The&#160;Android&#160;UI&#160;framework&#160;defines&#160;a&#160;set&#160;of&#160;standard&#160;logical&#160;densities&#160;to&#160;help<br/>application&#160;developers&#160;target&#160;application&#160;resources.&#160;Device&#160;implementations&#160;MUST<br/>report&#160;one&#160;of&#160;the&#160;fol&#160;owing&#160;logical&#160;Android&#160;framework&#160;densities&#160;through&#160;the<br/>
android.util.DisplayMetrics&#160;APIs,&#160;and&#160;MUST&#160;execute&#160;applications&#160;at&#160;this&#160;standard<br/>
density.<br/>
120&#160;dpi,&#160;known&#160;as&#160;'ldpi'<br/>160&#160;dpi,&#160;known&#160;as&#160;'mdpi'<br/>213&#160;dpi,&#160;known&#160;as&#160;'tvdpi'<br/>240&#160;dpi,&#160;known&#160;as&#160;'hdpi'<br/>320&#160;dpi,&#160;known&#160;as&#160;'xhdpi'<br/>480&#160;dpi,&#160;known&#160;as&#160;'xxhdpi'<br/>
Device&#160;implementations&#160;SHOULD&#160;define&#160;the&#160;standard&#160;Android&#160;framework&#160;density&#160;that<br/>is&#160;numerical&#160;y&#160;closest&#160;to&#160;the&#160;physical&#160;density&#160;of&#160;the&#160;screen,&#160;unless&#160;that&#160;logical&#160;density<br/>
<hr/>
<a name=20></a>is&#160;numerical&#160;y&#160;closest&#160;to&#160;the&#160;physical&#160;density&#160;of&#160;the&#160;screen,&#160;unless&#160;that&#160;logical&#160;density<br/>pushes&#160;the&#160;reported&#160;screen&#160;size&#160;below&#160;the&#160;minimum&#160;supported.&#160;If&#160;the&#160;standard&#160;Android<br/>framework&#160;density&#160;that&#160;is&#160;numerical&#160;y&#160;closest&#160;to&#160;the&#160;physical&#160;density&#160;results&#160;in&#160;a&#160;screen<br/>size&#160;that&#160;is&#160;smal&#160;er&#160;than&#160;the&#160;smal&#160;est&#160;supported&#160;compatible&#160;screen&#160;size&#160;(320&#160;dp&#160;width),<br/>device&#160;implementations&#160;SHOULD&#160;report&#160;the&#160;next&#160;lowest&#160;standard&#160;Android&#160;framework<br/>density.<br/>
<b>7.1.2.&#160;Display&#160;Metrics</b><br/>
Device&#160;implementations&#160;MUST&#160;report&#160;correct&#160;values&#160;for&#160;al&#160;&#160;display&#160;metrics&#160;defined&#160;in<br/>
android.util.DisplayMetrics&#160;[Resources,&#160;39].<br/>
<b>7.1.3.&#160;Screen&#160;Orientation</b><br/>
Devices&#160;MUST&#160;support&#160;dynamic&#160;orientation&#160;by&#160;applications&#160;to&#160;either&#160;portrait&#160;or<br/>landscape&#160;screen&#160;orientation.&#160;That&#160;is,&#160;the&#160;device&#160;must&#160;respect&#160;the&#160;application's<br/>request&#160;for&#160;a&#160;specific&#160;screen&#160;orientation.&#160;Device&#160;implementations&#160;MAY&#160;select&#160;either<br/>portrait&#160;or&#160;landscape&#160;orientation&#160;as&#160;the&#160;default.<br/>
Devices&#160;MUST&#160;report&#160;the&#160;correct&#160;value&#160;for&#160;the&#160;device's&#160;current&#160;orientation,&#160;whenever<br/>queried&#160;via&#160;the&#160;android.content.res.Configuration.orientation,<br/>android.view.Display.getOrientation(),&#160;or&#160;other&#160;APIs.<br/>
Devices&#160;MUST&#160;NOT&#160;change&#160;the&#160;reported&#160;screen&#160;size&#160;or&#160;density&#160;when&#160;changing<br/>orientation.<br/>
Devices&#160;MUST&#160;report&#160;which&#160;screen&#160;orientations&#160;they&#160;support&#160;(<br/>
android.hardware.screen.portrait&#160;and/or&#160;android.hardware.screen.landscape)<br/>
and&#160;MUST&#160;report&#160;at&#160;least&#160;one&#160;supported&#160;orientation.&#160;For&#160;example,&#160;a&#160;device&#160;with&#160;a<br/>fixed-orientation&#160;landscape&#160;screen,&#160;such&#160;as&#160;a&#160;television&#160;or&#160;laptop,&#160;MUST&#160;only&#160;report<br/>
android.hardware.screen.landscape.<br/>
<b>7.1.4.&#160;2D&#160;and&#160;3D&#160;Graphics&#160;Acceleration</b><br/>
Device&#160;implementations&#160;MUST&#160;support&#160;both&#160;OpenGL&#160;ES&#160;1.0&#160;and&#160;2.0,&#160;as&#160;embodied<br/>and&#160;detailed&#160;in&#160;the&#160;Android&#160;SDK&#160;documentations.&#160;Device&#160;implementations&#160;MUST&#160;also<br/>support&#160;Android&#160;Renderscript,&#160;as&#160;detailed&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation<br/>[Resources,&#160;8].<br/>
<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources08">Device&#160;impleme</a>ntations&#160;MUST&#160;also&#160;correctly&#160;identify&#160;themselves&#160;as&#160;supporting<br/>OpenGL&#160;ES&#160;1.0&#160;and&#160;2.0.&#160;That&#160;is:<br/>
The&#160;managed&#160;APIs&#160;(such&#160;as&#160;via&#160;the&#160;GLES10.getString()&#160;method)&#160;MUST&#160;report<br/>support&#160;for&#160;OpenGL&#160;ES&#160;1.0&#160;and&#160;2.0<br/>The&#160;native&#160;C/C++&#160;OpenGL&#160;APIs&#160;(that&#160;is,&#160;those&#160;available&#160;to&#160;apps&#160;via<br/>libGLES_v1CM.so,&#160;libGLES_v2.so,&#160;or&#160;libEGL.so)&#160;MUST&#160;report&#160;support&#160;for<br/>OpenGL&#160;ES&#160;1.0&#160;and&#160;2.0.<br/>
Device&#160;implementations&#160;MAY&#160;implement&#160;any&#160;desired&#160;OpenGL&#160;ES&#160;extensions.<br/>However,&#160;device&#160;implementations&#160;MUST&#160;report&#160;via&#160;the&#160;OpenGL&#160;ES&#160;managed&#160;and<br/>native&#160;APIs&#160;al&#160;&#160;extension&#160;strings&#160;that&#160;they&#160;do&#160;support,&#160;and&#160;conversely&#160;MUST&#160;NOT&#160;report<br/>extension&#160;strings&#160;that&#160;they&#160;do&#160;not&#160;support.<br/>
Note&#160;that&#160;Android&#160;4.1&#160;includes&#160;support&#160;for&#160;applications&#160;to&#160;optional&#160;y&#160;specify&#160;that&#160;they<br/>require&#160;specific&#160;OpenGL&#160;texture&#160;compression&#160;formats.&#160;These&#160;formats&#160;are&#160;typical&#160;y<br/>vendor-specific.&#160;Device&#160;implementations&#160;are&#160;not&#160;required&#160;by&#160;Android&#160;4.1&#160;to&#160;implement<br/>any&#160;specific&#160;texture&#160;compression&#160;format.&#160;However,&#160;they&#160;SHOULD&#160;accurately&#160;report&#160;any<br/>texture&#160;compression&#160;formats&#160;that&#160;they&#160;do&#160;support,&#160;via&#160;the&#160;getString()&#160;method&#160;in&#160;the<br/>OpenGL&#160;API.<br/>
Android&#160;4.1&#160;includes&#160;a&#160;mechanism&#160;for&#160;applications&#160;to&#160;declare&#160;that&#160;they&#160;wanted&#160;to<br/>enable&#160;hardware&#160;acceleration&#160;for&#160;2D&#160;graphics&#160;at&#160;the&#160;Application,&#160;Activity,&#160;Window&#160;or<br/>View&#160;level&#160;through&#160;the&#160;use&#160;of&#160;a&#160;manifest&#160;tag&#160;android:hardwareAccelerated&#160;or&#160;direct<br/>API&#160;cal&#160;s&#160;[Resources,&#160;9].<br/>
In&#160;Android&#160;4.1,&#160;device&#160;implementations&#160;MUST&#160;enable&#160;hardware&#160;acceleration&#160;by<br/>default,&#160;and&#160;MUST&#160;disable&#160;hardware&#160;acceleration&#160;if&#160;the&#160;developer&#160;so&#160;requests&#160;by<br/>setting&#160;android:hardwareAccelerated=&#34;false&#34;&#160;or&#160;disabling&#160;hardware&#160;acceleration<br/>directly&#160;through&#160;the&#160;Android&#160;View&#160;APIs.<br/>
In&#160;addition,&#160;device&#160;implementations&#160;MUST&#160;exhibit&#160;behavior&#160;consistent&#160;with&#160;the&#160;Android<br/>SDK&#160;documentation&#160;on&#160;hardware&#160;acceleration&#160;[Resources,&#160;9].<br/>
Android&#160;4.1&#160;includes&#160;a&#160;TextureView&#160;object&#160;that&#160;lets&#160;developers&#160;directly&#160;integrate<br/>hardware-accelerated&#160;OpenGL&#160;ES&#160;textures&#160;as&#160;rendering&#160;targets&#160;in&#160;a&#160;UI&#160;hierarchy.<br/>Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;Textur<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources09">eView&#160;API,&#160;and</a>&#160;MUST&#160;exhibit<br/>
<hr/>
<a name=21></a>consistent&#160;behavior&#160;with&#160;the&#160;upstream&#160;Android&#160;implementation.<br/>
<b>7.1.5.&#160;Legacy&#160;Application&#160;Compatibility&#160;Mode</b><br/>
Android&#160;4.1&#160;specifies&#160;a&#160;&#34;compatibility&#160;mode&#34;&#160;in&#160;which&#160;the&#160;framework&#160;operates&#160;in&#160;an<br/>'normal'&#160;screen&#160;size&#160;equivalent&#160;(320dp&#160;width)&#160;mode&#160;for&#160;the&#160;benefit&#160;of&#160;legacy<br/>applications&#160;not&#160;developed&#160;for&#160;old&#160;versions&#160;of&#160;Android&#160;that&#160;pre-date&#160;screen-size<br/>independence.&#160;Device&#160;implementations&#160;MUST&#160;include&#160;support&#160;for&#160;legacy&#160;application<br/>compatibility&#160;mode&#160;as&#160;implemented&#160;by&#160;the&#160;upstream&#160;Android&#160;open&#160;source&#160;code.&#160;That<br/>is,&#160;device&#160;implementations&#160;MUST&#160;NOT&#160;alter&#160;the&#160;triggers&#160;or&#160;thresholds&#160;at&#160;which<br/>compatibility&#160;mode&#160;is&#160;activated,&#160;and&#160;MUST&#160;NOT&#160;alter&#160;the&#160;behavior&#160;of&#160;the&#160;compatibility<br/>mode&#160;itself.<br/>
<b>7.1.6.&#160;Screen&#160;Types</b><br/>
Device&#160;implementation&#160;screens&#160;are&#160;classified&#160;as&#160;one&#160;of&#160;two&#160;types:<br/>
Fixed-pixel&#160;display&#160;implementations:&#160;the&#160;screen&#160;is&#160;a&#160;single&#160;panel&#160;that&#160;supports<br/>only&#160;a&#160;single&#160;pixel&#160;width&#160;and&#160;height.&#160;Typical&#160;y&#160;the&#160;screen&#160;is&#160;physical&#160;y&#160;integrated<br/>with&#160;the&#160;device.&#160;Examples&#160;include&#160;mobile&#160;phones,&#160;tablets,&#160;and&#160;so&#160;on.<br/>Variable-pixel&#160;display&#160;implementations:&#160;the&#160;device&#160;implementation&#160;either&#160;has&#160;no<br/>embedded&#160;screen&#160;and&#160;includes&#160;a&#160;video&#160;output&#160;port&#160;such&#160;as&#160;VGA,&#160;HDMI&#160;or&#160;a<br/>wireless&#160;port&#160;for&#160;display,&#160;or&#160;has&#160;an&#160;embedded&#160;screen&#160;that&#160;can&#160;change&#160;pixel<br/>dimensions.&#160;Examples&#160;include&#160;televisions,&#160;set-top&#160;boxes,&#160;and&#160;so&#160;on.<br/>
<b>Fixed-Pixel&#160;Device&#160;Implementations</b><br/>
Fixed-pixel&#160;device&#160;implementations&#160;MAY&#160;use&#160;screens&#160;of&#160;any&#160;pixel&#160;dimensions,<br/>provided&#160;that&#160;they&#160;meet&#160;the&#160;requirements&#160;defined&#160;this&#160;Compatibility&#160;Definition.<br/>
Fixed-pixel&#160;implementations&#160;MAY&#160;include&#160;a&#160;video&#160;output&#160;port&#160;for&#160;use&#160;with&#160;an&#160;external<br/>display.&#160;However,&#160;if&#160;that&#160;display&#160;is&#160;ever&#160;used&#160;for&#160;running&#160;apps,&#160;the&#160;device&#160;MUST&#160;meet<br/>the&#160;fol&#160;owing&#160;requirements:<br/>
The&#160;device&#160;MUST&#160;report&#160;the&#160;same&#160;screen&#160;configuration&#160;and&#160;display&#160;metrics,&#160;as<br/>detailed&#160;in&#160;Sections&#160;7.1.1&#160;and&#160;7.1.2,&#160;as&#160;the&#160;fixed-pixel&#160;display.<br/>The&#160;device&#160;MUST&#160;report&#160;the&#160;same&#160;logical&#160;density&#160;as&#160;the&#160;fixed-pixel&#160;display.<br/>The&#160;device&#160;MUST&#160;report&#160;screen&#160;dimensions&#160;that&#160;are&#160;the&#160;same&#160;as,&#160;or&#160;very&#160;close<br/>to,&#160;the&#160;fixed-pixel&#160;display.<br/>
For&#160;example,&#160;a&#160;tablet&#160;that&#160;is&#160;7&#34;&#160;diagonal&#160;size&#160;with&#160;a&#160;1024x600&#160;pixel&#160;resolution&#160;is<br/>considered&#160;a&#160;fixed-pixel&#160;large&#160;mdpi&#160;display&#160;implementation.&#160;If&#160;it&#160;contains&#160;a&#160;video<br/>output&#160;port&#160;that&#160;displays&#160;at&#160;720p&#160;or&#160;1080p,&#160;the&#160;device&#160;implementation&#160;MUST&#160;scale&#160;the<br/>output&#160;so&#160;that&#160;applications&#160;are&#160;only&#160;executed&#160;in&#160;a&#160;large&#160;mdpi&#160;window,&#160;regardless&#160;of<br/>whether&#160;the&#160;fixed-pixel&#160;display&#160;or&#160;video&#160;output&#160;port&#160;is&#160;in&#160;use.<br/>
<b>Variable-Pixel&#160;Device&#160;Implementations</b><br/>
Variable-pixel&#160;device&#160;implementations&#160;MUST&#160;support&#160;one&#160;or&#160;both&#160;of&#160;1280x720,&#160;or<br/>1920x1080&#160;(that&#160;is,&#160;720p&#160;or&#160;1080p).&#160;Device&#160;implementations&#160;with&#160;variable-pixel<br/>displays&#160;MUST&#160;NOT&#160;support&#160;any&#160;other&#160;screen&#160;configuration&#160;or&#160;mode.&#160;Device<br/>implementations&#160;with&#160;variable-pixel&#160;screens&#160;MAY&#160;change&#160;screen&#160;configuration&#160;or<br/>mode&#160;at&#160;runtime&#160;or&#160;boot-time.&#160;For&#160;example,&#160;a&#160;user&#160;of&#160;a&#160;set-top&#160;box&#160;may&#160;replace&#160;a<br/>720p&#160;display&#160;with&#160;a&#160;1080p&#160;display,&#160;and&#160;the&#160;device&#160;implementation&#160;may&#160;adjust<br/>accordingly.<br/>
Additional&#160;y,&#160;variable-pixel&#160;device&#160;implementations&#160;MUST&#160;report&#160;the&#160;fol&#160;owing<br/>configuration&#160;buckets&#160;for&#160;these&#160;pixel&#160;dimensions:<br/>
1280x720&#160;(also&#160;known&#160;as&#160;720p):&#160;'large'&#160;screen&#160;size,&#160;'tvdpi'&#160;(213&#160;dpi)&#160;density<br/>1920x1080&#160;(also&#160;known&#160;as&#160;1080p):&#160;'large'&#160;screen&#160;size,&#160;'xhdpi'&#160;(320&#160;dpi)&#160;density<br/>
For&#160;clarity,&#160;device&#160;implementations&#160;with&#160;variable&#160;pixel&#160;dimensions&#160;are&#160;restricted&#160;to<br/>720p&#160;or&#160;1080p&#160;in&#160;Android&#160;4.1,&#160;and&#160;MUST&#160;be&#160;configured&#160;to&#160;report&#160;screen&#160;size&#160;and<br/>density&#160;buckets&#160;as&#160;noted&#160;above.<br/>
<b>7.1.7.&#160;Screen&#160;Technology</b><br/>
The&#160;Android&#160;platform&#160;includes&#160;APIs&#160;that&#160;al&#160;ow&#160;applications&#160;to&#160;render&#160;rich&#160;graphics&#160;to<br/>the&#160;display.&#160;Devices&#160;MUST&#160;support&#160;al&#160;&#160;of&#160;these&#160;APIs&#160;as&#160;defined&#160;by&#160;the&#160;Android&#160;SDK<br/>unless&#160;specifical&#160;y&#160;al&#160;owed&#160;in&#160;this&#160;document.&#160;Specifical&#160;y:<br/>
Devices&#160;MUST&#160;support&#160;displays&#160;capable&#160;of&#160;rendering&#160;16-bit&#160;color&#160;graphics&#160;and<br/>SHOULD&#160;support&#160;displays&#160;capable&#160;of&#160;24-bit&#160;color&#160;graphics.<br/>Devices&#160;MUST&#160;support&#160;displays&#160;capable&#160;of&#160;rendering&#160;animations.<br/>The&#160;display&#160;technology&#160;used&#160;MUST&#160;have&#160;a&#160;pixel&#160;aspect&#160;ratio&#160;(PAR)&#160;between&#160;0.9<br/>
<hr/>
<a name=22></a>and&#160;1.1.&#160;That&#160;is,&#160;the&#160;pixel&#160;aspect&#160;ratio&#160;MUST&#160;be&#160;near&#160;square&#160;(1.0)&#160;with&#160;a&#160;10%<br/>tolerance.<br/>
<b>7.2.&#160;Input&#160;Devices</b><br/>
<b>7.2.1.&#160;Keyboard</b><br/>
Device&#160;implementations:<br/>
MUST&#160;include&#160;support&#160;for&#160;the&#160;Input&#160;Management&#160;Framework&#160;(which&#160;al&#160;ows&#160;third<br/>party&#160;developers&#160;to&#160;create&#160;Input&#160;Management&#160;Engines&#160;-&#160;i.e.&#160;soft&#160;keyboard)&#160;as<br/>detailed&#160;at&#160;http://developer.android.com<br/>MUST&#160;provide&#160;at&#160;least&#160;one&#160;soft&#160;keyboard&#160;implementation&#160;(regardless&#160;of&#160;whether<br/>a&#160;hard&#160;keyboard&#160;is&#160;present)<br/>MAY&#160;include&#160;additional&#160;soft&#160;keyboard&#160;implementations<br/>MAY&#160;include&#160;a&#160;hardware&#160;keyboard<br/>MUST&#160;NOT&#160;include&#160;a&#160;hardware&#160;keyboard&#160;that&#160;does&#160;not&#160;match&#160;one&#160;of&#160;the&#160;formats<br/>specified&#160;in&#160;android.content.res.Configuration.keyboard&#160;[Resources,&#160;40]<br/>(that&#160;is,&#160;QWERTY,&#160;or&#160;12-key)<br/>
<b>7.2.2.&#160;Non-touch&#160;Navigation</b><br/>
Device&#160;implementations:<br/>
MAY&#160;omit&#160;a&#160;non-touch&#160;navigation&#160;option&#160;(that&#160;is,&#160;may&#160;omit&#160;a&#160;trackbal&#160;,&#160;d-pad,&#160;or<br/>wheel)<br/>MUST&#160;report&#160;the&#160;correct&#160;value&#160;for<br/>
android.content.res.Configuration.navigation&#160;[Resources,&#160;40]<br/>
MUST&#160;provide&#160;a&#160;reasonable&#160;alternative&#160;user&#160;interface&#160;m<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources40">echanism&#160;for&#160;the<br/></a>selection&#160;and&#160;editing&#160;of&#160;text,&#160;compatible&#160;with&#160;Input&#160;Management&#160;Engines.&#160;The<br/>upstream&#160;Android&#160;open&#160;source&#160;software&#160;includes&#160;a&#160;selection&#160;mechanism<br/>suitable&#160;for&#160;use&#160;with&#160;devices&#160;that&#160;lack&#160;non-touch&#160;navigation&#160;inputs.<br/>
<b>7.2.3.&#160;Navigation&#160;keys</b><br/>
The&#160;Home,&#160;Menu&#160;and&#160;Back&#160;functions&#160;are&#160;essential&#160;to&#160;the&#160;Android&#160;navigation<br/>paradigm.&#160;Device&#160;implementations&#160;MUST&#160;make&#160;these&#160;functions&#160;available&#160;to&#160;the&#160;user<br/>at&#160;al&#160;&#160;times&#160;when&#160;running&#160;applications.&#160;These&#160;functions&#160;MAY&#160;be&#160;implemented&#160;via<br/>dedicated&#160;physical&#160;buttons&#160;(such&#160;as&#160;mechanical&#160;or&#160;capacitive&#160;touch&#160;buttons),&#160;or&#160;MAY<br/>be&#160;implemented&#160;using&#160;dedicated&#160;software&#160;keys,&#160;gestures,&#160;touch&#160;panel,&#160;etc.&#160;Android<br/>4.1&#160;supports&#160;both&#160;implementations.<br/>
Android&#160;4.1&#160;introduces&#160;support&#160;for&#160;assist&#160;action&#160;[Resources,&#160;63].&#160;Device<br/>implementations&#160;MUST&#160;make&#160;the&#160;assist&#160;action&#160;available&#160;to&#160;the&#160;user&#160;at&#160;al&#160;&#160;times&#160;when<br/>running&#160;applications.&#160;This&#160;function&#160;MAY&#160;be&#160;impleme<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources63">nted&#160;via&#160;hardwa</a>re&#160;or&#160;software<br/>keys.<br/>
Device&#160;implementations&#160;MAY&#160;use&#160;a&#160;distinct&#160;portion&#160;of&#160;the&#160;screen&#160;to&#160;display&#160;the<br/>navigation&#160;keys,&#160;but&#160;if&#160;so,&#160;MUST&#160;meet&#160;these&#160;requirements:<br/>
Device&#160;implementation&#160;navigation&#160;keys&#160;MUST&#160;use&#160;a&#160;distinct&#160;portion&#160;of&#160;the<br/>screen,&#160;not&#160;available&#160;to&#160;applications,&#160;and&#160;MUST&#160;NOT&#160;obscure&#160;or&#160;otherwise<br/>interfere&#160;with&#160;the&#160;portion&#160;of&#160;the&#160;screen&#160;available&#160;to&#160;applications.<br/>Device&#160;implementations&#160;MUST&#160;make&#160;available&#160;a&#160;portion&#160;of&#160;the&#160;display&#160;to<br/>applications&#160;that&#160;meets&#160;the&#160;requirements&#160;defined&#160;in&#160;Section&#160;7.1.1.<br/>Device&#160;implementations&#160;MUST&#160;display&#160;the&#160;navigation&#160;keys&#160;when&#160;applications&#160;do<br/>not&#160;specify&#160;a&#160;system&#160;UI&#160;mode,&#160;or&#160;specify&#160;SYSTEM_UI_FLAG_VISIBLE.<br/>Device&#160;implementations&#160;MUST&#160;present&#160;the&#160;navigation&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/section-7.1.1">keys&#160;in&#160;an&#160;unob</a>trusive<br/>&#34;low&#160;profile&#34;&#160;(eg.&#160;dimmed)&#160;mode&#160;when&#160;applications&#160;specify<br/>
SYSTEM_UI_FLAG_LOW_PROFILE.<br/>
Device&#160;implementations&#160;MUST&#160;hide&#160;the&#160;navigation&#160;keys&#160;when&#160;applications<br/>specify&#160;SYSTEM_UI_FLAG_HIDE_NAVIGATION.<br/>Device&#160;implementation&#160;MUST&#160;present&#160;a&#160;Menu&#160;key&#160;to&#160;applications&#160;when<br/>targetSdkVersion&#160;&lt;=&#160;10&#160;and&#160;SHOULD&#160;NOT&#160;present&#160;a&#160;Menu&#160;key&#160;when&#160;the<br/>targetSdkVersion&#160;&gt;&#160;10.<br/>Device&#160;implementations&#160;MUST&#160;make&#160;available&#160;a&#160;portion&#160;of&#160;the&#160;display&#160;to<br/>applications&#160;that&#160;meets&#160;the&#160;requirements&#160;defined&#160;in&#160;Section&#160;7.1.1.<br/>
<b>7.2.4.&#160;Touchscreen&#160;input</b><br/>
Device&#160;implementations&#160;SHOULD&#160;have&#160;a&#160;pointer&#160;input&#160;syste<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/section-7.1.1">m&#160;of&#160;some&#160;kind</a>&#160;(either<br/>mouse-like,&#160;or&#160;touch).&#160;However,&#160;if&#160;a&#160;device&#160;implementation&#160;does&#160;not&#160;support&#160;a&#160;pointer<br/>input&#160;system,&#160;it&#160;MUST&#160;NOT&#160;report&#160;the&#160;android.hardware.touchscreen&#160;or<br/>
android.hardware.faketouch&#160;feature&#160;constant.&#160;Device&#160;implementations&#160;that&#160;do<br/>
<hr/>
<a name=23></a>include&#160;a&#160;pointer&#160;input&#160;system:<br/>
SHOULD&#160;support&#160;ful&#160;y&#160;independently&#160;tracked&#160;pointers,&#160;if&#160;the&#160;device&#160;input&#160;system<br/>supports&#160;multiple&#160;pointers<br/>MUST&#160;report&#160;the&#160;value&#160;of&#160;android.content.res.Configuration.touchscreen<br/>[<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources40">Resources,&#160;40]&#160;c</a>orresponding&#160;to&#160;the&#160;type&#160;of&#160;the&#160;specific&#160;touchscreen&#160;on&#160;the<br/>device<br/>
Android&#160;4.0&#160;includes&#160;support&#160;for&#160;a&#160;variety&#160;of&#160;touch&#160;screens,&#160;touch&#160;pads,&#160;and&#160;fake&#160;touch<br/>input&#160;devices.&#160;Touch&#160;screen&#160;based&#160;device&#160;implementations&#160;are&#160;associated&#160;with&#160;a<br/>display&#160;[Resources,&#160;71]&#160;such&#160;that&#160;the&#160;user&#160;has&#160;the&#160;impression&#160;of&#160;directly&#160;manipulating<br/>items&#160;on&#160;screen.&#160;Since&#160;the&#160;user&#160;is&#160;directly&#160;touching&#160;the&#160;screen,&#160;the&#160;system&#160;does&#160;not<br/>require&#160;any&#160;additional&#160;affordances&#160;to&#160;indicate&#160;the&#160;objects&#160;being&#160;manipulated.&#160;In<br/>contrast,&#160;a&#160;fake&#160;touch&#160;interface&#160;provides&#160;a&#160;user&#160;input&#160;system&#160;that&#160;approximates&#160;a<br/>subset&#160;of&#160;touchscreen&#160;capabilities.&#160;For&#160;example,&#160;a&#160;mouse&#160;or&#160;remote&#160;control&#160;that&#160;drives<br/>an&#160;on-screen&#160;cursor&#160;approximates&#160;touch,&#160;but&#160;requires&#160;the&#160;user&#160;to&#160;first&#160;point&#160;or&#160;focus<br/>then&#160;click.&#160;Numerous&#160;input&#160;devices&#160;like&#160;the&#160;mouse,&#160;trackpad,&#160;gyro-based&#160;air&#160;mouse,<br/>gyro-pointer,&#160;joystick,&#160;and&#160;multi-touch&#160;trackpad&#160;can&#160;support&#160;fake&#160;touch&#160;interactions.<br/>Android&#160;4.0&#160;includes&#160;the&#160;feature&#160;constant&#160;android.hardware.faketouch,&#160;which<br/>corresponds&#160;to&#160;a&#160;high-fidelity&#160;non-touch&#160;(that&#160;is,&#160;pointer-based)&#160;input&#160;device&#160;such&#160;as&#160;a<br/>mouse&#160;or&#160;trackpad&#160;that&#160;can&#160;adequately&#160;emulate&#160;touch-based&#160;input&#160;(including&#160;basic<br/>gesture&#160;support),&#160;and&#160;indicates&#160;that&#160;the&#160;device&#160;supports&#160;an&#160;emulated&#160;subset&#160;of<br/>touchscreen&#160;functionality.&#160;Device&#160;implementations&#160;that&#160;declare&#160;the&#160;fake&#160;touch&#160;feature<br/>MUST&#160;meet&#160;the&#160;fake&#160;touch&#160;requirements&#160;in&#160;Section&#160;7.2.5.<br/>
Device&#160;implementations&#160;MUST&#160;report&#160;the&#160;correct&#160;feature&#160;corresponding&#160;to&#160;the&#160;type&#160;of<br/>input&#160;used.&#160;Device&#160;implementations&#160;that&#160;include&#160;a&#160;touchscreen&#160;(single-touch&#160;or&#160;better)<br/>MUST&#160;report&#160;the&#160;platform&#160;feature&#160;constant&#160;android.hardware.touchscreen.&#160;Device<br/>implementations&#160;that&#160;report&#160;the&#160;platform&#160;feature&#160;constant<br/>
android.hardware.touchscreen&#160;MUST&#160;also&#160;report&#160;the&#160;platform&#160;feature&#160;constant<br/>
android.hardware.faketouch.&#160;Device&#160;implementations&#160;that&#160;do&#160;not&#160;include&#160;a<br/>
touchscreen&#160;(and&#160;rely&#160;on&#160;a&#160;pointer&#160;device&#160;only)&#160;MUST&#160;NOT&#160;report&#160;any&#160;touchscreen<br/>feature,&#160;and&#160;MUST&#160;report&#160;only&#160;android.hardware.faketouch&#160;if&#160;they&#160;meet&#160;the&#160;fake<br/>touch&#160;requirements&#160;in&#160;Section&#160;7.2.5.<br/>
<b>7.2.5.&#160;Fake&#160;touch&#160;inp<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/section 7.2.5">ut</a></b><br/>
Device&#160;implementations&#160;that&#160;declare&#160;support&#160;for&#160;android.hardware.faketouch<br/>
MUST&#160;report&#160;the&#160;absolute&#160;X&#160;and&#160;Y&#160;screen&#160;positions&#160;of&#160;the&#160;pointer&#160;location&#160;and<br/>display&#160;a&#160;visual&#160;pointer&#160;on&#160;the&#160;screen[Resources,&#160;70]<br/>MUST&#160;report&#160;touch&#160;event&#160;with&#160;the&#160;action&#160;code&#160;[Resources,&#160;70]&#160;that&#160;specifies&#160;the<br/>state&#160;change&#160;that&#160;occurs&#160;on&#160;the&#160;pointer&#160;g<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources70">oing&#160;down&#160;or&#160;up&#160;</a>on&#160;the&#160;screen<br/>[Resources,&#160;70]<br/>MUST&#160;support&#160;pointer&#160;down&#160;and&#160;up&#160;on&#160;an&#160;object&#160;on&#160;the&#160;screen,&#160;which&#160;al&#160;ows<br/>u<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources70">sers&#160;to&#160;emulate&#160;</a>tap&#160;on&#160;an&#160;object&#160;on&#160;the&#160;screen<br/>MUST&#160;support&#160;pointer&#160;down,&#160;pointer&#160;up,&#160;pointer&#160;down&#160;then&#160;pointer&#160;up&#160;in&#160;the&#160;same<br/>place&#160;on&#160;an&#160;object&#160;on&#160;the&#160;screen&#160;within&#160;a&#160;time&#160;threshold,&#160;which&#160;al&#160;ows&#160;users&#160;to<br/>emulate&#160;double&#160;tap&#160;on&#160;an&#160;object&#160;on&#160;the&#160;screen&#160;[Resources,&#160;70]<br/>MUST&#160;support&#160;pointer&#160;down&#160;on&#160;an&#160;arbitrary&#160;point&#160;on&#160;the&#160;screen,&#160;pointer&#160;move&#160;to<br/>any&#160;other&#160;arbitrary&#160;point&#160;on&#160;the&#160;screen,&#160;fol&#160;owed&#160;by&#160;a&#160;pointer&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources70">up</a>,&#160;which&#160;al&#160;ows<br/>users&#160;to&#160;emulate&#160;a&#160;touch&#160;drag<br/>MUST&#160;support&#160;pointer&#160;down&#160;then&#160;al&#160;ow&#160;users&#160;to&#160;quickly&#160;move&#160;the&#160;object&#160;to&#160;a<br/>different&#160;position&#160;on&#160;the&#160;screen&#160;and&#160;then&#160;pointer&#160;up&#160;on&#160;the&#160;screen,&#160;which&#160;al&#160;ows<br/>users&#160;to&#160;fling&#160;an&#160;object&#160;on&#160;the&#160;screen<br/>
Devices&#160;that&#160;declare&#160;support&#160;for&#160;android.hardware.faketouch.multitouch.distinct<br/>MUST&#160;meet&#160;the&#160;requirements&#160;for&#160;faketouch&#160;above,&#160;and&#160;MUST&#160;also&#160;support&#160;distinct<br/>tracking&#160;of&#160;two&#160;or&#160;more&#160;independent&#160;pointer&#160;inputs.<br/>
<b>7.2.6.&#160;Microphone</b><br/>
Device&#160;implementations&#160;MAY&#160;omit&#160;a&#160;microphone.&#160;However,&#160;if&#160;a&#160;device&#160;implementation<br/>omits&#160;a&#160;microphone,&#160;it&#160;MUST&#160;NOT&#160;report&#160;the&#160;android.hardware.microphone&#160;feature<br/>constant,&#160;and&#160;must&#160;implement&#160;the&#160;audio&#160;recording&#160;API&#160;as&#160;no-ops,&#160;per&#160;Section&#160;7.<br/>Conversely,&#160;device&#160;implementations&#160;that&#160;do&#160;possess&#160;a&#160;microphone:<br/>
MUST&#160;report&#160;the&#160;android.hardware.microphone&#160;feature&#160;constant<br/>SHOULD&#160;meet&#160;the&#160;audio&#160;quality&#160;requirements&#160;in&#160;Section&#160;5.4<br/>SHOULD&#160;meet&#160;the&#160;audio&#160;latency&#160;requirements&#160;in&#160;Section&#160;5.5<br/>
<b>7.3.&#160;Sensors</b><br/>
<hr/>
<a name=24></a>Android&#160;4.1&#160;includes&#160;APIs&#160;for&#160;accessing&#160;a&#160;variety&#160;of&#160;sensor&#160;types.&#160;Devices<br/>implementations&#160;general&#160;y&#160;MAY&#160;omit&#160;these&#160;sensors,&#160;as&#160;provided&#160;for&#160;in&#160;the&#160;fol&#160;owing<br/>subsections.&#160;If&#160;a&#160;device&#160;includes&#160;a&#160;particular&#160;sensor&#160;type&#160;that&#160;has&#160;a&#160;corresponding&#160;API<br/>for&#160;third-party&#160;developers,&#160;the&#160;device&#160;implementation&#160;MUST&#160;implement&#160;that&#160;API&#160;as<br/>described&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation.&#160;For&#160;example,&#160;device&#160;implementations:<br/>
MUST&#160;accurately&#160;report&#160;the&#160;presence&#160;or&#160;absence&#160;of&#160;sensors&#160;per&#160;the<br/>
android.content.pm.PackageManager&#160;class.&#160;[Re<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources37">sources,&#160;37]</a><br/>
MUST&#160;return&#160;an&#160;accurate&#160;list&#160;of&#160;supported&#160;sensors&#160;via&#160;the<br/>
SensorManager.getSensorList()&#160;and&#160;similar&#160;methods<br/>
MUST&#160;behave&#160;reasonably&#160;for&#160;al&#160;&#160;other&#160;sensor&#160;APIs&#160;(for&#160;example,&#160;by&#160;returning&#160;true<br/>or&#160;false&#160;as&#160;appropriate&#160;when&#160;applications&#160;attempt&#160;to&#160;register&#160;listeners,&#160;not&#160;cal&#160;ing<br/>sensor&#160;listeners&#160;when&#160;the&#160;corresponding&#160;sensors&#160;are&#160;not&#160;present;&#160;etc.)<br/>MUST&#160;report&#160;al&#160;&#160;sensor&#160;measurements&#160;using&#160;the&#160;relevant&#160;International&#160;System&#160;of<br/>Units&#160;(i.e.&#160;metric)&#160;values&#160;for&#160;each&#160;sensor&#160;type&#160;as&#160;defined&#160;in&#160;the&#160;Android&#160;SDK<br/>documentation&#160;[Resources,&#160;41]<br/>
The&#160;list&#160;above&#160;is&#160;not&#160;comprehensive;&#160;the&#160;documented&#160;behavior&#160;of&#160;the&#160;Android&#160;SDK&#160;is<br/>to&#160;be&#160;considered&#160;authoritative.<br/>
Some&#160;sensor&#160;types&#160;are&#160;synthetic,&#160;meaning&#160;they&#160;can&#160;be&#160;derived&#160;from&#160;data&#160;provided&#160;by<br/>one&#160;or&#160;more&#160;other&#160;sensors.&#160;(Examples&#160;include&#160;the&#160;orientation&#160;sensor,&#160;and&#160;the&#160;linear<br/>acceleration&#160;sensor.)&#160;Device&#160;implementations&#160;SHOULD&#160;implement&#160;these&#160;sensor<br/>types,&#160;when&#160;they&#160;include&#160;the&#160;prerequisite&#160;physical&#160;sensors.<br/>
The&#160;Android&#160;4.1&#160;APIs&#160;introduce&#160;a&#160;notion&#160;of&#160;a&#160;&#34;streaming&#34;&#160;sensor,&#160;which&#160;is&#160;one&#160;that<br/>returns&#160;data&#160;continuously,&#160;rather&#160;than&#160;only&#160;when&#160;the&#160;data&#160;changes.&#160;Device<br/>implementations&#160;MUST&#160;continuously&#160;provide&#160;periodic&#160;data&#160;samples&#160;for&#160;any&#160;API<br/>indicated&#160;by&#160;the&#160;Android&#160;4.1&#160;SDK&#160;documentation&#160;to&#160;be&#160;a&#160;streaming&#160;sensor.<br/>
<b>7.3.1.&#160;Accelerometer</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;3-axis&#160;accelerometer.&#160;If&#160;a&#160;device<br/>implementation&#160;does&#160;include&#160;a&#160;3-axis&#160;accelerometer,&#160;it:<br/>
SHOULD&#160;be&#160;able&#160;to&#160;deliver&#160;events&#160;at&#160;120&#160;Hz&#160;or&#160;greater.&#160;Note&#160;that&#160;while&#160;the<br/>accelerometer&#160;frequency&#160;above&#160;is&#160;stated&#160;as&#160;&#34;SHOULD&#34;&#160;for&#160;Android&#160;4.1,&#160;the<br/>Compatibility&#160;Definition&#160;for&#160;a&#160;future&#160;version&#160;is&#160;planned&#160;to&#160;change&#160;these&#160;to<br/>&#34;MUST&#34;.&#160;That&#160;is,&#160;these&#160;standards&#160;are&#160;optional&#160;in&#160;Android&#160;4.1&#160;but&#160;<b>will&#160;be<br/>required</b>&#160;in&#160;future&#160;versions.&#160;Existing&#160;and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are<br/><b>very&#160;strongly&#160;encouraged&#160;to&#160;meet&#160;these&#160;requirements&#160;in&#160;Android&#160;4.1&#160;</b>&#160;so<br/>they&#160;wil&#160;&#160;be&#160;able&#160;to&#160;upgrade&#160;to&#160;the&#160;future&#160;platform&#160;releases<br/>MUST&#160;comply&#160;with&#160;the&#160;Android&#160;sensor&#160;coordinate&#160;system&#160;as&#160;detailed&#160;in&#160;the<br/>Android&#160;APIs&#160;(see&#160;[Resources,&#160;41])<br/>MUST&#160;be&#160;capable&#160;of&#160;measuring&#160;from&#160;freefal&#160;&#160;up&#160;to&#160;twice&#160;gravity&#160;(2g)&#160;or&#160;more&#160;on<br/>any&#160;three-dimension<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources41">al&#160;vector<br/></a>MUST&#160;have&#160;8-bits&#160;of&#160;accuracy&#160;or&#160;more<br/>MUST&#160;have&#160;a&#160;standard&#160;deviation&#160;no&#160;greater&#160;than&#160;0.05&#160;m/s^2<br/>
<b>7.3.2.&#160;Magnetometer</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;3-axis&#160;magnetometer&#160;(i.e.&#160;compass.)&#160;If&#160;a<br/>device&#160;does&#160;include&#160;a&#160;3-axis&#160;magnetometer,&#160;it:<br/>
MUST&#160;be&#160;able&#160;to&#160;deliver&#160;events&#160;at&#160;10&#160;Hz&#160;or&#160;greater<br/>MUST&#160;comply&#160;with&#160;the&#160;Android&#160;sensor&#160;coordinate&#160;system&#160;as&#160;detailed&#160;in&#160;the<br/>Android&#160;APIs&#160;(see&#160;[Resources,&#160;41]).<br/>MUST&#160;be&#160;capable&#160;of&#160;sampling&#160;a&#160;range&#160;of&#160;field&#160;strengths&#160;adequate&#160;to&#160;cover&#160;the<br/>geomagnetic&#160;field<br/>MUST&#160;have&#160;8-bits&#160;of&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources41">accuracy&#160;or&#160;mor</a>e<br/>MUST&#160;have&#160;a&#160;standard&#160;deviation&#160;no&#160;greater&#160;than&#160;0.5&#160;µT<br/>
<b>7.3.3.&#160;GPS</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;GPS&#160;receiver.&#160;If&#160;a&#160;device&#160;implementation<br/>does&#160;include&#160;a&#160;GPS&#160;receiver,&#160;it&#160;SHOULD&#160;include&#160;some&#160;form&#160;of&#160;&#34;assisted&#160;GPS&#34;<br/>technique&#160;to&#160;minimize&#160;GPS&#160;lock-on&#160;time.<br/>
<b>7.3.4.&#160;Gyroscope</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;gyroscope&#160;(i.e.&#160;angular&#160;change&#160;sensor.)<br/>Devices&#160;SHOULD&#160;NOT&#160;include&#160;a&#160;gyroscope&#160;sensor&#160;unless&#160;a&#160;3-axis&#160;accelerometer&#160;is<br/>also&#160;included.&#160;If&#160;a&#160;device&#160;implementation&#160;includes&#160;a&#160;gyroscope,&#160;it:<br/>
<hr/>
<a name=25></a>MUST&#160;be&#160;temperature&#160;compensated<br/>MUST&#160;be&#160;capable&#160;of&#160;measuring&#160;orientation&#160;changes&#160;up&#160;to&#160;5.5*Pi<br/>radians/second&#160;(that&#160;is,&#160;approximately&#160;1,000&#160;degrees&#160;per&#160;second)<br/>SHOULD&#160;be&#160;able&#160;to&#160;deliver&#160;events&#160;at&#160;200&#160;Hz&#160;or&#160;greater.&#160;Note&#160;that&#160;while&#160;the<br/>gyroscope&#160;frequency&#160;above&#160;is&#160;stated&#160;as&#160;&#34;SHOULD&#34;&#160;for&#160;Android&#160;4.1,&#160;the<br/>Compatibility&#160;Definition&#160;for&#160;a&#160;future&#160;version&#160;is&#160;planned&#160;to&#160;change&#160;these&#160;to<br/>&#34;MUST&#34;.&#160;That&#160;is,&#160;these&#160;standards&#160;are&#160;optional&#160;in&#160;Android&#160;4.1&#160;but&#160;<b>will&#160;be<br/>required</b>&#160;in&#160;future&#160;versions.&#160;Existing&#160;and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are<br/><b>very&#160;strongly&#160;encouraged&#160;to&#160;meet&#160;these&#160;requirements&#160;in&#160;Android&#160;4.1&#160;</b>&#160;so<br/>they&#160;wil&#160;&#160;be&#160;able&#160;to&#160;upgrade&#160;to&#160;the&#160;future&#160;platform&#160;releases<br/>MUST&#160;have&#160;12-bits&#160;of&#160;accuracy&#160;or&#160;more<br/>MUST&#160;have&#160;a&#160;variance&#160;no&#160;greater&#160;than&#160;1e-7&#160;rad^2&#160;/&#160;s^2&#160;per&#160;Hz&#160;(variance&#160;per&#160;Hz,<br/>or&#160;rad^2&#160;/&#160;s).&#160;The&#160;variance&#160;is&#160;al&#160;owed&#160;to&#160;vary&#160;with&#160;the&#160;sampling&#160;rate,&#160;but&#160;must&#160;be<br/>constrained&#160;by&#160;this&#160;value.&#160;In&#160;other&#160;words,&#160;if&#160;you&#160;measure&#160;the&#160;variance&#160;of&#160;the&#160;gyro<br/>at&#160;1&#160;Hz&#160;sampling&#160;rate&#160;it&#160;should&#160;be&#160;no&#160;greater&#160;than&#160;1e-7&#160;rad^2/s^2.<br/>MUST&#160;have&#160;timestamps&#160;as&#160;close&#160;to&#160;when&#160;the&#160;hardware&#160;event&#160;happened&#160;as<br/>possible.&#160;The&#160;constant&#160;latency&#160;must&#160;be&#160;removed.<br/>
<b>7.3.5.&#160;Barometer</b><br/>
Device&#160;implementations&#160;MAY&#160;include&#160;a&#160;barometer&#160;(i.e.&#160;ambient&#160;air&#160;pressure&#160;sensor.)&#160;If<br/>a&#160;device&#160;implementation&#160;includes&#160;a&#160;barometer,&#160;it:<br/>
MUST&#160;be&#160;able&#160;to&#160;deliver&#160;events&#160;at&#160;5&#160;Hz&#160;or&#160;greater<br/>MUST&#160;have&#160;adequate&#160;precision&#160;to&#160;enable&#160;estimating&#160;altitude<br/>MUST&#160;be&#160;temperature&#160;compensated<br/>
<b>7.3.7.&#160;Thermometer</b><br/>
Device&#160;implementations&#160;MAY&#160;but&#160;SHOULD&#160;NOT&#160;include&#160;a&#160;thermometer&#160;(i.e.<br/>temperature&#160;sensor.)&#160;If&#160;a&#160;device&#160;implementation&#160;does&#160;include&#160;a&#160;thermometer,&#160;it&#160;MUST<br/>measure&#160;the&#160;temperature&#160;of&#160;the&#160;device&#160;CPU.&#160;It&#160;MUST&#160;NOT&#160;measure&#160;any&#160;other<br/>temperature.&#160;(Note&#160;that&#160;this&#160;sensor&#160;type&#160;is&#160;deprecated&#160;in&#160;the&#160;Android&#160;4.1&#160;APIs.)<br/>
<b>7.3.7.&#160;Photometer</b><br/>
Device&#160;implementations&#160;MAY&#160;include&#160;a&#160;photometer&#160;(i.e.&#160;ambient&#160;light&#160;sensor.)<br/>
<b>7.3.8.&#160;Proximity&#160;Sensor</b><br/>
Device&#160;implementations&#160;MAY&#160;include&#160;a&#160;proximity&#160;sensor.&#160;If&#160;a&#160;device&#160;implementation<br/>does&#160;include&#160;a&#160;proximity&#160;sensor,&#160;it&#160;MUST&#160;measure&#160;the&#160;proximity&#160;of&#160;an&#160;object&#160;in&#160;the<br/>same&#160;direction&#160;as&#160;the&#160;screen.&#160;That&#160;is,&#160;the&#160;proximity&#160;sensor&#160;MUST&#160;be&#160;oriented&#160;to&#160;detect<br/>objects&#160;close&#160;to&#160;the&#160;screen,&#160;as&#160;the&#160;primary&#160;intent&#160;of&#160;this&#160;sensor&#160;type&#160;is&#160;to&#160;detect&#160;a<br/>phone&#160;in&#160;use&#160;by&#160;the&#160;user.&#160;If&#160;a&#160;device&#160;implementation&#160;includes&#160;a&#160;proximity&#160;sensor&#160;with<br/>any&#160;other&#160;orientation,&#160;it&#160;MUST&#160;NOT&#160;be&#160;accessible&#160;through&#160;this&#160;API.&#160;If&#160;a&#160;device<br/>implementation&#160;has&#160;a&#160;proximity&#160;sensor,&#160;it&#160;MUST&#160;be&#160;have&#160;1-bit&#160;of&#160;accuracy&#160;or&#160;more.<br/>
<b>7.4.&#160;Data&#160;Connectivity</b><br/>
<b>7.4.1.&#160;Telephony</b><br/>
&#34;Telephony&#34;&#160;as&#160;used&#160;by&#160;the&#160;Android&#160;4.1&#160;APIs&#160;and&#160;this&#160;document&#160;refers&#160;specifical&#160;y&#160;to<br/>hardware&#160;related&#160;to&#160;placing&#160;voice&#160;cal&#160;s&#160;and&#160;sending&#160;SMS&#160;messages&#160;via&#160;a&#160;GSM&#160;or<br/>CDMA&#160;network.&#160;While&#160;these&#160;voice&#160;cal&#160;s&#160;may&#160;or&#160;may&#160;not&#160;be&#160;packet-switched,&#160;they&#160;are<br/>for&#160;the&#160;purposes&#160;of&#160;Android&#160;4.1&#160;considered&#160;independent&#160;of&#160;any&#160;data&#160;connectivity&#160;that<br/>may&#160;be&#160;implemented&#160;using&#160;the&#160;same&#160;network.&#160;In&#160;other&#160;words,&#160;the&#160;Android&#160;&#34;telephony&#34;<br/>functionality&#160;and&#160;APIs&#160;refer&#160;specifical&#160;y&#160;to&#160;voice&#160;cal&#160;s&#160;and&#160;SMS;&#160;for&#160;instance,&#160;device<br/>implementations&#160;that&#160;cannot&#160;place&#160;cal&#160;s&#160;or&#160;send/receive&#160;SMS&#160;messages&#160;MUST&#160;NOT<br/>report&#160;the&#160;&#34;android.hardware.telephony&#34;&#160;feature&#160;or&#160;any&#160;sub-features,&#160;regardless&#160;of<br/>whether&#160;they&#160;use&#160;a&#160;cel&#160;ular&#160;network&#160;for&#160;data&#160;connectivity.<br/>
Android&#160;4.1&#160;MAY&#160;be&#160;used&#160;on&#160;devices&#160;that&#160;do&#160;not&#160;include&#160;telephony&#160;hardware.&#160;That&#160;is,<br/>Android&#160;4.1&#160;is&#160;compatible&#160;with&#160;devices&#160;that&#160;are&#160;not&#160;phones.&#160;However,&#160;if&#160;a&#160;device<br/>implementation&#160;does&#160;include&#160;GSM&#160;or&#160;CDMA&#160;telephony,&#160;it&#160;MUST&#160;implement&#160;ful&#160;&#160;support<br/>for&#160;the&#160;API&#160;for&#160;that&#160;technology.&#160;Device&#160;implementations&#160;that&#160;do&#160;not&#160;include&#160;telephony<br/>hardware&#160;MUST&#160;implement&#160;the&#160;ful&#160;&#160;APIs&#160;as&#160;no-ops.<br/>
<b>7.4.2.&#160;IEEE&#160;802.11&#160;(WiFi)</b><br/>
Android&#160;4.1&#160;device&#160;implementations&#160;SHOULD&#160;include&#160;support&#160;for&#160;one&#160;or&#160;more&#160;forms<br/>of&#160;802.11&#160;(b/g/a/n,&#160;etc.)&#160;If&#160;a&#160;device&#160;implementation&#160;does&#160;include&#160;support&#160;for&#160;802.11,&#160;it<br/>MUST&#160;implement&#160;the&#160;corresponding&#160;Android&#160;API.<br/>
<hr/>
<a name=26></a>Device&#160;implementations&#160;MUST&#160;implement&#160;the&#160;multicast&#160;API&#160;as&#160;described&#160;in&#160;the&#160;SDK<br/>documentation&#160;[<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources62">Resources,&#160;62].&#160;D</a>evice&#160;implementations&#160;that&#160;do&#160;include&#160;Wifi&#160;support<br/>MUST&#160;support&#160;multicast&#160;DNS&#160;(mDNS).&#160;Device&#160;implementations&#160;MUST&#160;not&#160;filter&#160;mDNS<br/>packets&#160;(224.0.0.251)&#160;at&#160;any&#160;time&#160;of&#160;operation&#160;including&#160;when&#160;the&#160;screen&#160;is&#160;not&#160;in&#160;an<br/>active&#160;state.<br/>
<b>7.4.2.1.&#160;WiFi&#160;Direct</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;support&#160;for&#160;Wifi&#160;direct&#160;(Wifi&#160;peer-to-peer).&#160;If<br/>a&#160;device&#160;implementation&#160;does&#160;include&#160;support&#160;for&#160;Wifi&#160;direct,&#160;it&#160;MUST&#160;implement&#160;the<br/>corresponding&#160;Android&#160;API&#160;as&#160;described&#160;in&#160;the&#160;SDK&#160;documentation&#160;[Resources,&#160;68].&#160;If<br/>a&#160;device&#160;implementation&#160;includes&#160;support&#160;for&#160;Wifi&#160;direct,&#160;then&#160;it:<br/>
MUST&#160;support&#160;regular&#160;Wifi&#160;operation<br/>SHOULD&#160;support&#160;concurrent&#160;wifi&#160;and&#160;wifi&#160;Direct&#160;operation<br/>
<b>7.4.3.&#160;Bluetooth</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;Bluetooth&#160;transceiver.&#160;Device<br/>implementations&#160;that&#160;do&#160;include&#160;a&#160;Bluetooth&#160;transceiver&#160;MUST&#160;enable&#160;the&#160;RFCOMM-<br/>based&#160;Bluetooth&#160;API&#160;as&#160;described&#160;in&#160;the&#160;SDK&#160;documentation&#160;[Resources,&#160;42].&#160;Device<br/>implementations&#160;SHOULD&#160;implement&#160;relevant&#160;Bluetooth&#160;profiles,&#160;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources42">such&#160;as&#160;A2DP,<br/></a>AVRCP,&#160;OBEX,&#160;etc.&#160;as&#160;appropriate&#160;for&#160;the&#160;device.<br/>
The&#160;Compatibility&#160;Test&#160;Suite&#160;includes&#160;cases&#160;that&#160;cover&#160;basic&#160;operation&#160;of&#160;the&#160;Android<br/>RFCOMM&#160;Bluetooth&#160;API.&#160;However,&#160;since&#160;Bluetooth&#160;is&#160;a&#160;communications&#160;protocol<br/>between&#160;devices,&#160;it&#160;cannot&#160;be&#160;ful&#160;y&#160;tested&#160;by&#160;unit&#160;tests&#160;running&#160;on&#160;a&#160;single&#160;device.<br/>Consequently,&#160;device&#160;implementations&#160;MUST&#160;also&#160;pass&#160;the&#160;human-driven&#160;Bluetooth<br/>test&#160;procedure&#160;described&#160;in&#160;Appendix&#160;A.<br/>
<b>7.4.4.&#160;Near-Field&#160;Communications</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;transceiver&#160;and&#160;related&#160;hardware&#160;for<br/>Near-Field&#160;Communications&#160;(NFC).&#160;If&#160;a&#160;device&#160;implementation&#160;does&#160;include&#160;NFC<br/>hardware,&#160;then&#160;it:<br/>
MUST&#160;report&#160;the&#160;android.hardware.nfc&#160;feature&#160;from&#160;the<br/>
android.content.pm.PackageManager.hasSystemFeature()&#160;method.<br/>
[Resources,&#160;37]<br/>MUST&#160;be&#160;capable&#160;of&#160;reading&#160;and&#160;writing&#160;NDEF&#160;messages&#160;via&#160;the&#160;fol&#160;owing&#160;NFC<br/>s<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources37">tandards:</a><br/>
MUST&#160;be&#160;capable&#160;of&#160;acting&#160;as&#160;an&#160;NFC&#160;Forum&#160;reader/writer&#160;(as&#160;defined&#160;by<br/>the&#160;NFC&#160;Forum&#160;technical&#160;specification&#160;NFCForum-TS-DigitalProtocol-1.0)<br/>via&#160;the&#160;fol&#160;owing&#160;NFC&#160;standards:<br/>
NfcA&#160;(ISO14443-3A)<br/>NfcB&#160;(ISO14443-3B)<br/>NfcF&#160;(JIS&#160;6319-4)<br/>IsoDep&#160;(ISO&#160;14443-4)<br/>NFC&#160;Forum&#160;Tag&#160;Types&#160;1,&#160;2,&#160;3,&#160;4&#160;(defined&#160;by&#160;the&#160;NFC&#160;Forum)<br/>
SHOULD&#160;be&#160;capable&#160;of&#160;reading&#160;and&#160;writing&#160;NDEF&#160;messages&#160;via&#160;the&#160;fol&#160;owing<br/>NFC&#160;standards.&#160;Note&#160;that&#160;while&#160;the&#160;NFC&#160;standards&#160;below&#160;are&#160;stated&#160;as<br/>&#34;SHOULD&#34;&#160;for&#160;Android&#160;4.1,&#160;the&#160;Compatibility&#160;Definition&#160;for&#160;a&#160;future&#160;version&#160;is<br/>planned&#160;to&#160;change&#160;these&#160;to&#160;&#34;MUST&#34;.&#160;That&#160;is,&#160;these&#160;standards&#160;are&#160;optional&#160;in<br/>Android&#160;4.1&#160;but&#160;<b>will&#160;be&#160;required</b>&#160;in&#160;future&#160;versions.&#160;Existing&#160;and&#160;new&#160;devices<br/>that&#160;run&#160;Android&#160;4.1&#160;are&#160;<b>very&#160;strongly&#160;encouraged&#160;to&#160;meet&#160;these<br/>requirements&#160;in&#160;Android&#160;4.1</b>&#160;so&#160;they&#160;wil&#160;&#160;be&#160;able&#160;to&#160;upgrade&#160;to&#160;the&#160;future<br/>platform&#160;releases.<br/>
NfcV&#160;(ISO&#160;15693)<br/>
MUST&#160;be&#160;capable&#160;of&#160;transmitting&#160;and&#160;receiving&#160;data&#160;via&#160;the&#160;fol&#160;owing&#160;peer-to-<br/>peer&#160;standards&#160;and&#160;protocols:<br/>
ISO&#160;18092<br/>LLCP&#160;1.0&#160;(defined&#160;by&#160;the&#160;NFC&#160;Forum)<br/>SDP&#160;1.0&#160;(defined&#160;by&#160;the&#160;NFC&#160;Forum)<br/>NDEF&#160;Push&#160;Protocol&#160;[Resources,&#160;43]<br/>SNEP&#160;1.0&#160;(defined&#160;by&#160;the&#160;NFC&#160;Forum)<br/>
MUST&#160;include&#160;support&#160;for&#160;Android&#160;Beam&#160;[Resources,&#160;65]:<br/>
MUST&#160;implement&#160;the&#160;S<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources43">NEP&#160;default&#160;serv</a>er.&#160;Valid&#160;NDEF&#160;messages<br/>received&#160;by&#160;the&#160;default&#160;SNEP&#160;server&#160;MUST&#160;be&#160;dispatched&#160;to&#160;applications<br/>using&#160;the&#160;android.nfc.ACTION_NDEF_DISCOVERED&#160;intent.&#160;Disabling<br/>Android&#160;Beam&#160;in&#160;settings&#160;MUST&#160;NOT&#160;disable&#160;dispatch&#160;of&#160;incoming&#160;NDEF<br/>message.<br/>Device&#160;implementations&#160;MUST&#160;honor&#160;the<br/>android.settings.NFCSHARING_SETTINGS&#160;intent&#160;to&#160;show&#160;NFC&#160;sharing<br/>
<hr/>
<a name=27></a>settings&#160;[R<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources67">esources,&#160;67].<br/></a>MUST&#160;implement&#160;the&#160;NPP&#160;server.&#160;Messages&#160;received&#160;by&#160;the&#160;NPP&#160;server<br/>MUST&#160;be&#160;processed&#160;the&#160;same&#160;way&#160;as&#160;the&#160;SNEP&#160;default&#160;server.<br/>MUST&#160;implement&#160;a&#160;SNEP&#160;client&#160;and&#160;attempt&#160;to&#160;send&#160;outbound&#160;P2P&#160;NDEF<br/>to&#160;the&#160;default&#160;SNEP&#160;server&#160;when&#160;Android&#160;Beam&#160;is&#160;enabled.&#160;If&#160;no&#160;default<br/>SNEP&#160;server&#160;is&#160;found&#160;then&#160;the&#160;client&#160;MUST&#160;attempt&#160;to&#160;send&#160;to&#160;an&#160;NPP<br/>server.<br/>MUST&#160;al&#160;ow&#160;foreground&#160;activities&#160;to&#160;set&#160;the&#160;outbound&#160;P2P&#160;NDEF&#160;message<br/>using&#160;android.nfc.NfcAdapter.setNdefPushMessage,&#160;and<br/>android.nfc.NfcAdapter.setNdefPushMessageCal&#160;back,&#160;and<br/>android.nfc.NfcAdapter.enableForegroundNdefPush.<br/>SHOULD&#160;use&#160;a&#160;gesture&#160;or&#160;on-screen&#160;confirmation,&#160;such&#160;as&#160;'Touch&#160;to<br/>Beam',&#160;before&#160;sending&#160;outbound&#160;P2P&#160;NDEF&#160;messages.<br/>SHOULD&#160;enable&#160;Android&#160;Beam&#160;by&#160;default<br/>MUST&#160;support&#160;NFC&#160;Connection&#160;handover&#160;to&#160;Bluetooth&#160;when&#160;the&#160;device<br/>supports&#160;Bluetooth&#160;Object&#160;Push&#160;Profile.&#160;Device&#160;implementations&#160;must<br/>support&#160;connection&#160;handover&#160;to&#160;Bluetooth&#160;when&#160;using<br/>android.nfc.NfcAdapter.setBeamPushUris,&#160;by&#160;implementing&#160;the<br/>&#34;Connection&#160;Handover&#160;version&#160;1.2&#34;&#160;[Resources,&#160;60]&#160;and&#160;&#34;Bluetooth&#160;Secure<br/>Simple&#160;Pairing&#160;Using&#160;NFC&#160;version&#160;1.0&#34;<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources60">&#160;[Resources,&#160;61</a>]&#160;specs&#160;from&#160;the<br/>NFC&#160;Forum.&#160;Such&#160;an&#160;implementation&#160;SHO<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources61">ULD&#160;use&#160;SNEP&#160;G</a>ET&#160;requests<br/>for&#160;exchanging&#160;the&#160;handover&#160;request&#160;/&#160;select&#160;records&#160;over&#160;NFC,&#160;and&#160;it<br/>MUST&#160;use&#160;the&#160;Bluetooth&#160;Object&#160;Push&#160;Profile&#160;for&#160;the&#160;actual&#160;Bluetooth&#160;data<br/>transfer.<br/>
MUST&#160;pol&#160;&#160;for&#160;al&#160;&#160;supported&#160;technologies&#160;while&#160;in&#160;NFC&#160;discovery&#160;mode.<br/>SHOULD&#160;be&#160;in&#160;NFC&#160;discovery&#160;mode&#160;while&#160;the&#160;device&#160;is&#160;awake&#160;with&#160;the&#160;screen<br/>active&#160;and&#160;the&#160;lock-screen&#160;unlocked.<br/>
(Note&#160;that&#160;publicly&#160;available&#160;links&#160;are&#160;not&#160;available&#160;for&#160;the&#160;JIS,&#160;ISO,&#160;and&#160;NFC&#160;Forum<br/>specifications&#160;cited&#160;above.)<br/>
Additional&#160;y,&#160;device&#160;implementations&#160;MAY&#160;include&#160;reader/writer&#160;support&#160;for&#160;the<br/>fol&#160;owing&#160;MIFARE&#160;technologies.<br/>
MIFARE&#160;Classic&#160;(NXP&#160;MF1S503x&#160;[Resources,&#160;44],&#160;MF1S703x&#160;[Resources,&#160;44])<br/>MIFARE&#160;Ultralight&#160;(NXP&#160;MF0ICU1&#160;[Resources,&#160;46],&#160;MF0ICU2&#160;[Resources,&#160;46])<br/>NDEF&#160;on&#160;MIFARE&#160;Classic&#160;(NXP&#160;AN1<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources44">30511&#160;[Resourc</a>es,&#160;48],&#160;AN13<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources44">0411<br/></a>[Resources,&#160;49])<br/>
Note&#160;th<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources49">at&#160;Android&#160;4.1&#160;in</a>cludes&#160;APIs&#160;for&#160;these&#160;MIFARE&#160;types.&#160;If&#160;a&#160;device<br/>implementation&#160;supports&#160;MIFARE&#160;in&#160;the&#160;reader/writer&#160;role,&#160;it:<br/>
MUST&#160;implement&#160;the&#160;corresponding&#160;Android&#160;APIs&#160;as&#160;documented&#160;by&#160;the<br/>Android&#160;SDK<br/>MUST&#160;report&#160;the&#160;feature&#160;com.nxp.mifare&#160;from&#160;the<br/>
android.content.pm.PackageManager.hasSystemFeature()&#160;method.<br/>
[Resources,&#160;37]&#160;Note&#160;that&#160;this&#160;is&#160;not&#160;a&#160;standard&#160;Android&#160;feature,&#160;and&#160;as&#160;such<br/>does&#160;not&#160;appear&#160;as&#160;a&#160;constant&#160;on&#160;the&#160;PackageManager&#160;class.<br/><a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources37">MUST&#160;NOT&#160;imple</a>ment&#160;the&#160;corresponding&#160;Android&#160;APIs&#160;nor&#160;report&#160;the<br/>com.nxp.mifare&#160;feature&#160;unless&#160;it&#160;also&#160;implements&#160;general&#160;NFC&#160;support&#160;as<br/>described&#160;in&#160;this&#160;section<br/>
If&#160;a&#160;device&#160;implementation&#160;does&#160;not&#160;include&#160;NFC&#160;hardware,&#160;it&#160;MUST&#160;NOT&#160;declare&#160;the<br/>android.hardware.nfc&#160;feature&#160;from&#160;the<br/>
android.content.pm.PackageManager.hasSystemFeature()&#160;method&#160;[Resources,&#160;37],<br/>
and&#160;MUST&#160;implement&#160;the&#160;Android&#160;4.1&#160;NFC&#160;API&#160;as&#160;a&#160;no-op.<br/>
As&#160;the&#160;classes&#160;android.nfc.NdefMessage&#160;and&#160;android.nfc.NdefRecord&#160;r<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources37">epresent&#160;a<br/></a>protocol-independent&#160;data&#160;representation&#160;format,&#160;device&#160;implementations&#160;MUST<br/>implement&#160;these&#160;APIs&#160;even&#160;if&#160;they&#160;do&#160;not&#160;include&#160;support&#160;for&#160;NFC&#160;or&#160;declare&#160;the<br/>android.hardware.nfc&#160;feature.<br/>
<b>7.4.5.&#160;Minimum&#160;Network&#160;Capability</b><br/>
Device&#160;implementations&#160;MUST&#160;include&#160;support&#160;for&#160;one&#160;or&#160;more&#160;forms&#160;of&#160;data<br/>networking.&#160;Specifical&#160;y,&#160;device&#160;implementations&#160;MUST&#160;include&#160;support&#160;for&#160;at&#160;least&#160;one<br/>data&#160;standard&#160;capable&#160;of&#160;200Kbit/sec&#160;or&#160;greater.&#160;Examples&#160;of&#160;technologies&#160;that<br/>satisfy&#160;this&#160;requirement&#160;include&#160;EDGE,&#160;HSPA,&#160;EV-DO,&#160;802.11g,&#160;Ethernet,&#160;etc.<br/>
Device&#160;implementations&#160;where&#160;a&#160;physical&#160;networking&#160;standard&#160;(such&#160;as&#160;Ethernet)&#160;is<br/>the&#160;primary&#160;data&#160;connection&#160;SHOULD&#160;also&#160;include&#160;support&#160;for&#160;at&#160;least&#160;one&#160;common<br/>wireless&#160;data&#160;standard,&#160;such&#160;as&#160;802.11&#160;(WiFi).<br/>
Devices&#160;MAY&#160;implement&#160;more&#160;than&#160;one&#160;form&#160;of&#160;data&#160;connectivity.<br/>
<hr/>
<a name=28></a><b>7.5.&#160;Cameras</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;rear-facing&#160;camera,&#160;and&#160;MAY&#160;include&#160;a<br/>front-facing&#160;camera.&#160;A&#160;rear-facing&#160;camera&#160;is&#160;a&#160;camera&#160;located&#160;on&#160;the&#160;side&#160;of&#160;the<br/>device&#160;opposite&#160;the&#160;display;&#160;that&#160;is,&#160;it&#160;images&#160;scenes&#160;on&#160;the&#160;far&#160;side&#160;of&#160;the&#160;device,&#160;like<br/>a&#160;traditional&#160;camera.&#160;A&#160;front-facing&#160;camera&#160;is&#160;a&#160;camera&#160;located&#160;on&#160;the&#160;same&#160;side&#160;of<br/>the&#160;device&#160;as&#160;the&#160;display;&#160;that&#160;is,&#160;a&#160;camera&#160;typical&#160;y&#160;used&#160;to&#160;image&#160;the&#160;user,&#160;such&#160;as&#160;for<br/>video&#160;conferencing&#160;and&#160;similar&#160;applications.<br/>
<b>7.5.1.&#160;Rear-Facing&#160;Camera</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;rear-facing&#160;camera.&#160;If&#160;a&#160;device<br/>implementation&#160;includes&#160;a&#160;rear-facing&#160;camera,&#160;it:<br/>
MUST&#160;have&#160;a&#160;resolution&#160;of&#160;at&#160;least&#160;2&#160;megapixels<br/>SHOULD&#160;have&#160;either&#160;hardware&#160;auto-focus,&#160;or&#160;software&#160;auto-focus&#160;implemented<br/>in&#160;the&#160;camera&#160;driver&#160;(transparent&#160;to&#160;application&#160;software)<br/>MAY&#160;have&#160;fixed-focus&#160;or&#160;EDOF&#160;(extended&#160;depth&#160;of&#160;field)&#160;hardware<br/>MAY&#160;include&#160;a&#160;flash.&#160;If&#160;the&#160;Camera&#160;includes&#160;a&#160;flash,&#160;the&#160;flash&#160;lamp&#160;MUST&#160;NOT&#160;be<br/>lit&#160;while&#160;an&#160;android.hardware.Camera.PreviewCal&#160;back&#160;instance&#160;has&#160;been<br/>registered&#160;on&#160;a&#160;Camera&#160;preview&#160;surface,&#160;unless&#160;the&#160;application&#160;has&#160;explicitly<br/>enabled&#160;the&#160;flash&#160;by&#160;enabling&#160;the&#160;FLASH_MODE_AUTO&#160;or&#160;FLASH_MODE_ON&#160;attributes<br/>of&#160;a&#160;Camera.Parameters&#160;object.&#160;Note&#160;that&#160;this&#160;constraint&#160;does&#160;not&#160;apply&#160;to&#160;the<br/>device's&#160;built-in&#160;system&#160;camera&#160;application,&#160;but&#160;only&#160;to&#160;third-party&#160;applications<br/>using&#160;Camera.PreviewCallback.<br/>
<b>7.5.2.&#160;Front-Facing&#160;Camera</b><br/>
Device&#160;implementations&#160;MAY&#160;include&#160;a&#160;front-facing&#160;camera.&#160;If&#160;a&#160;device&#160;implementation<br/>includes&#160;a&#160;front-facing&#160;camera,&#160;it:<br/>
MUST&#160;have&#160;a&#160;resolution&#160;of&#160;at&#160;least&#160;VGA&#160;(that&#160;is,&#160;640x480&#160;pixels)<br/>MUST&#160;NOT&#160;use&#160;a&#160;front-facing&#160;camera&#160;as&#160;the&#160;default&#160;for&#160;the&#160;Camera&#160;API.&#160;That&#160;is,<br/>the&#160;camera&#160;API&#160;in&#160;Android&#160;4.1&#160;has&#160;specific&#160;support&#160;for&#160;front-facing&#160;cameras,&#160;and<br/>device&#160;implementations&#160;MUST&#160;NOT&#160;configure&#160;the&#160;API&#160;to&#160;to&#160;treat&#160;a&#160;front-facing<br/>camera&#160;as&#160;the&#160;default&#160;rear-facing&#160;camera,&#160;even&#160;if&#160;it&#160;is&#160;the&#160;only&#160;camera&#160;on&#160;the<br/>device.<br/>MAY&#160;include&#160;features&#160;(such&#160;as&#160;auto-focus,&#160;flash,&#160;etc.)&#160;available&#160;to&#160;rear-facing<br/>cameras&#160;as&#160;described&#160;in&#160;Section&#160;7.5.1.<br/>MUST&#160;horizontal&#160;y&#160;reflect&#160;(i.e.&#160;mirror)&#160;the&#160;stream&#160;displayed&#160;by&#160;an&#160;app&#160;in&#160;a<br/>CameraPreview,&#160;as&#160;fol&#160;ows:<br/>
If&#160;the&#160;device&#160;implementation&#160;is&#160;capable&#160;of&#160;being&#160;rotated&#160;by&#160;user&#160;(such&#160;as<br/>automatical&#160;y&#160;via&#160;an&#160;accelerometer&#160;or&#160;manual&#160;y&#160;via&#160;user&#160;input),&#160;the&#160;camera<br/>preview&#160;MUST&#160;be&#160;mirrored&#160;horizontal&#160;y&#160;relative&#160;to&#160;the&#160;device's&#160;current<br/>orientation.<br/>If&#160;the&#160;current&#160;application&#160;has&#160;explicitly&#160;requested&#160;that&#160;the&#160;Camera&#160;display<br/>be&#160;rotated&#160;via&#160;a&#160;cal&#160;&#160;to&#160;the<br/>
android.hardware.Camera.setDisplayOrientation()&#160;[Resources,&#160;50]<br/>
method,&#160;the&#160;camera&#160;preview&#160;MUST&#160;be&#160;mirrored&#160;horizontal&#160;y&#160;relative&#160;to&#160;the<br/>orientation&#160;specified&#160;by&#160;the&#160;application.<br/>Otherwise,&#160;the&#160;preview&#160;MUST&#160;be&#160;mirrored&#160;along&#160;the&#160;device's&#160;default<br/>horizontal&#160;axis.<br/>
MUST&#160;mirror&#160;the&#160;image&#160;displayed&#160;by&#160;the&#160;postview&#160;in&#160;the&#160;same&#160;manner&#160;as&#160;the<br/>camera&#160;preview&#160;image&#160;stream.&#160;(If&#160;the&#160;device&#160;implementation&#160;does&#160;not&#160;support<br/>postview,&#160;this&#160;requirement&#160;obviously&#160;does&#160;not&#160;apply.)<br/>MUST&#160;NOT&#160;mirror&#160;the&#160;final&#160;captured&#160;stil&#160;&#160;image&#160;or&#160;video&#160;streams&#160;returned&#160;to<br/>application&#160;cal&#160;backs&#160;or&#160;committed&#160;to&#160;media&#160;storage<br/>
<b>7.5.3.&#160;Camera&#160;API&#160;Behavior</b><br/>
Device&#160;implementations&#160;MUST&#160;implement&#160;the&#160;fol&#160;owing&#160;behaviors&#160;for&#160;the&#160;camera-<br/>related&#160;APIs,&#160;for&#160;both&#160;front-&#160;and&#160;rear-facing&#160;cameras:<br/>
1.&#160;&#160;If&#160;an&#160;application&#160;has&#160;never&#160;cal&#160;ed<br/>
android.hardware.Camera.Parameters.setPreviewFormat(int),&#160;then&#160;the<br/>
device&#160;MUST&#160;use&#160;android.hardware.PixelFormat.YCbCr_420_SP&#160;for&#160;preview<br/>data&#160;provided&#160;to&#160;application&#160;cal&#160;backs.<br/>
2.&#160;&#160;If&#160;an&#160;application&#160;registers&#160;an&#160;android.hardware.Camera.PreviewCallback<br/>
instance&#160;and&#160;the&#160;system&#160;cal&#160;s&#160;the&#160;onPreviewFrame()&#160;method&#160;when&#160;the&#160;preview<br/>format&#160;is&#160;YCbCr_420_SP,&#160;the&#160;data&#160;in&#160;the&#160;byte[]&#160;passed&#160;into&#160;onPreviewFrame()<br/>must&#160;further&#160;be&#160;in&#160;the&#160;NV21&#160;encoding&#160;format.&#160;That&#160;is,&#160;NV21&#160;MUST&#160;be&#160;the&#160;default.<br/>
3.&#160;&#160;Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;YV12&#160;format&#160;(as&#160;denoted&#160;by&#160;the<br/>
<hr/>
<a name=29></a>android.graphics.ImageFormat.YV12&#160;constant)&#160;for&#160;camera&#160;previews&#160;for&#160;both<br/>
front-&#160;and&#160;rear-facing&#160;cameras.&#160;(The&#160;hardware&#160;video&#160;decoder&#160;and&#160;camera&#160;may<br/>use&#160;any&#160;native&#160;pixel&#160;format,&#160;but&#160;the&#160;device&#160;implementation&#160;MUST&#160;support<br/>conversion&#160;to&#160;YV12.)<br/>
Device&#160;implementations&#160;MUST&#160;implement&#160;the&#160;ful&#160;&#160;Camera&#160;API&#160;included&#160;in&#160;the&#160;Android<br/>4.1&#160;SDK&#160;documentation&#160;[R<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources51">esources,&#160;51]),&#160;r</a>egardless&#160;of&#160;whether&#160;the&#160;device&#160;includes<br/>hardware&#160;autofocus&#160;or&#160;other&#160;capabilities.&#160;For&#160;instance,&#160;cameras&#160;that&#160;lack&#160;autofocus<br/>MUST&#160;stil&#160;&#160;cal&#160;&#160;any&#160;registered&#160;android.hardware.Camera.AutoFocusCallback<br/>instances&#160;(even&#160;though&#160;this&#160;has&#160;no&#160;relevance&#160;to&#160;a&#160;non-autofocus&#160;camera.)&#160;Note&#160;that<br/>this&#160;does&#160;apply&#160;to&#160;front-facing&#160;cameras;&#160;for&#160;instance,&#160;even&#160;though&#160;most&#160;front-facing<br/>cameras&#160;do&#160;not&#160;support&#160;autofocus,&#160;the&#160;API&#160;cal&#160;backs&#160;must&#160;stil&#160;&#160;be&#160;&#34;faked&#34;&#160;as<br/>described.<br/>
Device&#160;implementations&#160;MUST&#160;recognize&#160;and&#160;honor&#160;each&#160;parameter&#160;name&#160;defined&#160;as<br/>a&#160;constant&#160;on&#160;the&#160;android.hardware.Camera.Parameters&#160;class,&#160;if&#160;the&#160;underlying<br/>hardware&#160;supports&#160;the&#160;feature.&#160;If&#160;the&#160;device&#160;hardware&#160;does&#160;not&#160;support&#160;a&#160;feature,&#160;the<br/>API&#160;must&#160;behave&#160;as&#160;documented.&#160;Conversely,&#160;Device&#160;implementations&#160;MUST&#160;NOT<br/>honor&#160;or&#160;recognize&#160;string&#160;constants&#160;passed&#160;to&#160;the<br/>
android.hardware.Camera.setParameters()&#160;method&#160;other&#160;than&#160;those&#160;documented&#160;as<br/>
constants&#160;on&#160;the&#160;android.hardware.Camera.Parameters.&#160;That&#160;is,&#160;device<br/>implementations&#160;MUST&#160;support&#160;al&#160;&#160;standard&#160;Camera&#160;parameters&#160;if&#160;the&#160;hardware<br/>al&#160;ows,&#160;and&#160;MUST&#160;NOT&#160;support&#160;custom&#160;Camera&#160;parameter&#160;types.<br/>
Device&#160;implementations&#160;MUST&#160;broadcast&#160;the&#160;Camera.ACTION_NEW_PICTURE&#160;intent<br/>whenever&#160;a&#160;new&#160;picture&#160;is&#160;taken&#160;by&#160;the&#160;camera&#160;and&#160;the&#160;entry&#160;of&#160;the&#160;picture&#160;has&#160;been<br/>added&#160;to&#160;the&#160;media&#160;store.<br/>
Device&#160;implementations&#160;MUST&#160;broadcast&#160;the&#160;Camera.ACTION_NEW_VIDEO&#160;intent<br/>whenever&#160;a&#160;new&#160;video&#160;is&#160;recorded&#160;by&#160;the&#160;camera&#160;and&#160;the&#160;entry&#160;of&#160;the&#160;picture&#160;has&#160;been<br/>added&#160;to&#160;the&#160;media&#160;store.<br/>
<b>7.5.4.&#160;Camera&#160;Orientation</b><br/>
Both&#160;front-&#160;and&#160;rear-facing&#160;cameras,&#160;if&#160;present,&#160;MUST&#160;be&#160;oriented&#160;so&#160;that&#160;the&#160;long<br/>dimension&#160;of&#160;the&#160;camera&#160;aligns&#160;with&#160;the&#160;screen's&#160;long&#160;dimention.&#160;That&#160;is,&#160;when&#160;the<br/>device&#160;is&#160;held&#160;in&#160;the&#160;landscape&#160;orientation,&#160;cameras&#160;MUST&#160;capture&#160;images&#160;in&#160;the<br/>landscape&#160;orientation.&#160;This&#160;applies&#160;regardless&#160;of&#160;the&#160;device's&#160;natural&#160;orientation;&#160;that<br/>is,&#160;it&#160;applies&#160;to&#160;landscape-primary&#160;devices&#160;as&#160;wel&#160;&#160;as&#160;portrait-primary&#160;devices.<br/>
<b>7.6.&#160;Memory&#160;and&#160;Storage</b><br/>
<b>7.6.1.&#160;Minimum&#160;Memory&#160;and&#160;Storage</b><br/>
Device&#160;implementations&#160;MUST&#160;have&#160;at&#160;least&#160;340MB&#160;of&#160;memory&#160;available&#160;to&#160;the&#160;kernel<br/>and&#160;userspace.&#160;The&#160;340MB&#160;MUST&#160;be&#160;in&#160;addition&#160;to&#160;any&#160;memory&#160;dedicated&#160;to<br/>hardware&#160;components&#160;such&#160;as&#160;radio,&#160;video,&#160;and&#160;so&#160;on&#160;that&#160;is&#160;not&#160;under&#160;the&#160;kernel's<br/>control.<br/>
Device&#160;implementations&#160;MUST&#160;have&#160;at&#160;least&#160;350MB&#160;of&#160;non-volatile&#160;storage&#160;available<br/>for&#160;application&#160;private&#160;data.&#160;That&#160;is,&#160;the&#160;/data&#160;partition&#160;MUST&#160;be&#160;at&#160;least&#160;350MB.<br/>
The&#160;Android&#160;APIs&#160;include&#160;a&#160;Download&#160;Manager&#160;that&#160;applications&#160;may&#160;use&#160;to&#160;download<br/>data&#160;files&#160;[Resources,&#160;56].&#160;The&#160;device&#160;implementation&#160;of&#160;the&#160;Download&#160;Manager<br/>MUST&#160;be&#160;capable&#160;of&#160;downloading&#160;individual&#160;files&#160;of&#160;at&#160;least&#160;100MB&#160;in&#160;size&#160;to&#160;the<br/>default&#160;&#34;cache&#34;&#160;location.<br/>
<b>7.6.2.&#160;Application&#160;Shared&#160;Storage</b><br/>
Device&#160;implementations&#160;MUST&#160;offer&#160;shared&#160;storage&#160;for&#160;applications.&#160;The&#160;shared<br/>storage&#160;provided&#160;MUST&#160;be&#160;at&#160;least&#160;1GB&#160;in&#160;size.<br/>
Device&#160;implementations&#160;MUST&#160;be&#160;configured&#160;with&#160;shared&#160;storage&#160;mounted&#160;by&#160;default,<br/>&#34;out&#160;of&#160;the&#160;box&#34;.&#160;If&#160;the&#160;shared&#160;storage&#160;is&#160;not&#160;mounted&#160;on&#160;the&#160;Linux&#160;path&#160;/sdcard,&#160;then<br/>the&#160;device&#160;MUST&#160;include&#160;a&#160;Linux&#160;symbolic&#160;link&#160;from&#160;/sdcard&#160;to&#160;the&#160;actual&#160;mount&#160;point.<br/>
Device&#160;implementations&#160;MUST&#160;enforce&#160;as&#160;documented&#160;the<br/>
android.permission.WRITE_EXTERNAL_STORAGE&#160;permission&#160;on&#160;this&#160;shared&#160;storage.<br/>
Shared&#160;storage&#160;MUST&#160;otherwise&#160;be&#160;writable&#160;by&#160;any&#160;application&#160;that&#160;obtains&#160;that<br/>permission.<br/>
Device&#160;implementations&#160;MAY&#160;have&#160;hardware&#160;for&#160;user-accessible&#160;removable&#160;storage,<br/>such&#160;as&#160;a&#160;Secure&#160;Digital&#160;card.&#160;Alternatively,&#160;device&#160;implementations&#160;MAY&#160;al&#160;ocate<br/>internal&#160;(non-removable)&#160;storage&#160;as&#160;shared&#160;storage&#160;for&#160;apps.<br/>
<hr/>
<a name=30></a>Regardless&#160;of&#160;the&#160;form&#160;of&#160;shared&#160;storage&#160;used,&#160;device&#160;implementations&#160;MUST<br/>provide&#160;some&#160;mechanism&#160;to&#160;access&#160;the&#160;contents&#160;of&#160;shared&#160;storage&#160;from&#160;a&#160;host<br/>computer,&#160;such&#160;as&#160;USB&#160;mass&#160;storage&#160;(UMS)&#160;or&#160;Media&#160;Transfer&#160;Protocol&#160;(MTP).<br/>Device&#160;implementations&#160;MAY&#160;use&#160;USB&#160;mass&#160;storage,&#160;but&#160;SHOULD&#160;use&#160;Media<br/>Transfer&#160;Protocol.&#160;If&#160;the&#160;device&#160;implementation&#160;supports&#160;Media&#160;Transfer&#160;Protocol:<br/>
The&#160;device&#160;implementation&#160;SHOULD&#160;be&#160;compatible&#160;with&#160;the&#160;reference&#160;Android<br/>MTP&#160;host,&#160;Android&#160;File&#160;Transfer&#160;[R<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources57">esources,&#160;57].<br/></a>The&#160;device&#160;implementation&#160;SHOULD&#160;report&#160;a&#160;USB&#160;device&#160;class&#160;of&#160;0x00.<br/>The&#160;device&#160;implementation&#160;SHOULD&#160;report&#160;a&#160;USB&#160;interface&#160;name&#160;of&#160;'MTP'.<br/>
If&#160;the&#160;device&#160;implementation&#160;lacks&#160;USB&#160;ports,&#160;it&#160;MUST&#160;provide&#160;a&#160;host&#160;computer&#160;with<br/>access&#160;to&#160;the&#160;contents&#160;of&#160;shared&#160;storage&#160;by&#160;some&#160;other&#160;means,&#160;such&#160;as&#160;a&#160;network&#160;file<br/>system.<br/>
It&#160;is&#160;il&#160;ustrative&#160;to&#160;consider&#160;two&#160;common&#160;examples.&#160;If&#160;a&#160;device&#160;implementation&#160;includes<br/>an&#160;SD&#160;card&#160;slot&#160;to&#160;satisfy&#160;the&#160;shared&#160;storage&#160;requirement,&#160;a&#160;FAT-formatted&#160;SD&#160;card<br/>1GB&#160;in&#160;size&#160;or&#160;larger&#160;MUST&#160;be&#160;included&#160;with&#160;the&#160;device&#160;as&#160;sold&#160;to&#160;users,&#160;and&#160;MUST<br/>be&#160;mounted&#160;by&#160;default.&#160;Alternatively,&#160;if&#160;a&#160;device&#160;implementation&#160;uses&#160;internal&#160;fixed<br/>storage&#160;to&#160;satisfy&#160;this&#160;requirement,&#160;that&#160;storage&#160;MUST&#160;be&#160;1GB&#160;in&#160;size&#160;or&#160;larger&#160;and<br/>mounted&#160;on&#160;/sdcard&#160;(or&#160;/sdcard&#160;MUST&#160;be&#160;a&#160;symbolic&#160;link&#160;to&#160;the&#160;physical&#160;location&#160;if&#160;it<br/>is&#160;mounted&#160;elsewhere.)<br/>
Device&#160;implementations&#160;that&#160;include&#160;multiple&#160;shared&#160;storage&#160;paths&#160;(such&#160;as&#160;both&#160;an<br/>SD&#160;card&#160;slot&#160;and&#160;shared&#160;internal&#160;storage)&#160;SHOULD&#160;modify&#160;the&#160;core&#160;applications&#160;such<br/>as&#160;the&#160;media&#160;scanner&#160;and&#160;ContentProvider&#160;to&#160;transparently&#160;support&#160;files&#160;placed&#160;in&#160;both<br/>locations.<br/>
<b>7.7.&#160;USB</b><br/>
Device&#160;implementations&#160;SHOULD&#160;include&#160;a&#160;USB&#160;client&#160;port,&#160;and&#160;SHOULD&#160;include&#160;a<br/>USB&#160;host&#160;port.<br/>
If&#160;a&#160;device&#160;implementation&#160;includes&#160;a&#160;USB&#160;client&#160;port:<br/>
the&#160;port&#160;MUST&#160;be&#160;connectable&#160;to&#160;a&#160;USB&#160;host&#160;with&#160;a&#160;standard&#160;USB-A&#160;port<br/>the&#160;port&#160;SHOULD&#160;use&#160;the&#160;micro&#160;USB&#160;form&#160;factor&#160;on&#160;the&#160;device&#160;side.&#160;Existing<br/>and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are&#160;<b>very&#160;strongly&#160;encouraged&#160;to&#160;meet<br/>these&#160;requirements&#160;in&#160;Android&#160;4.1</b>&#160;so&#160;they&#160;wil&#160;&#160;be&#160;able&#160;to&#160;upgrade&#160;to&#160;the&#160;future<br/>platform&#160;releases<br/>the&#160;port&#160;SHOULD&#160;be&#160;centered&#160;in&#160;the&#160;middle&#160;of&#160;an&#160;edge.&#160;Device&#160;implementations<br/>SHOULD&#160;either&#160;locate&#160;the&#160;port&#160;on&#160;the&#160;bottom&#160;of&#160;the&#160;device&#160;(according&#160;to&#160;natural<br/>orientation)&#160;or&#160;enable&#160;software&#160;screen&#160;rotation&#160;for&#160;al&#160;&#160;apps&#160;(including&#160;home<br/>screen),&#160;so&#160;that&#160;the&#160;display&#160;draws&#160;correctly&#160;when&#160;the&#160;device&#160;is&#160;oriented&#160;with&#160;the<br/>port&#160;at&#160;bottom.&#160;Existing&#160;and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are&#160;<b>very&#160;strongly<br/>encouraged&#160;to&#160;meet&#160;these&#160;requirements&#160;in&#160;Android&#160;4.1</b>&#160;so&#160;they&#160;wil&#160;&#160;be&#160;able<br/>to&#160;upgrade&#160;to&#160;future&#160;platform&#160;releases.<br/>if&#160;the&#160;device&#160;has&#160;other&#160;ports&#160;(such&#160;as&#160;a&#160;non-USB&#160;charging&#160;port)&#160;it&#160;SHOULD&#160;be<br/>on&#160;the&#160;same&#160;edge&#160;as&#160;the&#160;micro-USB&#160;port<br/>it&#160;MUST&#160;al&#160;ow&#160;a&#160;host&#160;connected&#160;to&#160;the&#160;device&#160;to&#160;access&#160;the&#160;contents&#160;of&#160;the<br/>shared&#160;storage&#160;volume&#160;using&#160;either&#160;USB&#160;mass&#160;storage&#160;or&#160;Media&#160;Transfer<br/>Protocol<br/>it&#160;MUST&#160;implement&#160;the&#160;Android&#160;Open&#160;Accessory&#160;API&#160;and&#160;specification&#160;as<br/>documented&#160;in&#160;the&#160;Android&#160;SDK&#160;documentation,&#160;and&#160;MUST&#160;declare&#160;support&#160;for<br/>the&#160;hardware&#160;feature&#160;android.hardware.usb.accessory&#160;[Resources,&#160;52]<br/>it&#160;MUST&#160;implement&#160;the&#160;USB&#160;audio&#160;class&#160;as&#160;documented&#160;in&#160;the&#160;Android&#160;SDK<br/>documentation&#160;[Resources,&#160;66]<br/>it&#160;SHOULD&#160;implement&#160;support&#160;for&#160;USB&#160;battery&#160;charging&#160;spec<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources52">ification<br/></a>[Resources,&#160;64]&#160;Existing&#160;and&#160;new&#160;devices&#160;that&#160;run&#160;Android&#160;4.1&#160;are&#160;<b>very<br/>strongly&#160;encour<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources66">aged&#160;to&#160;meet&#160;th</a></b><b>ese&#160;requirements&#160;in&#160;Android&#160;4.1</b>&#160;so&#160;they<br/>wil&#160;&#160;be&#160;able&#160;to&#160;upgrade&#160;to&#160;the&#160;future&#160;platform&#160;releases<br/>
If&#160;a&#160;device&#160;implementation&#160;includes&#160;a&#160;USB&#160;host&#160;port:<br/>
it&#160;MAY&#160;use&#160;a&#160;non-standard&#160;port&#160;form&#160;factor,&#160;but&#160;if&#160;so&#160;MUST&#160;ship&#160;with&#160;a&#160;cable&#160;or<br/>cables&#160;adapting&#160;the&#160;port&#160;to&#160;standard&#160;USB-A<br/>it&#160;MUST&#160;implement&#160;the&#160;Android&#160;USB&#160;host&#160;API&#160;as&#160;documented&#160;in&#160;the&#160;Android<br/>SDK,&#160;and&#160;MUST&#160;declare&#160;support&#160;for&#160;the&#160;hardware&#160;feature<br/>
android.hardware.usb.host&#160;[Resources,&#160;53]<br/>
Device&#160;implementations&#160;MUST&#160;implement&#160;the&#160;Android&#160;Debug&#160;Bridge.&#160;If&#160;a&#160;device<br/>implementation&#160;omits&#160;a&#160;USB&#160;client&#160;port,&#160;it&#160;MUST&#160;implement&#160;the&#160;Android&#160;Debug&#160;Bridge<br/>via&#160;local-area&#160;network&#160;(such&#160;as&#160;Ethern<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources53">et&#160;or&#160;802.11)</a><br/>
<hr/>
<a name=31></a><b>8.&#160;Performance&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;meet&#160;the&#160;key&#160;performance&#160;metrics&#160;of&#160;an&#160;Android&#160;4.1<br/>compatible&#160;device&#160;defined&#160;in&#160;the&#160;table&#160;below:<br/>
<b>Metric</b><br/>
<b>Performance&#160;Threshold</b><br/>
<b>Comments</b><br/>
The&#160;fol&#160;owing&#160;applications<br/>should&#160;launch&#160;within&#160;the<br/>specified&#160;time.<br/>
The&#160;launch&#160;time&#160;is&#160;measured&#160;as&#160;the<br/>total&#160;time&#160;to&#160;complete&#160;loading&#160;the<br/>
Browser:&#160;less&#160;than<br/>
default&#160;activity&#160;for&#160;the&#160;application,<br/>
Application<br/>
1300ms<br/>
including&#160;the&#160;time&#160;it&#160;takes&#160;to&#160;start&#160;the<br/>
Launch&#160;Time<br/>
Contacts:&#160;less&#160;than<br/>
Linux&#160;process,&#160;load&#160;the&#160;Android<br/>
700ms<br/>
package&#160;into&#160;the&#160;Dalvik&#160;VM,&#160;and&#160;cal<br/>
Settings:&#160;less&#160;than<br/>
onCreate.<br/>
700ms<br/>
When&#160;multiple&#160;applications<br/>have&#160;been&#160;launched,&#160;re-<br/>launching&#160;an&#160;already-<br/>
Simultaneous<br/>
running&#160;application&#160;after&#160;it<br/>
&#160;<br/>
Applications<br/>
has&#160;been&#160;launched&#160;must<br/>take&#160;less&#160;than&#160;the&#160;original<br/>launch&#160;time.<br/>
<b>9.&#160;Security&#160;Model&#160;Compatibility</b><br/>
Device&#160;implementations&#160;MUST&#160;implement&#160;a&#160;security&#160;model&#160;consistent&#160;with&#160;the&#160;Android<br/>platform&#160;security&#160;model&#160;as&#160;defined&#160;in&#160;Security&#160;and&#160;Permissions&#160;reference&#160;document&#160;in<br/>the&#160;APIs&#160;[Resources,&#160;54]&#160;in&#160;the&#160;Android&#160;developer&#160;documentation.&#160;Device<br/>implementations&#160;MUST&#160;support&#160;instal&#160;ation&#160;of&#160;self-signed&#160;applications&#160;without<br/>requiring&#160;any&#160;additional&#160;permissions/certificates&#160;from&#160;any&#160;third&#160;parties/authorities.<br/>Specifical&#160;y,&#160;compatible&#160;devices&#160;MUST&#160;support&#160;the&#160;security&#160;mechanisms&#160;described&#160;in<br/>the&#160;fol&#160;ow&#160;sub-sections.<br/>
<b>9.1.&#160;Permissions</b><br/>
Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;Android&#160;permissions&#160;model&#160;as&#160;defined&#160;in<br/>the&#160;Android&#160;developer&#160;documentation&#160;[Resources,&#160;54].&#160;Specifical&#160;y,&#160;implementations<br/>MUST&#160;enforce&#160;each&#160;permission&#160;defined&#160;as&#160;described&#160;in&#160;the&#160;SDK&#160;documentation;&#160;no<br/>permissions&#160;may&#160;be&#160;omitted,&#160;altered,&#160;or&#160;i<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources54">gnored.&#160;Impleme</a>ntations&#160;MAY&#160;add&#160;additional<br/>permissions,&#160;provided&#160;the&#160;new&#160;permission&#160;ID&#160;strings&#160;are&#160;not&#160;in&#160;the&#160;android.*<br/>namespace.<br/>
<b>9.2.&#160;UID&#160;and&#160;Process&#160;Isolation</b><br/>
Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;Android&#160;application&#160;sandbox&#160;model,&#160;in<br/>which&#160;each&#160;application&#160;runs&#160;as&#160;a&#160;unique&#160;Unix-style&#160;UID&#160;and&#160;in&#160;a&#160;separate&#160;process.<br/>Device&#160;implementations&#160;MUST&#160;support&#160;running&#160;multiple&#160;applications&#160;as&#160;the&#160;same<br/>Linux&#160;user&#160;ID,&#160;provided&#160;that&#160;the&#160;applications&#160;are&#160;properly&#160;signed&#160;and&#160;constructed,&#160;as<br/>defined&#160;in&#160;the&#160;Security&#160;and&#160;Permissions&#160;reference&#160;[Resources,&#160;54].<br/>
<b>9.3.&#160;Filesystem&#160;Permissions</b><br/>
Device&#160;implementations&#160;MUST&#160;support&#160;the&#160;Android&#160;file&#160;access&#160;permissions&#160;model&#160;as<br/>defined&#160;in&#160;as&#160;defined&#160;in&#160;the&#160;Security&#160;and&#160;Permissions&#160;reference&#160;[Resources,&#160;54].<br/>
<b>9.4.&#160;Alternate&#160;Execution&#160;Environments</b><br/>
Device&#160;implementations&#160;MAY&#160;include&#160;runtime&#160;environments&#160;that&#160;execute&#160;applications<br/>using&#160;some&#160;other&#160;software&#160;or&#160;technology&#160;than&#160;the&#160;Dalvik&#160;virtual&#160;machine&#160;or&#160;native<br/>code.&#160;However,&#160;such&#160;alternate&#160;execution&#160;environments&#160;MUST&#160;NOT&#160;compromise&#160;the<br/>Android&#160;security&#160;model&#160;or&#160;the&#160;security&#160;of&#160;instal&#160;ed&#160;Android&#160;applications,&#160;as&#160;described<br/>in&#160;this&#160;section.<br/>
Alternate&#160;runtimes&#160;MUST&#160;themselves&#160;be&#160;Android&#160;applications,&#160;and&#160;abide&#160;by&#160;the<br/>standard&#160;Android&#160;security&#160;model,&#160;as&#160;described&#160;elsewhere&#160;in&#160;Section&#160;9.<br/>
Alternate&#160;runtimes&#160;MUST&#160;NOT&#160;be&#160;granted&#160;access&#160;to&#160;resources&#160;protected&#160;by<br/>permissions&#160;not&#160;requested&#160;in&#160;the&#160;runtime's&#160;AndroidManifest.xml&#160;file&#160;via&#160;the&#160;&lt;uses-<br/>
permission&gt;&#160;mechanism.<br/>
<hr/>
<a name=32></a>Alternate&#160;runtimes&#160;MUST&#160;NOT&#160;permit&#160;applications&#160;to&#160;make&#160;use&#160;of&#160;features&#160;protected<br/>by&#160;Android&#160;permissions&#160;restricted&#160;to&#160;system&#160;applications.<br/>
Alternate&#160;runtimes&#160;MUST&#160;abide&#160;by&#160;the&#160;Android&#160;sandbox&#160;model.&#160;Specifical&#160;y:<br/>
Alternate&#160;runtimes&#160;SHOULD&#160;instal&#160;&#160;apps&#160;via&#160;the&#160;PackageManager&#160;into&#160;separate<br/>Android&#160;sandboxes&#160;(that&#160;is,&#160;Linux&#160;user&#160;IDs,&#160;etc.)<br/>Alternate&#160;runtimes&#160;MAY&#160;provide&#160;a&#160;single&#160;Android&#160;sandbox&#160;shared&#160;by&#160;al<br/>applications&#160;using&#160;the&#160;alternate&#160;runtime<br/>Alternate&#160;runtimes&#160;and&#160;instal&#160;ed&#160;applications&#160;using&#160;an&#160;alternate&#160;runtime&#160;MUST<br/>NOT&#160;reuse&#160;the&#160;sandbox&#160;of&#160;any&#160;other&#160;app&#160;instal&#160;ed&#160;on&#160;the&#160;device,&#160;except&#160;through<br/>the&#160;standard&#160;Android&#160;mechanisms&#160;of&#160;shared&#160;user&#160;ID&#160;and&#160;signing&#160;certificate<br/>Alternate&#160;runtimes&#160;MUST&#160;NOT&#160;launch&#160;with,&#160;grant,&#160;or&#160;be&#160;granted&#160;access&#160;to&#160;the<br/>sandboxes&#160;corresponding&#160;to&#160;other&#160;Android&#160;applications<br/>
Alternate&#160;runtimes&#160;MUST&#160;NOT&#160;be&#160;launched&#160;with,&#160;be&#160;granted,&#160;or&#160;grant&#160;to&#160;other<br/>applications&#160;any&#160;privileges&#160;of&#160;the&#160;superuser&#160;(root),&#160;or&#160;of&#160;any&#160;other&#160;user&#160;ID.<br/>
The&#160;.apk&#160;files&#160;of&#160;alternate&#160;runtimes&#160;MAY&#160;be&#160;included&#160;in&#160;the&#160;system&#160;image&#160;of&#160;a&#160;device<br/>implementation,&#160;but&#160;MUST&#160;be&#160;signed&#160;with&#160;a&#160;key&#160;distinct&#160;from&#160;the&#160;key&#160;used&#160;to&#160;sign&#160;other<br/>applications&#160;included&#160;with&#160;the&#160;device&#160;implementation.<br/>
When&#160;instal&#160;ing&#160;applications,&#160;alternate&#160;runtimes&#160;MUST&#160;obtain&#160;user&#160;consent&#160;for&#160;the<br/>Android&#160;permissions&#160;used&#160;by&#160;the&#160;application.&#160;That&#160;is,&#160;if&#160;an&#160;application&#160;needs&#160;to&#160;make<br/>use&#160;of&#160;a&#160;device&#160;resource&#160;for&#160;which&#160;there&#160;is&#160;a&#160;corresponding&#160;Android&#160;permission&#160;(such<br/>as&#160;Camera,&#160;GPS,&#160;etc.),&#160;the&#160;alternate&#160;runtime&#160;MUST&#160;inform&#160;the&#160;user&#160;that&#160;the&#160;application<br/>wil&#160;&#160;be&#160;able&#160;to&#160;access&#160;that&#160;resource.&#160;If&#160;the&#160;runtime&#160;environment&#160;does&#160;not&#160;record<br/>application&#160;capabilities&#160;in&#160;this&#160;manner,&#160;the&#160;runtime&#160;environment&#160;MUST&#160;list&#160;al<br/>permissions&#160;held&#160;by&#160;the&#160;runtime&#160;itself&#160;when&#160;instal&#160;ing&#160;any&#160;application&#160;using&#160;that&#160;runtime.<br/>
<b>10.&#160;Software&#160;Compatibility&#160;Testing</b><br/>
Device&#160;implementations&#160;MUST&#160;pass&#160;al&#160;&#160;tests&#160;described&#160;in&#160;this&#160;section.<br/>
However,&#160;note&#160;that&#160;no&#160;software&#160;test&#160;package&#160;is&#160;ful&#160;y&#160;comprehensive.&#160;For&#160;this&#160;reason,<br/>device&#160;implementers&#160;are&#160;very&#160;strongly&#160;encouraged&#160;to&#160;make&#160;the&#160;minimum&#160;number&#160;of<br/>changes&#160;as&#160;possible&#160;to&#160;the&#160;reference&#160;and&#160;preferred&#160;implementation&#160;of&#160;Android&#160;4.1<br/>available&#160;from&#160;the&#160;Android&#160;Open&#160;Source&#160;Project.&#160;This&#160;wil&#160;&#160;minimize&#160;the&#160;risk&#160;of<br/>introducing&#160;bugs&#160;that&#160;create&#160;incompatibilities&#160;requiring&#160;rework&#160;and&#160;potential&#160;device<br/>updates.<br/>
<b>10.1.&#160;Compatibility&#160;Test&#160;Suite</b><br/>
Device&#160;implementations&#160;MUST&#160;pass&#160;the&#160;Android&#160;Compatibility&#160;Test&#160;Suite&#160;(CTS)<br/>[Resources,&#160;2]&#160;available&#160;from&#160;the&#160;Android&#160;Open&#160;Source&#160;Project,&#160;using&#160;the&#160;final<br/>shipping&#160;software&#160;on&#160;the&#160;device.&#160;Additional&#160;y,&#160;device&#160;implementers&#160;SHOULD&#160;use&#160;the<br/>r<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources02">eference&#160;imple</a>mentation&#160;in&#160;the&#160;Android&#160;Open&#160;Source&#160;tree&#160;as&#160;much&#160;as&#160;possible,&#160;and<br/>MUST&#160;ensure&#160;compatibility&#160;in&#160;cases&#160;of&#160;ambiguity&#160;in&#160;CTS&#160;and&#160;for&#160;any<br/>reimplementations&#160;of&#160;parts&#160;of&#160;the&#160;reference&#160;source&#160;code.<br/>
The&#160;CTS&#160;is&#160;designed&#160;to&#160;be&#160;run&#160;on&#160;an&#160;actual&#160;device.&#160;Like&#160;any&#160;software,&#160;the&#160;CTS&#160;may<br/>itself&#160;contain&#160;bugs.&#160;The&#160;CTS&#160;wil&#160;&#160;be&#160;versioned&#160;independently&#160;of&#160;this&#160;Compatibility<br/>Definition,&#160;and&#160;multiple&#160;revisions&#160;of&#160;the&#160;CTS&#160;may&#160;be&#160;released&#160;for&#160;Android&#160;4.1.&#160;Device<br/>implementations&#160;MUST&#160;pass&#160;the&#160;latest&#160;CTS&#160;version&#160;available&#160;at&#160;the&#160;time&#160;the&#160;device<br/>software&#160;is&#160;completed.<br/>
<b>10.2.&#160;CTS&#160;Verifier</b><br/>
Device&#160;implementations&#160;MUST&#160;correctly&#160;execute&#160;al&#160;&#160;applicable&#160;cases&#160;in&#160;the&#160;CTS<br/>Verifier.&#160;The&#160;CTS&#160;Verifier&#160;is&#160;included&#160;with&#160;the&#160;Compatibility&#160;Test&#160;Suite,&#160;and&#160;is&#160;intended<br/>to&#160;be&#160;run&#160;by&#160;a&#160;human&#160;operator&#160;to&#160;test&#160;functionality&#160;that&#160;cannot&#160;be&#160;tested&#160;by&#160;an<br/>automated&#160;system,&#160;such&#160;as&#160;correct&#160;functioning&#160;of&#160;a&#160;camera&#160;and&#160;sensors.<br/>
The&#160;CTS&#160;Verifier&#160;has&#160;tests&#160;for&#160;many&#160;kinds&#160;of&#160;hardware,&#160;including&#160;some&#160;hardware&#160;that<br/>is&#160;optional.&#160;Device&#160;implementations&#160;MUST&#160;pass&#160;al&#160;&#160;tests&#160;for&#160;hardware&#160;which&#160;they<br/>possess;&#160;for&#160;instance,&#160;if&#160;a&#160;device&#160;possesses&#160;an&#160;accelerometer,&#160;it&#160;MUST&#160;correctly<br/>execute&#160;the&#160;Accelerometer&#160;test&#160;case&#160;in&#160;the&#160;CTS&#160;Verifier.&#160;Test&#160;cases&#160;for&#160;features&#160;noted<br/>as&#160;optional&#160;by&#160;this&#160;Compatibility&#160;Definition&#160;Document&#160;MAY&#160;be&#160;skipped&#160;or&#160;omitted.<br/>
Every&#160;device&#160;and&#160;every&#160;build&#160;MUST&#160;correctly&#160;run&#160;the&#160;CTS&#160;Verifier,&#160;as&#160;noted&#160;above.<br/>However,&#160;since&#160;many&#160;builds&#160;are&#160;very&#160;similar,&#160;device&#160;implementers&#160;are&#160;not&#160;expected&#160;to<br/>explicitly&#160;run&#160;the&#160;CTS&#160;Verifier&#160;on&#160;builds&#160;that&#160;differ&#160;only&#160;in&#160;trivial&#160;ways.&#160;Specifical&#160;y,<br/>device&#160;implementations&#160;that&#160;differ&#160;from&#160;an&#160;implementation&#160;that&#160;has&#160;passed&#160;the&#160;CTS<br/>Verfier&#160;only&#160;by&#160;the&#160;set&#160;of&#160;included&#160;locales,&#160;branding,&#160;etc.&#160;MAY&#160;omit&#160;the&#160;CTS&#160;Verifier<br/>
<hr/>
<a name=33></a>test.<br/>
<b>10.3.&#160;Reference&#160;Applications</b><br/>
Device&#160;implementers&#160;MUST&#160;test&#160;implementation&#160;compatibility&#160;using&#160;the&#160;fol&#160;owing&#160;open<br/>source&#160;applications:<br/>
The&#160;&#34;Apps&#160;for&#160;Android&#34;&#160;applications&#160;[Re<a href="file:///usr/local/google/home/gurunagarajan/android_dev/master/vendor/android/compatibility/cdd/jb/cdd-jb.xhtml#resources55">sources,&#160;55]<br/></a>Replica&#160;Island&#160;(available&#160;in&#160;Android&#160;Market)<br/>
Each&#160;app&#160;above&#160;MUST&#160;launch&#160;and&#160;behave&#160;correctly&#160;on&#160;the&#160;implementation,&#160;for&#160;the<br/>implementation&#160;to&#160;be&#160;considered&#160;compatible.<br/>
<b>11.&#160;Updatable&#160;Software</b><br/>
Device&#160;implementations&#160;MUST&#160;include&#160;a&#160;mechanism&#160;to&#160;replace&#160;the&#160;entirety&#160;of&#160;the<br/>system&#160;software.&#160;The&#160;mechanism&#160;need&#160;not&#160;perform&#160;&#34;live&#34;&#160;upgrades&#160;-&#160;that&#160;is,&#160;a&#160;device<br/>restart&#160;MAY&#160;be&#160;required.<br/>
Any&#160;method&#160;can&#160;be&#160;used,&#160;provided&#160;that&#160;it&#160;can&#160;replace&#160;the&#160;entirety&#160;of&#160;the&#160;software<br/>preinstal&#160;ed&#160;on&#160;the&#160;device.&#160;For&#160;instance,&#160;any&#160;of&#160;the&#160;fol&#160;owing&#160;approaches&#160;wil&#160;&#160;satisfy<br/>this&#160;requirement:<br/>
Over-the-air&#160;(OTA)&#160;downloads&#160;with&#160;offline&#160;update&#160;via&#160;reboot<br/>&#34;Tethered&#34;&#160;updates&#160;over&#160;USB&#160;from&#160;a&#160;host&#160;PC<br/>&#34;Offline&#34;&#160;updates&#160;via&#160;a&#160;reboot&#160;and&#160;update&#160;from&#160;a&#160;file&#160;on&#160;removable&#160;storage<br/>
The&#160;update&#160;mechanism&#160;used&#160;MUST&#160;support&#160;updates&#160;without&#160;wiping&#160;user&#160;data.&#160;That&#160;is,<br/>the&#160;update&#160;mechanism&#160;MUST&#160;preserve&#160;application&#160;private&#160;data&#160;and&#160;application<br/>shared&#160;data.&#160;Note&#160;that&#160;the&#160;upstream&#160;Android&#160;software&#160;includes&#160;an&#160;update&#160;mechanism<br/>that&#160;satisfies&#160;this&#160;requirement.<br/>
If&#160;an&#160;error&#160;is&#160;found&#160;in&#160;a&#160;device&#160;implementation&#160;after&#160;it&#160;has&#160;been&#160;released&#160;but&#160;within&#160;its<br/>reasonable&#160;product&#160;lifetime&#160;that&#160;is&#160;determined&#160;in&#160;consultation&#160;with&#160;the&#160;Android<br/>Compatibility&#160;Team&#160;to&#160;affect&#160;the&#160;compatibility&#160;of&#160;third-party&#160;applications,&#160;the&#160;device<br/>implementer&#160;MUST&#160;correct&#160;the&#160;error&#160;via&#160;a&#160;software&#160;update&#160;available&#160;that&#160;can&#160;be<br/>applied&#160;per&#160;the&#160;mechanism&#160;just&#160;described.<br/>
<b>12.&#160;Contact&#160;Us</b><br/>
You&#160;can&#160;contact&#160;the&#160;document&#160;authors&#160;at&#160;compatibility@android.com&#160;for&#160;clarifications<br/>and&#160;to&#160;bring&#160;up&#160;any&#160;issues&#160;that&#160;you&#160;think&#160;the&#160;document&#160;does&#160;not&#160;cover.<br/>
<hr/>
<a name=34></a><b>Appendix&#160;A&#160;-&#160;Bluetooth&#160;Test&#160;Procedure</b><br/>
The&#160;Compatibility&#160;Test&#160;Suite&#160;includes&#160;cases&#160;that&#160;cover&#160;basic&#160;operation&#160;of&#160;the&#160;Android<br/>RFCOMM&#160;Bluetooth&#160;API.&#160;However,&#160;since&#160;Bluetooth&#160;is&#160;a&#160;communications&#160;protocol<br/>between&#160;devices,&#160;it&#160;cannot&#160;be&#160;ful&#160;y&#160;tested&#160;by&#160;unit&#160;tests&#160;running&#160;on&#160;a&#160;single&#160;device.<br/>Consequently,&#160;device&#160;implementations&#160;MUST&#160;also&#160;pass&#160;the&#160;human-operated&#160;Bluetooth<br/>test&#160;procedure&#160;described&#160;below.<br/>
The&#160;test&#160;procedure&#160;is&#160;based&#160;on&#160;the&#160;BluetoothChat&#160;sample&#160;app&#160;included&#160;in&#160;the&#160;Android<br/>open&#160;source&#160;project&#160;tree.&#160;The&#160;procedure&#160;requires&#160;two&#160;devices:<br/>
a&#160;candidate&#160;device&#160;implementation&#160;running&#160;the&#160;software&#160;build&#160;to&#160;be&#160;tested<br/>a&#160;separate&#160;device&#160;implementation&#160;already&#160;known&#160;to&#160;be&#160;compatible,&#160;and&#160;of&#160;a<br/>model&#160;from&#160;the&#160;device&#160;implementation&#160;being&#160;tested&#160;-&#160;that&#160;is,&#160;a&#160;&#34;known&#160;good&#34;<br/>device&#160;implementation<br/>
The&#160;test&#160;procedure&#160;below&#160;refers&#160;to&#160;these&#160;devices&#160;as&#160;the&#160;&#34;candidate&#34;&#160;and&#160;&#34;known<br/>good&#34;&#160;devices,&#160;respectively.<br/>
<b>Setup&#160;and&#160;Installation</b><br/>
1.&#160;&#160;Build&#160;BluetoothChat.apk&#160;via&#160;'make&#160;samples'&#160;from&#160;an&#160;Android&#160;source&#160;code&#160;tree<br/>2.&#160;&#160;Instal&#160;&#160;BluetoothChat.apk&#160;on&#160;the&#160;known-good&#160;device<br/>3.&#160;&#160;Instal&#160;&#160;BluetoothChat.apk&#160;on&#160;the&#160;candidate&#160;device<br/>
<b>Test&#160;Bluetooth&#160;Control&#160;by&#160;Apps</b><br/>
1.&#160;&#160;Launch&#160;BluetoothChat&#160;on&#160;the&#160;candidate&#160;device,&#160;while&#160;Bluetooth&#160;is&#160;disabled<br/>2.&#160;&#160;Verify&#160;that&#160;the&#160;candidate&#160;device&#160;either&#160;turns&#160;on&#160;Bluetooth,&#160;or&#160;prompts&#160;the&#160;user<br/>
with&#160;a&#160;dialog&#160;to&#160;turn&#160;on&#160;Bluetooth<br/>
<b>Test&#160;Pairing&#160;and&#160;Communication</b><br/>
1.&#160;&#160;Launch&#160;the&#160;Bluetooth&#160;Chat&#160;app&#160;on&#160;both&#160;devices<br/>2.&#160;&#160;Make&#160;the&#160;known-good&#160;device&#160;discoverable&#160;from&#160;within&#160;BluetoothChat&#160;(using&#160;the<br/>
Menu)<br/>
3.&#160;&#160;On&#160;the&#160;candidate&#160;device,&#160;scan&#160;for&#160;Bluetooth&#160;devices&#160;from&#160;within&#160;BluetoothChat<br/>
(using&#160;the&#160;Menu)&#160;and&#160;pair&#160;with&#160;the&#160;known-good&#160;device<br/>
4.&#160;&#160;Send&#160;10&#160;or&#160;more&#160;messages&#160;from&#160;each&#160;device,&#160;and&#160;verify&#160;that&#160;the&#160;other&#160;device<br/>
receives&#160;them&#160;correctly<br/>
5.&#160;&#160;Close&#160;the&#160;BluetoothChat&#160;app&#160;on&#160;both&#160;devices&#160;by&#160;pressing&#160;<b>Home<br/></b>6.&#160;&#160;Unpair&#160;each&#160;device&#160;from&#160;the&#160;other,&#160;using&#160;the&#160;device&#160;Settings&#160;app<br/>
<b>Test&#160;Pairing&#160;and&#160;Communication&#160;in&#160;the&#160;Reverse</b><br/>
<b>Direction</b><br/>
1.&#160;&#160;Launch&#160;the&#160;Bluetooth&#160;Chat&#160;app&#160;on&#160;both&#160;devices.<br/>2.&#160;&#160;Make&#160;the&#160;candidate&#160;device&#160;discoverable&#160;from&#160;within&#160;BluetoothChat&#160;(using&#160;the<br/>
Menu).<br/>
3.&#160;&#160;On&#160;the&#160;known-good&#160;device,&#160;scan&#160;for&#160;Bluetooth&#160;devices&#160;from&#160;within&#160;BluetoothChat<br/>
(using&#160;the&#160;Menu)&#160;and&#160;pair&#160;with&#160;the&#160;candidate&#160;device.<br/>
4.&#160;&#160;Send&#160;10&#160;or&#160;messages&#160;from&#160;each&#160;device,&#160;and&#160;verify&#160;that&#160;the&#160;other&#160;device<br/>
receives&#160;them&#160;correctly.<br/>
5.&#160;&#160;Close&#160;the&#160;Bluetooth&#160;Chat&#160;app&#160;on&#160;both&#160;devices&#160;by&#160;pressing&#160;Back&#160;repeatedly&#160;to<br/>
get&#160;to&#160;the&#160;Launcher.<br/>
<b>Test&#160;Re-Launches</b><br/>
1.&#160;&#160;Re-launch&#160;the&#160;Bluetooth&#160;Chat&#160;app&#160;on&#160;both&#160;devices.<br/>2.&#160;&#160;Send&#160;10&#160;or&#160;messages&#160;from&#160;each&#160;device,&#160;and&#160;verify&#160;that&#160;the&#160;other&#160;device<br/>
receives&#160;them&#160;correctly.<br/>
Note:&#160;the&#160;above&#160;tests&#160;have&#160;some&#160;cases&#160;which&#160;end&#160;a&#160;test&#160;section&#160;by&#160;using&#160;Home,&#160;and<br/>some&#160;using&#160;Back.&#160;These&#160;tests&#160;are&#160;not&#160;redundant&#160;and&#160;are&#160;not&#160;optional:&#160;the&#160;objective&#160;is<br/>to&#160;verify&#160;that&#160;the&#160;Bluetooth&#160;API&#160;and&#160;stack&#160;works&#160;correctly&#160;both&#160;when&#160;Activities&#160;are<br/>explicitly&#160;terminated&#160;(via&#160;the&#160;user&#160;pressing&#160;Back,&#160;which&#160;cal&#160;s&#160;finish()),&#160;and&#160;implicitly&#160;sent<br/>to&#160;background&#160;(via&#160;the&#160;user&#160;pressing&#160;Home.)&#160;Each&#160;test&#160;sequence&#160;MUST&#160;be&#160;performed<br/>as&#160;described.<br/>
<hr/>
</body>
</html>