wake-up-neo.com

Warum meldet der Google Play Store, dass meine Android-App nicht mit meinem eigenen Gerät kompatibel ist?

Ich zögere, diese Frage zu stellen, weil es so aussieht, als ob viele Leute ein ähnliches Problem haben und ich dennoch keine Lösung gefunden habe, die meine spezielle Instanz löst.

Ich habe eine Android-App ( Link zur aktuellen 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."

Natürlich ist das das Telefon, auf dem ich die App entwickelt habe, daher solltekompatibel sein. Einige Leute mit anderen Geräten sagen, dass es kompatibel ist, andere sagen, dass es inkompatibel ist, aber ich kann keinen Trend feststellen. (Anscheinend kenne ich nicht sehr viele Leute mit Android-Geräten.)

Ich habe Folgendes versucht:

  • verschieben einer umfangreichen Datei aus dem Verzeichnis res/raw, wie von diese Antwort vorgeschlagen. Die einzige Datei darin war eine ~ 700 kB große Textdatei, aber ich habe sie ohne erkennbare Änderung nach assets/ 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 wird nur die Funktion Android.hardware.faketouch als aktiv gemeldet.

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 (Marvelc)" 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 Untermodellidentifikator so wichtig sein? Ich konnte ohne Probleme mehrere andere Apps von Google Play auf mein Handy herunterladen.

Das Einzige, was ichnoch nichtgetan habe, ist, 4-6 Stunden nach dem Hochladen der neuesten Version (wie in dieser Kommentar ) zu warten, um zu sehen, ob immer noch angegeben wird, dass sie mit nicht kompatibel ist mein Telefon. Auf der Play Store-Seite wird derzeit jedoch 1.0.2 angezeigt. Dies ist die neueste Version, die ich hochgeladen habe.

86
Greg Hewgill

Die Antwort scheint nur auf die Anwendungsgröße bezogen zu sein. Ich habe eine einfache "Hallo Welt" -App mit nichts Besonderem in der Manifestdatei erstellt, sie in den Play Store hochgeladen und als mit meinem Gerät kompatibel gemeldet.

Ich habe in dieser App nichts geändert, außer dem Hinzufügen von mehr Inhalt in das res/drawable-Verzeichnis. Als die .apk-Größe ungefähr 32 MB erreichte, meldete der Play Store, dass meine App mit meinem Telefon nicht kompatibel war.

Ich werde versuchen, mit dem Google-Entwickler-Support Kontakt aufzunehmen und um Erläuterung des Grunds für dieses Limit zu bitten.

UPDATE: Hier ist eine Antwort des Google Developer Support:

Vielen Dank für Ihre Nachricht. Derzeit beträgt die maximale Dateigröße für das Hochladen einer App in Google Play etwa 50 MB.

Einige Geräte verfügen jedoch möglicherweise über eine Cache-Partition von weniger als 50 MB, wodurch die App für Benutzer nicht verfügbar ist. Einige HTC Wildfire-Geräte sind beispielsweise für 35-40 MB Cache-Partitionen bekannt. Wenn Google Play ein Gerät identifizieren kann, dessen Cache nicht groß genug ist, um die App zu speichern, wird es möglicherweise für den Nutzer nicht angezeigt.

Am Ende habe ich mein Problem gelöst, indem ich alle PNG-Dateien in JPG konvertiert habe, mit einem geringen Qualitätsverlust. Die .apk-Datei hat jetzt 28 MB, was unter dem Schwellenwert liegt, den Google Play für mein Telefon durchsetzt.

Ich habe auch alle <uses-feature>-Sachen entfernt, und jetzt habe ich genau das:

<uses-sdk Android:minSdkVersion="4" Android:targetSdkVersion="15" />
82
Greg Hewgill

Ich bin auch auf dieses Thema gestoßen - ich habe meine gesamte Entwicklung auf einem Lenovo IdeaTab A2107A-F durchgeführt und konnte darauf Entwicklungsbausteine ​​ausführen und sogar signierte APKs (installiert mit adb install) ohne Probleme veröffentlichen. Nachdem es im Alpha-Testmodus veröffentlicht wurde und in Google Play verfügbar war, wurde die Fehlermeldung "Inkompatibel mit Ihrem Gerät" angezeigt.

Es stellte sich heraus, dass ich in meinem AndroidManifest.xml Folgendes aus einem Tutorial eingefügt hatte:

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

Nun, das Lenovo IdeaTab A2107A-F hat keine Autofokus-Kamera (was ich aus http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611 gelernt habe) ). Unabhängig davon, ob ich diese Funktion verwendet habe, sagte Google Play nein. Nachdem das entfernt wurde, baute ich mein APK neu auf, lud es bei Google Play hoch und mein IdeaTab war tatsächlich in der Liste der kompatiblen Geräte.

Überprüfen Sie also jeden <uses-feature> noch einmal, und prüfen Sie erneut, ob Sie das Kopieren und Einfügen aus dem Web-Check durchgeführt haben. Wahrscheinlich haben Sie eine Funktion angefordert, die Sie nicht einmal nutzen.

14
Joe

Dieses Problem ist auch bei der Entwicklung einer Anwendung für einen Kunden aufgetreten, der Videos offline aus seiner Anwendung verfügbar machen wollte. Ich habe einen Blogpost geschrieben, warum die App, an der ich monatelang gearbeitet habe, für mein Gerät nicht im Play Store angezeigt würde ( post finden Sie hier ). Ich fand das gleiche wie @Greg Hewgill fand: Cache-Partitionseinschränkungen auf einigen Geräten.

Die Reise hat für mich dort nicht angehalten. Der Kunde wollte diese Videos in der Anwendung haben und wollte nicht, dass die Videoqualität abnimmt. Nach einigen Recherchen fand ich heraus, dass die Verwendung von Erweiterungsdateien die perfekte Lösung für unser Problem war.

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 Beispielcode erstellt, um zu zeigen, wie einfach es ist, Erweiterungsdateien zu verwenden. Für alle, die Erweiterungsdateien verwenden möchten, um dieses Problem zu lösen, können Sie den Beitrag mit der Präsentation und dem Beispielcode

10
Ali Derbane

Finlay, ich habe in meinem Antrag das gleiche Problem gesehen. Ich habe die Phone Gap App für .__ entwickelt. Android:minSdkVersion="7" & Android:targetSdkVersion="18" ist die aktuelle Version der Android-Plattform. 

Ich habe das Problem mit Google Docs gefunden.

Möglicherweise gibt es ein Problem, dass ich einige JS-Funktionen geschrieben habe, die mit KEY-CODE arbeiten, um nur Alphabete und Zahlen zu bestätigen, aber die Tastatur hat einen anderen Tastencode, der speziell für die Computertastatur und die Tastatur der Tastatur geeignet ist. Das war also mein Problem.

Ich bin mir nicht sicher, ob meine Antwort richtig ist oder nicht, und es könnte möglich sein, dass es sich um eine übergeordnete Antwort handelt, aber ich werde versuchen, einige Punkte aufzulisten, die bei der Erstellung der App beachtet werden sollten. Ich hoffe, Sie folgen diesem lösen Sie diese Art von Problem. 

  • Verwenden Sie den Android:minSdkVersion="?" entsprechend Ihrer Anforderung. Der Android:targetSdkVersion="?" sollte der neueste sein, auf den Ihre App ausgerichtet werden soll. Mehr sehen

  • Versuchen Sie, nur die Berechtigung hinzuzufügen, die in Ihrer Anwendung verwendet wird, und entfernen Sie alle unnötigen Berechtigungen.

  • Checken Sie den unterstützten Bildschirm nach Anwendung aus 

    <supports-screens 
    Android:anyDensity="true"
    Android:largeScreens="true"
    Android:normalScreens="true"
    Android:resizeable="true"
    Android:smallScreens="true"
    Android:xlargeScreens="true"/>
    
  • Möglicherweise haben Sie einen Kostümcode oder ein Kostüm-Widget implementiert, das nicht in der Lage ist, in einem Gerät oder Tab zu spät zu laufen. Versuchen Sie daher, vor dem Schreiben des langen Codes Beta-Code zu schreiben und zu testen, ob Ihr Code auf allen Geräten ausgeführt wird .

  • Ich hoffe, dass Google ein Tool veröffentlicht, mit dem Sie Ihren Code vor dem Hochladen der App überprüfen können. Außerdem wird angegeben, dass wir Ihre App aus bestimmten Gründen nicht auf einem Gerät ausführen dürfen, um sie leicht lösen zu können.

7
Chintan Khetiya

Möglicherweise möchten Sie das Attribut Unterstützungsbildschirme ausprobieren und festlegen:

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

Der Wildfire hat einen kleinen Bildschirm, und laut der Dokumentation sollte dieses Attribut in allen Fällen standardmäßig "true" sein. Es gibt jedoch bekannte Probleme mit den Einstellungen der Unterstützungsbildschirme auf verschiedenen Telefonen. Ich würde es also trotzdem versuchen.

Außerdem, wie David vorschlägt, kompilieren und zielen Sie immer auf die aktuellste Version der Android-API ab, es sei denn, Sie haben starke Gründe, dies nicht zu tun. So ziemlich jedes SDK vor 2.2 hat ein ernstes Problem oder seltsames Verhalten. Letzteres SDK hilft dabei, viele (wenn auch nicht alle) von ihnen aufzulösen oder zu vertuschen. Sie können (und sollten) das Lint-Tool verwenden, um zu überprüfen, ob Ihre App bei der Vorbereitung einer Version mit API 4 kompatibel bleibt.

7
Michael A.

Ich habe ein paar Vorschläge:

  1. Zunächst scheinen Sie API 4 als Ziel zu verwenden. AFAIK, es ist empfehlenswert, immer nach dem neuesten SDK zu kompilieren und Ihren Android:minSdkVersion entsprechend einzurichten.

  2. Beachten Sie, dass das Android:required-Attribut in API 5 hinzugefügt wurde :

Die Feature-Deklaration kann ein Android:required=["true" | "false"]-Attribut enthalten (wenn Sie mit API-Level 5 oder höher kompilieren), mit dem Sie angeben können, ob die Anwendung (...)

Daher würde ich vorschlagen, dass Sie gegen SDK 15 kompilieren, targetSdkVersion ebenfalls auf 15 setzen und diese Funktionalität bereitstellen.

Es wird auch hier auf der Play-Site als inkompatibel mit einem beliebigen Gerät angezeigt, das (Zufall?) Lebkuchen (Galaxy Ace und Galaxy) ist 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 gewundert, und dies ist eine sehr Wild-Vermutung, aber da Android.hardware.faketouchAPI11 + ist, warum sollten Sie es nicht entfernen, nur um zu sehen, ob es funktioniert? Oder vielleicht ist das alles ohnehin verwandt, da Sie versuchen, Funktionen (faketouch) und das required-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 letztes Mittel (natürlich) entfernen --- da es beim Entwickeln funktioniert, würde ich nur sagen, dass die kompilierte App das Feature nicht erkennt (aufgrund der SDK-Anforderungen) ), wodurch unerwartete Filterprobleme beim Abspielen entstehen.

Tut mir leid, wenn diese Vermutung Ihre Frage nicht beantwortet, aber es ist sehr schwierig, diese Art von Problemen zu diagnostizieren und die Lösung zu ermitteln, 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.

6
davidcesarino

Berechtigungen, die Anforderungen erfüllen

beispiel: Android.hardware.bluetooth wurde in Android 2.2 (API-Ebene 8) hinzugefügt, die Bluetooth-API, auf die es sich bezieht, wurde jedoch in Android 2.0 (API-Ebene 5) hinzugefügt. Aus diesem Grund konnten einige Apps die API verwenden, bevor sie erklären konnten, dass sie die API über das System benötigen.

Um zu verhindern, dass diese Apps ungewollt 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. Für ältere Apps setzt Google Play voraus, dass die Berechtigungsdeklaration bedeutet, dass die zugrunde liegende Android.hardware.bluetooth-Funktion für die Anwendung erforderlich ist, und dass eine Filterung auf Grundlage dieser Funktion eingerichtet wird .

In der nachstehenden Tabelle sind Berechtigungen aufgeführt, die Funktionsanforderungen beinhalten, die den in Elementen deklarierten entsprechen. Beachten Sie, dass Deklarationen, einschließlich deklarierter Android: required-Attribute, immer Vorrang vor Funktionen haben, für die die folgenden Berechtigungen gelten.

Für eine der folgenden Berechtigungen können Sie die Filterung basierend auf dem implizierten Feature deaktivieren, indem Sie das implizierte Feature explizit in einem Element mit dem Attribut Android: required = "false" deklarieren. Wenn Sie beispielsweise alle auf der CAMERA-Berechtigung basierenden Filter deaktivieren möchten, fügen Sie der Manifestdatei diese Deklaration hinzu:

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


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

http://developer.Android.com/guide/topics/manifest/uses-feature-element.html#permissions

6

Um eine zusätzliche Lösung für das oben genannte Problem 'Diese App ist inkompatibel mit Ihrem ...' zu geben, lassen Sie mich meine Lösung für eine andere Problemursache mitteilen. Ich habe versucht, eine App auf einem Samsung Galaxy Y-Endgerät (GT-S6350) zu installieren und habe diesen Fehler vom Play Store erhalten. Um verschiedene AndroidManifest-Konfigurationen zu testen, erstellte ich ein Konto und folgte der in https://stackoverflow.com/a/5449397/372838 beschriebenen Routine, 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, es hilft jemandem

5
dvtoever

Typisch, fand es direkt nach dem Verzweifeln dieser Frage; Das Werkzeug, nach dem ich gesucht habe, war:

$ aapt dump badging <my_apk.apk>
3
keldar

Obwohl es schon einige Antworten gibt, dachte ich, meine Antwort könnte einigen helfen, die genau das gleiche Problem haben wie meine. In meinem Fall wird das Problem durch die folgenden Berechtigungen verursacht, die auf Vorschlag eines Werbenetzwerks hinzugefügt werden:

<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />

Die oben genannten Berechtigungen haben zur Folge, dass die folgenden Funktionen automatisch hinzugefügt werden:

Android.hardware.LOCATION
Android.hardware.location.GPS
Android.hardware.location.NETWORK

Der Grund ist, dass "Google Play versucht, die implizierten Funktionsanforderungen einer Anwendung zu ermitteln, indem andere Elemente untersucht werden, die in der Manifest-Datei deklariert sind, insbesondere Elemente." mit ihnen. Durch das Entfernen dieser Berechtigungen wurde das Problem sofort gelöst.

3
Hong

Ich habe einen weiteren Weg gefunden, bei dem dieses Problem auftritt:
Das ursprüngliche Betriebssystem meines LG Telefons war Froyo (Android 2.2) und wurde auf ICS (Android 4.0.4) aktualisiert als Froyo-Gerät . (Google Play hat das Herunterladen der App wegen der falschen Inkompatibilität nicht zugelassen, aber die Installation wird immer noch erkannt.) 

Die Einstellungen des Telefons in "Software" zeigen ICS V4.0.4. Es scheint, dass die Google Play-Serverinformationen für das Telefon nicht aktualisiert wurden, um die Aktualisierung von ICS auf dem Gerät anzuzeigen. Das App-Manifest minSDK ist auf Honeycomb (3.0) festgelegt. Daher filtert Google Play die App natürlich heraus.


2
ajay1865

Ich hatte das gleiche Problem. Ursache waren unterschiedliche Versionscodes und -nummern in meinem Manifest- und Gradle-Build-Skript. Ich löste es, indem ich den Versionscode und die Versionsnummer aus meinem Manifest entfernte und gradle sich darum kümmern ließ.

0
John Moffitt