androidadbnexus-7google-play

Play store reports "Your device isn't compatible with this version" but it installs via adb just fine on Nexus7


I have an app I released to a private Google Play beta. I can install this exact same APK to my Nexus 7 just fine with

adb pm install

but through the Google Play store it is marked for this exact same Nexus7 as

Your device isn't compatible with this version.

This is the same apk. I can't figure out how to get any information on why the play store thinks it's not compatible.

My manifest looks like this:

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

Any help on determining why Google Play thinks it is not compatible?


Solution

  • That's completely correct this behavior: please refer to the official documentation here http://developer.android.com/guide/topics/manifest/uses-feature-element.html.

    That's the relevant part:

    Declared <uses-feature> elements are informational only, meaning that the Android system itself does not check for matching feature support on the device before installing an application. However, other services (such as Google Play) or applications may check your application's <uses-feature> declarations as part of handling or interacting with your application. For this reason, it's very important that you declare all of the features (from the list below) that your application uses.

    So the fact you're able to install the apk through adb is not a proof for a particular device to be filtered off or not.

    Also, check here: http://developer.android.com/guide/topics/manifest/uses-permission-element.html

    In some cases, the permissions that you request through can affect how your application is filtered by Google Play.

    If you request a hardware-related permission — CAMERA, for example — Google Play assumes that your application requires the underlying hardware feature and filters the application from devices that do not offer it.

    Update: you've confirmed you're using the Nexus 7 2012, so please refer to this official blog post: http://android-developers.blogspot.ch/2012/07/getting-your-app-ready-for-jelly-bean.html.

    Google states "apps requiring the android.hardware.camera feature will not be available on Nexus 7".

    If you need that permission because you use the camera in your app, you can do it programmatically as explained in http://developer.android.com/guide/topics/media/camera.html#detect-camera.