web-dev-qa-db-fra.com

Pourquoi mon application n'apparaît-elle pas sur les tablettes dans Google Play?

Je viens de publier mon application pour téléphones et tablettes, mais celle-ci n'apparaît pas dans Google Play pour les tablettes.

Vérifié sur Nexus 7 et Asus eeeePad

C'est ce que j'ai dans mon fichier manifeste

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

balise uses-sdk

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

autorisations

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

Après avoir explicitement ajouté la balise uses-feature à false, elle a commencé à apparaître pour la tablette Asus eeeePad mais ne s'affiche toujours pas pour Nexus 7. Voici ce que je vois dans la console du développeur

Cette application est uniquement disponible pour les périphériques dotés de ces fonctionnalités, comme défini dans le manifeste de votre application . Densités d'écran: LARGE,MDPI LARGE,HDPI LARGE,LDPI LARGE,XHDPI XLARGE,MDPI XLARGE,HDPI XLARGE,LDPI XLARGE,XHDPI NORMAL,MDPI NORMAL,HDPI NORMAL,XHDPI Fonctions requises pour le périphérique

Android.hardware.screen.portrait
Android.hardware.touchscreen
38
Saqib

Enfin, l’ajout d’un cas spécial pour Nexus 7 avec la balise <compatible-screens> a fonctionné pour moi. Comme Nexus 7 a la densité 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>

METTRE À JOUR:

Pour les périphériques xxhdpi, vous pouvez utiliser 480 comme valeur int.

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

Cette page identifie votre problème. 

Lorsque vous utilisez <uses-feature> au lieu de <uses-permission>, votre application ne sera pas filtrée par Market, mais vous devrez gérer les périphériques ne prenant pas cette fonctionnalité en charge au niveau du code.

Pour toutes les autorisations de la page ci-dessus, vous pouvez désactiver le filtrage basé sur la fonctionnalité implicite en déclarant explicitement la fonctionnalité implicite, dans un élément <uses-feature>, avec un attribut Android:required="false". Par exemple, pour désactiver tout filtrage basé sur l’autorisation CAMERA, vous devez ajouter cette déclaration au fichier manifeste:

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

Toutefois, lorsque vous spécifiez <uses-permission>, tous les périphériques n'ayant pas accès à cette fonctionnalité sont filtrés.

33
Erol

Je crois que la clé réside dans vos autorisations. En indiquant que votre application utilise RECEIVE_SMS et READ_PHONE_STATE, Google Play l’utilise pour filtrer les appareils qui ne peuvent pas utiliser ces fonctions (tablettes), car elle pense que votre application doit utiliser ces autorisations pour fonctionner. Selon le site de développement Android: 

"Pour empêcher la disponibilité involontaire de ces applications, Google Play suppose que certaines autorisations liées au matériel indiquent Que les fonctionnalités matérielles sous-jacentes sont requises par défaut. Pour , Les applications utilisant Bluetooth doivent demander BLUETOOTH Permission dans un élément - pour les applications héritées, Google Play suppose que la déclaration de permission signifie que la fonctionnalité sous-jacente Android.hardware.bluetooth est requise par l'application et que Configure le filtrage en fonction cette fonctionnalité. "

Aussi, regardez ceci:

Téléphonie CALL_PHONE Android.hardware.téléphonie 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

Vous avez RECEIVE_SMS et READ_PHONE_STATE donc vous avez automatiquement Android.hardware.telephony. Vous pouvez résoudre ce problème en faisant 

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

Tout cela est expliqué plus en profondeur ici .

19
ninge

Je dois faire ces trois choses pour que cela fonctionne pour Nexus 7. Une fois que vous avez téléchargé votre apk, vous pouvez vérifier le paramètre en activant d'abord le nouvel apk, accédez au détail du produit et recherchez les appareils compatibles. Si Nexus 7 ne se trouve pas sous "Périphériques non pris en charge en raison de vos paramètres de manifeste", vous êtes satisfait.

Remarque: une fois que vous avez téléchargé votre apk, Google Play convertit la densité 213 en tvdpi. Vous ne savez pas pourquoi n'est pas une option dans l'outil de manifeste 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

La documentation nous dit d’éviter d’utiliser 

<compatible-screens>


voir ici
à la place, vous devriez utiliser

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


Beaucoup des autres réponses fournies sur cette page sont aussi des réponses efficaces. Je les ai mis en place moi-même. Merci tout le monde.

4
user2506891

Selon developer.Android.com

Si l'application déclare un élément <compatible-screens> dans le manifeste, il doit inclure des attributs spécifiant toutes les combinaisons de taille et de densité pour les écrans de tablette pris en charge par l'application. 

Notez que, si possible, vous devez éviter en utilisant l'élément <compatible-screens> dans votre application.


Par conséquent, je fais les tâches suivantes,

1- REMOVED <écrans compatibles> du manifeste

<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 <supports-screens> dans le manifeste

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

3- ADDED Android: required = "false" attribut dans <uses-feature> (selon les exigences de l'application)} dans le manifeste

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

Documentation Android officielle sur Autorisations qui impliquent une configuration requise

Une explication plus détaillée sur Android: requis false est présent dans ATTRIBUTS: Android: requis false

Lorsque vous déclarez Android: required = "false" pour une fonctionnalité, cela signifie que l'application préfère utiliser la fonctionnalité si elle est présente sur le périphérique, mais que elle est conçue pour fonctionner sans la fonctionnalité spécifiée, si nécessaire (que est l'autorisation de téléphonie dans le cas de tablettes).


En faisant les changements ci-dessus,

PLUS DE 2000 DISPOSITIFS ont été ajoutés à la liste Périphériques Android pris en charge

 2000+ devices added

J'espère que ça aide

3
shanraisshan

Je reçois de l'aide en répondant à cette question.

Comment rendre Android Phonegap disponible pour les tablettes?

Oui. Le problème était avec les autorisations. Je supprime toutes les autorisations du fichier AndroidManifest.xml avant de tester l’application et d’ajouter une autorisation une à une lorsque l’erreur d’autorisation est manquante. Maintenant, mon application est compatible avec les téléphones Android ainsi que les tablettes. 

0
Kirit Vaghela