it-roy-ru.com

Почему мое приложение не отображается на планшетах в 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>

использует-SDK тег

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

После явного добавления тега метки использования в 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
38
Saqib

Наконец, добавление специального случая для Nexus 7 с тегом <compatible-screens> сработало для меня. Как Nexus 7 имеет плотность ТВДПИ

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

Обновление:

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

     <screen Android:screenSize="normal" Android:screenDensity="480" />
     <screen Android:screenSize="large" Android:screenDensity="480" />
     <screen Android:screenSize="xlarge" Android:screenDensity="480" />`
40
Saqib

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

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

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

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

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

33
Erol

Я верю, что ключ в ваших разрешениях. Утверждая, что ваше приложение использует 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" />

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

19
ninge

Я должен сделать все эти три вещи, чтобы заставить его работать на 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" />
10
banachi

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

<compatible-screens>


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

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


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

4
user2506891

По словам developer.Android.com

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

Обратите внимание, что, если возможно, вы должны избегать, используя элемент <compatibility -screen> в своем приложении.


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

1- REMOVED <совместимые экраны> из манифеста

<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-screen> атрибут в манифесте

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

3- ADDED Android: required = "false" атрибут в <использует-функцию> (согласно моему требованию к приложению) в манифесте

<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: обязательное false присутствует в АТРИБУТЫ: Android: обязательное false

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


Делая вышеуказанные изменения,

БОЛЕЕ 2000 УСТРОЙСТВ были добавлены в список поддерживаемых устройств Android

 2000+ devices added

Надеюсь, это поможет

3
shanraisshan

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

Как сделать Android Phonegap доступным для планшетов?

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

0
Kirit Vaghela