2012-07-27 10 views
36

Właśnie wydałem moją aplikację na telefony i tablety, ale nie wyświetla się ona w Google Play na tablety.Dlaczego moja aplikacja nie wyświetla się na tabletach w Google Play?

sprawdzone na Nexusa 7 i Asus eeeePad

To co mam w pliku manifestu

<compatible-screens> 
    <!--no small size screens --> 

    <!--Only hdpi and xhdpi for normal size screens --> 
    <screen android:screenSize="normal" android:screenDensity="mdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="hdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="xhdpi" /> 

    <!-- all large size screens --> 
    <screen android:screenSize="large" android:screenDensity="ldpi" /> 
    <screen android:screenSize="large" android:screenDensity="mdpi" /> 
    <screen android:screenSize="large" android:screenDensity="hdpi" /> 
    <screen android:screenSize="large" android:screenDensity="xhdpi" /> 

    <!-- all xlarge size screens --> 
    <screen android:screenSize="xlarge" android:screenDensity="ldpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" /> 
</compatible-screens> 

używa SDK tag

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" /> 

uprawnienia

<uses-permission android:name="com.android.vending.BILLING" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.BROADCAST_STICKY" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<permission android:name="com.myapp.something.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 

Po wyraźnym dodanie tagu use-feature do fałszu zaczęło się pojawiać na tablecie Asus eeeePad, ale nadal nie wyświetla się w Nexusie 7. Oto, co widzę w konsoli programisty

Ta aplikacja jest dostępna tylko dla urządzeń z tymi funkcjami, zgodnie z definicją w aplikacji oczywisty. ekranu gęstości: LARGE,MDPI LARGE,HDPI LARGE,LDPI LARGE,XHDPI XLARGE,MDPI XLARGE,HDPI XLARGE,LDPI XLARGE,XHDPI NORMAL,MDPI NORMAL,HDPI NORMAL,XHDPI Wymagane funkcje urządzenia

android.hardware.screen.portrait 
android.hardware.touchscreen 
+4

Nie nie wydaje się być niczym złym w tym portio n twojego manifestu, więc Twój problem leży gdzie indziej (np. [uprawnienia wiążące się z wymaganiami dotyczącymi wyposażenia sprzętowego] (http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions)). – CommonsWare

+2

Jak dawno temu wydałeś swoją aplikację?Jeśli nie było tak dawno temu, poczekaj chwilę, a następnie sprawdź ponownie, czy rynek twierdzi, że Twoja aplikacja jest kompatybilna, powinna działać. – 0gravity

+0

Zostało już ponad 24 godziny – Saqib

Odpowiedz

40

W końcu dodałem specjalny przypadek dla Nexusa 7 z tagiem <compatible-screens>. Jak Nexus 7 ma tvdpi gęstość

<compatible-screens> 
    <!--no small size screens --> 


    <!--all normal size screens --> 
    <screen android:screenSize="normal" android:screenDensity="ldpi" /> 
    <screen android:screenSize="normal" android:screenDensity="mdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="hdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="xhdpi" /> 

    <!-- all large size screens --> 
    <screen android:screenSize="large" android:screenDensity="ldpi" /> 
    <screen android:screenSize="large" android:screenDensity="mdpi" /> 
    <screen android:screenSize="large" android:screenDensity="hdpi" /> 
    <screen android:screenSize="large" android:screenDensity="xhdpi" /> 

    <!-- all xlarge size screens --> 
    <screen android:screenSize="xlarge" android:screenDensity="ldpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" /> 

    <!-- Special case for Nexus 7 --> 
    <screen android:screenSize="large" android:screenDensity="213" /> 

</compatible-screens> 

UPDATE:

Dla urządzeń xxhdpi można użyć 480 jako wartość int

 <screen android:screenSize="normal" android:screenDensity="480" /> 
    <screen android:screenSize="large" android:screenDensity="480" /> 
    <screen android:screenSize="xlarge" android:screenDensity="480" />` 
+0

Dziękuję za tę odpowiedź. Wystąpiłam z tym problemem i nie mogłam zrozumieć, dlaczego moja aplikacja nie była dostępna na Nexusie 7. Poniższe linki zawierają więcej informacji. https://plus.google.com/106300001086744879268/posts/Wa9xtQjZHJx http://code.google.com/p/android/issues/detail?id=34076 –

+1

Próbowałem tego, ale usunięto niektóre ustawienia domyślne obsługiwane rozmiary. Jak mogę dodać obsługę Nexusa 7 przy zachowaniu wszystkich domyślnych rozmiarów lub czy istnieje sposób na dodanie wszystkich rozmiarów (małe +) do tego, co zostało zamieszczone powyżej? – Inator

+1

@Inator Nie mam obsługi małego ekranu w mojej aplikacji, dlatego pominąłem te. możesz dodać te tagi, np. ' ' – Saqib

18

wierzę klucz jest w Twoich uprawnień. Mówiąc, że Twoja aplikacja używa RECEIVE_SMS i READ_PHONE_STATE, Google Play używa jej do filtrowania urządzeń, które nie mogą tego robić (tablety), ponieważ sądzisz, że Twoja aplikacja musi użyć tych uprawnień, aby działać. Według android stronie dewelopera.

„Aby zapobiec te aplikacje z udostępnieniem nieumyślnie, Google Play zakłada, że ​​pewne uprawnienia związane ze sprzętem wskazują że podstawowe funkcje sprzętowe są domyślnie wymagane Dla przykład, aplikacje korzystające z Bluetooth muszą zażądać pozwolenia BLUETOOTH w elemencie - w przypadku starszych aplikacji, Google Play zakłada, że ​​deklaracja uprawnień oznacza, że ​​podstawowa funkcja android.hardware.bluetooth jest wymagana przez aplikację, a konfiguruje filtrowanie w oparciu o to cecha."

też spojrzeć na to:

Telefonia CALL_PHONE android.hardware.telephony CALL_PRIVILEGED android.hardware.telephony MODIFY_PHONE_STATE android.hardware.telephony PROCESS_OUTGOING_CALLS android.hardware.telephony READ_SMS android. hardware.telephony RECEIVE_SMS android.hardware.telephony RECEIVE_MMS android.hardware.telephony RECEIVE_WAP_PUSH android.hardware.telephony SEND_SMS android.h ardware.telephony WRITE_APN_SETTINGS android.hardware.telephony WRITE_SMS android.hardware.telephony

Masz RECEIVE_SMS i READ_PHONE_STATE więc automatycznie android.hardware.telephony. Można to naprawić wykonując

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

Wszystko to jest wyjaśnione bardziej szczegółowo here.

+1

, jaka jest różnica między znacznikiem a tag: – Saqib

+0

Zobacz edycję: możesz użyć uprawnień, ale nie możesz korzystać z tej funkcji, ale musisz ręcznie wprowadzić funkcję-funkcja = fałsz. – ninge

+0

Po jawnym dodaniu znacznika do wartości false, zaczęło się pojawiać na tablecie Asus eeeePad, ale nadal nie pojawia się w Nexusie 7. Zobacz edycję – Saqib

33

This page identyfikuje twój problem.

Gdy używasz <uses-feature> zamiast <uses-permission>, Twoja aplikacja nie zostanie odfiltrowana przez Market, ale oczekuje, że będziesz obsługiwać urządzenia nieobsługujące tej funkcji na poziomie kodu.

Dla dowolnego z uprawnień na powyższej stronie można wyłączyć filtrowanie na podstawie domniemanej funkcji, jawnie jawnie deklarując dorozumianą funkcję, w elemencie <uses-feature>, z atrybutem android:required="false". Na przykład, aby wyłączyć wszelkie filtrowanie na podstawie zgody CAMERA, należy dodać tę deklarację do pliku manifestu:

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

Jednak, gdy podasz <uses-permission>, wszystkie urządzenia, które nie mają dostępu do tej funkcji są filtrowane.

+1

musiałem wprowadzić tę zmianę, aby moja aplikacja była dostępna dla nexusa 7 – arjoan

+5

To faktycznie działa! Miałem ten sam problem, gdy korzystałem z pozwolenia TELEPHONY, więc Google Play nie wyświetlał aplikacji na tabletach bez radia telefonicznego. Dodałem element use-feature z Androidem: required = "false", a teraz mogę oglądać aplikację na Google Play na moim tablecie. –

10

muszę zrobić wszystkie trzy z tych rzeczy, aby zmusić go do pracuj dla Nexusa 7. Po przesłaniu pliku APK możesz zweryfikować ustawienie, najpierw aktywując nowy plik APK, przejdź do szczegółów produktu i wyszukaj obsługiwane urządzenia. Jeśli Nexus 7 nie zostanie znaleziony w sekcji "Nieobsługiwane urządzenia z powodu Twoich ustawień manifestu", jesteś dobry.

Uwaga: po przesłaniu pliku APK Google Play przetłumaczy 213 gęstości na tvdpi. Nie wiem, dlaczego nie ma opcji w narzędziu manifestu zaćmienia ...

<compatible-screens> 
    .... 
    <screen android:screenSize="large" android:screenDensity="213" /> 
</compatible-screens> 

<uses-feature android:name="android.hardware.camera" android:required="false" /> 
<uses-feature android:name="android.hardware.telephony" android:required="false" /> 
0

Otrzymuję pomoc w odpowiedzi na to pytanie.

How to make android Phonegap available for tablets?

Tak. Problem polegał na uprawnieniach. Usuwam wszystkie uprawnienia z AndroidManifest.xml, niż testuję aplikację i dodam uprawnienia jeden po drugim, gdy uzyskuję brakujący błąd uprawnień. Teraz moja aplikacja jest kompatybilna z telefonami z Androidem i tabletami.

4

Dokumentacja każe nam unikać

<compatible-screens> 


zobaczyć here
zamiast należy użyć

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


Wiele innych odpowiedzi udzielone na tej stronie są również skuteczne odpowiedzi . Sam je wdrożyłem. Dziękuję wszystkim.

3

Według developer.android.com

Jeśli aplikacja deklaruje < kompatybilne ekrany> w manifeście, element powinien zawierać atrybuty, które określają wszystkie wielkości i gęstości połączeń na ekranach tabletów aplikację obsługuje.

zauważyć, że o ile to możliwe, należy unikać użyciu kompatybilnych ekrany < > w swojej aplikacji.


Dlatego, mam następujące zadania,

1- USUNIĘTE < kompatybilne ekrany> z oczywistego

<compatible-screens> 
    <!-- all small size screens --> 
    <screen android:screenSize="small" android:screenDensity="ldpi" /> 
    <screen android:screenSize="small" android:screenDensity="mdpi" /> 
    <screen android:screenSize="small" android:screenDensity="hdpi" /> 
    <screen android:screenSize="small" android:screenDensity="xhdpi" /> 

    <!--all normal size screens --> 
    <screen android:screenSize="normal" android:screenDensity="ldpi" /> 
    <screen android:screenSize="normal" android:screenDensity="mdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="hdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="xhdpi" /> 

    <!-- all large size screens --> 
    <screen android:screenSize="large" android:screenDensity="ldpi" /> 
    <screen android:screenSize="large" android:screenDensity="mdpi" /> 
    <screen android:screenSize="large" android:screenDensity="hdpi" /> 
    <screen android:screenSize="large" android:screenDensity="xhdpi" /> 

    <!-- all xlarge size screens --> 
    <screen android:screenSize="xlarge" android:screenDensity="ldpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" /> 

    <!-- Special case for Nexus 7 --> 
    <screen android:screenSize="large" android:screenDensity="213" /> 

    <screen android:screenSize="normal" android:screenDensity="480" /> 
    <screen android:screenSize="large" android:screenDensity="480" /> 
    <screen android:screenSize="xlarge" android:screenDensity="480" /> 

</compatible-screens> 

2- DODANO < supports- ekrany> atrybut w oczywisty

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

3- DODATKOWA: ANDROID wymagane = "false" atrybut < wykorzystuje-feature>(według mojego wymagań aplikacji) w oczywisty

<uses-feature android:name="android.hardware.telephony" android:required="false" /> 
<uses-feature android:name="android.hardware.bluetooth" android:required="false"/> 
<uses-feature android:name="android.hardware.location.gps" android:required="false"/> 
<uses-feature android:name="android.hardware.camera" android:required="false"/> 
<uses-feature android:name="android.hardware.nfc" android:required="false"/> 

Official Dokumentacja Androida na temat: Permissions that Imply Feature Requirements

Bardziej szczegółowe wyjaśnienie na temat android: wymagana fałszywy jest obecny w ATTRIBUTES: android:required false

Kiedy deklarujesz android: required = „false” dla funkcji, oznacza to, że aplikacja woli korzystać z funkcji, jeśli obecne na urządzeniu, ale jest zaprojektowany do funkcji bez określonej funkcji, w razie potrzeby (to jest telefonia w przypadku tabletów).


Wykonując powyższe zmiany,

ponad 2000 URZĄDZENIA dodano w liście Android urządzeń obsługiwanych

2000+ devices added

Mam nadzieję, że pomaga

Powiązane problemy