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 Targeting Amazon Fire Devices with Your Android Manifest.

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

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 here. 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 means that 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. A full list of permissions that cause implied features is provided here.

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. 

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.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"
`android.camera.external` The application uses an external camera device if one is connected.
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".
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”. 
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.
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="<hexadecimal integer>" />

Appstore will not apply the filter if the OpenGL version defined is below version 1.1 (written in the manifest as “0x00010001”). 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

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 this page.

If you want to set only a minimum screen size for your 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