Play Store сообщает: "Ваше устройство несовместимо с этой версией", но он устанавливает через 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 считает, что он несовместим?

Ответ 1

Это полностью исправить это поведение: пожалуйста, обратитесь к официальной документации здесь http://developer.android.com/guide/topics/manifest/uses-feature-element.html.

Что касается соответствующей части:

Объявленные элементы <uses-feature> носят информационный характер, а это означает, что сама система Android не проверяет соответствие функции поддержки устройства перед установкой приложения. Однако другие сервисы (например, Google Play) или приложения могут проверять ваши объявления <uses-feature> как часть обработки или взаимодействия с вашим приложением. По этой причине очень важно, чтобы вы объявили все функции (из приведенного ниже списка), которые использует ваше приложение.

Таким образом, факт, что вы можете установить apk через adb, не является доказательством того, что конкретное устройство будет отфильтровано или нет.

Также, здесь: 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.

Google заявляет, что "приложения, требующие функции android.hardware.camera, не будут доступны на Nexus 7".

Если вам нужно это разрешение, потому что вы используете камеру в своем приложении, вы можете сделать это программно, как описано в http://developer.android.com/guide/topics/media/camera.html#detect-camera.

Ответ 2

Это случилось с моим приложением пару раз. Оказалось, что требование камеры вызвало эту ошибку, когда пользователь устройства никогда не использовал камеру с момента покупки.

Я изменяю требование к камере, чтобы не требовать следующего:

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

Ответ 3

Вы должны прочитать/следовать этой ссылке из Reto Meier.

Как сказано в ссылке с этого момента, вам нужно указать свои функции приложения.

В основном быстрое решение - запустить aapt dump badging {your apk} и проверить, какие функции использует ваше приложение. Затем добавьте те, которые не влияют на удобство использования вашего приложения для вашего манифеста с обязательным полем, установленным на false. e.g. <uses-feature android:name="android.hardware.camera" android:required="false" />

Этого должно быть достаточно.