upload android base code part8

This commit is contained in:
August 2018-08-08 20:10:12 +08:00
parent 841ae54672
commit 5425409085
57075 changed files with 9846578 additions and 0 deletions

View file

@ -0,0 +1,52 @@
# HOW TO UPDATE SOURCE.ANDROID.COM #
Googlers, please see: go/sac-guide
The source.android.com site contains tutorials, references, and other
information related to the Android Open Source Project (AOSP). To report an
issue with the documentation on source.android.com, please file a bug at:
https://issuetracker.google.com/issues/new?component=191476
To make updates to the source files themselves, follow the instructions below.
### File Location ###
The source.android.com source files are stored in the platform/docs/source.android.com/
Android project:
https://android.googlesource.com/platform/docs/source.android.com/
The files to be edited are located in: <projroot>/docs/source.android.com/<language-code>/
Subdirectories exist for the tabs of source.android.com with their structure
roughly (but not identically) mirroring navigation of the site. For exceptions,
the contents of the Porting tab can be found in the devices/ subdirectory,
while the contents of the Tuning tab reside in the devices/tech subdirectory.
(This is temporary while navigational changes are underway.)
## Edit Instructions ##
1. Initialize and sync the repository and download the Android source per:
https://source.android.com/source/downloading.html
2. Navigate to the docs/source.android.com project.
3. Start a temporary branch for your changes with a command resembling:
$ repo start <topic-branch-name> .
See the Repo command reference for more details:
http://source.android.com/source/using-repo.html#start
4. Add or edit the file(s) and save your changes:
$ git add <file>
$ git commit
$ repo upload .
5. Iteratively improve the change and amend the commit:
$ git commit -a --amend
$ repo upload .
6. Once satisfied, include the changelist in a bug filed at:
https://issuetracker.google.com/issues/new?component=191476
Your change will be routed to the source.android.com team for evaluation and
inclusion.

View file

@ -0,0 +1,37 @@
upper_tabs:
- name: Source
lower_tabs:
other:
- name: Source
contents:
- include: /source/_toc.yaml
- name: Security
lower_tabs:
other:
- name: Security
contents:
- include: /security/_toc.yaml
- name: Porting
lower_tabs:
other:
- name: Porting
contents:
- include: /devices/_toc-interfaces.yaml
- name: Tuning
lower_tabs:
other:
- name: Tuning
contents:
- include: /devices/_toc-tech.yaml
- name: Compatibility
lower_tabs:
other:
- name: Compatibility
contents:
- include: /compatibility/_toc-compatibility.yaml
- name: Reference
lower_tabs:
other:
- name: Reference
contents:
- include: /reference/_toc.yaml

View file

@ -0,0 +1,91 @@
project_path: /_project.yaml
book_path: /_book.yaml
landing_page:
header:
buttons:
- label: Get source
path: /source/downloading
rows:
- items:
- heading: Android 7.1 updates!
description: >
Port the latest Android platform to create compelling
devices for your customers.
<style>
.devsite-feedback-button {
display: none;
}
/* blank bg color for landing images in first row */
.devsite-landing-row:first-of-type .devsite-landing-row-item-image {
background: none;
}
</style>
buttons:
- label: Update now
path: /devices/
image_path: /images/landing_icon-porting.png
- heading: Securing Android is essential
description: >
Find out how the Android security program works and learn how to
implement the latest features.
image_path: /images/landing_icon-security.png
buttons:
- label: Learn more
path: /security/
- heading: Get compatible, get apps
description: >
Offer a consistent experience with other Android-powered devices and
get the ability to include more apps.
image_path: /images/landing_icon-compatibility.png
buttons:
- label: Test devices
path: /compatibility/
- classname: devsite-landing-row-large-headings devsite-landing-row-no-image-background tf-about-row devsite-landing-row-75
background: grey
items:
- heading: About the Android Open Source Project
description: |
Android is an open source software stack for a wide range of mobile
devices and a corresponding open source project led by Google. This
site and the Android Open Source Project (AOSP) repository offer the
information and source code you need to create custom variants of the
Android stack, port devices and accessories to the Android platform,
and ensure your devices meet compatibility requirements.
We also wanted to make sure there was no central point of failure,
where one industry player could restrict or control the innovations of
any other. The result is a full, production-quality operating system
for consumer products with source code open for customization and
porting.
image_path: /images/android_stack.png
- heading: News
items:
- heading: Revised ART Configuration and JIT Compilation
description: >
The Android runtime (ART) configuration and JIT compilation
instructions have been updated to reflect the Android O release.
buttons:
- label: July 12th, 2017
path: /devices/tech/dalvik/configure
- heading: July Android Security Bulletin
description: >
The July 2017 Android Security Bulletin has been published along with
links to associated fixes and new build numbers to support the July
Android security release.
buttons:
- label: July 6th, 2017
path: /security/bulletin/2017-07-01
- heading: Updated Debugging Docs
description: >
Debugging documentation has been updated with details on using
<code>debuggerd</code> (includes new examples), <code>stack</code>,
<code>strace</code>, and <code>Valgrind</code> tools.
buttons:
- label: June 5th, 2017
path: /devices/tech/debug/
- classname: devsite-landing-row-100 tf-row-centered
items:
- buttons:
- classname: button button-primary
label: More Updates
path: https://android.googlesource.com/platform/docs/source.android.com/+log/master?no-merges

View file

@ -0,0 +1,934 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<title>Android 1.6 Compatibility Definition</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="generator" content="pdftohtml 0.36"/>
<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>
<body>
<a name=1></a><b>Android Compatibility Definition: Android 1.6</b><br/>
Android 1.6 r2<br/>
Google Inc.<br/>
<a href="mailto:compatibility@android.com">compatibility@android.com</a><br/>
<hr/>
<a name=2></a><b>Table of Contents</b><br/>
<a href="android-1.6-cdd.html#4"><b>1. Introduction&#160;...................................................................................................................&#160;4<br/>2. Resources&#160;......................................................................................................................&#160;4<br/></b></a><a href="android-1.6-cdd.html#5"><b>3. Software&#160;.........................................................................................................................&#160;5</b></a><br/>
<a href="android-1.6-cdd.html#5"><b>3.1. Managed API Compatibility&#160;...................................................................................&#160;5<br/></b></a><a href="android-1.6-cdd.html#6"><b>3.2. Soft API Compatibility&#160;............................................................................................&#160;6</b></a><br/>
<a href="android-1.6-cdd.html#6"><b>3.2.1. Permissions......................................................................................................&#160;6<br/>3.2.2. Build Parameters&#160;.............................................................................................&#160;6<br/></b></a><a href="android-1.6-cdd.html#8"><b>3.2.3. Intent Compatibility..........................................................................................&#160;8</b></a><br/>
<a href="android-1.6-cdd.html#8"><b>3.2.3.1. Core Application Intents&#160;...........................................................................&#160;8<br/>3.2.3.2. Intent Overrides&#160;.........................................................................................&#160;8<br/>3.2.3.3. Intent Namespaces....................................................................................&#160;8<br/></b></a><a href="android-1.6-cdd.html#9"><b>3.2.3.4. Broadcast Intents&#160;......................................................................................&#160;9</b></a><br/>
<a href="android-1.6-cdd.html#9"><b>3.3. Native API Compatibility&#160;........................................................................................&#160;9<br/>3.4. Web API Compatibility&#160;...........................................................................................&#160;9<br/></b></a><a href="android-1.6-cdd.html#10"><b>3.5. API Behavioral Compatibility...............................................................................&#160;10<br/>3.6. API Namespaces...................................................................................................&#160;10<br/></b></a><a href="android-1.6-cdd.html#11"><b>3.7. Virtual Machine Compatibility&#160;.............................................................................&#160;11<br/>3.8. User Interface Compatibility&#160;................................................................................&#160;11</b></a><br/>
<a href="android-1.6-cdd.html#11"><b>3.8.1. Widgets&#160;...........................................................................................................&#160;11<br/></b></a><a href="android-1.6-cdd.html#12"><b>3.8.2. Notifications&#160;...................................................................................................&#160;12<br/>3.8.3. Search&#160;.............................................................................................................&#160;12<br/>3.8.4. Toasts..............................................................................................................&#160;12</b></a><br/>
<a href="android-1.6-cdd.html#12"><b>4. Reference Software Compatibility&#160;.............................................................................&#160;12<br/></b></a><a href="android-1.6-cdd.html#13"><b>5. Application Packaging Compatibility&#160;........................................................................&#160;13<br/>6. Multimedia Compatibility............................................................................................&#160;13<br/></b></a><a href="android-1.6-cdd.html#14"><b>7. Developer Tool Compatibility.....................................................................................&#160;14<br/></b></a><a href="android-1.6-cdd.html#15"><b>8. Hardware Compatibility&#160;..............................................................................................&#160;15</b></a><br/>
<a href="android-1.6-cdd.html#15"><b>8.1. Display&#160;...................................................................................................................&#160;15</b></a><br/>
<a href="android-1.6-cdd.html#15"><b>8.1.1. Standard Display Configurations&#160;.................................................................&#160;15<br/></b></a><a href="android-1.6-cdd.html#16"><b>8.1.2. Non-Standard Display Configurations&#160;.........................................................&#160;16<br/>8.1.3. Display Metrics...............................................................................................&#160;16</b></a><br/>
<a href="android-1.6-cdd.html#16"><b>8.2. Keyboard&#160;...............................................................................................................&#160;16<br/>8.3. Non-touch Navigation&#160;..........................................................................................&#160;16<br/></b></a><a href="android-1.6-cdd.html#17"><b>8.4. Screen Orientation................................................................................................&#160;17<br/>8.5. Touchscreen input................................................................................................&#160;17<br/>8.6. USB&#160;........................................................................................................................&#160;17<br/>8.7. Navigation keys&#160;....................................................................................................&#160;17<br/>8.8. WiFi&#160;........................................................................................................................&#160;17<br/></b></a><a href="android-1.6-cdd.html#18"><b>8.9. Camera&#160;..................................................................................................................&#160;18</b></a><br/>
<a href="android-1.6-cdd.html#18"><b>8.9.1. Non-Autofocus Cameras&#160;...............................................................................&#160;18</b></a><br/>
<a href="android-1.6-cdd.html#18"><b>8.10. Accelerometer.....................................................................................................&#160;18<br/></b></a><a href="android-1.6-cdd.html#19"><b>8.11. Compass&#160;.............................................................................................................&#160;19<br/>8.12. GPS&#160;......................................................................................................................&#160;19<br/>8.13. Telephony............................................................................................................&#160;19<br/>8.14. Volume controls..................................................................................................&#160;19</b></a><br/>
<a href="android-1.6-cdd.html#19"><b>9. Performance Compatibility.........................................................................................&#160;19<br/></b></a><a href="android-1.6-cdd.html#20"><b>10. Security Model Compatibility&#160;...................................................................................&#160;20</b></a><br/>
<a href="android-1.6-cdd.html#20"><b>10.1. Permissions&#160;........................................................................................................&#160;20<br/>10.2. User and Process Isolation&#160;...............................................................................&#160;20<br/></b></a><a href="android-1.6-cdd.html#21"><b>10.3. Filesystem Permissions.....................................................................................&#160;21</b></a><br/>
<a href="android-1.6-cdd.html#21"><b>11. Compatibility Test Suite&#160;...........................................................................................&#160;21</b></a><br/>
<hr/>
<a name=3></a><a href="android-1.6-cdd.html#21"><b>12. Contact Us&#160;.................................................................................................................&#160;21<br/></b></a><a href="android-1.6-cdd.html#22"><b>Appendix A: Required Application Intents&#160;...................................................................&#160;22<br/></b></a><b>Appendix B: Required Broadcast Intents&#160;.......................................................................&#160;0<br/>Appendix C: Future Considerations................................................................................&#160;0</b><br/>
<a href="android-1.6-cdd.html#30"><b>1. Non-telephone Devices&#160;...........................................................................................&#160;30<br/>2. Bluetooth Compatibility&#160;..........................................................................................&#160;30<br/>3. Required Hardware Components...........................................................................&#160;30<br/>4. Sample Applications&#160;...............................................................................................&#160;30<br/>5. Touch Screens&#160;.........................................................................................................&#160;30<br/></b></a><a href="android-1.6-cdd.html#31"><b>6. Performance.............................................................................................................&#160;31</b></a><br/>
<hr/>
<a name=4></a><b>1. Introduction</b><br/>
This document enumerates the requirements that must be met in order for mobile phones to be<br/>compatible with Android 1.6. This definition assumes familiarity with the Android Compatibility Program<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 1].</a><br/>
The use of&#160;&#34;must&#34;, &#34;must not&#34;, &#34;required&#34;, &#34;shall&#34;, &#34;shall not&#34;, &#34;should&#34;, &#34;should not&#34;, &#34;recommended&#34;,<br/>&#34;may&#34; and &#34;optional&#34; is per the IETF standard defined in RFC2119&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 2].<br/>
As used in this document, a &#34;device implementer&#34; or &#34;implementer&#34; is a person or organization developing<br/>a hardware/software solution running Android 1.6.&#160;A &#34;device implementation&#34; or &#34;implementation&#34; is the<br/>hardware/software solution so developed.<br/>
To be considered compatible with Android 1.6, device implementations:<br/>
1.&#160;MUST meet the requirements presented in this Compatibility Definition, including any documents<br/>
incorporated via reference.<br/>
2.&#160;MUST pass the Android Compatibility Test Suite (CTS) available as part of the Android Open<br/>
Source Project [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 3].&#160;The&#160;CTS tests most,&#160;<b>but not all</b>, components outlined in this<br/>document.<br/>
Where this definition or the CTS is silent, ambiguous, or incomplete, it is the responsibility of the device<br/>implementer to ensure compatibility with existing implementations. For this reason, the Android Open<br/>Source Project&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 4]&#160;is both the reference&#160;<i>and preferred&#160;</i>implementation of Android. Device<br/>implementers are strongly encouraged to base their implementations on the &#34;upstream&#34; source code<br/>available from the Android Open Source Project.&#160;While some components can hypothetically be replaced<br/>with alternate implementations this practice is strongly discouraged, as passing the CTS tests will become<br/>substantially more difficult. It is the implementer's responsibility to ensure full behavioral compatibility with<br/>the standard Android implementation, including and beyond the Compatibility Test Suite.<br/>
<b>2. Resources</b><br/>
This Compatibility Definition makes reference to a number of resources that can be obtained here.<br/>
1.&#160;Android Compatibility Program Overview:&#160;<a href="https://sites.google.com/a/android.com/compatibility/how-it-works">https://sites.google.com/a/android.com/compatibility/</a><br/>
<a href="https://sites.google.com/a/android.com/compatibility/how-it-works">how-it-works</a><br/>
2.&#160;IETF RFC2119 Requirement Levels:&#160;<a href="http://www.ietf.org/rfc/rfc2119.txt">http://www.ietf.org/rfc/rfc2119.txt<br/></a>3.&#160;Compatibility Test Suite:&#160;<a href="http://sites.google.com/a/android.com/compatibility/compatibility-test-suite--cts">http://sites.google.com/a/android.com/compatibility/compatibility-test-</a><br/>
<a href="http://sites.google.com/a/android.com/compatibility/compatibility-test-suite--cts">suite--cts</a><br/>
4.&#160;Android Open Source Project:&#160;<a href="http://source.android.com/">http://source.android.com/<br/></a>5.&#160;API definitions and documentation:&#160;<a href="http://developer.android.com/reference/packages.html">http://developer.android.com/reference/packages.html<br/></a>6.&#160;Content Providers:&#160;<a href="http://code.google.com/android/reference/android/provider/package-summary.html">http://code.google.com/android/reference/android/provider/package-</a><br/>
<a href="http://code.google.com/android/reference/android/provider/package-summary.html">summary.html</a><br/>
7.&#160;Available Resources:&#160;<a href="http://code.google.com/android/reference/available-resources.html">http://code.google.com/android/reference/available-resources.html<br/></a>8.&#160;Android Manifest files:&#160;<a href="http://code.google.com/android/devel/bblocks-manifest.html">http://code.google.com/android/devel/bblocks-manifest.html<br/></a>9.&#160;Android Permissions reference:&#160;<a href="http://developer.android.com/reference/android/Manifest.permission.html">http://developer.android.com/reference/android/</a><br/>
<a href="http://developer.android.com/reference/android/Manifest.permission.html">Manifest.permission.html</a><br/>
10.&#160;Build Constants:&#160;<a href="http://developer.android.com/reference/android/os/Build.html">http://developer.android.com/reference/android/os/Build.html<br/></a>11.&#160;WebView:&#160;<a href="http://developer.android.com/reference/android/webkit/WebView.html">http://developer.android.com/reference/android/webkit/WebView.html<br/></a>12.&#160;Gears Browser Extensions:&#160;<a href="http://code.google.com/apis/gears/">http://code.google.com/apis/gears/</a><br/>
<hr/>
<a name=5></a>13.&#160;Dalvik Virtual Machine specification, found in the dalvik/docs directory of a source code<br/>
checkout; also available at&#160;<a href="http://android.git.kernel.org/?p=platform/dalvik.git;a=tree;f=docs;h=3e2ddbcaf7f370246246f9f03620a7caccbfcb12;hb=HEAD">http://android.git.kernel.org/?p=platform/<br/>dalvik.git;a=tree;f=docs;h=3e2ddbcaf7f370246246f9f03620a7caccbfcb12;hb=HEAD</a><br/>
14.&#160;AppWidgets:&#160;<a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">http://developer.android.com/guide/practices/ui_guidelines/widget_design.html<br/></a>15.&#160;Notifications:&#160;<a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html">http://developer.android.com/guide/topics/ui/notifiers/notifications.html<br/></a>16.&#160;Status Bar icon style guide:&#160;<a href="http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#statusbarstructure">http://developer.android.com/guide/practices/ui_guideline</a><br/>
<a href="http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#statusbarstructure">/icon_design.html#statusbarstructure</a><br/>
17.&#160;Search Manager:&#160;<a href="http://developer.android.com/reference/android/app/SearchManager.html">http://developer.android.com/reference/android/app/SearchManager.html<br/></a>18.&#160;Toast:&#160;<a href="http://developer.android.com/reference/android/widget/Toast.html">http://developer.android.com/reference/android/widget/Toast.html<br/></a>19.&#160;Apps For Android:&#160;<a href="http://code.google.com/p/apps-for-android">http://code.google.com/p/apps-for-android<br/></a>20.&#160;Android apk file description:&#160;<a href="http://developer.android.com/guide/topics/fundamentals.html">http://developer.android.com/guide/topics/fundamentals.html<br/></a>21.&#160;Android Debug Bridge (adb):&#160;<a href="http://code.google.com/android/reference/adb.html">http://code.google.com/android/reference/adb.html<br/></a>22.&#160;Dalvik Debug Monitor Service (ddms):&#160;<a href="http://code.google.com/android/reference/ddms.html">http://code.google.com/android/reference/ddms.html<br/></a>23.&#160;Monkey:&#160;<a href="http://developer.android.com/guide/developing/tools/monkey.html">http://developer.android.com/guide/developing/tools/monkey.html<br/></a>24.&#160;Display-Independence Documentation:<br/>25.&#160;Configuration Constants:&#160;<a href="http://developer.android.com/reference/android/content/res/Configuration.html">http://developer.android.com/reference/android/content/res/</a><br/>
<a href="http://developer.android.com/reference/android/content/res/Configuration.html">Configuration.html</a><br/>
26.&#160;Display Metrics:&#160;<a href="http://developer.android.com/reference/android/util/DisplayMetrics.html">http://developer.android.com/reference/android/util/DisplayMetrics.html<br/></a>27.&#160;Camera:&#160;<a href="http://developer.android.com/reference/android/hardware/Camera.html">http://developer.android.com/reference/android/hardware/Camera.html<br/></a>28.&#160;Sensor coordinate space:&#160;<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">http://developer.android.com/reference/android/hardware/</a><br/>
<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">SensorEvent.html</a><br/>
29.&#160;Android Security and Permissions reference:&#160;<a href="http://developer.android.com/guide/topics/security/security.html">http://developer.android.com/guide/topics/security/</a><br/>
<a href="http://developer.android.com/guide/topics/security/security.html">security.html</a><br/>
Many of these resources are derived directly or indirectly from the Android 1.6 SDK, and will be<br/>functionally identical to the information in that SDK's documentation. In any cases where this<br/>Compatibility Definition disagrees with the SDK documentation, the SDK documentation is considered<br/>authoritative.&#160;Any technical details provided in the references included above are considered by inclusion<br/>to be part of this Compatibility Definition.<br/>
<b>3. Software</b><br/>
The Android platform includes both a set of managed (&#34;hard&#34;) APIs, and a body of so-called &#34;soft&#34; APIs<br/>such as the Intent system, native-code APIs, and web-application APIs.&#160;This section details the hard and<br/>soft APIs that are integral to compatibility, as well as certain other relevant technical and user interface<br/>behaviors. Device implementations MUST comply with all the requirements in this section.<br/>
<b>3.1. Managed API Compatibility</b><br/>
The managed (Dalvik-based) execution environment is the primary vehicle for Android applications. The<br/>Android application programming interface (API) is the set of Android platform interfaces exposed to<br/>applications running in the managed VM environment. Device implementations MUST provide complete<br/>implementations, including all documented behaviors, of any documented API exposed by the Android<br/>1.6 SDK, such as:<br/>
1.&#160;Core Android Java-language APIs&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 5].<br/></a>2.&#160;Content Providers&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 6].<br/>3.&#160;Resources&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 7].<br/></a>4.&#160;AndroidManifest.xml attributes and elements [Resources, 8].<br/>
<hr/>
<a name=6></a>Device implementations MUST NOT omit any managed APIs, alter API interfaces or signatures, deviate<br/>from the documented behavior, or include no-ops, except where specifically allowed by this Compatibility<br/>Definition.<br/>
<b>3.2. Soft API Compatibility</b><br/>
In addition to the managed APIs from Section 3.1, Android also includes a significant runtime-only &#34;soft&#34;<br/>API, in the form of such things such as Intents, permissions, and similar aspects of Android applications<br/>that cannot be enforced at application compile time. This section details the &#34;soft&#34; APIs and system<br/>behaviors required for compatibility with Android 1.6.&#160;Device implementations MUST meet all the<br/>requirements presented in this section.<br/>
<b>3.2.1. Permissions</b><br/>
Device implementers MUST support and enforce all permission constants&#160;as documented by the<br/>Permission reference page&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en&pli=1#resources">Resources</a>, 9]. Note that Section 10 lists addtional requirements related to<br/>the Android security model.<br/>
<b>3.2.2. Build Parameters</b><br/>
The Android APIs include a number of constants on the android.os.Build class&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 10]&#160;</a>that are<br/>intended to describe the current device. To provide consistent, meaningful values across device<br/>implementations, the table below includes additional restrictions on the formats of these values to which<br/>device implementations MUST conform.<br/>
<b>Parameter</b><br/>
<b>Comments</b><br/>
The version of the currently-executing Android system, in human-<br/>
android.os.Build.VERSION.RELEASE<br/>
readable format. For Android 1.6, this field MUST have the string value<br/>&#34;1.6&#34;.<br/>
The version of the currently-executing Android system, in a format<br/>
android.os.Build.VERSION.SDK<br/>
accessible to third-party application code. For Android 1.6, this field<br/>MUST have the integer value 4.<br/>
A value chosen by the device implementer designating the specific build<br/>of the currently-executing Android system, in human-readable format.<br/>This value MUST NOT be re-used for different builds shipped to end<br/>
android.os.Build.VERSION.INCREMENTAL&#160;users. A typical use of this field is to indicate which build number or<br/>
source-control change identifier was used to generate the build. There<br/>are no requirements on the specific format of this field, except that it<br/>MUST NOT be null or the empty string (&#34;&#34;).<br/>
A value chosen by the device implementer identifying the specific internal<br/>hardware used by the device, in human-readable format. A possible use<br/>
android.os.Build.BOARD<br/>
of this field is to indicate the specific revision of the board powering the<br/>device. There are no requirements on the specific format of this field,<br/>except that it MUST NOT be null or the empty string (&#34;&#34;).<br/>
A value chosen by the device implementer identifying the name of the<br/>
android.os.Build.BRAND<br/>
company, organization, individual, etc. who produced the device, in<br/>human-readable format. A possible use of this field is to indicate the OEM<br/>
<hr/>
<a name=7></a>and/or carrier who sold the device. There are no requirements on the<br/>specific format of this field, except that it MUST NOT be null or the empty<br/>string (&#34;&#34;).<br/>
A value chosen by the device implementer identifying the specific<br/>configuration or revision of the body (sometimes called &#34;industrial<br/>
android.os.Build.DEVICE<br/>
design&#34;) of the device. There are no requirements on the&#160;specific format<br/>of this field, except that it MUST NOT be null or the empty string (&#34;&#34;).<br/>
A string that uniquely identifies this build. It SHOULD be reasonably<br/>human-readable. It MUST follow this template:<br/>$(PRODUCT_BRAND)/$(PRODUCT_NAME)/$(PRODUCT_DEVICE)/<br/>$(TARGET_BOOTLOADER_BOARD_NAME):$(PLATFORM_VERSION)/<br/>$(BUILD_ID)/$(BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/<br/>
android.os.Build.FINGERPRINT<br/>
$(BUILD_VERSION_TAGS)<br/>For example: acme/mydevicel/generic/generic:Donut/ERC77/<br/>3359:userdebug/test-keys<br/>The fingerprint MUST NOT include spaces. If other fields included in the<br/>template above have spaces, they SHOULD be replaced with the ASCII<br/>underscore (&#34;_&#34;) character in the fingerprint.<br/>
A string that uniquely identifies the host the build was built on, in human<br/>
android.os.Build.HOST<br/>
readable format. There are no requirements on the specific format of this<br/>field, except that it MUST NOT be null or the empty string (&#34;&#34;).<br/>
An identifier chosen by the device implementer to refer to a specific<br/>release, in human readable format. This field can by the same as<br/>android.os.Build.VERSION.INCREMENTAL, but SHOULD be a value<br/>
android.os.Build.ID<br/>
intended to be somewhat meaningful for end users. There are no<br/>requirements on the specific format of this field, except that it MUST NOT<br/>be null or the empty string (&#34;&#34;).<br/>
A value chosen by the device implementer containing the name of the<br/>device as known to the end user. This SHOULD be the same name<br/>
android.os.Build.MODEL<br/>
under which the device is marketed and sold to end users. There are no<br/>requirements on the specific format of this field, except that it MUST NOT<br/>be null or the empty string (&#34;&#34;).<br/>
A value chosen by the device implementer containing the development<br/>name or code name of the device. MUST be human-readable, but is not<br/>
android.os.Build.PRODUCT<br/>
necessarily intended for view by end users. There are no requirements<br/>on the specific format of this field, except that it MUST NOT be null or the<br/>empty string (&#34;&#34;).<br/>
A comma-separated list of tags chosen by the device implementer that<br/>further distinguish the build. For example, &#34;unsigned,debug&#34;. This field<br/>
android.os.Build.TAGS<br/>
MUST NOT be null or the empty string (&#34;&#34;), but a single tag (such as<br/>&#34;release&#34;) is fine.<br/>
android.os.Build.TIME<br/>
A value representing the timestamp of when the build occurred.<br/>
A value chosen by the device implementer specifying the runtime<br/>configuration of the build. This field SHOULD have one of the values<br/>
android.os.Build.TYPE<br/>
corresponding to the three typical Android runtime configurations: &#34;user&#34;,<br/>&#34;userdebug&#34;, or &#34;eng&#34;.<br/>
A name or user ID of the user (or automated user) that generated the<br/>
android.os.Build.USER<br/>
build.&#160;There are no requirements on the specific format of this field,<br/>except that it MUST NOT be null or the empty string (&#34;&#34;).<br/>
<hr/>
<a name=8></a><b>3.2.3. Intent Compatibility</b><br/>
Android uses Intents to achieve loosely-coupled integration between applications. This section describes<br/>requirements related to the Intent patterns that MUST be honored by device implementations. By<br/>&#34;honored&#34;, it is meant that the device implementer MUST provide an Android Activity, Service, or other<br/>component that specifies a matching Intent filter and binds to and implements correct behavior for each<br/>specified Intent pattern.<br/>
<b>3.2.3.1. Core Application Intents</b><br/>
The Android upstream project defines a number of core applications, such as a phone dialer, calendar,<br/>contacts book, music player, and so on. Device implementers MAY replace these applications with<br/>alternative versions.<br/>
However, any such alternative versions MUST honor the same Intent patterns provided by the upstream<br/>project. (For example, if a device contains an alternative music player, it must still honor the Intent pattern<br/>issued by third-party applications to pick a song.)&#160;Device implementions MUST support all Intent patterns<br/>listed in&#160;Appendix A.<br/>
<b>3.2.3.2. Intent Overrides</b><br/>
As Android is an extensible platform, device implementers MUST allow each Intent pattern described in<br/>Appendix A to be overridden by third-party applications. The upstream Android open source project<br/>allows this by default; device implementers MUST NOT attach special privileges to system applications'<br/>use of these Intent patterns, or prevent third-party applications from binding to and assuming control of<br/>these patterns.&#160;This prohibition specifically includes disabling the &#34;Chooser&#34; user interface which allows<br/>the user to select between multiple applications which all handle the same Intent pattern.<br/>
<b>3.2.3.3. Intent Namespaces</b><br/>
Device implementers MUST NOT include any Android component that honors any new Intent or<br/>Broadcast Intent patterns using an ACTION, CATEGORY, or other key string in the android.* namespace.<br/>Device implementers MUST NOT include any Android components that honor any new Intent or<br/>Broadcast Intent patterns using an ACTION, CATEGORY, or other key string in a package space<br/>belonging to another organization. Device implementers MUST NOT alter or extend any of the Intent<br/>patterns listed in Appendices A or B.<br/>
This prohibition is analogous to that specified for Java language classes in Section 3.6.<br/>
<hr/>
<a name=9></a><b>3.2.3.4. Broadcast Intents</b><br/>
Third-party applications rely on the platform to broadcast certain Intents to notify them of changes in the<br/>hardware or software environment. Android-compatible devices MUST broadcast the public broadcast<br/>Intents in response to appropriate system events. A list of required Broadcast Intents is provided in<br/>Appendix B; however, note that the SDK may define additional broadcast intents, which MUST also be<br/>honored.<br/>
<b>3.3. Native API Compatibility</b><br/>
Managed code running in Dalvik can call into native code provided in the application .apk file as an ELF<br/>.so file compiled for the appropriate device hardware architecture. Device implementations MUST include<br/>support for code running in the managed environment to call into native code, using the standard Java<br/>Native Interface (JNI) semantics. The following APIs must be available to native code:<br/>
&#160;<b>libc&#160;(C library)<br/></b>&#160;<b>libm&#160;(math library)<br/></b>&#160;<b>JNI interface<br/></b>&#160;<b>libz (Zlib compression)<br/></b>&#160;<b>liblog (Android logging)<br/></b>&#160;<b>Minimal support for C++<br/></b>&#160;<b>OpenGL ES 1.1</b><br/>
These libraries MUST be source-compatible (i.e. header compatible) and binary-compatible (for a given<br/>processor architecture) with the versions provided in Bionic by the Android Open Source project. Since<br/>the Bionic implementations are not fully compatible with other implementations such as the GNU C<br/>library, device implementers SHOULD use the Android implementation. If device implementers use a<br/>different implementation of these libraries, they must ensure header and binary compatibility.<br/>
Native code compatibility is challenging. For this reason, we wish to repeat that device implementers are<br/>VERY strongly encouraged to use the upstream implementations of the libraries listed above, to help<br/>ensure compatibility.<br/>
<b>3.4. Web API Compatibility</b><br/>
Many developers and applications rely on the behavior of the&#160;android.webkit.WebView&#160;class&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>,<br/>11]&#160;for their user interfaces, so the WebView implementation must be compatible across Android<br/>implementations. The Android Open Source implementation uses the WebKit rendering engine version to<br/>implement the WebView.<br/>
Because it is not feasible to develop a comprehensive test suite for a web browser, device implementers<br/>MUST use the specific upstream build of WebKit in the WebView implementation. Specifically:<br/>
&#160;WebView MUST use the&#160;528.5+ WebKit build from the upstream Android Open Source tree for<br/>
Android 1.6. This build includes a specific set of functionality and security fixes for the WebView.<br/>
&#160;The user agent string reported by the WebView MUST be in this format:<br/>
Mozilla/5.0 (Linux; U;&#160;Android 1.6; &lt;language&gt;-&lt;country&gt;; &lt;device<br/>name&gt;; Build/&lt;build ID&gt;)&#160;AppleWebKit/528.5+ (KHTML, like Gecko)<br/>Version/3.1.2 Mobile Safari/525.20.1<br/>
<hr/>
<a name=10></a>&#160;The &#34;&lt;device name&gt;&#34; string MUST be the same as the value for<br/>
android.os.Build.MODEL<br/>
&#160;The &#34;&lt;build ID&gt;&#34; string MUST be the same as the value for android.os.Build.ID.<br/>&#160;The &#34;&lt;language&gt;&#34; and &#34;&lt;country&gt;&#34; strings SHOULD follow the usual conventions for<br/>
country code and language, and SHOULD refer to the current locale of the device at the<br/>time of the request.<br/>
Implementations MAY ship a custom user agent string in the standalone Browser application. What's<br/>more, the standalone Browser MAY be based on an alternate browser technology (such as Firefox,<br/>Opera, etc.)&#160;However, even if an alternate Browser application is shipped, the WebView component<br/>provided to third-party applications MUST be based on WebKit, as above.<br/>
The standalone Browser application SHOULD include support for Gears [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources,&#160;</a>12] and MAY<br/>include support for some or all of HTML5.<br/>
<b>3.5. API Behavioral Compatibility</b><br/>
The behaviors of each of the API types (managed, soft, native, and web) must be consistent with the<br/>preferred implementation of Android available from the Android Open Source Project.<br/>
Some specific areas of compatibility are:<br/>
&#160;Devices MUST NOT change the behavior or meaning of a standard Intent<br/>&#160;Devices MUST NOT alter the lifecycle or lifecycle semantics of a particular type of system<br/>
component (such as Service, Activity, ContentProvider, etc.)<br/>
&#160;Devices MUST NOT change the semantics of a particular permission<br/>
The above list is not comprehensive, and the onus is on device implementers to ensure behavioral<br/>compatibility.&#160;For this reason, device implementers SHOULD use the source code available via the<br/>Android Open Source Project where possible, rather than re-implement significant parts of the system.<br/>
The Compatibility Test Suite (CTS) tests significant portions of the platform for behavioral compatibility,<br/>but not all. It is the responsibility of the implementer to ensure behavioral compatibility with the Android<br/>Open Source Project.<br/>
<b>3.6. API Namespaces</b><br/>
Android follows the package and class namespace conventions defined by the Java programming<br/>language. To ensure compatibility with third-party applications, device implementers MUST NOT make<br/>any prohibited modifications (see below) to these package namespaces:<br/>
&#160;java.*<br/>&#160;javax.*<br/>&#160;sun.*<br/>&#160;android.*<br/>&#160;com.android.*<br/>
Prohibited modifications include:<br/>
&#160;Device implementations MUST NOT modify the publicly exposed APIs on the Android platform<br/>
by changing any method or class signatures, or by removing classes or class fields.<br/>
<hr/>
<a name=11></a>&#160;Device implementers MAY modify the underlying implementation of the APIs, but such<br/>
modifications MUST NOT impact the stated behavior and Java-language signature of any<br/>publicly exposed APIs.<br/>
&#160;Device implementers MUST NOT add any publicly exposed elements (such as classes or<br/>
interfaces, or fields or methods to existing classes or interfaces) to the APIs above.<br/>
A &#34;publicly exposed element&#34; is any construct which is not decorated with the &#34;@hide&#34; marker in the<br/>upstream Android source code.&#160;In other words, device implementers MUST NOT expose new APIs or<br/>alter existing APIs in the namespaces noted above.&#160;Device implementers MAY make internal-only<br/>modifications, but those modifications MUST NOT be advertised or otherwise exposed to developers.<br/>
Device implementers MAY add custom APIs, but any such APIs MUST NOT be in a namespace owned<br/>by or referring to another organization. For instance, device implementers MUST NOT add APIs to the<br/>com.google.* or similar namespace; only Google may do so.&#160;Similarly, Google MUST NOT add APIs to<br/>other companies' namespaces.<br/>
If a device implementer proposes to improve one of the package namespaces above (such as by adding<br/>useful new functionality to an existing API, or adding a new API), the implementer SHOULD visit<br/>source.android.com and begin the process for contributing changes and code, according to the<br/>information on that site.<br/>
Note that the restrictions above correspond to standard conventions for naming APIs in the Java<br/>programming language; this section simply aims to reinforce those conventions and make them binding<br/>through inclusion in this compatibility definition.<br/>
<b>3.7. Virtual Machine Compatibility</b><br/>
A compatible Android device must support the full Dalvik Executable (DEX) bytecode specification and<br/>Dalvik Virtual Machine semantics&#160;[Resources, 13].<br/>
<b>3.8. User Interface Compatibility</b><br/>
The Android platform includes some developer APIs that allow developers to hook into the system user<br/>interface. Device implementations MUST incorporate these standard UI APIs into custom user interfaces<br/>they develop, as explained below.<br/>
<b>3.8.1. Widgets</b><br/>
Android defines a component type and corresponding API and lifecycle that allows applications to expose<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">an &#34;AppWidget&#34; to the end user [Resources</a>, 14]<b>.&#160;</b>The Android Open Source reference release includes a<br/>Launcher application that includes user interface elements allowing the user to add, view, and remove<br/>AppWidgets from the home screen.<br/>
Device implementers MAY substitute an alternative to the reference Launcher (i.e. home screen).<br/>Alternative Launchers SHOULD include built-in support for AppWidgets, and expose user interface<br/>elements to add, view, and remove AppWidgets directly within the Launcher.&#160;Alternative Launchers MAY<br/>omit these user interface elements; however, if they are omitted, the device implementer MUST provide a<br/>separate application accessible from the Launcher that allows users to add, view, and remove<br/>AppWidgets.<br/>
<hr/>
<a name=12></a><b>3.8.2. Notifications</b><br/>
Android includes APIs that allow developers to notify users of notable events [Resources, 15].&#160;Device<br/>implementers MUST provide support for each class of notification so defined; specifically: sounds,<br/>vibration, light and status bar.<br/>
Additionally, the implementation MUST correctly render and all resources (icons, sound files, etc.)<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">provided for in the APIs [Resources,&#160;</a>7], or in the&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0AfF4TgU8QNgVZGZnYjR3c2dfMjI4N3hjcXY3cHM&hl=en#resources">Status Bar icon style guide [Resources</a>, 16].&#160;Device<br/>implementers MAY provide an alternative user experience for notifications than that provided by the<br/>reference Android Open Source implementation; however, such alternative notification systems MUST<br/>support existing notification resources, as above.<br/>
<b>3.8.3. Search</b><br/>
Android includes&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">APIs [Resources,&#160;</a>17]&#160;that allow developers to incorporate search into their applications,<br/>and expose their application's data into the global system search. Generally speaking, this functionality<br/>consists of a single, system-wide user interface that allows users to enter queries, displays suggestions<br/>as users type, and displays results.&#160;The Android APIs allow developers to reuse this interface to provide<br/>search within their own apps, and allow developers to supply results to the common global search user<br/>interface.<br/>
Device implementations MUST include a single, shared, system-wide search user interface capable of<br/>real-time suggestions in response to user input. Device implementations MUST implement the APIs that<br/>allow developers to reuse this user interface to provide search within their own applications.<br/>
Device implementations MUST implement the APIs that allow third-party applications to add suggestions<br/>to the search box when it is run in global search mode. If no third-party applications are installed that<br/>make use of this functionality, the default behavior SHOULD be to display web search engine results and<br/>suggestions.<br/>
Device implementations MAY ship alternate search user interfaces, but SHOULD include a hard or soft<br/>dedicated search button, that can be used at any time within any app to invoke the search framework,<br/>with the behavior provided for in the API documentation.<br/>
<b>3.8.4. Toasts</b><br/>
Applications can use the &#34;Toast&#34; API&#160;(defined in&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources,&#160;</a>18])&#160;to display short non-modal strings to the<br/>end user, that disappear after a brief period of time.&#160;Device implementations MUST display Toasts from<br/>applications to end users in some high-visibility manner.<br/>
<b>4. Reference Software Compatibility</b><br/>
Device implementers MUST test implementation compatibility using the following open-source<br/>applications:<br/>
&#160;Calculator (included in SDK)<br/>&#160;Lunar Lander (included in SDK)<br/>&#160;ApiDemos (included in SDK)<br/>&#160;The &#34;Apps for Android&#34; applications [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources,&#160;</a>19]<br/>
Each app above MUST launch and behave correctly on the implementation, for the implementation to be<br/>
<hr/>
<a name=13></a>considered compatible.<br/>
<b>5. Application Packaging Compatibility</b><br/>
Device implementations MUST install and run Android &#34;.apk&#34; files as generated by the &#34;aapt&#34; tool<br/>included in the official Android SDK&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>,&#160;20].<br/>
Devices implementations MUST NOT extend either the .apk, Android Manifest, or Dalvik bytecode<br/>formats in such a way that would prevent those files from installing and running correctly on other<br/>compatible devices. Device implementers SHOULD use the reference upstream implementation of Dalvik,<br/>and the reference implementation's package management system.<br/>
<b>6. Multimedia Compatibility</b><br/>
A compatible Android device must support the following multimedia codecs.&#160;All of these codecs are<br/>provided as software implementations in the preferred Android implementation from the Android Open<br/>Source Project&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>,&#160;4].<br/>
Please note that neither Google nor the Open Handset Alliance make any representation that these<br/>codecs are unencumbered by third-party patents.&#160;Those intending to use this source code in hardware or<br/>software products are advised that implementations of this code, including in open source software or<br/>shareware, may require&#160;patent&#160;licenses from the relevant&#160;patent&#160;holders.<br/>
<b>Audio<br/>Name</b><br/>
<b>Encoder&#160;Decoder&#160;Details</b><br/>
<b>Files Supported</b><br/>
Mono/Stereo content in any<br/>
3GPP (.3gp) and<br/>
combination of standard bit rates<br/>
MPEG-4 (.mp4, .m4a)<br/>
AAC LC/LTP<br/>
X<br/>
up to 160 kbps and sampling rates&#160;files. No support for raw<br/>between 8 to 48kHz<br/>
AAC (.aac)<br/>
Mono/Stereo content in any<br/>
3GPP (.3gp) and<br/>
HE-AACv1<br/>
combination of standard bit rates<br/>
MPEG-4 (.mp4, .m4a)<br/>
X<br/>
(AAC+)<br/>
up to 96 kbps and sampling rates&#160;files. No support for raw<br/>between 8 to 48kHz<br/>
AAC (.aac)<br/>
Mono/Stereo content in any<br/>
HE-AACv2<br/>
3GPP (.3gp) and<br/>
combination of standard bit rates<br/>
(enhanced<br/>
MPEG-4 (.mp4, .m4a)<br/>
X<br/>
up to 96 kbps and sampling rates<br/>
AAC+)<br/>
files. No support for raw<br/>
between 8 to 48kHz<br/>
AAC (.aac)<br/>
AMR-NB<br/>
4.75 to 12.2 kbps sampled @<br/>
3GPP (.3gp) files<br/>
X<br/>
X<br/>
8kHz<br/>
AMR-WB<br/>
9 rates from 6.60 kbit/s to 23.85<br/>
-3GPP (.3gp) files<br/>
X<br/>
kbit/s sampled @ 16kHz<br/>
MP3<br/>
Mono/Stereo 8-320Kbps constant&#160;MP3 (.mp3) files<br/>
X<br/>
(CBR) or variable bit-rate (VBR)<br/>
Type 0 and 1 (.mid, .xmf,<br/>
MIDI Type 0 and 1. DLS Version 1<br/>
MIDI<br/>
X<br/>
.mxmf). Also RTTTL/RTX<br/>
and 2. XMF and Mobile XMF.<br/>
(.rtttl, .rtx), OTA (.ota),<br/>
<hr/>
<a name=14></a>Support for ringtone formats<br/>
and iMelody (.imy)<br/>
RTTTL/RTX, OTA, and iMelody<br/>
Ogg Vorbis<br/>
.ogg<br/>
X<br/>
8- and 16-bit linear PCM (rates up<br/>
PCM<br/>
X<br/>
WAVE<br/>
to limit of hardware)<br/>
<b>Image</b><br/>
<b>Files</b><br/>
<b>Name</b><br/>
<b>Encoder&#160;Decoder&#160;Details</b><br/>
<b>Supported</b><br/>
JPEG<br/>
X<br/>
X<br/>
base+progressive<br/>
GIF<br/>
X<br/>
PNG<br/>
X<br/>
X<br/>
BMP<br/>
X<br/>
<b>Video</b><br/>
<b>Files</b><br/>
<b>Name</b><br/>
<b>Encoder&#160;Decoder&#160;Details</b><br/>
<b>Supported</b><br/>
3GPP (.3gp)<br/>
H.263<br/>
X<br/>
X<br/>
files<br/>
3GPP (.3gp)<br/>
H.264<br/>
X<br/>
and MPEG-4<br/>(.mp4) files<br/>
MPEG4<br/>
X<br/>
3GPP (.3gp) file<br/>
SP<br/>
<b>7. Developer Tool Compatibility</b><br/>
Device implemenations MUST support the Android Developer Tools provided in the Android SDK.<br/>Specifically, Android-compatible devices MUST be compatible with:<br/>
&#160;<b>Android Debug Bridge or adb&#160;</b><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 21]<br/>
Device implementations MUST support all&#160;adb&#160;functions as documented in the Android<br/>SDK.&#160;The device-side&#160;adb&#160;daemon SHOULD be inactive by default, but there MUST be a user-<br/>accessible mechanism to turn on the Android Debug Bridge.<br/>
&#160;<b>Dalvik Debug Monitor Service or ddms&#160;</b><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 22]<br/>
Device implementations MUST support all&#160;ddms&#160;features as documented in the Android SDK.<br/>As ddms uses&#160;adb, support for&#160;ddms&#160;SHOULD be inactive by default, but MUST be supported<br/>whenever the user has activated the Android Debug Bridge, as above.<br/>
<hr/>
<a name=15></a>&#160;<b>Monkey&#160;</b>[Resources, 23]<br/>
Device implementations MUST include the Monkey framework, and make it available for<br/>applications to use.<br/>
<b>8. Hardware Compatibility</b><br/>
Android is intended to support device implementers creating innovative form factors and configurations.<br/>At the same time Android developers expect certain hardware, sensors and APIs across all Android<br/>device. This section lists the hardware features that all Android 1.6 compatible devices must support.&#160;In<br/>Android 1.6, the majority of hardware features (such as WiFi, compass, and accelerometer) are required.<br/>
If a device includes a particular hardware component that has a corresponding API for third-party<br/>developers, the device implementation MUST implement that API as defined in the Android SDK<br/>documentation.<br/>
<b>8.1. Display</b><br/>
Android 1.6 includes facilities that perform certain automatic scaling and transformation operations under<br/>some circumstances, to ensure that third-party applications run reasonably well on hardware<br/>configurations for which they were not necessarily explicitly designed&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 24]</a>.&#160;Devices MUST<br/>properly implement these behaviors, as detailed in this section.<br/>
<b>8.1.1. Standard Display Configurations</b><br/>
This table lists the standard screen configurations considered compatible with Android:<br/>
Diagonal<br/>
Screen Size<br/>
Screen Density<br/>
Screen Type<br/>
Width (Pixels)<br/>
Height (Pixels)<br/>
Length Range<br/>
Group<br/>
Group<br/>
(inches)<br/>
QVGA<br/>
240<br/>
320<br/>
2.6 - 3.0<br/>
Small<br/>
Low<br/>
WQVGA<br/>
240<br/>
400<br/>
3.2 - 3.5<br/>
Normal<br/>
Low<br/>
FWQVGA<br/>
240<br/>
432<br/>
3.5 - 3.8<br/>
Normal<br/>
Low<br/>
HVGA<br/>
320<br/>
480<br/>
3.0 - 3.5<br/>
Normal<br/>
Medium<br/>
WVGA<br/>
480<br/>
800<br/>
3.3 - 4.0<br/>
Normal<br/>
High<br/>
FWVGA<br/>
480<br/>
854<br/>
3.5 - 4.0<br/>
Normal<br/>
High<br/>
WVGA<br/>
480<br/>
800<br/>
4.8 - 5.5<br/>
Large<br/>
Medium<br/>
FWVGA<br/>
480<br/>
854<br/>
5.0 - 5.8<br/>
Large<br/>
Medium<br/>
Device implementations corresponding to one of the standard configurations above&#160;MUST be configured<br/>to report the indicated screen size to applications via the android.content.res.Configuration&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources,<br/></a>25]&#160;class.<br/>
Some .apk packages have manifests that do not identify them as supporting a specific density range.<br/>When running such applications, the following constraints apply:<br/>
<hr/>
<a name=16></a>&#160;Device implementations MUST interpret any resources that are present as defaulting to<br/>
&#34;medium&#34; (known as &#34;mdpi&#34; in the SDK documentation.)<br/>
&#160;When operating on a &#34;low&#34; density screen, device implementations MUST scale down medium/<br/>
mdpi assets by a factor of 0.75.<br/>
&#160;When operating on a &#34;high&#34; density screen, device implementations MUST scale up medium/<br/>
mdpi assets by a factor of 1.5.<br/>
&#160;Device implementations MUST NOT scale assets within a density range, and MUST scale<br/>
assets by exactly these factors between density ranges.<br/>
<b>8.1.2. Non-Standard Display Configurations</b><br/>
Display configurations that do not match one of the standard configurations listed in Section 8.2.1 require<br/>additional consideration and work to be compatible. Device implementers MUST contact Android<br/>Compatibility Team as provided for in Section 12 to obtain classifications for screen-size bucket, density,<br/>and scaling factor. When provided with this information, device implementations MUST implement them<br/>as specified.<br/>
Note that some display configurations (such as very large or very small screens, and some aspect ratios)<br/>are fundamentally incompatible with Android 1.6; therefore device implementers are encouraged to<br/>contact Android Compatibility Team as early as possible in the development process.<br/>
<b>8.1.3. Display Metrics</b><br/>
Device implementations MUST report correct values for all display metrics defined in<br/>android.util.DisplayMetrics&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 26].<br/>
<b>8.2. Keyboard</b><br/>
Device implementations:<br/>
&#160;MUST include support for the Input Management Framework (which allows third party<br/>
developers to create Input Management Engines -- i.e. soft keyboard) as detailed at<br/>developer.android.com<br/>
&#160;MUST provide at least one soft keyboard implementation (regardless of whether a hard<br/>
keyboard is present)<br/>
&#160;MAY include additional soft keyboard implementations<br/>&#160;MAY include a hardware keyboard<br/>&#160;MUST NOT include a hardware keyboard that does not match one of the formats specified<br/>
in&#160;android.content.res.Configuration&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, 25]&#160;</a>(that is, QWERTY, or 12-key)<br/>
<b>8.3. Non-touch Navigation</b><br/>
Device implementations:<br/>
&#160;MAY omit non-touch navigation options (that is, may omit a trackball, 5-way directional pad, or<br/>
wheel)<br/>
&#160;MUST report&#160;via android.content.res.Configuration&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 25]&#160;the correct value for the<br/>
device's hardware<br/>
<hr/>
<a name=17></a><b>8.4. Screen Orientation</b><br/>
Compatible devices MUST&#160;support dynamic orientation by applications&#160;to either portrait or landscape<br/>screen orientation.&#160;That is, the device must respect the application's request for a specific&#160;screen<br/>orientation. Device implementations MAY&#160;select either portrait or landscape orientation as the default.<br/>
Devices MUST report the correct value for the device's current orientation, whenever queried via the<br/>android.content.res.Configuration.orientation, android.view.Display.getOrientation(), or other APIs.<br/>
<b>8.5. Touchscreen input</b><br/>
Device implementations:<br/>
&#160;MUST have a touchscreen<br/>&#160;MAY have either capacative or resistive touchscreen<br/>&#160;MUST report the value of android.content.res.Configuration&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, 25]&#160;</a>reflecting<br/>
corresponding to the type of the specific touchscreen on the device<br/>
<b>8.6. USB</b><br/>
Device implementations:<br/>
&#160;MUST implement a USB client, connectable to a USB host with a standard USB-A port<br/>&#160;MUST implement the Android Debug Bridge over USB (as described in Section 7)<br/>&#160;MUST implement a USB mass storage client for the removable/media storage is present in the<br/>
device<br/>
&#160;SHOULD use the micro USB form factor on the device side<br/>&#160;SHOULD implement support for the USB Mass Storage specification (so that either removable<br/>
or fixed storage on the device can be accessed from a host PC)<br/>
&#160;MAY include a non-standard port on the device side, but if so MUST ship with a cable capable of<br/>
connecting the custom pinout to standard USB-A port<br/>
<b>8.7. Navigation keys</b><br/>
The Home, Menu and Back functions are essential to the Android navigation paradigm.&#160;Device<br/>implementations MUST make these functions available to the user at all times, regardless of application<br/>state.&#160;These functions SHOULD be implemented via dedicated buttons. They MAY be implemented<br/>using software, gestures, touch panel, etc., but if so they MUST be always accessible and not obscure or<br/>interfere with the available application display area.<br/>
Device implementers SHOULD also provide a dedicated search key.&#160;Device implementers MAY also<br/>provide send and end keys for phone calls.<br/>
<b>8.8. WiFi</b><br/>
Device implementations MUST support 802.11b and 802.11g, and MAY support 802.11a.<br/>
<hr/>
<a name=18></a><b>8.9. Camera</b><br/>
Device implementations MUST include a camera. The included camera:<br/>
&#160;MUST have a resolution of at least 2 megapixels<br/>&#160;SHOULD have either hardware auto-focus, or software auto-focus implemented in the camera<br/>
driver (transparent to application software)<br/>
&#160;MAY have fixed-focus or EDOF (extended depth of field) hardware<br/>&#160;MAY include a flash. If the Camera includes a flash, the flash lamp MUST NOT be lit while an<br/>
android.hardware.Camera.PreviewCallback instance has been registered on a Camera preview<br/>surface.<br/>
Device implementations MUST implement the following behaviors for the camera-related APIs<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 27]</a>:<br/>
1.&#160;If an application has never called android.hardware.Camera.Parameters.setPreviewFormat(int),<br/>
then the device MUST use android.hardware.PixelFormat.YCbCr_420_SP for preview data<br/>provided to application callbacks.<br/>
2.&#160;If an application registers an android.hardware.Camera.PreviewCallback instance and the<br/>
system calls the onPreviewFrame() method when the preview format is YCbCr_420_SP, the<br/>data in the byte[] passed into onPreviewFrame() must further be in the NV21 encoding format.<br/>(This is the format used natively by the 7k hardware family.)&#160;That is, NV21 MUST be the default.<br/>
<b>8.9.1. Non-Autofocus Cameras</b><br/>
If a device lacks an autofocus camera, the device implementer MUST meet the additional requirements in<br/>this section. Device implementations MUST implement the full Camera API included in the Android 1.6<br/>SDK documentation in some reasonable way, regardless of actual camera hardware's capabilities.<br/>
For Android 1.6, if the camera lacks auto-focus, the device implementation MUST adhere to the following:<br/>
1.&#160;The system MUST include a read-only system property named &#34;ro.workaround.noautofocus&#34;<br/>
with the value of &#34;1&#34;.&#160;This value is intended to be used by applications such as Android Market to<br/>selectively identify device capabilities, and will be replaced in a future version of Android with a<br/>robust API.<br/>
2.&#160;If an application calls android.hardware.Camera.autoFocus(), the system MUST call the<br/>
onAutoFocus() callback method on any registered<br/>android.hardware.Camera.AutoFocusCallback instances, even though no focusing actually<br/>happened. This is to avoid having existing applications break by waiting forever for an autofocus<br/>callback that will never come.<br/>
3.&#160;The call to the AutoFocusCallback.onAutoFocus() method MUST be triggered by the driver or<br/>
framework in a new event on the main framework Looper thread. That is, Camera.autoFocus()<br/>MUST NOT directly call AutoFocusCallback.onAutoFocus() since this violates the Android<br/>framework threading model and will break apps.<br/>
<b>8.10. Accelerometer</b><br/>
Device implementations MUST include a 3-axis accelerometer and MUST be able to deliver events at&#160;at<br/>least 50 Hz. The coordinate system used by the accelerometer MUST comply with&#160;the Android sensor<br/>coordinate system as detailed in the Android API<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources_656432673567906_7490">s [Resources</a>, 28].<br/>
<hr/>
<a name=19></a><b>8.11. Compass</b><br/>
Device implementations MUST include a 3-axis compass and MUST be able to deliver events at&#160;at least<br/>10 Hz. The coordinate system used by the compass MUST comply with&#160;the Android sensor coordinate<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources_656432673567906_7490">system as defined in the Android API [Resources</a>, 28].<br/>
<b>8.12. GPS</b><br/>
Device implementations MUST include a GPS, and SHOULD include some form of &#34;assisted GPS&#34;<br/>technique to minimize GPS lock-on time.<br/>
<b>8.13. Telephony</b><br/>
Device implementations:<br/>
&#160;MUST include either GSM or CDMA telephony<br/>&#160;MUST implement the appropriate APIs as detailed in the Android SDK documentation at<br/>
developer.android.com<br/>
Note that this requirement implies that non-phone devices are not compatible with Android 1.6; Android<br/>1.6 devices MUST include telephony hardware. Please see&#160;Appendix C&#160;for information on non-phone<br/>devices.<br/>
<b>8.14. Volume controls</b><br/>
Android-compatible devices MUST include a mechanism to allow the user to increase and decrease the<br/>audio volume.&#160;Device implementations MUST make these functions available to the user at all times,<br/>regardless of application state.&#160;These functions MAY be implemented using physical hardware keys,<br/>software, gestures, touch panel, etc., but they MUST be always accessible and not obscure or interfere<br/>with the available application display area (see Display above).<br/>
When these buttons are used, the corresponding key events MUST be generated and sent to the<br/>foreground application. If the event is not intercepted and sunk by the application then device<br/>implementation MUST handle the event as a system volume control.<br/>
<b>9. Performance Compatibility</b><br/>
One of the goals of the Android Compatibility Program is to ensure a consistent application experience for<br/>consumers. Compatible implementations must ensure not only that applications simply run correctly on<br/>the device, but that they do so with reasonable performance and overall good user experience.<br/>
Device implementations MUST meet the key performance metrics of an Android 1.6 compatible device,<br/>as in the table below:<br/>
<b>Metric</b><br/>
<b>Performance Threshold</b><br/>
<b>Comments</b><br/>
<hr/>
<a name=20></a>This is tested by CTS.<br/>
The following applications<br/>
The launch time is measured as the total time to<br/>
should launch within the<br/>
complete loading the default activity for the<br/>
Application<br/>
specified time.<br/>
application, including the time it takes to start the<br/>
Launch Time<br/>
Browser: less than 1300ms<br/>
Linux process, load the Android package into the<br/>
MMS/SMS: less than 700ms<br/>
Dalvik VM, and call onCreate.<br/>
AlarmClock: less than 650ms<br/>
Multiple applications will be<br/>
This is tested by CTS.<br/>
launched. Re-launching the<br/>
Simultaneous&#160;first application should<br/>
Applications<br/>
complete taking less than the<br/>original launch time.<br/>
<b>10. Security Model Compatibility</b><br/>
Device implementations MUST implement a security model consistent with the Android platform security<br/>model as defined in&#160;Security and Permissions&#160;reference document in the APIs&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources,&#160;</a>29]&#160;in the<br/>Android developer documentation. Device implementations MUST support installation of self-signed<br/>applications without requiring any additional permissions/certificates from any third parties/authorities.<br/>
Specifically, compatible devices MUST support the following security mechanisms:<br/>
<b>10.1. Permissions</b><br/>
Device implementations MUST support the Android permissions model as defined in the Android<br/>developer documentation&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>,&#160;9]. Specifically, implementations MUST enforce each permission<br/>defined as described in the SDK documentation; no permissions may be omitted, altered, or ignored.<br/>Implementations MAY add additional permissions, provided the new permission ID strings are not in the<br/>android.* namespace.<br/>
<b>10.2. User and Process Isolation</b><br/>
Device implementations MUST support the Android application sandbox model, in which each application<br/>runs as a unique Unix-style UID and in a separate process.<br/>
Device implementations MUST support running multiple applications as the same Linux user ID, provided<br/>that the applications are properly signed and constructed, as defined in&#160;the Security and Permissions<br/>reference&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>,&#160;29].<br/>
<hr/>
<a name=21></a><b>10.3. Filesystem Permissions</b><br/>
Device implementations MUST support the Android file access permissions model as defined in&#160;as<br/>defined in&#160;the Security and Permissions&#160;reference&#160;<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>,&#160;29].<br/>
<b>11. Compatibility Test Suite</b><br/>
Device implementations MUST pass the&#160;Android Compatibility Test Suite (CTS)&#160;[<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources,&#160;</a>3]&#160;available<br/>from the Android Open Source Project, using the final shipping software on the device. Additionally,<br/>device implementers SHOULD use the reference implementation in the Android Open Source tree as<br/>much as possible, and MUST ensure compatibility in cases of ambiguity&#160;in CTS and for any<br/>reimplementations of parts of the reference source code.<br/>
The CTS is designed to be run on an actual device. Like any software, the CTS may itself contain bugs.<br/>The CTS will be versioned independently of this Compatibility Definition, and multiple revisions of the<br/>CTS may be released for Android 1.6. However, such releases will only fix behavioral bugs in the CTS<br/>tests and will not impose any new tests, behaviors or APIs for a given platform release.<br/>
<b>12. Contact Us</b><br/>
You can contact the Android Compatibility Team at&#160;<a href="mailto:compatibility@android.com">compatibility@android.com&#160;</a>for clarifications related to<br/>this Compatibiltiy Definition and to provide feedback on this Definition.<br/>
<hr/>
<a name=22></a><b>Appendix A: Required Application Intents</b><br/>
<b>NOTE: this list is provisional, and will be updated in the future.</b><br/>
<b>Application&#160;Actions</b><br/>
<b>Schemes&#160;MIME Types</b><br/>
<b>(none)<br/>text/plain</b><br/>
<b>http</b><br/>
<b>text/html</b><br/>
<b>Browser</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>https</b><br/>
<b>application/xhtml+xml<br/>application/<br/>vnd.wap.xhtml+xml</b><br/>
<b>(none)</b><br/>
<b>android.intent.action.WEB_SEARCH</b><br/>
<b>http</b><br/>
<b>(none)</b><br/>
<b>https</b><br/>
<b>android.media.action.IMAGE_CAPTURE<br/>android.media.action.STILL_IMAGE_CAMERA</b><br/>
<b>Camera</b><br/>
<b>android.media.action.VIDEO_CAMERA<br/>android.media.action.VIDEO_CAPTURE</b><br/>
<b>vnd.android.cursor.dir/</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>image</b><br/>
<b>android.intent.action.GET_CONTENT</b><br/>
<b>vnd.android.cursor.dir/</b><br/>
<b>android.intent.action.PICK</b><br/>
<b>video</b><br/>
<b>android.intent.action.ATTACH_DATA</b><br/>
<b>image/*<br/>video/*</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>rtsp</b><br/>
<b>video/mp4<br/>video/3gp</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>http</b><br/>
<b>video/3gpp<br/>video/3gpp2</b><br/>
<b>android.intent.action.DIAL</b><br/>
<b>Phone /</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>tel</b><br/>
<b>Contacts</b><br/>
<b>android.intent.action.CALL</b><br/>
<b>android.intent.action.DIAL</b><br/>
<b>vnd.android.cursor.dir/</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>person</b><br/>
<hr/>
<a name=23></a><b>vnd.android.cursor.dir/<br/>person<br/>vnd.android.cursor.dir/</b><br/>
<b>android.intent.action.PICK</b><br/>
<b>phone<br/>vnd.android.cursor.dir/<br/>postal-address</b><br/>
<b>vnd.android.cursor.item/<br/>person<br/>vnd.android.cursor.item/</b><br/>
<b>android.intent.action.GET_CONTENT</b><br/>
<b>phone<br/>vnd.android.cursor.item/<br/>postal-address</b><br/>
<b>text/plain</b><br/>
<b>Email</b><br/>
<b>android.intent.action.SEND</b><br/>
<b>image/*<br/>video/*</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>mailto</b><br/>
<b>android.intent.action.SENDTO</b><br/>
<b>sms</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>smsto</b><br/>
<b>SMS / MMS&#160;android.intent.action.SENDTO</b><br/>
<b>mms<br/>mmsto</b><br/>
<b>audio/*<br/>application/ogg</b><br/>
<b>Music</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>file</b><br/>
<b>application/x-ogg<br/>application/itunes</b><br/>
<b>audio/mp3<br/>audio/x-mp3</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>http</b><br/>
<b>audio/mpeg<br/>audio/mp4<br/>audio/mp4a-latm</b><br/>
<b>vnd.android.cursor.dir/<br/>artistalbum<br/>vnd.android.cursor.dir/<br/>album<br/>vnd.android.cursor.dir/</b><br/>
<b>android.intent.action.PICK</b><br/>
<b>nowplaying<br/>vnd.android.cursor.dir/<br/>track<br/>nd.android.cursor.dir/<br/>playlist<br/>vnd.android.cursor.dir/<br/>video</b><br/>
<b>media/*<br/>audio/*</b><br/>
<b>android.intent.action.GET_CONTENT</b><br/>
<b>application/ogg<br/>application/x-ogg<br/>video/*</b><br/>
<hr/>
<a name=24></a><b>content</b><br/>
<b>Package</b><br/>
<b>android.intent.action.VIEW</b><br/>
<b>file</b><br/>
<b>Installer</b><br/>
<b>package</b><br/>
<b>file</b><br/>
<b>android.intent.action.PACKAGE_INSTALL</b><br/>
<b>http<br/>https</b><br/>
<b>android.intent.action.ALL_APPS</b><br/>
<b>android.settings.SETTINGS<br/>android.settings.WIRELESS_SETTINGS<br/>android.settings.AIRPLANE_MODE_SETTINGS<br/>android.settings.WIFI_SETTINGS<br/>android.settings.APN_SETTINGS<br/>android.settings.BLUETOOTH_SETTINGS<br/>android.settings.DATE_SETTINGS<br/>android.settings.LOCALE_SETTINGS</b><br/>
<b>Settings</b><br/>
<b>android.settings.INPUT_METHOD_SETTINGS<br/>com.android.settings.SOUND_SETTINGS<br/>com.android.settings.DISPLAY_SETTINGS<br/>android.settings.SECURITY_SETTING<br/>android.settings.LOCATION_SOURCE_SETTINGS<br/>android.settings.INTERNAL_STORAGE_SETTINGS<br/>android.settings.MEMORY_CARD_SETTINGS<br/>android.intent.action.SET_WALLPAPER</b><br/>
<b>Search</b><br/>
<b>android.intent.action.SEARCH</b><br/>
<b>query</b><br/>
<b>android.intent.action.SEARCH_LONG_PRESS</b><br/>
<b>Voice</b><br/>
<b>android.intent.action.VOICE_COMMAND</b><br/>
<b>Contacts Management</b><br/>
<b>Intent Action</b><br/>
<b>Description</b><br/>
<b>Starts an Activity that lets the user pick</b><br/>
<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#ATTACH_IMAGE"><b>ATTACH_IMAGE</b></a><br/>
<b>a contact to attach an image to.</b><br/>
<b>Used</b><br/>
<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#EXTRA_CREATE_DESCRIPTION"><b>EXTRA_CREATE_DESCRIPTION</b></a><br/>
<b>with&#160;<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SHOW_OR_CREATE_CONTACT">SHOW_OR_CREATE_CONTACT&#160;</a></b><b>to<br/>specify an exact description to be</b><br/>
<hr/>
<a name=25></a><b>shown when prompting user about<br/>creating a new contact.</b><br/>
<b>Used<br/>with&#160;<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SHOW_OR_CREATE_CONTACT">SHOW_OR_CREATE_CONTACT&#160;</a></b><b>to</b><br/>
<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#EXTRA_FORCE_CREATE"><b>EXTRA_FORCE_CREATE</b></a><br/>
<b>force creating a new contact if no<br/>matching contact found.</b><br/>
<b>This is the intent that is fired when a</b><br/>
<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SEARCH_SUGGESTION_CLICKED"><b>SEARCH_SUGGESTION_CLICKED</b></a><br/>
<b>search suggestion is clicked on.</b><br/>
<b>This is the intent that is fired when a</b><br/>
<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED"><b>SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED&#160;</b></a><b>search suggestion for creating a</b><br/>
<b>contact is clicked on.</b><br/>
<b>This is the intent that is fired when a</b><br/>
<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED"><b>SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED</b></a><br/>
<b>search suggestion for dialing a number<br/>is clicked on.</b><br/>
<b>Takes as input a data URI with a mailto:</b><br/>
<a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SHOW_OR_CREATE_CONTACT"><b>SHOW_OR_CREATE_CONTACT</b></a><br/>
<b>or tel: scheme.</b><br/>
<hr/>
<a name=26></a>Appendix B: Required Broadcast Intents<b>NOTE: this list is provisional, and will be<br/>updated in the future.</b><br/>
Intent Action<br/>
Description<br/>
Broadcast Action: This is broadcast once, after the<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED">ACTION_BOOT_COMPLETED</a><br/>
system has finished booting.<br/>
Broadcast Action: This is broadcast once, when a<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_CALL_BUTTON">ACTION_CALL_BUTTON</a><br/>
call is received.<br/>
Broadcast Action: The &#34;Camera Button&#34; was<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_CAMERA_BUTTON">ACTION_CAMERA_BUTTON</a><br/>
pressed.<br/>
Broadcast Action: The current<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_CONFIGURATION_CHANGED">ACTION_CONFIGURATION_CHANGED</a><br/>
device&#160;<a href="http://developer.android.com/reference/android/content/res/Configuration.html">Configuration&#160;</a>(orientation, locale, etc) has<br/>changed.<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_DATE_CHANGED">ACTION_DATE_CHANGED</a><br/>
Broadcast Action: The date has changed.<br/>
Broadcast Action: Indicates low memory condition<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_DEVICE_STORAGE_LOW">ACTION_DEVICE_STORAGE_LOW</a><br/>
on the device<br/>
Broadcast Action: Indicates low memory condition<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_DEVICE_STORAGE_OK">ACTION_DEVICE_STORAGE_OK</a><br/>
on the device no longer exists<br/>
Broadcast Action: Wired Headset plugged in or<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_HEADSET_PLUG">ACTION_HEADSET_PLUG</a><br/>
unplugged.<br/>
Broadcast Action: An input method has been<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_INPUT_METHOD_CHANGED">ACTION_INPUT_METHOD_CHANGED</a><br/>
changed.<br/>
Broadcast Action: External media was removed<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_BAD_REMOVAL">ACTION_MEDIA_BAD_REMOVAL</a><br/>
from SD card slot, but mount point was not<br/>unmounted.<br/>
Broadcast Action: The &#34;Media Button&#34; was<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_BUTTON">ACTION_MEDIA_BUTTON</a><br/>
pressed.<br/>
Broadcast Action: External media is present, and<br/>being disk-checked The path to the mount point for<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_CHECKING">ACTION_MEDIA_CHECKING</a><br/>
the checking media is contained in the<br/>Intent.mData field.<br/>
Broadcast Action: User has expressed the desire to<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_EJECT">ACTION_MEDIA_EJECT</a><br/>
remove the external storage media.<br/>
Broadcast Action: External media is present and<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_MOUNTED">ACTION_MEDIA_MOUNTED</a><br/>
mounted at its mount point.<br/>
Broadcast Action: External media is present, but is<br/>using an incompatible fs (or is blank) The path to<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_NOFS">ACTION_MEDIA_NOFS</a><br/>
the mount point for the checking media is<br/>contained in the Intent.mData field.<br/>
Broadcast Action: External media has been<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_REMOVED">ACTION_MEDIA_REMOVED</a><br/>
removed.<br/>
Broadcast Action: The media scanner has finished<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_FINISHED">ACTION_MEDIA_SCANNER_FINISHED</a><br/>
scanning a directory.<br/>
Broadcast Action: Request the media scanner to<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_SCAN_FILE">ACTION_MEDIA_SCANNER_SCAN_FILE</a><br/>
scan a file and add it to the media database.<br/>
<hr/>
<a name=27></a>Broadcast Action: The media scanner has started<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_STARTED">ACTION_MEDIA_SCANNER_STARTED</a><br/>
scanning a directory.<br/>
Broadcast Action: External media is unmounted<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SHARED">ACTION_MEDIA_SHARED</a><br/>
because it is being shared via USB mass storage.<br/>
Broadcast Action: External media is present but<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_UNMOUNTABLE">ACTION_MEDIA_UNMOUNTABLE</a><br/>
cannot be mounted.<br/>
Broadcast Action: External media is present, but<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_UNMOUNTED">ACTION_MEDIA_UNMOUNTED</a><br/>
not mounted at its mount point.<br/>
Broadcast Action: An outgoing call is about to be<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_NEW_OUTGOING_CALL">ACTION_NEW_OUTGOING_CALL</a><br/>
placed.<br/>
Broadcast Action: A new application package has<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED">ACTION_PACKAGE_ADDED</a><br/>
been installed on the device.<br/>
Broadcast Action: An existing application package<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_CHANGED">ACTION_PACKAGE_CHANGED</a><br/>
has been changed (e.g. a component has been<br/>enabled or disabled.<br/>
Broadcast Action: The user has cleared the data of<br/>a package. This should be preceded<br/>by&#160;<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_RESTARTED">ACTION_PACKAGE_RESTARTED, after which</a><br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_DATA_CLEARED">ACTION_PACKAGE_DATA_CLEARED</a><br/>
all of its persistent data is erased and this<br/>broadcast sent. Note that the cleared package<br/>does&#160;<i>not&#160;</i>receive this broadcast. The data contains<br/>the name of the package.<br/>
Broadcast Action: An existing application package<br/>has been removed from the device. The data<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REMOVED">ACTION_PACKAGE_REMOVED</a><br/>
contains the name of the package. The package<br/>that is being installed does&#160;<i>not&#160;</i>receive this Intent.<br/>
Broadcast Action: A new version of an application<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED">ACTION_PACKAGE_REPLACED</a><br/>
package has been installed, replacing an existing<br/>version that was previously installed.<br/>
Broadcast Action: The user has restarted a<br/>package, and all of its processes have been killed.<br/>All runtime state associated with it (processes,<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_RESTARTED">ACTION_PACKAGE_RESTARTED</a><br/>
alarms, notifications, etc) should be removed. Note<br/>that the restarted package does&#160;<i>not&#160;</i>receive this<br/>broadcast. The data contains the name of the<br/>package.<br/>
Broadcast Action: Some content providers have<br/>parts of their namespace where they publish new<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PROVIDER_CHANGED">ACTION_PROVIDER_CHANGED</a><br/>
events or items that the user may be especially<br/>interested in.<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF">ACTION_SCREEN_OFF</a><br/>
Broadcast Action: Sent after the screen turns off.<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON">ACTION_SCREEN_ON</a><br/>
Broadcast Action: Sent after the screen turns on.<br/>
Broadcast Action: A user ID has been removed<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_UID_REMOVED">ACTION_UID_REMOVED</a><br/>
from the system.<br/>
Broadcast Action: The device has entered USB<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_UMS_CONNECTED">ACTION_UMS_CONNECTED</a><br/>
Mass Storage mode.<br/>
<hr/>
<a name=28></a>Broadcast Action: The device has exited USB<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_UMS_DISCONNECTED">ACTION_UMS_DISCONNECTED</a><br/>
Mass Storage mode.<br/>
Broadcast Action: Sent when the user is present<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_USER_PRESENT">ACTION_USER_PRESENT</a><br/>
after device wakes up (e.g when the keyguard is<br/>gone).<br/>
Broadcast Action: The current system wallpaper<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_WALLPAPER_CHANGED">ACTION_WALLPAPER_CHANGED</a><br/>
has changed.<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_CHANGED">ACTION_TIME_CHANGED</a><br/>
Broadcast Action: The time was set.<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_TICK">ACTION_TIME_TICK</a><br/>
Broadcast Action: The current time has changed.<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_TIMEZONE_CHANGED">ACTION_TIMEZONE_CHANGED</a><br/>
Broadcast Action: The timezone has changed.<br/>
Broadcast Action: The charging state, or charge<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED">ACTION_BATTERY_CHANGED</a><br/>
level of the battery has changed.<br/>
Broadcast Action: Indicates low battery condition<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_LOW">ACTION_BATTERY_LOW</a><br/>
on the device. This broadcast corresponds to the<br/>&#34;Low battery warning&#34; system dialog.<br/>
Broadcast Action: Indicates the battery is now okay<br/>after being low. This will be sent<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_OKAY">ACTION_BATTERY_OKAY</a><br/>
after&#160;<a href="/tmp/1266564852215-0/../../reference/android/content/Intent.html#ACTION_BATTERY_LOW">ACTION_BATTERY_LOW&#160;</a>once the battery<br/>has gone back up to an okay state.<br/>
<b>Network State</b><br/>
Intent Action<br/>
Description<br/>
Broadcast intent action indicating that the<br/>
<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#NETWORK_STATE_CHANGED_ACTION">NETWORK_STATE_CHANGED_ACTION</a><br/>
state of Wi-Fi connectivity has changed.<br/>
Broadcast intent action indicating that the<br/>
<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#RSSI_CHANGED_ACTION">RSSI_CHANGED_ACTION</a><br/>
RSSI (signal strength) has changed.<br/>
Broadcast intent action indicating that a<br/>
<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#SUPPLICANT_STATE_CHANGED_ACTION">SUPPLICANT_STATE_CHANGED_ACTION</a><br/>
connection to the supplicant has been<br/>established or lost.<br/>
Broadcast intent action indicating that Wi-Fi<br/>
<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#WIFI_STATE_CHANGED_ACTION">WIFI_STATE_CHANGED_ACTION</a><br/>
has been enabled, disabled, enabling,<br/>disabling, or unknown.<br/>
The network IDs of the configured networks<br/>
<a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#NETWORK_IDS_CHANGED_ACTION">NETWORK_IDS_CHANGED_ACTION</a><br/>
could have changed.<br/>
Broadcast intent action indicating that the<br/>
<a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#ACTION_BACKGROUND_DATA_SETTING_CHANGED">ACTION_BACKGROUND_DATA_SETTING_CHANGED&#160;</a>setting for background data usage has<br/>
changed values.<br/>
Broadcast intent indicating that a change in<br/>
<a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION">CONNECTIVITY_ACTION</a><br/>
network connectivity has occurred.<br/>
Broadcast Action: The user has switched the<br/>
<a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_AIRPLANE_MODE_CHANGED">ACTION_AIRPLANE_MODE_CHANGED</a><br/>
phone into or out of Airplane Mode.<br/>
<hr/>
<a name=29></a><hr/>
<a name=30></a>Appendix C: Future Considerations&#160;This appendix clarifies certain portions of this Android<br/>1.6 Compatibility Definition, and in some cases discusses anticipated or planned changes intended for a<br/>future version of the Android platform. This appendix is for informational and planning purposes only, and<br/>is not part of the Compatibility Definition for Android 1.6.<br/>
<b>1. Non-telephone Devices</b><br/>
Android 1.6 is intended exclusively for telephones; telephony functionality is not optional. Future versions<br/>of the Android platform are expected to make telephony optional (and thus allow for non-phone Android<br/>devices), but only phones are compatible with Android 1.6.<br/>
<b>2. Bluetooth Compatibility</b><br/>
The Android 1.6 release of Android does not support Bluetooth APIs, so from a compatibility perspective<br/>Bluetooth does not impose any considerations for this version of the platform. However, a future version<br/>of Android will introduce Bluetooth APIs.&#160;At that point, supporting Bluetooth will become mandatory for<br/>compatibility.<br/>
Consequently, we strongly recommend that Android 1.6 devices include Bluetooth, so that they will be<br/>compatible with future versions of Android that require Bluetooth.<br/>
<b>3. Required Hardware Components</b><br/>
All hardware components in Section 8 (including WiFi, magnetometer/compass, accelerometer, etc.) are<br/>required and may not be omitted.&#160;Future versions of Android are expected to make some (but not all) of<br/>these components optional, in tandem with corresponding tools for third-party developers to handle these<br/>changes.<br/>
<b>4. Sample Applications</b><br/>
The Compatibility Definition Document for a future version of Android will include a more extensive and<br/>representative list of applications than the ones listed in Section 4, above. For Android 1.6, the<br/>applications listed in Section 4 must be tested.<br/>
<b>5. Touch Screens</b><br/>
Future versions of the Compatibility Definition may or may not allow for devices to omit touchscreens.<br/>However, currently much of the Android framework implementation assumes the existence of a<br/>touchscreen; omitting a touchscreen would break substantially all current third-party Android applications,<br/>so in Android 1.6 a touchscreen is required for compatibility.<br/>
<hr/>
<a name=31></a><b>6. Performance</b><br/>
Future versions of CTS will also measure the CPU utilization and performance of the following<br/>components of an implementation:<br/>
&#160;2D graphics<br/>&#160;3D graphics<br/>&#160;Video playback<br/>&#160;Audio playback<br/>&#160;Bluetooth A2DP playback<br/>
<hr/>
<a name="outline"></a><h1>Document Outline</h1>
<ul>
<li><a href="android-1.6-cdd.html#4">1. Introduction</a></li>
<li><a href="android-1.6-cdd.html#4">2. Resources</a></li>
<li><a href="android-1.6-cdd.html#5">3. Software</a>
<ul>
<li><a href="android-1.6-cdd.html#5">3.1. Managed API Compatibility</a></li>
<li><a href="android-1.6-cdd.html#6">3.2. Soft API Compatibility</a>
<ul>
<li><a href="android-1.6-cdd.html#6">3.2.1. Permissions</a></li>
<li><a href="android-1.6-cdd.html#6">3.2.2. Build Parameters</a></li>
<li><a href="android-1.6-cdd.html#8">3.2.3. Intent Compatibility</a>
<ul>
<li><a href="android-1.6-cdd.html#8">3.2.3.1. Core Application Intents</a></li>
<li><a href="android-1.6-cdd.html#8">3.2.3.2. Intent Overrides</a></li>
<li><a href="android-1.6-cdd.html#8">3.2.3.3. Intent Namespaces</a></li>
<li><a href="android-1.6-cdd.html#9">3.2.3.4. Broadcast Intents</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="android-1.6-cdd.html#9">3.3. Native API Compatibility</a></li>
<li><a href="android-1.6-cdd.html#9">3.4. Web API Compatibility</a></li>
<li><a href="android-1.6-cdd.html#10">3.5. API Behavioral Compatibility</a></li>
<li><a href="android-1.6-cdd.html#10">3.6. API Namespaces</a></li>
<li><a href="android-1.6-cdd.html#11">3.7. Virtual Machine Compatibility</a></li>
<li><a href="android-1.6-cdd.html#11">3.8. User Interface Compatibility</a>
<ul>
<li><a href="android-1.6-cdd.html#11">3.8.1. Widgets</a></li>
<li><a href="android-1.6-cdd.html#12">3.8.2. Notifications</a></li>
<li><a href="android-1.6-cdd.html#12">3.8.3. Search</a></li>
<li><a href="android-1.6-cdd.html#12">3.8.4. Toasts</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="android-1.6-cdd.html#12">4. Reference Software Compatibility</a></li>
<li><a href="android-1.6-cdd.html#13">5. Application Packaging Compatibility</a></li>
<li><a href="android-1.6-cdd.html#13">6. Multimedia Compatibility</a></li>
<li><a href="android-1.6-cdd.html#14">7. Developer Tool Compatibility</a></li>
<li><a href="android-1.6-cdd.html#15">8. Hardware Compatibility</a>
<ul>
<li><a href="android-1.6-cdd.html#15">8.1. Display</a>
<ul>
<li><a href="android-1.6-cdd.html#15">8.1.1. Standard Display Configurations</a></li>
<li><a href="android-1.6-cdd.html#16">8.1.2. Non-Standard Display Configurations</a></li>
<li><a href="android-1.6-cdd.html#16">8.1.3. Display Metrics</a></li>
</ul>
</li>
<li><a href="android-1.6-cdd.html#16">8.2. Keyboard</a></li>
<li><a href="android-1.6-cdd.html#16">8.3. Non-touch Navigation</a></li>
<li><a href="android-1.6-cdd.html#17">8.4. Screen Orientation</a></li>
<li><a href="android-1.6-cdd.html#17">8.5. Touchscreen input</a></li>
<li><a href="android-1.6-cdd.html#17">8.6. USB</a></li>
<li><a href="android-1.6-cdd.html#17">8.7. Navigation keys</a></li>
<li><a href="android-1.6-cdd.html#17">8.8. WiFi</a></li>
<li><a href="android-1.6-cdd.html#18">8.9. Camera</a>
<ul>
<li><a href="android-1.6-cdd.html#18">8.9.1. Non-Autofocus Cameras</a></li>
</ul>
</li>
<li><a href="android-1.6-cdd.html#18">8.10. Accelerometer</a></li>
<li><a href="android-1.6-cdd.html#19">8.11. Compass</a></li>
<li><a href="android-1.6-cdd.html#19">8.12. GPS</a></li>
<li><a href="android-1.6-cdd.html#19">8.13. Telephony</a></li>
<li><a href="android-1.6-cdd.html#19">8.14. Volume controls</a></li>
</ul>
</li>
<li><a href="android-1.6-cdd.html#19">9. Performance Compatibility</a></li>
<li><a href="android-1.6-cdd.html#20">10. Security Model Compatibility</a>
<ul>
<li><a href="android-1.6-cdd.html#20">10.1. Permissions</a></li>
<li><a href="android-1.6-cdd.html#20">10.2. User and Process Isolation</a></li>
<li><a href="android-1.6-cdd.html#21">10.3. Filesystem Permissions</a></li>
</ul>
</li>
<li><a href="android-1.6-cdd.html#21">11. Compatibility Test Suite</a></li>
<li><a href="android-1.6-cdd.html#21">12. Contact Us</a></li>
<li><a href="android-1.6-cdd.html#22">Appendix A: Required Application Intents</a>
<ul>
<li><a href="android-1.6-cdd.html#30">1. Non-telephone Devices</a></li>
<li><a href="android-1.6-cdd.html#30">2. Bluetooth Compatibility</a></li>
<li><a href="android-1.6-cdd.html#30">3. Required Hardware Components</a></li>
<li><a href="android-1.6-cdd.html#30">4. Sample Applications</a></li>
<li><a href="android-1.6-cdd.html#30">5. Touch Screens</a></li>
<li><a href="android-1.6-cdd.html#31">6. Performance</a></li>
</ul>
</li>
</ul>
<hr/>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,47 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 2.1</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a href="android-2.1-cdd.pdf">Android 2.1 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 2.1-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 2.1 are:</p>
<ul>
<li>
<p>2.1</p>
</li>
<li>
<p>2.1-update1</p>
</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,47 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 2.2</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a href="android-2.2-cdd.pdf">Android 2.2 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 2.2-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 2.2 are:</p>
<ul>
<li>
<p>2.2</p>
</li>
<li>
<p>2.2.1</p>
</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,42 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 2.3</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a href="android-2.3-cdd.pdf">Android 2.3 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 2.3-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 2.3 are:</p>
<ul>
<li>2.3.3</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,53 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 4.0</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a href="android-4.0-cdd.pdf">Android 4.0 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 4.0-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 4.0 are:</p>
<ul>
<li>
<p>4.0</p>
</li>
<li>
<p>4.0.1</p>
</li>
<li>
<p>4.0.3</p>
</li>
<li>
<p>4.0.4</p>
</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,47 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 4.1</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a href="android-4.1-cdd.pdf">Android 4.1 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 4.1-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 4.1 are:</p>
<ul>
<li>
<p>4.1</p>
</li>
<li>
<p>4.1.1</p>
</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,42 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 4.2</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a href="android-4.2-cdd.pdf">Android 4.2 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 4.2-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 4.2 are:</p>
<ul>
<li>4.2</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,43 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 4.3</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a href="android-4.3-cdd.pdf">Android 4.3 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 4.3-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 4.3 are:</p>
<ul>
<li>4.3</li>
<li>4.3.1</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,47 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 4.4</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a
href="android-4.4-cdd.pdf">Android 4.4 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 4.4-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 4.4 are:</p>
<ul>
<li>4.4</li>
<li>4.4.1</li>
<li>4.4.2</li>
<li>4.4.3</li>
<li>4.4.4</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,45 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 5.0</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a
href="android-5.0-cdd.pdf">Android 5.0 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 5.0-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 5.0 are:</p>
<ul>
<li>5.0</li>
<li>5.0.1</li>
<li>5.0.2</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<head>
<title>Android 5.1 Compatibility Definition</title>
<link rel="stylesheet" type="text/css" href="android-cdd-cover.css"/>
</head>
<body>
<table>
<tr>
<td>
<p><img src="../images/android-logo.png" alt="Android logo" class="padding"/></p>
<p class="title">Compatibility Definition</p>
</td>
</tr>
<tr>
<td>
<img src="../images/android-lollipop-mr1.jpg" alt="Lollipop logo" style="border-top: 5px solid orange; border-bottom: 5px solid orange"/>
</td>
</tr>
<tr>
<td>
<p class="subtitle">Android 5.1</p>
<p class="cover-text">Last updated: July 10th, 2015</p>
<p class="cover-text">Copyright &copy; 2015, Google Inc. All rights reserved.</p>
<p class="cover-text"><a href="mailto:compatibility@android.com">compatibility@android.com</a></p>
</td>
</tr>
<tr>
<td>
<p class="padding-bottom"></p>
</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,44 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 5.1</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a
href="android-5.1-cdd.pdf">Android 5.1 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 5.1-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 5.1 are:</p>
<ul>
<li>5.1</li>
<li>5.1.1</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,43 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 6.0</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a
href="android-6.0-cdd.pdf">Android 6.0 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 6.0-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 6.0 are:</p>
<ul>
<li>6.0</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,43 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 7.0</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a
href="android-7.0-cdd.pdf">Android 7.0 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 7.0-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 7.0 are:</p>
<ul>
<li>7.0</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,43 @@
<html devsite>
<head>
<title>Permitted Version Strings for Android 7.1</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>As described in Section 3.2.2 of the <a
href="android-7.1-cdd.pdf">Android 7.1 Compatibility Definition</a>,
only certain strings are allowable for the system property
<code>android.os.Build.VERSION.RELEASE</code>. The reason for this is that
applications and web sites may rely on predictable values for this string, and
so that end users can easily and reliably identify the version of Android
running on their devices.</p>
<p>Because subsequent releases of the Android software may revise this string,
but not change any API behavior, such releases may not be accompanied by a new
Compatibility Definition Document. This page lists the versions that are
allowable by an Android 7.1-based system. The only permitted values for
<code>android.os.Build.VERSION.RELEASE</code> for Android 7.1 are:</p>
<ul>
<li>7.1</li>
</ul>
</body>
</html>

View file

@ -0,0 +1,94 @@
CDD GENERATION README
=======================
Or, how I stopped hating the cdd and learned to love html-to-pdf conversions.
OVERVIEW
==================
TL:DR This document describes how to create a CDD PDF from the CDD HTML file. You need to generate a cover file and a body file, then use a PDF editor to insert the cover page into the body.pdf.
The Android Compatibilty Definition Document (CDD) is maintained as an html file but distributed as a .pdf. The partner team updates the CDD for every new major Android release and the APE doc team posts the new .pdf to source.android.com in http://source.android.com/compatibility/.
To create the pdf from the html file, use wkhtmltopdf (http://wkhtmltopdf.org/) plus a little bit of PDF editing. You can do the conversion on a Mac or Linux (or even Windows); you just need to download the wkhtmltopdf pkg for your system. However, you must perform the editing in a professional PDF editor; for Mac and Windows this is Adobe Acrobat Pro; for Linux this is PDF Studio 10 (none of the free Linux PDF apps can do the swap successfully and still maintain the PDF bookmarks and links).
1. INSTALL WKHTMLTOPDF
=======================
Go to http://wkhtmltopdf.org/ and download the app for your system OS. It's command line only.
2. GENERATE COVER PDF
=======================
Syntax:
wkhtmltopdf [page-size] [page-margins] cover path-to-html path-to-pdf
page-size
Set to letter.
Ex. -s letter
page-margins
set to 0in (cover goes all the way to page edges)
Ex. -B 0in -T 0in -L 0in -R 0in
path-to-html
The full path to the cover html file. You will need to update the cover text to specify the release name , number, and date. You might also need to swap the image out for the image associated with the release (store images in compatibility/images).
Ex: docs/source.android.com/src/compatibility/5.1/android-cdd-cover_5_1.html
path-to-pdf
The full path to where you want the output pdf file to reside. If the pdf file is NOT open (in Preview or some other app), running the command will silently overwrite the existing .pdf.
Ex. docs/source.android.com/src/compatibility/5.1/android-cdd-cover.pdf
Example cover command run from top-level project:
wkhtmltopdf -s letter -B 0in -T 0in -L 0in -R 0in cover docs/source.android.com/src/compatibility/5.1/android-cdd-cover_5_1.html docs/source.android.com/src/compatibility/5.1/android-cdd-cover.pdf
Example cover command run from 5.1 release folder:
wkhtmltopdf -s letter -B 0in -T 0in -L 0in -R 0in cover android-cdd-cover_5_1.html /android-cdd-cover.pdf
3. GENERATE BODY PDF
====================
Syntax:
wkthmltopdf [page-margins] page path-to-html path-to-footer path-to-pdf
page-margins
set to 1in on top and bottom, .75in on left and right.
Ex. -B 1in -T 1in -L .75in -R .75in
path-to-html
The full path to the body html file. This is the main cdd.html, which will change with each release.
Ex. docs/source.android.com/src/compatibility/5.1/android-5.1-cdd.html
path-to-footer
The full path to the footer html file. This is a simple html file that contains the android logo and some javascript to calculate the page number and count. The footer should NOT change from release to release.
Ex. --footer-html docs/source.android.com/src/compatibility/5.1/android-cdd-footer.html
path-to-pdf
The full path to where you want the output pdf file to reside. If the pdf file is NOT open (in Preview or some other app), running the command will silently overwrite the existing .pdf.
Ex. docs/source.android.com/src/compatibility/5.1/android-cdd-body.pdf
Example body command run from top-level project:
wkhtmltopdf -B 1in -T 1in -L .75in -R .75in page docs/source.android.com/src/compatibility/5.1/android-5.1-cdd.html --footer-html docs/source.android.com/src/compatibility/5.1/android-cdd-footer.html docs/source.android.com/src/compatibility/5.1/android-cdd-body.pdf
Example body command run from 5.1 release folder:
wkhtmltopdf -B 1in -T 1in -L .75in -R .75in page android-5.1-cdd.html --footer-html android-cdd-footer.html android-cdd-body.pdf
4. CREATE CDD PDF
==================
A. Open the body.pdf:
On a Mac or Windows, use Adobe Acrobat Pro (you *cannot* use Acrobat Reader for this task).
On Ubuntu, use PDF Studio 10 (other free pdf programs *cannot* handle the merge + bookmarks).
B. Replace page 1 of the body.pdf with page 1 of the cover.pdf. For example, if you are using Adobe Acrobat Pro:
1. Open the body.pdf in Adobe Acrobat Pro.
2. Select Tools > Pages > Replace.
2. Open the cover.pdf file.
3. Replace page 1 of the body.pdf with page 1 of the cover.pdf.
C. Save the new file as the android-cdd_x_x.pdf (where X_X is the number of the release, such as 5.1).
QUESTIONS?
==================
- For details on wkhtmltopdf, see http://wkhtmltopdf.org/usage/wkhtmltopdf.txt.
- CDD html, css, and pdf files are in docs/source.android.com/src/compatibility/release.
- CDD images are in docs/source.android.com/src/compatibility/images.

View file

@ -0,0 +1,47 @@
toc:
- title: Introduction
path: /compatibility/
- title: Program Overview
path: /compatibility/overview
- title: Compatibility Definition
section:
- title: Overview
path: /compatibility/cdd/
- title: CDD in HTML
path: /compatibility/android-cdd
- title: CDD in PDF
path: /compatibility/android-cdd.pdf
- title: Compatibility Test Suite
section:
- title: Overview
path: /compatibility/cts/
- title: Set up CTS
path: /compatibility/cts/setup
- title: Run CTS
path: /compatibility/cts/run
- title: Run CTS Verifier
section:
- title: Overview
path: /compatibility/cts/verifier
- title: Audio Framework
path: /compatibility/cts/audio-framework
- title: Near Ultrasound Tests
path: /compatibility/cts/near-ultrasound
- title: Rotation Vector Crosscheck
path: /compatibility/cts/rotation-vector
- title: Camera Testing
section:
- title: Camera HAL Testing
path: /compatibility/cts/camera-hal
- title: Camera ITS-in-a-Box
path: /compatibility/cts/camera-its-box
- title: Camera ITS-in-a-Box Assembly
path: /compatibility/cts/camera-its-box-assembly
- title: Interpret Results
path: /compatibility/cts/interpret
- title: Develop CTS
path: /compatibility/cts/development
- title: Downloads
path: /compatibility/cts/downloads
- title: Contact Us
path: /compatibility/contact-us

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,374 @@
/**
* Link Styles
*/
a:link {
color: #09C;
text-decoration: underline;
}
a:visited {
color: #639;
}
a:hover,
a:focus,
a:active {
color: #09C;
}
/**
* Cover Styles
*/
#cover {
width: 10.5in;
height: 13.25in;
background-color: orange;
}
#cover-top {
background-color: black;
width: 100%;
height: 3in;
padding-top: 70px;
margin-bottom: 10px;
}
#cover-image {
background-color: black;
width: 100%;
height: 5in;
padding: 0px;
margin: 20px 0px 8px 0px;
}
#cover-bottom {
background-color: black;
width: 100%;
height: 3.7in;
padding: 40px 0px 40px 0px;
margin-top: 8px;
}
#cover a:link,
#cover a:visited,
#cover a:hover {
text-decoration: none;
}
#main {
width: 950px;
overflow: visible;
page-break-before: always;
}
#footer {
width: 8.5in;
height: .75in;
margin-top: .25in;
color: #333;
font: 10pt/14pt Roboto, Arial, Helvetica, sans-serif;
}
.title {
color: white;
font: 84px/90px Roboto, Arial, Helvetica, sans-serif;
padding: 40pt 20pt 15pt 50pt;
text-align: left;
}
.subtitle {
color: white;
font: 60px/70px Roboto, Arial, Helvetica, sans-serif;
padding: 40pt 5pt 40pt 60pt;
text-align: left;
}
.right {
text-align: right;
}
.white {
color: white;
}
.padding {
padding: 20pt 20pt 0pt 60pt;
}
.cover-text {
font: 20px/25px Roboto, Arial, Helvetica, sans-serif;
color: white;
padding: 5pt 5pt 5pt 60pt;
text-align: left;
}
.small {
font-size: 65%;
font-weight: 700;
}
/**
* Heading Styles
*/
h1 {
color: #333;
font: 22pt/24pt Roboto, Arial, Helvetica, sans-serif;
padding: 10pt 0pt 0pt 0pt;
text-align: left;
}
h2 {
color: #693;
font: 20pt/22pt Roboto, Arial, Helvetica, sans-serif;
padding: 8pt 0pt 0pt 0pt;
text-align: left;
page-break-after: avoid;
}
h3 {
color: #333;
font: bold 18pt/20pt Roboto, Arial, Helvetica, sans-serif;
padding: 4pt 0pt 0pt 0pt;
text-align: left;
page-break-after: avoid;
}
h4 {
color: #607D8B;
font: bold 16pt/18pt Roboto, Arial, Helvetica, sans-serif;
padding: 4pt 0pt 0pt 0pt;
text-align: left;
page-break-after: avoid;
}
h5 {
color: #333;
font: italic 16pt/18pt Roboto, Arial, Helvetica, sans-serif;
padding: 0pt 0pt 0pt 0pt;
text-align: left;
page-break-after: avoid;
}
/**
* Use h6 ONLY for table of contents
*/
h6 {
color: #333;
font: bold 16pt/18pt Roboto, Arial, Helvetica, sans-serif;
padding: 10pt 0pt 0pt 0pt;
text-align: left;
page-break-before: always;
}
/**
* Body Styles
*/
body {
color: #333;
font: 16pt/20pt Roboto, Arial, Helvetica, sans-serif;
margin: 0;
padding: 5pt 5pt 5pt 10pt;
}
p {
color: #333;
font: 16pt/20pt Roboto, Arial, Helvetica, sans-serif;
margin: 0;
padding: 5pt 0pt 1pt 0pt;
}
li {
color: #333;
font: 16pt/20pt Roboto, Arial, Helvetica, sans-serif;
margin: 0;
padding: 2pt 50pt 2pt 0pt;
}
sup {
font-weight: 800;
font-size: 10pt;
}
code {
font-family: "Lucida Console";
}
/**
* Table Styles
*/
table {
border: 1px solid gray;
border-collapse: collapse;
margin: 10px 0px 10px 0px;
width: 100%;
overflow: visible;
}
td {
border: 1px solid gray;
color: #333;
font: 16pt/20pt Roboto, Arial, Helvetica, sans-serif;
padding: 5pt;
overflow: visible;
}
th {
background-color: #CCC;
border: 1px solid gray;
color: #333;
font: bold 16pt/20pt Roboto, Arial, Helvetica, sans-serif;
padding: 5pt;
overflow: visible;
}
p.table_footnote {
color: #333;
font: 14pt/16pt Roboto, Arial, Helvetica, sans-serif;
margin: 0;
padding: 5pt 5pt 5pt 5pt;
}
li.table_list {
color: #333;
font: 16pt/20t Roboto, Arial, Helvetica, sans-serif;
margin-left: -10pt;
padding: 2pt 0pt 2pt 0pt;
}
/**
* Used in the footer
*/
table.noborder {
border: 0px;
margin: 10px 0px 10px 0px;
width: 100%;
}
td.noborder {
border: 0px;
color: #333;
font: 10pt/12pt Roboto, Arial, Helvetica, sans-serif;
padding: 10px 0px 5px 0px;
}
/**
* TOC Styles
*/
#toc a:link,
#toc a:visited,
#toc a:hover {
color: black;
text-decoration: none;
}
#toc p.toc_h1 a:link,
#toc p.toc_h1 a:visited,
#toc p.toc_h1 a:hover {
color: #99CC00;
}
#toc {
width: 950px;
}
#toc_left {
float: left;
padding-top:15px;
padding-bottom:15px;
width: 470px;
}
#toc_right {
float: right;
padding-top:15px;
padding-bottom:15px;
width: 470px;
}
p.toc_h1 {
color: #99CC00;
font: 20pt/22pt Roboto, Arial, Helvetica, sans-serif;
padding: 15px 0px 0px 0px;
}
p.toc_h2 {
color: black;
font: 18pt/20pt Roboto, Arial, Helvetica, sans-serif;
margin-left: 20px;
padding: 15px 0px 0px 0px;
}
p.toc_h3 {
color: black;
font: 16pt/18pt Roboto, Arial, Helvetica, sans-serif;
margin-left: 45px;
padding: 10px 0px 0px 0px;
}
p.toc_h4 {
color: black;
font: 14pt/16pt Roboto, Arial, Helvetica, sans-serif;
margin-left: 85px;
padding: 10px 0px 0px 0px;
}
p.toc_h5 {
color: black;
font: 14pt/16pt Roboto, Arial, Helvetica, sans-serif;
margin-left: 105px;
}
/**
* Note Styles
*/
div.note
{
border-left: 20px solid #0099cc;
padding-left: 10px;
margin: 5px 40px 5px 5px;
}
div.tip
{
border-left: 4px solid #93c47d;
padding-left: 10px;
margin: 5px 40px 5px 5px;
}
div.warning
{
border-left: 4px solid red;
padding-left: 10px;
margin: 5px 40px 5px 5px;
}
/**
* Media Styles
*/
@media print {
@page {
margin: 1in;
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,161 @@
<html devsite>
<head>
<title>Android Compatibility Definition Document</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Welcome to the Android Compatibility Definition Document (CDD). This document
enumerates the requirements that must be met in order for devices to be
compatible with the latest version of Android. To be considered compatible with
Android, device implementations MUST meet the requirements
presented in this Compatibility Definition, including any documents
incorporated via reference. For each release of the Android platform, a
detailed CDD will be provided. The CDD represents the "policy" aspect of
Android compatibility.</p>
<p>It is important the policy of the Android compatibility program is codified
explicitly as no test suite, including CTS, can truly be comprehensive. For
instance, the CTS includes a test that checks for the presence and correct
behavior of OpenGL graphics APIs, but no software test can verify that the
graphics actually appear correctly on the screen. More generally, it's
impossible to test the presence of hardware features such as keyboards, display
density, Wi-Fi, and Bluetooth.</p>
<p>The CDD's role is to codify and clarify specific requirements, and
eliminate ambiguity. The CDD does not attempt to be comprehensive. Since
Android is a single corpus of open-source code, the code itself is the
comprehensive "specification" of the platform and its APIs. The CDD acts as a
"hub" referencing other content (such as SDK API documentation) that provides
a framework in which the Android source code may be used so that the end
result is a compatible system.</p>
<p>If you want to build a device compatible with a given Android version,
start by checking out the source code for that version, and then read the
corresponding CDD and stay within its guidelines. For additional details,
simply examine <a href="/compatibility/android-cdd.pdf">the latest CDD</a>.</p>
<p>
You may view the latest CDD either as an HTML web page or an easily downloadable PDF:
</p>
<ul>
<li><a href="android-cdd.html">HTML</a></li>
<li><a href="android-cdd.pdf">PDF</a></li>
</ul>
<p>Find older versions of the CDD and approved release version strings here:</p>
<table>
<tr>
<th>Version</th>
<th>PDF</th>
<th>HTML/XHTML</th>
<th>Strings</th>
</tr>
<tr>
<td>7.1</td>
<td><a href="7.1/android-7.1-cdd.pdf">android-7.1-cdd.pdf</a></td>
<td><a href="7.1/android-7.1-cdd.html">android-7.1-cdd.html</a></td>
<td><a href="7.1/versions.html">Version 7.1</a></td>
</tr>
<tr>
<td>7.0</td>
<td><a href="7.0/android-7.0-cdd.pdf">android-7.0-cdd.pdf</a></td>
<td><a href="7.0/android-7.0-cdd.html">android-7.0-cdd.html</a></td>
<td><a href="7.0/versions.html">Version 7.0</a></td>
</tr>
<tr>
<td>6.0</td>
<td><a href="6.0/android-6.0-cdd.pdf">android-6.0-cdd.pdf</a></td>
<td><a href="6.0/android-6.0-cdd.html">android-6.0-cdd.html</a></td>
<td><a href="6.0/versions.html">Version 6.0</a></td>
</tr>
<tr>
<td>5.1</td>
<td><a href="5.1/android-5.1-cdd.pdf">android-5.1.cdd.pdf</a></td>
<td><a href="5.1/android-5.1-cdd.html">android-5.1-cdd.html</a></td>
<td><a href="5.1/versions.html">Version 5.1</a></td>
</tr>
<tr>
<td>5.0</td>
<td><a href="5.0/android-5.0-cdd.pdf">android-5.0.cdd.pdf</a></td>
<td><a href="5.0/android-5.0-cdd.html">android-5.0-cdd.html</a></td>
<td><a href="5.0/versions.html">Version 5.0</a></td>
</tr>
<tr>
<td>4.4</td>
<td><a href="4.4/android-4.4-cdd.pdf">android-4.4.cdd.pdf</a></td>
<td><a href="4.4/android-4.4-cdd.html">android-4.4-cdd.html</a></td>
<td><a href="4.4/versions.html">Version 4.4</a></td>
</tr>
<tr>
<td>4.3</td>
<td><a href="4.3/android-4.3-cdd.pdf">android-4.3.cdd.pdf</a></td>
<td><a href="4.3/android-4.3-cdd.html">android-4.3-cdd.html</a></td>
<td><a href="4.3/versions.html">Version 4.3</a></td>
</tr>
<tr>
<td>4.2</td>
<td><a href="4.2/android-4.2-cdd.pdf">android-4.2.cdd.pdf</a></td>
<td><a href="4.2/android-4.2-cdd.html">android-4.2-cdd.html</a></td>
<td><a href="4.2/versions.html">Version 4.2</a></td>
</tr>
<tr>
<td>4.1</td>
<td><a href="4.1/android-4.1-cdd.pdf">android-4.1.cdd.pdf</a></td>
<td><a href="4.1/android-4.1-cdd.html">android-4.1-cdd.html</a></td>
<td><a href="4.1/versions.html">Version 4.1</a></td>
</tr>
<tr>
<td>4.0</td>
<td><a href="4.0/android-4.0-cdd.pdf">android-4.0.cdd.pdf</a></td>
<td><a href="4.0/android-4.0-cdd.html">android-4.0-cdd.html</a></td>
<td><a href="4.0/versions.html">Version 4.0</a></td>
</tr>
<tr>
<td>2.3</td>
<td><a href="2.3/android-2.3-cdd.pdf">android-2.3.cdd.pdf</a><br/>
<a href="2.3/android-2.3.3-cdd.pdf">android-2.3.3-cdd.pdf</a></td>
<td><a href="2.3/android-2.3-cdd.html">android-2.3-cdd.html</a></td>
<td><a href="2.3/versions.html">Version 2.3</a></td>
</tr>
<tr>
<td>2.2</td>
<td><a href="2.2/android-2.2-cdd.pdf">android-2.2.cdd.pdf</a></td>
<td><a href="2.2/android-2.2-cdd.html">android-2.2-cdd.html</a></td>
<td><a href="2.2/versions.html">Version 2.2</a></td>
</tr>
<tr>
<td>2.1</td>
<td><a href="2.1/android-2.1-cdd.pdf">android-2.1.cdd.pdf</a></td>
<td><a href="2.1/android-2.1-cdd.html">android-2.1-cdd.html</a></td>
<td><a href="2.1/versions.html">Version 2.1</a></td>
</tr>
<tr>
<td>1.6</td>
<td><a href="1.6/android-1.6-cdd.pdf">android-1.6.cdd.pdf</a></td>
<td><a href="1.6/android-1.6-cdd.html">android-1.6-cdd.html</a></td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,62 @@
<html devsite>
<head>
<title>Contact Us</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>This page describes the
contact methods for inquiries regarding the Android compatibility program,
including the Compatibility Definition Document (CDD) and Compatibility Test
Suite (CTS). See the <a href="/source/community.html">Community</a>
page for communication channels regarding other topics.</p>
<h2
id="for-android-compatibility-definition-and-compatibility-test-suite-technical-questions">For
CDD and CTS technical questions</h2>
<p>If you have technical questions about Android compatibility that aren't covered in
this site, you can seek help from your peers on the <a
href="https://groups.google.com/forum/?fromgroups#!forum/android-compatibility">android-compatibility</a>
list.</p>
<ul>
<li>Subscribe using Google Groups: <a
href="https://groups.google.com/forum/?fromgroups#!forum/android-compatibility">android-compatibility</a></li>
<li>Subscribe via email: <a
href="mailto:android-compatibility+subscribe@googlegroups.com">android-compatibility</a></li>
</ul>
<p>To make best use of this list, please first read <a
href="/source/community.html#getting-the-most-from-our-lists">Getting
the Most from Our Lists</a> on the Community page. Users looking for help with
Android devices should contact their carrier or manufacturer for help.</p>
<h2 id="for-business-inquiries">For licensing Google Mobile Services</h2>
<p>Please send inquiries about licensing <a
href="https://www.android.com/gms/">Google Mobile Services </a> through the <a
href="https://www.android.com/gms/contact/">GMS contact</a> form. Other non-GMS
partnership inquiries can be sent to <a
href="mailto:android-partnerships@google.com">android-partnerships@google.com</a>.</p>
<p>While we read every message received, we cannot respond to each of them. We
promise to contact you if we can help!</p>
</body>
</html>

View file

@ -0,0 +1,501 @@
<html devsite>
<head>
<title>Audio Framework CTS Verifier</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>This new suite of tests requires human intervention and some external hardware
including a <a href="#loopback_latency">Loopback Plug</a>, a <a
href="#audio_frequency_speaker_test">USB reference microphone</a> and <a
href="#audio_frequency_microphone_test">external speakers</a>. For devices without 3.5
mm (⅛”) headset port, the user will be able to skip the test and mark it as
successful. See the sections below for details.</p>
<h2 id=loopback_latency>Loopback plug latency test</h2>
<p><a
href="/devices/audio/latency_measure.html#measuringRoundTrip">Round
trip latency</a> in audio is defined as the time it takes an audio signal to be
recorded, processed and output back.</p>
<p>To measure round-trip latency using CTS Verifier, connect a loopback
plug to the 3.5 mm (⅛”) headset connector. (If you dont have a loopback plug,
you can easily make one following the <a
href="/devices/audio/loopback.html">Audio Loopback Dongle</a>
instructions.</p>
<table>
<tr>
<td width="50%">Start CTS Verifier Loopback Test</td>
<td width="50%"><img src="/compatibility/cts/images/audio-framework0.png" alt="audio latency loopback" width="300"
id="audio_latency_loopback" /></td>
</tr>
<tr>
<td>Summary of instructions is displayed</td>
<td><img src="/compatibility/cts/images/audio-framework1.png" alt="summary of instructions" width="300"
id="loopback_instructions" /></td>
</tr>
<tr>
<td>Report if the device has a headset port:<br>
<strong>YES</strong> if the device under test has a physical headset port<br>
<strong>NO</strong> if there is no headset port</td>
<td><img src="/compatibility/cts/images/audio-framework-port.png" alt="audio loopback latency" width="300"
id="port_check" /></td>
</tr>
<tr>
<td>If the answer was <strong>NO</strong> in the previous step, press
<strong>Pass</strong> (green check) on the bottom of the test and finish</td>
<td><img src="/compatibility/cts/images/audio-framework-pass.png" alt="audio pass button" width="300"
id="port_pass" /></td>
</tr>
<tr>
<td>If the answer was <strong>YES</strong> in the previous step, continue
to connect loopback plug.<br>
Connect a loopback plug to the headset port<br>
Press the <strong>Loopback Plug Ready</strong> button
<td><img src="/compatibility/cts/images/audio-framework2.png" alt="audio pass button" width="300"
id="port_pass" /></td>
</tr>
<tr>
<td>Move the slider until the signal level is greater than 60%<br>
Press <strong>TEST</strong></td>
<td><img src="/compatibility/cts/images/audio-framework3.png" alt="audio level 1" width="300"
id="audio_level1" />
<img src="/compatibility/cts/images/audio-framework4.png" alt="audio level 2" width="300"
id="audio_level2"></td>
</tr>
<tr>
<td>Wait several seconds while the latency test is performed</td>
<td><img src="/compatibility/cts/images/audio-framework5.png" alt="test running" width="300"
id="test_running" /></td>
</tr>
<tr>
<td>When the test is finished, results are shown<br>
The minimum confidence level for a test to succeed is 0.6<br>
Lower latency numbers are preferred, but no number is enforced</td>
<td><img src="/compatibility/cts/images/audio-framework6.png" alt="test finished" width="300"
id="test_finished" />
</td>
</tr>
<tr>
<td>Press the <strong>Pass</strong> (green, only available if successful) or
<strong>Failed</strong> (red) button to record the results.</td>
<td><img src="/compatibility/cts/images/audio-framework7.png" alt="Pass button" width="300"
id="pass_button" /><br>
<img src="/compatibility/cts/images/audio-framework8.png" alt="Failed button" width="300"
id="failed_button" /></td>
</tr>
</table>
<h2 id=audio_frequency_line_test>Audio frequency line test</h2>
<p>Using a loopback plug, this test will characterize the left/right line audio
output and use the mic feedback from the plug to capture audio and compute a
frequency response for each channel.</p>
<p>A simple criterion for minimum energy expected in each band (out of four) is
applied per channel.</p>
<table>
<tr>
<td width="50%">Start CTS Audio Frequency Line Test</td>
<td width="50%"><img src="/compatibility/cts/images/audio-framework9.png" alt="start frequency line" width="300"
id="start_line_test" /></td>
</tr>
<tr>
<td>Summary of instructions is displayed</td>
<td><img src="/compatibility/cts/images/audio-framework10.png" alt="instructions" width="300"
id="summary_instructions" /></td>
</tr>
<tr>
<td>Report if the device has a headset port:<br>
<strong>YES</strong> if the device under test has a physical headset port<br>
<strong>NO</strong> if there is no headset port</td>
<td><img src="/compatibility/cts/images/audio-framework-line-port.png" alt="audio frequency line" width="300"
id="line_port_check" /></td>
</tr>
<tr>
<td>If the answer was <strong>NO</strong> in the previous step, press
<strong>Pass</strong> (green check) on the bottom of the test and finish</td>
<td><img src="/compatibility/cts/images/audio-framework-pass.png" alt="audio pass button" width="300"
id="port_pass" /></td>
</tr>
<tr>
<td>If the answer was <strong>YES</strong> in the previous step, continue
to connect loopback plug<br>
Connect a Loopback Plug to the headset connector (see <a
href="#loopback_latency">Loopback plug latency test</a>)<br>
Press the <strong>Loopback Plug Ready</strong> button
<td><img src="/compatibility/cts/images/audio-framework11.png" alt="loopback plug ready" width="300"
id="port_pass" /></td>
</tr>
<td>Press <strong>TEST</strong></td>
<td><img src="/compatibility/cts/images/audio-framework12.png" alt="loopback plug test" width="300"
id="loopback_plug_test" /></td>
</tr>
<tr>
<td>Wait several seconds while the frequency tests are performed</td>
<td><img src="/compatibility/cts/images/audio-framework13.png" alt="testing left capture" width="300"
id="left_capture" /></td>
</tr>
<tr>
<td>When the test is finished, results are shown</td>
<td><img src="/compatibility/cts/images/audio-framework14.png" alt="testing complete" width="300"
id="test_complete" /></td>
</tr>
<td>Press the <strong>Pass</strong> (only available if successful) or
<strong>Failed</strong> button to record the results</td>
<td><img src="/compatibility/cts/images/audio-framework15.png" alt="Pass button" width="300"
id="pass_button" /><br>
<img src="/compatibility/cts/images/audio-framework16.png" alt="Failed button" width="300"
id="failed_button" /></td>
</tr>
</table>
<h2 id=audio_frequency_speaker_test>Audio frequency speaker test</h2>
<p>This test uses the signal captured by an external USB reference microphone to
assess the frequency response of left (and right, if it exists) loudspeakers.</p>
<p>A reference microphone is defined as that one that delivers flat, uncolored
response. They are often used for analysis and measurement equipment. </p>
<p>There are some inexpensive USB Reference microphones (e.g., <a
href="https://minidsp.com/products/acoustic-measurement/umik-1">miniDSP USB
Measurement calibrated microphone</a>, <a
href="http://www.daytonaudio.com/index.php/umm-6-usb-measurement-microphone.html">Dayton
Audio UMM-6 USB Measurement Microphone</a>), mostly used for the home theater
enthusiasts to calibrate their setups.</p>
<p>Minimum recommended reference microphone characteristics:<br>
Flat Frequency response on range 100 Hz - 20 kHz: +/- 2 dB<br>
S/N ration 70 dB (A-weighted)<br>
THD Ratio @ 1000 Hz less than 1 % at 127 dB SPL<p>
<table>
<tr>
<td width="50%">Start CTS Audio Frequency Speaker Test</td>
<td width="50%"><img src="/compatibility/cts/images/audio-framework17.png" alt="start speaker test" width="300"
id="start_speaker" /></td>
</tr>
<tr>
<td>Summary of instructions is displayed</td>
<td><img src="/compatibility/cts/images/audio-framework18.png" alt="instructions" width="300"
id="summary_instructions" /></td>
</tr>
<tr>
<td>Connect a USB reference microphone (see <a
href="#audio_frequency_speaker_test">Audio frequency speaker test</a>)<br>
Press <strong>USB REFERENCE MICROPHONE READY</strong></td>
<td><img src="/compatibility/cts/images/audio-framework19.png" alt="mic ready" width="300"
id="mic_ready" /></td>
</tr>
<tr>
<td>Set up DUT (Device Under Test) in a quiet room and USB microphone 20cms
perpendicular to center of screen</td>
<td><img src="/compatibility/cts/images/audio-framework20.png" alt="device under test" width="300"
id="dut" /></td>
</tr>
<tr>
<td>Press <strong>TEST</strong></td>
<td><img src="/compatibility/cts/images/audio-framework21.png" alt="click test" width="300"
id="click_test" /></td>
</tr>
<tr>
<td>Wait several seconds while the frequency tests are performed</td>
<td><img src="/compatibility/cts/images/audio-framework22.png" alt="test underway" width="300"
id="right_capture" /></td>
</tr>
<tr>
<td>When the test is finished, results are shown</td>
<td><img src="/compatibility/cts/images/audio-framework23.png" alt="test complete" width="300"
id="test_complete" /></td>
</tr>
</tr>
<td>Press the <strong>Pass</strong> (only available if successful) or
<strong>Failed</strong> button to record the results</td>
<td><img src="/compatibility/cts/images/audio-framework24.png" alt="Pass button" width="300"
id="pass_button" /><br>
<img src="/compatibility/cts/images/audio-framework25.png" alt="Failed button" width="300"
id="failed_button" /></td>
</tr>
</table>
<h2 id=audio_frequency_microphone_test>Audio frequency microphone test</h2>
<p>This test is more involved than the previous ones. It requires the use of both:
External speakers for a white noise sound source, and a USB reference
microphone to use as a reference for the sound. Although this process is more
involved, it can be performed with affordable, easy to get, hardware</p>
<p>External speakers positioned 40cm from the device are used to deliver a white
noise sound source. These speakers dont need to have a “Flat” frequency
response, but need good coverage from low frequencies (100 hz) to high
frequencies (20khz) is expected which is usually met by portable or medium size
self powered speakers (e.g. Sony SRS-X5 portable speakers) </p>
<p>The key element here is that a step for calibration (using the USB reference
microphone) is performed, to estimate the actual response of the speakers, thus
have a solid reference to compare the built in microphone against.</p>
<table>
<tr>
<td width="50%">Start CTS Audio Frequency Microphone Test</td>
<td width="50%"><img src="/compatibility/cts/images/audio-framework26.png" alt="start mic test" width="300"
id="start_mic_test" /></td>
</tr>
<tr>
<td>Summary of instructions is displayed</td>
<td><img src="/compatibility/cts/images/audio-framework27.png" alt="instructions" width="300"
id="summary_instructions" /></td>
</tr>
<tr>
<td>Set up DUT in a quiet room<br>
Position the speakers 40cm perpendicular to the center of the screen
of the DUT (see <a href="#audio_frequency_microphone_test">Audio
frequency microphone test </a>)</td>
<td><img src="/compatibility/cts/images/audio-framework28.png" alt="device under test" width="300"
id="device_position" /></td>
</tr>
<tr>
<td>Report if the device has a headset port:<br>
<strong>YES</strong> if the device under test has a physical headset port<br>
<strong>NO</strong> if there is no headset port</td>
<td><img src="/compatibility/cts/images/audio-framework-mic-port.png" alt="audio microphone test" width="300"
id="mic_port_check" /></td>
</tr>
<tr>
<td>If the answer was <strong>NO</strong> in the previous step, press
<strong>Pass</strong> (green check) on the bottom of the test and finish</td>
<td><img src="/compatibility/cts/images/audio-framework-pass.png" alt="mic headset pass button" width="300"
id="mic_port_pass" /></td>
</tr>
<tr>
<td>If the answer was <strong>YES</strong> in the previous step, continue
to connect external speakers.<br>
Connect external speakers using the headphone/line out connector
(remember to unplug any USB microphone)<br>
Press <strong>EXTERNAL SPEAKERS READY</strong></td>
<td><img src="/compatibility/cts/images/audio-framework29.png" alt="external speakers ready" width="300"
id="speakers_ready" /></td>
</tr>
<tr>
<td>Press <strong>TEST 1</strong></td>
<td><img src="/compatibility/cts/images/audio-framework30.png" alt="no USB device" width="300"
id="no_usb_device" /></td>
</tr>
<tr>
<td>Wait several seconds for test 1 to complete.</td>
<td><img src="/compatibility/cts/images/audio-framework31.png" alt="testing underway" width="300"
id="testing_incomplete" /></td>
</tr>
<tr>
<td>When test 1 is completed, results for the built in microphone are shown.</td>
<td><img src="/compatibility/cts/images/audio-framework32.png" alt="test results" width="300"
id="testing_complete" /></td>
</tr>
<tr>
<td>Connect a USB Reference microphone (see <a
href="#audio_frequency_speaker_test">Audio frequency speaker test
</a>)<br>
Press <strong>USB REFERENCE MICROPHONE READY</strong></td>
<td><img src="/compatibility/cts/images/audio-framework33.png" alt="microphone ready" width="300"
id="mic_ready" /></td>
</tr>
<tr>
<td>Position USB microphone right next to built-in microphone in DUT,
pointing towards external speakers</td>
<td><img src="/compatibility/cts/images/audio-framework34.jpg" alt="device position" width="300"
id="device_position" /><br>
<img src="/compatibility/cts/images/audio-framework35.png" alt="mic position" width="300"
id="mic-position" /></td>
</tr>
<tr>
<td>Press <strong>TEST 2</strong></td>
<td><img src="/compatibility/cts/images/audio-framework36.png" alt="USB detected" width="300"
id="usb-detected" /></td>
</tr>
<tr>
<td>Wait several seconds while the test 2 runs</td>
<td><img src="/compatibility/cts/images/audio-framework37.png" alt="test running" width="132"
id="test_running" /></td>
</tr>
<tr>
<td>When test 2 is completed, results for the USB reference microphone are
shown.</td>
<td><img src="/compatibility/cts/images/audio-framework38.png" alt="testing completed" width="300"
id="testing_completed" /></td>
</tr>
<tr>
<td>Press the <strong>Pass</strong> (only available if successful) or
<strong>Failed</strong> button to record the results.</td>
<td><img src="/compatibility/cts/images/audio-framework39.png" alt="Pass button" width="300"
id="pass_button" /><br>
<img src="/compatibility/cts/images/audio-framework40.png" alt="Failed button" width="300"
id="failed_button" /></td>
</tr>
</table>
<h2>Audio Frequency Unprocessed Test</h2>
<p>
For this test, in addition to the USB reference microphone and external
speakers, it is necessary to have access to a Sound Pressure Level Meter (SPL
Meter).
</p>
<p>
Also worth mentioning, in this test the Playback and Test parts of each test
have been given their own button. This was done to help test certain devices
which don't have easy playback capabilities, but still can test the recording
source UNPROCESSED.
</p>
<table>
<tr>
<td width="50%">Start CTS Frequency Unprocessed Test.
</td>
<td width="50%">
<img src="/compatibility/cts/images/audio-framework41.png" alt="Start test" title="Start test">
</td>
</tr>
<tr>
<td>Summary of instructions is displayed.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework42.png" alt="Summary of instructions" title="Summary of instructions">
</td>
</tr>
<tr>
<td>Set up DUT in a quiet room.
Connect external speakers using the
headphone/line out connector (make sure there is not any USB microphone
connected).
</td>
<td>
<img src="/compatibility/cts/images/audio-framework43.jpg" alt="Photo of DUT setup" title="DUT setup">
</td>
</tr>
<tr>
<td>TEST TONE<br>
Press [PLAY] and move the SPL meter on front of the speakers
until the level read is 94 dB SPL.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework44.jpg" alt="Photo of test tone setup" title="TEST TONE setup">
</td>
</tr>
<tr>
<td>Move the SPL meter in a straight line from the speakers back and forth,
until the level read on the screen is 94 dB SPL. Make a note of this location.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework45.jpg" alt="Photo of SPL meter placement" title="SPL meter placement">
</td>
</tr>
<tr>
<td>Move the DUT and place the microphone in about the same location found
in the previous step.
Press [TEST].
The DUT performs a short audio capture
and automatically stops the playback.
Playback can also be stopped by pressing
[STOP] if needed.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework46.png" alt="Screenshot of audio capture" title="Audio Capture">
</td>
</tr>
<tr>
<td>TEST NOISE<br>
Position the speakers 40cm perpendicular to the center of the
screen of the DUT (see <a href="#audio_frequency_microphone_test">Audio frequency microphone test</a>).
</td>
<td>
<img src="/compatibility/cts/images/audio-framework47.png" alt="Photo of speaker placement" title="Speaker placement">
</td>
</tr>
<tr>
<td>Press [PLAY].
Press [TEST].
Wait for the test to complete. It will
automatically stop the plabyack.
<p>
Playback can also be stopped by pressing [STOP] if needed.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework48.png" alt="Screenshot of running test" title="Running test">
</td>
</tr>
<tr>
<td>TEST USB BACKGROUND<br>
Connect a USB Reference microphone (see <a href="#audio_frequency_speaker_test">Audio
frequency speaker test</a>).
Locate USB microphone close to DUT microphone
<p>
Press [TEST].
<p>
This runs a short test and displays results on screen.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework49.jpg" alt="Photo of USB refernce mike" title="USB reference mike">
<img src="/compatibility/cts/images/audio-framework50.png" alt="Screenshot of running test" title="Running test">
</td>
</tr>
<tr>
<td>TEST USB NOISE<br>
Leave USB microphone in the same position as in the previous
test.
<p>
Press [PLAY].
Broadband noise should play from external speakers.
Press [TEST].
A short test will run and display results on screen.
</td>
<td>.
<img src="/compatibility/cts/images/audio-framework51.png" alt="Screenshot of USB noise test" title="USB noise test">
</td>
</tr>
<tr>
<td>When the 4 parts of the test are completed, the global results are
updated with PASSED/FAILED information for each test.
If needed, repeat
individual steps of the test.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework52.png" alt="Test results" title="Test results">
</td>
</tr>
<tr>
<td>Press the Pass (only available if successful) or Failed button to record
the results.
If the DUT does not define the Audio Frequency Unprocessed feature,
running the test is required, but success in all measurements is not mandatory.
</td>
<td>
<img src="/compatibility/cts/images/audio-framework53.png" alt="Test passed" title="Test passed">
<p>
<img src="/compatibility/cts/images/audio-framework54.png" alt="Test not passed" title="Test not passed">
</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,536 @@
<html devsite>
<head>
<title>Camera HAL Testing Checklist</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>This document lists all tests available for evaluating the Android camera
hardware abstraction layer (HAL). It is intended for OEMs and application
processor (AP) vendors so they may ensure proper implementation of the camera
HAL with minimum defects. Although this is a voluntary addition to the Android
Compatibility Test Suite (CTS), it greatly increases camera test coverage and
will certainly identify potential bugs.</p>
<p>By passing these tests, original equipment manufacturers (OEM) validate whether
they have properly integrated the latest Android camera hardware abstraction
layer (HAL) 3.2 interfaces. When conforming with all items in the checklist, a
device implementation may be considered <em>full</em> with respect to the new Android
Camera HAL interfaces. This will in turn enable a device to properly support
the new <code>android.hardware.camera2</code> package that camera apps build upon.</p>
<h2 id=camera_hal_3_2_specification>[ ] 1. Camera HAL 3.2 specification</h2>
<p>The Android Camera HAL 3.2 specification is the authoritative source of
information on what devices must satisfy; the document here provides a summary
of all tests that can be used as a checklist. Camera HAL implementers (e.g. AP
vendors) should go through the HAL 3.2 specification line-by-line and ensure
their devices conform to it.</p>
<p>The current HAL 3.2 specification is defined in these files within the L
generic Android Platform Development Kit (PDK):</p>
<ul>
<li><em>Camera HAL 3.x interface and spec</em>: <code><a
href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h">hardware/libhardware/include/hardware/camera3.h</a></code>,
<code><a
href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera_common.h">hardware/libhardware/include/hardware/camera_common.h</a></code>
<li><em>Camera HAL 3.x metadata spec</em>: <code><a
href="https://android.googlesource.com/platform/system/media/+/master/camera/docs/docs.html">system/media/camera/docs/docs.html</a></code>
<li><em>HAL pixel format interface and spec</em>: <code><a
href="https://android.googlesource.com/platform/system/core/+/master/include/system/graphics.h">system/core/include/system/graphics.h</a></code>
</ul>
<h2 id=camera_test_types>[ ] 2. Camera test types</h2>
<p>Here are the primary types of tests available for the latest Android camera
along with references to associated instructions below:</p>
<ul>
<li><em><a href="#native_tests">Native</a>:</em> Tests that directly test the camera HAL interface
<li><em><a href="#cts_tests">Compatibility Test Suite (CTS)</a></em>: Standard, automated Android
tests to ensure device compatibility - see the <a
href="/compatibility/cts/index.html">CTS introduction</a> and the <a
href="/devices/tech/test_infra/tradefed/index.html">Trade Federation
Overview</a>
<li><em><a href="#its_tests">Image Test Suite (ITS)</a>:</em> Manually run tests to ensure image
correctness - see the top-level and
test-specific <code>README</code> files and tutorial.py for setup instructions
<li><em><a href="#manual_tests_with_aosp_camera_app">Manual tests with the
Android Open Source Project (AOSP) Camera App</a>:</em> User-like testing of
common camera functions
<li><em><a href="#manual_testingcam_tests">Manual TestingCam tests</a>:</em>
Run from the source in <code>pdk/apps/TestingCamera/</code>
<li><em><a href="#manual_testingcam2_tests">Manual TestingCam2.1
tests</a>:</em> Run from the source in <code>pdk/apps/TestingCamera2/</code>
</ul>
<p>All of these test types are described in detail below. These tests are
presented in the chronological order in which OEMs are expected to execute
them.</p>
<p>For instance, if a device fails the native tests, it will assuredly fail the
subsequent Compatibility Test Suite (CTS) tests. And if a device fails CTS,
there is little use in proceeding to the Image Test Suite (ITS). We recommend
addressing failures in each test type before proceeding to the next set of
tests.</p>
<h2 id=native_tests>[ ] 3. Native tests</h2>
<p>These tests directly test the camera HAL interface.</p>
<p>The starting path for Camera native tests is:
<code>platform/hardware/libhardware</code></p>
<p>To set up these tests:</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">cd hardware/libhardware/tests/camera*/</code>
<code class="devsite-terminal">mm</code>
<code class="devsite-terminal">adb remount; adb sync</code>
</pre>
<h3 id=hal_3_x_tests>[ ] 3.1. HAL 3.x tests</h3>
<p>Find these camera tests under:
<code>hardware/libhardware/tests/camera3/*</code></p>
<p>To run all tests:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell /data/nativetest/camera3_test/camera3_test
</pre>
<p>You receive an <strong>OK</strong> for each passed test. Errors are logged
at the end of output along with a summary of tests passed.</p>
<h3 id=hal_2_3_tests>[ ] 3.2. HAL 2/3 tests</h3>
<p>Find these camera tests under:
<code>hardware/libhardware/tests/camera2/*</code></p>
<p>To run all tests:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell /data/nativetest/camera3_test/camera3_test
</pre>
<p>To run a single test, pass the <code>--gtest_filter</code> argument and the
test name, like so:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell /data/nativetest/camera2_test/camera2_test --gtest_filter=Camera2Test.OpenClose
</pre>
<p>To run a subset of tests, use a wildcard with the
<code>--gtest_filter</code> argument, like so:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell /data/nativetest/camera2_test/camera2_test --gtest_filter=Camera2Test.*
</pre>
<h3 id=3_tests_that_interact_with_the_camera_service>[ ] 3.3. Tests that
interact with the camera service</h3>
<p>Find these camera tests under: <code>frameworks/av/camera/tests/*</code></p>
<h3 id=camera_metadata_tests>[ ] 3.4. Camera metadata tests</h3>
<p>Find these camera tests under: <code>system/media/camera/tests/*</code></p>
<h2 id=cts_tests>[ ] 4. Compatibility Test Suite (CTS) tests</h2>
<p>Camera Android Compatibility Test Suite (CTS) tests focus upon device
compatibility. They do not require a specific test environment (the field of
view or FOV CTS Verifier test being the lone exception).</p>
<p>The starting path for Camera CTS tests is: <code>platform/cts</code></p>
<p>See the <a href="/compatibility/cts/index.html">CTS
introduction</a> and its subpages for general instructions on running CTS.</p>
<h3 id=cts_tests_for_the_android_hardware_camera_api>[ ] 4.1. CTS tests for
the <code>android.hardware.Camera</code> API</h3>
<p>Find these camera tests under <code>cts/tests/tests/</code>:</p>
<ul>
<li><code>hardware/src/android/hardware/cts/CameraTest.java</code>
<li><code>hardware/src/android/hardware/cts/CameraGLTest.java</code>
<li><code>hardware/src/android/hardware/cts/Camera_SizeTest.java</code>
<li><code>permission/src/android/permission/cts/CameraPermissionTest.java</code>
</ul>
<h3 id=cts_tests_for_the_android_hardware_camera2_api>[ ] 4.2. CTS tests for
the <code>android.hardware.camera2</code> API</h3>
<p>Find these camera tests under <code>cts/tests/tests/</code>:</p>
<ul>
<li><code>hardware/src/android/hardware/camera2/cts/*</code>
<li><code>permission/src/android/permission/cts/Camera2PermissionTest.java</code>
</ul>
<h3 id=cts_verifier_camera_tests>[ ] 4.3. CTS Verifier camera tests</h3>
<p>Find these camera tests under:
<code>cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*</code></p>
<h2 id=its_tests>[ ] 5. Image Test Suite (ITS) tests</h2>
<p>The CameraITS tests focus upon image correctness. These Python scripts are
manually run on a workstation with the Android device connected over USB. The
workstation can run any operating system as long as it has the requisite Python
2.7 environment.</p>
<p class="note">Since ITS is a CTS Verifier subtest, start CTS Verifier and the
ITS subtest before running the python scripts so they have processes with which
to communicate.</p>
<p>The CameraITS infrastructure and tests are located under: <code>cts/apps/CameraITS</code></p>
<p>See the latest <code>README</code> file in this top-level folder for
instructions on how to set up and run the tests. For setup: <code>make
cts</code></p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip</code>
<code class="devsite-terminal">cd android-cts-verifier</code>
<code class="devsite-terminal">adb install -r CtsVerifier.apk</code>
<code class="devsite-terminal">cd CameraITS</code>
</pre>
<p>See <code>tutorial.py</code> in the <code>tests</code> subdirectory for a
walkthrough of the script's use. Each test resides in a corresponding
<code>tests/scene<#></code> subdirectory. See the <code>README</code> file in
each subdirectory for specific test instructions.</p>
<p>You will need a simple physical environment with a specific, reusable target
such as a white wall, grey card, and desk lamp. The Android device is mounted
on a tripod and its camera functions are exercised by the scripts. Most tests
are pass or fail but some offer metrics, as well.</p>
<p>These tests are works-in-progress and are not yet comprehensive enough for
full automated pass/fail validation of the camera HAL. However, these scripts
do test scenarios that are not tested in CTS and are an important component of
the overall HAL 3.2 test plan.</p>
<h3 id=its_tests_on_scene_0_plain>[ ] 5.1. ITS tests on scene 0 (plain)</h3>
<p>This test requires no specific setup. Pass all of the tests in the
<code>tests/scene0</code> folder, for all cameras (back + front + any
others).</p>
<h3 id=its_tests_on_scene_1_grey_card>[ ] 5.2. ITS tests on scene 1 (grey card)</h3>
<p>Pass all of the tests in the <code>tests/scene1</code> folder, for all
cameras (back + front + any others). The <code>tests/scene1/README</code> file
describes the scene setup.</p>
<h3 id=its_tests_on_scene_2_camera_lab>[ ] 5.3. ITS tests on scene 2 (camera lab)</h3>
<p>Pass all of the tests in the <code>tests/scene2</code> folder, for all
cameras (back + front + any others). The <code>tests/scene2/README</code> file
describes the scene setup.</p>
<h2 id=manual_tests_with_aosp_camera_app>[ ] 6. Manual tests with the AOSP App</h2>
<h3 id=camera_mode_aosp_camera_app>[ ] 6.1. Camera mode</h3>
<p>For all cameras on the device (front, back, and any others), verify:</p>
<ol>
<li>Images can be captured and reviewed on the device, and the images look good
with no obvious problems.
<li>Tap-to-focus, continuous autofocus, macro focus, infinity focus, AWB, and AEC
are all reliable.
<li>Tap-to-focus, continuous autofocus, AWB, and AEC are reliable when using
digital zoom (during capture).
<li>Flash settings (on/off/auto) are reliable and synchronize well with the 3As.
</ol>
<h3 id=video_mode_aosp_camera_app>[ ] 6.2. Video mode</h3>
<p>For all cameras on the device (front, back, and any others), verify:</p>
<ol>
<li>Videos can be captured and reviewed on the device, and the videos look good
with no obvious problems.
<li>Capturing a snapshot while in the middle of recording a video works.
<li>Tap-to-focus, continuous autofocus, macro focus, infinity focus, AWB, and AEC
are all reliable.
<li>Tap-to-focus, continuous autofocus, AWB, and AEC are reliable when using
digital zoom (during capture).
<li>Torch settings (on/off) are reliable and synchronize well with the 3As.
</ol>
<h3 id=camera_settings_resolution>[ ] 6.3. Camera settings: resolution</h3>
<p>For all cameras on the device (front, back, and any others), and for all
resolutions available in the menu, verify that correct resolution settings are
returned and applied for:</p>
<ul>
<li>Camera mode
<li>Video mode
<li>LensBlur
<li>PhotoSphere
<li>Panorama
</ul>
<h3 id=camera_settings_exposure_compensation>[ ] 6.4. Camera settings:
exposure compensation</h3>
<p>Verify that exposure compensation is applied (at +2 and -2).</p>
<h3 id=photosphere>[ ] 6.5. PhotoSphere</h3>
<p>Capture full 360-degree PhotoSphere images shot with each of the front and
rear cameras. Verify all of the individual frames are focused at infinity and the
exposure and white balance match between shots.</p>
<h3 id=panorama>[ ] 6.6. Panorama</h3>
<p>Capture vertical, horizontal, and wide-angle panoramas (with both front and
rear cameras), and verify all of the individual frames are focused at infinity
and the exposure and white balance matches between shots.</p>
<h3 id=lensblur>[ ] 6.7. LensBlur</h3>
<p>Capture a LensBlur image with both front and rear cameras, and verify
refocusing to different depths (while reviewing the captured shots) works.</p>
<p>Also verify tap-to-focus, continuous autofocus, AWB, and AEC are reliable in
this mode.</p>
<h2 id=media_framework_tests>[ ] 7. Media Framework tests</h2>
<p>Pass all of the camera-related media tests in MediaFrameworkTest. Please note,
these tests require the mediaframeworktest.apk be installed on the Android
device. You will need to <code>make mediaframeworktest</code> and then use adb
to install the resulting .apk. Example commands are included below.</p>
<p>The starting path for Camera-related media framework tests is:
<code>platform/frameworks/base</code></p>
<p>Find the source code for the tests here:
<code>frameworks/base/media/tests/MediaFrameworkTest</code></p>
<p>To set up these tests:</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">make mediaframeworktest</code>
<code class="devsite-terminal">adb install out/target/product/<em>&lt;name></em>/data/app/mediaframeworktest.apk</code>
</pre>
<p>Where the <em><code><name></code></em> variable represents the directory
containing the vendor's product.</p>
<p>Find all of the tests in the following directory or its subdirectories:</p>
<pre class="devsite-click-to-copy">
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
</pre>
<p>Each subdirectory represents a class of tests:</p>
<ul>
<li><code>functional/</code>
<li><code>integration/</code>
<li><code>performance/</code>
<li><code>power/</code>
<li><code>stress/</code>
<li><code>unit/</code>
</ul>
<h3 id=running_media_framework_tests>[ ] 7.1. Running Media Framework tests</h3>
<p>To see all of the available tests::</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell pm list instrumentation
</pre>
<p>This will yield results resembling:</p>
<pre class="devsite-click-to-copy">
instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
(target=com.android.mediaframeworktest)
</pre>
<p>Identify and extract the component (between <code>instrumentation:</code>
and <code>(target=com.android.mediaframeworktest) </code>from each test line.
The component is composed of the target package name
(<code>com.android.mediaframeworktest</code>) and the test runner name
(<code>MediaFramework<type>TestRunner</code>).</p>
<p>For instance:</p>
<pre class="devsite-click-to-copy">
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
</pre>
<p>You may then pass each component to <code>adb shell am instrument</code> like so:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -w &lt;component.name&gt;
</pre>
<p>Where the &lt;component.name&gt; equals the extracted value above. For example:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
</pre>
<p>Please note, while the class path is the Java package + class name, the
instrumentation package isn't necessarily the same as the Java package. Make
sure you use the AndroidManifest.xml package when concatenating the component
name, not the Java package in which the test runner class resides.</p>
<p>To run a single class of tests, pass the -e class <test-class> argument, like
so:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
</pre>
<p>To run only a single method in a test class, append a pound (#) sign and the
method name (in this case, <code>testConnectPro</code>) to the class name, like so:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
</pre>
<h3 id=media_settings_functional_tests>[ ] 7.2. Media settings functional tests</h3>
<p>Here is an example run of a functional test. This test verifies the basic
functionality of different combinations of camera settings. (ie, Flash,
exposure, WB, scene, picture size and geoTag)</p>
<p>Run the test command:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -w -r -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
</pre>
<h3 id=media_integration_tests>[ ] 7.3. Media integration tests</h3>
<p>Here is an example run of an integration test, in this case
mediaframeworktest/integration/CameraBinderTest.java and
mediaframeworktest/CameraStressTestRunner.java:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -e class \ 'com.android.mediaframeworktest.<strong>integration</strong>.<strong>CameraBinderTest'</strong> -w \ 'com.android.mediaframeworktest/.<strong>CameraStressTestRunner'</strong>
</pre>
<p>If successful, this results in output resembling:</p>
<pre class="devsite-click-to-copy">
-----
com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328
OK (11 tests)
-----
</pre>
<h3 id=media_performance_tests>[ ] 7.4. Media performance tests</h3>
<p>This preview memory test will open and release the camera preview for 200
times. In each 20 iterations, the snapshot of ps mediaserver will be recorded
and it will compare the memory usage different after 200 iterations. Test will
fail If the difference is greater than 150kM.</p>
<p>Run the test command:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
</pre>
<p>More detailed output can be found in:
<code>/sdcard/mediaMemOutput.txt</code></p>
<h3 id=media_unit_tests>[ ] 7.5. Media unit tests</h3>
<p>The commands to run unit tests are all similar. For example, for
CameraMetadataTest.java, the command would be:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
</pre>
<h3 id=media_stress_tests>[ ] 7.6. Media stress tests</h3>
<p>This test is to stress out the camera image capture and video recording.</p>
<p>Run the test command:</p>
<pre class="devsite-terminal devsite-click-to-copy">
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
</pre>
<p>All tests should pass.</p>
<h2 id=manual_testingcam_tests>[ ] 8. Manual TestingCam tests</h2>
<p>The TestingCam app should be run manually with the following checks performed.
The source for TestingCam is here: <code>pdk/apps/TestingCamera/</code></p>
<h3 id=infinity_focus_with_camera_tilt>[ ] 8.1. Infinity focus with camera tilt</h3>
<p>Start TestingCam, turn on preview, and ensure that autofocus mode is set to
infinity. Using the <strong>Take picture</strong> button, capture shots of
distant subjects (at least 10m away) with the camera pointed horizontally,
upwards (close to vertical), and downwards (close to vertical); an example of
the upwards shot could be high leaves/branches of a tree from beneath and an
example of the downwards shot could be the street as seen from the roof of a
building. In all cases, the distant subject should be sharp and in focus. Save
and view the shots in the gallery view so that you can zoom in and inspect the
sharpness more easily.</p>
<p>Note that for a camera with a VCM actuator to pass this test, it will require
either a closed-loop AF control system, or it will need some sort of SW
correction based on using accelerometer data to determine camera orientation.
Reliable factory calibration of the lens infinity position will also be needed.</p>
<h2 id=manual_testingcam2_tests>[ ] 9. Manual TestingCam2 tests</h2>
<p>The TestingCam2 app should be run manually, with the following checks
performed. The source for TestingCam2 is here: <code>pdk/apps/TestingCamera2/</code></p>
<h3 id=9_1_jpeg_capture>[ ] 9.1. JPEG capture</h3>
<p>Start TestingCam2, and press the <strong>JPEG</strong> button. The image
that appears to the right of the viewfinder image should appear the same as the
viewfinder, including having the same orientation.</p>
</body>
</html>

View file

@ -0,0 +1,270 @@
<html devsite>
<head>
<title>ITS-in-a-Box Assembly</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>ITS-in-a-box consists of a plastic box that is laser cut from computer-aided
design (CAD) drawings, a chart tablet, and a device under test (DUT). This page
provides step-by-step instructions for assembling the ITS-in-a-box.</p>
<p><img src=images/camera_iab_cad.png></p>
<p class=caption><strong>Figure 1</strong>. CAD image for ITS-in-a-box.</p>
<h2>Required tools</h2>
<p>Before getting started, ensure you have
<a href="camera_its_iab_tech_drawings.zip">downloaded the technical
drawings</a> for the ITS-in-a box and have the following tools available:</p>
<ul>
<li>Phillips head screwdriver</li>
<li>Pliers</li>
<li>Exacto knife</li>
<li>Wire cutters or scissors (optional)</li>
</ul>
<h2 id=lighting>Step 1: Lighting</h2>
<p>To assemble the ITS-in-a-box lighting component:</p>
<ol>
<li>Gather the lighting hardware shown in Figure 2:
<br><img src=images/camera_iab_light_assembly_parts.png width="50%"><br>
<strong>Figure 2</strong>. Light assembly parts.<br><br>
Hardware includes LED light bars, plastic light baffles, plastic light mounts,
metal light clips included in the LED lighting kit, and four 6-32 screws with
acorn head nuts.</li>
<li>Place LED light bars in the mounts with lights pointing down and towards
the table, as shown in Figure 3 (left side):
<br><img src=images/camera_iab_light_bar.png width="50%"><br>
<strong>Figure 3</strong>. Close-up of light bars with lights facing down
and screws threaded through clips.<br><br>
Thread the screws through the light clips using a screwdriver and while holding
the metal clip. The screw head should be be on the inside of the C shape of the
light clip as shown in Figure 3 (right side). Threading the screws requires
pressure as the fit is tight.</li>
<li>Bolt the clips to the plastic baffles as shown in Figure 4:
<br><img src=images/camera_iab_light_baffles.png width="50%"><br>
<strong>Figure 4</strong>. Light baffles with clips attached (acorn nuts are on
the side of the plastic not shown).</li>
<li>Assemble the lights by snapping the baffles to the LED light backs with the
clips.
<br><img src=images/camera_iab_light_assembled.png width="50%"><br>
<strong>Figure 5</strong>. Assembled lights.<br><br>
The LED lights should point down and the plastic should form a back to the light
to block the shiny, reflective back of the LED light bar.</li>
</ol>
<h2 id=phone-mount>Step 2: Phone mounts</h2>
<p>To assemble phone mounts:</p>
<ol>
<li>Gather the phone mount hardware shown in Figure 6:
<br><img src=images/camera_iab_phone_mount_parts.png width="50%"><br>
<strong>Figure 6</strong>. Phone mount assembly parts.<br><br>
Hardware includes two aluminum phone trays, two plungers, two rubber tips, and
four 8-32 pan-head screws.</li>
<li>Cut the rubber tips short enough to not interfere with plunger operation
(roughly in half), then use the rubber tips to cover the plungers.</li>
<li>Assemble the phone mounts using pan-head screws to attach the plunger
mechanisms to the aluminum trays.
<br><img src=images/camera_iab_phone_mount_assembled.png width="50%"><br>
<strong>Figure 7</strong>. Assembled phone mounts.<br><br>
Ensure the screws do not protrude beyond the plunger in the retracted or
extended plunger position.</li>
</ol>
<h2 id=phone-mount>Step 3: Aperture plate</h2>
<p>To assemble the front aperture plate:</p>
<ol>
<li>Gather the front aperture plate hardware shown in Figure 8:
<br><img src=images/camera_iab_front_plate_parts.png width="50%"><br>
<strong>Figure 8</strong>. Front aperture plate assembly parts (front plate
top has the narrower space from slots for tabs to edge).<br><br>
Hardware includes four short nylon screws (provided in the ITS-in-a-box kit) and
eight washers (required to keep the screws from protruding through the back of
the plastic plate).</li>
<li>Add phone mounts to the front square aperture plate as shown in Figure 9:
<br><img src=images/camera_iab_front_plate_assembled.jpg width="50%"><br>
<strong>Figure 9</strong>. Assembled front plate, phone mounts in middle
position.</li>
</ol>
<h2 id=tablet-holder>Step 4: Tablet holder</h2>
<p>To assemble the tablet holder:</p>
<ol>
<li>Gather the tablet holder parts shown in Figure 10:
<br><img src=images/camera_iab_tab_holder_parts.png width="50%"><br>
<strong>Figure 10</strong>. Tablet holder space assembly parts.</li>
<li>Attach the spacer bars to the back of the tablet holder by threading a
nylon screw into the hole at the bottom-left or bottom-right of the tablet
holder (the screw threads properly in only one direction).</li>
<li>Mount the spacers on the opposite side of the nylon screw as shown in Figure
11:
<br><img src=images/camera_iab_tablet_spacer_detail.jpg width="50%"><br>
<strong>Figure 11</strong>. Tablet holder, location of plastic spacers and
nylon screw.</li>
<li>Assemble the tablet holder with the screw head in the counter-drilled
plastic, then assemble the remaining pieces as shown in Figure 12.
<br><img src=images/camera_iab_tab_holder_spacer.png width="50%"><br>
<strong>Figure 12</strong>. Assembled tablet holder spacer (washers account for
thickness variations in the plastic).</li>
<li>Gather the tablet plunger parts as shown in Figure 13:
<br><img src=images/camera_iab_plunger_parts.png width="50%"><br>
<strong>Figure 13</strong>. Tablet plunger parts with plastic tips cut
(later designs have only one plunger in the center).</li>
<li>Cut the plastic tips to correct length and use the tips to cover the
plunger heads.</li>
<li>Attach plungers to the plastic, placing the acorn nuts on the outside to
ensure minimum clearance on the inside for the tablet (and to prevent
interference with plunger operation.</li>
<li>Connect the plunger(s) with the screw heads facing the box as shown in
Figure 14:
<br><img src=images/camera_iab_tabholder_assembled.png width="50%"><br>
<strong>Figure 14</strong>. Assembled tablet holder (acorn nuts face away
from back panel of box).<br><br>
All acorn nuts are on the same side of the tablet holder to maximize clearance
for the tablet.</li>
</ol>
<h2 id=box-assembly>Step 5: Assemble box</h2>
<p>To assemble the box:</p>
<ol>
<li>Place the front panel with the circular aperture flat on the table, inside
facing up.</li>
<li>Connect the front and back walls by inserting tabs into slots as shown in
Figure 15:
<br><img src=images/camera_iab_top_bottom_placed.png width="50%"><br>
<strong>Figure 15</strong>. Top and bottom attached to front (as seen from
right side).<br><br>
Position the front so the chamfered side of the circular aperture is on the
inside of the box. The front of the bottom can be identified by the small hole
for the power cord box exit (out of the field of view). The plastic hooks for
the sides should be pointed in the same direction.</li>
<li>Attach the back to the top and bottom as shown in Figure 16:
<br><img src=images/camera_iab_back_no_sides.jpg width="50%"><br>
<strong>Figure 16</strong>. Back attached, no sides.<br><br>
Push the back onto the tabs, then slide the back to the right (when facing the
back of the box) to fit under the hooked tabs.</li></ol>
<h2 id=light-install>Step 6: Install lights</h2>
<p>To install the lights:</p>
<ol>
<li>Place lights in the assembled box as shown in Figure 17:
<br><img src=images/camera_iab_light_installed.jpg width="50%"><br>
<strong>Figure 17</strong>. Proper light placement (back removed).<br><br>
Ensure lights are pointed in the right direction (towards the top and bottom and
towards the front of the box).</li>
<li>Secure lights by squeezing the pin into the small hole on the rectangular
tab that extends through the slot in the top/bottom, as shown in Figure 18:
<br><img src=images/camera_iab_pin_led_mount_details.png width="50%"><br>
<strong>Figure 18</strong>. Detail of inserted pin in LED mount tab on outside
of box.<br><br>
Squeezing of the pins is best done with a pair of pliers using gentle pressure;
you should feel a little give in the plastic as the pins are squeezed in place.
Insert the pins for both the bottom and top light sets. As the pins are small
and easy to drop, it is easiest to insert them to the bottom with the box
upside down.</li>
<li>Attach the power cord to the lower light bar as shown in Figure 19:
<br><img src=images/camera_iab_light_cord.jpg width="50%"><br>
<strong>Figure 19</strong>. Detail of lighting power cord.<br><br>
Thread the power cord through the hole in lower-front-right. The power cord has
different connectors at each end: The narrow connector fits to the LED light bar
and the larger connector fits to the power adaptor.</li>
<li>To prevent the power cord from pulling on the light assembly, use a zip tie
to secure the power cord to bottom of box as shown in Figure 20:
<br><img src=images/camera_iab_light_cord_secured.jpg width="50%"><br>
<strong>Figure 20</strong>. Power cord zip tie attachment on bottom of box
(shown on its side); trim ties as necessary.</li>
<li>Wire the top lights to the bottom lights on the left side and secure the
cable to the front of the box. Some drawings show the cable secured on side of
box, but it is easier to wire them to front corner as shown in Figure 21:
<br><img src=images/camera_iab_light_cord_zip.jpg width="50%"><br>
<strong>Figure 21</strong>. Detail of light cord anchored out of field of
view.</li>
</ol>
<h2 id=sides-holder>Step 7: Attach sides, tablet holder, and handles</h2>
<p>To attach the box sides, tablet holder, and handles with locking mechanism:</p>
<ol>
<li>Snap the right panel into place by pushing and sliding it upwards. The
bottom of the panel should be flush with the bottom of the front and back panels
as shown in Figure 22:
<br><img src=images/camera_iab_right_side_placed.jpg width="50%"><br>
<strong>Figure 22</strong>. Right side panel in place (viewed from back).</li>
<li>Place assembled tablet holder in right tabs as shown in Figure 23:
<br><img src=images/camera_iab_tabholder_inserted.jpg width="50%"><br>
<strong>Figure 23</strong>. Right side, tablet holder inserted in slots (viewed
from back of box so it appears on the left).<br><br>
If the tabs are too tight to allow the tablet holder to move up and down, sand
the tabs with 100 grit sandpaper to thin them and create a better fit.</li>
<li>Snap the left panel into place by pushing and sliding it upwards, as shown
in figure 24:
<br><img src=images/camera_iab_left_side_placed.jpg width="50%"><br>
<strong>Figure 24</strong>. Left side panel in place.</li>
<li>Gather the handle parts shown in Figure 25:
<br><img src=images/camera_iab_handle_parts.png width="50%"><br>
<strong>Figure 25</strong>. Handle and box lock parts.<br><br>
Hardware includes four wide plastic pieces (for outside the box) and two narrow
pieces (for top of the box). Screw holes are not placed symmetrically on the
plastic strips.</li>
<li>Assemble the handle as shown in figure 26:
<br><img src=images/camera_iab_handle_assembled.png width="50%"><br>
<strong>Figure 26</strong>. Assembled handle.<br><br>
Acorn nuts are usually placed on the top of the box. While this is not strictly
necessary, it makes the outer part of the handle as flat as possible. If the
handle is loose, insert washers to allow the acorn nuts to tighten effectively.
</li>
</ol>
<h2 id=final-assembly>Step 8: Final assembly</h2>
<p>To perform final assembly of the ITS-in-a-box:</p>
<ol>
<li>Using two nylon screws (short or long), attach the square aperture panel
with phone mounts to the front of the box as shown in Figure 27:
<br><img src=images/camera_iab_front_attached.jpg width="50%"><br>
<strong>Figure 27</strong>. Attached front panel.<br><br>
Place one screw on the top of the box and one screw on the bottom of the box.</li>
<li>Test the 4"x4” gatorboard aperture blank to ensure it fits in the square
opening, as shown in Figure 28:
<br><img src=images/camera_iab_gater_no_aperture.jpg width="50%"><br>
<strong>Figure 28</strong>. Gatorboard installed, no aperture cut.<br><br>
The fit should be snug. If the blank is too tight, shave it; if too loose, make
another.</li>
<li>Cut apertures for cameras. You can cut a single aperture (for testing a
single phone) or two apertures (for testing two phones). Apertures for the Pixel
and Pixel XL front and rear cameras are shown in Figure 29:
<br><img src=images/camera_iab_front_apertures.jpg width="50%"><br>
<strong>Figure 29</strong>. Front of ITS-in-a-box with front and rear camera
aperture cuts.<br><br>
The front camera is a circular aperture since there is no flash or laser, while
the rear camera is a rectangular aperture that allows the flash and laser to
operate without being blocked.</li></ol>
</body>
</html>

View file

@ -0,0 +1,245 @@
<html devsite>
<head>
<title>Camera ITS-in-a-Box</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Android Camera Image Test Suite (ITS) is part of Android Compatibility Test
Suite (CTS) Verifier and includes tests that verify image content. As of CTS
7.0_r8, CTS Verifier supports ITS test automation via Camera ITS-in-a-box;
support for manual tests continues to ensure coverage for all Android device
form factors.</p>
<p>ITS-in-a-box brings the following benefits:</p>
<ul>
<li><strong>Automation</strong>. No human intervention is needed during the
test.</li>
<li><strong>Reduced testing time</strong>. Parallel testing of front/back camera
cuts
testing cycle time by 50%.</li>
<li><strong>Easier troubleshooting</strong>. Consistency of test environment
leads to fewer setup errors and increases reproducibility.</li>
<li><strong>Efficiency</strong>. Ability to retry for individual Camera/Scene
improves test execution efficiency.</li>
</ul>
<h2 id=get-started>Getting started</h2>
<p>ITS-in-a-box consists of a plastic box that is laser cut from computer-aided
design (CAD) drawings, a chart tablet, and a device under test (DUT). To get
started with the Camera ITS-in-a-box:</p>
<ol>
<li><a href="camera_its_iab_tech_drawings.zip">Download the technical
drawings</a>.</li>
<li><a href="camera-its-box-assembly.html">Build the box</a>.</li>
<li><a href="#configure-tablet">Configure a tablet</a> with Camera ITS
software.</li>
<li><a href="#run-tests">Run tests</a>.</li>
<li><a href="#get-results">Get results</a> from the DUT.</li>
</ol>
<h2 id=configure-tablet>Configuring the tablet</h2>
<p>This section provides step-by-step instructions for setting up a Pixel C
tablet for use with the CameraITS software.</p>
<p class="note"><strong>Note:</strong> The CameraITS python scripts
automatically set the following options on the tablet for you:
<br><em>Settings > Display > Sleep > After 30 minutes of inactivity</em>
<br><em>Adaptive brightness > OFF</em>
</p>
<ol>
<li>Charge the tablet and power it on. If prompted to set up an account, skip it
(CameraITS does not require any account paired with the tablet).</li>
<li>Update the tablet to Android 7.0 or later (Android 6.x and earlier versions
do not support CameraITS).</li>
<li>Enable developer mode by going to <em>Settings > About tablet</em> and
tapping <strong>Build number</strong> five times.</li>
<li>Return to <em>Settings</em> and select <strong>Developer options</strong>.
<table>
<tr>
<th>Enable options</th>
<td>
<ul>
<li>On</li>
<li>Stay awake</li>
<li>USB debugging (This allows the host to run the tablet in debug mode. When you
connect the tablet to the host for the first time, the tablet prompts you to
"Allow USB debugging?" If the tablet does not display the debug prompt,
disconnect then reconnect tablet.)</li>
</ul>
</td>
</tr>
<tr>
<th>Disable options</th>
<td>
<ul>
<li>Automatic system updates</li>
<li>Verify apps over USB</li>
</ul>
</td>
</tr>
</table>
</li>
<li>Determine DUT and chart IDs by running <code>$ adb devices</code> to list
available devices. To determine <code>device_id</code> and
<code>chart_id</code>, plug and unplug devices and observe the devices that
connect and disconnect.</li>
<li>Perform three test runs to suppress hints and user prompts that can obscure
charts on the tablet screen.
<ol style=list-style-lower-alpha>
<li>Position the tablet face-up on a table (do not attach the tablet to the back
panel of the box)</li>
<li>Run the following command:
<pre class="devsite-terminal devsite-click-to-copy">
python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
</pre>
Scenes 2 and 3 require the tablet to display an image, so the tablet prompts you
to "Allow Drive to access photos, media, and files on your device?". Clear this
prompt (and prevent future prompts) by pressing <strong>Allow</strong>.</li>
<li>Run the command again. The tablet prompts you to "Keep a copy of this file?"
and suggests Google Drive. Clear this prompt (and prevent future prompts) by
pressing the Drive icon then <strong>Cancel</strong> for upload to drive.</li>
<li>Finally, run <code>tools/run_all_tests.py</code> and confirm that scenes
change automatically as script cycles through different scenes. While most
tests will FAIL (as the camera is not pointed at the chart), you can verify the
tablet correctly cycles through the scenes without displaying any prompts or
other pop-ups on the screen.</li></ol></li></ol>
<h2 id=run-tests>Running tests</h2>
<p>Before running the ITS-in-a-box, ensure your test setup includes the following
hardware and software:</p>
<ul>
<li>One (1) ITS-in-a-box</li>
<li>One (1) Pixel C for displaying Scenes, S/N: 5811000011</li>
<li>Two (2) DUTs that use the same build fingerprint and have the CTS Verifier
7.0_8+ application installed. Example DUTs:
<ul>
<li>One (1) Pixel NOF26W for the back camera(0) testing, S/N: FA6BM0305016. To
install the CTS Verifier app, unzip android-cts-verifier.zip then run
<pre class="devsite-terminal devsite-click-to-copy">
adb -s FA6BM0305016 install -r android-cts-verifier/CtsVerifier.apk
</pre></li>
<li>One (1) Pixel NOF26W for the front camera(1) testing, S/N: FA6BM0305439. To
install the CTS Verifier app, unzip android-cts-verifier.zip then run
<pre class="devsite-terminal devsite-click-to-copy">
adb -s FA6BM0305439 install -r android-cts-verifier/CtsVerifier.apk
</pre>
</li>
</ul>
</li></ul>
<h3 id=scenes-0-4>Running scenes 0-4</h3>
<p>To run scenes 0-4 on the front and back camera in parallel:</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">cd android-cts-verifier/CameraITS</code>
<code class="devsite-terminal">. build/envsetup.sh</code>
<code class="devsite-terminal">python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011</code>
</pre>
<p>Examples:</p>
<table>
<tr>
<td ><img src=/compatibility/cts/images/camera_its_cam0.png align="center"></td>
<td align="center"><img src=/compatibility/cts/images/camera_its_cam0.png></td>
</tr>
<tr>
<td align="center"><p class=caption><strong>Figure 1</strong>. Camera 0 S/N:
FA6BM0305016</p>
</td>
<td align="center"><p class=caption><strong>Figure 2</strong>. Camera 1 S/N:
FA6BM0305439</p>
</td>
</tr>
</table>
<h3 id=retry-scenes>Retrying scenes</h3>
<p>You can retry scenes for both front and back cameras or a single camera:
<ul>
<li>To retry scenes on front and back cameras in parallel:
<pre class="devsite-terminal devsite-click-to-copy">
python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011 scenes=3,4
</pre>
</li>
<li>To retry scenes on a single camera:
<pre class="devsite-terminal devsite-click-to-copy">
python tools/run_all_tests.py device=FA6BM0305016 chart=5811000011 camera=1 scenes=3,4
</pre>
</li>
</ul>
<h3 id=scenes-0-4>Running scene 5</h3>
<p>Scene 5 requires special setup with specific lighting (for details, refer to
CameraITS.pdf in the CTS Verifier download). You can run Scene 5 separately
(outside of the box) to test two devices in parallel.</p>
<ul>
<li>To run Scene 5 on front and back cameras on two devices in parallel:
<pre class="devsite-terminal devsite-click-to-copy">
python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011 scenes=5
</pre>
<br><img src=/compatibility/cts/images/camera_its_scene5.png width="50%"><br>
<strong>Figure 3</strong>. Camera scene 5.</li>
<li>To run Scene 5 for front and back cameras on a single device:
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=5</code>
<code class="devsite-terminal">python tools/run_all_tests.py device=FA6BM0305016 camera=1 scenes=5</code>
</pre></li>
</ul>
<h2 id=get-results>Getting results</h2>
<p>You can view results during testing and save the completed results as a report.
</p>
<ul>
<li><strong>View progress of running tests</strong>. The command
<code>run_parallel_tests</code> prints results only after Camera-Scene tests
have finished, so to view results during test execution you must use Android
Device Monitor or <code>adb logcat</code> to verify progress and/or view
screenshots.<br>
<br>Example adb command:
<pre class="devsite-terminal devsite-click-to-copy">
adb -s FA6BM0305016 logcat -v time
</pre>
Example screenshots command:
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">adb -s FA6BM0305016 shell screencap -p /sdcard/screencap.png</code>
<code class="devsite-terminal">adb -s FA6BM0305016 pull /sdcard/screencap.png</code>
<code class="devsite-terminal">display ./screencap.png</code>
</pre></li>
<li><strong>View results</strong>. To save Camera ITS results as a report:
<ol>
<li>Press <strong>Pass</strong> and save the report:
<br><img src=/compatibility/cts/images/camera_its_results.png width="50%"><br>
<strong>Figure 4</strong>. Camera ITS report.</li>
<li>Pull reports from the device:
<pre class="devsite-terminal devsite-click-to-copy">
adb -s FA6BM0305016 pull /sdcard/verifierReports
</pre>
</li>
<li>Unzip the report file and view the test_result.xml.
<br><img src=/compatibility/cts/images/camera_its_reports.png><br>
<strong>Figure 5</strong>. Camera ITS reports.<br></li>
</ol>
</li>
</ul>
</body>
</html>

View file

@ -0,0 +1,317 @@
<html devsite>
<head>
<title>CTS Development</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<h2 id="initializing-your-repo-client">Initializing your Repo client</h2>
<p>Follow the <a href="/source/downloading.html">instructions</a>
to get and build the Android source code but specify a particular CTS branch
name, for example<code>-b android-5.0_r2</code>, when issuing the <code>repo
init</code> command. This assures your CTS changes will be included in the
next CTS release and beyond.</p>
<h2 id="building-and-running-cts">Building and running CTS</h2>
<p>Execute the following commands to build CTS and start the interactive
CTS console:</p>
<p class="note"><strong>Note:</strong> You may supply one of these other values
for <code>TARGET_PRODUCT</code> to build for different architectures:
<code>aosp_x86_64</code> or <code>aosp_mips</code></p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">cd <em>/path/to/android/root</em></code>
<code class="devsite-terminal">make cts -j32 TARGET_PRODUCT=aosp_arm64</code>
<code class="devsite-terminal">cts-tradefed</code>
</code></pre>
<p>At the cts-tf console, enter e.g.:</p>
<pre class="devsite-click-to-copy">
tf&gt; run cts --plan CTS
</pre>
<h2 id="writing-cts-tests">Writing CTS tests</h2>
<p>CTS tests use JUnit and the Android testing APIs. Review the
<a href="https://developer.android.com/tools/testing/testing_android.html">Testing and Instrumentation</a>
tutorial while perusing the existing tests under the
<code>cts/tests</code> directory. You will see that CTS tests mostly follow the same
conventions used in other Android tests.</p>
<p>Since CTS runs across many production devices, the tests must follow
these rules:</p>
<ul>
<li>Must take into account varying screen sizes, orientations, and keyboard layouts.</li>
<li>Only use public API methods. In other words, avoid all classes, methods, and fields that are annotated with the "hide" annotation.</li>
<li>Avoid relying upon particular view layouts or depend on the dimensions of assets that may not be on some device.</li>
<li>Don't rely upon root privileges.</li>
</ul>
<h3 id="test-naming-and-location">Test naming and location</h3>
<p> Most CTS test cases target a specific class in the Android API. These tests
have Java package names with a <code>cts</code> suffix and class names with the
<code>Test</code> suffix. Each test case consists of multiple tests, where each
test usually exercises a particular method of the class being tested.
These tests are arranged in a directory structure where tests are grouped into
different categories such as "widgets" and "views." </p>
<p>
For example, the CTS test for the Java package
<code>android.widget.TextView</code> is
<code>android.widget.cts.TextViewTest</code> with its Java package name as
<code>android.widget.cts</code> and its class name as
<code>TextViewTest</code>. </p>
<ul>
<li><strong>Java package name</strong><br/>The Java package name for the CTS tests
is the package name of the class that the test is testing, followed by ".cts".
For our example, the package name would be <code>android.widget.cts</code>.
<li><strong>Class name</strong><br/>The class name for CTS tests is <strong>
</strong>name of the class that the test is testing with "Test" appended. (For
example, if a test is targeting <code>TextView</code>, the class name should be
<code>TextViewTest</code>.)
<li><strong>Module name (CTS v2 only)</strong><br/>CTS v2 organizes tests by module.
The module name is usually the second string of the Java package name (in our
example, <code>widget</code>), although it does not have to be.</li>
</ul>
<p>
The directory structure and sample code depend on whether you are using CTS v1
or CTS v2.
</p>
<h4 id="cts-v1">CTS v1</h4>
<p>
For Android 6.0 and earlier, use CTS v1. For CTS v1, the sample code is at
<code>cts/tests/tests/example</code>.
</p>
<p>
The directory structure in CTS v1 tests looks like this:
</p>
<pre class="devsite-click-to-copy">
cts/
tests/
tests/
<em>package-name</em>/
Android.mk
AndroidManifest.xml
src/
android/
<em>package-name</em>/
SampleDeviceActivity.java
cts/
SampleDeviceTest.java
</pre>
<h4 id="cts-v2">CTS v2</h4>
<p>
For Android 7.0 and later, use CTS v2. For details, see <a
href="https://android.googlesource.com/platform/cts/+/master/tests/sample/">the
sample test in AOSP</a>.
</p>
<p>
The CTS v2 directory structure looks like this:
</p>
<pre class="devsite-click-to-copy">
cts/
tests/
<em>module-name</em>/
Android.mk
AndroidManifest.xml
src/
android/
<em>package-name</em>/
SampleDeviceActivity.java
cts/
SampleDeviceTest.java
</pre>
<h3 id="new-sample-packages">New sample packages</h3>
<p>When adding new tests, there may not be an existing directory to place your
test. In those cases, you'll need to create the directory and copy the
appropriate sample files.</p>
<h4 id="cts-v1">CTS v1</h4>
<p> If you are using CTS v1, refer to the example under
<code>cts/tests/tests/example</code> and create a new directory. Also,
make sure to add your new package's module name from its <code>Android.mk</code>
to <code>CTS_COVERAGE_TEST_CASE_LIST</code> in
<code>cts/CtsTestCaseList.mk</code>. This Makefile is used by
<code>build/core/tasks/cts.mk</code> to combine all the tests together to create
the final CTS package. </p>
<h4 id="cts-v2">CTS v2</h4>
<p>
Use the sample test
<code><a href="https://android.googlesource.com/platform/cts/+/master/tests/sample/">/cts/tests/sample/</a></code>
to quick start your new test module with following steps:
</p>
<ol>
<li>Run this command to create the test directory and copy sample files to it:
<pre class="devsite-terminal devsite-click-to-copy">mkdir cts/tests/<i>module-name</i> && cp -r cts/tests/sample/* cts/tests/<i>module-name</i></pre>
<li>Navigate to <code>cts/tests/<em>module-name</em></code> and substitute all instances of
"[Ss]ample" following the recommended naming convention from above.
<li>Update <code>SampleDeviceActivity</code> to exercise the feature you're testing.
<li>Update <code>SampleDeviceTest</code> to ensure the activity succeeds or logs its
errors.</li>
</ol>
<h4>Additional directories</h4>
<p> Other Android directories such as <code>assets</code>, <code>jni</code>,
<code>libs</code> and <code>res</code> can also be added. To add JNI code,
create a directory in the root of the project next to <code>src</code> with the native
code and an <code>Android.mk</code> in it.</p>
<p>
The makefile typically contains the following settings:
</p>
<pre class="devsite-click-to-copy">
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libCtsSample_jni
# don't include this package in any target
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := <i>list of source code files</i>
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
# Tag this module as a cts test artifact
LOCAL_COMPATIBILITY_SUITE := cts
LOCAL_SHARED_LIBRARIES := libnativehelper
LOCAL_SDK_VERSION := current
include $(BUILD_SHARED_LIBRARY)
</pre>
<h4>Android.mk file</h4>
<p> Finally, the <code>Android.mk</code> file in the root of the project will
need to be modified to build the native code and depend on it, as shown
below:</p>
<pre class="devsite-click-to-copy">
# All tests should include android.test.runner.
LOCAL_JAVA_LIBRARIES := android.test.runner
# Includes the jni code as a shared library
LOCAL_JNI_SHARED_LIBRARIES := libCtsSample_jni
# Include for InstrumentationCtsTestRunner
LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner...
LOCAL_SDK_VERSION := currentinclude $(BUILD_CTS_PACKAGE)
#Tells make to look in subdirectories for more make files to include
include $(call all-makefiles-under,$(LOCAL_PATH))
</pre>
<h2 id="Fix-remove-tests">Fix or remove tests</h2>
<p>Besides adding new tests there are other ways to contribute to CTS: Fix or
remove tests annotated with "BrokenTest" or "KnownFailure."</p>
<h2 id="submitting-your-changes">Submitting your changes</h2>
<p>Follow the <a href="/source/submit-patches.html">Submitting Patches workflow</a>
to contribute changes to CTS. A reviewer
will be assigned to your change, and your change should be reviewed shortly!</p>
<h2 id="release-schedule">Release schedule and branch information</h2>
<p>CTS releases follow this schedule.</p>
<p class="note"><strong>Note</strong>: This schedule is tentative and may be
updated from time to time as CTS for the given Android version matures.</p>
<table>
<tr>
<th>Version</th>
<th>Branch</th>
<th>Frequency</th>
</tr>
</thead>
<tbody>
<tr>
<td>7.0</td>
<td>nougat-cts-dev</td>
<td>Monthly</td>
</tr>
<tr>
<td>6.0</td>
<td>marshmallow-cts-dev</td>
<td>Monthly</td>
</tr>
<tr>
<td>5.1</td>
<td>lollipop-mr1-cts-dev</td>
<td>Monthly</td>
</tr>
<tr>
<td>5.0</td>
<td>lollipop-cts-dev</td>
<td>No releases planned</td>
</tr>
<tr>
<td>4.4</td>
<td>kitkat-cts-dev</td>
<td>No releases planned</td>
</tr>
<tr>
<td>4.3</td>
<td>jb-mr2-cts-dev</td>
<td>No releases planned</td>
</tr>
<tr>
<td>4.2</td>
<td>jb-mr1.1-cts-dev</td>
<td>No releases planned</td>
</tr>
</table>
<h3 id="important-dates">Important Dates during month of the release</h3>
<ul>
<li><strong>End of 1st Week</strong>: Code Freeze. At this point,
submissions on the current branch will no longer be accepted and will not be
included in the next version of CTS. Once we have chosen a candidate for
release, the branch will again be open and accepting new submissions.
<li><strong>Second or third week</strong>: CTS is published in the Android
Open Source Project (AOSP).
</ul>
<h3 id="auto-merge">Auto-merge flow</h3>
<p>CTS development branches have been set up so that changes submitted to each
branch will automatically merge as below:<br>
jb-dev-> jb-mr1.1-cts-dev -> jb-mr2-cts-dev -> kitkat-cts-dev ->
lollipop-cts-dev -> lollipop-mr1-cts-dev -> marshmallow-cts-dev ->
nougat-cts-dev -> &lt;private-development-branch for Android N MR1&gt;</p>
<p>If a changelist (CL) fails to merge correctly, the author of the CL will get
an email with instructions on how to resolve the conflict. In most of the
cases, the author of the CL can use the instructions to skip the auto-merge of
the conflicting CL.</p>
</body>
</html>

View file

@ -0,0 +1,225 @@
<html devsite>
<head>
<title>Compatibility Test Suite Downloads</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Thank you for your interest in Android Compatibility! The links below give
you access to key documents and information about the program. As CTS is
updated, new versions are added to this page. CTS versions are denoted by
R&lt;number&gt; in the link name.</p>
<h2 id="android-71">Android 7.1</h2>
<p>Android 7.1 is the release of the development milestone code-named Nougat-MR1.
The source code for the following tests can be synced with the
'android-cts-7.1_r7' tag in the open-source tree.</p>
<ul>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-7.1_r7-linux_x86-arm.zip">Android
7.1 R7 Compatibility Test Suite (CTS) - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-7.1_r7-linux_x86-x86.zip">Android
7.1 R7 Compatibility Test Suite (CTS) - x86</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r7-linux_x86-arm.zip">Android
7.1 R7 CTS Verifier - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.1_r7-linux_x86-x86.zip">Android
7.1 R7 CTS Verifier - x86</a></li>
</ul>
<h2 id="android-70">Android 7.0</h2>
<p>Android 7.0 is the release of the development milestone code-named Nougat.
The source code for the following tests can be synced with the
'android-cts-7.0_r11' tag in the open-source tree.</p>
<ul>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-7.0_r11-linux_x86-arm.zip">Android
7.0 R11 Compatibility Test Suite (CTS) - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-7.0_r11-linux_x86-x86.zip">Android
7.0 R11 Compatibility Test Suite (CTS) - x86</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r11-linux_x86-arm.zip">Android
7.0 R11 CTS Verifier - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-7.0_r11-linux_x86-x86.zip">Android
7.0 R11 CTS Verifier - x86</a></li>
</ul>
<h2 id="android-60">Android 6.0</h2>
<p>Android 6.0 is the release of the development milestone code-named Marshmallow.
The source code for the following tests can be synced with the
'android-cts-6.0_r20' tag in the open-source tree.</p>
<ul>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-6.0_r20-linux_x86-arm.zip">Android
6.0 R20 Compatibility Test Suite (CTS) - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-6.0_r20-linux_x86-x86.zip">Android
6.0 R20 Compatibility Test Suite (CTS) - x86</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-6.0_r20-linux_x86-arm.zip">Android
6.0 R20 CTS Verifier - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-6.0_r20-linux_x86-x86.zip">Android
6.0 R20 CTS Verifier - x86</a></li>
</ul>
<h2 id="android-51">Android 5.1</h2>
<p>Android 5.1 is the release of the development milestone code-named Lollipop-MR1.
The source code for the following tests can be synced with the
'android-cts-5.1_r21' tag in the open source tree.</p>
<ul>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-5.1_r21-linux_x86-arm.zip">Android
5.1 R21 Compatibility Test Suite (CTS) - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-5.1_r21-linux_x86-x86.zip">Android
5.1 R21 Compatibility Test Suite (CTS) - x86</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-5.1_r21-linux_x86-arm.zip">Android
5.1 R21 CTS Verifier - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-5.1_r21-linux_x86-x86.zip">Android
5.1 R21 CTS Verifier - x86</a></li>
</ul>
<h2 id="android-50">Android 5.0</h2>
<p>Android 5.0 is the release of the development milestone code-named Lollipop.
The source code for the following tests can be synced with the
'android-cts-5.0_r9' tag in the open source tree.</p>
<ul>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-5.0_r9-linux_x86-arm.zip">Android
5.0 R9 Compatibility Test Suite (CTS) - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-5.0_r9-linux_x86-x86.zip">Android
5.0 R9 Compatibility Test Suite (CTS) - x86</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-5.0_r9-linux_x86-arm.zip">Android
5.0 R9 CTS Verifier - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-5.0_r9-linux_x86-x86.zip">Android
5.0 R9 CTS Verifier - x86</a></li>
</ul>
<h2 id="android-44">Android 4.4</h2>
<p>Android 4.4 is the release of the development milestone code-named
KitKat. Source code for Android 4.4 is found in the
'android-cts-4.4_r4' branch in the open source tree.</p>
<ul>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-4.4_r4-linux_x86-arm.zip">Android
4.4 R4 Compatibility Test Suite (CTS) - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-4.4_r4-linux_x86-x86.zip">Android
4.4 R4 Compatibility Test Suite (CTS) - x86</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-4.4_r4-linux_x86-arm.zip">Android
4.4 R4 CTS Verifier - ARM</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-4.4_r4-linux_x86-x86.zip">Android
4.4 R4 CTS Verifier - x86</a></li>
</ul>
<h2 id="android-43">Android 4.3</h2>
<p>Android 4.3 is the release of the development milestone code-named
Jelly Bean-MR2. Source code for Android 4.3 is found in the 'android-4.3_r2.2-cts' branch in the open source tree.</p>
<ul>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-4.3_r2-linux_x86-arm.zip">Android
4.3 R2 Compatibility Test Suite (CTS)</a></li>
<li><a
href="https://dl.google.com/dl/android/cts/android-cts-verifier-4.3_r1-linux_x86-arm.zip">Android
4.3 R1 CTS Verifier</a></li>
</ul>
<h2 id="android-42">Android 4.2</h2>
<p>Android 4.2 is the release of the development milestone code-named
Jelly Bean-MR1. Source code for Android 4.2 is found in the 'android-4.2.2_r1'
branch in the open source tree.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-4.2_r4-linux_x86-arm.zip">Android 4.2 R4 Compatibility Test Suite (CTS)</a></li>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-4.2_r5-linux_x86-arm.zip">Android 4.2 R5 CTS Verifier</a></li>
</ul>
<h2 id="android-41">Android 4.1</h2>
<p>Android 4.1 is the release of the development milestone code-named Jelly
Bean. The source code of the Compatibility Test Suite revisions below is
available at the 'android-cts-4.1_r4' tag in the open source tree.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-4.1_r4-linux_x86-arm.zip">Android 4.1 R4 Compatibility Test Suite (CTS)</a></li>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-4.1_r7-linux_x86-arm.zip">Android 4.1 R7 CTS Verifier</a></li>
</ul>
<h2 id="android-403">Android 4.0.3</h2>
<p>Android 4.0.3 is the release of the development milestone code-named
Ice Cream Sandwich. Source code for
Android 4.0.3 is found in the 'android-4.0.3_r1' branch in the open source tree.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-4.0.3_r3-linux_x86-arm.zip">Android 4.0.3 R3 Compatibility Test Suite (CTS)</a></li>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-4.0.3_r2-linux_x86-arm.zip">Android 4.0.3 R2 CTS Verifier</a></li>
</ul>
<h2 id="android-23">Android 2.3</h2>
<p>Android 2.3 is the release of the development milestone code-named
Gingerbread. Source code for Android 2.3 is found in the 'gingerbread' branch in
the open source tree.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-2.3_r13-linux_x86-arm.zip">Android 2.3 R13 Compatibility Test Suite (CTS)</a></li>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-verifier-2.3_r3-linux_x86-armv5.zip">Android 2.3 R3 CTS Verifier</a></li>
</ul>
<h2 id="android-22">Android 2.2</h2>
<p>Android 2.2 is the release of the development milestone code-named
FroYo. Source code for Android 2.2 is found in the 'froyo' branch in the
open source tree.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-2.2_r8-linux_x86-arm.zip">Android 2.2 R8 Compatibility Test Suite (CTS)</a></li>
</ul>
<h2 id="android-21">Android 2.1</h2>
<p>Android 2.1 is the release of the development milestone code-named
Eclair. Source code for Android 2.1 is found in the 'eclair' branch in the
open source tree. Note that for technical reasons, there is no compatibility
program for Android 2.0 or 2.0.1, and new devices must use Android 2.1.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-2.1_r5-x86.zip">Android 2.1 R5 Compatibility Test Suite (CTS)</a></li>
</ul>
<h2 id="android-16">Android 1.6</h2>
<p>Android 1.6 was the release of the development milestone code-named Donut.
Android 1.6 was obsoleted by Android 2.1. Source code for Android 1.6 is found
in the 'donut' branch in the open source tree.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-1.6_r1-x86.zip">Android 1.6 R1 Compatibility Test Suite (CTS)</a></li>
</ul>
<h2 id="cts-media-files">CTS Media Files</h2>
<p>These media files are required for the CTS media stress tests.</p>
<ul>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.3.zip">CTS Media 1.3</a></li>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.2.zip">CTS Media 1.2</a></li>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.1.zip">CTS Media 1.1</a></li>
<li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.0.zip">CTS Media 1.0</a></li>
</ul>
<h2 id="older-android-versions">Older Android Versions</h2>
<p>There is no Compatibility Program for older versions of Android, such as Android
1.5 (known in development as Cupcake). New devices intended to be Android
compatible must ship with Android 1.6 or later.</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Some files were not shown because too many files have changed in this diff Show more