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>)
- Hardware permissions (<uses-permission>)
- Hardware and software features (<uses-feature>)
- OpenGL version (<uses-feature>)
- OpenGL texture (<supports-gl-texture>)
- Support screens (<supports-screens>)
- Compatible screens (<compatible-screens>)
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