Подтвердить что ты не робот

Почему мое приложение не появляется на планшетах в Google Play?

Я только что выпустил приложение для телефонов и планшетов, но он не отображается в Google Play для планшетов.

Проверено на Nexus 7 и Asus eeeePad

Это то, что у меня есть в файле манифеста

<compatible-screens>
    <!--no small size screens -->

    <!--Only hdpi and xhdpi for normal size screens -->
    <screen android:screenSize="normal" android:screenDensity="mdpi" />
    <screen android:screenSize="normal" android:screenDensity="hdpi" />
    <screen android:screenSize="normal" android:screenDensity="xhdpi" />

    <!-- all large size screens -->
    <screen android:screenSize="large" android:screenDensity="ldpi" />
    <screen android:screenSize="large" android:screenDensity="mdpi" />
    <screen android:screenSize="large" android:screenDensity="hdpi" />
    <screen android:screenSize="large" android:screenDensity="xhdpi" />

    <!-- all xlarge size screens -->
    <screen android:screenSize="xlarge" android:screenDensity="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
</compatible-screens>

use-sdk tag

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />

разрешений

<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<permission android:name="com.myapp.something.permission.C2D_MESSAGE" android:protectionLevel="signature" />

После явного добавления тега use-feature в false он начал появляться для планшета Asus eeeePad, но все еще не отображается для nexus 7. Вот что я вижу в консоли разработчика

Это приложение доступно только для устройств с этими функциями, как определено в манифесте приложения. Плотность экрана: LARGE,MDPI LARGE,HDPI LARGE,LDPI LARGE,XHDPI XLARGE,MDPI XLARGE,HDPI XLARGE,LDPI XLARGE,XHDPI NORMAL,MDPI NORMAL,HDPI NORMAL,XHDPI Обязательные функции устройства

android.hardware.screen.portrait
android.hardware.touchscreen
4b9b3361

Ответ 1

Наконец, для меня работал специальный случай для Nexus 7 с тегом <compatible-screens>. Поскольку Nexus 7 имеет плотность tvdpi

<compatible-screens>
    <!--no small size screens -->


    <!--all normal size screens -->
    <screen android:screenSize="normal" android:screenDensity="ldpi" />
    <screen android:screenSize="normal" android:screenDensity="mdpi" />
    <screen android:screenSize="normal" android:screenDensity="hdpi" />
    <screen android:screenSize="normal" android:screenDensity="xhdpi" />

    <!-- all large size screens -->
    <screen android:screenSize="large" android:screenDensity="ldpi" />
    <screen android:screenSize="large" android:screenDensity="mdpi" />
    <screen android:screenSize="large" android:screenDensity="hdpi" />
    <screen android:screenSize="large" android:screenDensity="xhdpi" />

    <!-- all xlarge size screens -->
    <screen android:screenSize="xlarge" android:screenDensity="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />

    <!-- Special case for Nexus 7 -->
    <screen android:screenSize="large" android:screenDensity="213" />

</compatible-screens>

UPDATE:

Для устройств xxhdpi вы можете использовать 480 в качестве значения int

     <screen android:screenSize="normal" android:screenDensity="480" />
     <screen android:screenSize="large" android:screenDensity="480" />
     <screen android:screenSize="xlarge" android:screenDensity="480" />`

Ответ 2

Эта страница определяет вашу проблему.

Когда вы используете <uses-feature> вместо <uses-permission>, ваше приложение не будет отфильтровано Market, но ожидает, что вы будете обрабатывать устройства, не поддерживающие эту функцию на уровне кода.

Для любого из разрешений на этой странице выше вы можете отключить фильтрацию на основе подразумеваемой функции, явно объявив явную функцию явно в элементе <uses-feature> с атрибутом android:required="false". Например, чтобы отключить любую фильтрацию на основе разрешения CAMERA, вы должны добавить это объявление в файл манифеста:

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

Однако, когда вы указываете <uses-permission>, все устройства, которые не имеют доступа к этой функции, фильтруются.

Ответ 3

Я верю, что ключ находится в ваших разрешениях. Говоря, что ваше приложение использует RECEIVE_SMS и READ_PHONE_STATE, Google Play использует это, чтобы отфильтровывать устройства, которые не могут делать эти вещи (планшеты), потому что они думают, что ваше приложение должно использовать эти разрешения для работы. Согласно сайту разработчика Android:

"Чтобы предотвратить непреднамеренное использование этих приложений, Google Play предполагает, что определенные разрешения, связанные с оборудованием, указывают что по умолчанию требуются основные аппаратные функции. Для Например, приложения, использующие Bluetooth, должны запросить BLUETOOTH разрешение в элементе - для устаревших приложений, Google Play предполагает, что объявление разрешения означает, что Функция android.hardware.bluetooth требуется приложением и устанавливает фильтрацию на основе этой функции."

Кроме того, посмотрите на это:

Телефония CALL_PHONE android.hardware.telephony CALL_PRIVILEGED android.hardware.telephony MODIFY_PHONE_STATE android.hardware.telephony PROCESS_OUTGOING_CALLS android.hardware.telephony READ_SMS android.hardware.telephony RECEIVE_SMS android.hardware.telephony RECEIVE_MMS android.hardware.telephony RECEIVE_WAP_PUSH android.hardware.telephony SEND_SMS android.hardware.telephony WRITE_APN_SETTINGS android.hardware.telephony WRITE_SMS android.hardware.telephony

У вас есть RECEIVE_SMS и READ_PHONE_STATE, поэтому у вас автоматически есть android.hardware.telephony. Вы можете исправить это, выполнив

<uses-feature android:name="android.hardware.telephony" android:required="false" />

Все это объясняется более подробно здесь.

Ответ 4

Мне нужно выполнить все три этих действия, чтобы заставить его работать на Nexus 7. После того, как вы загрузили свой apk, вы можете проверить настройки, сначала активировав новый apk, перейдите к описанию продукта и найдите поддерживаемые устройства. Если Nexus 7 не найден в разделе "Неподдерживаемые устройства из-за ваших настроек манифеста", вы добры.

Примечание. После того, как вы загрузите свой apk, Google Play переведет плотность 213 в tvdpi. Не уверен, почему в инструменте манифеста eclipse нет возможности...

<compatible-screens>
    ....
    <screen android:screenSize="large" android:screenDensity="213" />
</compatible-screens>

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

Ответ 5

Документация инструктирует нас избегать использования

<compatible-screens>


см. здесь
вместо этого вы должны использовать

<supports-screens
        android:anyDensity="true"
        android:xlargeScreens="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true" />


Многие другие ответы, представленные на этой странице, также являются эффективными ответами. Я сам их реализовал. Спасибо всем.

Ответ 6

Согласно developer.android.com

Если приложение объявляет в манифесте элемент < совместимых экранов > , элемент должен включать атрибуты, которые определяют все комбинации размера и плотности для экранов планшетов, поддерживаемых приложением.

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


Поэтому я выполняю следующие задачи,

1- УДАЛЕННЫЕ < совместимые экраны > из манифеста

<compatible-screens>
    <!-- all small size screens -->
    <screen android:screenSize="small" android:screenDensity="ldpi" />
    <screen android:screenSize="small" android:screenDensity="mdpi" />
    <screen android:screenSize="small" android:screenDensity="hdpi" />
    <screen android:screenSize="small" android:screenDensity="xhdpi" />

    <!--all normal size screens -->
    <screen android:screenSize="normal" android:screenDensity="ldpi" />
    <screen android:screenSize="normal" android:screenDensity="mdpi" />
    <screen android:screenSize="normal" android:screenDensity="hdpi" />
    <screen android:screenSize="normal" android:screenDensity="xhdpi" />

    <!-- all large size screens -->
    <screen android:screenSize="large" android:screenDensity="ldpi" />
    <screen android:screenSize="large" android:screenDensity="mdpi" />
    <screen android:screenSize="large" android:screenDensity="hdpi" />
    <screen android:screenSize="large" android:screenDensity="xhdpi" />

    <!-- all xlarge size screens -->
    <screen android:screenSize="xlarge" android:screenDensity="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />

    <!-- Special case for Nexus 7 -->
    <screen android:screenSize="large" android:screenDensity="213" />

    <screen android:screenSize="normal" android:screenDensity="480" />
    <screen android:screenSize="large" android:screenDensity="480" />
    <screen android:screenSize="xlarge" android:screenDensity="480" />

</compatible-screens>

2- ADDED < support-screens > в манифесте

    <supports-screens
        android:xlargeScreens="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:anyDensity="true"
    />

3- ADDED андроид: required = "false" атрибут в < uses-feature > (в соответствии с требованиями моего приложения) в манифесте

<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:name="android.hardware.bluetooth" android:required="false"/>
<uses-feature android:name="android.hardware.location.gps" android:required="false"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.nfc" android:required="false"/>

Официальная документация на Android о Разрешения, которые подразумевают требования к характеристикам

Более подробное объяснение о android: required false присутствует в ATTRIBUTES: android: required false

Когда вы объявляете андроид: required = "false" для функции, это означает, что приложение предпочитает использовать эту функцию, если она присутствует на устройстве, но она предназначена для работы без указанной функции, если необходимо (то есть разрешение на телефонию в случае таблеток).


Выполняя приведенные выше изменения,

В списке поддерживаемых Android-устройств добавлено более 2000 устройств

добавлено 2000+ устройств

Я надеюсь, что это поможет

Ответ 7

Я получаю помощь от ответа на этот вопрос.

Как сделать Android-телефонию доступной для планшетов?

Да. Проблема заключалась в разрешении. Я удаляю все разрешения из AndroidManifest.xml, чем тестирую приложение и добавляю разрешение один за другим при получении отсутствующей ошибки разрешения. Теперь мое приложение совместимо с телефонами Android, а также планшетами.