J'hésite à poser cette question, car il semble que beaucoup de gens aient un problème similaire et pourtant je n'ai trouvé aucune solution qui résout mon cas particulier.
J'ai développé une application Android ( lien vers l'application réelle ) et l'ai téléchargée 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, il doit donc être compatible. Certaines personnes avec d'autres appareils disent qu'il rapporte compatible, d'autres disent qu'il signale incompatible, mais je ne trouve aucune tendance. (Apparemment, je ne connais pas beaucoup de gens avec des appareils Android.)
J'ai essayé ce qui suit:
déplacer un fichier volumineux hors du
res/raw
répertoire comme suggéré par cette réponse . Le seul fichier qui s'y trouvait était un fichier texte d'environ 700 Ko, mais je l'ai déplacéassets/
sans changement apparent.en ajoutant les deux assertions de fonctionnalités suivantes:
<uses-feature android:name="android.hardware.faketouch" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
pensant que mon téléphone ne prétend peut-être pas prendre en charge la
android.hardware.touchscreen
fonctionnalité habituelle , mais encore une fois, sans changement apparent.
Lors du téléchargement de l'APK sur le Play Store, le seul filtre qu'il signale comme actif est la android.hardware.faketouch
fonctionnalité.
Ce qui suit est la sortie de 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 la section «Disponibilité des appareils» 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)», quels qu'ils soient. En fait, je vois que "Wildfire S (marvel)" et "Wildfire S A515c (marvelc)" sont répertoriés comme pris en charge, mais mon "Wildfire S A510b" n'est pas spécifiquement mentionné. Ce type d'identifiant de sous-modèle peut-il avoir autant d'importance? J'ai pu télécharger plusieurs autres applications de Google Play sur mon téléphone sans aucun problème.
La seule chose que je n'ai pas faite à ce stade 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 dit toujours qu'elle est incompatible avec mon téléphone. Cependant, la page Play Store affiche actuellement 1.0.2 qui est la dernière que j'ai téléchargée.
la source
handleSilentException
méthode pour générer un rapport silencieux. Il vous indiquera au moins sur quel matériel l'application travaille.Réponses:
La réponse semble être uniquement liée à la taille de l'application. J'ai créé une simple application "hello world" sans rien de spécial dans le fichier manifeste, je l'ai téléchargée sur le Play Store et elle a été signalée comme compatible avec mon appareil.
Je n'ai rien changé dans cette application, sauf pour ajouter plus de contenu dans le
res/drawable
répertoire. Lorsque la.apk
taille a atteint environ 32 Mo, le Play Store a commencé à signaler que mon application était incompatible avec mon téléphone.Je vais tenter de contacter l'assistance aux développeurs de Google et demander des précisions sur la raison de cette limite.
MISE À JOUR : Voici la réponse de l'assistance aux développeurs Google à ce sujet:
J'ai fini par résoudre mon problème en convertissant tous les fichiers PNG en JPG, avec une petite perte de qualité. Le
.apk
fichier fait maintenant 28 Mo, ce qui est inférieur au seuil que Google Play applique pour mon téléphone.J'ai également supprimé toutes les
<uses-feature>
choses, et j'ai maintenant juste ceci:la source
J'ai également rencontré cela - j'ai fait tout mon développement sur un Lenovo IdeaTab A2107A-F et j'ai pu exécuter des versions de développement dessus, et même publier des APK signés (installés avec
adb install
) sans problème. Une fois qu'il a été publié en mode test Alpha et disponible sur Google Play, j'ai reçu le message d'erreur "incompatible avec votre appareil".Il s'avère que j'avais placé dans mon texte
AndroidManifest.xml
ce qui suit à partir d'un tutoriel:Eh bien, le Lenovo IdeaTab A2107A-F n'a pas d'appareil photo autofocus (ce que j'ai appris de http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611 , sous Inconvénients: manque d'appareil photo autofocus). Que j'utilise cette fonctionnalité ou non, Google Play a refusé. Une fois que cela a été supprimé, j'ai reconstruit mon APK, je l'ai téléchargé sur Google Play et, bien sûr, mon IdeaTab était maintenant dans la liste des appareils compatibles.
Alors, revérifiez chaque fois
<uses-feature>
que vous avez fait du copier-coller à partir de la vérification Web. Il y a de fortes chances que vous ayez demandé une fonctionnalité que vous n'utilisez même pas.la source
J'ai également rencontré ce problème lors du développement d'une application pour un client qui souhaitait avoir des vidéos hors ligne disponibles à partir de son application. J'ai écrit un article de blog expliquant pourquoi l'application sur laquelle j'ai travaillé pendant des mois ne s'afficherait pas dans le Play Store de mon appareil (l' article peut être trouvé ici ). J'ai trouvé la même chose que @Greg Hewgill trouvé: limitations de la partition de cache sur certains appareils .
Le voyage ne s'est pas arrêté pour moi là-bas. Le client voulait avoir ces vidéos dans l'application et ne voulait pas que la qualité de la vidéo soit diminuée. Après quelques recherches, j'ai compris que l' utilisation de fichiers d'extension était la solution parfaite à notre problème.
Pour partager mes connaissances avec la communauté Android, j'ai tenu une conférence à droidconNL 2012 sur les fichiers d'extension. J'ai créé une présentation et un exemple de code pour illustrer à quel point il peut être facile de commencer à utiliser des fichiers d'extension. Si vous souhaitez utiliser des fichiers d'extension pour résoudre ce problème, n'hésitez pas à consulter l'article contenant la présentation et l'exemple de code.
la source
Vous voudrez peut-être essayer de définir l'attribut supports-screens:
Le Wildfire a un petit écran, et selon la documentation, cet attribut doit par défaut être "true" dans tous les cas, mais il y a des problèmes connus avec les paramètres des écrans de support sur différents téléphones, donc j'essaierais quand même.
De plus, comme David le suggère, compilez et ciblez toujours la version la plus récente de l'API Android, sauf si vous avez de bonnes raisons de ne pas le faire. Presque tous les SDK antérieurs à la version 2.2 ont un problème sérieux ou un comportement étrange; ce dernier SDK permet de les résoudre ou d'en dissimuler un grand nombre (mais pas tous). Vous pouvez (et devriez) utiliser l'outil Lint pour vérifier que votre application reste compatible avec l'API 4 lors de la préparation d'une version.
la source
Finlay, j'ai rencontré le même problème dans ma candidature. J'ai développé l'application Phone Gap pour
android:minSdkVersion="7" & android:targetSdkVersion="18"
laquelle est une version récente de la plate-forme Android.J'ai trouvé le problème avec Google Docs
Le problème est peut-être que j'ai écrit une fonction JS qui fonctionne
KEY-CODE
pour valider uniquement les alphabets et le numéro, mais le clavier a un code de touche différent spécialement pour le clavier de l'ordinateur et le clavier mobile. C'était donc mon problème.Je ne sais pas si ma réponse est correcte ou non et il est possible que la réponse ci-dessus soit plus simple, mais je vais essayer d'énumérer quelques points qui devraient être pris en compte pendant que nous construisons l'application.J'espère que vous suivrez ceci pour résoudre ce genre de problème.
Utilisez le
android:minSdkVersion="?"
selon vos besoins etandroid:targetSdkVersion="?"
devrait être le dernier dans lequel votre application cible. voir plusEssayez de n'ajouter que les autorisations qui seront utilisées dans votre application et supprimez toutes celles qui ne sont pas nécessaires.
Découvrez l'écran pris en charge par application
Peut-être avez-vous implémenté un code de costume ou un widget de costume qui n'a pas pu s'exécuter tardivement sur un appareil ou un onglet.Avant d'écrire le code long, essayez d'abord d'écrire du code bêta et testez-le si votre code fonctionnera sur tous les appareils ou non .
Et j'espère que Google publiera un outil qui pourra valider votre code avant de télécharger l'application et dit également que, pour une raison spécifique, nous ne sommes pas autorisés à exécuter votre application sur certains appareils afin que nous puissions le résoudre facilement.
la source
J'ai quelques suggestions:
Tout d'abord, vous semblez utiliser l'API 4 comme cible. AFAIK, il est recommandé de toujours compiler avec le dernier SDK et de le configurer en
android:minSdkVersion
conséquence.Dans cet esprit, rappelez-vous que cet
android:required
attribut a été ajouté dans l'API 5 :Ainsi, je vous suggère de compiler avec le SDK 15, également défini
targetSdkVersion
sur 15, et de fournir cette fonctionnalité.Cela montre également ici, sur le site Play, comme incompatible avec tout appareil que j'ai qui est (coïncidence?) Gingerbread (Galaxy Ace et Galaxy Y ici). Mais il se montre compatible avec mon Galaxy Tab 10.1 ( Honeycomb ), Nexus S et Galaxy Nexus (tous deux sur ICS ).
Cela m'a également laissé me demander, et c'est une supposition très sauvage, mais comme
android.hardware.faketouch
API11 + , pourquoi ne pas essayer de le supprimer juste pour voir si cela fonctionne? Ou peut-être que tout est lié de toute façon, puisque vous essayez d'utiliser des fonctionnalités (faketouch
) et l'required
attribut qui ne sont pas disponibles dans l'API 4. Et dans ce cas, vous devez compiler avec la dernière API.J'essaierais cela en premier et ne supprimerais l'
faketouch
exigence qu'en dernier recours (bien sûr) --- comme cela fonctionne lors du développement, je dirais que c'est juste une question de l'application compilée ne reconnaissant pas la fonctionnalité (en raison des exigences du SDK) , laissant ainsi des problèmes de filtrage inattendus sur Play.Désolé si cette hypothèse ne répond pas à votre question, mais il est très difficile de diagnostiquer ce type de problèmes et d'identifier la solution sans tester réellement. Ou du moins pour moi sans toute connaissance de la façon dont Play filtre vraiment les applications.
Bonne chance.
la source
<uses-feature>
balise, c'était une tentative de le rendre compatible avec plus d'appareils plutôt que moins. Je vais essayer de changer les balises de version du SDK, ce qui semble être l'approche la plus probable. Je dois ajouter que j'ai utiliséminSdkVersion="4"
parce que cette version n'impliquait plus certaines autorisations (lire l'état du téléphone, modifier la carte SD) dont mon application n'a pas besoin.android:minSdkVersion="5" android:targetSdkVersion="15"
n'a pas aidé non plus. J'ai contacté l'assistance aux développeurs de Google Play et j'espère qu'ils pourront me dire pourquoi. Ce serait bien si la raison du filtrage était indiquée sur la page de l'application Play.faketouch
commerequired= false
?<uses-feature>
balises, car l'assistance Google m'a dit que la raison pour laquelle il n'était pas disponible pour mon appareil était à cause de laandroid.hardware.faketouch
fonctionnalité. Cela semble ridicule, d'autant plus qu'une de mes versions précédentes n'avait pas non plus les<uses-feature>
balises, mais peu importe. J'attends leur réponse et je ne veux pas les confondre en téléchargeant une autre version. Ce serait bien s'il y avait un moyen de tester cela sans télécharger et publier à plusieurs reprises de nouveaux APK.Autorisations qui impliquent les exigences des fonctionnalités
Par exemple, la fonctionnalité android.hardware.bluetooth a été ajoutée dans Android 2.2 (API niveau 8), mais l'API bluetooth à laquelle elle fait référence a été ajoutée dans Android 2.0 (API niveau 5). Pour cette raison, certaines applications ont pu utiliser l'API avant d'avoir la possibilité de déclarer qu'elles avaient besoin de l'API via le système.
Pour éviter que ces applications ne soient rendues disponibles involontairement, 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. Par exemple, les applications qui utilisent Bluetooth doivent demander l'autorisation BLUETOOTH dans un élément - pour les applications héritées, Google Play suppose que la déclaration d'autorisation signifie que la fonctionnalité android.hardware.bluetooth sous-jacente est requise par l'application et configure le filtrage en fonction de cette fonctionnalité .
Le tableau ci-dessous répertorie les autorisations qui impliquent des exigences de fonctionnalité équivalentes à celles déclarées dans les éléments. Notez que les déclarations, y compris tout attribut android: required déclaré, ont toujours la priorité sur les fonctionnalités impliquées par les autorisations ci-dessous.
Pour toutes les autorisations ci-dessous, vous pouvez désactiver le filtrage basé sur la fonctionnalité implicite en déclarant explicitement la fonctionnalité implicite, dans un élément, 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:
http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions
la source
Pour donner une solution supplémentaire au problème ci-dessus 'Cette application est incompatible avec votre ...', permettez-moi de partager ma solution pour une cause de problème différente. J'ai essayé d'installer une application sur un appareil bas de gamme Samsung Galaxy Y (GT-S6350) et j'ai obtenu cette erreur du Play Store. Pour tester diverses configurations d'AndroidManifest, j'ai créé un compte et suivi la routine décrite dans https://stackoverflow.com/a/5449397/372838 jusqu'à ce que mon appareil apparaisse dans la liste des appareils pris en charge.
Il s'est avéré que de nombreux appareils deviennent incompatibles lorsque vous utilisez l'autorisation Appareil photo:
<uses-permission android:name="android.permission.CAMERA" />
Lorsque j'ai supprimé cette autorisation spécifique, l'application était disponible pour 1180 appareils au lieu de 870. J'espère que cela aidera quelqu'un
la source
Typique, je l'ai trouvé juste après avoir posé cette question avec désespoir; l'outil que je recherchais était:
la source
Bien qu'il y ait déjà pas mal de réponses, j'ai pensé que ma réponse pourrait aider certains qui ont exactement le même problème que le mien. Dans mon cas, le problème est causé par les autorisations suivantes ajoutées par la suggestion d'un réseau publicitaire:
La conséquence des autorisations ci-dessus est que les fonctionnalités suivantes sont ajoutées automatiquement:
La raison en est que "Google Play tente de découvrir les exigences de fonctionnalité implicites d'une application en examinant d'autres éléments déclarés dans le fichier manifeste, en particulier les éléments." Deux de mes appareils de test ne disposent pas des fonctionnalités ci-dessus, l'application est donc devenue incompatible avec elles. La suppression de ces autorisations a résolu le problème immédiatement.
la source
J'ai trouvé un autre moyen pour lequel ce problème se produit:
le système d'exploitation d'origine de mon téléphone LG était Froyo (Android 2.2) et a été mis à jour vers ICS (Android 4.0.4). Mais la console des développeurs de Google Play montre qu'elle détecte mon téléphone comme un appareil Froyo. (Google Play n'a pas autorisé le téléchargement de l'application en raison de la fausse `` incompatibilité '', mais il détecte toujours l'installation.)
Les paramètres du téléphone, dans «logiciel», indiquent ICS V4.0.4. Il semble que les informations du serveur Google Play pour le téléphone ne soient pas mises à jour pour refléter la mise à jour ICS sur l'appareil. Le manifeste de l'application minSDK est défini sur Honeycomb (3.0), donc bien sûr, Google Play filtre l'application.
Intérêt supplémentaire:l'application utilise In-app Billing V3. La première fois via IabHelper permet à l'application de faire des achats via le service Google Play. Mais une fois l'achat effectué, l'achat n'est PAS mis dans l'inventaire et IabHelper rapporte qu'aucun article n'est détenu. Les messages de débogage affichent un résultat "achat échoué" de l'achat même si la fenêtre Google Play annonce "achat réussi".
la source
J'ai eu le même problème. Cela a été causé par des codes et des numéros de version différents dans mon script de construction manifeste et gradle. Je l'ai résolu en supprimant le code de version et le numéro de version de mon manifeste et en laissant gradle s'en occuper.
la source
J'ai aussi eu le même problème. J'ai publié une application en mode Test créée avec React Native 59. elle n'était pas compatible pour certains testeurs. Le message n'était pas clair sur les raisons pour lesquelles l'application n'était pas compatible, après avoir compris que j'avais limité l'application pour qu'elle soit disponible uniquement pour certains pays. c'était le problème, mais comme je l'ai dit, le message n'était pas clair. dans Play Store WebApp, le message est: "cette application n'est pas compatible avec votre appareil". dans l'application mobile, le message "Cette application n'est pas disponible dans votre pays"
la source
Si vous êtes ici en 2020 et que vous pensez que l'appareil recevant le message d'erreur devrait être compatible:
[ https://support.getupside.com/hc/en-us/articles/226667067--Device-not-compatible-error-message-in-Google-Play-Store]
Voici un lien vers la page d'assistance officielle de Google que vous pouvez lier à vos utilisateurs pour savoir comment vider le cache: https://support.google.com/googleplay/answer/7513003
la source