Магазин Play сообщает "Ваше устройство несовместимо с этой версией", но он отлично устанавливается через adb на Nexus7

У меня есть приложение, которое я выпустил для частной бета-версии Google Play. Я могу установить точно такой же APK на мой Nexus 7 просто отлично с

adb pm install

но через магазин Google Play он помечен для того же Nexus7 как

Your device isn't compatible with this version.

Это тот же апк. Я не могу понять, как получить какую-либо информацию о том, почему магазин игр считает, что он не совместим.

Мой манифест выглядит так:

<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 считает, что он не совместим?

4 ответа

Решение

Это абсолютно правильно, пожалуйста, обратитесь к официальной документации здесь: 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.

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

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

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

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

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

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

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

Это может произойти, когда вы даете ненужные разрешения.

в моем случае я использую разрешение

use-feature android:name="com.sec.feature.spen_usp" android:required="true"

Когда я удаляю это разрешение, тогда это работает отлично

Другие вопросы по тегам