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

时间:2014-01-31 15:51:21

标签: android adb nexus-7 google-play

我有一个应用程序,我发布到私人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认为不兼容的原因的任何帮助吗?

3 个答案:

答案 0 :(得分:7)

这种行为完全正确:请参阅此处的官方文档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中的说明以编程方式执行此操作。

答案 1 :(得分:4)

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

我将相机要求更改为以下不需要:

<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" />

答案 2 :(得分:0)

您应该阅读/关注此link from Reto Meier

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

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

这应该足够了。