Filtry w Google Play

Gdy użytkownik wyszukuje lub przegląda aplikacje do pobrania w Google Play, wyniki są filtrowane w zależności od tego, które aplikacje są zgodne z urządzeniem. Jeśli na przykład aplikacja wymaga aparatu, Google Play nie wyświetli jej na urządzeniach, które nie mają takiej kamery. To filtrowanie pomaga deweloperom zarządzać dystrybucją ich aplikacji i zapewnia użytkownikom najlepsze możliwe wrażenia.

Filtrowanie w Google Play opiera się na kilku typach metadanych aplikacji i ustawień konfiguracji, takich jak deklaracje w pliku manifestu, wymagane biblioteki, zależności architektury i ustawienia dystrybucji skonfigurowane w Konsoli Google Play, np. kierowanie geograficzne, ceny itp.

Filtrowanie w Google Play opiera się częściowo na deklaracji w pliku manifestu i innych aspektach platformy Androida, ale rzeczywiste działanie filtrowania różni się od działania platformy i nie jest powiązane z konkretnymi poziomami interfejsu API. Ten dokument określa obecne reguły filtrowania używane w Google Play.

Jak działają filtry w Google Play

Google Play używa opisanych poniżej ograniczeń związanych z filtrami, aby określić, czy pokazywać Twoją aplikację użytkownikowi, który przegląda lub wyszukuje aplikacje w aplikacji Google Play.

Podejmując decyzję o wyświetleniu aplikacji, Google Play sprawdza wymagania dotyczące sprzętu i oprogramowania urządzenia, a także operatora, lokalizację i inne cechy. Następnie porównuje je z ograniczeniami i zależnościami określonymi w pliku manifestu aplikacji oraz w szczegółach publikowania.

Jeśli aplikacja jest zgodna z regułami filtrowania, Google Play wyświetli ją użytkownikowi. W przeciwnym razie Google Play ukryje Twoją aplikację w wynikach wyszukiwania i przeglądaniu kategorii, nawet jeśli użytkownik poprosi o dostęp do aplikacji, klikając precyzyjny link prowadzący bezpośrednio do jej identyfikatora w Google Play.

W przypadku aplikacji możesz używać dowolnej kombinacji filtrów dostępnych w aplikacji. Na przykład możesz ustawić wymaganie minSdkVersion na "4" i ustawić smallScreens="false" w aplikacji. Następnie podczas przesyłania aplikacji do Google Play możesz kierować ją tylko na kraje europejskie (operatorów). Filtry Google Play uniemożliwią więc udostępnienie aplikacji na urządzeniach, które nie spełniają wszystkich 3 tych wymagań.

Wszystkie ograniczenia filtrowania są powiązane z wersją aplikacji i mogą się zmieniać między wersjami. Jeśli na przykład użytkownik zainstalował Twoją aplikację, a Ty opublikujesz aktualizację, która sprawia, że aplikacja jest niewidoczna dla użytkownika, nie zobaczy on, że jest dostępna aktualizacja.

Filtrowanie na stronie Google Play

Podczas przeglądania witryny Google Play użytkownicy mogą zobaczyć wszystkie opublikowane aplikacje. Witryna Google Play porównuje jednak wymagania dotyczące aplikacji z każdym zarejestrowanym urządzeniem użytkownika i umożliwia zainstalowanie aplikacji tylko wtedy, gdy jest ona zgodna z danym urządzeniem.

Filtrowanie na podstawie pliku manifestu aplikacji

Większość filtrów jest wyzwalana przez elementy w pliku manifestu aplikacji, AndroidManifest.xml (chociaż nie wszystkie treści w pliku manifestu mogą powodować filtrowanie). Tabela 1 zawiera listę elementów pliku manifestu, których należy używać do filtrowania, oraz sposób działania filtrowania poszczególnych elementów.

Tabela 1. elementy manifestu, które uruchamiają filtrowanie w Google Play.

Element pliku manifestu Nazwa filtra Jak to działa
<supports-screens> Rozmiar ekranu

Aplikacja wskazuje rozmiary ekranu, które może obsługiwać przez ustawienie atrybutów elementu <supports-screens>. Po opublikowaniu aplikacji Google Play korzysta z tych atrybutów, aby określić, czy wyświetlić ją użytkownikom, w zależności od rozmiaru ekranu ich urządzeń.

Ogólnie Google Play zakłada, że platforma urządzenia może dostosowywać mniejsze układy do większych ekranów, ale nie jest w stanie dostosować większych układów do mniejszych ekranów. Jeśli więc aplikacja deklaruje, że obsługuje tylko „normalny” rozmiar ekranu, Google Play udostępnia ją zarówno urządzeniom z normalnym, jak i dużym ekranom, ale filtruje ją tak, aby nie była dostępna dla takich urządzeń.

Jeśli aplikacja nie zadeklaruje atrybutów właściwości <supports-screens>, Google Play użyje ich domyślnych wartości, które różnią się w zależności od poziomu interfejsu API. Więcej szczegółów:

  • W przypadku aplikacji, dla których dyrektywa android: minSdkVersion lub android: targetSdkVersion ma wartość 3 lub mniej, sam element <supports-screens> jest niezdefiniowany i nie są dostępne żadne atrybuty. W tym przypadku Google Play zakłada, że aplikacja jest przeznaczona na ekrany o normalnych rozmiarach i wyświetla ją na urządzeniach o normalnych lub większych ekranach.

  • Gdy android: minSdkVersion lub android: targetSdkVersion ma wartość 4 lub więcej, wartością domyślną wszystkich atrybutów jest "true". Dzięki temu aplikacja jest uznawana za domyślnie obsługującą wszystkie rozmiary ekranów.

Przykład 1
Plik manifestu deklaruje <uses-sdk android:minSdkVersion="3"> i nie zawiera elementu <supports-screens>. Wynik: Google Play nie będzie wyświetlać aplikacji użytkownikom korzystającym z urządzenia z małym ekranem, ale będzie ją wyświetlać użytkownikom urządzeń z dużym ekranem lub normalnym ekranem, chyba że zostaną zastosowane inne filtry.

Przykład 2
Plik manifestu deklaruje <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"> i nie zawiera elementu <supports-screens>. Wynik: Google Play wyświetla aplikację użytkownikom na wszystkich urządzeniach, chyba że zostaną zastosowane inne filtry.

Przykład 3
Plik manifestu deklaruje <uses-sdk android:minSdkVersion="4"> i nie zawiera elementu <supports-screens>. Wynik: Google Play wyświetli aplikację wszystkim użytkownikom, chyba że zostaną zastosowane inne filtry.

Więcej informacji o deklarowaniu obsługi rozmiaru ekranu w aplikacji znajdziesz w <supports-screens> i artykule o obsłudze wielu ekranów.

<uses-configuration> Konfiguracja urządzenia: klawiatura
, nawigacja, ekran dotykowy

Aplikacja może zażądać określonych funkcji sprzętowych, a Google Play wyświetli ją tylko na urządzeniach z odpowiednim sprzętem.

Przykład 1
Plik manifestu zawiera element <uses-configuration android:reqFiveWayNav="true" />, a użytkownik szuka aplikacji na urządzeniu, które nie ma 5-kierunkowych elementów sterujących. Wynik: Google Play nie wyświetla aplikacji użytkownikowi.

Przykład 2
Plik manifestu nie zawiera elementu <uses-configuration>. Wynik: Google Play wyświetla aplikację wszystkim użytkownikom, chyba że zostaną zastosowane inne filtry.

Więcej informacji: <uses-configuration>.

<uses-feature> Funkcje urządzenia
(name)

Aplikacja może wymagać dostępności określonych funkcji urządzenia. Ta funkcja została wprowadzona w Androidzie 2.0 (poziom interfejsu API 5).

Przykład 1
Plik manifestu zawiera <uses-feature android:name="android.hardware.sensor.light" />, a użytkownik szuka aplikacji na urządzeniu, które nie ma czujnika światła. Wynik: Google Play nie wyświetla aplikacji użytkownikowi.

Przykład 2
Plik manifestu nie zawiera elementu <uses-feature>. Wynik: Google Play wyświetla aplikację wszystkim użytkownikom, chyba że zostały zastosowane inne filtry.

Więcej informacji: <uses-feature> .

Filtrowanie na podstawie domniemanych funkcji: w niektórych przypadkach Google Play interpretuje uprawnienia wymagane przez elementy <uses-permission> jako wymagania funkcji odpowiadające tym zadeklarowanym w elementach <uses-feature>. Patrz: <uses-permission> poniżej.

Wersja OpenGL-ES
(openGlEsVersion)

Aplikacja może wymagać, aby urządzenie obsługiwało konkretną wersję OpenGL-ES za pomocą atrybutu <uses-feature android:openGlEsVersion="int">.

Przykład 1
Aplikacja żąda wielu wersji OpenGL-ES, wielokrotnie określając wartość openGlEsVersion w pliku manifestu. Wynik: Google Play zakłada, że aplikacja wymaga najwyższej ze wskazanych wersji.

Przykład 2
Aplikacja prosi o tryb OpenGL-ES w wersji 1.1, a użytkownik szuka aplikacji na urządzeniu obsługującym OpenGL-ES w wersji 2.0. Wynik: Google Play wyświetli aplikację użytkownikowi, chyba że zostaną zastosowane inne filtry. Jeśli urządzenie zgłosi, że obsługuje platformę OpenGL-ES w wersji X, Google Play zakłada, że obsługuje też dowolną wersję starszą niż X.

Przykład 3
Użytkownik szuka aplikacji na urządzeniu, które nie zgłasza wersji OpenGL-ES, np. na urządzeniu z Androidem 1.5 lub starszym. Wynik: Google Play zakłada, że urządzenie obsługuje tylko OpenGL-ES 1.0. Google Play wyświetli tylko aplikacje użytkownika, dla których nie określono interfejsu openGlEsVersion, lub aplikacje, które nie mają określonej wersji OpenGL-ES nowszej niż 1.0.

Przykład 4
Plik manifestu nie wskazuje openGlEsVersion. Wynik: Google Play wyświetla aplikację wszystkim użytkownikom, chyba że zostaną zastosowane inne filtry.

Więcej informacji: <uses-feature>.

<uses-library> Biblioteki oprogramowania

Aplikacja może wymagać, aby na urządzeniu były dostępne określone biblioteki udostępnione.

Przykład 1
Aplikacja wymaga biblioteki com.google.android.maps, a użytkownik szuka aplikacji na urządzeniu, które nie ma tej biblioteki w usłudze com.google.android.maps. Wynik: Google Play nie wyświetla aplikacji użytkownikowi.

Przykład 2
Plik manifestu nie zawiera elementu <uses-library>. Wynik: Google Play wyświetla aplikację wszystkim użytkownikom, chyba że zostaną zastosowane inne filtry.

Więcej informacji: <uses-library>.

<uses-permission>  

Google Play nie stosuje filtrów na podstawie elementów <uses-permission>. Odczytuje jednak elementy, aby określić, czy aplikacja ma wymagania dotyczące funkcji sprzętowych, które mogły zostać nieprawidłowo zadeklarowane w elementach <uses-feature>. Jeśli na przykład aplikacja prosi o uprawnienie CAMERA, ale nie zadeklaruje elementu <uses-feature> dla właściwości android.hardware.camera, Google Play uznaje, że aplikacja wymaga aparatu i nie powinna być wyświetlana użytkownikom, których urządzenia nie mają takiej kamery.

Ogólnie, gdy aplikacja żąda uprawnień związanych ze sprzętem, Google Play zakłada, że aplikacja wymaga podstawowych funkcji sprzętowych, mimo że mogą one nie odpowiadać deklaracji <uses-feature>. Następnie Google Play skonfiguruje filtrowanie na podstawie funkcji wskazanych w deklaracjach <uses-feature>.

Listę uprawnień, które sugerują funkcje sprzętowe, znajdziesz w dokumentacji elementu <uses-feature>.

<uses-sdk> Minimalna wersja platformy (minSdkVersion)

Aplikacja może wymagać minimalnego poziomu API.

Przykład 1
Plik manifestu zawiera <uses-sdk android:minSdkVersion="3">, a aplikacja korzysta z interfejsów API wprowadzonych w interfejsie API poziomu 3. Użytkownik szuka aplikacji na urządzeniu z interfejsem API poziomu 2. Wynik: Google Play nie wyświetla aplikacji użytkownikowi.

Przykład 2
Plik manifestu nie zawiera pola minSdkVersion, a aplikacja korzysta z interfejsów API wprowadzonych w interfejsie API poziomu 3. Użytkownik szuka aplikacji na urządzeniu z interfejsem API poziomu 2. Wynik: Google Play zakłada, że minSdkVersion ma wartość „1”, a aplikacja jest zgodna ze wszystkimi wersjami Androida. Google Play pokazuje aplikację użytkownikowi i pozwala mu ją pobrać. Aplikacja ulega awarii w czasie działania.

Chcesz uniknąć tego drugiego scenariusza, dlatego zalecamy, aby zawsze zadeklarować właściwość minSdkVersion. Więcej informacji: android:minSdkVersion.

Maksymalna wersja platformy (maxSdkVersion)

Wycofano. Android 2.1 i nowsze wersje nie sprawdzają ani nie wymuszają atrybutu maxSdkVersion, a pakiet SDK się nie skompiluje, jeśli w manifeście aplikacji jest ustawiony maxSdkVersion. W przypadku urządzeń skompilowanych z językiem maxSdkVersion Google Play będzie go uwzględniać i używać do filtrowania.

Zadeklarowanie maxSdkVersion nie jest zalecane. Więcej informacji: android:maxSdkVersion.

Zaawansowane filtry pliku manifestu

Oprócz elementów pliku manifestu w tabeli 1 Google Play może też filtrować aplikacje na podstawie zaawansowanych elementów pliku manifestu opisanych w tabeli 2.

Te elementy manifestu i stosowane przez nie filtrowanie służą tylko do wyjątkowych przypadków użycia. Są one przeznaczone dla określonych typów gier o wysokiej wydajności i podobnych aplikacji, które wymagają ścisłej kontroli dystrybucji aplikacji. Większość aplikacji nigdy nie powinna używać tych filtrów.

Tabela 2. Zaawansowane elementy manifestu do filtrowania w Google Play.

Element pliku manifestuPodsumowanie
<compatible-screens>

Google Play filtruje aplikację, jeśli rozmiar ekranu i gęstość ekranu urządzenia nie pasują do żadnej z konfiguracji ekranu (deklarowanych przez element <screen>) w elemencie <compatible-screens>.

Uwaga: zwykle nie należy używać tego elementu manifestu. Użycie tego elementu może znacznie zmniejszyć liczbę potencjalnych użytkowników Twojej aplikacji, eliminując wszystkie nieuwzględnione kombinacje rozmiarów i gęstości ekranu. Aby włączyć tryb zgodności ekranu w przypadku konfiguracji ekranu, które nie zostały uwzględnione w zasobach alternatywnych, użyj elementu manifestu <supports-screens> (opisanego powyżej w tabeli 1).

<supports-gl-texture>

Google Play filtruje aplikację, chyba że urządzenie obsługuje też co najmniej jeden z formatów kompresji tekstur GL obsługiwanych przez aplikację.

Inne filtry

Google Play na podstawie innych parametrów aplikacji określa, czy wyświetlić, czy ukryć ją w przypadku określonego użytkownika na danym urządzeniu, tak jak to opisano w tabeli poniżej.

Tabela 3. Cechy aplikacji i publikacji, które wpływają na filtrowanie w Google Play.

Nazwa filtra Jak to działa
Stan publikacji

W wynikach wyszukiwania i przeglądaniu treści w Google Play będą widoczne tylko opublikowane aplikacje.

Nawet jeśli aplikacja nie jest opublikowana, można ją zainstalować, jeśli użytkownicy widzą ją w obszarze Pobrane wśród aplikacji kupionych, zainstalowanych lub ostatnio odinstalowanych.

Jeśli aplikacja została zawieszona, użytkownicy nie będą mogli ponownie jej zainstalować ani zaktualizować, nawet jeśli znajdzie się ona w sekcji Pobrane.

Stan w cenie

Nie wszyscy użytkownicy widzą płatne aplikacje. Aby można było wyświetlić płatne aplikacje, na urządzeniu musi być zainstalowany Android 1.1 lub nowszy oraz znajdujące się w kraju, w którym płatne aplikacje są dostępne. Jeśli urządzenie ma kartę SIM, to operator karty SIM określa, czy są dostępne płatne aplikacje. Jeśli urządzenie nie ma karty SIM, jego adres IP jest używany do określenia, czy urządzenie znajduje się w kraju, w którym dostępne są płatne aplikacje.

Kierowanie na kraj

Gdy prześlesz aplikację do Google Play, w sekcji Ceny i dystrybucja możesz wybrać kraje, w których będzie ona dostępna. Aplikacja będzie wtedy dostępna tylko dla użytkowników w wybranych przez Ciebie krajach.

Architektura procesora (ABI)

Aplikacja zawierająca biblioteki natywne kierowane na określoną architekturę procesora (np. ARM EABI v7 lub x86) jest widoczna tylko na urządzeniach, które obsługują tę architekturę. Szczegółowe informacje o pakiecie NDK i używaniu bibliotek natywnych znajdziesz w artykule Co to jest pakiet NDK na Androida?

Aplikacje z zabezpieczeniem przed kopiowaniem

Google Play nie obsługuje już funkcji ochrony przed kopiowaniem w Konsoli Play i nie filtruje aplikacji na jej podstawie. Aby zabezpieczyć aplikację, skorzystaj z licencjonowania aplikacji. Więcej informacji znajdziesz w artykule Wymiana ochrony przed kopiowaniem.

Publikowanie wielu plików APK z użyciem różnych filtrów

Niektóre filtry w Google Play pozwalają opublikować wiele plików APK tej samej aplikacji, by udostępnić różne pliki APK dla różnych konfiguracji urządzeń. Jeśli np. tworzysz grę wideo, która wykorzystuje zasoby graficzne o wysokiej jakości, możesz utworzyć 2 pliki APK, z których każdy będzie obsługiwać różne formaty kompresji tekstur. Dzięki temu możesz zmniejszyć rozmiar pliku APK, uwzględniając tylko tekstury wymagane w każdej konfiguracji urządzenia. W zależności od tego, czy poszczególne urządzenia obsługują formaty kompresji tekstur, Google Play dostarczy plik APK, który zadeklarowano, że obsługuje dane urządzenie.

Obecnie Google Play umożliwia publikowanie wielu plików APK tej samej aplikacji tylko wtedy, gdy każdy z nich ma osobne filtry oparte na tych konfiguracjach:

  • Formaty kompresji tekstur OpenGL

    Za pomocą elementu <supports-gl-texture>.

  • Rozmiar ekranu (i opcjonalnie gęstość ekranu)

    Za pomocą elementu <supports-screens> lub <compatible-screens>.

  • Poziom interfejsu API

    Za pomocą elementu <uses-sdk>.

  • Architektura procesora (ABI)

    Przez dołączanie bibliotek natywnych utworzonych za pomocą Androida NDK, które są kierowane na konkretną architekturę procesora (np. ARM EABI 7 lub x86).

Pozostałe filtry działają tak samo jak zwykle, ale tylko te 4 są jedynymi, które pozwalają odróżnić jeden plik APK od innego w tej samej stronie z informacjami o aplikacji w Google Play. Na przykład nie można opublikować wielu pakietów APK tej samej aplikacji, jeśli różnią się one tylko w zależności od tego, czy urządzenie ma aparat.

Uwaga: publikowanie wielu plików APK dla tej samej aplikacji jest uważane za funkcję zaawansowaną i większość aplikacji powinna publikować tylko jeden plik APK, który obsługuje różne konfiguracje urządzeń. Publikowanie wielu plików APK wymaga przestrzegania określonych reguł w filtrach oraz zwracania większej uwagi na kody wersji każdego z nich. Zapewni to prawidłowe ścieżki aktualizacji dla każdej konfiguracji.

Jeśli chcesz dowiedzieć się więcej o publikowaniu wielu plików APK w Google Play, przeczytaj artykuł Obsługa wielu plików APK.

Zobacz także:

  1. Zgodność z Androidem
  2. Obsługa wielu plików APK