Developer Console

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.

For more information about Android API levels, including minimum API level requirements, see Device Filtering and Compatibility.

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 (this is known as implicit permission or implied permission).

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:required set to false will override the implied requirement for a GPS.

A full list of permissions that cause implied features is provided in Permissions that Imply Feature Requirements.

Category Hardware Permission Description
Bluetooth android.permission.BLUETOOTH Allows applications to connect to paired Bluetooth devices.
Camera android.permission.CAMERA Required to be able to access the camera device.
Location android.permission.ALLOW_MOCK_LOCATION 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.
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS Allows an application to access extra location provider commands 
android.permission.INSTALL_LOCATION_PROVIDER Allows an application to install a location provider into the Location Manager.
android.permission.ACCESS_COARSE_LOCATION Allows an app to access approximate location. 
android.permission.ACCESS_FINE_LOCATION Allows an app to access precise location. 
Microphone android.permission.RECORD_AUDIO Allows an application to record audio. 
Wi-Fi android.permission.ACCESS_WIFI_STATE Allows an application to access information about Wi-Fi networks. 
android.permission.CHANGE_WIFI_STATE Allows an application to change Wi-Fi connectivity state. 
android.permission.CHANGE_WIFI_MULTICAST_STATE Allows applications to change Wi-Fi Multicast state.

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 (known as implicit permission or implied permission). To override these permissions, add a <uses-feature> element for each subfeature, with required set to false.

For example, if your manifest contains the following entry:

<uses-permission android:name="android.permission.CAMERA" />

you should also add the following two entries:

<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
Category Feature Description
Audio android.hardware.audio.low_latency 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 services on the device and should be installed only on devices that support SIP.
android.software.sip.voip Subfeature. The application uses SIP-based VOIP services 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 This indicates that the application is compatible with a device only if it offers an emulated touchscreen ("fake touch" interface). When not defined by any manifest, this feature is assumed/implied as required by default. If you do not want your application available to devices with an emulated touchscreen, you must declare it with android:required="false". Note: If you want your application to be available to devices with touchscreens, you must declare that a touchscreen is required using android.hardware.touchscreen.
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. 
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 Set this element to required if the application uses touchscreen capabilities for gestures that are more interactive than basic touch events, such as a Fling. Note: this feature is not assumed/implied by default. This is a superset of the basic faketouch feature. By default, your binary file will automatically show supported Fire TV devices when after you upload your app file and target 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 the 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 independently. This is a superset of the 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 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 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="<hexadecimal integer>" />

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 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 the 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 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>.

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. 

Last updated: Oct 02, 2023