98 votes

Pourquoi le Google Play store dire que mon application Android est incompatible avec mon propre appareil?

J'hésite à poser cette question, car il semble que beaucoup de gens ont un problème similaire et pourtant je n'ai pas trouvé de solution qui résout mon cas particulier.

J'ai développé une application Android (lien vers l'application) et l'ai téléchargé sur le Play store. Le Play store dit

"This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."

Bien sûr, c'est le téléphone sur lequel j'ai développé l'application, de sorte qu'il devrait être compatible. Certaines personnes avec d'autres périphériques dire que c'rapports compatibles, d'autres disent que c'rapports incompatibles, mais je ne peux trouver aucune tendance. (Apparemment, je ne connais pas beaucoup de personnes avec les appareils Android.)

J'ai essayé ce qui suit:

  • le déplacement d'un grand-ish fichier de l' res/raw répertoire comme suggéré par cette réponse. Le seul fichier à il y a un ~700 ko, fichier texte, mais je l'ai déplacé à l' assets/ sans changement apparent.

  • adjonction deux assertions:

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

    pensant que peut-être mon téléphone ne prétendons pas à l'appui de l'habituel android.hardware.touchscreen , mais encore une fois, sans changement apparent.

Lors du téléchargement de l'APK du Play store, le seul filtre que des rapports comme active est l' android.hardware.faketouch fonctionnalité.

Voici la sortie de l' aapt dump badging bin/NZSLDict-release.apk:

package: name='com.hewgill.android.nzsldict' versionCode='3' versionName='1.0.2'
sdkVersion:'4'
targetSdkVersion:'4'
uses-feature:'android.hardware.faketouch'
uses-feature-not-required:'android.hardware.touchscreen'
application-label:'NZSL Dictionary'
application-icon-160:'res/drawable/icon.png'
application: label='NZSL Dictionary' icon='res/drawable/icon.png'
launchable-activity: name='com.hewgill.android.nzsldict.NZSLDictionary'  label='NZSL Dictionary' icon=''
main
other-activities
supports-screens: 'small' 'normal' 'large'
supports-any-density: 'true'
locales: '--_--'
densities: '160'

et pour être complet, mon fichier manifeste:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.hewgill.android.nzsldict"
      android:versionCode="3"
      android:versionName="1.0.2">
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
    <uses-feature android:name="android.hardware.faketouch" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
    <application android:label="@string/app_name"
        android:icon="@drawable/icon">
        <activity android:name="NZSLDictionary"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".WordActivity" />
        <activity android:name=".VideoActivity" />
        <activity android:name=".AboutActivity" />
    </application>
</manifest> 

Dans le Dispositif "Disponibilité" du Play store, je peux voir que tous les appareils HTC, y compris le Wildfire S, sont pris en charge à l'exception de "G1 (truite)" et "Touch Viva (opale)", quelle que soit ceux sont. En fait je vois que les deux "Wildfire S (marvel)" et "Wildfire S A515c (marvelc)" sont répertoriés comme pris en charge, mais mon "Wildfire S A510b" n'est pas expressément mentionné. Cette sorte de sous-modèle de l'identificateur de la matière que beaucoup? J'ai été en mesure de télécharger de nombreuses autres applications à partir de Google Play sur mon téléphone sans problème.

La seule chose que je n'ai pas fait à ce point, c'est d'attendre 4 à 6 heures après le téléchargement de la dernière version (comme dans ce commentaire) pour voir si elle a toujours dit que c'est incompatible avec mon téléphone. Cependant, le magasin de Jeu page affiche actuellement 1.0.2 qui est la dernière que j'ai téléchargé.

87voto

Greg Hewgill Points 356191

La réponse semble être uniquement liée à la taille de l'application. J'ai créé un simple "hello world" app avec rien de spécial dans le fichier de manifeste, téléchargé sur le Play store, et il a été signalé que compatible avec mon appareil.

J'ai rien changé dans cette application, sauf pour ajouter plus de contenu dans l' res/drawable répertoire. Lorsque l' .apk de la taille atteint près de 32 MO, le Play store a commencé à faire rapport que mon application est incompatible avec mon téléphone.

Je vais tenter de contacter Google developer support et demander des explications sur la raison de cette limite.

Mise à JOUR: Voici Google développeur de réponse du support:

Je vous remercie pour votre remarque. Actuellement, la taille de fichier maximale pour une application à télécharger sur Google Play est d'environ 50 MO.

Cependant, certains appareils peuvent avoir moins de 50 MO de cache partition que l'application indisponible pour les utilisateurs à télécharger. Par exemple, certains de HTC Wildfire dispositifs sont connus pour avoir entre 35 et 40 MO de mémoire cache partitions. Si Google Play est en mesure d'identifier un tel dispositif qui n'a pas de cache assez grand pour stocker l'application, il peut filtrer de s'afficher pour l'utilisateur.

J'ai fini par résoudre mon problème par la conversion de tous les fichiers PNG en JPG, avec une petite perte de qualité. L' .apk le fichier est maintenant 28 MO, ce qui est en dessous de quel seuil de Google Play est l'application de mon téléphone.

J'ai aussi supprimé tous les <uses-feature> trucs, et maintenant avoir juste ceci:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

17voto

Joe Points 795

J'ai couru dans cette ainsi - que j'ai fait tout mon développement sur un Lenovo IdeaTab A2107A-F et pourrait exécuter du développement qui repose sur elle, et même communiqué signé Apk (installé avec adb install) sans aucun problème. Une fois qu'il a été publié en Alpha test mode et disponible sur Google Play, j'ai reçu le "incompatible avec votre appareil" message d'erreur.

Il s'avère que j'avais mis dans mon AndroidManifest.xml suivants à partir d'un tutoriel:

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />

Eh bien, la Lenovo IdeaTab A2107A-F n'a pas de mise au point automatique de la caméra sur elle (ce qui j'ai appris de http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611sous Inconvénients: n'a pas d'autofocus de l'appareil photo). Indépendamment du fait que j'ai été en utilisant cette fonctionnalité, Google Play a dit non. Une fois qu'on a retiré j'ai reconstruit mon APK, téléchargé sur Google Play, et bien sur ma tablette IdeaTab était maintenant dans la liste des appareils compatibles.

Donc, vérifiez que tous les <uses-feature> et si vous avez été faire quelques copier-coller à partir du web, vérifiez de nouveau. Les chances sont que vous avez demandé certaines fonctionnalité vous n'êtes même pas à l'aide.

12voto

Ali Derbane Points 136

J'ai connu ce problème aussi bien que du développement d'une application pour un client qui voulait avoir des vidéos en mode hors connexion disponibles à partir de leur application. J'ai écrit un billet de blog sur les raisons de l'application, j'ai travaillé pendant des mois ne s'affichaient pas dans le play store pour mon périphérique (poste peut être trouvée ici). J'ai trouvé la même chose que @Greg Hewgill trouvé: partition de Cache limitations sur certains appareils.

Le voyage n'a pas arrêter pour moi. Le client voulait avoir ces vidéos dans l'application et ne voulait pas la qualité de la vidéo pour être diminué. Après quelques recherches, j'ai compris qu' à l'aide d'extension des fichiers est la parfaite solution à notre problème.

Pour partager mes connaissances avec la communauté Android, j'ai tenu un discours à droidconNL 2012 sur l'expansion des fichiers. J'ai créé une présentation et un exemple de code pour illustrer comment il peut être facile de commencer à utiliser l'expansion des fichiers. Pour vous qui veulent utiliser l'extension des fichiers pour résoudre ce problème hésitez pas à consulter le post contenant la présentation et l'exemple de code

7voto

chintan khetiya Points 5941

Finlay, j'ai rencontré le même problème dans mon application. J'ai développé Phone Gap application pour android:minSdkVersion="7" & android:targetSdkVersion="18" qui est récente version de la plateforme android.

J'ai trouvé le problème à l'aide de Google Docs

Peut être problème est que je dois écrire la fonction JS qui fonctionne sur l' KEY-CODE afin de valider que les Alphabets Et de Nombre mais de la carte clé est différente de la clé de code spécialement pour clavier d'ordinateur et clavier Mobile. C'était donc mon problème.

Je ne sais pas si ma réponse est correcte ou non et il pourrait être possible qu'elle pourrait être smiler à la réponse ci-dessus, mais je vais essayer de lister quelques points qui devraient être des soins alors que nous sommes la construction de l'application.J'espère que vous suivez ce à résoudre ce genre de problème.

  • Utiliser l' android:minSdkVersion="?" selon vos besoins, & android:targetSdkVersion="?" devrait être plus récente dans lequel votre application de ciblage. voir plus

  • Essayez d'ajouter seulement ceux de l'autorisation qui sera utiliser dans votre application et supprimer tous qui sont inutiles .

  • Découvrez l'écran prises en charge par l'application

    <supports-screens 
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true"
    android:xlargeScreens="true"/>
    
  • Peut-être que vous avez de mettre en œuvre certaines de costume de code ou de costume widget qui ne pouvait pas en mesure d'exécuter dans un certain dispositif ou de l'onglet en retard, donc avant d'écrire le long code d'abord essayer d'écrire un peu de code bêta et tester si votre code sera exécuté dans tous les appareil ou pas.

  • Et j'espère que Google va publier un outil qui puisse valider votre code avant de le télécharger l'application, et dit qu'en raison de certaines raisons, nous ne sommes pas autoriser l'exécution de votre application dans un certain dispositif de sorte que nous pouvons facilement résoudre.

6voto

David Cesarino Points 7258

J'ai un couple de suggestions:

  1. Tout d'abord, vous semblez être à l'aide de l'API de 4 sur votre cible. Autant que je sache, c'est une bonne pratique de toujours compiler contre le dernier SDK et l'installation de votre android:minSdkVersion en conséquence.

  2. Avec cela à l'esprit, souvenez-vous que android:required d'attribut a été ajouté dans l'API 5:

La fonctionnalité de déclaration peut inclure un android:required=["true" | "false"] d'attribut (si vous compilez à l'encontre de l'API de niveau 5 ou plus), ce qui vous permet de spécifier si l'application (...)

Donc, je suggère que vous compilez contre SDK 15, définissez targetSdkVersion à 15 ainsi, et de fournir cette fonctionnalité.

Il montre également ici, sur le site de Jeu, comme incompatible avec n'importe quel appareil que j'ai c'est (coïncidence?) Pain d'épice (Galaxy Ace et Galaxy Y ici). Mais il montre aussi compatible avec mon Galaxy Tab 10.1 (Nid d'abeille), Nexus S et Galaxy Nexus ( ICS).

Qui a également laissé me demandais, et c'est une très sauvage de deviner, mais depuis android.hardware.faketouch est API11+, pourquoi vous n'essayez pas de l'enlever juste pour voir si elle fonctionne? Ou peut-être que tout est lié de toute façon, puisque vous essayez d'utiliser les fonctionnalités (faketouch) et l' required d'attribut qui ne sont pas disponibles dans l'API 4. Et dans ce cas, vous devez compiler contre les dernières API.

Je voudrais essayer cette première, et de supprimer l' faketouch exigence uniquement en dernier ressort (bien sûr) --- depuis cela fonctionne avant de développer, je dirais que c'est juste une question de le compilé application de la non-reconnaissance de la fonction (en raison de la configuration requise pour le SDK), laissant ainsi inattendu de filtrage des questions sur le Jeu.

Désolé si cette supposition n'est pas la réponse à votre question, mais il est très difficile de diagnostiquer ce genre de problèmes et d'identifier la solution sans avoir fait les tests. Ou au moins pour moi, sans la connaissance adéquate de la façon de Jouer vraiment filtres apps.

Bonne chance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X