安卓清单和设备筛选故障排除

安卓清单和设备筛选故障排除

亚马逊应用商店使用您的应用程序清单来确定应用程序与Fire设备的兼容性。当您在亚马逊应用商店中上传APK时,“二进制文件”选项卡突出显示清单与您所针对设备功能之间的不兼容情况。使用此处的故障排除信息更好地了解与设备支持相关的任何错误消息。

如果您计划更新APK,则必须修复清单中的兼容性问题以便维护当前的设备支持。如果不修复兼容性问题,您的应用程序在标记的设备上将不可用。

本文介绍了常见的不兼容消息和可能的解决方案。有关应用商店清单筛选的更多信息,请参阅以下主题:

另请参阅故障排除部分中有关上传APK的说明。

出现错误消息时

您通过“二进制文件”选项卡将APK上传到应用商店。如果您在“设备支持”部分中单击查看设备支持编辑设备支持链接,则会看到特定设备是否支持您的APK。如果不支持,您会看到设备旁边有个X,或者灰显该设备。您可以将鼠标悬停在信息工具提示上查看原因。示例如下:

设备支持 - 原因

在这种情况下,错误消息为android:minSdkVersion = '22'; device requires '15'。这意味着您的APK要求API级别至少为22,但设备最高只支持API级别15。因此,设备上无法安装/支持您的APK。

以下各节说明常见错误及其解决方案。

android.hardware.touchscreen

错误:android.hardware.touchscreen

除非另外明确定义,否则认为所有安卓APK支持触摸屏。此消息表明您的清单仅针对具有触摸屏的设备,因此与非触摸屏设备(例如Fire TV)不兼容。如果您希望应用程序可用于没有触摸屏的设备,则必须通过将以下元素添加到清单,明确声明无需触摸屏:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

android.hardware.location

错误:android.hardware.location

如果您的清单包括ACCESS_FINE_LOCATION的权限,则此功能向清单中增加了两个隐含功能:

android.hardware.location
android.hardware.location.gps

由于隐含功能是必需的,APK被视为与未提供这些特性的任何设备不兼容。为了允许这些设备,您需要在清单中明确包括隐含功能,将android:required属性设置为false

<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />

有关更多信息,请参阅隐含功能

android.hardware和android.software

错误:android.hardware._featureandroid.software._feature

这些消息指示您的清单包含<uses-feature><uses-permission>元素,用于目标设备不支持的功能。

如果您希望您的应用程序在出现此警告的设备上可用,请执行以下操作之一:

  • 如果您的APK实际上并不使用相关功能,请从清单中删除违规的<uses-feature><uses-permission>元素。
  • 如果您的APK使用相关功能,但并不严格要求使用这些功能(即您的应用测试了该能力,但如果不提供相关功能,则禁用这些功能),则添加或调整<uses-feature>元素,以便包含属性android:required="false"
  • 如果您的应用程序严格需要相关功能,以便安全地以该设备为目标,您应更改代码,使得应用程序在设备上适度地禁用功能,而不会禁用相关功能。在测试您的更改后,修改清单以在适当的<uses-feature>元素中添加android: required = false。有关检测功能的更多信息,请参阅安卓文档中的getSystemAvailableFeatures

android.minSdkVersion和android.maxSdkVersion

错误:android.minSdkVersion = "X";设备需要“Y”错误:android.maxSdkVersion = "X";设备需要“Y”

这些消息表明,在<uses-sdk>元素中指定的一系列安卓API级别不包括目标设备当前支持的安卓API级别(“Y”)。如果您打算以该设备为目标,请调整安卓API范围以包括相应的级别(“Y”)。有关各种亚马逊Fire设备的安卓和亚马逊API级别,请参阅平板电脑规格Fire TV规格

supports-screens

错误:supports-screens = "X";设备需要“size”(和/或“width”)

此消息表明,在<supported-screens>元素中定义的屏幕大小和/或最小宽度与设备支持的值之间没有任何重叠。应用商店会应用<compatible-screens>中所述的设备筛选器。要以该设备为目标,请按照“size”和“width”的说明增加对屏幕的支持,并相应地更新清单。

screenSize和screenDensity

错误:在清单中没有支持的screenDensity和screenSize配对;设备需要“size”和“density”

此消息表明,在<compatible-screens>元素中指定的<screen>元素与设备支持的元素之间没有任何重叠。应用商店会应用[<compatible-screens>](http://developer.android.com/guide/topics/manifest/supports-screens-element.html)中的安卓规范所述的设备筛选器。要以该设备为目标,请按照“size”和“density”的说明增加对屏幕的支持,并相应地更新清单。

android.glEsVersion

错误:android.glEsVersion = "X";设备需要“Y”

此消息表明,您的APK指定了目标设备不支持的OpenGL ES版本。要以此设备为目标,请查阅用于正确OpenGL ES版本的适当参考文档,并相应地更新清单。

supports-gl-texture

错误:清单中没有支持的supports-gl-texture格式

此消息表明,在清单中指定的OpenGL纹理压缩格式与目标设备支持的格式之间没有重叠。可以在<supports-gl-texture>中找到支持的纹理压缩格式的详细信息。要以该设备为目标,请添加对兼容纹理格式的支持,然后相应地更新清单。此外,检查清单中OpenGL纹理格式的大小写和拼写与设备规范是否相符。