为什么Google Play商店说我的Android应用与我自己的设备不兼容?

时间:2012-05-07 02:18:51

标签: android google-play

我对提出这个问题犹豫不决,因为它似乎many people have a similar problem,但我找不到解决我特定实例的解决方案。

我开发了一款Android应用(link to the actual app)并将其上传到Play商店。 Play商店说

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

当然这是我开发应用程序的手机,所以它应该兼容。有些人用其他设备说它报告兼容,有些人说它报告不兼容,但我发现没有趋势。 (显然我不太了解Android设备的人。)

我尝试了以下内容:

  • this answer的建议将大型文件移出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(鳟鱼)”和“Touch Viva(蛋白石)”之外,所有HTC设备,包括Wildfire S,都不受支持是。实际上我看到“Wildfire S(奇迹)”和“Wildfire S A515c(marvelc)”都被列为支持,但我的“Wildfire S A510b”没有特别提及。这种子模型标识符可以这么重要吗?我已经能够将几个其他应用程序从Google Play下载到我的手机上,没有任何问题。

此时我尚未完成的唯一事情是在上传最新版本后(如this comment)等待4-6小时,看它是否仍然说它与之不相容我的手机。但是,Play商店页面当前显示1.0.2,这是我上传的最新内容。

15 个答案:

答案 0 :(得分:82)

答案似乎只与申请人数量有关。我创建了一个简单的“hello world”应用程序,清单文件中没有任何特殊内容,将其上传到Play商店,并且报告它与我的设备兼容。

我在此应用中没有更改任何内容,只是在res/drawable目录中添加了更多内容。当.apk尺寸达到约32 MB时,Play商店会开始报告我的应用与我的手机不兼容。

我将尝试与Google开发者支持小组联系,并要求澄清此限制的原因。

更新:以下是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" />

答案 1 :(得分:14)

我也遇到了这个问题 - 我在联想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>,如果您再次从网络上进行了一些复制粘贴检查。很遗憾你要求使用一些你甚至不使用的功能。

答案 2 :(得分:10)

在为希望通过应用程序提供离线视频的客户开发应用程序时,我也遇到过这个问题。我写了一篇博客文章,说明为什么我工作了几个月的应用程序不会出现在我的设备的游戏商店中(post can be found here)。我发现@Greg Hewgill发现的相同:某些设备上的缓存分区限制

那里的旅程并不止于我。客户希望在应用程序中包含这些视频,并且不希望降低视频的质量。经过一些研究,我发现using expansion files是我们问题的完美解决方案。

为了与Android社区分享我的知识,我在droidconNL 2012就扩展文件进行了一次演讲。我创建了一个演示文稿和示例代码,以说明开始使用扩展文件是多么容易。对于那些希望使用扩展文件解决此问题的人,请随时查看the post containing the presentation and the sample code

答案 3 :(得分:7)

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

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

Wildfire有一个小屏幕,根据文档,这个属性在所有情况下都应该默认为“true”,但是不同手机上的支持屏幕设置存在已知问题,所以无论如何我都会尝试这个。 / p>

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

答案 4 :(得分:7)

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

我使用Google Docs

找到了问题

可能有问题的是我已经写了一些JS函数,它可以在KEY-CODE上运行,只验证字母和字母。数字键盘有不同的键码特别适用于电脑键盘和键盘。移动键盘。这就是我的问题。

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

  • 根据您的要求使用android:minSdkVersion="?"&amp; android:targetSdkVersion="?"应该是您的应用定位的最新版本。 see more

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

  • 按应用程序检查支持的屏幕

    <supports-screens 
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true"
    android:xlargeScreens="true"/>
    
  • 可能你已经实现了一些无法在某些设备或标签中运行的服装代码或服装小部件,因此在编写长代码之前首先尝试编写一些测试代码并测试它是否代码将是否在所有设备中运行。

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

答案 5 :(得分:6)

我有几点建议:

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

  2. 考虑到这一点,请记住android:required属性was added in API 5

  3.   

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

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

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

    这也让我感到疑惑,这是非常疯狂的猜测,但是自android.hardware.faketouch is API11+以来,为什么不尝试删除它只是为了看如果有效吗?或者也许这些都是相关的,因为您尝试使用API​​ 4中没有的功能(faketouch)和required属性。在这种情况下,您应该编译最新的API。

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

    很抱歉,如果这个猜测没有回答你的问题,但是很难诊断出这些问题并在没有实际测试的情况下查明解决方案。或者至少对我来说,没有关于Play如何真正过滤应用程序的所有知识。

    祝你好运。

答案 6 :(得分:6)

隐含功能要求的权限

例如,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 =&#34; false&#34;来禁用基于隐含功能的过滤。属性。例如,要禁用基于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

答案 7 :(得分:5)

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

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

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

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

答案 8 :(得分:3)

典型,在绝望中发布此问题后立即找到;我正在寻找的工具是:

$ aapt dump badging <my_apk.apk>

答案 9 :(得分: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尝试通过检查清单文件中声明的其他元素(特别是元素)来发现应用程序隐含的功能要求。” 我的两个测试设备没有上述功能,因此应用程序与它们不兼容。删除这些权限可以立即解决问题。

答案 10 :(得分: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窗口宣布“购买成功”,调试消息也会显示购买的“购买失败”结果。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我也有同样的问题。我发布了使用React Native 59创建的处于测试模式的应用程序。它与某些测​​试仪不兼容。 在我弄清楚我限制了该应用程序仅在某些国家/地区可用之后,尚不清楚该应用程序为何不兼容的消息。那就是问题所在,但是正如我所说的那样,消息还不清楚。 在Play商店WebApp中,消息为:“此应用与您的设备不兼容”。 在移动应用中,显示消息“此应用在您所在的国家/地区不可用”

答案 13 :(得分:0)

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

其他一些主要应用程序也遇到了这种情况,其中包括Instagram(1B +安装)和《部落冲突》(1亿+安装)。这似乎与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

答案 14 :(得分: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

上查看整个列表