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/raw
katalogu, jak sugeruje ta odpowiedź . Jedyny taki plik zawierał plik tekstowy ~ 700 kB, ale przeniosłem go do niegoassets/
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.touchscreen
funkcję, ale znowu bez widocznych zmian.
Podczas przesyłania pakietu APK do Sklepu Play jedynym filtrem, który zgłasza jako aktywny, jest android.hardware.faketouch
funkcja.
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.
źródło
handleSilentException
metody do cichego raportowania. Powie ci przynajmniej, na jakim sprzęcie działa aplikacja.Odpowiedzi:
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/drawable
katalogu. Gdy.apk
rozmiar 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:
Ostatecznie rozwiązałem swój problem, konwertując wszystkie pliki PNG do JPG, z niewielką utratą jakości.
.apk
Plik 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" />
źródło
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.xml
poradniku 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.źródło
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
źródło
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.
źródło
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-CODE
aby 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 iandroid:targetSdkVersion="?"
powinien być najnowszy, na który Twoja aplikacja będzie kierowana. Zobacz więcejSpró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ć.
źródło
Mam kilka sugestii:
Po pierwsze, wydaje się, że Twoim celem jest API 4. AFAIK, dobrą praktyką jest zawsze kompilowanie z najnowszym SDK i odpowiednią konfigurację
android:minSdkVersion
.Mając to na uwadze, pamiętaj, że
android:required
atrybut został dodany w API 5 :Dlatego sugerowałbym, abyś kompilował z SDK 15, ustawionym również
targetSdkVersion
na 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
) irequired
atrybutu, 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
faketouch
wymaganie 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.
źródło
<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.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.faketouch
jakorequired= false
?<uses-feature>
tagi, ponieważ pomoc techniczna Google powiedziała mi, że powodem niedostępności dla mojego urządzenia była taandroid.hardware.faketouch
funkcja. 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.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
źródło
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
źródło
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>
źródło
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.
źródło
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”.
źródło
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ąć.
źródło
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”
źródło
Jeśli jesteś tutaj w 2020 roku i uważasz, że urządzenie otrzymujące komunikat o błędzie powinno być kompatybilne:
[ 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
źródło