问题 播放商店报告“您的设备与此版本不兼容”,但它可以通过adb在Nexus7上正常安装


我有一个应用程序,我发布到私人Google Play测试版。我可以安装这个完全相同的APK到我的Nexus 7就好了

adb pm install 

但是通过Google Play商店,它标记为与此完全相同的Nexus7

Your device isn't compatible with this version.

这是 相同 APK。我无法弄清楚如何获得有关游戏商店认为它不兼容的原因的任何信息。

我的清单看起来像这样:

<uses-sdk android:minSdkVersion="10" />

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />

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

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".foobar"
              android:label="@string/app_name"
              android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name=".fooservice" android:exported="false" android:enabled="true" android:label="@string/app_name" android:icon="@drawable/icon">
    </service>

</application>

 

有关确定Google Play认为不兼容的原因的任何帮助?


3522
2018-01-31 15:51


起源

您使用的是nexus 7 2012(原创)吗? - Or Bar
是的,先生,我。它之前已经根深蒂固,但我刚刚重新填写它,现在已经无法使用4.4.2 - spartygw
@OrBar我给你的评论+1了。我认为你正在使用相机使用功能的东西。谢谢你的帮助。 - spartygw


答案:


这种行为完全正确:请参阅此处的官方文档 http://developer.android.com/guide/topics/manifest/uses-feature-element.html

这是相关部分:

声明 <uses-feature> 元素仅供参考,这意味着Android系统本身在安装应用程序之前不会检查设备上的匹配功能支持。但是,其他服务(例如Google Play)或应用程序可能会检查您的应用程序 <uses-feature> 声明作为处理或与您的应用程序交互的一部分。因此,声明应用程序使用的所有功能(从下面的列表中)非常重要。

因此,您可以通过adb安装apk,这不是特定设备被过滤掉的证明。

另外,请点击此处: http://developer.android.com/guide/topics/manifest/uses-permission-element.html

在某些情况下,您请求的权限可能会影响Google Play过滤您的应用程序的方式。

如果您请求与硬件相关的权限(例如,CAMERA),Google Play会假定您的应用程序需要基础硬件功能,并从不提供该应用程序的设备中过滤应用程序。

更新: 您已确认使用的是Nexus 7 2012,请参阅此官方博文: http://android-developers.blogspot.ch/2012/07/getting-your-app-ready-for-jelly-bean.html

谷歌声称“需要android.hardware.camera功能的应用程序将无法在Nexus 7上使用”。

如果您因为在应用程序中使用相机而需要该权限,则可以按照以下说明以编程方式执行此操作 http://developer.android.com/guide/topics/media/camera.html#detect-camera


6
2018-01-31 16:00



好的,这确实有助于解决adb工作的问题,而不是游戏商店。我有什么方法可以确定游戏商店为什么这么想 <uses-feature android:name="android.hardware.camera" /> 与nexus 7不兼容? - spartygw
阅读您的权限列表,READ_PHONE_STATE可能会导致Google Play过滤掉您的Nexus 7。没有这个权限测试apk的任何机会(可能在开发控制台中作为beta apk)? - fasteque
啊哈!很棒的。我会尝试并报告回来。不幸的是,在我上传的APK过滤Play商店之前,有时需要几个小时。 - spartygw
好的,试一试。这与您要求的权限或您需要的功能有关。 - fasteque
添加required = false标签之类的 <uses-permission android:name="android.permission.CAMERA" android:required="false"/> 比你需要处理代码中没有相机的情况。看到@fasteque发布的链接 - Or Bar


这发生在我的应用程序中几次。事实证明,当设备用户从购买后从未使用过相机时,相机要求会导致此错误。

我将相机要求改为以下要求:

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

4
2018-01-31 23:22



我在清单中提到了<uses-permission android:name =“android.permission.CAMERA”/>,并且我从mot商店获得了“你的设备与这个版本不兼容”的相同错误。没有前置摄像头。可能是什么问题 - AndroidDev
您可能还需要<uses-feature>行来让Play商店不需要该功能。我的经验是,如果他们的用户没有在他们的手机上使用相机,那么不知何故它没有识别存在的功能,并且“必需”默认是真的。我不记得我的用户使用的手机版本,但使用以上所有线路似乎已修复它。 - Gravitoid


你应该阅读/关注这个 来自Reto Meier的链接

如前所述链接中所述,您需要指定您的应用功能。

基本上,快速解决方案就是运行 aapt dump badging {你的apk} 并验证您的应用正在使用哪些功能。然后将必需字段设置为false的不会影响应用程序可用性的文件添加到清单中。 e.g. <uses-feature android:name="android.hardware.camera" android:required="false" />

那应该够了。


0
2017-09-24 12:25





当您提供不必要的权限时,这可能会发生。

在我的情况下,我使用权限

uses-feature android:name =“com.sec.feature.spen_usp”android:required =“true”

当我删除此权限,然后它工作正常


0
2017-09-14 20:16