ChatGPT解决这个技术问题 Extra ChatGPT

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

我犹豫要不要问这个问题,因为它看起来好像 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 设备的人。)

我尝试了以下方法:

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

添加以下两个功能断言: 认为也许我的手机没有声称支持通常的 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 下载到我的手机上。

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

帮助我解决手机相关问题的方法是设置 ACRA:code.google.com/p/acra 我在应用程序第一次启动时运行它以获取手机的完整规格,并使用 handleSilentException 方法静默报告。它至少会告诉您该应用程序正在使用哪些硬件。
@GavinMiller:谢谢,但我不确定当 Play 商店完全拒绝交付应用程序时这是否会有所帮助。
可能我误解了你的评论:“其他设备有人说它报告兼容,其他人说它报告不兼容,但我找不到趋势。”如果很多不认识的人都可以下载安装应用,你可以收集更大的硬件数据池来尝试形成趋势。从而缓解“我不认识很多人使用Android设备”。问题。
@GavinMiller:但是,这只会告诉我 Google Play 认为可以安装在哪些设备上,而不会提供有关 Google Play 认为不能安装在哪些设备上的信息。此外,即使确定哪些设备正常,哪些不正常,也不能真正帮助我解决这个问题。
检查这个解决方案它对我有用stackoverflow.com/a/14020303/3392323

C
Community

答案似乎仅与应用程序大小有关。我创建了一个简单的“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" />

非常有趣和有价值的信息。太烦人了,这在任何地方都没有记录。
事实上,如果我没有碰巧有一部 Wildfire 手机,我什至都不会知道这个问题。
我有 3 款游戏:大小分别为 32MB、35MB 和 44MB。我自己的 HTC bravo 看到了前两场比赛,但在商店里没有看到第三场比赛。我朋友的HTC渴望S只看到第一场比赛。因此,显然游戏的大小应该低于 33MB 左右,才能对大多数(?)设备可见。不幸的是,我看到这个回复太晚了,几个月来都不知道这个问题......我确定这取决于设备的处理器类型、支持的 OpenGL 版本、清单中设置的限制或其他东西。叹..
谷歌没有在 Play 商店中列出不兼容的原因真是太疯狂了。我一直认为至少应用程序开发人员会收到这些信息,并且会有意识地选择不支持我的设备。这种情况怎么会持续这么久?
@GregHewgill 你好,格雷格。我已经就类似的问题联系了谷歌支持。由于我的应用程序大小只有 5 MB,我正在研究为什么 Google Play 在特定设备上过滤我的应用程序的不同选项。自从我联系他们以来已经 72 小时了,他们没有回来提供任何解释。除了正常的联系我们之外,我还有什么方法可以联系 Google 支持吗?
J
Joe

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


谢谢 !我正在使用另一个 正因为如此,我有零兼容设备。我删除了这条线,现在有 10000 条。
您可以将其设置为仍然使用它,但不需要它:
使我的应用程序不兼容,因此我无法在 Playstore 上找到该应用程序。拯救我的生命
D
Dan Henderson

在为希望从他们的应用程序中获得离线视频的客户开发应用程序时,我也遇到了这个问题。我写了一篇博文,说明为什么我开发了几个月的应用程序没有出现在我的设备 (post can be found here) 的 Play 商店中。我发现与@Greg Hewgill 发现的相同:某些设备上的缓存分区限制

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

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


您帖子中提到的 Google 支持链接现已过时,新链接是 support.google.com/googleplay/android-developer/answer/…。希望你用最新的链接更新文章,顺便说一句,好帖子。!!
M
Michael A.

您可能想尝试设置 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 保持兼容。


谢谢,我正在等待 Google 开发人员支持部门对我最新的支持请求的回复。我会在收到他们的回复后尝试这个(我不想通过上传另一个 APK 来混淆他们)。会让你知道结果如何。
希望您不必等待太久。他们并不完全以快速反应着称。 :-)
我已经和他们来来回回了几次,但我最近的问题在 22 小时后没有得到答复。不得不等待令人沮丧,但至少这不是关键任务或其他任何事情。
只是想让您知道我发现了这个问题,请参阅我对这个问题的回答。谢谢你的帮助。
C
Chintan Khetiya

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

我使用 Google Docs 发现了问题

可能的问题是我编写了一些适用于 KEY-CODE 的 JS 函数来仅验证 Alphabets &数字但键盘有不同的键码,专门用于电脑键盘和键盘。手机键盘。所以这是我的问题。

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

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

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

通过应用程序检查支持的屏幕

可能是您实现了一些无法在某些设备或选项卡中运行的服装代码或服装小部件,因此在编写长代码之前首先尝试编写一些 beta 代码并测试您的代码是否可以在所有设备上运行.

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


O
OM PRAKASH SEERVI

暗示功能要求的权限

例如,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


谢谢!我不知道使用权限默认为所需的功能。
d
davidcesarino

我有几个建议:

首先,您似乎使用 API 4 作为目标。 AFAIK,最好始终针对最新的 SDK 进行编译并相应地设置您的 android:minSdkVersion。考虑到这一点,请记住 android:required 属性是在 API 5 中添加的:

功能声明可以包含一个 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 is 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 应用页面上,那就太好了。
是啊,那样最好了。同时,您是否尝试将 faketouch 设置为 required= false
最新版本删除了所有 <uses-feature> 标记,因为 Google 支持告诉我它对我的设备不可用的原因是因为 android.hardware.faketouch 功能。这看起来很荒谬,尤其是因为我以前的一个版本也没有 <uses-feature> 标签,但无论如何。我正在等待他们的回复,我不想通过上传另一个版本来混淆他们。如果有一种方法可以在不重复上传和发布新 APK 的情况下进行测试,那就太好了。
我不会说荒谬,因为它是在以后的 sdk 版本(api 11)上添加的标志,因此我建议针对 api15 进行编译和定位(记住要更改你的 project.properties,而不仅仅是清单)。我仍然很惊讶将它设置为 required = false 没有工作。
C
Community

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

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

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

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


也许,这可以帮助:
k
keldar

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

$ aapt dump badging <my_apk.apk>

您似乎打算在 stackoverflow.com/questions/16145927/… 上发布此答案。
H
Hong

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

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


这是最常用的权限之一。
a
ajay1865

我发现了另一种出现此问题的方法:我的 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 当然会过滤掉该应用。


J
John Moffitt

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


d
devoka

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


b
blub

如果您在 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


R
Roman Nazarevych

在 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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅