Dlaczego sklep Google Play informuje, że moja aplikacja na Androida jest niekompatybilna z moim urządzeniem?

91

Waham się, czy zadać to pytanie, ponieważ wydaje się, że wiele osób ma podobny problem, a mimo to nie znalazłem rozwiązania, które rozwiązałoby mój konkretny przypadek.

Opracowałem aplikację na Androida ( łącze do właściwej aplikacji ) i umieściłem ją w sklepie Play. Sklep Play mówi

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

Oczywiście to telefon, na którym stworzyłem aplikację, więc powinna być kompatybilna. Niektórzy ludzie z innymi urządzeniami mówią, że zgłasza kompatybilność, inni mówią, że zgłasza niezgodność, ale nie mogę znaleźć żadnego trendu. (Najwyraźniej nie znam wielu osób z urządzeniami z Androidem).

Próbowałem następujących rzeczy:

  • przeniesienie dużego pliku z res/rawkatalogu, jak sugeruje ta odpowiedź . Jedyny taki plik zawierał plik tekstowy ~ 700 kB, ale przeniosłem go do niego assets/bez widocznych zmian.

  • dodanie następujących dwóch potwierdzeń funkcji:

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

    myśląc, że może mój telefon nie twierdzi, że obsługuje zwykłą android.hardware.touchscreenfunkcję, ale znowu bez widocznych zmian.

Podczas przesyłania pakietu APK do Sklepu Play jedynym filtrem, który zgłasza jako aktywny, jest android.hardware.faketouchfunkcja.

Oto wynik 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'

i dla kompletności, mój plik manifestu:

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

W sekcji „Dostępność urządzeń” w sklepie Play widzę, że obsługiwane są wszystkie urządzenia HTC, w tym Wildfire S, z wyjątkiem „G1 (pstrąg)” i „Touch Viva (opal)”, cokolwiek to jest. Właściwie widzę, że zarówno „Wildfire S (marvel)”, jak i „Wildfire S A515c (marvelc)” są wymienione jako obsługiwane, ale mój „Wildfire S A510b” nie jest szczegółowo wymieniony. Czy tego rodzaju identyfikator podmodelu może mieć aż tak duże znaczenie? Udało mi się bez problemu pobrać kilka innych aplikacji z Google Play na mój telefon.

Jedyne, czego nie zrobiłem w tym momencie, to odczekanie 4-6 godzin po przesłaniu najnowszej wersji (jak w tym komentarzu ), aby sprawdzić, czy nadal jest niezgodna z moim telefonem. Jednak na stronie sklepu Play jest obecnie wyświetlana wersja 1.0.2, czyli najnowsza, którą załadowałem.

Greg Hewgill
źródło
Coś, co pomogło mi w problemach związanych z telefonem, to konfiguracja ACRA: code.google.com/p/acra Uruchamiam ją przy pierwszym uruchomieniu aplikacji, aby pobrać pełną specyfikację telefonu i użyć tej handleSilentExceptionmetody do cichego raportowania. Powie ci przynajmniej, na jakim sprzęcie działa aplikacja.
Gavin Miller
2
@GavinMiller: Dziękuję, ale nie jestem pewien, czy to pomoże, gdy sklep Play w ogóle odmówi dostarczenia aplikacji.
Greg Hewgill
Może źle zrozumiałem twój komentarz: „Niektórzy ludzie z innymi urządzeniami mówią, że zgłasza kompatybilność, inni, że zgłasza niezgodność, ale nie mogę znaleźć żadnego trendu”. Jeśli wiele osób, których nie znasz, może pobrać i zainstalować aplikację, możesz zebrać większą pulę danych sprzętowych, aby spróbować stworzyć trend. W ten sposób złagodzono „nie znam wielu osób z urządzeniami z Androidem”. kwestia.
Gavin Miller
@GavinMiller: Jednak to tylko powie mi, na których urządzeniach Google Play uważa, że można go zainstalować, i nie dostarczy informacji o urządzeniach, na których Google Play uważa, że nie można go zainstalować. Poza tym, nawet wiedza z całą pewnością, które urządzenia są w porządku, a które nie, nie pomogłaby mi w rozwiązaniu tego problemu.
Greg Hewgill
sprawdź to rozwiązanie działa dla mnie stackoverflow.com/a/14020303/3392323
SAndroidD

Odpowiedzi:

84

Wydaje się, że odpowiedź dotyczy wyłącznie rozmiaru aplikacji. Utworzyłem prostą aplikację „hello world” bez żadnych specjalnych elementów w pliku manifestu, przesłałem ją do sklepu Play i zgłoszono, że jest zgodna z moim urządzeniem.

W tej aplikacji nie zmieniłem niczego poza dodaniem większej ilości treści do res/drawablekatalogu. Gdy .apkrozmiar osiągnął około 32 MB, Sklep Play zaczął zgłaszać, że moja aplikacja jest niekompatybilna z moim telefonem.

Spróbuję skontaktować się z pomocą techniczną Google dla programistów i poprosić o wyjaśnienie przyczyny tego ograniczenia.

UPDATE : Oto odpowiedź pomocy technicznej Google dla programistów:

Dziękuję za uwagę. Obecnie maksymalny rozmiar pliku, który można przesłać do Google Play, wynosi około 50 MB.

Jednak niektóre urządzenia mogą mieć partycję pamięci podręcznej mniejszą niż 50 MB, przez co aplikacja jest niedostępna do pobrania dla użytkowników. Na przykład niektóre urządzenia HTC Wildfire są znane z posiadania 35-40 MB partycji pamięci podręcznej. Jeśli Google Play jest w stanie zidentyfikować takie urządzenie, które nie ma pamięci podręcznej wystarczająco dużej, aby przechowywać aplikację, może odfiltrować ją tak, aby nie wyświetlała się użytkownikowi.

Ostatecznie rozwiązałem swój problem, konwertując wszystkie pliki PNG do JPG, z niewielką utratą jakości. .apkPlik jest teraz 28 MB, co jest poniżej progu cokolwiek Google Play jest egzekwowanie na moim telefonie.

Usunąłem też wszystkie <uses-feature>rzeczy, a teraz mam tylko to:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
Greg Hewgill
źródło
Bardzo ciekawe i cenne informacje. I tak denerwujące, że nie jest to nigdzie udokumentowane.
Michael A.
2
Rzeczywiście, nigdy nie wiedziałbym o problemie, gdybym nie miał telefonu Wildfire.
Greg Hewgill
Mam 3 gry: 32 MB, 35 MB i 44 MB. Mój własny HTC bravo widzi dwie pierwsze gry, a trzeciej nie widzi w sklepie. HTC Desire S mojego przyjaciela widzi tylko pierwszą grę. Więc najwyraźniej rozmiar gier powinien wynosić mniej niż 33 MB, aby były widoczne dla większości (?) Urządzeń. Niestety zobaczyłem tę odpowiedź zbyt późno i nie wiedziałem o problemie od miesięcy ... Byłem pewien, że zależy to od typu procesora urządzenia, obsługiwanej wersji OpenGL, ograniczeń ustawionych w manifeście czy czegoś takiego. Ech ...
iseeall
7
To szalone, że Google nie podaje przyczyny niezgodności w sklepie Play. Zawsze zakładałem, że przynajmniej twórcy aplikacji otrzymaliby te informacje i świadomie zdecydowaliby się nie obsługiwać mojego urządzenia. Jak ta sytuacja wyglądała tak długo?
Gerry,
1
@GregHewgill Hello Greg. Skontaktowałem się z pomocą techniczną Google w sprawie podobnego problemu. Ponieważ rozmiar mojej aplikacji wynosił zaledwie 5 MB, szukałem różnych opcji, dlaczego Google Play odfiltrował moją aplikację na określonym urządzeniu. Minęły 72 godziny, odkąd się z nimi skontaktowałem i nie wrócili z żadnym wyjaśnieniem. Czy istnieje inny sposób skontaktowania się z pomocą techniczną Google niż zwykły kontakt z nami?
hemanth kumar
16

Ja też się z tym spotkałem - cały program pracowałem na Lenovo IdeaTab A2107A-F i mogłem uruchamiać na nim kompilacje programistyczne, a nawet wydawać podpisane pliki APK (instalowane z adb install) bez żadnych problemów. Po opublikowaniu w trybie alfa i udostępnieniu w Google Play otrzymałem komunikat o błędzie „niezgodny z Twoim urządzeniem”.

Okazuje się, że umieściłem w moim AndroidManifest.xmlporadniku następującą treść:

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

No cóż, Lenovo IdeaTab A2107A-F nie ma aparatu z autofokusem (czego dowiedziałem się z http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611 , w sekcji Wady: brak aparatu z autofokusem). Niezależnie od tego, czy korzystałem z tej funkcji, Google Play powiedział, że nie. Po usunięciu odbudowałem pakiet APK, przesłałem go do Google Play i na pewno mój IdeaTab znalazł się teraz na liście kompatybilnych urządzeń.

Więc sprawdź <uses-feature>dokładnie co i jeśli robiłeś jakieś kopiowanie i wklejanie z sieci, sprawdź ponownie. Prawdopodobnie zażądałeś jakiejś funkcji, której nawet nie używasz.

Joe
źródło
4
Dziękuję Ci ! Używałem innego <uses-feature>: <uses-feature android: name = "android.hardware.camera2" /> I z tego powodu miałem urządzenia kompatybilne z ZERO. Usunąłem linię i mam teraz 10000.
Jack
Możesz ustawić go tak, aby nadal z niego korzystał, ale nie jest to wymagane: <uses-feature android: name = "android.hardware.camera.autofocus" android: required = "false" />
DrChandra
1
<uses-feature android: name = "android.hardware.camera2" /> sprawia, że ​​moja aplikacja jest niekompatybilna, więc nie mogłem jej znaleźć w sklepie playstore. Save my life
Anand Savjani,
11

Doświadczyłem tego problemu również podczas tworzenia aplikacji dla klienta, który chciał, aby filmy były dostępne offline z ich aplikacji. Napisałem post na blogu o tym, dlaczego aplikacja, nad którą pracowałem od miesięcy, nie pojawiła się w Sklepie Play na moje urządzenie ( post można znaleźć tutaj ). Znalazłem to samo, co @Greg Hewgill: ograniczenia partycji pamięci podręcznej na niektórych urządzeniach .

Tam moja podróż się nie zatrzymała. Klient chciał mieć te filmy w aplikacji i nie chciał obniżenia jakości wideo. Po kilku badaniach doszedłem do wniosku, że użycie plików rozszerzeń jest idealnym rozwiązaniem naszego problemu.

Aby podzielić się swoją wiedzą ze społecznością Androida, na droidconNL 2012 przeprowadziłem wykład na temat plików rozszerzeń. Stworzyłem prezentację i przykładowy kod, aby zilustrować, jak łatwo można zacząć korzystać z plików rozszerzeń. Każdy z was, który chce użyć plików rozszerzeń do rozwiązania tego problemu, może przeczytać post zawierający prezentację i przykładowy kod

Ali Derbane
źródło
4
Link do pomocy Google wspomniany w Twoim poście jest już nieaktualny. Nowy link to support.google.com/googleplay/android-developer/answer/… . Mam nadzieję, że zaktualizujesz artykuł o najnowszy link i przy okazji, fajny post. !!
Rohan Kandwal
7

Możesz spróbować ustawić atrybut support-screens:

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

Wildfire ma mały ekran i zgodnie z dokumentacją ten atrybut powinien domyślnie mieć wartość „true” we wszystkich przypadkach, ale są znane problemy z ustawieniami ekranów pomocniczych na różnych telefonach, więc i tak spróbuję tego.

Ponadto - jak sugeruje David - zawsze kompiluj i kieruj reklamy na najnowszą wersję Android API, chyba że masz mocne powody, aby tego nie robić. Prawie każdy pakiet SDK przed wersją 2.2 ma jakiś poważny problem lub dziwne zachowanie; te ostatnie SDK pomagają rozwiązać lub ukryć wiele (choć nie wszystkie) z nich. Możesz (i powinieneś) użyć narzędzia Lint, aby sprawdzić, czy Twoja aplikacja jest zgodna z API 4 podczas przygotowywania wydania.

Michael A.
źródło
Dziękuję, czekam na odpowiedź od zespołu pomocy Google dla programistów w sprawie mojego ostatniego zgłoszenia do pomocy. Spróbuję tego po otrzymaniu od nich odpowiedzi (nie chcę ich mylić, przesyłając kolejny plik APK). Poinformuje Cię, jak to się skończy.
Greg Hewgill
Mam nadzieję, że nie musisz czekać zbyt długo. Nie mają reputacji szybkich odpowiedzi. :-)
Michael A.
Chodziłem z nimi w tę iz powrotem kilka razy, ale moje ostatnie pytanie pozostało bez odpowiedzi, ponieważ pojawiłem się w 22 godzinach. To frustrujące, że trzeba czekać, ale przynajmniej nie jest to krytyczne dla misji ani nic takiego.
Greg Hewgill
Chciałem tylko poinformować, że znalazłem problem, zobacz moją odpowiedź na to pytanie. Dzięki za pomoc.
Greg Hewgill
7

Finlay, napotkałem ten sam problem w mojej aplikacji. Opracowałem aplikację Phone Gap, dla android:minSdkVersion="7" & android:targetSdkVersion="18"której jest najnowszą wersją platformy Android.

Znalazłem problem za pomocą Dokumentów Google

Problemem może być to, że napisałem jakąś funkcję JS, która działa, KEY-CODEaby sprawdzić tylko alfabety i cyfry, ale klawiatura ma inny kod klucza, specjalnie dla klawiatury komputera i klawiatury mobilnej. Więc to był mój problem.

Nie jestem pewien, czy moja odpowiedź jest poprawna, czy nie i może być bardziej uśmiechnięta, jeśli powyższa odpowiedź byłaby przyjemniejsza, ale spróbuję wymienić kilka punktów, które powinny być uważne podczas tworzenia aplikacji. rozwiązać tego rodzaju problem.

  • Użyj android:minSdkVersion="?"zgodnie z wymaganiami i android:targetSdkVersion="?"powinien być najnowszy, na który Twoja aplikacja będzie kierowana. Zobacz więcej

  • Spróbuj dodać tylko te uprawnienia, które będą używane w Twojej aplikacji i usuń wszystkie niepotrzebne.

  • Sprawdź obsługiwane ekrany według aplikacji

    <supports-screens 
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true"
    android:xlargeScreens="true"/>
    
  • Być może zaimplementowałeś jakiś kod kostiumu lub widżet kostiumu, który nie mógł działać późno na jakimś urządzeniu lub karcie, więc przed napisaniem długiego kodu najpierw spróbuj napisać jakiś kod beta i przetestuj go, czy twój kod będzie działał na wszystkich urządzeniach, czy nie .

  • Mam nadzieję, że Google opublikuje narzędzie, które może zweryfikować Twój kod przed przesłaniem aplikacji, a także powie, że z jakiegoś konkretnego powodu nie możemy uruchomić Twojej aplikacji na jakimś urządzeniu, abyśmy mogli łatwo go rozwiązać.

Chintan Khetiya
źródło
6

Mam kilka sugestii:

  1. Po pierwsze, wydaje się, że Twoim celem jest API 4. AFAIK, dobrą praktyką jest zawsze kompilowanie z najnowszym SDK i odpowiednią konfigurację android:minSdkVersion.

  2. Mając to na uwadze, pamiętaj, że android:requiredatrybut został dodany w API 5 :

Deklaracja funkcji może zawierać android:required=["true" | "false"]atrybut (jeśli kompilujesz na poziomie API 5 lub wyższym), który pozwala określić, czy aplikacja (...)

Dlatego sugerowałbym, abyś kompilował z SDK 15, ustawionym również targetSdkVersionna 15, i zapewniał tę funkcjonalność.

Pokazuje również tutaj, na stronie Play, jako niekompatybilne z jakimkolwiek urządzeniem, które mam, czyli (zbiegiem okoliczności?) Gingerbread (tutaj Galaxy Ace i Galaxy Y). Ale pokazuje się jako zgodny z moim Galaxy Tab 10.1 ( Honeycomb ), Nexus S i Galaxy Nexus (oba na ICS ).

To również sprawiło, że zacząłem się zastanawiać i jest to bardzo szalony domysł, ale skoro android.hardware.faketouch jest API11 + , dlaczego nie spróbujesz go usunąć tylko po to, aby sprawdzić, czy działa? A może to wszystko i tak jest powiązane, ponieważ próbujesz użyć funkcji ( faketouch) i requiredatrybutu, które nie są dostępne w API 4. W tym przypadku powinieneś skompilować się z najnowszym API.

Spróbowałbym tego najpierw i usunąłbym to faketouchwymaganie tylko w ostateczności (oczywiście) - ponieważ działa podczas programowania, powiedziałbym, że jest to tylko kwestia tego, że skompilowana aplikacja nie rozpoznaje funkcji (ze względu na wymagania SDK) , pozostawiając nieoczekiwane problemy z filtrowaniem w Play.

Przepraszamy, jeśli to przypuszczenie nie odpowiada na Twoje pytanie, ale bardzo trudno jest zdiagnozować tego rodzaju problemy i znaleźć rozwiązanie bez faktycznego testowania. A przynajmniej dla mnie bez odpowiedniej wiedzy o tym, jak Play naprawdę filtruje aplikacje.

Powodzenia.

davidcesarino
źródło
Dzięki, mam kilka konkretnych pomysłów. Początkowo nie miałem żadnych <uses-feature>tagów, to była próba dostosowania go do większej liczby urządzeń, a nie mniejszej. Spróbuję zmienić tagi wersji SDK, co wydaje się najbardziej prawdopodobnym podejściem. Powinienem dodać, że użyłem, minSdkVersion="4"ponieważ ta wersja nie implikowała już pewnych uprawnień (odczyt stanu telefonu, modyfikowanie karty SD), których moja aplikacja nie potrzebuje.
Greg Hewgill
Zmiana wersji SDK na android:minSdkVersion="5" android:targetSdkVersion="15"też nie pomogła. Skontaktowałem się z pomocą techniczną dla programistów Google Play i mam nadzieję, że powiedzą mi, dlaczego. Na pewno byłoby miło, gdyby powód filtrowania został wyświetlony na stronie aplikacji Play.
Greg Hewgill
Tak, byłoby wspaniale. W międzyczasie próbowałeś ustawić faketouchjako required= false?
davidcesarino
Najnowsza iteracja usuwa wszystkie <uses-feature>tagi, ponieważ pomoc techniczna Google powiedziała mi, że powodem niedostępności dla mojego urządzenia była ta android.hardware.faketouchfunkcja. Wydaje się to absurdalne, zwłaszcza że jedna z moich poprzednich wersji też nie miała <uses-feature>tagów, ale cokolwiek. Czekam na odpowiedź i nie chcę ich mylić, przesyłając kolejną wersję. Byłoby miło, gdyby istniał sposób na przetestowanie tego bez wielokrotnego przesyłania i publikowania nowych plików APK.
Greg Hewgill
Nie powiedziałbym śmiesznie, ponieważ jest to flaga dodana w późniejszych wersjach sdk (api 11), dlatego zasugerowałem kompilację i ukierunkowanie na api15 (pamiętaj, aby zmienić swój project.properties, a nie tylko manifest). Nadal jestem zaskoczony ustawieniem go jako wymaganego = false nie zadziałało.
davidcesarino
6

Aby zapewnić dodatkowe rozwiązanie powyższego problemu „Ta aplikacja jest niezgodna z Twoim ...”, pozwól mi udostępnić moje rozwiązanie z innej przyczyny. Próbowałem zainstalować aplikację na niższym urządzeniu Samsung Galaxy Y (GT-S6350) i otrzymałem ten błąd ze sklepu Play. Aby przetestować różne konfiguracje AndroidManifest, utworzyłem konto i postępowałem zgodnie z procedurą opisaną na https://stackoverflow.com/a/5449397/372838, aż moje urządzenie pojawiło się na liście obsługiwanych urządzeń.

Okazało się, że wiele urządzeń staje się niekompatybilnych podczas korzystania z uprawnienia Aparat:

<uses-permission android:name="android.permission.CAMERA" />

Kiedy usunąłem to zezwolenie, aplikacja była dostępna dla 1180 urządzeń zamiast 870. Mam nadzieję, że komuś pomoże

dvtoever
źródło
7
Może to pomoże: <uses-Permissions android: name = "android.permission.CAMERA" /> <uses-feature android: name = "android.hardware.camera" android: required = "false" />
user1205415
6

Uprawnienia, które implikują wymagania dotyczące funkcji

Na przykład funkcja android.hardware.bluetooth została dodana w systemie Android 2.2 (poziom API 8), ale interfejs API bluetooth, do którego się odnosi, został dodany w systemie Android 2.0 (poziom API 5). Z tego powodu niektóre aplikacje mogły korzystać z interfejsu API, zanim miały możliwość zadeklarowania, że ​​wymagają interfejsu API za pośrednictwem systemu.

Aby zapobiec przypadkowemu udostępnieniu tych aplikacji, Google Play zakłada, że ​​pewne uprawnienia związane ze sprzętem wskazują, że podstawowe funkcje sprzętowe są domyślnie wymagane. Na przykład aplikacje korzystające z Bluetooth muszą żądać pozwolenia BLUETOOTH w elemencie - w przypadku starszych aplikacji Google Play zakłada, że ​​deklaracja zgody oznacza, że ​​aplikacja wymaga podstawowej funkcji android.hardware.bluetooth i konfiguruje filtrowanie na podstawie tej funkcji .

W poniższej tabeli wymieniono uprawnienia, które implikują wymagania funkcji równoważne z zadeklarowanymi w elementach. Zwróć uwagę, że deklaracje, w tym zadeklarowany atrybut android: required, zawsze mają pierwszeństwo przed funkcjami implikowanymi przez poniższe uprawnienia.

W przypadku dowolnego z poniższych uprawnień można wyłączyć filtrowanie oparte na domniemanej funkcji, jawnie deklarując domniemaną funkcję w elemencie z atrybutem android: required = "false". Na przykład, aby wyłączyć filtrowanie na podstawie uprawnienia KAMERA, należy dodać następującą deklarację do pliku manifestu:

<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

OM PRAKASH SEERVI
źródło
Dziękuję Ci! Nie miałem pojęcia, że ​​uprawnienia do używania są domyślnie ustawione na wymaganą funkcję.
Jim Pekarek
3

Typowe, znalazłem je zaraz po wysłaniu tego pytania w rozpaczy; narzędziem, którego szukałem, było:

$ aapt dump badging <my_apk.apk>
keldar
źródło
Wygląda na to, że zamiast tego zamierzałeś zamieścić tę odpowiedź na stackoverflow.com/questions/16145927/ ...
Greg Hewgill
3

Chociaż odpowiedzi jest już sporo, pomyślałem, że moja odpowiedź może pomóc tym, którzy mają dokładnie ten sam problem co mój. W moim przypadku problem jest spowodowany następującymi uprawnieniami dodanymi na sugestię sieci reklamowej:

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

Konsekwencją powyższych uprawnień jest automatyczne dodawanie następujących funkcji:

android.hardware.LOCATION
android.hardware.location.GPS
android.hardware.location.NETWORK

Powodem jest to, że „Google Play próbuje wykryć domniemane wymagania dotyczące funkcji aplikacji, badając inne elementy zadeklarowane w pliku manifestu, w szczególności elementy”. Dwa z moich urządzeń testowych nie mają powyższych funkcji, więc aplikacja stała się z nimi niekompatybilna. Usunięcie tych uprawnień natychmiast rozwiązało problem.

Hong
źródło
2

Znalazłem dodatkowy sposób, w jaki pojawia się ten problem:
oryginalny system operacyjny mojego telefonu LG to Froyo (Android 2.2) i został zaktualizowany do ICS (Android 4.0.4). Ale konsola programistów Google Play pokazuje, że wykrywa mój telefon jako urządzenie Froyo. (Google Play nie zezwolił na pobranie aplikacji z powodu fałszywej „niekompatybilności”, ale w jakiś sposób nadal wykrywa instalację).

Ustawienia telefonu w „oprogramowaniu” pokazują ICS V4.0.4. Wygląda na to, że informacje o serwerze Google Play dla telefonu nie są aktualizowane, aby odzwierciedlić aktualizację ICS na urządzeniu. Manifest aplikacji minSDK jest ustawiony na Honeycomb (3.0), więc Google Play oczywiście odfiltrowuje aplikację.

Interesujące:
aplikacja korzysta z rozliczeń w aplikacji V3. Po raz pierwszy za pośrednictwem IabHelper umożliwia aplikacji dokonywanie zakupów za pośrednictwem usługi Google Play. Ale po dokonaniu zakupu zakup NIE jest umieszczany w ekwipunku, a IabHelper zgłasza, że ​​żadne przedmioty nie są własnością. Komunikaty debugowania pokazują wynik „zakup nie powiódł się”, mimo że w oknie Google Play jest komunikat „zakup udany”.

ajay1865
źródło
0

Miałem ten sam problem. Było to spowodowane posiadaniem różnych kodów wersji i numerów w moim manifeście i skrypcie kompilacji Gradle. Rozwiązałem to, usuwając kod wersji i numer wersji z mojego manifestu i pozwalając gradle się tym zająć.

John Moffitt
źródło
0

Ja też miałem ten sam problem. Opublikowałem aplikację w trybie testowym utworzoną w React Native 59. Nie była kompatybilna z pewnym testerem. Wiadomość nie była jasna, dlaczego aplikacja nie jest kompatybilna, po tym, jak zorientowałem się, że ograniczyłem aplikację, aby była dostępna tylko w określonym kraju. to był problem, ale jak powiedziałem, przesłanie nie było jasne. w Play Store WebApp pojawia się komunikat: „ta aplikacja nie jest zgodna z Twoim urządzeniem”. w aplikacji mobilnej komunikat „Ta aplikacja jest niedostępna w Twoim kraju”

devoka
źródło
0

Jeśli jesteś tutaj w 2020 roku i uważasz, że urządzenie otrzymujące komunikat o błędzie powinno być kompatybilne:

Wpadło na to kilka innych głównych aplikacji, w tym Instagram (instalacje 1 mld +) i Clash of Clans (instalacje ponad 100 mln). Wygląda na to, że jest to problem z systemem operacyjnym Google Android.

Aby naprawić komunikat o błędzie „Twoje urządzenie nie jest zgodne z tą wersją”, wyczyść pamięć podręczną Sklepu Google Play, a następnie wyczyść dane. Następnie uruchom ponownie Sklep Google Play i spróbuj ponownie zainstalować aplikację.

[ https://support.getupside.com/hc/en-us/articles/226667067--Device-not-compatible-error-message-in-Google-Play-Store]

Oto link do oficjalnej strony pomocy Google, którą możesz połączyć ze swoimi użytkownikami, aby dowiedzieć się, jak wyczyścić pamięć podręczną: https://support.google.com/googleplay/answer/7513003

blub
źródło