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


91

我很犹豫地问这个问题,因为似乎很多人都遇到了类似的问题,但是我没有找到能够解决我的特定情况的解决方案。

我开发了一个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(鳟鱼)”和“ Touch Viva(蛋白石)”之外的所有HTC设备(包括Wildfire S)均受支持。实际上,我看到“ Wildfire S(奇迹)”和“ Wildfire S A515c(奇迹)”都被列为受支持,但我的“ Wildfire S A510b”并未特别提及。这样的子模型标识符可以这么重要吗?我已经可以从Google Play将其他几个应用程序下载到我的手机中,而没有任何问题。

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


帮我解决许多与电话相关的问题的方法是设置ACRA:code.google.com/p/acra我在应用程序的首次启动时运行它以提取电话的完整规格,并使用该handleSilentException方法进行静默报告。它至少会告诉您应用程序在使用哪种硬件。
加文·米勒

2
@GavinMiller:谢谢,但是我不确定在Play商店拒绝交付该应用程序时是否有帮助。
格雷格·休吉尔

也许我误解了您的评论:“有些使用其他设备的人说它报告兼容,而其他人则说它报告不兼容,但是我找不到趋势。” 如果您不认识的许多人可以下载并安装该应用程序,则可以收集更多的硬件数据以尝试形成趋势。因此缓解了“我对使用Android设备的人了解不多”。问题。
加文·米勒

@GavinMiller:但是,这只会告诉我Google Play认为可以在哪些设备上安装,而不会提供有关Google Play认为不能在哪些设备上安装的信息。此外,即使确定地知道哪些设备可以使用,哪些设备不能使用,也不会真正帮助我解决这个问题。
格雷格(Greg Hewgill)

检查此解决方案对我是否
有用

Answers:


84

答案似乎仅与应用程序大小有关。我创建了一个简单的“ 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,低于任何门槛谷歌Play是执行我的电话。

我还删除了所有<uses-feature>内容,现在有了:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

非常有趣和有价值的信息。如此烦人,以至于没有任何地方对此进行记录。
Michael A.

2
确实,如果我没有碰巧拥有Wildfire手机,我什至不会知道这个问题。
格雷格·休吉尔

我有3个游戏:32MB,35MB和44MB。我自己的HTC bravo看到了前两场比赛,而没有看到商店中的第三场比赛。我朋友的HTC愿望S只看到第一场比赛。因此,显然游戏的大小应小于33MB左右,才能对大多数(?)设备可见。不幸的是,我看到这个答复太晚了,几个月后才知道该问题。我确定这取决于设备的处理器类型,支持的OpenGL版本,清单中的限制或其他内容。感叹..
iseeall 2013年

7
Google并未在Play商店中列出不兼容的原因,这真是太疯狂了。我一直以为至少应用程序开发人员会收到此信息,并且会自觉选择不支持我的设备。如此长时间的情况如何保持下去?
格里

1
@GregHewgill你好,格雷格。我已就类似问题与Google支持人员联系。由于我的应用程序大小只有5 MB,我在寻找不同的选择,为什么Google Play会在特定设备上过滤我的应用程序。自从我联系他们以来已经72个小时了,他们没有再提供任何解释。除了普通的“联系我们”以外,我还有什么方法可以联系Google支持?
hemanth kumar

15

我也遇到了这个问题-我在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" />

好吧,Lenovo IdeaTab A2107A-F上没有自动对焦相机(我从http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611获悉,缺点:缺少自动对焦相机)。无论我是否在使用该功能,Google Play都不会。删除该文件后,我重新构建了APK,并将其上传到Google Play,并确定我的IdeaTab现在已经在兼容设备列表中。

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


3
谢谢 !我使用的是另一个<uses-feature>:<uses-feature android:name =“ android.hardware.camera2” />因此,我拥有了零兼容的设备。我删除了行,现在有10000
杰克

您可以将其设置为仍然使用它,但不要求使用它:<uses-feature android:name =“ android.hardware.camera.autofocus” android:required =“ false” />
DrChandra

<uses-feature android:name =“ android.hardware.camera2” />使我的应用程序不兼容,因此我无法在Playstore上找到该应用程序。拯救我的生命
Anand Savjani

11

在为希望从其应用程序中脱机提供视频的客户开发应用程序时,我也遇到了这个问题。我写了一篇博客文章,说明为什么我使用了几个月的应用无法在我的设备的Play商店中显示(帖子可以在此处找到)。我发现与@Greg Hewgill相同:在某些设备上的缓存分区限制

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

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


4
您的帖子中提到的Google支持链接现已过期,新链接为support.google.com/googleplay/android-developer/answer/…。希望您使用最新的链接和顺便说一句,不错的帖子来更新文章!!
Rohan Kandwal'Mar

7

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

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

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

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


谢谢,我在等待Google开发人员支持对我最新的支持请求的答复。我会在收到他们的回复后尝试此操作(我不想通过上传另一个APK来混淆他们)。会让您知道结果如何。
格雷格·休吉尔

希望您不必等待太久。他们没有迅速反应的声誉。:-)
Michael A.

我已经和他们来回了几次,但是我最新的问题却因为22小时的回答而无法回答。必须等待很令人沮丧,但这至少不是关键任务。
格雷格·休吉尔

只是想让您知道我找到了问题,请参阅我对这个问题的回答。谢谢你的帮助。
Greg Hewgill'5

7

Finlay,我在应用程序中遇到了同样的问题。我已经开发android:minSdkVersion="7" & android:targetSdkVersion="18"了Android Gap的最新版本的Phone Gap应用 。

我已经使用Google文档找到了问题

可能的问题是,我编写了一些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代码并测试其代码是否可在所有设备上运行。

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


6

我有几点建议:

  1. 首先,您似乎正在使用API​​ 4作为目标。AFAIK,最好始终根据最新的SDK进行编译并进行相应设置android:minSdkVersion

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

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

因此,我建议您根据SDK 15(也设置targetSdkVersion为15)进行编译,并提供该功能。

它还在Play网站上显示与我所拥有的任何设备(巧合)(姜饼 Ace和Galaxy Y)不兼容。但是它显示出与我的Galaxy Tab 10.1(Honeycomb),Nexus S和Galaxy Nexus(均在ICS上兼容

这也让我感到疑惑,这是一个非常疯狂的猜测,但是既然android.hardware.faketouch 是API11 +,为什么不尝试只是为了查看它是否起作用就尝试删除它呢?或许无论如何这都与之相关,因为您正尝试使用API 4中不可用的功能(faketouch)和required属性。在这种情况下,您应该针对最新的API进行编译。

我将首先尝试该方法,并且faketouch仅在最后一种情况下才删除该需求-当然,因为它在开发时可以工作,所以我说这只是编译的应用无法识别该功能的问题(由于SDK要求) ,从而在Play上留下了意外的过滤问题。

抱歉,如果这个猜测不能回答您的问题,但是很难在没有实际测试的情况下诊断出此类问题并找出解决方案。或至少对我而言,没有关于Play如何真正过滤应用程序的所有适当知识。

祝好运。


谢谢,这给了我一些具体的想法。最初我根本没有任何<uses-feature>标签,这是为了使其与更多设备兼容,而不是与更少设备兼容。我将尝试更改SDK版本标签,这似乎是最可能的方法。我应该补充一点,minSdkVersion="4"因为该版本不再隐含我的应用不需要的某些权限(读取手机状态,修改SD卡)。
格雷格·休吉尔

将SDK版本更改为android:minSdkVersion="5" android:targetSdkVersion="15"无济于事。我已与Google Play开发者支持小组联系,希望他们能告诉我原因。如果在Play应用程序页面上显示了过滤原因,那肯定会很好。
格雷格·休吉尔

是啊,那样最好了。同时,您尝试设置faketouchrequired= false吗?
davidcesarino 2012年

最新的版本会删除所有<uses-feature>标签,因为Google支持人员告诉我该功能不适用于我的设备的原因android.hardware.faketouch。这似乎很荒谬,尤其是因为我以前的版本之一也没有<uses-feature>标签,但是没有标签。我正在等待他们的回应,但我不想通过上传另一个版本来混淆他们。如果有一种方法可以进行测试,而不必重复上传和发布新的APK,那就太好了。
格雷格·休吉尔

我不会说荒谬,因为这是在更高版本的sdk版本(api 11)上添加的标志,因此,为什么我建议针对api15进行编译和定位(记住要更改project.properties,而不仅仅是更改)。我仍然很惊讶地按要求设置它,但是false无效。
davidcesarino'5

6

暗示功能要求的权限

例如,在Android 2.2(API级别8)中添加了android.hardware.bluetooth功能,但在Android 2.0(API级别5)中添加了它所引用的蓝牙API。因此,某些应用程序能够在通过系统声明需要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


谢谢!我不知道默认情况下必须使用该功能的使用权限。
Jim Pekarek '17

5

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

原来,当您使用“相机”权限时,许多设备不兼容:

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

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


7
也许可以这样做:<uses-permission android:name =“ android.permission.CAMERA” /> <uses-feature android:name =“ android.hardware.camera” android:required =“ false” />
user1205415,


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


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窗口宣布“购买成功”,调试消息也会显示购买结果为“购买失败”。


0

我有同样的问题。这是由于清单和gradle构建脚本中的版本代码和编号不同而引起的。我通过从清单中删除版本代码和版本号并让gradle对其进行处理来解决该问题。


0

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


0

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

其他一些主要应用程序也遇到了这种情况,包括Instagram(1B +安装)和《部落冲突》(1亿+安装)。这似乎与Google的Android操作系统有关。

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.