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

Gre*_*ill 87 android google-play

我对于提出这个问题犹豫不决,因为好像很多人都有类似的问题,但我找不到任何可以解决我的特定实例的解决方案.

我开发了一个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" />
    
    Run Code Online (Sandbox Code Playgroud)

    我想我的手机可能并没有声称支持通常的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'
Run Code Online (Sandbox Code Playgroud)

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

<?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> 
Run Code Online (Sandbox Code Playgroud)

在Play商店的"设备可用性"部分,我可以看到除了"G1(鳟鱼)"和"触摸Viva(蛋白石)"之外,所有HTC设备,包括Wildfire S,都不受支持.实际上我看到"Wildfire S(奇迹)"和"Wildfire S A515c(marvelc)"都被列为支持,但我的"Wildfire S A510b"没有特别提及.这种子模型标识符可以这么重要吗?我已经能够从Google Play下载其他几个应用程序到我的手机没有任何问题.

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

Gre*_*ill 83

答案似乎只与应用程序大小有关.我创建了一个简单的"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" />
Run Code Online (Sandbox Code Playgroud)

  • 令人疯狂的是谷歌没有列出Play商店不兼容的原因.我一直认为至少应用程序开发人员会收到这些信息并且会有意识地选择不支持我的设备.这种情况如何长期如此? (7认同)
  • 事实上,如果我没有配备Wildfire手机,我甚至都不会知道这个问题. (2认同)

Joe*_*Joe 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" />
Run Code Online (Sandbox Code Playgroud)

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

因此,请仔细检查每一个<uses-feature>,如果您再次从Web检查中进行了一些复制粘贴.赔率是你要求一些你甚至没有使用的功能.

  • 谢谢 !我正在使用另一个<uses-feature>:<uses-feature android:name ="android.hardware.camera2"/>因为我有ZERO兼容设备.我删除了该行,现在有10000. (3认同)

小智 10

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

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

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

  • 您帖子中提到的Google支持链接现已过时,新链接为https://support.google.com/googleplay/android-developer/answer/188417?hl=zh-CN.希望你用最新的链接和btw更新文章,好帖子.!! (4认同)

Mic*_* A. 7

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

<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" >
</supports-screens>
Run Code Online (Sandbox Code Playgroud)

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

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


Chi*_*iya 7

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

我发现了使用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"/>
    
    Run Code Online (Sandbox Code Playgroud)
  • 也许你已经实现了一些服装代码或服装小部件无法在某些设备或标签中运行,因此在编写长代码之前首先尝试编写一些测试代码并测试它是否会在所有设备上运行代码.

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


dav*_*ino 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 +,为什么不尝试删除它只是为了看它是否有效?或者也许这些都是相关的,因为你正在尝试使用feature(faketouch)和requiredAPI 4中没有的属性.在这种情况下,你应该针对最新的API进行编译.

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

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

祝好运.


OM *_*RVI 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 ="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" />
Run Code Online (Sandbox Code Playgroud)

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


dvt*_*ver 5

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

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

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

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

  • 也许,这可以帮助:<uses-permission android:name ="android.permission.CAMERA"/> <uses-feature android:name ="android.hardware.camera"android:required ="false"/> (7认同)