96

我很犹豫要不要问这个问题,因为看起来很多人都有类似的问题,但我没有找到解决我的特定实例的解决方案。

我开发了一个 Android 应用程序(链接到实际应用程序)并将其上传到 Play 商店。Play商店说

"This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."

当然那是我开发应用程序的手机,所以它应该是兼容的。其他设备有人说兼容,也有人说不兼容,但我找不到趋势。(显然我不认识很多使用 Android 设备的人。)

我尝试了以下方法:

  • 按照这个答案res/raw的建议,将一个大文件移出目录。里面唯一的文件是一个约 700 kB 的文本文件,但我把它移到了那里,没有明显的变化。assets/

  • 添加以下两个功能断言:

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

    认为也许我的手机没有声称支持通常的android.hardware.touchscreen功能,但同样没有明显的变化。

将 APK 上传到 Play 商店时,它报告为活动的唯一过滤器是该android.hardware.faketouch功能。

以下是 的输出aapt dump badging bin/NZSLDict-release.apk

package: name='com.hewgill.android.nzsldict' versionCode='3' versionName='1.0.2'
sdkVersion:'4'
targetSdkVersion:'4'
uses-feature:'android.hardware.faketouch'
uses-feature-not-required:'android.hardware.touchscreen'
application-label:'NZSL Dictionary'
application-icon-160:'res/drawable/icon.png'
application: label='NZSL Dictionary' icon='res/drawable/icon.png'
launchable-activity: name='com.hewgill.android.nzsldict.NZSLDictionary'  label='NZSL Dictionary' icon=''
main
other-activities
supports-screens: 'small' 'normal' 'large'
supports-any-density: 'true'
locales: '--_--'
densities: '160'

为了完整起见,我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.hewgill.android.nzsldict"
      android:versionCode="3"
      android:versionName="1.0.2">
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
    <uses-feature android:name="android.hardware.faketouch" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
    <application android:label="@string/app_name"
        android:icon="@drawable/icon">
        <activity android:name="NZSLDictionary"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".WordActivity" />
        <activity android:name=".VideoActivity" />
        <activity android:name=".AboutActivity" />
    </application>
</manifest> 

在 Play 商店的“设备可用性”部分,我可以看到除了“G1 (trout)”和“Touch Viva (opal)”之外的所有 HTC 设备,包括 Wildfire S,都受支持,无论它们是什么。实际上我看到“Wildfire S (marvel)”和“Wildfire S A515c (marvelc)”都被列为支持,但我的“Wildfire S A510b”没有特别提及。这种子模型标识符有那么重要吗?我已经能够毫无问题地将其他几个应用程序从 Google Play 下载到我的手机上。

在这一点上我唯一没有做的就是在上传最新版本后等待 4-6 小时(如此评论),看看它是否仍然说它与我的手机不兼容。但是,Play 商店页面当前显示的是 1.0.2,这是我上传的最新版本。

4

15 回答 15

86

答案似乎仅与应用程序大小有关。我创建了一个简单的“hello world”应用程序,在清单文件中没有什么特别之处,将其上传到 Play 商店,据报告它与我的设备兼容。

除了在目录中添加更多内容之外,我在此应用程序中没有进行任何更改res/drawable。当.apk大小达到大约 32 MB 时,Play 商店开始报告我的应用与我的手机不兼容。

我将尝试联系 Google 开发人员支持并要求澄清此限制的原因。

更新:这是谷歌开发者支持对此的回应:

谢谢你的注意。目前,上传到 Google Play 的应用程序的最大文件大小限制约为 50 MB。

但是,某些设备的缓存分区可能小于 50 MB,导致用户无法下载该应用程序。例如,某些 HTC Wildfire 设备以拥有 35-40 MB 的缓存分区而闻名。如果 Google Play 能够识别没有足够大的缓存来存储应用程序的此类设备,它可能会过滤掉它,使其不显示给用户。

我最终通过将所有 PNG 文件转换为 JPG 来解决我的问题,质量损失很小。该.apk文件现在为 28 MB,低于 Google Play 对我的手机实施的任何阈值。

我还删除了所有的<uses-feature>东西,现在只有这个:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
于 2012-05-09T22:05:43.760 回答
17

我也遇到了这个问题 - 我在 Lenovo IdeaTab A2107A-F 上进行了所有开发,并且可以在其上运行开发构建,甚至可以毫无问题地发布签名的 APK(随 安装adb install)。一旦它以 Alpha 测试模式发布并在 Google Play 上可用,我收到“与您的设备不兼容”错误消息。

事实证明,我AndroidManifest.xml从教程中放入了以下内容:

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />

好吧,联想 IdeaTab A2107A-F 上没有自动对焦摄像头(我从http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611了解到,在缺点:缺少自动对焦摄像头下)。无论我是否使用该功能,Google Play 都拒绝了。删除后,我重建了我的 APK,将其上传到 Google Play,果然我的 IdeaTab 现在在兼容设备列表中。

因此,请仔细检查每一个<uses-feature>,如果您一直在从网络上进行一些复制粘贴,请再次检查。很可能您请求了一些您甚至没有使用的功能。

于 2013-11-12T01:50:17.513 回答
12

在为希望从他们的应用程序中获得离线视频的客户开发应用程序时,我也遇到了这个问题。我写了一篇博文,说明为什么我工作了几个月的应用程序不会出现在我设备的 Play 商店中(可以在此处找到帖子)。我发现与@Greg Hewgill 发现的相同:某些设备上的缓存分区限制

我的旅程并没有在那里停止。客户希望在应用程序中包含这些视频,并且不希望降低视频质量。经过一番研究,我发现使用扩展文件是我们问题的完美解决方案。

为了与 Android 社​​区分享我的知识,我在droidconNL 2012上举办了一场关于扩展文件的演讲。我创建了一个演示文稿和示例代码来说明开始使用扩展文件是多么容易。对于任何想要使用扩展文件来解决此问题的人,请随时查看包含演示文稿和示例代码的帖子

于 2012-11-27T17:21:45.563 回答
8

您可能想尝试设置 supports-screens 属性:

<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" >
</supports-screens>

Wildfire 的屏幕很小,根据文档,该属性在所有情况下都应默认为“true”,但不同手机上的 support-screens 设置存在已知问题,所以我还是会尝试一下。

此外——正如 David 所建议的——总是针对最新版本的 Android API 进行编译和定位,除非你有充分的理由不这样做。几乎每个 2.2 之前的 SDK 都有一些严重的问题或奇怪的行为;后一个 SDK 有助于解决或掩盖其中的很多(尽管不是全部)。在准备发布时,您可以(并且应该)使用 Lint 工具检查您的应用程序是否与 API 4 保持兼容。

于 2012-05-08T12:03:55.360 回答
7

Finlay,我在我的申请中遇到了同样的问题。我开发了 Phone Gap 应用程序, android:minSdkVersion="7" & android:targetSdkVersion="18"它是最新版本的 android 平台。

我使用Google Docs发现了这个问题

可能的问题是我编写了一些 JS 函数,该函数KEY-CODE仅用于验证字母和数字,但键盘具有不同的键码,专门用于计算机键盘和移动键盘。所以这是我的问题。

我不确定我的答案是否正确,可能对上面的答案更满意,但我会尝试列出一些在我们构建应用程序时应该注意的点。我希望你能按照这个来解决此类问题。

  • android:minSdkVersion="?"根据您的要求使用,并且android:targetSdkVersion="?"应该是您的应用程序将定位的最新版本。看更多

  • 尝试仅添加将在您的应用程序中使用的权限,并删除所有不必要的权限。

  • 按应用查看支持的屏幕

    <supports-screens 
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true"
    android:xlargeScreens="true"/>
    
  • 可能是您实现了一些无法在某些设备或选项卡中运行的服装代码或服装小部件,因此在编写长代码之前首先尝试编写一些 beta 代码并测试您的代码是否可以在所有设备上运行.

  • 我希望谷歌会发布一个工具,可以在上传应用程序之前验证您的代码,并且还说由于某些特定原因我们不允许在某些设备上运行您的应用程序,因此我们可以轻松解决它。

于 2013-10-25T07:23:52.877 回答
7

暗示功能要求的权限

例如,android.hardware.bluetooth 特性是在 Android 2.2(API 级别 8)中添加的,但它所指的蓝牙 API 是在 Android 2.0(API 级别 5)中添加的。因此,一些应用程序在能够通过系统声明它们需要 API 之前就能够使用 API。

为了防止这些应用程序无意中可用,Google Play 假定某些与硬件相关的权限表明默认情况下需要底层硬件功能。例如,使用蓝牙的应用程序必须在一个元素中请求 BLUETOOTH 权限——对于旧版应用程序,Google Play 假定权限声明意味着应用程序需要底层的 android.hardware.bluetooth 功能并基于该功能设置过滤.

下表列出了暗示与元素中声明的功能要求等效的权限。请注意,声明(包括任何声明的 android:required 属性)始终优先于以下权限所隐含的功能。

对于以下任何权限,您可以通过在元素中显式声明隐含特征并使用 android:required="false" 属性来禁用基于隐含特征的过滤。例如,要禁用任何基于 CAMERA 权限的过滤,您可以将此声明添加到清单文件中:

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


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

http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions

于 2015-11-03T13:49:46.943 回答
6

我有几个建议:

  1. 首先,您似乎使用 API 4 作为目标。AFAIK,始终针对最新的 SDK 进行编译并进行相应设置是一种很好的做法android:minSdkVersion

  2. 考虑到这一点,请记住API 5 中添加了android:required该属性:

功能声明可以包含一个android:required=["true" | "false"]属性(如果您针对 API 级别 5 或更高级别进行编译),它允许您指定应用程序(...)

因此,我建议您针对 SDK 15 进行编译,并将其设置targetSdkVersion为 15,并提供该功能。

它还在 Play 网站上显示为与我拥有的任何设备不兼容(巧合?)姜饼此处为 Galaxy Ace 和 Galaxy Y)。但它显示我的 Galaxy Tab 10.1 ( Honeycomb )、Nexus S 和 Galaxy Nexus (都在ICS上)兼容。

这也让我感到疑惑,这是一个非常疯狂的猜测,但既然android.hardware.faketouch 是 API11+,为什么不尝试删除它来看看它是否有效?或者也许这一切都是相关的,因为您正在尝试使用API 4 中不可用faketouch的特性 ( ) 和属性。在这种情况下,您应该针对最新的 API 进行编译。required

我会先尝试,并且faketouch仅作为最后的手段(当然)删除要求 --- 因为它在开发时有效,我想说这只是编译的应用程序无法识别该功能的问题(由于 SDK 要求) ,从而在 Play 上留下意想不到的过滤问题。

抱歉,如果这个猜测不能回答您的问题,但是在没有实际测试的情况下很难诊断出这类问题并确定解决方案。或者至少对我来说,没有完全了解 Play 如何真正过滤应用程序的知识。

祝你好运。

于 2012-05-07T03:41:33.077 回答
6

要为上述“此应用程序与您的...不兼容”问题提供额外的解决方案,让我分享我针对不同问题原因的解决方案。我尝试在低端三星 Galaxy Y (GT-S6350) 设备上安装应用程序并从 Play 商店收到此错误。为了测试各种 AndroidManifest 配置,我创建了一个帐户并按照https://stackoverflow.com/a/5449397/372838中所述的例程进行操作,直到我的设备出现在支持的设备列表中。

事实证明,当您使用相机权限时,很多设备变得不兼容:

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

当我删除该特定权限时,该应用程序可用于 1180 台设备而不是 870 台。希望它可以帮助某人

于 2012-06-28T11:29:14.460 回答
3

典型的,绝望地发布这个问题后发现它;我正在寻找的工具是:

$ aapt dump badging <my_apk.apk>
于 2013-04-22T11:29:01.347 回答
3

尽管已经有很多答案,但我认为我的答案可能会帮助一些与我有完全相同问题的人。就我而言,问题是由根据广告网络的建议添加的以下权限引起的:

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

上述权限的结果是自动添加了以下功能:

android.hardware.LOCATION
android.hardware.location.GPS
android.hardware.location.NETWORK

原因是“Google Play 试图通过检查清单文件中声明的其他元素,特别是元素来发现应用程序的隐含功能要求。” 我的两个测试设备不具备上述功能,因此应用程序与它们不兼容。删除这些权限立即解决了问题。

于 2015-02-26T14:13:30.543 回答
2

我发现了另一种出现此问题的方法:
我的 LG 手机的原始操作系统是 Froyo (Android 2.2),并已更新为 ICS (Android 4.0.4)。但是 Google Play 开发者控制台显示它检测到我的手机是 Froyo 设备。(由于虚假的“不兼容”,Google Play 不允许下载该应用程序,但它仍以某种方式检测到安装。)

手机的“软件”设置显示 ICS V4.0.4。手机的 Google Play 服务器信息似乎没有更新以反映设备上的 ICS 更新。应用清单 minSDK 设置为 Honeycomb (3.0),因此 Google Play 当然会过滤掉该应用。

另外有趣的是:
该应用程序使用应用内计费 V3。第一次通过 IabHelper 允许应用通过 Google Play 服务进行购买。但是在购买之后,购买不会放入库存中,并且 IabHelper 报告没有拥有任何物品。即使 Google Play 窗口显示“购买成功”,调试消息也会显示购买结果为“购买失败”。

于 2013-07-17T13:53:55.147 回答
0

我有同样的问题。这是由于我的清单和 gradle 构建脚本中有不同的版本代码和数字造成的。我通过从清单中删除版本代码和版本号并让 gradle 处理它来解决它。

于 2014-06-16T18:46:42.953 回答
0

我也有同样的问题。我发布了一个使用 React Native 59 创建的处于测试模式的应用程序。它与某些测​​试人员不兼容。在我发现我将应用程序限制为仅适用于某些国家/地区之后,该消息不清楚为什么该应用程序不兼容。这就是问题所在,但正如我所说,信息并不清楚。在 Play Store WebApp 中,消息是:“此应用与您的设备不兼容”。在移动应用程序中显示消息“此应用程序在您的国家/地区不可用”

于 2019-12-03T13:10:02.600 回答
0

如果您在 2020 年来到这里,并且您认为收到错误消息的设备应该是兼容的:

其他几个主要应用程序也遇到了这种情况,包括 Instagram(1B+ 安装)和 Clash of Clans(100M+ 安装)。这似乎是 Google 的 Android 操作系统的问题。

要修复“您的设备与此版本不兼容”错误消息,请尝试清除 Google Play 商店缓存,然后清除数据。接下来,重新启动 Google Play 商店并尝试再次安装该应用程序。

[ https://support.getupside.com/hc/en-us/articles/226667067--Device-not-compatible-error-message-in-Google-Play-Store]

以下是 Google 官方支持页面的链接,您可以链接到您的用户了解如何清除缓存: https: //support.google.com/googleplay/answer/7513003

于 2020-06-11T14:10:01.523 回答
0

在 Android 中,某些权限<uses-permission>意味着<uses-feature>对应用程序的要求。

例如<uses-permission android:name="android.permission.BLUETOOTH" />
将暗示<uses-feature android:name="android.hardware.bluetooth"/>

您可以在此处查看整个列表https://developer.android.com/guide/topics/manifest/uses-feature-element#permissions

于 2020-12-09T16:12:14.300 回答