Ich zögere, diese Frage zu stellen, da es so aussieht, als hätten viele Menschen ein ähnliches Problem, und dennoch habe ich keine Lösung gefunden, die meine spezielle Instanz löst.
Ich habe eine Android-App ( Link zur eigentlichen App ) entwickelt und in den Play Store hochgeladen. Der Play Store sagt
"This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."
Das ist natürlich das Telefon, auf dem ich die App entwickelt habe, also sollte sie kompatibel sein. Einige Leute mit anderen Geräten sagen, dass es kompatibel meldet, andere sagen, dass es inkompatibel meldet, aber ich kann keinen Trend finden. (Anscheinend kenne ich nicht sehr viele Leute mit Android-Geräten.)
Ich habe folgendes versucht:
Verschieben einer großen Datei aus dem
res/raw
Verzeichnis, wie in dieser Antwort vorgeschlagen . Die einzige Datei dort war eine ~ 700-kB-Textdatei, aber ich habe sieassets/
ohne erkennbare Änderung verschoben .Hinzufügen der folgenden zwei Funktionszusicherungen:
<uses-feature android:name="android.hardware.faketouch" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
Ich denke, dass mein Telefon möglicherweise nicht behauptet, die übliche
android.hardware.touchscreen
Funktion zu unterstützen, aber ohne erkennbare Änderung.
Beim Hochladen der APK in den Play Store ist der einzige Filter, der als aktiv gemeldet wird, die android.hardware.faketouch
Funktion.
Das Folgende ist die Ausgabe von 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'
und der Vollständigkeit halber meine Manifestdatei:
<?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>
Im Abschnitt "Geräteverfügbarkeit" des Play Store kann ich sehen, dass alle HTC-Geräte, einschließlich des Wildfire S, mit Ausnahme von "G1 (Forelle)" und "Touch Viva (Opal)" unterstützt werden. Eigentlich sehe ich, dass sowohl "Wildfire S (Marvel)" als auch "Wildfire S A515c (Marvelc)" als unterstützt aufgeführt sind, aber mein "Wildfire S A510b" wird nicht speziell erwähnt. Kann diese Art von Untermodellkennung so wichtig sein? Ich konnte problemlos mehrere andere Apps von Google Play auf mein Handy herunterladen.
Das einzige, was ich zu diesem Zeitpunkt noch nicht getan habe, ist, 4-6 Stunden nach dem Hochladen der neuesten Version (wie in diesem Kommentar ) zu warten , um festzustellen, ob immer noch angegeben ist, dass sie mit meinem Telefon nicht kompatibel ist. Auf der Play Store-Seite wird derzeit jedoch 1.0.2 angezeigt. Dies ist die neueste Version, die ich hochgeladen habe.
quelle
handleSilentException
Methode zu verwenden, um stillschweigend zu berichten. Zumindest erfahren Sie, auf welcher Hardware die App arbeitet.Antworten:
Die Antwort scheint sich ausschließlich auf die Anwendungsgröße zu beziehen. Ich habe eine einfache "Hallo Welt" -App mit nichts Besonderem in der Manifestdatei erstellt, sie in den Play Store hochgeladen und sie wurde als mit meinem Gerät kompatibel gemeldet.
Ich habe in dieser App nichts geändert, außer mehr Inhalt in das
res/drawable
Verzeichnis aufzunehmen. Als die.apk
Größe ungefähr 32 MB erreichte, meldete der Play Store, dass meine App nicht mit meinem Telefon kompatibel war.Ich werde versuchen, den Google-Entwickler-Support zu kontaktieren und um Klärung des Grundes für dieses Limit zu bitten.
UPDATE : Hier ist die Antwort des Google-Entwickler-Supports darauf:
Am Ende löste ich mein Problem, indem ich alle PNG-Dateien mit einem kleinen Qualitätsverlust in JPG konvertierte. Die
.apk
Datei ist jetzt 28 MB groß und liegt damit unter dem Schwellenwert, den Google Play für mein Telefon erzwingt.Ich habe auch alles entfernt
<uses-feature>
und habe jetzt genau das:quelle
Ich bin auch darauf gestoßen - ich habe meine gesamte Entwicklung auf einem Lenovo IdeaTab A2107A-F durchgeführt und konnte darauf Entwicklungs-Builds ausführen und sogar signierte APKs (installiert mit
adb install
) ohne Probleme veröffentlichen. Nachdem es im Alpha-Testmodus veröffentlicht und bei Google Play verfügbar war, erhielt ich die Fehlermeldung "Inkompatibel mit Ihrem Gerät".Es stellte sich heraus, dass ich
AndroidManifest.xml
aus einem Tutorial Folgendes in mein Tutorial eingefügt hatte:Nun, das Lenovo IdeaTab A2107A-F hat keine Autofokus-Kamera (was ich unter http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611 unter Nachteile gelernt habe : Es fehlt die Autofokus-Kamera). Unabhängig davon, ob ich diese Funktion verwendet habe, hat Google Play Nein gesagt. Nachdem das entfernt wurde, habe ich meine APK neu erstellt, auf Google Play hochgeladen und sicher war mein IdeaTab jetzt in der Liste der kompatiblen Geräte.
Überprüfen Sie also alle
<uses-feature>
und überprüfen Sie erneut, ob Sie das Web kopiert und eingefügt haben. Wahrscheinlich haben Sie eine Funktion angefordert, die Sie nicht einmal verwenden.quelle
Dieses Problem trat auch bei der Entwicklung einer Anwendung für einen Kunden auf, der Videos offline über seine Anwendung verfügbar haben wollte. Ich habe einen Blogpost darüber geschrieben, warum die App, an der ich monatelang gearbeitet habe, nicht im Play Store für mein Gerät angezeigt wird ( Beitrag finden Sie hier ). Ich fand das gleiche wie @Greg Hewgill gefunden: Cache-Partitionsbeschränkungen auf einigen Geräten .
Die Reise hat für mich dort nicht aufgehört. Der Kunde wollte diese Videos in der Anwendung haben und wollte nicht, dass die Qualität des Videos verringert wird. Nach einigen Recherchen stellte ich fest, dass die Verwendung von Erweiterungsdateien die perfekte Lösung für unser Problem ist.
Um mein Wissen mit der Android-Community zu teilen, hielt ich auf der droidconNL 2012 einen Vortrag über Erweiterungsdateien. Ich habe eine Präsentation und einen Beispielcode erstellt, um zu veranschaulichen, wie einfach es sein kann, Erweiterungsdateien zu verwenden. Wenn Sie Erweiterungsdateien zur Lösung dieses Problems verwenden möchten, lesen Sie den Beitrag mit der Präsentation und dem Beispielcode
quelle
Möglicherweise möchten Sie versuchen, das Support-Screens-Attribut festzulegen:
Das Wildfire hat einen kleinen Bildschirm, und laut Dokumentation sollte dieses Attribut in allen Fällen standardmäßig "true" sein. Es sind jedoch Probleme mit den Einstellungen für Unterstützungsbildschirme auf verschiedenen Telefonen bekannt. Daher würde ich dies trotzdem versuchen.
Außerdem - wie David vorschlägt - kompilieren und zielen Sie immer gegen die aktuellste Version der Android-API, es sei denn, Sie haben starke Gründe, dies nicht zu tun. Nahezu jedes SDK vor 2.2 weist ein ernstes Problem oder ein seltsames Verhalten auf. Das letztere SDK hilft dabei, viele (wenn auch nicht alle) von ihnen zu lösen oder zu vertuschen. Sie können (und sollten) das Lint-Tool verwenden, um zu überprüfen, ob Ihre App mit API 4 kompatibel bleibt, wenn Sie eine Version vorbereiten.
quelle
Finlay, ich habe in meiner Bewerbung das gleiche Problem festgestellt. Ich habe die Phone Gap App entwickelt, für
android:minSdkVersion="7" & android:targetSdkVersion="18"
die es sich um die neueste Version der Android-Plattform handelt.Ich habe das Problem mithilfe von Google Text & Tabellen gefunden
Möglicherweise ist das Problem, dass ich eine JS-Funktion geschrieben habe, mit der
KEY-CODE
nur Alphabete und Zahlen überprüft werden können, die Tastatur jedoch einen anderen Tastencode speziell für Computertastaturen und mobile Tastaturen hat. Das war also mein Problem.Ich bin mir nicht sicher, ob meine Antwort richtig ist oder nicht, und es ist möglich, dass die obige Antwort lächelnder ist, aber ich werde versuchen, einige Punkte aufzulisten, die beim Erstellen der App von Bedeutung sein sollten. Ich hoffe, Sie folgen diesen Anweisungen Lösen Sie diese Art von Problem.
Verwenden Sie das
android:minSdkVersion="?"
gemäß Ihren Anforderungen undandroid:targetSdkVersion="?"
sollte das neueste sein, auf das Ihre App abzielt. Mehr sehenVersuchen Sie, nur die Berechtigungen hinzuzufügen, die in Ihrer Anwendung verwendet werden, und entfernen Sie alle unnötigen Berechtigungen.
Überprüfen Sie den unterstützten Bildschirm nach Anwendung
Möglicherweise haben Sie einen Kostümcode oder ein Kostüm-Widget implementiert, die auf einem Gerät oder einer Registerkarte nicht zu spät ausgeführt werden konnten. Versuchen Sie daher vor dem Schreiben des langen Codes zunächst, einen Beta-Code zu schreiben und zu testen, ob Ihr Code auf allen Geräten ausgeführt wird oder nicht .
Ich hoffe, dass Google ein Tool veröffentlicht, mit dem Sie Ihren Code vor dem Hochladen der App überprüfen können. Außerdem können wir Ihre App aus bestimmten Gründen nicht auf einem bestimmten Gerät ausführen, damit wir sie problemlos lösen können.
quelle
Ich habe ein paar Vorschläge:
Zunächst scheinen Sie API 4 als Ziel zu verwenden. AFAIK, es ist eine gute Praxis, immer mit dem neuesten SDK zu kompilieren und Ihr SDK entsprechend einzurichten
android:minSdkVersion
.Denken Sie vor diesem Hintergrund daran, dass das
android:required
Attribut in API 5 hinzugefügt wurde :Daher würde ich vorschlagen, dass Sie mit SDK 15 kompilieren, ebenfalls
targetSdkVersion
auf 15 setzen und diese Funktionalität bereitstellen.Hier auf der Play-Website wird auch angezeigt, dass es mit keinem Gerät kompatibel ist , das ich habe (Zufall?) Lebkuchen (Galaxy Ace und Galaxy Y hier). Aber es zeigt sich als kompatibel mit meinem Galaxy Tab 10.1 ( Honeycomb ), Nexus S und Galaxy Nexus (beide auf ICS ).
Das hat mich auch gefragt, und das ist eine sehr wilde Vermutung, aber da
android.hardware.faketouch
API11 + ist , warum versuchst du nicht, es zu entfernen, nur um zu sehen, ob es funktioniert? Oder vielleicht hängt das sowieso alles zusammen, da Sie versuchen, Features (faketouch
) und dasrequired
Attribut zu verwenden, die in API 4 nicht verfügbar sind. In diesem Fall sollten Sie mit der neuesten API kompilieren.Ich würde das zuerst versuchen und die
faketouch
Anforderung nur als letzten Ausweg entfernen (natürlich) - da es bei der Entwicklung funktioniert, würde ich sagen, dass es nur darum geht, dass die kompilierte App die Funktion nicht erkennt (aufgrund der SDK-Anforderungen). Dadurch bleiben unerwartete Filterprobleme bei Play.Es tut uns leid, wenn diese Vermutung Ihre Frage nicht beantwortet, aber es ist sehr schwierig, solche Probleme zu diagnostizieren und die Lösung zu finden, ohne sie tatsächlich zu testen. Oder zumindest für mich ohne das richtige Wissen darüber, wie Play Apps wirklich filtert.
Viel Glück.
quelle
<uses-feature>
Tags, das war ein Versuch, es mit mehr Geräten als mit weniger kompatibel zu machen. Ich werde versuchen, SDK-Versions-Tags zu ändern, das scheint der wahrscheinlichste Ansatz zu sein. Ich sollte hinzufügen, dass ich verwendet habe,minSdkVersion="4"
weil diese Version nicht mehr einige Berechtigungen (Telefonstatus lesen, SD-Karte ändern) impliziert, die meine App nicht benötigt.android:minSdkVersion="5" android:targetSdkVersion="15"
hat auch nicht geholfen. Ich habe den Support von Google Play-Entwicklern kontaktiert und hoffe, dass sie mir sagen können, warum. Es wäre sicher schön, wenn der Grund für das Filtern auf der Play App-Seite angezeigt würde.faketouch
alsrequired= false
einzustellen?<uses-feature>
Tags entfernt, da mir der Google-Support mitgeteilt hat, dass die Funktion für mein Gerät aufgrund derandroid.hardware.faketouch
Funktion nicht verfügbar war . Das scheint lächerlich, zumal eine meiner vorherigen Versionen auch keine<uses-feature>
Tags hatte, aber was auch immer. Ich warte auf ihre Antwort und möchte sie nicht durch das Hochladen einer weiteren Version verwirren. Es wäre schön, wenn es eine Möglichkeit gäbe, dies zu testen, ohne wiederholt neue APKs hochzuladen und zu veröffentlichen.Berechtigungen, die Funktionsanforderungen erfüllen
Beispiel: Die Funktion android.hardware.bluetooth wurde in Android 2.2 (API-Stufe 8) hinzugefügt, die Bluetooth-API, auf die sie verweist, wurde jedoch in Android 2.0 (API-Stufe 5) hinzugefügt. Aus diesem Grund konnten einige Apps die API verwenden, bevor sie deklarieren konnten, dass sie die API über das System benötigen.
Um zu verhindern, dass diese Apps unbeabsichtigt verfügbar gemacht werden, geht Google Play davon aus, dass bestimmte hardwarebezogene Berechtigungen darauf hinweisen, dass die zugrunde liegenden Hardwarefunktionen standardmäßig erforderlich sind. Beispielsweise müssen Anwendungen, die Bluetooth verwenden, die BLUETOOTH-Berechtigung in einem Element anfordern. Bei älteren Apps geht Google Play davon aus, dass die zugrunde liegende Funktion android.hardware.bluetooth von der Anwendung benötigt wird, und richtet die Filterung basierend auf dieser Funktion ein .
In der folgenden Tabelle sind Berechtigungen aufgeführt, die Funktionsanforderungen implizieren, die den in Elementen deklarierten entsprechen. Beachten Sie, dass Deklarationen, einschließlich aller deklarierten Attribute für android: required, immer Vorrang vor Funktionen haben, die durch die folgenden Berechtigungen impliziert werden.
Für jede der folgenden Berechtigungen können Sie die Filterung basierend auf dem implizierten Feature deaktivieren, indem Sie das implizite Feature explizit in einem Element mit dem Attribut android: required = "false" deklarieren. Um beispielsweise eine Filterung basierend auf der CAMERA-Berechtigung zu deaktivieren, fügen Sie diese Deklaration zur Manifestdatei hinzu:
http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions
quelle
Um eine zusätzliche Lösung für das oben genannte Problem "Diese App ist nicht mit Ihrem ... kompatibel" zu geben, möchte ich meine Lösung für eine andere Problemursache mitteilen. Ich habe versucht, eine App auf einem Low-End-Gerät des Samsung Galaxy Y (GT-S6350) zu installieren, und habe diesen Fehler im Play Store erhalten. Um verschiedene AndroidManifest-Konfigurationen zu testen, habe ich ein Konto erstellt und die unter https://stackoverflow.com/a/5449397/372838 beschriebene Routine befolgt, bis mein Gerät in der Liste der unterstützten Geräte angezeigt wurde.
Es stellte sich heraus, dass viele Geräte nicht mehr kompatibel sind, wenn Sie die Kamera-Berechtigung verwenden:
<uses-permission android:name="android.permission.CAMERA" />
Als ich diese spezielle Berechtigung entfernte, war die Anwendung für 1180 Geräte anstelle von 870 verfügbar. Ich hoffe, sie hilft jemandem
quelle
Typisch, fand es direkt nach dem Posten dieser Frage in der Verzweiflung; Das Werkzeug, das ich suchte, war:
quelle
Obwohl es bereits einige Antworten gibt, dachte ich, meine Antwort könnte einigen helfen, die genau das gleiche Problem haben wie ich. In meinem Fall wird das Problem durch die folgenden Berechtigungen verursacht, die auf Vorschlag eines Werbenetzwerks hinzugefügt wurden:
Die oben genannten Berechtigungen haben zur Folge, dass die folgenden Funktionen automatisch hinzugefügt werden:
Der Grund dafür ist, dass "Google Play versucht, die impliziten Funktionsanforderungen einer Anwendung zu ermitteln, indem andere in der Manifestdatei deklarierte Elemente untersucht werden, insbesondere Elemente." Zwei meiner Testgeräte verfügen nicht über die oben genannten Funktionen, sodass die App nicht mehr mit ihnen kompatibel ist. Durch das Entfernen dieser Berechtigungen wurde das Problem sofort behoben.
quelle
Ich habe eine zusätzliche Möglichkeit gefunden, wie dieses Problem auftritt:
Das ursprüngliche Betriebssystem meines LG-Telefons war Froyo (Android 2.2) und wurde auf ICS (Android 4.0.4) aktualisiert. Die Google Play-Entwicklerkonsole zeigt jedoch, dass mein Telefon als Froyo-Gerät erkannt wird. (Google Play hat das Herunterladen der App aufgrund der falschen "Inkompatibilität" nicht zugelassen, erkennt die Installation jedoch trotzdem.)
Die Einstellungen des Telefons in "Software" zeigen ICS V4.0.4. Es scheint, dass die Google Play-Serverinformationen für das Telefon nicht aktualisiert werden, um das ICS-Update auf dem Gerät widerzuspiegeln. Das App-Manifest minSDK ist auf Honeycomb (3.0) eingestellt, daher filtert Google Play die App natürlich heraus.
Von zusätzlichem Interesse:Die App verwendet In-App Billing V3. Beim ersten Mal über IabHelper kann die App über den Google Play-Dienst einkaufen. Nach dem Kauf wird der Kauf jedoch NICHT in das Inventar aufgenommen, und IabHelper meldet, dass keine Artikel im Besitz sind. Debug-Meldungen zeigen das Ergebnis "Kauf fehlgeschlagen" beim Kauf an, obwohl im Google Play-Fenster "Kauf erfolgreich" angezeigt wird.
quelle
Ich hatte das gleiche Problem. Dies wurde dadurch verursacht, dass mein Manifest und mein Gradle-Build-Skript unterschiedliche Versionscodes und -nummern enthielten. Ich habe das Problem behoben, indem ich den Versionscode und die Versionsnummer aus meinem Manifest entfernt und gradle sich darum kümmern ließ.
quelle
Ich hatte auch das gleiche Problem. Ich habe eine App im Testmodus veröffentlicht, die mit React Native 59 erstellt wurde. Sie war für bestimmte Tester nicht kompatibel. Die Nachricht war nicht klar, warum die App nicht kompatibel ist, nachdem ich herausgefunden hatte, dass ich die App so eingeschränkt habe, dass sie nur für ein bestimmtes Land verfügbar ist. Das war das Problem, aber wie gesagt, die Nachricht war nicht klar. In der Play Store WebApp lautet die Meldung: "Diese App ist nicht mit Ihrem Gerät kompatibel." in der mobilen App die Meldung "Diese App ist in Ihrem Land nicht verfügbar"
quelle
Wenn Sie 2020 hier sind und der Meinung sind, dass das Gerät, das die Fehlermeldung erhält, kompatibel sein sollte:
[ https://support.getupside.com/hc/en-us/articles/226667067--Device-not-compatible-error-message-in-Google-Play-Store]
Hier ist ein Link zur offiziellen Support-Seite von Google, auf der Sie auf Ihre Nutzer verweisen können, wie der Cache geleert wird: https://support.google.com/googleplay/answer/7513003
quelle