1. Wprowadzenie
Ten dokument zawiera listę wymagań, które muszą zostać spełnione, aby urządzenia były zgodne z Androidem 8.1.
Sformułowania „MUSISZ”, „NIE MOŻE”, „WYMAGANE”, „MUSZĄ”, „NIE POWINNY”, „NIE POWINNY”, „ZALECANE”, „MOŻLIWE” i „OPCJONALNIE” są zgodne ze standardem IETF zdefiniowanego w RFC2119.
W tym dokumencie „implementator urządzeń” to osoba lub organizacja opracowująca sprzęt lub oprogramowanie z Androidem 8.1. „Implementacja na urządzeniu” lub „wdrożenie to rozwiązanie sprzętowe i programowe opracowane tak,
Aby urządzenia zostały uznane za zgodne z Androidem 8.1, MUSZĄ one spełniać wymagania przedstawione w tej definicji zgodności, w tym wszelkie dokumenty dołączając do nich przez odniesienie.
Jeśli ta definicja lub testy oprogramowania opisane w sekcji 10 są dyskretne, niejednoznaczne lub niepełne, to osoba implementująca urządzenie odpowiada za zgodność z istniejącymi implementacjami.
Z tego powodu Android Open Source Project jest zarówno referencją, jak i preferowaną implementacją Androida. ZAWSZE ZALECANE są rozwiązania implementujące urządzenia w maksymalnym możliwym stopniu na podstawie kodu źródłowego „nadrzędnego” dostępnego w ramach projektu Android Open Source Project. Chociaż niektóre komponenty można hipotetycznie zastąpić innymi, Zdecydowanie ZALECANE jest nie stosować tej praktyki, ponieważ zaliczenie testów oprogramowania będzie znacznie trudniejsze. Odpowiada on za zapewnienie pełnej zgodności ze standardową implementacją Androida, w tym z pakietem Compatibility Test Suite i nie tylko. Pamiętaj też, że ten dokument wyraźnie zabrania używania określonych zamienników i modyfikacji komponentów.
Wiele zasobów, do których prowadzą linki w tym dokumencie, pochodzi bezpośrednio lub pośrednio z pakietu Android SDK i będzie działać tak samo jak informacje zawarte w dokumentacji pakietu SDK. W każdym przypadku, gdy ta definicja zgodności lub pakiet Compatibility Test Suite nie zgadza się z dokumentacją pakietu SDK, jest ona uznawana za miarodajną. Wszelkie szczegóły techniczne wymienione w zasobach, do których prowadzą linki w tym dokumencie, uznaje się za uwzględnione w tej definicji zgodności.
1.1 Struktura dokumentu
1.1.1 Wymagania według typu urządzenia
Sekcja 2 zawiera wszystkie MUSI i Zdecydowanie ZALECANE wymagania dotyczące urządzeń określonego typu. Każda podsekcja w sekcji 2 jest poświęcona konkretnemu typowi urządzenia.
Wszystkie pozostałe wymagania, które obowiązują we wszystkich implementacjach urządzeń z Androidem, zostały wymienione w sekcjach po Sekcji 2. Wymagania te są nazywane w tym dokumencie „wymaganiami podstawowymi”.
1.1.2 Identyfikator wymagania
W przypadku wymagań MUSZĄ przypisano identyfikator wymagania.
- Identyfikator jest przypisywany tylko w przypadku wymagań MUST.
- Zdecydowanie ZALECANE wymagania są oznaczone jako [SR], ale identyfikator nie jest przypisany.
- Identyfikator składa się z tych elementów : identyfikator typu urządzenia – identyfikator warunku – identyfikator wymagania (np. C-0-1).
Każdy identyfikator jest zdefiniowany poniżej:
- Identyfikator typu urządzenia (więcej informacji znajdziesz w sekcji 2. Typy urządzeń
- C: podstawowy (wymagania dotyczące wszystkich implementacji na urządzeniach z Androidem)
- H: przenośne urządzenie z Androidem
- T: urządzenie z Androidem TV
- O: Wdrożenie Androida Automotive
- Identyfikator warunku
- Gdy wymaganie jest bezwarunkowe, ten identyfikator ma wartość 0.
- Gdy wymaganie jest warunkowe, do pierwszego warunku zostaje przypisana wartość 1, a liczba zwiększa się o 1 w tej samej sekcji i na tym samym typie urządzenia.
- Identyfikator wymagania
- Ten identyfikator rozpoczyna się od 1 i zwiększa o 1 w tej samej sekcji i w tym samym warunku.
2. Typy urządzeń
Projekt Android Open Source Project zapewnia pakiet oprogramowania przystosowany do różnych typów urządzeń i formatów. Istnieją jednak typy urządzeń o względnie lepiej rozwiniętym ekosystemie dystrybucji aplikacji.
W tej sekcji znajdziesz opis tych typów urządzeń oraz dodatkowe wymagania i zalecenia dotyczące każdego z nich.
Wszystkie implementacje urządzeń z Androidem, które nie pasują do żadnego z opisanych typów urządzeń, MUSZĄ spełniać wszystkie wymagania wymienione w pozostałych sekcjach tej definicji zgodności.
2.1 Konfiguracje urządzeń
Informacje o głównych różnicach w konfiguracji sprzętu w zależności od typu urządzenia można znaleźć w poniższych wymaganiach dotyczących konkretnych urządzeń.
2.2. Wymagania dotyczące urządzenia mobilnego
Urządzenie mobilne z Androidem to implementacja urządzenia z Androidem, w którym zazwyczaj trzymasz urządzenie w dłoni, np. odtwarzacz mp3, telefon czy tablet.
Implementacje na urządzeniach z Androidem zaliczamy do urządzeń mobilnych, jeśli spełniają wszystkie te kryteria:
- mieć źródło zasilania, które pozwala na mobilność, np. baterię.
- mieć fizyczny ekran o przekątnej ekranu w zakresie od 2,5 do 8 cala.
Dodatkowe wymagania opisane w pozostałej części tej sekcji dotyczą implementacji na urządzeniach mobilnych z Androidem.
2.2.1. Urządzenie
Rozmiar ekranu (artykuł 7.1.1.1)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI mieć ekran o przekątnej co najmniej 2,5 cala*.
Gęstość ekranu (art. 7.1.1.3)
Implementacje na urządzeniach mobilnych:
- [H-SR] Zdecydowanie ZALECANE jest zapewnienie użytkownikom możliwości zmiany rozmiaru wyświetlacza.
Starszy tryb zgodności aplikacji (art. 7.1.5)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI obsługiwać starszy tryb zgodności aplikacji w obecnej wersji kodu open source Androida. Oznacza to, że implementacje urządzenia NIE MOGĄ zmieniać wyzwalaczy ani progów, po których aktywowany jest tryb zgodności. NIE MOGĄ też zmieniać działania samego trybu zgodności.
Klawiatura (sekcja 7.2.1)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI obsługiwać zewnętrzne aplikacje edytora metody wprowadzania (IME).
Klawisze nawigacyjne (artykuł 7.2.3)
Implementacje na urządzeniach mobilnych:
-
[H-0-1] MUSI zawierać funkcje Ekran główny, Ostatnie i Wstecz.
-
[H-0-2] MUSI wysyłać do aplikacji na pierwszym planie zarówno zdarzenie normalnego naciśnięcia, jak i przytrzymania funkcji Back (
KEYCODE_BACK
).
Wprowadzanie danych na ekranie dotykowym (sekcja 7.2.4)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI obsługiwać wprowadzanie na ekranie dotykowym.
Akcelerometr (sekcja 7.3.1)
Implementacje na urządzeniach mobilnych:
- [H-SR] Zdecydowanie ZALECANE jest użycie 3-osiowego akcelerometru.
Jeśli implementacje urządzeń mobilnych obejmują 3-osiowy akcelerometr:
- [H-1-1] MUSI raportować zdarzenia z częstotliwością co najmniej 100 Hz.
Żyroskop (artykuł 7.3.4)
Jeśli implementacje urządzeń mobilnych obejmują żyroskop:
- [H-1-1] MUSI raportować zdarzenia z częstotliwością co najmniej 100 Hz.
Czujnik zbliżeniowy (sekcja 7.3.8)
Implementacje urządzeń mobilnych, które umożliwiają wykonywanie połączeń głosowych i wskazują dowolną wartość inną niż PHONE_TYPE_NONE
w getPhoneType
:
- POWINIEN zawierać czujnik zbliżeniowy.
Czujnik pozycji (artykuł 7.3.12)
Implementacje na urządzeniach mobilnych:
- są ZALECANE, aby obsługiwały czujnik pozycji z 6 stopniami swobody.
Bluetooth (art. 7.4.3)
Implementacje na urządzeniach mobilnych:
- POWINNO obsługiwać Bluetooth i Bluetooth LE.
Oszczędzanie danych (art. 7.4.7)
Jeśli implementacje na urządzeniach mobilnych obejmują połączenie z pomiarem użycia danych:
- [H-1-1] MUSI mieć włączony tryb oszczędzania danych.
Minimalna pamięć i miejsce na dane (artykuł 7.6.1)
Jeśli implementacje na urządzeniach mobilnych deklarują obsługę tylko 32-bitowego interfejsu ABI:
-
[H-1-1] Pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 416 MB, jeśli domyślny wyświetlacz używa rozdzielczości bufora klatek do wartości qHD (np. FWVGA).
-
[H-2-1] Pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 592 MB, jeśli domyślny wyświetlacz używa rozdzielczości bufora klatek do HD+ (np. HD, WSVGA).
-
[H-3-1] Pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 896 MB, jeśli domyślny wyświetlacz używa rozdzielczości bufora klatek do FHD (np. WSXGA+).
-
[H-4-1] Jeśli domyślny wyświetlacz używa rozdzielczości bufora klatek do QHD (np. QWXGA), pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 1344 MB.
Jeśli implementacje na urządzeniach mobilnych deklarują obsługę 32- i 64-bitowego interfejsu ABI:
-
[H-5-1] Pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 816 MB, jeśli domyślny wyświetlacz używa rozdzielczości bufora klatek do wartości qHD (np. FWVGA).
-
[H-6-1] Pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 944 MB, jeśli domyślny wyświetlacz używa rozdzielczości bufora ramki do HD+ (np. HD, WSVGA).
-
[H-7-1] Pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 1280 MB, jeśli domyślny wyświetlacz używa rozdzielczości bufora klatki do FHD (np. WSXGA+).
-
[H-8-1] Jeśli domyślny wyświetlacz używa rozdzielczości bufora klatek do QHD (np. QWXGA), pamięć dostępna dla jądra i przestrzeni użytkownika MUSI mieć co najmniej 1824 MB.
Pamiętaj, że pojęcie „pamięć dostępna dla jądra i przestrzeni użytkownika” powyżej odnosi się do dostępnego miejsca, oprócz pamięci już przeznaczonej dla komponentów sprzętowych, takich jak radio czy film, i które nie są pod kontrolą jądra implementacji urządzeń.
Jeśli implementacje urządzeń mobilnych obejmują mniej niż 1 GB pamięci dostępnej dla jądra i przestrzeni użytkownika:
- [H-9-1] MUSI zadeklarować flagę funkcji
android.hardware.ram.low
. - [H-9-2] MUSI mieć co najmniej 1,1 GB nieulotnego miejsca na prywatne dane aplikacji (partycja „/data”).
Jeśli implementacje urządzeń mobilnych obejmują więcej niż 1 GB pamięci dostępnej dla jądra i przestrzeni użytkownika:
- [H-10-1] MUSI mieć co najmniej 4 GB nieulotnego miejsca na prywatne dane aplikacji (partycja „/data”).
- NALEŻY zadeklarować flagę funkcji
android.hardware.ram.normal
.
Pamięć współdzielona aplikacji (artykuł 7.6.2)
Implementacje na urządzeniach mobilnych:
- [H-0-1] NIE MOŻE udostępniać pamięci współdzielonej aplikacji mniejszej niż 1 GiB.
Tryb urządzenia peryferyjnego USB (sekcja 7.7.1)
Implementacje na urządzeniach mobilnych:
- POWINIEN mieć port USB obsługujący tryb peryferyjny.
Jeśli urządzenia mobilne są wyposażone w port USB obsługujący tryb peryferyjny, te funkcje:
- [H-1-1] MUSI wdrożyć interfejs Android Open Accessory API (AOA)*.
Mikrofon (sekcja 7.8.1)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI zawierać mikrofon.
Wyjście audio (artykuł 7.8.2)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI mieć wyjście audio i zadeklarować
android.hardware.audio.output
.
Tryb rzeczywistości wirtualnej (art. 7.9.1)
Jeśli implementacje urządzeń mobilnych obsługują tryb VR:
- [H-1-1] MUSI zadeklarować funkcję
android.software.vr.mode
*.
Jeśli implementacje urządzenia zadeklarują funkcję android.software.vr.mode
:
- [H-2-1] MUSI zawierać aplikację z włączoną funkcją
android.service.vr.VrListenerService
, która może być włączona przez aplikacje VR za pomocąandroid.app.Activity#setVrModeEnabled
*.
Wysoka wydajność rzeczywistości wirtualnej (art. 7.9.2)
Jeśli implementacje urządzeń mobilnych mogą spełnić wszystkie wymagania dotyczące zadeklarowania flagi funkcji android.hardware.vr.high_performance
:
- [H-1-1] MUSI zadeklarować flagę funkcji
android.hardware.vr.high_performance
*.
2.2.2. Multimedia
Kodowanie dźwięku (artykuł 5.1.1)
Implementacje na urządzeniach mobilnych MUSZĄ obsługiwać to kodowanie dźwięku:
- [H-0-1] AMR-NB
- [H-0-2] AMR-WB
- [H-0-3] Profil AAC MPEG-4 (AAC LC)
- [H-0-4] Profil AAC MPEG-4 HE (AAC+)
- [H-0-5] AAC ELD (rozszerzony AAC z niskim opóźnieniem)
Dekodowanie dźwięku (artykuł 5.1.2)
Implementacje na urządzeniach mobilnych MUSZĄ obsługiwać to dekodowanie dźwięku:
- [H-0-1] AMR-NB
- [H-0-2] AMR-WB
Kodowanie wideo (artykuł 5.2)
Implementacje na urządzeniach mobilnych MUSZĄ obsługiwać poniższe kodowanie wideo i udostępniać je aplikacjom innych firm:
- [H-0-1] H.264 AVC
- [H-0-2] VP8
Dekodowanie wideo (artykuł 5.3)
Implementacje na urządzeniach mobilnych MUSZĄ obsługiwać to dekodowanie wideo:
- [H-0-1] H.264 AVC
- [H-0-2] H.265 HEVC
- [H-0-3] MPEG-4 SP
- [H-0-4] VP8.
- [H-0-5] VP9.
2.2.3. Oprogramowanie
Zgodność obiektów WebView (artykuł 3.4.1)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI zapewniać pełną implementację interfejsu API
android.webkit.Webview
.
Zgodność z przeglądarkami (sekcja 3.4.2)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI zawierać samodzielną aplikację przeglądarki do przeglądania stron internetowych przez zwykłych użytkowników.
Menu z aplikacjami (sekcja 3.8.1)
Implementacje na urządzeniach mobilnych:
-
[H-SR] Zdecydowanie ZALECANE jest wdrożenie domyślnego programu uruchamiającego, który obsługuje przypinanie skrótów i widżetów w aplikacji.
-
[H-SR] Zdecydowanie ZALECANE jest wdrożenie domyślnego programu uruchamiającego, które zapewnia szybki dostęp do dodatkowych skrótów udostępnianych przez aplikacje innych firm przy użyciu interfejsu API ShortcutManager.
-
[H-SR] Zdecydowanie ZALECANE jest dodanie domyślnego programu uruchamiającego, który wyświetla plakietki przy ikonach aplikacji.
Widżety (sekcja 3.8.2)
Implementacje na urządzeniach mobilnych:
- [H-SR] Zdecydowanie ZALECANE są obsługa widżetów aplikacji innych firm.
Powiadomienia (art. 3.8.3)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI zezwalać aplikacjom innych firm na powiadamianie użytkowników o ważnych wydarzeniach za pomocą klas interfejsu
Notification
iNotificationManager
. - [H-0-2] MUSI obsługiwać powiadomienia rozszerzone.
- [H-0-3] MUSI obsługiwać powiadomienia HUD.
- [H-0-4] MUSI zawierać obszar powiadomień zapewniający użytkownikowi możliwość bezpośredniego sterowania powiadomieniami (np. odpowiadania na wiadomości, drzemki, odrzucania, blokowania) przy użyciu funkcji interfejsu użytkownika, takich jak przyciski poleceń lub panel sterowania (jak w AOSP).
Wyszukiwarka (art. 3.8.4)
Implementacje na urządzeniach mobilnych:
- [H-SR] Zdecydowanie ZALECANE jest wdrożenie na urządzeniu asystenta do obsługi działania wspomagającego.
Sterowanie multimediami na ekranie blokady (sekcja 3.8.10)
Jeśli implementacje urządzeń mobilnych z Androidem obsługują ekran blokady:
- [H-1-1] MUSI wyświetlać powiadomienia na ekranie blokady, w tym szablon powiadomień o multimediach.
Administracja urządzeniem (artykuł 3.9)
Jeśli implementacje urządzeń mobilnych obsługują bezpieczny ekran blokady:
- [H-1-1] MUSI wdrożyć pełny zakres zasad administrowania urządzeniami zdefiniowanych w dokumentacji pakietu Android SDK.
Ułatwienia dostępu (sekcja 3.10)
Implementacje na urządzeniach mobilnych:
-
[H-SR] MUSI obsługiwać usługi ułatwień dostępu innych firm.
-
[H-SR] Zdecydowanie ZALECANE jest wstępne wczytywanie usług ułatwień dostępu na urządzeniu, które są porównywalne z funkcjami ułatwień dostępu Switch Access i TalkBack (w przypadku języków obsługiwanych przez wstępnie załadowany mechanizm zamiany tekstu na mowę) dostępnych w projekcie open source TalkBack.
Zamiana tekstu na mowę (sekcja 3.11)
Implementacje na urządzeniach mobilnych:
-
[H-0-1] MUSI obsługiwać silniki zamiany tekstu na mowę innych firm.
-
[H-SR] Zdecydowanie ZALECANE jest dodanie mechanizmu zamiany tekstu na mowę obsługującego języki dostępne na urządzeniu.
Szybkie ustawienia (sekcja 3.13)
Implementacje na urządzeniach mobilnych:
- [H-SR] Zdecydowanie ZALECANE jest dodanie komponentu Szybkie ustawienia.
Parowanie urządzenia towarzyszącego (sekcja 3.15)
Jeśli implementacje urządzeń mobilnych z Androidem deklarują obsługę FEATURE_BLUETOOTH
lub FEATURE_WIFI
, będą one spełniać te wymagania:
- [H-1-1] MUSI obsługiwać funkcję parowania urządzenia towarzyszącego.
2.2.4 Wydajność i moc
Spójność z wrażeniami użytkowników (art. 8.1)
Na urządzeniach mobilnych:
- [H-0-1] Stałe opóźnienie klatek. Niespójne opóźnienie renderowania klatki lub opóźnienie renderowania klatek NIE MOŻE mieć miejsca częściej niż 5 klatek na sekundę oraz POWINNY być mniej niż 1 klatka na sekundę.
- [H-0-2] Opóźnienie interfejsu. Implementacje na urządzeniach MUSZĄ zapewniać użytkownikom krótki czas oczekiwania przez przewijanie listy 10 tys. pozycji na liście zgodnie z definicją zawartą w narzędziu Android Compatibility Test Suite (CTS) w czasie krótszym niż 36 sekund.
- [H-0-3] Przełączanie zadań. W przypadku uruchomienia wielu aplikacji ponowne uruchomienie aplikacji już uruchomionej po uruchomieniu MUSI potrwać mniej niż 1 sekundę.
Wydajność dostępu do plików (sekcja 8.2)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI zapewnić wydajność sekwencyjnego zapisu wynoszącą co najmniej 5 MB/s.
- [H-0-2] MUSI zapewniać wydajność przy losowym zapisie na poziomie co najmniej 0,5 MB/s.
- [H-0-3] MUSI zapewniać wydajność sekwencyjnego odczytu co najmniej 15 MB/s.
- [H-0-4] MUSI zapewniać wydajność losowego odczytu z szybkością co najmniej 3,5 MB/s.
Tryby oszczędzania energii (artykuł 8.3)
Na urządzeniach mobilnych:
- [H-0-1] Wszystkie aplikacje, w przypadku których wyłączono tryby czuwania i uśpienia, MUSZĄ być widoczne dla użytkownika.
- [H-0-2] Algorytmy wyzwalania, konserwacji, wybudzania i używania globalnych ustawień systemu w trybach czuwania aplikacji i oszczędzania energii w trybie uśpienia NIE MOGĄ odbiegać od zasad projektu Android Open Source Project.
Obliczanie zużycia energii (sekcje 8.4)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI zawierać profil zasilania dla każdego komponentu, który określa bieżące zużycie przez poszczególne komponenty sprzętowe oraz przybliżone zużycie baterii przez komponenty w danym okresie, zgodnie z dokumentem w witrynie Android Open Source Project.
- [H-0-2] MUSI podawać wszystkie wartości zużycia energii w miliiamperach godzin (mAh).
- [H-0-3] MUSI zgłaszać zużycie energii procesora przez każdy identyfikator UID każdego procesu. Projekt Android Open Source Project spełnia to wymaganie dzięki implementacji modułu jądra
uid_cputime
. - [H-0-4] MUSI udostępnić informacje o zużywaniu energii za pomocą polecenia powłoki
adb shell dumpsys batterystats
deweloperowi aplikacji. - MUSI być przypisana do samego komponentu sprzętowego, jeśli nie można przypisać do aplikacji zużycia energii przez komponent sprzętowy.
Jeśli implementacje urządzeń mobilnych obejmują wyjście ekranu lub wideo:
- [H-1-1] MUSI przestrzegać intencji
android.intent.action.POWER_USAGE_SUMMARY
i wyświetlać menu ustawień pokazujące to zużycie energii.
2.2.5. Model zabezpieczeń
Uprawnienia (artykuły 9.1)
Implementacje na urządzeniach mobilnych:
- [H-0-1] MUSI zezwalać aplikacjom innych firm na dostęp do statystyk użytkowania za pomocą uprawnienia
android.permission.PACKAGE_USAGE_STATS
i udostępniać dostępny dla użytkownika mechanizm przyznawania lub anulowania dostępu do takich aplikacji w odpowiedzi na intencjęandroid.settings.ACTION_USAGE_ACCESS_SETTINGS
.
2.3. Wymagania dotyczące telewizora
Urządzenie Android TV odnosi się do implementacji urządzenia z Androidem, która jest interfejsem rozrywkowym służącym do korzystania z mediów cyfrowych, filmów, gier, aplikacji lub telewizji na żywo dla użytkowników, którzy siedzą w odległości około 3,5 metra (tzw. „relaks” lub „3-metrowy interfejs użytkownika”).
Implementacje na urządzeniach z Androidem zaliczają się do telewizorów, jeśli spełniają wszystkie te kryteria:
- udostępnić mechanizm zdalnego sterowania renderowanym interfejsem użytkownika na wyświetlaczu, który może znajdować się w odległości ok. 3 metrów od użytkownika;
- Musisz mieć wbudowany wyświetlacz o przekątnej ponad 24 cali LUB mieć port wyjściowy wideo, np. VGA, HDMI, DisplayPort lub port bezprzewodowy.
Dodatkowe wymagania podane w pozostałej części tej sekcji dotyczą urządzeń Android TV.
2.3.1 Urządzenie
Nawigacja bezdotykowa (sekcja 7.2.2)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI obsługiwać pada kierunkowego.
Klawisze nawigacyjne (artykuł 7.2.3)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI udostępniać funkcje ekranu głównego i Wstecz.
- [T-0-2] MUSI wysyłać do aplikacji na pierwszym planie zarówno zdarzenie normalnego naciśnięcia, jak i przytrzymania funkcji Back (
KEYCODE_BACK
).
Przyporządkowanie przycisków (art. 7.2.6.1)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI obejmować obsługę kontrolerów do gier i zadeklarować flagę funkcji
android.hardware.gamepad
.
Zdalne sterowanie (artykuł 7.2.7)
Implementacje na urządzeniach telewizyjnych:
- NALEŻY udostępniać pilota, za pomocą którego użytkownicy mogą uzyskiwać dostęp do danych wejściowych bezdotykowej nawigacji i głównych klawiszy nawigacyjnych.
Żyroskop (artykuł 7.3.4)
Jeśli żyroskop obejmuje żyroskop:
- [T-1-1] MUSI raportować zdarzenia z częstotliwością co najmniej 100 Hz.
Bluetooth (art. 7.4.3)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI obsługiwać Bluetooth i Bluetooth LE.
Minimalna pamięć i miejsce na dane (artykuł 7.6.1)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI mieć co najmniej 4 GB nieulotnego miejsca na prywatne dane aplikacji (partycja „/data”)
- [T-0-2] MUSI zwracać wartość „true” (prawda) w przypadku funkcji
ActivityManager.isLowRamDevice()
, gdy w jądrze i w przestrzeni użytkownika dostępnych jest mniej niż 1 GB pamięci.
Mikrofon (sekcja 7.8.1)
Implementacje na urządzeniach telewizyjnych:
- POWINIEN zawierać mikrofon.
Wyjście audio (artykuł 7.8.2)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI mieć wyjście audio i zadeklarować
android.hardware.audio.output
.
2.3.2. Multimedia
Kodowanie dźwięku (artykuł 5.1)
Implementacje na telewizorach MUSZĄ obsługiwać to kodowanie dźwięku:
- [T-0-1] Profil AAC MPEG-4 (AAC LC)
- [T-0-2] Profil AAC MPEG-4 HE (AAC+)
- [T-0-3] AAC ELD (rozszerzony format AAC z niskim opóźnieniem)
Kodowanie wideo (artykuł 5.2)
Implementacje na telewizorach MUSZĄ obsługiwać to kodowanie wideo:
- [T-0-1] H.264 AVC
- [T-0-2] VP8
H-264 (art. 5.2.2)
Implementacje urządzeń telewizyjnych:
- [T-SR] Zdecydowanie zalecana jest obsługa kodowania H.264 w rozdzielczości 720p i 1080p.
- [T-SR] Zdecydowanie zalecana jest obsługa kodowania H.264 w rozdzielczości 1080p przy 30 klatkach na sekundę (kl./s).
Dekodowanie wideo (artykuł 5.3)
Implementacje na telewizory MUSZĄ obsługiwać to dekodowanie wideo:
- [T-0-1] H.264 AVC
- [T-0-2] H.265 HEVC
- [T-0-3] MPEG-4 SP
- [T-0-4] VP8
- [T-0-5] VP9
Zdecydowanie ZALECANE są implementacje urządzeń telewizyjnych do obsługi następujących dekodowania wideo:
- [T-SR] MPEG-2
H.264 (art. 5.3.4)
Jeśli implementacje telewizorów obsługują dekodery H.264, umożliwiają one:
- [T-1-1] MUSI obsługiwać profil High Profile Level 4.2 oraz profil dekodowania HD 1080p (przy 60 kl./s).
- [T-1-2] MUSI dekodować filmy z profilami HD, zgodnie z informacjami w poniższej tabeli, oraz zakodować je przy użyciu profilu podstawowego, głównego lub wysokiego na poziomie 4.2.
H.265 (HEVC) (art. 5.3.5)
Jeśli implementacje telewizorów obsługują kodek H.265 i profil dekodowania HD 1080p, to:
- [T-1-1] MUSI obsługiwać poziom główny profilu głównego na poziomie 4.1.
- [T-SR] Zdecydowanie ZALECANE jest włączenie szybkości 60 kl./s w przypadku rozdzielczości HD 1080p.
Jeśli implementacje telewizorów obsługują kodek H.265 i profil dekodowania UHD:
- [T-2-1] Kodek MUSI obsługiwać profil główny poziomu 5 głównego poziomu 5.
VP8 (artykuł 5.3.6)
Jeśli implementacje urządzeń telewizyjnych obsługują kodek VP8:
- [T-1-1] MUSI obsługiwać profil dekodowania HD 1080p60.
Jeśli implementacje urządzeń telewizyjnych obsługują kodek VP8 i rozdzielczość 720p, umożliwiają:
- [T-2-1] MUSI obsługiwać profil dekodowania HD 720p60.
VP9 (artykuł 5.3.7)
Jeśli implementacje urządzeń telewizyjnych obsługują kodek VP9 i dekodowanie wideo UHD:
- [T-1-1] MUSI obsługiwać 8-bitową głębię kolorów i POWINNO obsługiwać profil 2 VP9 (10-bitowy).
Jeśli implementacje urządzeń telewizyjnych obsługują kodek VP9, profil 1080p i sprzętowe dekodowanie formatu VP9:
- [T-2-1] MUSI obsługiwać 60 kl./s w przypadku rozdzielczości 1080p.
Bezpieczne multimedia (art. 5.8)
Jeśli implementacjami urządzeń to urządzenia Android TV, które obsługują rozdzielczość 4K:
- [T-1-1] MUSI obsługiwać standard HDCP 2.2 w przypadku wszystkich przewodowych wyświetlaczy zewnętrznych.
Jeśli implementacje telewizorów nie obsługują rozdzielczości 4K:
- [T-2-1] MUSI obsługiwać standard HDCP 1.4 w przypadku wszystkich przewodowych wyświetlaczy zewnętrznych.
Implementacje na urządzeniach telewizyjnych:
- [T-SR] Zdecydowanie ZALECANE są jednoczesne dekodowanie bezpiecznych strumieni. Zdecydowanie ZALECANE jest co najmniej jednoczesne dekodowanie dwóch par.
Głośność wyjścia audio (artykuł 5.5.3)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI obsługiwać system wyciszania głównego wyjścia audio oraz dźwięku cyfrowego na obsługiwanych wyjściach, z wyjątkiem skompresowanego przelotowego wyjścia audio (gdzie na urządzeniu nie jest wykonywane dekodowanie dźwięku).
2.3.3 Oprogramowanie
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI zadeklarować funkcje
android.software.leanback
iandroid.hardware.type.television
.
Zgodność z WebView (sekcja 3.4.1)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI zapewniać pełną implementację interfejsu API
android.webkit.Webview
.
Sterowanie multimediami na ekranie blokady (sekcja 3.8.10)
Jeśli implementacje urządzeń Android TV obsługują ekran blokady:
- [T-1-1] MUSI wyświetlać powiadomienia na ekranie blokady, w tym szablon powiadomień o multimediach.
Wiele okien (sekcja 3.8.14)
Implementacje na urządzeniach telewizyjnych:
- [T-SR] Zdecydowanie ZALECANE jest włączenie obsługi wielu okien w trybie obrazu w obrazie (PIP).
Ułatwienia dostępu (sekcja 3.10)
Implementacje na urządzeniach telewizyjnych:
-
[T-SR] MUSI obsługiwać usługi ułatwień dostępu innych firm.
-
[T-SR] Zdecydowanie ZALECANE jest włączenie na urządzeniu implementacji usług ułatwień dostępu porównywalnych do funkcji ułatwień dostępu Switch Access i TalkBack (w przypadku języków obsługiwanych przez wstępnie wczytany mechanizm zamiany tekstu na mowę) zgodnie z projektem open source TalkBack.
Zamiana tekstu na mowę (sekcja 3.11)
Jeśli implementacje urządzeń zgłaszają funkcję android.hardware.audio.output:
-
[T-SR] Zdecydowanie ZALECANE jest dodanie mechanizmu zamiany tekstu na mowę obsługującego języki dostępne na urządzeniu.
-
[T-0-1] MUSI obsługiwać mechanizm zamiany tekstu na mowę innych firm.
Platforma danych wejściowych dotyczących telewizji (art. 3.12)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI obsługiwać platformę wejścia TV.
2.2.4 Wydajność i moc
Spójność z wrażeniami użytkowników (art. 8.1)
Urządzenia telewizyjne:
- [T-0-1] Stałe opóźnienie klatek. Niespójne opóźnienie renderowania klatki lub opóźnienie renderowania klatek NIE MOŻE mieć miejsca częściej niż 5 klatek na sekundę oraz POWINNY być mniej niż 1 klatka na sekundę.
Wydajność dostępu do plików (sekcja 8.2)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI zadbać o wydajność zapisu sekwencyjnego z szybkością co najmniej 5 MB/s.
- [T-0-2] MUSI zapewniać wydajność zapisu przy losowym połączeniu z szybkością co najmniej 0,5 MB/s.
- [T-0-3] MUSI zapewniać wydajność sekwencyjnego odczytu z szybkością co najmniej 15 MB/s.
- [T-0-4] MUSI zapewniać prędkość odczytu z szybkością losowej co najmniej 3,5 MB/s.
Tryby oszczędzania energii (artykuł 8.3)
Urządzenia telewizyjne:
- [T-0-1] Wszystkie aplikacje, w przypadku których wyłączono tryby czuwania i uśpienia, MUSZĄ być widoczne dla użytkownika.
- [T-0-2] Algorytmy wyzwalania, konserwacji, wybudzania oraz korzystanie z globalnych ustawień systemu w trybach Czuwanie aplikacji i Tryb uśpienia nie mogą odbiegać od zasad projektu Android Open Source Project.
Obliczanie zużycia energii (sekcje 8.4)
Implementacje na urządzeniach telewizyjnych:
- [T-0-1] MUSI zawierać profil zasilania dla każdego komponentu, który określa bieżące zużycie przez poszczególne komponenty sprzętowe oraz przybliżone zużycie baterii przez komponenty w danym okresie, zgodnie z dokumentem w witrynie Android Open Source Project.
- [T-0-2] MUSI podawać wszystkie wartości zużycia energii w miliiamperach godzin (mAh).
- [T-0-3] MUSI zgłaszać zużycie energii procesora przez każdy identyfikator UID każdego procesu. Projekt Android Open Source Project spełnia to wymaganie dzięki implementacji modułu jądra
uid_cputime
. - MUSI być przypisana do samego komponentu sprzętowego, jeśli nie można przypisać do aplikacji zużycia energii przez komponent sprzętowy.
- [T-0-4] MUSI udostępnić informacje o zużywaniu energii za pomocą polecenia powłoki
adb shell dumpsys batterystats
deweloperowi aplikacji.
2.4. Wymagania dotyczące zegarka
Zegarek z Androidem oznacza urządzenie z Androidem przeznaczone do noszenia na ciele, na przykład na nadgarstku.
Implementacje na urządzeniach z Androidem są zaliczane do urządzeń z Androidem, jeśli spełniają wszystkie te kryteria:
- Ekran musi mieć przekątną fizyczną z zakresu od 1,1 do 2,5 cala.
- Mają mechanizm przeznaczony do noszenia przy ciele.
Dodatkowe wymagania podane w pozostałej części tej sekcji dotyczą wyłącznie implementacji na zegarku Android Watch.
2.4.1. Urządzenie
Rozmiar ekranu (artykuł 7.1.1.1)
Implementacje na zegarkach:
- [W-0-1] MUSI mieć przekątną ekran o przekątnej od 1,1 do 2,5 cala.
Klawisze nawigacyjne (artykuł 7.2.3)
Implementacje na zegarkach:
- [W-0-1] MUSI mieć dostęp do funkcji ekranu głównego i funkcji Wstecz z wyjątkiem funkcji
UI_MODE_TYPE_WATCH
.
Wprowadzanie danych na ekranie dotykowym (sekcja 7.2.4)
Implementacje na zegarkach:
- [W-0-2] MUSI obsługiwać wprowadzanie na ekranie dotykowym.
Akcelerometr (sekcja 7.3.1)
Implementacje na zegarkach:
- [W-SR] Zdecydowanie ZALECANE jest użycie 3-osiowego akcelerometru.
Bluetooth (art. 7.4.3)
Implementacje na zegarkach:
- [W-0-1] MUSI obsługiwać Bluetooth.
Minimalna pamięć i miejsce na dane (artykuł 7.6.1)
Implementacje na zegarkach:
- [W-0-1] MUSI mieć co najmniej 1 GB nieulotnej pamięci masowej na prywatne dane aplikacji (partycja „/data”).
- [W-0-2] MUSI mieć co najmniej 416 MB pamięci dostępnej dla jądra i przestrzeni użytkownika.
Mikrofon (sekcja 7.8.1)
Implementacje na zegarkach:
- [W-0-1] MUSI zawierać mikrofon.
Wyjście audio (artykuł 7.8.1)
Implementacje na zegarkach:
- MOŻE BYĆ, ale NIE POWINNO mieć wyjścia audio.
2.4.2 Multimedia
Brak dodatkowych wymagań.
2.4.3 Oprogramowanie
Implementacje na zegarkach:
- [W-0-1] MUSI zadeklarować funkcję android.hardware.type.watch.
- [W-0-2] MUSI obsługiwać parametr uiMode = UI_MODE_TYPE_WATCH.
Wyszukiwarka (art. 3.8.4)
Implementacje na zegarkach:
- [W-SR] Zdecydowanie ZALECANE jest wdrożenie na urządzeniu asystenta do obsługi działania wspomagającego.
Ułatwienia dostępu (sekcja 3.10)
Implementacje zegarków deklarujące flagę funkcji android.hardware.audio.output
:
-
[W-1-1] MUSI obsługiwać usługi ułatwień dostępu innych firm.
-
[W-SR] Zdecydowanie ZALECANE jest wstępne wczytywanie usług ułatwień dostępu na urządzeniu, które są porównywalne z funkcjami ułatwień dostępu Switch Access i TalkBack (w przypadku języków obsługiwanych przez wstępnie załadowany mechanizm zamiany tekstu na mowę) dostępnych w projekcie open source TalkBack.
Zamiana tekstu na mowę (sekcja 3.11)
Jeśli implementacje na zegarku zgłaszają funkcję android.hardware.audio.output:
-
[W-SR] Zdecydowanie ZALECANE jest dodanie mechanizmu zamiany tekstu na mowę obsługującego języki dostępne na urządzeniu.
-
[W-0-1] MUSI obsługiwać mechanizm zamiany tekstu na mowę innych firm.
2.5. Wymagania dotyczące motoryzacji
Implementacja na Androida Automotive oznacza radio w pojeździe z Androidem jako systemem operacyjnym z częścią lub całością obsługi systemu bądź funkcji informacyjno-rozrywkowych.
Implementacje na urządzeniach z Androidem są zaliczane do samochodów, jeśli zawierają zadeklarowaną funkcję android.hardware.type.automotive
lub spełniają wszystkie poniższe kryteria.
- są umieszczone w pojeździe samochodowym lub mogą być do niego podłączone.
- korzystają z ekranu w rzędzie kierowcy jako głównego wyświetlacza.
Dodatkowe wymagania podane w pozostałej części tej sekcji dotyczą tylko implementacji na urządzeniach z Androidem Automotive.
2.5.1 Urządzenie
Rozmiar ekranu (artykuł 7.1.1.1)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI mieć przekątną ekranu o przekątnej co najmniej 6 cali.
- [A-0-2] MUSI mieć układ ekranu o wymiarach co najmniej 750 dp x 480 dp.
Klawisze nawigacyjne (artykuł 7.2.3)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI zawierać funkcję ekranu głównego, a MOŻE udostępniać funkcje Wstecz i Ostatnie.
- [A-0-2] MUSI wysyłać do aplikacji na pierwszym planie zarówno zdarzenie normalnego naciśnięcia, jak i przytrzymania funkcji Back (
KEYCODE_BACK
).
Akcelerometr (sekcja 7.3.1)
Implementacje na urządzeniach motoryzacyjnych:
- [A-SR] Zdecydowanie ZALECANE jest użycie 3-osiowego akcelerometru.
Jeśli implementacje urządzeń motoryzacyjnych zawierają 3-osiowy akcelerometr:
- [A-1-1] MUSI raportować zdarzenia z częstotliwością co najmniej 100 Hz.
- [A-1-2] MUSI być zgodny z układem współrzędnych czujnika samochodowego Androida.
GPS (artykuł 7.3.3)
Jeśli implementacje urządzeń motoryzacyjnych obejmują odbiornik GPS/GNSS i zgłaszają taką możliwość aplikacjom, możesz użyć flagi funkcji android.hardware.location.gps
:
- [A-1-1] Technologia GNSS MUSI generować rok „2017” lub nowszy.
Żyroskop (artykuł 7.3.4)
Jeśli żyroskop obejmuje urządzenia motoryzacyjne:
- [A-1-1] MUSI raportować zdarzenia z częstotliwością co najmniej 100 Hz.
Czujniki tylko w Androidzie Automotive (art. 7.3.11) Obecne akcesoria (art. 7.3.11.1)
Implementacje na urządzeniach motoryzacyjnych:
- TRZEBA podać obecny sprzęt jako
SENSOR_TYPE_GEAR
.
Tryb nocny (sekcja 7.3.11.2)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI obsługiwać tryb dzienny/nocny zdefiniowany jako
SENSOR_TYPE_NIGHT
. - [A-0-2] Wartość flagi
SENSOR_TYPE_NIGHT
MUSI być zgodna z trybem dziennym/nocnym na pulpicie i POWINNA być opracowana na podstawie danych z czujnika jasności otoczenia. - Czujnik jasności otoczenia MOŻE być taki sam jak Fotometr.
Stan jazdy (art. 7.3.11.3)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI obsługiwać stan jazdy zdefiniowany jako
SENSOR_TYPE_DRIVING_STATUS
z wartością domyślnąDRIVE_STATUS_UNRESTRICTED
po zatrzymaniu i zaparkowaniu pojazdu. Producenci urządzeń muszą skonfigurowaćSENSOR_TYPE_DRIVING_STATUS
pod kątem zgodności z wszystkimi przepisami i regulacjami prawnymi obowiązującymi na rynkach, na które produkt jest wysyłany.
Prędkość koła (art. 7.3.11.4)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI podawać prędkość pojazdu zdefiniowaną jako
SENSOR_TYPE_CAR_SPEED
.
Bluetooth (art. 7.4.3)
Implementacje na urządzeniach motoryzacyjnych:
-
[A-0-1] MUSI obsługiwać Bluetooth i POWINNO obsługiwać Bluetooth LE.
-
[A-0-2] Implementacje na Androida Automotive MUSZĄ obsługiwać te profile Bluetooth:
- Nawiązywanie połączeń telefonicznych przez profil HFP.
- Odtwarzanie multimediów przez profil dystrybucji dźwięku (A2DP).
- Sterowanie odtwarzaniem multimediów w profilu pilota (AVRCP).
- Udostępnianie kontaktów za pomocą profilu dostępu do książki telefonicznej (PBAP).
- MUSI obsługiwać profil dostępu do wiadomości (MAP).
Minimalna funkcjonalność sieci (art. 7.4.5)
Implementacje na urządzeniach motoryzacyjnych:
- POWINNA obsługiwać połączenia transmisji danych przez sieć komórkową.
Minimalna pamięć i miejsce na dane (artykuł 7.6.1)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI mieć co najmniej 4 GB nieulotnego miejsca na prywatne dane aplikacji (partycja „/data”)
Tryb urządzenia peryferyjnego USB (sekcja 7.7.1)
Implementacje na urządzeniach motoryzacyjnych:
- POWINIEN mieć port USB obsługujący tryb peryferyjny.
Mikrofon (sekcja 7.8.1)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI zawierać mikrofon.
Wyjście audio (artykuł 7.8.2)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI mieć wyjście audio i zadeklarować
android.hardware.audio.output
.
2.5.2 Multimedia
Kodowanie dźwięku (artykuł 5.1)
Implementacje na urządzeniach motoryzacyjnych MUSZĄ obsługiwać to kodowanie dźwięku:
- [A-1-1] Profil AAC MPEG-4 (AAC LC)
- [A-1-2] Profil MPEG-4 HE AAC (AAC+)
- [A-1-3] AAC ELD (rozszerzony AAC z niskim opóźnieniem)
Kodowanie wideo (artykuł 5.2)
Implementacje na urządzeniach motoryzacyjnych MUSZĄ obsługiwać to kodowanie wideo:
- [A-0-1] H.264 AVC
- [A-0-2] VP8
Dekodowanie wideo (artykuł 5.3)
Implementacje na urządzeniach motoryzacyjnych MUSZĄ obsługiwać to dekodowanie wideo:
- [A-0-1] H.264 AVC
- [A-0-2] MPEG-4 SP
- [A-0-3] VP8
- [A-0-4] VP9
Zdecydowanie ZALECANE są wdrożenia na urządzeniach motoryzacyjnych do obsługi następujących dekodowania wideo:
- [A-SR] H.265 HEVC
2.5.3 Oprogramowanie
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI zadeklarować funkcję android.hardware.type.automotive.
- [A-0-2] MUSI obsługiwać tryb uiMode = UI_MODE_TYPE_CAR.
- [A-0-3] Implementacje na Androida Automotive MUSZĄ obsługiwać wszystkie publiczne interfejsy API w przestrzeni nazw
android.car.*
.
Zgodność obiektów WebView (artykuł 3.4.1)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI zawierać pełną implementację interfejsu
android.webkit.Webview API
.
Powiadomienia (art. 3.8.3)
Implementacje na urządzeniach z Androidem Automotive:
- [A-0-1] MUSI wyświetlać powiadomienia korzystające z interfejsu API
Notification.CarExtender
na żądanie aplikacji innych firm.
Wyszukiwarka (art. 3.8.4)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] Aby wykonać działanie wspomagające, MUSISZ zaimplementować na urządzeniu asystenta.
Interfejs multimediów (sekcja 3.14)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI zawierać platformę UI do obsługi aplikacji innych firm korzystających z interfejsów API multimediów zgodnie z opisem w sekcji 3.14.
2.2.4 Wydajność i moc
Tryby oszczędzania energii (artykuł 8.3)
W przypadku implementacji na urządzeniach z branży motoryzacyjnej:
- [A-0-1] Wszystkie aplikacje zwolnione z trybu czuwania i uśpienia MUSZĄ być widoczne dla użytkownika.
- [A-0-2] Algorytmy wyzwalania, konserwacji, wybudzania i używania globalnych ustawień systemu w trybach Czuwanie aplikacji i Tryb uśpienia nie mogą odbiegać od zasad projektu Android Open Source Project.
Obliczanie zużycia energii (sekcje 8.4)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI zawierać profil zasilania dla każdego komponentu, który określa bieżące zużycie przez poszczególne komponenty sprzętowe oraz przybliżone zużycie baterii przez komponenty w danym okresie, zgodnie z dokumentem w witrynie Android Open Source Project.
- [A-0-2] MUSI podawać wszystkie wartości zużycia energii w miliiamperach godzin (mAh).
- [A-0-3] MUSI zgłaszać zużycie energii procesora przez identyfikator UID każdego procesu. Projekt Android Open Source Project spełnia to wymaganie dzięki implementacji modułu jądra
uid_cputime
. - MUSI być przypisana do samego komponentu sprzętowego, jeśli nie można przypisać do aplikacji zużycia energii przez komponent sprzętowy.
- [A-0-4] MUSI udostępnić informacje o zużywaniu energii za pomocą polecenia powłoki
adb shell dumpsys batterystats
deweloperowi aplikacji.
2.2.5. Model zabezpieczeń
Obsługa wielu użytkowników (art. 9.5)
Jeśli w implementacjach na urządzeniach z branży motoryzacyjnej uwzględniono wielu użytkowników:
- [A-1-1] MUSI zawierać konto gościa, które umożliwia korzystanie ze wszystkich funkcji systemu pojazdu bez konieczności logowania się użytkownika.
Izolacja systemu w pojazdach samochodowych (art. 9.14)
Implementacje na urządzeniach motoryzacyjnych:
- [A-0-1] MUSI blokować wiadomości z podsystemów pojazdu Android Framework, na przykład umieszczać dozwolone typy wiadomości i źródła wiadomości na liście dozwolonych.
- [A-0-2] MUSI pilnować ataków typu DoS za pomocą platformy Androida lub aplikacji innych firm. Zapewnia to ochronę przed złośliwym oprogramowaniem, które zapełnia sieć pojazdu intensywnością ruchu i może prowadzić do awarii podsystemów pojazdu.
2.6. Wymagania dotyczące tabletu
Tablet z Androidem oznacza wdrożenie urządzenia z Androidem, w którym zazwyczaj trzymasz urządzenie obiema dłońmi, a nie w tradycyjnej obudowie.
Implementacje na urządzeniach z Androidem są zaliczane do tabletów, jeśli spełniają wszystkie te kryteria:
- mieć źródło zasilania, które pozwala na mobilność, np. baterię.
- mieć ekran o przekątnej fizycznej, czyli o przekątnej od 7 do 18 cali.
Implementacje na tabletach mają podobne wymagania jak w przypadku urządzeń mobilnych. Wyjątki zostały w tej sekcji oznaczone symbolami i *, a wyjątki uwzględniono w tej sekcji.
2.4.1. Urządzenie
Rozmiar ekranu (artykuł 7.1.1.1)
Implementacje na tabletach:
- [Ta-0-1] MUSI mieć ekran o przekątnej od 7 do 18 cali.
Minimalna pamięć i miejsce na dane (artykuł 7.6.1)
Gęstości ekranu wymienione dla małych/normalnych ekranów zgodnie z wymaganiami urządzeń mobilnych nie mają zastosowania do tabletów.
Tryb urządzenia peryferyjnego USB (sekcja 7.7.1)
Jeśli urządzenia mobilne są wyposażone w port USB obsługujący tryb peryferyjny, te funkcje:
- MOŻESZ wdrożyć interfejs Android Open Accessory API (AOA).
Tryb rzeczywistości wirtualnej (art. 7.9.1)
Wysoka wydajność rzeczywistości wirtualnej (art. 7.9.2)
Wymagania dotyczące rzeczywistości wirtualnej nie mają zastosowania do tabletów.
3. Oprogramowanie
3.1. Zgodność z zarządzanym interfejsem API
Podstawowym narzędziem dla aplikacji na Androida jest zarządzane środowisko wykonywania kodu bajtowego Dalvik. Interfejs programowania aplikacji na Androida (API) to zestaw interfejsów platformy Androida dostępnych dla aplikacji działających w zarządzanym środowisku wykonawczym.
-
[C-0-1] Implementacje urządzeń MUSZĄ zapewniać pełne implementacje, w tym wszystkie udokumentowane działania, dowolnego udokumentowanego interfejsu API udostępnianego przez pakiet SDK do Androida lub dowolny interfejs API oznaczony znacznikiem „@SystemApi” w kodzie źródłowym Androida.
-
[C-0-2] Implementacje urządzeń MUSZĄ obsługiwać/zachować wszystkie klasy, metody i powiązane elementy oznaczone adnotacją TestApi (@TestApi).
-
[C-0-3] Implementacje urządzeń NIE MOGĄ pomijać żadnych zarządzanych interfejsów API, zmieniać interfejsów API ani podpisów, odbiegać od udokumentowanego działania ani zawierać elementów bez działania, z wyjątkiem przypadków wyraźnie dozwolonych w tej definicji zgodności.
-
[C-0-4] Implementacje na urządzeniach MUSZĄ nadal utrzymywać interfejsy API i działać w sposób rozsądny, nawet jeśli niektóre funkcje sprzętowe, w przypadku których Android obsługuje interfejsy API, są pomijane. Szczegółowe informacje o wymaganiach w tym scenariuszu znajdziesz w sekcji 7.
3.1.1. Rozszerzenia na Androida
Android umożliwia rozszerzenie zarządzanych interfejsów API przy zachowaniu tej samej wersji na poziomie interfejsu API.
- [C-0-1] Implementacje na urządzeniach z Androidem MUSZĄ wstępnie wczytywać implementację AOSP biblioteki wspólnej
ExtShared
i usługExtServices
w wersji wyższej lub równej minimalnej dozwolonej wersji na każdym poziomie interfejsu API. Na przykład urządzenia z Androidem 7.0 korzystające z interfejsu API na poziomie 24 MUSZĄ zawierać co najmniej wersję 1.
3.2. Zgodność Soft API
Oprócz zarządzanych interfejsów API opisanych w sekcji 3.1 Android zapewnia też ważny „rozbudowany” interfejs API tylko w czasie działania. Mogą to być intencje, uprawnienia i podobne aspekty aplikacji na Androida, których nie można egzekwować podczas kompilowania aplikacji.
3.2.1. Uprawnienia
- [C-0-1] Implementacje urządzeń MUSZĄ obsługiwać i egzekwować wszystkie stałe uprawnień zgodnie z dokumentacją na stronie z informacjami o uprawnieniach. Pamiętaj, że sekcja 9 zawiera dodatkowe wymagania związane z modelem zabezpieczeń Androida.
3.2.2. Parametry kompilacji
Interfejsy API Androida zawierają pewną liczbę stałych w klasie android.os.Build, które służą do opisania bieżącego urządzenia.
- [C-0-1] Aby zapewnić spójne, istotne wartości w różnych implementacjach urządzeń, w tabeli poniżej znajdziesz dodatkowe ograniczenia dotyczące formatów tych wartości, z którymi implementacje MUSZĄ być zgodne.
Parametr | Szczegóły |
---|---|
WERSJA.PREMIERA | Wersja obecnie uruchomionego systemu Android w formacie zrozumiałym dla człowieka. To pole MUSI mieć jedną z wartości ciągu znaków zdefiniowanych w 8.1. |
WERSJA.SDK | Wersja obecnie uruchomionego systemu Android w formacie dostępnym dla kodu aplikacji innej firmy. W przypadku Androida 8.1 to pole MUSI zawierać wartość całkowitą 8.1_INT. |
VERSION.SDK_INT | Wersja obecnie uruchomionego systemu Android w formacie dostępnym dla kodu aplikacji innej firmy. W przypadku Androida 8.1 to pole MUSI zawierać wartość całkowitą 8.1_INT. |
WERSJA.INCREMENTALNA | Wartość wybrana przez mechanizm implementujący urządzenie, oznaczający konkretną kompilację obecnie działającego systemu Android, w formacie zrozumiałym dla człowieka. Tej wartości NIE WOLNO używać ponownie w różnych kompilacjach udostępnianych użytkownikom. Typowym zastosowaniem tego pola jest wskazywanie numeru kompilacji lub identyfikatora zmiany źródła, które zostały użyte do wygenerowania kompilacji. Nie ma wymagań dotyczących konkretnego formatu tego pola, za wyjątkiem tego, że NIE MOŻE ono mieć wartości null ani pustego ciągu („”). |
PLANSZOWE | Wartość wybrana przez mechanizm implementujący urządzenie, określający konkretny wewnętrzny sprzęt używany przez urządzenie, w formacie zrozumiałym dla człowieka. To pole może być użyte do wskazania konkretnej wersji płyty zasilającej urządzenie. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII i pasuje do wyrażenia regularnego „^[a-zA-Z0-9_-]+$”. |
MARKI | Wartość odzwierciedlająca markę powiązaną z urządzeniem znana użytkownikom. MUSI mieć format zrozumiały dla człowieka i MUSI reprezentować producenta urządzenia lub markę firmy, pod którą urządzenie jest sprzedawane. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII i pasuje do wyrażenia regularnego „^[a-zA-Z0-9_-]+$”. |
OBSŁUGI_MOŻLIWOŚCI | Nazwa zestawu instrukcji (typ procesora + konwencja ABI) kodu natywnego. Zobacz sekcję 3.3. Zgodność z natywnym interfejsem API. |
OBSŁUGI_32_BIT_ABIS | Nazwa zestawu instrukcji (typ procesora + konwencja ABI) kodu natywnego. Zobacz sekcję 3.3. Zgodność z natywnym interfejsem API. |
OBSŁUGI_64_BIT_ABIS | Nazwa drugiego zbioru instrukcji (typ procesora + konwencja ABI) kodu natywnego. Zobacz sekcję 3.3. Zgodność z natywnym interfejsem API. |
CPU_ABI | Nazwa zestawu instrukcji (typ procesora + konwencja ABI) kodu natywnego. Zobacz sekcję 3.3. Zgodność z natywnym interfejsem API. |
CPU_ABI2 | Nazwa drugiego zbioru instrukcji (typ procesora + konwencja ABI) kodu natywnego. Zobacz sekcję 3.3. Zgodność z natywnym interfejsem API. |
URZĄDZENIE | Wartość wybrana przez program implementujący urządzenie, zawierająca nazwę deweloperską lub nazwę kodową identyfikującą konfigurację funkcji sprzętowych i konstrukcję przemysłową urządzenia. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII. Musi być zgodna z wyrażeniem regularnym „^[a-zA-Z0-9_-]+$”. Ta nazwa urządzenia NIE MOŻE zmieniać się przez cały okres użytkowania produktu. |
DŹWIĘK |
Ciąg jednoznacznie identyfikujący tę kompilację. MUSI być łatwo zrozumiała dla człowieka. MUSI być zgodna z tym szablonem:
$(BRAND)/$(PRODUCT)/ Na przykład:
acme/myproduct/ Odcisk cyfrowy NIE MOŻE zawierać odstępów. Jeśli inne pola w powyższym szablonie zawierają odstępy, MUSZĄ one zostać zastąpione w odcisku cyfrowym kompilacji innym znakiem, np. znakiem podkreślenia („_”). Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII. |
SPRZĘT | Nazwa sprzętu (z wiersza poleceń jądra lub /proc). MUSI być łatwo zrozumiała dla człowieka. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII i pasuje do wyrażenia regularnego „^[a-zA-Z0-9_-]+$”. |
GOSPODARZE | Ciąg jednoznacznie identyfikujący hosta, na którym została utworzona kompilacja, w formacie zrozumiałym dla człowieka. Nie ma wymagań dotyczących konkretnego formatu tego pola, za wyjątkiem tego, że NIE MOŻE ono mieć wartości null ani pustego ciągu („”). |
ID | Identyfikator wybrany przez mechanizm implementujący urządzenie w celu odwołania się do konkretnej wersji w formacie zrozumiałym dla człowieka. To pole może być takie samo jak android.os.Build.VERSION.INCREMENTAL, ale MUSI zawierać wartość na tyle zrozumiałą, aby użytkownicy mogli odróżnić kompilacje oprogramowania. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII i pasuje do wyrażenia regularnego „^[a-zA-Z0-9._-]+$”. |
PRODUCENT | Nazwa handlowa producenta oryginalnego sprzętu (OEM) produktu. Nie ma wymagań dotyczących konkretnego formatu tego pola. NIE MOŻE ono mieć wartości null ani pustego ciągu („”). To pole NIE MOŻE się zmieniać przez cały okres użytkowania produktu. |
MODEL | Wartość wybrana przez program implementujący urządzenie, zawierająca znaną użytkownikowi nazwę urządzenia. POWINIEN być pod tą samą nazwą, pod którą urządzenie jest sprzedawane i sprzedawane użytkownikom. Nie ma wymagań dotyczących konkretnego formatu tego pola. NIE MOŻE ono mieć wartości null ani pustego ciągu („”). To pole NIE MOŻE się zmieniać przez cały okres użytkowania produktu. |
USŁUGA | Wartość wybrana przez program implementujący urządzenie, zawierająca nazwę programistyczną lub nazwę kodową konkretnego produktu (SKU), która MUSI być niepowtarzalna w ramach tej samej marki. MUSI być zrozumiała dla człowieka, ale niekoniecznie przeznaczona dla użytkowników. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII. Musi ona pasować do wyrażenia regularnego „^[a-zA-Z0-9_-]+$”. Ta nazwa produktu NIE MOŻE zmieniać się przez cały okres użytkowania produktu. |
SERYJNY | Numer seryjny sprzętu. MUSI być dostępny i unikalny na wszystkich urządzeniach z tym samym modelem MODEL i MANUFACTURER. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII i pasuje do wyrażenia regularnego „^([a-zA-Z0-9]{6,20}$”). |
TAGI | Rozdzielona przecinkami lista tagów wybranych przez mechanizm implementujący urządzenie, który dokładniej rozróżnia kompilację. To pole MUSI mieć jedną z wartości odpowiadających 3 typowym konfiguracjom podpisywania platformy Androida: Release-keys, dev-keys lub test-keys. |
CZAS | Wartość reprezentująca sygnaturę czasową wystąpienia kompilacji. |
TYP | Wartość wybrana przez narzędzie implementujące urządzenie, określająca konfigurację środowiska wykonawczego kompilacji. To pole MUSI mieć jedną z wartości odpowiadających 3 typowym konfiguracjom środowiska wykonawczego Androida: user, userdebug lub eng. |
UŻYTKOWNIK | Nazwa lub identyfikator użytkownika (lub użytkownika automatycznego), który wygenerował kompilację. Nie ma wymagań dotyczących konkretnego formatu tego pola, za wyjątkiem tego, że NIE MOŻE ono mieć wartości null ani pustego ciągu („”). |
PAKIET_BEZPIECZEŃSTWA | Wartość wskazująca poziom poprawki zabezpieczeń kompilacji. MUSI wskazywać, że kompilacja nie jest w żaden sposób podatna na ataki opisane w wyznaczonym biuletynie na temat bezpieczeństwa publicznego w Androidzie. MUSI mieć format [RRRR-MM-DD] i odpowiadać zdefiniowanym ciągiem znaków udokumentowanym w biuletynie dotyczącym bezpieczeństwa w Androidzie lub w dokumencie Android Security Advisory, na przykład „2015-11-01”. |
PODSTAWY_systemu operacyjnego | Wartość reprezentująca parametr FINGERINSERT kompilacji, która jest identyczna z tą kompilacją poza poprawkami wymienionymi w biuletynie na temat bezpieczeństwa publicznego w Androidzie. MUSI zgłosić prawidłową wartość. Jeśli taka kompilacja nie istnieje, zgłoś pusty ciąg znaków („”). |
WŁAŚCICIEL MOTYWACYJNY | Wartość wybrana przez mechanizm implementujący urządzenie identyfikujący konkretną wersję wewnętrznego programu rozruchowego używaną na urządzeniu w formacie zrozumiałym dla człowieka. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII i pasuje do wyrażenia regularnego „^[a-zA-Z0-9._-]+$”. |
getRadioVersion() | MUSI (być lub zwracać) wartość wybraną przez mechanizm implementujący urządzenie identyfikującą konkretną wewnętrzną wersję radia/modemu używaną w urządzeniu, w formacie zrozumiałym dla człowieka. Jeśli urządzenie nie ma wewnętrznego radia/modema, MUSI zwracać wartość NULL. Wartość tego pola MUSI być zakodowana jako 7-bitowy kod ASCII i pasuje do wyrażenia regularnego „^[a-zA-Z0-9._-,]+$”. |
3.2.3 Zgodność intencji
3.2.3.1. Podstawowe intencje aplikacji
Intencje w Androidzie umożliwiają komponentom aplikacji żądanie działania funkcji z innych komponentów Androida. Projekt nadrzędny na Androida zawiera listę aplikacji uznawanych za podstawowe aplikacje na Androida, która implementuje kilka wzorców intencji do wykonywania typowych działań.
-
[C-0-1] Implementacje urządzeń MUSZĄ wstępnie wczytywać co najmniej 1 aplikację lub komponent usługi z modułem obsługi intencji dla wszystkich wzorców filtra intencji publicznych zdefiniowanych przez te podstawowe aplikacje na Androida w AOSP:
- Zegar biurkowy
- Przeglądarka
- Kalendarz
- Kontakty
- Galeria
- Wyszukiwanie globalne
- Wyrzutnia
- Muzyka
- Ustawienia
3.2.3.2. Rozwiązanie intencji
- [C-0-1] Android jest rozszerzoną platformą, dlatego implementacje urządzeń MUSZĄ zezwalać na zastąpienie każdego wzorca intencji wymienionego w sekcji 3.2.3.1 przez aplikacje innych firm. Implementacja open source Androida na to pozwala domyślnie.
-
[C-0-2] Implementatorzy oprogramowania NIE MOGĄ przypisywać specjalnych uprawnień do korzystania z tych wzorców intencji przez aplikacje systemowe ani uniemożliwiać aplikacjom innych firm wiązania tych wzorców i przejmowania nad nimi kontroli. Zakaz ten obejmuje w szczególności m.in. wyłączenie interfejsu „Wybór”, który pozwala użytkownikowi wybierać spośród wielu aplikacji, które obsługują ten sam wzorzec intencji.
-
[C-0-3] Implementacje urządzeń MUSZĄ udostępniać interfejs, który pozwala użytkownikom modyfikować domyślne działania pod kątem intencji.
-
Implementacje urządzeń MOGĄ jednak udostępnić domyślne działania dla określonych wzorców identyfikatorów URI (np. http://play.google.com), jeśli działanie domyślne zawiera bardziej szczegółowy atrybut identyfikatora URI danych. Na przykład wzorzec filtra intencji określający identyfikator URI danych „http://www.android.com” jest bardziej szczegółowy niż podstawowy wzorzec intencji przeglądarki dla „http://”.
Android zawiera również mechanizm, który umożliwia aplikacjom innych firm deklarowanie wiarygodnego domyślnego działania związanego z łączeniem aplikacji w przypadku określonych typów intencji URI internetowego. Gdy takie wiarygodne deklaracje są zdefiniowane we wzorcach filtra intencji aplikacji, implementacje urządzeń:
- [C-0-4] MUSI spróbować zweryfikować wszystkie filtry intencji, wykonując kroki weryfikacji zdefiniowane w specyfikacji linków do zasobów cyfrowych, zgodnie z implementacją Menedżera pakietów w starszym projekcie Android Open Source.
- [C-0-5] MUSI próbować zweryfikować filtry intencji podczas instalacji aplikacji i ustawić wszystkie zweryfikowane filtry intencji UIR jako domyślne moduły obsługi aplikacji (UIR).
- MOGĄ ustawić filtry intencji URI jako domyślne moduły obsługi ich identyfikatorów URI, jeśli zostaną one zweryfikowane, ale inne filtry URI kandydata nie przejdą weryfikacji. Jeśli tak działa implementacja na urządzeniu, MUSI udostępniać w menu ustawień odpowiednie zastąpienia wzorca identyfikatora URI.
- MUSI udostępniać w Ustawieniach te opcje linków do aplikacji w poszczególnych aplikacjach:
- [C-0-6] Użytkownik MUSI mieć możliwość całościowego zastępowania domyślnego działania linków aplikacji: zawsze otwieraj, zawsze pytaj lub nigdy nie otwieraj – to ustawienie musi mieć zastosowanie do wszystkich kandydujących filtrów intencji URI.
- [C-0-7] Użytkownik MUSI wyświetlić listę filtrów intencji URI kandydatów.
- Implementacja na urządzeniu MOŻE dać użytkownikowi możliwość zastąpienia wybranych filtrów intencji URI, które zostały zweryfikowane, na podstawie poszczególnych intencji.
- [C-0-8] Implementacja na urządzeniu MUSI zapewniać użytkownikom możliwość wyświetlenia i zastąpienia konkretnych filtrów intencji URI kandydatów, jeśli implementacja urządzenia umożliwia pomyślne przejście weryfikacji przez niektóre filtry intencji URI kandydatów, a inne – niepowodzeniem.
3.2.3.3 Przestrzenie nazw intencji
- [C-0-1] Implementacje urządzeń NIE MOGĄ zawierać żadnych komponentów Androida, które uwzględniają nowe intencje lub wzorce intencji transmisji za pomocą ciągu ACTION, CATEGORY lub innego klucza w przestrzeni nazw android. lub com.android..
- [C-0-2] Moduły implementujące urządzenia NIE MOGĄ zawierać żadnych komponentów Androida, które uwzględniają nowe intencje lub wzorce intencji transmisji używających ACTION, CATEGORY lub innego ciągu kluczowego w przestrzeni pakietu należącej do innej organizacji.
- [C-0-3] Mechanizmy implementujące urządzenia NIE MOGĄ zmieniać ani rozszerzać żadnych wzorców intencji używanych przez podstawowe aplikacje wymienione w sekcji 3.2.3.1.
- Implementacje na urządzeniach MOGĄ zawierać wzorce intencji wykorzystujące przestrzenie nazw w jasny i wyraźny sposób powiązane z ich własną organizacją. Zakaz ten jest podobny do zakazu określonego dla klas języka Java w sekcji 3.6.
3.2.3.4. Intencje związane z transmisją
Aplikacje innych firm korzystają z platformy do transmitowania określonych intencji w celu powiadomienia ich o zmianach w środowisku sprzętowym lub oprogramowania.
Implementacje na urządzeniach:
- [C-0-1] MUSI transmitować publiczne intencje transmisji w odpowiedzi na odpowiednie zdarzenia systemowe zgodnie z opisem w dokumentacji pakietu SDK. Pamiętaj, że to wymaganie nie jest sprzeczne z artykułem 3.5, ponieważ ograniczenie dotyczące aplikacji działających w tle zostało również opisane w dokumentacji pakietu SDK.
3.2.3.5. Domyślne ustawienia aplikacji
Android zawiera ustawienia, które pozwalają użytkownikom w łatwy sposób wybierać domyślne aplikacje, takie jak ekran główny czy SMS-y.
W stosownych przypadkach implementacje urządzeń MUSZĄ zawierać podobne menu ustawień i być zgodne ze wzorcem filtra intencji i metodami interfejsu API opisanymi poniżej w dokumentacji pakietu SDK.
Jeśli implementacje urządzeń zgłaszają android.software.home_screen
:
- [C-1-1] MUSI uwzględniać intencję
android.settings.HOME_SETTINGS
, aby wyświetlać domyślne menu ustawień aplikacji na ekranie głównym.
Jeśli implementacje urządzeń zgłaszają android.hardware.telephony
:
-
[C-2-1] MUSI zawierać menu ustawień, które wywołuje intencję
android.provider.Telephony.ACTION_CHANGE_DEFAULT
, by wyświetlić okno umożliwiające zmianę domyślnej aplikacji SMS. -
[C-2-2] MUSI uwzględniać intencję
android.telecom.action.CHANGE_DEFAULT_DIALER
, aby wyświetlać okno umożliwiające użytkownikowi zmianę domyślnej aplikacji Telefon. -
[C-2-3] MUSI uwzględniać intencję android.telecom.action.CHANGE_PHONE_ACCOUNTS w celu skonfigurowania
ConnectionServices
powiązanego zPhoneAccounts
, a także domyślnego konta PhoneAccount, którego dostawca usług telekomunikacyjnych będzie używać do nawiązywania połączeń wychodzących. Implementacja AOSP spełnia to wymaganie, dodając opcję „Konta telefoniczne” w menu ustawień „Połączenia”.
Jeśli implementacje urządzeń zgłaszają android.hardware.nfc.hce
:
- [C-3-1] MUSI uwzględniać intencję android.settings.NFC_PAYMENT_SETTINGS, aby wyświetlać domyślne menu ustawień funkcji Zbliż i zapłać.
Jeśli implementacje urządzeń obsługują VoiceInteractionService
i mają zainstalowaną więcej niż jedną aplikację korzystającą z tego interfejsu API, funkcje te:
- [C-4-1] MUSI uwzględniać intencję
android.settings.ACTION_VOICE_INPUT_SETTINGS
, aby wyświetlać domyślne menu ustawień aplikacji dla rozpoznawania i Asystenta głosowego.
3.2.4 Działania na ekranach dodatkowych
Jeśli implementacje urządzeń pozwalają na uruchamianie zwykłych aktywności na Androidzie na ekranach dodatkowych:
- [C-1-1] MUSI ustawiać flagę funkcji
android.software.activities_on_secondary_displays
. - [C-1-2] MUSI gwarantować zgodność z interfejsem API podobną do działania wykonywanego na ekranie głównym.
- [C-1-3] Nowa aktywność MUSI trafiać na ten sam ekran co aktywność, która uruchomiła je po uruchomieniu, bez określania docelowego sposobu wyświetlania przez interfejs API
ActivityOptions.setLaunchDisplayId()
. - [C-1-4] MUSI zniszczyć wszystkie działania, jeśli wyświetlany jest ekran z flagą
Display.FLAG_PRIVATE
. - [C-1-5] MUSI odpowiednio dostosować rozmiar wszystkich działań na
VirtualDisplay
, jeśli rozmiar wyświetlacza się zmienia. - MOŻE wyświetlić IME (edytor metody wprowadzania tekstu, czyli element sterujący, który umożliwia użytkownikom wpisywanie tekstu) na ekranie głównym, gdy pole tekstowe zostanie zaznaczone na wyświetlaczu dodatkowym.
- Trzeba ustawić fokus wejściowy na wyświetlaczu dodatkowym niezależnie od wyświetlacza głównego, jeśli obsługiwane są dane dotykowe lub klawisze.
- POWINNY jest zawierać parametr
android.content.res.Configuration
odpowiadający temu wyświetlaczowi, aby mógł być wyświetlany, działać prawidłowo i zachować zgodność w przypadku uruchomienia aktywności na wyświetlaczu dodatkowym.
Jeśli implementacje urządzeń pozwalają na uruchamianie zwykłych aktywności na Androidzie na ekranach dodatkowych, a ekrany główne i dodatkowe mają różne parametry android.util.DisplayMetrics:
- [C-2-1] Aktywności bez możliwości zmiany rozmiaru (które mają wartość
resizeableActivity=false
wAndroidManifest.xml
) i aplikacje kierowane na interfejs API na poziomie 23 lub niższym NIE MOGĄ być dozwolone na wyświetlaczach dodatkowych.
Jeśli implementacje urządzeń pozwalają na uruchamianie zwykłych aktywności na Androidzie na ekranach dodatkowych, a wyświetlacz dodatkowy ma flagę android.view.Display.FLAG_PRIVATE:
- [C-3-1] Tylko właściciel wyświetlacza i systemu oraz czynności, które są na nim widoczne, MUSI mieć możliwość uruchamiania na nim działań. Każdy może uruchomić ekran na wyświetlaczu z flagą android.view.Display.FLAG_PUBLIC.
3.3. Zgodność z natywnym interfejsem API
Implementacje na urządzeniach to:
Zgodność kodu natywnego stanowi wyzwanie. Z tego powodu do implementacji na urządzeniach:
- [SR] ZDECYDOWANIE ZALECANA do wykorzystania wymienionych poniżej bibliotek z nadrzędnego projektu Android Open Source.
3.3.1 Interfejsy binarne aplikacji
Zarządzany kod bajtowy Dalvik może wywoływać kod natywny podany w pliku .apk
aplikacji w postaci pliku ELF .so
skompilowanego pod kątem odpowiedniej architektury sprzętowej urządzenia. Ponieważ kod natywny jest w dużej mierze zależny od bazowej technologii procesora, Android definiuje szereg interfejsów binarnych aplikacji (ang. Application Binary Interfaces) w pakiecie Android NDK.
Implementacje na urządzeniach:
- [C-0-1] MUSI być zgodny z co najmniej 1 interfejsem ABI i musi być zgodny z pakietem Android NDK.
- [C-0-2] MUSI obejmować obsługę kodu działającego w środowisku zarządzanym w celu wywołania kodu natywnego z użyciem standardowej semantyki JNI (Java Native Interface).
- [C-0-3] MUSI być zgodna ze źródłem (tzn. z nagłówkiem) i z kodem binarnym (w przypadku interfejsu ABI) z każdą wymaganą biblioteką z poniższej listy.
- [C-0-4] MUSI obsługiwać odpowiednik 32-bitowego interfejsu ABI, jeśli obsługiwany jest dowolny 64-bitowy interfejs ABI.
- [C-0-5] MUSI podawać dokładne raporty dotyczące natywnego interfejsu binarnego aplikacji (ABI) obsługiwanego przez urządzenie, za pomocą parametrów
android.os.Build.SUPPORTED_ABIS
,android.os.Build.SUPPORTED_32_BIT_ABIS
iandroid.os.Build.SUPPORTED_64_BIT_ABIS
. Każdy interfejs ABI jest oddzielony przecinkami w kolejności od najbardziej do najmniej preferowanego. - [C-0-6] MUSI zgłaszać za pomocą powyższych parametrów tylko interfejsy ABI udokumentowane i opisane w najnowszej wersji dokumentacji zarządzania ABI w Androidzie NDK. MUSZĄ obsługiwać rozszerzenie Advanced SIMD (NEON).
-
[C-0-7] MUSI udostępnić wszystkie poniższe biblioteki udostępniające natywne interfejsy API, aby udostępniać je aplikacjom zawierającym kod natywny:
- libaaudio.so (natywna obsługa dźwięku AAudio).
- libandroid.so (natywna obsługa aktywności na Androidzie)
- libc (biblioteka C)
- libcamera2ndk.so
- libdl (dynamiczny tag łączący)
- libEGL.so (natywne zarządzanie powierzchnią OpenGL)
- libGLESv1_CM.so (OpenGL ES 1.x)
- libGLESv2.so (OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.x)
- libicui18n.so
- libicuuc.so
- libjnigraphics.so
- liblog (logowanie w systemie Android)
- libmediandk.so (obsługa natywnych interfejsów API multimediów)
- libm (biblioteka matematyczna)
- libOpenMAXAL.so (obsługa OpenMAX AL 1.0.1)
- libOpenSLES.so (obsługa dźwięku OpenSL ES 1.0.1)
- libRS.so
- libstdc++ (minimalna obsługa języka C++)
- libvulkan.so (Vulkan)
- libz (kompresja Zlib)
- Interfejs JNI
-
[C-0-8] NIE MOŻE dodawać ani usuwać funkcji publicznych dla wymienionych powyżej bibliotek natywnych.
- [C-0-9] MUSI zawierać dodatkowe biblioteki spoza AOSP dostępne bezpośrednio dla aplikacji innych firm w
/vendor/etc/public.libraries.txt
. - [C-0-10] NIE MOŻE udostępniać żadnych innych bibliotek natywnych zaimplementowanych i udostępnionych w AOSP jako bibliotek systemowych aplikacjom innych firm kierowanych na interfejs API na poziomie 24 lub wyższym, ponieważ są one zarezerwowane.
- [C-0-11] MUSI wyeksportować wszystkie symbole funkcji OpenGL ES 3.1 i Android Extension Pack (zdefiniowane w NDK) za pomocą biblioteki
libGLESv3.so
. Pamiętaj, że chociaż MUSZĄ być obecne wszystkie symbole, w sekcji 7.1.4.1 bardziej szczegółowo opisano wymagania dotyczące momentu pełnej implementacji poszczególnych funkcji. - [C-0-12] MUSI eksportować symbole funkcji podstawowych funkcji symoblów funkcji Vulkan 1.0 oraz rozszerzeń
VK_KHR_surface
,VK_KHR_android_surface
,VK_KHR_swapchain
,VK_KHR_maintenance1
iVK_KHR_get_physical_device_properties2
za pomocą bibliotekilibvulkan.so
. Pamiętaj, że chociaż MUSZĄ być obecne wszystkie symbole, w sekcji 7.1.4.2 szczegółowo opisano wymagania dotyczące momentu pełnej implementacji poszczególnych funkcji. - POWINNA budować z użyciem kodu źródłowego i plików nagłówka dostępnych w źródłowym projekcie Android Open Source
Kolejne wersje pakietu Android NDK mogą wprowadzić obsługę dodatkowych interfejsów ABI.
3.3.2 Zgodność z 32-bitowym kodem natywnym ARM
W przypadku urządzeń z 64-bitową architekturą ARM:
-
[C-1-1] Chociaż architektura ARMv8 wycofuje kilka operacji procesora, w tym niektóre operacje używane w istniejącym kodzie natywnym, poniższe wycofane operacje MUSZĄ pozostać dostępne w 32-bitowym natywnym kodzie ARM – zarówno przez natywnego procesora CPU, jak i przez emulację oprogramowania:
- Instrukcje dotyczące SWP i SWPB
- SETEND instrukcja
- Operacje na barierach CP15ISB, CP15DSB i CP15DMB
Jeśli implementacje urządzeń obejmują 32-bitowy interfejs ABI ABI:
-
[C-2-1] W polu
/proc/cpuinfo
MUSI zawierać te wiersze, jeśli jest odczytywany przez 32-bitowe aplikacje ARM, aby zapewnić zgodność z aplikacjami utworzonymi za pomocą starszych wersji Androida NDK.-
Features:
, a następnie lista wszystkich opcjonalnych funkcji procesora ARMv7 obsługiwanych przez urządzenie. -
CPU architecture:
, po której następuje liczba całkowita opisująca najwyżej obsługiwaną architekturę ARM urządzenia (np. „8” w przypadku urządzeń z architekturą ARMv8).
-
-
Nie wolno zmieniać
/proc/cpuinfo
podczas odczytu przez 64-bitowe aplikacje z architekturą ARM lub inne aplikacje.
3.4 Zgodność z internetem
3.4.1 Zgodność z WebView
Jeśli implementacje urządzeń zapewniają pełną implementację interfejsu API android.webkit.Webview
:
- [C-1-1] MUSI zgłosić użytkownika
android.software.webview
. - [C-1-2] Żeby wdrożyć interfejs API
android.webkit.WebView
, [C-1-2] MUSI użyć projektu Chromium z wcześniejszego projektu Android Open Source w wersji Androida 8.1. -
[C-1-3] Ciąg znaków klienta użytkownika zgłoszony przez WebView MUSI mieć ten format:
Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- Wartość ciągu $(VERSION) MUSI być taka sama jak wartość android.os.Build.VERSION.Release.
- Wartość ciągu $(MODEL) MUSI być taka sama jak wartość android.os.Build.MODEL.
- Wartość ciągu $(BUILD) MUSI być taka sama jak wartość android.os.Build.ID.
- Wartość ciągu $(CHROMIUM_VER) MUSI być wersją przeglądarki Chromium z nadrzędnego projektu Android Open Source.
- Implementacje na urządzeniach MOGĄ pominąć element „mobilny” w ciągu znaków klienta użytkownika.
-
Komponent WebView POWINIEN obsługiwać jak najwięcej funkcji HTML5, a jeśli go obsługuje, POWINIEN być zgodny ze specyfikacją HTML5.
3.4.2. Zgodność z przeglądarką
Jeśli implementacje urządzeń obejmują samodzielną aplikację przeglądarki do ogólnego przeglądania internetu, one:
- [C-1-1] MUSI obsługiwać każdy z tych interfejsów API powiązanych z HTML5:
- [C-1-2] MUSI obsługiwać interfejs webstorage API HTML5/W3C i interfejs IndexedDB API HTML5/W3C. Pamiętaj, że w związku z tym, że treści standardów tworzenia stron internetowych wolą korzystać z IndexedDB zamiast do przechowywania danych w internecie, IndexedDB może stać się wymaganym komponentem w przyszłej wersji Androida.
- MOŻE przesłać niestandardowy ciąg znaków klienta użytkownika do samodzielnej aplikacji przeglądarki.
- POWINNY jest wdrożyć obsługę jak największej ilości treści w języku HTML5 w samodzielnej aplikacji przeglądarki (niezależnie od tego, czy jest oparta na nadrzędnej aplikacji przeglądarki WebKit czy w zastępstwie innej firmy).
Jeśli jednak implementacje urządzeń nie zawierają samodzielnej aplikacji przeglądarki:
- [C-2-1] MUSI nadal obsługiwać wzorce intencji publicznej opisane w sekcji 3.2.3.1.
3.5. Zgodność behawioralna interfejsu API
Działanie każdego z typów interfejsów API (zarządzane, elastyczne, natywne i internetowe) musi być zgodne z preferowaną implementacją projektu Android Open Source nadrzędnego. Oto niektóre obszary zgodności:
- [C-0-1] Urządzenia NIE MOGĄ zmieniać działania ani semantyki intencji standardowej.
- [C-0-2] Urządzenia NIE MOGĄ zmieniać semantyki cyklu życia ani semantyki cyklu życia określonego typu komponentu systemu (np. Service, Activity czy ContentProvider).
- [C-0-3] Urządzenia NIE MOGĄ zmieniać semantyki uprawnień standardowych.
- Urządzenia NIE MOGĄ zmieniać ograniczeń nałożonych na aplikacje w tle. Dotyczy to zwłaszcza aplikacji działających w tle:
- [C-0-4] Aby otrzymywać dane wyjściowe z
GnssMeasurement
iGnssNavigationMessage
, MUSISZ przestać wykonywać wywołania zwrotne zarejestrowane przez aplikację. - [C-0-5] MUSI ograniczać częstotliwość aktualizacji dostarczanych do aplikacji za pomocą klasy interfejsu API
LocationManager
lub metodyWifiManager.startScan()
. - [C-0-6] Jeśli aplikacja jest kierowana na interfejs API na poziomie 25 lub wyższym, NIE MOŻE umożliwiać rejestrowania odbiorników na potrzeby niejawnych komunikatów Androida w pliku manifestu, chyba że intencja transmisji wymaga uprawnienia
"signature"
lub"signatureOrSystem"
protectionLevel
lub znajduje się na liście wykluczeń. - [C-0-7] Jeśli aplikacja jest kierowana na interfejs API na poziomie 25 lub wyższym, MUSI zatrzymywać usługi w tle, tak jakby aplikacja wywołała metodę
stopSelf()
, chyba że aplikacja znajduje się na tymczasowej liście dozwolonych, aby umożliwić wykonywanie zadania, które jest widoczne dla użytkownika. - [C-0-8] Jeśli aplikacja jest kierowana na interfejs API na poziomie 25 lub wyższym, MUSI uruchamiać blokady uśpienia ustawione przez aplikację.
- [C-0-4] Aby otrzymywać dane wyjściowe z
Powyższa lista nie jest wyczerpująca. Compatibility Test Suite (CTS) testuje znaczną część platformy pod kątem zgodności behawioralnej, ale nie wszystkie. Odpowiada on za zapewnienie zgodności behawioralnej z projektem Android Open Source. Z tego względu w miarę możliwości osoby wdrażające na urządzeniach POWINNY są używać kodu źródłowego dostępnego w ramach Android Open Source Project, zamiast ponownie wdrażać istotne części systemu.
3.6. Przestrzenie nazw interfejsów API
Android przestrzega konwencji przestrzeni nazw pakietów i klas zdefiniowanych przez język programowania Java. Aby zapewnić zgodność z aplikacjami innych firm, implementujące urządzenia NIE MOGĄ wprowadzać żadnych zabronionych zmian w tych przestrzeniach nazw pakietów (patrz poniżej):
-
java.*
-
javax.*
-
sun.*
-
android.*
-
com.android.*
Oznacza to, że:
- [C-0-1] NIE MOŻE modyfikować publicznie dostępnych interfejsów API na platformie Androida przez zmianę podpisu metod lub podpisów klas bądź usuwanie klas bądź pól klas.
- [C-0-2] NIE MOŻE dodawać żadnych publicznie dostępnych elementów (takich jak klasy lub interfejsy, pola czy metody do istniejących klas lub interfejsów) ani testowych interfejsów API ani systemowych interfejsów API w powyższych przestrzeniach nazw. „Element widoczny publicznie” to każdy obiekt, który nie jest oznaczony znacznikiem „@hide” używanym w kodzie źródłowym Androida.
Implementacje na urządzeniach MOGĄ zmodyfikować podstawową implementację interfejsów API, ale takie modyfikacje:
- [C-0-3] NIE MOŻE wpływać na określone zachowanie ani na podpis w języku Java jakichkolwiek publicznie udostępnionych interfejsów API.
- [C-0-4] NIE POWINNY być reklamowane ani w żaden inny sposób prezentowane deweloperom.
Jednak narzędzia implementujące urządzenia MOGĄ dodawać niestandardowe interfejsy API poza standardową przestrzenią nazw Androida, ale niestandardowe interfejsy API:
- [C-0-5] NIE MOŻE znajdować się w przestrzeni nazw należącej do innej organizacji lub do innej organizacji. Na przykład narzędzia implementujące urządzenia NIE MOGĄ dodawać interfejsów API do przestrzeni nazw
com.google.*
ani do podobnej przestrzeni nazw – tylko Google może to robić. Analogicznie Google NIE MOŻE dodawać interfejsów API do przestrzeni nazw innych firm. - [C-0-6] MUSI być spakowana w bibliotece współdzielonej Androida, tak aby większe wykorzystanie pamięci przez interfejsy API miało wpływ tylko na aplikacje, które z nich korzystają (za pomocą mechanizmu <uses-library>).
Jeśli mechanizm implementujący urządzenia proponuje ulepszenie jednej z przestrzeni nazw pakietów powyżej (na przykład przez dodanie nowej przydatnej funkcji do istniejącego interfejsu API lub dodanie nowego interfejsu API), może on wejść na stronę source.android.com i rozpocząć proces przesyłania zmian i kodu, zgodnie z informacjami na tej stronie.
Powyższe ograniczenia odpowiadają standardowym konwencjom nazewnictwa interfejsów API w języku programowania Java. Ta sekcja ma tylko pomóc wzmocnić te konwencje i nadać im wiążący charakter przez uwzględnienie ich w tej definicji zgodności.
3.7. Zgodność środowiska wykonawczego
Implementacje na urządzeniach:
-
[C-0-1] MUSI obsługiwać pełny format DEX (Dalvik Executable) oraz specyfikację i semantykę kodu bajtowego Dalvik.
-
[C-0-2] MUSI skonfigurować środowiska wykonawcze Dalvik, aby przydzielać pamięć zgodnie z nadrzędną platformą Androida oraz w tabeli poniżej. (definicje rozmiaru i gęstości ekranu znajdziesz w sekcji 7.1.1).
-
POWINIEN użyć środowiska wykonawczego Android (ART), referencyjnej nadrzędnej implementacji formatu wykonywalnego Dalvik i systemu zarządzania pakietami implementacji referencyjnej.
-
W celu zapewnienia stabilności środowiska wykonawczego MUSISZ przeprowadzać testy rozmycia w różnych trybach wykonania i architekturach docelowych. Zapoznaj się z narzędziami JFuzz i DexFuzz na stronie projektu Android Open Source.
Pamiętaj, że podane poniżej wartości pamięci są uważane za wartości minimalne, a implementacje urządzeń MOGĄ przeznaczyć więcej pamięci na aplikację.
Układ ekranu | Gęstość ekranu | Minimalna pamięć aplikacji |
---|---|---|
Zegarek z Androidem | 120 dpi (ldpi) | 32MB |
160 dpi (mdpi) | ||
213 dpi (tvdpi) | ||
240 dpi (hdpi) | 36MB | |
280 dpi (280dpi) | ||
320 dpi (Xhdpi) | 48MB | |
360 dpi (360dpi) | ||
400 dpi (400dpi) | 56MB | |
420 dpi (420dpi) | 64MB | |
480 dpi (xxhdpi) | 88MB | |
560 dpi (560dpi) | 112MB | |
640 dpi (xxxhdpi) | 154MB | |
mały/normalny | 120 dpi (ldpi) | 32MB |
160 dpi (mdpi) | ||
213 dpi (tvdpi) | 48MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | ||
320 dpi (Xhdpi) | 80MB | |
360 dpi (360dpi) | ||
400 dpi (400dpi) | 96MB | |
420 dpi (420dpi) | 112MB | |
480 dpi (xxhdpi) | 128MB | |
560 dpi (560dpi) | 192MB | |
640 dpi (xxxhdpi) | 256MB | |
duży | 120 dpi (ldpi) | 32MB |
160 dpi (mdpi) | 48MB | |
213 dpi (tvdpi) | 80MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | 96MB | |
320 dpi (Xhdpi) | 128MB | |
360 dpi (360dpi) | 160MB | |
400 dpi (400dpi) | 192MB | |
420 dpi (420dpi) | 228MB | |
480 dpi (xxhdpi) | 256MB | |
560 dpi (560dpi) | 384MB | |
640 dpi (xxxhdpi) | 512MB | |
bardzo duża | 120 dpi (ldpi) | 48MB |
160 dpi (mdpi) | 80MB | |
213 dpi (tvdpi) | 96MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | 144MB | |
320 dpi (Xhdpi) | 192MB | |
360 dpi (360dpi) | 240MB | |
400 dpi (400dpi) | 288MB | |
420 dpi (420dpi) | 336MB | |
480 dpi (xxhdpi) | 384MB | |
560 dpi (560dpi) | 576MB | |
640 dpi (xxxhdpi) | 768MB |
3.8. Zgodność interfejsu użytkownika
3.8.1 Menu z aplikacjami (ekran główny)
Android zawiera aplikację uruchamiającą (ekran główny) i obsługę aplikacji innych firm, które zastępują program uruchamiający (ekran główny).
Jeśli implementacje urządzeń pozwalają aplikacjom innych firm na zastępowanie ekranu głównego urządzenia:
- [C-1-1] MUSI zadeklarować funkcję platformy
android.software.home_screen
. - [C-1-2] MUSI zwracać obiekt
AdaptiveIconDrawable
, gdy aplikacja innej firmy przekazuje ikonę za pomocą tagu<adaptive-icon>
, a metody pobierania ikon są wywoływane przez metodyPackageManager
.
Jeśli implementacje urządzeń zawierają domyślny program uruchamiający, który obsługuje przypinanie skrótów w aplikacji:
- [C-2-1] MUSI zgłosić
true
zaShortcutManager.isRequestPinShortcutSupported()
. - [C-2-2] MUSISZ mieć zgodę użytkownika na dodanie skrótu żądanego przez aplikacje za pomocą metody API
ShortcutManager.requestPinShortcut()
. - [C-2-3] MUSI obsługiwać przypięte skróty oraz skróty dynamiczne i statyczne zgodnie z dokumentacją na stronie Skróty aplikacji.
Jeśli implementacje urządzeń nie obsługują przypinania skrótów w aplikacji:
- [C-3-1] MUSI zgłosić
false
zaShortcutManager.isRequestPinShortcutSupported()
.
Jeśli implementacje urządzeń implementują domyślny program uruchamiający, który zapewnia szybki dostęp do dodatkowych skrótów udostępnianych przez aplikacje innych firm przy użyciu interfejsu API Skrót Manager, powoduje to:
- [C-4-1] MUSI obsługiwać wszystkie udokumentowane funkcje skrótów (np. skróty statyczne i dynamiczne, przypinanie skrótów) oraz w pełni implementować interfejsy API klasy API
ShortcutManager
.
Jeśli implementacje urządzeń zawierają domyślną aplikację uruchamiającą, która wyświetla plakietki przy ikonach aplikacji:
- [C-5-1] MUSI respektować metodę interfejsu API
NotificationChannel.setShowBadge()
. Inaczej mówiąc, jeśli wartość jest ustawiona natrue
, pokazuj wizualizację powiązaną z ikoną aplikacji i nie pokazuj żadnych schematów plakietek ikony aplikacji, gdy wszystkie kanały powiadomień aplikacji mają ustawioną wartośćfalse
. - MOŻE zastępować plakietki ikony aplikacji własnym schematem plakietek, jeśli aplikacje innych firm wskazują na obsługę zastrzeżonego schematu plakietek za pomocą zastrzeżonych interfejsów API, lecz POWINNY jest korzystać z zasobów i wartości dostarczonych przez interfejsy API z plakietkami opisane w pakiecie SDK, takie jak
Notification.Builder.setNumber()
i interfejs APINotification.Builder.setBadgeIconType()
.
3.8.2 Widżety
Android obsługuje widżety aplikacji innych firm, definiując typ komponentu i odpowiedni interfejs API oraz cykl życia, które pozwalają aplikacjom na udostępnianie użytkownikowi widżetu „AppWidget”.
Jeśli implementacje urządzeń obsługują widżety aplikacji innych firm:
- [C-1-1] MUSI zadeklarować obsługę funkcji platformy
android.software.app_widgets
. - [C-1-2] MUSI zawierać wbudowaną obsługę widżetów AppWidgets i udostępniać afordancje interfejsu użytkownika w celu dodawania, konfigurowania, wyświetlania i usuwania elementów AppWidgets bezpośrednio w Menu z aplikacjami.
- [C-1-3] MUSI wyświetlać widżety o wymiarach 4 x 4 w standardowym rozmiarze siatki. Szczegółowe informacje znajdziesz w artykule App Widget DesignGuidelines w dokumentacji pakietu Android SDK.
- MOŻE obsługiwać widżety aplikacji na ekranie blokady.
Jeśli implementacje urządzeń obsługują widżety aplikacji innych firm i przypinanie skrótów w aplikacji:
- [C-2-1] MUSI zgłosić
true
zaAppWidgetManager.html.isRequestPinAppWidgetSupported()
. - [C-2-2] MUSISZ mieć zgodę użytkownika na dodanie skrótu żądanego przez aplikacje za pomocą metody API
AppWidgetManager.requestPinAppWidget()
.
3.8.3 Powiadomienia
Android obejmuje interfejsy API Notification
i NotificationManager
, które umożliwiają deweloperom aplikacji innych firm powiadamianie użytkowników o ważnych wydarzeniach i przyciąganie uwagi użytkowników za pomocą komponentów sprzętowych (np. dźwięku, wibracji i światła) oraz funkcji oprogramowania (takich jak obszar powiadomień czy pasek systemu) urządzenia.
3.8.3.1 Prezentacja powiadomień
Jeśli implementacje urządzeń umożliwiają aplikacjom innych firm powiadamianie użytkowników o ważnych wydarzeniach:
- [C-1-1] MUSI obsługiwać powiadomienia korzystające z funkcji sprzętowych zgodnie z dokumentacją pakietu SDK i w zakresie, w jakim jest to możliwe w przypadku implementacji sprzętowej. Jeśli na przykład urządzenie jest wyposażone w wibrator, MUSI prawidłowo wdrożyć interfejsy API wibracji. Jeśli w implementacji urządzenia nie ma sprzętu, odpowiednie interfejsy API MUSZĄ zostać wdrożone w trybie bezobsługowym. Szczegółowe informacje na ten temat znajdziesz w sekcji 7.
- [C-1-2] MUSI prawidłowo renderować wszystkie zasoby (ikony, pliki animacji itp.) zawarte w interfejsach API lub w przewodniku po stylu ikon na pasku stanu/systemu. MOGĄ jednak zapewniać użytkownikom powiadomienia inne niż w przypadku referencyjnej implementacji Android Open Source.
- [C-1-3] MUSI spełniać i wdrażać odpowiednie działania opisane w przypadku interfejsów API w zakresie aktualizowania, usuwania i grupowania powiadomień.
- [C-1-4] MUSI zawierać pełne informacje o działaniu interfejsu API notificationChannel w dokumentacji pakietu SDK.
- [C-1-5] MUSI zapewniać użytkownikowi zgodę na blokowanie i modyfikowanie powiadomień z określonej aplikacji innej firmy na każdym poziomie kanału i pakietu aplikacji.
- [C-1-6] MUSI też zapewnić użytkownikom możliwość wyświetlania usuniętych kanałów powiadomień.
- OBSŁUGA powiadomień rozszerzonych.
- TRZEBA pokazywać powiadomienia o wyższym priorytecie jako powiadomienia typu HUD.
- MUSISZ mieć możliwość uśpienia powiadomień.
- MOŻE zarządzać tylko widocznością i czasem, w którym aplikacje innych firm mogą powiadamiać użytkowników o ważnych wydarzeniach, aby zniwelować zagrożenia, takie jak rozpraszanie uwagi kierowcy.
Jeśli implementacje urządzeń obsługują powiadomienia rozszerzone, zostaną w nich wprowadzone zmiany:
- [C-2-1] MUSI używać dokładnie takich samych zasobów jak w klasie interfejsu API
Notification.Style
i jej podklasach dla prezentowanych elementów zasobów. - POWINNY jest przedstawiać każdy element zasobu (np. ikonę, tytuł i tekst podsumowania) zdefiniowany w klasie interfejsu API
Notification.Style
i jej podklasach.
Jeśli implementacje urządzenia obsługują powiadomienia HUD:
- [C-3-1] Przy prezentowaniu powiadomień z ostrzeżeniem MUSI używać widoku powiadomień HUD i zasobów zgodnie z opisem w klasie interfejsu API
Notification.Builder
.
3.8.3.2 Usługa powiadamiania słuchaczy
Android obejmuje interfejsy API NotificationListenerService
, które umożliwiają aplikacjom (raz wyraźnie włączone przez użytkownika) otrzymywanie kopii wszystkich powiadomień w miarę ich publikowania lub aktualizacji.
Jeśli implementacje urządzenia zgłaszają flagę funkcji android.hardware.ram.normal
:
- [C-1-1] MUSI prawidłowo i niezwłocznie aktualizować powiadomienia we wszystkich zainstalowanych i włączonych przez użytkownika usługach detektorów, w tym wszystkie metadane dołączone do obiektu Notification.
- [C-1-2] MUSI respektować wywołanie interfejsu API
snoozeNotification()
i odrzucać powiadomienie i wywołać wywołanie zwrotne po czasie drzemki ustawionym w wywołaniu interfejsu API.
Jeśli implementacje urządzeń pozwalają użytkownikom na uśpienie powiadomień:
- [C-2-1] MUSI prawidłowo odzwierciedlać stan odłożonych powiadomień za pomocą standardowych interfejsów API, takich jak
NotificationListenerService.getSnoozedNotifications()
. - [C-2-2] MUSI udostępnić tę funkcję uśpienia powiadomień z każdej zainstalowanej aplikacji innej firmy, chyba że pochodzą one z usług trwałych/działających na pierwszym planie.
3.8.3.3 Nie przeszkadzać
Jeśli implementacje urządzeń obsługują tę funkcję:
- [C-1-1] MUSI zaimplementować działanie, które odpowiada na intencję ACTION_CONFIRM_POLICY_ACCESS_SETTINGS. W przypadku implementacji z interfejsem UI_MODE_TYPE_NORMAL MUSI być to działanie, w ramach którego użytkownik może przyznawać i odbierać dostęp aplikacji do konfiguracji zasad Nie przeszkadzać.
- [C-1-2] Jeśli implementacja urządzenia umożliwia użytkownikowi przyznawanie lub odrzucanie dostępu aplikacji innych firm do konfiguracji zasad Nie przeszkadzać, MUSI wyświetlać obok utworzonych przez użytkownika i wstępnie zdefiniowanych reguł Automatyczne reguły Nie przeszkadzać utworzone przez aplikacje.
- [C-1-3] MUSI uwzględniać wartości
suppressedVisualEffects
przekazywane w elemencieNotificationManager.Policy
, a jeśli aplikacja ma ustawioną dowolną z flag SUPPRESSED_EFFECT_SCREEN_OFF lub SUPPRESSED_FE_SCREEN_ON, MUSI poinformować użytkownika, że efekty wizualne są wyłączone w menu ustawień Nie przeszkadzać.
3.8.4 Szukaj
Android zawiera interfejsy API, które pozwalają programistom wbudować wyszukiwarkę w aplikacje i udostępniać dane aplikacji w globalnym wyszukiwaniu w systemie. Ogólnie rzecz biorąc, funkcja składa się z pojedynczego interfejsu użytkownika dla całego systemu, który umożliwia użytkownikom wprowadzanie zapytań, wyświetlanie sugestii w miarę pisania i wyświetlanie wyników. Interfejsy API Androida umożliwiają programistom ponowne wykorzystanie tego interfejsu do wyszukiwania we własnych aplikacjach i dostarczania wyników do wspólnego globalnego interfejsu wyszukiwania.
- Implementacje na urządzeniach z Androidem POWINIEN obejmować wyszukiwanie globalne, pojedynczy, wspólny interfejs wyszukiwania dla całego systemu zdolny do generowania sugestii w czasie rzeczywistym w odpowiedzi na dane wejściowe użytkownika.
Jeśli implementacje urządzeń mają wdrożony globalny interfejs wyszukiwania:
- [C-1-1] MUSI wdrożyć interfejsy API, które pozwalają aplikacjom innych firm na dodawanie sugestii do pola wyszukiwania uruchomionego w trybie wyszukiwania globalnego.
Jeśli nie masz zainstalowanych żadnych aplikacji innych firm, które korzystają z wyszukiwania globalnego:
- Domyślnie POWINNY jest wyświetlać wyniki i sugestie wyszukiwarki internetowej.
Android obejmuje również interfejsy API Asystenta, które pozwalają aplikacjom decydować, ile informacji w bieżącym kontekście ma być udostępniane asystentowi na urządzeniu.
Jeśli implementacje urządzeń obsługują działanie wspomagające, mogą one:
- [C-2-1] MUSI jasno wskazywać użytkownikowi, kiedy kontekst jest udostępniany. Aby to zrobić:
- Za każdym razem, gdy aplikacja asystująca uzyskuje dostęp do kontekstu i wokół krawędzi ekranu pada białe światło o czasie trwania i jasności zgodnym z implementacją Android Open Source Project lub dłuższy.
- w przypadku wstępnie zainstalowanej aplikacji asystującej: zapewnienie użytkownikowi możliwości przechodzenia mniej niż 2 razy od domyślnego menu ustawień rozpoznawania mowy i Asystenta oraz udostępnianie kontekstu tylko wtedy, gdy użytkownik wyraźnie wywoła aplikację asystującą za pomocą słowa-klucza lub klawisza nawigacji wspomagającej.
- [C-2-2] Wyznaczona interakcja służąca do uruchomienia aplikacji asystującej zgodnie z opisem w sekcji 7.2.3 MUSI uruchomić wybraną przez użytkownika aplikację asystującą, czyli aplikację obsługującą
VoiceInteractionService
lub działanie obsługujące intencjęACTION_ASSIST
. - [SR] Zdecydowanie ZALECANE jest przytrzymanie klawisza
HOME
jako tej wyznaczonej interakcji.
3.8.5 Alerty i powiadomienia
Aplikacje mogą używać interfejsu API Toast
do wyświetlania użytkownikowi krótkich, niemodalnych ciągów, które znikają po krótkim czasie, oraz interfejsu API typu okna TYPE_APPLICATION_OVERLAY
, aby wyświetlać okna alertów jako nakładki na inne aplikacje.
Jeśli implementacje urządzeń obejmują wyjście ekranu lub wideo:
-
[C-1-1] MUSI zapewniać użytkownikowi zgodę na zablokowanie wyświetlania przez aplikację okien alertów korzystających z
TYPE_APPLICATION_OVERLAY
. Implementacja AOSP spełnia to wymaganie, ponieważ zawiera opcje w obszarze powiadomień. -
[C-1-2] MUSI honorować interfejs Toast API i wyświetlać użytkownikom wygłaszane powiadomienia z aplikacji w jak najbardziej widoczny sposób.
3.8.6 Motywy graficzne
Android zapewnia „motywy” jako mechanizm, który pozwala aplikacjom stosować style w całej Aktywności lub w całej aplikacji.
Android obejmuje rodzinę motywów „Holo” i „Materiał” jako zestaw stylów zdefiniowanych przez deweloperów aplikacji, których mogą używać, jeśli chcą pasować do wyglądu i stylu motywu Holo określonego w pakiecie SDK Androida.
Jeśli implementacje urządzeń obejmują wyjście ekranu lub wideo:
- [C-1-1] NIE MOŻE zmieniać żadnych atrybutów motywu Holo, które są widoczne dla aplikacji.
- [C-1-2] MUSI obsługiwać motywy „Materiał” i NIE MOŻE zmieniać żadnych atrybutów motywu Material Design, ani ich zasobów widocznych dla aplikacji.
Android zawiera także rodzinę motywów „Ustawienie domyślne urządzenia” jako zestaw stylów, z których mogą korzystać deweloperzy aplikacji, jeśli chcą dopasować wygląd i sposób działania motywu urządzenia określonego przez narzędzie do implementacji.
- Implementacje na urządzeniach MOGĄ zmodyfikować atrybuty domyślnego motywu urządzenia widoczne dla aplikacji.
Android obsługuje wariant z przezroczystymi paskami systemowymi, dzięki czemu deweloperzy aplikacji mogą wypełniać obszar za paskiem stanu i paskiem nawigacyjnym treścią aplikacji. Aby programiści mogli w sposób spójny korzystać z tej konfiguracji, zadbaj o zachowanie stylu ikony paska stanu w różnych implementacjach urządzeń.
Jeśli implementacje urządzeń mają systemowy pasek stanu:
- [C-2-1] MUSI używać białego koloru w przypadku ikon stanu systemu (takich jak siła sygnału czy poziom baterii) oraz powiadomień wysyłanych przez system, chyba że ikona wskazuje, że występuje problem, lub aplikacja prosi o podświetlenie paska stanu za pomocą flagi SYSTEM_UI_LIGHT_STATUS_BAR.
- [C-2-2] Gdy aplikacja prosi o wyświetlenie paska stanu diody, implementacja urządzenia z Androidem MUSI zmienić kolor ikon stanu systemu na czarny (szczegóły znajdziesz w sekcji R.style).
3.8.7 Animowane tapety
Android określa typ komponentu, odpowiedni interfejs API oraz cykl życia, które umożliwiają aplikacjom udostępnianie użytkownikowi co najmniej jednej „animowanej tapety”. Animowane tapety to animacje, wzory lub podobne obrazy z ograniczonymi możliwościami wprowadzania danych, które są wyświetlane jako tapeta za innymi aplikacjami.
Uznaje się, że urządzenie może niezawodnie wyświetlać animowane tapety, jeśli jest w stanie wyświetlać wszystkie animowane tapety bez ograniczeń w funkcjonalności i z rozsądną liczbą klatek na sekundę bez negatywnego wpływu na inne aplikacje. Jeśli ograniczenia sprzętowe powodują awarię tapet lub aplikacji, a także inne zużywanie procesora lub baterii, zużywają nadmierną energię CPU lub baterii albo działają z niedostatecznie niską liczbą klatek, urządzenie nie może wyświetlać animowanych tapet. Na przykład niektóre animowane tapety mogą wykorzystywać kontekst OpenGL 2.0 lub 3.x do renderowania treści. Animowana tapeta nie będzie działać prawidłowo na sprzęcie, który nie obsługuje wielu kontekstów OpenGL, ponieważ użycie animowanej tapety z kontekstu OpenGL może kolidować z innymi aplikacjami, które korzystają też z kontekstu OpenGL.
- Implementacje animowanych tapet, które umożliwiają sprawne wyświetlanie animowanych tapet zgodnie z opisem powyżej, POWINNY SIĘ stosować do tapet animowanych.
Jeśli na urządzeniu są wdrożone animowane tapety:
- [C-1-1] MUSI zgłosić flagę funkcji platformy android.software.live_wallpaper.
3.8.8 Przełączanie aktywności
Nadrzędny kod źródłowy Androida zawiera ekran przeglądu, czyli systemowy interfejs użytkownika do przełączania zadań i wyświetlający ostatnio używane działania i zadania przy użyciu obrazu miniatury przedstawiającego graficzny stan aplikacji w momencie ostatniego opuszczenia aplikacji przez użytkownika.
Implementacje urządzeń obejmujące klawisz nawigacyjny funkcji najnowszych wiadomości zgodnie z opisem w sekcji 7.2.3 MOGĄ zmienić interfejs.
Jeśli implementacje urządzeń obejmujące klawisz nawigacyjny funkcji ostatnich zgodnie z opisem w sekcji 7.2.3 modyfikują interfejs, to:
- [C-1-1] MUSI obsługiwać do 7 wyświetlonych działań.
- NALEŻY wyświetlać przynajmniej tytuł 4 aktywności jednocześnie.
- [C-1-2] MUSI włączyć przypinanie ekranu i umożliwiać użytkownikowi włączenie funkcji w menu ustawień.
- W ostatnich przypadkach MUSI wyświetlać kolor zaznaczenia, ikonę i tytuł ekranu.
- POWINIEN wyświetlać afordancję zamykającą („x”), ale MOŻE opóźnić ją do czasu interakcji użytkownika z ekranami.
- Trzeba wdrożyć skrót, który umożliwi łatwe przechodzenie do poprzedniej aktywności
- POWINNY jest uruchamiać działanie szybkiego przełączania między 2 ostatnio używanymi aplikacjami, gdy klawisz funkcyjny ostatnich jest naciśnięty dwukrotnie.
- POWINNY jest wyzwalać tryb wielu okien podzielonego ekranu, jeśli jest obsługiwany, przy przytrzymaniu klawisza funkcji ostatnich okien.
-
MOŻE wyświetlać ostatnie powiązane zdjęcia jako grupę poruszającą się razem.
-
[SR] Zdecydowanie ZALECANE jest użycie nadrzędnego interfejsu użytkownika Androida (lub podobnego interfejsu opartego na miniaturach) na ekranie przeglądowym.
3.8.9 Zarządzanie danymi wejściowymi
Android zapewnia obsługę zarządzania danymi wejściowymi oraz zewnętrznych edytorów metody wprowadzania.
Jeśli implementacje urządzeń umożliwiają użytkownikom korzystanie z zewnętrznych metod wprowadzania na urządzeniu:
- [C-1-1] MUSI zadeklarować funkcję platformy android.software.input_methods i obsługiwać interfejsy API IME zgodnie z definicją w dokumentacji pakietu Android SDK.
- [C-1-2] MUSI udostępniać dostępny dla użytkownika mechanizm umożliwiający dodawanie i konfigurowanie metod wprowadzania innych firm w odpowiedzi na intencję android.settings.INPUT_METHOD_SETTINGS.
Jeśli implementacje urządzeń zadeklarują flagę funkcji android.software.autofill
:
- [C-2-1] MUSI w pełni wdrożyć interfejsy API
AutofillService
iAutofillManager
oraz przestrzegać intencjiandroid.settings.REQUEST_SET_AUTOFILL_SERVICE
, aby wyświetlać domyślne menu ustawień aplikacji, aby włączyć lub wyłączyć autouzupełnianie oraz zmienić domyślną usługę autouzupełniania dla użytkownika.
3.8.10. Sterowanie multimediami na ekranie blokady
Interfejs Remote Control Client API został wycofany z Androida 5.0 i zastąpiony szablonem powiadomienia multimedialnego, który umożliwia aplikacjom do multimediów integrowanie się z elementami sterującymi odtwarzaniem wyświetlanymi na ekranie blokady.
3.8.11 Wygaszacze ekranu (wcześniej Sny)
Android zapewnia obsługę interaktywnych wygaszaczy ekranu, znanych wcześniej jako Dreams. Wygaszacze ekranu pozwalają użytkownikom korzystać z aplikacji, gdy urządzenie podłączone do źródła zasilania jest nieaktywne lub zadokowane w stacji dokującej. Urządzenia Android Watch MOGĄ obsługiwać wygaszacze ekranu, ale w innych implementacjach należy włączyć obsługę wygaszaczy ekranu i udostępniać użytkownikom opcję ustawień, które pozwalają skonfigurować wygaszacze ekranu w odpowiedzi na intencję android.settings.DREAM_SETTINGS
.
3.8.12. Lokalizacja
Jeśli urządzenia są wyposażone w czujnik sprzętowy (np. GPS), który może rejestrować współrzędne lokalizacji:
- [C-1-1] Tryby lokalizacji MUSZĄ być wyświetlane w menu Lokalizacja w sekcji Ustawienia.
3.8.13. Unicode i czcionka
Android obsługuje znaki emoji zdefiniowane w standardzie Unicode 10.0.
Jeśli implementacje urządzeń obejmują wyjście ekranu lub wideo:
- [C-1-1] MUSI być w stanie renderować znaki z emotikonów w kolorze glifu.
- [C-1-2] MUSI zawierać informacje dotyczące:
- Czcionka Roboto 2 o różnych wagach – sans-szeryfowa-cienka, bezszeryfowa-lekka, bezszeryfowa-średnia, bezszeryfowa-czarna, bezszeryfowa-kondensowana, bezszeryfowa-kondensowana-light dla języków dostępnych na urządzeniu.
- Pełne pokrycie alfabetu łacińskiego, greckiego i cyrylicy w standardzie Unicode 7.0, w tym rozszerzone zakresy A, B, C i D w alfabecie łacińskim, a także wszystkie glify w bloku symboli walut w systemie Unicode 7.0.
- POWINNA obsługiwać odcień skóry i różnorodne emotikony rodzinne zgodnie z raportem technicznym Unicode nr 51.
Jeśli implementacje urządzeń obejmują edytor IME:
- TRZEBA określić metodę wprowadzania znaków w przypadku tych emotikonów.
3.8.14. Wiele okien
Jeśli implementacje urządzeń mogą wyświetlać wiele aktywności jednocześnie:
- [C-1-1] MUSI wdrożyć takie tryby wielu okien zgodnie z działaniami aplikacji i interfejsami API opisanymi w dokumentacji dotyczącej obsługi trybu wielu okien w pakiecie Android SDK oraz spełnić te wymagania:
- [C-1-2] Aplikacje można określić, czy mogą działać w trybie wielu okien w pliku
AndroidManifest.xml
. Można to zrobić jawnie przez ustawienie atrybutuandroid:resizeableActivity
natrue
lub domyślnie przez ustawienie targetSdkVersion > 24. Aplikacje, w których w pliku manifestu ustawisz ten atrybut nafalse
, NIE MOGĄ być uruchamiane w trybie wielu okien. Starsze aplikacje z targetSdkVersion < 24, w których nie ustawiono tego atrybutuandroid:resizeableActivity
, MOGĄ zostać uruchomione w trybie wielu okien, ale system MUSI wyświetlać ostrzeżenie, że aplikacja może nie działać zgodnie z oczekiwaniami w tym trybie. - [C-1-3] NIE MOŻE wyświetlać trybu podzielonego ani dowolnego ekranu, jeśli wysokość ekranu < 440 dp i szerokość ekranu < 440 dp.
- Implementacje na urządzeniach o rozmiarze ekranu
xlarge
POWINNY obsługiwać tryb dowolny.
Jeśli implementacje urządzeń obsługują tryby wielu okien i tryb podzielonego ekranu:
- [C-2-1] Domyślnie MUSI ładować program uruchamiający o zmienionym rozmiarze.
- [C-2-2] MUSI przyciąć zadokowaną aktywność w przypadku podzielonego ekranu wielu okien, ale POWINIEN pokazywać część jego zawartości, jeśli aplikacja Menu z aplikacjami jest zaznaczonym oknem.
- [C-2-3] MUSI uwzględniać zadeklarowane wartości
AndroidManifestLayout_minWidth
iAndroidManifestLayout_minHeight
innej aplikacji uruchamiającej i nie mogą zastępować tych wartości podczas wyświetlania niektórych treści zadokowanej aktywności.
Jeśli implementacje urządzeń obsługują tryby wielu okien i obraz w obrazie, tryb wielu okien:
- [C-3-1] MUSI uruchamiać działania w trybie wielu okien w trybie obraz w obrazie, gdy aplikacja jest: * Kierowanie na interfejs API na poziomie 26 lub wyższym i deklarowane
android:supportsPictureInPicture
* Kierowanie na poziom API 25 lub niższy oraz deklarowanie zarównoandroid:resizeableActivity
, jak iandroid:supportsPictureInPicture
. - [C-3-2] MUSI udostępniać działania w interfejsie SystemUI zgodnie z bieżącym działaniem PIP za pomocą interfejsu API
setActions()
. - [C-3-3] MUSI obsługiwać współczynniki proporcji większe lub równe 1:2,39 i mniejsze lub równe 2,39:1, zgodnie z aktywnością PIP podaną w interfejsie API
setAspectRatio()
. - [C-3-4] MUSI używać
KeyEvent.KEYCODE_WINDOW
do sterowania oknem PIP. Jeśli tryb PIP nie jest włączony, klucz MUSI być dostępny dla działania na pierwszym planie. - [C-3-5] MUSI zapewniać użytkownikowi dostęp do funkcji blokowania wyświetlania aplikacji w trybie PIP. Implementacja AOSP spełnia to wymaganie dzięki elementom sterującym w obszarze powiadomień.
- [C-3-6] MUSI przydzielić minimalną szerokość i wysokość 108 dp dla okna PIP oraz minimalną szerokość 240 dp i wysokość 135 dp dla okna PIP, gdy
Configuration.uiMode
jest skonfigurowany jakoUI_MODE_TYPE_TELEVISION
.
3.9. Administracja urządzeniem
Android zawiera funkcje, które umożliwiają aplikacjom wykrywającym zabezpieczenia wykonywanie funkcji administracyjnych na poziomie systemu, takich jak wymuszanie stosowania zasad dotyczących haseł czy zdalne czyszczenie pamięci przy użyciu interfejsu Android Device Administration API].
Jeśli implementacje urządzeń obejmują pełny zakres zasad administrowania urządzeniami zdefiniowanych w dokumentacji pakietu Android SDK, muszą one:
- [C-1-1] MUSI zadeklarować:
android.software.device_admin
. - [C-1-2] MUSI obsługiwać obsługę administracyjną właściciela urządzenia zgodnie z opisem w sekcji 3.9.1 i sekcji 3.9.1.1.
- [C-1-3] MUSI zadeklarować obsługę profili zarządzanych za pomocą flagi funkcji
android.software.managed_users
z wyjątkiem sytuacji, gdy urządzenie jest skonfigurowane w taki sposób, aby zgłaszało samo jako urządzenie z małą ilością pamięci RAM lub przydzielało pamięć wewnętrzną (niemożliwą) jako pamięć współdzieloną.
3.9.1 Obsługa administracyjna urządzeń
3.9.1.1 Obsługa administracyjna właściciela urządzenia
Jeśli implementacje urządzenia zadeklarują android.software.device_admin
:
- [C-1-1] MUSI obsługiwać rejestrację klienta Device Policy (DPC) jako aplikacji właściciela urządzenia w sposób opisany poniżej:
- jeśli implementacja urządzenia nie ma jeszcze skonfigurowanych danych użytkownika, oznacza to, że:
- [C-1-3] MUSI zgłosić
true
zaDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
. - [C-1-4] W odpowiedzi na działanie intencji
android.app.action.PROVISION_MANAGED_DEVICE
MUSI zarejestrować aplikację DPC jako właściciela urządzenia. - [C-1-5] MUSI zarejestrować aplikację DPC jako aplikację właściciela urządzenia, jeśli urządzenie zadeklaruje obsługę komunikacji Near Field Communication (NFC) za pomocą flagi funkcji
android.hardware.nfc
i otrzyma wiadomość NFC zawierającą rekord z typem MIMEMIME_TYPE_PROVISIONING_NFC
.
- [C-1-3] MUSI zgłosić
- Gdy implementacja urządzenia zawiera dane użytkownika:
- [C-1-6] MUSI zgłosić
false
zaDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
. - [C-1-7] NIE MOŻE rejestrować żadnej aplikacji DPC jako aplikacji właściciela urządzenia.
- [C-1-6] MUSI zgłosić
- jeśli implementacja urządzenia nie ma jeszcze skonfigurowanych danych użytkownika, oznacza to, że:
- [C-1-2] NIE MOŻE ustawiać aplikacji (w tym tej wstępnie zainstalowanej) jako aplikacji Właściciel urządzenia bez wyraźnej zgody użytkownika lub administratora urządzenia.
Jeśli implementacje urządzeń deklarują funkcję android.software.device_admin
, ale zawierają też zastrzeżone rozwiązanie do zarządzania właścicielem urządzenia oraz zapewniają mechanizm promowania aplikacji skonfigurowanej w danym rozwiązaniu jako „odpowiednika dla właściciela urządzenia” znanej przez standardowe interfejsy API Androida DevicePolicyManager, muszą one:
- [C-2-1] MUSI mieć wdrożony proces pozwalający na sprawdzenie, czy promowana aplikacja należy do legalnego rozwiązania do zarządzania urządzeniami w firmie i została już skonfigurowana w zastrzeżonym rozwiązaniu tak, aby miała odpowiednie uprawnienia jako „Właściciel urządzenia”.
- [C-2-2] MUSI wyświetlać te same informacje o zgodzie właściciela urządzenia AOSP co w procesie zainicjowanym przez
android.app.action.PROVISION_MANAGED_DEVICE
przed zarejestrowaniem aplikacji DPC jako „właściciela urządzenia”. - MOGĄ znajdować się na urządzeniu dane użytkownika, zanim aplikacja DPC zostanie zarejestrowana jako „Właściciel urządzenia”.
3.9.1.2 Obsługa administracyjna profili zarządzanych
Jeśli implementacje urządzenia zadeklarują android.software.managed_users
:
-
[C-1-1] MUSI wdrożyć interfejsy API, które pozwalają aplikacji kontrolera zasad dotyczących urządzeń (DPC) zostać właścicielem nowego profilu zarządzanego.
-
[C-1-2] Proces obsługi administracyjnej profili zarządzanych (proces zainicjowany przez android.app.action.PROVISION_MANAGED_PROFILE) u użytkowników MUSI być zgodny z implementacją AOSP.
-
[C-1-3] MUSI udostępniać w Ustawieniach następujące informacje o użytkownikach, aby wskazać użytkownikowi, że dana funkcja systemu została wyłączona przez kontroler zasad dotyczących urządzeń:
- Spójna ikona lub inna informacja użytkownika (np. ikona informacji o AOSP) wskazująca, że konkretne ustawienie zostało ograniczone przez administratora urządzenia.
- Krótki komunikat z wyjaśnieniem dostarczony przez administratora urządzenia na stronie
setShortSupportMessage
. - Ikona aplikacji DPC.
3.9.2 Obsługa profilu zarządzanego
Jeśli implementacje urządzenia zadeklarują android.software.managed_users
:
- [C-1-1] MUSI obsługiwać profile zarządzane za pomocą interfejsów API
android.app.admin.DevicePolicyManager
. - [C-1-2] MUSI zezwalać na utworzenie tylko jednego profilu zarządzanego.
- [C-1-3] MUSI używać plakietki ikony (podobnej do odznaki AOSP dotyczącej pracy nad aplikacją) do reprezentowania zarządzanych aplikacji i widżetów oraz innych elementów interfejsu z plakietką, takich jak Ostatnie i powiadomienia.
- [C-1-4] MUSI wyświetlać ikonę powiadomień (podobną do plakietki służbowej AOSP na poziomie nadrzędnym), aby wskazać, że użytkownik korzysta z aplikacji profilu zarządzanego.
- [C-1-5] MUSI wyświetlać komunikat informujący o tym, że użytkownik korzysta z profilu zarządzanego, gdy urządzenie zostanie wybudzone (ACTION_USER_PRESENT), a aplikacja na pierwszym planie znajduje się w profilu zarządzanym.
- [C-1-6] Jeśli istnieje profil zarządzany, MUSI pokazywać wizualną afordancję w sekcji „Chooser” intencji, aby umożliwić użytkownikowi przekazywanie intencji z profilu zarządzanego głównemu użytkownikowi lub odwrotnie, jeśli ta funkcja jest włączona przez kontroler zasad dotyczących urządzeń.
- [C-1-7] Jeśli istnieje profil zarządzany, MUSI udostępniać następujące parametry użytkowników zarówno dla użytkownika głównego, jak i profilu zarządzanego:
- Osobne zliczanie baterii, lokalizacji, mobilnej transmisji danych i wykorzystania miejsca na dane przez użytkownika głównego i profil zarządzany.
- Niezależne zarządzanie aplikacjami VPN zainstalowanymi u głównego użytkownika lub profilu zarządzanego.
- Niezależne zarządzanie aplikacjami zainstalowanymi u głównego użytkownika lub profilu zarządzanego.
- Niezależne zarządzanie kontami w ramach głównego użytkownika lub profilu zarządzanego.
- [C-1-8] Zainstalowane aplikacje do połączeń telefonicznych, kontaktów i wiadomości mogą wyszukiwać i wyszukiwać informacje o rozmówcy z profilu zarządzanego (jeśli taki istnieje) razem z profilami głównymi (jeśli kontroler zasad dotyczących urządzeń na to zezwala).
- [C-1-9] MUSI spełniać wszystkie wymagania bezpieczeństwa obowiązujące na urządzeniu z włączoną obsługą wielu użytkowników (patrz sekcja 9.5), mimo że profil zarządzany nie jest liczony jako inny użytkownik oprócz głównego użytkownika.
- [C-1-10] MUSI obsługiwać możliwość określenia osobnego ekranu blokady spełniającego poniższe wymagania, aby przyznać dostęp do aplikacji działających w profilu zarządzanym.
- Implementacje urządzeń MUSZĄ spełniać intencję
DevicePolicyManager.ACTION_SET_NEW_PASSWORD
i zawierać interfejs umożliwiający skonfigurowanie osobnych danych logowania na ekranie blokady dla profilu zarządzanego. - Dane logowania na ekran blokady profilu zarządzanego MUSZĄ korzystać z tego samego magazynu danych logowania i mechanizmów zarządzania co w profilu nadrzędnym, zgodnie z dokumentacją na stronie projektu Android Open Source
- Zasady dotyczące haseł DPC MUSZĄ mieć zastosowanie tylko do danych logowania na ekranie blokady profilu zarządzanego, chyba że zostaną wywołane przez wystąpienie
DevicePolicyManager
zwrócone przez getParentProfileInstance.
- Implementacje urządzeń MUSZĄ spełniać intencję
- Gdy kontakty z profilu zarządzanego są wyświetlane we wstępnie zainstalowanym rejestrze połączeń, interfejsie połączenia, powiadomieniach w toku i nieodebranych połączeniach, kontaktach i aplikacjach do obsługi wiadomości, powinny mieć tę samą plakietkę, która oznacza aplikacje profilu zarządzanego.
3.10. Ułatwienia dostępu
Android zapewnia warstwę ułatwień dostępu, która ułatwia użytkownikom z niepełnosprawnościami korzystanie z urządzeń. Dodatkowo Android udostępnia interfejsy API platformy, które umożliwiają implementacjom usług ułatwień dostępu otrzymywanie wywołań zwrotnych dla zdarzeń użytkownika i systemów oraz generują alternatywne mechanizmy informacji zwrotnych, takie jak zamiana tekstu na mowę, reakcje haptyczne czy nawigacja za pomocą trackballa/pada kierunkowego.
Jeśli implementacje urządzenia obsługują usługi ułatwień dostępu innych firm:
- [C-1-1] MUSI zawierać implementację platformy ułatwień dostępu w Androidzie w sposób opisany w dokumentacji pakietu SDK interfejsów Accessibility API.
- [C-1-2] MUSI generować zdarzenia ułatwień dostępu i dostarczać odpowiednie
AccessibilityEvent
we wszystkich zarejestrowanych implementacjachAccessibilityService
zgodnie z dokumentacją w pakiecie SDK. - [C-1-3] MUSI uwzględniać intencję
android.settings.ACCESSIBILITY_SETTINGS
, aby zapewnić dostępny dla użytkownika mechanizm włączania i wyłączania usług ułatwień dostępu innych firm wraz z wstępnie załadowanymi usługami ułatwień dostępu. - [C-1-4] MUSI dodać przycisk na pasku nawigacyjnym systemu, który umożliwia użytkownikowi sterowanie usługą ułatwień dostępu, gdy włączone usługi ułatwień dostępu zadeklarują element
AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
. Pamiętaj, że w przypadku implementacji urządzeń bez paska nawigacyjnego systemu ten wymóg nie ma zastosowania, ale implementacje urządzeń MUSZĄ dawać użytkownikowi możliwość sterowania tymi usługami ułatwień dostępu.
Jeśli implementacje urządzeń obejmują wstępnie załadowane usługi ułatwień dostępu:
- [C-2-1] MUSI wdrażać te wstępnie załadowane usługi ułatwień dostępu jako aplikacje bezpośredniego rozruchu, gdy dane są szyfrowane za pomocą szyfrowania opartego na plikach (FBE).
- W gotowej konfiguracji powinien znajdować się mechanizm umożliwiający użytkownikom włączanie odpowiednich usług ułatwień dostępu, a także opcje umożliwiające dostosowanie rozmiaru czcionki i rozmiaru wyświetlacza oraz gestów powiększenia.
3.11. Przekształcanie tekstu na mowę
Android zawiera interfejsy API, które umożliwiają aplikacjom korzystanie z usług zamiany tekstu na mowę i umożliwiają dostawcom usług ich implementację.
Jeśli implementacje urządzenia zgłaszają funkcję android.hardware.audio.output:
- [C-1-1] MUSI obsługiwać interfejsy API Android TTS Framework.
Jeśli implementacje na urządzeniach obsługują instalację mechanizmu zamiany tekstu na mowę firmy zewnętrznej, funkcje te:
- [C-2-1] MUSI zapewniać dostępność dla użytkownika, aby mógł on wybrać mechanizm zamiany tekstu na mowę do użycia na poziomie systemu.
3.12. Platforma wejścia TV
Android Television Interface Framework (TIF) ułatwia przesyłanie treści na żywo na urządzenia Android TV. TIF udostępnia standardowy interfejs API do tworzenia modułów wejściowych do sterowania urządzeniami Android TV.
Jeśli implementacje urządzeń obsługują TIF:
- [C-1-1] MUSI zadeklarować funkcję platformy
android.software.live_tv
. - [C-1-2] MUSI mieć wstępnie zainstalowaną aplikację telewizyjną i spełniać wszystkie wymagania opisane w sekcji 3.12.1.
3.12.1. Aplikacja TV
Jeśli implementacje urządzeń obsługują TIF:
- [C-1-1] Aplikacja TV MUSI udostępniać kanały telewizyjne do instalacji i korzystania z nich oraz spełniać te wymagania:
Aplikacja na telewizory wymagana w przypadku implementacji na urządzeniach z Androidem z deklaracją funkcji android.software.live_tv
, MUSI spełniać te wymagania:
- Implementacje na urządzeniu POWINNY być dozwolone wpisywanie danych wejściowych innych firm oparte na TIF (dane wejściowe innych firm) i zarządzanie nimi.
- Implementacje na urządzeniach MOGĄ dawać możliwość wizualnego rozdzielenia wejściówek opartych na TIF (zainstalowanych danych wejściowych) od źródeł innych firm.
- Implementacje urządzeń NIE POWINNY wyświetlać danych wejściowych innych firm w odległości więcej niż jednego działania nawigacji od aplikacji TV (np. przez rozwinięcie listy źródeł zewnętrznych w aplikacji TV).
W ramach Android Open Source Project opracowano implementację aplikacji telewizyjnej, która spełnia powyższe wymagania.
3.12.1.1. Elektroniczny przewodnik po programach
Jeśli implementacje urządzeń obsługują TIF:
- [C-1-1] MUSI wyświetlać informacyjną i interaktywną nakładkę, która MUSI zawierać elektroniczny przewodnik po programach (EPG) wygenerowany na podstawie wartości z pól TvContract.Programs.
- [C-1-2] Przy zmianie kanału implementacje MUSZĄ wyświetlać dane EPG aktualnie odtwarzanego programu.
- [SR] Zdecydowanie ZALECANE jest wyświetlanie w równym stopniu zainstalowanych danych wejściowych i danych innych firm. elektroniczny przewodnik po programach NIE POWINNO wyświetlać danych wejściowych innych firm w odległości więcej niż jednego działania nawigacji od zainstalowanych źródeł EPG.
- Moduł EPG POWINNO wyświetlać informacje ze wszystkich zainstalowanych źródeł i wejścia innych firm.
- elektroniczny przewodnik po programach może wizualnie rozróżniać zainstalowane wejścia i wejścia innych firm.
3.12.1.2. Nawigacja
Jeśli implementacje urządzeń obsługują TIF:
-
[C-1-1] MUSI umożliwiać korzystanie z tych funkcji za pomocą pada kierunkowego, klawisza Wstecz i klawiszy Home na urządzeniu wejściowym urządzenia Android TV (tj. pilota, aplikacji pilota lub kontrolera do gier):
- Zmiana kanałów telewizyjnych
- Otwieram elektroniczny przewodnik po programach
- Konfigurowanie i dostrajanie zewnętrznych źródeł sygnału TIF (jeśli są obsługiwane)
- Otwieranie menu Ustawienia
-
NALEŻY przekazywać kluczowe zdarzenia do wejść HDMI przez CEC.
3.12.1.3 Łączenie aplikacji wejścia TV
Implementacje na urządzeniach Android TV MUSZĄ obsługiwać łączenie aplikacji do wprowadzania danych TV, co umożliwia przekazywanie przez wszystkie źródła linków do innych działań (np. linków programów na żywo do powiązanych treści). Aplikacja TV POWINIEN pokazywać połączenie aplikacji wejściowej TV, jeśli jest dostępna.
3.12.1.4. Przesunięcie w czasie
Jeśli implementacje urządzeń obsługują TIF:
- [SR] Zdecydowanie ZALECANA do obsługi przesuwania czasowego, co pozwala użytkownikowi wstrzymywać i wznawiać transmisję na żywo.
- MUSI umożliwiać użytkownikowi wstrzymanie i wznowienie aktualnie odtwarzanego programu, jeśli dostępne jest dla niego przesunięcie w czasie.
3.12.1.5. Nagranie telewizyjne
Jeśli implementacje urządzeń obsługują TIF:
- [SR] Zdecydowanie zalecana do obsługi nagrywania telewizyjnego.
- Jeśli wejście TV obsługuje nagrywanie, a nagrywanie programu nie jest zabronione, elektroniczny przewodnik po programach może umożliwiać nagrywanie programu.
3.13. Szybkie ustawienia
Android ma komponent interfejsu Szybkich ustawień, który zapewnia szybki dostęp do często używanych lub pilnych działań.
Jeśli implementacje urządzeń zawierają komponent interfejsu Szybkich ustawień, te funkcje:
- [C-1-1] MUSI umożliwiać użytkownikowi dodawanie kafelków udostępnionych przez interfejsy API
quicksettings
w aplikacji innej firmy lub ich usuwanie. - [C-1-2] NIE MOŻE automatycznie dodawać kafelka z aplikacji innej firmy bezpośrednio do Szybkich ustawień.
- [C-1-3] MUSI wyświetlać wszystkie dodane przez użytkowników kafelki z aplikacji innych firm razem z dostarczonymi przez system kafelkami szybkich ustawień.
3.14. Interfejs multimediów
Jeśli implementacje urządzeń obejmują platformę interfejsu obsługującą aplikacje innych firm, które korzystają z MediaBrowser
i MediaSession
, to:
- [C-1-1] Ikony MediaItem i ikony powiadomień MUSZĄ wyświetlać w niezmienionej formie.
- [C-1-2] MUSI wyświetlać te elementy w sposób opisany przez MediaSession, np. metadane, ikony, obrazy.
- [C-1-3] MUSI pokazywać tytuł aplikacji.
- [C-1-4] MUSI zawierać szufladę, aby przedstawić hierarchię Media Browser.
- [C-1-5] W przypadku
MediaSession.Callback#onMediaButtonEvent
MUSISZ kliknąć dwukrotnieKEYCODE_HEADSETHOOK
lubKEYCODE_MEDIA_PLAY_PAUSE
jakoKEYCODE_MEDIA_NEXT
.
3.15. Aplikacje błyskawiczne
Implementacje na urządzeniach MUSZĄ spełniać następujące wymagania:
- [C-0-1] Aplikacje błyskawiczne MUSZĄ mieć tylko uprawnienia, w których
android:protectionLevel
ma wartość"ephemeral"
. - [C-0-2] Aplikacje błyskawiczne NIE MOGĄ wchodzić w interakcję z zainstalowanymi aplikacjami za pomocą intencji niejawnych, jeśli nie jest spełniony jeden z tych warunków:
- Filtr wzorca intencji komponentu jest widoczny i ma wartość CATEGORY_BROWSABLE
- Czynność: ACTION_SEND, ACTION_SENDTO, ACTION_SEND_MULTIPLE
- Miejsce docelowe jest bezpośrednio widoczne w tagu android:visibleTo InstantApps.
- [C-0-3] Aplikacje błyskawiczne NIE MOGĄ wchodzić w interakcje z zainstalowanymi aplikacjami, chyba że komponent jest udostępniany przez android:visibleTo InstantApps.
- [C-0-4] Zainstalowane aplikacje NIE MOGĄ mieć dostępu do szczegółowych informacji o aplikacjach błyskawicznych na urządzeniu, chyba że zostaną z nimi jednoznacznie połączone.
3.16. Parowanie urządzenia towarzyszącego
Android zapewnia obsługę parowania urządzeń towarzyszących, aby efektywniej zarządzać powiązaniem z urządzeniami towarzyszącymi. Udostępnia też interfejs API CompanionDeviceManager
, dzięki któremu aplikacje mają dostęp do tej funkcji.
Jeśli implementacje urządzeń obsługują funkcję parowania urządzenia towarzyszącego, to:
- [C-1-1] MUSI zadeklarować flagę funkcji
FEATURE_COMPANION_DEVICE_SETUP
. - [C-1-2] MUSI upewnić się, że interfejsy API w pakiecie
android.companion
zostały w pełni zaimplementowane. - [C-1-3] MUSI udostępniać informacje o produktach dostępnych dla użytkownika, które umożliwiają wybór i potwierdzenie dostępności urządzenia towarzyszącego.
4. Zgodność pakietów aplikacji
Implementacje urządzeń:
- [C-0-1] MUSI mieć możliwość instalowania i uruchamiania plików „.apk” Androida generowanych za pomocą narzędzia „aapt” zawartego w oficjalnym pakiecie SDK na Androida.
- Powyższe wymaganie może być trudne, dlatego ZALECANE jest użycie implementacji urządzenia w systemie zarządzania pakietami w ramach referencji AOSP.
- [C-0-2] MUSI obsługiwać weryfikację plików „.apk” przy użyciu schematu podpisu pliku APK w wersji 2 i podpisywania plików JAR.
- [C-0-3] NIE MOŻE zwiększać formatu .apk, pliku manifestu Androida, kodu bajtowego Dalvik ani RenderScriptu ani kodu bajtowego RenderScript w sposób, który uniemożliwiałby prawidłowe zainstalowanie i działanie tych plików na innych zgodnych urządzeniach.
- [C-0-4] NIE MOŻE zezwalać aplikacjom innym niż obecny „instalator, który zarejestrował” pakiet na dyskretne odinstalowanie aplikacji bez pytania, zgodnie z opisem w pakiecie SDK dotyczącym uprawnienia
DELETE_PACKAGE
. Jedynymi wyjątkami są aplikacja weryfikatora pakietów systemowych obsługująca intencję PACKAGE_NEEDS_VERIFICATION i intencja ACTION_MANAGE_STORAGE aplikacji menedżera miejsca.
Implementacje na urządzeniu NIE MOGĄ instalować pakietów aplikacji z nieznanych źródeł, chyba że aplikacja, która żąda instalacji, spełnia wszystkie te wymagania:
- MUSI zadeklarować uprawnienie
REQUEST_INSTALL_PACKAGES
lub mieć wartośćandroid:targetSdkVersion
ustawioną na 24 lub niższą. - MUSI on mieć uprawnienia do instalowania aplikacji z nieznanych źródeł.
Implementacje na urządzeniach MUSZĄ zawierać działanie obsługujące intencję android.settings.MANAGE_UNKNOWN_APP_SOURCES
. POWINNY jest oferować użytkownikom zgodę na przyznanie lub unieważnienie uprawnień do instalowania aplikacji z nieznanych źródeł w danej aplikacji, lecz MOGĄ Państwo wdrożyć to rozwiązanie jako brak działania i zwrócić RESULT_CANCELED
w przypadku domeny startActivityForResult()
, jeśli implementacja urządzenia nie chce, aby użytkownicy mieli taki wybór. Jednak nawet w takich przypadkach należy poinformować użytkownika, dlaczego nie ma takiej możliwości.
5. Zgodność multimediów
Implementacje na urządzeniach:
- [C-0-1] MUSI obsługiwać formaty multimedialne, kodery, dekodery, typy plików i formaty kontenerów zdefiniowane w sekcji 5.1 dla każdego kodeka zadeklarowanego przez
MediaCodecList
. - [C-0-2] MUSI zadeklarować pomoc dotyczącą koderów i dekoderów dostępnych dla aplikacji innych firm na
MediaCodecList
. - [C-0-3] MUSI dekodować i udostępniać aplikacjom innych firm wszystkie formaty, które potrafi kodować. Dotyczy to wszystkich strumieni bitowych generowanych przez kodery oraz profili raportowanych w
CamcorderProfile
.
Implementacje na urządzeniach:
- NALEŻY dążyć do minimalnego opóźnienia kodeka, czyli na przykład:
- NIE POWINNY jest wykorzystywać ani przechowywać buforów wejściowych ani zwracanych buforów wejściowych tylko po przetworzeniu.
- NIE NALEŻY przechowywać zdekodowanych buforów przez czas dłuższy niż określony w standardzie (np. SPS).
- NIE NALEŻY przechowywać kodowanych buforów dłużej niż jest to wymagane przez strukturę GOP.
Wszystkie kodeki wymienione w poniższej sekcji zostały udostępnione jako implementacje oprogramowania w preferowanej implementacji na Androida w ramach projektu Android Open Source.
Google ani stowarzyszenie Open Handset Alliance nie twierdzą, że kodeki są wolne od patentów innych firm. Wszystkim, którzy zamierzają korzystać z tego kodu źródłowego w sprzęcie lub oprogramowaniu, zalecamy, aby wdrożenie tego kodu, w tym w oprogramowaniu open source lub „shareware”, wymagało licencji opatentowanych przez właścicieli odpowiednich patentów.
5.1. Kodeki multimediów
5.1.1 Kodowanie dźwięku
Więcej informacji znajdziesz w artykule 5.1.3. Szczegóły kodeków audio.
Jeśli implementacje urządzeń deklarują android.hardware.microphone
, MUSZĄ obsługiwać to kodowanie dźwięku:
- [C-1-1] PCM/WAVE
5.1.2 Dekodowanie dźwięku
Więcej informacji znajdziesz w artykule 5.1.3. Szczegóły kodeków audio.
Jeśli implementacje urządzenia zadeklarują obsługę funkcji android.hardware.audio.output
:
- [C-1-1] Profil AAC MPEG-4 (AAC LC)
- [C-1-2] Profil AAC MPEG-4 HE (AAC+)
- [C-1-3] Profil MPEG-4 HE AACv2 (ulepszony AAC+)
- [C-1-4] AAC ELD (rozszerzony format AAC z niskim opóźnieniem)
- [C-1-5] FLAC
- [C-1-6] MP3
- [C-1-7] MIDI
- [C-1-8] Vorbis
- [C-1-9] PCM/WAVE
- [C-1-10] Opus
Jeśli implementacje urządzeń obsługują dekodowanie buforów wejściowych AAC strumieni wielokanałowych (tj. więcej niż 2 kanałów) do PCM za pomocą domyślnego dekodera dźwięku AAC w interfejsie API android.media.MediaCodec
, MUSZĄ być obsługiwane te elementy:
- [C-2-1] Dekodowanie MUSI być wykonywane bez redmiksowania (np. strumień AAC 5.0 musi być zdekodowany na 5 kanałów PCM, a strumień AAC 5.1 – na 6 kanałów PCM).
- [C-2-2] Metadane zakresu dynamicznego MUSZĄ być zgodne z definicją w dokumencie „Dynamic Range Control (DRC)” w standardzie ISO/IEC 14496-3 oraz kluczami DRC
android.media.MediaFormat
w celu skonfigurowania działania dekodera dźwięku w zakresie dynamiki. Klucze AAC DRC zostały wprowadzone w interfejsie API 21. Te klucze to: KEY_AAC_DRC_ATTENUATION_FACTOR, KEY_AAC_DRC_BOOST_FACTOR, KEY_AAC_DRC_HEAVY_COMPRESSION, KEY_AAC_DRC_TARGET_REFERENCE_LEVEL i KEY_AAC_ENCODED_TARGET_LEVEL
5.1.3 Szczegóły kodeków audio
Format/kodek | Szczegóły | Obsługiwane typy plików/formaty kontenerów |
---|---|---|
Profil AAC MPEG-4 (AAC LC) |
Obsługa treści mono/stereo/5.0/5.1 ze standardowymi częstotliwościami próbkowania od 8 do 48 kHz. |
|
Profil MPEG-4 HE AAC (AAC+) | Obsługa treści mono/stereo/5.0/5.1 ze standardowymi częstotliwościami próbkowania od 16 do 48 kHz. | |
MPEG-4 HE AACv2 Profil (ulepszony AAC+) |
Obsługa treści mono/stereo/5.0/5.1 ze standardowymi częstotliwościami próbkowania od 16 do 48 kHz. | |
AAC ELD (rozszerzone AAC z niskim opóźnieniem) | Obsługa treści mono/stereo ze standardowymi częstotliwościami próbkowania od 16 do 48 kHz. | |
AMR-NB | 4,75–12,2 kb/s, próbkowanie przy 8 kHz | 3GPP (.3GPP) |
AMR-WB | 9 częstotliwości od 6,60 kb/s do 23,85 kb/s, próbkowanie przy 16 kHz | |
FLAC | Mono/Stereo (brak wielokanałowego). Częstotliwość próbkowania do 48 kHz (zalecamy ustawienie maks. 44,1 kHz w przypadku urządzeń z częstotliwością wyjściową 44,1 kHz, ponieważ redukcja częstotliwości próbkowania od 48 do 44,1 kHz nie zawiera filtra dolnoprzepustowego. 16-bitowy (ZALECANY) bez ditheringu w przypadku wersji 24-bitowej. | Tylko FLAC (.flac) |
MP3 | Stała szybkość transmisji bitów mono/Stereo 8–320 kb/s (CBR) lub zmienna szybkość transmisji bitów (VBR) | MP3 (.mp3) |
MIDI | MIDI typu 0 i 1. DLS w wersji 1 i 2. XMF i Mobile XMF. Obsługa formatów dzwonków RTTTL/RTX, OTA i iMelody |
|
Vorbis |
|
|
PCM/WAVE | 16-bitowy linearny PCM (oprocentowanie do limitu sprzętowego). Urządzenia MUSZĄ obsługiwać częstotliwość próbkowania w przypadku nieprzetworzonego nagrywania PCM przy częstotliwościach 8000, 11025, 16 000 i 44 100 Hz. | WAVE (.wav) |
Opus | matroska (.mkv), Ogg(.ogg) |
5.1.4 Kodowanie obrazu
Więcej informacji znajdziesz w artykule 5.1.6. Szczegóły kodeków graficznych.
Implementacje na urządzeniu MUSZĄ obsługiwać kodowanie obrazów:
- [C-0-1] JPEG
- [C-0-2] PNG
- [C-0-3] WebP
5.1.5 Dekodowanie obrazu
Więcej informacji znajdziesz w artykule 5.1.6. Szczegóły kodeków graficznych.
Implementacje na urządzeniu MUSZĄ obsługiwać kodowanie tych dekodowania obrazów:
- [C-0-1] JPEG
- [C-0-2] GIF
- [C-0-3] PNG
- [C-0-4] BMP
- [C-0-5] WebP
- [C-0-6] Nieprzetworzony
5.1.6 Szczegóły kodeków obrazu
Format/kodek | Szczegóły | Obsługiwane typy plików/formaty kontenerów |
---|---|---|
JPEG | Podstawowy+progresywny | JPEG (.jpg) |
GIF | GIF (.gif) | |
PNG | PNG (.png), | |
BMP | BMP (.bmp), | |
WebP | WebP (.webp) | |
Nieprzetworzony | ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw) |
5.1.7 Kodeki wideo
- Aby zapewnić akceptowalną jakość strumieniowego przesyłania treści wideo w internecie i usług do wideokonferencji, w implementacji urządzeń WYMAGANE jest użycie sprzętowego kodeka VP8 spełniającego wymagania.
Jeśli implementacje urządzeń obejmują dekoder lub koder wideo:
-
[C-1-1] Kodeki wideo MUSZĄ obsługiwać rozmiary wyjściowego i wejściowego bufora bajtowego dla największej możliwej skompresowanej i nieskompresowanej klatki zgodnie ze standardem i konfiguracją, ale nie dla ogólnych zasad.
-
[C-1-2] Kodery i dekodery wideo MUSZĄ obsługiwać elastyczny format kolorów YUV420 (color_FormatYUV420Elastyczne).
Jeśli implementacje urządzeń reklamują obsługę profilu HDR w Display.HdrCapabilities
:
- [C-2-1] MUSI obsługiwać analizowanie i obsługę statycznych metadanych HDR.
Jeśli implementacje urządzeń sygnalizują obsługę wewnątrzodświeżania w ramach funkcji FEATURE_IntraRefresh
w klasie MediaCodecInfo.CodecCapabilities
:
- [C-3-1]MUSI obsługiwać okresy odświeżania w zakresie 10–60 klatek i dokładnie działać w zakresie 20% skonfigurowanego okresu odświeżania.
5.1.8 Lista kodeków wideo
Format/kodek | Szczegóły |
Obsługiwane typy plików/ formaty kontenerów |
---|---|---|
H.263 |
|
|
H.264 AVC | Szczegółowe informacje znajdziesz w sekcjach 5.2 i 5.3. |
|
H.265 HEVC | Więcej informacji znajdziesz w sekcji 5.3. | MPEG-4 (MP4) |
MPEG-2 | Profil główny | MPEG2-TS |
MPEG-4 SP | 3GPP (.3GPP) | |
VP8 | Szczegółowe informacje znajdziesz w sekcjach 5.2 i 5.3. |
|
VP9 | Więcej informacji znajdziesz w sekcji 5.3. |
|
5.2. Kodowanie wideo
Jeśli implementacje urządzeń obsługują koder wideo i udostępniają go aplikacjom innych firm, to:
- W 2 przesuniętych oknach NIE POWINNO być o więcej niż 15% powyżej szybkości transmisji bitów między interwałami w ramce (I-frame).
- Szybkość transmisji bitów NIE POWINNO przekraczać ok. 100% w przesuwanym oknie o długości 1 sekundy.
Jeśli implementacje urządzeń obejmują osadzony wyświetlacz o przekątnej co najmniej 2,5 cala, port wyjściowy wideo lub zadeklarowanie obsługi kamery za pomocą flagi funkcji android.hardware.camera.any
, funkcje te:
- [C-1-1] MUSI obsługiwać co najmniej jeden z koderów wideo VP8 lub H.264 i udostępniać go w aplikacjach innych firm.
- POWINNA obsługiwać kodery wideo VP8 i H.264 oraz udostępniać je aplikacjom innych firm.
Jeśli implementacje urządzeń obsługują kodery wideo H.264, VP8, VP9 lub HEVC i udostępniają je aplikacjom innych firm:
- [C-2-1] MUSI obsługiwać dynamicznie konfigurowane szybkości transmisji bitów.
- Koder powinien obsługiwać zmienne liczby klatek, przy czym koder wideo POWINNY określać chwilowy czas trwania klatek na podstawie sygnatur czasowych buforów wejściowych i przydzielać zasobnik na podstawie czasu trwania klatek.
Jeśli implementacje urządzeń obsługują koder wideo MPEG-4 SP i udostępniają go aplikacjom innych firm, muszą one:
- POWINNA obsługiwać dynamicznie konfigurowane szybkości transmisji bitów dla obsługiwanego kodera.
5.2.1 H.263
Jeśli implementacje urządzeń obsługują kodery H.263 i udostępniają je aplikacjom innych firm:
- [C-1-1] MUSI obsługiwać profil podstawowy poziomu 45.
- POWINNA obsługiwać dynamicznie konfigurowane szybkości transmisji bitów dla obsługiwanego kodera.
5.2.2 H-264
Jeśli implementacje urządzeń obsługują kodek H.264:
- [C-1-1] MUSI obsługiwać profil podstawowy poziomu 3. Jednak obsługa ASO (Arbitrary Slice Ordering), FMO (elastyczne porządkowanie makr) i RS (nadmiarowe wycinki) jest OPCJONALNA. Co więcej, w celu zachowania zgodności z innymi urządzeniami z Androidem ZALECANA jest opcja używania przez kodery do profilu Baseline profilu ASO, FMO i RS.
- [C-1-2] MUSI obsługiwać profile kodowania wideo w jakości SD (standardowej rozdzielczości) z poniższej tabeli.
- POWINNY jest obsługiwać profil główny na poziomie 4.
- POWINNA obsługiwać profile kodowania wideo HD (High Definition) zgodnie z informacjami w tej tabeli.
Jeśli implementacje urządzeń zgłaszają obsługę kodowania H.264 w przypadku filmów w rozdzielczości 720p lub 1080p za pomocą interfejsów API multimediów:
- [C-2-1] MUSI obsługiwać profile kodujące z poniższej tabeli.
SD (niska jakość) | SD (wysoka jakość) | HD – 720p | HD – 1080p | |
---|---|---|---|---|
Rozdzielczość wideo | 320 x 240 piks. | 720 x 480 piks. | 1280 x 720 piks. | 1920 x 1080 piks. |
Liczba klatek w filmie | 20 kl./s | 30 klatek/s | 30 klatek/s | 30 klatek/s |
Szybkość transmisji wideo | 384 Kb/s | 2 Mb/s | 4 Mb/s | 10 Mb/s |
5.2.3 VP8
Jeśli implementacje urządzeń obsługują kodek VP8:
- [C-1-1] MUSI obsługiwać profile kodowania wideo SD.
- POWINNA obsługiwać poniższe profile kodowania wideo HD (High Definition).
- MUSI obsługiwać tworzenie plików Matroska WebM.
- W celu zapewnienia akceptowalnej jakości strumieniowych transmisji wideo w internecie i usług do prowadzenia rozmów wideo POWINNY jest używać sprzętowego kodeka VP8, który spełnia wymagania dotyczące sprzętowego kodowania RTC w projekcie WebM.
Jeśli implementacje urządzeń zgłaszają obsługę kodowania VP8 w przypadku filmów w rozdzielczości 720p lub 1080p za pomocą interfejsów API multimediów:
- [C-2-1] MUSI obsługiwać profile kodujące z poniższej tabeli.
SD (niska jakość) | SD (wysoka jakość) | HD – 720p | HD – 1080p | |
---|---|---|---|---|
Rozdzielczość wideo | 320 x 180 piks. | 640 x 360 piks. | 1280 x 720 piks. | 1920 x 1080 piks. |
Liczba klatek w filmie | 30 klatek/s | 30 klatek/s | 30 klatek/s | 30 klatek/s |
Szybkość transmisji wideo | 800 Kb/s | 2 Mb/s | 4 Mb/s | 10 Mb/s |
5.2.4 VP9
Jeśli implementacje urządzeń obsługują kodek VP9:
- MUSI obsługiwać tworzenie plików Matroska WebM.
5.3. Dekodowanie wideo
Jeśli implementacje urządzeń obsługują kodeki VP8, VP9, H.264 lub H.265:
- [C-1-1] MUSI obsługiwać dynamiczne przełączanie rozdzielczości wideo i przełączenia liczby klatek za pomocą standardowych interfejsów API Androida w tym samym strumieniu w przypadku wszystkich kodeków VP8, VP9, H.264 i H.265 w czasie rzeczywistym z maksymalną rozdzielczością obsługiwaną przez każdy kodek na urządzeniu.
Jeśli implementacje urządzeń zadeklarują obsługę dekodera Dolby Vision w HDR_TYPE_DOLBY_VISION
, będą to:
- [C-2-1] MUSI zawierać moduł wyodrębniający z obsługą Dolby Vision.
- [C-2-2] MUSI prawidłowo wyświetlać treści Dolby Vision na ekranie urządzenia lub w standardowym porcie wyjściowym wideo (np. HDMI).
- [C-2-3] MUSI ustawić indeks ścieżki zgodnych wstecznie warstw podstawowych (jeśli występują) na taki sam jak indeks ścieżki połączonej warstwy Dolby Vision.
5.3.1 MPEG-2
Jeśli implementacje urządzeń obsługują dekodery MPEG-2:
- [C-1-1] MUSI obsługiwać wysoki poziom profilu głównego.
5.3.2 H.263
Jeśli implementacje urządzeń obsługują dekodery H.263:
- [C-1-1] MUSI obsługiwać profil podstawowy na poziomie 30 i 45.
5.3.3 MPEG-4
Urządzenia obsługujące dekodery MPEG-4:
- [C-1-1] MUSI obsługiwać prosty profil na poziomie 3.
5.3.4 H.264
Jeśli implementacje urządzeń obsługują dekodery H.264:
- [C-1-1] MUSI obsługiwać profil główny na poziomie 3.1 i profil podstawowy. Obsługa ASO (Arbitrary Slice Ordering), FMO (elastyczne porządkowanie makr) i RS (nadmiarowe wycinki) jest OPCJONALNA.
- [C-1-2] MUSI dekodować filmy za pomocą profili SD (standardowej rozdzielczości) wymienionych w tabeli poniżej i zakodować je przy użyciu profilu podstawowego i profilu głównego na poziomie 3.1 (w tym 720p30).
- MUSI dekodować filmy w profilach HD (High Definition) zgodnie z informacjami w poniższej tabeli.
Jeśli wysokość zgłaszana przez metodę Display.getSupportedModes()
jest równa lub większa od rozdzielczości wideo, implementacje urządzeń:
- [C-2-1] MUSI obsługiwać profile kodowania wideo HD 720p z poniższej tabeli.
- [C-2-2] MUSI obsługiwać profile kodowania wideo HD 1080p z poniższej tabeli.
SD (niska jakość) | SD (wysoka jakość) | HD – 720p | HD – 1080p | |
---|---|---|---|---|
Rozdzielczość wideo | 320 x 240 piks. | 720 x 480 piks. | 1280 x 720 piks. | 1920 x 1080 piks. |
Liczba klatek w filmie | 30 klatek/s | 30 klatek/s | 60 kl./s | 30 kl./s (60 kl./s, telewizja) |
Szybkość transmisji wideo | 800 Kb/s | 2 Mb/s | 8 Mb/s | 20 Mb/s |
5.3.5 H.265 (HEVC)
Jeśli implementacje urządzeń obsługują kodek H.265:
- [C-1-1] MUSI obsługiwać profil główny poziomu 3 i profile dekodowania wideo SD zgodnie z poniższą tabelą.
- KONIECZNIE jest obsługa profili dekodowania HD zgodnie z informacjami w poniższej tabeli.
- [C-1-2] W przypadku dekodera sprzętowego MUSI obsługiwać profile dekodowania HD zgodnie z informacjami w poniższej tabeli.
Jeśli wysokość zgłaszana przez metodę Display.getSupportedModes()
jest równa rozdzielczości filmu lub od niej większa, to:
- [C-2-1] Implementacje urządzeń MUSZĄ obsługiwać co najmniej jeden dekodowanie H.265 lub VP9 w profilach 720, 1080 i UHD.
SD (niska jakość) | SD (wysoka jakość) | HD – 720p | HD – 1080p | UHD | |
---|---|---|---|---|---|
Rozdzielczość wideo | 352 x 288 piks. | 720 x 480 piks. | 1280 x 720 piks. | 1920 x 1080 piks. | 3840 x 2160 piks. |
Liczba klatek w filmie | 30 klatek/s | 30 klatek/s | 30 klatek/s | 30/60 kl./s (60 kl./s, telewizja z dekodowaniem sprzętowym H.265) | 60 kl./s |
Szybkość transmisji wideo | 600 Kb/s | 1,6 Mb/s | 4 Mb/s | 5 Mb/s | 20 Mb/s |
5.3.6 VP8
Jeśli implementacje urządzeń obsługują kodek VP8:
- [C-1-1] MUSI obsługiwać profile dekodowania SD z poniższej tabeli.
- NALEŻY użyć sprzętowego kodeka VP8, który spełnia wymagania.
- MUSI obsługiwać profile dekodowania HD z poniższej tabeli.
Jeśli wysokość zgłoszona przez metodę Display.getSupportedModes()
jest równa lub większa od rozdzielczości wideo, to:
- [C-2-1] Implementacje na urządzeniach MUSZĄ obsługiwać profile 720p z tabeli poniżej.
- [C-2-2] Implementacje urządzeń MUSZĄ obsługiwać profile 1080p z poniższej tabeli.
SD (niska jakość) | SD (wysoka jakość) | HD – 720p | HD – 1080p | |
---|---|---|---|---|
Rozdzielczość wideo | 320 x 180 piks. | 640 x 360 piks. | 1280 x 720 piks. | 1920 x 1080 piks. |
Liczba klatek w filmie | 30 klatek/s | 30 klatek/s | 30 kl./s (60 kl./s, telewizja) | 30 (60 kl./s, telewizja) |
Szybkość transmisji wideo | 800 Kb/s | 2 Mb/s | 8 Mb/s | 20 Mb/s |
5.3.7 VP9
Jeśli implementacje urządzeń obsługują kodek VP9:
- [C-1-1] MUSI obsługiwać profile dekodowania wideo SD zgodnie z informacjami w tej tabeli.
- KONIECZNIE jest obsługa profili dekodowania HD zgodnie z informacjami w poniższej tabeli.
Jeśli implementacje urządzeń obsługują kodek VP9 i dekoder sprzętowy:
- [C-2-2] MUSI obsługiwać profile dekodowania HD zgodnie z informacjami w poniższej tabeli.
Jeśli wysokość zgłaszana przez metodę Display.getSupportedModes()
jest równa rozdzielczości filmu lub od niej większa, to:
- [C-3-1] Implementacje urządzenia MUSZĄ obsługiwać co najmniej 1 dekodowanie VP9 lub H.265 z profili 720, 1080 i UHD.
SD (niska jakość) | SD (wysoka jakość) | HD – 720p | HD – 1080p | UHD | |
---|---|---|---|---|---|
Rozdzielczość wideo | 320 x 180 piks. | 640 x 360 piks. | 1280 x 720 piks. | 1920 x 1080 piks. | 3840 x 2160 piks. |
Liczba klatek w filmie | 30 klatek/s | 30 klatek/s | 30 klatek/s | 30 kl./s (60 kl./s, telewizja z sprzętowym dekodowaniem VP9) | 60 kl./s |
Szybkość transmisji wideo | 600 Kb/s | 1,6 Mb/s | 4 Mb/s | 5 Mb/s | 20 Mb/s |
5.4. Nagrywanie dźwięku
Chociaż od wersji Androida 4.3 niektóre z wymagań opisanych w tej sekcji są oznaczone jako POWINNY, definicja zgodności w przyszłych wersjach zostanie zmieniona na MUSZĄ. Zdecydowanie ZALECANE są zarówno istniejące, jak i nowe urządzenia z Androidem, które spełniają wymienione poniżej wymagania. W przeciwnym razie nie będą mogły uzyskać zgodności z Androidem po uaktualnieniu do nowej wersji.
5.4.1 Przechwytywanie nieprzetworzonego dźwięku
Jeśli implementacje urządzenia zadeklarują android.hardware.microphone
:
-
[C-1-1] MUSI umożliwiać przechwytywanie nieprzetworzonych treści audio o następujących cechach:
-
Format: linearny PCM, 16-bitowy
- Częstotliwość próbkowania: 8000, 11025, 16 000, 44 100 Hz
-
Kanały: mono
-
[C-1-2] MUSI przechwytywać z większą częstotliwością próbkowania bez próbkowania w górę.
- [C-1-3] MUSI zawierać odpowiedni filtr antyaliasing, jeśli podane powyżej częstotliwości próbkowania są odczytywane przy użyciu próbkowania w dół.
-
NALEŻY zezwolić na przechwytywanie nieprzetworzonych treści audio w jakości radia AM i DVD, co oznacza następujące cechy:
-
Format: linearny PCM, 16-bitowy
- Częstotliwość próbkowania: 22 050, 48 000 Hz
- Kanały: stereo
Jeśli implementacje urządzeń umożliwiają przechwytywanie nieprzetworzonych treści audio za pomocą radia AM i DVD w jakości:
- [C-2-1] MUSI przechwytywać bez próbkowania w górę przy współczynniku wyższego niż 16 000:22050 lub 44100:48 000.
- [C-2-2] MUSI zawierać odpowiedni filtr antyaliasingowy w przypadku próbkowania w górę lub w dół.
5.4.2 Zrób zdjęcie, by włączyć rozpoznawanie głosu
Jeśli implementacje urządzenia zadeklarują android.hardware.microphone
:
- [C-1-1] MUSI przechwytywać źródło dźwięku
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION
z jedną z częstotliwości próbkowania – 44 100 lub 48 000. - [C-1-2] Podczas nagrywania strumienia audio ze źródła dźwięku
AudioSource.VOICE_RECOGNITION
MUSISZ domyślnie wyłączyć przetwarzanie dźwięku z redukcją szumów. - [C-1-3] Domyślnie MUSI wyłączyć automatyczną kontrolę wzmocnienia podczas nagrywania strumienia audio ze źródła dźwięku
AudioSource.VOICE_RECOGNITION
. - NAGRYWAJ strumień audio rozpoznawania głosu o względnie płaskiej amplitudzie względem charakterystyki częstotliwości: w szczególności ±3 dB, od 100 Hz do 4000 Hz.
- TRZEBA nagrywać strumienia audio rozpoznawania głosu z ustawioną czułością sygnału wejściowego, tak aby źródło SPL (90 dB) o częstotliwości 1000 Hz generowało wartość RMS 2500 dla 16-bitowych próbek.
- MUSI nagrywać strumień audio rozpoznawania głosu, tak aby poziomy amplitudy PCM liniowo śledziły SPL na poziomie co najmniej 30 dB od -18 dB do +12 dB do 90 dB SPL przy mikrofonie.
- NALEŻY nagrywać strumień audio rozpoznawania głosu z całkowitym zniekształceniem harmonicznym (THD) poniżej 1% dla częstotliwości 1 kHz przy 90 dB poziomu wejściowego SPL mikrofonu.
Jeśli implementacje urządzeń zadeklarują android.hardware.microphone
i technologie wyciszania szumów (redukcji szumów) dostosowanych do rozpoznawania mowy, te funkcje:
- [C-2-1] MUSI umożliwiać sterowanie tym efektem dźwiękowym za pomocą interfejsu API
android.media.audiofx.NoiseSuppressor
. - [C-2-2] Każda implementacja technologii eliminowania szumów musi jednoznacznie identyfikować się w polu
AudioEffect.Descriptor.uuid
.
5.4.3 Zrób zdjęcie, aby zmienić trasę odtwarzania
Klasa android.media.MediaRecorder.AudioSource
zawiera źródło dźwięku REMOTE_SUBMIX
.
Jeśli implementacje urządzeń zadeklarują zarówno android.hardware.audio.output
, jak i android.hardware.microphone
:
-
[C-1-1] MUSI prawidłowo zaimplementować źródło dźwięku
REMOTE_SUBMIX
, aby aplikacja, która nagrywa za pomocą interfejsu APIandroid.media.AudioRecord
, przechwytywała miks wszystkich strumieni audio z wyjątkiem tych:-
AudioManager.STREAM_RING
-
AudioManager.STREAM_ALARM
-
AudioManager.STREAM_NOTIFICATION
-
5.5. Odtwarzanie dźwięku
Android zapewnia możliwość zezwalania aplikacjom na odtwarzanie dźwięku przez wyjście audio peryferyjnego urządzenia peryferyjnego zgodnie z definicją w sekcji 7.8.2.
5.5.1 Odtwarzanie surowego dźwięku
Jeśli implementacje urządzenia zadeklarują android.hardware.audio.output
:
-
[C-1-1] MUSI umożliwiać odtwarzanie nieprzetworzonych treści audio o następujących cechach:
- Format: linearny PCM, 16-bitowy
- Częstotliwość próbkowania: 8000, 11 025, 16 000, 22 050, 32 000, 44 100
- Kanały: mono, stereo
-
POWINNY jest zezwalać na odtwarzanie nieprzetworzonej treści audio o następujących cechach:
- Częstotliwość próbkowania: 24 000, 48 000
5.5.2 Efekty audio
Android udostępnia interfejs API do efektów dźwiękowych do implementacji na urządzeniach.
Jeśli implementacje urządzenia zadeklarują funkcję android.hardware.audio.output
:
- [C-1-1] MUSI obsługiwać implementacje
EFFECT_TYPE_EQUALIZER
iEFFECT_TYPE_LOUDNESS_ENHANCER
sterowane za pomocą podklasy AudioEffectEqualizer
,LoudnessEnhancer
. - [C-1-2] MUSI obsługiwać implementację interfejsu API wizualizacji, którą można kontrolować za pomocą klasy
Visualizer
. - POWINNA obsługiwać implementacje
EFFECT_TYPE_BASS_BOOST
,EFFECT_TYPE_ENV_REVERB
,EFFECT_TYPE_PRESET_REVERB
iEFFECT_TYPE_VIRTUALIZER
, które można kontrolować za pomocą klas podrzędnychBassBoost
,EnvironmentalReverb
,PresetReverb
iVirtualizer
.AudioEffect
5.5.3 Wyjściowa głośność dźwięku
Implementacje na urządzeniach motoryzacyjnych:
- POWINNY jest zezwalać na dostosowanie głośności dźwięku oddzielnie dla każdego strumienia audio z użyciem typu lub użycia treści zdefiniowanego w Atrybutach audio oraz użycia audio w samochodzie (zgodnie z definicją w zasadzie
android.car.CarAudioManager
).
5.6. Opóźnienie dźwięku
Opóźnienie dźwięku to czas, w którym sygnał audio przechodzi przez system. Wiele klas aplikacji korzysta z krótkich czasów oczekiwania, aby uzyskać efekty dźwiękowe w czasie rzeczywistym.
Na potrzeby tej sekcji należy stosować następujące definicje:
- opóźnienia wyjścia. Odstęp czasu między momentem, w którym aplikacja zapisuje ramkę danych kodowanych w PCM, a odebraniem odpowiedniego dźwięku w środowisku przez przetwornik lub sygnał urządzenia.
- opóźnienia „na zimno”. Opóźnienie wyjścia dla pierwszej klatki, gdy system wyjściowy audio był bezczynny i wyłączony przed żądaniem.
- ciągły czas oczekiwania na sygnał wyjściowy. Opóźnienie wyjściowe kolejnych klatek po odtworzeniu dźwięku na urządzeniu.
- opóźnienia sygnału wejściowego. Odstęp czasu między momentem, w którym otoczenie trafia do urządzenia z przetwornikiem lub sygnałem na urządzeniu, a odstępem między momentem, w którym aplikacja odczytuje odpowiednią ramkę danych kodowanych w PCM.
- utraconych danych wejściowych. Początkowa część sygnału wejściowego, który jest bezużyteczny lub niedostępny.
- opóźnienia „zimnego sygnału wejściowego”. Suma utraconego czasu sygnału wejściowego i opóźnienia wejściowego dla pierwszej klatki, gdy system wejścia audio był bezczynny i wyłączony przed żądaniem.
- ciągłe opóźnienie sygnału wejściowego. Opóźnienie sygnału wejściowego dla kolejnych klatek, gdy urządzenie rejestruje dźwięk.
- zakłócenia przy zimnie. Zmienność między osobnymi pomiarami wartości czasu oczekiwania na zimne wyjście.
- zakłócenia przy zimnie. Zmienność między osobnymi pomiarami wartości czasu oczekiwania na zimno.
- ciągłe opóźnienie w obie strony. Suma ciągłych opóźnień sygnału wejściowego i ciągłego czasu oczekiwania na dane wyjściowe plus 1 okres buforowania. Okres buforowania daje aplikacji czas na przetworzenie sygnału i czas potrzebny aplikacji na zniwelowanie różnicy fazowej między strumieniami wejściowymi i wyjściowymi.
- Interfejs API kolejki buforowej OpenSL ES PCM. Zestaw interfejsów API OpenSL ES związanych z PCM w Androidzie NDK.
- Natywny interfejs API audio audio Zestaw interfejsów API AAudio w systemie Android NDK.
Jeśli implementacje urządzeń deklarują użycie funkcji android.hardware.audio.output
, Zdecydowanie ZALECANE jest spełnienie lub przekroczenie tych wymagań:
- [SR] Opóźnienie na wyjściu „na zimno” (maks. 100 milisekund)
- [SR] Ciągłe opóźnienie wyjściowe wynoszące maksymalnie 45 milisekund.
- [SR] Zminimalizuj zakłócenia na zimno
Jeśli po przeprowadzeniu wstępnej kalibracji i używaniu interfejsu API kolejki buforowej OpenSL ES PCM implementacje urządzeń spełniają powyższe wymagania, ze względu na ciągłe opóźnienie sygnału wyjściowego i opóźnienie „na zimno” na co najmniej 1 obsługiwanym urządzeniu wyjściowym audio:
- [SR] Zdecydowanie ZALECANE jest zgłaszanie dźwięku o krótkim czasie oczekiwania przez zadeklarowanie flagi funkcji
android.hardware.audio.low_latency
. - [SR] ZALECNIE ZALECANE jest też spełnienie wymagań dotyczących dźwięku z małym opóźnieniem przez interfejs AAudio API.
Jeśli implementacje urządzeń nie spełniają wymagań dotyczących dźwięku z małym opóźnieniem w interfejsie API kolejki buforowej OpenSL ES PCM:
- [C-1-1] NIE MOŻE zgłaszać obsługi dźwięku z małym opóźnieniem.
Jeśli implementacje urządzeń obejmują android.hardware.microphone
, Zdecydowanie ZALECANE są, aby spełniały one te wymagania dotyczące wejściowego dźwięku:
- [SR] Opóźnienie reakcji „na zimno”: maksymalnie 100 milisekund
- [SR] Ciągłe opóźnienie sygnału wejściowego: maksymalnie 30 milisekund
- [SR] Ciągłe opóźnienie w obie strony wynoszące maksymalnie 50 milisekund.
- [SR] Zmniejszenie zakłóceń podczas działania „na zimno”
5.7. Protokoły sieciowe
Implementacje urządzeń MUSZĄ obsługiwać protokoły sieci multimedialnej do odtwarzania dźwięku i obrazu zgodnie z opisem w dokumentacji pakietu Android SDK.
Jeśli implementacje urządzeń obejmują dekoder dźwięku lub wideo:
-
[C-1-1] MUSI obsługiwać wszystkie wymagane kodeki i formaty kontenerów opisane w sekcji 5.1 w standardzie HTTP(S).
-
[C-1-2] MUSI obsługiwać formaty segmentów multimediów podane w tabeli „Media Segmant Formats” (Formaty mediów) poniżej w przypadku protokołu Roboczej transmisji na żywo przez HTTP w wersji 7.
-
[C-1-3] MUSI obsługiwać poniższy profil audio-wideo RTP i powiązane kodeki z tabeli RTSP poniżej. Informacje o wyjątkach znajdziesz w przypisach w sekcji 5.1.
Formaty segmentów multimediów
Formaty segmentów | Pliki referencyjne | Wymagana obsługa kodeka |
---|---|---|
Zapis strumienia MPEG-2 | ISO 13818 |
Kodeki wideo:
i MPEG-2 znajdziesz w sekcji 5.1.3. Kodeki audio:
|
AAC z kadrowaniem ADTS i tagami ID3 | ISO 13818-7 | Szczegółowe informacje o AAC i jego wariantach znajdziesz w sekcji 5.1.1 |
WebVTT | WebVTT |
RTSP (RTP, SDP)
Nazwa profilu | Pliki referencyjne | Wymagana obsługa kodeka |
---|---|---|
H264 AVC | RFC 6184 | Szczegółowe informacje o AVC H264 znajdziesz w sekcji 5.1.3. |
MP4A-LATM | RFC 6416 | Szczegółowe informacje o AAC i jego wariantach znajdziesz w sekcji 5.1.1 |
H263–1998 |
RFC 3551 RFC 4629 RFC 2190 |
Szczegółowe informacje o H263 znajdziesz w sekcji 5.1.3. |
H263–2000 | RFC 4629 | Szczegółowe informacje o H263 znajdziesz w sekcji 5.1.3. |
AMR | RFC 4867 | Szczegółowe informacje o AMR-NB znajdziesz w sekcji 5.1.1. |
AMR-WB | RFC 4867 | Szczegółowe informacje o AMR-WB znajdziesz w sekcji 5.1.1. |
MP4V-ES | RFC 6416 | Szczegółowe informacje o MPEG-4 SP znajdziesz w sekcji 5.1.3 |
mpeg4-generic, | RFC 3640 | Szczegółowe informacje o AAC i jego wariantach znajdziesz w sekcji 5.1.1 |
Plik MP2T | RFC 2250 | Więcej informacji znajdziesz w sekcji Strumień transportu MPEG-2 pod nagłówkiem Transmisja na żywo przez HTTP |
5.8. Bezpieczne nośniki
Jeśli implementacje urządzeń obsługują bezpieczne wyjście wideo i obsługują bezpieczne platformy:
- [C-1-1] MUSI zadeklarować obsługę interfejsu
Display.FLAG_SECURE
.
Jeśli implementacje urządzeń deklarują obsługę Display.FLAG_SECURE
i protokołu wyświetlania bezprzewodowego,:
- [C-2-1] W przypadku ekranów połączonych protokołami bezprzewodowymi, np. Miracast, połączenie MUSI zabezpieczyć link silnym kryptograficznie mechanizmem, np. HDCP 2.x lub nowszym.
Jeśli implementacje urządzeń deklarują obsługę interfejsu Display.FLAG_SECURE
i przewodowego wyświetlacza zewnętrznego,:
- [C-3-1] Wszystkie przewodowe wyświetlacze zewnętrzne MUSZĄ obsługiwać standard HDCP 1.2 lub nowszy.
5.9. Interfejs MIDI (Musical Instrument Digital Interface)
Jeśli implementacje urządzeń zgłaszają obsługę funkcji android.software.midi
za pomocą klasy android.content.pm.PackageManager
, to:
-
[C-1-1] MUSI obsługiwać MIDI we wszystkich transportach sprzętowych obsługujących MIDI, dla których zapewniają ogólne łącza inne niż MIDI, tam, gdzie takie dane:
- Tryb hosta USB, sekcja 7.7
- Tryb urządzenia peryferyjnego USB, sekcja 7.7
- MIDI przez Bluetooth LE w głównej roli, sekcja 7.4.3
-
[C-1-2] MUSI obsługiwać transport oprogramowania MIDI między aplikacjami (urządzenia wirtualne MIDI)
5.10. Profesjonalne treści audio
Jeśli implementacje urządzeń zgłaszają obsługę funkcji android.hardware.audio.pro
za pomocą klasy android.content.pm.PackageManager, to:
- [C-1-1] MUSI zgłosić wsparcie funkcji
android.hardware.audio.low_latency
. - [C-1-2] MUSI mieć ciągłe opóźnienie dźwięku w obie strony określone w sekcji 5.6 Opóźnienia dźwięku, MUSI wynosić nie więcej niż 20 milisekund i 10 milisekund w przypadku co najmniej jednej obsługiwanej ścieżki.
- [C-1-3] MUSI zawierać porty USB obsługujące tryb hosta USB i tryb urządzenia peryferyjnego USB.
- [C-1-4] MUSI zgłosić wsparcie funkcji
android.software.midi
. - [C-1-5] MUSI spełniać wymagania dotyczące opóźnień i dźwięku w trybie USB przy użyciu interfejsu API kolejki bufora PCM OpenSL ES.
- [SR] Zdecydowanie ZALECANE jest zapewnienie stałego poziomu wydajności procesora przy włączonym dźwięku, a jego obciążenie jest zmienną. Przetestuj to za pomocą zatwierdzenia SimpleSynth 1bd6391. Aplikację SimpleSynth należy uruchamiać z poniższymi parametrami i osiągnąć zero niedopełnienia po 10 minutach:
- Cykle pracy: 200 000
- Zmienne obciążenie: WŁĄCZONE (przełącza się między 100% a 10% wartości cykli roboczych co 2 sekundy i ma na celu przetestowanie działania regulatora procesora)
- Stabilizowane obciążenie: WYŁ.
- POWINNO zminimalizować niedokładność zegara audio i dryf w stosunku do czasu standardowego.
- POWINNO zminimalizować dryf zegara audio w stosunku do CPU
CLOCK_MONOTONIC
, gdy obie te wartości są aktywne. - POWINNO Zminimalizować opóźnienie dźwięku przez przetworniki na urządzeniu.
- POWINNO zminimalizować opóźnienie dźwięku podczas korzystania z dźwięku cyfrowego przez USB.
- POWINIEN udokumentować pomiary opóźnienia dźwięku na wszystkich ścieżkach.
- POWINNY być zminimalizowanie zakłóceń podczas wywołań zwrotnych pełnego bufora audio, ponieważ wpływa to na procent wykorzystania pełnej przepustowości procesora przez wywołanie zwrotne.
- W normalnym trybie użytkowania z zgłoszonym opóźnieniem nie powinno być żadnych zakłóceń dźwięku (wyjściowych) ani przelotów (wejście).
- POWINNA SIĘ znajdować zerową różnicę czasu oczekiwania między kanałami.
- POWINNA Zminimalizować średni czas oczekiwania MIDI podczas wszystkich transmisji.
- POWINNO zminimalizować zmienność opóźnienia MIDI podczas obciążenia (zakłócenia) podczas wszystkich transmisji.
- NALEŻY podawać dokładne sygnatury czasowe MIDI we wszystkich transmisjach.
- POWINNO zminimalizować szum sygnału audio przez przetworniki urządzenia, w tym przez okres tuż po uruchomieniu „na zimno”.
- TRZEBA zadbać o zerową różnicę zegara audio między stroną wejściową a wyjściową odpowiednich punktów końcowych, gdy oba te punkty są aktywne. Przykładami odpowiednich punktów końcowych są mikrofon i głośnik urządzenia oraz wejście i wyjście gniazda słuchawek.
- NALEŻY obsługiwać wywołania zwrotne uzupełniania bufora audio po stronach wejściowych i wyjściowych odpowiednich punktów końcowych w tym samym wątku, gdy oba są aktywne, i wprowadzać wyjściowe wywołanie zwrotne tuż po zwrocie z wejściowego wywołania zwrotnego. A jeśli nie możesz obsłużyć wywołań zwrotnych w tym samym wątku, wpisz wyjściowe wywołanie zwrotne krótko po wprowadzeniu wywołania zwrotnego, aby aplikacja mogła mieć spójny czas na danych wejściowych i wyjściowych.
- NALEŻY zminimalizować różnicę fazową między buforowaniem dźwięku HAL po stronie wejścia i wyjścia odpowiednich punktów końcowych.
- POWINNO zminimalizować opóźnienie dotyku.
- POWINNO zminimalizować zmienność czasu oczekiwania na dotknięcie przy obciążeniu (zakłócenia).
Jeśli implementacje urządzeń spełniają wszystkie powyższe wymagania:
- [SR] ZALECANE jest zgłoszenie pomocy dotyczącej funkcji
android.hardware.audio.pro
za pomocą klasyandroid.content.pm.PackageManager
.
Jeśli implementacje na urządzeniach spełniają wymagania interfejsu API kolejki buforowej OpenSL ES PCM:
- [SR] Zdecydowanie ZALECANE jest też spełnienie tych samych wymagań przez interfejs API AAudio.
Jeśli urządzenia są wyposażone w 4-kanałowe gniazdo słuchawek 3, 5 mm:
- [C-2-1] Ciągłe opóźnienie dźwięku w obie strony musi wynosić maksymalnie 20 milisekund na ścieżce audio.
- [SR] ZALECANE jest zachowanie zgodności z sekcją Specyfikacja urządzenia mobilnego (gniazdo) w specyfikacji przewodowego zestawu słuchawkowego (wersja 1.1).
- Ciągłe opóźnienie dźwięku w obie strony NIE powinno przekraczać 10 milisekund na ścieżce audio.
Jeśli implementacje urządzeń pomijają 4-kanałowe gniazdo słuchawek 3, 5 mm i są wyposażone w porty USB obsługujące tryb hosta USB:
- [C-3-1] MUSI zaimplementować klasę audio USB.
- [C-3-2] MUSI mieć ciągłe opóźnienie dźwięku w obie strony wynoszące maksymalnie 20 milisekund przez port w trybie hosta USB z użyciem klasy audio USB.
- Ciągłe opóźnienie dźwięku w obie strony NIE powinno przekraczać 10 milisekund w przypadku portu w trybie hosta USB z użyciem klasy audio USB.
Jeśli urządzenia są wyposażone w port HDMI:
- [C-4-1] MUSI obsługiwać wyjście stereo i 8 kanałów z głębią 20- lub 24-bitową i 192 kHz bez utraty głębi bitowej i ponownego próbkowania.
5.11. Zrób zdjęcie, aby nie zostały przetworzone
Android umożliwia nagrywanie nieprzetworzonego dźwięku przez źródło dźwięku android.media.MediaRecorder.AudioSource.UNPROCESSED
. W OpenSL ES można uzyskać do niego dostęp za pomocą gotowego ustawienia rekordów SL_ANDROID_RECORDING_PRESET_UNPROCESSED
.
Jeśli implementacja urządzenia ma obsługiwać nieprzetworzone źródło dźwięku i udostępniać je aplikacjom innych firm:
-
[C-1-1] MUSI zgłosić pomoc za pomocą
android.media.AudioManager
usługi PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED. -
[C-1-2] MUSI wykazywać w przybliżeniu płaską amplitudę względem częstotliwości w średnim zakresie częstotliwości: ±10 dB od 100 Hz do 7000 Hz dla każdego mikrofonu używanego do nagrywania nieprzetworzonego źródła dźwięku.
-
[C-1-3] MUSI mieć poziom amplitudy w niskim zakresie: od ±20 dB od 5 Hz do 100 Hz w porównaniu ze średnim zakresem częstotliwości dla każdego mikrofonu używanego do nagrywania nieprzetworzonego źródła dźwięku.
-
[C-1-4] MUSI mieć poziom amplitudy w zakresie wysokich częstotliwości: od ±30 dB od 7000 Hz do 22 kHz w porównaniu ze średnim zakresem częstotliwości dla każdego mikrofonu używanego do nagrywania nieprzetworzonego źródła dźwięku.
-
[C-1-5] MUSI ustawić czułość sygnału wejściowego dźwięku tak, aby źródło tonów sinusoidalnych 1000 Hz odtwarzane przy poziomie ciśnienia akustycznego 94 dB (SPL) dało odpowiedź z RMS 520 dla 16-bitowych próbek (lub -36 dB pełnej skali w przypadku każdego źródła zmiennoprzecinkowego lub podwójnej precyzji użytego źródła dźwięku z mikrofonem).
-
[C-1-6] MUSI mieć współczynnik sygnału do szumu (SNR) wynoszący 60 dB lub więcej dla każdego mikrofonu używanego do nagrywania nieprzetworzonego źródła dźwięku. (SNR jest mierzony jako różnica między 94 dB SPL a równoważnym SPL własnym szumem ważonym A).
-
[C-1-7] W przypadku 1 kHz przy 90 dB poziomu wejściowego SPL całkowite zniekształcenie harmoniczne (THD) musi być mniejsze niż 1% dla każdego mikrofonu używanego do nagrywania nieprzetworzonego źródła dźwięku.
-
NIE MOŻESZ obsługiwać żadnego innego przetwarzania sygnału (np. automatycznej kontroli wzmocnienia, filtra górnoprzepustowego ani usuwania echa) na ścieżce innej niż mnożnik poziomu umożliwiający uzyskanie pożądanego poziomu. Krótko mówiąc:
- [C-1-8] Jeśli z jakiegoś powodu w architekturze obecne jest przetwarzanie sygnału, MUSI być ono wyłączone i w efekcie powodować zero opóźnienia lub dodatkowe opóźnienia na ścieżce sygnału.
- [C-1-9] Mnożnik poziomu, który może znajdować się na ścieżce, NIE MOŻE wywoływać opóźnienia na ścieżce sygnału.
Wszystkie pomiary SPL są wykonywane bezpośrednio obok testowanego mikrofonu. W przypadku różnych konfiguracji mikrofonów te wymagania dotyczą każdego z nich.
Jeśli implementacje urządzeń zadeklarują android.hardware.microphone
, ale nie obsługują nieprzetworzonego źródła dźwięku:
- [C-2-1] W przypadku metody API
AudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED)
MUSI zwracać wartośćnull
, aby prawidłowo wskazać brak obsługi. - Zdecydowanie ZALECANE jest spełnienie jak największej liczby wymagań dotyczących ścieżki sygnału dla nieprzetworzonego źródła nagrania.
6. Zgodność narzędzi i opcji dla programistów
6.1. Narzędzia dla programistów
Implementacje na urządzeniach:
- [C-0-1] MUSI obsługiwać narzędzia dla programistów aplikacji na Androida zawarte w pakiecie Android SDK.
-
- [C-0-2] MUSI obsługiwać wszystkie funkcje adb zgodnie z dokumentacją pakietu Android SDK, w tym dumpsys.
- [C-0-3] NIE MOŻE zmieniać formatu ani zawartości zdarzeń systemowych urządzenia (batterystats , Disstats, odcisków palców, grafikistats, netstats, powiadomień, procstats) zarejestrowanych za pomocą dumpsys.
- [C-0-4] demon adb po stronie urządzenia MUSI być domyślnie nieaktywny i musi istnieć dostępny dla użytkownika mechanizm umożliwiający włączenie narzędzia Android Debug Bridge.
- [C-0-5] MUSI obsługiwać bezpieczne narzędzie adb. Android zapewnia obsługę bezpiecznego pliku adb. Bezpieczny adb włącza narzędzie adb na znanych uwierzytelnionych hostach.
-
[C-0-6] MUSI zapewniać mechanizm umożliwiający połączenie narzędzia adb z komputera hosta. Na przykład:
- Implementacje urządzeń bez portu USB obsługującego tryb peryferyjny MUSZĄ obsługiwać adb przez sieć lokalną (np. Ethernet lub Wi-Fi).
- MUSI zawierać sterowniki dla Windows 7, 9 i 10, które umożliwiają programistom połączenie się z urządzeniem za pomocą protokołu adb.
-
Usługa monitorowania debugowania Dalvik (ddms)
- [C-0-7] MUSI obsługiwać wszystkie funkcje ddms zgodnie z dokumentacją pakietu Android SDK. Ponieważ pakiet ddms używa narzędzia adb, obsługa ddms jest domyślnie nieaktywna, ale MUSI być obsługiwana za każdym razem, gdy użytkownik aktywuje Android Debug Bridge (jak powyżej).
-
Małpa
- [C-0-8] MUSI zawierać platformę Monkey i udostępniać ją aplikacjom.
-
SysTrace
- [C-0-9] MUSI obsługiwać narzędzie systrace zgodnie z opisem w pakiecie SDK na Androida. System musi być domyślnie nieaktywny, a jego włączenie MUSI mieć dostępny dla użytkownika mechanizm.
6.2. Opcje programisty
Android zapewnia programistom możliwość konfigurowania ustawień związanych z programowaniem aplikacji.
Implementacje na urządzeniu MUSZĄ zapewniać spójny interfejs Opcji programisty, ponieważ:
- [C-0-1] MUSI uwzględniać intencję android.settings.APPLICATION_DEVELOPMENT_SETTINGS, aby wyświetlać ustawienia związane z programowaniem. Nadrzędna implementacja Androida ukrywa menu Opcje programisty i umożliwia użytkownikom uruchomienie Opcji programisty po naciśnięciu 7 (7) razy w menu Ustawienia > Informacje o urządzeniu > Numer kompilacji.
- [C-0-2] MUSI domyślnie ukrywać Opcje programisty i musi udostępniać mechanizm włączania Opcji programisty bez konieczności dodawania specjalnej listy dozwolonych.
- MOŻE tymczasowo ograniczyć dostęp do menu Opcje programisty, ukrywając je lub wyłączając je, aby nie rozpraszać uwagi użytkowników w sytuacjach, gdy jest obawa o bezpieczeństwo użytkownika.
7. Zgodność sprzętu
Jeśli urządzenie jest wyposażone w konkretny komponent sprzętowy, który ma odpowiedni interfejs API dla zewnętrznych programistów:
- [C-0-1] Implementacja na urządzeniu MUSI implementować ten interfejs API w sposób opisany w dokumentacji pakietu Android SDK.
Jeśli interfejs API w pakiecie SDK wchodzi w interakcję z komponentem sprzętowym, który jest określony jako opcjonalny, a implementacja urządzenia nie zawiera tego komponentu:
- [C-0-2] Nadal MUSISZ przedstawiać pełne definicje klas (zgodnie z dokumentacją w pakiecie SDK) dla interfejsów API komponentów.
- [C-0-3] Działanie interfejsu API MUSI być w jakiś rozsądny sposób implementowane jako brak działań.
- [C-0-4] Metody interfejsu API MUSZĄ zwracać wartości null tam, gdzie jest to dozwolone w dokumentacji pakietu SDK.
- [C-0-5] Metody interfejsu API MUSZĄ zwracać implementacje klas bezobsługowych, w których wartości null są niedozwolone w dokumentacji pakietu SDK.
- [C-0-6] Metody interfejsu API NIE MOGĄ zgłaszać wyjątków, których nie opisano w dokumentacji pakietu SDK.
- [C-0-7] Implementacje urządzeń MUSZĄ spójnie zgłaszać dokładne informacje o konfiguracji sprzętu za pomocą metod
getSystemAvailableFeatures()
ihasSystemFeature(String)
z klasą android.content.pm.PackageManager dla tego samego odcisku cyfrowego kompilacji.
Typowym przykładem sytuacji, w której obowiązują te wymagania, jest interfejs telefoniczny API. Te interfejsy API należy wdrożyć bez żadnych działań nawet na urządzeniach innych niż telefony.
7.1. Wyświetlacz i grafika
Android zawiera elementy, które automatycznie dostosowują zasoby aplikacji i układy interfejsu użytkownika do urządzenia, aby aplikacje innych firm działały prawidłowo na różnych konfiguracjach sprzętowych. Urządzenia MUSZĄ prawidłowo implementować te interfejsy API i działania, jak opisano w tej sekcji.
Jednostki, do których odnoszą się wymagania w tej sekcji, są zdefiniowane w następujący sposób:
- fizyczny rozmiar przekątnej. Wyrażona w calach odległość między dwoma przeciwległymi rogami podświetlonej części wyświetlacza.
- punktów na cal (dpi). Liczba pikseli w obrębie liniowej, poziomej lub pionowej rozpiętości wynoszącej 1. Przy podanych wartościach dpi wartość zarówno w poziomie, jak i w pionie musi mieścić się w zakresie.
- format obrazu. Stosunek liczby pikseli dłuższego wymiaru do krótszego wymiaru ekranu. Na przykład przy rozmiarze 480 x 854 piksele będzie to 854/480 = 1, 779, czyli w przybliżeniu „16:9”.
- piksel niezależny od gęstości (dp). Jednostka wirtualnego piksela znormalizowana do ekranu o rozdzielczości 160 dpi. Wartość jest obliczana według wzoru: piksele = dps * (gęstość/160).
7.1.1. Konfiguracja ekranu
7.1.1.1. Rozmiar ekranu
Platforma interfejsu Androida obsługuje różne logiczne rozmiary układu ekranu i umożliwia aplikacjom wysyłanie zapytań o rozmiar układu ekranu w bieżącej konfiguracji za pomocą interfejsu Configuration.screenLayout
z użyciem SCREENLAYOUT_SIZE_MASK
i Configuration.smallestScreenWidthDp
.
-
[C-0-1] Implementacje na urządzeniach MUSZĄ zgłaszać prawidłowy rozmiar układu elementu
Configuration.screenLayout
zgodnie z definicją w dokumentacji pakietu Android SDK. Implementacje urządzeń MUSZĄ zgłaszać prawidłowe wymiary ekranu niezależne od gęstości logicznej (dp) jak poniżej:- Urządzenia, które mają ustawioną wartość
Configuration.uiMode
jako dowolną inną niż UI_MODE_TYPE_WATCH i przesyłający zgłoszenie o rozmiarzesmall
dla elementuConfiguration.screenLayout
MUSZĄ mieć co najmniej 426 dp x 320 dp. - Urządzenia zgłaszające rozmiar
normal
w poluConfiguration.screenLayout
MUSZĄ mieć co najmniej 480 dp x 320 dp. - Urządzenia zgłaszające rozmiar
large
dla elementuConfiguration.screenLayout
MUSZĄ mieć co najmniej 640 dp x 480 dp. - Urządzenia zgłaszające rozmiar
xlarge
dla elementuConfiguration.screenLayout
MUSZĄ mieć co najmniej 960 dp x 720 dp.
- Urządzenia, które mają ustawioną wartość
-
[C-0-2] Implementacje na urządzeniach MUSZĄ poprawnie uwzględniać obsługę rozmiarów ekranu w atrybucie <
supports-screens
> w pliku AndroidManifest.xml w aplikacjach zgodnie z dokumentacją pakietu Android SDK.
7.1.1.2. Współczynnik proporcji ekranu
Chociaż nie ma ograniczeń co do wartości współczynnika proporcji fizycznego wyświetlacza, współczynnik proporcji ekranu logicznego, w którym są renderowane aplikacje innych firm, który można określić na podstawie wartości wysokości i szerokości zgłaszanych za pomocą interfejsów API view.Display
i interfejsu Configuration API, MUSI spełniać te wymagania:
-
[C-0-1] Implementacje na urządzeniach, w których
Configuration.uiMode
ma wartośćUI_MODE_TYPE_NORMAL
, MUSZĄ mieć współczynnik proporcji z zakresu od 1,3333 (4:3) do 1,86 (ok. 16:9), chyba że aplikację można uznać za gotową do dłuższego rozciągania, spełniając jeden z tych warunków:- Aplikacja zadeklarowała, że obsługuje większy format obrazu za pomocą wartości metadanych
android.max_aspect
. - Aplikacja deklaruje, że rozmiar można zmienić w atrybucie android:resizeableActivity.
- Aplikacja jest kierowana na interfejs API na poziomie 26 lub wyższym i nie deklaruje interfejsu
android:MaxAspectRatio
, który ograniczałby dozwolony format obrazu.
- Aplikacja zadeklarowała, że obsługuje większy format obrazu za pomocą wartości metadanych
-
[C-0-2] Implementacje na urządzeniach, w których
Configuration.uiMode
ma wartośćUI_MODE_TYPE_WATCH
, MUSZĄ mieć format obrazu ustawiony na 1,0 (1:1).
7.1.1.3 Gęstość ekranu
Platforma UI Androida definiuje zestaw standardowych gęstości logicznych, aby ułatwić programistom kierowanie zasobów aplikacji.
-
[C-0-1] Domyślnie implementacje urządzeń MUSZĄ zgłaszać za pomocą interfejsu API DENSITY_DEVICE_STABLE tylko jedną z poniższych gęstości logicznej platformy Androida. Ta wartość NIE MOŻE być zmieniana w żadnym momencie. Urządzenie MOŻE jednak zgłosić inną gęstość zależnie od zmian w konfiguracji wyświetlacza wprowadzonych przez użytkownika (np. rozmiaru wyświetlacza) ustawionych po pierwszym uruchomieniu.
- 120 dpi (ldpi)
- 160 dpi (mdpi)
- 213 dpi (tvdpi)
- 240 dpi (hdpi)
- 260 dpi (260dpi)
- 280 dpi (280dpi)
- 300 dpi (300dpi)
- 320 dpi (Xhdpi)
- 340 dpi (340dpi)
- 360 dpi (360dpi)
- 400 dpi (400dpi)
- 420 dpi (420dpi)
- 480 dpi (xxhdpi)
- 560 dpi (560dpi)
- 640 dpi (xxxhdpi)
-
Implementacje na urządzeniach NALEŻY zdefiniować standardową gęstość platformy Androida, która jest liczbowo najbliższa fizycznej gęstości ekranu, chyba że taka gęstość sprowadza raportowany rozmiar ekranu poniżej obsługiwanego minimum. Jeśli standardowa gęstość platformy Androida, która jest najbliższa liczbowo gęstości fizycznej, powoduje, że rozmiar ekranu jest mniejszy niż najmniej obsługiwany obsługiwany rozmiar ekranu (320 dp), implementacje urządzeń POWINNY zgłaszać następny najniższy standardowy poziom gęstości platformy.
Jeśli masz możliwość zmiany rozmiaru wyświetlacza urządzenia:
- [C-1-1] Rozmiar wyświetlacza NIE MOŻE być skalowany większy niż 1,5 raza gęstości natywnej ani nie może powodować, że minimalny rozmiar ekranu będzie mniejszy niż 320 dp (odpowiednik kwalifikatora zasobów sw320dp – w zależności od tego, co nastąpi wcześniej).
- [C-1-2] Rozmiar wyświetlacza NIE MOŻE być skalowany w sposób mniejszy niż 0,85 raza gęstości natywnej.
- Aby zapewnić wygodę obsługi i spójne rozmiary czcionek, ZALECANE jest użycie poniższych opcji skalowania reklam natywnych w sieci reklamowej (zgodnie z powyższymi limitami).
- Małe: 0,85x
- Domyślnie: 1x (natywna skala wyświetlania)
- Duży: 1,15x
- Większe: 1,3x
- Największy 1,45x
7.1.2. Wyświetl dane
Jeśli implementacje urządzeń obejmują wyjście ekranu lub wideo:
- [C-1-1] MUSI podawać prawidłowe wartości dla wszystkich wyświetlanych danych zdefiniowanych w interfejsie API
android.util.DisplayMetrics
.
Jeśli implementacje urządzeń nie zawierają osadzonego ekranu lub wyjścia wideo:
- [C-2-1] MUSI podawać rozsądne wartości dla wszystkich danych o wyświetlaniu zdefiniowanych w interfejsie API
android.util.DisplayMetrics
dla emulowanej domyślnej wartościview.Display
.
7.1.3 Orientacja ekranu
Implementacje na urządzeniach:
- [C-0-1] MUSI podawać obsługiwane orientacje ekranu (
android.hardware.screen.portrait
lubandroid.hardware.screen.landscape
) i MUSI podawać co najmniej jedną obsługiwaną orientację. Na przykład urządzenie ze stałą orientacją poziomą, takie jak telewizor czy laptop, MUSI zgłosić tylko wartośćandroid.hardware.screen.landscape
. - [C-0-2] MUSI zgłaszać prawidłową wartość w przypadku bieżącej orientacji urządzenia w przypadku wysyłania zapytań za pomocą interfejsu
android.content.res.Configuration.orientation
,android.view.Display.getOrientation()
lub innych interfejsów API.
Jeśli implementacje urządzeń obsługują obie orientacje ekranu, umożliwiają one:
- [C-1-1] MUSI obsługiwać orientację dynamiczną w aplikacjach w orientacji pionowej lub poziomej. Oznacza to, że urządzenie musi uwzględniać żądanie aplikacji dotyczące określonej orientacji ekranu.
- [C-1-2] NIE MOŻE zmieniać zgłoszonego rozmiaru ani gęstości ekranu podczas zmiany orientacji.
- MOGĄ wybrać orientację pionową lub poziomą jako domyślną.
7.1.4. Przyspieszenie działania grafiki 2D i 3D
7.1.4.1 OpenGL ES
Implementacje na urządzeniach:
- [C-0-1] MUSI poprawnie identyfikować obsługiwane wersje OpenGL ES (1.1, 2.0, 3.0, 3.1, 3.2) za pomocą zarządzanych interfejsów API (np.
GLES10.getString()
) i natywnych interfejsów API. - [C-0-2] MUSI obsługiwać wszystkie odpowiednie zarządzane interfejsy API i natywne interfejsy API dla każdej wersji OpenGL ES, którą zidentyfikowano jako obsługiwane.
Jeśli implementacje urządzeń obejmują wyjście ekranu lub wideo:
- [C-1-1] MUSI obsługiwać zarówno platformę OpenGL ES 1.0, jak i 2.0, zgodnie z opisem w dokumentacji pakietu SDK na Androida.
- ZAWSZE ZALECANE są obsługa OpenGL ES 3.0.
- MUSI obsługiwać standard OpenGL ES 3.1 lub 3.2.
Jeśli implementacje urządzeń obsługują dowolną wersję OpenGL ES:
- [C-2-1] MUSI zgłaszać za pomocą zarządzanych interfejsów API OpenGL ES i natywnych interfejsów API wszystkie inne zaimplementowane rozszerzenia OpenGL ES i NIE MOŻE zgłaszać ciągów rozszerzeń, które nie są obsługiwane.
- [C-2-2] MUSI obsługiwać rozszerzenia
EGL_KHR_image
,EGL_KHR_image_base
,EGL_ANDROID_image_native_buffer
,EGL_ANDROID_get_native_client_buffer
,EGL_KHR_wait_sync
,EGL_KHR_get_all_proc_addresses
,EGL_ANDROID_presentation_time
,EGL_KHR_swap_buffers_with_damage
iEGL_ANDROID_recordable
. - Zdecydowanie ZALECANE jest umożliwienie obsługi EGL_KHR_partial_update.
- POWINNY jest dokładne raportowanie za pomocą metody
getString()
, czyli dowolnego obsługiwanego formatu kompresji tekstur, który jest zwykle zależny od dostawcy.
Jeśli implementacje urządzeń zadeklarują obsługę OpenGL ES 3.0, 3.1 lub 3.2:
- [C-3-1] Oprócz symboli funkcji OpenGL ES 2.0 z biblioteki libGLESv2.so MUSI wyeksportować odpowiednie symbole funkcji dla tej wersji.
Jeśli implementacje urządzeń obsługują OpenGL ES 3.2:
- [C-4-1] MUSI obsługiwać w całości pakiet rozszerzeń OpenGL ES na Androida.
Jeśli implementacje urządzeń obsługują w całości pakiet rozszerzeń OpenGL ES, funkcje te:
- [C-5-1] MUSI określać pomoc za pomocą flagi funkcji
android.hardware.opengles.aep
.
Jeśli implementacje urządzeń zapewniają obsługę rozszerzenia EGL_KHR_mutable_render_buffer
:
- [C-6-1] MUSI też obsługiwać rozszerzenie
EGL_ANDROID_front_buffer_auto_refresh
.
7.1.4.2 interfejs Vulkan
Android obsługuje Vulkan – niskobudżetowy, wieloplatformowy interfejs API do wysokiej wydajności grafiki 3D.
Jeśli implementacje urządzeń obsługują OpenGL ES 3.0 lub 3.1:
- [SR] Zdecydowanie ZALECANE jest włączenie obsługi interfejsu Vulkan 1.0 .
Jeśli implementacje urządzeń obejmują wyjście ekranu lub wideo:
- POWINNO obsługiwać platformę Vulkan 1.0.
Implementacje urządzeń z obsługą interfejsu Vulkan 1.0:
- [C-1-1] MUSI podawać prawidłową liczbę całkowitą z flagami funkcji
android.hardware.vulkan.level
iandroid.hardware.vulkan.version
. - [C-1-2] MUSI wyliczać co najmniej 1
VkPhysicalDevice
dla natywnego interfejsu API VulkanvkEnumeratePhysicalDevices()
. - [C-1-3] MUSI w pełni wdrożyć interfejsy Vulkan 1.0 API w przypadku każdego wymienionego parametru
VkPhysicalDevice
. - [C-1-4] MUSI wyliczać warstwy zawarte w bibliotekach natywnych o nazwie
libVkLayer*.so
w katalogu biblioteki natywnej pakietu aplikacji przy użyciu natywnych interfejsów API VulkanvkEnumerateInstanceLayerProperties()
ivkEnumerateDeviceLayerProperties()
. - [C-1-5] NIE MOŻE wyliczać warstw dostarczanych przez biblioteki poza pakietem aplikacji ani udostępniać innych sposobów śledzenia lub przechwytywania interfejsu Vulkan API, chyba że aplikacja ma atrybut
android:debuggable
ustawiony jakotrue
. - [C-1-6] MUSI zgłaszać wszystkie ciągi rozszerzeń, które obsługują przez natywne interfejsy API Vulkan, i NIE MOGĄ raportować ciągów rozszerzeń, które nie są prawidłowo obsługiwane.
Implementacje na urządzeniach bez obsługi interfejsu Vulkan 1.0:
- [C-2-1] NIE MOŻE deklarować żadnych flag funkcji interfejsu Vulkan (np.
android.hardware.vulkan.level
,android.hardware.vulkan.version
). - [C-2-2] NIE MOŻE wyliczać żadnych elementów
VkPhysicalDevice
dla natywnego interfejsu API VulkanvkEnumeratePhysicalDevices()
.
7.1.4.3 RenderScript
- [C-0-1] Implementacje na urządzeniach MUSZĄ obsługiwać protokół Android RenderScript, zgodnie z opisem w dokumentacji pakietu Android SDK.
Przyspieszenie grafiki 2D 7.1.4.4
Android zawiera mechanizm deklarowania przez aplikacje, że chcą włączyć akcelerację sprzętową grafiki 2D na poziomie aplikacji, aktywności, okna lub widoku. Służy do tego tag manifestu android:hardwareAccelerated lub bezpośrednie wywołania interfejsu API.
Implementacje na urządzeniach:
- [C-0-1] MUSI domyślnie włączać akcelerację sprzętową i MUSI wyłączyć akcelerację sprzętową, jeśli deweloper o to poprosi, ustawiając parametr android:hardwareAccelerated="false” lub wyłączając akcelerację sprzętową bezpośrednio przez interfejsy Android View API.
- [C-0-2] MUSI działać zgodnie z opisem w dokumentacji pakietu Android SDK na temat akceleracji sprzętowej.
Android zawiera obiekt TextureView, który umożliwia programistom bezpośrednią integrację z akceleracją sprzętową tekstur OpenGL ES jako celów renderowania w hierarchii UI.
- [C-0-3] MUSI obsługiwać interfejs TextureView API i MUSI działać w spójny sposób z wcześniejszą implementacją Androida.
7.1.4.5 Wyświetlacze o szerokiej gamie
Jeśli implementacji na urządzeniu informują o obsłudze ekranów o szerokiej gamie za pomocą Display.isWideColorGamut()
:
- [C-1-1] MUSI mieć wyświetlacz z kalibracją kolorów.
- [C-1-2] MUSI mieć wyświetlacz, którego zakres obejmuje całą paletę kolorów sRGB w przestrzeni CIE 1931 xyY.
- [C-1-3] MUSI mieć wyświetlacz, którego gatunek ma obszar co najmniej 90% obszaru NTSC 1953 w przestrzeni CIE 1931 xyY.
- [C-1-4] MUSI obsługiwać standard OpenGL ES 3.0, 3.1 lub 3.2 i prawidłowo go zgłaszać.
- [C-1-5] MUSI reklamować wsparcie dotyczące rozszerzeń
EGL_KHR_no_config_context
,EGL_EXT_pixel_format_float
,EGL_KHR_gl_colorspace
,EGL_EXT_colorspace_scrgb_linear
iEGL_GL_colorspace_display_p3
. - [SR] Zdecydowanie ZALECANE jest wsparcie dla zasobu
GL_EXT_sRGB
.
Jeśli natomiast implementacje urządzeń nie obsługują wyświetlaczy o szerokim zakresie kolorów:
- [C-2-1] POWINNA obejmować co najmniej 100% przestrzeni sRGB w przestrzeni CIE 1931 xyY, ale gama kolorów ekranu jest nieokreślona.
7.1.5 Tryb zgodności starszych aplikacji
Android określa „tryb zgodności”, w którym platforma działa w trybie „normalnego” rozmiaru ekranu (szerokości 320 dp), co umożliwia korzystanie ze starszych aplikacji nieopracowanych na potrzeby starszych wersji Androida, które wcześniej nie były niezależne od rozmiaru ekranu.
7.1.6 Technologia ekranu
Platforma Androida zawiera interfejsy API umożliwiające aplikacjom renderowanie bogatej grafiki na wyświetlaczu. Urządzenia MUSZĄ obsługiwać wszystkie te interfejsy API zgodnie z definicją w pakiecie Android SDK, o ile nie jest to wyraźnie dozwolone w tym dokumencie.
Implementacje na urządzeniach:
- [C-0-1] MUSI obsługiwać wyświetlacze z możliwością renderowania 16-bitowej grafiki w kolorze.
- NALEŻY obsługiwać wyświetlacze z 24-bitową grafiką w 24-bitowych kolorach.
- [C-0-2] MUSI obsługiwać wyświetlacze z możliwością renderowania animacji.
- [C-0-3] MUSI używać technologii wyświetlania o współczynniku proporcji piksela (PAR) w zakresie od 0,9 do 1,15. Oznacza to, że format obrazu MUSI być kwadratowy (1,0) i z tolerancją 10–15%.
7.1.7 Wyświetlacze dodatkowe
Android obsługuje wyświetlacz dodatkowy, który umożliwia udostępnianie multimediów, a interfejsy API dla programistów umożliwiają dostęp do wyświetlaczy zewnętrznych.
Jeśli implementacje urządzeń obsługują wyświetlacz zewnętrzny za pośrednictwem połączenia przewodowego, bezprzewodowego lub wbudowanego wyświetlacza dodatkowego, zapewniają one:
- [C-1-1] MUSI zaimplementować usługę systemową i interfejs API
DisplayManager
w sposób opisany w dokumentacji pakietu Android SDK.
7.2. Urządzenia wejściowe
Implementacje na urządzeniach:
- [C-0-1] Do poruszania się między elementami interfejsu MUSI zawierać mechanizm wprowadzania danych, np. ekran dotykowy lub nawigację bezdotykową.
7.2.1. Klawiatura
Jeśli implementacje urządzeń obejmują obsługę zewnętrznych aplikacji edytora metody wprowadzania (IME), te funkcje:
- [C-1-1] MUSI zadeklarować flagę funkcji
android.software.input_methods
. - [C-1-2] MUSI obsługiwać w całości
Input Management Framework
- [C-1-3] MUSI mieć wstępnie załadowaną klawiaturę programową.
Implementacje na urządzeniach: [C-0-1] NIE MOŻE zawierać klawiatury sprzętowej w żadnym z formatów określonych w zasadzie android.content.res.Configuration.keyboard (QWERTY lub 12-key). POWINNY BYĆ dodatkowe implementacje klawiatury programowej. * MOŻE zawierać klawiaturę sprzętową.
7.2.2 Nawigacja bezdotykowa
W Androidzie można używać pada kierunkowego, trackballa i kółka jako mechanizmów do nawigacji bezdotykowej.
Implementacje na urządzeniach:
- [C-0-1] MUSI zgłosić prawidłową wartość atrybutu android.content.res.Configuration.navigation.
Jeśli w urządzeniach nie ma nawigacji niedotykowej:
- [C-1-1] MUSI zapewniać uzasadniony alternatywny interfejs użytkownika do wyboru i edytowania tekstu, zgodny z mechanizmami zarządzania danymi wejściowymi. Implementacja open source Androida obejmuje mechanizm wyboru odpowiedni do zastosowania w urządzeniach, które nie zawierają nawigacji bezdotykowej.
7.2.3 Klawisze nawigacyjne
Funkcje Ekran główny, Ostatnie i Wstecz są zwykle dostępne w wyniku interakcji z osobnym przyciskiem fizycznym lub konkretną częścią ekranu dotykowego. Mają więc kluczowe znaczenie dla nawigacji na Androidzie, dlatego są niezbędne do implementacji na urządzeniach:
- [C-0-1] MUSI zapewniać użytkownikowi możliwość uruchamiania zainstalowanych aplikacji, w których przypadku funkcja
<intent-filter>
jest ustawiona na wartościACTION=MAIN
iCATEGORY=LAUNCHER
lubCATEGORY=LEANBACK_LAUNCHER
w przypadku implementacji na urządzeniach telewizyjnych. Funkcja Home POWINNA być mechanizmem dla tej afordancji użytkownika. - POWINNY jest dostęp do przycisków funkcji Ostatnie i Wstecz.
Jeśli dostępne są funkcje Ekran główny, Ostatnie i Wstecz, umożliwiają one:
- [C-1-1] MUSI być dostępne w wyniku jednej czynności (np. kliknięcia lub dwukrotnego kliknięcia albo gestu), jeśli któreś z nich są dostępne.
- [C-1-2] MUSI wyraźnie wskazywać, które działanie może wywołać daną funkcję. Może to być na przykład widoczna ikona nadrukowana na przycisku, ikona oprogramowania na pasku nawigacyjnym albo instrukcja pokazująca krok po kroku podczas konfiguracji po rozpakowaniu urządzenia.
Implementacje na urządzeniach:
- Zdecydowanie ZALECANE jest nieudostępnianie mechanizmu wprowadzania danych w funkcji menu, ponieważ od wersji Androida 4.0 wycofano ją i zastąpił pasek działań.
Jeśli implementacje urządzeń zapewniają funkcję menu, są to:
- [C-2-1] MUSI wyświetlać przycisk przepełnienia działania, gdy rozszerzone menu czynności nie jest puste i widoczny jest pasek działań.
- [C-2-2] NIE MOŻE zmieniać pozycji wyświetlanego wyskakującego okienka działania przez kliknięcie przycisku rozszerzania działania na pasku działań, ale MOGĄ renderować wyskakujące okienko rozszerzania działania w zmodyfikowanym położeniu na ekranie, gdy jest wyświetlane po wybraniu funkcji Menu.
Jeśli implementacje urządzeń nie obsługują funkcji menu, w celu zapewnienia zgodności wstecznej:
- [C-3-1] MUSI udostępnić funkcję Menu aplikacjom, gdy
targetSdkVersion
ma mniej niż 10 lat za pomocą fizycznego przycisku, klawisza oprogramowania lub gestów. Ta funkcja menu powinna być dostępna, chyba że jest ukryta razem z innymi funkcjami nawigacyjnymi.
Jeśli implementacje urządzeń oferują funkcję wspomagania:
- [C-4-1] MUSI umożliwiać korzystanie z funkcji Asystenta jednym działaniem (np. kliknięciem, dwukrotnym kliknięciem lub gestem), gdy dostępne są inne klawisze nawigacyjne.
- Zdecydowanie ZALECANE jest użycie funkcji EKRAN GŁÓWNY, gdy jest to wyznaczona interakcja.
Jeśli implementacje urządzeń wykorzystują osobną część ekranu do wyświetlania klawiszy nawigacyjnych:
- [C-5-1] Klawisze nawigacyjne MUSZĄ zajmować wyraźną część ekranu, nie są dostępne dla aplikacji i NIE MOGĄ w żaden inny sposób zasłaniać tej części ekranu dostępnej dla aplikacji.
- [C-5-2] MUSI udostępniać część wyświetlacza aplikacjom spełniającym wymagania określone w sekcji 7.1.1.
- [C-5-3] MUSI uwzględniać flagi ustawione przez aplikację za pomocą metody interfejsu API
View.setSystemUiVisibility()
, tak aby ta odrębna część ekranu (czyli pasek nawigacyjny) była prawidłowo ukryta w sposób opisany w pakiecie SDK.
7.2.4 Wprowadzanie tekstu z ekranu dotykowego
Android obsługuje różne systemy wprowadzania danych wskaźnikami, takie jak ekrany dotykowe, pady dotykowe i fałszywe urządzenia dotykowe. Implementacje na urządzeniach z ekranem dotykowym są powiązane z ekranem w taki sposób, że użytkownik ma wrażenie bezpośredniego manipulacji elementami na ekranie. Ponieważ użytkownik bezpośrednio dotyka ekranu, system nie wymaga żadnych dodatkowych afordancji wskazujących manipulowane obiekty.
Implementacje na urządzeniach:
- POWINNY jest mieć jakikolwiek system wprowadzania danych za pomocą wskaźnika (na przykład myszy lub dotyku).
- POWINNA obsługiwać w pełni niezależnie śledzone wskaźniki.
Jeśli urządzenia są wyposażone w ekran dotykowy (pojedynczy przycisk dotykowy lub inny), działają one:
- [C-1-1] MUSI zgłosić wartość
TOUCHSCREEN_FINGER
w polu interfejsu APIConfiguration.touchscreen
. - [C-1-2] MUSI zgłosić flagi funkcji
android.hardware.touchscreen
iandroid.hardware.faketouch
Jeśli implementacje urządzeń obejmują ekran dotykowy, który może śledzić więcej niż jeden dotyk:
- [C-2-1] MUSI zgłosić odpowiednie flagi funkcji
android.hardware.touchscreen.multitouch
,android.hardware.touchscreen.multitouch.distinct
iandroid.hardware.touchscreen.multitouch.jazzhand
odpowiednie dla typu konkretnego ekranu dotykowego urządzenia.
Jeśli implementacje urządzeń nie zawierają ekranu dotykowego (i korzystają wyłącznie z urządzenia wskazującego) i spełniają wymagania dotyczące fałszywego dotyku opisane w sekcji 7.2.5:
- [C-3-1] NIE MOŻE zgłaszać żadnych flag funkcji rozpoczynających się od
android.hardware.touchscreen
i MOŻE zgłaszać tylkoandroid.hardware.faketouch
.
7.2.5 Wprowadzanie tekstu fałszywego dotykiem
Fałszywy interfejs dotykowy udostępnia system wprowadzania danych, który w przybliżeniu przedstawia podzbiór możliwości z ekranu dotykowego. Na przykład mysz lub pilot, który steruje kursorem na ekranie, przybliża go do kliknięcia, ale wymaga od użytkownika najpierw wyśledzenia lub zaznaczenia, a następnie kliknięcia. Wiele urządzeń wejściowych, takich jak mysz, trackpad, mysz powietrzna z żyroskopem, żyroskop, joystick i trackpad wielodotykowy, może obsługiwać fałszywe interakcje dotykowe. Android ma stałą funkcję android.hardware.faketouch, która odpowiada wysokiej jakości bezdotykowemu urządzeniu wejściowemu (opartemu na wskaźniku), takim jak mysz lub trackpad, które może odpowiednio emulować obsługę dotykową (w tym podstawową obsługę gestów). Wskazuje ona, że urządzenie obsługuje emulowany podzbiór funkcji ekranu dotykowego.
Jeśli urządzenia nie zawierają ekranu dotykowego, ale zawierają inny system wprowadzania danych, który ma zostać udostępniony, to:
- Trzeba zadeklarować obsługę flagi funkcji
android.hardware.faketouch
.
Jeśli implementacje urządzenia zadeklarują obsługę android.hardware.faketouch
, będą to:
- [C-1-1] MUSI podawać bezwzględne położenie ekranu na osi X i Y oraz wyświetlać wskaźnik wizualny na ekranie.
- [C-1-2] MUSI zgłaszać zdarzenie dotknięcia za pomocą kodu działania, który określa zmianę stanu, która następuje po przesuwaniu się w dół lub w górę ekranu przez wskaźnik.
- [C-1-3] MUSI obsługiwać kursor w dół i w górę na obiekcie na ekranie, co umożliwia użytkownikom emulację dotknięcia obiektu na ekranie.
- [C-1-4] MUSI obsługiwać wskaźnik w dół, w górę i w dół, a następnie powinien wskazywać w górę to samo miejsce na obiekcie na ekranie w wyznaczonym przedziale czasu. Umożliwia to użytkownikom emulację dwukrotnego kliknięcia obiektu na ekranie.
- [C-1-5] MUSI obsługiwać kursor w dół w dowolnym punkcie na ekranie. Wskaźnik powinien przesunąć się do dowolnego innego punktu na ekranie, a po nim przesuń wskaźnik w górę, co pozwoli użytkownikowi emulować przeciąganie dotykiem.
- [C-1-6] MUSI obsługiwać wskaźnik w dół, a następnie umożliwiać użytkownikom szybkie przeniesienie obiektu w inne miejsce na ekranie i przesunięcie go w górę, co umożliwia przesuwanie obiektu na ekranie.
- [C-1-7] MUSI zgłosić wartość
TOUCHSCREEN_NOTOUCH
w polu interfejsu APIConfiguration.touchscreen
.
Jeśli implementacje urządzenia zadeklarują obsługę android.hardware.faketouch.multitouch.distinct
, będą to:
- [C-2-1] MUSI zadeklarować obsługę interfejsu
android.hardware.faketouch
. - [C-2-2] MUSI obsługiwać odrębne śledzenie co najmniej 2 niezależnych danych wejściowych wskaźnika.
Jeśli implementacje urządzenia zadeklarują obsługę android.hardware.faketouch.multitouch.jazzhand
, będą to:
- [C-3-1] MUSI zadeklarować obsługę interfejsu
android.hardware.faketouch
. - [C-3-2] MUSI obsługiwać odrębne śledzenie 5 (śledzenie dłoni) lub większej liczby niezależnie od siebie wprowadzania wskaźnika.
7.2.6 Obsługa kontrolera gier
7.2.6.1 Mapowania przycisków
Jeśli implementacje urządzeń zadeklarują flagę funkcji android.hardware.gamepad
:
- [C-1-1] MUSI mieć umieszczony kontroler lub dostarczyć w pudełku osobny kontroler, który umożliwia wprowadzanie wszystkich zdarzeń wymienionych w tabelach poniżej.
- [C-1-2] MUSI być w stanie mapować zdarzenia HID na powiązane stałe
view.InputEvent
Androida, jak podano w tabelach poniżej. Implementacja Androida obejmuje wdrożenie na kontrolery gier, które spełniają to wymaganie.
Przycisk | Wykorzystanie HID2 | Przycisk Androida |
---|---|---|
A1 | 0x09 0x0001 | KEYCODE_PRZYCISK_A (96) |
B1 | 0x09 0x0002 | KEYCODE_PRZYCISK_B (97) |
X1 | 0x09 0x0004 | KEYCODE_PRZYCISK_X (99) |
T1 | 0x09 0x0005 | KEYCODE_PRZYCISK_Y (100) |
Pad kierunkowy w górę1 Na padzie kierunkowym w dół1 |
0x01 0x00393 | AXIS_HAT_Y4 |
Pad kierunkowy w lewo1 Pad kierunkowy w prawo1 |
0x01 0x00393 | AXIS_HAT_X4 |
Przycisk na lewym ramieniu1 | 0x09 0x0007 | KEYCODE_Button_L1 (102) |
Przycisk na prawym ramieniu1 | 0x09 0x0008 | KEYCODE_PRZYCISK_R1 (103) |
Kliknięcie lewym drążkiem1 | 0x09 0x000E | KEYCODE_button_THUMBL (106) |
Kliknięcie prawym przyciskiem myszy1 | 0x09 0x000F | KEYCODE_button_THUMBR (107) |
Strona główna1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
Wstecz1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
1 KeyEvent
2 Powyższe przypadki użycia HID muszą być zadeklarowane w amerykańskim urzędzie certyfikacji pada do gier (0x01 0x0005).
3. Wartość logiczna musi wynosić 0, logiczne maksimum to 7, fizyczne minimum to 0, maksimum fizyczne 315, jednostki w stopniach i rozmiar raportu 4. Wartość logiczna oznacza obrót w prawo od osi pionowej. Na przykład wartość logiczna 0 oznacza brak obrotu i naciśnięty przycisk w górę, a wartość logiczna 1 oznacza obrót o 45 stopni oraz naciskanie klawiszy strzałek w górę i w lewo.
Elementy sterujące analogowe1 | Wykorzystanie HID | Przycisk Androida |
---|---|---|
Lewy spust | 0x02 0x00C5 | AXIS_LTRIGGER |
Prawy aktywator | 0x02 0x00C4 | AXIS_RTRIGGER |
Lewy joystick |
0x01 0x0030 0x01 0x0031 |
AXIS_X AXIS_Y |
Prawy joystick |
0x01 0x0032 0x01 0x0035 |
AXIS_Z AXIS_RZ |
7.2.7 Pilot
Wymagania związane z poszczególnymi urządzeniami znajdziesz w artykule 2.3.1.
7.3. Czujniki
Jeśli implementacje urządzeń obejmują konkretny typ czujnika, który ma odpowiedni interfejs API dla programistów zewnętrznych, MUSISZ zaimplementować ten interfejs API w sposób opisany w dokumentacji pakietu Android SDK oraz w dokumentacji Androida open source dotyczącej czujników.
Implementacje na urządzeniach:
- [C-0-1] MUSI dokładnie zgłaszać obecność lub brak czujników dla klasy
android.content.pm.PackageManager
. - [C-0-2] MUSI zwracać dokładną listę obsługiwanych czujników za pomocą metody
SensorManager.getSensorList()
i podobnych metod. - [C-0-3] MUSI działać rozsądnie w przypadku wszystkich innych interfejsów API czujników (na przykład przez zwracanie odpowiednio parametru
true
lubfalse
, gdy aplikacje próbują zarejestrować detektory, lub nie wywoływać odbiorników, gdy odpowiednie czujniki nie są dostępne itp.).
Jeśli implementacje urządzeń obejmują konkretny typ czujnika, który ma odpowiedni interfejs API dla zewnętrznych programistów, te elementy:
- [C-1-1] MUSI raportować wszystkie pomiary z czujników, używając odpowiednich wartości Międzynarodowego Systemu Jednostek (danych) dla każdego typu czujnika zgodnie z definicją w dokumentacji pakietu Android SDK.
- [C-1-2] MUSI raportować dane z czujnika z maksymalnym opóźnieniem 100 milisekund
- 2 * sample_time w przypadku transmisji z czujnika z minimalnym wymaganym czasem oczekiwania wynoszącym 5 ms + 2 * sample_time, gdy procesor aplikacji jest aktywny. Opóźnienie to nie uwzględnia opóźnień w filtrowaniu.
- [C-1-3] MUSI zgłosić pierwszą próbkę z czujnika w ciągu 400 milisekund + 2 * czas_próbki (sample_time) od aktywacji czujnika. W przypadku tej próby można mieć dokładność 0.
-
[SR] NALEŻY raportować czas zdarzenia w nanosekundach, zgodnie z definicją w dokumentacji pakietu Android SDK. Musi on przedstawiać czas wystąpienia zdarzenia i zsynchronizowany z zegarem SystemClock.elapsedRealtimeNano(). Zdecydowanie ZALECANE zarówno istniejące, jak i nowe urządzenia z Androidem, tak aby spełniały te wymagania, umożliwiając ich uaktualnienie do przyszłych wersji platformy, w których może to stać się WYMAGANY komponentem. Błąd synchronizacji POWINNY być mniejszy niż 100 milisekund.
-
[C-1-7] W przypadku każdego interfejsu API wskazanego w dokumentacji pakietu Android SDK jako czujnika, implementacje urządzeń MUSZĄ stale dostarczać okresowe próbki danych, w których zakłócenia są zdefiniowane jako standardowe odchylenie różnicy pomiędzy kolejnymi zdarzeniami.
-
[C-1-8] MUSI mieć pewność, że strumień zdarzeń z czujnika NIE MOŻE zapobiegać przełączeniu procesora urządzenia w stan zawieszenia lub wybudzeniem procesora ze stanu zawieszenia.
- Gdy aktywowanych jest kilka czujników, zużycie energii NIE POWINNO przekraczać sumy zużycia energii przez poszczególne czujniki.
Powyższa lista nie jest wyczerpująca. Udokumentowane działanie pakietu Android SDK i dokumentacji open source Androida dotyczące czujników należy uznać za wiarygodne.
Niektóre typy czujników są złożone, co oznacza, że mogą pochodzić z danych dostarczanych przez co najmniej jeden inny czujnik. (Na przykład czujnik orientacji i czujnika przyspieszenia liniowego).
Implementacje na urządzeniach:
- POWINNA SIĘ stosować te typy czujników, jeśli zawierają wymagane czujniki fizyczne opisane w sekcji Typy czujników.
Jeśli implementacje urządzeń zawierają czujnik kompozytowy,:
- [C-2-1] MUSI zamontować czujnik w sposób opisany w dokumentacji Androida Open Source dotyczącej czujników złożonych.
7.3.1 Akcelerometr
- Wdrożenia urządzeń POWINIEN zawierać 3-osiowy akcelerometr.
Jeśli implementacje urządzeń obejmują 3-osiowy akcelerometr:
- [C-1-1] MUSI raportować zdarzenia z częstotliwością co najmniej 50 Hz.
- [C-1-2] MUSI zaimplementować i zgłosić czujnik
TYPE_ACCELEROMETER
. - [C-1-3] MUSI być zgodny z układem współrzędnych czujnika Androida zgodnie z opisem w interfejsach API Androida.
- [C-1-4] MUSI być w stanie mierzyć od swobodnego spadania do 4-krotności grawitacji(4g) lub większej na dowolnej osi.
- Rozdzielczość [C-1-5] MUSI mieć co najmniej 12 bitów.
- [C-1-6] MUSI mieć odchylenie standardowe nie większe niż 0,05 m/s^, przy czym odchylenie standardowe powinno być obliczane na podstawie każdej osi dla próbek zebranych w okresie co najmniej 3 sekund z największą częstotliwością próbkowania.
- Zdecydowanie ZALECANE jest wdrożenie czujnika złożonego
TYPE_SIGNIFICANT_MOTION
. - Zdecydowanie ZALECANE jest wdrożenie czujnika
TYPE_ACCELEROMETER_UNCALIBRATED
, jeśli dostępna jest kalibracja akcelerometru online. - NALEŻY zaimplementować czujniki złożone
TYPE_SIGNIFICANT_MOTION
,TYPE_TILT_DETECTOR
,TYPE_STEP_DETECTOR
iTYPE_STEP_COUNTER
zgodnie z opisem w dokumentacji pakietu Android SDK. - POWINNA zgłaszać zdarzenia z częstotliwością co najmniej 200 Hz.
- Rozdzielczość powinna wynosić co najmniej 16 bitów.
- POWINNY być kalibrowane podczas używania, jeśli charakterystyka zmieni się w trakcie cyklu życia i zostanie skompensowana, oraz zachowaj parametry kompensacji między restartami urządzenia.
- POWINNA być kompensowana temperatura.
- NALEŻY też zaimplementować czujnik
TYPE_ACCELEROMETER_UNCALIBRATED
.
Jeśli implementacje urządzeń obejmują 3-osiowy akcelerometr oraz dowolny z czujników złożonych TYPE_SIGNIFICANT_MOTION
, TYPE_TILT_DETECTOR
, TYPE_STEP_DETECTOR
i TYPE_STEP_COUNTER
:
- [C-2-1] Suma ich zużycia energii MUSI zawsze wynosić mniej niż 4 mW.
- Gdy urządzenie jest w stanie dynamicznym lub statycznym, POWINIEN mieć poniżej 2 mW oraz 0,5 mW.
Jeśli urządzenia są wyposażone w 3-osiowy akcelerometr i żyroskop:
- [C-3-1] MUSI zaimplementować czujniki złożone
TYPE_GRAVITY
iTYPE_LINEAR_ACCELERATION
. - NALEŻY zaimplementować czujnik kompozytowy
TYPE_GAME_ROTATION_VECTOR
. - [SR] Zdecydowanie ZALECANE jest wdrożenie czujnika
TYPE_GAME_ROTATION_VECTOR
w dotychczasowych i nowych urządzeniach z Androidem.
Jeśli urządzenia są wyposażone w 3-osiowy akcelerometr, żyroskop i czujnik magnetometru:
- [C-4-1] MUSI zaimplementować czujnik kompozytowy
TYPE_ROTATION_VECTOR
.
7.3.2 Magnetometr
- Urządzenie POWINIEN zawierać 3-osiowy magnetometr (kompas).
Jeśli urządzenia są wyposażone w 3-osiowy magnetometr:
- [C-1-1] MUSI zamocować czujnik
TYPE_MAGNETIC_FIELD
. - [C-1-2] MUSI zgłaszać zdarzenia z częstotliwością co najmniej 10 Hz i POWINNY zgłaszać zdarzenia z częstotliwością co najmniej 50 Hz.
- [C-1-3] MUSI być zgodny z układem współrzędnych czujnika Androida zgodnie z opisem w interfejsach API Androida.
- [C-1-4] MUSI być w stanie zmierzyć wartość od -900 μT do +900 μT na każdej osi bez nasycenia.
- [C-1-5] MUSI mieć wartość przesunięcia twardego żelaza na poziomie mniejszą niż 700 μT, a magnetometr musi mieć wartość poniżej 200 μT przez umieszczanie magnetometru z dala od dynamicznych (wywoływanych prądem) i statycznych (wywołanych przez magnesem) pól magnetycznych.
- [C-1-6] MUSI mieć rozdzielczość równą lub większą niż 0,6 μT.
- [C-1-7] MUSI obsługiwać kalibrację online i kompensację odchylenia twardego żelaza oraz zachowywać parametry kompensacji między restartami urządzenia.
- [C-1-8] MUSI mieć kompensację miękkiego żelaza – kalibrację można przeprowadzić podczas używania lub produkcji urządzenia.
- [C-1-9] MUSI mieć odchylenie standardowe obliczone na poziomie osi dla próbek zebranych w okresie co najmniej 3 sekund z największą częstotliwością próbkowania, nie większym niż 1,5 μT; odchylenie standardowe nie może przekraczać 0,5 μT.
- NALEŻY zaimplementować czujnik
TYPE_MAGNETIC_FIELD_UNCALIBRATED
. - [SR] Zdecydowanie ZALECANE jest wdrożenie czujnika
TYPE_MAGNETIC_FIELD_UNCALIBRATED
w dotychczasowych i nowych urządzeniach z Androidem.
Jeśli urządzenia są wyposażone w 3-osiowy magnetometr, akcelerometr i żyroskop:
- [C-2-1] MUSI zaimplementować czujnik kompozytowy
TYPE_ROTATION_VECTOR
.
Jeśli urządzenia są wyposażone w 3-osiowy magnetometr (akcelerometr):
- MOŻESZ zastosować czujnik
TYPE_GEOMAGNETIC_ROTATION_VECTOR
.
Jeśli urządzenia są wyposażone w 3-osiowy magnetometr, akcelerometr i czujnik TYPE_GEOMAGNETIC_ROTATION_VECTOR
:
- [C-3-1] MUSI zużywać mniej niż 10 mW.
- Gdy czujnik jest zarejestrowany w trybie wsadowym z częstotliwością 10 Hz, NALEŻY zużywać mniej niż 3 mW.
7.3.3 GPS
Implementacje na urządzeniach:
- POWINIEN zawierać odbiornik GPS/GNSS.
Jeśli implementacje urządzeń obejmują odbiornik GPS/GNSS i zgłaszają takie możliwości aplikacjom za pomocą flagi funkcji android.hardware.location.gps
, muszą one:
- [C-1-1] MUSI obsługiwać dane wyjściowe lokalizacji z częstotliwością co najmniej 1 Hz, gdy jest wymagane przez
LocationManager#requestLocationUpdate
. - [C-1-2] MUSI określić lokalizację na otwartym niebie (silne sygnały, niedostateczna ścieżka wielościeżkowa, HDOP < 2) w ciągu 10 sekund (szybszy czas do pierwszej naprawy) przy połączeniu z internetem o szybkości 0,5 Mb/s lub szybszej. Wymóg ten można zazwyczaj spełnić, stosując technikę wspomaganego lub przewidywanego GPS/GNSS w celu zminimalizowania czasu blokady GPS/GNSS (dane pomocnicze obejmują czas odniesienia, lokalizację referencyjną oraz satelitarne dane efemeryczne/zegar).
- [SR] Zdecydowanie ZALECANE jest, aby urządzenie mogło określić jego lokalizację na niebie w ciągu 10 sekund po ponownym uruchomieniu żądania lokalizacji, nawet po upływie godziny od wstępnego obliczenia lokalizacji, nawet jeśli kolejne żądanie zostało wysłane bez połączenia do transmisji danych lub po wyłączeniu i włączeniu zasilania.
-
Na otwartym niebie po określeniu lokalizacji, gdy jesteś w miejscu lub poruszasz się z przyspieszeniem poniżej 1 metra na sekundę do kwadratu:
- [C-1-3] MUSI określić lokalizację z dokładnością do 20 metrów i z prędkością do 0, 5 metra na sekundę, w co najmniej 95% przypadków.
- [C-1-4] MUSI jednocześnie śledzić i raportować za pomocą
GnssStatus.Callback
co najmniej 8 satelitów z 1 konstelacji. - MUSI być w stanie jednocześnie śledzić co najmniej 24 satelity pochodzące z wielu konstelacji (np. GPS + przynajmniej jeden Glonass, Beidou, Galileo).
- [C-1-5] MUSI zgłaszać generowanie technologii GNSS za pomocą testowego interfejsu API „getGnssYearOfHardware”.
- [SR] Podczas alarmowego połączenia telefonicznego należy nadal przesyłać zwykłe dane o lokalizacji GPS/GNSS.
- [SR] Raportuje pomiary GNSS ze wszystkich śledzonych konstelacji (zgodnie z informacjami w komunikatach GnssStatus), z wyjątkiem SBAS.
- [SR] Raport AGC i częstotliwość pomiaru GNSS.
- [SR] Raportuje wszystkie szacunkowe dane o dokładności (w tym kierunek, prędkość i pionową lokalizację) dla każdej lokalizacji GPS.
- Zdecydowanie ZALECANE jest spełnienie jak największej liczby dodatkowych wymagań związanych z urządzeniami zgłaszającymi rok „2016” lub „2017” za pomocą interfejsu Test API
LocationManager.getGnssYearOfHardware()
.
Jeśli implementacje urządzeń obejmują odbiornik GPS/GNSS i zgłaszają możliwość aplikacji za pomocą flagi funkcji android.hardware.location.gps
oraz raportu LocationManager.getGnssYearOfHardware()
Test API z roku 2016 lub nowszego,:
- [C-2-1] MUSI zgłaszać pomiary GPS od razu po ich wykryciu, nawet jeśli lokalizacja określona na podstawie GPS/GNSS nie jest jeszcze raportowana.
- [C-2-2] MUSI podawać pseudozakresy i częstotliwości pseudozakresów GPS, które w warunkach na niebie po określeniu lokalizacji, gdy nieruchomo lub są w ruchu z przyspieszeniem poniżej 0, 2 metra na sekundę do kwadratu, wystarczają do obliczenia pozycji z dokładnością do 20 metrów, a prędkość z zakresu 0, 2 metra na sekundę w co najmniej 95% przypadków.
Jeśli implementacje urządzeń obejmują odbiornik GPS/GNSS i zgłaszają takie możliwości aplikacjom za pomocą flagi funkcji android.hardware.location.gps
i raportów interfejsu LocationManager.getGnssYearOfHardware()
Test API z roku 2017 lub nowszego,:
- [C-3-1] MUSI dalej korzystać z normalnych danych o lokalizacji GPS/GNSS podczas połączeń alarmowych.
- [C-3-2] MUSI raportować pomiary GNSS ze wszystkich śledzonych konstelacji (zgodnie z informacjami o stanie GnssStatus), z wyjątkiem SBAS.
- [C-3-3] MUSI podawać raporty AGC i częstotliwość pomiarów GNSS.
- [C-3-4] MUSI podawać wszystkie szacowane wartości dokładności (w tym położenie, prędkość i pionową) w ramach każdej lokalizacji GPS.
7.3.4 Żyroskop
Implementacje na urządzeniach:
- POWINIEN zawierać żyroskop (czujnik zmian kątowych).
- NIE POWINNO spełniać czujnika żyroskopu, chyba że wraz z nim jest także 3-osiowy akcelerometr.
Jeśli urządzenia są wyposażone w żyroskop:
- [C-1-1] MUSI raportować zdarzenia z częstotliwością co najmniej 50 Hz.
- [C-1-2] MUSI zaimplementować czujnik
TYPE_GYROSCOPE
. POWINIEN też zaimplementować czujnikTYPE_GYROSCOPE_UNCALIBRATED
. - [C-1-3] MUSI być w stanie mierzyć zmiany orientacji kamery do 1000 stopni na sekundę.
- Rozdzielczość [C-1–4] MUSI mieć co najmniej 12 bitów, a powinna mieć rozdzielczość co najmniej 16 bitów.
- [C-1-5] MUSI mieć kompensację temperatury.
- [C-1-6] MUSI być skalibrowany i skompensowany podczas używania. Zachowaj parametry kompensacji między restartami urządzenia.
- [C-1-7] MUSI mieć wariancję nie większą niż 1e-7 rad^2 / s^2 na Hz (wariancja na Hz lub rad^2 / s). Wariancja może się zmieniać wraz z częstotliwością próbkowania, ale MUSI być ograniczana przez tę wartość. Inaczej mówiąc, jeśli mierzysz wariancję żyroskopu przy częstotliwości próbkowania 1 Hz, POWINIEN wynosić nie więcej niż 1e–7 rad^2/s^2.
- [SR] Zdecydowanie ZALECANE jest wdrożenie czujnika
SENSOR_TYPE_GYROSCOPE_UNCALIBRATED
w dotychczasowych i nowych urządzeniach z Androidem. - [SR] ZALECANE jest, aby błąd kalibracji wynosił mniej niż 0,01 rad/s, gdy urządzenie pozostaje w temperaturze pokojowej.
- POWINNA zgłaszać zdarzenia z częstotliwością co najmniej 200 Hz.
Jeśli implementacje urządzeń obejmują żyroskop, akcelerometr i czujnik magnetometrowy:
- [C-2-1] MUSI zaimplementować czujnik kompozytowy
TYPE_ROTATION_VECTOR
.
Jeśli urządzenia są wyposażone w żyroskop i akcelerometr:
- [C-3-1] MUSI zaimplementować czujniki złożone
TYPE_GRAVITY
iTYPE_LINEAR_ACCELERATION
. - [SR] Zdecydowanie ZALECANE jest wdrożenie czujnika
TYPE_GAME_ROTATION_VECTOR
w dotychczasowych i nowych urządzeniach z Androidem. - NALEŻY zaimplementować czujnik kompozytowy
TYPE_GAME_ROTATION_VECTOR
.
7.3.5 Barometr
- Urządzenie POWINIEN zawierać barometr (czujnik ciśnienia powietrza w tle).
Jeśli implementacje urządzeń obejmują barometr:
- [C-1-1] MUSI zaimplementować i zgłosić czujnik
TYPE_PRESSURE
. - [C-1-2] MUSI być w stanie przesyłać zdarzenia z częstotliwością 5 Hz lub większą.
- [C-1-3] MUSI mieć kompensację temperatury.
- [SR] Zdecydowanie ZALECANE jest raportowanie ciśnienia w zakresie od 300 hPa do 1100 hPa.
- Całkowita dokładność 1hPa.
- MUSI mieć względną dokładność 0,12 hPa w zakresie 20 hPa (odpowiednik dokładności ok. 1 m na poziomie ok. 200 m na poziomie morza).
7.3.6 Thermometer
Implementacje na urządzeniach: MOŻE zawierać termometr otoczenia (czujnik temperatury). MOGĄ, ale NIE POWINNO zawierać czujnika temperatury procesora.
Jeśli urządzenia są wyposażone w termometr otoczenia (czujnik temperatury):
- [C-1-1] MUSI być zdefiniowany jako
SENSOR_TYPE_AMBIENT_TEMPERATURE
i MUSI mierzyć temperaturę otoczenia (w pomieszczeniu lub kabinie pojazdu) w miejscu, w którym użytkownik wchodzi w interakcję z urządzeniem, wyrażoną w stopniach Celsjusza. - [C-1-2] MUSI być zdefiniowany jako
SENSOR_TYPE_TEMPERATURE
. - [C-1-3] MUSI mierzyć temperaturę procesora urządzenia.
- [C-1-4] NIE MOŻE mierzyć żadnych innych temperatury.
Pamiętaj, że w Androidzie 4.0 typ czujnika SENSOR_TYPE_TEMPERATURE
został wycofany.
7.3.7 Fotometr
- Urządzenia MOGĄ zawierać fotometr (czujnik jasności otoczenia).
7.3.8 Czujnik zbliżeniowy
- Urządzenia MOGĄ zawierać czujnik zbliżeniowy.
Jeśli urządzenia są wyposażone w czujnik zbliżeniowy:
- [C-1-1] MUSI mierzyć bliskość obiektu w tym samym kierunku co ekran. Oznacza to, że czujnik zbliżeniowy MUSI wykrywać obiekty znajdujące się blisko ekranu, ponieważ jego głównym celem jest wykrywanie telefonu używanego przez użytkownika. Jeśli implementacje urządzeń obejmują czujnik zbliżeniowy o innej orientacji, NIE MOŻE być dostępny za pomocą tego interfejsu API.
- [C-1-2] MUSI mieć co najmniej 1 bit z dokładnością.
7.3.9. Czujniki wysokiej jakości
Jeśli implementacje urządzeń obejmują zestaw czujników o wyższej jakości (jak opisano w tej sekcji), i udostępniają je aplikacjom innych firm:
- [C-1-1] MUSI identyfikować możliwość za pomocą flagi funkcji
android.hardware.sensor.hifi_sensors
.
Jeśli implementacje urządzenia zadeklarują android.hardware.sensor.hifi_sensors
:
-
[C-2-1] MUSI mieć czujnik
TYPE_ACCELEROMETER
, który:- MUSI mieć zakres pomiaru od -8 g do +8 g.
- Rozdzielczość pomiaru MUSI mieć wartość co najmniej 1024 LSB/G.
- Minimalna częstotliwość pomiaru musi wynosić 12,5 Hz lub mniejszą.
- Maksymalna częstotliwość pomiaru MUSI wynosić 400 Hz lub więcej.
- Poziom hałasu pomiaru MUSI być większy niż 400 uG/√ Hz.
- MUSISZ zaimplementować typ czujnika bez wybudzania z możliwością buforowania wynoszącą co najmniej 3000 zdarzeń.
- Zużycie energii w grupie MUSI nie być mniejsze niż 3 mW.
- Stabilność szumu musi być stała na poziomie \<15 μg √Hz z 24-godzinnego statycznego zbioru danych.
- MUSISZ mieć zmianę odchylenia w porównaniu z temperaturą na poziomie ≤ +/- 1 mg / °C.
- Optymalna nieliniowość w zakresie ≤ 0,5% oraz zmiana czułości względem temperatury na poziomie ≤ 0,03%/C°.
- POWINIEN mieć widmo szumu białego, aby zapewnić odpowiednią kwalifikację integralności czujnika.
-
[C-2-2] MUSI mieć
TYPE_ACCELEROMETER_UNCALIBRATED
z takimi samymi wymaganiami dotyczącymi jakości jakTYPE_ACCELEROMETER
. -
[C-2-3] MUSI mieć czujnik
TYPE_GYROSCOPE
, który:- MUSI mieć zakres pomiaru od -1000 do +1000 dps.
- Rozdzielczość pomiaru MUSI mieć co najmniej 16 LSB/dps.
- Minimalna częstotliwość pomiaru musi wynosić 12,5 Hz lub mniejszą.
- Maksymalna częstotliwość pomiaru MUSI wynosić 400 Hz lub więcej.
- Poziom szumu pomiarowego MUSZĄ być większy niż 0,014°/s/√Hz.
- TREŚCI POWINNA być stała stabilność uprzedzeń na poziomie < 0,0002°/s √Hz z 24-godzinnego statycznego zbioru danych.
- MUSI mieć zmianę odchylenia w porównaniu z temperaturą na poziomie ≤ +/- 0,05°/ s / °C.
- TRZEBA zmienić czułość w porównaniu z temperaturą na poziomie ≤ 0,02% / °C.
- Optymalny rozmiar nieliniowości musi wynosić ≤ 0,2%.
- Gęstość szumu powinna wynosić ≤ 0,007°/s/√ Hz.
- POWINIEN mieć widmo szumu białego, aby zapewnić odpowiednią kwalifikację integralności czujnika.
- Błąd kalibracji powinien wynosić mniej niż 0,002 rad/s w zakresie temperatur od 10 do 40 °C, gdy urządzenie jest nieruchome.
-
[C-2-4] MUSI mieć
TYPE_GYROSCOPE_UNCALIBRATED
z takimi samymi wymaganiami dotyczącymi jakości jakTYPE_GYROSCOPE
. - [C-2-5] MUSI mieć czujnik
TYPE_GEOMAGNETIC_FIELD
, który:- MUSI mieć zakres pomiaru od -900 do +900 uT.
- MUSI mieć rozdzielczość pomiaru wynoszącą co najmniej 5 LSB/uT.
- MUSI mieć minimalną częstotliwość pomiaru 5 Hz lub mniejszą.
- Maksymalna częstotliwość pomiaru MUSI 50 Hz lub większa.
- MUSI zawierać szum pomiarowy nie większy niż 0,5 uT.
- [C-2-6] MUSI mieć
TYPE_MAGNETIC_FIELD_UNCALIBRATED
z tymi samymi wymaganiami dotyczącymi jakości coTYPE_GEOMAGNETIC_FIELD
, a także:- MUSISZ zaimplementować typ czujnika bez wybudzania z możliwością buforowania wynoszącą co najmniej 600 zdarzeń czujnika.
- POWINIEN mieć widmo szumu białego, aby zapewnić odpowiednią kwalifikację integralności czujnika.
- [C-2-7] MUSI mieć czujnik
TYPE_PRESSURE
, który:- MUSI mieć zakres pomiaru od 300 do 1100 hPa.
- Rozdzielczość pomiaru MUSI mieć co najmniej 80 LSB/hPa.
- Minimalna częstotliwość pomiaru musi wynosić 1 Hz lub mniejszą.
- Maksymalna częstotliwość pomiaru MUSI wynosić 10 Hz lub więcej.
- Poziom szumu pomiarowego MUSI być większy niż 2 Pa/√ Hz.
- Czujnik MUSI zastosować czujnik bez wybudzania z możliwością buforowania wynoszącą co najmniej 300 zdarzeń.
- Zużycie energii w grupie MUSI nie być mniejsze niż 2 mW.
- [C-2-8] MUSI mieć czujnik
TYPE_GAME_ROTATION_VECTOR
, który:- Czujnik MUSI zastosować czujnik bez wybudzania z możliwością buforowania wynoszącą co najmniej 300 zdarzeń.
- Zużycie energii w grupie MUSI nie być mniejsze niż 4 mW.
- [C-2-9] MUSI mieć czujnik
TYPE_SIGNIFICANT_MOTION
, który:- Zużycie energii MUSI nie być mniejsze niż 0,5 mW, gdy urządzenie jest statyczne, i 1,5 mW, gdy urządzenie jest w ruchu.
- [C-2-10] MUSI mieć czujnik
TYPE_STEP_DETECTOR
, który:- Czujnik MUSI zastosować czujnik bez wybudzania z możliwością buforowania wynoszącą co najmniej 100 zdarzeń.
- Zużycie energii MUSI nie być mniejsze niż 0,5 mW, gdy urządzenie jest statyczne, i 1,5 mW, gdy urządzenie jest w ruchu.
- Zużycie energii w grupie MUSI nie być mniejsze niż 4 mW.
- [C-2-11] MUSI mieć czujnik
TYPE_STEP_COUNTER
, który:- Zużycie energii MUSI nie być mniejsze niż 0,5 mW, gdy urządzenie jest statyczne, i 1,5 mW, gdy urządzenie jest w ruchu.
- [C-2-12] MUSI mieć czujnik
TILT_DETECTOR
, który:- Zużycie energii MUSI nie być mniejsze niż 0,5 mW, gdy urządzenie jest statyczne, i 1,5 mW, gdy urządzenie jest w ruchu.
- [C-2-13] Sygnatura czasowa tego samego zdarzenia fizycznego zgłoszonego przez akcelerometr, żyroskop i magnetometr MUSI zawierać się w odległości maksymalnie 2,5 milisekundy.
- [C-2-14] MUSI mieć sygnatury czasowe zdarzeń z czujnika żyroskopu z tego samego okresu co podsystem kamery i z dokładnością do 1 milisekundy do wystąpienia błędu.
- [C-2-15] MUSI dostarczyć próbki do aplikacji w ciągu 5 milisekund od momentu, gdy dane są dostępne w dowolnym z powyższych czujników fizycznych do aplikacji.
- [C-2-16] Zużycie energii nie może przekraczać 0,5 mW, gdy urządzenie jest statyczne, oraz 2,0 mW, gdy urządzenie jest w ruchu, jeśli włączona jest dowolna kombinacja tych czujników:
-
SENSOR_TYPE_SIGNIFICANT_MOTION
-
SENSOR_TYPE_STEP_DETECTOR
-
SENSOR_TYPE_STEP_COUNTER
-
SENSOR_TILT_DETECTORS
-
- [C-2-17] MOŻE mieć czujnik
TYPE_PROXIMITY
, ale jeśli jest zainstalowany, MUSI mieć co najmniej 100 zdarzeń na buforze.
Wszystkie wymagania dotyczące zużycia energii opisane w tej sekcji nie obejmują zużycia energii przez procesor aplikacji. Obejmuje on moc wykorzystywaną przez cały łańcuch czujników – czujnik, dowolny układ pomocniczy, dowolny dedykowany system przetwarzania czujników itp.
Jeśli implementacje urządzeń obejmują bezpośrednią obsługę czujników:
- [C-3-1] MUSI prawidłowo zadeklarować obsługę typów kanałów bezpośrednich i poziomu stawek bezpośrednich podwładnych za pomocą interfejsów API
isDirectChannelTypeSupported
igetHighestDirectReportRateLevel
. - [C-3-2] MUSI obsługiwać co najmniej 1 z 2 typów kanałów bezpośrednich czujnika w przypadku wszystkich czujników, które deklarują obsługę kanału bezpośredniego czujnika.
-
TYPE_HARDWARE_BUFFER
-
TYPE_MEMORY_FILE
- POWINNA obsługiwać raportowanie zdarzeń przez kanał bezpośredni czujnika głównego czujnika (wariant wybudzenia) tych typów:
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
7.3.10. Czytnik linii papilarnych
Jeśli implementacje urządzeń obejmują bezpieczny ekran blokady:
- POWINIEN zawierać czytnik linii papilarnych.
Jeśli implementacje urządzenia obejmują czytnik linii papilarnych i udostępniają go aplikacjom innych firm:
- [C-1-1] MUSI zadeklarować obsługę funkcji
android.hardware.fingerprint
. - [C-1-2] MUSI w pełni wdrożyć odpowiedni interfejs API zgodnie z opisem w dokumentacji pakietu Android SDK.
- [C-1-3] MUSI mieć współczynnik fałszywych akceptacji nie wyższy niż 0,002%.
- [SR] Zdecydowanie ZALECANE jest, aby wskaźnik akceptacji i podszywania się podszył się na poziomie nie wyższym niż 7%.
- [C-1-4] MUSI ujawniać, że ten tryb może być mniej bezpieczny niż trudny wzór, silny kod PIN lub hasło i wyraźnie wyliczać ryzyko jego włączenia, jeśli odsetek przypadków podszywania się pod inne osoby jest wyższy niż 7%.
- [C-1-5] W celu weryfikacji odciskiem palca MUSISZ próbować ograniczyć liczbę żądań przez co najmniej 30 sekund po 5 fałszywych próbach weryfikacji odciskiem palca.
- [C-1-6] MUSI mieć implementację magazynu kluczy wspieranego sprzętowo i dopasowywać odciski palców w zaufanym środowisku TEE lub za pomocą układu z bezpiecznym kanałem TEE.
- [C-1-7] Wszystkie odciski palców muszą być zaszyfrowane i uwierzytelnione kryptograficznie, tak aby nie można było ich pozyskać, odczytać ani zmienić poza zaufanym środowiskiem wykonawczym (TEE), zgodnie z wytycznymi dotyczącymi wdrażania na stronie Android Open Source Project.
- [C-1-8] MUSI uniemożliwiać dodanie odcisku palca bez wcześniejszego budowania łańcucha zaufania przez potwierdzenie istniejących danych logowania do urządzenia lub dodanie nowych danych uwierzytelniających urządzenia (kodu PIN, wzoru/hasła) zabezpieczonego przez TEE. Wdrożenie projektu Android Open Source Project zapewnia w ramach ten mechanizm.
- [C-1-9] NIE MOŻE umożliwiać aplikacjom innych firm rozróżniania poszczególnych odcisków palców.
- [C-1-10] MUSI uwzględniać flagę DevicePolicyManager.KEYGUARD_DISABLE_FINGERDR.
- [C-1-11] Po uaktualnieniu z wersji starszej niż 6.0 dane odcisku palca MUSZĄ bezpiecznie przenieść lub usunąć odcisk palca, aby spełnić powyższe wymagania.
- [SR] Zdecydowanie ZALECANE jest, aby wskaźnik fałszywych odrzuceń wynosił mniej niż 10%, zgodnie z pomiarem na urządzeniu.
- [SR] ZALECANE jest opóźnienie poniżej 1 sekundy, mierzone od chwili dotknięcia czytnika linii papilarnych do momentu odblokowania ekranu w przypadku 1 zarejestrowanego palca.
- NALEŻY użyć ikony odcisku palca Android dostępnej w projekcie Android Open Source Project.
7.3.11. Czujniki tylko w Androidzie Automotive
Czujniki samochodowe są zdefiniowane w dokumencie android.car.CarSensorManager API
.
7.3.11.1 Obecny sprzęt
Wymagania związane z konkretnymi urządzeniami znajdziesz w Sekcji 2.5.1.
7.3.11.2. Tryb dzienny/nocny
Wymagania związane z konkretnymi urządzeniami znajdziesz w Sekcji 2.5.1.
7.3.11.3 Stan jazdy
Wymagania związane z konkretnymi urządzeniami znajdziesz w Sekcji 2.5.1.
7.3.11.4. Prędkość koła
Wymagania związane z konkretnymi urządzeniami znajdziesz w Sekcji 2.5.1.
7.3.12. Czujnik pozycji
Implementacje na urządzeniach:
- MOŻE obsługiwać czujnik pozycji z 6 stopniami swobody.
Jeśli implementacje urządzeń obsługują czujnik pozycji z sześcioma stopniami swobody:
- [C-1-1] MUSI zaimplementować i zgłosić czujnik
TYPE_POSE_6DOF
. - [C-1-2] MUSI być dokładniejszy niż sam wektor obrotu.
7.4 Połączenie transmisji danych
7.4.1 Telefonia
Termin „telefonia” jest używany w interfejsach API Androida, a ten dokument odnosi się w szczególności do sprzętu do nawiązywania połączeń głosowych i wysyłania SMS-ów przez sieć GSM lub CDMA. Choć w tych połączeniach głosowych może być włączona funkcja przełączania pakietów, ale nie jest to konieczne, do celów związanych z Androidem uważa się je za niezależne od wszelkich transmisji danych, które mogą być realizowane w tej samej sieci. Innymi słowy, funkcje „telefonii” i interfejsy API w Androidzie odnoszą się w szczególności do połączeń głosowych i SMS-ów. Na przykład urządzenia, które nie mogą nawiązywać połączeń ani wysyłać/odbierać SMS-ów, nie są uznawane za urządzenia telefoniczne, niezależnie od tego, czy korzystają z sieci komórkowej do przesyłania danych.
- Android MOŻE być używany na urządzeniach, które nie zawierają sprzętu telefonicznego. Oznacza to, że Android jest zgodny z urządzeniami, które nie są telefonami.
Jeśli implementacje urządzeń obejmują usługę telefonii GSM lub CDMA:
- [C-1-1] MUSI zadeklarować flagę funkcji
android.hardware.telephony
i inne flagi funkcji podrzędnych zgodnie z technologią. - [C-1-2] MUSI wdrożyć pełną obsługę interfejsu API dla danej technologii.
Jeśli implementacje urządzenia nie obejmują sprzętu telefonicznego:
- [C-2-1] MUSI wdrożyć pełne interfejsy API w trybie bezobsługowym.
7.4.1.1 Zgodność z blokadami numerów
Jeśli implementacje urządzeń zgłaszają android.hardware.telephony feature
:
- [C-1-1] MUSI obsługiwać blokowanie numerów
- [C-1-2] MUSI w pełni zaimplementować usługę
BlockedNumberContract
i odpowiedni interfejs API zgodnie z opisem w dokumentacji pakietu SDK. - [C-1-3] MUSI blokować wszystkie połączenia i wiadomości z numeru telefonu w polu „BlockedNumberProvider” bez interakcji z aplikacjami. Jedynym wyjątkiem jest sytuacja, w której blokowanie numerów jest tymczasowo zniesione zgodnie z opisem w dokumentacji pakietu SDK.
- [C-1-4] W przypadku zablokowanego połączenia NIE MOŻE zapisywać danych do dostawcy rejestru połączeń na platformie.
- [C-1-5] NIE MOŻE pisać do dostawcy usług telefonicznych w przypadku zablokowanej wiadomości.
- [C-1-6] MUSI wdrożyć interfejs zarządzania zablokowanymi numerami, który jest otwierany z intencją zwracaną przez metodę
TelecomManager.createManageBlockedNumbersIntent()
. - [C-1-7] NIE MOŻE umożliwiać użytkownikom pomocniczym wyświetlania ani edytowania zablokowanych numerów na urządzeniu, ponieważ platforma Android zakłada, że główny użytkownik ma pełną kontrolę nad poszczególnymi instancjami usług telefonicznych na urządzeniu. Każdy interfejs związany z blokowaniem MUSI być ukryty dla użytkowników pomocniczych, a lista zablokowanych MUSI być respektowana.
- W przypadku aktualizacji Androida do wersji 7.0 NALEŻY przenieść zablokowane numery do dostawcy.
7.4.1.2. Telecom API
Jeśli implementacje urządzeń zgłaszają android.hardware.telephony
:
- [C-SR] Zdecydowanie ZALECANE jest obsługiwanie zdarzeń
KEYCODE_MEDIA_PLAY_PAUSE
iKEYCODE_HEADSETHOOK
zestawu słuchawkowego w interfejsach APIandroid.telecom
w ten sposób:- Wywołaj
Connection.onDisconnect()
, gdy zostanie wykryte krótkie naciśnięcie kluczowego zdarzenia podczas trwającej rozmowy. - Wywołaj
Connection.onAnswer()
, gdy podczas połączenia przychodzącego zostanie wykryte krótkie naciśnięcie kluczowego zdarzenia. - Wywołaj
Connection.onReject()
, gdy podczas połączenia przychodzącego zostanie wykryte długie naciśnięcie kluczowego zdarzenia. - Przełącz stan wyciszenia elementu
CallAudioState
- Wywołaj
7.4.2 IEEE 802.11 (Wi-Fi)
Implementacje na urządzeniach:
- POWINNO obsługiwać co najmniej jedną formę standardu 802.11.
Jeśli implementacje urządzeń obejmują obsługę standardu 802.11 i udostępniają tę funkcję aplikacji innej firmy,
- [C-1-1] MUSI wdrożyć odpowiedni interfejs API Androida.
- [C-1-2] MUSI zgłosić flagę funkcji sprzętowej
android.hardware.wifi
. - [C-1-3] MUSI zaimplementować interfejs API multicast w sposób opisany w dokumentacji pakietu SDK.
- [C-1-4] MUSI obsługiwać multicast DNS (mDNS) i NIE MOŻE filtrować pakietów mDNS (224.0.0.251) podczas działania, w tym:
- Nawet wtedy, gdy ekran nie jest aktywny.
- Dotyczy urządzeń Android TV, nawet w trybie gotowości.
- NALEŻY randomizować źródłowy adres MAC oraz liczbę klatek żądań sondowania raz na początku każdego skanowania, gdy STA jest odłączona.
- Każda grupa ramek żądania sondowania, która zawiera 1 skanowanie, powinna korzystać z 1 spójnego adresu MAC (NIE POWINNY być randomizowane adresy MAC w trakcie skanowania).
- Numer sekwencyjny żądania sond powinien powtarzać się w normalny sposób (sekwency) pomiędzy żądaniami sondowania podczas skanowania
- Numer sekwencyjny żądania sond powinien być randomizowany między ostatnim żądaniem sondowania w ramach skanowania a pierwszym żądaniem sondowania w kolejnym skanowaniu.
- Gdy ramka STA jest odłączona, w ramkach żądań sond powinna być dopuszczana tylko te elementy informacji:
- Zestaw parametrów identyfikatora SSID (0)
- Zestaw parametrów DS (3)
7.4.2.1. Wi-Fi Direct
Implementacje na urządzeniach:
- POWINNA obsługiwać technologię Wi-Fi Direct (typu Wi-Fi peer-to-peer).
Jeśli implementacje urządzeń obsługują Wi-Fi Direct:
- [C-1-1] MUSI zaimplementować odpowiedni interfejs API Androida w sposób opisany w dokumentacji pakietu SDK.
- [C-1-2] MUSI zgłosić funkcję sprzętową
android.hardware.wifi.direct
. - [C-1-3] MUSI obsługiwać normalne działanie Wi-Fi.
- POWINNA obsługiwać jednocześnie Wi-Fi i Wi-Fi Direct.
7.4.2.2. Konfiguracja bezpośredniego linku Wi-Fi
Implementacje na urządzeniach:
- POWINNA spełniać obsługę konfiguracji bezpośredniego linku Wi-Fi (TDLS) zgodnie z opisem w dokumentacji pakietu Android SDK.
Jeśli implementacje urządzeń obejmują obsługę TDLS i TDLS włączone w API Wi-FiManager:
- [C-1-1] MUSI zadeklarować obsługę TDLS do
WifiManager.isTdlsSupported
. - Narzędzia TDLS należy używać tylko wtedy, gdy jest to możliwe i korzystne.
- POWINNY jest działać mechanizm heurystyczny i NIE używać TDLS, gdy jego wydajność może być gorsza niż przez punkt dostępu Wi-Fi.
7.4.2.3 Rozpoznawalność Wi-Fi
Implementacje na urządzeniach:
- POWINNO_obsługiwać funkcję Wi-Fi Aware.
Jeśli implementacje urządzeń obejmują obsługę Wi-Fi Aware i udostępniają tę funkcję aplikacjom innych firm, to:
- [C-1-1] MUSI zaimplementować interfejsy API
WifiAwareManager
w sposób opisany w dokumentacji pakietu SDK. - [C-1-2] MUSI zadeklarować flagę funkcji
android.hardware.wifi.aware
. - [C-1-3] MUSI obsługiwać jednocześnie Wi-Fi i Wi-Fi Aware.
- [C-1-4] MUSI losowo zmieniać adres interfejsu zarządzania Wi-Fi Aware w odstępach nie dłuższych niż 30 minut i przy włączonej funkcji Wi-Fi Aware.
7.4.2.4. Punkt dostępu Wi-Fi
Implementacje na urządzeniach:
- POWINNO_obsługiwać obsługę Wi-Fi Passpoint.
Jeśli implementacje urządzeń obsługują protokół Wi-Fi Passpoint:
- [C-1-1] MUSI zaimplementować interfejsy API
WifiManager
związane z Passpoint w sposób opisany w dokumentacji pakietu SDK. - [C-1-2] MUSI obsługiwać standard IEEE 802.11u, zwłaszcza związany z wykrywaniem i wyborem sieci, na przykład w ramach usług GAS i Access Network Query Protocol (ANQP).
Jeśli implementacje urządzeń nie obsługują Passpoint Wi-Fi:
- [C-2-1] Implementacja interfejsów API
WifiManager
związanych z Passpoint MUSI zgłosićUnsupportedOperationException
.
7.4.3 Bluetooth
Jeśli implementacje urządzenia obsługują profil audio Bluetooth:
- POWINNA obsługiwać zaawansowane kodeki audio i kodeki audio Bluetooth (np. LDAC).
Jeśli implementacje urządzenia zadeklarują funkcję android.hardware.vr.high_performance
:
- [C-1-1] MUSI obsługiwać rozszerzenie Bluetooth 4.2 i Bluetooth LE.
Android obsługuje Bluetooth i Bluetooth Low Energy.
Jeśli implementacje urządzeń obejmują obsługę Bluetootha i Bluetooth Low Energy, aplikacje:
- [C-2-1] MUSI zadeklarować odpowiednie funkcje platformy (odpowiednio
android.hardware.bluetooth
iandroid.hardware.bluetooth_le
) i wdrożyć interfejsy API platformy. - NALEŻY zaimplementować odpowiednie profile Bluetooth, takie jak A2DP, AVCP, OBEX itp., odpowiednie dla danego urządzenia.
Jeśli implementacje urządzeń obejmują obsługę Bluetooth Low Energy, aplikacje:
- [C-3-1] MUSI zadeklarować funkcję sprzętową
android.hardware.bluetooth_le
. - [C-3-2] MUSI włączyć interfejsy API Bluetooth oparte na GATT (ogólnym profilu) w sposób opisany w dokumentacji pakietu SDK i w android.bluetooth.
- [C-3-3] MUSI zgłosić prawidłową wartość
BluetoothAdapter.isOffloadedFilteringSupported()
, aby wskazać, czy logika filtrowania klas interfejsu ScanFilter została zaimplementowana. - [C-3-4] MUSI zgłosić prawidłową wartość pola
BluetoothAdapter.isMultipleAdvertisementSupported()
, aby wskazać, czy reklamy Low Energy Advertising są obsługiwane. - POWINNO obsługiwać przenoszenie logiki filtrowania na chipset Bluetooth podczas wdrażania interfejsu API ScanFilter.
- POWINNO obsługiwać pobieranie skanowania zbiorczego do chipsetu Bluetooth.
-
POWINNA obsługiwać wiele reklam z co najmniej 4 boksami.
-
[SR] Zdecydowanie ZALECANE jest wdrożenie limitu czasu oczekiwania na rozpoznawalny adres prywatny (RPA) nie dłuższy niż 15 minut i rotacja adresu po przekroczeniu limitu czasu w celu ochrony prywatności użytkowników.
7.4.4 Komunikacja Near Field Communication
Implementacje na urządzeniach:
- POWINIEN zawierać nadajnik i powiązany sprzęt do komunikacji Near-Field Communications (NFC).
- [C-0-1] MUSI zaimplementować interfejsy API
android.nfc.NdefMessage
iandroid.nfc.NdefRecord
, nawet jeśli nie obsługują one NFC lub zadeklaruj funkcjęandroid.hardware.nfc
, ponieważ klasy przedstawiają format danych niezależny od protokołu.
Jeśli implementacje urządzeń obejmują sprzęt do komunikacji NFC i planują udostępnić tę funkcję aplikacjom innych firm:
- [C-1-1] MUSI zgłosić funkcję
android.hardware.nfc
za pomocą metodyandroid.content.pm.PackageManager.hasSystemFeature()
. - MUSI być w stanie odczytywać i zapisywać wiadomości NDEF z użyciem następujących standardów NFC, zgodnie z poniższymi standardami:
- [C-1-2] MUSI działać jako czytnik/zapisujący forum NFC (zgodnie ze specyfikacją techniczną NFC Forum-TS-DigitalProtocol-1.0) zgodnie z tymi standardami:
- NfcA (ISO14443-3A)
- NfcB (ISO14443-3B)
- NfcF (JIS X 6319-4)
- IsoDep (ISO 14443-4)
- Typy tagów forum NFC 1, 2, 3, 4, 5 (zdefiniowane przez Forum NFC)
-
Zdecydowanie zalecana jest możliwość odczytywania i zapisywania wiadomości NDEF, a także nieprzetworzonych danych przy użyciu następujących standardów NFC. Pamiętaj, że chociaż standardy NFC są określone jako Zdecydowanie ZALECANE, zgodnie z definicją zgodności w przyszłości planujemy zmienić je na MUSI. Standardy te są w tej wersji opcjonalne, ale będą wymagane w kolejnych. Zdecydowanie zalecamy spełnienie tych wymagań już teraz i na urządzeniach, na których działa ta wersja Androida, aby umożliwić ich uaktualnienie do przyszłych wersji platformy.
-
[C-1-3] MUSI mieć możliwość transmisji i odbierania danych przy użyciu następujących standardów i protokołów peer-to-peer:
- ISO 18092
- LLCP 1.2 (zdefiniowane przez Forum NFC)
- SDP 1.0 (zdefiniowane na Forum NFC)
- Protokół NDEF Push
- SNEP 1.0 (zdefiniowane przez Forum NFC)
- [C-1-4] MUSI obsługiwać funkcję Android Beam i POWINIEN domyślnie włączyć Android Beam.
- [C-1-5] MUSI mieć możliwość wysyłania i odbierania wiadomości za pomocą Android Beam, gdy włączona jest funkcja Android Beam lub inny zastrzeżony tryb NFC P2p.
- [C-1-6] MUSI zaimplementować domyślny serwer SNEP. Prawidłowe wiadomości NDEF odbierane przez domyślny serwer SNEP MUSZĄ być wysyłane do aplikacji przy użyciu intencji
android.nfc.ACTION_NDEF_DISCOVERED
. Wyłączenie Android Beam w ustawieniach NIE MOŻE wyłączać wysyłania przychodzących wiadomości NDEF. - [C-1-7] MUSI wyświetlać ustawienia udostępniania NFC zgodnie z intencją
android.settings.NFCSHARING_SETTINGS
. - [C-1-8] MUSI zaimplementować serwer NPP. Wiadomości odbierane przez serwer NPP MUSZĄ być przetwarzane w taki sam sposób, jak domyślny serwer SNEP.
- [C-1-9] MUSI zaimplementować klienta SNEP i próbować wysłać wychodzącego NDEF P2P do domyślnego serwera SNEP, gdy włączona jest funkcja Android Beam. Jeśli nie zostanie znaleziony domyślny serwer SNEP, klient MUSI spróbować wysłać wiadomość do serwera NPP.
- [C-1-10] MUSI zezwalać na działania na pierwszym planie na ustawianie wychodzących wiadomości NDEF P2P za pomocą metod
android.nfc.NfcAdapter.setNdefPushMessage
iandroid.nfc.NfcAdapter.setNdefPushMessageCallback
orazandroid.nfc.NfcAdapter.enableForegroundNdefPush
. - Przed wysłaniem wychodzących wiadomości P2P NDEF MUSISZ używać gestu lub potwierdzenia na ekranie, takiego jak „Dotknij, aby przesłać”.
- [C-1-11] MUSI obsługiwać przekazywanie połączenia NFC do Bluetooth, jeśli urządzenie obsługuje profil push obiektów Bluetooth.
- [C-1-12] MUSI obsługiwać przekazywanie połączenia do Bluetooth podczas korzystania z
android.nfc.NfcAdapter.setBeamPushUris
przez wdrożenie specyfikacji „przekazywania połączenia w wersji 1.2” i „bezpiecznego parowania Bluetooth przez NFC w wersji 1.0” na forum NFC. W takiej implementacji MUSI implementować usługę przekazywania LLCP z nazwą usługi „urn:nfc:sn:handover”, która służy do wymiany żądań przekazania/wyboru rekordów przez NFC. Do rzeczywistego przesyłania danych przez Bluetooth MUSI ona używać profilu push obiektu Bluetooth. Ze względów związanych ze starszymi rozwiązaniami (aby zachować zgodność z urządzeniami z Androidem 4.1), implementacja MUSI nadal akceptować żądania SNEP GET dotyczące wymiany żądań przekazania/wyboru rekordów przez NFC. Jednak sama implementacja NIE POWINNO wysyłać żądań SNEP GET do przekazywania połączeń. - [C-1-13] W trybie wykrywania NFC MUSI przeprowadzać sondowanie w poszukiwaniu wszystkich obsługiwanych technologii.
- POWINNY być w trybie wykrywania NFC, gdy urządzenie jest wybudzone, a ekran jest aktywny, a ekran blokady jest odblokowany.
- MUSI być w stanie odczytać kod kreskowy i adres URL (jeśli jest zakodowany) produktów z kodem kreskowym Thinfilm NFC.
(Pamiętaj, że publicznie dostępne linki nie są dostępne w przypadku wymienionych powyżej specyfikacji JIS, ISO i NFC).
Android obsługuje tryb HCE (NFC).
Jeśli implementacje urządzeń zawierają chipset kontrolera NFC obsługujący HCE (NfcA lub NfcB) i obsługują routing na podstawie identyfikatora aplikacji (AID), te urządzenia:
- [C-2-1] MUSI zgłaszać stałą funkcję
android.hardware.nfc.hce
. - [C-2-2] MUSI obsługiwać interfejsy NFC HCE API zgodnie z definicją w pakiecie Android SDK.
Jeśli używane urządzenia korzystają z chipsetu kontrolera NFC obsługującego HCE dla NfcF i wdrożą tę funkcję na potrzeby aplikacji innych firm:
- [C-3-1] MUSI zgłaszać stałą funkcję
android.hardware.nfc.hcef
. - [C-3-2] MUSI zaimplementować interfejsy API karty NfcF zgodnie z definicją w pakiecie SDK na Androida.
Jeśli implementacje urządzeń obejmują ogólną obsługę NFC zgodnie z opisem w tej sekcji oraz technologie MIFARE (MIFARE Classic, MIFARE Ultralight, NDEF w MIFARE Classic) w roli odczytującego/zapisującego, użytkownicy:
- [C-4-1] MUSI wdrożyć odpowiednie interfejsy API Androida zgodnie z dokumentacją pakietu Android SDK.
- [C-4-2] MUSI zgłosić funkcję
com.nxp.mifare
za pomocą metodyandroid.content.pm.PackageManager.hasSystemFeature
(). Pamiętaj, że nie jest to standardowa funkcja Androida, dlatego nie jest widoczna jako stała w klasieandroid.content.pm.PackageManager
.
7.4.5 Minimalne możliwości sieci
Implementacje na urządzeniach:
- [C-0-1] MUSI obsługiwać co najmniej jedną formę sieci danych. Implementacje urządzeń MUSZĄ obsługiwać co najmniej jeden standard danych o szybkości co najmniej 200 kb/s. Przykłady technologii, które spełniają to wymaganie, to EDGE, HSPA, EV-DO, 802.11g, Ethernet, PAN Bluetooth itp.
- [C-0-2] MUSI zawierać stos sieci IPv6 i obsługiwać komunikację IPv6 za pomocą zarządzanych interfejsów API, takich jak
java.net.Socket
ijava.net.URLConnection
, oraz natywnych interfejsów API, takich jak gniazdaAF_INET6
. - [C-0-3] MUSI domyślnie włączać IPv6.
- MUSI zadbać o to, aby komunikacja IPv6 była równie niezawodna, jak na przykład IPv4.
- [C-0-4] MUSI utrzymywać połączenia IPv6 w trybie uśpienia.
- [C-0-5] Ograniczenie szybkości NIE MOŻE spowodować utraty połączeń IPv6 w żadnej sieci zgodnej z IPv6, w której czas trwania RA wynosi co najmniej 180 sekund.
- POWINNA też obsługiwać co najmniej jeden popularny standard bezprzewodowych danych, taki jak 802.11 (Wi-Fi), gdy podstawowym połączeniem transmisji danych jest fizyczny standard sieci (np. Ethernet).
- MOŻESZ wdrożyć więcej niż jedną formę połączeń danych.
Wymagany poziom obsługi IPv6 zależy od typu sieci:
Jeśli implementacje urządzeń obsługują sieci Wi-Fi:
- [C-1-1] MUSI obsługiwać operacje na stosie podwójnym i tylko IPv6 w Wi-Fi.
Jeśli implementacje urządzeń obsługują sieci Ethernet:
- [C-2-1] MUSI obsługiwać operację podwójnego stosu w sieci Ethernet.
Jeśli implementacje urządzeń obsługują komórkową transmisję danych:
- [C-3-1] MUSI spełniać te wymagania w każdej sieci, do której jest połączone, gdy urządzenie jest jednocześnie połączone z kilkoma sieciami (np. Wi-Fi i komórkowa transmisja danych),
- POWINNA obsługiwać operację IPv6 (tylko w przypadku protokołu IPv6 i ewentualnie stos podwójny) w ramach komórkowej transmisji danych.
7.4.6 Ustawienia synchronizacji
Implementacje na urządzeniach:
- [C-0-1] MUSI mieć domyślnie włączone ustawienie autosynchronizacji głównej, aby metoda
getMasterSyncAutomatically()
zwracała wartość „true”.
7.4.7 Oszczędzanie danych
Jeśli implementacje urządzeń obejmują połączenie z pomiarem, będą to:
- [SR] Zdecydowanie ZALECANE jest włączenie trybu oszczędzania danych.
Jeśli implementacje urządzeń zapewniają tryb oszczędzania danych:
- [C-1-1] MUSI obsługiwać wszystkie interfejsy API klasy
ConnectivityManager
w sposób opisany w dokumentacji pakietu SDK - [C-1-2] MUSI zawierać w ustawieniach interfejs użytkownika, który obsługuje intencję
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
, umożliwiając użytkownikom dodawanie aplikacji do listy dozwolonych lub usuwanie ich z niej.
Jeśli implementacje urządzeń nie obsługują trybu oszczędzania danych:
- [C-2-1] MUSI zwracać wartość
RESTRICT_BACKGROUND_STATUS_DISABLED
dlaConnectivityManager.getRestrictBackgroundStatus()
- [C-2-2] NIE MOŻE rozgłaszać:
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
. - [C-2-3] MUSI mieć działanie, które obsługuje intencję
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
, ale MOŻE je wdrożyć jako no-op.
7.5 kamery,
Jeśli implementacje urządzeń obejmują co najmniej jedną kamerę:
- [C-1-1] MUSI zadeklarować flagę funkcji
android.hardware.camera.any
. - [C-1-2] Aplikacja musi mieć możliwość jednoczesnego przypisania 3 map bitowych RGBA_8888 odpowiadających rozmiarowi obrazu generowanego przez czujnik w aparacie o największej rozdzielczości w urządzeniu, a aparat jest otwarty na potrzeby podstawowego podglądu i rejestrowania.
7.5.1 Kamera tylna
Tylny aparat to kamera znajdująca się z boku urządzenia naprzeciw wyświetlacza. Oznacza to, że obrazuje sceny z daleka, tak jak tradycyjny aparat.
Implementacje na urządzeniach:
- POWINIEN zawierać tylny aparat.
Jeśli urządzenia mają co najmniej 1 tylny aparat:
- [C-1-1] MUSI zgłosić flagę funkcji
android.hardware.camera
iandroid.hardware.camera.any
. - [C-1-2] MUSI mieć rozdzielczość co najmniej 2 megapiksele.
- W sterowniku aparatu musi być zaimplementowany sprzętowy autofokus lub programowy autofokus (przezroczysty dla oprogramowania).
- MOŻE mieć sprzęt o stałej ostrości lub EDOF (rozszerzona głębia ostrości).
- MOŻE zawierać obiekty flash.
Jeśli Aparat ma lampę błyskową:
- [C-2-1] Lampa błyskowa NIE MOŻE się świecić, gdy zostało zarejestrowane wystąpienie
android.hardware.Camera.PreviewCallback
na platformie podglądu aparatu, chyba że aplikacja wyraźnie włączyła lampę błyskową przez włączenie atrybutuFLASH_MODE_AUTO
lubFLASH_MODE_ON
obiektuCamera.Parameters
. Pamiętaj, że to ograniczenie nie dotyczy wbudowanej aplikacji aparatu na urządzeniu, a tylko aplikacji innych firm korzystających zCamera.PreviewCallback
.
7.5.2 Przedni aparat
Przedni aparat to kamera znajdująca się po tej samej stronie urządzenia co wyświetlacz. Jest to kamera zwykle używana do nagrywania obrazu użytkownika, na przykład do wideokonferencji i w podobnych aplikacjach.
Implementacje na urządzeniach:
- MOŻE zawierać przedni aparat
Jeśli implementacje urządzeń obejmują co najmniej jeden przedni aparat:
- [C-1-1] MUSI zgłosić flagę funkcji
android.hardware.camera.any
iandroid.hardware.camera.front
. - [C-1-2] MUSI mieć rozdzielczość co najmniej VGA (640 x 480 pikseli).
- [C-1-3] NIE MOŻE używać przedniego aparatu jako domyślnego dla interfejsu Camera API i NIE MOŻE konfigurować interfejsu API w taki sposób, aby traktował przedni aparat jako domyślny tylny aparat, nawet jeśli jest to jedyny aparat w urządzeniu.
- [C-1-5] Podgląd z kamery MUSI być odbiciem lustrzanym w poziomie względem orientacji określonej przez aplikację, gdy bieżąca aplikacja wprost zażąda obrócenia ekranu kamery przez wywołanie metody
android.hardware.Camera.setDisplayOrientation()
. I odwrotnie, gdy bieżąca aplikacja nie prosi w sposób jednoznaczny o obrót wyświetlacza kamery przez wywołanie metodyandroid.hardware.Camera.setDisplayOrientation()
, podgląd MUSI być wyświetlany wzdłuż domyślnej osi poziomej urządzenia. - [C-1-6] NIE MOŻE powielać ostatecznej wersji zarejestrowanych obrazów ani strumieni wideo zwróconych do wywołań zwrotnych aplikacji lub zadeklarowanych do przechowywania multimediów.
- [C-1-7] MUSI odbić obraz wyświetlany po wyświetleniu w taki sam sposób jak obraz podglądu z aparatu.
- MOŻE obejmować funkcje (takie jak autofokus, lampa błyskowa itp.) dostępne w przypadku tylnych aparatów zgodnie z opisem w sekcji 7.5.1.
Jeśli implementacje urządzeń mogą podlegać rotacji przez użytkownika (np. automatycznie za pomocą akcelerometru lub ręcznie za pomocą danych wejściowych użytkownika):
- [C-2-1] Podgląd z aparatu MUSI być odbicie lustrzane w poziomie względem bieżącej orientacji urządzenia.
7.5.3 Kamera zewnętrzna
Implementacje na urządzeniach:
- MOŻESZ obsługiwać kamerę zewnętrzną, która nie zawsze jest podłączona.
Jeśli implementacje urządzeń obejmują obsługę aparatu zewnętrznego:
- [C-1-1] MUSI zadeklarować flagę funkcji platformy
android.hardware.camera.external
iandroid.hardware camera.any
. - [C-1-2] MUSI obsługiwać standard wideo USB (UVC 1.0 lub nowszy), jeśli kamera zewnętrzna jest podłączona przez port USB.
- POWINNA obsługiwać kompresję wideo, taką jak MJPEG, by umożliwić przesyłanie niezakodowanych strumieni o wysokiej jakości (tj. nieprzetworzonych lub niezależnie skompresowanych strumieni obrazu).
- MOŻE obsługiwać wiele aparatów.
- MOŻE obsługiwać kodowanie wideo z użyciem kamery. Implementacja urządzenia MUSI mieć dostęp do równocześnie niezakodowanego strumienia MJPEG (o rozdzielczości QVGA lub większej), jeśli ta funkcja jest obsługiwana.
7.5.4 Działanie interfejsu Camera API
Android zawiera 2 pakiety interfejsów API zapewniające dostęp do aparatu. Nowszy interfejs API android.hardware.camera2 zapewnia aplikacji dostęp do aparatu niższego poziomu, w tym wydajne serie bez żadnej kopii i strumieniowanie, które umożliwiają sterowanie ekspozycją, wzmocnieniem, wzmocnieniem bieli, konwertowaniem kolorów, wyciszaniem szumów, wyostrzaniem i nie tylko.
Starszy pakiet interfejsu API (android.hardware.Camera
) jest oznaczony jako wycofany w Androidzie 5.0, ale nadal powinien być dostępny dla aplikacji. Implementacje na urządzeniach z Androidem MUSZĄ zapewnić nieprzerwaną obsługę interfejsu API zgodnie z opisem w tej sekcji oraz w pakiecie SDK na Androida.
Implementacje urządzeń MUSZĄ implementować poniższe sposoby działania w przypadku interfejsów API związanych z aparatem w przypadku wszystkich dostępnych kamer. Implementacje na urządzeniach:
- [C-0-1] MUSI używać
android.hardware.PixelFormat.YCbCr_420_SP
do obsługi danych podglądu przekazywanych do wywołań zwrotnych aplikacji, gdy aplikacja nigdy nie wywołałaandroid.hardware.Camera.Parameters.setPreviewFormat(int)
. - [C-0-2] MUSI dodatkowo mieć format kodowania NV21, gdy aplikacja rejestruje wystąpienie
android.hardware.Camera.PreviewCallback
, a system wywołuje metodęonPreviewFrame()
, a format podglądu to YCbCr_420_SP, czyli dane w bajcie[] przekazywane doonPreviewFrame()
. Oznacza to, że NV21 MUSI być wartością domyślną. - [C-0-3] MUSI obsługiwać format YV12 (oznaczony stałą wartością
android.graphics.ImageFormat.YV12
) w przypadku podglądu zarówno przedniego, jak i tylnego aparatu dlaandroid.hardware.Camera
. (Sprzętowy koder wideo i kamera mogą używać dowolnego natywnego formatu piksela, ale implementacja urządzenia MUSI obsługiwać konwersję na format YV12). - [C-0-4] MUSI obsługiwać formaty
android.hardware.ImageFormat.YUV_420_888
iandroid.hardware.ImageFormat.JPEG
jako dane wyjściowe przez interfejs APIandroid.media.ImageReader
w przypadku urządzeńandroid.hardware.camera2
, które reklamują funkcjęREQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
wandroid.request.availableCapabilities
. - [C-0-5] Nadal musisz wdrożyć pełny interfejs Camera API podany w dokumentacji pakietu Android SDK, niezależnie od tego, czy urządzenie jest wyposażone w sprzętowy autofokus czy inne funkcje. Na przykład aparaty bez autofokusa MUSZĄ wywoływać dowolne zarejestrowane wystąpienia
android.hardware.Camera.AutoFocusCallback
(mimo że nie ma to związku z aparatem bez autofokusa). Pamiętaj, że dotyczy to przednich aparatów. Na przykład większość z nich nie obsługuje autofokusa, ale wywołania zwrotne interfejsu API muszą być „sfałszowane” zgodnie z opisem. - [C-0-6] MUSI rozpoznawać i przestrzegać wszystkich nazw parametrów zdefiniowanych jako stała w klasie
android.hardware.Camera.Parameters
. I odwrotnie, implementacje urządzeń NIE MOGĄ uznawać ani rozpoznawać stałych ciągów znaków przekazywanych do metodyandroid.hardware.Camera.setParameters()
innych niż te, które są wymienione jako stałe w zasadzieandroid.hardware.Camera.Parameters
. Oznacza to, że implementacje urządzeń MUSZĄ obsługiwać wszystkie standardowe parametry aparatu (o ile sprzęt na to pozwala) i NIE MOŻE obsługiwać niestandardowych typów parametrów aparatu. Na przykład implementacje urządzeń, które obsługują robienie zdjęć z użyciem technik obrazowania High Dynamic Range (HDR), MUSZĄ obsługiwać parametrCamera.SCENE_MODE_HDR
aparatu. - [C-0-7] MUSI zgłosić odpowiedni poziom pomocy przy użyciu właściwości
android.info.supportedHardwareLevel
zgodnie z opisem w pakiecie Android SDK i zgłaszać odpowiednie flagi funkcji platformy. - [C-0-8] MUSI także zadeklarować możliwości poszczególnych kamer
android.hardware.camera2
za pomocą właściwościandroid.request.availableCapabilities
i zadeklarować odpowiednie flagi funkcji. MUSI zdefiniować flagę funkcji, jeśli któreś z podłączonych do niej kamer ją obsługuje. - [C-0-9] MUSI transmitować intencję
Camera.ACTION_NEW_PICTURE
za każdym razem, gdy aparat zrobi nowe zdjęcie i zostanie dodane do sklepu multimedialnego. - [C-0-10] MUSI transmitować intencję
Camera.ACTION_NEW_VIDEO
za każdym razem, gdy kamera zarejestruje nowy film i dodasz obraz do sklepu multimedialnego.
7.5.5 Orientacja aparatu
Jeśli urządzenia mają aparat przedni lub tylny:
- [C-1-1] MUSI być zorientowana tak, by długi wymiar kamery był zgodny z długością ekranu. Oznacza to, że gdy urządzenie jest trzymane w orientacji poziomej, aparaty MUSZĄ robić zdjęcia w orientacji poziomej. Dotyczy to niezależnie od naturalnej orientacji urządzenia, czyli zarówno orientacji poziomej, jak i pionowej.
7.6 Pamięć i miejsce na dane
7.6.1 Minimalna ilość pamięci i ilości miejsca na dane
Implementacje na urządzeniach:
- [C-0-1] MUSI zawierać menedżera pobierania, z którego aplikacje MOGĄ pobierać pliki danych. MUSZĄ one pobierać pojedyncze pliki o rozmiarze co najmniej 100 MB do domyślnej lokalizacji w „pamięci podręcznej”.
7.6.2 Pamięć współdzielona aplikacji
Implementacje na urządzeniach:
- [C-0-1] MUSI oferować pamięć współdzieloną przez aplikacje, często nazywana też „wspólną pamięcią zewnętrzną”, „pamięcią współdzieloną aplikacji” lub ścieżką systemu Linux „/sdcard”, w której jest podłączona.
- [C-0-2] MUSI być skonfigurowana z pamięcią współdzieloną domyślnie instalowaną, czyli bez względu na to, czy pamięć jest umieszczona w pamięci wewnętrznej czy na nośniku wymiennym (np. w gniazdku kart Secure Digital).
- [C-0-3] MUSI podłączyć pamięć współdzieloną aplikacji bezpośrednio w ścieżce Linuksa
sdcard
lub dołączyć łącze symboliczne Linuksa zsdcard
do rzeczywistego punktu podłączania. - [C-0-4] MUSI wymuszać uprawnienie
android.permission.WRITE_EXTERNAL_STORAGE
w tej pamięci współdzielonej zgodnie z dokumentacją w pakiecie SDK. W przeciwnym razie każda aplikacja uzyskująca to uprawnienie MUSI umożliwia zapis.
Implementacje na urządzeniach MOGĄ spełniać powyższe wymagania, jeśli:
- pamięci wymiennej dostępnej dla użytkowników, takiej jak gniazdo kart Secure Digital (SD).
- część pamięci wewnętrznej (niewymiennej) zgodnie z implementacją w ramach projektu Android Open Source Project (AOSP).
Jeśli implementacje urządzeń korzystają z pamięci wymiennej, aby spełnić powyższe wymagania:
- [C-1-1] MUSI zaimplementować tost lub wyskakujące okienko z ostrzeżeniem dla użytkownika, gdy w gnieździe nie ma nośnika pamięci.
- [C-1-2] MUSI zawierać nośnik pamięci w formacie FAT (np. kartę SD) lub widoczne na pudełku i inne materiały dostępne w momencie zakupu, że taki nośnik trzeba zakupić oddzielnie.
Jeśli implementacje urządzeń korzystają z pamięci niewymiennej, aby spełnić powyższe wymagania:
- NALEŻY użyć implementacji AOSP pamięci współdzielonej aplikacji wewnętrznej.
- MOGĄ dzielić dostępne miejsce z prywatnymi danymi aplikacji.
Jeśli implementacje urządzeń obejmują wiele ścieżek pamięci współdzielonej (np. gniazdo kart SD i wspólną pamięć wewnętrzną), działają one:
- [C-3-1] MUSI zezwalać na zapis w dodatkowej pamięci zewnętrznej tylko wstępnie zainstalowanym i uprawnionym aplikacjom na Androida, które mają uprawnienia
WRITE_EXTERNAL_STORAGE
, z wyjątkiem zapisów w katalogach związanych z odpowiednimi pakietami lub w plikachURI
zwróconych przez uruchomienie intencjiACTION_OPEN_DOCUMENT_TREE
.
Jeśli urządzenia są wyposażone w port USB z obsługą trybu urządzenia peryferyjnego USB:
- [C-3-1] MUSI udostępniać mechanizm uzyskiwania dostępu do danych w pamięci współdzielonej aplikacji z komputera hosta.
- Treści z obu ścieżek pamięci NALEŻY w przejrzysty sposób udostępniać za pomocą usługi skanera multimediów na Androidzie i usługi
android.provider.MediaStore
. - MOŻNA korzystać z pamięci masowej USB, ale spełnienie tego wymagania POWINIEN korzystać z protokołu Media Transfer Protocol.
Jeśli urządzenia są wyposażone w port USB z trybem urządzenia peryferyjnego USB i obsługują protokół Media Transfer Protocol, umożliwiają one:
- POWINNA być zgodna z referencyjnym hostem MTP Androida i Android File Transfer.
- MUSISZ zgłosić klasę urządzenia USB 0x00.
- POWINIEN zgłosić nazwę interfejsu USB „MTP”.
7.6.3 Pamięć elastyczna
Jeśli oczekuje się, że urządzenie ma charakter mobilny (inaczej niż w przypadku telewizora), implementacje urządzeń są:
- [SR] Zdecydowanie ZALECANE jest wdrożenie pamięci adaptacyjnej w stabilnej lokalizacji długoterminowej, ponieważ przypadkowe odłączenie może spowodować utratę lub uszkodzenie danych.
Jeśli wyjmowany port urządzenia pamięci masowej znajduje się w stabilnej lokalizacji długoterminowej, na przykład w komorze na baterię lub w innej osłonie ochronnej, sposób działania urządzenia:
- [SR] Zdecydowanie ZALECANE jest wdrożenie pamięci dostosowywanej.
7.7. USB
Jeśli urządzenia są wyposażone w port USB:
- POWINNA obsługiwać tryb urządzenia peryferyjnego USB i POWINNO obsługiwać tryb hosta USB.
7.7.1. Tryb urządzenia peryferyjnego USB
Jeśli używane urządzenia są wyposażone w port USB obsługujący tryb peryferyjny:
- [C-1-1] Port MUSI być podłączony do hosta USB ze standardowym portem USB typu A lub C.
- [C-1-2] MUSI zgłosić prawidłową wartość
iSerialNumber
w standardowym deskrypcie urządzenia USB doandroid.os.Build.SERIAL
. - [C-1-3] MUSI wykrywać ładowarki 1,5 A i 3,0 A zgodnie ze standardem oporu typu C i MUSZĄ wykrywać zmiany w reklamach, jeśli obsługują USB typu C.
- [SR] Port powinien używać formatu micro-B, micro-AB lub USB typu C. ZALECANE JEST spełnienie tych wymagań i dotychczasowych urządzeń z Androidem, dzięki czemu będą one mogły zostać uaktualnione do przyszłych wersji platformy.
- [SR] Port powinien znajdować się u dołu urządzenia (zgodnie z naturalną orientacją) lub umożliwiać programowe obracanie ekranu we wszystkich aplikacjach (w tym na ekranie głównym), by ekran był prawidłowo wyświetlany, gdy urządzenie jest zorientowane na port u dołu. ZALECANE JEST spełnienie tych wymagań i dotychczasowych urządzeń z Androidem, dzięki czemu będą one mogły zostać uaktualnione do przyszłych wersji platformy.
- [SR] POWINNO obsługiwać pobieranie prądu na poziomie 1,5 A podczas sygnału HS i ruchu zgodnie z opisem w specyfikacji ładowania baterii przez USB, wersja 1.2. ZALECANE JEST spełnienie tych wymagań i dotychczasowych urządzeń z Androidem, dzięki czemu będą one mogły zostać uaktualnione do przyszłych wersji platformy.
- [SR] Zdecydowanie ZALECAM, aby nie obsługiwać zastrzeżonych metod ładowania, które zmieniają napięcie Vbus do wartości domyślnych lub zmieniają role zlewu/źródła, co może powodować problemy ze współdziałaniem z ładowarkami lub urządzeniami, które obsługują standardowe metody przesyłania przez USB Power Delivery. Choć ta funkcja nazywa się „Zdecydowanie ZALECANE”, w przyszłych wersjach Androida możemy WYMAGAĆ WYMAGANIE obsługi wszystkich urządzeń typu C w celu pełnej interoperacyjności ze standardowymi ładowarkami typu C.
- [SR] ZDECYDOWANIE ZALECANE jest w przypadku obsługi funkcji Power Delivery w przypadku wymiany ról danych i zasilania, jeśli obsługuje ona tryb hosta USB typu C i USB.
- POWINNA obsługiwać technologię Power Delivery w przypadku ładowania wysokiego napięcia oraz obsługa trybów alternatywnych, takich jak wyświetlacz na zewnątrz.
- NALEŻY zaimplementować interfejs API i specyfikację Android Open Accessory (AOA) w sposób opisany w dokumentacji pakietu Android SDK.
Jeśli urządzenia są wyposażone w port USB, zaimplementuj specyfikację AOA:
- [C-2-1] MUSI zadeklarować obsługę funkcji sprzętowej
android.hardware.usb.accessory
. - [C-2-2] Klasa pamięci masowej USB MUSI zawierać ciąg „android” na końcu opisu interfejsu
iInterface
pamięci masowej USB
7.7.2 Tryb hosta USB
Jeśli implementacje urządzeń są wyposażone w port USB obsługujący tryb hosta:
- [C-1-1] MUSI zaimplementować interfejs Android USB Host API w sposób opisany w pakiecie Android SDK i MUSI zadeklarować obsługę funkcji sprzętowej
android.hardware.usb.host
. - [C-1-2] MUSI zapewnić obsługę podłączania standardowych urządzeń peryferyjnych USB. Oznacza to, że MUSI:
- urządzenie musi mieć port USB typu C lub musi być wyposażony w kable umożliwiające podłączenie zastrzeżonego portu urządzenia do standardowego portu USB typu C (urządzenie z USB typu C).
- urządzenie musi być wyposażone w urządzenie typu A lub użyć kabli podłączających zastrzeżony port urządzenia do standardowego portu USB typu A.
- Musisz mieć na urządzeniu port micro-AB, który POWINNY być w dostarczeniu z kablem pasującym do standardowego portu typu A.
- [C-1-3] NIE MOŻE być dostarczany z przejściówką konwertowaną z portów USB typu A lub micro-AB na porty typu C (gniazdo).
- [SR] ZALECANE JEST wdrożenie klasy audio USB w sposób opisany w dokumentacji pakietu Android SDK.
- POWINNY jest obsługiwać ładowanie podłączonego urządzenia peryferyjnego USB w trybie hosta; reklamowanie źródła zasilania o natężeniu co najmniej 1, 5 A (zgodnie z opisem w sekcji Parametry zakończenia działania w wersji 1.2 specyfikacji kabla USB typu C i złącza w przypadku złączy USB typu C) lub używanie złącza ładowania USB typu C w zakresie natężenia prądu wyjściowego (CDP)
- KONIECZNIE jest wdrożenie i obsługa standardów USB typu C.
Jeśli implementacje urządzeń obejmują port USB obsługujący tryb hosta i klasę audio USB, te funkcje:
- [C-2-1] MUSI obsługiwać klasę USB HID
- [C-2-2] MUSI obsługiwać wykrywanie i mapowanie tych pól danych HID określonych w tabelach wykorzystania USB HID i Żądanie użycia Voice Command na stałe
KeyEvent
jak poniżej:- Identyfikator wykorzystania strony użycia (0xC) (0x0CD):
KEYCODE_MEDIA_PLAY_PAUSE
- Identyfikator wykorzystania strony wykorzystania (0xC) (0x0E9):
KEYCODE_VOLUME_UP
- Identyfikator wykorzystania strony wykorzystania (0xC) (0x0EA):
KEYCODE_VOLUME_DOWN
- Identyfikator wykorzystania strony użycia (0xC) (0x0CF):
KEYCODE_VOICE_ASSIST
- Identyfikator wykorzystania strony użycia (0xC) (0x0CD):
Jeśli implementacje urządzeń obejmują port USB obsługujący tryb hosta i platformę Storage Access Framework (SAF), funkcje te:
- [C-3-1] MUSI rozpoznawać zdalnie połączone urządzenia MTP (Media Transfer Protocol) i udostępniać ich treści za pomocą intencji
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
iACTION_CREATE_DOCUMENT
. .
Jeśli implementacje urządzeń obejmują port USB obsługujący tryb hosta i USB typu C:
- [C-4-1] MUSI zaimplementować funkcję Dual Role Port zgodnie z definicją w specyfikacji USB typu C (sekcja 4.5.1.3.3).
- [SR] Zdecydowanie ZALECANE jest korzystanie z portu DisplayPort, obsługa technologii USB SuperSzybkości transmisji danych. Zdecydowanie ZALECANE jest obsługa usługi Power Delivery w celu wymiany ról związanych z danymi i zasilaniem.
- [SR] Zdecydowanie ZALECAM, aby NIE obsługiwać trybu akcesorium adaptera audio zgodnie z dodatkiem A do wersji 1.2 dotyczących kabla USB typu C i złącza.
- NALEŻY zastosować model Try.*, który najlepiej pasuje do formatu urządzenia. Na przykład urządzenie przenośne POWINNO obsługiwać model Try.SNK.
7.8 Dźwięk
7.8.1 Mikrofon
Jeśli implementacje urządzeń zawierają mikrofon:
- [C-1-1] MUSI zgłaszać stałą funkcję
android.hardware.microphone
. - [C-1-2] MUSI spełniać wymagania dotyczące nagrywania dźwięku opisane w sekcji 5.4.
- [C-1-3] MUSI spełniać wymagania dotyczące opóźnienia dźwięku opisane w sekcji 5.6.
- [SR] Zdecydowanie ZALECANE jest korzystanie z nagrywania bliskiego ultradźwięków, zgodnie z opisem w sekcji 7.8.3.
Jeśli implementacje urządzenia pomijają mikrofon:
- [C-2-1] NIE MOŻE zgłaszać stałej funkcji
android.hardware.microphone
. - [C-2-2] MUSI wdrożyć interfejs API do nagrywania dźwięku co najmniej w trybie bezobsługowym, zgodnie z sekcją 7.
7.8.2 Wyjście audio
Jeśli używane urządzenia są wyposażone w głośnik lub port wyjściowy audio/multimedialny dla urządzenia peryferyjnego audio, takiego jak 4-kanałowe gniazdo słuchawek 3,5 mm lub port w trybie hosta USB klasa audio USB, to umożliwiają:
- [C-1-1] MUSI zgłaszać stałą funkcję
android.hardware.audio.output
. - [C-1-2] MUSI spełniać wymagania dotyczące odtwarzania dźwięku opisane w sekcji 5.5.
- [C-1-3] MUSI spełniać wymagania dotyczące opóźnienia dźwięku opisane w sekcji 5.6.
- [SR] Zdecydowanie ZALECANE jest umożliwienie odtwarzania w trybie zbliżonym do ultradźwięków, zgodnie z opisem w sekcji 7.8.3.
Jeśli urządzenia nie mają gniazda głośnika ani wyjścia audio:
- [C-2-1] NIE MOŻE zgłaszać funkcji
android.hardware.audio.output
. - [C-2-2] MUSI wdrożyć interfejsy API związane z wyjściem audio przynajmniej w trybie bezobsługowym.
Na potrzeby tej sekcji „port wyjściowy” to fizyczny interfejs, taki jak gniazdo słuchawek 3, 5 mm, port HDMI lub port trybu hosta USB z klasą audio USB. Obsługa wyjścia audio przez protokoły radiowe, takie jak Bluetooth, Wi-Fi czy sieć komórkowa, nie kwalifikuje się jako uwzględnienie „portu wyjściowego”.
7.8.2.1 Analogowe porty audio
Aby urządzenie było zgodne z zestawami słuchawkowymi i innymi akcesoriami audio z wtyczką audio 3,5 mm w całym ekosystemie Androida, jeśli używane urządzenie obejmuje co najmniej 1 analogowy port audio, co najmniej 1 z tych portów POWINIEN być 4-kanałowym gniazdem słuchawek 3,5 mm.
Jeśli urządzenia są wyposażone w 4-kanałowe gniazdo słuchawek 3, 5 mm:
- [C-1-1] MUSI obsługiwać odtwarzanie dźwięku w słuchawkach stereo i stereofonicznych zestawach słuchawkowych z mikrofonem.
- [C-1-2] MUSI obsługiwać wtyczki audio TRRS w kolejności styków CTIA.
- [C-1-3] MUSI obsługiwać wykrywanie kodów kluczy i mapowanie ich na 3 zakresy równoważnej impedancji między mikrofonem a przewodami uziemiającymi we wtyczce audio:
-
Maks. 70 omów:
KEYCODE_HEADSETHOOK
-
210–290 omów:
KEYCODE_VOLUME_UP
-
360–680 omów:
KEYCODE_VOLUME_DOWN
-
Maks. 70 omów:
- [C-1-4] MUSI uruchamiać
ACTION_HEADSET_PLUG
po podłączeniu wtyczki, ale dopiero wtedy, gdy wszystkie kontakty podłączone do wtyczki dotykają odpowiednich segmentów gniazda. - [C-1-5] MUSI NAPRAWDZAĆ co najmniej 150 mV ± 10% napięcia wyjściowego na głośniku o impedancji 32 om.
- [C-1-6] MUSI mieć napięcie odchylenia mikrofonu w zakresie 1,8 V ~ 2,9 V.
- [SR] Zdecydowanie ZALECANE jest wykrywanie i zmapowanie do kodu klucza dla poniższego zakresu równoważnej impedancji między mikrofonem a przewodami uziemiającymi we wtyczce audio:
-
110–180 omów:
KEYCODE_VOICE_ASSIST
-
110–180 omów:
- POWINNA obsługiwać wtyczki audio zgodnie z kolejnością pinów OMTP.
- POWINNA obsługiwać nagrywanie dźwięku ze stereofonicznego zestawu słuchawkowego z mikrofonem.
Jeśli urządzenia są wyposażone w 4-kanałowe gniazdo słuchawek 3,5 mm i obsługują mikrofon oraz transmitują android.intent.action.HEADSET_PLUG
z mikrofonem o dodatkowej wartości ustawionej na 1:
- [C-2-1] MUSI obsługiwać wykrywanie mikrofonu na podłączonych akcesorium audio.
7.8.3 Prawie ultradźwiękowy
Dźwięk Near ultradźwiękowy to pasmo 18,5–20 kHz.
Implementacje na urządzeniach:
- MUSI prawidłowo zgłaszać obsługę funkcji audio bliskich ultradźwięków za pomocą interfejsu API AudioManager.getproperty w ten sposób:
Jeśli PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND
ma wartość „true”, źródła dźwięku VOICE_RECOGNITION
i UNPROCESSED
MUSZĄ spełniać te wymagania:
- [C-1-1] Średnia moc mikrofonu mikrofonu w paśmie 18,5–20 kHz MUSI być niższa niż 15 dB poniżej odpowiedzi przy 2 kHz.
- [C-1-2] Stosunek nieważonego sygnału do szumu mikrofonu powyżej 18,5–20 kHz dla tonu 19 kHz przy -26 dBFS MUSI być nie mniejszy niż 50 dB.
Jeśli PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND
ma wartość „true” (prawda):
- [C-2-1] Średnia odpowiedź głośnika w zakresie 18,5 kHz – 20 kHz MUSI być niższa niż 40 dB poniżej odpowiedzi przy 2 kHz.
7.9. Wirtualna rzeczywistość
Android zapewnia interfejsy API i infrastrukturę do tworzenia aplikacji do rzeczywistości wirtualnej (VR), takich jak wysokiej jakości rzeczywistość wirtualna na urządzeniach mobilnych. Implementacje na urządzeniach MUSZĄ poprawnie implementować te interfejsy API i zachowania, zgodnie z opisem w tej sekcji.
7.9.1. Tryb rzeczywistości wirtualnej
Android zapewnia obsługę trybu VR – funkcji, która obsługuje stereoskopowe renderowanie powiadomień i wyłącza komponenty interfejsu monokularowego systemu, gdy aplikacja VR skupia się na użytkowniku.
7.9.2. Rzeczywistość wirtualna o wysokiej wydajności
Jeśli implementacje urządzeń sygnalizują obsługę wysokiej wydajności VR przez dłuższy czas za pomocą flagi funkcji android.hardware.vr.high_performance
:
- [C-1-1] MUSI mieć co najmniej 2 rdzenie fizyczne.
- [C-1-2] MUSI zadeklarować
android.software.vr.mode feature
. - [C-1-3] MUSI obsługiwać tryb utrzymującej wydajność.
- [C-1-4] MUSI obsługiwać standard OpenGL ES 3.2.
- [C-1-5] MUSI obsługiwać sprzęt Vulkan na poziomie 0, MUSI obsługiwać sprzęt Vulkan na poziomie 1.
- [C-1-6] MUSI zaimplementować
EGL_KHR_mutable_render_buffer
,EGL_ANDROID_front_buffer_auto_refresh
,EGL_ANDROID_get_native_client_buffer
,EGL_KHR_fence_sync
,EGL_KHR_wait_sync
,EGL_IMG_context_priority
,EGL_EXT_protected_content
oraz udostępnić rozszerzenia na liście dostępnych rozszerzeń EGL. - [C-1-7] GPU i wyświetlacz MUSZĄ synchronizować dostęp do wspólnego przedniego bufora, tak aby treści VR z prędkością 60 kl./s były wyświetlane z użyciem naprzemiennego renderowania treści VR z 2 kontekstami renderowania bez widocznych zakłóceń.
- [C-1-8] MUSI zaimplementować
GL_EXT_multisampled_render_to_texture
,GL_OVR_multiview
,GL_OVR_multiview2
,GL_OVR_multiview_multisampled_render_to_texture
,GL_EXT_protected_textures
,GL_EXT_EGL_image_array
,GL_EXT_external_buffer
oraz udostępnić rozszerzenia na liście dostępnych rozszerzeń GL. - [C-1-9] MUSI wdrożyć obsługę flag
AHardwareBuffer
AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER
iAHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA
zgodnie z opisem w NDK. - [C-1-10] MUSI zaimplementować obsługę
AHardwareBuffers
z więcej niż jedną warstwą. - [C-1-11] MUSI obsługiwać dekodowanie H.264 z szybkością co najmniej 3840 x 2160 przy 30 kl./s do 40 Mb/s (odpowiednik 4 instancji 1920 x 1080 przy 30 kl./s-10 Mb/s lub 2 instancji 1920 x 1080 przy 60 kl./s–20 Mb/s).
- [C-1-12] MUSI obsługiwać HEVC i VP9; MUSI być w stanie dekodować z szybkością co najmniej 1920 x 1080 przy 30 kl./s-10 Mb/s oraz dekodować 3840 x 2160 przy 30 kl./s–20 Mb/s (odpowiednik 4 instancji 1920 kl./s do 1920 Mb/s).
- [C-1-13] MUSI obsługiwać interfejs
HardwarePropertiesManager.getDeviceTemperatures
API i zwracać dokładne wartości temperatury skóry. - [C-1-14] MUSI mieć wbudowany ekran, a jego rozdzielczość MUSI być co najmniej równa FullHD(1080p) i ZALECNIE ZALECANEJ WARTOŚCI QuadHD (1440p) lub wyższej.
- [C-1-15] Wyświetlacz MUSI aktualizować się z częstotliwością co najmniej 60 Hz w trybie VR.
- [C-1-16] Opóźnienie wyświetlania (mierzone w przypadku kolorów szarości i szarości, bieli na czerń i czerni na biel) MUSI wynosić ≤ 6 milisekund.
- [C-1-17] Wyświetlacz MUSI obsługiwać tryb o małej trwałości o czasie trwania wynoszącym ≤ 5 milisekund, przy czym trwałość jest definiowana jako czas, przez jaki piksel emituje światło.
- [C-1-18] MUSI obsługiwać Bluetooth 4.2 oraz Bluetooth LE Data Length Data Extension w sekcji 7.4.3.
- [C-1-19] MUSI obsługiwać i prawidłowo zgłaszać typ kanału bezpośredniego w przypadku wszystkich tych domyślnych typów czujników:
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-
- [C-1-20] MUSI obsługiwać typ kanału bezpośredniego
TYPE_HARDWARE_BUFFER
w przypadku wszystkich typów kanałów bezpośrednich wymienionych powyżej. - [SR] Zdecydowanie ZALECANE jest działanie funkcji
android.hardware.sensor.hifi_sensors
. MUSZĄ spełniać wymagania dotyczące żyroskopu, akcelerometru i magnetometru dla urządzeniaandroid.hardware.hifi_sensors
. - MOGĄ udostępniać wyłączne rdzeń aplikacji na pierwszym planie i obsługiwać interfejs API
Process.getExclusiveCores
w celu zwrócenia liczby rdzeni procesora używanych wyłącznie dla aplikacji na pierwszym planie. Jeśli obsługiwany jest rdzeń na wyłączność, rdzeń NIE MOŻE zezwalać na uruchamianie w niej żadnych innych procesów w przestrzeni użytkownika (z wyjątkiem sterowników urządzeń używanych przez aplikację), ale MOŻE zezwolić na uruchamianie niektórych procesów jądra w razie potrzeby.
8. Wydajność i moc
Niektóre kryteria dotyczące minimalnej wydajności i mocy mają kluczowe znaczenie dla wygody użytkowników i wpływają na podstawowe założenia, jakie deweloperzy powinni mieć przy tworzeniu aplikacji.
8.1. Spójność wrażeń użytkownika
Użytkownik może spełnić pewne wymagania minimalne, jeśli chodzi o stały czas reakcji i liczby klatek w aplikacjach i grach. W ten sposób można zapewnić użytkownikom płynny interfejs. Implementacje urządzeń, w zależności od typu urządzenia, MOGĄ wiązać się z wymiernymi wymaganiami dotyczącymi czasu oczekiwania w interfejsie i przełączania zadań. Opisaliśmy to w sekcji 2.
8.2. Skuteczność dostępu do plików
Określenie wspólnej wartości bazowej dla stałej wydajności dostępu do plików w prywatnym miejscu na dane aplikacji (partycja /data
) umożliwia deweloperom aplikacji odpowiednie oczekiwania, które ułatwią projektowanie oprogramowania. Implementacje urządzeń, w zależności od typu urządzenia, MOGĄ BYĆ określone wymagania opisane w sekcji 2 dotyczące następujących operacji odczytu i zapisu:
- Wydajność sekwencyjnego zapisu. Pomiar ten polega na zapisaniu pliku o rozmiarze 256 MB w buforze zapisu o wielkości 10 MB.
- Losowa wydajność zapisu. Pomiar ten polega na zapisaniu pliku o wielkości 256 MB z użyciem bufora zapisu o wielkości 4 KB.
- Wydajność sekwencyjnego odczytu. Pomiar dokonywany jest przez odczytanie pliku o wielkości 256 MB z użyciem bufora zapisu o wielkości 10 MB.
- Losowa wydajność odczytu. Pomiar dokonywany jest przez odczytanie pliku o wielkości 256 MB z użyciem bufora zapisu o wielkości 4 KB.
8.3. Tryby oszczędzania energii
Android obejmuje tryby czuwania aplikacji i uśpienia, które pozwalają zoptymalizować wykorzystanie baterii. [SR] ZDECYDOWANIE, aby wszystkie aplikacje zwolnione z tych trybów były widoczne dla użytkowników. [SR] Zdecydowanie NIE ZALECAMY stosowania algorytmów wyzwalających, konserwacji, wybudzania i używania globalnych ustawień systemu w tych trybach oszczędzania energii, aby NIE odbiegać od projektu Android Open Source Project.
Oprócz trybów oszczędzania energii implementacje urządzeń z Androidem MOGĄ wdrożyć dowolny lub wszystkie 4 stany zasilania w trybie uśpienia zdefiniowany w dokumencie Advanced Configuration and Power Interface (ACPI).
Jeśli implementacje urządzeń stosują stany zasilania S3 i S4 określone w ACPI:
- [C-1-1] NALEŻY wprowadzać te stany tylko przy zamykaniu pokrywy, która jest fizycznie częścią urządzenia.
8.4. Rachunkowanie zużycia energii
Dokładniejsze liczenie i raportowanie zużycia energii zapewnia deweloperom aplikacji zarówno zachęty, jak i narzędzia do optymalizacji wzorca wykorzystania energii przez aplikację.
Implementacje na urządzeniach:
- [SR] ZALECANE jest podanie profilu zasilania dla poszczególnych komponentów, który określa wartość bieżącego zużycia energii przez poszczególne komponenty sprzętowe oraz przybliżone zużycie baterii przez komponenty w danym okresie, zgodnie z dokumentem w witrynie Android Open Source Project.
- [SR] Zdecydowanie ZALECANE jest raportowanie wszystkich wartości zużycia energii w miliiamperach godzin (mAh).
- [SR] Zdecydowanie ZALECANE jest raportowanie zużycia energii przez procesor według identyfikatora UID każdego procesu. Projekt Android Open Source Project spełnia to wymaganie dzięki implementacji modułu jądra
uid_cputime
. - [SR] Zdecydowanie ZALECANE jest udostępnienie tej informacji deweloperowi aplikacji za pomocą polecenia powłoki
adb shell dumpsys batterystats
. - MUSI być przypisana do samego komponentu sprzętowego, jeśli nie można przypisać do aplikacji zużycia energii przez komponent sprzętowy.
8.5. Stała skuteczność
W przypadku długotrwałych aplikacji o wysokiej wydajności wydajność może się znacznie wahać ze względu na inne aplikacje działające w tle lub ograniczenie procesora z powodu limitów temperatury. Android ma interfejsy automatyczne, dzięki czemu, gdy urządzenie ma odpowiednie możliwości, główna aplikacja na pierwszym planie może zażądać, aby system zoptymalizował przydział zasobów, aby uwzględnić takie wahania.
Implementacje na urządzeniach:
-
[C-0-1] MUSI prawidłowo przekazywać informacje o obsłudze trybu zrównoważonej wydajności za pomocą metody interfejsu API
PowerManager.isSustainedPerformanceModeSupported()
. -
POWINNA obsługiwać tryb stałej wydajności.
Jeśli implementacje urządzeń zgłaszają obsługę trybu trwałej wydajności:
- [C-1-1] MUSI zapewniać aplikacji znajdującej się na pierwszym planie stały poziom wydajności przez co najmniej 30 minut, gdy aplikacja o to poprosi.
- [C-1-2] MUSI spełniać warunki interfejsu API
Window.setSustainedPerformanceMode()
i innych powiązanych interfejsów API.
Jeśli implementacje urządzeń obejmują co najmniej 2 rdzenie procesora, są to:
- POWINIEN podać co najmniej 1 rdzeń wyłączny, który może być zarezerwowany przez aplikację znajdującą się na pierwszym planie.
Jeśli implementacje urządzeń obsługują rezerwowanie 1 wyłącznego rdzenia dla aplikacji najwyższego poziomu:
- [C-2-1] MUSI raportować za pomocą metody API
Process.getExclusiveCores()
numery identyfikacyjne wyłącznych rdzeni, które mogą zostać zarezerwowane przez aplikację główną na pierwszym planie. - [C-2-2] NIE MOŻE zezwalać na uruchamianie żadnych procesów w przestrzeni użytkownika z wyjątkiem sterowników urządzeń używanych przez aplikację na uruchamianie wyłącznych rdzeni, ale MOŻE zezwalać na uruchamianie niektórych procesów jądra systemu, jeśli jest to konieczne.
Jeśli implementacje urządzeń nie obsługują rdzeni na wyłączność, są to:
- [C-3-1] MUSI zwracać pustą listę za pomocą metody interfejsu API
Process.getExclusiveCores()
.
9. Zgodność modelu zabezpieczeń
Implementacje na urządzeniach:
-
[C-0-1] MUSI wdrożyć model zabezpieczeń zgodny z modelem zabezpieczeń platformy Androida, zgodnie z definicją podaną w dokumentacji dotyczącej zabezpieczeń i uprawnień w interfejsach API w dokumentacji dla programistów aplikacji na Androida.
-
[C-0-2] MUSI obsługiwać samodzielnie podpisane aplikacje bez konieczności uzyskania dodatkowych pozwoleń/certyfikatów od osób trzecich/urzędów. Zgodne urządzenia MUSZĄ obsługiwać mechanizmy zabezpieczeń opisane w tych podpunktach.
9.1. Uprawnienia
Implementacje na urządzeniach:
-
[C-0-1] MUSI obsługiwać model uprawnień Androida zdefiniowany w dokumentacji dla deweloperów aplikacji na Androida. W szczególności MUSZĄ wymuszać wszystkie uprawnienia zdefiniowane w sposób opisany w dokumentacji pakietu SDK. Żadne uprawnienia nie mogą zostać pominięte, zmienione ani ignorowane.
-
MOŻE dodać więcej uprawnień, pod warunkiem że ciągi identyfikatorów nowych uprawnień nie znajdują się w przestrzeni nazw
android.\*
. -
[C-0-2] Uprawnienia z wartością
protectionLevel
PROTECTION_FLAG_PRIVILEGED
MUSZĄ być przyznawane tylko aplikacjom wstępnie wczytanym na ścieżce z podwyższonymi uprawnieniami w obrazie systemu i będącym częścią podzbioru uprawnień bezpośrednio na liście dozwolonych dla poszczególnych aplikacji. Implementacja AOSP spełnia to wymaganie, odczytując i przestrzegając uprawnień dozwolonych poszczególnych aplikacji z plików na ścieżceetc/permissions/
i używając ścieżkisystem/priv-app
jako ścieżki uprzywilejowanej.
Uprawnienia z poziomem ochrony „Niebezpieczne” to uprawnienia w czasie działania. Aplikacje, które mają targetSdkVersion
> 22, wysyłają żądania w czasie działania.
Implementacje na urządzeniach:
- [C-0-3] MUSI wyświetlić specjalny interfejs, w którym użytkownik może zdecydować, czy przyznać wymagane uprawnienia w czasie działania, oraz udostępnić interfejs do zarządzania uprawnieniami w czasie działania.
- [C-0-4] MUSI mieć tylko jedną implementację obu interfejsów użytkownika.
- [C-0-5] NIE MOŻE przyznawać żadnych uprawnień w czasie działania zainstalowanym wstępnie aplikacjom, chyba że:
- zgody użytkownika można uzyskać przed użyciem jej przez aplikację.
- uprawnienia w czasie działania są powiązane ze wzorcem intencji, dla którego wstępnie zainstalowana aplikacja jest ustawiona jako domyślny moduł obsługi.
Jeśli implementacje na urządzeniu obejmują wstępnie zainstalowaną aplikację lub chcesz umożliwić aplikacjom innych firm dostęp do statystyk użytkowania:
- [C-1-1] Zdecydowanie zalecamy, aby zapewnić dostępny dla użytkownika mechanizm przyznawania i unieważniania dostępu do statystyk użytkowania w odpowiedzi na intencję
android.settings.ACTION_USAGE_ACCESS_SETTINGS
w przypadku aplikacji, które deklarują uprawnieniaandroid.permission.PACKAGE_USAGE_STATS
.
Jeśli implementacje urządzenia uniemożliwią dostęp do statystyk użytkowania aplikacjom, w tym także fabrycznie zainstalowanym użytkownikom,:
- [C-2-1] MUSI nadal mieć działanie obsługujące wzorzec intencji
android.settings.ACTION_USAGE_ACCESS_SETTINGS
, ale MUSI go zaimplementować w trybie no-op, aby działał podobnie jak w przypadku odrzucenia prośby o dostęp.
9.2. UID i izolacja procesów
Implementacje na urządzeniach:
- [C-0-1] MUSI obsługiwać model piaskownicy aplikacji na Androida, w którym każda aplikacja działa jako unikalny identyfikator UID systemu Unixstyle i w osobnym procesie.
- [C-0-2] MUSI obsługiwać wiele aplikacji z tym samym identyfikatorem użytkownika Linuksa, o ile są one prawidłowo podpisane i skonstruowane, zgodnie z opisem w dokumentacji zabezpieczeń i uprawnień.
9.3. Uprawnienia systemu plików
Implementacje na urządzeniach:
- [C-0-1] MUSI obsługiwać model uprawnień dostępu do plików na Androidzie zgodnie z definicją w dokumentacji dotyczącej zabezpieczeń i uprawnień.
9.4. Alternatywne środowiska wykonawcze
Implementacje na urządzeniach MUSZĄ zachowywać spójność z modelem zabezpieczeń i uprawnień Androida, nawet jeśli obejmują środowiska wykonawcze, w których są wykonywane aplikacje korzystające z innego oprogramowania lub technologii niż format wykonywalny Dalvik lub kod natywny. Krótko mówiąc:
-
[C-0-1] Alternatywne środowiska wykonawcze MUSZĄ być aplikacjami na Androida i być zgodne ze standardowym modelem zabezpieczeń Androida opisanym w sekcji sekcja 9.
-
[C-0-2] Alternatywne środowiska wykonawcze NIE MOGĄ mieć dostępu do zasobów chronionych przez uprawnienia, które nie są wymagane w pliku
AndroidManifest.xml
środowiska wykonawczego za pomocą mechanizmu <uses-permission
>. -
[C-0-3] Alternatywne środowiska wykonawcze NIE MOGĄ zezwalać aplikacjom na korzystanie z funkcji chronionych uprawnieniami Androida ograniczonych do aplikacji systemowych.
-
[C-0-4] Alternatywne środowiska wykonawcze MUSZĄ być zgodne z modelem piaskownicy Androida, a zainstalowane aplikacje korzystające z alternatywnego środowiska NIE MOGĄ wykorzystywać środowiska piaskownicy dla żadnej innej aplikacji zainstalowanej na urządzeniu, z wyjątkiem standardowych mechanizmów Androida korzystających ze wspólnego identyfikatora użytkownika i certyfikatu podpisywania.
-
[C-0-5] Alternatywne środowiska wykonawcze NIE MOGĄ uruchamiać się w środowiskach piaskownicy odpowiadających innym aplikacjom na Androida, przyznawać do nich dostępu ani przyznawać im do nich dostępu.
-
[C-0-6] Alternatywnego środowiska wykonawczego NIE MOŻNA uruchamiać razem z innymi aplikacjami ani przyznawać im żadnych uprawnień superużytkownika (roota) ani żadnego innego identyfikatora użytkownika.
-
[C-0-7] Jeśli plik
.apk
alternatywnych środowisk wykonawczych znajduje się w obrazie systemowym implementacji urządzenia, MUSI być podpisany kluczem innym niż klucz używany do podpisywania innych aplikacji uwzględnionych w implementacjach na urządzeniu. -
[C-0-8] Podczas instalowania aplikacji alternatywne środowiska wykonawcze MUSZĄ uzyskać zgodę użytkownika na uprawnienia Androida używane przez aplikację.
-
[C-0-9] Gdy aplikacja musi korzystać z zasobu urządzenia, do którego są przypisane uprawnienia Androida (takie jak Aparat, GPS itp.), alternatywne środowisko wykonawcze MUSI informować użytkownika, że aplikacja będzie miała dostęp do tego zasobu.
-
[C-0-10] Jeśli środowisko wykonawcze nie rejestruje możliwości aplikacji w ten sposób, podczas instalowania aplikacji korzystających z tego środowiska wykonawczego MUSI ono zawierać listę wszystkich uprawnień samego środowiska wykonawczego.
-
Alternatywne środowiska wykonawcze MUSZĄ instalować aplikacje za pomocą interfejsu
PackageManager
w osobnych piaskownicy Androida (identyfikatory użytkowników systemu Linux itp.). -
Alternatywne środowiska wykonawcze MOGĄ udostępniać jedną piaskownicę Androida współużytkowaną przez wszystkie aplikacje korzystające z alternatywnego środowiska wykonawczego.
9.5. Obsługa wielu użytkowników
Android zapewnia obsługę wielu użytkowników i pełną izolację użytkowników.
- Implementacje urządzeń MOGĄ BYĆ, ale NIE POWINNY być włączane dla wielu użytkowników, jeśli korzystają z nośników wymiennych jako podstawowej pamięci zewnętrznej.
Jeśli implementacje urządzeń obejmują wielu użytkowników:
- [C-1-1] MUSI spełniać następujące wymagania związane z obsługą wielu użytkowników.
- [C-1-2] MUSI wdrożyć dla każdego użytkownika model zabezpieczeń zgodny z modelem zabezpieczeń platformy Androida, zgodnie z opisem w dokumentacji dotyczącej zabezpieczeń i uprawnień w interfejsach API.
- [C-1-3] MUSI mieć oddzielne i odizolowane katalogi współdzielonej pamięci aplikacji (
/sdcard
) dla każdej instancji użytkownika. - [C-1-4] MUSI mieć pewność, że aplikacje należące do danego użytkownika i uruchamiane w jego imieniu nie mogą wyświetlać, odczytywać ani zapisywać plików należących do innych użytkowników, nawet jeśli dane obu użytkowników są przechowywane w tym samym woluminie lub w tym samym systemie plików.
- [C-1-5] MUSI szyfrować zawartość karty SD, gdy jest włączony wielu użytkowników, przy użyciu klucza zapisanego wyłącznie na niewymiennym nośniku dostępnym tylko dla systemu, jeśli implementacje urządzenia korzystają z nośników wymiennych dla interfejsów API pamięci zewnętrznej. Ponieważ uniemożliwi to odczytanie multimediów na komputerze hosta, trzeba będzie wdrożyć urządzenia na MTP lub podobny system, aby zapewnić komputerom hosta dostęp do danych bieżącego użytkownika.
Jeśli implementacje urządzeń obejmują wielu użytkowników i nie mają zadeklarowanej flagi funkcji android.hardware.telephony
:
- [C-2-1] MUSI obsługiwać profile z ograniczonym dostępem – funkcję, która umożliwia właścicielom urządzeń zarządzanie dodatkowymi użytkownikami i ich możliwościami na urządzeniu. Dzięki profilom z ograniczeniami właściciele urządzeń mogą szybko skonfigurować oddzielne środowiska dla dodatkowych użytkowników, a także zarządzać bardziej precyzyjnymi ograniczeniami w aplikacjach dostępnych w tych środowiskach.
Jeśli implementacje urządzeń obejmują wielu użytkowników i zadeklarują flagę funkcji android.hardware.telephony
, oznacza to, że:
- [C-3-1] NIE MOŻE obsługiwać profili z ograniczonym dostępem, ale MUSI być zgodny z mechanizmami kontroli AOSP, które włączają lub wyłączają innym użytkownikom dostęp do połączeń głosowych i SMS-ów.
9.6 Ostrzeżenie SMS-a specjalnego
Android umożliwia ostrzeganie użytkowników o wychodzących SMS-ach premium. SMS-y specjalne to SMS-y wysyłane do usługi zarejestrowanej u operatora, za którą użytkownik może być obciążony.
Jeśli implementacje urządzenia zadeklarują obsługę android.hardware.telephony
, będą to:
- [C-1-1] MUSI ostrzegać użytkowników przed wysłaniem SMS-a na numery identyfikowane przez wyrażenia regularne zdefiniowane w pliku
/data/misc/sms/codes.xml
na urządzeniu. Rozwiązania Android Open Source Project, które opracowujemy na potrzeby platformy Android, to implementacja, która spełnia to wymaganie.
9.7. Funkcje zabezpieczeń jądra systemu
Piaskownica Androida obejmuje funkcje korzystające z systemu Security-Extended Linux (SELinux), obowiązkowej kontroli dostępu (MAC), seccomp sandbox (piaskownica seccomp) i inne funkcje zabezpieczeń jądra systemu Linux. Implementacje na urządzeniach:
- [C-0-1] MUSI zachować zgodność z istniejącymi aplikacjami, nawet jeśli SELinux lub inne funkcje zabezpieczeń są wdrożone poniżej platformy Androida.
- [C-0-2] NIE MOŻE mieć widocznego interfejsu użytkownika po wykryciu naruszenia bezpieczeństwa i zablokowaniu go przez funkcję zabezpieczeń wdrożoną poniżej platformy Androida, ale MOŻE mieć widoczny interfejs w przypadku wystąpienia niezablokowanego naruszenia zabezpieczeń, które skutkuje udanym exploitem.
- [C-0-3] NIE MOŻE udostępniać użytkownikowi ani deweloperowi aplikacji SELinux ani żadnych innych funkcji zabezpieczeń wdrożonych poniżej platformy Androida.
- [C-0-4] NIE MOŻE zezwalać aplikacji, która może wpływać na inną aplikację za pomocą interfejsu API (takiej jak interfejs Device Administration API), aby konfigurować zasady naruszające zgodność.
- [C-0-5] MUSI podzielić platformę multimediów na wiele procesów, aby możliwe było węższe przyznanie dostępu każdemu z nich, zgodnie z opisem na stronie projektu Android Open Source.
- [C-0-6] MUSI wdrożyć mechanizm piaskownicy aplikacji w jądrze, który umożliwia filtrowanie wywołań systemowych za pomocą konfigurowalnej zasady z programów wielowątkowych. Nadrzędny projekt Android Open Source Project spełnia to wymaganie przez włączenie seccomp-BPF z synchronizacją grup wątków (TSYNC) zgodnie z opisem w sekcji Konfiguracja jądra na stronie source.android.com.
Integralność jądra i funkcje samoochrony stanowią integralne elementy zabezpieczeń Androida. Implementacje na urządzeniach:
- [C-0-7] MUSI wdrożyć zabezpieczenia przed przepełnieniem bufora stosu jądra (np.
CONFIG_CC_STACKPROTECTOR_STRONG
). - [C-0-8] MUSI wdrożyć rygorystyczną ochronę pamięci jądra, w której kod wykonywalny jest tylko do odczytu, dane tylko do odczytu są niewykonywalne i niemożliwe do zapisu, a dane, które można zapisać, nie są możliwe do wykonania (np.
CONFIG_DEBUG_RODATA
lubCONFIG_STRICT_KERNEL_RWX
). - [SR] Zdecydowanie ZALECANE jest zachowanie danych jądra, które są zapisywane wyłącznie podczas inicjowania, oznaczone jako przeznaczone tylko do odczytu po zainicjowaniu (np.
__ro_after_init
). - [SR} Zdecydowanie ZALECANE jest wdrożenie statycznych i dynamicznych granic obiektów dynamicznych, które umożliwiają sprawdzanie kopii między przestrzenią użytkownika a przestrzenią jądra (np.
CONFIG_HARDENED_USERCOPY
). - [SR] Zdecydowanie ZALECANE, aby nigdy nie wykonywać pamięci w przestrzeni użytkownika podczas działania w jądrze (np. sprzętowego PXN bądź emulowanej przez
CONFIG_CPU_SW_DOMAIN_PAN
lubCONFIG_ARM64_SW_TTBR0_PAN
). - [SR] Zdecydowanie ZALECANE jest, aby nigdy nie odczytywać ani zapisywać pamięci przestrzeni użytkownika w jądrze poza zwykłymi interfejsami API z dostępem do kopii przez użytkownika (np. sprzętowym numerem PAN lub emulowaną przez
CONFIG_CPU_SW_DOMAIN_PAN
bądźCONFIG_ARM64_SW_TTBR0_PAN
). - [SR] Zdecydowanie ZALECANY jest losowy układ kodu jądra i pamięci oraz unikanie ekspozycji, które mogłyby negatywnie wpłynąć na randomizację (np.
CONFIG_RANDOMIZE_BASE
z entropią programu rozruchowego przez/chosen/kaslr-seed Device Tree node
lubEFI_RNG_PROTOCOL
).
Jeśli implementacje urządzeń korzystają z jądra systemu Linux:
- [C-1-1] MUSI zaimplementować SELinux.
- [C-1-2] MUSI ustawić SELinux w tryb globalnego egzekwowania.
- [C-1-3] MUSI skonfigurować wszystkie domeny w trybie wymuszania. Nie są dozwolone żadne domeny w trybie mniej rygorystycznym, w tym domeny specyficzne dla urządzenia lub dostawcy.
- [C-1-4] NIE MOŻE modyfikować, pomijać ani zastępować reguł nigdy, które znajdują się w folderze systemowym/sepolicy dostępnym w nadchodzącym projekcie Android Open Source Project (AOSP), a zasada MUSI skompilować wszystkie obecne reguły, zarówno dla domen AOSP SELinux, jak i specyficznych dla urządzeń/dostawców.
- POWINIEN zachować domyślną zasadę SELinux w folderze systemowym/sekwencyjnym nadrzędnego projektu Android Open Source i dodać ją do tej zasady jedynie na potrzeby konfiguracji w określonym urządzeniu.
Jeśli implementacje urządzeń korzystają z jądra innego niż Linux:
- [C-2-1] MUSI używać obowiązkowego systemu kontroli dostępu równoważnego z SELinux.
9.8. Prywatność
9.8.1. Historia wykorzystania
Android przechowuje historię wyborów użytkownika i zarządza nią w usłudze UsageStatsManager.
Implementacje na urządzeniach:
- [C-1-1] MUSI przechowywać taką historię użytkownika w rozsądnym czasie.
- [SR] Zdecydowanie ZALECANE jest zachowanie domyślnie skonfigurowanego 14-dniowego okresu przechowywania w implementacji AOSP.
9.8.2. Nagrywam
Jeśli implementacje urządzeń obejmują funkcje, które umożliwiają przechwytywanie treści wyświetlanych na ekranie lub nagrywanie strumienia audio odtwarzanego na urządzeniu:
- [C-1-1] MUSI mieć bieżące powiadomienie do użytkownika o włączeniu tej funkcji oraz aktywnym nagrywaniu i rejestrowaniu.
Jeśli implementacje urządzeń zawierają włączony od razu komponent, który może rejestrować dźwięki otoczenia w celu uzyskania przydatnych informacji o kontekście użytkownika:
- [C-2-1] NIE MOŻE przechowywać w trwałych pamięciach urządzeń ani przesyłać poza urządzenie nagranych, nieprzetworzonych plików audio ani żadnych formatów, które można przekonwertować z powrotem na oryginalny dźwięk lub faks, chyba że za wyraźną zgodą użytkownika.
9.8.3 Połączenia
Jeśli urządzenia są wyposażone w port USB z obsługą trybu urządzenia peryferyjnego USB:
- [C-1-1] MUSI wyświetlić interfejs użytkownika z prośbą o zgodę na dostęp do zawartości pamięci współdzielonej przez port USB.
9.8.4 Ruch w sieci
Implementacje na urządzeniach:
- [C-0-1] MUSI zainstalować te same certyfikaty główne dla zaufanego systemu urzędu certyfikacji, które zostały dostarczone w nadrzędnym projekcie Android Open Source.
- [C-0-2] MUSI być wysyłany z pustym magazynem głównego urzędu certyfikacji użytkownika.
- [C-0-3] MUSI wyświetlać użytkownikowi ostrzeżenie informujące, że ruch sieciowy może być monitorowany po dodaniu głównego urzędu certyfikacji użytkownika.
Jeśli ruch z urządzenia jest kierowany przez VPN, takie implementacje urządzeń:
- [C-1-1] MUSI wyświetlać użytkownikowi ostrzeżenie:
- Ruch w tej sieci może być monitorowany.
- Ruch ten jest kierowany przez konkretną aplikację VPN udostępniającą tę sieć.
Jeśli implementacje urządzeń mają mechanizm, który jest domyślnie włączony po włączeniu i kieruje ruch danych sieci przez serwer proxy lub bramę VPN (np. wstępne wczytywanie usługi VPN z przyznanym ustawieniem android.permission.CONTROL_VPN
), dzięki czemu:
- [C-2-1] MUSI prosić użytkownika o zgodę przed włączeniem tego mechanizmu, chyba że usługa VPN jest włączona przez kontroler zasad dotyczących urządzeń w narzędziu
DevicePolicyManager.setAlwaysOnVpnPackage()
. W takim przypadku użytkownik nie musi wyrażać osobnej zgody, a jedynie powinien zostać o tym powiadomiony.
Jeśli implementacje urządzeń implementują funkcję kupna-stałych użytkowników, aby włączyć funkcję „stały VPN” w aplikacji VPN innej firmy:
- [C-3-1] MUSI wyłączyć tę funkcję użytkownika dla aplikacji, które nie obsługują stałej sieci VPN w pliku
AndroidManifest.xml
przez ustawienie atrybutuSERVICE_META_DATA_SUPPORTS_ALWAYS_ON
nafalse
.
9.9. Szyfrowanie magazynu danych
Jeśli implementacje urządzeń obsługują bezpieczny ekran blokady zgodnie z opisem w sekcji 9.11.1:
- [C-1-1] MUSI obsługiwać szyfrowanie przechowywanych danych na potrzeby prywatnych danych aplikacji (
/data partition
), a także partycji pamięci współdzielonej aplikacji (/sdcard partition
), jeśli stanowi ona trwałą, niemożliwą do usunięcia część urządzenia.
Jeśli implementacje urządzeń obsługują bezpieczny ekran blokady zgodnie z opisem w sekcji 9.11.1 oraz szyfrowanie przechowywania danych z wykorzystaniem technologii AES o wydajności powyżej 50 MiB/s:
-
[C-2-1] MUSI domyślnie włączać szyfrowanie danych, gdy użytkownik zakończy rozruchową konfigurację. Jeśli implementacje urządzeń zostały już wdrożone na starszej wersji Androida z domyślnie wyłączonym szyfrowaniem, takie urządzenie nie może spełnić wymagań w ramach aktualizacji oprogramowania systemowego, więc MOŻE zostać wykluczone.
-
MUSI spełnić powyższe wymagania dotyczące szyfrowania danych dzięki wdrożeniu szyfrowania opartego na plikach (FBE).
9.9.1. Bezpośredni rozruch
Implementacje na urządzeniach:
-
[C-0-1] MUSI wdrożyć interfejsy API trybu bezpośredniego rozruchu, nawet jeśli nie obsługują szyfrowania pamięci.
-
[C-0-2] Intencje
ACTION_LOCKED_BOOT_COMPLETED
iACTION_USER_UNLOCKED
MUSZĄ nadal być transmitowane, aby sygnalizować aplikacji, że dane w aplikacjach szyfrowanych na urządzeniu (DE) i danych uwierzytelniających (CE) są dostępne.
9.9.2. Szyfrowanie oparte na plikach
Jeśli implementacje urządzeń obsługują FBE:
- [C-1-1] MUSI uruchomić się bez żądania podania danych logowania użytkownika i zezwolić aplikacjom wykrywającym bezpośrednie rozruchy na dostęp do pamięci zaszyfrowanej na urządzeniu (DE) po wysłaniu komunikatu
ACTION_LOCKED_BOOT_COMPLETED
. - [C-1-2] MUSI zezwalać na dostęp do pamięci CE (Credential Encrypted) dopiero po odblokowaniu urządzenia przez użytkownika przez podanie danych logowania (np. kodu dostępu, kodu PIN, wzoru lub odcisku palca) po wysłaniu komunikatu
ACTION_USER_UNLOCKED
. - [C-1-3] NIE MOŻE proponować żadnej metody odblokowywania pamięci chronionej znakiem CE bez danych logowania podanych przez użytkownika.
- [C-1-4] MUSI obsługiwać weryfikację podczas uruchamiania i upewnić się, że klucze DE są kryptograficznie powiązane ze sprzętowym źródłem zaufania urządzenia.
- [C-1-5] MUSI obsługiwać szyfrowanie zawartości pliku przy użyciu AES z kluczem 256-bitowym w trybie XTS.
-
[C-1-6] MUSI obsługiwać szyfrowanie nazwy pliku za pomocą AES o długości klucza 256-bitowego w trybie CBC-CTS.
-
Klucze chroniące obszary przechowywania CE i DE:
-
[C-1-7] MUSI być kryptograficznie powiązany ze sprzętowym magazynem kluczy.
- [C-1-8] Klucze CE MUSZĄ być powiązane z danymi logowania na ekranie blokady użytkownika.
- [C-1-9] Jeśli użytkownik nie określił danych logowania na ekranie blokady, klucze CE MUSZĄ być powiązane z domyślnym kodem dostępu.
-
[C-1-10] MUSI być niepowtarzalny, co oznacza, że żaden klucz CE lub DE użytkownika nie pasuje do żadnego klucza CE lub DE innego użytkownika.
-
TREŚCI MUSZĄ umożliwiać wykrywanie najważniejszych aplikacji (np. Alarm, Telefony, Messenger) przy bezpośrednim rozruchu.
- MOŻE obsługiwać alternatywne mechanizmy szyfrowania, długości kluczy i tryby w przypadku zawartości pliku oraz szyfrowania nazw plików, ale MUSI domyślnie korzystać z obsługiwanych szyfrów, długości kluczy i trybów.
Nadrzędny projekt Android Open Source udostępnia preferowaną implementację tej funkcji opartą na funkcji szyfrowania ext4 jądra systemu Linux.
9.9.3 Pełne szyfrowanie dysku
Jeśli implementacje urządzeń obsługują pełne szyfrowanie dysku (FDE):
- [C-1-1] MUSI używać AES z kluczem 128-bitowym (lub większym) i trybem przeznaczonym do przechowywania danych (np. AES-XTS, AES-CBC-ESSIV).
- [C-1-2] MUSI używać domyślnego kodu dostępu do pakowania klucza szyfrowania i NIE POWOLNO go zapisywać w pamięci klucza szyfrowania bez szyfrowania.
- [C-1-3] MUSI domyślnie szyfrować klucz szyfrowania AES, chyba że użytkownik zrezygnuje z tej funkcji, chyba że jest on aktywny, gdy dane logowania na ekranie blokady są rozciągnięte przy użyciu algorytmu powolnego rozciągania (np. PBKDF2 lub scrypt).
- [C-1-4] Powyższy domyślny algorytm rozciągania haseł MUSI być powiązany kryptograficznie z tym magazynem kluczy, gdy użytkownik nie określił danych logowania na ekranie blokady lub wyłączył możliwość używania hasła do szyfrowania, a urządzenie udostępnia sprzętowy magazyn kluczy.
- [C-1-5] NIE MOŻE wysyłać klucza szyfrowania poza urządzenie (nawet jeśli jest zapakowany wraz z kodem dostępu użytkownika lub kluczem sprzętowym).
Nadrzędny projekt Android Open Source udostępnia preferowaną implementację tej funkcji opartą na funkcji dm-crypt w jądrze Linuksa.
9.10. Integralność urządzenia
Te wymagania zapewniają przejrzystość stanu integralności urządzenia. Implementacje na urządzeniach:
- [C-0-1] MUSI prawidłowo zgłaszać za pomocą metody System API
PersistentDataBlockManager.getFlashLockState()
, czy stan programu rozruchowego zezwala na flashowanie obrazu systemu. StanFLASH_LOCK_UNKNOWN
jest zarezerwowany dla wdrożeń na urządzeniach z wcześniejszą wersją Androida, w której nie istniała nowa metoda interfejsu API systemu.
Weryfikacja podczas uruchamiania to funkcja, która gwarantuje integralność oprogramowania urządzenia. Jeśli implementacja urządzenia obsługuje tę funkcję, oznacza to, że:
- [C-1-1] MUSI zadeklarować flagę funkcji platformy
android.software.verified_boot
. - [C-1-2] MUSI przeprowadzić weryfikację przy każdej sekwencji uruchamiania.
- [C-1-3] MUSI rozpocząć weryfikację od stałego klucza sprzętowego, który jest podstawą zaufania, aż do poziomu partycji systemowej.
- [C-1-4] MUSI wdrożyć każdy etap weryfikacji, aby na następnym etapie sprawdzić integralność i autentyczność wszystkich bajtów, zanim wykonasz kod na kolejnym etapie.
- [C-1-5] MUSI używać algorytmów weryfikacji tak silnych jak obecne zalecenia NIST w zakresie algorytmów haszowania (SHA-256) i rozmiarów kluczy publicznych (RSA-2048).
- [C-1-6] NIE MOŻE umożliwiać uruchomienia urządzenia w przypadku niepowodzenia weryfikacji systemu, chyba że użytkownik mimo to wyrazi zgodę – wtedy nie wolno używać danych z niezweryfikowanych bloków pamięci masowej.
- [C-1-7] NIE MOŻE zezwalać na modyfikowanie zweryfikowanych partycji na urządzeniu, chyba że użytkownik wyraźnie odblokuje program rozruchowy.
- [SR] Jeśli w urządzeniu znajduje się wiele dyskretnych układów scalonych (np. radio, specjalistyczny procesor obrazu), Zdecydowanie ZALECANY jest proces uruchamiania każdego z nich, aby sprawdzić każdy etap podczas uruchamiania.
- [SR] Zdecydowanie ZALECANE jest użycie pamięci, w której wykryto manipulacje: gdy program rozruchowy jest odblokowany. Magazyn danych potwierdzający ingerencję oznacza, że program rozruchowy może wykryć, czy nie manipulowano w pamięci HLOS (wysokiego poziomu systemu operacyjnego).
- [SR] ZALECNIE ZALECANE jest poproszenie użytkownika o zgodę podczas korzystania z urządzenia i wymaganie fizycznego potwierdzenia przed zezwoleniem na przejście z trybu blokady programu rozruchowego na tryb odblokowany przez program rozruchowy.
- [SR] ZDECYDOWANIE ZALECANE jest wdrożenie ochrony przed wycofywaniem HLOS (np. podczas uruchamiania, partycje systemowe) i użycie pamięci masowej z możliwością wykrycia ingerencji do przechowywania metadanych używanych do określenia minimalnej dopuszczalnej wersji systemu operacyjnego.
- NALEŻY zaimplementować ochronę przywracania przed wycofywaniem każdego komponentu z trwałym oprogramowaniem układowym (np. modemu czy aparatu) oraz NALEŻY korzystać z pamięci, w trakcie której doszło do manipulacji, do przechowywania metadanych używanych do określenia minimalnej dopuszczalnej wersji.
Projekt Android Open Source projektu zapewnia preferowaną implementację tej funkcji w repozytorium external/avb/
, które można zintegrować z programem rozruchowym służącym do wczytywania Androida.
Jeśli implementacje urządzenia zgłaszają flagę funkcji android.hardware.ram.normal
, oznacza to, że:
- [C-2-1] MUSI obsługiwać weryfikację rozruchu, aby zapewnić integralność urządzenia.
Jeśli implementacja urządzenia została już rozpoczęta i nie obsługuje weryfikacji rozruchu we wcześniejszej wersji Androida, takie urządzenie nie może dodać obsługi tej funkcji w ramach aktualizacji oprogramowania systemowego, więc jest zwolnione z tego wymogu.
9.11. Klucze i dane uwierzytelniające
System magazynu kluczy Android umożliwia deweloperom aplikacji przechowywanie kluczy kryptograficznych w kontenerze i wykorzystywanie ich w operacjach kryptograficznych za pomocą interfejsu KeyChain API lub interfejsu Keystore API. Implementacje na urządzeniach:
- [C-0-1] MUSI umożliwiać zaimportowanie co najmniej 8192 kluczy.
- [C-0-2] Uwierzytelnianie na ekranie blokady MUSI mieć limit prób ograniczania liczby żądań i MUSI mieć algorytm wzrastającego ponowienia. Powyżej 150 nieudanych prób opóźnienie MUSI wynosić co najmniej 24 godziny.
- NIE POWINNO ograniczać liczby kluczy, które można wygenerować
Jeśli implementacja urządzenia obsługuje bezpieczny ekran blokady,:
- [C-1-1] MUSI utworzyć kopię zapasową implementacji magazynu kluczy za pomocą bezpiecznego sprzętu.
- [C-1-2] MUSI zawierać implementacje algorytmów kryptograficznych RSA, AES, ECDSA i HMAC oraz funkcje skrótu rodziny MD5, SHA1 i SHA-2, aby zapewnić prawidłową obsługę algorytmów obsługiwanych przez system Android Keystore w obszarze odizolowanym od kodu działającego w jądrze i nowszych. Bezpieczna izolacja MUSI blokować wszystkie potencjalne mechanizmy, dzięki którym jądro lub kod przestrzeni użytkownika mogą uzyskiwać dostęp do wewnętrznego stanu odizolowanego środowiska, w tym do aktu o rynkach cyfrowych. Dodatkowy projekt Android Open Source Project (AOSP) spełnia to wymaganie dzięki implementacji Trusty. Alternatywnym rozwiązaniem są inne rozwiązanie oparte na technologii ARM TrustZone lub sprawdzone i sprawdzone przez firmę zewnętrzną wdrożenie izolacji opartej na hipernadzorcy.
- [C-1-3] MUSI przeprowadzić uwierzytelnianie ekranu blokady w izolowanym środowisku wykonawczym i tylko wtedy, gdy wszystko się uda, zezwolić na używanie kluczy powiązanych z uwierzytelnianiem. Dane logowania na ekranie blokady MUSZĄ być przechowywane w sposób umożliwiający uwierzytelnianie przy zablokowanym ekranie tylko w przypadku izolowanego środowiska wykonawczego. Nadrzędny projekt Android Open Source udostępnia platformę Gatekeeper Hardware Abstraction Layer (HAL) i Trusty, które można wykorzystać w celu spełnienia tego wymogu.
- [C-1-4] MUSI obsługiwać atest klucza, gdy klucz podpisywania atestu jest chroniony przez bezpieczny sprzęt, a podpisywanie jest wykonywane na bezpiecznym sprzęcie. Klucze podpisywania atestu MUSZĄ być udostępniane przez wystarczającą liczbę urządzeń, aby nie można było ich używać jako identyfikatorów urządzeń. Jednym ze sposobów spełnienia tego wymogu jest udostępnianie tego samego klucza atestu,chyba że zostanie wyprodukowanych co najmniej 100 tys. jednostek danego kodu SKU. Jeśli wyprodukowany zostanie więcej niż 100 tys. jednostek SKU, dla każdej z nich może zostać użyty inny klucz.
Pamiętaj, że jeśli implementacja urządzenia została już wprowadzona we wcześniejszej wersji Androida, urządzenie zostanie zwolnione z obowiązku posiadania sprzętowego magazynu kluczy, chyba że zadeklaruje funkcję android.hardware.fingerprint
, która wymaga takiego magazynu.
9.11.1. Bezpieczny ekran blokady
Jeśli implementacje urządzeń mają bezpieczny ekran blokady i zawierają co najmniej jednego agenta zaufania, który implementuje systemowy interfejs API TrustAgentService
, następuje wtedy wykonanie tych czynności:
- [C-1-1] MUSI wskazywać użytkownika w interfejsie Ustawienia i Ekran blokady w sytuacjach, gdy automatyczna blokada ekranu jest odroczona lub blokada ekranu może zostać odblokowana przez agenta zaufania. System AOSP spełnia to wymaganie, wyświetlając opis tekstowy w menu „Ustawienia Automatycznie blokuj” i „Przycisk zasilania natychmiast blokuje ustawienia” oraz wyróżniającą ikonę na ekranie blokady.
- [C-1-2] MUSI respektować i w pełni wdrożyć wszystkie interfejsy API agenta zaufania w klasie
DevicePolicyManager
, takie jak stałaKEYGUARD_DISABLE_TRUST_AGENTS
. - [C-1-3] NIE MOŻE w pełni wdrażać funkcji
TrustAgentService.addEscrowToken()
na urządzeniu używanym jako główne urządzenie osobiste (np. podręczne), ale MOŻE w pełni wdrożyć tę funkcję w typowych implementacjach urządzeń. - [C-1-4] MUSI zaszyfrować tokeny dodane przez
TrustAgentService.addEscrowToken()
, zanim zapiszesz je na urządzeniu. - [C-1-5] NIE MOŻE przechowywać klucza szyfrowania na urządzeniu.
- [C-1-6] MUSI poinformować użytkownika o wpływie na bezpieczeństwo przed włączeniem tokena depozytowego na potrzeby odszyfrowywania magazynu danych.
Jeśli implementacje urządzeń dodają lub zmieniają metody uwierzytelniania w celu odblokowywania ekranu, wtedy taka metoda uwierzytelniania może być traktowana jako bezpieczny sposób blokowania ekranu:
- [C-2-1] MUSI być metodą uwierzytelniania użytkownika opisaną w artykule Wymaganie uwierzytelniania użytkowników przed użyciem klucza.
- [C-2-2] MUSI odblokowywać wszystkie klucze aplikacji innej firmy, aby można było z niej korzystać, gdy użytkownik odblokowuje bezpieczny ekran blokady. Na przykład w przypadku aplikacji innej firmy MUSZĄ być dostępne wszystkie klucze za pomocą odpowiednich interfejsów API, takich jak
createConfirmDeviceCredentialIntent
isetUserAuthenticationRequired
.
Jeśli implementacje urządzeń dodają lub zmieniają metody uwierzytelniania w celu odblokowywania ekranu blokady, jeśli są one oparte na znanym obiekcie tajnym, to aby taka metoda uwierzytelniania została uznana za bezpieczny sposób blokowania ekranu:
- [C-3-1] Entropia najkrótszej dozwolonej długości danych wejściowych MUSI być większa niż 10 bitów.
- [C-3-2] Maksymalna entropia wszystkich możliwych danych wejściowych MUSI być większa niż 18 bitów.
- [C-3-3] NIE MOŻE zastępować żadnej z istniejących metod uwierzytelniania (kodu PIN,wzoru, hasła) wdrożonych i przekazanych w AOSP.
- [C-3-4] MUSI być wyłączona, gdy aplikacja kontrolera zasad urządzeń (DPC) ustawiła zasady jakości haseł za pomocą metody
DevicePolicyManager.setPasswordQuality()
o bardziej restrykcyjnej stałej jakości niżPASSWORD_QUALITY_SOMETHING
.
Jeśli implementacje urządzeń dodają lub zmieniają metody uwierzytelniania w celu odblokowywania ekranu blokady, jeśli są oparte na tokenie fizycznym lub lokalizacji, to aby taka metoda uwierzytelniania mogła być traktowana jako bezpieczny sposób blokowania ekranu, musi:
- [C-4-1] MUSI mieć mechanizm zastępczy umożliwiający użycie jednej z podstawowych metod uwierzytelniania, które są oparte na znanym obiekcie tajnym i spełniają wymagania traktowania jako bezpiecznego ekranu blokady.
- [C-4-2] MUSI być wyłączona i zezwalać głównemu uwierzytelnianiemu na odblokowanie ekranu tylko wtedy, gdy aplikacja kontrolera zasad dotyczących urządzeń ustawiła zasadę za pomocą metody
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS)
lub metodyDevicePolicyManager.setPasswordQuality()
o bardziej restrykcyjnej stałej jakości niżPASSWORD_QUALITY_UNSPECIFIED
. - [C-4-3] Użytkownik MUSI otrzymywać potwierdzenie podstawowego uwierzytelniania (np. kodu PIN, wzoru, hasła) co najmniej raz na 72 godziny.
Jeśli implementacje urządzeń dodają lub zmieniają metody uwierzytelniania w celu odblokowywania ekranu blokady na podstawie danych biometrycznych, to aby ta metoda uwierzytelniania mogła być traktowana jako bezpieczny sposób blokowania ekranu, muszą one:
- [C-5-1] MUSI mieć mechanizm zastępczy umożliwiający użycie jednej z podstawowych metod uwierzytelniania, które są oparte na znanym obiekcie tajnym i spełniają wymagania traktowania jako bezpiecznego ekranu blokady.
- [C-5-2] MUSI być wyłączona i zezwolić na odblokowywanie ekranu przy użyciu podstawowego uwierzytelniania tylko wtedy, gdy aplikacja kontrolera zasad urządzeń (DPC) ustawi zasadę funkcji keguard, wywołując metodę
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_FINGERPRINT)
. - [C-5-3] MUSI mieć współczynnik fałszywych akceptacji, który jest równy lub wyższy niż wartość wymagana w przypadku czytnika linii papilarnych zgodnie z opisem w sekcji 7.3.10, lub w inny sposób MUSI być wyłączona i zezwalać podstawowe uwierzytelnianie na odblokowanie ekranu tylko wtedy, gdy aplikacja kontrolera zasad dotyczących urządzeń (DPC) ustawi zasady jakości haseł za pomocą metody
DevicePolicyManager.setPasswordQuality()
o bardziej restrykcyjnej stałej jakości niżPASSWORD_QUALITY_BIOMETRIC_WEAK
. - [SR] Zdecydowanie ZALECANE jest, aby współczynniki akceptacji i podszywanie się pod inne osoby były równe lub wyższe niż wymagane przez czytnik linii papilarnych zgodnie z opisem w artykule 7.3.10.
Jeśli współczynniki akceptacji i podszywanie się pod inne osoby nie są równe lub wyższe niż wymagane w przypadku czytnika linii papilarnych zgodnie z opisem w sekcji 7.3.10, a aplikacja kontrolera zasad urządzeń (DPC) ustawiła zasady jakości haseł za pomocą metody DevicePolicyManager.setPasswordQuality()
z bardziej restrykcyjną stałą jakością niż PASSWORD_QUALITY_BIOMETRIC_WEAK
, a następnie:
- [C-6-1] MUSI wyłączyć te metody biometryczne i odblokowywać ekran tylko przy użyciu podstawowego uwierzytelniania.
- [C-6-2] MUSI wymagać od użytkownika przeprowadzenia podstawowego uwierzytelniania (np. kodu PIN, wzoru, hasła) co najmniej raz na 72 godziny.
Jeśli implementacje urządzeń dodają lub zmieniają metody uwierzytelniania na potrzeby odblokowywania ekranu blokady i takie uwierzytelnianie jest używane do odblokowywania blokady ekranu, ale nie jest traktowane jako bezpieczny ekran blokady, wtedy:
- [C-7-1] MUSI zwracać wartość
false
w przypadku metodKeyguardManager.isKeyguardSecure()
iKeyguardManager.isDeviceSecure()
. - [C-7-2] MUSI być wyłączona, gdy aplikacja kontrolera zasad urządzeń (DPC) ustawiła zasady jakości haseł za pomocą metody
DevicePolicyManager.setPasswordQuality()
o bardziej restrykcyjnej stałej jakości niżPASSWORD_QUALITY_UNSPECIFIED
. - [C-7-3] NIE MOŻE resetować liczników czasu wygaśnięcia haseł ustawionych przez
DevicePolicyManager.setPasswordExpirationTimeout()
. - [C-7-4] NIE MOŻE uwierzytelniać dostępu do magazynów kluczy, jeśli aplikacja wywołała
KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)
).
9.12. Usuwanie danych
Wszystkie implementacje na urządzeniach:
- [C-0-1] MUSI udostępniać użytkownikom mechanizm przywracania danych fabrycznych.
- [C-0-2] MUSI usunąć wszystkie dane użytkowników. Oznacza to, że wszystkie dane oprócz tych:
- Obraz systemu
- wszystkie pliki systemu operacyjnego wymagane przez obraz systemu,
- [C-0-3] MUSI usuwać dane w sposób zgodny z odpowiednimi standardami branżowymi, takimi jak NIST SP800-88.
- [C-0-4] MUSI aktywować powyższy proces „przywracania danych fabrycznych” po wywołaniu interfejsu API
DevicePolicyManager.wipeData()
przez aplikację kontrolera zasad dotyczących urządzeń głównego użytkownika. - MOŻE udostępnić opcję szybkiego czyszczenia danych, która przeprowadza tylko logiczne usuwanie danych.
9.13. Tryb bezpiecznego rozruchu
Android zapewnia tryb bezpiecznego rozruchu, który umożliwia użytkownikom uruchamianie urządzenia w trybie, w którym mogą działać tylko wstępnie zainstalowane aplikacje systemowe, a wszystkie aplikacje innych firm są wyłączone. Ten tryb, nazywany „trybem bezpiecznego rozruchu”, umożliwia użytkownikowi odinstalowanie potencjalnie szkodliwych aplikacji innych firm.
Implementacje urządzeń:
- [SR] Zdecydowanie ZALECANE jest wdrożenie trybu bezpiecznego rozruchu.
Jeśli implementacje urządzeń mają włączony tryb bezpiecznego rozruchu:
-
[C-1-1] MUSI umożliwiać użytkownikowi przejście w tryb bezpiecznego rozruchu w sposób uniemożliwiający jego przerwanie w aplikacjach innych firm zainstalowanych na urządzeniu, chyba że aplikacja innej firmy jest kontrolerem zasad dotyczących urządzeń i ma ustawioną flagę
UserManager.DISALLOW_SAFE_BOOT
na wartość true (prawda). -
[C-1-2] MUSI umożliwiać użytkownikowi odinstalowanie aplikacji innych firm w trybie awaryjnym.
-
Trzeba udostępnić użytkownikowi opcję włączenia trybu bezpiecznego rozruchu z menu rozruchu przy użyciu przepływu pracy innego niż zwykły rozruch.
9.14. Izolacja systemu samochodowego
Oczekuje się, że urządzenia z Androidem Automotive będą wymieniać dane z najważniejszymi podsystemami w pojeździe, wykorzystując interfejs HAL pojazdu do wysyłania i odbierania wiadomości w sieciach pojazdu, takich jak magistrala CAN.
Wymianę danych można zabezpieczyć, implementując funkcje zabezpieczeń poniżej warstw platformy Android, zapobiegając złośliwej lub niezamierzonej interakcji z tymi podsystemami.
10. Testowanie zgodności oprogramowania
Implementacje na urządzeniach MUSZĄ przejść wszystkie testy opisane w tej sekcji.
Należy jednak pamiętać, że żaden pakiet testów oprogramowania nie jest w pełni wszechstronny. Z tego powodu Zdecydowanie ZALECANE jest wprowadzenie jak najmniejszej liczby zmian w plikach referencyjnych i preferowanej implementacji Androida dostępnej w ramach projektu Android Open Source Project. Zminimalizuje to ryzyko wprowadzenia błędów, które powodują niezgodności, które wymagają przerobienia i potencjalnych aktualizacji urządzenia.
10.1. Compatibility Test Suite
Implementacje urządzeń MUSZĄ przejść test Android Compatibility Test Suite (CTS) dostępny w projekcie Android Open Source przy użyciu gotowego oprogramowania do wysyłki. Dodatkowo osoby implementujące urządzenia POWINNY W jak największym stopniu korzystać z implementacji referencyjnej w drzewie Android Open Source i MUSZĄ zadbać o zgodność w przypadku niejasności w interfejsie CTS oraz w przypadku wszelkich zmian implementacji części referencyjnego kodu źródłowego.
Narzędzie CTS zostało zaprojektowane tak, aby działać na prawdziwym urządzeniu. Podobnie jak w przypadku każdego oprogramowania, narzędzie CTS może zawierać błędy. Pakiet CTS będzie prowadzony niezależnie od tej definicji zgodności, a dla Androida 8.1 może zostać wydanych kilka wersji. Implementacje na urządzeniu MUSZĄ przekazywać najnowszą wersję CTS dostępną w chwili zakończenia działania oprogramowania urządzenia.
10.2. Weryfikator CTS
Implementacje na urządzeniach MUSZĄ prawidłowo wykonywać wszystkie odpowiednie przypadki weryfikatora CTS. CTS Verifier wchodzi w skład pakietu Compatibility Test Suite i może być uruchamiany przez człowieka w celu testowania funkcji, których zautomatyzowany system nie może przetestować, na przykład prawidłowego działania kamery i czujników.
Weryfikator CTS wykonuje testy obejmujące różne rodzaje sprzętu, w tym sprzęt opcjonalny. Implementacje urządzeń MUSZĄ przejść wszystkie testy posiadanego sprzętu. Jeśli na przykład urządzenie ma akcelerometr, MUSI prawidłowo wykonać test akcelerometru w weryfikatorze CTS. Przypadki testowe funkcji oznaczonych w tym dokumencie definicji zgodności jako opcjonalne MOGĄ zostać pominięte lub pominięte.
Na każdym urządzeniu i każdej kompilacji MUSI uruchomić się weryfikator CTS zgodnie z opisem powyżej. Ponieważ jednak wiele kompilacji jest bardzo podobnych, narzędzia implementujące na urządzeniach nie powinny jawnie uruchamiać weryfikatora CTS w kompilacjach, które różnią się tylko w prosty sposób. Chodzi w szczególności o implementacje na urządzeniach, które różnią się od tych, które przeszły weryfikację przez weryfikatora CTS tylko przez zestaw uwzględnionych języków, oznaczenia marki itp. MOGĄ pominąć test weryfikatora CTS.
11. Oprogramowanie do aktualizacji
Implementacje na urządzeniu MUSZĄ zawierać mechanizm zastępujący całe oprogramowanie systemowe. Mechanizm nie musi przeprowadzać uaktualnień w czasie rzeczywistym – tzn. może być wymagane ponowne uruchomienie urządzenia.
Można użyć dowolnej metody, pod warunkiem że może ona zastąpić całe oprogramowanie zainstalowane fabrycznie na urządzeniu. To wymaganie może zostać spełnione na przykład przez:
- Pobieranie typu „bezprzewodowe (OTA)” z aktualizacją offline po ponownym uruchomieniu.
- Opcja „w tetheringu” jest aktualizowana przez USB z komputera hosta.
- „Tryb offline” aktualizuje się po ponownym uruchomieniu i aktualizacji z pliku w pamięci wymiennej.
Jeśli jednak implementacja urządzenia obejmuje obsługę połączenia danych bez pomiaru użycia danych, np. 802.11 lub profilu Bluetooth z numerem PAN (sieć osobista), MUSI obsługiwać pobieranie OTA z aktualizacją offline po ponownym uruchomieniu.
Używany mechanizm aktualizacji MUSI obsługiwać aktualizacje bez czyszczenia danych użytkownika. Oznacza to, że mechanizm aktualizacji MUSI zachować prywatne dane aplikacji i dane udostępnione przez aplikację. Pamiętaj, że wcześniejsze oprogramowanie Android ma mechanizm aktualizacji, który spełnia to wymaganie.
W przypadku implementacji na urządzeniach z Androidem 6.0 i nowszym mechanizm aktualizacji POWINIEN obsługiwać sprawdzanie, czy obraz systemu jest binarnie identyczny z oczekiwanym wynikiem po aktualizacji OTA. To wymaganie spełnia oparta na blokowych implementacja OTA w źródłowym projekcie Android Open Source, dodana od Androida 5.1.
Implementacje na urządzeniach MUSZĄ też obsługiwać aktualizacje systemu A/B. AOSP implementuje tę funkcję przy użyciu interfejsu HAL kontroli rozruchu.
Jeśli po wprowadzeniu zmian na urządzeniu zostanie wykryty błąd, ale w rozsądnym okresie istnienia usługi, co zostanie określone po konsultacji z zespołem ds. zgodności z Androidem w celu zmiany zgodności aplikacji innych firm, osoba implementująca urządzenie MUSI poprawić błąd, korzystając z dostępnej aktualizacji oprogramowania, którą można zastosować zgodnie z opisanym mechanizmem.
Android zawiera funkcje, które umożliwiają aplikacji Właściciel urządzenia (jeśli jest zainstalowana) na kontrolowanie instalowania aktualizacji systemu. Aby to ułatwić, podsystem do aktualizacji systemu urządzeń zgłaszających plik android.software.device_admin MUSI zaimplementować działanie opisane w klasie SystemUpdatePolicy.
12. Historia zmian dokumentu
Podsumowanie zmian w definicji zgodności w tej wersji:
Aby zobaczyć podsumowanie zmian w sekcjach dotyczących poszczególnych osób:
- Wprowadzenie
- Typy urządzeń
- Oprogramowanie
- Pakiety aplikacji
- Multimedia
- Narzędzia i opcje dla programistów
- Zgodność sprzętu
- Wydajność i moc
- Model zabezpieczeń
- Testowanie zgodności oprogramowania
- Oprogramowanie, które można zaktualizować
- Historia zmian dokumentu
- Skontaktuj się z nami
12.1 Wskazówki dotyczące wyświetlania historii zmian
Zmiany są oznaczane w ten sposób:
-
CDD
Istotne zmiany w wymaganiach dotyczących zgodności. -
Dokumenty
Zmiany kosmetyczne lub związane z tworzeniem.
Aby to zrobić, dołącz do adresów URL dziennika zmian parametry adresu URL pretty=full
i no-merges
.
13. Skontaktuj się z nami
Możesz dołączyć do forum dotyczącego zgodności z Androidem i poprosić o wyjaśnienia lub zgłosić problemy, które Twoim zdaniem nie obejmują dokumentu.