To run CTS, you need to prepare your physical environment, your desktop machine, and the device you are using for testing.
Bluetooth LE beacons
If the device-under-test (DUT) supports Bluetooth LE, then at least three Bluetooth LE beacons should be placed within five meters of the DUT for Bluetooth LE scan testing. Those beacons can be any kind, do not need to be configured or emit anything specific, and can include iBeacon, Eddystone, or even devices simulating BLE beacons.
When running camera CTS, you are recommended to use normal lighting conditions with a test pattern chart (such as a checkerboard pattern) that is not too close to the lens (the distance depends on the device's minimum focus distance).
The camera sensors should point to a scene
with sufficient lighting to allow the camera sensors under test to reach and
remain at the maximum configured target frames per second (FPS) as specified in
CONTROL_AE_TARGET_FPS_RANGE. This applies to
all camera sensors reported by getCameraIdList as the test iterates over all listed
devices and measures performance individually.
If the DUT supports external cameras, such as USB webcams, then an external camera must be plugged in when running CTS. Otherwise, the CTS tests will fail.
If the DUT supports the Global Positioning System (GPS) Global Navigation Satellite System (GNSS) feature, then a GPS/GNSS signal, with GPS portion compliant with ICD-GPS-200C, should be provided to the DUT at a suitable signal level for reception and GPS location calculation. The GPS/GNSS signal source can be of any kind, ranging from a satellite simulator, to a GPS/GNSS repeater of outdoor signals, simply to placement of the DUT close enough to a window such that it can directly receive enough GPS/GNSS signal.
Wi-Fi and IPv6
CTS tests require a Wi-Fi network that supports IPv6, can treat the Device Under Test (DUT) as an isolated client, and has an internet connection. An isolated client refers to a configuration where the DUT does not have visibility to the broadcast/multinetwork messages on that subnetwork, either by a Wi-Fi AP configuration or by running the DUT on an isolated sub-network without other devices being connected.
If you don't have access to a native IPv6 network, an IPv6 carrier network, or a VPN to pass some tests depending on IPv6, you may instead use a Wi-Fi access point and an IPv6 tunnel. See Wikipedia's list of IPv6 tunnel brokers.
Wi-Fi RTT (Round Trip Time)
Android 9 adds an API for a Wi-Fi RTT capability, which allows devices to measure their distance to access points with an accuracy of 1 to 2 meters, thus increasing indoor location accuracy significantly. Here are two recommended devices supporting Wi-Fi RTT: Google Wifi and Compulab's Filet2 Access Point (set to 40MHz bandwidth at 5GHz).
The access points should be powered up, but not required to be connected to any network. Access points do not need to be next to the testing device; however, they are recommended to be within a distance of 40 ft from the DUT. One access point is typically sufficient.
Desktop machine setup
ADB and AAPT
Before running the CTS, make sure you have recent versions of both Android Debug Bridge (adb) and Android Asset Packaging Tool (AAPT) installed and those tools' location added to the system path of your machine.
To install ADB, download the Android SDK Tools package for your operating system, open it, and follow the instructions in the included README file. For troubleshooting information, see Installing the Stand-alone SDK Tools.
aapt are in your system path. The
following command assumes you've opened the package archive in your home
Java Development Kit (JDK)
Install the proper version of the Java Development Kit (JDK). For Android 7.0 and higher:
For details, see the JDK requirements.
Download and open the CTS packages matching your devices' Android version and all the Application Binary Interfaces (ABIs) your devices support.
Download and open the latest version of the CTS Media Files.
Follow the step to
set up your system to detect your device, such as
udev rules file for Ubuntu Linux.
Android device setup
A compatible device is defined as a device with a user/release-key signed build, so your device should be running a system image based on the known to be compatible user build (Android 4.0 and higher) from Codenames, Tags, and Build Numbers.
First API level build property
Certain CTS requirements depend on the build a device was originally shipped with. For example, devices that originally ship with earlier builds may be excluded from system requirements that apply to devices that ship with later builds.
To make this information available to CTS, device manufacturers may define
the build-time property:
ro.product.first_api_level. The value
of this property is the first API level the device was commercially launched
The device manufacturers can launch a new product as an upgrade of an existing
product in the same device group when choosing to reuse the common underlying
implementation with the existing product. The device manufacturers can optionally set the API level of
the existing product to
ro.product.first_api_level, so that upgrade
requirements are applied for CTS and Treble/VTS.
The device manufacturers can add
PRODUCT_PROPERTY_OVERRIDES into their device.mk
file to set this property, as shown in the following example:
#ro.product.first_api_level indicates the first api level that the device has been commercially launched on. PRODUCT_PROPERTY_OVERRIDES +=\ ro.product.first_api_level=21
First API level for Android 9 and higher
For devices launched with Android 9 or higher, set the property
ro.product.first_api_level to a valid value found on
Codenames, Tags, and Build Numbers.
First API level for Android 8.x and lower
For devices launched on Android 8.x or lower, unset (remove) the property
ro.product.first_api_level for the first build of the
product. For all subsequent builds, set
ro.product.first_api_level to the correct API level value.
This allows the property to correctly identify a new product and preserves
information about the first API level of the product. If the flag is
unset, Android assigns
CTS Shim apps
Android 7.0 includes the following pre-built apps (built from this source) which do not contain any code except for the manifest:
This apk file is copied to
/system/app/CtsShimPrebuilt.apkon the system image.
This apk file is copied to
/system/priv-app/CtsShimPrivPrebuilt.apkon the system image.
CTS uses these apps to test privileges and permissions. To pass the tests, you must preload the apps into the appropriate directories on the system image without re-signing them.
CTS Shim APEX
Android 10 and higher includes a package format
called APEX. To write CTS tests for APEX
management APIs (for example, updating to a new version, reporting active
APEXes, and so on) you must preinstall a
CtsShimApex package on
the target device.
CtsShimApex is required to be preinstalled
ro.apex.updatable property is set to true,
CtsShimApex is required for all devices that are supporting APEX
package management. If
ro.apex.updatable property is missing or
is not set,
CtsShimApex is not required to be preinstalled on a
device. APEX Shim Validation test verifies the implementation of
Android 9 introduced Open Mobile APIs. For devices that plan to report more than one secure element, CTS adds test cases to validate the behavior of the Open Mobile APIs. These test cases require the one-time installation of a sample applet into the embedded Secure Element (eSE) of the Device Under Test (DUT) or into the SIM card used by the DUT. The eSE sample applet and the SIM sample applet can be found in AOSP.
See CTS Test for Secure Element for more detailed information on Open Mobile API Test cases and Access Control Test cases.
The CTS media stress tests require video clips to be on external storage
/sdcard). Most of the clips are from Big Buck Bunny which
is copyrighted by the Blender Foundation under the
Creative Commons Attribution 3.0 license.
The required space depends on the maximum video playback resolution supported
by the device (See section 5 in the compatibility definition document for the
platform version of the required resolutions.) Note that the video playback
capabilities of the device under test will be checked via the
android.media.CamcorderProfile APIs for earlier versions of Android and
android.media.MediaCodecInfo.CodecCapabilities APIs from Android 5.0.
Here are the storage requirements by maximum video playback resolution:
- 480x360: 98MB
- 720x480: 193MB
- 1280x720: 606MB
- 1920x1080: 1863MB
Screen and storage
- Any device that does not have an embedded screen needs to be connected to a screen.
- If the device has a memory card slot, plug in an empty SD card. Use an SD card that supports Ultra High Speed (UHS) Bus with SDHC or SDXC capacity or one with at least speed class 10 or higher to ensure it can pass the CTS.
- If the device has SIM card slots, plug in an activated SIM card to each slot. If the device supports SMS, each SIM card should have its own number field populated.
In order to run CTS carrier API tests, the device needs to have a SIM card with carrier privilege rules on it. See Preparing the UICC.
Android device configuration
- Factory data reset the device: Settings > Backup & reset > Factory data reset
- Set your device's language to English (United States) from: Settings > Language & input > Language
- Turn on the location setting if there is a GPS or Wi-Fi / Cellular network feature on the device: Settings > Location > On
- Connect to a Wi-Fi network that supports IPv6, can treat the Device Under Test (DUT) as an isolated client (see the Physical Environment section above), and has an internet connection: Settings > Wi-Fi
- Make sure no lock pattern or password is set on the device: Settings > Security > Screen lock > None
- Enable USB debugging on your device: Settings > Developer options > USB debugging.
- Set the time to 12-hour format: Settings > Date & time > Use 24-hour format > Off
- Select: Settings > Developer options > Stay Awake > On
- Select: Settings > Developer options > Allow mock locations > On
- Select: Settings > Developer options > Verify apps over USB > Off
- Launch the browser and dismiss any startup/setup screen.
- Connect the desktop machine that will be used to test the device with a USB cable.
- Install and configure helper apps on the device.
In Settings > Security > Select device administrators, enable the two
android.deviceadmin.cts.CtsDeviceAdminReceiver*device administrators. Ensure the
android.deviceadmin.cts.CtsDeviceAdminDeactivatedReceiverand any other preloaded device administrators remain disabled.
- Copy the CTS media files to the device as follows:
- Navigate (
cd) to the path the media files are downloaded and unzipped to.
- Change the file permissions:
chmod u+x copy_media.sh
- To copy clips up to a resolution of 720x480, run:
- If you are not sure about the maximum resolution, try
./copy_media.sh allso that all files are copied.
- If there are multiple devices under adb, add the serial option
-s) to the end. For example, to copy up to 720x480 to the device with serial 1234567, run:
./copy_media.sh 720x480 -s 1234567
- To copy clips up to a resolution of 720x480, run:
- Navigate (