Manifest Filters Supported by the Amazon Appstore

You can use the following elements in your AndroidManifest.xml file to control filtering for Fire devices and non-Amazon devices using the Amazon Appstore. You can use any combination of available filters. For details on manifest elements that apply to Fire devices, see Device Filtering and Compatibility.

Android API Level (<uses-sdk>)

Appstore uses this element to filter devices based on minSdkVersion and maxSdkVersion values. More documentation about <uses-sdk> can be found in <uses-sdk> in the Android documentation.

Note: Fire TV devices that run Fire OS 5 are based on API level 22. Fire TV devices that run Fire OS 6 are based on API level 25. To target all Fire TV devices, set your android.minSdkVersion to 22 or lower.

Hardware Permissions (<uses-permission>)

Manifest permissions are typically used to grant or restrict access to specific API's and services. A full list of manifest permissions is provided in <uses-permission>. Manifest permissions can also be used to define hardware requirements. If you specify hardware permissions in your manifest, Amazon Appstore assumes that your application requires the underlying hardware and filters out any devices that do not match the requirement.

Important: Both stated and implied hardware features will be enforced if they are not explicitly defined as not required.

For example, <uses-permission> with the value android.permission.ACCESS_FINE_LOCATION implies a hardware requirement for android.hardware.location.gps, and Appstore will filter out any devices that don't have GPS hardware. Adding a <uses-feature> element for android.hardware.location.gps with android:require set to false will override the implied requirement for a GPS.

Allows mock locations and location provider status to be injected into the LocationManager service for testing purposes. Locations and status values override actual location and status information generated by network, GPS, or other location providers.

Hardware and Software Features (<uses-feature>)

Hardware and software features supported by Appstore are listed below. See this page for attributes, descriptions and filtering rules.

As noted above, subfeatures are set to required by default (this is known as implicit permission). To override these permissions, add a <uses-feature> element for each subfeature, with required set to false.

The application uses a low-latency audio pipeline on the device and is sensitive to any delays or lag in sound input or output.

Bluetooth

android.hardware.bluetooth

The application uses Bluetooth radio features in the device.

android.hardware.bluetooth_le

The application uses Bluetooth Low Energy radio features in the device.

Camera

android.hardware.camera

The application uses the device's camera. If the device supports multiple cameras, the application uses the back-facing camera.

android.hardware.camera.any

The application uses at least one camera facing in any direction, or an external camera device if one is connected. Use this in preference to `android.hardware.camera` if a back-facing camera is not required.

android.camera.external

The application uses an external camera device if one is connected.

android.hardware.camera.autofocus

Subfeature. The application uses the device camera's autofocus capability.
Note: This subfeature implicitly declares the android.hardware.camera parent feature, unless declared with android:required="false". Also, this subfeature is required by default if you set the parent feature to required.

android.hardware.camera.flash

Subfeature. The application uses the device camera's flash.
Note: This subfeature implicitly declares the android.hardware.camera parent feature, unless declared with android:required="false". Also, this subfeature is required by default if you set the parent feature to required.

android.hardware.camera.front

Subfeature. The application uses a front-facing camera on the device.
Note: This subfeature implicitly declares the android.hardware.camera parent feature, unless declared with android:required="false". Also, this subfeature is required by default if you set the parent feature to required.

Live Wallpaper

android.software.live_wallpaper

The application uses or provides Live Wallpapers and should be installed only on devices that support Live Wallpapers.

Location

android.hardware.location

The application uses one or more features on the device for determining location, such as GPS location, network location, or cell location.

android.hardware.location.network

Subfeature. The application uses coarse location coordinates obtained from a network-based geolocation system supported on the device. Note: This subfeature implicitly declares the android.hardware.location parent feature, unless declared with android:required="false".

android.hardware.location.gps

Subfeature. The application uses precise location coordinates obtained from a Global Positioning System receiver on the device. Note: This subfeature implicitly declares the android.hardware.location parent feature, unless declared with android:required="false".

Microphone

android.hardware.microphone

The application uses a microphone on the device.

NFC

android.hardware.nfc

The application uses Near Field Communications radio features in the device.

android.hardware.nfc.hce

The application uses the NFC card emulation feature in the device.

Sensors

android.hardware.sensor.accelerometer

The application uses motion readings from an accelerometer on the device.

android.hardware.sensor.barometer

The application uses the device's barometer.

android.hardware.sensor.compass

The application uses directional readings from a magnetometer (compass) on the device.

android.hardware.sensor.gyroscope

The application uses the device's gyroscope sensor.

android.hardware.sensor.light

The application uses the device's light sensor.

android.hardware.sensor.proximity

The application uses the device's proximity sensor.

android.hardware.sensor.stepcounter

The application uses the device's step counter

android.hardware.sensor.stepdetector

The application uses the device's step detector

SIP/VOIP

android.software.sip

The application uses SIP service on the device and should be installed only on devices that support SIP.

android.software.sip.voip

Subfeature. The application uses SIP-based VOIP service on the device. Note: This subfeature implicitly declares the android.software.sip parent feature, unless declared with android:required="false".

Television

android.hardware.type.television

The application is designed for a television user experience.

Touchscreen

android.hardware.faketouch

When declared "as required", this indicates that the application is compatible with a device only if it offers an emulated touchscreen ("fake touch" interface). Note: Because applications require the android.hardware.touchscreen feature by default, if you want your application to be available to devices that provide a fake touch interface, you must also explicitly declare that a touch screen is not required by declaring <uses-feature android:name="android.hardware.touchscreen" android:required="false" />.

android.hardware.faketouch.multitouch.distinct

The application performs distinct tracking of two or more "fingers" on a fake touch interface. This is a superset of the faketouch feature. When declared as required, this indicates that the application is compatible with a device only if it supports touch emulation for events that supports distinct tracking of two or more fingers, or better.

android.hardware.faketouch.multitouch.jazzhand

The application performs distinct tracking of five or more "fingers" on a fake touch interface. This is a superset of the faketouch feature. When declared as required, this indicates that the application is compatible with a device only if it supports touch emulation for events that supports distinct tracking of five or more fingers

android.hardware.touchscreen

The application uses touchscreen capabilities for gestures that are more interactive than basic touch events, such as a Fling. This is a superset of the basic faketouch feature. Note that if you add android:required="false" for the touchscreen feature, your APK will automatically show support Fire TV devices when you submit your app.

android.hardware.touchscreen.multitouch

The application uses basic two-point multitouch capabilities on the device screen, such as for pinch gestures, but does not need to track touches independently. This is a superset of touchscreen feature.
Note: This implicitly declares the android.hardware.touchscreen parent feature, unless declared with android:required="false".

android.hardware.touchscreen.multitouch.distinct

The application uses advanced multipoint multitouch capabilities on the device screen, such as for tracking two or more points fully independently. This is a superset of multitouch feature.
Note: This implicitly declares the android.hardware.touchscreen.multitouch parent feature, unless declared with android:required="false".

android.hardware.touchscreen.multitouch.jazzhand

The application uses advanced multipoint-multitouch capabilities on the device screen, for tracking up to five points fully independently. This is a superset of distinct multitouch feature.

USB

android.hardware.usb.host

The application uses USB host mode features (behaves as the host and connects to USB devices).

android.hardware.usb.accessory

The application uses USB accessory features (behaves as the USB device and connects to USB hosts).

WiFi

android.hardware.wifi

The application uses 802.11 networking (Wi-Fi) features on the device.

android.hardware.wifi.direct

The application uses the Wi-Fi Direct networking features on the device

OpenGL Version (<uses-feature>)

In the <uses-feature> element, the OpenGL version may be specified with the glEsVersion attribute.

<uses-feature> android:glEsVersion="<hexadecimalinteger>" />

Appstore will not apply the filter if the OpenGL version defined is below version 1.1 (written in the manifest as "0x00002101"). If multiple OpenGL versions are defined, Appstore will use the highest version for filtering.

OpenGL Texture (<supports-gl-texture>)

Each <supports-gl-texture> element declares an an individual texture compression format that is supported by the application. If your application supports multiple texture compression formats, you can declare multiple <supports-gl-texture> elements. Appstore will treat a device as compatible if at least one of the OpenGL textures defined in manifest is available on the device. Details for supported texture compression formats can be found on this page.

Support Screens (<supports-screens>)

This element is used to specify the screen sizes your application supports. if your application does not work well when resized to fit different screen sizes, you can use the attributes of <supports-screens> to control whether your application should be distributed to smaller screen devices or have its UI scaled up ("zoomed") to fit larger screens using screen compatibility mode. Appstore applies device filters as described in the Android spec which can be found on this page.

Attribute

Description

android:smallScreens

Indicates whether the application supports smaller screen form-factors. A small screen is defined as one with a smaller aspect ratio than the "normal" HVGA medium density screen. This is "true" by default.

android:normalScreens

Indicates whether the application supports the "normal" screen form-factors. This is typically an HVGA medium density screen. However, WQVGA low density and WVGA high density are also considered to be "normal" screen form-factors. This attribute is "true" by default.

android:largeScreens

Indicates whether the application supports larger screen form-factors. A large screen is defined as a screen that is significantly larger than a "normal" screen. The default value for this actually varies between some Android versions, so it's recommended that you explicitly declare this attribute.
Note: Setting <android.largeScreens> to "false" will generally enable screen compatibility mode.

android:xlargeScreens

Indicates whether the application supports extra large screen form-factors. An xlarge screen is defined as a screen that is significantly larger than a "large" screen, such as a tablet (or larger device). The default value for this actually varies between some Android versions, so it's recommended that you explicitly declare this attribute.
Note: Setting <android.xlargeScreens> to "false" will generally enable screen compatibility mode.

android:requiresSmallestWidthDp

Specifies the minimum smallestWidth required. The smallestWidth is the shortest dimension of the screen space (in dp units) that must be available to your application UI. This is the shortest of the available screen's two dimensions. So, in order for a device to be considered compatible with your application, the device's smallestWidth must be equal to or greater than this value. Usually, the value you supply for this is the "smallest width" that your layout supports, regardless of the screen's current orientation.

Compatible Screens (<compatible-screens>)

This element is used to specify a specific screen size-density combination with which the application is compatible. Only one instance of the <compatible-screens> element is allowed in the manifest. Appstore applies device filters as described in the Android spec which can be found on <supports-gl-texture>.

Warning: Using this element can dramatically reduce the number of devices available to your application i.e. Appstore will filter-out all devices with a screen configuration that you have not listed. You should use it only as a last resort, when the application absolutely does not work with specific screen size-density configurations.

If you want to set only a minimum screen size for your application, then you should use the <supports-screens> element. For example, if you want your application to be available only for large and xlarge screen devices, the <supports-screens> element allows you to declare that your application does not support small and normal screen sizes.

Attribute

Description

android:screenSize=["small" | "normal" | "large" | "xlarge"]

Required. Specifies the screen size for this screen configuration

android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi" | "480"]

Required. Specifies the screen density for this screen configuration
Note: 480 is mapped to xxhdpi by Appstore