1. Einführung
In diesem Dokument sind die Anforderungen aufgeführt, die erfüllt sein müssen, damit Geräte mit Android 10 kompatibel sind.
Die Verwendung von „MUSS“, „DARF NICHT“, „ERFORDERLICH“, „WIRD“, „WIRD NICHT“, „SOLLTE“, „SOLLTE NICHT“, „EMPFOHLEN“, „KÖNNEN“ und „OPTIONAL“ gemäß dem in RFC 2119 definierten IETF-Standard verwendet werden.
In diesem Dokument ist ein „Geräteimplementierung“ oder „Implementierer“ eine Person oder Organisation, die eine Hardware-/Softwarelösung für Android 10 entwickelt. Eine „Geräteimplementierung“ oder „Implementierung“ ist die so entwickelte Hardware-/Softwarelösung.
Geräteimplementierungen, die mit Android 10 kompatibel sind, MÜSSEN den Anforderungen dieser Kompatibilitätsdefinition entsprechen, einschließlich aller Dokumente, auf die sie Bezug nehmen.
Ist diese Definition oder die in Abschnitt 10 beschriebenen Softwaretests nicht eindeutig, nicht eindeutig oder unvollständig, liegt es in der Verantwortung des implementierten Geräts, die Kompatibilität mit bestehenden Implementierungen sicherzustellen.
Aus diesem Grund ist das Android Open Source Project sowohl die Referenz als auch die bevorzugte Implementierung von Android. Implementierungen von Geräten wird dringend empfohlen, ihre Implementierungen so weit wie möglich auf dem vorgelagerten Quellcode des Android Open Source Project zu basieren. Zwar können einige Komponenten hypothetisch durch alternative Implementierungen ersetzt werden, es wird jedoch UNBEDINGT EMPFOHLEN, diese Vorgehensweise nicht zu befolgen, da das Bestehen der Softwaretests erheblich schwieriger wird. Es liegt in der Verantwortung des Implementierers, die vollständige Verhaltenskompatibilität mit der Android-Standardimplementierung sicherzustellen, einschließlich der Compatibility Test Suite und darüber hinaus. Beachten Sie schließlich, dass bestimmte Ersatzkomponenten und Änderungen ausdrücklich durch dieses Dokument untersagt werden.
Viele der in diesem Dokument verlinkten Ressourcen stammen direkt oder indirekt vom Android SDK und sind funktional mit den Informationen in der Dokumentation dieses SDK identisch. In Fällen, in denen diese Kompatibilitätsdefinition oder die Kompatibilitätstest-Suite nicht mit der SDK-Dokumentation übereinstimmt, wird die SDK-Dokumentation als maßgeblich betrachtet. Alle technischen Details, die in den verlinkten Ressourcen in diesem Dokument enthalten sind, werden als Teil dieser Kompatibilitätsdefinition angesehen.
1.1 Dokumentstruktur
1.1.1 Anforderungen nach Gerätetyp
Abschnitt 2 enthält alle Anforderungen, die für einen bestimmten Gerätetyp gelten. Jeder Unterabschnitt in Abschnitt 2 bezieht sich auf einen bestimmten Gerätetyp.
Alle anderen Anforderungen, die allgemein für alle Implementierungen von Android-Geräten gelten, sind in den Abschnitten nach Abschnitt 2 aufgeführt. Diese Anforderungen werden als „zentrale Anforderungen“ bezeichnet. in diesem Dokument.
1.1.2 Anforderungs-ID
Für MUSS-Anforderungen wird eine Anforderungs-ID zugewiesen.
- Die ID wird nur für MUSS-Anforderungen zugewiesen.
- Anforderungen werden als [SR] gekennzeichnet, aber keine ID zugewiesen.
- Die ID besteht aus folgenden Komponenten : Gerätetyp-ID - Bedingungs-ID - Anforderungs-ID (z.B. C-0-1).
Jede ID ist wie folgt definiert:
- Gerätetyp-ID (weitere Informationen unter 2. Gerätetypen)
<ph type="x-smartling-placeholder">
- </ph>
- C: Kern (Anforderungen, die für alle Implementierungen von Android-Geräten gelten)
- H: Android-Handheld-Gerät
- T: Android TV-Gerät
- A: Android Automotive-Implementierung
- W: Android Watch-Implementierung
- Tab: Android-Tablet-Implementierung
- Bedingungs-ID
<ph type="x-smartling-placeholder">
- </ph>
- Wenn die Anforderung unbedingt erforderlich ist, wird diese ID auf 0 gesetzt.
- Wenn die Anforderung bedingt ist, wird für die erste Bedingung „1“ zugewiesen und die Zahl wird im selben Bereich und für denselben Gerätetyp um 1 erhöht.
- Anforderungs-ID
<ph type="x-smartling-placeholder">
- </ph>
- Diese ID beginnt bei 1 und wird im selben Abschnitt und derselben Bedingung um 1 erhöht.
1.1.3 Anforderungs-ID in Abschnitt 2
Die Anforderungs-ID in Abschnitt 2 beginnt mit der entsprechenden Abschnitts-ID, gefolgt von der oben beschriebenen Anforderungs-ID.
- Die ID in Abschnitt 2 besteht aus folgenden Komponenten : Abschnitts-ID / Gerätetyp-ID - Bedingungs-ID - Anforderungs-ID (z.B. 7.4.3/A-0-1).
2. Gerätetypen
Das Open-Source-Projekt von Android stellt einen Software-Stack bereit, der für eine Vielzahl von Gerätetypen und Formfaktoren verwendet werden kann. Es gibt jedoch einige Gerätetypen, die sich relativ gut etabliert haben.
In diesem Abschnitt werden diese Gerätetypen sowie zusätzliche Anforderungen und Empfehlungen beschrieben, die für jeden Gerätetyp gelten.
Alle Android-Geräteimplementierungen, die zu keinem der beschriebenen Gerätetypen passen, MÜSSEN trotzdem alle Anforderungen in den anderen Abschnitten dieser Kompatibilitätsdefinition erfüllen.
2.1 Gerätekonfigurationen
Die wichtigsten Unterschiede bei der Hardwarekonfiguration je nach Gerätetyp finden Sie in den gerätespezifischen Anforderungen in diesem Abschnitt.
2.2. Anforderungen an Handhelds
Ein Android-Handheld-Gerät bezieht sich auf eine Android-Geräteimplementierung, die normalerweise verwendet wird, indem das Gerät in der Hand gehalten wird, z. B. ein MP3-Player, ein Smartphone oder ein Tablet.
Implementierungen von Android-Geräten werden als Handhelds eingestuft, wenn sie die folgenden Kriterien erfüllen:
- eine Stromquelle nutzen, die Mobilität ermöglicht, z. B. einen Akku.
- Das Display hat eine physische Diagonale von 2,5 bis 8 Zoll.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts gelten speziell für Implementierungen von Android-Handheld-Geräten.
2.2.1. Hardware
Implementierungen von Handheld-Geräten:
- [7.1.1.1/H-0-1] MUSS mindestens ein mit Android kompatibles Display mit einer physischen diagonalen Größe von mindestens 2,5 Zoll haben und jeder mit Android kompatible Bildschirm MUSS alle in diesem Dokument beschriebenen Anforderungen erfüllen.
- [7.1.1.3/H-SR] werden ausdrücklich empfohlen, Nutzern die Möglichkeit zu bieten, die Displaygröße (Bildschirmdichte) zu ändern.
Wenn Implementierungen von Handheld-Geräten eine Unterstützung für Displays mit hoher Dynamik über Configuration.isScreenHdr()
versprechen , geschieht Folgendes:
- [7.1.4.5/H-1-1] MÜSSEN die Erweiterungen
EGL_EXT_gl_colorspace_bt2020_pq
,EGL_EXT_surface_SMPTE2086_metadata
,EGL_EXT_surface_CTA861_3_metadata
,VK_EXT_swapchain_colorspace
undVK_EXT_hdr_metadata
unterstützen.
Implementierungen von Handheld-Geräten:
- [7.1.5/H-0-1] MÜSSEN Unterstützung für den Kompatibilitätsmodus für ältere Apps enthalten, wie er durch den vorgelagerten Open-Source-Code von Android implementiert wird. Das heißt, Geräteimplementierungen DÜRFEN NICHT die Trigger oder Grenzwerte ändern, bei denen der Kompatibilitätsmodus aktiviert ist, und DÜRFEN NICHT das Verhalten des Kompatibilitätsmodus selbst ändern.
- [7.2.1/H-0-1] MUSS Unterstützung für IME-Anwendungen (Input Method Editor) von Drittanbietern enthalten.
- [7.2.3/H-0-3] MUSS die Home-Funktion auf allen mit Android kompatiblen Displays bereitstellen, auf denen der Startbildschirm angezeigt wird.
- [7.2.3/H-0-4] MÜSSEN die Funktion „Zurück“ auf allen mit Android kompatiblen Displays und die Funktion „Letzte Apps“ auf mindestens einem der mit Android kompatiblen Displays bereitstellen.
- [7.2.3/H-0-2] MÜSSEN sowohl das normale als auch das lange Drücken der Funktion „Zurück“ (
KEYCODE_BACK
) an die Anwendung im Vordergrund senden. Diese Ereignisse DÜRFEN NICHT vom System verarbeitet werden und können außerhalb des Android-Geräts ausgelöst werden, z.B. über eine mit dem Android-Gerät verbundene externe Hardwaretastatur. - [7.2.4/H-0-1] MUSS die Touchscreen-Eingabe unterstützen.
- [7.2.4/H-SR] wird dringend empfohlen, die vom Nutzer ausgewählte Assistent-App zu starten, also die App, die VoiceInteractionService implementiert, oder eine Aktivität, die
ACTION_ASSIST
beim langen Drücken vonKEYCODE_MEDIA_PLAY_PAUSE
oderKEYCODE_HEADSETHOOK
verarbeitet, wenn diese Ereignisse durch langes Drücken nicht durch die Vordergrundaktivität verarbeitet werden. - [7.3.1/H-SR] wird dringend empfohlen, einen dreiachsigen Beschleunigungsmesser zu verwenden.
Wenn Handheld-Geräte einen dreiachsigen Beschleunigungsmesser enthalten, gilt Folgendes:
- [7.3.1/H-1-1] MÜSSEN in der Lage sein, Ereignisse bis zu einer Frequenz von mindestens 100 Hz zu melden.
Wenn Handheld-Geräte einen GPS-/GNSS-Empfänger enthalten und die Funktion über das Funktions-Flag android.hardware.location.gps
an Anwendungen melden, geschieht Folgendes:
- [7.3.3/H-2-1] MÜSSEN GNSS-Messungen melden, sobald sie gefunden werden, auch wenn ein über GPS/GNSS berechneter Standort noch nicht gemeldet wurde.
- [7.3.3/H-2-2] MÜSSEN GNSS-Pseudobereiche und Pseudorangeraten melden, die bei freiem Himmel nach der Bestimmung des Standorts ausreichen, wenn sie stehen oder sich mit einer Beschleunigung von weniger als 0,2 Metern pro Sekunde im Quadrat der Beschleunigung ausreichen, um eine Position innerhalb von 20 Metern und eine Geschwindigkeit innerhalb von 0,2% pro Sekunde (mindestens 9 Meter) zu berechnen.
Wenn Handheld-Geräte ein 3-Achsen-Gyroskop enthalten, gilt Folgendes:
- [7.3.4/H-3-1] MÜSSEN Ereignisse bis zu einer Frequenz von mindestens 100 Hz melden können.
- [7.3.4/H-3-2] MÜSSEN in der Lage sein, Ausrichtungsänderungen von bis zu 1.000 Grad pro Sekunde zu messen.
Implementierungen von Handheld-Geräten, die einen Sprachanruf tätigen und einen anderen Wert als PHONE_TYPE_NONE
in getPhoneType
anzeigen können:
- [7.3.8/H] SOLLTEN einen Näherungssensor enthalten.
Implementierungen von Handheld-Geräten:
- [7.3.11/H-SR] WIRDEN EMPFOHLEN, einen Positionssensor mit 6 Freiheitsgraden zu unterstützen.
- [7.4.3/H] SOLLTEN Bluetooth und Bluetooth LE unterstützen.
Wenn Handheld-Geräte eine getaktete Verbindung enthalten, gilt Folgendes:
- [7.4.7/H-1-1] MUSS den Datensparmodus bereitstellen.
Wenn Implementierungen von Handheld-Geräten ein logisches Kameragerät enthalten, das Funktionen mithilfe von CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
auflistet, geschieht Folgendes:
- [7.5.4/H-1-1] MUSS standardmäßig ein normales Sichtfeld haben und zwischen 50 und 90 Grad liegen.
Implementierungen von Handheld-Geräten:
- [7.6.1/H-0-1] MUSS mindestens 4 GB nichtflüchtigen Speicher für private Anwendungsdaten (auch als „/data“-Partition) verfügbar haben.
- [7.6.1/H-0-2] MÜSSEN „true“ für
ActivityManager.isLowRamDevice()
zurückgeben, wenn weniger als 1 GB Arbeitsspeicher für den Kernel und Userspace verfügbar ist.
Wenn Implementierungen von Handheld-Geräten nur eine 32-Bit-ABI unterstützen:
-
[7.6.1/H-1-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 416 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis zu qHD (z.B. FWVGA) verwendet.
-
[7.6.1/H-2-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 592 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis HD+ verwendet (z.B. HD, WSVGA).
-
[7.6.1/H-3-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 896 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis zu FHD (z.B. WSXGA+) verwendet.
-
[7.6.1/H-4-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 1344 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis zu QHD (z.B. QWXGA) verwendet.
Wenn Implementierungen von Handheld-Geräten die Unterstützung von 64-Bit-ABIs (mit oder ohne 32-Bit-ABI) deklarieren:
-
[7.6.1/H-5-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 816 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis zu qHD (z.B. FWVGA) verwendet.
-
[7.6.1/H-6-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 944 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis HD+ verwendet (z.B. HD, WSVGA).
-
[7.6.1/H-7-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 1.280 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis zu FHD (z. B. WSXGA+) verwendet.
-
[7.6.1/H-8-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 1.824 MB betragen, wenn die Standardanzeige Framebuffer-Auflösungen bis zu QHD (z. B. QWXGA) verwendet.
Beachten Sie, dass der für Kernel und Userspace verfügbare Arbeitsspeicher bezieht sich auf den Arbeitsspeicher, der zusätzlich zu jeglichen bereits für Hardwarekomponenten wie Radio, Video usw. vorgesehenen Arbeitsspeicher bereitgestellt wird, die nicht der Kontrolle des Kernels auf Geräteimplementierungen unterliegen.
Wenn Handheld-Geräteimplementierungen weniger als oder gleich 1 GB Arbeitsspeicher für den Kernel und Userspace umfassen, geschieht Folgendes:
- [7.6.1/H-9-1] MUSS das Funktions-Flag
android.hardware.ram.low
deklarieren. - [7.6.1/H-9-2] MUSS mindestens 1,1 GB nichtflüchtigen Speicher für private Anwendungsdaten haben (auch als „/data“-Partition bezeichnet).
Wenn Implementierungen von Handheld-Geräten mehr als 1 GB Arbeitsspeicher für den Kernel und Userspace umfassen, geschieht Folgendes:
- [7.6.1/H-10-1] MUSS mindestens 4 GB nichtflüchtigen Speicher für private Anwendungsdaten (auch als „/data“-Partition) verfügbar haben.
- SOLLTEN das Funktions-Flag
android.hardware.ram.normal
deklarieren.
Implementierungen von Handheld-Geräten:
- [7.6.2/H-0-1] DARF KEINEN freigegebenen Speicher für Anwendungen mit weniger als 1 GiB bereitstellen.
- [7.7.1/H] SOLLTEN einen USB-Anschluss haben, der den Peripheriemodus unterstützt.
Wenn Handheld-Geräte einen USB-Port enthalten, der den Peripheriemodus unterstützt, gilt Folgendes:
- [7.7.1/H-1-1] MUSS die Android Open Accessory (AOA) API implementieren.
Wenn Handheld-Geräte einen USB-Port enthalten, der den Hostmodus unterstützt, gilt Folgendes:
- [7.7.2/H-1-1] MÜSSEN die USB-Audioklasse wie in der Android SDK-Dokumentation beschrieben implementieren.
Implementierungen von Handheld-Geräten:
- [7.8.1/H-0-1] MUSS ein Mikrofon enthalten.
- [7.8.2/H-0-1] MUSS einen Audioausgang haben und
android.hardware.audio.output
deklarieren.
Wenn Handheld-Implementierungen alle Leistungsanforderungen für die Unterstützung des VR-Modus erfüllen und diesen unterstützen, gilt Folgendes:
- [7.9.1/H-1-1] MUSS das Funktions-Flag
android.hardware.vr.high_performance
deklarieren. - [7.9.1/H-1-2] MUSS eine App enthalten, die
android.service.vr.VrListenerService
implementiert, die von VR-Anwendungen überandroid.app.Activity#setVrModeEnabled
aktiviert werden kann.
Wenn Implementierungen für Handheld-Geräte einen oder mehrere USB-C-Ports im Hostmodus umfassen und implementieren (USB-Audioklasse), gilt zusätzlich zu den Anforderungen in Abschnitt 7.7.2 Folgendes:
- [7.8.2.2/H-1-1] MUSS die folgende Softwarezuordnung von HID-Codes angeben:
Funktion | Zuordnungen | Kontext | Verhalten |
---|---|---|---|
A |
HID-Nutzungsseite: 0x0C HID-Nutzung: 0x0CD Kernelschlüssel: KEY_PLAYPAUSE Android-Schlüssel: KEYCODE_MEDIA_PLAY_PAUSE
|
Medienwiedergabe |
Eingang: Kurz drücken Ausgabe: Wiedergabe oder Pause |
Eingabe: Lange drücken Ausgabe: Sprachbefehl starten Senden: android.speech.action.VOICE_SEARCH_HANDS_FREE , wenn das Gerät gesperrt oder das Display ausgeschaltet ist. Andernfalls wird android.speech.RecognizerIntent.ACTION_WEB_SEARCH gesendet
|
|||
Eingehender Anruf |
Eingang: Kurz drücken Ausgabe: Anruf annehmen |
||
Eingabe: Lange drücken Ausgabe: Anruf ablehnen |
|||
Aktiver Anruf |
Eingang: Kurz drücken Ausgabe: Anruf beenden |
||
Eingabe: Lange drücken Ausgabe: Mikrofon stummschalten oder Stummschaltung aufheben |
|||
B |
HID-Nutzungsseite: 0x0C HID-Nutzung: 0x0E9 Kernelschlüssel: KEY_VOLUMEUP Android-Schlüssel: VOLUME_UP
|
Medienwiedergabe, Aktiver Anruf |
Eingang: Kurz oder lang drücken Ausgabe: erhöht die System- oder Headsetlautstärke |
C |
HID-Nutzungsseite: 0x0C HID-Nutzung: 0x0EA Kernelschlüssel: KEY_VOLUMEDOWN Android-Schlüssel: VOLUME_DOWN
|
Medienwiedergabe, Aktiver Anruf |
Eingang: Kurz oder lang drücken Ausgabe: Verringert die System- oder Headsetlautstärke |
D |
HID-Nutzungsseite: 0x0C HID-Nutzung: 0x0CF Kernelschlüssel: KEY_VOICECOMMAND Android-Schlüssel: KEYCODE_VOICE_ASSIST
|
Alle. Kann in jeder Instanz ausgelöst werden. |
Eingang: Kurz oder lang drücken Ausgabe: Sprachbefehl starten |
- [7.8.2.2/H-1-2] MÜSSEN ACTION_HEADSET_PLUG beim Einstecken eines Steckers auslösen, aber erst, nachdem die USB-Audioschnittstellen und -Endpunkte korrekt aufgelistet wurden, um den angeschlossenen Terminaltyp zu identifizieren.
Wenn der USB-Audioterminal-Typ 0x0302 erkannt wird, geschieht Folgendes:
- [7.8.2.2/H-2-1] MÜSSEN Intent ACTION_HEADSET_PLUG mit "microphone" übertragen. auf 0 gesetzt.
Wenn der USB-Audioterminal-Typ 0x0402 erkannt wird, geschieht Folgendes:
- [7.8.2.2/H-3-1] MÜSSEN Intent ACTION_HEADSET_PLUG mit "microphone" übertragen. zusätzlich auf 1 gesetzt.
Wenn die API AudioManager.getDevices() aufgerufen wird, während das USB-Peripheriegerät angeschlossen ist, geschieht Folgendes:
-
[7.8.2.2/H-4-1] MÜSSEN ein Gerät vom Typ AudioDeviceInfo.TYPE_USB_HEADSET und die Rolle „isSink()“ auflisten, wenn das Feld für den USB-Audioterminal-Typ 0x0302 lautet.
-
[7.8.2.2/H-4-2] MÜSSEN ein Gerät vom Typ AudioDeviceInfo.TYPE_USB_HEADSET und die Rolle isSink() auflisten, wenn das Feld für den USB-Audio-Terminaltyp 0x0402 lautet.
-
[7.8.2.2/H-4-3] MÜSSEN ein Gerät vom Typ AudioDeviceInfo.TYPE_USB_HEADSET und die Rolle isSource() auflisten, wenn das Feld für den USB-Audio-Terminaltyp 0x0402 lautet.
-
[7.8.2.2/H-4-4] MÜSSEN ein Gerät vom Typ AudioDeviceInfo.TYPE_USB_DEVICE und die Rolle „isSink()“ auflisten, wenn das Feld für den USB-Audioterminaltyp 0x603 lautet.
-
[7.8.2.2/H-4-5] MÜSSEN ein Gerät vom Typ AudioDeviceInfo.TYPE_USB_DEVICE und Rolle isSource() aufführen, wenn das Feld für den USB-Audio-Terminaltyp 0x604 lautet.
-
[7.8.2.2/H-4-6] MÜSSEN ein Gerät vom Typ AudioDeviceInfo.TYPE_USB_DEVICE und die Rolle isSink() aufführen, wenn das Feld für den USB-Audio-Terminaltyp 0x400 lautet.
-
[7.8.2.2/H-4-7] MÜSSEN ein Gerät vom Typ AudioDeviceInfo.TYPE_USB_DEVICE und die Rolle isSource() aufführen, wenn das Feld für den USB-Audio-Terminaltyp 0x400 lautet.
-
[7.8.2.2/H-SR] Werden beim Anschluss eines USB-C-Audio-Peripheriegeräts dringend empfohlen, um USB-Deskriptoren aufzulisten, Terminaltypen zu identifizieren und Intent-ACTION_HEADSET_PLUG in weniger als 1.000 Millisekunden zu senden.
2.2.2. Multimedia
Implementierungen von Handheld-Geräten MÜSSEN die folgenden Audiocodierungs- und -decodierungsformate unterstützen und für Anwendungen von Drittanbietern verfügbar machen:
- [5.1/H-0-1] AMR-NB
- [5.1/H-0-2] AMR-WB
- [5.1/H-0-3] MPEG-4 AAC Profile (AAC LC)
- [5.1/H-0-4] MPEG-4 HE AAC-Profil (AAC+)
- [5.1/H-0-5] AAC ELD (Optimierte AAC mit niedriger Verzögerung)
Implementierungen von Handheld-Geräten MÜSSEN die folgenden Videocodierungsformate unterstützen und für Anwendungen von Drittanbietern verfügbar machen:
Implementierungen von Handheld-Geräten MÜSSEN die folgenden Videodecodierungsformate unterstützen und für Anwendungen von Drittanbietern verfügbar machen:
2.2.3. Software
Implementierungen von Handheld-Geräten:
- [3.2.3.1/H-0-1] MUSS eine Anwendung haben, die die Intents
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
,ACTION_OPEN_DOCUMENT_TREE
undACTION_CREATE_DOCUMENT
verarbeitet, wie in den SDK-Dokumenten beschrieben, und dem Nutzer die Möglichkeit bieten, über dieDocumentsProvider
API auf die Daten des Dokumentanbieters zuzugreifen. - [3.4.1/H-0-1] MUSS eine vollständige Implementierung der
android.webkit.Webview
API bereitstellen. - [3.4.2/H-0-1] MUSS eine eigenständige Browseranwendung für das allgemeine Surfen im Web enthalten.
- [3.8.1/H-SR] wird dringend empfohlen, einen Standard-Launcher zu implementieren, der das Anpinnen von Verknüpfungen, Widgets und widgetFeatures in der App unterstützt.
- [3.8.1/H-SR] wird dringend empfohlen, einen Standard-Launcher zu implementieren, der schnellen Zugriff auf die zusätzlichen Verknüpfungen von Drittanbieter-Apps über die ShortcutManager API ermöglicht.
- [3.8.1/H-SR] wird dringend empfohlen, eine Standard-Launcher-App einzubinden, die Kennzeichen für die App-Symbole anzeigt.
- [3.8.2/H-SR] wird dringend empfohlen, App-Widgets von Drittanbietern zu unterstützen.
- [3.8.3/H-0-1] MÜSSEN Drittanbieter-Apps erlauben, Nutzer über die API-Klassen
Notification
undNotificationManager
über wichtige Ereignisse zu informieren. - [3.8.3/H-0-2] MUSS die Rich-Benachrichtigungen unterstützen.
- [3.8.3/H-0-3] MUSS Vorabbenachrichtigungen unterstützen.
- [3.8.3/H-0-4] MÜSSEN eine Benachrichtigungsleiste enthalten, mit der der Nutzer die Benachrichtigungen direkt steuern (z.B. beantworten, zurückstellen, schließen oder blockieren kann) über Aktionsschaltflächen oder das Steuerfeld, wie in der AOSP implementiert.
- [3.8.3/H-0-5] MÜSSEN die in
RemoteInput.Builder setChoices()
bereitgestellten Auswahlmöglichkeiten in der Benachrichtigungsleiste anzeigen. - [3.8.3/H-SR] WIRD DRINGEND empfohlen, die erste über
RemoteInput.Builder setChoices()
bereitgestellte Auswahl ohne zusätzliche Nutzerinteraktion in der Benachrichtigungsleiste anzuzeigen. - [3.8.3/H-SR] Es wird dringend empfohlen, alle über
RemoteInput.Builder setChoices()
bereitgestellten Optionen in der Benachrichtigungsleiste anzuzeigen, wenn der Nutzer alle Benachrichtigungen in der Benachrichtigungsleiste maximiert. - [3.8.3.1/H-SR] WIRD UNBEDINGT EMPFOHLEN, Aktionen anzuzeigen, für die
Notification.Action.Builder.setContextual
alstrue
neben den vonNotification.Remoteinput.Builder.setChoices
angezeigten Antworten festgelegt ist. - [3.8.4/H-SR] wird dringend empfohlen, auf dem Gerät einen Assistenten für die Unterstützungsaktion zu implementieren.
Wenn Implementierungen von Handheld-Geräten die Assist-Aktion unterstützen, gilt Folgendes:
- [3.8.4/H-SR] WIRD DRINGEND empfohlen, das lange Drücken der
HOME
-Taste als vorgesehene Interaktion zum Starten der Assistenten-App zu verwenden, wie in Abschnitt 7.2.3 beschrieben. MÜSSEN die vom Nutzer ausgewählte Assistent-App, also die App, in derVoiceInteractionService
implementiert ist, oder eine Aktivität, die den IntentACTION_ASSIST
verarbeitet, gestartet werden.
Wenn Implementierungen von Android-Handheld-Geräten einen Sperrbildschirm unterstützen, gilt Folgendes:
- [3.8.10/H-1-1] MÜSSEN die Sperrbildschirmbenachrichtigungen einschließlich der Media Notification Template anzeigen.
Wenn Handheld-Geräte einen sicheren Sperrbildschirm unterstützen, gilt Folgendes:
- [3.9/H-1-1] MÜSSEN alle in der Android SDK-Dokumentation definierten Richtlinien zur Geräteverwaltung implementieren.
- [3.9/H-1-2] MÜSSEN die Unterstützung verwalteter Profile mit dem Funktions-Flag „
android.software.managed_users
“ deklarieren, es sei denn, das Gerät ist so konfiguriert, dass es sich als Gerät mit wenig RAM meldet oder internen (nicht entfernbaren) Speicher als gemeinsamen Speicher zuweist.
Implementierungen von Handheld-Geräten:
- [3.10/H-0-1] MÜSSEN Bedienungshilfen von Drittanbietern unterstützen.
- [3.10/H-SR] WIRD DRINGEND empfohlen, Bedienungshilfen vorab auf dem Gerät zu laden, die mit den Bedienungshilfen des Schalterzugriffs und TalkBack (für Sprachen, die von der vorinstallierten Text-in-Sprache-Engine unterstützt werden) vergleichbar oder sogar übertreffen, wie im Open-Source-Projekt „Talkback“ enthalten.
- [3.11/H-0-1] MUSS die Installation von Drittanbieter-TTS-Engines unterstützen.
- [3.11/H-SR] wird dringend empfohlen, eine Sprachausgabe-Engine einzubinden, die die auf dem Gerät verfügbaren Sprachen unterstützt.
- [3.13/H-SR] wird dringend empfohlen, eine Komponente der Benutzeroberfläche für Schnelleinstellungen einzubinden.
Wenn in den Implementierungen von Android-Handheld-Geräten die Unterstützung von FEATURE_BLUETOOTH
oder FEATURE_WIFI
deklariert wird, geschieht Folgendes:
- [3.16/H-1-1] MUSS die Funktion zum Koppeln von Begleitgeräten unterstützen.
Wenn die Navigationsfunktion als bewegungsbasierte Aktion auf dem Bildschirm bereitgestellt wird:
- [7.2.3/H] Der Bereich für die Bewegungserkennung der Funktion „Zuhause“ SOLLTE am unteren Displayrand nicht höher als 32 dp sein.
Wenn Handheld-Geräte eine Navigationsfunktion als Touch-Geste am linken und rechten Bildschirmrand bieten:
- [7.2.3/H-0-1] Der Touch-Gestenbereich der Navigationsfunktion MUSS auf jeder Seite kleiner als 40 dp sein. Der Touch-Gestenbereich sollte standardmäßig eine Breite von 24 dp haben.
2.2.4 Leistung und Leistung
- [8.1/H-0-1] Konsistente Framelatenz. Inkonsistente Frame-Latenz oder Verzögerung beim Rendern von Frames DÜRFEN NICHT häufiger als 5 Frames pro Sekunde auftreten und SOLLTEN unter einem Frame in einer Sekunde liegen.
- [8.1/H-0-2] Latenz der Benutzeroberfläche. Geräteimplementierungen MÜSSEN für eine geringe Latenz sorgen, indem in einer Liste mit 10.000 Listeneinträgen gemäß der Definition der Android Compatibility Test Suite (CTS) in weniger als 36 Sekunden gescrollt wird.
- [8.1/H-0-3] Aufgabenwechsel. Wenn mehrere Anwendungen gestartet wurden, MUSS der Neustart einer bereits laufenden Anwendung nach dem Start weniger als eine Sekunde dauern.
Implementierungen von Handheld-Geräten:
- [8.2/H-0-1] MUSS eine sequentielle Schreibleistung von mindestens 5 MB/s gewährleisten.
- [8.2/H-0-2] MUSS eine zufällige Schreibleistung von mindestens 0,5 MB/s gewährleisten.
- [8.2/H-0-3] MUSS eine sequentielle Leseleistung von mindestens 15 MB/s gewährleisten.
- [8.2/H-0-4] MUSS eine zufällige Leseleistung von mindestens 3,5 MB/s gewährleisten.
Wenn Implementierungen von Handheld-Geräten Funktionen zur Verbesserung der Energieverwaltung von Geräten enthalten, die in AOSP enthalten sind, oder die in AOSP enthaltenen Funktionen erweitern, gilt Folgendes:
- [8.3/H-1-1] MUSS Nutzern die Möglichkeit bieten, den Energiesparmodus zu aktivieren und zu deaktivieren.
- [8.3/H-1-2] MÜSSEN Nutzern die Möglichkeit bieten, alle Apps anzuzeigen, die vom App-Standby- und Stromsparmodus ausgenommen sind.
Implementierungen von Handheld-Geräten:
- [8.4/H-0-1] MÜSSEN ein Leistungsprofil pro Komponente angeben, in dem der Wert des aktuellen Verbrauchs für jede Hardwarekomponente und die ungefähre Entladung der Akkuleistung durch die Komponenten im Zeitverlauf definiert wird, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/H-0-2] MÜSSEN alle Werte zum Energieverbrauch in Milliamperestunden (mAh) angeben.
- [8.4/H-0-3] MÜSSEN die CPU-Energieverbrauchsaufnahme gemäß der UID jedes Prozesses melden. Das Android Open Source-Projekt erfüllt die Anforderung über die Implementierung des Kernelmoduls
uid_cputime
. - [8.4/H-0-4] MUSS dem App-Entwickler diesen Stromverbrauch über den Shell-Befehl
adb shell dumpsys batterystats
zur Verfügung stellen. - [8.4/H] SOLLTEN der Hardwarekomponente selbst zugeschrieben werden, wenn sie einer Anwendung den Stromverbrauch der Hardwarekomponente nicht zuordnen können.
Implementierungen von Handheld-Geräten, die eine Bildschirm- oder Videoausgabe beinhalten:
- [8.4/H-1-1] MÜSSEN den Intent
android.intent.action.POWER_USAGE_SUMMARY
berücksichtigen und ein Einstellungsmenü mit Angaben zu diesem Stromverbrauch anzeigen.
2.2.5 Sicherheitsmodell
Implementierungen von Handheld-Geräten:
- [9.1/H-0-1] MÜSSEN Drittanbieter-Apps über die Berechtigung „
android.permission.PACKAGE_USAGE_STATS
“ den Zugriff auf die Nutzungsstatistiken ermöglichen und einen für Nutzer zugänglichen Mechanismus anbieten, mit dem in Reaktion auf den Intent vonandroid.settings.ACTION_USAGE_ACCESS_SETTINGS
Zugriff auf solche Apps gewährt oder widerrufen werden kann.
Implementierungen von Handheld-Geräten (* Nicht zutreffend für Tablets):
- [9.11/H-0-2]* MÜSSEN die Schlüsselspeicherimplementierung in einer isolierten Ausführungsumgebung sichern.
- [9.11/H-0-3]* MÜSSEN Implementierungen der kryptografischen Algorithmen RSA, AES, ECDSA und HMAC sowie die Hash-Funktionen MD5, SHA1 und SHA-2 der Familie haben, um die unterstützten Algorithmen des Android Keystore-Systems in einem Bereich zu unterstützen, der sicher vom Code isoliert ist, der im Kernel und darüber ausgeführt wird. Sichere Isolation MÜSSEN alle potenziellen Mechanismen blockieren, über die Kernel- oder Userspace-Code auf den internen Status der isolierten Umgebung zugreifen kann, einschließlich DMA. Das vorgelagerte Open-Source-Projekt von Android (AOSP) erfüllt diese Anforderung durch die Verwendung der Trusty-Implementierung. Alternativ können auch eine andere ARM TrustZone-basierte Lösung oder eine von einem Drittanbieter geprüfte sichere Implementierung einer ordnungsgemäßen Hypervisor-basierten Isolierung verwendet werden.
- [9.11/H-0-4]* MÜSSEN die Sperrbildschirm-Authentifizierung in der isolierten Ausführungsumgebung durchführen und nur bei erfolgreicher Ausführung die Verwendung der authentifizierungsgebundenen Schlüssel zulassen. Anmeldedaten für den Sperrbildschirm MÜSSEN so gespeichert werden, dass nur die isolierte Ausführungsumgebung die Sperrbildschirm-Authentifizierung durchführen kann. Das vorgelagerte Android-Open-Source-Projekt bietet den Gatekeeper Hardware Abstraktionsschicht (HAL) und Trusty, mit denen diese Anforderung erfüllt werden kann.
- [9.11/H-0-5]* MUSS die Schlüsselattestierung unterstützen, wenn der Attestierungs-Signaturschlüssel durch sichere Hardware geschützt ist und die Signatur auf sicherer Hardware erfolgt. Die Signaturschlüssel für die Attestierung MÜSSEN für eine ausreichend große Anzahl von Geräten freigegeben werden, um zu verhindern, dass die Schlüssel als Gerätekennungen verwendet werden. Eine Möglichkeit, diese Anforderung zu erfüllen, besteht darin, denselben Attestierungsschlüssel zu verwenden, sofern nicht mindestens 100.000 Einheiten einer bestimmten Artikelnummer erzeugt werden. Wenn mehr als 100.000 Einheiten einer Artikelnummer produziert werden, kann für 100.000 Einheiten ein anderer Schlüssel verwendet werden.
Wenn eine Geräteimplementierung bereits unter einer früheren Android-Version gestartet wurde, ist ein solches Gerät von der Anforderung ausgenommen, einen Schlüsselspeicher in einer isolierten Ausführungsumgebung zu verwenden und die Schlüsselattestierung zu unterstützen, es sei denn, es deklariert die Funktion android.hardware.fingerprint
, die einen Schlüsselspeicher erfordert, der von einer isolierten Ausführungsumgebung unterstützt wird.
Wenn Handheld-Geräte einen sicheren Sperrbildschirm unterstützen, gilt Folgendes:
- [9.11/H-1-1] MÜSSEN Nutzer das kürzeste Zeitlimit für den Ruhemodus wählen. Das ist eine Übergangszeit von maximal 15 Sekunden vom entsperrten in den gesperrten Zustand.
- [9.11/H-1-2] MÜSSEN Nutzern die Möglichkeit bieten, Benachrichtigungen auszublenden und alle Formen der Authentifizierung zu deaktivieren. Ausgenommen hiervon ist die unter 9.11.1 Sicherer Sperrbildschirm beschriebene primäre Authentifizierung. Der AOSP erfüllt die Anforderung an den Sperrmodus.
Wenn Implementierungen von Handheld-Geräten mehrere Nutzer umfassen und das Funktions-Flag android.hardware.telephony
nicht deklariert wird, geschieht Folgendes:
- [9.5/H-2-1] MÜSSEN eingeschränkte Profile unterstützen, eine Funktion, mit der Geräteeigentümer zusätzliche Nutzer und deren Berechtigungen auf dem Gerät verwalten können. Mit eingeschränkten Profilen können Geräteeigentümer schnell separate Umgebungen einrichten, in denen zusätzliche Nutzer arbeiten können. Außerdem haben sie die Möglichkeit, detaillierte Einschränkungen in den Apps zu verwalten, die in diesen Umgebungen verfügbar sind.
Wenn Implementierungen von Handheld-Geräten mehrere Nutzer umfassen und das Funktions-Flag android.hardware.telephony
deklarieren, geschieht Folgendes:
- [9.5/H-3-1] DARF KEINE eingeschränkten Profile unterstützen, MÜSSEN jedoch mit der AOSP-Implementierung der Steuerelemente übereinstimmen, mit denen andere Nutzer am Zugriff auf die Sprachanrufe und SMS teilnehmen können.
2.2.6 Kompatibilität von Entwicklertools und -optionen
Implementierungen von Handheld-Geräten (* Nicht zutreffend für Tablets):
- [6.1/H-0-1]* MUSS den Shell-Befehl
cmd testharness
unterstützen.
Implementierungen von Handheld-Geräten (* Nicht zutreffend für Tablets):
-
Perfetto
<ph type="x-smartling-placeholder">
- </ph>
- [6.1/H-0-2]* MÜSSEN dem Shell-Nutzer ein
/system/bin/perfetto
-Binärprogramm zur Verfügung gestellt werden, wobei die cmdline der Perfetto-Dokumentation entspricht. - [6.1/H-0-3]* Das Perfetto-Binärprogramm MUSS als Eingabe eine protobuf-Konfiguration akzeptieren, die dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [6.1/H-0-4]* Das Perfetto-Binärprogramm MÜSSEN als Ausgabe einen protobuf-Trace schreiben, der dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [6.1/H-0-5]* MÜSSEN über das Perfetto-Binärprogramm mindestens die in der Perfetto-Dokumentation beschriebenen Datenquellen angeben.
- [6.1/H-0-2]* MÜSSEN dem Shell-Nutzer ein
2.3. Fernsehanforderungen
Ein Android-Fernsehgerät bezieht sich auf eine Android-Geräteimplementierung, die eine Unterhaltungsoberfläche für die Wiedergabe digitaler Medien, Filme, Spiele, Apps und/oder Live-TV für Nutzer darstellt, die etwa drei Meter entfernt sitzen (eine „lehnende Benutzeroberfläche“ oder „3 Meter große Benutzeroberfläche“).
Implementierungen von Android-Geräten werden als Fernseher eingestuft, wenn sie die folgenden Kriterien erfüllen:
- Bereitstellung eines Mechanismus zur Fernsteuerung der gerenderten Benutzeroberfläche auf dem Bildschirm, die etwa drei Meter vom Nutzer entfernt sein kann
- Sie haben einen eingebetteten Bildschirm mit einer diagonalen Länge von mehr als 24 Zoll ODER einen Videoausgangsanschluss (z. B. VGA, HDMI, DisplayPort) oder einen kabellosen Anschluss für die Anzeige.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts gelten speziell für Android TV-Geräteimplementierungen.
2.3.1 Hardware
Implementierungen von Fernsehgeräten:
- [7.2.2/T-0-1] MUSS das Steuerkreuz unterstützen.
- [7.2.3/T-0-1] MÜSSEN die Funktionen „Startbildschirm“ und „Zurück“ bereitstellen.
- [7.2.3/T-0-2] MÜSSEN sowohl das normale als auch das lange Drücken der Funktion „Zurück“ (
KEYCODE_BACK
) an die Anwendung im Vordergrund senden. - [7.2.6.1/T-0-1] MÜSSEN Support für Controller enthalten und das Funktions-Flag
android.hardware.gamepad
deklarieren. - [7.2.7/T] SOLLTE eine Fernbedienung bereitstellen, mit der Nutzer auf die Bedienung ohne Touchscreen und die Hauptnavigationstasten zugreifen können.
Wenn Fernsehgeräte ein 3-Achsen-Gyroskop enthalten, ist Folgendes zu beachten:
- [7.3.4/T-1-1] MÜSSEN Ereignisse bis zu einer Frequenz von mindestens 100 Hz melden können.
- [7.3.4/T-1-2] MÜSSEN in der Lage sein, Ausrichtungsänderungen von bis zu 1.000 Grad pro Sekunde zu messen.
Implementierungen von Fernsehgeräten:
- [7.4.3/T-0-1] MUSS Bluetooth und Bluetooth LE unterstützen.
- [7.6.1/T-0-1] MUSS mindestens 4 GB nichtflüchtigen Speicher für private Anwendungsdaten (auch als „/data“-Partition) verfügbar haben.
Wenn Implementierungen von Fernsehgeräten einen USB-Port enthalten, der den Hostmodus unterstützt, gilt Folgendes:
- [7.5.3/T-1-1] MÜSSEN Support für eine externe Kamera anbieten, die über diesen USB-Anschluss angeschlossen wird, aber nicht unbedingt immer angeschlossen ist.
Bei 32-Bit-Implementierungen von TV-Geräten:
-
[7.6.1/T-1-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 896 MB groß sein, wenn eine der folgenden Dichten verwendet wird:
- Mindestens 400 dpi auf kleinen/normalen Bildschirmen
- xhdpi oder höher auf großen Bildschirmen
- tvdpi oder höher auf sehr großen Bildschirmen
Bei 64-Bit-Implementierungen von TV-Geräten:
-
[7.6.1/T-2-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 1.280 MB groß sein, wenn eine der folgenden Dichten verwendet wird:
- Mindestens 400 dpi auf kleinen/normalen Bildschirmen
- xhdpi oder höher auf großen Bildschirmen
- tvdpi oder höher auf sehr großen Bildschirmen
Beachten Sie, dass der für Kernel und Userspace verfügbare Arbeitsspeicher bezieht sich auf den Arbeitsspeicher, der zusätzlich zu jeglichen bereits für Hardwarekomponenten wie Radio, Video usw. vorgesehenen Arbeitsspeicher bereitgestellt wird, die nicht der Kontrolle des Kernels auf Geräteimplementierungen unterliegen.
Implementierungen von Fernsehgeräten:
- [7.8.1/T] SOLLTEN ein Mikrofon enthalten.
- [7.8.2/T-0-1] MUSS einen Audioausgang haben und
android.hardware.audio.output
deklarieren.
2.3.2 Multimedia
Implementierungen von Fernsehgeräten MÜSSEN die folgenden Audiocodierungs- und -decodierungsformate unterstützen und für Anwendungen von Drittanbietern verfügbar machen:
- [5.1/T-0-1] MPEG-4 AAC Profile (AAC LC)
- [5.1/T-0-2] MPEG-4 HE AAC-Profil (AAC+)
- [5.1/T-0-3] AAC ELD (Optimierte AAC mit niedriger Verzögerung)
Implementierungen von Fernsehgeräten MÜSSEN die folgenden Videocodierungsformate unterstützen und für Anwendungen von Drittanbietern verfügbar machen:
Implementierungen von Fernsehgeräten:
- [5.2.2/T-SR] wird dringend empfohlen, die H.264-Codierung von Videos mit einer Auflösung von 720p und 1080p bei 30 Bildern pro Sekunde zu unterstützen.
Implementierungen von Fernsehgeräten MÜSSEN die folgenden Videodecodierungsformate unterstützen und für Anwendungen von Drittanbietern verfügbar machen:
- [5.3.3/T-0-1] MPEG-4 SP
- [5.3.4/T-0-2] H.264 AVC
- [5.3.5/T-0-3] H.265 HEVC
- [5.3.6/T-0-4] VP8
- [5.3.7/T-0-5] VP9
- [5.3.1/T-0-6] MPEG-2
Implementierungen von Fernsehgeräten MÜSSEN die MPEG-2-Decodierung, wie in Abschnitt 5.3.1 beschrieben, bei Standard-Framerates und Auflösungen von Videos unterstützen, einschließlich:
- [5.3.1/T-1-1] HD 1080p bei 29,97 Bildern pro Sekunde mit Hauptprofil auf hoher Ebene.
- [5.3.1/T-1-2] HD 1080i bei 59,94 Bildern pro Sekunde mit High-Level-Hauptprofil. Sie MÜSSEN MPEG-2-Videos mit Zeilenentflechtung per Zeilenentflechtung wiedergeben und für Anwendungen von Drittanbietern verfügbar machen.
Implementierungen von Fernsehgeräten MÜSSEN die H.264-Decodierung, wie in Abschnitt 5.3.4 beschrieben, bei Standard-Video-Framerates und -Auflösungen bis einschließlich:
- [5.3.4/T-1-1] HD 1080p bei 60 Bildern pro Sekunde mit Baseline-Profil
- [5.3.4/T-1-2] HD 1080p bei 60 Bildern pro Sekunde mit Hauptprofil
- [5.3.4/T-1-3] HD 1080p bei 60 Bildern pro Sekunde mit High Profile Level 4.2
Implementierungen von Fernsehgeräten mit H.265-Hardwaredecoder müssen die H.265-Decodierung, wie in Abschnitt 5.3.5 beschrieben, bei Standard-Frameraten und -auflösungen von bis zu einschließlich der Folgenden unterstützen:
- [5.3.5/T-1-1] HD 1080p bei 60 Bildern pro Sekunde mit Hauptprofilebene 4.1
Wenn Implementierungen von Fernsehgeräten mit H.265-Hardwaredecodierern die H.265-Decodierung und das UHD-Decodierungsprofil unterstützen, gilt Folgendes:
- [5.3.5/T-2-1] MÜSSEN das UHD-Decodierungsprofil bei 60 Bildern pro Sekunde mit dem Main10-Profil der Hauptstufe 5 unterstützen.
Implementierungen von Fernsehgeräten MÜSSEN wie in Abschnitt 5.3.6 beschrieben die VP8-Decodierung bei Standard-Framerates und Auflösungen von Videos unterstützen, einschließlich:
- [5.3.6/T-1-1] Decodierungsprofil in HD 1080p bei 60 Bildern pro Sekunde
Implementierungen von Fernsehgeräten mit VP9-Hardwaredecoder müssen die VP9-Decodierung wie in Abschnitt 5.3.7 beschrieben unterstützen, und zwar mit Standard-Framerates und Auflösungen für Video-Frames bis einschließlich:
- [5.3.7/T-1-1] HD 1080p bei 60 Bildern pro Sekunde mit Profil 0 (8-Bit-Farbtiefe)
Wenn Implementierungen von Fernsehgeräten mit VP9-Hardwaredecodierern die VP9-Decodierung und das UHD-Decodierungsprofil unterstützen, gilt Folgendes:
- [5.3.7/T-2-1] MÜSSEN das UHD-Decodierungsprofil bei 60 Bildern pro Sekunde mit Profil 0 (8-Bit-Farbtiefe) unterstützen.
- [5.3.7/T-2-1] WIRD DRINGEND empfohlen, das UHD-Decodierungsprofil bei 60 Bildern pro Sekunde mit Profil 2 (10-Bit-Farbtiefe) zu unterstützen.
Implementierungen von Fernsehgeräten:
- [5.5/T-0-1] MÜSSEN auf unterstützten Ausgängen Unterstützung für „Master Volume“ und die Lautstärkedämpfung der digitalen Audioausgabe enthalten. Ausgenommen hiervon sind komprimierte Audio-Passthrough-Ausgabeformate, bei denen keine Audiodecodierung auf dem Gerät durchgeführt wird.
Wenn Fernsehgeräte nicht über einen integrierten Bildschirm verfügen, sondern stattdessen einen über HDMI angeschlossenen externen Bildschirm unterstützen, gilt Folgendes:
- [5.8/T-0-1] MÜSSEN im HDMI-Ausgabemodus die maximale Auflösung auswählen, die mit einer Aktualisierungsrate von 50 Hz oder 60 Hz unterstützt wird.
- [5.8/T-SR] wird dringend empfohlen, eine vom Nutzer konfigurierbare Auswahl für die HDMI-Aktualisierungsrate bereitzustellen.
- [5.8] SOLLTEN die Aktualisierungsrate des HDMI-Ausgabemodus auf 50 Hz oder 60 Hz festlegen. Das ist abhängig von der Videoaktualisierungsrate in der Region, in der das Gerät verkauft wird.
Wenn Fernsehgeräte nicht über einen integrierten Bildschirm verfügen, sondern stattdessen einen über HDMI angeschlossenen externen Bildschirm unterstützen, gilt Folgendes:
- [5.8/T-1-1] MUSS HDCP 2.2 unterstützen.
Wenn bei Implementierungen von Fernsehgeräten die UHD-Decodierung nicht, sondern ein über HDMI angeschlossener externer Bildschirm unterstützt wird, gilt Folgendes:
- [5.8/T-2-1] MUSS HDCP 1.4 unterstützen.
2.3.3 Software
Implementierungen von Fernsehgeräten:
- [3/T-0-1] MÜSSEN die Funktionen
android.software.leanback
undandroid.hardware.type.television
deklarieren. - [3.4.1/T-0-1] MUSS eine vollständige Implementierung der
android.webkit.Webview
API bereitstellen.
Wenn Android TV-Geräteimplementierungen einen Sperrbildschirm unterstützen,gilt Folgendes:
- [3.8.10/T-1-1] MÜSSEN die Sperrbildschirm-Benachrichtigungen einschließlich der Media Notification Template anzeigen.
Implementierungen von Fernsehgeräten:
- [3.8.14/T-SR] WIRD UNBEDINGT EMPFOHLEN, den Bild-im-Bild-Modus (BiB) den Mehrfenstermodus zu unterstützen.
- [3.10/T-0-1] MÜSSEN Bedienungshilfen von Drittanbietern unterstützen.
- [3.10/T-SR] WIRD DRINGEND empfohlen, Bedienungshilfen vorab auf dem Gerät zu laden, die mit den Bedienungshilfen des Schalterzugriffs und TalkBack (für Sprachen, die von der vorinstallierten Text-in-Sprache-Engine unterstützt werden) vergleichbar oder sogar übertreffen, wie im Open-Source-Projekt TalkBack enthalten.
Wenn Implementierungen von Fernsehgeräten die Funktion android.hardware.audio.output
melden, geschieht Folgendes:
- [3.11/T-SR] wird dringend empfohlen, eine Sprachausgabe-Engine einzubinden, die die auf dem Gerät verfügbaren Sprachen unterstützt.
- [3.11/T-1-1] MUSS die Installation von Drittanbieter-TTS-Engines unterstützen.
Implementierungen von Fernsehgeräten:
- [3.12/T-0-1] MUSS das TV Input Framework unterstützen.
2.3.4 Leistung und Leistung
- [8.1/T-0-1] Konsistente Framelatenz. Inkonsistente Frame-Latenz oder Verzögerung beim Rendern von Frames DÜRFEN NICHT häufiger als 5 Frames pro Sekunde auftreten und SOLLTEN unter einem Frame in einer Sekunde liegen.
- [8.2/T-0-1] MÜSSEN eine sequentielle Schreibleistung von mindestens 5 MB/s gewährleisten.
- [8.2/T-0-2] MUSS eine zufällige Schreibleistung von mindestens 0,5 MB/s gewährleisten.
- [8.2/T-0-3] MÜSSEN eine sequentielle Leseleistung von mindestens 15 MB/s gewährleisten.
- [8.2/T-0-4] MUSS eine zufällige Leseleistung von mindestens 3,5 MB/s gewährleisten.
Wenn Implementierungen für Fernsehgeräte Funktionen zur Verbesserung der Energieverwaltung für Geräte enthalten, die in AOSP enthalten sind, oder um die in AOSP enthaltenen Funktionen zu erweitern, gilt Folgendes:
- [8.3/T-1-1] MUSS Nutzern die Möglichkeit bieten, den Energiesparmodus zu aktivieren und zu deaktivieren.
Fernsehgeräte ohne Akku:
- [8.3/T-1-2] MÜSSEN das Gerät als akkubetriebenes Gerät registrieren, wie unter Batterielose Geräte unterstützen beschrieben.
Wenn Fernsehgeräte einen Akku haben, gilt Folgendes:
- [8.3/T-1-3] MÜSSEN Nutzern die Möglichkeit bieten, alle Apps anzuzeigen, die vom App-Standby- und Stromsparmodus ausgenommen sind.
Implementierungen von Fernsehgeräten:
- [8.4/T-0-1] MÜSSEN ein Leistungsprofil pro Komponente angeben, in dem der Wert des aktuellen Verbrauchs für jede Hardwarekomponente und die ungefähre Entladung der Akkuleistung durch die Komponenten im Zeitverlauf definiert wird, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/T-0-2] MÜSSEN alle Werte zum Energieverbrauch in Milliamperestunden (mAh) angeben.
- [8.4/T-0-3] MÜSSEN die CPU-Energieverbrauchsaufnahme gemäß der UID jedes Prozesses melden. Das Android Open Source-Projekt erfüllt die Anforderung über die Implementierung des Kernelmoduls
uid_cputime
. - [8.4/T] SOLLTEN der Hardwarekomponente selbst zugeschrieben werden, wenn sie einer Anwendung den Stromverbrauch der Hardwarekomponente nicht zuordnen können.
- [8.4/T-0-4] MUSS dem App-Entwickler diesen Stromverbrauch über den Shell-Befehl
adb shell dumpsys batterystats
zur Verfügung stellen.
2.3.5 Sicherheitsmodell
Implementierungen von Fernsehgeräten:
- [9.11/T-0-1] MÜSSEN die Schlüsselspeicherimplementierung in einer isolierten Ausführungsumgebung sichern.
- [9.11/T-0-2] MÜSSEN Implementierungen von RSA, AES, ECDSA und HMAC kryptografischen Algorithmen sowie die Hash-Funktionen MD5, SHA1 und SHA-2 der Familie haben, um die unterstützten Algorithmen des Android-Schlüsselspeichersystems in einem Bereich ordnungsgemäß zu unterstützen, der sicher vom Code isoliert ist, der im Kernel und darüber ausgeführt wird. Sichere Isolation MÜSSEN alle potenziellen Mechanismen blockieren, über die Kernel- oder Userspace-Code auf den internen Status der isolierten Umgebung zugreifen kann, einschließlich DMA. Das vorgelagerte Open-Source-Projekt von Android (AOSP) erfüllt diese Anforderung durch die Verwendung der Trusty-Implementierung. Alternativ können auch eine andere ARM TrustZone-basierte Lösung oder eine von einem Drittanbieter geprüfte sichere Implementierung einer ordnungsgemäßen Hypervisor-basierten Isolierung verwendet werden.
- [9.11/T-0-3] MÜSSEN die Sperrbildschirm-Authentifizierung in der isolierten Ausführungsumgebung durchführen und nur bei erfolgreicher Ausführung die Verwendung der authentifizierungsgebundenen Schlüssel zulassen. Anmeldedaten für den Sperrbildschirm MÜSSEN so gespeichert werden, dass nur die isolierte Ausführungsumgebung die Sperrbildschirm-Authentifizierung durchführen kann. Das vorgelagerte Android-Open-Source-Projekt bietet den Gatekeeper Hardware Abstraktionsschicht (HAL) und Trusty, mit denen diese Anforderung erfüllt werden kann.
- [9.11/T-0-4] MUSS die Schlüsselattestierung unterstützen, wenn der Attestierungssignaturschlüssel durch sichere Hardware geschützt ist und die Signatur auf sicherer Hardware erfolgt. Die Signaturschlüssel für die Attestierung MÜSSEN für eine ausreichend große Anzahl von Geräten freigegeben werden, um zu verhindern, dass die Schlüssel als Gerätekennungen verwendet werden. Eine Möglichkeit, diese Anforderung zu erfüllen, besteht darin, denselben Attestierungsschlüssel zu verwenden, sofern nicht mindestens 100.000 Einheiten einer bestimmten Artikelnummer erzeugt werden. Wenn mehr als 100.000 Einheiten einer Artikelnummer produziert werden, kann für 100.000 Einheiten ein anderer Schlüssel verwendet werden.
Wenn eine Geräteimplementierung bereits unter einer früheren Android-Version gestartet wurde, ist ein solches Gerät von der Anforderung ausgenommen, einen Schlüsselspeicher in einer isolierten Ausführungsumgebung zu verwenden und die Schlüsselattestierung zu unterstützen, es sei denn, es deklariert die Funktion android.hardware.fingerprint
, die einen Schlüsselspeicher erfordert, der von einer isolierten Ausführungsumgebung unterstützt wird.
Wenn Implementierungen von Fernsehgeräten einen sicheren Sperrbildschirm unterstützen, gilt Folgendes:
- [9.11/T-1-1] MÜSSEN Nutzer das Zeitlimit für den Ruhemodus für den Wechsel vom entsperrten in den gesperrten Zustand mit einem zulässigen Mindestzeitlimit von maximal 15 Sekunden auswählen können.
Wenn Implementierungen von Fernsehgeräten mehrere Nutzer umfassen und das Funktions-Flag android.hardware.telephony
nicht deklariert ist, geschieht Folgendes:
- [9.5/T-2-1] MÜSSEN eingeschränkte Profile unterstützen, eine Funktion, mit der Geräteeigentümer zusätzliche Nutzer und deren Berechtigungen auf dem Gerät verwalten können. Mit eingeschränkten Profilen können Geräteeigentümer schnell separate Umgebungen einrichten, in denen zusätzliche Nutzer arbeiten können. Außerdem haben sie die Möglichkeit, detaillierte Einschränkungen in den Apps zu verwalten, die in diesen Umgebungen verfügbar sind.
Wenn Implementierungen von Fernsehgeräten mehrere Nutzer umfassen und das Funktions-Flag android.hardware.telephony
deklarieren, geschieht Folgendes:
- [9.5/T-3-1] DARF KEINE eingeschränkten Profile unterstützen, MÜSSEN jedoch mit der AOSP-Implementierung der Steuerelemente übereinstimmen, mit denen andere Nutzer am Zugriff auf Sprachanrufe und SMS teilnehmen können.
2.3.6. Kompatibilität von Entwicklertools und -optionen
Implementierungen von Fernsehgeräten:
-
Perfetto
<ph type="x-smartling-placeholder">
- </ph>
- [6.1/T-0-1] MÜSSEN dem Shell-Nutzer ein
/system/bin/perfetto
-Binärprogramm zur Verfügung stehen, wobei die cmdline der Perfetto-Dokumentation entspricht. - [6.1/T-0-2] Das Perfetto-Binärprogramm MUSS als Eingabe eine protobuf-Konfiguration akzeptieren, die dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [6.1/T-0-3] Das Perfetto-Binärprogramm MÜSSEN als Ausgabe einen protobuf-Trace schreiben, der dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [6.1/T-0-4] MÜSSEN über das Perfetto-Binärprogramm mindestens die in der Perfetto-Dokumentation beschriebenen Datenquellen angeben.
- [6.1/T-0-1] MÜSSEN dem Shell-Nutzer ein
2.4. Smartwatch-Anforderungen
Eine Android Watch bezieht sich auf eine Android-Geräteimplementierung, die am Körper getragen werden soll, z. B. am Handgelenk.
Implementierungen von Android-Geräten werden als Smartwatch eingestuft, wenn sie die folgenden Kriterien erfüllen:
- Die Bildschirmdiagonale sollte zwischen 2,8 und 5 cm liegen.
- Ein Mechanismus zum Tragen am Körper muss vorhanden sein.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts gelten speziell für die Implementierung von Android Watch-Geräten.
2.4.1 Hardware
Implementierungen von Smartwatch-Geräten:
-
[7.1.1.1/W-0-1] MÜSSEN über ein Display mit einer physischen Diagonale zwischen 1,1 und 2,5 Zoll verfügen.
-
[7.2.3/W-0-1] MÜSSEN die Startbildschirm- und die Zurück-Funktion für den Nutzer verfügbar sein, es sei denn, sie befinden sich in
UI_MODE_TYPE_WATCH
. -
[7.2.4/W-0-1] MUSS die Touchscreen-Eingabe unterstützen.
-
[7.3.1/W-SR] wird dringend empfohlen, einen dreiachsigen Beschleunigungsmesser zu verwenden.
Wenn die Implementierung der Smartwatch einen GPS-/GNSS-Empfänger enthält und die Funktion über das Funktions-Flag android.hardware.location.gps
an Anwendungen meldet, geschieht Folgendes:
- [7.3.3/W-1-1] MÜSSEN GNSS-Messungen melden, sobald sie gefunden werden, auch wenn ein über GPS/GNSS berechneter Standort noch nicht gemeldet wurde.
- [7.3.3/W-1-2] MÜSSEN GNSS-Pseudobereiche und Pseudorangeraten melden, die bei freiem Himmel nach der Bestimmung des Standorts bei einem Stillstand von weniger als 0,2 Metern pro Sekunde im Quadrat der Beschleunigung ausreichen, um eine Position innerhalb von 20 Metern und eine Geschwindigkeit innerhalb von 0,2% pro Sekunde (mindestens 9 Meter) zu berechnen.
Wenn Smartwatch-Implementierungen ein 3-Achsen-Gyroskop enthalten, gilt Folgendes:
- [7.3.4/W-2-1] MÜSSEN in der Lage sein, Ausrichtungsänderungen von bis zu 1.000 Grad pro Sekunde zu messen.
Implementierungen von Smartwatch-Geräten:
-
[7.4.3/W-0-1] MUSS Bluetooth unterstützen.
-
[7.6.1/W-0-1] MUSS mindestens 1 GB nichtflüchtigen Speicher für private Anwendungsdaten (auch als „/data“-Partition) verfügbar haben.
-
[7.6.1/W-0-2] MUSS mindestens 416 MB Arbeitsspeicher für den Kernel und den Userspace zur Verfügung haben.
-
[7.8.1/W-0-1] MUSS ein Mikrofon enthalten.
-
[7.8.2/W] KANN, aber NICHT Audioausgang haben.
2.4.2 Multimedia
Keine zusätzlichen Anforderungen.
2.4.3 Software
Implementierungen von Smartwatch-Geräten:
- [3/W-0-1] MUSS die Funktion als
android.hardware.type.watch
deklarieren. - [3/W-0-2] MUSS uiMode = UI_MODE_TYPE_WATCH unterstützen.
Implementierungen von Smartwatch-Geräten:
- [3.8.4/W-SR] wird dringend empfohlen, auf dem Gerät einen Assistenten für die Unterstützungsaktion zu implementieren.
Beobachten Sie Implementierungen von Geräten, die das Funktions-Flag android.hardware.audio.output
deklarieren:
- [3.10/W-1-1] MUSS Bedienungshilfen von Drittanbietern unterstützen.
-
[3.10/W-SR] WIRD DRINGEND empfohlen, Bedienungshilfen vorab auf dem Gerät zu laden, die mit den Bedienungshilfen des Schalterzugriffs und TalkBack (für Sprachen, die von der vorinstallierten Text-in-Sprache-Engine unterstützt werden) vergleichbar oder sogar übertreffen, wie im Open-Source-Projekt TalkBack enthalten.
-
[3.11/W-SR] wird dringend empfohlen, eine Sprachausgabe-Engine einzubinden, die die auf dem Gerät verfügbaren Sprachen unterstützt.
-
[3.11/W-0-1] MUSS die Installation von Drittanbieter-TTS-Engines unterstützen.
2.4.4 Leistung und Leistung
Wenn Implementierungen von Smartwatch-Geräten Funktionen zur Verbesserung der Energieverwaltung des Geräts enthalten, die in AOSP enthalten sind, oder um die in AOSP enthaltenen Funktionen zu erweitern, gilt Folgendes:
- [8.3/W-SR] werden UNBEDINGT empfohlen, Nutzern die Möglichkeit zu bieten, alle Apps anzuzeigen, die vom App-Standby- und Stromsparmodus ausgenommen sind.
- [8.3/W-SR] sind UNBEDINGT EMPFOHLEN, Nutzern die Möglichkeit zu bieten, den Energiesparmodus zu aktivieren und zu deaktivieren.
Implementierungen von Smartwatch-Geräten:
- [8.4/W-0-1] MÜSSEN ein Leistungsprofil pro Komponente angeben, in dem der Wert des aktuellen Verbrauchs für jede Hardwarekomponente und die ungefähre Entladung der Akkuleistung durch die Komponenten im Zeitverlauf definiert wird, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/W-0-2] MÜSSEN alle Werte zum Energieverbrauch in Milliamperestunden (mAh) angeben.
- [8.4/W-0-3] MÜSSEN die CPU-Energieverbrauchsaufnahme gemäß der UID jedes Prozesses melden. Das Android Open Source-Projekt erfüllt die Anforderung über die Implementierung des Kernelmoduls
uid_cputime
. - [8.4/W-0-4] MUSS dem App-Entwickler diesen Stromverbrauch über den Shell-Befehl
adb shell dumpsys batterystats
zur Verfügung stellen. - [8.4/W] SOLLTEN der Hardwarekomponente selbst zugeordnet werden, wenn sie einer Anwendung den Stromverbrauch der Hardwarekomponente nicht zuordnen können.
2.4.5 Sicherheitsmodell
Wenn die Implementierung der Smartwatch-Geräte mehrere Nutzer umfasst und das Funktions-Flag android.hardware.telephony
nicht deklariert ist, geschieht Folgendes:
- [9.5/W-1-1] MÜSSEN eingeschränkte Profile unterstützen, eine Funktion, mit der Geräteeigentümer zusätzliche Nutzer und deren Berechtigungen auf dem Gerät verwalten können. Mit eingeschränkten Profilen können Geräteeigentümer schnell separate Umgebungen einrichten, in denen zusätzliche Nutzer arbeiten können. Außerdem haben sie die Möglichkeit, detaillierte Einschränkungen in den Apps zu verwalten, die in diesen Umgebungen verfügbar sind.
Wenn Implementierungen für Smartwatch-Geräte mehrere Nutzer umfassen und das Funktions-Flag android.hardware.telephony
deklarieren, geschieht Folgendes:
- [9.5/W-2-1] DARF KEINE eingeschränkten Profile unterstützen, MÜSSEN jedoch mit der AOSP-Implementierung der Steuerelemente übereinstimmen, mit denen andere Nutzer am Zugriff auf Sprachanrufe und SMS teilnehmen können.
2.5. Fahrzeuganforderungen
Die Android Automotive-Implementierung bezieht sich auf die Haupteinheit eines Fahrzeugs, auf der Android als Betriebssystem für einen Teil oder die gesamte System- und/oder Infotainmentfunktionalität ausgeführt wird.
Implementierungen von Android-Geräten werden als „Automobil“ eingestuft, wenn sie die Funktion „android.hardware.type.automotive
“ deklarieren oder alle folgenden Kriterien erfüllen.
- Sie sind als Teil eines Fahrzeugs eingebettet oder können an das angeschlossene Fahrzeug angeschlossen werden.
- ein Display in der Fahrersitzreihe als primäres Display verwenden.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts gelten speziell für Android Automotive-Geräteimplementierungen.
2.5.1 Hardware
Implementierungen von Automobilgeräten:
- [7.1.1.1/A-0-1] MUSS ein Display mit einer Bildschirmdiagonale von mindestens 6 Zoll haben.
-
[7.1.1.1/A-0-2] MÜSSEN ein Layout mit einer Bildschirmgröße von mindestens 750 dp x 480 dp haben.
-
[7.2.3/A-0-1] MÜSSEN die Home-Funktion sowie die Funktionen „Zurück“ und „Letzte“ bereitstellen.
- [7.2.3/A-0-2] MÜSSEN sowohl das normale als auch das lange Drücken der Funktion „Zurück“ (
KEYCODE_BACK
) an die Anwendung im Vordergrund senden. - [7.3/A-0-1] MÜSSEN
GEAR_SELECTION
,NIGHT_MODE
,PERF_VEHICLE_SPEED
undPARKING_BRAKE_ON
implementieren und melden. - [7.3/A-0-2] Der Wert des Flags
NIGHT_MODE
MÜSSEN mit dem Tag-/Nachtmodus im Dashboard übereinstimmen und auf der Eingabe des Umgebungslicht-Sensors basieren. Der zugrunde liegende Umgebungslicht-Sensor KANN der gleiche wie Fotometer sein. - [7.3/A-0-3] MUSS für jeden Sensor ein zusätzliches Infofeld für den Sensor
TYPE_SENSOR_PLACEMENT
als Teil von „SensorAdditionalInfo“ angeben. - [7.3/A-0-1] KANN die Standortermittlung übersehen, wenn GPS/GNSS mit zusätzlichen Sensoren kombiniert wird. Wenn der Standort ungewollt ist, wird UNBEDINGT EMPFOHLEN, die entsprechenden verwendeten Sensor-Typen und/oder Fahrzeug-Property-IDs zu implementieren und zu melden.
- [7.3/A-0-2] Der über LocationManager#requestLocationUpdates() angeforderte Location DARF NICHT mit einer Karte abgeglichen werden.
Wenn die Implementierung von Automobil-Geräten einen 3-Achsen-Beschleunigungsmesser umfasst, gilt Folgendes:
- [7.3.1/A-1-1] MÜSSEN Ereignisse bis zu einer Frequenz von mindestens 100 Hz melden können.
- [7.3.1/A-1-2] MUSS dem Koordinatensystem für Autosensoren von Android entsprechen.
Wenn Automobil-Geräteimplementierungen ein 3-Achsen-Gyroskop umfassen, ist Folgendes zu beachten:
- [7.3.4/A-2-1] MÜSSEN in der Lage sein, Ereignisse bis zu einer Frequenz von mindestens 100 Hz zu melden.
- [7.3.4/A-2-2] MUSS auch den
TYPE_GYROSCOPE_UNCALIBRATED
-Sensor implementieren. - [7.3.4/A-2-3] MÜSSEN in der Lage sein, Ausrichtungsänderungen von bis zu 250 Grad pro Sekunde zu messen.
- [7.3.4/A-SR] wird dringend empfohlen, den Messbereich des Gyroskops auf +/-250 dps zu konfigurieren, um die mögliche Auflösung zu maximieren.
Implementierungen von Automobilgeräten:
- [7.4.3/A-0-1] MUSS Bluetooth und Bluetooth LE unterstützen.
-
[7.4.3/A-0-2] Android Automotive-Implementierungen MÜSSEN die folgenden Bluetooth-Profile unterstützen:
- Telefonanrufe über Hands-Free Profile (HFP).
- Medienwiedergabe über das Audio Distribution Profile (A2DP)
- Steuerung der Medienwiedergabe über das Remote Control Profile (AVRCP)
- Kontaktfreigabe über das Phone Book Access Profile (PBAP)
-
[7.4.3/A-SR] wird dringend empfohlen, das Message Access Profile (MAP) zu unterstützen.
-
[7.4.5/A] SOLLTE Unterstützung für mobilnetzbasierte Datenverbindungen enthalten.
- [7.4.5/A] KANN die
NetworkCapabilities#NET_CAPABILITY_OEM_PAID
-Konstante der System API für Netzwerke verwenden, die für System-Apps verfügbar sind.
Eine Außenkamera ist eine Kamera, die Szenen von außerhalb der Geräteimplementierung aufnimmt, z. B. ein Dashcam.
Implementierungen von Automobilgeräten:
- SOLLTEN eine oder mehrere Außenkameras enthalten.
Wenn Implementierungen von Automobil-Geräten eine Außenkamera umfassen, gilt für eine solche Kamera Folgendes:
- [7.5/A-1-1] DÜRFEN KEINE Außenansichtskameras über die Android Camera APIs zugänglich haben, es sei denn, sie erfüllen die Hauptanforderungen der Kamera.
- [7.5/A-SR] wird dringend empfohlen, die Kameravorschau nicht zu drehen oder horizontal zu spiegeln.
- [7.5.5/A-SR] wird dringend empfohlen, die Kamera so auszurichten, dass die lange Seite am Horizont ausgerichtet ist.
- [7.5/A-SR] wird dringend empfohlen, eine Auflösung von mindestens 1,3 Megapixeln zu haben.
- SOLLTEN entweder über Fixfokus- oder EDOF-Hardware verfügen.
- KANN im Kameratreiber entweder Hardware-Autofokus oder Software-Autofokus implementiert sein.
Implementierungen von Automobilgeräten:
-
[7.6.1/A-0-1] MUSS mindestens 4 GB nichtflüchtigen Speicher für private Anwendungsdaten (auch als „/data“-Partition) verfügbar haben.
-
[7.6.1/A] SOLLTEN die Datenpartition formatieren, um die Leistung und Langlebigkeit des Flash-Speichers zu verbessern, z. B. mit dem
f2fs
-Dateisystem.
Wenn Automotive-Geräteimplementierungen über einen Teil des internen nicht entfernbaren Speichers gemeinsam genutzten externen Speicher bereitstellen, gilt Folgendes:
- [7.6.1/A-SR] wird dringend empfohlen, den E/A-Overhead für Vorgänge zu reduzieren, die auf dem externen Speicher ausgeführt werden, z. B. mit
SDCardFS
.
Bei Automotive-Geräten mit 32-Bit-Implementierungen:
-
[7.6.1/A-1-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 512 MB groß sein, wenn eine der folgenden Dichten verwendet wird:
- 280 dpi oder niedriger auf kleinen/normalen Bildschirmen
- LDPI oder niedriger auf sehr großen Bildschirmen
- mdpi oder niedriger auf großen Bildschirmen
-
[7.6.1/A-1-2] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 608 MB betragen, wenn eine der folgenden Dichten verwendet wird:
- xhdpi oder höher auf kleinen/normalen Bildschirmen
- HDPI oder mehr auf großen Bildschirmen
- mdpi oder höher auf extragroßen Bildschirmen
-
[7.6.1/A-1-3] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 896 MB groß sein, wenn eine der folgenden Dichten verwendet wird:
- Mindestens 400 dpi auf kleinen/normalen Bildschirmen
- xhdpi oder höher auf großen Bildschirmen
- tvdpi oder höher auf sehr großen Bildschirmen
-
[7.6.1/A-1-4] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 1.344 MB groß sein, wenn eine der folgenden Dichten verwendet wird:
- 560 dpi oder höher auf kleinen/normalen Bildschirmen
- Mindestens 400 dpi auf großen Bildschirmen
- xhdpi oder höher auf extragroßen Bildschirmen
Bei Automotive-Geräten mit 64-Bit-Implementierungen:
-
[7.6.1/A-2-1] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 816 MB groß sein, wenn eine der folgenden Dichten verwendet wird:
- 280 dpi oder niedriger auf kleinen/normalen Bildschirmen
- LDPI oder niedriger auf sehr großen Bildschirmen
- mdpi oder niedriger auf großen Bildschirmen
-
[7.6.1/A-2-2] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 944 MB betragen, wenn eine der folgenden Dichten verwendet wird:
- xhdpi oder höher auf kleinen/normalen Bildschirmen
- HDPI oder mehr auf großen Bildschirmen
- mdpi oder höher auf extragroßen Bildschirmen
-
[7.6.1/A-2-3] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 1.280 MB groß sein, wenn eine der folgenden Dichten verwendet wird:
- Mindestens 400 dpi auf kleinen/normalen Bildschirmen
- xhdpi oder höher auf großen Bildschirmen
- tvdpi oder höher auf sehr großen Bildschirmen
-
[7.6.1/A-2-4] Der für Kernel und Userspace verfügbare Arbeitsspeicher MUSS mindestens 1.824 MB betragen, wenn eine der folgenden Dichten verwendet wird:
- 560 dpi oder höher auf kleinen/normalen Bildschirmen
- Mindestens 400 dpi auf großen Bildschirmen
- xhdpi oder höher auf extragroßen Bildschirmen
Beachten Sie, dass der für Kernel und Userspace verfügbare Arbeitsspeicher bezieht sich auf den Arbeitsspeicher, der zusätzlich zu jeglichen bereits für Hardwarekomponenten wie Radio, Video usw. vorgesehenen Arbeitsspeicher bereitgestellt wird, die nicht der Kontrolle des Kernels auf Geräteimplementierungen unterliegen.
Implementierungen von Automobilgeräten:
- [7.7.1/A] SOLLTEN einen USB-Port haben, der den Peripheriemodus unterstützt.
Implementierungen von Automobilgeräten:
- [7.8.1/A-0-1] MUSS ein Mikrofon enthalten.
Implementierungen von Automobilgeräten:
- [7.8.2/A-0-1] MUSS einen Audioausgang haben und
android.hardware.audio.output
deklarieren.
2.5.2 Multimedia
Implementierungen für Automobilgeräte MÜSSEN die folgenden Audiocodierungs- und -decodierungsformate unterstützen und für Drittanbieteranwendungen verfügbar machen:
- [5.1/A-0-1] MPEG-4 AAC Profile (AAC LC)
- [5.1/A-0-2] MPEG-4 HE AAC-Profil (AAC+)
- [5.1/A-0-3] AAC ELD (Optimierte AAC mit niedriger Verzögerung)
Implementierungen für Automobilgeräte MÜSSEN die folgenden Videocodierungsformate unterstützen und für Drittanbieteranwendungen verfügbar machen:
Implementierungen für Automobilgeräte MÜSSEN die folgenden Videodecodierungsformate unterstützen und für Drittanbieteranwendungen verfügbar machen:
Implementierungen für Automobilgeräte werden dringend empfohlen, die folgende Videodecodierung zu unterstützen:
- [5.3/A-SR] H.265 HEVC
2.5.3 Software
Implementierungen von Automobilgeräten:
-
[3/A-0-1] MUSS das Element als
android.hardware.type.automotive
deklarieren. -
[3/A-0-2] MUSS uiMode =
UI_MODE_TYPE_CAR
unterstützen. -
[3/A-0-3] MUSS alle öffentlichen APIs im Namespace
android.car.*
unterstützen. -
[3.2.1/A-0-1] MÜSSEN alle Berechtigungskonstanten unterstützen und erzwingen, wie auf der Referenzseite für Automotive-Berechtigungen dokumentiert.
-
[3.4.1/A-0-1] MUSS eine vollständige Implementierung der
android.webkit.Webview
API bereitstellen. -
[3.8.3/A-0-1] MÜSSEN Benachrichtigungen anzeigen, die die
Notification.CarExtender
API verwenden, wenn sie von Anwendungen von Drittanbietern angefordert werden. -
[3.8.4/A-SR] wird dringend empfohlen, auf dem Gerät einen Assistenten für die Unterstützungsaktion zu implementieren.
Wenn Implementierungen für Automobil-Geräte eine Push-to-Talk-Taste enthalten, gilt Folgendes:
- [3.8.4/A-1-1] MÜSSEN durch kurzes Drücken der Push-to-Talk-Taste die vom Nutzer ausgewählte Assistent-App gestartet werden, also die App, in der
VoiceInteractionService
implementiert ist.
Implementierungen von Automobilgeräten:
- [3.8.3.1/A-0-1] MÜSSEN Ressourcen wie in der
Notifications on Automotive OS
SDK-Dokumentation beschrieben korrekt rendern. - [3.8.3.1/A-0-2] MÜSSEN für Benachrichtigungsaktionen anstelle der über
Notification.Builder.addAction()
bereitgestellten Aktionen WIEDERGABE und STUMMSCHALTEN angezeigt werden. - [3.8.3.1/A] SOLLTEN die Nutzung umfangreicher Verwaltungsaufgaben wie Einstellungen für einzelne Benachrichtigungskanäle einschränken. KANN die UI-Angebote pro Anwendung verwenden, um die Steuerungsmöglichkeiten zu reduzieren.
Implementierungen von Automobilgeräten:
- [3.14/A-0-1] MÜSSEN ein UI-Framework zur Unterstützung von Drittanbieter-Apps enthalten, die Medien-APIs verwenden, wie in Abschnitt 3.14 beschrieben.
- [3.14/A-0-2] MÜSSEN dem Nutzer die sichere Interaktion mit Medienanwendungen während der Fahrt ermöglichen.
- [3.14/A-0-3] MUSS die implizite Intent-Aktion
CAR_INTENT_ACTION_MEDIA_TEMPLATE
mit dem ZusatzCAR_EXTRA_MEDIA_PACKAGE
unterstützen. - [3.14/A-0-4] MÜSSEN eine Option zum Aufrufen der Einstellungsaktivitäten einer Medien-App bereitstellen, MUSS sie aber nur aktivieren, wenn die UX-Einschränkungen für Autos nicht gelten.
- [3.14/A-0-5] MÜSSEN von Medienanwendungen festgelegte Fehlermeldungen anzeigen und die optionalen Extras
ERROR_RESOLUTION_ACTION_LABEL
undERROR_RESOLUTION_ACTION_INTENT
unterstützen. - [3.14/A-0-6] MUSS eine In-App-Suchoption für Apps unterstützen, die die Suche unterstützen.
- [3.14/A-0-7] MÜSSEN bei der Anzeige der MediaBrowser-Hierarchie die Definitionen
CONTENT_STYLE_BROWSABLE_HINT
undCONTENT_STYLE_PLAYABLE_HINT
berücksichtigen.
Wenn Implementierungen für Automotive-Geräte eine Standard-Launcher-App enthalten, gilt Folgendes:
- [3.14/A-1-1] MÜSSEN Mediendienste angeben und mit dem Intent
CAR_INTENT_ACTION_MEDIA_TEMPLATE
öffnen.
Implementierungen von Automobilgeräten:
- [3.8/A] KANN die Anwendungsanfragen einschränken, um die Möglichkeit zum Aufrufen des Vollbildmodus zu beschränken, wie unter
immersive documentation
beschrieben. - [3.8/A] KANN die Statusleiste und die Navigationsleiste jederzeit sichtbar bleiben.
- [3.8/A] KANN die Anwendungsanfragen einschränken, um die Möglichkeiten zum Ändern der Farben hinter den UI-Elementen des Systems einzuschränken, damit diese Elemente immer deutlich sichtbar sind, wie in
WindowManager.LayoutParams#FLAG_TRANSLUCENT_STATUS
undWindowManager.LayoutParams#FLAG_TRANSLUCENT_NAVIGATION
beschrieben.
2.5.4 Leistung und Leistung
Implementierungen von Automobilgeräten:
- [8.2/A-0-1] MÜSSEN die Anzahl der gelesenen und geschriebenen Byte pro UID jedes Prozesses in den nichtflüchtigen Speicher melden, damit die Statistiken über die System API
android.car.storagemonitoring.CarStorageMonitoringManager
für Entwickler verfügbar sind. Das Android Open Source-Projekt erfüllt die Anforderung über das Kernelmoduluid_sys_stats
. - [8.3/A-1-3] MÜSSEN mindestens einmal in den Garagemodus wechseln, bevor das Auto abfährt.
- [8.3/A-1-4] MUSS mindestens 15 Minuten im Garagemodus sein, es sei denn:
<ph type="x-smartling-placeholder">
- </ph>
- Der Akku ist leer.
- Es sind keine inaktiven Jobs geplant.
- Der Fahrer beendet den Garagenmodus.
- [8.4/A-0-1] MÜSSEN ein Leistungsprofil pro Komponente angeben, in dem der Wert des aktuellen Verbrauchs für jede Hardwarekomponente und die ungefähre Entladung der Akkukapazität definiert wird, die durch die Komponenten im Laufe der Zeit verursacht wird, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/A-0-2] MÜSSEN alle Werte zum Energieverbrauch in Milliamperestunden (mAh) angeben.
- [8.4/A-0-3] MÜSSEN die CPU-Energieverbrauchsaufnahme gemäß der UID jedes Prozesses melden. Das Android Open Source-Projekt erfüllt die Anforderung über die Implementierung des Kernelmoduls
uid_cputime
. - [8.4/A] SOLLTEN der Hardwarekomponente selbst zugeschrieben werden, wenn sie einer Anwendung den Stromverbrauch der Hardwarekomponente nicht zuordnen können.
- [8.4/A-0-4] MUSS dem App-Entwickler diesen Stromverbrauch über den Shell-Befehl
adb shell dumpsys batterystats
zur Verfügung stellen.
2.5.5 Sicherheitsmodell
Wenn Automotive-Geräteimplementierungen mehrere Nutzer unterstützen, gilt Folgendes:
- [9.5/A-1-1] DÜRFEN Nutzern NICHT erlauben, mit dem monitorlosen Systemnutzer zu interagieren oder zu diesem zu wechseln, mit Ausnahme der Gerätebereitstellung.
- [9.5/A-1-2] MÜSSEN vor dem
BOOT_COMPLETED
zu einem sekundären Nutzer wechseln. - [9.5/A-1-3] MUSS die Möglichkeit zum Erstellen eines Gastnutzers unterstützen, auch wenn die maximale Anzahl von Nutzern auf einem Gerät erreicht ist.
Implementierungen von Automobilgeräten:
- [9.11/A-0-1] MÜSSEN die Schlüsselspeicherimplementierung in einer isolierten Ausführungsumgebung sichern.
- [9.11/A-0-2] MÜSSEN Implementierungen von RSA, AES, ECDSA und HMAC kryptografischen Algorithmen sowie die Hash-Funktionen MD5, SHA1 und SHA-2 der Familie haben, um die unterstützten Algorithmen des Android-Schlüsselspeichersystems in einem Bereich ordnungsgemäß zu unterstützen, der sicher vom Code isoliert ist, der im Kernel und darüber ausgeführt wird. Sichere Isolation MÜSSEN alle potenziellen Mechanismen blockieren, über die Kernel- oder Userspace-Code auf den internen Status der isolierten Umgebung zugreifen kann, einschließlich DMA. Das vorgelagerte Open-Source-Projekt von Android (AOSP) erfüllt diese Anforderung durch die Verwendung der Trusty-Implementierung. Alternativ können auch eine andere ARM TrustZone-basierte Lösung oder eine von einem Drittanbieter geprüfte sichere Implementierung einer ordnungsgemäßen Hypervisor-basierten Isolierung verwendet werden.
- [9.11/A-0-3] MÜSSEN die Sperrbildschirm-Authentifizierung in der isolierten Ausführungsumgebung durchführen und nur bei erfolgreicher Ausführung die Verwendung der authentifizierungsgebundenen Schlüssel zulassen. Anmeldedaten für den Sperrbildschirm MÜSSEN so gespeichert werden, dass nur die isolierte Ausführungsumgebung die Sperrbildschirm-Authentifizierung durchführen kann. Das vorgelagerte Android-Open-Source-Projekt bietet den Gatekeeper Hardware Abstraktionsschicht (HAL) und Trusty, mit denen diese Anforderung erfüllt werden kann.
- [9.11/A-0-4] MUSS die Schlüsselattestierung unterstützen, wenn der Attestierungssignaturschlüssel durch sichere Hardware geschützt ist und die Signatur auf sicherer Hardware erfolgt. Die Signaturschlüssel für die Attestierung MÜSSEN für eine ausreichend große Anzahl von Geräten freigegeben werden, um zu verhindern, dass die Schlüssel als Gerätekennungen verwendet werden. Eine Möglichkeit, diese Anforderung zu erfüllen, besteht darin, denselben Attestierungsschlüssel zu verwenden, sofern nicht mindestens 100.000 Einheiten einer bestimmten Artikelnummer erzeugt werden. Wenn mehr als 100.000 Einheiten einer Artikelnummer produziert werden, kann für 100.000 Einheiten ein anderer Schlüssel verwendet werden.
Wenn eine Geräteimplementierung bereits unter einer früheren Android-Version gestartet wurde, ist ein solches Gerät von der Anforderung ausgenommen, einen Schlüsselspeicher in einer isolierten Ausführungsumgebung zu verwenden und die Schlüsselattestierung zu unterstützen, es sei denn, es deklariert die Funktion android.hardware.fingerprint
, die einen Schlüsselspeicher erfordert, der von einer isolierten Ausführungsumgebung unterstützt wird.
Wenn Automotive-Geräteimplementierungen einen sicheren Sperrbildschirm unterstützen, gilt Folgendes:
- [9.11/A-1-1] MÜSSEN Nutzer das Zeitlimit für den Ruhemodus für den Wechsel vom entsperrten in den gesperrten Zustand mit einem zulässigen Mindestzeitlimit von maximal 15 Sekunden auswählen können.
Implementierungen von Automobilgeräten:
- [9.14/A-0-1] MÜSSEN die Nachrichten von Fahrzeug-Subsystemen von Android-Frameworks, z.B. die Zulassungsliste der zulässigen Nachrichtentypen und Nachrichtenquellen, als Gatekeeper verwenden.
- [9.14/A-0-2] MÜSSEN Sie gegen Denial-of-Service-Angriffe vom Android-Framework oder von Drittanbieter-Apps überwachen. So wird verhindert, dass schädliche Software das Fahrzeugnetzwerk mit Traffic überflutet, was zu defekten Fahrzeug-Subsystemen führen kann.
2.5.6 Kompatibilität von Entwicklertools und -optionen
Implementierungen von Automobilgeräten:
-
Perfetto
<ph type="x-smartling-placeholder">
- </ph>
- [6.1/A-0-1] MÜSSEN dem Shell-Nutzer ein
/system/bin/perfetto
-Binärprogramm zur Verfügung stehen, wobei die cmdline der Perfetto-Dokumentation entspricht. - [6.1/A-0-2] Das Perfetto-Binärprogramm MUSS als Eingabe eine protobuf-Konfiguration akzeptieren, die dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [6.1/A-0-3] Das Perfetto-Binärprogramm MÜSSEN als Ausgabe einen protobuf-Trace schreiben, der dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [6.1/A-0-4] MÜSSEN über das Perfetto-Binärprogramm mindestens die in der Perfetto-Dokumentation beschriebenen Datenquellen angeben.
- [6.1/A-0-1] MÜSSEN dem Shell-Nutzer ein
2.6. Tablet-Anforderungen
Ein Android-Tablet bezieht sich auf eine Android-Geräteimplementierung, die alle folgenden Kriterien erfüllt:
- Wird normalerweise in beiden Händen verwendet.
- Hat keine Clamshell- oder Convertible-Konfiguration.
- Jede Implementierung einer physischen Tastatur, die mit dem Gerät verwendet wird, MUSS über eine Standardverbindung verbunden werden.
- Das Gerät hat eine Stromquelle, die Mobilität ermöglicht, z. B. einen Akku.
- Das Display hat eine physische Diagonale von 7 bis 18 Zoll.
Bei der Implementierung auf Tablets gelten ähnliche Anforderungen wie bei Handheld-Geräten. Die Ausnahmen sind in diesem Abschnitt mit einem * gekennzeichnet und werden in diesem Abschnitt als Referenz vermerkt.
2.6.1 Hardware
Displaygröße
- Das Display von [7.1.1.1/Tab-0-1] MUSS 7 bis 18 Zoll groß sein.
Gyroskop
Wenn Tablet-Geräte ein 3-Achsen-Gyroskop enthalten, ist Folgendes erforderlich:
- [7.3.4/Tab-1-1] MÜSSEN in der Lage sein, Ausrichtungsänderungen von bis zu 1.000 Grad pro Sekunde zu messen.
Mindestanforderungen an Arbeitsspeicher und Speicherplatz (Abschnitt 7.6.1)
Die in den Anforderungen für Handhelds für kleine/normale Bildschirme aufgeführte Bildschirmdichten gelten nicht für Tablets.
USB-Peripheriemodus (Abschnitt 7.7.1)
Wenn Tablet-Implementierungen einen USB-Port enthalten, der den Peripheriemodus unterstützt, ist Folgendes zu beachten:
- [7.7.1/Tab] KANN die Android Open Accessory (AOA) API implementieren.
Virtual-Reality-Modus (Abschnitt 7.9.1)
Virtual Reality: High Performance (Abschnitt 7.9.2)
Die Anforderungen für Virtual Reality gelten nicht für Tablets.
2.6.2 Sicherheitsmodell
Schlüssel und Anmeldedaten (Abschnitt 9.11)
Siehe Abschnitt [9.11].
Wenn Tablet-Geräteimplementierungen mehrere Nutzer umfassen und das Funktions-Flag android.hardware.telephony
nicht deklariert wird, geschieht Folgendes:
- [9.5/T-1-1] MÜSSEN eingeschränkte Profile unterstützen, eine Funktion, mit der Geräteeigentümer zusätzliche Nutzer und deren Berechtigungen auf dem Gerät verwalten können. Mit eingeschränkten Profilen können Geräteeigentümer schnell separate Umgebungen einrichten, in denen zusätzliche Nutzer arbeiten können. Außerdem haben sie die Möglichkeit, detaillierte Einschränkungen in den Apps zu verwalten, die in diesen Umgebungen verfügbar sind.
Wenn Tablet-Geräteimplementierungen mehrere Nutzer umfassen und das Funktions-Flag android.hardware.telephony
deklarieren, geschieht Folgendes:
- [9.5/T-2-1] DARF KEINE eingeschränkten Profile unterstützen, MÜSSEN jedoch mit der AOSP-Implementierung der Steuerelemente übereinstimmen, mit denen andere Nutzer am Zugriff auf Sprachanrufe und SMS teilnehmen können.
3. Software
3.1. Kompatibilität mit verwalteten APIs
Die verwaltete Dalvik-Umgebung für die Bytecode-Ausführung ist das wichtigste Instrument für Android-Apps. Die Android Application Programming Interface (API) besteht aus mehreren Android-Plattformschnittstellen, die für Anwendungen sichtbar sind, die in der verwalteten Laufzeitumgebung ausgeführt werden.
Geräteimplementierungen:
-
[C-0-1] MÜSSEN vollständige Implementierungen, einschließlich aller dokumentierten Verhaltensweisen, aller dokumentierten APIs bereitstellen, die vom Android SDK oder einer API, die im vorgelagerten Android-Quellcode mit der Markierung „@SystemApi“ versehen ist, bereitgestellt werden.
-
[C-0-2] MÜSSEN alle Klassen, Methoden und zugehörigen Elemente, die von der TestApi-Annotation (@TestApi) gekennzeichnet sind, unterstützen bzw. beibehalten.
-
[C-0-3] DÜRFEN KEINE verwalteten APIs weglassen, API-Schnittstellen oder Signaturen ändern, vom dokumentierten Verhalten abweichen oder No-Ops-Funktionen einschließen, sofern dies nicht ausdrücklich durch diese Kompatibilitätsdefinition gestattet ist.
-
[C-0-4] MÜSSEN die APIs weiterhin vorhanden sein und sich einwandfrei verhalten, selbst wenn einige Hardwarefunktionen, für die Android APIs enthält, weggelassen werden. Informationen zu den spezifischen Anforderungen für dieses Szenario finden Sie in Abschnitt 7.
-
[C-0-5] DÜRFEN NICHT zulassen, dass Drittanbieter-Apps Nicht-SDK-Schnittstellen verwenden. Diese sind als Methoden und Felder in den Java-Sprachpaketen definiert, die sich im Boot-Klassenpfad in AOSP befinden und nicht Teil des öffentlichen SDK sind. Dazu gehören APIs, die mit der Annotation
@hide
, aber nicht mit einer@SystemAPI
versehen sind, wie in den SDK-Dokumenten beschrieben, sowie für private und paketprivate Klassenmitglieder. -
[C-0-6] MÜSSEN mit allen Nicht-SDK-Schnittstellen auf denselben eingeschränkten Listen ausgeliefert werden, die in der vorläufigen Liste und den Sperrlisten-Flags im Pfad
prebuilts/runtime/appcompat/hiddenapi-flags.csv
für den entsprechenden API-Level-Zweig im AOSP angegeben sind.Allerdings gilt:
- Wenn eine versteckte API fehlt oder in der Geräteimplementierung anders implementiert wurde, verschieben Sie die verborgene API in die Sperrliste oder lassen Sie sie aus allen eingeschränkten Listen weg.
- MAG, wenn noch keine ausgeblendete API im AOSP vorhanden ist, fügen Sie die ausgeblendete API einer der eingeschränkten Listen hinzu.
-
[C-0-7] MÜSSEN den dynamischen Updatemechanismus Signed config unterstützen, um Nicht-SDK-Schnittstellen aus einer eingeschränkten Liste zu entfernen. Dazu müssen die signierte Konfiguration in ein beliebiges APK eingebettet und die vorhandenen öffentlichen Schlüssel in AOSP verwendet werden.
3.1.1. Android-Erweiterungen
Android bietet die Unterstützung der Erweiterung der verwalteten APIs unter Beibehaltung derselben API-Level-Version.
- [C-0-1] Implementierungen von Android-Geräten MÜSSEN die AOSP-Implementierung der gemeinsam genutzten Bibliothek
ExtShared
und der DiensteExtServices
vorab mit Versionen laden, die mindestens der für jedes API-Level zulässigen Mindestversion entsprechen. Beispielsweise MUSS bei Geräteimplementierungen mit Android 7.0 mit API-Level 24 mindestens Version 1 enthalten sein.
3.1.2. Android-Bibliothek
Aufgrund der Einstellung des Apache HTTP-Clients gilt für Geräteimplementierungen Folgendes:
- [C-0-1] DARF die Bibliothek
org.apache.http.legacy
NICHT im Bootklassenpfad platzieren. - [C-0-2] MUSS die
org.apache.http.legacy
-Bibliothek nur dann zum Klassenpfad der Anwendung hinzufügen, wenn die App eine der folgenden Bedingungen erfüllt: <ph type="x-smartling-placeholder">- </ph>
- Ausrichtung auf API-Level 28 oder niedriger.
- Deklariert im Manifest, dass die Bibliothek benötigt wird, indem das Attribut
android:name
von<uses-library>
auforg.apache.http.legacy
gesetzt wird.
Die AOSP-Implementierung erfüllt diese Anforderungen.
3.2. Soft API-Kompatibilität
Zusätzlich zu den verwalteten APIs aus Abschnitt 3.1 enthält Android auch eine erhebliche nur zur Laufzeit verfügbare „weiche“ API in Form von Intents, Berechtigungen und ähnlichen Aspekten von Android-Apps, die nicht zum Kompilieren der Anwendung erzwungen werden können.
3.2.1. Berechtigungen
- [C-0-1] Geräteimplementierungen MÜSSEN alle Berechtigungskonstanten unterstützen und erzwingen, wie auf der Referenzseite für Berechtigungen dokumentiert. In Abschnitt 9 sind zusätzliche Anforderungen im Zusammenhang mit dem Android-Sicherheitsmodell aufgeführt.
3.2.2. Build-Parameter
Die Android-APIs enthalten eine Reihe von Konstanten für die android.os.Build-Klasse, die das aktuelle Gerät beschreiben sollen.
- [C-0-1] Um einheitliche, aussagekräftige Werte für alle Geräteimplementierungen bereitzustellen, enthält die folgende Tabelle zusätzliche Beschränkungen für die Formate dieser Werte, denen die Geräteimplementierungen entsprechen MÜSSEN.
Parameter | Details |
---|---|
VERSION.VERÖFFENTLICHUNG | Die Version des derzeit ausgeführten Android-Systems in einem visuell lesbaren Format. Dieses Feld MUSS einen der in 10 definierten Stringwerte enthalten. |
SDK VERSION | Die Version des derzeit ausgeführten Android-Systems in einem Format, auf das Drittanbieter-App-Code zugreifen kann. Bei Android 10 MUSS dieses Feld den Ganzzahlwert 10_INT haben. |
VERSION.SDK_INT | Die Version des derzeit ausgeführten Android-Systems in einem Format, auf das Drittanbieter-App-Code zugreifen kann. Bei Android 10 MUSS dieses Feld den Ganzzahlwert 10_INT haben. |
VERSION.INCREMENTAL | Ein vom Geräte-Implementierer ausgewählter Wert, der den spezifischen Build des derzeit ausgeführten Android-Systems in einem visuell lesbaren Format angibt. Dieser Wert DARF NICHT für verschiedene Builds wiederverwendet werden, die Endnutzern zur Verfügung gestellt werden. Mit diesem Feld wird üblicherweise angegeben, welche Build-Nummer oder Versionsverwaltungs-ID zum Generieren des Builds verwendet wurde. Der Wert dieses Felds MUSS als druckbarer 7-Bit-ASCII codiert werden und dem regulären Ausdruck „^[^ :\/~]+$“ entsprechen. |
BRETTSPIEL | Ein von der Geräteimplementierung ausgewählter Wert, der die vom Gerät verwendete spezifische interne Hardware in einem für Menschen lesbaren Format identifiziert. Dieses Feld kann verwendet werden, um die spezifische Version der Leiterplatte anzugeben, über die das Gerät betrieben wird. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck "^[a-zA-Z0-9_-]+$" entsprechen. |
MARKE | Ein Wert, der den mit dem Gerät assoziierten Markennamen widerspiegelt, der den Endnutzern bekannt ist. MÜSSEN in einem visuell lesbaren Format vorliegen und den Hersteller des Geräts oder die Unternehmensmarke repräsentieren, unter der das Gerät vertrieben wird. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck "^[a-zA-Z0-9_-]+$" entsprechen. |
UNTERSTÜTZTE ABIS | Der Name des Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität. |
UNTERSTÜTZT_32_BIT_ABIS | Der Name des Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität. |
UNTERSTÜTZT_64_BIT_ABIS | Der Name des zweiten Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität. |
CPU_ABI | Der Name des Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität. |
CPU_ABI2 | Der Name des zweiten Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität. |
GERÄT | Wert, der vom Geräte-Implementierer ausgewählt wird und den Entwicklungsnamen oder Codenamen enthält, der die Konfiguration der Hardwarefunktionen und das industrielle Design des Geräts identifiziert. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck "^[a-zA-Z0-9_-]+$" entsprechen. Dieser Gerätename DARF während der Lebensdauer des Produkts NICHT geändert werden. |
Fingerabdruck |
Ein String, der diesen Build eindeutig identifiziert. Sie SOLLTEN menschenlesbar sein. Sie MUSS dieser Vorlage folgen:
$(BRAND)/$(PRODUKT)/ Beispiel:
acme/meinprodukt/ Der Fingerabdruck DARF KEINE Leerzeichen enthalten. Der Wert in diesem Feld MUSS als 7-Bit-ASCII codiert werden können. |
Hardware | Der Name der Hardware (aus der Kernel-Befehlszeile oder aus „/proc“). Sie SOLLTEN menschenlesbar sein. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck "^[a-zA-Z0-9_-]+$" entsprechen. |
Moderator | Ein String, der den Host, auf dem der Build basiert, in einem für Menschen lesbaren Format eindeutig identifiziert. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf. |
ID | Eine vom Geräteimplementierung ausgewählten Kennung in einem visuell lesbaren Format, um auf eine bestimmte Version zu verweisen. Dieses Feld kann mit „android.os.Build.VERSION.INCREMENTAL“ übereinstimmen, SOLLTE aber ein Wert sein, der für Endnutzer aussagekräftig genug ist, um zwischen Software-Builds zu unterscheiden. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9._-]+$“ entsprechen. |
HERSTELLER | Der Handelsname des Erstausrüsters (Original Equipment Manufacturer, OEM) des Produkts. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf. Dieses Feld DARF NICHT während der Lebensdauer des Produkts geändert werden. |
MODELL | Wert, der von der Geräteimplementierung ausgewählt wird und den Namen des Geräts enthält, der dem Endnutzer bekannt ist. Dies SOLLTE der Name sein, unter dem das Gerät vermarktet und an Endnutzer verkauft wird. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf. Dieses Feld DARF NICHT während der Lebensdauer des Produkts geändert werden. |
PRODUKT/FUNKTION | Ein Wert, der vom Geräte-Implementierer ausgewählt wird und den Entwicklungs- oder Codenamen des spezifischen Produkts (SKU) enthält, der innerhalb derselben Marke eindeutig sein MUSS. MÜSSEN lesbar sein, sind aber nicht unbedingt zur Ansicht für Endnutzer gedacht. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck "^[a-zA-Z0-9_-]+$" entsprechen. Dieser Produktname DARF NICHT während der Lebensdauer des Produkts geändert werden. |
Seriennummer | MÜSSEN "UNKNOWN" zurückgeben. |
TAGS | Eine durch Kommas getrennte Liste von Tags, die vom Geräte-Implementierer ausgewählt wurden und den Build weiter unterscheiden. Die Tags MÜSSEN als 7-Bit-ASCII kodierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9._-]+“ entsprechen. Außerdem MÜSSEN sie einen der Werte haben, die den drei typischen Signaturkonfigurationen der Android-Plattform entsprechen: Release-Schlüssel, Entwicklungsschlüssel und Testschlüssel. |
UHRZEIT | Ein Wert, der den Zeitstempel für den Build darstellt. |
SCHREIBMASCHINE | Wert, der vom Geräte-Implementierer ausgewählt wird, der die Laufzeitkonfiguration des Builds angibt. Dieses Feld MUSS einen der Werte enthalten, die den drei typischen Android-Laufzeitkonfigurationen entsprechen: user, userdebug oder eng. |
NUTZER | Ein Name oder die Nutzer-ID des Nutzers (oder des automatisierten Nutzers), der den Build generiert hat. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf. |
SICHERHEITSPATCH | Ein Wert, der die Sicherheitspatch-Ebene eines Builds angibt. Er MUSS angeben, dass der Build in keiner Weise anfällig für eines der Probleme ist, die im ausgewiesenen öffentlichen Sicherheitsbulletin für Android beschrieben sind. Sie MUSS das Format [JJJJ-MM-TT] haben und mit einem definierten String übereinstimmen, der im öffentlichen Sicherheitsbulletin von Android oder in den Sicherheitshinweisen für Android dokumentiert ist, z. B. „2015-11-01“. |
BASIS_OS | Ein Wert, der den FINGERPrint-Parameter des Builds darstellt, der ansonsten mit diesem Build identisch ist, mit Ausnahme der Patches, die im Android Public Security Bulletin bereitgestellt werden. Sie MÜSSEN den richtigen Wert melden. Wenn ein solcher Build nicht vorhanden ist, wird ein leerer String („“) gemeldet. |
BOOTLOADER | Ein vom Geräte-Implementierer ausgewählter Wert, der die spezifische interne Bootloader-Version identifiziert, die auf dem Gerät verwendet wird, in einem für Menschen lesbaren Format. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9._-]+$“ entsprechen. |
getRadioVersion() | MÜSSEN (oder zurückgegeben) ein vom Geräte-Implementierer ausgewählter Wert sein, der die spezifische interne Funk-/Modemversion in einem visuell lesbaren Format identifiziert. Wenn ein Gerät über keine interne Funkschnittstelle bzw. kein internes Modem verfügt, MUSS das Gerät NULL zurückgeben. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9._-,]+$“ entsprechen. |
getSerial() | MÜSSEN (oder zurückgeben) eine Hardware-Seriennummer, die für alle Geräte mit demselben MODELL und MANUFACTURER verfügbar und eindeutig sein muss. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9._-,]+$“ entsprechen. |
3.2.3 Intent-Kompatibilität
3.2.3.1 Kernanwendungs-Intents
Android-Intents ermöglichen es Anwendungskomponenten, Funktionen von anderen Android-Komponenten anzufordern. Das Android-Upstream-Projekt umfasst eine Liste von Anwendungen, die als Android-Kernanwendungen gelten und die mehrere Intent-Muster zum Ausführen gängiger Aktionen implementiert.
-
[C-0-1] Geräteimplementierungen MÜSSEN eine oder mehrere Anwendungen oder Dienstkomponenten vorab mit einem Intent-Handler für alle öffentlichen Intent-Filtermuster laden, die von den folgenden Android-Kernanwendungen in AOSP definiert werden:
- Schreibtischuhr
- Browser
- Kalender
- Kontakte
- Galerie
- Globale Suche
- Werfer
- Musik
- Einstellungen
3.2.3.2 Intent-Auflösung
-
[C-0-1] Da Android eine erweiterbare Plattform ist, MÜSSEN Geräteimplementierungen zulassen, dass jedes in Abschnitt 3.2.3.1 erwähnte Intent-Muster (mit Ausnahme der Einstellungen) von Drittanbieter-Apps überschrieben wird. Bei der vorgelagerten Open-Source-Implementierung von Android ist dies standardmäßig möglich.
-
[C-0-2] Geräteimplementierungen DÜRFEN KEINE Sonderberechtigungen an die oder verhindern, dass Anwendungen von Drittanbietern an diese Muster binden und die Kontrolle über sie übernehmen. Dieses Verbot umfasst insbesondere die Deaktivierung der Benutzeroberfläche „Auswahl“, über die Nutzer zwischen mehreren Anwendungen wählen können, die alle dasselbe Intent-Muster verarbeiten.
-
[C-0-3] Geräteimplementierungen MÜSSEN eine Benutzeroberfläche bereitstellen, über die Nutzer die Standardaktivität für Intents ändern können.
-
Geräteimplementierungen KÖNNEN jedoch Standardaktivitäten für bestimmte URI-Muster (z.B. http://play.google.com) bereitstellen, wenn die Standardaktivität ein spezifischeres Attribut für den Daten-URI bietet. Beispielsweise ist ein Intent-Filtermuster, das den Daten-URI „http://www.android.com“ angibt, spezifischer als das grundlegende Intent-Muster des Browsers für „http://“.
Android umfasst auch einen Mechanismus, mit dem Drittanbieter-Apps ein autoritatives Standardverhalten zum Verknüpfen von Apps für bestimmte Arten von Web-URI-Intents deklarieren können. Wenn solche maßgeblichen Deklarationen in den Intent-Filtermustern einer App definiert sind, gilt für Geräteimplementierungen Folgendes:
- [C-0-4] MÜSSEN versuchen, Intent-Filter zu validieren, indem Sie die in der Digital Asset Links-Spezifikation definierten Validierungsschritte ausführen, die vom Paketmanager im vorgelagerten Android-Open-Source-Projekt implementiert wurden.
- [C-0-5] MÜSSEN während der Installation der Anwendung die Intent-Filter validieren und alle erfolgreich validierten URI-Intent-Filter als Standard-App-Handler für ihre URIs festlegen.
- Sie können bestimmte URI-Intent-Filter als Standard-App-Handler für ihre URIs festlegen, wenn sie erfolgreich überprüft wurden, aber andere mögliche URI-Filter die Überprüfung nicht bestehen. Wenn dies bei einer Geräteimplementierung geschieht, MUSS dem Nutzer im Einstellungsmenü die entsprechenden Pro-URI-Musterüberschreibungen bereitgestellt werden.
- Dem Nutzer MUSS in den Einstellungen die folgenden Einstellungen für App-Links zur Verfügung stehen:
<ph type="x-smartling-placeholder">
- </ph>
- [C-0-6] Der Nutzer MÜSSEN in der Lage sein, das Standardverhalten von App-Links für eine App als ganzheitlich zu überschreiben: immer geöffnet, immer fragen oder nie öffnen. Diese MÜSSEN für alle möglichen URI-Intent-Filter gleichermaßen gelten.
- [C-0-7] Der Nutzer MÜSSEN eine Liste möglicher URI-Intent-Filter sehen können.
- Mit der Geräteimplementierung MÖGLICHERWEISE dem Nutzer die Möglichkeit geben, bestimmte URI-Intent-Filter, die erfolgreich verifiziert wurden, für einzelne Intent-Filter zu überschreiben.
- [C-0-8] Die Geräteimplementierung MÜSSEN Nutzern die Möglichkeit geben, bestimmte mögliche URI-Intent-Filter aufzurufen und zu überschreiben, wenn bei der Geräteimplementierung einige der möglichen URI-Intent-Filter erfolgreich überprüft werden können, während andere fehlschlagen können.
3.2.3.3 Intent-Namespaces
- [C-0-1] Geräteimplementierungen DÜRFEN KEINE Android-Komponente enthalten, die neue Intent- oder Broadcast-Intent-Muster mit einer ACTION-, CATEGORY- oder anderen Schlüsselzeichenfolge im Android berücksichtigt. oder com.android.-Namespace auf sie zugreifen.
- [C-0-2] Geräte-Implementierer DÜRFEN KEINE Android-Komponenten enthalten, die neue Intent- oder Broadcast-Intent-Muster berücksichtigen und dabei eine ACTION-, CATEGORY- oder einen anderen Schlüsselstring in einem Paketbereich, der zu einer anderen Organisation gehört, verwenden.
- [C-0-3] Geräteimplementierungen DÜRFEN KEINE Intent-Muster ändern oder erweitern, die von den in Abschnitt 3.2.3.1 aufgeführten Kern-Apps verwendet werden.
- Geräteimplementierungen KÖNNEN Intent-Muster mit Namespaces enthalten, die klar und deutlich mit der eigenen Organisation verknüpft sind. Dieses Verbot entspricht dem, das in Abschnitt 3.6 für Java-Sprachklassen festgelegt wurde.
3.2.3.4 Übertragungs-Intents
Drittanbieteranwendungen nutzen die Plattform, um bestimmte Intents zu senden und so über Änderungen in der Hardware- oder Softwareumgebung zu informieren.
Geräteimplementierungen:
- [C-0-1] MÜSSEN die Public-Broadcast-Intents als Reaktion auf entsprechende Systemereignisse wie in der SDK-Dokumentation beschrieben übertragen. Diese Anforderung steht nicht im Widerspruch zu Abschnitt 3.5, da die Einschränkungen für Hintergrundanwendungen auch in der SDK-Dokumentation beschrieben sind.
3.2.3.5 Standard-App-Einstellungen
Android bietet Einstellungen, mit denen Nutzer ihre Standardanwendungen einfach auswählen können, z. B. für den Startbildschirm oder für SMS.
Wo es sinnvoll ist, MÜSSEN Geräteimplementierungen ein ähnliches Einstellungsmenü bereitstellen und mit dem Intent-Filtermuster und den API-Methoden kompatibel sein, die in der SDK-Dokumentation beschrieben werden (siehe unten).
Wenn Geräteimplementierungen android.software.home_screen
melden, geschieht Folgendes:
- [C-1-1] MÜSSEN den Intent
android.settings.HOME_SETTINGS
berücksichtigen, um ein Standardmenü mit App-Einstellungen für den Startbildschirm anzuzeigen.
Wenn Geräteimplementierungen android.hardware.telephony
melden, geschieht Folgendes:
-
[C-2-1] MÜSSEN ein Einstellungsmenü bereitstellen, das den Intent
RoleManager.createRequestRoleIntent(String)
mitRoleManager.ROLE_SMS
aufruft, um ein Dialogfeld zum Ändern der Standard-SMS-Anwendung anzuzeigen. -
[C-2-2] MÜSSEN den Intent
android.telecom.action.CHANGE_DEFAULT_DIALER
berücksichtigen, um ein Dialogfeld anzuzeigen, über das der Nutzer die Standard-Telefon-App ändern kann.- MÜSSEN die vom Nutzer ausgewählte Benutzeroberfläche der Standard-Telefon-App für ein- und ausgehende Anrufe verwendet werden. Eine Ausnahme bilden Notrufe, für die die vorinstallierte Telefon App verwendet wird.
-
[C-2-3] MÜSSEN den Intent android.telecom.action.CHANGE_PHONE_ACCOUNTS berücksichtigen, um dem Nutzer die Möglichkeit zu bieten, das mit
PhoneAccounts
verknüpfteConnectionServices
sowie ein standardmäßiges PhoneAccount zu konfigurieren, das der Telekommunikationsanbieter für ausgehende Anrufe verwendet. Die AOSP-Implementierung erfüllt diese Anforderung durch Hinzufügen einer „Anrufkonten-Option“. im Menü „Anrufe“ im Menü „Einstellungen“. -
[C-2-4] MÜSSEN
android.telecom.CallRedirectionService
für eine App zulassen, die die Rolleandroid.app.role.CALL_REDIRECTION
hat. - [C-2-5] MÜSSEN Nutzern die Möglichkeit bieten, eine App mit der Rolle
android.app.role.CALL_REDIRECTION
auszuwählen.
Wenn Geräteimplementierungen android.hardware.nfc.hce
melden, geschieht Folgendes:
- [C-3-1] MÜSSEN den Intent android.settings.NFC_PAYMENT_SETTINGS berücksichtigen, um ein Standardmenü mit App-Einstellungen für das mobile Bezahlen anzuzeigen.
Wenn Geräteimplementierungen das VoiceInteractionService
unterstützen und mehrere Anwendungen, die diese API verwenden, gleichzeitig installiert sind, geschieht Folgendes:
- [C-4-1] MÜSSEN den
android.settings.ACTION_VOICE_INPUT_SETTINGS
-Intent berücksichtigen, um ein Standardmenü mit App-Einstellungen für Spracheingabe und Unterstützung anzuzeigen.
3.2.4 Aktivitäten auf sekundären/mehreren Displays
Wenn Geräteimplementierungen das Starten normaler Android-Aktivitäten auf mehr als einem Bildschirm zulassen, geschieht Folgendes:
- [C-1-1] MUSS das Funktions-Flag „
android.software.activities_on_secondary_displays
“ festlegen. - [C-1-2] MUSS eine API-Kompatibilität ähnlich einer Aktivität, die auf dem Hauptdisplay ausgeführt wird, garantiert werden.
- [C-1-3] Wenn die neue Aktivität gestartet wird, ohne eine Zielanzeige über die
ActivityOptions.setLaunchDisplayId()
API anzugeben, MUSS die neue Aktivität zur selben Anzeige wie die Aktivität geführt werden, mit der sie gestartet wurde. - [C-1-4] MUSS alle Aktivitäten löschen, wenn eine Anzeige mit dem Flag
Display.FLAG_PRIVATE
entfernt wird. - [C-1-5] MÜSSEN Inhalte auf allen Bildschirmen sicher verstecken, wenn das Gerät mit einem sicheren Sperrbildschirm gesperrt ist, es sei denn, die App lässt die Anzeige über dem Sperrbildschirm mithilfe der
Activity#setShowWhenLocked()
API zu. - SOLLTEN SIE
android.content.res.Configuration
haben, das zu diesem Bildschirm gehört, damit sie angezeigt wird, richtig funktioniert und die Kompatibilität aufrechterhalten wird, wenn eine Aktivität auf dem zweiten Display gestartet wird.
Wenn Geräteimplementierungen das Starten normaler Android-Aktivitäten auf sekundären Displays zulassen und ein sekundäres Display die Markierung android.view.Display.FLAG_PRIVATE hat:
- [C-3-1] Nur der Eigentümer dieses Displays, Systems und Aktivitäten, die sich bereits auf diesem Display befinden, MUSS das Gerät starten können. Jeder kann einen Bildschirm mit dem Flag android.view.Display.FLAG_PUBLIC starten.
3.3 Native API-Kompatibilität
Die Kompatibilität mit nativem Code ist schwierig. Aus diesem Grund sind Geräteimplementierungen:
- [SR] EMPFOHLEN, die Implementierungen der unten aufgeführten Bibliotheken aus dem vorgelagerten Android-Open-Source-Projekt zu verwenden.
3.3.1 Binäre Anwendungsschnittstellen
Der verwaltete Dalvik-Bytecode kann nativen Code aufrufen, der in der .apk
-Datei der Anwendung als ELF-.so
-Datei bereitgestellt wird, die für die entsprechende Gerätehardwarearchitektur kompiliert wurde. Da nativer Code stark von der zugrunde liegenden Prozessortechnologie abhängt, definiert Android im Android-NDK eine Reihe von Binärschnittstellen (Application Binary Interfaces, ABIs).
Geräteimplementierungen:
- [C-0-1] MÜSSEN mit einem oder mehreren definierten ABIs kompatibel sein und die Kompatibilität mit dem Android NDK implementieren.
- [C-0-2] MÜSSEN Support für Code bereitstellen, der in der verwalteten Umgebung ausgeführt wird, um nativen Code mit der standardmäßigen JNI-Semantik (Java Native Interface) aufzurufen.
- [C-0-3] MÜSSEN mit jeder erforderlichen Bibliothek in der Liste unten quellkompatibel (d.h. header-kompatibel) und binär kompatibel (für das ABI) sein.
- [C-0-5] MÜSSEN die native Binärschnittstelle (Application Binary Interface, ABI), die vom Gerät unterstützt wird, korrekt über die Parameter
android.os.Build.SUPPORTED_ABIS
,android.os.Build.SUPPORTED_32_BIT_ABIS
undandroid.os.Build.SUPPORTED_64_BIT_ABIS
melden, jeweils eine durch Kommas getrennte Liste von ABIs, sortiert von der am häufigsten bis zur am wenigsten bevorzugten. -
[C-0-6] MÜSSEN über die oben genannten Parameter eine Teilmenge der folgenden Liste von ABIs melden und DARF KEINE ABIs melden, die nicht auf der Liste stehen.
-
armeabi
-
armeabi-v7a
-
arm64-v8a
-
x86
-
x86-64
-
[C-0-7] MÜSSEN alle folgenden Bibliotheken, die native APIs bereitstellen, für Apps mit nativem Code zur Verfügung stellen:
-
libaaudio.so (Unterstützung für natives AAudio-Audio)
- libamidi.so (nativer MIDI-Support, wenn die Funktion
android.software.midi
wie in Abschnitt 5.9 beschrieben beansprucht wird) - libandroid.so (native Unterstützung für Android-Aktivitäten)
- libc (C-Bibliothek)
- libcamera2ndk.so
- libdl (dynamische Verknüpfung)
- libEGL.so (natives OpenGL-Oberflächenmanagement)
- 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 (Android-Protokollierung)
- libmediandk.so (Unterstützung für native Media APIs)
- libm (Mathematikbibliothek)
- libneuralnetworks.so (Neural Networks API)
- libOpenMAXAL.so (Unterstützung von OpenMAX AL 1.0.1)
- libOpenSLES.so (Audiounterstützung von OpenSL ES 1.0.1)
- libRS.so
- libstdc++ (Minimale Unterstützung für C++)
- libvulkan.so (Vulkan)
- libz (Zlib-Komprimierung)
- JNI-Schnittstelle
-
-
[C-0-8] DÜRFEN die öffentlichen Funktionen für die oben aufgeführten nativen Bibliotheken NICHT hinzufügen oder entfernen.
- [C-0-9] MÜSSEN zusätzliche Bibliotheken ohne AOSP auflisten, die direkt in
/vendor/etc/public.libraries.txt
von Drittanbieter-Apps bereitgestellt werden. - [C-0-10] DÜRFEN KEINE anderen nativen Bibliotheken, die in AOSP als Systembibliotheken implementiert und bereitgestellt werden, für Drittanbieter-Apps mit API-Level 24 oder höher freigegeben werden, da diese reserviert sind.
- [C-0-11] MÜSSEN alle Funktionssymbole für OpenGL ES 3.1 und Android Extension Pack, wie im NDK definiert, über die
libGLESv3.so
-Bibliothek exportieren. Beachten Sie, dass alle Symbole vorhanden sein MÜSSEN, in Abschnitt 7.1.4.1 jedoch genauer beschrieben wird, wann die vollständige Implementierung der entsprechenden Funktionen erwartet wird. - [C-0-12] MÜSSEN Funktionssymbole für die Hauptfunktionssymbole von Vulkan 1.0 sowie die Erweiterungen
VK_KHR_surface
,VK_KHR_android_surface
,VK_KHR_swapchain
,VK_KHR_maintenance1
undVK_KHR_get_physical_device_properties2
über dielibvulkan.so
-Bibliothek exportieren. Beachten Sie, dass alle Symbole vorhanden sein MÜSSEN, in Abschnitt 7.1.4.2 jedoch genauer beschrieben wird, wann die vollständige Implementierung der entsprechenden Funktionen erwartet wird. - SOLLTEN mit dem Quellcode und den Header-Dateien erstellt werden, die im vorgelagerten Android Open Source Project verfügbar sind.
In zukünftigen Android-Versionen werden möglicherweise weitere ABIs unterstützt.
3.3.2 Kompatibilität mit nativem 32-Bit-ARM-Code
Wenn Geräteimplementierungen die Unterstützung des ABI für armeabi
melden, geschieht Folgendes:
- [C-3-1] MÜSSEN auch
armeabi-v7a
unterstützen und dies melden, daarmeabi
nur der Abwärtskompatibilität mit älteren Apps dient.
Wenn Geräteimplementierungen die Unterstützung des ABI für armeabi-v7a
melden, gilt für Apps, die dieses ABI verwenden, Folgendes:
-
[C-2-1] MÜSSEN die folgenden Zeilen in
/proc/cpuinfo
einfügen und die Werte auf demselben Gerät NICHT ändern, selbst wenn sie von anderen ABIs gelesen werden.-
Features:
, gefolgt von einer Liste aller optionalen ARMv7-CPU-Funktionen, die vom Gerät unterstützt werden. -
CPU architecture:
, gefolgt von einer Ganzzahl, die die höchste unterstützte ARM-Architektur des Geräts beschreibt (z.B. „8“ für ARMv8-Geräte).
-
-
[C-2-2] MÜSSEN die folgenden Vorgänge immer verfügbar halten, auch wenn das ABI in einer ARMv8-Architektur implementiert ist, entweder durch native CPU-Unterstützung oder durch Softwareemulation:
- Anweisungen zu SWP und SWPB
- SETEND-Anweisung
- CP15ISB-, CP15DSB- und CP15DMB-Hürdenoperationen
-
[C-2-3] MÜSSEN Support für die Erweiterung Advanced SIMD (NEON) bereitstellen.
3.4 Webkompatibilität
3.4.1 WebView-Kompatibilität
Wenn Geräteimplementierungen eine vollständige Implementierung der android.webkit.Webview
API ermöglichen, gilt Folgendes:
- [C-1-1] MÜSSEN
android.software.webview
melden. - [C-1-2] MUSS zur Implementierung der
android.webkit.WebView
API den Chromium-Projekt-Build aus dem übergeordneten Android Open Source Project im Android 10-Zweig verwenden. -
[C-1-3] Der von WebView gemeldete User-Agent-String MUSS folgendes Format haben:
Mozilla/5.0 (Linux; Android $(VERSION); [$(MODEL)] [Build/$(BUILD)]; wv) AppleWebKit/537.36 (KHTML, wie Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- Der Wert des Strings $(VERSION) MUSS mit dem Wert für android.os.Build.VERSION.RELEASE übereinstimmen.
- Der String $(MODEL) KANN leer sein, aber wenn er nicht leer ist, MUSS er denselben Wert wie android.os.Build.MODEL haben.
- „Build/$(BUILD)“ KANN weggelassen werden, aber wenn vorhanden ist, MUSS der String $(BUILD) mit dem Wert für android.os.Build.ID identisch sein.
- Der Wert des Strings $(CHROMIUM_VER) MUSS der Version von Chromium im vorgelagerten Android-Open-Source-Projekt sein.
- Bei Geräteimplementierungen KANN „Mobile“ im User-Agent-String weggelassen werden.
-
Die WebView-Komponente sollte so viele HTML5-Funktionen wie möglich unterstützen. Sofern sie dies unterstützt, SOLLTE die WebView-Komponente der HTML5-Spezifikation entsprechen.
-
[C-1-4] MÜSSEN die bereitgestellten Inhalte oder Remote-URL-Inhalte in einem Prozess rendern, der sich von der Anwendung unterscheidet, die die WebView instanziiert. Insbesondere MUSS der separate Renderer-Prozess weniger Berechtigungen haben, als separate Nutzer-ID ausgeführt werden, keinen Zugriff auf das Datenverzeichnis der App haben, keinen direkten Netzwerkzugriff haben und nur auf die mindestens erforderlichen Systemdienste über Binder zugreifen können. Die AOSP-Implementierung von WebView erfüllt diese Anforderung.
Hinweis: Wenn Geräteimplementierungen 32-Bit sind oder das Funktions-Flag android.hardware.ram.low
deklarieren, sind sie von C-1-3 ausgenommen.
3.4.2 Browserkompatibilität
Wenn Geräteimplementierungen eine eigenständige Browseranwendung für das allgemeine Surfen im Web enthalten, gilt Folgendes:
- [C-1-1] MUSS alle der folgenden mit HTML5 verknüpften APIs unterstützen: <ph type="x-smartling-placeholder">
- [C-1-2] MÜSSEN die HTML5/W3C Webstorage API und die HTML5/W3C IndexedDB API unterstützen. Im Zuge der Umstellung der Normen zur Webentwicklung auf IndexedDB gegenüber Webspeichern wird erwartet, dass IndexedDB in einer zukünftigen Android-Version eine erforderliche Komponente sein wird.
- KANN einen benutzerdefinierten User-Agent-String in der eigenständigen Browseranwendung versenden.
- SOLLTEN SIE in der eigenständigen Browseranwendung möglichst viele HTML5-Elemente unterstützen (unabhängig davon, ob diese auf der vorgelagerten WebKit-Browseranwendung oder einer Ersatzanwendung durch einen Drittanbieter basiert).
Wenn Geräteimplementierungen jedoch keine eigenständige Browser-App enthalten, gilt Folgendes:
- [C-2-1] MÜSSEN weiterhin die in Abschnitt 3.2.3.1 beschriebenen Muster für die öffentliche Absicht unterstützen.
3.5 API-Verhaltenskompatibilität
Geräteimplementierungen:
- [C-0-9] MÜSSEN sicherstellen, dass die API-Verhaltenskompatibilität auf alle installierten Apps angewendet wird, es sei denn, sie sind wie in Abschnitt 3.5.1 beschrieben eingeschränkt.
- [C-0-10] DÜRFEN NICHT die Zulassungsliste implementieren, die die Verhaltenskompatibilität der API nur bei Apps gewährleistet, die von den Geräteimplementierungen ausgewählt wurden.
Das Verhalten der einzelnen API-Typen (verwaltet, weich, nativ und Web) MÜSSEN der bevorzugten Implementierung des vorgelagerten Android-Open-Source-Projekts entsprechen. Einige spezifische Kompatibilitätsbereiche sind:
- [C-0-1] Geräte DÜRFEN NICHT das Verhalten oder die Semantik eines Standard-Intents ändern.
- [C-0-2] Geräte DÜRFEN den Lebenszyklus oder die Lebenszyklussemantik einer bestimmten Art von Systemkomponente (wie Dienst, Aktivität, ContentProvider usw.) NICHT verändern.
- [C-0-3] Geräte DÜRFEN die Semantik einer Standardberechtigung NICHT ändern.
- Auf den Geräten DÜRFEN die Beschränkungen für Hintergrund-Apps NICHT geändert werden. Genauer gesagt für Hintergrund-Apps:
<ph type="x-smartling-placeholder">
- </ph>
- [C-0-4] Sie MÜSSEN die Ausführung von Callbacks beenden, die von der App registriert sind, um Ausgaben von
GnssMeasurement
undGnssNavigationMessage
zu erhalten. - [C-0-5] MÜSSEN die Häufigkeit von Updates, die für die App über die API-Klasse
LocationManager
oder die MethodeWifiManager.startScan()
bereitgestellt werden, begrenzt werden. - [C-0-6] Wenn die App auf API-Level 25 oder höher ausgerichtet ist, DÜRFEN SIE NICHT erlauben, Broadcast-Empfänger für die impliziten Broadcasts von standardmäßigen Android-Intents im Manifest der App zu registrieren, es sei denn, der Broadcast-Intent erfordert eine
"signature"
- oder"signatureOrSystem"
-protectionLevel
-Berechtigung oder befindet sich auf der Ausnahmeliste. - [C-0-7] Wenn die App auf API-Level 25 oder höher ausgerichtet ist, MÜSSEN sie die Hintergrunddienste der App beenden, so als ob die App die Methode
stopSelf()
des Dienstes aufgerufen hätte, es sei denn, die App wird auf eine temporäre Zulassungsliste gesetzt, um eine Aufgabe auszuführen, die für den Nutzer sichtbar ist. - [C-0-8] Wenn die App auf API-Level 25 oder höher ausgerichtet ist, MÜSSEN die von der App zurückgehaltenen Wakelocks freigegeben werden.
- [C-0-4] Sie MÜSSEN die Ausführung von Callbacks beenden, die von der App registriert sind, um Ausgaben von
- [C-0-9] Geräte MÜSSEN die folgenden Sicherheitsanbieter als die ersten sieben Arraywerte der Methode
Security.getProviders()
in der angegebenen Reihenfolge und mit den angegebenen Namen (wie vonProvider.getName()
zurückgegeben) und Klassen zurückgeben, es sei denn, die App hat die Liste überinsertProviderAt()
oderremoveProvider()
geändert. Geräte können neben der unten angegebenen Liste mit Anbietern weitere Anbieter zurückgeben.-
AndroidNSSP –
android.security.net.config.NetworkSecurityConfigProvider
-
AndroidOpenSSL –
com.android.org.conscrypt.OpenSSLProvider
-
CertPathProvider –
sun.security.provider.CertPathProvider
-
AndroidKeyStoreBCWorkaround –
android.security.keystore.AndroidKeyStoreBCWorkaroundProvider
-
BC –
com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
-
HarmonyJSSE –
com.android.org.conscrypt.JSSEProvider
-
AndroidKeyStore –
android.security.keystore.AndroidKeyStoreProvider
-
AndroidNSSP –
Die obige Liste ist nicht vollständig. Die Compatibility Test Suite (CTS) testet signifikante Teile der Plattform auf Verhaltenskompatibilität, aber nicht alle. Der Implementierer ist dafür verantwortlich, die Verhaltenskompatibilität mit dem Android Open Source Project zu gewährleisten. Aus diesem Grund sollten Geräte-Implementierer nach Möglichkeit den über das Android Open Source Project verfügbaren Quellcode verwenden, anstatt große Teile des Systems erneut zu implementieren.
3.5.1 Hintergrundbeschränkung
Wenn Geräteimplementierungen die im AOSP enthaltenen App-Einschränkungen implementieren oder die App-Einschränkungen erweitern, gilt Folgendes:
- [C-1-1] MÜSSEN Nutzern Angebote zur Verfügung stellen, bei denen sie die Liste der eingeschränkten Apps sehen können.
- [C-1-2] MÜSSEN Nutzern die Möglichkeit bieten, die Einschränkungen für jede App zu aktivieren / deaktivieren.
- [C-1-3] MUSS nicht automatisch Einschränkungen anwenden, wenn kein Anzeichen für ein schlechtes Systemzustand vorliegt. Die Einschränkungen für Apps MÖGLICHERWEISE jedoch MÖGLICH, wenn ein schlechtes Systemzustandsverhalten wie hängende Wakelocks, Dienste mit langer Ausführungszeit usw. erkannt wird. Die Kriterien MÖGLICHERWEISE von den Geräteimplementierungen festgelegt werden, MÜSSEN jedoch im Zusammenhang mit den Auswirkungen der App auf den Systemzustand stehen. Andere Kriterien, die sich nicht nur auf den Systemzustand beziehen, z. B. die geringe Beliebtheit der App auf dem Markt, DÜRFEN NICHT als Kriterien verwendet werden.
- [C-1-4] MUSS nicht automatisch App-Einschränkungen für Apps anwenden, wenn ein Nutzer App-Einschränkungen manuell deaktiviert hat, und KANN dem Nutzer vorschlagen, App-Einschränkungen anzuwenden.
- [C-1-5] MÜSSEN Nutzer informieren, wenn App-Einschränkungen automatisch auf eine App angewendet werden.
- [C-1-6] MÜSSEN
true
fürActivityManager.isBackgroundRestricted()
zurückgeben, wenn die eingeschränkte App diese API aufruft. - [C-1-7] DARF NICHT die im Vordergrund verwendete App einschränken, die vom Nutzer explizit verwendet wird.
- [C-1-8] MÜSSEN die Einschränkungen für eine App aussetzen, die zur obersten App im Vordergrund wird, wenn der Nutzer explizit beginnt, die zuvor eingeschränkte App zu verwenden.
3.6. API-Namespaces
Android folgt den Konventionen für Paket- und Klassen-Namespaces, die von der Programmiersprache Java definiert werden. Um die Kompatibilität mit Anwendungen von Drittanbietern sicherzustellen, dürfen Geräte-Implementierer KEINE unzulässigen Änderungen (siehe unten) an diesen Paket-Namespaces vornehmen:
-
java.*
-
javax.*
-
sun.*
-
android.*
-
androidx.*
-
com.android.*
Das heißt:
- [C-0-1] DÜRFEN die öffentlich zugänglichen APIs auf der Android-Plattform NICHT verändern, indem Sie Methoden oder Klassensignaturen ändern oder Klassen oder Klassenfelder entfernen.
- [C-0-2] DÜRFEN KEINE öffentlich zugänglichen Elemente (wie Klassen oder Schnittstellen bzw. Felder oder Methoden zu vorhandenen Klassen oder Schnittstellen) oder Test- oder System-APIs zu den APIs in den oben genannten Namespaces hinzufügen. Ein „öffentlich sichtbares Element“ ist ein Konstrukt, das nicht mit der Markierung „@hide“ dekoriert ist, wie es im vorgelagerten Android-Quellcode verwendet wird.
Geräte-Implementierer KÖNNEN die zugrunde liegende Implementierung der APIs ändern. Durch solche Änderungen gilt jedoch Folgendes:
- [C-0-3] DÜRFEN das angegebene Verhalten und die Java-Sprachsignatur von öffentlich zugänglichen APIs NICHT beeinflussen.
- [C-0-4] DÜRFEN NICHT beworben oder auf andere Weise Entwicklern angezeigt werden.
Geräte-Implementierer KÖNNEN jedoch benutzerdefinierte APIs außerhalb des standardmäßigen Android-Namespace hinzufügen. Die benutzerdefinierten APIs jedoch:
- [C-0-5] DÜRFEN sich NICHT in einem Namespace befinden, der einer anderen Organisation gehört oder auf diese verweist. Beispielsweise dürfen Geräte-Implementierer KEINE APIs zu
com.google.*
oder einem ähnlichen Namespace hinzufügen. Nur Google darf dies tun. Ebenso DARF Google KEINE APIs zu den APIs anderer Unternehmen hinzufügen. Namespaces. - [C-0-6] MÜSSEN in einer gemeinsam genutzten Bibliothek von Android gepackt sein, damit nur Apps, die diese explizit (über den Mechanismus <uses-library>) verwenden, von der erhöhten Speichernutzung solcher APIs betroffen sind.
Wenn ein Geräte-Implementierer vorschlägt, einen der oben genannten Paket-Namespaces zu verbessern, z. B. durch das Hinzufügen nützlicher neuer Funktionen zu einer vorhandenen API oder das Hinzufügen einer neuen API, sollte der Implementierer source.android.com aufrufen und mit dem Prozess beginnen, Änderungen und Code gemäß den Informationen auf dieser Website beizusteuern.
Beachten Sie, dass die oben genannten Einschränkungen den Standardkonventionen für die Benennung von APIs in der Programmiersprache Java entsprechen. Dieser Abschnitt zielt einfach darauf ab, diese Konventionen zu bekräftigen und sie durch Einbeziehung in diese Kompatibilitätsdefinition bindend zu machen.
3.7 Laufzeitkompatibilität
Geräteimplementierungen:
-
[C-0-1] MÜSSEN das vollständige Dalvik Executable (DEX)-Format und die Dalvik-Bytecode-Spezifikation und -Semantik unterstützen.
-
[C-0-2] MÜSSEN Dalvik-Laufzeiten so konfigurieren, dass Speicher entsprechend der vorgelagerten Android-Plattform und wie in der folgenden Tabelle angegeben zugeordnet wird. Informationen zu Bildschirmgrößen und Bildschirmdichten finden Sie in Abschnitt 7.1.1.
-
SOLLTEN Android RunTime (ART), die Upstream-Referenzimplementierung des Dalvik Executable Formats und das Paketverwaltungssystem der Referenzimplementierung verwenden.
-
SOLLTEN Sie Fuzz-Tests in verschiedenen Ausführungsmodi und Zielarchitekturen durchführen, um die Stabilität der Laufzeit sicherzustellen. Weitere Informationen finden Sie auf der Website des Android Open Source Project unter JFuzz und DexFuzz.
Hinweis: Die unten angegebenen Speicherwerte gelten als Mindestwerte. Bei Geräteimplementierungen MÖGLICHERWEISE kann mehr Speicher pro Anwendung zugewiesen werden.
Bildschirmlayout | Bildschirmdichte | Mindestanforderungen an den Anwendungsarbeitsspeicher |
---|---|---|
Android-Uhr | 120 dpi (ldpi) | 32MB |
140 dpi (140dpi) | ||
160 dpi (mdpi) | ||
180 dpi (180dpi) | ||
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | 36MB | |
240 dpi (hdpi) | ||
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 | |
klein/normal | 120 dpi (ldpi) | 32MB |
140 dpi (140dpi) | ||
160 dpi (mdpi) | ||
180 dpi (180dpi) | 48MB | |
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | ||
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 | |
groß | 120 dpi (ldpi) | 32MB |
140 dpi (140dpi) | 48MB | |
160 dpi (mdpi) | ||
180 dpi (180dpi) | 80MB | |
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | ||
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 | |
xlarge | 120 dpi (ldpi) | 48MB |
140 dpi (140dpi) | 80MB | |
160 dpi (mdpi) | ||
180 dpi (180dpi) | 96MB | |
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | ||
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 Kompatibilität der Benutzeroberfläche
3.8.1 Launcher (Startbildschirm)
Android umfasst eine Launcher-App (Startbildschirm) und Unterstützung für Drittanbieter-Apps als Ersatz für den Geräte-Launcher (Startbildschirm).
Wenn auf Geräten Drittanbieter-Apps den Startbildschirm des Geräts ersetzen können, geschieht Folgendes:
- [C-1-1] MÜSSEN die Plattformfunktion
android.software.home_screen
deklarieren. - [C-1-2] MÜSSEN das
AdaptiveIconDrawable
-Objekt zurückgeben, wenn die Drittanbieter-App das<adaptive-icon>
-Tag zur Bereitstellung ihres Symbols verwendet und diePackageManager
-Methoden zum Abrufen von Symbolen aufgerufen werden.
Wenn Geräteimplementierungen einen Standard-Launcher enthalten, der das Anpinnen von Verknüpfungen in der App unterstützt, gilt Folgendes:
- [C-2-1] MÜSSEN
true
fürShortcutManager.isRequestPinShortcutSupported()
melden. - [C-2-2] MÜSSEN den Nutzer fragen, ob er eine Verknüpfung hinzufügen kann, die von Apps über die API-Methode
ShortcutManager.requestPinShortcut()
angefordert wird. - [C-2-3] MÜSSEN angepinnte Verknüpfungen sowie dynamische und statische Verknüpfungen unterstützen, wie auf der Seite „App-Verknüpfungen“ beschrieben.
Umgekehrt gilt: Wenn Geräteimplementierungen das Anpinnen von Verknüpfungen innerhalb der App nicht unterstützen, hat das folgende Auswirkungen:
- [C-3-1] MÜSSEN
false
fürShortcutManager.isRequestPinShortcutSupported()
melden.
Wenn in Geräteimplementierungen ein Standard-Launcher implementiert wird, der schnellen Zugriff auf zusätzliche Verknüpfungen von Drittanbieter-Apps über die ShortcutManager API bietet, geschieht Folgendes:
- [C-4-1] MUSS alle dokumentierten Funktionen für Tastenkombinationen (z.B. statische und dynamische Tastenkombinationen, anheftende Tastenkombinationen) unterstützen und die APIs der API-Klasse
ShortcutManager
vollständig implementieren.
Wenn Geräte eine Standard-Launcher-App mit Badges für die App-Symbole enthalten, gilt Folgendes:
- [C-5-1] MUSS die API-Methode
NotificationChannel.setShowBadge()
berücksichtigen. Mit anderen Worten: Zeigen Sie ein visuelles Angebot, das mit dem App-Symbol verknüpft ist, wenn der Wert auftrue
festgelegt ist, und kein Kennzeichen für App-Symbole, wenn alle Benachrichtigungskanäle der App den Wert auffalse
gesetzt haben. - KÖNNEN die App-Symbol-Logos durch das eigene Logo-Schema überschreiben, wenn Drittanbieter-Apps die Unterstützung des proprietären Kennzeichens mit proprietären APIs angeben, SOLLTEN jedoch die Ressourcen und Werte verwenden, die über die im SDK beschriebenen APIs für Benachrichtigungen bereitgestellt werden, z. B.
Notification.Builder.setNumber()
und dieNotification.Builder.setBadgeIconType()
API.
3.8.2 Widgets
Android unterstützt Widgets von Drittanbieter-Apps, indem ein Komponententyp, eine entsprechende API und ein Lebenszyklus definiert werden, die es Anwendungen ermöglichen, dem Endnutzer ein „AppWidget“ zur Verfügung zu stellen.
Wenn Geräteimplementierungen App-Widgets von Drittanbietern unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Unterstützung für Plattformfunktion
android.software.app_widgets
erklären. - [C-1-2] MÜSSEN integrierte Unterstützung für AppWidgets haben und Funktionen der Benutzeroberfläche zum Hinzufügen, Konfigurieren, Anzeigen und Entfernen von AppWidgets direkt im Launcher anzeigen.
- [C-1-3] MÜSSEN Widgets mit dem Format 4 x 4 in der Standardrastergröße rendern können. Weitere Informationen finden Sie in den DesignGuidelines für App-Widgets in der Android SDK-Dokumentation.
- KANN App-Widgets auf dem Sperrbildschirm unterstützen.
Wenn Geräteimplementierungen Drittanbieter-App-Widgets und das Anpinnen von Verknüpfungen in der App unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN
true
fürAppWidgetManager.html.isRequestPinAppWidgetSupported()
melden. - [C-2-2] MÜSSEN den Nutzer fragen, ob er eine Verknüpfung hinzufügen kann, die von Apps über die API-Methode
AppWidgetManager.requestPinAppWidget()
angefordert wird.
3.8.3 Benachrichtigungen
Android umfasst Notification
und NotificationManager
APIs, mit denen Entwickler von Drittanbieter-Apps Nutzer über wichtige Ereignisse informieren und Nutzer ansprechen können Hardwarekomponenten (z.B. Ton, Vibration und Licht) und Softwarefunktionen (z.B. Benachrichtigungsleiste, Systemleiste) des Geräts aufmerksam machen.
3.8.3.1 Darstellung von Benachrichtigungen
Wenn Drittanbieter-Apps Nutzer über wichtige Ereignisse benachrichtigen dürfen, gilt Folgendes:
- [C-1-1] MÜSSEN Benachrichtigungen unterstützen, die Hardwarefunktionen verwenden, wie in der SDK-Dokumentation beschrieben, und soweit dies mit der Hardware zur Geräteimplementierung möglich ist. Wenn beispielsweise eine Geräteimplementierung einen Vibrationsalarm enthält, MÜSSEN die Vibrations-APIs korrekt implementiert werden. Wenn bei einer Geräteimplementierung keine Hardware vorhanden ist, MÜSSEN die entsprechenden APIs als managementfrei implementiert werden. Dieses Verhalten wird in Abschnitt 7 ausführlicher beschrieben.
- [C-1-2] MÜSSEN alle Ressourcen (Symbole, Animationsdateien usw.) korrekt rendern, die in den APIs oder im Symbol-Styleguide für Status/Systemleiste angegeben sind. Sie MÖGLICHERWEISE jedoch eine alternative Nutzererfahrung für Benachrichtigungen bieten als die, die in der Open-Source-Referenzimplementierung bereitgestellt wird.
- [C-1-3] MÜSSEN die für die APIs beschriebenen Verhaltensweisen einhalten und korrekt implementieren, um Benachrichtigungen zu aktualisieren, zu entfernen und zu gruppieren.
- [C-1-4] MUSS das vollständige Verhalten der NotificationChannel API, die im SDK dokumentiert ist, bereitstellen.
- [C-1-5] MÜSSEN auf jeder Kanal- und App-Paketebene eine Nutzeroption zum Blockieren und Ändern der Benachrichtigung einer bestimmten Drittanbieter-App bereitstellen.
- [C-1-6] MÜSSEN auch eine Nutzeroption zum Anzeigen gelöschter Benachrichtigungskanäle bereitstellen.
- [C-1-7] MÜSSEN alle über Notification.MessagingStyle bereitgestellten Ressourcen (Bilder, Sticker, Symbole usw.) zusammen mit dem Benachrichtigungstext ohne zusätzliche Nutzerinteraktion korrekt rendern. Beispielsweise MÜSSEN alle Ressourcen und Symbole angezeigt werden, die von android.app.Person in einer Gruppenunterhaltung bereitgestellt werden, die über setGroupConversation festgelegt wird.
- [C-SR] Es wird dringend empfohlen, die Benachrichtigung einer bestimmten Drittanbieter-App für jeden Kanal und jede App-Paketebene automatisch anzuzeigen, nachdem der Nutzer die Benachrichtigung mehrmals geschlossen hat.
- SOLLTEN erweiterte Benachrichtigungen unterstützen.
- SOLLTEN Benachrichtigungen mit höherer Priorität als Vorabbenachrichtigungen präsentiert werden.
- SOLLTEN die Nutzer die Möglichkeit haben, Benachrichtigungen zurückzustellen.
- KANN nur die Sichtbarkeit und das Timing festlegen, wann Nutzer von Drittanbieter-Apps über wichtige Ereignisse informiert werden dürfen, um Sicherheitsprobleme wie die Ablenkung des Fahrers zu verringern.
Wenn Geräteimplementierungen umfassende Benachrichtigungen unterstützen, gilt Folgendes:
- [C-2-1] MUSS exakt die Ressourcen verwenden, die über die API-Klasse
Notification.Style
und deren Unterklassen für die dargestellten Ressourcenelemente bereitgestellt werden. - SOLLTEN Sie jedes einzelne Ressourcenelement (z.B. Symbol, Titel und Zusammenfassungstext) präsentieren, das in der
Notification.Style
API-Klasse und den zugehörigen Unterklassen definiert ist.
Wenn Geräteimplementierungen Vorabbenachrichtigungen unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN die Ansicht und die Ressourcen für Vorabbenachrichtigungen wie in der API-Klasse
Notification.Builder
beschrieben verwenden, wenn Vorabbenachrichtigungen angezeigt werden. - [C-3-2] MÜSSEN die über
Notification.Builder.addAction()
bereitgestellten Aktionen zusammen mit dem Inhalt der Benachrichtigung ohne zusätzliche Nutzerinteraktion, wie im SDK beschrieben, angezeigt werden.
3.8.3.2 Mitteilungs-Listener-Dienst
Android enthält die NotificationListenerService
APIs, über die Apps (sobald sie vom Nutzer explizit aktiviert wurden) eine Kopie aller Benachrichtigungen erhalten, sobald diese gepostet oder aktualisiert werden.
Wenn Geräteimplementierungen das Funktions-Flag android.hardware.ram.normal
melden, geschieht Folgendes:
- [C-1-1] MÜSSEN Benachrichtigungen in ihrer Gesamtheit korrekt und unverzüglich vollständig für alle installierten und nutzeraktivierten Listener-Dienste, einschließlich aller an das Benachrichtigungsobjekt angehängten Metadaten, aktualisieren.
- [C-1-2] MÜSSEN den
snoozeNotification()
-API-Aufruf respektieren, die Benachrichtigung schließen und nach Ablauf der im API-Aufruf festgelegten Schlummerdauer einen Rückruf tätigen.
Wenn Geräteimplementierungen Nutzern die Möglichkeit bieten, Benachrichtigungen zurückzustellen, geschieht Folgendes:
- [C-2-1] MÜSSEN den Status der zurückgestellten Benachrichtigungen über die Standard-APIs wie
NotificationListenerService.getSnoozedNotifications()
korrekt wiedergeben. - [C-2-2] MÜSSEN diesem Nutzer die Möglichkeit geben, Benachrichtigungen von jeder installierten Drittanbieter-App zurückzustellen, es sei denn, sie stammen aus dauerhaften Diensten oder Diensten im Vordergrund.
3.8.3.3 Nicht stören
Wenn Geräteimplementierungen die Funktion „Nicht stören“ unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN eine Aktivität implementieren, die auf den Intent ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS reagieren würde. Bei Implementierungen mit UI_MODE_TYPE_NORMAL MUSS es eine Aktivität sein, bei der der Nutzer der App Zugriff auf nicht störende Richtlinienkonfigurationen gewähren oder verweigern kann.
- [C-1-2] MÜSSEN, wenn Nutzer-Apps durch die Geräteimplementierung den Zugriff auf die „Nicht stören“-Richtlinienkonfiguration erlauben oder verweigern können, die von Apps erstellten Automatischen „Nicht stören“-Regeln zusammen mit den vom Nutzer erstellten und vordefinierten Regeln angezeigt werden.
- [C-1-3] MÜSSEN die mit
NotificationManager.Policy
übergebenen Werte fürsuppressedVisualEffects
berücksichtigen. Wenn für eine App eines der Flags SUPPRESSED_EFFEKT_SCREEN_OFF oder SUPPRESSED_EFFECT_SCREEN_ON festgelegt ist, SOLLTEN die Nutzer darauf hingewiesen werden, dass die visuellen Effekte im Einstellungsmenü „Nicht stören“ unterdrückt werden.
3.8.4. Suchen
Android enthält APIs, mit denen Entwickler die Suche in ihre Anwendungen einbinden und die Daten ihrer Anwendungen in die globale Systemsuche aufnehmen können. Im Allgemeinen besteht diese Funktion aus einer einzigen, systemweiten Benutzeroberfläche, über die Nutzer Suchanfragen eingeben, Vorschläge während der Eingabe anzeigen und Ergebnisse anzeigen können. Mit den Android-APIs können Entwickler diese Oberfläche wiederverwenden, um eine Suche in ihren eigenen Apps durchzuführen, und ermöglichen es Entwicklern, Ergebnisse über die allgemeine Benutzeroberfläche für die globale Suche bereitzustellen.
- Implementierungen von Android-Geräten SOLLTEN die globale Suche umfassen. Dabei handelt es sich um eine einzige, gemeinsam genutzte, systemweite Suchoberfläche, die in Echtzeit Vorschläge als Reaktion auf Nutzereingaben erhalten kann.
Wenn Geräteimplementierungen die globale Suchoberfläche implementieren, geschieht Folgendes:
- [C-1-1] MÜSSEN die APIs implementieren, die es Drittanbieteranwendungen ermöglichen, dem Suchfeld Vorschläge hinzuzufügen, wenn es im globalen Suchmodus ausgeführt wird.
Wenn keine Anwendungen von Drittanbietern installiert sind, die die globale Suche verwenden:
- Das Standardverhalten sollte sein, dass Ergebnisse und Vorschläge von Suchmaschinen angezeigt werden.
Android umfasst auch die Assist APIs, über die Apps festlegen können, wie viele Informationen des aktuellen Kontextes mit dem Assistenten auf dem Gerät geteilt werden.
Wenn Geräteimplementierungen die Aktion „Assist“ unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN Endnutzer deutlich darüber informieren, wenn der Kontext auf eine der folgenden Arten geteilt wird:
<ph type="x-smartling-placeholder">
- </ph>
- Jedes Mal, wenn die Assistent-App auf den Kontext zugreift, wird ein weißes Licht am Bildschirmrand angezeigt, das die Dauer und Helligkeit der Android Open Source Project-Implementierung erreicht oder überschreitet.
- Die vorinstallierte Assistent-App bietet dem Nutzer weniger als zwei Navigationsversuche vom standardmäßigen Einstellungsmenü für die Spracheingabe und der Assistant-App. Der Kontext wird nur weitergegeben, wenn der Nutzer die Assistent-App explizit über ein Hotword oder die Eingabe der Navigationstaste für die Unterstützung aufrufen kann.
- [C-2-2] Die vorgesehene Interaktion zum Starten der Assist-App, wie in Abschnitt 7.2.3 beschrieben, MÜSSEN die vom Nutzer ausgewählte Assistent-App starten, also die App, die
VoiceInteractionService
implementiert, oder eine Aktivität, die den IntentACTION_ASSIST
verarbeitet.
3.8.5 Benachrichtigungen und Toasts
Anwendungen können die Toast
API verwenden, um dem Endnutzer kurze nicht modale Strings anzuzeigen, die nach kurzer Zeit ausgeblendet werden. Mit der TYPE_APPLICATION_OVERLAY
-Fenstertyp-API können Sie Benachrichtigungsfenster als Overlay über anderen Apps einblenden.
Wenn Geräteimplementierungen eine Bildschirm- oder Videoausgabe beinhalten, gilt Folgendes:
-
[C-1-1] MÜSSEN eine App anbieten, die verhindert, dass Warnfenster angezeigt werden, in denen
TYPE_APPLICATION_OVERLAY
verwendet wird . Die AOSP-Implementierung erfüllt diese Anforderung durch Steuerelemente in der Benachrichtigungsleiste. -
[C-1-2] MÜSSEN die Toast API berücksichtigen und Endnutzern in gut sichtbarer Weise Toasts von Anwendungen anzeigen.
3.8.6. Designs
Android bietet „Designs“, mit denen Apps Stile auf eine gesamte Aktivität oder App anwenden können.
Android umfasst ein „Holo“ und „Material“ Designfamilie als eine Reihe definierter Stile, die Anwendungsentwickler verwenden können, wenn sie dem Holo-Design-Design gemäß der Definition im Android SDK entsprechen möchten.
Wenn Geräteimplementierungen eine Bildschirm- oder Videoausgabe beinhalten, gilt Folgendes:
- [C-1-1] DÜRFEN KEINE der Holo-Designattribute verändern, die Anwendungen zur Verfügung stehen.
- [C-1-2] MUSS die Designfamilie "Material" unterstützen und DÜRFEN KEINE Attribute des Materials oder deren Assets ändern, die in Anwendungen sichtbar sind.
Android umfasst auch eine „Gerätestandard“-Designfamilie als eine Reihe definierter Stile, die Anwendungsentwickler verwenden können, wenn sie das Erscheinungsbild des Gerätedesigns anpassen möchten, das vom Geräte-Implementierer definiert wurde.
- Bei Geräteimplementierungen KÖNNEN die Attribute für Gerätestandarddesigns, die Apps zur Verfügung stehen, geändert werden.
Android unterstützt ein Variantendesign mit durchscheinenden Systemleisten, mit dem App-Entwickler den Bereich hinter der Status- und Navigationsleiste mit ihren App-Inhalten ausfüllen können. Damit Entwickler in dieser Konfiguration einheitlich arbeiten können, ist es wichtig, dass das Symbol der Statusleiste bei verschiedenen Geräteimplementierungen beibehalten wird.
Wenn Geräteimplementierungen eine Systemstatusleiste enthalten, gilt Folgendes:
- [C-2-1] MUSS Weiß für Systemstatussymbole (z. B. Signalstärke und Akkustand) und vom System ausgegebene Benachrichtigungen verwenden, es sei denn, das Symbol zeigt einen problematischen Status an oder eine App fordert mit der Markierung SYSTEM_UI_FLAG_LIGHT_STATUS_BAR eine Lichtstatusleiste an.
- [C-2-2] Bei Implementierungen von Android-Geräten MÜSSEN die Farbe der Systemstatussymbole zu Schwarz ändern (weitere Informationen dazu finden Sie unter R.style), wenn eine App eine helle Statusleiste anfordert.
3.8.7 Live-Hintergründe
Android definiert einen Komponententyp sowie eine entsprechende API und einen entsprechenden Lebenszyklus, die es Anwendungen ermöglichen, einem oder mehreren Live-Hintergründen für Endnutzer verfügbar zu sein. Live-Hintergründe sind Animationen, Muster oder ähnliche Bilder mit eingeschränkten Eingabemöglichkeiten, die als Hintergrund hinter anderen Anwendungen angezeigt werden.
Hardware gilt als in der Lage, Live-Hintergründe zuverlässig auszuführen, wenn sie alle Live-Hintergründe ohne Einschränkung der Funktionalität mit einer angemessenen Framerate und ohne negative Auswirkungen auf andere Anwendungen ausführen kann. Wenn Einschränkungen in der Hardware dazu führen, dass Hintergründe und/oder Anwendungen abstürzen, nicht richtig funktionieren, zu viel CPU- oder Akkuleistung beansprucht werden oder mit inakzeptablen Frame-Rates ausgeführt wird, wird davon ausgegangen, dass die Hardware keinen Live-Hintergrund ausführen kann. So können beispielsweise einige Live-Hintergründe zum Rendern der Inhalte möglicherweise den OpenGL 2.0- oder 3.x-Kontext verwenden. Live-Hintergrund funktioniert nicht zuverlässig auf Hardware, die nicht mehrere OpenGL-Kontexte unterstützt, da die Verwendung eines OpenGL-Kontexts mit anderen Anwendungen in Konflikt stehen kann, die ebenfalls einen OpenGL-Kontext verwenden.
- In Geräteimplementierungen, in denen Live-Hintergründe wie oben beschrieben zuverlässig ausgeführt werden können, SOLLTEN Live-Hintergründe implementiert werden.
Wenn Live-Hintergründe auf Geräten implementiert sind, gilt Folgendes:
- [C-1-1] MÜSSEN das Funktions-Flag „android.software.live_wallpaper“ der Plattform melden.
3.8.8. Wechseln zwischen Aktivitäten
Der vorgelagerte Android-Quellcode umfasst den Übersichtsbildschirm, eine Benutzeroberfläche auf Systemebene zum Wechseln zwischen Aufgaben und zur Anzeige der zuletzt aufgerufenen Aktivitäten und Aufgaben. Dabei wird eine Miniaturansicht der grafischen Darstellung der App zum Zeitpunkt des letzten Verlassens der App angezeigt.
Bei Geräteimplementierungen, einschließlich der Navigationstaste für die Funktion „Zuletzt verwendet“, wie in Abschnitt 7.2.3 beschrieben, KANN die Benutzeroberfläche verändert werden.
Wenn Geräteimplementierungen, die die Navigationstaste für die Funktion „Kürzlich verwendet“ wie in Abschnitt 7.2.3 beschrieben, geändert haben, geschieht Folgendes:
- [C-1-1] MUSS mindestens bis zu sieben angezeigte Aktivitäten unterstützen.
- SOLLTE mindestens den Titel von vier Aktivitäten gleichzeitig anzeigen.
- [C-1-2] MÜSSEN die Funktion zur Bildschirmfixierung implementieren und dem Nutzer ein Einstellungsmenü zur Ein/Aus-Schaltfläche für die Funktion zur Verfügung stellen.
- SOLLTEN unter „Letzte“ die Farbe, das Symbol und den Bildschirmtitel hervorheben.
- SOLLTE ein abschließendes Angebot („x“) angezeigt werden, aber KANN die Anzeige verzögern, bis der Nutzer mit den Bildschirmen interagiert.
- SOLLTEN Sie eine Verknüpfung implementieren, um einfach zur vorherigen Aktivität zu wechseln.
- SOLLTEN Sie den schnellen Wechsel zwischen den beiden zuletzt verwendeten Apps auslösen, wenn zweimal auf die Taste „Zuletzt verwendet“ getippt wird.
- SOLLTE den Splitscreen-Mehrfenstermodus (falls unterstützt) auslösen, wenn die Taste „Recents“ (Zuletzt verwendet) gedrückt wird.
- KANN verbundene zuletzt verwendete Elemente als Gruppe angezeigt werden, die zusammen verschoben wird.
- [SR] wird dringend empfohlen, für den Übersichtsbildschirm die vorgelagerte Android-Benutzeroberfläche (oder eine ähnliche, Miniaturbildbasierte Oberfläche) zu verwenden.
3.8.9. Eingabeverwaltung
Android unterstützt Input Management und Eingabemethodeneditoren von Drittanbietern.
Wenn Nutzer bei der Geräteimplementierung Eingabemethoden von Drittanbietern auf dem Gerät verwenden können, gilt Folgendes:
- [C-1-1] MÜSSEN die Plattformfunktion android.software.input_methods und die Unterstützung von IME APIs gemäß der Definition in der Android SDK-Dokumentation angeben.
- [C-1-2] MÜSSEN einen für Nutzer zugänglichen Mechanismus bereitstellen, mit dem Eingabemethoden von Drittanbietern als Reaktion auf den Intent android.settings.INPUT_METHOD_SETTINGS hinzugefügt und konfiguriert werden können.
Wenn in Geräteimplementierungen das Funktions-Flag android.software.autofill
deklariert ist, gilt Folgendes:
- [C-2-1] MÜSSEN die APIs
AutofillService
undAutofillManager
vollständig implementieren und den Intentandroid.settings.REQUEST_SET_AUTOFILL_SERVICE
berücksichtigen, um ein Standardmenü für App-Einstellungen zum Aktivieren und Deaktivieren von Autofill anzuzeigen und den standardmäßigen Autofill-Service für den Nutzer zu ändern.
3.8.10 Mediensteuerung auf dem Sperrbildschirm
Die Remote Control Client API wird von Android 5.0 durch die Media Notification Template ersetzt, mit der Medien-Apps in die Wiedergabesteuerung auf dem Sperrbildschirm integriert werden können.
3.8.11 Bildschirmschoner (früher „Dreams“)
Android unterstützt interaktive Bildschirmschoner, die zuvor als Dreams bezeichnet wurden. Mit Bildschirmschonern können Nutzer mit Apps interagieren, wenn ein an eine Stromquelle angeschlossenes Gerät inaktiv ist oder in einem Dock angedockt ist. Android Watch-Geräte KÖNNEN Bildschirmschoner implementieren. Andere Arten von Geräteimplementierungen SOLLTEN jedoch Bildschirmschoner unterstützen und Nutzern eine Option zur Konfiguration von Bildschirmschonern als Reaktion auf den Intent android.settings.DREAM_SETTINGS
bieten.
3.8.12. Standort
Wenn die Geräteimplementierung einen Hardwaresensor (z.B. GPS) zur Bereitstellung der Standortkoordinaten umfasst, werden
- [C-1-2] MÜSSEN den aktuellen Status des Standorts im Menü "Standort" in den Einstellungen anzeigen.
- [C-1-3] DÜRFEN KEINE Standortmodi im Menü "Standort" in den Einstellungen angezeigt werden.
3.8.13. Unicode und Schriftart
Android unterstützt die in Unicode 10.0 definierten Emoji-Zeichen.
Wenn Geräteimplementierungen eine Bildschirm- oder Videoausgabe beinhalten, gilt Folgendes:
- [C-1-1] MUSS diese Emoji-Zeichen in Farbglyphen rendern können.
- [C-1-2] MÜSSEN folgende unterstützen:
<ph type="x-smartling-placeholder">
- </ph>
- Roboto 2-Schriftart mit unterschiedlichen Schriftstärken: sans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black, Sans Serif-kondensierte, Sans Serif-Kondensat-Light-Light.
- Vollständige Unicode 7.0-Abdeckung für lateinamerikanische, griechische und kyrillische Sprachen, einschließlich der erweiterten lateinischen Bereiche A, B, C und D sowie aller Glyphen im Währungssymbolblock von Unicode 7.0.
- SOLLTEN den Hautton und verschiedene Familien-Emojis gemäß Unicode Technical Report Nr. 51 unterstützen.
Wenn Geräteimplementierungen einen IME enthalten, gilt Folgendes:
- SOLLTE dem Nutzer eine Eingabemethode für diese Emoji-Zeichen zur Verfügung stellen.
Android unterstützt das Rendern von myanmarischen Schriftarten. In Myanmar gibt es für das Rendern der Sprachen Myanmars mehrere nicht Unicode-konforme Schriftarten, die allgemein als „Zawgyi“ bezeichnet werden.
Wenn Geräteimplementierungen Burmesisch unterstützen, gilt Folgendes:
* [C-2-1] MUST render text with Unicode compliant font as default;
non-Unicode compliant font MUST NOT be set as default font unless the user
chooses it in the language picker.
* [C-2-2] MUST support a Unicode font and a non-Unicode compliant font if a
non-Unicode compliant font is supported on the device. Non-Unicode
compliant font MUST NOT remove or overwrite the Unicode font.
* [C-2-3] MUST render text with non-Unicode compliant font ONLY IF a
language code with [script code Qaag](
http://unicode.org/reports/tr35/#unicode_script_subtag_validity) is
specified (e.g. my-Qaag). No other ISO language or region codes (whether
assigned, unassigned, or reserved) can be used to refer to non-Unicode
compliant font for Myanmar. App developers and web page authors can
specify my-Qaag as the designated language code as they would for any
other language.
3.8.14. Mehrere Fenster
Wenn Geräteimplementierungen die Möglichkeit haben, mehrere Aktivitäten gleichzeitig anzuzeigen, gilt Folgendes:
- [C-1-1] MÜSSEN diese Mehrfenstermodi gemäß dem Anwendungsverhalten und den APIs, die in der Dokumentation zur Unterstützung des Mehrfenstermodus des Android SDK beschrieben sind, implementieren und die folgenden Anforderungen erfüllen:
- [C-1-2] MÜSSEN
android:resizeableActivity
berücksichtigen, das von einer App in derAndroidManifest.xml
-Datei festgelegt wird, wie in diesem SDK beschrieben. - [C-1-3] DÜRFEN KEINEN Splitscreen- oder Freeform-Modus anbieten, wenn die Bildschirmhöhe weniger als 440 dp und die Bildschirmbreite weniger als 440 dp beträgt.
- [C-1-4] Die Größe einer Aktivität DÜRFEN NICHT auf eine Größe unter 220 dp im Mehrfenstermodus mit Ausnahme von Bild im Bild geändert werden.
- Geräteimplementierungen mit einer Bildschirmgröße von
xlarge
SOLLTEN den Freiformmodus unterstützen.
Wenn Geräteimplementierungen den Mehrfenstermodus und den Splitscreen-Modus unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN einen in der Größe anpassbaren Launcher vorab als Standard laden.
- [C-2-2] MÜSSEN die angedockte Aktivität eines Mehrfenstermodus mit geteiltem Bildschirm zuschneiden, SOLLTE aber einige Inhalte des Bildschirms anzeigen, wenn die Launcher-App das Fenster im Fokus ist.
- [C-2-3] MÜSSEN die angegebenen Werte
AndroidManifestLayout_minWidth
undAndroidManifestLayout_minHeight
der Drittanbieter-Launcher-App berücksichtigen und dürfen diese Werte nicht überschreiben, wenn Inhalte der angedockten Aktivität angezeigt werden.
Wenn Geräteimplementierungen den Mehrfenstermodus und den Bild-im-Bild-Mehrfenstermodus unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN Aktivitäten im Mehrfenstermodus „Bild im Bild“ gestartet werden, wenn die App: * auf API-Level 26 oder höher ausgerichtet ist und
android:supportsPictureInPicture
* auf API-Level 25 oder niedriger ausgerichtet ist und sowohlandroid:resizeableActivity
als auchandroid:supportsPictureInPicture
deklariert. - [C-3-2] MÜSSEN die Aktionen in der System-UI gemäß der aktuellen PIP-Aktivität über die
setActions()
API anzeigen. - [C-3-3] MUSS Seitenverhältnisse größer oder gleich 1:2,39 und kleiner oder gleich 2,39:1 unterstützen, wie in der PIP-Aktivität über die
setAspectRatio()
API angegeben. - [C-3-4] MUSS
KeyEvent.KEYCODE_WINDOW
verwenden, um das BiB-Fenster zu steuern. Wenn der BiB-Modus nicht implementiert ist, MUSS der Schlüssel für die Vordergrundaktivität verfügbar sein. - [C-3-5] MÜSSEN Nutzern die Möglichkeit bieten, die Darstellung einer App im BiB-Modus zu blockieren. Die AOSP-Implementierung erfüllt diese Anforderung durch Steuerelemente in der Benachrichtigungsleiste.
- [C-3-6] MÜSSEN eine minimale Breite und Höhe von 108 dp für das BiB-Fenster und eine Mindestbreite von 240 dp und eine Höhe von 135 dp für das BiB-Fenster zugewiesen werden, wenn
Configuration.uiMode
alsUI_MODE_TYPE_TELEVISION
konfiguriert ist.
3.8.15. Display-Aussparung
Android unterstützt eine Display-Aussparung, wie im SDK-Dokument beschrieben. Die DisplayCutout
API definiert einen Bereich am Rand des Displays, in dem keine Inhalte angezeigt werden können.
Wenn Geräteimplementierungen Display-Aussparungen enthalten, gilt Folgendes:
- [C-1-1] DÜRFEN nur Aussparungen an den kurzen Kanten des Geräts haben. Beträgt das Seitenverhältnis jedoch 1, 0 (1:1), DÜRFEN es KEINE Aussparungen haben.
- [C-1-2] DÜRFEN NICHT mehr als eine Aussparung pro Rand haben.
- [C-1-3] MÜSSEN die von der App über die
WindowManager.LayoutParams
API festgelegten Flags für Display-Aussparungen berücksichtigen, wie im SDK beschrieben. - [C-1-4] MÜSSEN korrekte Werte für alle Messwerte für Aussparungen melden, die in der
DisplayCutout
API definiert sind.
3.9. Geräteverwaltung
Android umfasst Funktionen, mit denen sicherheitsbewusste Apps über die Android Device Administration API Geräteverwaltungsfunktionen auf Systemebene ausführen können. So können beispielsweise Passwortrichtlinien erzwungen oder Daten aus der Ferne gelöscht werden.
Wenn Geräteimplementierungen alle in der Android SDK-Dokumentation definierten Richtlinien zur Geräteverwaltung implementieren, gilt Folgendes:
- [C-1-1] MUSS
android.software.device_admin
deklarieren. - [C-1-2] MUSS die Nutzerverwaltung für Geräte unterstützen, wie in Abschnitt 3.9.1 und Abschnitt 3.9.1.1 beschrieben.
3.9.1 Gerätebereitstellung
3.9.1.1 Nutzerverwaltung für Geräteinhaber
Wenn in Geräteimplementierungen android.software.device_admin
deklariert wird, gilt Folgendes:
- [C-1-1] MUSS die Registrierung eines Device Policy-Clients (DPC) als Device Owner-App wie unten beschrieben unterstützen:
<ph type="x-smartling-placeholder">
- </ph>
- Wenn in der Geräteimplementierung noch keine Nutzerdaten konfiguriert sind, geschieht Folgendes:
<ph type="x-smartling-placeholder">
- </ph>
- [C-1-3] MÜSSEN
true
fürDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
melden. - [C-1-4] MÜSSEN die DPC-Anwendung als Reaktion auf die Intent-Aktion
android.app.action.PROVISION_MANAGED_DEVICE
als Geräteinhaber-App registrieren. - [C-1-5] MÜSSEN die DPC-Anwendung als Geräteeigentümer-App registrieren, wenn das Gerät NFC-Unterstützung (Nahfeldkommunikation) über das Funktions-Flag
android.hardware.nfc
deklariert und eine NFC-Nachricht mit einem Eintrag vom MIME-TypMIME_TYPE_PROVISIONING_NFC
erhält.
- [C-1-3] MÜSSEN
- Wenn die Geräteimplementierung Nutzerdaten enthält, geschieht Folgendes:
<ph type="x-smartling-placeholder">
- </ph>
- [C-1-6] MÜSSEN
false
fürDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
melden. - [C-1-7] DARF keine DPC-Anwendung mehr als Geräteinhaber-App registrieren.
- [C-1-6] MÜSSEN
- Wenn in der Geräteimplementierung noch keine Nutzerdaten konfiguriert sind, geschieht Folgendes:
<ph type="x-smartling-placeholder">
- [C-1-2] MUSS während des Bereitstellungsprozesses eine positive Aktion erfordern, damit die App als Geräteinhaber festgelegt werden kann. Die Einwilligung kann über eine Nutzeraktion oder programmatisch während der Bereitstellung erfolgen. Sie DARF aber NICHT hartcodiert sein oder die Verwendung anderer Geräteinhaber-Apps verhindern.
Wenn in Geräteimplementierungen android.software.device_admin
deklariert wird, sollten aber auch eine proprietäre Lösung für die Verwaltung des Geräteinhabers eingebunden werden und es muss ein Mechanismus bereitgestellt werden, um eine in der Lösung konfigurierte Anwendung als „Äquivalent des Geräteinhabers“ hochzustufen. den standardmäßigen „Geräteinhaber“ wie von den standardmäßigen Android DevicePolicyManager APIs erkannt, werden sie:
- [C-2-1] MÜSSEN über ein Verfahren verfügen, mit dem geprüft wird, ob die beworbene App zu einer legitimen Geräteverwaltungslösung für Unternehmen gehört. Außerdem muss sie in der proprietären Lösung so konfiguriert sein, dass die entsprechenden Rechte als „Geräteinhaber“ festgelegt sind.
- [C-2-2] MÜSSEN dieselbe Offenlegung zur Einwilligung des AOSP-Geräteinhabers anzeigen wie in dem von
android.app.action.PROVISION_MANAGED_DEVICE
initiierten Ablauf, bevor die DPC-Anwendung als „Geräteinhaber“ registriert wird. - MÖGLICHERWEISE haben Nutzerdaten auf dem Gerät, bevor die DPC-Anwendung als "Geräteinhaber" registriert wurde.
3.9.1.2 Verwaltete Bereitstellung von Profilen
Wenn in Geräteimplementierungen android.software.managed_users
deklariert wird, gilt Folgendes:
-
[C-1-1] MÜSSEN die APIs implementieren, die es einer DPC-Anwendung ermöglichen, Inhaber eines neuen verwalteten Profils zu werden.
-
[C-1-2] Der Bereitstellungsprozess für verwaltete Profile (der von android.app.action.PROVISION_MANAGED_PROFILE initiierte Ablauf) MÜSSEN mit der AOSP-Implementierung übereinstimmen.
-
[C-1-3] MÜSSEN die folgenden Nutzereigenschaften in den Einstellungen zur Verfügung stellen, um dem Nutzer anzuzeigen, wenn eine bestimmte Systemfunktion durch den Device Policy Controller (DPC) deaktiviert wurde:
- Ein einheitliches Symbol oder ein anderes Nutzerangebot (z. B. das vorgelagerte AOSP-Infosymbol), das angibt, wann eine bestimmte Einstellung von einem Geräteadministrator eingeschränkt wird.
- Eine kurze Erklärung, die der Device Admin über das
setShortSupportMessage
bereitstellt. - Das Symbol der DPC-Anwendung.
3.9.2 Unterstützung für verwaltete Profile
Wenn in Geräteimplementierungen android.software.managed_users
deklariert wird, gilt Folgendes:
- [C-1-1] MUSS verwaltete Profile über die
android.app.admin.DevicePolicyManager
APIs unterstützen. - [C-1-2] MUSS die Erstellung nur eines einzigen verwalteten Profils zulassen.
- [C-1-3] MÜSSEN ein Symbol-Badge verwenden (ähnlich dem AOSP Upstream Work-Badge), um verwaltete Anwendungen und Widgets sowie andere Badge-UI-Elemente wie Recents und Benachrichtigungen.
- [C-1-4] MÜSSEN ein Benachrichtigungssymbol anzeigen (ähnlich dem AOSP-Upstream-Arbeitsabzeichen), das darauf hinweist, dass sich der Nutzer in einer Anwendung mit verwaltetem Profil befindet.
- [C-1-5] MÜSSEN Sie darauf hinweisen, dass sich der Nutzer im verwalteten Profil befindet, wenn das Gerät aktiviert wird (ACTION_USER_PRESENT) und sich die Anwendung im Vordergrund im verwalteten Profil befindet.
- [C-1-6] Wenn ein verwaltetes Profil vorhanden ist, MUSS in der Intent-Auswahl eine visuelle Darstellung angezeigt werden. damit der Nutzer den Intent vom verwalteten Profil an den primären Nutzer weiterleiten kann oder umgekehrt, wenn er vom Device Policy Controller aktiviert wurde.
- [C-1-7] Wenn ein verwaltetes Profil vorhanden ist, MÜSSEN die folgenden Nutzereigenschaften sowohl für den primären Nutzer als auch für das verwaltete Profil angezeigt werden:
<ph type="x-smartling-placeholder">
- </ph>
- Separate Abrechnung von Akku, Standort, mobiler Daten und Speichernutzung für den Hauptnutzer und das verwaltete Profil.
- Unabhängige Verwaltung von VPN-Anwendungen, die im primären Nutzer oder verwalteten Profil installiert sind
- Unabhängige Verwaltung von Anwendungen, die im primären Nutzer oder im verwalteten Profil installiert sind
- Unabhängige Verwaltung von Konten innerhalb des primären Nutzers oder des verwalteten Profils
- [C-1-8] MÜSSEN sicherstellen, dass die vorinstallierten Telefon-, Kontakt- und Messaging-Anwendungen Anruferinformationen im verwalteten Profil (sofern vorhanden) neben denen aus dem primären Profil suchen und nachschlagen können, wenn der Device Policy Controller dies zulässt.
- [C-1-9] MÜSSEN alle Sicherheitsanforderungen erfüllen, die für ein Gerät mit mehreren aktivierten Nutzern gelten (siehe Abschnitt 9.5), auch wenn das verwaltete Profil nicht zusätzlich zum Hauptnutzer als weiterer Nutzer gezählt wird.
- [C-1-10] MÜSSEN die Möglichkeit bieten, einen separaten Sperrbildschirm anzugeben, der die folgenden Anforderungen erfüllt, um Zugriff auf Apps zu gewähren, die in einem verwalteten Profil ausgeführt werden.
- Geräteimplementierungen MÜSSEN den Intent
DevicePolicyManager.ACTION_SET_NEW_PASSWORD
berücksichtigen und eine Schnittstelle zum Konfigurieren separater Anmeldedaten für den Sperrbildschirm für das verwaltete Profil anzeigen. - Für die Sperrbildschirm-Anmeldedaten des verwalteten Profils MÜSSEN dieselben Mechanismen zum Speichern und Verwalten von Anmeldedaten wie beim übergeordneten Profil verwendet werden. Näheres hierzu finden Sie auf der Website des Android-Open-Source-Projekts.
- Die DPC-Passwortrichtlinien MÜSSEN nur für die Sperrbildschirm-Anmeldedaten des verwalteten Profils gelten, es sei denn, sie werden über die
DevicePolicyManager
-Instanz aufgerufen, die von getParentProfileInstance zurückgegeben wird.
- Geräteimplementierungen MÜSSEN den Intent
- Wenn Kontakte aus dem verwalteten Profil in der vorinstallierten Anrufliste, auf der Benutzeroberfläche für laufende Anrufe, in Benachrichtigungen über laufende und verpasste Anrufe, Kontakte und Messaging-Apps angezeigt werden, SOLLTEN sie mit demselben Kennzeichen versehen sein, das auch für Apps in verwalteten Profilen verwendet wird.
3.9.3 Support für verwaltete Nutzer
Wenn in Geräteimplementierungen android.software.managed_users
deklariert wird, gilt Folgendes:
- [C-1-1] MÜSSEN Nutzern die Möglichkeit bieten, sich vom aktuellen Nutzer abzumelden und in einer Sitzung mit mehreren Nutzern zum primären Nutzer zurückzuwechseln, wenn
isLogoutEnabled
den Werttrue
zurückgibt. Das Nutzerangebot MUSS über den Sperrbildschirm zugänglich sein, ohne das Gerät zu entsperren.
3:10. Bedienungshilfen
Android bietet eine Ebene der Bedienungshilfen, über die Nutzer mit Behinderungen ihre Geräte einfacher bedienen können. Darüber hinaus bietet Android Plattform-APIs, die Implementierungen von Bedienungshilfen ermöglichen, Callbacks für Nutzer- und Systemereignisse zu empfangen und alternative Feedback-Mechanismen wie Sprachausgabe, haptisches Feedback und Trackball-/Steuerkreuz-Navigation zu generieren.
Wenn Geräteimplementierungen Bedienungshilfen von Drittanbietern unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN eine Implementierung des Android-Frameworks für Barrierefreiheit im Internet zur Verfügung stellen, wie in der SDK-Dokumentation für die Accessibility APIs beschrieben.
- [C-1-2] MÜSSEN Ereignisse für Bedienungshilfen generieren und die entsprechende
AccessibilityEvent
an alle registriertenAccessibilityService
-Implementierungen übergeben, wie im SDK dokumentiert. - [C-1-3] MÜSSEN dem
android.settings.ACCESSIBILITY_SETTINGS
-Intent zustimmen, einen für Nutzer zugänglichen Mechanismus bereitzustellen, mit dem die Bedienungshilfen von Drittanbietern neben den vorinstallierten Bedienungshilfen aktiviert und deaktiviert werden können. - [C-1-4] MÜSSEN eine Schaltfläche in der Navigationsleiste des Systems hinzufügen, mit der der Nutzer die Bedienungshilfe steuern kann, wenn die aktivierten Bedienungshilfen das
AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
deklarieren . Beachten Sie, dass diese Anforderung für Geräteimplementierungen ohne Systemnavigationsleiste nicht zutrifft. Geräteimplementierungen SOLLTEN jedoch den Nutzern die Möglichkeit bieten, diese Bedienungshilfen zu steuern.
Wenn Geräteimplementierungen vorinstallierte Bedienungshilfen enthalten, gilt Folgendes:
- [C-2-1] MÜSSEN diese vorinstallierten Bedienungshilfen als Direct Boot Aware-Apps implementieren, wenn der Datenspeicher durch File-Based Encryption (FBE) verschlüsselt ist.
- SOLLTEN in der vorkonfigurierten Einrichtung einen Mechanismus enthalten, mit dem Nutzer relevante Bedienungshilfen aktivieren können, sowie Optionen zum Anpassen der Schriftgröße, der Anzeigegröße und der Vergrößerungsbewegungen.
3:11 Sprachausgabe
Android umfasst APIs, mit denen Anwendungen die Sprachausgabedienste nutzen können. Außerdem können Dienstanbieter Implementierungen von Text-in-Sprache-Diensten zur Verfügung stellen.
Wenn Geräteimplementierungen die Funktion „android.hardware.audio.output“ melden, geschieht Folgendes:
- [C-1-1] MÜSSEN die Android TTS Framework-APIs unterstützen.
Wenn Geräteimplementierungen die Installation von Sprachausgabe-Engines von Drittanbietern unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN Nutzern die Möglichkeit bieten, eine Text-in-Sprache-Engine für die Verwendung auf Systemebene auszuwählen.
3:12. TV-Eingabe-Framework
Das Android Television Input Framework (TIF) vereinfacht die Übertragung von Live-Inhalten auf Android Television-Geräten. TIF stellt eine Standard-API zum Erstellen von Eingabemodulen zur Steuerung von Android TV-Geräten bereit.
Wenn Geräteimplementierungen TIF unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Plattformfunktion
android.software.live_tv
deklarieren. - [C-1-2] MÜSSEN alle TIF APIs so unterstützen, dass eine Anwendung, die diese APIs und den TIF-basierten Eingabedienst eines Drittanbieters verwendet, auf dem Gerät installiert und verwendet werden kann.
3:13. Schnelleinstellungen
Android bietet eine UI-Komponente für die Schnelleinstellungen, die schnellen Zugriff auf häufig verwendete oder dringend benötigte Aktionen ermöglicht.
Wenn Geräteimplementierungen eine UI-Komponente für Schnelleinstellungen enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN Nutzer die über die
quicksettings
APIs bereitgestellten Kacheln in einer Drittanbieter-App hinzufügen oder entfernen können. - [C-1-2] DÜRFEN NICHT automatisch eine Kachel aus einer Drittanbieter-App direkt zu den Schnelleinstellungen hinzufügen.
- [C-1-3] MÜSSEN alle vom Nutzer hinzugefügten Kacheln aus Drittanbieter-Apps zusammen mit den vom System bereitgestellten Kacheln für die Schnelleinstellungen angezeigt werden.
3:14. Medien-UI
Wenn Geräteimplementierungen Apps ohne Sprachsteuerung umfassen (die Apps), die über MediaBrowser
oder MediaSession
mit Drittanbieter-Apps interagieren, gilt für die Apps Folgendes:
-
[C-1-2] MÜSSEN Symbole, die über getIconBitmap() oder getIconUri() abgerufen wurden, und Titel, die über getTitle() abgerufen wurden, klar und deutlich anzeigen, wie unter
MediaDescription
beschrieben. Titel können zur Einhaltung von Sicherheitsvorschriften gekürzt werden (z.B. Ablenkung des Autofahrers). -
[C-1-3] MÜSSEN das Symbol für die Drittanbieter-App angezeigt werden, wenn von dieser Drittanbieter-App bereitgestellte Inhalte angezeigt werden.
-
[C-1-4] MÜSSEN dem Nutzer die Interaktion mit der gesamten
MediaBrowser
-Hierarchie ermöglichen. KÖNNEN den Zugriff auf einen Teil der Hierarchie einschränken, um Sicherheitsvorschriften einzuhalten (z. B. Ablenkung der Autofahrer). Sie DARF aber NICHT basierend auf Inhalten oder Contentanbietern bevorzugt behandelt werden. -
[C-1-5] MUSS doppelt auf
KEYCODE_HEADSETHOOK
oderKEYCODE_MEDIA_PLAY_PAUSE
alsKEYCODE_MEDIA_NEXT
fürMediaSession.Callback#onMediaButtonEvent
doppeltippen.
3:15. Android Instant Apps
Geräteimplementierungen MÜSSEN die folgenden Anforderungen erfüllen:
- [C-0-1] Instant Apps DÜRFEN nur Berechtigungen erhalten, bei denen
android:protectionLevel
auf"instant"
festgelegt ist. - [C-0-2] Instant Apps DÜRFEN NICHT über implizite Intents mit installierten Apps interagieren, es sei denn, eine der folgenden Bedingungen ist erfüllt:
<ph type="x-smartling-placeholder">
- </ph>
- Der Intent-Musterfilter der Komponente ist verfügbar und enthält CATEGORY_BROWSABLE
- Es handelt sich um eine der folgenden Aktionen: ACTION_SEND, ACTION_SENDTO oder ACTION_SEND_MULTIPLE
- Das Ziel wird explizit mit android:visibleToInstantApps bereitgestellt.
- [C-0-3] Instant Apps DÜRFEN NICHT explizit mit installierten Apps interagieren, es sei denn, die Komponente wird über android:visibleToInstantApps bereitgestellt.
- [C-0-4] Installierte Apps DÜRFEN KEINE Details zu Instant Apps auf dem Gerät sehen, es sei denn, die Instant App stellt ausdrücklich eine Verbindung zur installierten App her.
- Geräteimplementierungen MÜSSEN die folgenden Nutzerangebote für die Interaktion mit Instant Apps bieten. Der AOSP erfüllt die Anforderungen an die standardmäßige System-UI, die Einstellungen und den Launcher. Geräteimplementierungen:
<ph type="x-smartling-placeholder">
- </ph>
- [C-0-5] MÜSSEN Nutzern die Möglichkeit bieten, Instant Apps für jedes einzelne App-Paket im lokalen Cache anzusehen und zu löschen.
- [C-0-6] MÜSSEN eine dauerhafte Nutzerbenachrichtigung bereitstellen, die minimiert werden kann, während eine Instant App im Vordergrund ausgeführt wird. Diese Nutzerbenachrichtigung MUSS enthalten, dass Instant Apps keine Installation erfordern, und eine Nutzeroption bieten, die den Nutzer zum Bildschirm mit den App-Informationen in den Einstellungen leitet. Für Instant Apps, die über Web Intents gestartet werden, wie durch Verwendung eines Intents mit der Aktion
Intent.ACTION_VIEW
und dem Schema „http“ definiert oder „https“, ein zusätzliches Nutzerangebot SOLLTEN dem Nutzer ermöglichen, die Instant App und den zugehörigen Link nicht mit dem konfigurierten Webbrowser zu starten, sofern auf dem Gerät ein Browser verfügbar ist. - [C-0-7] MÜSSEN den Zugriff auf ausgeführte Instant Apps über die Funktion „Letzte Apps“ erlauben, wenn die Funktion „Letzte Apps“ auf dem Gerät verfügbar ist.
3:16. Begleitgerät koppeln
Android unterstützt das Koppeln von Begleitgeräten, um die Verknüpfung mit Begleitgeräten effektiver zu verwalten, und bietet die CompanionDeviceManager
API, damit Apps auf diese Funktion zugreifen können.
Wenn Geräteimplementierungen die Kopplungsfunktion von Begleitgeräten unterstützen, gilt Folgendes:
- [C-1-1] MUSS das Funktions-Flag
FEATURE_COMPANION_DEVICE_SETUP
deklarieren . - [C-1-2] MÜSSEN darauf achten, dass die APIs im Paket
android.companion
vollständig implementiert sind. - [C-1-3] MÜSSEN Nutzern Angebote zur Verfügung stellen, damit sie auswählen/bestätigen können, dass ein Begleitgerät vorhanden und betriebsbereit ist.
3:17. Komplexe Apps
Wenn die Funktion FEATURE_CANT_SAVE_STATE
in Geräteimplementierungen deklariert ist, gilt Folgendes:
- [C-1-1] MUSS immer nur eine App im System installiert haben, in der
cantSaveState
angegeben ist. Wenn der Nutzer eine solche App verlässt, ohne sie explizit zu beenden (z. B. durch Drücken der Startbildschirmtaste beim Verlassen einer aktiven Aktivität, anstatt auf die Schaltfläche „Zurück“ zu drücken, wenn keine aktiven Aktivitäten im System vorhanden sind), MÜSSEN Geräteimplementierungen diese App im RAM priorisieren, so wie für andere Dinge, die weiterhin ausgeführt werden sollen, z. B. Dienste im Vordergrund. Solange eine solche App im Hintergrund ausgeführt wird, kann das System trotzdem Energieverwaltungsfunktionen darauf anwenden, z. B. die Begrenzung des CPU- und Netzwerkzugriffs. - [C-1-2] MÜSSEN eine UI-Option zur Auswahl der App zur Verfügung stellen, die nicht am Mechanismus zum Speichern/Wiederherstellen des normalen Status verwendet wird, sobald der Nutzer eine zweite App startet, die mit dem Attribut
cantSaveState
deklariert ist. - [C-1-3] DÜRFEN KEINE anderen Richtlinienänderungen auf Apps anwenden, in denen
cantSaveState
angegeben ist, z. B. Änderungen der CPU-Leistung oder der Zeitplanpriorität.
Wenn die Funktion FEATURE_CANT_SAVE_STATE
in Geräteimplementierungen nicht deklariert wird, passiert Folgendes:
- [C-1-1] MUSS das von Apps festgelegte Attribut
cantSaveState
ignorieren und DARF NICHT das App-Verhalten auf Grundlage dieses Attributs ändern.
4. Kompatibilität der App-Paketerstellung
Implementierungen auf Geräten:
- [C-0-1] MÜSSEN in der Lage sein, Android-APK-Dateien zu installieren und auszuführen, die von dem im offiziellen Android SDK enthaltenen Tool "aapt" generiert wurden.
- Da die oben genannte Anforderung eine Herausforderung sein kann, wird bei Geräteimplementierungen EMPFOHLEN, das Paketverwaltungssystem der AOSP-Referenzimplementierung zu verwenden.
Geräteimplementierungen:
- [C-0-2] MUSS die Überprüfung von APK-Dateien mit dem APK Signature Scheme v3 , dem APK Signature Scheme v2 und der JAR-Signatur unterstützen.
- [C-0-3] DÜRFEN die Bytecode-Formate .apk, Android Manifest, Dalvik-Bytecode oder RenderScript NICHT so erweitern, dass diese Dateien nicht korrekt installiert und auf anderen kompatiblen Geräten ausgeführt werden können.
-
[C-0-4] DÜRFEN KEINE Apps außer dem aktuellen "Installer of Record" zulassen , damit das Paket die App unbemerkt und ohne Bestätigung durch den Nutzer deinstalliert, wie im SDK für die Berechtigung
DELETE_PACKAGE
dokumentiert. Die einzigen Ausnahmen sind die Systempaketprüfungs-App, die den Intent PACKAGE_NEEDS_VERIFICATION verarbeitet, und die Speichermanager-App, die den Intent ACTION_MANAGE_STORAGE verarbeitet. -
[C-0-5] MÜSSEN eine Aktivität haben, die den
android.settings.MANAGE_UNKNOWN_APP_SOURCES
-Intent verarbeitet. -
[C-0-6] DÜRFEN KEINE Anwendungspakete aus unbekannten Quellen installieren, es sei denn, die App, die die Installation anfordert, erfüllt die folgenden Anforderungen:
- Sie MÜSSEN die Berechtigung
REQUEST_INSTALL_PACKAGES
deklarieren oderandroid:targetSdkVersion
auf 24 oder niedriger festgelegt haben. - Der Nutzer MUSS die Berechtigung erhalten haben, Apps aus unbekannten Quellen zu installieren.
- Sie MÜSSEN die Berechtigung
-
SOLLTE Nutzern die Möglichkeit bieten, die Berechtigung zum Installieren von Apps aus unbekannten Quellen pro App zu gewähren/zu widerrufen, aber KANN dies als No-Op implementieren und
RESULT_CANCELED
fürstartActivityForResult()
zurückgeben, wenn die Geräteimplementierung den Nutzern diese Auswahl nicht ermöglichen soll. Aber selbst in solchen Fällen SOLLTEN sie dem Nutzer mitteilen, warum die Auswahl nicht möglich ist. -
[C-0-7] MÜSSEN einen Warnhinweis mit dem Warnstring anzeigen, der dem Nutzer über die System-API
PackageManager.setHarmfulAppWarning
bereitgestellt wird, bevor eine Aktivität in einer Anwendung gestartet wird, die von derselben System-APIPackageManager.setHarmfulAppWarning
als potenziell schädlich markiert wurde. - SOLLTEN im Warndialogfeld dem Nutzer die Möglichkeit gegeben werden, eine App zu deinstallieren oder zu starten.
5. Multimedia-Kompatibilität
Geräteimplementierungen:
- [C-0-1] MUSS für jeden von
MediaCodecList
deklarierten Codec die in Abschnitt 5.1 definierten Medienformate, Encoder, Decodierer, Dateitypen und Containerformate unterstützen. - [C-0-2] MÜSSEN über
MediaCodecList
die Unterstützung von Encodern und Decodern, die für Drittanbieteranwendungen verfügbar sind, deklarieren und melden. - [C-0-3] MÜSSEN alle Formate, die codiert werden können, korrekt decodieren können und Drittanbieter-Apps zur Verfügung stellen. Dazu gehören alle von seinen Encodern generierten Bitstreams und die in der
CamcorderProfile
gemeldeten Profile.
Geräteimplementierungen:
- SOLLTE eine minimale Codec-Latenz anstreben,
<ph type="x-smartling-placeholder">
- </ph>
- Eingabepuffer sollten NICHT verbraucht und gespeichert und nur nach der Verarbeitung zurückgegeben werden.
- Decodierte Puffer sollten NICHT länger aufbewahrt werden, als vom Standard vorgegeben (z.B. SPS).
- Sie sollten codierte Puffer NICHT länger aufbewahren, als von der GoP-Struktur vorgegeben.
Alle im folgenden Abschnitt aufgeführten Codecs sind Software-Implementierungen in der bevorzugten Android-Implementierung aus dem Android Open Source Project.
Weder Google noch die Open Handset Alliance machen Zusicherungen, dass diese Codecs frei von Patenten Dritter sind. Personen, die diesen Quellcode in Hardware- oder Softwareprodukten verwenden möchten, werden darauf hingewiesen, dass für Implementierungen dieses Codes, einschließlich in Open-Source-Software oder Shareware, möglicherweise Patentlizenzen von den entsprechenden Patentinhabern erforderlich sind.
5.1. Medien-Codecs
5.1.1 Audiocodierung
Weitere Informationen finden Sie unter 5.1.3. Details zu Audio-Codecs.
Wenn in Geräteimplementierungen android.hardware.microphone
deklariert wird, MÜSSEN sie die Codierung der folgenden Audioformate unterstützen und für Drittanbieter-Apps verfügbar machen:
- [C-1-1] PCM/WAVE
- [C-1-2] FLAC
- [C-1-3] Opus
Alle Audioencoder MÜSSEN unterstützen:
- [C-3-1] Native 16-Bit-PCM-Audioframes für die native Bytereihenfolge von PCM über die
android.media.MediaCodec
API.
5.1.2 Audiodecodierung
Weitere Informationen finden Sie unter 5.1.3. Details zu Audio-Codecs.
Wenn in Geräteimplementierungen die Funktion „android.hardware.audio.output
“ unterstützt wird, MÜSSEN sie die Decodierung der folgenden Audioformate unterstützen:
- [C-1-1] MPEG-4 AAC Profile (AAC LC)
- [C-1-2] MPEG-4 HE AAC-Profil (AAC+)
- [C-1-3] MPEG-4 HE AACv2 Profile (erweitertes AAC+)
- [C-1-4] AAC ELD (Optimierte AAC mit niedriger Verzögerung)
- [C-1-11] xHE-AAC (ISO/IEC 23003-3 Extended HE AAC Profile, das das USAC Baseline Profile und ISO/IEC 23003-4 Dynamic Range Control Profile enthält)
- [C-1-5] FLAC
- [C-1-6] MP3-Datei
- [C-1-7] MIDI
- [C-1-8] Vorbis
- [C-1-9] PCM/WAVE, einschließlich hochauflösender Audioformate mit bis zu 24 Bit, Abtastrate von 192 kHz und 8 Kanälen. Beachten Sie, dass diese Anforderung nur für die Decodierung gilt und dass ein Gerät während der Wiedergabe ein Downsampling und ein Downmix ausführen darf.
- [C-1-10] Opus
Wenn Geräteimplementierungen die Decodierung von AAC-Eingabepuffern von Mehrkanalstreams (d.h. mehr als zwei Kanälen) in PCM über den standardmäßigen AAC-Audiodecoder in der android.media.MediaCodec
API unterstützen, MÜSSEN die folgenden Funktionen unterstützt werden:
- [C-2-1] Die Decodierung MUSS ohne Downmix durchgeführt werden. Ein 5.0-AAC-Stream MÜSSEN beispielsweise in fünf PCM-Kanäle decodiert werden, ein 5.1-AAC-Stream muss in sechs PCM-Kanäle decodiert werden.
- [C-2-2] Die Metadaten für den dynamischen Bereich MÜSSEN der Definition in "Dynamic Range Control (DRC)" entsprechen. gemäß ISO/IEC 14496-3 und die DRC-Tasten für
android.media.MediaFormat
zum Konfigurieren des Verhaltens des Audiodecoders zum Dynamikumfang. Die AAC-DRC-Schlüssel wurden in API 21 eingeführt und sind:KEY_AAC_DRC_ATTENUATION_FACTOR
,KEY_AAC_DRC_BOOST_FACTOR
,KEY_AAC_DRC_HEAVY_COMPRESSION
,KEY_AAC_DRC_TARGET_REFERENCE_LEVEL
undKEY_AAC_ENCODED_TARGET_LEVEL
. - [SR] Es wird dringend empfohlen, dass alle AAC-Audiodecoder die oben genannten Anforderungen C-2-1 und C-2-2 erfüllen.
Bei der Decodierung von USAC-Audio mit MPEG-D (ISO/IEC 23003-4):
- [C-3-1] Lautstärke und DRC-Metadaten MÜSSEN gemäß MPEG-D DRC Dynamic Range Control Profile Level 1 interpretiert und angewendet werden.
- [C-3-2] Der Decoder MÜSSEN sich gemäß der Konfiguration verhalten, die mit den folgenden
android.media.MediaFormat
-Schlüsseln festgelegt wurde:KEY_AAC_DRC_TARGET_REFERENCE_LEVEL
undKEY_AAC_DRC_EFFECT_TYPE
.
MPEG-4 AAC-, HE AAC- und HE AACv2-Profildecoder:
- KÖNNEN die Lautstärkeregelung und den dynamischen Bereich mit dem ISO/IEC 23003-4-Profil für die dynamische Bereichskontrolle unterstützen.
Wenn ISO/IEC 23003-4 unterstützt wird und sowohl die ISO/IEC 23003-4- als auch die ISO/IEC 14496-3-Metadaten in einem decodierten Bitstream vorhanden sind, gilt Folgendes:
- ISO/IEC 23003-4-Metadaten WERDEN Vorrang haben.
Alle Audiodecoder müssen die Ausgabe unterstützen:
- [C-6-1] Native 16-Bit-PCM-Audioframes für die native Bytereihenfolge von PCM über die
android.media.MediaCodec
API.
5.1.3 Details zu Audio-Codecs
Format/Codec | Details | Zu unterstützende Dateitypen/Containerformate |
---|---|---|
MPEG-4 AAC-Profil (AAC LC) |
Unterstützung für Mono-/Stereo-/5.0/5.1-Inhalte mit Standardabtastraten von 8 bis 48 kHz. |
|
MPEG-4 HE AAC Profile (AAC+) | Unterstützung für Mono-/Stereo-/5.0/5.1-Inhalte mit Standardabtastraten von 16 bis 48 kHz. |
|
MPEG-4 HE AACv2 Profil (erweitertes AAC+) |
Unterstützung für Mono-/Stereo-/5.0/5.1-Inhalte mit Standardabtastraten von 16 bis 48 kHz. |
|
AAC ELD (Optimierte AAC mit geringer Verzögerung) | Unterstützung für Mono-/Stereoinhalte mit Standardabtastraten von 16 bis 48 kHz. |
|
Logo: USAC | Unterstützung für Mono-/Stereoinhalte mit Standardabtastraten von 7,35 bis 48 kHz. | MPEG-4 (MP4, M4A) |
AMR-NB | 4,75 bis 12,2 kbit/s, Stichproben bei 8 kHz | 3GPP (3GP) |
AMR-WB | 9 Raten von 6,60 kbit/s bis 23,85 kbit/s, abgetastet bei 16 kHz, definiert von AMR-WB, Adaptive Multi-Rate - Wideband Speech Codec | 3GPP (3GP) |
FLAC | Sowohl für Encoder als auch Decoder: MÜSSEN mindestens die Mono- und Stereomodi unterstützt werden. Abtastraten von bis zu 192 kHz MÜSSEN unterstützt werden. 16-Bit- und 24-Bit-Auflösung MÜSSEN unterstützt werden. Die 24-Bit-FLAC-Audiodatenverarbeitung MÜSSEN in der Gleitkomma-Audiokonfiguration verfügbar sein. |
|
MP3 | Mono/Stereo, 8–320 kbit/s konstant (CBR) oder variable Bitrate (VBR) |
|
MIDI | MIDI-Typ 0 und 1. DLS Version 1 und 2. XMF und XMF für Mobilgeräte Unterstützung der Klingeltonformate RTTTL/RTX, OTA und iMelody |
|
Vorbis |
|
|
PCM/WAVE | Der PCM-Codec muss lineare 16-Bit-PCM und 16-Bit-Gleitkommazahl unterstützen. Der WAVE-Extraktor muss lineare 16-Bit-, 24-Bit-, 32-Bit-PCM und 32-Bit-Gleitkommazahl (Raten bis zur Grenze der Hardware) unterstützen. Abtastraten MÜSSEN von 8 kHz bis 192 kHz unterstützt werden. | WAVE (WAV) |
Opus |
|
5.1.4 Bildcodierung
Weitere Informationen finden Sie unter 5.1.6. Details zu Image-Codecs.
Geräteimplementierungen MÜSSEN die Codierung der folgenden Bildcodierung unterstützen:
- [C-0-1] JPEG
- [C-0-2] PNG
- [C-0-3] WebP
Wenn Geräteimplementierungen die HEIC-Codierung über android.media.MediaCodec
für den Medientyp MIMETYPE_IMAGE_ANDROID_HEIC
unterstützen, gilt Folgendes:
- [C-1-1] MUSS einen hardwarebeschleunigten HEVC-Encoder-Codec bereitstellen, der den
BITRATE_MODE_CQ
-Bitratenkontrollmodus, dasHEVCProfileMainStill
-Profil und eine Frame-Größe von 512 × 512 Pixeln unterstützt.
5.1.5 Bilddecodierung
Weitere Informationen finden Sie unter 5.1.6. Details zu Image-Codecs.
Geräteimplementierungen MÜSSEN die Decodierung der folgenden Bildcodierung unterstützen:
- [C-0-1] JPEG
- [C-0-2] GIF
- [C-0-3] PNG
- [C-0-4] BMP
- [C-0-5] WebP
- [C-0-6] Roh
- [C-0-7] HEIF (HEIC)
Bilddecoder, die ein Format mit hoher Bittiefe unterstützen (mehr als 9 Bit pro Kanal)
- [C-1-1] MUSS die Ausgabe eines 8-Bit-Äquivalents unterstützen, wenn dies von der Anwendung angefordert wird, z. B. über die
ARGB_8888
-Konfiguration vonandroid.graphics.Bitmap
.
5.1.6. Details zu Image-Codecs
Format/Codec | Details | Unterstützte Dateitypen/Containerformate |
---|---|---|
JPEG | Base+progressiv | JPEG (JPG) |
GIF | GIF (.gif) | |
PNG | PNG (PNG) | |
BMP | BMP (BMP) | |
WebP | WebP (WebP) | |
Raw | ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw) | |
HEIFS | Bild, Bildersammlung, Bildsequenz | HEIF (.heif), HEIC (.heic) |
Bild-Encoder und -Decodierer, die über die MediaCodec API verfügbar gemacht werden
-
[C-1-1] MUSS das flexible Farbformat YUV420 im Format 8:8:8 (
COLOR_FormatYUV420Flexible
) bisCodecCapabilities
unterstützen. -
[SR] WIRD UNBEDINGT EMPFOHLEN, das RGB888-Farbformat für den Eingabeoberflächenmodus zu unterstützen.
-
[C-1-3] MÜSSEN mindestens eines der planaren oder halbplanaren YUV420-Farbformate 8:8:8 unterstützen:
COLOR_FormatYUV420PackedPlanar
(entsprichtCOLOR_FormatYUV420Planar
) oderCOLOR_FormatYUV420PackedSemiPlanar
(entsprichtCOLOR_FormatYUV420SemiPlanar
). Es wird dringend empfohlen, beide zu unterstützen.
5.1.7. Video-Codecs
- Für eine akzeptable Qualität von Webvideostreamingdiensten und Videokonferenzen SOLLTEN Sie bei der Geräteimplementierung einen VP8-Hardware-Codec verwenden, der die Anforderungen erfüllt.
Wenn Geräteimplementierungen einen Videodecoder oder Encoder umfassen:
-
[C-1-1] Video-Codecs MÜSSEN Ausgabe- und Eingabe-Bytebuffer-Größen unterstützen, die den größtmöglichen komprimierten und unkomprimierten Frame gemäß den Vorgaben des Standards und der Konfiguration unterstützen. Eine übermäßige Zuweisung ist jedoch nicht zulässig.
-
[C-1-2] Videoencoder und -decoder müssen das flexible YUV420-Farbformat 8:8:8 (
COLOR_FormatYUV420Flexible
) überCodecCapabilities
unterstützen. -
[C-1-3] Videoencoder und -Decodierer MÜSSEN mindestens eines der planaren oder semiplanaren YUV420-Farbformate 8:8:8 unterstützen:
COLOR_FormatYUV420PackedPlanar
(entsprichtCOLOR_FormatYUV420Planar
) oderCOLOR_FormatYUV420PackedSemiPlanar
(entsprichtCOLOR_FormatYUV420SemiPlanar
). Es wird dringend empfohlen, beide zu unterstützen. -
[SR] Videoencoder und -decoder werden dringend empfohlen, mindestens eines der hardwareoptimierten planaren oder semiplanaren YUV420-Farbformate 8:8:8 (YV12, NV12, NV21 oder ein gleichwertiges herstelleroptimiertes Format) zu unterstützen.
-
[C-1-5] Videodecoder, die ein Format mit hoher Bittiefe (mehr als 9 Bits pro Kanal) unterstützen, MÜSSEN die Ausgabe eines entsprechenden 8-Bit-Formats unterstützen, wenn dies von der Anwendung angefordert wird. Dies MUSS sich daran orientieren, dass ein YUV420-Farbformat 8:8:8 über
android.media.MediaCodecInfo
unterstützt wird.
Wenn Geräteimplementierungen den Support für HDR-Profile über Display.HdrCapabilities
bewerben, geschieht Folgendes:
- [C-2-1] MUSS das Parsen und die Verarbeitung statischer HDR-Metadaten unterstützen.
Wenn Geräteimplementierungen Support für Intra-Aktualisierungen über FEATURE_IntraRefresh
in der Klasse MediaCodecInfo.CodecCapabilities
bewerben, geschieht Folgendes:
- [C-3-1] MÜSSEN die Aktualisierungszeiträume im Bereich von 10 bis 60 Frames unterstützen und innerhalb von 20% des konfigurierten Aktualisierungszeitraums korrekt funktionieren.
Sofern in der Anwendung nicht anders mit dem Formatschlüssel KEY_COLOR_FORMAT
angegeben, gilt für Videodecoderimplementierungen:
- [C-4-1] MUSS standardmäßig das für Hardware-Display optimierte Farbformat verwenden, wenn die Konfiguration über die Oberfläche für die Ausgabe erfolgt.
- [C-4-2] MÜSSEN standardmäßig ein YUV420-Farbformat 8:8:8 verwenden, das für CPU-Lesevorgänge optimiert ist, wenn die Oberfläche nicht für die Ausgabe von Oberflächen verwendet wird.
5.1.8 Liste der Video-Codecs
Format/Codec | Details | Zu unterstützende Dateitypen/Containerformate |
---|---|---|
H.263 |
|
|
H.264-AVC | Einzelheiten finden Sie in Abschnitten 5.2 und 5.3. |
|
H.265 HEVC | Weitere Informationen finden Sie in Abschnitt 5.3. |
|
MPEG-2 | Profil "Main" |
|
MPEG-4 SP |
|
|
VP8 | Einzelheiten finden Sie in Abschnitten 5.2 und 5.3. |
|
VP9 | Weitere Informationen finden Sie in Abschnitt 5.3. |
|
5.1.9. Medien-Codec-Sicherheit
Geräteimplementierungen MÜSSEN die Einhaltung der unten beschriebenen Sicherheitsfunktionen für Medien-Codec sicherstellen.
Android unterstützt OMX, eine plattformübergreifende Multimedia Aceleration API, sowie Codec 2.0, eine Low-Overhead Multimedia Aceleration API.
Wenn Geräteimplementierungen Multimedia unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN Support für Mediencodecs entweder über OMX- oder Codec 2.0-APIs (oder beide) wie im Android Open Source Project bereitstellen und die Sicherheitsmaßnahmen dürfen nicht deaktiviert oder umgangen werden. Das bedeutet nicht, dass jeder Codec entweder die OMX- oder die Codec 2.0 API verwenden MÜSSEN. Nur die Unterstützung für mindestens eine dieser APIs MÜSSEN verfügbar sein und die Unterstützung für die verfügbaren APIs MÜSSEN die vorhandenen Sicherheitsvorkehrungen umfassen.
- [C-SR] wird dringend empfohlen, Support für die Codec 2.0 API aufzunehmen.
Wenn Geräteimplementierungen die Codec 2.0 API nicht unterstützen, geschieht Folgendes:
- [C-2-1] MÜSSEN den entsprechenden OMX-Software-Codec aus dem Android Open Source Project (falls verfügbar) für jedes vom Gerät unterstützte Medienformat und jeden -typ (Encoder oder Decoder) hinzufügen.
- [C-2-2] Codecs, deren Namen mit „OMX.google“ beginnen. MÜSSEN auf dem Quellcode des Open-Source-Projekts des Android-Projekts basieren.
- [C-SR] Es wird dringend empfohlen, dass die OMX-Software-Codecs in einem Codec-Prozess ausgeführt werden, der keinen Zugriff auf andere Hardwaretreiber als Speicher-Mapper hat.
Wenn Geräteimplementierungen die Codec 2.0 API unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN den entsprechenden Codec 2.0-Software-Codec aus dem Android Open Source Project (falls verfügbar) für jedes vom Gerät unterstützte Medienformat und jeden Medientyp (Encoder oder Decoder) hinzufügen.
- [C-3-2] MÜSSEN die Codec 2.0-Software-Codecs im Software-Codec-Prozess enthalten, der im Android Open Source Project bereitgestellt wird, damit der Zugriff auf Software-Codecs gezielter gewährt werden kann.
- [C-3-3] Codecs, deren Namen mit „c2.android“ beginnen. MÜSSEN auf dem Quellcode des Open-Source-Projekts des Android-Projekts basieren.
5.1.10. Charakterisierung von Medien-Codec
Wenn Geräteimplementierungen Medien-Codecs unterstützen, gilt Folgendes:
- [C-1-1] MUSS die richtigen Werte für die Media-Codec-Charakterisierung über die
MediaCodecInfo
API zurückgeben.
Insbesondere
- [C-1-2] Codecs, deren Namen mit „OMX“ beginnen. MÜSSEN die OMX-APIs verwendet werden und deren Namen den OMX-Benennungsrichtlinien entsprechen.
- [C-1-3] Codecs mit Namen, die mit „c2“ beginnen. MÜSSEN die Codec 2.0 API verwenden und deren Namen den Codec 2.0-Benennungsrichtlinien für Android entsprechen.
- [C-1-4] Codecs, deren Namen mit „OMX.google“ beginnen. oder „c2.android“. DÜRFEN NICHT als Anbieter oder hardwarebeschleunigt bezeichnet werden.
- [C-1-5] Codecs, die in einem Codec-Prozess (Anbieter oder System) ausgeführt werden und Zugriff auf andere Hardwaretreiber als Speicherzuordnungen und Mapper haben, DÜRFEN NICHT als reine Software gekennzeichnet werden.
- [C-1-6] Codecs, die nicht im Android Open Source Project vorhanden sind oder nicht auf dem Quellcode in diesem Projekt basieren, MÜSSEN als Anbieter gekennzeichnet werden.
- [C-1-7] Codecs, die die Hardwarebeschleunigung nutzen, MÜSSEN als hardwarebeschleunigt bezeichnet werden.
- [C-1-8] Codec-Namen DÜRFEN NICHT irreführend sein. Beispielsweise werden Codecs namens „Decoders“ MÜSSEN die Decodierung und solche mit der Bezeichnung „Encoder“ unterstützen MUSS die Codierung unterstützen. Codecs mit Namen, die Medienformate enthalten, MÜSSEN diese Formate unterstützen.
Wenn Geräteimplementierungen Video-Codecs unterstützen:
- [C-2-1] Alle Video-Codecs MÜSSEN erreichbare Frame-Rate-Daten für die folgenden Größen veröffentlichen, sofern sie vom Codec unterstützt werden:
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
Videoauflösung |
|
|
|
1920 × 1080 Pixel (außer MPEG4) | 3840 x 2160 Pixel (HEVC, VP9) |
- [C-2-2] Video-Codecs, die als hardwarebeschleunigt gekennzeichnet sind, MÜSSEN Informationen zu Leistungspunkten veröffentlichen. Sie MÜSSEN jeweils alle unterstützten Standardleistungspunkte auflisten, die in der
PerformancePoint
API aufgeführt sind, sofern sie nicht von einem anderen unterstützten Leistungspunkt abgedeckt sind. - Darüber hinaus SOLLTEN sie erweiterte Leistungspunkte veröffentlichen, wenn sie eine andere kontinuierliche Videoleistung als die oben aufgeführten unterstützen.
5.2. Videocodierung
Wenn Geräteimplementierungen Video-Encoder unterstützen und für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- Über zwei gleitende Fenster NICHT mehr als 15% über der Bitrate zwischen Intraframe-Intervallen (I-Frame) liegen
- NICHT mehr als 100% über der Bitrate bei einem gleitenden Fenster von 1 Sekunde liegen
Wenn Geräteimplementierungen einen eingebetteten Bildschirm mit einer diagonalen Länge von mindestens 2,5 Zoll, einen Videoausgabeanschluss oder die Unterstützung einer Kamera über das Funktions-Flag android.hardware.camera.any
deklarieren, gilt Folgendes:
- [C-1-1] MÜSSEN mindestens einen VP8- oder H.264-Videoencoder unterstützen und für Drittanbieteranwendungen verfügbar machen.
- SOLLTEN sowohl VP8- als auch H.264-Videoencoder unterstützen und für Drittanbieteranwendungen zur Verfügung stellen.
Wenn Geräteimplementierungen H.264-, VP8-, VP9- oder HEVC-Videoencoder unterstützen und für Anwendungen von Drittanbietern verfügbar machen, gilt Folgendes:
- [C-2-1] MUSS dynamisch konfigurierbare Bitraten unterstützen.
- SOLLTE variable Frame-Rates unterstützen, wobei der Video-Encoder die sofortige Frame-Dauer anhand der Zeitstempel der Eingabepuffer bestimmen und seinen Bit-Bucket basierend auf dieser Frame-Dauer zuweisen sollte.
Wenn Geräteimplementierungen den Videoencoder MPEG-4 SP unterstützen und für Drittanbieter-Apps verfügbar machen, geschieht Folgendes:
- SOLLTEN für den unterstützten Encoder dynamisch konfigurierbare Bitraten unterstützen.
Wenn Geräteimplementierungen hardwarebeschleunigte Video- oder Bild-Encoder bereitstellen und eine oder mehrere angeschlossene oder steckbare Hardwarekameras unterstützen, die über die android.camera
APIs sichtbar sind:
- [C-4-1] Alle hardwarebeschleunigten Video- und Bildencoder MÜSSEN die Codierung von Frames von den Hardwarekameras unterstützen.
- SOLLTEN die Codierung von Frames der Hardwarekameras über alle Video- oder Bild-Encoder unterstützen.
5.2.1 H.263
Wenn Geräteimplementierungen H.263-Encoder unterstützen und in Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- [C-1-1] MUSS Baseline-Profilebene 45 unterstützen.
- SOLLTEN für den unterstützten Encoder dynamisch konfigurierbare Bitraten unterstützen.
5.2.2 H.264
Wenn Geräteimplementierungen den H.264-Codec unterstützen, gilt Folgendes:
- [C-1-1] MUSS Baseline-Profilebene 3 unterstützen. Die Unterstützung für ASO (Arbitrary Slice Ordering), FMO (Flexible Macroblock Ordering) und RS (redundante Slices) ist jedoch OPTIONAL. Aus Gründen der Kompatibilität mit anderen Android-Geräten wird empfohlen, ASO, FMO und RS von Encodern nicht für das Baseline-Profil zu verwenden.
- [C-1-2] MÜSSEN die SD-Videocodierungsprofile (Standard Definition) in der folgenden Tabelle unterstützen.
- SOLLTEN die Hauptprofilebene 4 unterstützen.
- SOLLTEN die Videocodierungsprofile in HD (High Definition) unterstützen, wie in der folgenden Tabelle angegeben.
Wenn Geräteimplementierungen die Unterstützung der H.264-Codierung für Videos mit einer Auflösung von 720p oder 1080p über die Medien-APIs melden, gilt Folgendes:
- [C-2-1] MUSS die Codierungsprofile in der folgenden Tabelle unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 x 240 px | 720 x 480 px | 1280 x 720 Pixel | 1920 x 1080 px |
Video-Framerate | 20 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps |
Video-Bitrate | 384 kbit/s | 2 Mbit/s | 4 Mbit/s | 10 Mbit/s |
5.2.3 VP8
Wenn Geräteimplementierungen den VP8-Codec unterstützen, gilt Folgendes:
- [C-1-1] MUSS die SD-Video-Codierungsprofile unterstützen.
- SOLLTEN die folgenden HD-Videocodierungsprofile (High Definition) unterstützen.
- [C-1-2] MUSS das Schreiben von Matroska WebM-Dateien unterstützen.
- SOLLTEN SIE einen VP8-Hardware-Codec bereitstellen, der die Anforderungen zur RTC-Hardwarecodierung des WebM-Projekts erfüllt, um eine akzeptable Qualität von Webvideostreaming- und Videokonferenzen sicherzustellen.
Wenn Geräteimplementierungen die Unterstützung der VP8-Codierung für Videos mit einer Auflösung von 720p oder 1080p über die Medien-APIs melden, gilt Folgendes:
- [C-2-1] MUSS die Codierungsprofile in der folgenden Tabelle unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 x 180 Pixel | 640 x 360 Pixel | 1280 x 720 Pixel | 1920 x 1080 px |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps |
Video-Bitrate | 800 kbit/s | 2 Mbit/s | 4 Mbit/s | 10 Mbit/s |
5.2.4 VP9
Wenn Geräteimplementierungen den VP9-Codec unterstützen, gilt Folgendes:
- [C-1-2] MUSS Profil 0 Level 3 unterstützen.
- [C-1-1] MUSS das Schreiben von Matroska WebM-Dateien unterstützen.
- [C-1-3] MÜSSEN CodecPrivate-Daten generieren.
- SOLLTEN die HD-Decodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
- [SR] wird dringend empfohlen, die in der folgenden Tabelle angegebenen HD-Decodierungsprofile zu unterstützen, wenn es einen Hardware-Encoder gibt.
SD | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|
Videoauflösung | 720 x 480 px | 1280 x 720 Pixel | 1920 x 1080 px | 3840 x 2160 Pixel |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps |
Video-Bitrate | 1,6 Mbit/s | 4 Mbit/s | 5 Mbit/s | 20 Mbit/s |
Wenn in Geräteimplementierungen Profil 2 oder Profil 3 über die Media APIs unterstützt werden, gilt Folgendes:
- Unterstützung für das 12-Bit-Format ist optional.
5.2.5 H.265
Wenn Geräteimplementierungen den H.265-Codec unterstützen, gilt Folgendes:
- [C-1-1] MUSS Hauptprofilebene 3 unterstützen.
- SOLLTEN die HD-Codierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
- [SR] wird dringend empfohlen, HD-Codierungsprofile wie in der folgenden Tabelle angegeben zu unterstützen, wenn es einen Hardware-Encoder gibt.
SD | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|
Videoauflösung | 720 x 480 px | 1280 x 720 Pixel | 1920 x 1080 px | 3840 x 2160 Pixel |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps |
Video-Bitrate | 1,6 Mbit/s | 4 Mbit/s | 5 Mbit/s | 20 Mbit/s |
5.3. Videodecodierung
Wenn Geräteimplementierungen die Codecs VP8, VP9, H.264 oder H.265 unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die dynamische Videoauflösung und Framerate-Wechsel durch die standardmäßigen Android-APIs innerhalb eines Streams für alle VP8-, VP9-, H.264- und H.265-Codecs in Echtzeit und bis zur maximalen Auflösung unterstützen, die von jedem Codec auf dem Gerät unterstützt wird.
5.3.1 MPEG-2
Wenn Geräteimplementierungen MPEG-2-Decodierer unterstützen, gilt Folgendes:
- [C-1-1] MUSS die allgemeine Ebene für das Hauptprofil unterstützen.
5.3.2 H.263
Wenn Geräteimplementierungen H.263-Decoder unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN Baseline-Profillevel 30 und -Level 45 unterstützen.
5.3.3 MPEG-4
Bei Geräteimplementierungen mit MPEG-4-Decodierern gilt Folgendes:
- [C-1-1] MÜSSEN die einfache Profilebene 3 unterstützen.
5.3.4. H.264
Wenn Geräteimplementierungen H.264-Decoder unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Hauptprofilebene 3.1 und das Basisprofil unterstützen. Die Unterstützung für ASO (Arbitrary Slice Ordering), FMO (Flexible Macroblock Ordering) und RS (redundante Slices) ist OPTIONAL.
- [C-1-2] MÜSSEN Videos mit den in der folgenden Tabelle aufgeführten SD-Profilen (Standard Definition) decodieren können und mit dem Basisprofil und dem Hauptprofil der Ebene 3.1 (einschließlich 720p30) codiert sein.
- SOLLTEN in der Lage sein, Videos mit HD-Profilen (High Definition) zu decodieren, wie in der folgenden Tabelle angegeben.
Wenn die von der Methode Display.getSupportedModes()
gemeldete Höhe der Videoauflösung entspricht oder größer ist, wird auf dem Gerät Folgendes implementiert:
- [C-2-1] MUSS die HD-720p-Videodecodierungsprofile in der folgenden Tabelle unterstützen.
- [C-2-2] MUSS die HD-1080p-Video-Decodierungsprofile in der folgenden Tabelle unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 x 240 px | 720 x 480 px | 1280 x 720 Pixel | 1920 x 1080 px |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 60 fps | 30 fps (60 fpsFernsehen) |
Video-Bitrate | 800 kbit/s | 2 Mbit/s | 8 Mbit/s | 20 Mbit/s |
5.3.5. H.265 (HEVC)
Wenn Geräteimplementierungen den H.265-Codec unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Hauptprofilebene 3 der Hauptstufe und die SD-Video-Decodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
- SOLLTEN die HD-Decodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
- [C-1-2] MUSS die HD-Decodierungsprofile wie in der folgenden Tabelle angegeben unterstützen, wenn es einen Hardware-Decodierer gibt.
Wenn die von der Methode Display.getSupportedModes()
gemeldete Höhe gleich oder größer als die Videoauflösung ist, dann gilt:
- [C-2-1] Geräteimplementierungen MÜSSEN mindestens eine H.265- oder VP9-Decodierung von 720-, 1080- und UHD-Profilen unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
Videoauflösung | 352 x 288 px | 720 x 480 px | 1280 x 720 Pixel | 1920 x 1080 px | 3840 x 2160 Pixel |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 30/60 fps (60 fpsFernsehen mit H.265-Hardware-Decodierung) | 60 fps |
Video-Bitrate | 600 Kbit/s | 1,6 Mbit/s | 4 Mbit/s | 5 Mbit/s | 20 Mbit/s |
Wenn Geräteimplementierungen angeblich ein HDR-Profil (HEVCProfileMain10HDR10
, HEVCProfileMain10HDR10Plus
) über die Media APIs unterstützen:
-
[C-3-1] Geräteimplementierungen MÜSSEN die erforderlichen HDR-Metadaten (MediaFormat#KEY_HDR_STATIC_INFO für alle HDR-Profile) aus der Anwendung über die MediaCodec API akzeptieren. Außerdem müssen sie die Extraktion der erforderlichen HDR-Metadaten (MediaFormat#KEY_HDR_STATIC_INFO für alle HDR-Profile sowie MediaFormat#KEY_HDR10_INFO_Plus aus den relevanten HDR-Profilen und Container-Profilen für HDR10 und das Extrahieren der erforderlichen HDR-Metadaten unterstützen.) Sie MÜSSEN auch die Ausgabe der erforderlichen HDR-Metadaten (MediaFormat#KEY_HDR_STATIC_INFO für alle HDR-Profile) aus Bitstream und/oder Container gemäß den entsprechenden Spezifikationen unterstützen.
-
[C-SR] Für die Geräteimplementierungen wird dringend empfohlen, die Ausgabe der Metadaten MediaFormat#KEY_HDR10_PLUS_INFO für HDR10Plus-Profile über MediaCodec#getOutputFormat(int) zu unterstützen
.
-
[C-3-2] Geräteimplementierungen MÜSSEN HDR-Inhalte für das Profil
HEVCProfileMain10HDR10
richtig auf dem Gerätebildschirm oder an einem Standard-Videoausgabeport (z.B. HDMI). -
[C-SR] Bei Geräteimplementierungen wird dringend empfohlen, HDR-Inhalte für das Profil
HEVCProfileMain10HDR10Plus
auf dem Gerätebildschirm oder an einem standardmäßigen Videoausgabeport (z.B. HDMI).
5.3.6. VP8
Wenn Geräteimplementierungen den VP8-Codec unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die SD-Decodierungsprofile in der folgenden Tabelle unterstützen.
- SOLLTEN SIE einen Hardware-VP8-Codec verwenden, der die Anforderungen erfüllt.
- SOLLTEN die HD-Decodierungsprofile in der folgenden Tabelle unterstützen.
Wenn die von der Methode Display.getSupportedModes()
gemeldete Höhe der Videoauflösung entspricht oder größer ist, dann gilt:
- [C-2-1] Geräteimplementierungen MÜSSEN 720p-Profile in der folgenden Tabelle unterstützen.
- [C-2-2] Geräteimplementierungen MÜSSEN 1080p-Profile in der folgenden Tabelle unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 x 180 Pixel | 640 x 360 Pixel | 1280 x 720 Pixel | 1920 x 1080 px |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 30 fps (60 fpsFernsehen) | 30 (60 fpsFernsehen) |
Video-Bitrate | 800 kbit/s | 2 Mbit/s | 8 Mbit/s | 20 Mbit/s |
5.3.7. VP9
Wenn Geräteimplementierungen den VP9-Codec unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die SD-Videodecodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
- SOLLTEN die HD-Decodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
Wenn Geräteimplementierungen den VP9-Codec und einen Hardwaredecoder unterstützen:
- [C-2-1] MUSS die HD-Decodierungsprofile wie in der folgenden Tabelle angegeben unterstützen.
Wenn die von der Methode Display.getSupportedModes()
gemeldete Höhe gleich oder größer als die Videoauflösung ist, dann gilt:
- [C-3-1] Geräteimplementierungen MÜSSEN mindestens eine VP9- oder H.265-Decodierung des 720-, 1080- und UHD-Profils unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
Videoauflösung | 320 x 180 Pixel | 640 x 360 Pixel | 1280 x 720 Pixel | 1920 x 1080 px | 3840 x 2160 Pixel |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 30 fps (60 fpsFernsehen mit VP9-Hardware-Decodierung) | 60 fps |
Video-Bitrate | 600 Kbit/s | 1,6 Mbit/s | 4 Mbit/s | 5 Mbit/s | 20 Mbit/s |
Wenn bei Geräteimplementierungen VP9Profile2
oder VP9Profile3
über die Medien-APIs 'CodecProfileLevel' unterstützt werden, gilt Folgendes:
- Unterstützung für das 12-Bit-Format ist optional.
Wenn in Geräteimplementierungen ein HDR-Profil (VP9Profile2HDR
, VP9Profile2HDR10Plus
, VP9Profile3HDR
, VP9Profile3HDR10Plus
) über die Medien-APIs unterstützt wird, gehe so vor:
-
[C-4-1] Geräteimplementierungen MÜSSEN die erforderlichen HDR-Metadaten (
MediaFormat#KEY_HDR_STATIC_INFO
für alle HDR-Profile sowie den ParameterMediaCodec#PARAMETER_KEY_HDR10_PLUS_INFO
fürHDR10Plus
-Profile) aus der Anwendung über die MediaCodec API akzeptieren. Außerdem müssen die erforderlichen HDR-Metadaten (MediaFormat#KEY_HDR_STATIC_INFO
für alle HDR-Profile undMediaFormat#KEY_HDR10_PLUS_INFO
fürHDR10Plus
-Profile) gemäß den entsprechenden Spezifikationen aus dem Bitstream und/oder Container extrahiert werden. Sie MÜSSEN auch die Ausgabe der erforderlichen HDR-Metadaten (MediaFormat#KEY_HDR_STATIC_INFO
für alle HDR-Profile) aus dem Bitstream und/oder Container gemäß der Definition in den relevanten Spezifikationen unterstützen. -
[C-4-2] Geräteimplementierungen MÜSSEN HDR-Inhalte für
VP9Profile2HDR
- undVP9Profile3HDR
-Profile ordnungsgemäß auf dem Gerätebildschirm oder an einem Standard-Videoausgabeport (z.B. HDMI). -
[C-SR] Für die Geräteimplementierungen wird dringend empfohlen, die Ausgabe der Metadaten
MediaFormat#KEY_HDR10_PLUS_INFO
fürHDR10Plus
-Profile überMediaCodec#getOutputFormat(int)
zu unterstützen. -
[C-SR] Geräteimplementierungen werden dringend empfohlen, HDR-Inhalte für VP9Profile2HDR10Plus- und VP9Profile3HDR10Plus-Profile auf dem Gerätebildschirm oder an einem Standard-Videoausgabeport (z.B. HDMI).
5.3.8. Dolby Vision
Wenn in Geräteimplementierungen die Unterstützung des Dolby Vision-Decoders über HDR_TYPE_DOLBY_VISION
deklariert wird , gilt Folgendes:
- [C-1-1] MÜSSEN einen Dolby Vision-fähigen Extraktor bereitstellen.
- [C-1-2] MÜSSEN Dolby Vision-Inhalte auf dem Gerätebildschirm oder an einem Standard-Videoausgangsport (z.B. HDMI).
- [C-1-3] MÜSSEN den Trackindex der abwärtskompatiblen Basisebenen (falls vorhanden) so einstellen, dass er mit dem Trackindex der kombinierten Dolby Vision-Ebene übereinstimmt.
5.3.9. AV1
Wenn Geräteimplementierungen den AV1-Codec unterstützen, gilt Folgendes:
- [C-1-1] MUSS Profil 0 einschließlich 10-Bit-Inhalten unterstützen.
5.4. Audioaufnahmen
Während einige der in diesem Abschnitt beschriebenen Anforderungen seit Android 4.3 als SOLLTEN aufgelistet werden, werden diese in der Kompatibilitätsdefinition für zukünftige Versionen in MÜSSEN geändert. Bestehenden und neuen Android-Geräten wird UNBEDINGT empfohlen, diese Anforderungen zu erfüllen, da sie sonst nicht mit der Android-Kompatibilität auf die zukünftige Version aktualisiert werden können.
5.4.1 Aufzeichnung von Rohdaten und Mikrofon
Wenn in Geräteimplementierungen android.hardware.microphone
deklariert wird, gilt Folgendes:
-
[C-1-1] MUSS die Aufnahme von Audio-Rohinhalten mit den folgenden Eigenschaften zulassen:
- Format: Lineare PCM, 16 Bit
- Abtastraten: 8.000, 11.025, 16.000, 44.100, 48.000 Hz
- Kanäle: Mono
-
SOLLTEN die Erfassung von Rohaudioinhalten mit den folgenden Eigenschaften zulassen:
- Format: Lineare PCM, 16-Bit und 24-Bit
- Abtastraten: 8.000, 11.025, 16.000, 22.050, 24.000, 32.000, 44.100, 48.000 Hz
- Kanäle: so viele Kanäle wie die Anzahl der Mikrofone auf dem Gerät.
-
[C-1-2] MÜSSEN bei den obigen Stichprobenraten ohne Up-Sampling erfassen.
- [C-1-3] MÜSSEN einen geeigneten Anti-Aliasing-Filter verwenden, wenn die oben angegebenen Abtastraten mit Downsampling erfasst werden.
-
SOLLTEN die Aufnahme von Audio-Rohinhalten in AM-Radio- und DVD-Qualität erlauben. Das sollte folgende Merkmale aufweisen:
- Format: Lineare PCM, 16 Bit
- Abtastraten: 22.050, 48.000 Hz
- Kanäle: Stereo
-
[C-1-4] MÜSSEN die
MicrophoneInfo
API berücksichtigen und die Informationen für die verfügbaren Mikrofone auf dem Gerät, auf die Drittanbieter-Apps über dieAudioManager.getMicrophones()
API zugreifen können, sowie die derzeit aktiven Mikrofone, auf die Drittanbieter-Apps über die APIsAudioRecord.getActiveMicrophones()
undMediaRecorder.getActiveMicrophones()
zugreifen können, korrekt eintragen. Wenn Geräteimplementierungen die Erfassung von Rohaudioinhalten in AM-Radio- und DVD-Qualität ermöglichen, gilt Folgendes: -
[C-2-1] MÜSSEN ohne Upsampling bei einem Verhältnis von mehr als 16.000:22.050 oder 44.100:48.000 Aufnahmen erfassen.
- [C-2-2] MÜSSEN einen geeigneten Anti-Aliasing-Filter für jedes Up- bzw. Downsampling verwenden.
5.4.2 Für Spracherkennung aufnehmen
Wenn in Geräteimplementierungen android.hardware.microphone
deklariert wird, gilt Folgendes:
- [C-1-1] MÜSSEN die Audioquelle
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION
mit einer der Abtastraten 44.100 und 4.8.000 erfassen. - [C-1-2] MÜSSEN standardmäßig die Audioverarbeitung zur Rauschunterdrückung deaktivieren, wenn du einen Audiostream von der Audioquelle „
AudioSource.VOICE_RECOGNITION
“ aufnimmst. - [C-1-3] MÜSSEN standardmäßig die automatische Verstärkungsregelung bei der Aufzeichnung eines Audiostreams von der Audioquelle
AudioSource.VOICE_RECOGNITION
deaktivieren. - SOLLTE den Audiostream der Spracherkennung mit einer ungefähren Charakteristiken der Amplitude gegenüber Frequenz aufzeichnen, insbesondere ±3 dB von 100 Hz bis 4.000 Hz.
- SOLLTEN Sie den Audiostream der Spracherkennung mit einer eingestellten Eingangsempfindlichkeit so aufnehmen, dass eine Schallleistungsquelle von 90 dB bei 1.000 Hz einen RMS-Wert von 2.500 für 16-Bit-Samples ergibt.
- SOLLTE den Audiostream der Spracherkennung so aufzeichnen, dass die PCM-Amplitudenpegel linear Änderungen des Eingangs-SPL in einem Bereich von -18 dB bis +12 dB bzw. 90 dB SPL am Mikrofon erfassen.
- SOLLTE den Audiostream der Spracherkennung mit einer THD-Gesamtheit von weniger als 1% für 1 kHz bei 90 dB SPL-Eingangslautstärke am Mikrofon aufzeichnen.
Wenn in Geräteimplementierungen android.hardware.microphone
und Technologien zur Rauschunterdrückung bzw. Rauschunterdrückung für die Spracherkennung deklariert sind, gilt Folgendes:
- [C-2-1] MÜSSEN erlauben, dass dieser Audioeffekt mit der
android.media.audiofx.NoiseSuppressor
API gesteuert werden kann. - [C-2-2] MÜSSEN jede Implementierung der Rauschunterdrückungstechnologie eindeutig über das Feld
AudioEffect.Descriptor.uuid
identifizieren.
5.4.3 Aufnahme für Umleitung der Wiedergabe
Die Klasse „android.media.MediaRecorder.AudioSource
“ enthält die Audioquelle „REMOTE_SUBMIX
“.
Wenn in Geräteimplementierungen sowohl android.hardware.audio.output
als auch android.hardware.microphone
deklariert sind, gilt Folgendes:
-
[C-1-1] MÜSSEN die Audioquelle
REMOTE_SUBMIX
ordnungsgemäß implementieren, sodass eine Anwendung, die dieandroid.media.AudioRecord
API zum Aufzeichnen aus dieser Audioquelle verwendet, eine Mischung aus allen Audiostreams erfasst, mit Ausnahme der folgenden:-
AudioManager.STREAM_RING
-
AudioManager.STREAM_ALARM
-
AudioManager.STREAM_NOTIFICATION
-
5.4.4. Akustik-Echo-Canceler
Wenn in Geräteimplementierungen android.hardware.microphone
deklariert wird, gilt Folgendes:
- SOLLTEN SIE eine auf die Sprachkommunikation abgestimmte Acoustic Echo Canceler-Technologie (AEC) implementieren, die beim Aufnehmen mit
AudioSource.VOICE_COMMUNICATION
auf den Erfassungspfad angewendet wird.
Wenn Geräteimplementierungen einen akustischen Echo-Canceler bereitstellen, der in den Erfassungsaudiopfad eingefügt wird, wenn AudioSource.VOICE_COMMUNICATION
ausgewählt ist, geschieht Folgendes:
- [C-SR] wird STRONGLY_RECOMMENDED über die AcousticEchoCanceler-API-Methode AcousticEchoCanceler.isAvailable() angegeben.
- [C-SR] sind STRONGLY_RECOMMENDED, damit dieser Audioeffekt mit der AcousticEchoCanceler API gesteuert werden kann.
- [C-SR] dürfen STRONGLY_RECOMMENDED sein, um jede AEC-Technologie mithilfe des Felds AudioEffect.Descriptor.uuid eindeutig zu identifizieren.
5.4.5. Gleichzeitige Aufnahme
Wenn in der Geräteimplementierung android.hardware.microphone
deklariert wird, MÜSSEN sie die gleichzeitige Erfassung implementieren, wie in diesem Dokument beschrieben . Im Detail:
- [C-1-1] MÜSSEN den gleichzeitigen Zugriff auf das Mikrofon durch eine Bedienungshilfe gewähren, die mit
AudioSource.VOICE_RECOGNITION
erfasst, und mindestens eine App, die mit einem beliebigenAudioSource
aufzeichnet. - [C-1-2] MUSS den gleichzeitigen Zugriff auf das Mikrofon durch eine vorinstallierte App zulassen, die eine Assistant-Rolle und mindestens eine App hat, die Daten mit einem beliebigen
AudioSource
mit Ausnahme vonAudioSource.VOICE_COMMUNICATION
oderAudioSource.CAMCORDER
erfasst. - [C-1-3] MÜSSEN die Audioaufnahme für alle anderen Apps mit Ausnahme von Bedienungshilfen stummschalten, während eine App Daten mit
AudioSource.VOICE_COMMUNICATION
oderAudioSource.CAMCORDER
aufzeichnet. Wenn eine App jedoch Daten überAudioSource.VOICE_COMMUNICATION
aufzeichnet, kann eine andere App den Sprachanruf aufzeichnen, sofern es sich um eine privilegierte (vorinstallierte) App mit der Berechtigung „CAPTURE_AUDIO_OUTPUT
“ handelt. - [C-1-4] Wenn zwei oder mehr Apps gleichzeitig Daten aufzeichnen und keine der beiden Apps über eine Benutzeroberfläche verfügt, empfängt die App, die mit der Aufzeichnung des zuletzt begonnen hat, Audio.
5.4.6. Mikrofonverstärkungspegel
Wenn in Geräteimplementierungen android.hardware.microphone
deklariert wird, gilt Folgendes:
- SOLLTEN im mittleren Frequenzbereich ungefähr flache Amplitude-gegen-Frequenz-Eigenschaften aufweisen, insbesondere ±3 dB von 100 Hz bis 4.000 Hz für jedes Mikrofon, das zur Aufzeichnung der Audioquelle für die Spracherkennung verwendet wird.
- Die Empfindlichkeit der Audioeingabe sollte so eingestellt werden, dass eine sinusoidale 1000-Hz-Tonquelle, die bei 90 dB Schalldruckpegel abgespielt wird, für 16-Bit-Samples (oder -22,35 dB Full Scale) für Gleitkomma-/doppelte Genauigkeitsbeispiele für jedes Mikrofon, das zur Aufnahme der Audioquelle verwendet wird, einen RMS-Wert von 2.500 RMS liefert.
- [C-SR] wird UNBEDINGT empfohlen, Amplitudenpegel im niedrigen Frequenzbereich anzugeben, und zwar im Bereich von ±20 dB von 5 Hz bis 100 Hz im Vergleich zum Mittelfrequenzbereich jedes einzelnen Mikrofons, das zur Aufnahme der Audioquelle für die Spracherkennung verwendet wird.
- [C-SR] wird UNBEDINGT empfohlen, Amplitudenpegel im hohen Frequenzbereich zu erreichen, insbesondere von ±30 dB von 4.000 bis 22 kHz im Vergleich zum Mittelfrequenzbereich jedes einzelnen Mikrofons, das zur Aufzeichnung der Audioquelle für die Spracherkennung verwendet wird.
5.5. Audiowiedergabe
Wie in Abschnitt 7.8.2 definiert, unterstützt Android die Möglichkeit, Apps die Wiedergabe von Audio über das Audioausgabe-Peripheriegerät zu ermöglichen.
5.5.1 Raw-Audiowiedergabe
Wenn in Geräteimplementierungen android.hardware.audio.output
deklariert wird, gilt Folgendes:
-
[C-1-1] MUSS die Wiedergabe von unformatierten Audioinhalten mit den folgenden Eigenschaften zulassen:
- Quellformate: Lineare PCM, 16-Bit, 8-Bit, Gleitkommazahl
- Kanäle: Mono, Stereo, gültige Mehrkanalkonfigurationen mit bis zu acht Kanälen
-
Abtastraten (in Hz):
<ph type="x-smartling-placeholder">
- </ph>
- 8000, 11025, 16000, 22050, 32000, 44100, 48000 bei den oben aufgeführten Kanalkonfigurationen
- 96.000 in Mono und Stereo
-
SOLLTEN die Wiedergabe von unformatierten Audioinhalten mit den folgenden Eigenschaften zulassen:
- Abtastraten: 24.000
5.5.2 Audioeffekte
Android bietet eine API für Audioeffekte für Geräteimplementierungen.
Wenn in Geräteimplementierungen die Funktion android.hardware.audio.output
deklariert ist, geschieht Folgendes:
- [C-1-1] MUSS die Implementierungen
EFFECT_TYPE_EQUALIZER
undEFFECT_TYPE_LOUDNESS_ENHANCER
unterstützen, die über die AudioEffect-UnterklassenEqualizer
undLoudnessEnhancer
gesteuert werden können. - [C-1-2] MUSS die Visualizer API-Implementierung unterstützen, die über die Klasse
Visualizer
gesteuert werden kann. - [C-1-3] MUSS die
EFFECT_TYPE_DYNAMICS_PROCESSING
-Implementierung unterstützen, die über die AudioEffect-UnterklasseDynamicsProcessing
gesteuert werden kann. - SOLLTEN die Implementierungen
EFFECT_TYPE_BASS_BOOST
,EFFECT_TYPE_ENV_REVERB
,EFFECT_TYPE_PRESET_REVERB
undEFFECT_TYPE_VIRTUALIZER
unterstützen, die über die abgeleitetenAudioEffect
-KlassenBassBoost
,EnvironmentalReverb
,PresetReverb
undVirtualizer
gesteuert werden können. - [C-SR] wird dringend empfohlen, Effekte in Gleitkomma- und mehreren Kanälen zu unterstützen.
5.5.3 Audioausgabelautstärke
Implementierungen von Automobilgeräten:
- MÜSSEN die Audiolautstärke für jeden Audiostream separat anpassen. Dabei muss der Inhaltstyp oder die Nutzung gemäß der Definition in den Audioattributen und die öffentlich in
android.car.CarAudioManager
definierte Nutzung von Autoaudiodaten verwendet werden.
5.6. Audiolatenz
Die Audiolatenz ist die Zeitverzögerung, wenn ein Audiosignal ein System durchläuft. Viele Arten von Anwendungen nutzen kurze Latenzen, um Soundeffekte in Echtzeit zu erzielen.
Verwenden Sie für die Zwecke dieses Abschnitts die folgenden Definitionen:
- Ausgabelatenz. Das Intervall zwischen dem Zeitpunkt, zu dem eine Anwendung einen Frame mit PCM-codierten Daten schreibt, und dem Zeitpunkt, zu dem der entsprechende Ton der Umgebung über einen geräteinternen Transducer oder ein Signal präsentiert wird, das das Gerät über einen Anschluss verlässt und extern erfasst werden kann.
- Latenz der kalten Ausgabe. Die Ausgabelatenz für den ersten Frame, wenn das Audioausgabesystem vor der Anfrage inaktiv und heruntergefahren wurde.
- Kontinuierliche Ausgabelatenz: Die Ausgabelatenz für nachfolgende Frames nach der Audiowiedergabe auf dem Gerät.
- Eingabelatenz Das Intervall zwischen dem Zeitpunkt, zu dem ein Schall dem Gerät von der Umgebung über einen geräteinternen Transducer oder ein Signal übertragen wird, der über einen Port in das Gerät eintritt, und wenn eine Anwendung den entsprechenden Frame von PCM-codierten Daten liest.
- keine Eingabe mehr. Der erste Teil eines Eingabesignals, der nicht verwendbar oder nicht verfügbar ist.
- Kalteingabelatenz Die Summe der verlorenen Eingabezeit und der Eingabelatenz für den ersten Frame, wenn das Audioeingabesystem vor der Anfrage inaktiv war und heruntergefahren wurde.
- Kontinuierliche Eingabelatenz. Die Eingabelatenz für nachfolgende Frames, während das Gerät Audio aufzeichnet.
- Kalter Ausgabejitter. Die Variabilität zwischen separaten Messungen der Latenzwerte für die kalte Ausgabe.
- Kalter Eingabejitter. Die Variabilität zwischen separaten Messungen der Latenzwerte für die Cold-Eingabe.
- Kontinuierliche Umlauflatenz. Die Summe der kontinuierlichen Eingabelatenz plus der kontinuierlichen Ausgabelatenz plus einem Pufferzeitraum. Der Pufferzeitraum gibt der App Zeit, das Signal zu verarbeiten, und die App hat genug Zeit, um den Phasenunterschied zwischen Ein- und Ausgabestreams abzuschwächen.
- OpenSL ES PCM Buffer Queue API Eine Reihe von PCM-bezogenen OpenSL ES APIs im Android NDK.
- Native Audio API von Audio. Die AAudio APIs im Android-NDK.
- timestamp: Ein Paar, das aus einer relativen Frame-Position in einem Stream und der geschätzten Zeit besteht, zu der dieser Frame die Audioverarbeitungspipeline auf dem zugehörigen Endpunkt erreicht oder verlässt. Siehe auch AudioTimestamp.
- Fehler. Eine vorübergehende Unterbrechung oder ein falscher Samplewert im Audiosignal, die in der Regel durch eine Pufferunterschreitung für die Ausgabe, eine Pufferüberschreitung für die Eingabe oder eine andere Quelle von digitalem oder analogem Rauschen verursacht wird.
Wenn in der Geräteimplementierung „android.hardware.audio.output
“ deklariert ist, MÜSSEN die folgenden Anforderungen erfüllt oder übertroffen werden:
- [C-1-1] Der von AudioTrack.getTimestamp und
AAudioStream_getTimestamp
zurückgegebene Ausgabezeitstempel ist auf +/- 2 ms genau. - [C-1-2] Latenz der kalten Ausgabe von 500 Millisekunden oder weniger.
Wenn in Geräteimplementierungen android.hardware.audio.output
deklariert wird, wird UNBEDINGT EMPFOHLEN, die folgenden Anforderungen zu erfüllen oder zu übertreffen:
- [C-SR] Kaltausgabelatenz von maximal 100 Millisekunden. Bestehende und neue Geräte, auf denen diese Android-Version ausgeführt wird, werden DRINGEND EMPFOHLEN, diese Anforderungen jetzt zu erfüllen. In einem zukünftigen Plattformrelease im Jahr 2021 ist eine Latenz bei Kaltausgabe von maximal 200 ms als MÜSSEN erforderlich.
- [C-SR] Kontinuierliche Ausgabelatenz von maximal 45 Millisekunden.
- [C-SR] Minimieren Sie den kalten Ausgabejitter.
- [C-SR] Der von AudioTrack.getTimestamp und
AAudioStream_getTimestamp
zurückgegebene Ausgabezeitstempel ist auf +/- 1 ms genau.
Wenn Geräteimplementierungen die oben genannten Anforderungen nach jeder anfänglichen Kalibrierung erfüllen und sowohl die OpenSL ES PCM-Zwischenspeicherwarteschlange als auch die nativen AAudio-Audio-APIs für kontinuierliche und kalte Ausgabelatenz für mindestens ein unterstütztes Audioausgabegerät verwendet werden, gilt Folgendes:
- [C-SR] WIRD DRINGEND empfohlen, Audio mit niedriger Latenz zu melden, indem du das Funktions-Flag „
android.hardware.audio.low_latency
“ deklarierst. - [C-SR] EMPFOHLEN, die Anforderungen an Audio mit niedriger Latenz über die AAudio API zu erfüllen.
- [C-SR] EMPFOHLEN, damit bei Streams, die
AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
vonAAudioStream_getPerformanceMode()
zurückgeben, der vonAAudioStream_getFramesPerBurst()
zurückgegebene Wert kleiner oder gleich dem Wert ist, der vonandroid.media.AudioManager.getProperty(String)
für den Property-SchlüsselAudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER
zurückgegeben wird.
Wenn Geräteimplementierungen die Anforderungen für Audio mit niedriger Latenz über die OpenSL ES PCM-Zwischenspeicherwarteschlange und die nativen AAudio-Audio-APIs nicht erfüllen, geschieht Folgendes:
- [C-2-1] DÜRFEN KEINE Unterstützung für Audio mit niedriger Latenz melden.
Wenn Geräteimplementierungen android.hardware.microphone
enthalten, MÜSSEN die folgenden Anforderungen für die Audioeingabe erfüllt werden:
- [C-3-1] Begrenzen Sie den Fehler bei den Eingabezeitstempeln, wie von AudioRecord.getTimestamp oder
AAudioStream_getTimestamp
zurückgegeben, auf +/- 2 ms. „Fehler“ bedeutet hier die Abweichung vom richtigen Wert. - [C-3-2] Kalteingabelatenz von maximal 500 Millisekunden.
Wenn Geräteimplementierungen android.hardware.microphone
enthalten, wird dringend empfohlen, die folgenden Anforderungen an die Audioeingabe zu erfüllen:
- [C-SR] Kalteingabelatenz von maximal 100 Millisekunden. Bestehende und neue Geräte, auf denen diese Android-Version ausgeführt wird, werden DRINGEND EMPFOHLEN, diese Anforderungen jetzt zu erfüllen. In einem zukünftigen Plattformrelease im Jahr 2021 ist eine Latenz bei der Kalteingabe von maximal 200 ms erforderlich.
- [C-SR] Kontinuierliche Eingabelatenz von maximal 30 Millisekunden.
- [C-SR] Kontinuierliche Umlauflatenz von maximal 50 Millisekunden.
- [C-SR] Minimieren Sie den kalten Eingabejitter.
- [C-SR] Begrenzen Sie den Fehler bei den Eingabezeitstempeln, die von AudioRecord.getTimestamp oder
AAudioStream_getTimestamp
zurückgegeben werden, auf +/- 1 ms.
5.7. Netzwerkprotokolle
Geräteimplementierungen MÜSSEN die Mediennetzwerkprotokolle für die Audio- und Videowiedergabe unterstützen, wie in der Android SDK-Dokumentation angegeben.
Wenn Geräteimplementierungen einen Audio- oder Videodecoder enthalten, gilt Folgendes:
-
[C-1-1] MUSS alle in Abschnitt 5.1 erforderlichen Codecs und Containerformate über HTTP(S) unterstützen.
-
[C-1-2] MÜSSEN die Mediasegmentformate unterstützen, die in der Tabelle mit den Mediensegmentformaten unten im HTTP-Live-Streaming-Entwurfsprotokoll, Version 7 aufgeführt sind.
-
[C-1-3] MÜSSEN das folgende RTP-Audio-Videoprofil und die zugehörigen Codecs in der RTSP-Tabelle unten unterstützen. Ausnahmen finden Sie in den Fußnoten in der Tabelle in Abschnitt 5.1.
Formate für Mediensegmente
Segmentformate | Referenz(en) | Codec-Unterstützung erforderlich |
---|---|---|
MPEG-2-Transportstrom | ISO 13818 |
Video-Codecs:
<ph type="x-smartling-placeholder">
siehe Abschnitt 5.1.3 und MPEG-2. Audio-Codecs:
|
AAC mit ADTS-Framing und ID3-Tags | ISO 13818-7 | Weitere Informationen zu AAC und seinen Varianten finden Sie in Abschnitt 5.1.1. |
WebVTT | WebVTT |
RTSP (RTP, SDP)
Profilname | Referenz(en) | Codec-Unterstützung erforderlich |
---|---|---|
H264-AVC | RFC 6184 | Weitere Informationen zu H264 AVC finden Sie in Abschnitt 5.1.3. |
MP4A-LATM | RFC 6416 | Weitere Informationen zu AAC und seinen Varianten finden Sie in Abschnitt 5.1.1. |
H263–1998 |
RFC 3551 RFC 4629 RFC 2190 |
Weitere Informationen zu H263 finden Sie in Abschnitt 5.1.3. |
H263–2000 | RFC 4629 | Weitere Informationen zu H263 finden Sie in Abschnitt 5.1.3. |
Logo: AMR | RFC 4867 | Weitere Informationen zu AMR-NB finden Sie in Abschnitt 5.1.1. |
AMR-WB | RFC 4867 | Weitere Informationen zu AMR-WB finden Sie in Abschnitt 5.1.1. |
MP4V-ES | RFC 6416 | Weitere Informationen zu MPEG-4 SP finden Sie in Abschnitt 5.1.3. |
MPEG4-generisch | RFC 3640 | Weitere Informationen zu AAC und seinen Varianten finden Sie in Abschnitt 5.1.1. |
MP2T | RFC 2250 | Weitere Informationen findest du im Abschnitt MPEG-2 Transport Stream unter "HTTP Live Streaming" |
5.8. Sichere Medien
Wenn Geräteimplementierungen eine sichere Videoausgabe und sichere Oberflächen unterstützen, ist Folgendes zu beachten:
- [C-1-1] MÜSSEN die Unterstützung für
Display.FLAG_SECURE
erklären.
Wenn Geräteimplementierungen die Unterstützung von Display.FLAG_SECURE
und Wireless-Anzeigeprotokolle unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN die Verbindung mit einem kryptografisch starken Mechanismus wie HDCP 2.x oder höher für die Bildschirme sichern, die über WLAN-Protokolle wie Miracast verbunden sind.
Wenn in Geräteimplementierungen die Unterstützung von Display.FLAG_SECURE
deklariert wird und externe Bildschirme mit Kabel unterstützt werden, gilt Folgendes:
- [C-3-1] MUSS HDCP 1.2 oder höher für alle externen Bildschirme unterstützen, die über einen vom Nutzer zugänglichen kabelgebundenen Port angeschlossen werden.
5.9. MIDI (Musical Instrument Digital Interface)
Wenn Geräteimplementierungen die Unterstützung der Funktion android.software.midi
über die Klasse android.content.pm.PackageManager
melden, geschieht Folgendes:
-
[C-1-1] MÜSSEN MIDI über alle MIDI-fähigen Hardwaretransporte unterstützen, für die sie generische Nicht-MIDI-Verbindungen bereitstellen. Dazu gehören:
- USB-Hostmodus, Abschnitt 7.7
- USB-Peripheriemodus, Abschnitt 7.7
- MIDI over Bluetooth LE in zentraler Rolle, Abschnitt 7.4.3
-
[C-1-2] MÜSSEN den App-übergreifenden MIDI-Softwaretransport (virtuelle MIDI-Geräte) unterstützen.
-
[C-1-3] MÜSSEN libamidi.so (native MIDI-Unterstützung) enthalten
5.10. Professionelles Audio
Wenn Geräteimplementierungen die Unterstützung der Funktion android.hardware.audio.pro
über die Klasse android.content.pm.PackageManager melden, geschieht Folgendes:
- [C-1-1] MÜSSEN die Unterstützung für Funktion
android.hardware.audio.low_latency
melden. - [C-1-2] MÜSSEN eine kontinuierliche Umlauf-Audiolatenz gemäß Definition in Abschnitt 5.6 Audiolatenz von maximal 20 Millisekunden haben und SOLLTEN bei mindestens einem unterstützten Pfad 10 Millisekunden oder weniger betragen.
- [C-1-3] MUSS einen oder mehrere USB-Ports haben, die den USB-Hostmodus und den USB-Peripheriemodus unterstützen.
- [C-1-4] MÜSSEN die Unterstützung für Funktion
android.software.midi
melden. - [C-1-5] MÜSSEN die Anforderungen an Latenzen und USB-Audioinhalte sowohl über die OpenSL ES PCM Buffer Queue API als auch über mindestens einen Pfad der nativen AAudio API erfüllen.
- [SR] Wir empfehlen dringend, die AAudio Native Audio API über den MMAP-Pfad zu verwenden, um Latenzen und USB-Audioanforderungen zu erfüllen.
- [C-1-6] MUSS eine Latenz für die kalte Ausgabe von 200 Millisekunden oder weniger haben.
- [C-1-7] MÜSSEN eine Kalteingabelatenz von maximal 200 Millisekunden haben.
- [SR] wird dringend empfohlen, bei aktiver Audiowiedergabe und schwankender CPU-Auslastung eine konstante CPU-Leistung zu bieten. Dies sollte mit der Android-App-Version der SynthMark-Commit-ID 09b13c6f49ea089f8c31e5d035f912cc405b7ab8 getestet werden. SynthMark verwendet einen Software-Synthesizer, der auf einem simulierten Audio-Framework ausgeführt wird und die Systemleistung misst. Die SynthMark-App muss mit der Option „Automated Test“ ausgeführt werden und folgende Ergebnisse erzielen:
<ph type="x-smartling-placeholder">
- </ph>
- Stimmmarke.90 >= 32 Stimmen
- Latenzmark.Fixed.little <= 15 ms
- Latenzmark.dynamic.little <= 50 ms
Erläuterungen zu den Benchmarks finden Sie in der SynthMark-Dokumentation.
- SOLLTEN die Ungenauigkeit der Audiouhr und die Abweichung gegenüber der Standardzeit minimieren.
- SOLLTEN Sie die Abweichung des Audiotakts relativ zur CPU-
CLOCK_MONOTONIC
minimieren, wenn beide aktiv sind. - SOLLTEN die Audiolatenz über geräteinterne Transducer minimieren.
- SOLLTEN die Audiolatenz im Vergleich zu digitalen USB-Audioquellen minimieren.
- SOLLTEN die Messungen der Audiolatenz für alle Pfade dokumentieren.
- SOLLTEN Jitter bei den Callback-Eingabezeiten für den Abschluss des Audiopuffers minimieren, da dies den nutzbaren Prozentsatz der vollen CPU-Bandbreite durch den Callback beeinflusst.
- SOLLTEN bei normaler Nutzung mit der gemeldeten Latenz keine Audiostörungen auftreten.
- SOLLTEN keinen Unterschied bei der kanalübergreifenden Latenz haben.
- SOLLTEN die durchschnittliche MIDI-Latenz für alle Transporte minimieren.
- SOLLTEN die MIDI-Latenzvariabilität unter Last (Jitter) bei allen Transporten minimieren.
- SOLLTEN für alle Transporte genaue MIDI-Zeitstempel angeben.
- SOLLTEN Störungen des Audiosignals über Aufkleber auf dem Gerät minimiert werden, einschließlich des Zeitraums unmittelbar nach dem Kaltstart.
- SOLLTEN keine Audiotaktdifferenz zwischen den Ein- und Ausgabeseiten der entsprechenden Endpunkte erhalten, wenn beide aktiv sind. Beispiele für entsprechende Endpunkte sind das Mikrofon und der Lautsprecher auf dem Gerät oder der Ein- und Ausgang des Audioanschlusses.
- SOLLTEN Callbacks zum Abschluss des Audiopuffers für die Eingabe- und Ausgabeseiten der entsprechenden Endpunkte im selben Thread verarbeiten, wenn beide aktiv sind, und den Ausgabe-Callback unmittelbar nach der Rückgabe des Eingabe-Callbacks eingeben. Wenn es nicht möglich ist, die Callbacks im selben Thread zu verarbeiten, geben Sie den Ausgabe-Callback kurz nach dem Eingeben des Eingabe-Callbacks ein, damit die Anwendung ein einheitliches Timing der Ein- und Ausgabeseiten hat.
- SOLLTEN Sie den Phasenunterschied zwischen der HAL-Audiozwischenspeicherung für die Ein- und Ausgabeseiten der entsprechenden Endpunkte minimieren.
- SOLLTEN die Berührungslatenz minimieren.
- SOLLTEN Sie die Schwankungen der Berührungslatenz unter Last (Jitter) minimieren.
- Die Latenz von der Eingabe per Berührung bis zur Audioausgabe sollte höchstens 40 ms betragen.
Wenn Geräteimplementierungen alle oben genannten Anforderungen erfüllen, gilt Folgendes:
- [SR] WIRD DRINGEND empfohlen, die Unterstützung für Funktion
android.hardware.audio.pro
über die Klasseandroid.content.pm.PackageManager
zu melden.
Wenn Geräte eine 3,5-mm-Audiobuchse mit 4 Kabeln enthalten, ist Folgendes zu beachten:
- [C-2-1] MÜSSEN die kontinuierliche Audioumlauflatenz über den Audioanschlusspfad auf maximal 20 Millisekunden betragen.
- [SR] EMPFOHLEN, den Abschnitt Spezifikationen für Mobilgeräte (Anschlusse) in der Spezifikation für kabelgebundene Audio-Headsets (Version 1.1) einzuhalten.
- Die kontinuierliche Umlauf-Audiolatenz SOLLTE höchstens 10 Millisekunden über dem Pfad der Audiobuchse betragen.
Wenn Geräte auf einen 3,5-mm-Audioanschluss mit 4 Kabeln verzichten und einen oder mehrere USB-Ports enthalten, die den USB-Hostmodus unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN die USB-Audioklasse implementieren.
- [C-3-2] MÜSSEN eine kontinuierliche Umlauf-Audiolatenz von maximal 20 Millisekunden über dem USB-Hostmodus-Port mit der USB-Audioklasse haben.
- Die kontinuierliche Umlauf-Audiolatenz SOLLTE höchstens 10 Millisekunden über dem USB-Hostmodus-Port bei Verwendung der USB-Audioklasse betragen.
- [C-SR] wird dringend empfohlen, gleichzeitige E/A-Vorgänge mit bis zu 8 Kanälen pro Richtung, Abtastrate von 96 kHz und 24-Bit- oder 32-Bit-Tiefe zu unterstützen, wenn sie mit USB-Audio-Peripheriegeräten verwendet werden, die diese Anforderungen ebenfalls erfüllen.
Wenn Geräteimplementierungen einen HDMI-Port enthalten, ist Folgendes erforderlich:
- SOLLTEN die Ausgabe in Stereo und acht Kanälen bei 20-Bit- oder 24-Bit-Tiefe und 192 kHz ohne Bittiefenverlust oder -resampling in mindestens einer Konfiguration unterstützen.
5:11. Für unverarbeitet erfassen
Android bietet Unterstützung für die Aufzeichnung von unverarbeiteten Audioinhalten über die Audioquelle „android.media.MediaRecorder.AudioSource.UNPROCESSED
“. In OpenSL ES kann über die Datensatzvoreinstellung SL_ANDROID_RECORDING_PRESET_UNPROCESSED
darauf zugegriffen werden.
Wenn bei der Implementierung von Geräten eine unverarbeitete Audioquelle unterstützt und für Drittanbieter-Apps verfügbar gemacht werden soll, gilt Folgendes:
-
[C-1-1] MÜSSEN den Support über die
android.media.AudioManager
-Property PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED melden. -
[C-1-2] MUSS im mittleren Frequenzbereich annähernd flache Amplitude-gegen-Frequenz-Eigenschaften aufweisen, insbesondere ±10 dB von 100 bis 7.000 Hz für jedes Mikrofon, das zur Aufzeichnung der unverarbeiteten Audioquelle verwendet wird.
-
[C-1-3] MUSS Amplitudenpegel im niedrigen Frequenzbereich aufweisen, insbesondere im Bereich von ±20 dB von 5 Hz bis 100 Hz im Vergleich zum Mittenfrequenzbereich jedes einzelnen Mikrofons, das zur Aufnahme der unverarbeiteten Audioquelle verwendet wird.
-
[C-1-4] MÜSSEN Amplitudenpegel im hohen Frequenzbereich aufweisen, insbesondere von ±30 dB von 7.000 bis 22 kHz im Vergleich zum Mittelfrequenzbereich jedes einzelnen Mikrofons, das zur Aufnahme der unverarbeiteten Audioquelle verwendet wird.
-
[C-1-5] MÜSSEN die Empfindlichkeit der Audioeingabe so einstellen, dass eine sinusoidale 1.000-Hz-Tonquelle, die bei 94 dB Schalldruckpegel abgespielt wird, für 16 Bit-Samples (oder -36 dB Full Scale) für jedes nicht verarbeitete Mikrofon, das für die Aufnahme verwendet wird, einen RMS-Wert von 520 liefert.
-
[C-1-6] MUSS für jedes Mikrofon, das zur Aufnahme der unverarbeiteten Audioquelle verwendet wird, ein Signal-Rausch-Verhältnis (SNR) von 60 dB oder höher haben. (der SNR-Wert wird als Differenz zwischen 94 dB SPL und dem äquivalenten Schalldruckpegel des Eigenrauschens mit A-Gewichtung gemessen).
-
[C-1-7] MÜSSEN bei jedem Mikrofon, das für die Aufnahme der unverarbeiteten Audioquelle verwendet wird, bei einem Eingangspegel von 1 kHz bei 90 dB SPL eine harmonische Verzerrung (THD) unter 1% liegen.
-
DÜRFEN im Pfad keine andere Signalverarbeitung (z.B. automatische Verstärkungsregelung, Hochpassfilter oder Echounterdrückung) außer einem Levelmultiplikator verwendet werden, um das Level in den gewünschten Bereich zu bringen. Mit anderen Worten:
- [C-1-8] Wenn in der Architektur aus irgendeinem Grund Signalverarbeitung vorhanden ist, MÜSSEN sie deaktiviert werden, sodass der Signalpfad praktisch keine Verzögerung oder zusätzliche Latenz einbringt.
- [C-1-9] Der Levelmultiplikator darf zwar im Pfad vorhanden sein, DARF aber KEINE Verzögerung oder Latenz in den Signalpfad einbringen.
Alle Schallpegelmessungen erfolgen direkt neben dem zu testenden Mikrofon. Bei mehreren Mikrofonkonfigurationen gelten diese Anforderungen für jedes Mikrofon.
Wenn in Geräteimplementierungen android.hardware.microphone
deklariert ist, aber keine unverarbeitete Audioquelle unterstützt wird, gilt Folgendes:
- [C-2-1] MÜSSEN
null
für die API-MethodeAudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED)
zurückgeben, um richtig anzuzeigen, dass keine Unterstützung vorhanden ist. - [SR] wird weiterhin UNBEDINGT empfohlen, so viele Anforderungen an den Signalpfad für die unverarbeitete Aufnahmequelle zu erfüllen.
6. Kompatibilität von Entwicklertools und -optionen
6.1 Entwicklertools
Geräteimplementierungen:
- [C-0-1] MÜSSEN die im Android SDK bereitgestellten Android-Entwicklertools unterstützen.
-
- [C-0-2] MUSS ADB wie im Android SDK dokumentiert und die im AOSP bereitgestellten Shell-Befehle unterstützen, die von App-Entwicklern verwendet werden können, einschließlich
dumpsys
cmd stats
- [C-SR] wird dringend empfohlen, den Shell-Befehl
cmd testharness
zu unterstützen. - [C-0-3] DÜRFEN das Format oder den Inhalt von Gerätesystemereignissen (batterystats, diskstats, Fingerabdruck, generierte Grafiken, Netstats, Benachrichtigung, procstats) NICHT ändern, die über den Befehl dumpsys protokolliert wurden.
- [C-0-10] MÜSSEN die folgenden Ereignisse ohne Auslassung aufgezeichnet und für den
cmd stats
-Shell-Befehl und die System-API-KlasseStatsManager
zugänglich und verfügbar gemacht werden.- AktivitätsforegroundState geändert
- Anomalie erkannt
- AppBreadcrumbReported
- App-Absturz aufgetreten
- AppStartAuftreten
- Akkustand geändert
- Energiesparmodus geändert
- BleScanResultReceived
- BleScanStateGeändert
- Ladestatus geändert
- DeviceIdleModeStateChanged
- Dienststatus im Vordergrund geändert
- GpsScanStateGeändert
- JobStateChanged (Jobstatus geändert)
- PluggedStateChanged
- ScheduledJobStateGeändert
- Bildschirmstatus geändert
- Synchronisierungsstatus geändert
- SystemElapsedRealtime
- UidProcessStateGeändert
- WakelockStateGeändert
- Wakeup-Alarm aufgetreten
- WifiLockStateGeändert
- WifiMulticastLockStateGeändert
- WifiScanStateGeändert
- [C-0-4] MÜSSEN der geräteseitige ADB-Daemon standardmäßig inaktiv sein und es muss ein vom Nutzer zugänglicher Mechanismus zum Aktivieren von Android Debug Bridge vorhanden sein.
- [C-0-5] MUSS sicheres ADB unterstützen. Android unterstützt Secure ADB. „Secure adb“ aktiviert ADB auf bekannten authentifizierten Hosts.
-
[C-0-6] MÜSSEN einen Mechanismus bereitstellen, der die Verbindung von ADB mit einem Hostcomputer ermöglicht. Beispiel:
- Implementierungen von Geräten ohne USB-Port, die den Peripheriemodus unterstützen, MÜSSEN ADB über ein lokales Netzwerk (z. B. Ethernet oder WLAN) implementieren.
- MÜSSEN Treiber für Windows 7, 9 und 10 bereitstellen, damit Entwickler über das ADB-Protokoll eine Verbindung zum Gerät herstellen können.
- [C-0-2] MUSS ADB wie im Android SDK dokumentiert und die im AOSP bereitgestellten Shell-Befehle unterstützen, die von App-Entwicklern verwendet werden können, einschließlich
-
Dalvik Debug Monitor-Dienst (ddms)
- [C-0-7] MUSS alle im Android SDK dokumentierten ddms-Funktionen unterstützen. Da ddms ADB verwendet, sollte die Unterstützung für ddms standardmäßig inaktiv sein, MÜSSEN jedoch unterstützt werden, wenn der Nutzer die Android Debug Bridge wie oben beschrieben aktiviert hat.
-
Affe
<ph type="x-smartling-placeholder">
- </ph>
- [C-0-8] MÜSSEN das Monkey-Framework enthalten und für Anwendungen zur Verfügung stellen.
-
SysTrace
<ph type="x-smartling-placeholder">
- </ph>
- [C-0-9] MUSS das Systrace-Tool unterstützen, wie im Android SDK dokumentiert. Systrace MUSS standardmäßig inaktiv sein und es muss ein vom Nutzer zugänglicher Mechanismus zum Aktivieren von Systrace vorhanden sein.
-
- [C-SR] Es wird dringend empfohlen, dem Shell-Nutzer ein
/system/bin/perfetto
-Binärprogramm zur Verfügung zu stellen, das der Perfetto-Dokumentation entspricht. - [C-SR] Für das Perfetto-Binärprogramm wird DRINGEND empfohlen, als Eingabe eine protobuf-Konfiguration zu akzeptieren, die dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [C-SR] Für das Perfetto-Binärprogramm wird UNBEDINGT empfohlen, einen protobuf-Trace als Ausgabe zu schreiben, der dem in der Perfetto-Dokumentation definierten Schema entspricht.
- [C-SR] Es wird dringend empfohlen, über das Perfetto-Binärprogramm mindestens die in der Perfetto-Dokumentation beschriebenen Datenquellen bereitzustellen.
- [C-SR] Es wird dringend empfohlen, dem Shell-Nutzer ein
-
Wenn Geräteimplementierungen den Shell-Befehl
cmd testharness
unterstützen undcmd testharness enable
ausführen, geschieht Folgendes:- [C-2-1] MUSS
true
fürActivityManager.isRunningInUserTestHarness()
zurückgeben - [C-2-2] MÜSSEN den Test-Harnischmodus wie in der Dokumentation zum Harnessmodus beschrieben implementieren.
- [C-2-1] MUSS
Wenn bei Geräteimplementierungen die Unterstützung von Vulkan 1.0 oder höher über die Funktions-Flags android.hardware.vulkan.version
gemeldet wird, gilt Folgendes:
- [C-1-1] MÜSSEN dem App-Entwickler eine Option zum Aktivieren/Deaktivieren von GPU-Debug-Ebenen anbieten.
- [C-1-2] MÜSSEN, wenn die GPU-Debug-Ebenen aktiviert sind, Layer in Bibliotheken aufgezählt werden, die von externen Tools bereitgestellt werden (d. h., die nicht Teil der Plattform oder des Anwendungspakets sind), die sich in Debug-fähigen Anwendungen befinden. Basisverzeichnis zur Unterstützung der API-Methoden vkEnumerateInstanceLayerProperties() und vkCreateInstance()
6.2 Entwickleroptionen
Android unterstützt Entwickler bei der Konfiguration von Einstellungen für die Anwendungsentwicklung.
Geräteimplementierungen MÜSSEN die Entwickleroptionen einheitlich nutzen. Sie:
- [C-0-1] MÜSSEN den Intent android.settings.APPLICATION_DEVELOPMENT_SETTINGS berücksichtigen, um auf die App-Entwicklung bezogene Einstellungen anzuzeigen. Die vorgelagerte Android-Implementierung blendet das Menü „Entwickleroptionen“ standardmäßig aus und ermöglicht es Nutzern, die Entwickleroptionen zu starten, nachdem sie sieben (7) Mal auf Einstellungen > Über das Gerät > Build-Nummer.
- [C-0-2] MÜSSEN die Entwickleroptionen standardmäßig ausblenden.
- [C-0-3] MÜSSEN Sie einen klaren Mechanismus bereitstellen, durch den eine Drittanbieter-App keiner anderen bevorzugt behandelt wird, um Entwickleroptionen zu aktivieren. MÜSSEN ein öffentlich sichtbares Dokument oder eine öffentlich sichtbare Website zur Verfügung gestellt werden, auf dem bzw. der beschrieben wird, wie die Entwickleroptionen aktiviert werden. Dieses Dokument oder diese Website MUSS in den Android SDK-Dokumenten verknüpfbar sein.
- SOLLTE eine visuelle Benachrichtigung für den Nutzer eingeblendet werden, wenn die Entwickleroptionen aktiviert sind und die Sicherheit des Nutzers von Bedeutung ist.
- KANN den Zugriff auf das Menü „Entwickleroptionen“ vorübergehend einschränken, indem das Menü visuell ausgeblendet oder deaktiviert wird, um Ablenkungen in Situationen zu vermeiden, in denen die Sicherheit des Nutzers von Belang ist.
7. Hardwarekompatibilität
Wenn ein Gerät eine bestimmte Hardwarekomponente mit einer entsprechenden API für Drittentwickler hat:
- [C-0-1] Die Geräteimplementierung MÜSSEN diese API wie in der Android SDK-Dokumentation beschrieben implementieren.
Wenn eine API im SDK mit einer Hardwarekomponente interagiert, die als optional ausgewiesen wird, und die Geräteimplementierung diese Komponente nicht besitzt, gilt Folgendes:
- [C-0-2] Vollständige Klassendefinitionen (wie im SDK dokumentiert) für die Komponenten-APIs MÜSSEN weiterhin angezeigt werden.
- [C-0-3] Das Verhalten der API MÜSSEN in angemessener Weise managementfrei implementiert werden.
- [C-0-4] API-Methoden MÜSSEN NULL-Werte zurückgeben, sofern dies gemäß der SDK-Dokumentation zulässig ist.
- [C-0-5] API-Methoden MÜSSEN No-Op-Implementierungen von Klassen zurückgeben, bei denen Nullwerte gemäß der SDK-Dokumentation nicht zulässig sind.
- [C-0-6] API-Methoden DÜRFEN KEINE Ausnahmen auslösen, die nicht in der SDK-Dokumentation dokumentiert sind.
- [C-0-7] Geräteimplementierungen MÜSSEN konsistente Informationen zur Hardwarekonfiguration über die Methoden
getSystemAvailableFeatures()
undhasSystemFeature(String)
in der Klasse android.content.pm.PackageManager für denselben Build-Fingerabdruck melden.
Ein typisches Beispiel für ein Szenario, in dem diese Anforderungen gelten, ist die Telefonie-API: Auch auf anderen Geräten MÜSSEN diese APIs als angemessener managementfreier implementiert werden.
7.1. Display und Grafik
Android bietet Funktionen, mit denen App-Assets und UI-Layouts automatisch an das Gerät angepasst werden, um sicherzustellen, dass Apps von Drittanbietern mit verschiedenen Hardwarekonfigurationen einwandfrei ausgeführt werden können. Auf den mit Android kompatiblen Displays, auf denen alle Android-kompatiblen Apps von Drittanbietern ausgeführt werden können, MÜSSEN die APIs und Verhaltensweisen der Geräte wie in diesem Abschnitt beschrieben ordnungsgemäß implementiert werden.
Die Einheiten, auf die in den Anforderungen in diesem Abschnitt verwiesen wird, sind wie folgt definiert:
- physische diagonale Größe. Der Abstand in Zoll zwischen zwei gegenüberliegenden Ecken des beleuchteten Teils des Displays.
- DPI (Punkte pro Zoll) Die Anzahl der Pixel, die von einer linearen horizontalen oder vertikalen Spanne von 1 Zoll eingeschlossen werden. Bei den angegebenen dpi-Werten MÜSSEN sowohl horizontale als auch vertikale dpi-Werte in diesen Bereich fallen.
- Seitenverhältnis. Das Verhältnis der Pixel der längeren Seite zur kürzeren Seite. Ein Display mit 480 × 854 Pixeln wäre beispielsweise 854/480 = 1, 779, also ungefähr „16:9“.
- dichteunabhängige Pixel (dp): Die virtuelle Pixeleinheit, normalisiert auf einen Bildschirm mit 160 dpi, berechnet wie folgt: Pixel = dps × (Dichte/160).
7.1.1 Bildschirmkonfiguration
7.1.1.1 Displaygröße und -form
Das Android-UI-Framework unterstützt eine Vielzahl verschiedener logischer Bildschirmlayoutgrößen und ermöglicht es Apps, die Bildschirmlayoutgröße der aktuellen Konfiguration über Configuration.screenLayout
mit SCREENLAYOUT_SIZE_MASK
und Configuration.smallestScreenWidthDp
abzufragen.
Geräteimplementierungen:
-
[C-0-1] MÜSSEN die korrekte Layoutgröße für
Configuration.screenLayout
angeben, wie in der Android SDK-Dokumentation definiert. Insbesondere MÜSSEN bei Geräteimplementierungen die korrekten dp-Bildschirmabmessungen (logisch dichteunabhängige Pixel) wie folgt gemeldet werden:- Geräte, bei denen
Configuration.uiMode
auf einen anderen Wert als UI_MODE_TYPE_WATCH festgelegt ist und einesmall
-Größe fürConfiguration.screenLayout
gemeldet wird, MÜSSEN mindestens 426 dp x 320 dp haben. - Geräte, die eine
normal
-Größe fürConfiguration.screenLayout
melden, MÜSSEN mindestens 480 dp × 320 dp haben. - Geräte, die eine
large
-Größe fürConfiguration.screenLayout
melden, MÜSSEN mindestens 640 dp × 480 dp haben. - Geräte, die eine
xlarge
-Größe fürConfiguration.screenLayout
melden, MÜSSEN mindestens 960 dp × 720 dp haben.
- Geräte, bei denen
-
[C-0-2] MÜSSEN die Bewerbungen korrekt berücksichtigen Unterstützung für Bildschirmgrößen über das Attribut <
supports-screens
> in der Datei „AndroidManifest.xml“, wie in der Android SDK-Dokumentation beschrieben. -
KÖNNEN die Android-kompatiblen Bildschirme mit abgerundeten Ecken angezeigt werden.
Wenn Geräteimplementierungen UI_MODE_TYPE_NORMAL
unterstützen und Android-kompatible Bildschirme mit abgerundeten Ecken enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN sicherstellen, dass der Radius der abgerundeten Ecken kleiner oder gleich 38 dp ist.
- SOLLTEN die Nutzer die Möglichkeit haben, in den Anzeigemodus mit rechteckigen Ecken zu wechseln.
7.1.1.2 Bildschirmseitenverhältnis
Das Seitenverhältnis des physischen Bildschirms bei Android-kompatiblen Bildschirmen ist nicht eingeschränkt. Das Seitenverhältnis der logischen Anzeige, auf der Drittanbieter-Apps gerendert werden, muss jedoch die folgenden Anforderungen erfüllen. Es muss sich aus den Werten für Höhe und Breite ableiten lassen, die über die view.Display
APIs und Configuration APIs gemeldet werden:
-
[C-0-1] Bei Geräteimplementierungen, bei denen
Configuration.uiMode
aufUI_MODE_TYPE_NORMAL
festgelegt ist, MUSS das Seitenverhältnis kleiner oder gleich 1,86 (ungefähr 16:9) sein, es sei denn, die App erfüllt eine der folgenden Bedingungen:- Die App hat angegeben, dass sie über den Metadatenwert
android.max_aspect
ein größeres Bildschirmseitenverhältnis unterstützt. - Die App deklariert über das Attribut android:resizeableActivity, dass ihre Größe angepasst werden kann.
- Die App ist auf API-Level 24 oder höher ausgerichtet und gibt keine
android:maxAspectRatio
an, die das zulässige Seitenverhältnis einschränken würde.
- Die App hat angegeben, dass sie über den Metadatenwert
-
[C-0-2] Geräteimplementierungen, bei denen
Configuration.uiMode
aufUI_MODE_TYPE_NORMAL
gesetzt ist, MÜSSEN ein Seitenverhältnis von mindestens 1,3333 (4:3) haben, es sei denn, die App lässt sich verbreitern, indem eine der folgenden Bedingungen erfüllt ist:- Die App deklariert über das Attribut android:resizeableActivity, dass ihre Größe angepasst werden kann.
- In der App wird ein
android:minAspectRatio
deklariert, das das zulässige Seitenverhältnis einschränken würde.
-
[C-0-3] Bei Geräteimplementierungen, bei denen
Configuration.uiMode
aufUI_MODE_TYPE_WATCH
festgelegt ist, MUSS das Seitenverhältnis auf 1,0 (1:1) eingestellt sein.
7.1.1.3 Bildschirmdichte
Das Android-UI-Framework definiert eine Reihe logischer Standarddichten, um Anwendungsentwicklern die Ausrichtung auf Anwendungsressourcen zu ermöglichen.
-
[C-0-1] Bei Geräteimplementierungen MÜSSEN standardmäßig nur eine der Android-Framework-Dichten gemeldet werden, die in
DisplayMetrics
über dieDENSITY_DEVICE_STABLE
API aufgeführt sind. Dieser Wert DARF NICHT geändert werden. Allerdings KANN das Gerät eine andere beliebige Dichte entsprechend den vom Nutzer vorgenommenen Änderungen an der Anzeigekonfiguration (z. B. Anzeigegröße) melden, die nach dem ersten Start festgelegt wurden. -
Bei Geräteimplementierungen SOLLTE die standardmäßige Android-Framework-Dichte definiert werden, die numerisch der physischen Dichte des Bildschirms am nächsten kommt, es sei denn, diese logische Dichte führt dazu, dass die gemeldete Bildschirmgröße unter das unterstützte Minimum fällt. Wenn die standardmäßige Android-Framework-Dichte, die numerisch der physischen Dichte am nächsten kommt, zu einer Bildschirmgröße führt, die kleiner als die kleinste unterstützte kompatible Bildschirmgröße (320 dp) ist, SOLLTEN die Geräteimplementierungen die nächstniedrigere Standard-Android-Framework-Dichte melden.
Wenn es eine Möglichkeit gibt, die Anzeigegröße des Geräts zu ändern:
- [C-1-1] Die Displaygröße DARF NICHT größer als das 1,5-Fache der nativen Dichte skaliert werden oder eine effektive Mindestbildschirmgröße von weniger als 320 dp haben (entspricht dem Ressourcen-Qualifier sw320dp), je nachdem, was zuerst eintritt.
- [C-1-2] Die Anzeigegröße DARF NICHT kleiner als das 0,85-Fache der nativen Dichte skaliert werden.
- Um eine gute Nutzerfreundlichkeit und einheitliche Schriftgrößen zu gewährleisten, wird empfohlen, die folgende Skalierung der nativen Displayoptionen bereitzustellen (unter Einhaltung der oben genannten Beschränkungen).
- Klein: 0,85x
- Standardeinstellung: 1x (Skalierung für native Displayanzeige)
- Groß: 1,15x
- Größer: 1,3x
- Größte 1,45x
7.1.2 Messwerte anzeigen
Wenn auf Geräten die Android-kompatiblen Bildschirme oder die Videoausgabe auf den Android-kompatiblen Bildschirmen berücksichtigt werden, gilt Folgendes:
- [C-1-1] MÜSSEN korrekte Werte für alle Android-kompatiblen Displaymesswerte melden, die in der
android.util.DisplayMetrics
API definiert sind.
Wenn Geräteimplementierungen keinen eingebetteten Bildschirm oder keine Videoausgabe enthalten, gilt Folgendes:
- [C-2-1] MÜSSEN die korrekten Werte des mit Android kompatiblen Displays gemäß der Definition in der
android.util.DisplayMetrics
API für den emulierten Standardwert „view.Display
“ melden.
7.1.3 Displayausrichtung
Geräteimplementierungen:
- [C-0-1] MÜSSEN angeben, welche Bildschirmausrichtungen sie unterstützen (
android.hardware.screen.portrait
und/oderandroid.hardware.screen.landscape
) und mindestens eine unterstützte Ausrichtung angeben. Beispielsweise sollte ein Gerät mit einer festen Ausrichtung im Querformat, wie ein Fernseher oder Laptop, nurandroid.hardware.screen.landscape
melden. - [C-0-2] MÜSSEN bei Abfragen über
android.content.res.Configuration.orientation
,android.view.Display.getOrientation()
oder andere APIs den richtigen Wert für die aktuelle Ausrichtung des Geräts melden.
Wenn Geräteimplementierungen beide Bildschirmausrichtungen unterstützen, gilt Folgendes:
- [C-1-1] MUSS die dynamische Ausrichtung von Apps im Hoch- oder Querformat unterstützen. Das heißt, das Gerät MÜSSEN die Anforderungen der App bezüglich einer bestimmten Bildschirmausrichtung berücksichtigen.
- [C-1-2] DÜRFEN die gemeldete Bildschirmgröße oder -dichte beim Ändern der Ausrichtung NICHT ändern.
- Sie können als Standardeinstellung das Hoch- oder Querformat auswählen.
7.1.4 2D- und 3D-Grafikbeschleunigung
7.1.4.1 OpenGL ES
Geräteimplementierungen:
- [C-0-1] MÜSSEN die unterstützten OpenGL ES-Versionen (1.1, 2.0, 3.0, 3.1, 3.2) über die verwalteten APIs (z. B. über die Methode
GLES10.getString()
) und die nativen APIs korrekt identifizieren. - [C-0-2] MÜSSEN die Unterstützung für alle entsprechenden verwalteten APIs und nativen APIs für jede OpenGL ES-Version, die sie unterstützen, enthalten.
Wenn Geräteimplementierungen eine Bildschirm- oder Videoausgabe beinhalten, gilt Folgendes:
- [C-1-1] MUSS sowohl OpenGL ES 1.1 als auch OpenGL 2.0 unterstützen, wie in der Android SDK-Dokumentation beschrieben.
- [C-SR] Wir empfehlen dringend, OpenGL ES 3.1 zu unterstützen.
- SOLLTEN OpenGL ES 3.2 unterstützen.
Wenn Geräteimplementierungen eine der OpenGL ES-Versionen unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN über die von OpenGL ES verwalteten APIs und nativen APIs alle anderen von ihnen implementierten OpenGL ES-Erweiterungen melden. Umgekehrt DARF NICHT Erweiterungsstrings gemeldet werden, die von ihnen nicht unterstützt werden.
- [C-2-2] MUSS die Erweiterungen
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
,EGL_ANDROID_recordable
undEGL_ANDROID_GLES_layers
unterstützen. - [C-SR] wird dringend empfohlen, die Erweiterungen
EGL_KHR_partial_update
undOES_EGL_image_external
zu unterstützen. - SOLLTEN mithilfe der Methode
getString()
alle unterstützten Texturkomprimierungsformate, die in der Regel anbieterspezifisch sind, korrekt melden.
Wenn in Geräteimplementierungen OpenGL ES 3.0, 3.1 oder 3.2 unterstützt werden, gilt Folgendes:
- [C-3-1] MÜSSEN zusätzlich zu den OpenGL ES 2.0-Funktionssymbolen in der libGLESv2.so-Bibliothek die entsprechenden Funktionssymbole für diese Version exportieren.
- [SR] wird dringend empfohlen, die Erweiterung
OES_EGL_image_external_essl3
zu unterstützen.
Wenn Geräteimplementierungen OpenGL ES 3.2 unterstützen, gilt Folgendes:
- [C-4-1] MUSS das gesamte OpenGL ES Android Extension Pack unterstützen.
Wenn Geräteimplementierungen das gesamte Android-Erweiterungspaket von OpenGL ES unterstützen, gilt Folgendes:
- [C-5-1] MUSS die Unterstützung mit dem Funktions-Flag „
android.hardware.opengles.aep
“ identifizieren.
Wenn Geräteimplementierungen die Erweiterung EGL_KHR_mutable_render_buffer
unterstützen, geschieht Folgendes:
- [C-6-1] MUSS auch die Erweiterung
EGL_ANDROID_front_buffer_auto_refresh
unterstützen.
7.1.4.2 Vulkan
Android unterstützt Vulkan, eine plattformübergreifende API mit geringem Aufwand für leistungsstarke 3D-Grafiken.
Wenn Geräteimplementierungen OpenGL ES 3.1 unterstützen, gilt Folgendes:
- [SR] WIRD UNBEDINGT EMPFOHLEN, Support für Vulkan 1.1 aufzunehmen.
Wenn Geräteimplementierungen eine Bildschirm- oder Videoausgabe beinhalten, gilt Folgendes:
- SOLLTEN Support für Vulkan 1.1 beinhalten.
Wenn Geräteimplementierungen Vulkan 1.0 unterstützen, gilt Folgendes:
- [C-1-1] MUSS den richtigen Ganzzahlwert mit den Funktions-Flags
android.hardware.vulkan.level
undandroid.hardware.vulkan.version
melden. - [C-1-2] MUSS aufgezählt werden, mindestens ein
VkPhysicalDevice
für die Vulkan-APIvkEnumeratePhysicalDevices()
. - [C-1-3] MÜSSEN die Vulkan 1.0-APIs für jedes aufgeführte
VkPhysicalDevice
vollständig implementieren. - [C-1-4] MÜSSEN Ebenen in nativen Bibliotheken mit dem Namen
libVkLayer*.so
im Bibliotheksverzeichnis des Anwendungspakets über die nativen Vulkan-APIsvkEnumerateInstanceLayerProperties()
undvkEnumerateDeviceLayerProperties()
aufzählen . - [C-1-5] DARF KEINE Ebenen aufzählen, die von Bibliotheken außerhalb des Anwendungspakets bereitgestellt werden, und keine anderen Möglichkeiten zum Nachverfolgen oder Abfangen der Vulkan API bieten, es sei denn, für die Anwendung ist das Attribut
android:debuggable
auftrue
festgelegt. - [C-1-6] MÜSSEN alle Erweiterungsstrings melden, die von ihnen über die nativen Vulkan-APIs unterstützt werden. Umgekehrt DÜRFEN SIE KEINE Erweiterungsstrings melden, die von ihnen nicht korrekt unterstützt werden.
- [C-1-7] MÜSSEN die Erweiterungen VK_KHR_surface, VK_KHR_android_surface, VK_KHR_swapchain und VK_KHR_incremental_present unterstützen.
- [C-SR] wird dringend empfohlen, die Erweiterungen VK_KHR_driver_properties und VK_GOOGLE_display_timing zu unterstützen.
Wenn Geräteimplementierungen Vulkan 1.0 nicht unterstützen, passiert Folgendes:
- [C-2-1] DÜRFEN KEINE Markierungen von Vulkan-Elementen (z.B.
android.hardware.vulkan.level
,android.hardware.vulkan.version
) deklarieren. - [C-2-2] DÜRFEN KEINE
VkPhysicalDevice
für dievkEnumeratePhysicalDevices()
der nativen Vulkan-API aufzählen.
Wenn in Ihren Geräteimplementierungen Vulkan 1.1 unterstützt wird und eine der Vulkan-Feature-Flags deklariert ist, gilt Folgendes:
- [C-3-1] MÜSSEN die Unterstützung für die externe Semaphore und Handle-Typen
SYNC_FD
sowie die ErweiterungVK_ANDROID_external_memory_android_hardware_buffer
anbieten.
7.1.4.3 RenderScript
- [C-0-1] Geräteimplementierungen MÜSSEN Android RenderScript unterstützen, wie in der Android SDK-Dokumentation beschrieben.
7.1.4.4 Beschleunigung der 2D-Grafik
In Android gibt es einen Mechanismus, mit dem Apps deklarieren können, dass sie die Hardwarebeschleunigung für 2D-Grafiken auf App-, Aktivitäts-, Fenster- oder Ansichtsebene aktivieren möchten. Dazu wird das Manifest-Tag android:hardwareAccelerated oder direkte API-Aufrufe verwendet.
Geräteimplementierungen:
- [C-0-1] MÜSSEN die Hardwarebeschleunigung standardmäßig aktivieren und MÜSSEN die Hardwarebeschleunigung deaktivieren, wenn der Entwickler dies anfordert. Legen Sie dazu android:hardwareAccelerated="false" fest oder deaktivieren Sie die Hardwarebeschleunigung direkt über die Android View APIs.
- [C-0-2] MUSS ein Verhalten aufweisen, das der Android SDK-Dokumentation zur Hardwarebeschleunigung entspricht.
Android enthält ein TextureView-Objekt, mit dem Entwickler hardwarebeschleunigte OpenGL ES-Texturen direkt als Rendering-Ziele in einer UI-Hierarchie integrieren können.
Geräteimplementierungen:
- [C-0-3] MÜSSEN die TextureView API unterstützen und ein einheitliches Verhalten mit der vorgelagerten Android-Implementierung zeigen.
7.1.4.5 Breitwinkel-Displays
Wenn Geräteimplementierungen Unterstützung für Breitbilddisplays über Configuration.isScreenWideColorGamut()
versprechen , ist Folgendes zu beachten:
- [C-1-1] MUSS ein farbkalibriertes Display haben.
- [C-1-2] MÜSSEN über ein Display verfügen, dessen Farbumfang den sRGB-Farbraum im CIE 1931 xyY-Raum vollständig abdeckt.
- [C-1-3] MÜSSEN über ein Display verfügen, dessen Gamut eine Fläche von mindestens 90% des DCI-P3-Werts in CIE 1931 xyY ausmacht.
- [C-1-4] MUSS OpenGL ES 3.1 oder 3.2 unterstützen und ordnungsgemäß melden.
- [C-1-5] MÜSSEN für Support für die Erweiterungen
EGL_KHR_no_config_context
,EGL_EXT_pixel_format_float
,EGL_KHR_gl_colorspace
,EGL_EXT_gl_colorspace_scrgb
,EGL_EXT_gl_colorspace_scrgb_linear
,EGL_EXT_gl_colorspace_display_p3
,EGL_EXT_gl_colorspace_display_p3_linear
undEGL_EXT_gl_colorspace_display_p3_passthrough
werben. - [C-SR] wird dringend empfohlen,
GL_EXT_sRGB
zu unterstützen.
Umgekehrt gilt: Wenn Geräteimplementierungen keine Wide-Gamut-Displays unterstützen, kann das folgende Gründe haben:
- [C-2-1] SOLLTEN mindestens 100% des sRGB-Bereichs im xyY-Bereich von CIE 1931 abdecken, wobei die Bildschirmfarbpalette nicht definiert ist.
7.1.5 Legacy-App-Kompatibilitätsmodus
Android gibt einen „Kompatibilitätsmodus“ an, in dem das Framework in einem „normalen“ Modus arbeitet. Bildschirmgröße äquivalent (320 dp Breite) für ältere Apps, die nicht für ältere Android-Versionen entwickelt wurden, die in der Zeit vor der Unabhängigkeit von der Bildschirmgröße standen.
7.1.6 Bildschirmtechnologie
Die Android-Plattform umfasst APIs, mit denen Anwendungen komplexe Grafiken auf einem Android-kompatiblen Bildschirm rendern können. Geräte MÜSSEN gemäß der Definition des Android SDK alle diese APIs unterstützen, sofern dies in diesem Dokument nicht ausdrücklich zulässig ist.
Alle mit Android kompatiblen Displays einer Geräteimplementierung:
- [C-0-1] MUSS 16-Bit-Farbgrafiken unterstützen können.
- SOLLTEN Bildschirme unterstützt werden, die 24-Bit-Farbgrafiken unterstützen.
- [C-0-2] MUSS Animationen rendern können.
- [C-0-3] MUSS ein Pixelseitenverhältnis (PAR) zwischen 0,9 und 1,15 haben. Das heißt, das Pixel-Seitenverhältnis MUSS nahe dem Quadratformat (1,0) mit einer Toleranz von 10 bis 15% liegen.
7.1.7 Sekundäre Displays
Android unterstützt sekundäre Android-kompatible Bildschirme, um Funktionen zum Teilen von Medien und Entwickler-APIs für den Zugriff auf externe Bildschirme zu aktivieren.
Wenn Geräteimplementierungen einen externen Bildschirm über eine kabelgebundene, drahtlose oder einen eingebetteten zusätzlichen Bildschirm unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN den
DisplayManager
-Systemdienst und die API wie in der Android SDK-Dokumentation beschrieben implementieren.
7.2. Eingabegeräte
Geräteimplementierungen:
- [C-0-1] MÜSSEN einen Eingabemechanismus wie einen Touchscreen oder eine Navigation ohne Touchscreen enthalten, um zwischen den UI-Elementen zu navigieren.
7.2.1 Tastatur
Wenn Geräteimplementierungen IME-Anwendungen (Input Method Editor) von Drittanbietern unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN das Funktions-Flag
android.software.input_methods
deklarieren. - [C-1-2] MUSS
Input Management Framework
vollständig implementieren - [C-1-3] MUSS eine vorinstallierte Softwaretastatur haben.
Geräteimplementierungen: * [C-0-1] DÜRFEN KEINE Hardwaretastatur enthalten, die nicht einem der in android.content.res.Configuration.Keyboard angegebenen Formate (QWERTY oder 12-Tasten) entspricht. * SOLLTEN zusätzliche Implementierungen von Softtastaturen beinhalten. * KANN eine Hardware-Tastatur enthalten.
7.2.2 Berührungslose Navigation
Android unterstützt das Steuerkreuz, den Trackball und das Rad als Mechanismen für die berührungslose Navigation.
Geräteimplementierungen:
- [C-0-1] MÜSSEN den richtigen Wert für android.content.res.Configuration.navigation melden.
Wenn Geräteimplementierungen keine berührungslose Navigation haben, kann das folgende Gründe haben:
- [C-1-1] MÜSSEN eine geeignete alternative Benutzeroberfläche zum Auswählen und Bearbeiten von Text bereitstellen, die mit Input Management Engines kompatibel ist. Die vorgelagerte Open-Source-Implementierung von Android enthält einen Auswahlmechanismus, der sich für Geräte eignet, die keine berührungslosen Navigationseingaben enthalten.
7.2.3 Navigationstasten
Die Funktionen Start, Letzte und Zurück, die in der Regel über eine Interaktion mit einer dedizierten physischen Taste oder einem bestimmten Teil des Touchscreens bereitgestellt werden, sind für das Navigationsparadigma von Android und daher für Geräteimplementierungen unerlässlich:
- [C-0-1] MÜSSEN ein Nutzerangebot zum Starten installierter Apps mit einer Aktivität bieten, bei der
<intent-filter>
bei Implementierungen von Fernsehgeräten mitACTION=MAIN
undCATEGORY=LAUNCHER
oderCATEGORY=LEANBACK_LAUNCHER
festgelegt ist. Die Home-Funktion SOLLTE der Mechanismus für dieses Nutzerangebot sein. - SOLLTEN Schaltflächen für die Funktionen Recents und Zurück bereitstellen.
Wenn die Funktionen „Startbildschirm“, „Letzte“ und „Zurück“ verfügbar sind, geschieht Folgendes:
- [C-1-1] MÜSSEN mit einer einzigen Aktion (z.B. Tippen, Doppelklick oder Touch-Geste) aufgerufen werden, wenn eine davon zugänglich ist.
- [C-1-2] MÜSSEN deutlich darauf hinweisen, welche Aktion die jeweilige Funktion auslösen würde. Beispiele für solche Hinweise sind ein sichtbares Symbol auf der Schaltfläche, ein Softwaresymbol in der Navigationsleiste des Bildschirms oder die geführte Demo-Schritt-für-Schritt-Anleitung während der Out-of-Box-Einrichtung.
Geräteimplementierungen:
- [SR] wird dringend empfohlen, den Eingabemechanismus für die Menüfunktion nicht bereitzustellen, da diese Funktion seit Android 4.0 zugunsten der Aktionsleiste eingestellt wurde.
Wenn Geräteimplementierungen die Menüfunktion bieten, geschieht Folgendes:
- [C-2-1] MÜSSEN die Dreipunkt-Menüschaltfläche für Aktionen anzeigen, wenn das Pop-up-Fenster für das Aktionsmenü nicht leer und die Aktionsleiste sichtbar ist.
- [C-2-2] DÜRFEN die Position des Aktions-Überlauf-Pop-ups, das angezeigt wird, indem Sie die Überlaufschaltfläche in der Aktionsleiste auswählen, NICHT ändern. Es KANN jedoch an einer geänderten Position auf dem Bildschirm gerendert werden, wenn es durch Auswahl der Menüfunktion angezeigt wird.
Wenn Geräteimplementierungen die Menüfunktion nicht enthalten, gilt aus Gründen der Abwärtskompatibilität Folgendes: * [C-SR] wird dringend empfohlen, die Menüfunktion für Apps verfügbar zu machen, wenn die targetSdkVersion
-Version kleiner als 10 ist, entweder durch eine physische Taste, eine Softwaretaste oder Touch-Gesten. Diese Menüfunktion sollte zugänglich sein, sofern sie nicht zusammen mit anderen Navigationsfunktionen ausgeblendet wird.
Wenn Geräteimplementierungen die Unterstützungsfunktion bieten, ist Folgendes möglich:
- [C-4-1] MÜSSEN die Assistentenfunktion mit einer einzigen Aktion (z.B. Tippen, Doppelklick oder Geste) zugänglich machen, wenn andere Navigationstasten verfügbar sind.
- [SR] WIRD UNBEDINGT EMPFOHLEN, die Funktion für langes Drücken auf die Startbildschirmtaste als vorgesehene Interaktion zu verwenden.
Wenn bei Geräteimplementierungen die Navigationstasten nur an einem bestimmten Teil des Bildschirms angezeigt werden, geschieht Folgendes:
- [C-5-1] Die Navigationstasten MÜSSEN einen deutlich erkennbaren Teil des Bildschirms verwenden, der für Apps nicht sichtbar ist, und dürfen den für Apps verfügbaren Teil des Bildschirms NICHT verdecken oder anderweitig beeinträchtigen.
- [C-5-2] MUSS einen Teil des Bildschirms für Anwendungen verfügbar machen, die die in Abschnitt 7.1.1 definierten Anforderungen erfüllen.
- [C-5-3] MÜSSEN die von der App über die API-Methode
View.setSystemUiVisibility()
festgelegten Flags berücksichtigen, sodass dieser bestimmte Teil des Bildschirms (die Navigationsleiste) ordnungsgemäß verborgen ist, wie im SDK dokumentiert.
Wenn die Navigationsfunktion als bewegungsbasierte Aktion auf dem Bildschirm bereitgestellt wird:
- [C-6-1]
WindowInsets#getMandatorySystemGestureInsets()
DARF nur verwendet werden, um den Bereich zur Gestenerkennung für das Zuhause zu melden. - [C-6-2] Gesten, die innerhalb eines Ausschlussrechtecks beginnen, das von der Vordergrundanwendung über
View#setSystemGestureExclusionRects()
bereitgestellt wird, aber außerhalb vonWindowInsets#getMandatorySystemGestureInsets()
, dürfen NICHT von der Navigationsfunktion abgefangen werden, solange das Ausschlussrechteck innerhalb des maximalen Ausschlussbereichs zulässig ist, wie in der Dokumentation fürView#setSystemGestureExclusionRects()
angegeben. - [C-6-3] MÜSSEN an die App im Vordergrund ein
MotionEvent.ACTION_CANCEL
-Ereignis senden, sobald Berührungen für eine Systemgeste abgefangen werden, wenn zuvor einMotionEvent.ACTION_DOWN
-Ereignis an die App im Vordergrund gesendet wurde. - [C-6-4] MÜSSEN Nutzern die Möglichkeit bieten, zu einer schaltflächenbasierten Navigation auf dem Bildschirm zu wechseln (z. B. in den Einstellungen).
- SOLLTEN Sie zur Startseiten-Funktion wechseln, indem Sie vom unteren Rand der aktuellen Bildschirmausrichtung nach oben wischen.
- SOLLTE die Funktion „Letzte Apps“ durch Wischen nach oben und Halten vor dem Loslassen von der Position der Touch-Geste für „Startbildschirm“ aus bereitstellen.
- Gesten, die in
WindowInsets#getMandatorySystemGestureInsets()
beginnen, SOLLTEN NICHT von Ausschlussabfragen beeinflusst werden, die von der Anwendung im Vordergrund überView#setSystemGestureExclusionRects()
bereitgestellt werden.
Wenn am linken und rechten Rand der aktuellen Bildschirmausrichtung eine Navigationsfunktion verfügbar ist:
- [C-7-1] Die Navigationsfunktion MUSS "Zurück" sein und durch Wischen vom linken und rechten Rand der aktuellen Bildschirmausrichtung bereitgestellt werden.
- [C-7-2] Wenn sich am linken oder rechten Rand benutzerdefinierte wischbare Steuerfelder befinden, MÜSSEN sie im oberen Drittel des Bildschirms mit einem klaren, dauerhaften Hinweis platziert werden, dass durch Ziehen die oben genannten Steuerfelder aufgerufen werden, d. h. nicht „Zurück“. Ein Steuerfeld darf von einem Nutzer so konfiguriert werden, dass es unterhalb der oberen 1/3 der Bildschirmränder landet. Das Bedienfeld DARF jedoch NICHT länger als ein Drittel der Kante(n) sein.
- [C-7-3] Wenn für die App im Vordergrund entweder das Flag
View.SYSTEM_UI_FLAG_IMMERSIVE
oderView.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
festgelegt ist, MUSS sich das Wischen von den Rändern wie in AOSP implementiert verhalten, wie im SDK dokumentiert. - [C-7-4] Wenn für die App im Vordergrund entweder das Flag
View.SYSTEM_UI_FLAG_IMMERSIVE
oderView.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
festgelegt ist, müssen benutzerdefinierte wischbare Systembereiche ausgeblendet werden, bis der Nutzer die Systemleisten (d. h. Navigations- und Statusleiste) einblendet, wie sie in AOSP implementiert sind.
7.2.4 Touchscreeneingabe
Android unterstützt eine Vielzahl von Zeigereingabesystemen wie Touchscreens, Touchpads und gefälschte Eingabegeräte. Implementierungen von Touchscreen-Geräten sind mit einem Display so verknüpft, dass der Nutzer den Eindruck hat, Elemente auf dem Bildschirm direkt zu manipulieren. Da der Nutzer den Bildschirm direkt berührt, benötigt das System keine zusätzlichen Angebote, um anzuzeigen, welche Objekte manipuliert werden.
Geräteimplementierungen:
- SOLLTEN über ein Zeigereingabesystem verfügen (z. B. Maus- oder Toucheingabe).
- SOLLTEN vollständig unabhängig nachverfolgte Zeiger unterstützen.
Wenn Geräteimplementierungen einen Touchscreen umfassen (Single-Touch oder besser), gilt Folgendes:
- [C-1-1] MÜSSEN
TOUCHSCREEN_FINGER
für das API-FeldConfiguration.touchscreen
melden. - [C-1-2] MÜSSEN die Funktions-Flags
android.hardware.touchscreen
undandroid.hardware.faketouch
melden.
Wenn Geräte einen Touchscreen haben, mit dem mehrere Berührungen erfasst werden können, gilt Folgendes:
- [C-2-1] MÜSSEN die entsprechenden Funktions-Flags
android.hardware.touchscreen.multitouch
,android.hardware.touchscreen.multitouch.distinct
,android.hardware.touchscreen.multitouch.jazzhand
melden, die dem Typ des Touchscreens des Geräts entsprechen.
Wenn Geräteimplementierungen keinen Touchscreen haben (und nur ein Zeigergerät verwenden) und die Anforderungen in Abschnitt 7.2.5 erfüllen, gilt Folgendes:
- [C-3-1] DÜRFEN KEINE Funktions-Flags melden, die mit
android.hardware.touchscreen
beginnen, und MÜSSEN nurandroid.hardware.faketouch
melden.
7.2.5 Eingabe von gefälschten Berührungen
Die gefälschte Touch-Oberfläche bietet ein Eingabesystem für den Nutzer, das einen Teil der Touchscreen-Funktionen darstellt. So kann beispielsweise eine Maus oder eine Fernbedienung, die einen Bildschirmcursor ansteuert, eine Berührung annähern, aber der Nutzer muss zuerst die Maus oder den Fokus fokussieren und dann klicken. Zahlreiche Eingabegeräte wie Maus, Touchpad, Gyroskop, Gyroskop, Joystick und Multi-Touch-Touchpad können gefälschte Touch-Interaktionen unterstützen. Android enthält die Funktion „android.hardware.faketouch“, die einem High-Fidelity-Eingabegerät ohne Touchscreen entspricht, z. B. einer Maus oder einem Touchpad, das berührungsbasierte Eingaben angemessen emulieren kann (einschließlich der grundlegenden Unterstützung von Touch-Gesten) und darauf hinweist, dass das Gerät eine emulierte Teilmenge von Touchscreen-Funktionen unterstützt.
Wenn Geräteimplementierungen keinen Touchscreen haben, sondern ein anderes Zeigereingabesystem, das verfügbar gemacht werden soll, geschieht Folgendes:
- SOLLTEN die Unterstützung für das Funktions-Flag
android.hardware.faketouch
deklarieren.
Wenn in Geräteimplementierungen die Unterstützung von android.hardware.faketouch
deklariert wird, gilt Folgendes:
- [C-1-1] MÜSSEN die absoluten X- und Y-Bildschirmpositionen der Zeigerposition melden und einen visuellen Zeiger auf dem Bildschirm anzeigen.
- [C-1-2] MÜSSEN ein Touch-Ereignis mit dem Aktionscode melden, der die Statusänderung angibt, die auf dem nach unten oder oben auf dem Bildschirm laufenden Zeiger auftritt.
- [C-1-3] MUSS den Zeiger nach unten und oben auf einem Objekt auf dem Bildschirm unterstützen, damit Nutzer das Tippen auf ein Objekt auf dem Bildschirm emulieren können.
- [C-1-4] MÜSSEN innerhalb eines bestimmten Zeitraums an derselben Stelle auf dem Bildschirm eines Objekts an derselben Position erscheinen wie nach unten, nach oben und nach unten und dann nach oben, sodass Nutzer doppeltippen auf ein Objekt auf dem Bildschirm emulieren können.
- [C-1-5] MUSS den Zeiger nach unten an einem beliebigen Punkt auf dem Bildschirm unterstützen, den Zeiger zu einem beliebigen anderen beliebigen Punkt auf dem Bildschirm, gefolgt von einem Zeiger nach oben, damit Nutzer eine Touch-Ziehbewegung emulieren können.
- [C-1-6] MÜSSEN Nutzer nach unten zeigen, damit sie das Objekt schnell an eine andere Position auf dem Bildschirm und dann nach oben bewegen können, damit Nutzer ein Objekt auf dem Bildschirm ziehen können.
- [C-1-7] MÜSSEN
TOUCHSCREEN_NOTOUCH
für das API-FeldConfiguration.touchscreen
melden.
Wenn in Geräteimplementierungen die Unterstützung von android.hardware.faketouch.multitouch.distinct
deklariert wird, gilt Folgendes:
- [C-2-1] MÜSSEN die Unterstützung für
android.hardware.faketouch
erklären. - [C-2-2] MÜSSEN das separate Tracking von zwei oder mehr unabhängigen Zeigereingaben unterstützen.
Wenn in Geräteimplementierungen die Unterstützung von android.hardware.faketouch.multitouch.jazzhand
deklariert wird, gilt Folgendes:
- [C-3-1] MÜSSEN die Unterstützung für
android.hardware.faketouch
erklären. - [C-3-2] MUSS das separate Tracking von 5 oder mehr Zeigereingaben vollständig unabhängig unterstützen, d. h. das Erfassen einer Hand der Finger.
7.2.6 Unterstützung für Gamecontroller
7.2.6.1 Schaltflächenzuordnungen
Wenn Geräteimplementierungen das Funktions-Flag android.hardware.gamepad
deklarieren, geschieht Folgendes:
- [C-1-1] MUSS einen Controller oder ein Schiff mit einem separaten Controller im Lieferumfang enthalten sein, damit alle in den nachfolgenden Tabellen aufgeführten Ereignisse eingegeben werden können.
- [C-1-2] MUSS HID-Ereignisse den zugehörigen Android-
view.InputEvent
-Konstanten zuordnen können, wie in den folgenden Tabellen aufgeführt. Die vorgelagerte Android-Implementierung umfasst eine Implementierung für Gamecontroller, die diese Anforderung erfüllen.
Schaltfläche | HID-Nutzung2 | Android-Taste |
---|---|---|
A1 | 0x09 0x0001 | KEYCODE_SCHALTFLÄCHE (96) |
B1 | 0x09 0x0002 | KEYCODE_SCHALTFLÄCHE (97) |
X1 | 0x09 0x0004 | KEYCODE_button_X (99) |
J1 | 0x09 0x0005 | KEYCODE_SCHALTFLÄCHE (100) |
Steuerkreuz oben1 Steuerkreuz unten1 |
0x01 0x00393 | AXIS_HAT_Y4 |
Steuerkreuz links1 Steuerkreuz rechts1 |
0x01 0x00393 | AXIS_HAT_X4 |
Taste auf der linken Schulter1 | 0x09 0x0007 | KEYCODE_button_L1 (102) |
Rechte Schultertaste1 | 0x09 0x0008 | KEYCODE_button_R1 (103) |
Mit linker Maustaste klicken1 | 0x09 0x000E | KEYCODE_BUTTON_THUMBL (106) |
Mit der rechten Maustaste klicken1 | 0x09 0x000F | KEYCODE_button_THUMBR (107) |
Startseite1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
Zurück1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
2 Die oben genannten HID-Nutzungen MÜSSEN innerhalb einer Game Pad-CA (0x01 0x0005) deklariert werden.
3 Diese Nutzung MÜSSEN ein logisches Minimum von 0, ein logisches Maximum von 7, ein physisches Minimum von 0, ein physisches Maximum von 315, ein Einheiten in Grad und eine Berichtsgröße von 4 haben. Der logische Wert ist als Drehung im Uhrzeigersinn von der vertikalen Achse weg definiert. Zum Beispiel steht ein logischer Wert von 0 für keine Drehung und das Drücken der Nach-oben-Taste, während ein logischer Wert von 1 eine Drehung von 45 Grad und das Betätigen der Nach-oben- und der Nach-links-Taste bedeutet.
Analoge Steuerelemente1 | HID-Nutzung | Android-Taste |
---|---|---|
Linker Trigger | 0x02 0x00C5 | WICHTSCHRÄNKER |
Rechter Trigger | 0x02 0x00C4 | AXIS_RTRIGGER |
Linker Joystick |
0 x 01, 0 x 0030 0x01 0x0031 |
AXIS_X Achse_y |
Rechter Joystick |
0 x 01, 0 x 0032 0x01 0x0035 |
AXIS_Z AXIS_RZ |
7.2.7 Fernbedienung
Informationen zu gerätespezifischen Anforderungen finden Sie in Abschnitt 2.3.1.
7.3. Sensoren
Wenn Geräteimplementierungen einen bestimmten Sensortyp mit einer entsprechenden API für Drittentwickler enthalten, MÜSSEN die Geräteimplementierung diese API wie in der Android SDK-Dokumentation und der Android Open Source-Dokumentation zu Sensoren beschrieben implementieren.
Geräteimplementierungen:
- [C-0-1] MÜSSEN das Vorhandensein oder Fehlen von Sensoren gemäß der
android.content.pm.PackageManager
-Klasse korrekt melden. - [C-0-2] MÜSSEN über die
SensorManager.getSensorList()
und ähnliche Methoden eine genaue Liste der unterstützten Sensoren zurückgeben. - [C-0-3] MÜSSEN sich bei allen anderen Sensor-APIs angemessen verhalten, z. B. indem
true
oderfalse
zurückgegeben werden, wenn Anwendungen versuchen, Listener zu registrieren, und keine Sensor-Listener aufrufen, wenn die entsprechenden Sensoren nicht vorhanden sind.
Wenn Geräteimplementierungen einen bestimmten Sensortyp mit einer entsprechenden API für Drittentwickler enthalten, geschieht Folgendes:
- [C-1-1] MÜSSEN alle Sensormessungen unter Verwendung der relevanten internationalen Maßeinheiten für jeden Sensortyp melden, wie in der Android SDK-Dokumentation definiert.
- [C-1-2] MÜSSEN Sensordaten mit einer maximalen Latenz von 100 Millisekunden + 2 * sample_time für einen Sensorstream mit einer maximalen angeforderten Latenz von 0 ms melden, wenn der Anwendungsprozessor aktiv ist. Diese Verzögerung umfasst keine Filterverzögerungen.
- [C-1-3] MÜSSEN die erste Sensorprobe innerhalb von 400 Millisekunden + 2 * sample_time des Sensors melden, der aktiviert wird. Eine Genauigkeit von 0 ist für diese Stichprobe akzeptabel.
-
[SR] SOLLTEN die Ereigniszeit in Nanosekunden angeben, wie in der Android SDK-Dokumentation definiert. Sie stellt den Zeitpunkt dar, zu dem das Ereignis aufgetreten ist und mit der SystemClock.elapsedRealtimeNano()-Uhr synchronisiert wurde. Bestehenden und neuen Android-Geräten wird dringend empfohlen, diese Anforderungen zu erfüllen, sodass ein Upgrade auf zukünftige Plattform-Releases möglich ist, bei denen diese Komponente möglicherweise zu einer ERFORDERLICHEN Komponente wird. Der Synchronisierungsfehler SOLLTE unter 100 Millisekunden liegen.
-
[C-1-4] Damit eine API, die in der Android SDK-Dokumentation als kontinuierlicher Sensor angegeben ist, MÜSSEN Geräteimplementierungen kontinuierlich regelmäßige Datenstichproben bereitstellen, die einen Jitter unter 3 % haben sollten, wobei der Jitter als Standardabweichung der Differenz der gemeldeten Zeitstempelwerte zwischen aufeinanderfolgenden Ereignissen definiert ist.
-
[C-1-5] MUSS sicherstellen, dass der Sensorereignisstream NICHT verhindern darf, dass die CPU des Geräts in den Ruhemodus wechselt oder wieder aufwacht.
- Wenn mehrere Sensoren aktiviert sind, sollte der Stromverbrauch NICHT die Summe der vom einzelnen Sensor gemeldeten Stromverbrauch überschreiten.
Die obige Liste ist nicht vollständig. das dokumentierte Verhalten des Android SDK und der Open-Source-Dokumentation von Android auf Sensoren wird als maßgeblich angesehen.
Einige Sensortypen sind zusammengesetzt, d. h., sie können aus Daten abgeleitet werden, die von einem oder mehreren anderen Sensoren bereitgestellt werden. (Beispiele hierfür sind der Ausrichtungssensor und der lineare Beschleunigungssensor.)
Geräteimplementierungen:
- SOLLTEN diese Sensortypen implementieren, wenn sie die erforderlichen physischen Sensoren enthalten, wie unter Sensortypen beschrieben.
Wenn Geräteimplementierungen einen zusammengesetzten Sensor enthalten, gilt Folgendes:
- [C-2-1] MÜSSEN den Sensor wie in der Android-Open-Source-Dokumentation zu zusammengesetzten Sensoren beschrieben implementieren.
7.3.1 Beschleunigungsmesser
Geräteimplementierungen:
- [C-SR] wird dringend empfohlen, einen 3-Achsen-Beschleunigungsmesser zu verwenden.
Wenn Geräte einen dreiachsigen Beschleunigungsmesser enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN Ereignisse bis zu einer Frequenz von mindestens 50 Hz melden können.
- [C-1-2] MÜSSEN den
TYPE_ACCELEROMETER
-Sensor implementieren und melden. - [C-1-3] MUSS dem Android-Sensorkoordinatensystem entsprechen, das in den Android-APIs beschrieben wird.
- [C-1-4] MUSS vom freien Fall bis zur vierfachen Schwerkraft(4 g) oder mehr auf jeder Achse gemessen werden können.
- [C-1-5] MUSS eine Auflösung von mindestens 12 Bit haben.
- [C-1-6] MUSS eine Standardabweichung von maximal 0,05 m/s^ haben, wobei die Standardabweichung pro Achse für Stichproben berechnet werden sollte, die über einen Zeitraum von mindestens 3 Sekunden mit der schnellsten Stichprobenrate erfasst wurden.
- [SR] wird dringend empfohlen, den
TYPE_SIGNIFICANT_MOTION
-Komposit-Sensor zu implementieren. - [SR] wird dringend empfohlen, den
TYPE_ACCELEROMETER_UNCALIBRATED
-Sensor zu implementieren und zu melden. Android-Geräte werden UNBEDINGT empfohlen, diese Anforderung zu erfüllen, sodass ein Upgrade auf die zukünftige Plattformversion durchgeführt werden kann, wenn dies möglicherweise ERFORDERLICH ist. - SOLLTEN die
TYPE_SIGNIFICANT_MOTION
-,TYPE_TILT_DETECTOR
-,TYPE_STEP_DETECTOR
- undTYPE_STEP_COUNTER
-Sensoren wie im Android SDK-Dokument beschrieben implementieren. - SOLLTE Ereignisse mit bis zu 200 Hz melden.
- SOLLTEN eine Auflösung von mindestens 16 Bit haben.
- SOLLTEN während der Verwendung kalibriert werden, wenn sich die Eigenschaften im Laufe des Lebenszyklus ändern und kompensiert werden. Die Kompensationsparameter müssen zwischen Geräteneustarts beibehalten werden.
- SOLLTE temperaturkompensiert werden.
Wenn die Geräteimplementierung einen dreiachsigen Beschleunigungsmesser umfasst und einer der zusammengesetzten TYPE_SIGNIFICANT_MOTION
-, TYPE_TILT_DETECTOR
-, TYPE_STEP_DETECTOR
- oder TYPE_STEP_COUNTER
-Sensoren implementiert ist:
- [C-2-1] Die Summe ihres Stromverbrauchs MUSS immer kleiner als 4 mW sein.
- SOLLTE jeweils unter 2 mW bzw.0,5 mW liegen, wenn das Gerät in einem dynamischen oder statischen Zustand ist.
Wenn Geräte einen 3-Achsen-Beschleunigungsmesser und einen 3-Achsen-Gyroskopsensor enthalten, gilt Folgendes:
- [C-3-1] MÜSSEN die zusammengesetzten Sensoren
TYPE_GRAVITY
undTYPE_LINEAR_ACCELERATION
implementieren. - [C-SR] wird dringend empfohlen, den
TYPE_GAME_ROTATION_VECTOR
-Verbundsensor zu implementieren.
Wenn Geräteimplementierungen einen 3-Achsen-Beschleunigungsmesser, einen 3-Achsen-Gyroskopsensor und einen Magnetometer-Sensor umfassen, gilt Folgendes:
- [C-4-1] MÜSSEN einen
TYPE_ROTATION_VECTOR
-Sensoren implementieren.
7.3.2 Magnetometer
Geräteimplementierungen:
- [C-SR] Wir empfehlen dringend, einen dreiachsigen Magnetometer (Kompass) mitzunehmen.
Wenn Geräteimplementierungen ein 3-Achsen-Magnetometer umfassen, gilt Folgendes:
- [C-1-1] MÜSSEN den
TYPE_MAGNETIC_FIELD
-Sensor implementieren. - [C-1-2] MÜSSEN Ereignisse bis zu einer Frequenz von mindestens 10 Hz und Ereignisse mit einer Frequenz von mindestens 50 Hz melden können.
- [C-1-3] MUSS dem Android-Sensorkoordinatensystem entsprechen, das in den Android-APIs beschrieben wird.
- [C-1-4] MUSS vor der Sättigung zwischen -900 μT und +900 μT auf jeder Achse messen können.
- [C-1-5] MUSS einen Offset-Wert von hartem Eisen unter 700 μT haben und einen Wert unter 200 μT haben. Platzieren Sie das Magnetometer in der Nähe von dynamischen (strominduzierten) und statischen (magnetinduzierten) Magnetfeldern.
- [C-1-6] MUSS eine Auflösung von mindestens 0,6 μT haben.
- [C-1-7] MUSS die Online-Kalibrierung und -kompensation unterstützen und die Kompensationsparameter zwischen Geräteneustarts beibehalten.
- Auf [C-1-8] MUSS die Kompensation für weiches Eisen angewendet werden. Die Kalibrierung kann entweder während der Verwendung oder während der Produktion des Geräts erfolgen.
- [C-1-9] MUSS eine Standardabweichung haben, die pro Achse für Stichproben berechnet wird, die über einen Zeitraum von mindestens 3 Sekunden mit der schnellsten Abtastrate von maximal 1,5 μT erfasst wurden. SOLLTEN eine Standardabweichung von maximal 0,5 μT haben.
- SOLLTEN SIE
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-Sensor implementieren. - [SR] Für bestehende und neue Android-Geräte wird dringend empfohlen, den
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-Sensor zu implementieren.
Wenn die Geräteimplementierung ein 3-Achsen-Magnetometer, einen Beschleunigungsmessersensor und einen 3-Achsen-Gyroskopsensor umfasst, gilt Folgendes:
- [C-2-1] MÜSSEN einen
TYPE_ROTATION_VECTOR
-Sensoren implementieren.
Wenn Geräteimplementierungen ein dreiachsiges Magnetometer oder einen Beschleunigungsmesser enthalten, ist Folgendes zu beachten:
- KANN den
TYPE_GEOMAGNETIC_ROTATION_VECTOR
-Sensor implementieren.
Wenn Geräteimplementierungen ein dreiachsiges Magnetometer, einen Beschleunigungsmesser und einen TYPE_GEOMAGNETIC_ROTATION_VECTOR
-Sensor enthalten, gilt Folgendes:
- [C-3-1] MUSS weniger als 10 mW verbrauchen.
- SOLLTEN weniger als 3 mW verbrauchen, wenn der Sensor für den Batchmodus bei 10 Hz registriert ist.
7.3.3 GPS
Geräteimplementierungen:
- [C-SR] wird dringend empfohlen, einen GPS-/GNSS-Empfänger mitzunehmen.
Wenn Geräteimplementierungen einen GPS-/GNSS-Empfänger enthalten und die Funktion über das Funktions-Flag android.hardware.location.gps
an Anwendungen melden, geschieht Folgendes:
- [C-1-1] MUSS die Standortausgaben mit einer Frequenz von mindestens 1 Hz unterstützen, wenn sie über
LocationManager#requestLocationUpdate
angefordert werden. - [C-1-2] MÜSSEN in der Lage sein, den Standort unter freiem Himmel (starke Signale, vernachlässigbarer Multipfad, HDOP < 2) innerhalb von 10 Sekunden (schnelle Zeit bis zur ersten Behebung) zu bestimmen, wenn eine Internetverbindung mit einer Geschwindigkeit von mindestens 0,5 Mbit/s verbunden ist. Diese Anforderung wird in der Regel durch die Verwendung einer unterstützten oder vorhergesagten GPS-/GNSS-Technik erfüllt, um die GPS-/GNSS-Lock-On-Zeit zu minimieren (Unterstützungsdaten umfassen Referenzzeit, Referenzstandort und Satelliten-Ephemeris/Uhr).
- [C-1-6] Nach einer solchen Standortberechnung MÜSSEN Geräteimplementierungen den Standort unter freiem Himmel innerhalb von 5 Sekunden nach dem Neustart von Standortanfragen und bis zu einer Stunde nach der ursprünglichen Standortberechnung ermitteln, auch wenn die nachfolgende Anfrage ohne Datenverbindung und/oder nach dem Neustart erfolgt.
-
Bei freiem Himmel, nachdem der Ort bestimmt wurde, während Sie sich nicht bewegen oder sich im Stil von weniger als 1 Meter pro Sekunde im Quadrat der Beschleunigung bewegen:
- [C-1-3] MÜSSEN in mindestens 95% der Fälle den Standort in einem Umkreis von 20 Metern und eine Geschwindigkeit von 0,5 Metern pro Sekunde bestimmen können.
- [C-1-4] MÜSSEN mindestens 8 Satelliten einer Konstellation gleichzeitig über
GnssStatus.Callback
erfassen und melden. - SOLLTEN in der Lage sein, mindestens 24 Satelliten aus mehreren Konstellationen gleichzeitig zu verfolgen (z.B. GPS und mindestens eines von Glonass, Beidou oder Galileo).
- [C-SR] wird dringend empfohlen, während eines Notrufs weiterhin normale GPS-/GNSS-Standortausgaben über GNSS Location Provider APIs bereitzustellen.
- [C-SR] Es wird dringend empfohlen, GNSS-Messungen von allen erfassten Konstellationen zu melden (wie in den GnssStatus-Nachrichten angegeben), mit Ausnahme von SBAS.
- [C-SR] wird dringend empfohlen, Daten zur AGC und Häufigkeit der GNSS-Messung zu melden.
- [C-SR] wird dringend empfohlen, alle Schätzungen zur Genauigkeit (einschließlich Peilung, Geschwindigkeit und Branche) für jeden GPS-/GNSS-Standort anzugeben.
- [C-SR] Es wird dringend empfohlen, GNSS-Messungen zu melden, sobald sie gefunden wurden, auch wenn ein über GPS/GNSS berechneter Standort noch nicht gemeldet wurde.
- [C-SR] Es wird dringend empfohlen, GNSS-Pseudobereiche und Pseudorangeraten zu melden, die bei freiem Himmel nach der Standortbestimmung ausreichen, wenn sie sich nicht bewegen oder mit einer Beschleunigung von weniger als 0,2 Metern pro Sekunde im Quadrat der Beschleunigung ausreichen, um die Position innerhalb von 20 Metern und eine Geschwindigkeit innerhalb von 0,2 Metern pro Sekunde, mindestens 95% der Zeit, zu berechnen.
7.3.4 Gyroskop
Geräteimplementierungen:
- [C-SR] wird dringend empfohlen, einen Gyroskopsensor einzusetzen, sofern kein dreiachsiger Beschleunigungsmesser vorhanden ist.
Wenn Geräteimplementierungen ein 3-Achsen-Gyroskop umfassen, ist Folgendes erforderlich:
- [C-1-1] MÜSSEN Ereignisse bis zu einer Frequenz von mindestens 50 Hz melden können.
- [C-1-2] MÜSSEN den
TYPE_GYROSCOPE
-Sensor implementieren und wird dringend empfohlen, auch denTYPE_GYROSCOPE_UNCALIBRATED
-Sensor zu implementieren. - [C-1-4] MÜSSEN eine Auflösung von mindestens 12 Bit und eine Auflösung von mindestens 16 Bit haben.
- [C-1-5] MUSS temperaturkompensiert werden.
- [C-1-6] MÜSSEN während der Verwendung kalibriert und kompensiert werden und die Kompensationsparameter zwischen Geräteneustarts beibehalten.
- [C-1-7] MUSS eine Abweichung von höchstens 1e–7 rad^2 / s^2 pro Hz (Abweichung pro Hz oder rad^2 / s) haben. Die Varianz darf mit der Stichprobenrate variieren, MUSS aber durch diesen Wert eingeschränkt werden. Mit anderen Worten: Wenn Sie die Varianz des Gyros mit einer Abtastrate von 1 Hz messen, SOLLTE sie nicht größer als 1e-7 rad^2/s^2 sein.
- [SR] Der Kalibrierungsfehler liegt UNBEDINGT unter 0,01 Rad/s, wenn das Gerät bei Raumtemperatur steht.
- SOLLTE Ereignisse mit bis zu 200 Hz melden.
Wenn Geräte ein 3-Achsen-Gyroskop, einen Beschleunigungsmessersensor und einen Magnetometersensor umfassen, gilt Folgendes:
- [C-2-1] MÜSSEN einen
TYPE_ROTATION_VECTOR
-Sensoren implementieren.
Wenn Geräte einen 3-Achsen-Beschleunigungsmesser und einen 3-Achsen-Gyroskopsensor enthalten, gilt Folgendes:
- [C-3-1] MÜSSEN die zusammengesetzten Sensoren
TYPE_GRAVITY
undTYPE_LINEAR_ACCELERATION
implementieren. - [C-SR] wird dringend empfohlen, den
TYPE_GAME_ROTATION_VECTOR
-Verbundsensor zu implementieren.
7.3.5 Barometer
Geräteimplementierungen:
- [C-SR] wird dringend empfohlen, ein Barometer (Umgebungsdrucksensor) mitzunehmen.
Wenn Geräteimplementierungen ein Barometer enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN den
TYPE_PRESSURE
-Sensor implementieren und melden. - [C-1-2] MUSS Ereignisse bei 5 Hz oder mehr liefern können.
- [C-1-3] MUSS temperaturkompensiert werden.
- [SR] WIRD UNBEDINGT EMPFOHLEN, Druckmessungen in einem Bereich von 300 hPa bis 1100 hPa übermitteln zu können.
- SOLLTEN eine absolute Genauigkeit von 1 hPa haben.
- SOLLTE eine relative Genauigkeit von 0,12 hPa in einem Bereich von 20 hPa haben (entspricht einer Genauigkeit von ~1 m über ~200 m Änderung auf Meereshöhe).
7.3.6 Thermometer
Geräteimplementierungen:
- KANN ein Umgebungsthermometer (Temperatursensor) enthalten.
- MÖGLICHERWEISE, SOLLTE aber KEIN CPU-Temperatursensor enthalten.
Wenn Geräte ein Umgebungsthermometer (Temperatursensor) enthalten, gilt Folgendes:
- [C-1-1] MUSS als
SENSOR_TYPE_AMBIENT_TEMPERATURE
definiert sein und MÜSSEN die Umgebungstemperatur (Raum-/Fahrzeugraum) in Grad Celsius messen, bei der der Nutzer mit dem Gerät interagiert. - [C-1-2] MUSS als
SENSOR_TYPE_TEMPERATURE
definiert sein. - [C-1-3] MUSS die Temperatur der CPU des Geräts messen.
- [C-1-4] DARF KEINE andere Temperatur messen.
Beachte, dass der Sensortyp SENSOR_TYPE_TEMPERATURE
in Android 4.0 eingestellt wurde.
7.3.7 Fotometer
- Sie können ein Fotometer (Umgebungslicht-Sensor) verwenden, in dem ein entsprechendes Gerät implementiert ist.
7.3.8 Näherungssensor
- Geräteimplementierungen KÖNNEN einen Näherungssensor enthalten.
Wenn Geräteimplementierungen einen Näherungssensor enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN die Nähe eines Objekts in derselben Richtung wie der Bildschirm messen. Das heißt, der Näherungssensor MUSS so ausgerichtet sein, dass Objekte in der Nähe des Bildschirms erkannt werden, da die Hauptabsicht dieses Sensortyps darin besteht, ein vom Nutzer verwendetes Smartphone zu erkennen. Wenn die Geräteimplementierung einen Näherungssensor mit einer anderen Ausrichtung umfasst, DARF NICHT über diese API darauf zugegriffen werden.
- [C-1-2] MUSS mindestens eine Genauigkeit von 1 Bit haben.
7.3.9 Hochwertige Sensoren
Wenn Geräteimplementierungen eine Reihe hochwertiger Sensoren (wie in diesem Abschnitt definiert) enthalten und sie für Drittanbieter-Apps zur Verfügung stellen, gilt Folgendes:
- [C-1-1] MUSS die Funktion mit dem Funktions-Flag
android.hardware.sensor.hifi_sensors
identifizieren.
Wenn in Geräteimplementierungen android.hardware.sensor.hifi_sensors
deklariert wird, gilt Folgendes:
-
[C-2-1] MUSS einen
TYPE_ACCELEROMETER
-Sensor haben, der:- MÜSSEN einen Messbereich zwischen -8 g und +8 g haben, SOLLTEN zwischen -16 g und +16 g liegen.
- MÜSSEN eine Auflösung von mindestens 2.048 LSB/g haben.
- MUSS eine Mindest-Messfrequenz von 12,5 Hz oder weniger haben.
- MUSS eine maximale Messfrequenz von 400 Hz oder höher haben. SOLLTE SensorDirectChannel
RATE_VERY_FAST
unterstützen. - MUSS ein Messrauschen nicht über 400 μg/√Hz haben.
- MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 3.000 Sensorereignissen implementiert werden.
- MUSS einen Batch-Stromverbrauch haben, der nicht unter 3 mW liegt.
- [C-SR] Es wird dringend empfohlen, eine 3-dB-Messbandbreite von mindestens 80% der Nyquist-Frequenz und ein Spektrum für weißes Rauschen innerhalb dieser Bandbreite zu haben.
- SOLLTEN Beschleunigungen, die zufallsgesteuert werden, unter 30 μg √Hz bei Raumtemperatur laufen.
- SOLLTE eine Verzerrungsänderung gegenüber der Temperatur von ≤ +/- 1 mg/°C auftreten.
- SOLLTEN eine optimale Linien-Nichtlinearität von ≤ 0,5 % und Empfindlichkeitsänderung gegenüber Temperatur ≤ 0,03%/C° haben.
- SOLLTEN die Querachsenempfindlichkeit < 2,5 % und Schwankung der Querachsenempfindlichkeit < 0,2% im Betriebstemperaturbereich des Geräts.
-
[C-2-2] MUSS eine
TYPE_ACCELEROMETER_UNCALIBRATED
mit denselben Qualitätsanforderungen wieTYPE_ACCELEROMETER
haben. -
[C-2-3] MUSS einen
TYPE_GYROSCOPE
-Sensor haben, der:- MUSS einen Messbereich zwischen -1.000 und +1.000 dps haben.
- MÜSSEN eine Auflösung von mindestens 16 LSB/dps haben.
- MUSS eine Mindest-Messfrequenz von 12,5 Hz oder weniger haben.
- MUSS eine maximale Messfrequenz von 400 Hz oder höher haben. SOLLTE SensorDirectChannel
RATE_VERY_FAST
unterstützen. - MUSS ein Messrauschen von maximal 0,014°/s/√Hz haben.
- [C-SR] Es wird dringend empfohlen, eine 3-dB-Messbandbreite von mindestens 80% der Nyquist-Frequenz und ein Spektrum für weißes Rauschen innerhalb dieser Bandbreite zu haben.
- SOLLTE eine Zufallsfrequenz von unter 0,001°/s √Hz bei Raumtemperatur laufen lassen.
- SOLLTE eine Verzerrungsänderung gegenüber der Temperatur von ≤ +/- 0,05 °/ s / °C auftreten.
- SOLLTE eine Änderung der Empfindlichkeit gegenüber der Temperatur von ≤ 0,02% / °C betragen.
- SOLLTEN eine Nichtlinearität der bestmöglichen Linie von ≤ 0,2 % haben.
- SOLLTEN eine Rauschdichte von ≤ 0,007°/s/√Hz haben.
- SOLLTE ein Kalibrierungsfehler unter 0,002 Rad/s im Temperaturbereich zwischen 10 und 40 °C auftreten, wenn das Gerät steht.
- SOLLTE eine G-Empfindlichkeit unter 0,1°/s/g aufweisen.
- SOLLTEN die Querachsenempfindlichkeit < 4,0 % und Abweichungen der Querachsenempfindlichkeit < 0,3% im Betriebstemperaturbereich des Geräts.
-
[C-2-4] MUSS eine
TYPE_GYROSCOPE_UNCALIBRATED
mit denselben Qualitätsanforderungen wieTYPE_GYROSCOPE
haben. -
[C-2-5] MUSS einen
TYPE_GEOMAGNETIC_FIELD
-Sensor haben, der:- MÜSSEN einen Messbereich zwischen -900 und +900 μT haben.
- MÜSSEN eine Auflösung von mindestens 5 LSB/uT haben.
- MUSS eine Mindest-Messfrequenz von 5 Hz oder niedriger haben.
- MUSS eine maximale Messfrequenz von 50 Hz oder höher haben.
- MUSS ein Messrauschen aufweisen, das nicht über 0,5 uT liegt.
-
[C-2-6] MUSS eine
TYPE_MAGNETIC_FIELD_UNCALIBRATED
mit denselben Qualitätsanforderungen wieTYPE_GEOMAGNETIC_FIELD
sowie zusätzlich Folgendes haben:- MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 600 Sensorereignissen implementiert werden.
- [C-SR] Es wird dringend empfohlen, ein weißes Rauschenspektrum von 1 Hz bis mindestens 10 Hz zu haben, wenn die Melderate mindestens 50 Hz beträgt.
-
[C-2-7] MUSS einen
TYPE_PRESSURE
-Sensor haben, der:- MÜSSEN einen Messbereich zwischen mindestens 300 und 1100 hPa aufweisen.
- MÜSSEN eine Auflösung von mindestens 80 LSB/hPa haben.
- MUSS eine Mindest-Messfrequenz von 1 Hz oder niedriger haben.
- MUSS eine maximale Messfrequenz von 10 Hz oder höher haben.
- MUSS ein Messrauschen von maximal 2 P/√Hz haben.
- MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 300 Sensorereignissen implementiert werden.
- Der Stromverbrauch für die Batchverarbeitung MUSS nicht unter 2 mW liegen.
- [C-2-8] MUSS einen
TYPE_GAME_ROTATION_VECTOR
-Sensor haben. - [C-2-9] MUSS einen
TYPE_SIGNIFICANT_MOTION
-Sensor haben, der: <ph type="x-smartling-placeholder">- </ph>
- MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.
- [C-2-10] MUSS einen
TYPE_STEP_DETECTOR
-Sensor haben, der: <ph type="x-smartling-placeholder">- </ph>
- MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 100 Sensorereignissen implementiert werden.
- MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.
- MUSS einen Batch-Stromverbrauch haben, der nicht unter 4 mW liegt.
- [C-2-11] MUSS einen
TYPE_STEP_COUNTER
-Sensor haben, der: <ph type="x-smartling-placeholder">- </ph>
- MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.
- [C-2-12] MUSS einen
TILT_DETECTOR
-Sensor haben, der: <ph type="x-smartling-placeholder">- </ph>
- MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.
- [C-2-13] Der vom Beschleunigungsmesser, Gyroskop und Magnetometer gemeldete Zeitstempel desselben physischen Ereignisses MUSS nicht weiter als 2, 5 Millisekunden voneinander entfernt sein. Der vom Beschleunigungsmesser und dem Gyroskop gemeldete Zeitstempel desselben physischen Ereignisses SOLLTEN nicht weiter als 0,25 Millisekunden voneinander entfernt sein.
- [C-2-14] MÜSSEN Zeitstempel für Gyroskopsensor-Ereignisse auf derselben Zeitbasis wie das Kamerasubsystem und innerhalb von 1 Millisekunden nach Ablauf haben.
- [C-2-15] MÜSSEN innerhalb von 5 Millisekunden ab dem Zeitpunkt, an dem die Daten auf einem der oben genannten physischen Sensoren für die Anwendung verfügbar sind, Stichproben an Anwendungen übergeben.
- [C-2-16] DÜRFEN keinen Stromverbrauch von mehr als 0,5 mW haben, wenn das Gerät statisch ist, und 2,0 mW, wenn das Gerät in Bewegung ist, wenn eine Kombination der folgenden Sensoren aktiviert ist:
<ph type="x-smartling-placeholder">
- </ph>
-
SENSOR_TYPE_SIGNIFICANT_MOTION
-
SENSOR_TYPE_STEP_DETECTOR
-
SENSOR_TYPE_STEP_COUNTER
-
SENSOR_TILT_DETECTORS
-
- [C-2-17] KÖNNEN einen
TYPE_PROXIMITY
-Sensor haben, MUSS aber eine Mindestpufferkapazität von 100 Sensorereignissen haben, falls vorhanden.
Beachten Sie, dass die Anforderungen an den Stromverbrauch in diesem Abschnitt nicht den Stromverbrauch des Anwendungsprozessors umfassen. Sie schließt auch die Leistung ein, die von der gesamten Sensorkette – Sensor, unterstützenden Schaltkreisen, dedizierten Sensorverarbeitungssystemen usw. – verbraucht wird.
Wenn Geräte eine direkte Sensorunterstützung bieten, gilt Folgendes:
- [C-3-1] MÜSSEN die Unterstützung von Typen für direkte Kanäle und der Preise für direkte Berichte über die
isDirectChannelTypeSupported
undgetHighestDirectReportRateLevel
API korrekt deklarieren. - [C-3-2] MUSS mindestens einen der beiden direkten Sensorkanaltypen für alle Sensoren unterstützen, die das unterstützen.
- SOLLTEN Ereignisberichte über den direkten Sensorkanal für den primären Sensor (Variante ohne Weckfunktion) der folgenden Typen unterstützen:
<ph type="x-smartling-placeholder">
- </ph>
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-
7.3.10 Biometrische Sensoren
Weitere Informationen zum Messen der biometrischen Entsperrungssicherheit finden Sie in der Dokumentation zum Messen der biometrischen Sicherheit.
Wenn Geräteimplementierungen einen sicheren Sperrbildschirm beinhalten, gilt Folgendes:
- SOLLTE einen biometrischen Sensor enthalten
Biometrische Sensoren können basierend auf der Akzeptanzrate von Spoofing und Hochstapler sowie auf der Sicherheit der biometrischen Pipeline als Stark, Schwach oder Komfort klassifiziert werden. Diese Klassifizierung bestimmt die Funktionen, über die der biometrische Sensor eine Verbindung zur Plattform und zu Drittanbieteranwendungen herstellen muss. Sensoren werden standardmäßig als Nutzerfreundlichkeit eingestuft und müssen den unten aufgeführten zusätzlichen Anforderungen entsprechen, wenn sie als Schwach oder Stark eingestuft werden sollen. Für das biometrische Verfahren Schwach und Stark sind zusätzliche Funktionen verfügbar, wie unten beschrieben.
Damit ein biometrischer Sensor für Drittanbieter-Apps verfügbar ist, müssen folgende Geräteimplementierungen implementiert werden:
- [C-0-1] MUSS die in diesem Dokument definierten Anforderungen für biometrische Daten mit dem Status Stark oder Schwach erfüllen.
Um den Zugriff auf Schlüsselspeicherschlüssel für Drittanbieter-Anwendungen zu ermöglichen, müssen folgende Geräteimplementierungen implementiert sein:
- [C-0-2] MÜSSEN die in diesem Dokument definierten Anforderungen für das Attribut Stark erfüllen.
Zusätzlich:
- [C-0-3] MÜSSEN mit einer ausdrücklichen Bestätigung (z.B. Drücken einer Schaltfläche) gekoppelt werden, wenn das biometrische Verfahren Stark passiv ist (z.B. Gesicht oder Iris, wenn kein explizites Signal der Absicht des Nutzers vorhanden ist).
- [C-SR] Die Bestätigungsmethode für passive biometrische Verfahren ist UNBEDINGT EMPFOHLEN, sich so zu sichern, dass ein Betriebssystem- oder Kernel-Manipulation keine Spoofing-Angriffe verhindern kann. Das bedeutet zum Beispiel, dass die Bestätigungsaktion basierend auf einer physischen Schaltfläche über einen GPIO-(Eingabe-/Ausgabe-)Pin eines Secure Elements (SE) weitergeleitet wird, das ausschließlich durch Drücken einer physischen Taste angestoßen werden kann.
Wenn ein biometrischer Sensor in Geräteimplementierungen als Nutzerfreundlichkeit behandelt werden soll, gilt Folgendes:
- [C-1-1] MUSS eine falsche Annahmequote unter 0,002 % haben.
- [C-1-2] MÜSSEN darauf hinweisen, dass dieser Modus möglicherweise nicht so sicher ist als eine starke PIN, ein starkes Muster oder ein starkes Passwort. Außerdem müssen die Risiken einer Aktivierung klar angegeben werden, wenn die Annahmequoten durch Spoofing und Hochstapler-Betrüger über 7 % liegen.
- [C-1-3] MUSS die Zahl der Versuche zur biometrischen Überprüfung mindestens 30 Sekunden lang begrenzt werden, wenn ein falscher Test eine angemessene Aufnahmequalität (
BIOMETRIC_ACQUIRED_GOOD
) hat, die nicht mit einem registrierten biometrischen Verfahren übereinstimmt. - [C-1-4] MÜSSEN das Hinzufügen neuer biometrischer Daten verhindern, ohne zuvor eine Vertrauenskette zu schaffen. Dazu muss der Nutzer das Vorhandensein von Anmeldedaten bestätigen oder neue Geräteanmeldedaten (PIN/Muster/Passwort) hinzufügen, die durch TEE gesichert werden. Die Implementierung des Open-Source-Projekts von Android stellt den entsprechenden Mechanismus im Framework bereit.
- [C-1-5] MÜSSEN alle identifizierbaren biometrischen Daten eines Nutzers vollständig entfernen, wenn das Konto des Nutzers entfernt wird (auch über das Zurücksetzen auf die Werkseinstellungen).
- [C-1-6] MÜSSEN die individuelle Kennzeichnung für diese biometrische Information (z.B.
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT
,DevicePolicymanager.KEYGUARD_DISABLE_FACE
oderDevicePolicymanager.KEYGUARD_DISABLE_IRIS
) beachten. - [C-1-7] Bei neuen Geräten, die mit Android-Version 10 auf den Markt gebracht werden, MUSS der Nutzer höchstens alle 24 Stunden zur primären Authentifizierung aufgefordert werden (z.B. mit PIN, Muster oder Passwort), und auf Geräten, die von einer früheren Android-Version auf den Markt gebracht werden, höchstens alle 72 Stunden.
-
[C-1-8] MÜSSEN Sie nach einem der folgenden Schritte die empfohlene primäre Authentifizierung (z. B. PIN, Muster, Passwort) vom Nutzer anfordern:
- ein Zeitlimit von 4 Stunden bei Inaktivität ODER
- 3 fehlgeschlagene biometrische Authentifizierungsversuche.
- Das Zeitlimit bei Inaktivität und die Anzahl der fehlgeschlagenen Authentifizierungen werden zurückgesetzt, nachdem die Geräteanmeldedaten erfolgreich bestätigt wurden.
Geräteupgrades mit älteren Android-Versionen können von C-1-8 ausgenommen werden.
-
[C-SR] Wir empfehlen dringend, eine Rate falscher Ablehnungen von weniger als 10 % (gemessen am Gerät) zu haben.
- [C-SR] Für jedes registrierte biometrische Verfahren wird dringend eine Latenz von unter 1 Sekunde empfohlen, gemessen ab dem Zeitpunkt, an dem das biometrische Verfahren erkannt wird, bis zum Entsperren des Bildschirms.
Wenn ein biometrischer Sensor auf Geräten als schwach eingestuft werden soll, ist Folgendes zu beachten:
- [C-2-1] MUSS alle oben genannten Anforderungen an den Komfort erfüllen, mit Ausnahme von [C-1-2].
- [C-2-2] MUSS die Akzeptanzrate von Parodien und Betrügern bei maximal 20 % liegen.
- [C-2-3] MÜSSEN eine hardwaregestützte Schlüsselspeicherimplementierung haben und den biometrischen Abgleich in einer isolierten Ausführungsumgebung außerhalb des Android-Nutzer- oder Kernel-Bereichs (z. B. der Trusted Execution Environment (TEE)) oder auf einem Chip mit einem sicheren Kanal in der isolierten Ausführungsumgebung durchführen.
- [C-2-4] MÜSSEN alle identifizierbaren Daten verschlüsselt und kryptografisch authentifiziert werden, sodass sie außerhalb der isolierten Ausführungsumgebung oder eines Chips mit einem sicheren Kanal in der isolierten Ausführungsumgebung weder erfasst, gelesen oder geändert werden können, wie in den Implementierungsrichtlinien auf der Website des Android Open Source Project beschrieben).
- [C-2-5] Für kamerabasierte biometrische Verfahren und biometrische Authentifizierung oder Registrierung:
<ph type="x-smartling-placeholder">
- </ph>
- Die Kamera MUSS die Kamera in einem Modus betreiben, der verhindert, dass Kameraframes außerhalb der isolierten Ausführungsumgebung oder eines Chips mit einem sicheren Kanal in der isolierten Ausführungsumgebung gelesen oder geändert werden.
- Bei RGB-Lösungen mit einer Kamera können die Kamerabilder außerhalb der isolierten Ausführungsumgebung lesbar sein, um Vorgänge wie die Vorschau für die Registrierung zu unterstützen, DÜRFEN aber dennoch NICHT geändert werden.
- [C-2-6] DÜRFEN Anwendungen von Drittanbietern NICHT aktivieren, um zwischen einzelnen biometrischen Registrierungen zu unterscheiden.
- [C-2-7] DÜRFEN NICHT den unverschlüsselten Zugriff auf identifizierbare biometrische Daten oder daraus abgeleitete Daten (z. B. Einbettungen) außerhalb des Kontexts des TEE für den Anwendungsprozessor zulassen.
-
[C-2-8] MÜSSEN über eine sichere Verarbeitungspipeline verfügen, die verhindert, dass aufgrund einer Manipulation des Betriebssystems oder des Kernels keine Daten direkt eingeschleust werden, um sich fälschlicherweise als Nutzer zu authentifizieren.
Geräteimplementierungen, die bereits unter einer früheren Android-Version eingeführt wurden und die Anforderung C-2-8 nicht durch ein Systemsoftwareupdate erfüllen können, werden KÖNNEN von dieser Anforderung ausgenommen.
Wenn bei einer Geräteimplementierung ein biometrischer Sensor als stark eingestuft werden soll, gilt Folgendes:
- [C-3-1] MUSS alle oben unter Schwach genannten Anforderungen erfüllen. Das Upgrade von Geräten von einer älteren Android-Version ist nicht von C-2-7 ausgenommen.
- [C-3-2] MUSS die Akzeptanzrate von Spoofing und Betrug bei maximal 7 % liegen.
- [C-3-3] MÜSSEN den Nutzer maximal alle 72 Stunden zur primären Authentifizierung (z.B. PIN, Muster, Passwort) auffordern.
7.3.12 Positionssensor
Geräteimplementierungen:
- KANN Positionssensor mit 6 Freiheitsgraden unterstützen.
Wenn Geräteimplementierungen einen Positionssensor mit 6 Freiheitsgraden unterstützen, ist Folgendes möglich:
- [C-1-1] MÜSSEN den
TYPE_POSE_6DOF
-Sensor implementieren und melden. - [C-1-2] MUSS genauer sein als der Rotationsvektor allein.
7.4 Datenverbindung
7.4.1 Telefonie
Der von den Android-APIs verwendete Begriff "Telefonie" bezieht sich in diesem Dokument speziell auf Hardware für das Tätigen von Sprachanrufen und das Senden von SMS-Nachrichten über ein GSM- oder CDMA-Netzwerk. Auch wenn diese Sprachanrufe Paketvermittlung sein können oder nicht, gelten sie im Rahmen von Android als unabhängig von Datenverbindungen, die über dasselbe Netzwerk implementiert werden. Mit anderen Worten: Die Android-Telefoniefunktionen und APIs beziehen sich speziell auf Sprachanrufe und SMS. Beispielsweise gelten Geräteimplementierungen, die keine Anrufe tätigen oder keine SMS senden/empfangen können, nicht als Telefoniegerät, unabhängig davon, ob sie ein Mobilfunknetz für die Datenkonnektivität verwenden.
- Android KANN auf Geräten ohne Telefonie-Hardware verwendet werden. Das heißt, Android ist mit Geräten kompatibel, die keine Smartphones sind.
Wenn Geräteimplementierungen GSM- oder CDMA-Telefonie umfassen, gilt Folgendes:
- [C-1-1] MÜSSEN das Funktions-Flag „
android.hardware.telephony
“ und andere Flags für untergeordnete Elemente der Technologie entsprechend deklarieren. - [C-1-2] MÜSSEN für diese Technologie den vollen Support für die API implementieren.
Wenn Geräteimplementierungen keine Telefoniehardware enthalten, gilt Folgendes:
- [C-2-1] MÜSSEN die vollständigen APIs als managementfrei implementieren.
Wenn Geräteimplementierungen eUICCs oder eSIMs/eingebettete SIMs unterstützen und einen proprietären Mechanismus enthalten, um Drittanbieter-Entwicklern die eSIM-Funktion zur Verfügung zu stellen, gilt Folgendes:
- [C-3-1] MÜSSEN eine vollständige Implementierung von
EuiccManager API
bereitstellen.
7.4.1.1 Kompatibilität mit Nummernblockierungen
Wenn Geräteimplementierungen das android.hardware.telephony feature
melden, geschieht Folgendes:
- [C-1-1] MUSS die Unterstützung für das Blockieren von Nummern enthalten.
- [C-1-2] MÜSSEN
BlockedNumberContract
und die entsprechende API vollständig implementieren, wie in der SDK-Dokumentation beschrieben. - [C-1-3] MÜSSEN alle Anrufe und Nachrichten von einer Telefonnummer in "BlockingNumberProvider" blockieren ohne Interaktion mit Apps. Die einzige Ausnahme ist, wenn die Blockierung von Nummern vorübergehend aufgehoben wird, wie in der SDK-Dokumentation beschrieben.
- [C-1-4] Bei einem blockierten Anruf DARF NICHT in den Plattformanbieter der Anrufliste geschrieben werden.
- [C-1-5] Bei einer blockierten Nachricht DARF NICHT an den Telefonieanbieter geschrieben werden.
- [C-1-6] MÜSSEN eine UI für die Verwaltung blockierter Nummern implementieren, die mit dem von der Methode
TelecomManager.createManageBlockedNumbersIntent()
zurückgegebenen Intent geöffnet wird. - [C-1-7] Sie dürfen sekundären Nutzern NICHT erlauben, die blockierten Nummern auf dem Gerät anzusehen oder zu bearbeiten, da die Android-Plattform davon ausgeht, dass der primäre Nutzer die vollständige Kontrolle über die Telefoniedienste auf dem Gerät in einer einzigen Instanz hat. Alle Benutzeroberflächen zu Blockierungen MÜSSEN für sekundäre Nutzer ausgeblendet werden und die Liste der blockierten Nutzer MÜSSEN weiterhin berücksichtigt werden.
- SOLLTEN Sie die blockierten Nummern zum Anbieter migrieren, wenn ein Gerät auf Android 7.0 aktualisiert wird.
7.4.1.2 Telekommunikations-API
Wenn Geräteimplementierungen android.hardware.telephony
melden, geschieht Folgendes:
- [C-1-1] MUSS die im SDK beschriebenen
ConnectionService
APIs unterstützen. - [C-1-2] MÜSSEN einen neuen eingehenden Anruf anzeigen und dem Nutzer die Möglichkeit bieten, den eingehenden Anruf anzunehmen oder abzulehnen, wenn der Nutzer gerade einen Anruf über eine Drittanbieter-App getätigt hat, die die über
CAPABILITY_SUPPORT_HOLD
angegebene Funktion zum Halten von Anrufen nicht unterstützt. - [C-1-3] MUSS eine Anwendung haben, die InCallService implementiert.
-
[C-SR] Es wird dringend empfohlen, den Nutzer darüber zu informieren, dass ein eingehender Anruf unterbrochen wird, wenn er einen eingehenden Anruf annimmt.
Die AOSP-Implementierung erfüllt diese Anforderungen durch eine Vorabbenachrichtigung, die den Nutzer darüber informiert, dass die Annahme eines eingehenden Anrufs dazu führt, dass der andere Anruf beendet wird.
-
[C-SR] wird dringend empfohlen, die Standard-Telefon-App vorab zu laden, die einen Anruflisteneintrag und den Namen einer Drittanbieter-App in der Anrufliste anzeigt, wenn die Drittanbieter-App den
EXTRA_LOG_SELF_MANAGED_CALLS
-Extrasschlüssel auf derPhoneAccount
auftrue
festlegt. - [C-SR] Wir empfehlen dringend, die
KEYCODE_MEDIA_PLAY_PAUSE
- undKEYCODE_HEADSETHOOK
-Ereignisse des Audio-Headsets für dieandroid.telecom
APIs so zu verarbeiten:- .
- Rufen Sie
Connection.onDisconnect()
auf, wenn während eines laufenden Anrufs nur kurz das Schlüsselereignis gedrückt wird. - Ruf
Connection.onAnswer()
an, wenn bei einem eingehenden Anruf nur kurzes Drücken des Schlüsselereignisses erkannt wird. - Rufe
Connection.onReject()
an, wenn bei einem eingehenden Anruf langes Drücken des Schlüsselereignisses erkannt wird. - Stummschaltung des
CallAudioState
aktivieren oder deaktivieren.
- Rufen Sie
7.4.2 IEEE 802.11 (Wi-Fi)
Geräteimplementierungen:
- SOLLTEN eine oder mehrere 802.11-Formulare unterstützen.
Wenn Geräteimplementierungen 802.11 unterstützen und die Funktionalität einer Drittanbieter-App zur Verfügung stellen, geschieht Folgendes:
- [C-1-1] MÜSSEN die entsprechende Android API implementieren.
- [C-1-2] MÜSSEN das Hardwarefunktions-Flag
android.hardware.wifi
melden. - [C-1-3] MÜSSEN die Multicast API wie in der SDK-Dokumentation beschrieben implementieren.
- [C-1-4] MÜSSEN Multicast-DNS (mDNS) unterstützen und mDNS-Pakete (224.0.0.251) zu keinem Zeitpunkt des Betriebs filtern, einschließlich:
<ph type="x-smartling-placeholder">
- </ph>
- Auch wenn der Bildschirm nicht aktiv ist.
- Für Android TV-Geräteimplementierungen, auch im Stand-by-Modus.
- [C-1-5] DARF NICHT den API-Methodenaufruf
WifiManager.enableNetwork()
als ausreichenden Hinweis zum Ändern der derzeit aktivenNetwork
behandeln, die standardmäßig für Anwendungstraffic verwendet und vonConnectivityManager
-API-Methoden wiegetActiveNetwork
undregisterDefaultNetworkCallback
zurückgegeben wird. Anders ausgedrückt: Sie können den Internetzugriff, der von einem anderen Netzwerkanbieter zur Verfügung gestellt wird (z.B. mobile Daten), nur dann deaktivieren, wenn sie bestätigen konnten, dass das WLAN den Internetzugriff bereitstellt. - [C-1-6] Es wird dringend empfohlen, beim Aufruf der API-Methode
ConnectivityManager.reportNetworkConnectivity()
den Internetzugriff aufNetwork
neu zu bewerten und zu einem anderen verfügbaren Netzwerk (z.B. mobiler Daten) zu wechseln, sobald die Bewertung ergibt, dass das aktuelleNetwork
keinen Internetzugriff mehr bietet. - [C-SR] Es wird dringend empfohlen, die MAC-Quelladresse und die Sequenznummer der Prüfungsanfrageframes einmal zu Beginn jedes Scans zufällig zu wählen, während die STA getrennt ist.
- Jede Gruppe von Prüfungsanfrageframes, die einen Scan enthalten, SOLLTE eine konsistente MAC-Adresse verwenden (MAC-Adresse sollte NICHT nach der Hälfte des Scans zufällig ausgewählt werden).
- Die Sequenznummer der Prüfungsanfrage sollte wie gewohnt (sequentiell) zwischen den Prüfungsanfragen in einem Scan iterieren.
- Die Sequenznummer der Prüfungsanfrage muss zufällig zwischen der letzten Prüfungsanfrage eines Scans und der ersten Prüfungsanfrage des nächsten Scans liegen.
- [C-SR] werden dringend empfohlen, auch wenn die STA getrennt ist, damit nur die folgenden Elemente in Prüfungsanfrageframes zugelassen werden:
<ph type="x-smartling-placeholder">
- </ph>
- SSID-Parametersatz (0)
- DS-Parametersatz (3)
Wenn Geräteimplementierungen den WLAN-Energiesparmodus gemäß der Definition im IEEE 802.11-Standard unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN den WLAN-Energiesparmodus ausschalten, wenn eine App die
WIFI_MODE_FULL_HIGH_PERF
- oderWIFI_MODE_FULL_LOW_LATENCY
-Sperre über dieWifiManager.createWifiLock()
undWifiManager.WifiLock.acquire()
APIs erhält und die Sperre aktiv ist. - [C-3-2] Die durchschnittliche Umlauflatenz zwischen dem Gerät und einem Zugangspunkt, während sich das Gerät im Modus „WLAN-Sperre mit niedriger Latenz“ (
WIFI_MODE_FULL_LOW_LATENCY
) befindet, MÜSSEN kleiner sein als die Latenz während eines Wi-Fi High Perf Lock-Modus (WIFI_MODE_FULL_HIGH_PERF
). - [C-SR] wird dringend empfohlen, die WLAN-Roundtrip-Latenz zu minimieren, wenn eine Sperre mit niedriger Latenz (
WIFI_MODE_FULL_LOW_LATENCY
) erkannt wird und wirksam wird.
Wenn Geräteimplementierungen WLAN unterstützen und WLAN für die Standortsuche verwenden, gilt Folgendes:
- [C-2-1] MÜSSEN eine Nutzeroption zum Aktivieren/Deaktivieren des Werts bereitstellen, der über die API-Methode
WifiManager.isScanAlwaysAvailable
gelesen wird.
7.4.2.1 Wi-Fi Direct
Geräteimplementierungen:
- SOLLTE Unterstützung für Wi-Fi Direct (Wi-Fi Peer-to-Peer) beinhalten.
Wenn Geräteimplementierungen Wi-Fi Direct unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die entsprechende Android API wie in der SDK-Dokumentation beschrieben implementieren.
- [C-1-2] MÜSSEN die Hardwarefunktion
android.hardware.wifi.direct
melden. - [C-1-3] MUSS den normalen WLAN-Betrieb unterstützen.
- [C-1-4] MUSS die gleichzeitige Verwendung von Wi-Fi und Wi-Fi Direct unterstützen.
7.4.2.2 WLAN: Tunneled Direct Link-Einrichtung
Geräteimplementierungen:
- SOLLTE Unterstützung für Wi-Fi Tunneled Direct Link Setup (TDLS) beinhalten, wie in der Android SDK-Dokumentation beschrieben.
Wenn Geräteimplementierungen die Unterstützung für TDLS und TDLS durch die WiFiManager API aktivieren, geschieht Folgendes:
- [C-1-1] MÜSSEN die Unterstützung für TDLS über
WifiManager.isTdlsSupported
deklarieren. - SOLLTEN TDLS nur verwenden, wenn es möglich UND vorteilhaft ist.
- SOLLTEN heuristisch sein und KEINE TDLS verwenden, wenn die Leistung schlechter ist als die Nutzung des WLAN-Zugangspunkts.
7.4.2.3 WLAN-fähig
Geräteimplementierungen:
- SOLLTE Support für Wi-Fi Aware beinhalten.
Wenn Geräteimplementierungen Wi-Fi Aware unterstützen und die Funktion in Drittanbieter-Apps verfügbar sind, gilt Folgendes:
- [C-1-1] MÜSSEN die
WifiAwareManager
APIs wie in der SDK-Dokumentation beschrieben implementieren. - [C-1-2] MÜSSEN das Funktions-Flag
android.hardware.wifi.aware
deklarieren. - [C-1-3] MUSS die gleichzeitige Verwendung von WLAN und Wi-Fi Aware unterstützen.
- [C-1-4] MÜSSEN die Adresse der Wi-Fi Aware-Verwaltungsoberfläche in Intervallen von maximal 30 Minuten zufällig anordnen, wenn WLAN Aware aktiviert ist.
Wenn Geräteimplementierungen die in Abschnitt 7.4.2.5 beschriebenen Unterstützung für Wi-Fi Aware und die Funktion „WLAN-Standort“ enthalten und diese Funktionen in Drittanbieter-Apps verfügbar sind, gilt Folgendes:
- [C-2-1] MÜSSEN die APIs zur Standorterkennung implementieren: setRangingEnabled, setMinDistanceMm, setMaxDistanceMm und onServiceDiscoveredWithinRange.
7.4.2.4 WLAN-Passpoint
Geräteimplementierungen:
- SOLLTEN Unterstützung für WLAN-Passpoint beinhalten.
Wenn Geräteimplementierungen Wi-Fi Passpoint unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Passpoint-bezogenen
WifiManager
APIs wie in der SDK-Dokumentation beschrieben implementieren. - [C-1-2] MÜSSEN den IEEE 802.11u-Standard unterstützen, insbesondere in Bezug auf die Netzwerkerkennung und -auswahl, z. B. Generic Advertising Service (GAS) und Access Network Query Protocol (ANQP).
Umgekehrt gilt, wenn Geräteimplementierungen keinen Wi-Fi-Passpoint unterstützen:
- [C-2-1] Die Implementierung der Passpoint-bezogenen
WifiManager
APIs MÜSSEN eineUnsupportedOperationException
auslösen.
7.4.2.5 WLAN-Standort (WLAN-Umlaufzeit – RTT)
Geräteimplementierungen:
- SOLLTE Unterstützung für WLAN-Standort beinhalten.
Wenn Geräteimplementierungen die Funktion „WLAN-Standort“ unterstützen und die Funktion in Drittanbieter-Apps verfügbar sind, gilt Folgendes:
- [C-1-1] MÜSSEN die
WifiRttManager
APIs wie in der SDK-Dokumentation beschrieben implementieren. - [C-1-2] MÜSSEN das Funktions-Flag
android.hardware.wifi.rtt
deklarieren. - [C-1-3] MÜSSEN die MAC-Quelladresse für jeden RTT-Burst zufällig anordnen, während die WLAN-Schnittstelle, auf der die RTT ausgeführt wird, keinem Zugangspunkt zugeordnet ist.
7.4.2.6 Wi-Fi Keepalive Offload
Geräteimplementierungen:
- SOLLTEN die Unterstützung für Wi-Fi-Keepalive-Auslagerung umfassen.
Wenn Geräteimplementierungen die Unterstützung für die Wi-Fi-Keepalive-Auslagerung beinhalten und die Funktion für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
-
[C-1-1] MUSS die SocketKeepAlive API unterstützen.
-
[C-1-2] MUSS mindestens drei gleichzeitige Keepalive-Slots über WLAN und mindestens einen Keepalive-Slot über Mobilfunknetz unterstützen.
Wenn Geräteimplementierungen die Wi-Fi-Keepalive-Auslagerung nicht unterstützen, geschieht Folgendes:
- [C-2-1] MUSS
ERROR_UNSUPPORTED
zurückgeben.
7.4.2.7 Wi-Fi Easy Connect (Protokoll für die Gerätebereitstellung)
Geräteimplementierungen:
- SOLLTEN Wi-Fi Easy Connect (DPP) unterstützen.
Wenn Geräteimplementierungen Wi-Fi Easy Connect unterstützen und die Funktion für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- [C-1-1] MÜSSEN die
Settings#ACTION_PROCESS_WIFI_EASY_CONNECT_URI
Intent APIs wie in der SDK-Dokumentation beschrieben implementieren. - [C-1-2] MÜSSEN die Methode WifiManager#isEasyConnectSupported()
true
zurückgeben.
7.4.3 Bluetooth
Wenn Geräteimplementierungen das Bluetooth Audio-Profil unterstützen, gilt Folgendes:
- Erweiterte Audio-Codecs und Bluetooth-Audio-Codecs (z.B. LDAC) sollten unterstützt werden.
Wenn Geräteimplementierungen HFP, A2DP und AVRCP unterstützen, gilt Folgendes:
- SOLLTEN mindestens 5 verbundene Geräte unterstützen.
Wenn in Geräteimplementierungen die Funktion android.hardware.vr.high_performance
deklariert wird, geschieht Folgendes:
- [C-1-1] MÜSSEN Bluetooth 4.2 und Bluetooth LE-Datenlängenerweiterung unterstützen.
Android unterstützt Bluetooth und Bluetooth Low Energy.
Wenn Geräteimplementierungen Bluetooth und Bluetooth Low Energy unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN die relevanten Plattformfunktionen (
android.hardware.bluetooth
bzw.android.hardware.bluetooth_le
) deklarieren und die Plattform-APIs implementieren. - SOLLTEN Sie je nach Gerät entsprechende Bluetooth-Profile wie A2DP, AVRCP, OBEX, HFP usw. implementieren.
Wenn Geräteimplementierungen Bluetooth Low Energy unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN die Hardwarefunktion
android.hardware.bluetooth_le
deklarieren. - [C-3-2] MÜSSEN die auf GATT (allgemeinen Attributprofil) basierenden Bluetooth-APIs aktivieren, wie in der SDK-Dokumentation und unter android.bluetooth beschrieben.
- [C-3-3] MÜSSEN den richtigen Wert für
BluetoothAdapter.isOffloadedFilteringSupported()
melden, um anzugeben, ob die Filterlogik für die ScanFilter API-Klassen implementiert ist. - [C-3-4] MÜSSEN den richtigen Wert für
BluetoothAdapter.isMultipleAdvertisementSupported()
melden, um anzugeben, ob Werbung mit geringem Energieverbrauch unterstützt wird. - SOLLTEN bei der Implementierung der ScanFilter API die Übertragung der Filterlogik auf den Bluetooth-Chipsatz unterstützen.
- SOLLTEN die Übertragung des Batch-Scans auf den Bluetooth-Chipsatz unterstützen.
-
SOLLTEN mehrere Anzeigen mit mindestens 4 Anzeigenflächen unterstützen.
-
[SR] UNBEDINGT EMPFOHLEN, eine Zeitüberschreitung für die auflösbare Privatadresse (RPA) zu implementieren, die maximal 15 Minuten beträgt und die Adresse bei einer Zeitüberschreitung rotieren, um die Privatsphäre der Nutzer zu schützen.
Wenn Geräteimplementierungen Bluetooth LE unterstützen und Bluetooth LE für die Standortsuche verwenden, gilt Folgendes:
- [C-4-1] MÜSSEN eine Funktion zum Aktivieren/Deaktivieren des über die System-API
BluetoothAdapter.isBleScanAlwaysAvailable()
gelesenen Werts bieten.
Wenn Geräteimplementierungen Bluetooth LE und Hörgeräteprofile unterstützen, wie unter Unterstützung von Hörgeräten über Bluetooth LE beschrieben, gilt Folgendes:
- [C-5-1] MÜSSEN für BluetoothAdapter.getProfileProxy(context, listener, BluetoothProfile.HEARING_AID) den Wert
true
zurückgeben.
7.4.4 Nahfeldkommunikation
Geräteimplementierungen:
- SOLLTEN ein Transceiver und die zugehörige Hardware für die Nahfeldkommunikation (NFC) enthalten.
- [C-0-1] MÜSSEN die APIs
android.nfc.NdefMessage
undandroid.nfc.NdefRecord
implementieren, auch wenn sie keine NFC-Unterstützung bieten oder dieandroid.hardware.nfc
-Funktion nicht deklarieren, da die Klassen ein protokollunabhängiges Datendarstellungsformat darstellen.
Wenn Geräteimplementierungen NFC-Hardware enthalten und für Drittanbieter-Apps verfügbar sein sollen, geschieht Folgendes:
- [C-1-1] MÜSSEN die
android.hardware.nfc
-Funktion über dieandroid.content.pm.PackageManager.hasSystemFeature()
-Methode melden. - MUSS NDEF-Nachrichten über die folgenden NFC-Standards lesen und schreiben können:
- [C-1-2] MUSS gemäß der technischen Spezifikation des NFC-Forums (NFCForum-TS-DigitalProtocol-1.0) über die folgenden NFC-Standards als Leser/Schreiber im NFC-Forum fungieren können:
<ph type="x-smartling-placeholder">
- </ph>
- NfcA (ISO14443-3A)
- NFCB (ISO 14443-3B)
- NFCF (JIS X 6319-4)
- IsoDep (ISO 14443-4)
- NFC-Forum Tag-Typen 1, 2, 3, 4, 5 (definiert vom NFC-Forum)
-
[SR] EMPFOHLEN, NDEF-Nachrichten sowie Rohdaten über die folgenden NFC-Standards zu lesen und zu schreiben. Beachten Sie, dass die NFC-Standards zwar als UNBEDINGT EMPFOHLEN angegeben sind, diese jedoch in der Kompatibilitätsdefinition für eine zukünftige Version zu MUSS geändert werden sollen. Diese Standards sind in dieser Version optional, werden aber in zukünftigen Versionen erforderlich sein. Vorhandene und neue Geräte, auf denen diese Android-Version ausgeführt wird, werden SEHR UNBEDINGT GEWÜHNT, diese Anforderungen jetzt zu erfüllen, damit sie auf die zukünftigen Plattform-Releases upgraden können.
-
[C-1-13] MÜSSEN im NFC-Erkennungsmodus alle unterstützten Technologien abfragen.
- Muss sich im NFC-Erkennungsmodus befinden, wenn das Gerät aktiv ist, der Bildschirm aktiv und der Sperrbildschirm entsperrt ist.
- SOLLTEN Barcode und URL (falls codiert) von Thinfilm-NFC-Barcode-Produkten lesen können.
Beachten Sie, dass öffentlich verfügbare Links für die oben genannten Spezifikationen des JIS-, ISO- und NFC-Forums nicht verfügbar sind.
Android unterstützt den NFC-Modus "Host Card Emulation" (HCE).
Wenn Geräteimplementierungen einen HCE-fähigen NFC-Controller-Chipsatz (für NfcA und/oder NfcB) enthalten und das Routing nach Anwendungs-ID (AID) unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN die
android.hardware.nfc.hce
-Funktionskonstante melden. - [C-2-2] MÜSSEN die im Android SDK definierten NFC HCE APIs unterstützen.
Wenn Geräteimplementierungen einen HCE-fähigen NFC-Controller-Chipsatz für NfcF enthalten und die Funktion für Drittanbieteranwendungen implementiert ist, gilt Folgendes:
- [C-3-1] MÜSSEN die
android.hardware.nfc.hcef
-Funktionskonstante melden. - [C-3-2] MÜSSEN die NfcF Card Emulation APIs wie im Android SDK definiert implementieren.
Wenn Geräteimplementierungen allgemeine NFC-Unterstützung wie in diesem Abschnitt beschrieben und MIFARE-Technologien (MIFARE Classic, MIFARE Ultralight, NDEF auf MIFARE Classic) in der Rolle „Reader/Writer“ unterstützen, gilt Folgendes:
- [C-4-1] MÜSSEN die entsprechenden Android-APIs gemäß der Dokumentation des Android SDK implementieren.
- [C-4-2] MÜSSEN die Funktion
com.nxp.mifare
über die Methodeandroid.content.pm.PackageManager.hasSystemFeature
() melden. Beachten Sie, dass dies keine Android-Standardfunktion ist und daher nicht als Konstante in derandroid.content.pm.PackageManager
-Klasse angezeigt wird.
7.4.5 Minimale Netzwerkfähigkeit
Geräteimplementierungen:
- [C-0-1] MÜSSEN Support für eine oder mehrere Formen von Datennetzwerken bereitstellen. Insbesondere MÜSSEN Geräteimplementierungen Unterstützung für mindestens einen Datenstandard beinhalten, der 200 kbit/s oder mehr unterstützen kann. Beispiele für Technologien, die diese Anforderung erfüllen, sind EDGE, HSPA, EV-DO, 802.11g, Ethernet und Bluetooth PAN.
- SOLLTEN auch mindestens einen gängigen Standard für drahtlose Daten, z. B. 802.11 (Wi-Fi), unterstützen, wenn ein physischer Netzwerkstandard (z. B. Ethernet) die primäre Datenverbindung ist.
- KANN mehr als eine Form der Datenverbindung implementieren.
- [C-0-2] MÜSSEN einen IPv6-Netzwerkstack enthalten und IPv6-Kommunikation über die verwalteten APIs (z. B.
java.net.Socket
undjava.net.URLConnection
) sowie die nativen APIs wieAF_INET6
-Sockets unterstützen. - [C-0-3] MUSS IPv6 standardmäßig aktivieren.
- MÜSSEN sicherstellen, dass die IPv6-Kommunikation so zuverlässig ist wie IPv4, zum Beispiel:
<ph type="x-smartling-placeholder">
- </ph>
- [C-0-4] MÜSSEN die IPv6-Verbindungen im Stromsparmodus aufrechterhalten.
- [C-0-5] Die Ratenbegrenzung DARF NICHT dazu führen, dass das Gerät die IPv6-Verbindung in einem IPv6-kompatiblen Netzwerk verliert, dessen RA-Lebensdauer mindestens 180 Sekunden beträgt.
- [C-0-6] MÜSSEN Anwendungen von Drittanbietern eine direkte IPv6-Verbindung zum Netzwerk bereitstellen, wenn sie mit einem IPv6-Netzwerk verbunden sind, ohne dass eine Form der Adress- oder Portübersetzung lokal auf dem Gerät erfolgt. Sowohl verwaltete APIs wie
Socket#getLocalAddress
oderSocket#getLocalPort
) als auch NDK APIs wiegetsockname()
oderIPV6_PKTINFO
MÜSSEN die IP-Adresse und den Port zurückgeben, die tatsächlich zum Senden und Empfangen von Paketen im Netzwerk verwendet werden.
Die erforderliche IPv6-Unterstützung hängt vom Netzwerktyp ab, wie in den folgenden Anforderungen dargestellt.
Wenn Geräteimplementierungen WLAN unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN Dual-Stack- und Nur-IPv6-Betrieb im WLAN unterstützen.
Wenn Geräteimplementierungen Ethernet unterstützen, gilt Folgendes:
- [C-2-1] MUSS Dual-Stack-Betrieb auf Ethernet unterstützen.
Wenn Geräteimplementierungen mobile Daten unterstützen, gilt Folgendes:
- SOLLTE IPv6-Betrieb (nur IPv6 und möglicherweise Dual-Stack) auf Mobilfunk unterstützen.
Wenn Geräteimplementierungen mehr als einen Netzwerktyp unterstützen (z.B. WLAN und mobile Daten), gilt Folgendes:
- [C-3-1] MÜSSEN die oben genannten Anforderungen für jedes Netzwerk gleichzeitig erfüllen, wenn das Gerät gleichzeitig mit mehr als einem Netzwerktyp verbunden ist.
7.4.6 Synchronisierungseinstellungen
Geräteimplementierungen:
- [C-0-1] MÜSSEN die automatische Mastersynchronisierung standardmäßig aktiviert sein, damit die Methode
getMasterSyncAutomatically()
den Wert „true“ zurückgibt.
7.4.7 Datensparmodus
Wenn Geräteimplementierungen eine getaktete Verbindung beinhalten, gilt Folgendes:
- [SR] UNBEDINGT EMPFOHLEN, den Datensparmodus bereitzustellen.
Wenn Geräteimplementierungen den Datensparmodus bieten, ist Folgendes möglich:
- [C-1-1] MUSS alle APIs der
ConnectivityManager
-Klasse unterstützen, wie in der SDK-Dokumentation beschrieben. - [C-1-2] MÜSSEN in den Einstellungen eine Benutzeroberfläche bereitstellen, die den
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
-Intent verarbeitet und es Nutzern ermöglicht, Anwendungen zur Zulassungsliste hinzuzufügen oder von ihr zu entfernen.
Wenn Geräteimplementierungen den Datensparmodus nicht unterstützen, kann das folgende Gründe haben:
- [C-2-1] MUSS den Wert
RESTRICT_BACKGROUND_STATUS_DISABLED
fürConnectivityManager.getRestrictBackgroundStatus()
zurückgeben. - [C-2-2] DÜRFEN KEINE
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
übertragen. - [C-2-3] MÜSSEN über eine Aktivität verfügen, die den
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
-Intent verarbeitet, diese jedoch KANN als Leerlauf implementiert werden.
7.4.8 Secure Elemente
Wenn Geräteimplementierungen Open Mobile API-fähige sichere Elemente unterstützen und für Drittanbieter-Apps verfügbar machen, geschieht Folgendes:
- [C-1-1] MÜSSEN die verfügbaren Secure Elements-Leser aufzählen, wenn die Methode
android.se.omapi.SEService.getReaders()
aufgerufen wird.
7.5 Kameras
Wenn eine Geräteimplementierung mindestens eine Kamera umfasst, gilt Folgendes:
- [C-1-1] MUSS das Funktions-Flag
android.hardware.camera.any
deklarieren. - [C-1-2] MÜSSEN in einer Anwendung gleichzeitig 3 RGBA_8888-Bitmaps zugewiesen werden, die der Größe der Bilder entsprechen, die der Kamerasensor mit der höchsten Auflösung des Geräts erzeugt, während die Kamera für eine einfache Vorschau und dennoch für Aufnahmen geöffnet ist.
- [C-1-3] MÜSSEN sicherstellen, dass die vorinstallierte Standard-Kamera-App, die die Intents
MediaStore.ACTION_IMAGE_CAPTURE
,MediaStore.ACTION_IMAGE_CAPTURE_SECURE
oderMediaStore.ACTION_VIDEO_CAPTURE
verarbeitet, dafür verantwortlich ist, den Nutzerstandort in den Bildmetadaten zu entfernen, bevor er an die empfangende App gesendet wird, wenn die empfangende App nicht überACCESS_FINE_LOCATION
verfügt.
7.5.1 Rückkamera
Eine Kamera auf der Rückseite ist eine Kamera an der Seite des Geräts gegenüber dem Display. d. h., es werden wie mit einer herkömmlichen Kamera Szenen am anderen Ende des Geräts erfasst.
Geräteimplementierungen:
- SOLLTE eine Rückkamera enthalten.
Wenn Geräteimplementierungen mindestens eine Kamera auf der Rückseite enthalten, ist Folgendes zu beachten:
- [C-1-1] MÜSSEN die Funktions-Flags
android.hardware.camera
undandroid.hardware.camera.any
melden. - [C-1-2] MUSS eine Auflösung von mindestens 2 Megapixel haben.
- Im Kameratreiber sollte entweder Hardware-Autofokus oder Software-Autofokus implementiert sein (für die Anwendungssoftware transparent).
- KÖNNEN mit Fixfokus oder EDOF-Hardware (erweiterte Tiefenschärfe) ausgestattet sein.
- KANN einen Blitz enthalten.
Wenn die Kamera einen Blitz hat:
- [C-2-1] Die Blitzlampe DARF NICHT eingeschaltet werden, solange eine
android.hardware.Camera.PreviewCallback
-Instanz auf einer Kameravorschauoberfläche registriert ist, es sei denn, die Anwendung hat den Blitz explizit durch Aktivieren der AttributeFLASH_MODE_AUTO
oderFLASH_MODE_ON
einesCamera.Parameters
-Objekts aktiviert. Diese Einschränkung gilt nicht für die integrierte Systemkamera-App des Geräts, sondern nur für Drittanbieter-Apps, dieCamera.PreviewCallback
verwenden.
7.5.2 Frontkamera
Eine Frontkamera ist eine Kamera, die sich auf derselben Seite des Geräts wie das Display befindet. d. h. eine Kamera, die in der Regel zum Abbilden des Nutzers verwendet wird, z. B. für Videokonferenzen und ähnliche Anwendungen.
Geräteimplementierungen:
- KANN eine Frontkamera enthalten.
Wenn Geräteimplementierungen mindestens eine Frontkamera umfassen, ist Folgendes zu beachten:
- [C-1-1] MÜSSEN die Funktions-Flags
android.hardware.camera.any
undandroid.hardware.camera.front
melden. - [C-1-2] MUSS mindestens eine Auflösung von mindestens VGA (640 x 480 Pixel) haben.
- [C-1-3] DÜRFEN KEINE Frontkamera als Standard für die Camera API verwenden und die API DARF NICHT so konfiguriert werden, dass eine Frontkamera als Standardrückkamera behandelt wird, selbst wenn sie die einzige Kamera des Geräts ist.
- [C-1-4] Die Kameravorschau MUSS horizontal relativ zur von der App angegebenen Ausrichtung gespiegelt werden, wenn die aktuelle Anwendung ausdrücklich das Drehen des Kameradisplays über einen Aufruf der Methode
android.hardware.Camera.setDisplayOrientation()
angefordert hat. Umgekehrt muss die Vorschau entlang der horizontalen Standardachse des Geräts gespiegelt werden, wenn die aktuelle Anwendung das Drehen des Kameradisplays nicht explizit über einen Aufruf der Methodeandroid.hardware.Camera.setDisplayOrientation()
anfordert. - [C-1-5] DÜRFEN NICHT die endgültigen aufgenommenen Standbilder oder Videostreams spiegeln, die an Anwendungsrückrufe zurückgegeben oder in den Medienspeicher übergeben werden.
- [C-1-6] MÜSSEN das im PostView angezeigte Bild auf dieselbe Weise spiegeln wie im Bildstream der Kameravorschau.
- KÖNNEN Funktionen wie Autofokus, Blitz usw. für Rückkameras enthalten, wie in Abschnitt 7.5.1 beschrieben.
Wenn Geräteimplementierungen vom Nutzer gedreht werden können (z. B. automatisch über einen Beschleunigungsmesser oder manuell über Nutzereingabe):
- [C-2-1] Die Kameravorschau MUSS horizontal relativ zur aktuellen Ausrichtung des Geräts gespiegelt werden.
7.5.3 Externe Kamera
Geräteimplementierungen:
- KÖNNEN Support für eine externe Kamera anbieten, die nicht unbedingt immer angeschlossen ist.
Wenn Geräteimplementierungen eine externe Kamera unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Funktions-Flags für die Plattform
android.hardware.camera.external
undandroid.hardware camera.any
deklarieren. - [C-1-2] MUSS die USB-Videoklasse (UVC 1.0 oder höher) unterstützen, wenn die externe Kamera über den USB-Hostport verbunden wird.
- [C-1-3] MÜSSEN die CTS-Tests der Kamera mit einem angeschlossenen physischen Kameragerät bestehen. Details zu den CTS-Tests für Kameras finden Sie unter source.android.com.
- SOLLTEN Videokomprimierungen wie MJPEG unterstützen, um die Übertragung von qualitativ nicht codierten Streams (rohe oder unabhängig komprimierte Bildstreams) zu ermöglichen.
- KANN mehrere Kameras unterstützen.
- KANN die kamerabasierte Videocodierung unterstützen.
Wenn die kamerabasierte Videocodierung unterstützt wird:
- [C-2-1] Ein gleichzeitiger, nicht codierter / MJPEG-Stream (QVGA oder höhere Auflösung) MUSS für die Geräteimplementierung zugänglich sein.
7.5.4 Verhalten der Camera API
Android umfasst zwei API-Pakete für den Zugriff auf die Kamera, das neuere android.hardware.camera2-API ermöglicht die Kamerasteuerung auf niedrigerer Ebene in der App, einschließlich effizienter Zero-Copy-Burst-/Streaming-Abläufe und Steuerungen pro Frame für Belichtung, Verstärkung, Weißabgleichzunahme, Farbkonvertierung, Geräuschunterdrückung, Schärfe und mehr.
Das ältere API-Paket android.hardware.Camera
ist in Android 5.0 als veraltet gekennzeichnet, sollte jedoch weiterhin für Apps zur Verfügung stehen. Bei Implementierungen von Android-Geräten MÜSSEN die API wie in diesem Abschnitt und im Android SDK beschrieben weiterhin unterstützt werden.
Alle Funktionen, die in den veralteten Versionen der Klasse „android.hardware.Camera“ und dem neueren Paket „android.hardware.camera2“ vorkommen, MÜSSEN in beiden APIs gleichwertige Leistung und Qualität aufweisen. Beispielsweise MÜSSEN bei gleichwertigen Einstellungen die Geschwindigkeit und Genauigkeit des Autofokus identisch sein und die Qualität der aufgenommenen Bilder MÜSSEN gleich sein. Funktionen, die von der unterschiedlichen Semantik der beiden APIs abhängen, müssen nicht unbedingt eine übereinstimmende Geschwindigkeit oder Qualität haben, SOLLTEN aber so genau wie möglich übereinstimmen.
Bei Geräteimplementierungen MÜSSEN für alle verfügbaren Kameras die folgenden Verhaltensweisen für die kamerabezogenen APIs implementiert werden. Geräteimplementierungen:
- [C-0-1] MÜSSEN für Vorschaudaten, die App-Callbacks zur Verfügung gestellt werden,
android.hardware.PixelFormat.YCbCr_420_SP
verwenden, wenn eine Appandroid.hardware.Camera.Parameters.setPreviewFormat(int)
nie aufgerufen hat. - [C-0-2] MÜSSEN weiterhin im NV21-Codierungsformat vorliegen, wenn eine Anwendung eine
android.hardware.Camera.PreviewCallback
-Instanz registriert, das System dieonPreviewFrame()
-Methode aufruft und das Vorschauformat YCbCr_420_SP ist. Die Daten im Byte[] werden anonPreviewFrame()
übergeben. Das heißt, NV21 MUSS die Standardeinstellung sein. - [C-0-3] MUSS das YV12-Format (wie durch die Konstante
android.graphics.ImageFormat.YV12
angegeben) für die Kameravorschau der Front- und Rückkameras fürandroid.hardware.Camera
unterstützen. Der Hardware-Videoencoder und die Kamera können jedes native Pixelformat verwenden. Die Geräteimplementierung muss jedoch die Konvertierung in YV12 unterstützen. - [C-0-4] MUSS die Formate
android.hardware.ImageFormat.YUV_420_888
undandroid.hardware.ImageFormat.JPEG
als Ausgaben über dieandroid.media.ImageReader
API fürandroid.hardware.camera2
-Geräte unterstützen, die dieREQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
-Funktion inandroid.request.availableCapabilities
bewerben. - [C-0-5] MÜSSEN weiterhin die vollständige Camera API implementieren, die in der Android SDK-Dokumentation enthalten ist, unabhängig davon, ob das Gerät über Hardware-Autofokus oder andere Funktionen verfügt. Kameras ohne Autofokus MÜSSEN beispielsweise alle registrierten
android.hardware.Camera.AutoFocusCallback
-Instanzen aufrufen, auch wenn dies für eine Kamera ohne Autofokus nicht relevant ist. Hinweis: Dies gilt für Frontkameras. Auch wenn die meisten Frontkameras beispielsweise keinen Autofokus unterstützen, MÜSSEN die API-Callbacks wie beschrieben "gefälscht" werden. - [C-0-6] MÜSSEN jeden Parameternamen erkennen und berücksichtigen, der in den Klassen
android.hardware.Camera.Parameters
undandroid.hardware.camera2.CaptureRequest
als Konstante definiert ist. Umgekehrt DÜRFEN Geräteimplementierungen keine Stringkonstanten, die an die Methodeandroid.hardware.Camera.setParameters()
übergeben werden, berücksichtigen oder erkennen, außer den, die als Konstanten in derandroid.hardware.Camera.Parameters
dokumentiert sind. Das heißt, Geräteimplementierungen MÜSSEN alle standardmäßigen Kameraparameter unterstützen, wenn dies die Hardware zulässt. Benutzerdefinierte Kameraparametertypen DÜRFEN NICHT unterstützt werden. Beispielsweise MÜSSEN Geräteimplementierungen, die die Bilderfassung mit HDR-Bildverarbeitungstechniken unterstützen, den KameraparameterCamera.SCENE_MODE_HDR
unterstützen. - [C-0-7] MÜSSEN die korrekte Unterstützung für die
android.info.supportedHardwareLevel
-Eigenschaft wie im Android SDK beschrieben und die entsprechenden Flags für Framework-Funktionen melden. - [C-0-8] MÜSSEN auch die individuellen Kamerafunktionen von
android.hardware.camera2
über die Propertyandroid.request.availableCapabilities
und die entsprechenden Funktions-Flags deklarieren. MÜSSEN das Funktions-Flag definiert werden, wenn eine der angeschlossenen Kamerageräte diese Funktion unterstützt. - [C-0-9] MÜSSEN den Intent
Camera.ACTION_NEW_PICTURE
übertragen, sobald mit der Kamera ein neues Bild aufgenommen und das Bild zum Medienspeicher hinzugefügt wurde. - [C-0-10] MÜSSEN den Intent
Camera.ACTION_NEW_VIDEO
übertragen, sobald die Kamera ein neues Video aufzeichnet und das Bild zum Medienspeicher hinzugefügt wurde. - [C-0-11] MÜSSEN alle Kameras über die eingestellte
android.hardware.Camera
API und auch über dieandroid.hardware.camera2
API zugänglich sein. - [C-SR] Bei Geräten mit mehreren RGB-Kameras, die in die gleiche Richtung ausgerichtet sind, wird dringend empfohlen, ein logisches Kameragerät zu unterstützen, das die Funktion
CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
auflistet. Es enthält alle RGB-Kameras, die in diese Richtung gerichtet sind, als physische Untergeräte.
Wenn Geräteimplementierungen eine proprietäre Kamera-API für Drittanbieter-Apps bereitstellen, gilt Folgendes:
- [C-1-1] MÜSSEN eine solche Kamera-API mithilfe der
android.hardware.camera2
API implementieren. - KANN Anbieter-Tags und/oder Erweiterungen für die
android.hardware.camera2
API bereitgestellt werden.
7.5.5 Kameraausrichtung
Wenn Geräte eine Front- oder Rückkamera haben, z. B. eine oder mehrere Kameras:
- [C-1-1] MÜSSEN so ausgerichtet werden, dass die lange Seite der Kamera mit der des Bildschirms übereinstimmt. Wenn das Gerät also in Querformat gehalten wird, MÜSSEN Kameras Bilder im Querformat aufnehmen. Dies gilt unabhängig von der natürlichen Ausrichtung des Geräts. Das heißt, sie gilt sowohl für primäre Geräte im Querformat als auch für primäre Geräte im Hochformat.
7.6 Arbeitsspeicher und Datenspeicher
7.6.1 Mindestanforderungen an Arbeitsspeicher und Speicherplatz
Geräteimplementierungen:
- [C-0-1] MÜSSEN einen Download-Manager bereitstellen, mit dem Anwendungen Datendateien herunterladen dürfen, und sie MÜSSEN in der Lage sein, einzelne Dateien mit einer Größe von mindestens 100 MB in den standardmäßigen Cache-Speicherort herunterzuladen.
7.6.2 Freigegebener Anwendungsspeicher
Geräteimplementierungen:
- [C-0-1] MÜSSEN Ihnen Speicher anbieten, der von Apps gemeinsam genutzt werden kann. Dies wird oft als „freigegebener externer Speicher“ oder „freigegebener Anwendungsspeicher“ bezeichnet. oder durch den Linux-Pfad „/sdcard“ auf dem es bereitgestellt ist.
- [C-0-2] MÜSSEN mit freigegebenem Speicher konfiguriert werden, d. h. standardmäßig bereitgestellt werden, unabhängig davon, ob der Speicher in einer internen Speicherkomponente oder auf einem Wechselmedium (z. B. Secure Digital-Kartensteckplatz) implementiert ist.
- [C-0-3] MÜSSEN den freigegebenen Speicher der Anwendung direkt unter dem Linux-Pfad
sdcard
bereitstellen oder einen symbolischen Linux-Link vonsdcard
zum tatsächlichen Bereitstellungspunkt einfügen. - [C-0-4] MÜSSEN die Berechtigung
android.permission.WRITE_EXTERNAL_STORAGE
für diesen freigegebenen Speicher wie im SDK dokumentiert durchgesetzt werden. - [C-0-5] MUSS standardmäßig den eingeschränkten Speicher für alle Apps aktivieren, die auf API-Level 29 oder höher ausgerichtet sind, von folgenden Ausnahmen ab:
<ph type="x-smartling-placeholder">
- </ph>
- wenn die App installiert wurde, bevor das Gerät auf API-Level 29 aktualisiert wurde, unabhängig von der Ziel-API der App.
- Die App hat in ihrem Manifest
android:requestLegacyExternalStorage="true"
angefordert. - Der App wird die Berechtigung
android.permission.WRITE_MEDIA_STORAGE
gewährt.
- [C-0-6] MÜSSEN durchsetzen, dass Apps mit aktiviertem beschränktem Speicher keinen direkten Dateisystemzugriff auf Dateien außerhalb ihrer anwendungsspezifischen Verzeichnisse haben, wie sie von
Context
API-Methoden wieContext.getExternalFilesDirs()
,Context.getExternalCacheDirs()
,Context.getExternalMediaDirs()
undContext.getObbDirs()
zurückgegeben werden. - [C-0-7] MÜSSEN Standortmetadaten wie GPS-EXIF-Tags, die in Mediendateien gespeichert sind, entfernen, wenn über
MediaStore
auf diese Dateien zugegriffen wird, es sei denn, die aufrufende App hat die BerechtigungACCESS_MEDIA_LOCATION
.
Geräteimplementierungen KÖNNEN die oben genannten Anforderungen erfüllen, wenn eine der folgenden Voraussetzungen erfüllt ist:
- Vom Nutzer zugänglicher Wechselspeicher, z. B. ein SD-Kartensteckplatz (Secure Digital).
- Ein Teil des internen (nicht entfernbaren) Speichers, wie er im Android Open Source Project (AOSP) implementiert ist.
Wenn auf Geräten Wechseldatenträger verwendet werden, um die oben genannten Anforderungen zu erfüllen, gilt Folgendes:
- [C-1-1] MÜSSEN eine Toast- oder Pop-up-Benutzeroberfläche implementieren, die den Nutzer warnt, wenn sich kein Speichermedium im Slot befindet.
- [C-1-2] MÜSSEN Sie ein Speichermedium im Format FAT (z.B. eine SD-Karte) beifügen oder auf der Verpackung und anderem Material, das zum Zeitpunkt des Kaufs verfügbar war, nachweisen, dass das Speichermedium separat erworben werden muss.
Wenn Geräteimplementierungen einen Teil des nicht entfernbaren Speichers nutzen, um die oben genannten Anforderungen zu erfüllen, gilt Folgendes:
- SOLLTEN die AOSP-Implementierung des internen freigegebenen Speichers der Anwendung verwenden.
- KANN den Speicherplatz mit den privaten Daten der Anwendung teilen.
Wenn Geräteimplementierungen mehrere Pfade zum gemeinsamen Speicher umfassen (z. B. einen SD-Kartensteckplatz und einen gemeinsamen internen Speicher), gilt Folgendes:
- [C-2-1] MUSS nur vorinstallierten und privilegierten Android-Apps mit der Berechtigung
WRITE_MEDIA_STORAGE
Schreibzugriff auf den sekundären externen Speicher gewähren, es sei denn, sie schreiben in ihre paketspezifischen Verzeichnisse oder innerhalb desURI
, der durch Auslösen des IntentsACTION_OPEN_DOCUMENT_TREE
zurückgegeben wird. - [C-2-2] MÜSSEN voraussetzen, dass der direkte Zugriff, der mit der Berechtigung
android.permission.WRITE_MEDIA_STORAGE
verknüpft ist, nur für für Nutzer sichtbare Apps gewährt wird, wenn auch die Berechtigungandroid.permission.WRITE_EXTERNAL_STORAGE
gewährt wurde. - [SR] DRINGEND, dass vorinstallierte und privilegierte Android-Apps öffentliche APIs wie
MediaStore
verwenden, um mit Speichergeräten zu interagieren, anstatt sich auf den direkten Zugriff vonandroid.permission.WRITE_MEDIA_STORAGE
zu verlassen.
Wenn Geräteimplementierungen einen USB-Port mit Unterstützung für den USB-Peripheriemodus haben, gilt Folgendes:
- [C-3-1] MÜSSEN einen Mechanismus bereitstellen, mit dem von einem Hostcomputer aus auf die Daten im freigegebenen Anwendungsspeicher zugegriffen werden kann.
- SOLLTEN Inhalte aus beiden Speicherpfaden transparent über den Medienscanner-Dienst von Android und über
android.provider.MediaStore
verfügbar gemacht werden. - KANN USB-Massenspeicher verwenden, sollte jedoch das Media Transfer Protocol verwenden, um diese Anforderung zu erfüllen.
Wenn Geräteimplementierungen einen USB-Port mit USB-Peripheriemodus haben und Media Transfer Protocol unterstützen, gilt Folgendes:
- SOLLTEN mit dem Android-MTP-Referenzhost Android File Transfer kompatibel sein.
- SOLLTE eine USB-Geräteklasse von 0x00 melden.
- MÜSSEN den Namen „MTP“ für die USB-Schnittstelle melden.
7.6.3 Verwendbare Speicher
Wenn es sich um ein Mobilgerät handelt, bei dem es sich nicht um ein Fernsehgerät handelt, gilt Folgendes:
- [SR] WIRD DRINGEND empfohlen, den nutzbaren Speicher an einem langfristigen, stabilen Standort zu implementieren, da das versehentliche Trennen der Verbindung zu Datenverlusten oder -beschädigungen führen kann.
Wenn sich der Anschluss für das austauschbare Speichergerät an einem langfristigen stabilen Standort befindet, z. B. im Akkufach oder einer anderen Schutzabdeckung, ist Folgendes möglich:
- [SR] UNBEDINGT EMPFOHLEN, akzeptablen Speicher zu implementieren.
7.7 USB
Wenn Geräteimplementierungen einen USB-Port haben, ist Folgendes zu beachten:
- SOLLTEN den USB-Peripheriemodus und den USB-Hostmodus unterstützen.
7.7.1 USB-Peripheriemodus
Wenn Geräte einen USB-Port enthalten, der den Peripheriemodus unterstützt:
- [C-1-1] Der Port MUSS mit einem USB-Host mit einem Standard-USB-Port des Typs A oder Typ C verbunden werden können.
- [C-1-2] MÜSSEN den korrekten Wert von
iSerialNumber
in der USB-Standard-Gerätebeschreibung überandroid.os.Build.SERIAL
melden. - [C-1-3] MÜSSEN Ladegeräte mit 1,5 A und 3,0 A nach Typ-C-Standardwiderstand erkennen und MÜSSEN Änderungen in der Werbung erkennen, wenn sie Typ-C-USB-Geräte unterstützen.
- [SR] Am Anschluss SOLLTEN Sie micro-B, micro-AB oder einen USB-Typ-C-Anschluss verwenden. Bestehende und neue Android-Geräte werden DRINGEND empfohlen, diese Anforderungen zu erfüllen, damit ein Upgrade auf die zukünftigen Plattform-Releases möglich ist.
- [SR] Der Anschluss sollte sich entsprechend der natürlichen Ausrichtung auf der Unterseite des Geräts befinden oder die Softwarebildschirmdrehung für alle Apps aktivieren (einschließlich des Startbildschirms), sodass der Bildschirm korrekt dargestellt wird, wenn das Gerät am Anschluss unten ausgerichtet ist. Bestehenden und neuen Android-Geräten wird dringend empfohlen, diese Anforderungen zu erfüllen, damit ein Upgrade auf zukünftige Plattform-Releases möglich ist.
- [SR] SOLLTEN die Nutzung von 1,5 A bei HS-Piepton und Traffic unterstützen, wie in der Spezifikation für das Laden von USB-Batterien, Version 1.2 beschrieben. Bestehende und neue Android-Geräte werden DRINGEND empfohlen, diese Anforderungen zu erfüllen, damit ein Upgrade auf die zukünftigen Plattform-Releases möglich ist.
- [SR] DRINGEND, keine proprietären Lademethoden zu unterstützen, bei denen die Vbus-Spannung über die Standardniveaus hinaus geändert wird, oder die Rollen der Senke/Quelle so ändern, dass dies zu Interoperabilitätsproblemen mit den Ladegeräten oder Geräten führen kann, die die standardmäßigen USB-Power Delivery-Methoden unterstützen. Dies wird zwar als „Dringend empfohlen“ bezeichnet, in zukünftigen Android-Versionen benötigen wir jedoch möglicherweise alle Typ-C-Geräte, um die vollständige Interoperabilität mit standardmäßigen Typ-C-Ladegeräten zu ermöglichen.
- [SR] WIRD UNBEDINGT EMPFOHLEN, Power Delivery für den Austausch von Daten- und Stromversorgungsrollen zu unterstützen, wenn USB-Typ-C-USB- und USB-Hostmodus unterstützt werden.
- SOLLTEN Power Delivery für Hochspannungsladevorgänge und alternative Modi wie Display-out unterstützen.
- SOLLTEN die Android Open Accessory (AOA) API und die Spezifikation implementieren, wie in der Android SDK-Dokumentation beschrieben.
Wenn Geräteimplementierungen einen USB-Port umfassen und die AOA-Spezifikation implementieren, gilt Folgendes:
- [C-2-1] MÜSSEN die Unterstützung für die Hardwarefunktion
android.hardware.usb.accessory
erklären. - [C-2-2] Die USB-Massenspeicherklasse MUSS den String „android“ enthalten. am Ende der Schnittstellenbeschreibung
iInterface
des USB-Massenspeichers
7.7.2 USB-Hostmodus
Wenn Geräteimplementierungen einen USB-Port enthalten, der den Hostmodus unterstützt, gilt Folgendes:
- [C-1-1] MÜSSEN die Android-USB-Host-API wie im Android SDK dokumentiert implementieren und die Unterstützung für die Hardwarefunktion
android.hardware.usb.host
deklarieren. - [C-1-2] MÜSSEN Support für den Anschluss standardmäßiger USB-Peripheriegeräte implementieren. Sie MÜSSEN also eine der folgenden Aktionen ausführen:
<ph type="x-smartling-placeholder">
- </ph>
- Sie haben einen Typ-C-Anschluss auf dem Gerät oder werden mit einem oder mehreren Kabeln geliefert, die einen proprietären Port des Geräts an einen Standard-USB-Typ-C-Anschluss (USB Typ-C-Gerät) anpassen.
- Das Gerät muss über ein Gerät vom Typ A verfügen oder mit einem oder mehreren Kabeln für einen proprietären On-Device-Port an einen Standard-USB-Typ-A-Port angepasst werden.
- einen Micro-AB-Port auf dem Gerät haben, der mit einem Kabel geliefert werden sollte, das für einen Standard-Typ-A-Port geeignet ist
- [C-1-3] DÜRFEN NICHT mit einem Adapter geliefert werden, der von USB Typ-A- oder Micro-AB-Ports in einen Typ-C-Anschluss (Buchse) umgewandelt wird.
- [C-SR] wird dringend empfohlen, die USB-Audioklasse zu implementieren, wie in der Android SDK-Dokumentation beschrieben.
- SOLLTEN das Laden des verbundenen USB-Peripheriegeräts im Hostmodus unterstützen. mit einer Stromquelle von mindestens 1,5 A, wie im Abschnitt „Beendigungsparameter“ der USB Typ-C-Kabel- und Verbindungsspezifikation Version 1.2 für USB-Typ-C-Anschlüsse oder mit dem CDP-Ausgangsstrombereich angegeben, wie in den Spezifikationen zum Laden von USB-Batterien, Version 1.2 für Micro-AB-Anschlüsse angegeben.
- SOLLTEN USB-Typ-C-Standards implementieren und unterstützen.
Wenn Geräteimplementierungen einen USB-Port umfassen, der den Hostmodus und die USB-Audioklasse unterstützt, gilt Folgendes:
- [C-2-1] MUSS die USB HID-Klasse unterstützen.
- [C-2-2] MUSS die Erkennung und Zuordnung der folgenden HID-Datenfelder, die in den USB-HID-Nutzungstabellen und der Anfrage zur Nutzung von Sprachbefehlen angegeben sind, den
KeyEvent
-Konstanten unterstützen, wie unten angegeben:- Nutzungsseite (0xC) Nutzungs-ID (0x0CD):
KEYCODE_MEDIA_PLAY_PAUSE
- Nutzungsseite (0xC) Nutzungs-ID (0x0E9):
KEYCODE_VOLUME_UP
- Nutzungsseite (0xC) Nutzungs-ID (0x0EA):
KEYCODE_VOLUME_DOWN
- Nutzungsseite (0xC) Nutzungs-ID (0x0CF):
KEYCODE_VOICE_ASSIST
- Nutzungsseite (0xC) Nutzungs-ID (0x0CD):
Wenn Geräteimplementierungen einen USB-Port umfassen, der den Hostmodus und das Storage Access Framework (SAF) unterstützt, gilt Folgendes:
- [C-3-1] MÜSSEN alle remote verbundenen MTP-Geräte (Media Transfer Protocol) erkennen und ihre Inhalte über die Intents
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
undACTION_CREATE_DOCUMENT
zugänglich machen.
Wenn Geräte einen USB-Port enthalten, der den Hostmodus und USB Typ-C unterstützt, gilt Folgendes:
- [C-4-1] MÜSSEN die Funktion „Dual-Rollen-Port“ gemäß der Definition in der USB Typ-C-Spezifikation (Abschnitt 4.5.1.3.3) implementieren.
- [SR] WIRD UNBEDINGT zur Unterstützung von DisplayPort empfohlen, SOLLTEN USB SuperSpeed-Datenübertragungsraten unterstützen und wird dringend empfohlen, Power Delivery für das Austauschen von Daten und Power-Rollen zu unterstützen.
- [SR] WIRD DRINGEND empfohlen, den Audioadapter-Zubehörmodus nicht zu unterstützen, wie in Anhang A der Version 1.2 der USB Typ-C-Kabel- und Verbindungsspezifikation beschrieben.
- SOLLTE das Try.*-Modell implementieren, das für den Formfaktor des Geräts am besten geeignet ist. Auf einem Handheld sollte beispielsweise das Modell „Try.SNK“ implementiert werden.
7.8 Audio
7.8.1 Mikrofon
Wenn Geräte ein Mikrofon enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN die
android.hardware.microphone
-Funktionskonstante melden. - [C-1-2] MUSS die Anforderungen in Abschnitt 5.4 erfüllen.
- [C-1-3] MUSS die Anforderungen an die Audiolatenz in Abschnitt 5.6 erfüllen.
- [SR] wird dringend empfohlen, die Nah-Ultraschallaufzeichnung wie in Abschnitt 7.8.3 beschrieben zu unterstützen.
Wenn Geräteimplementierungen kein Mikrofon enthalten, geschieht Folgendes:
- [C-2-1] DARF NICHT die
android.hardware.microphone
-Funktionskonstante melden. - [C-2-2] MÜSSEN die Audio-Aufnahme-API gemäß Abschnitt 7 mindestens im managementfreien Modus implementieren.
7.8.2 Audioausgabe
Wenn Geräteimplementierungen einen Lautsprecher oder einen Audio-/Multimedia-Ausgabeport für ein Peripheriegerät für die Audioausgabe, z. B. eine 3,5-mm-Audiobuchse mit 4 Kabeln oder einen USB-Hostmodus-Port mit USB-Audioklasse, enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN die
android.hardware.audio.output
-Funktionskonstante melden. - [C-1-2] MUSS die Anforderungen an die Audiowiedergabe in Abschnitt 5.5 erfüllen.
- [C-1-3] MUSS die Anforderungen an die Audiolatenz in Abschnitt 5.6 erfüllen.
- [SR] WIRD DRINGEND zur Unterstützung der beinahe-Ultraschallwiedergabe empfohlen, wie in Abschnitt 7.8.3 beschrieben.
Wenn Geräteimplementierungen keinen Lautsprecher- oder Audioausgabeport umfassen, ist Folgendes zu beachten:
- [C-2-1] DÜRFEN NICHT die Funktion
android.hardware.audio.output
melden. - [C-2-2] MÜSSEN die APIs zur Audioausgabe zumindest als managementfrei implementieren.
In diesem Abschnitt bezieht sich ein „Ausgabeport“ ist eine physische Schnittstelle, z. B. eine 3,5-mm-Audiobuchse, einen HDMI-Port oder einen USB-Hostmodus-Port mit USB-Audioklasse. Die Unterstützung der Audioausgabe über Funkprotokolle wie Bluetooth, WLAN oder Mobilfunknetze umfasst keinen „Ausgabeport“.
7.8.2.1 Analoge Audioanschlüsse
Damit die Kompatibilität mit den Headsets und anderem Audiozubehör über den 3, 5-mm-Audiostecker im gesamten Android-System funktioniert, müssen Geräteimplementierungen einen oder mehrere analoge Audioanschlüsse enthalten:
- [C-SR] Es wird dringend empfohlen, mindestens einen der Audioports als 3,5-mm-Audioanschluss mit vier Kabeln anzugeben.
Geräteimplementierungen mit einem 3, 5-mm-Audioanschluss mit 4 Kabeln:
- [C-1-1] MÜSSEN die Audiowiedergabe über Stereo-Kopfhörer und Stereo-Headsets mit Mikrofon unterstützen.
- [C-1-2] MUSS TRRS-Audiostecker mit CTIA-Pin-out-Reihenfolge unterstützen.
- [C-1-3] MUSS die Erkennung und Zuordnung zu den Keycodes für die folgenden drei Bereiche der entsprechenden Impedanz zwischen dem Mikrofon und den Erdleitern am Audiostecker unterstützen:
<ph type="x-smartling-placeholder">
- </ph>
-
Max. 70 Ohm:
KEYCODE_HEADSETHOOK
-
210–290 Ohm:
KEYCODE_VOLUME_UP
-
360–680 Ohm:
KEYCODE_VOLUME_DOWN
-
Max. 70 Ohm:
- [C-1-4] MÜSSEN bei einem Steckerstecker
ACTION_HEADSET_PLUG
auslösen, aber erst, wenn alle Kontakte am Stecker die relevanten Segmente an der Buchse berühren. - [C-1-5] MUSS mindestens 150 mV ± 10% der Ausgangsspannung über eine 32-Ohm-Lautsprecherimpedanz liefern können.
- [C-1-6] MÜSSEN über eine Mikrofonspannung zwischen 1,8 und 2,9 V verfügen.
- [C-1-7] MUSS den folgenden Bereich der äquivalenten Impedanz zwischen dem Mikrofon und den Erdleitern am Audiostecker erkennen und dem Schlüsselcode zuordnen:
<ph type="x-smartling-placeholder">
- </ph>
-
110–180 Ohm:
KEYCODE_VOICE_ASSIST
-
110–180 Ohm:
- [C-SR] wird dringend empfohlen, Audiostecker mit der OMTP-Pin-out-Reihenfolge zu unterstützen.
- [C-SR] wird dringend empfohlen, die Audioaufnahme von Stereo-Headsets mit Mikrofon zu unterstützen.
Wenn Geräteimplementierungen eine 3, 5-mm-Audiobuchse mit 4 Kabeln haben und ein Mikrofon unterstützen und android.intent.action.HEADSET_PLUG
mit dem zusätzlichen Mikrofon auf „1“ übertragen, geschieht Folgendes:
- [C-2-1] MUSS die Erkennung des Mikrofons auf dem angeschlossenen Audiozubehör unterstützen.
7.8.2.2 Digitale Audioanschlüsse
Damit die Kompatibilität mit Headsets und anderem Audiozubehör über USB-C-Anschlüsse funktioniert und die Implementierung (USB-Audioklasse) im gesamten Android-Ökosystem wie in der Android-Spezifikation für USB-Headsets definiert ist.
Informationen zu gerätespezifischen Anforderungen finden Sie in Abschnitt 2.2.1.
7.8.3 Nah-Ultraschall
Nah-Ultraschall-Audio ist das Frequenzband von 18,5 kHz bis 20 kHz.
Geräteimplementierungen:
- MÜSSEN die Unterstützung von Nah-Ultraschall-Audiofunktionen über die AudioManager.getProperty API wie folgt gemeldet werden:
Wenn PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND
auf „true“ gesetzt ist, MÜSSEN die folgenden Anforderungen von den Audioquellen VOICE_RECOGNITION
und UNPROCESSED
erfüllt werden:
- [C-1-1] Der durchschnittliche Stromausgang des Mikrofons im Band von 18,5 kHz bis 20 kHz DARF nicht mehr als 15 dB unter dem Antwortbereich bei 2 kHz liegen.
- [C-1-2] Das ungewichtete Signal-Rausch-Verhältnis des Mikrofons über 18,5 kHz bis 20 kHz für einen Ton von 19 kHz bei -26 dBFS DARF nicht unter 50 dB liegen.
Wenn PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND
„true“ ist:
- [C-2-1] Der Mittelwert des Lautsprechers in einem Bereich von 18,5 kHz bis 20 kHz DARF nicht unter 40 dB unter dem Wert bei 2 kHz liegen.
7.8.4 Signalintegrität
Geräteimplementierungen:
- SOLLTEN SIE einen störungsfreien Audiosignalpfad für Ein- und Ausgabestreams auf Handheld-Geräten bereitstellen, der durch keine Fehler definiert wird, die während eines Tests von einer Minute pro Pfad gemessen werden. Testen Sie mit [OboeTester] (https://github.com/google/oboe/tree/master/apps/OboeTester) „Automated Glitch Test“.
Für den Test ist ein Audio-Loopback-Dongle erforderlich, der direkt in einer 3,5-mm-Buchse und/oder in Kombination mit einem Adapter für USB-C auf 3,5 mm verwendet wird. Alle Audioausgangsports SOLLTEN getestet werden.
OboeTester unterstützt derzeit AAudio-Pfade. Daher SOLLTEN die folgenden Kombinationen mithilfe von AAudio auf Fehler getestet werden:
Performance-Modus | Inhalte teilen | Aus Stichprobenrate | In Chans | Out Chans |
---|---|---|---|---|
NIEDRIGE_LATENZ | EXKLUSIV | KEINE ANGABE | 1 | 2 |
NIEDRIGE_LATENZ | EXKLUSIV | KEINE ANGABE | 2 | 1 |
NIEDRIGE_LATENZ | Weiterempfohlen | KEINE ANGABE | 1 | 2 |
NIEDRIGE_LATENZ | Weiterempfohlen | KEINE ANGABE | 2 | 1 |
KEINE | Weiterempfohlen | 48000 | 1 | 2 |
KEINE | Weiterempfohlen | 48000 | 2 | 1 |
KEINE | Weiterempfohlen | 44100 | 1 | 2 |
KEINE | Weiterempfohlen | 44100 | 2 | 1 |
KEINE | Weiterempfohlen | 16000 | 1 | 2 |
KEINE | Weiterempfohlen | 16000 | 2 | 1 |
Ein zuverlässiger Stream sollte die folgenden Kriterien für das Signal-Rausch-Verhältnis (SNR) und die THD (Total Harmonic Distortion) für einen Sinus von 2.000 Hz erfüllen.
Wandler | THD | SNR-Fehler |
---|---|---|
primärer eingebauter Lautsprecher, gemessen mit einem externen Referenzmikrofon | < 3,0% | >= 50 dB |
primäres integriertes Mikrofon, gemessen mit einem externen Referenzlautsprecher | < 3,0% | >= 50 dB |
Integrierte analoge 3,5-mm-Buchsen, getestet mit dem Loopback-Adapter | < 1 % | >= 60 dB |
Mit dem Smartphone gelieferte USB-Adapter, die mit dem Loopback-Adapter getestet wurden | < 1,0% | >= 60 dB |
7.9. Virtual Reality
Android umfasst APIs und Einrichtungen zur Entwicklung von Virtual Reality (VR-Anwendungen) einschließlich hochwertiger VR-Erlebnisse für Mobilgeräte. Bei Geräteimplementierungen MÜSSEN diese APIs und Verhaltensweisen korrekt implementiert werden, wie in diesem Abschnitt beschrieben.
7.9.1 Virtual-Reality-Modus
Android unterstützt den VR-Modus, eine Funktion, die die stereoskopische Wiedergabe von Benachrichtigungen verarbeitet und monokulare System-UI-Komponenten deaktiviert, während eine VR-Anwendung auf den Nutzer ausgerichtet ist.
7.9.2 Virtual-Reality-Modus – hohe Leistung
Wenn Geräteimplementierungen den VR-Modus unterstützen, gilt Folgendes:
- [C-1-1] MUSS mindestens zwei physische Kerne haben.
- [C-1-2] MÜSSEN die Funktion
android.hardware.vr.high_performance
deklarieren. - [C-1-3] MÜSSEN den Modus für kontinuierliche Leistung unterstützen.
- [C-1-4] MUSS OpenGL ES 3.2 unterstützen.
- [C-1-5] MUSS
android.hardware.vulkan.level
0 unterstützen. - SOLLTEN
android.hardware.vulkan.level
1 oder höher unterstützen. - [C-1-6] MÜSSEN
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
,EGL_EXT_image_gl_colorspace
implementieren und die Erweiterungen in der Liste der verfügbaren EGL-Erweiterungen anzeigen. - [C-1-8] MÜSSEN
GL_EXT_multisampled_render_to_texture2
,GL_OVR_multiview
,GL_OVR_multiview2
,GL_OVR_multiview_multisampled_render_to_texture
undGL_EXT_protected_textures
implementieren und die Erweiterungen in der Liste der verfügbaren GL-Erweiterungen anzeigen. - [C-SR] wird dringend empfohlen,
GL_EXT_external_buffer
undGL_EXT_EGL_image_array
zu implementieren und die Erweiterungen in der Liste der verfügbaren GL-Erweiterungen zu sehen. - [C-SR] WIRD UNBEDINGT EMPFOHLEN, Vulkan 1.1 zu unterstützen.
- [C-SR] wird dringend empfohlen,
VK_ANDROID_external_memory_android_hardware_buffer
,VK_GOOGLE_display_timing
undVK_KHR_shared_presentable_image
zu implementieren und in der Liste der verfügbaren Vulkan-Erweiterungen zu sehen. - [C-SR] Es wird dringend empfohlen, mindestens eine Vulkan-Warteschlangenfamilie offenzulegen, in der
flags
sowohlVK_QUEUE_GRAPHICS_BIT
als auchVK_QUEUE_COMPUTE_BIT
enthält undqueueCount
mindestens 2 ist. - [C-1-7] GPU und Display MÜSSEN in der Lage sein, den Zugriff auf den gemeinsamen Frontpuffer zu synchronisieren, sodass VR-Inhalte mit 60 fps und zwei Rendering-Kontexten abwechselnd mit 60 fps ohne sichtbare Tearing-Artefakte gerendert werden.
- [C-1-9] MÜSSEN die Unterstützung für die
AHardwareBuffer
-FlagsAHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER
,AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA
undAHARDWAREBUFFER_USAGE_PROTECTED_CONTENT
implementieren, wie im NDK beschrieben. - [C-1-10] MÜSSEN die Unterstützung für
AHardwareBuffer
s mit einer beliebigen Kombination der Nutzungs-FlagsAHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT
,AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE
,AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT
für mindestens die folgenden Formate implementieren:AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM
,AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM
,AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM
,AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT
. - [C-SR] wird dringend empfohlen, die Zuordnung von
AHardwareBuffer
s mit mehr als einer Ebene und Flags und Formaten zu unterstützen, die in C-1-10 angegeben sind. - [C-1-11] MÜSSEN H.264-Decodierung bei mindestens 3840 × 2160 bei 30 fps unterstützen, komprimiert auf durchschnittlich 40 Mbit/s (entspricht 4 Instanzen von 1920 x 1080 bei 30 fps-10 Mbit/s oder 2 Instanzen mit 1080 Mbit/s x 10 Mbit/s 20 Mbit/s).
- [C-1-12] MÜSSEN HEVC und VP9 unterstützen, MÜSSEN mindestens 1920 × 1080 bei 30 fps decodieren können, die auf durchschnittlich 10 Mbit/s komprimiert sind, und 3840 × 2160 bei 30 fps-20 fps von 10 fps bis 20 fps decodieren.
- [C-1-13] MUSS die
HardwarePropertiesManager.getDeviceTemperatures
API unterstützen und genaue Werte für die Hauttemperatur zurückgeben. - [C-1-14] MÜSSEN einen eingebetteten Bildschirm haben und die Auflösung muss mindestens 1920 x 1080 betragen.
- [C-SR] Eine Bildschirmauflösung von mindestens 2560 x 1440 wird dringend empfohlen.
- [C-1-15] Im VR-Modus MUSS das Display mindestens 60 Hz aktualisiert werden.
- [C-1-17] Die Anzeige MUSS einen Modus mit niedriger Persistenz mit einer Persistenz von weniger als 5 Millisekunden unterstützen. Sie ist definiert als die Zeit, während der ein Pixel Licht ausstrahlt.
- [C-1-18] MÜSSEN Bluetooth 4.2 und Bluetooth LE-Datenlängenerweiterung unterstützen Abschnitt 7.4.3.
- [C-1-19] MUSS den Direktkanaltyp für die folgenden Standardsensortypen unterstützen und ordnungsgemäß melden:
<ph type="x-smartling-placeholder">
- </ph>
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-
- [C-SR] wird dringend empfohlen, den
TYPE_HARDWARE_BUFFER
-Direktkanaltyp für alle oben aufgeführten direkten Kanaltypen zu unterstützen. - [C-1-21] MUSS die Anforderungen für Gyroskop, Beschleunigungsmesser und Magnetometer für
android.hardware.hifi_sensors
erfüllen, wie in Abschnitt 7.3.9 beschrieben. - [C-SR] wird dringend empfohlen, die
android.hardware.sensor.hifi_sensors
-Funktion zu unterstützen. - [C-1-22] MUSS eine End-to-End-Latenz von Bewegung zu Photon auf maximal 28 Millisekunden aufweisen.
- [C-SR] Es wird dringend empfohlen, eine End-to-End-Latenz von Bewegung zu Photon auf maximal 20 Millisekunden zu haben.
- [C-1-23] MÜSSEN das Verhältnis für den ersten Frame haben. Dies ist das Verhältnis zwischen der Helligkeit der Pixel im ersten Frame nach einem Übergang von Schwarz zu Weiß und der Helligkeit weißer Pixel bei konstantem Zustand von mindestens 85%.
- [C-SR] wird dringend empfohlen, ein Verhältnis für den ersten Frame von mindestens 90 % zu haben.
- KÖNNEN einen exklusiven Kern für die Anwendung im Vordergrund bereitstellen und die
Process.getExclusiveCores
API unterstützen, um die Anzahl der CPU-Kerne zurückzugeben, die ausschließlich für die Anwendung im Vordergrund gelten.
Wenn der exklusive Kern unterstützt wird, gilt für den Kern Folgendes:
- [C-2-1] DARF keine anderen Userspace-Prozesse auf dem Gerät ausführen (mit Ausnahme der von der Anwendung verwendeten Gerätetreiber). Möglicherweise werden jedoch einige Kernel-Prozesse bei Bedarf ausgeführt.
8. Leistung und Leistung
Einige Mindestleistungs- und Leistungskriterien sind entscheidend für die Nutzererfahrung und wirken sich auf die grundlegenden Annahmen aus, die Entwickler bei der Entwicklung einer App haben.
8.1. Konsistente Nutzererfahrung
Wenn bestimmte Mindestanforderungen erfüllt werden müssen, um eine konsistente Framerate und konsistente Antwortzeiten für Apps und Spiele zu gewährleisten, kann eine reibungslose Benutzeroberfläche für den Endnutzer bereitgestellt werden. Geräteimplementierungen haben je nach Gerätetyp messbare Anforderungen an die Latenz der Benutzeroberfläche und den Aufgabenwechsel, wie in Abschnitt 2 beschrieben.
8.2. Leistung des Datei-E/A-Zugriffs
Die Bereitstellung einer gemeinsamen Basis für eine konsistente Dateizugriffsleistung im privaten Datenspeicher der Anwendung (/data
-Partition) ermöglicht es App-Entwicklern, eine angemessene Erwartung festzulegen, die für ihr Softwaredesign hilfreich ist. Bei Geräteimplementierungen gelten je nach Gerätetyp möglicherweise bestimmte in Abschnitt 2 beschriebene Anforderungen für die folgenden Lese- und Schreibvorgänge:
- Leistung sequentieller Schreibvorgänge: Dieser Wert wird ermittelt, indem eine 256 MB große Datei mit einem 10 MB-Schreibpuffer geschrieben wird.
- Zufällige Schreibleistung: Gemessen durch Schreiben einer 256 MB großen Datei mit einem 4-KB-Schreibpuffer.
- Leistung sequentieller Lesevorgänge: Gemessen durch Lesen einer 256 MB großen Datei mit einem 10 MB-Schreibpuffer.
- Zufällige Leseleistung: Gemessen durch Lesen einer 256 MB großen Datei mit einem 4-KB-Schreibpuffer.
8.3. Energiesparmodi
Wenn Geräteimplementierungen Funktionen zur Verbesserung der Energieverwaltung von Geräten in AOSP oder Erweiterung der in AOSP enthaltenen Funktionen enthalten, gilt Folgendes:
- [C-1-1] DARF NICHT von der AOSP-Implementierung für die Auslöser-, Wartungs-, Wakeup-Algorithmen und die Verwendung der globalen Systemeinstellungen des App-Standby- und des Stromsparmodus abweichen.
- [C-1-2] DARF NICHT von der AOSP-Implementierung abweichen, wenn die Drosselung von Jobs, Alarmen und Netzwerken für Anwendungen in jedem Bucket für den Anwendungs-Standby-Modus über globale Einstellungen verwaltet wird.
- [C-1-3] Dürfen in Bezug auf die Anzahl der für App-Standby verwendeten App-Standby-Buckets NICHT von der AOSP-Implementierung abweichen.
- [C-1-4] MÜSSEN App-Standby-Buckets und den Stromsparmodus wie unter Energiesparmodus beschrieben implementieren.
- [C-1-5] MÜSSEN
true
fürPowerManager.isPowerSaveMode()
zurückgeben, wenn sich das Gerät im Energiesparmodus befindet. - [C-SR] werden UNBEDINGT empfohlen, Nutzern die Möglichkeit zu bieten, den Energiesparmodus zu aktivieren und zu deaktivieren.
- [C-SR] Wir empfehlen dringend, Nutzern die Möglichkeit zu bieten, alle Apps anzuzeigen, die vom App-Standby- und Stromsparmodus ausgenommen sind.
Zusätzlich zu den Energiesparmodi KÖNNEN Implementierungen von Android-Geräten einen oder alle der vier Energiezustände für den Ruhemodus implementieren, die in der Advanced Configuration and Power Interface (ACPI) definiert sind.
Wenn Geräteimplementierungen den S4-Leistungsstatus gemäß ACPI-Definition implementieren, gilt Folgendes:
- [C-1-1] MUSS diesen Status erst erhalten, nachdem der Nutzer das Gerät durch eine explizite Aktion in den inaktiven Zustand versetzt hat (z.B. durch Schließen eines Deckels, der Teil des Geräts ist, oder indem ein Fahrzeug oder Fernseher ausgeschaltet wird) und bevor der Nutzer das Gerät wieder aktiviert (z.B. durch Öffnen des Deckels oder Anschalten des Fahrzeugs oder Fernsehers).
Wenn Geräteimplementierungen den S3-Leistungsstatus gemäß ACPI-Definition implementieren, gilt Folgendes:
-
[C-2-1] MÜSSEN die obigen C-1-1-Anforderungen erfüllen oder MÜSSEN nur dann in den S3-Status wechseln, wenn Drittanbieter-Anwendungen keine Systemressourcen (z.B. Bildschirm oder CPU) benötigen.
Umgekehrt muss der S3-Status beendet werden, wenn Drittanbieter-Anwendungen die Systemressourcen benötigen, wie in diesem SDK beschrieben.
Beispiel: Während Drittanbieter-Apps anfordern, dass der Bildschirm bis
FLAG_KEEP_SCREEN_ON
eingeschaltet bleibt oder die CPU überPARTIAL_WAKE_LOCK
läuft, DARF das Gerät NICHT in den S3-Status wechseln, es sei denn, der Nutzer hat wie in C-1-1 beschrieben explizit Maßnahmen ergriffen, um das Gerät in den Status „Inaktiv“ zu versetzen. Umgekehrt MUSS das Gerät den S3-Status beenden, wenn eine Aufgabe ausgelöst wird, die von Drittanbieter-Apps über den JobScheduler implementiert wird, oder Firebase Cloud Messaging an Drittanbieter-Apps liefert, es sei denn, der Nutzer hat das Gerät in den Status „Inaktiv“ versetzt. Dies sind keine umfassenden Beispiele und AOSP implementiert umfangreiche Wakeup-Signale, die einen Wakeup aus diesem Zustand auslösen.
8.4. Berechnung des Stromverbrauchs
Eine genauere Berechnung und Berichterstellung des Stromverbrauchs bietet dem App-Entwickler sowohl Anreize als auch Tools zur Optimierung des Stromverbrauchsmusters der Anwendung.
Geräteimplementierungen:
- [SR] EMPFOHLEN, ein Leistungsprofil pro Komponente anzugeben, in dem der Wert des aktuellen Verbrauchs für jede Hardwarekomponente und die ungefähre Entladung der Akkuleistung angegeben wird, die durch die Komponenten im Laufe der Zeit verursacht wird, wie auf der Website des Android Open Source Project dokumentiert.
- [SR] EMPFOHLEN, alle Werte zum Energieverbrauch in Milliamperestunden (mAh) anzugeben.
- [SR] UNBEDINGT EMPFOHLEN, den CPU-Energieverbrauch pro Prozess-UID zu melden. Das Android Open Source-Projekt erfüllt die Anforderung über die Implementierung des Kernelmoduls
uid_cputime
. - [SR] EMPFOHLEN, diesen Stromverbrauch dem App-Entwickler über den Shell-Befehl
adb shell dumpsys batterystats
zur Verfügung zu stellen. - SOLLTEN der Hardwarekomponente selbst zugeordnet werden, wenn sie den Stromverbrauch der Hardwarekomponente nicht einer Anwendung zuordnen können.
8.5. Konstante Leistung
Bei leistungsstarken Apps mit langer Laufzeit kann die Leistung stark schwanken – entweder aufgrund der anderen Apps, die im Hintergrund ausgeführt werden, oder aufgrund der CPU-Drosselung aufgrund von Temperaturlimits. Android umfasst programmatische Schnittstellen, mit denen die Anwendung im Vordergrund, wenn das Gerät kompatibel ist, anfordern kann, dass das System die Zuweisung von Ressourcen optimiert, um solche Schwankungen zu beheben.
Geräteimplementierungen:
-
[C-0-1] MÜSSEN die Unterstützung des Modus für kontinuierliche Leistung mithilfe der API-Methode
PowerManager.isSustainedPerformanceModeSupported()
korrekt melden. -
SOLLTEN den Modus für kontinuierliche Leistung unterstützen.
Wenn Geräteimplementierungen den Modus für kontinuierliche Leistung unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN für die Anwendung im Vordergrund, wenn die App sie anfordert, mindestens 30 Minuten lang eine konstante Leistung erzielen.
- [C-1-2] MÜSSEN die
Window.setSustainedPerformanceMode()
API und andere zugehörige APIs berücksichtigen.
Wenn Geräteimplementierungen zwei oder mehr CPU-Kerne umfassen, gilt Folgendes:
- SOLLTEN mindestens einen exklusiven Kern bereitstellen, der von der App im Vordergrund reserviert werden kann.
Wenn Geräteimplementierungen die Reservierung eines exklusiven Kerns für die oberste App im Vordergrund unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN die ID-Nummern der exklusiven Kerne, die von der obersten Anwendung im Vordergrund reserviert werden können, über die API-Methode
Process.getExclusiveCores()
melden. - [C-2-2] DARF keine User-Space-Prozesse mit Ausnahme der von der Anwendung verwendeten Gerätetreiber auf den exklusiven Kernen ausführen, aber KANN die Ausführung einiger Kernel-Prozesse nach Bedarf zulassen.
Wenn Geräteimplementierungen keinen exklusiven Kern unterstützen, geschieht Folgendes:
- [C-3-1] MUSS mit der API-Methode
Process.getExclusiveCores()
eine leere Liste zurückgeben.
9. Kompatibilität des Sicherheitsmodells
Geräteimplementierungen:
-
[C-0-1] MÜSSEN ein Sicherheitsmodell implementieren, das dem Sicherheitsmodell der Android-Plattform entspricht, wie es im Referenzdokument zu Sicherheit und Berechtigungen in den APIs in der Android-Entwicklerdokumentation definiert ist.
-
[C-0-2] MUSS die Installation selbst signierter Anwendungen unterstützen, ohne dass zusätzliche Berechtigungen/Zertifikate von Dritten oder Behörden erforderlich sind. Insbesondere MÜSSEN kompatible Geräte die in den folgenden Unterabschnitten beschriebenen Sicherheitsmechanismen unterstützen.
9.1 Berechtigungen
Geräteimplementierungen:
-
[C-0-1] MUSS das in der Android-Entwicklerdokumentation definierte Android-Berechtigungsmodell unterstützen. Insbesondere MÜSSEN sie jede in der SDK-Dokumentation beschriebene Berechtigung erzwingen. Keine Berechtigungen dürfen weggelassen, geändert oder ignoriert werden.
-
KANN zusätzliche Berechtigungen hinzufügen, sofern sich die neuen Berechtigungs-ID-Strings nicht im Namespace
android.\*
befinden. -
[C-0-2] Berechtigungen mit dem
protectionLevel
-WertPROTECTION_FLAG_PRIVILEGED
MÜSSEN nur Apps gewährt werden, die auf den privilegierten Pfaden des System-Images vorinstalliert sind und die für jede App explizit auf der Zulassungsliste stehen. Die AOSP-Implementierung erfüllt diese Anforderung, indem die auf der Zulassungsliste gesetzten Berechtigungen für jede Anwendung aus den Dateien im Pfadetc/permissions/
gelesen und berücksichtigt werden. Außerdem wird der Pfadsystem/priv-app
als privilegierter Pfad verwendet.
Berechtigungen mit dem Schutzniveau „gefährlich“ sind Laufzeitberechtigungen. Anwendungen mit targetSdkVersion
> zur Laufzeit 22 Anfragen.
Geräteimplementierungen:
- [C-0-3] MÜSSEN eine spezielle Schnittstelle für den Nutzer anzeigen, über die er entscheiden kann, ob die angeforderten Laufzeitberechtigungen gewährt werden sollen, und dem Nutzer außerdem eine Schnittstelle zur Verwaltung der Laufzeitberechtigungen zur Verfügung stellen.
- [C-0-4] MUSS nur eine Implementierung beider Benutzeroberflächen haben.
- [C-0-5] DÜRFEN KEINEN Laufzeitberechtigungen für vorinstallierte Apps gewähren, es sei denn:
<ph type="x-smartling-placeholder">
- </ph>
- Die Einwilligung des Nutzers kann eingeholt werden, bevor die Anwendung sie verwendet.
- Die Laufzeitberechtigungen sind mit einem Intent-Muster verknüpft, für das die vorinstallierte Anwendung als Standard-Handler festgelegt ist.
- [C-0-6] MUSS die Berechtigung
android.permission.RECOVER_KEYSTORE
nur System-Apps erteilen, die einen ordnungsgemäß gesicherten Wiederherstellungs-Agent registrieren. Ein ordnungsgemäß gesicherter Wiederherstellungs-Agent wird als Software-Agent auf dem Gerät definiert, der sich mit einem Remote-Speicher auf dem Gerät synchronisiert. Dieser ist mit einer sicheren Hardware ausgestattet, die einen Schutz aufweist, der dem im Google Cloud Key Vault-Dienst beschriebenen Schutz entspricht oder stärker ist, um Brute-Force-Angriffe auf den Sperrbildschirm-Wissensfaktor zu verhindern.
Geräteimplementierungen:
-
[C-0-7] MÜSSEN die Eigenschaften für die Android-Berechtigung zur Standortermittlung einhalten, wenn eine App die Daten zum Standort oder zu körperlichen Aktivitäten über die Standard-Android API oder einen proprietären Mechanismus anfordert. Zu diesen Daten gehören unter anderem:
- Standort des Geräts (z. B. Breiten- und Längengrad)
- Informationen, mit denen der Standort des Geräts bestimmt oder geschätzt werden kann (z.B. SSID, BSSID, Mobilfunk-ID, Bluetooth-Scans oder Standort des Netzwerks, mit dem das Gerät verbunden ist).
- Die körperliche Aktivität des Nutzers oder die Einordnung der körperlichen Aktivität.
Genauer gesagt zu Geräteimplementierungen:
- [C-0-8] MÜSSEN die Einwilligung des Nutzers eingeholt werden, damit eine App auf Daten zu Standort oder körperlichen Aktivitäten zugreifen darf.
- [C-0-9] MUSS NUR der App eine Laufzeitberechtigung erteilen, die über ausreichende Berechtigungen verfügt, wie im SDK beschrieben. Beispiel: TelephonyManager#getServiceState erfordert
android.permission.ACCESS_FINE_LOCATION
.
Berechtigungen können als eingeschränkt gekennzeichnet werden und so ihr Verhalten ändern.
-
[C-0-10] Berechtigungen, die mit dem Flag
hardRestricted
gekennzeichnet sind, DÜRFEN einer App NICHT gewährt werden, es sei denn:- In der Systempartition befindet sich eine APK-Datei der App.
- Der Nutzer weist einer App eine Rolle zu, die mit den
hardRestricted
-Berechtigungen verknüpft ist. - Das Installationsprogramm gewährt einer App die Berechtigung „
hardRestricted
“. - Einer App wird auf einer älteren Android-Version der
hardRestricted
gewährt.
-
[C-0-11] Apps mit der Berechtigung
softRestricted
DÜRFEN nur eingeschränkten Zugriff erhalten und DÜRFEN KEINE Vollzugriff erhalten, bis sie einer Zulassungsliste hinzugefügt werden, wie im SDK beschrieben, wobei für jedesoftRestricted
-Berechtigung (z. B.WRITE_EXTERNAL_STORAGE
undREAD_EXTERNAL_STORAGE
) vollständiger und eingeschränkter Zugriff definiert wird.
Wenn auf Geräten eine App vorinstalliert ist oder Sie Apps von Drittanbietern den Zugriff auf die Nutzungsstatistiken erlauben möchten, gilt Folgendes:
- [SR] wird dringend empfohlen, Apps, die die Berechtigung
android.permission.PACKAGE_USAGE_STATS
deklarieren, mit einem Mechanismus bereitzustellen, mit dem Nutzer als Reaktion auf den Intentandroid.settings.ACTION_USAGE_ACCESS_SETTINGS
Zugriff auf die Nutzungsstatistiken gewähren oder entziehen können.
Wenn in Geräteimplementierungen festgelegt wird, dass Apps, einschließlich vorinstallierter Apps, nicht auf die Nutzungsstatistiken zugreifen können, gilt Folgendes:
- [C-1-1] MÜSSEN weiterhin eine Aktivität haben, die das Intent-Muster
android.settings.ACTION_USAGE_ACCESS_SETTINGS
verarbeitet, aber MÜSSEN sie als No-Op implementieren, d. h. ein gleichwertiges Verhalten wie bei Ablehnung des Zugriffs des Nutzers haben.
9.2. UID und Prozessisolierung
Geräteimplementierungen:
- [C-0-1] MÜSSEN das Sandbox-Modell der Android-Anwendung unterstützen, bei dem jede Anwendung als eindeutige Unixstyle-UID und in einem separaten Prozess ausgeführt wird.
- [C-0-2] MUSS die Ausführung mehrerer Anwendungen unter derselben Linux-Nutzer-ID unterstützen, vorausgesetzt, die Anwendungen sind ordnungsgemäß signiert und konstruiert (siehe Referenz zu Sicherheit und Berechtigungen).
9.3 Dateisystemberechtigungen
Geräteimplementierungen:
- [C-0-1] MUSS das Android-Modell für Dateizugriffsberechtigungen unterstützen, wie in der Referenz zu Sicherheit und Berechtigungen definiert.
9.4 Alternative Ausführungsumgebungen
Geräteimplementierungen MÜSSEN die Konsistenz des Android-Sicherheits- und Berechtigungsmodells aufrechterhalten, auch wenn sie Laufzeitumgebungen enthalten, in denen Anwendungen mit einer anderen Software oder Technologie als dem Dalvik Executable Format oder nativem Code ausgeführt werden. Mit anderen Worten:
-
[C-0-1] Alternative Laufzeiten MÜSSEN selbst Android-Apps sein und dem standardmäßigen Android-Sicherheitsmodell entsprechen, wie an anderer Stelle in Abschnitt 9 beschrieben.
-
[C-0-2] Alternative Laufzeiten DÜRFEN KEINEN Zugriff auf Ressourcen erhalten, die durch Berechtigungen geschützt sind, die nicht in der Datei
AndroidManifest.xml
der Laufzeit über das <uses-permission
> angefordert werden Mechanismus zur Verfügung. -
[C-0-3] Alternative Laufzeiten DÜRFEN NICHT zulassen, dass Anwendungen Funktionen verwenden, die durch Android-Berechtigungen geschützt sind, die auf Systemanwendungen beschränkt sind.
-
[C-0-4] Alternative Laufzeiten MÜSSEN dem Android-Sandbox-Modell entsprechen und installierte Anwendungen, die eine alternative Laufzeit verwenden, DÜRFEN NICHT die Sandbox einer anderen auf dem Gerät installierten App wiederverwenden, außer über die Android-Standardmechanismen mit gemeinsamer Nutzer-ID und Signaturzertifikat.
-
[C-0-5] Alternative Laufzeiten DÜRFEN NICHT mit den Sandboxes gestartet werden, die anderen Android-Apps entsprechen, oder ihnen Zugriff darauf gewähren.
-
[C-0-6] Alternative Laufzeiten DÜRFEN NICHT mit anderen Anwendungen gestartet, zugewiesen werden oder ihnen die Berechtigungen des Superuser (Root) oder einer anderen Nutzer-ID gewähren.
-
[C-0-7] Wenn die
.apk
-Dateien alternativer Laufzeiten im System-Image von Geräteimplementierungen enthalten sind, MÜSSEN sie mit einem anderen Schlüssel als dem Schlüssel signiert werden, der zum Signieren anderer Anwendungen in den Geräteimplementierungen verwendet wurde. -
[C-0-8] Bei der Installation von Anwendungen MÜSSEN alternative Laufzeiten die Nutzereinwilligung für die von der App verwendeten Android-Berechtigungen einholen.
-
[C-0-9] Wenn eine App eine Geräteressource verwenden muss, für die eine entsprechende Android-Berechtigung vorhanden ist (z. B. Kamera, GPS usw.), MUSS die alternative Laufzeit den Nutzer darüber informieren, dass die App auf diese Ressource zugreifen kann.
-
[C-0-10] Wenn die Laufzeitumgebung die Anwendungsfunktionen nicht auf diese Weise aufzeichnet, MUSS die Laufzeitumgebung alle Berechtigungen der Laufzeit selbst auflisten, wenn eine Anwendung installiert wird, die diese Laufzeit verwendet.
-
Alternative Laufzeiten sollten Apps über die
PackageManager
in separaten Android-Sandboxes (Linux-Nutzer-IDs usw.) installieren. -
Alternative Laufzeiten KÖNNEN eine einzelne Android-Sandbox bereitstellen, die von allen Anwendungen gemeinsam genutzt wird, die die alternative Laufzeit verwenden.
9.5 Unterstützung mehrerer Nutzer
Android umfasst Unterstützung für mehrere Nutzer und eine vollständige Nutzerisolation.
- Bei Geräteimplementierungen MÖGLICHERWEISE MÖGLICHERWEISE jedoch NICHT für die Verwendung durch mehrere Nutzer geeignet sein, wenn sie als primären externen Speicher Wechselmedien verwenden.
Wenn mehrere Nutzer an einer Geräteimplementierung teilnehmen, gilt Folgendes:
- [C-1-1] MUSS die folgenden Anforderungen in Bezug auf die Unterstützung mehrerer Nutzer erfüllen.
- [C-1-2] MÜSSEN für jeden Nutzer ein Sicherheitsmodell implementieren, das dem Sicherheitsmodell der Android-Plattform entspricht, wie im Referenzdokument zu Sicherheit und Berechtigungen in den APIs definiert.
- [C-1-3] MÜSSEN separate und isolierte gemeinsame Anwendungsspeicherverzeichnisse (auch als
/sdcard
bezeichnet) für jede Nutzerinstanz haben. - [C-1-4] MÜSSEN sicherstellen, dass Anwendungen, die einem bestimmten Nutzer gehören und im Namen eines bestimmten Nutzers ausgeführt werden, keine Dateien auflisten, lesen oder bearbeiten können, auch wenn die Daten beider Nutzer auf demselben Volume oder Dateisystem gespeichert sind.
- [C-1-5] MÜSSEN den Inhalt der SD-Karte bei Aktivierung der Mehrfachbenutzer-Funktion mit einem Schlüssel verschlüsseln, der nur auf nicht entfernbaren Datenträgern gespeichert ist, auf die nur das System zugreifen kann, wenn bei Geräteimplementierungen Wechseldatenträger für die externen Speicher-APIs verwendet werden. Da die Medien dann von einem Host-PC nicht mehr gelesen werden können, müssen die Geräteimplementierungen auf MTP oder ein ähnliches System umgestellt werden, um Host-PCs Zugriff auf die Daten des aktuellen Nutzers zu ermöglichen.
9.6 Warnung bei Premium-SMS
Android kann Nutzer auch vor ausgehenden Premium-SMS warnen. Premium-SMS sind SMS, die an einen bei einem Mobilfunkanbieter registrierten Dienst gesendet werden und für den Nutzer Gebühren anfallen können.
Wenn in Geräteimplementierungen die Unterstützung von android.hardware.telephony
deklariert wird, gilt Folgendes:
- [C-1-1] MÜSSEN Nutzer warnen, bevor sie eine SMS an Nummern senden, die durch reguläre Ausdrücke identifiziert werden, die in der Datei
/data/misc/sms/codes.xml
auf dem Gerät definiert sind. Das vorgelagerte Open-Source-Projekt von Android bietet eine Implementierung, die diese Anforderung erfüllt.
9.7 Sicherheitsfunktionen
Geräteimplementierungen MÜSSEN die Einhaltung der Sicherheitsfunktionen im Kernel und auf der Plattform wie unten beschrieben sicherstellen.
Die Android-Sandbox umfasst Funktionen, die das MAC-System (Security-Enhanced Linux, SELinux) und andere Sicherheitsfunktionen im Linux-Kernel verwenden. Geräteimplementierungen:
- [C-0-1] MÜSSEN die Kompatibilität mit vorhandenen Anwendungen aufrechterhalten, auch wenn SELinux oder andere Sicherheitsfunktionen unterhalb des Android-Frameworks implementiert sind.
- [C-0-2] DÜRFEN KEINE sichtbare Benutzeroberfläche haben, wenn ein Sicherheitsverstoß erkannt und erfolgreich durch die Sicherheitsfunktion unterhalb des Android-Frameworks blockiert wird. KANN jedoch eine sichtbare Benutzeroberfläche haben, wenn ein nicht blockierter Sicherheitsverstoß zu einem erfolgreichen Exploit führt.
- [C-0-3] DÜRFEN SELinux oder andere Sicherheitsfunktionen, die unter dem Android-Framework implementiert sind, NICHT für den Nutzer oder App-Entwickler konfigurieren.
- [C-0-4] DARF NICHT zulassen, dass eine Anwendung, die sich über eine API auf eine andere Anwendung auswirkt (z. B. eine Device Administration API), die Konfiguration einer Richtlinie erlaubt, die gegen die Kompatibilität verstößt.
- [C-0-5] MÜSSEN das Medien-Framework in mehrere Prozesse aufteilen, damit es möglich ist, den Zugriff für jeden Prozess präziser zu gewähren, wie auf der Website des Android Open Source Project beschrieben.
- [C-0-6] MÜSSEN einen Sandbox-Mechanismus für Kernel-Anwendungen implementieren, der das Filtern von Systemaufrufen mithilfe einer konfigurierbaren Richtlinie aus Multithread-Programmen ermöglicht. Das vorgelagerte Android-Open-Source-Projekt erfüllt diese Anforderung durch die Aktivierung von seccomp-BPF mit Threadgroup-Synchronisierung (TSYNC), wie im Abschnitt zur Kernel-Konfiguration von source.android.com beschrieben.
Die Kernel-Integrität und Selbstschutzfunktionen sind wesentlich für die Sicherheit von Android. Geräteimplementierungen:
- [C-0-7] MÜSSEN Mechanismen zum Schutz vor Überlauf des Kernel-Stack-Zwischenspeichers implementieren. Beispiele für solche Mechanismen sind
CC_STACKPROTECTOR_REGULAR
undCONFIG_CC_STACKPROTECTOR_STRONG
. - [C-0-8] MÜSSEN strenge Kernel-Speicherschutzmaßnahmen implementieren, bei denen ausführbarer Code schreibgeschützt ist, schreibgeschützte Daten nicht ausführbar und nicht beschreibbar sind und beschreibbare Daten nicht ausführbar sind (z.B.
CONFIG_DEBUG_RODATA
oderCONFIG_STRICT_KERNEL_RWX
). - [C-0-9] MÜSSEN auf Geräten mit ursprünglich API-Level 28 oder höher statische und dynamische Objektgrößenprüfung von Kopien zwischen Nutzer- und Kernel-Bereich (z.B.
CONFIG_HARDENED_USERCOPY
) implementieren. - [C-0-10] DÜRFEN KEINEN User-Space-Speicher bei Ausführung im Kernel-Modus (z.B. Hardware-PXN oder emuliert über
CONFIG_CPU_SW_DOMAIN_PAN
oderCONFIG_ARM64_SW_TTBR0_PAN
) auf Geräten ausführen, die ursprünglich mit API-Level 28 oder höher ausgeliefert wurden. - [C-0-11] DARF KEINEN User-Space-Arbeitsspeicher im Kernel außerhalb von normalen Benutzerkopie-Zugriffs-APIs (z.B. Hardware-PAN oder emuliert über
CONFIG_CPU_SW_DOMAIN_PAN
oderCONFIG_ARM64_SW_TTBR0_PAN
) auf Geräten lesen oder schreiben, die ursprünglich mit API-Level 28 oder höher ausgeliefert wurden. - [C-0-12] MÜSSEN die Isolierung der Kernel-Seitentabelle implementieren, wenn die Hardware auf allen Geräten mit API-Level 28 oder höher anfällig für CVE-2017-5754 ist (z.B.
CONFIG_PAGE_TABLE_ISOLATION
oderCONFIG_UNMAP_KERNEL_AT_EL0
). - [C-0-13] MÜSSEN die Zweigvorhersage-Härtung implementieren, wenn die Hardware auf allen Geräten mit API-Level 28 oder höher anfällig für CVE-2017-5715 ist (z.B.
CONFIG_HARDEN_BRANCH_PREDICTOR
). - [SR] WIRD DRINGEND empfohlen, Kerneldaten, die nur während der Initialisierung geschrieben werden, nach der Initialisierung als schreibgeschützt markiert zu behalten (z.B.
__ro_after_init
). -
[C-SR] wird dringend empfohlen, das Layout des Kernel-Codes und des Arbeitsspeichers zufällig zu gestalten und Kontakte zu vermeiden, die die Randomisierung beeinträchtigen würden (z.B.
CONFIG_RANDOMIZE_BASE
mit Bootloader-Entropie über/chosen/kaslr-seed Device Tree node
oderEFI_RNG_PROTOCOL
). -
[C-SR] wird dringend empfohlen, die Kontrollflussintegrität (Control Flow Integrity, CFI) im Kernel zu aktivieren, um zusätzlichen Schutz vor Code-Wiederverwendungsangriffen (z.B.
CONFIG_CFI_CLANG
undCONFIG_SHADOW_CALL_STACK
) zu bieten. - [C-SR] Es wird dringend empfohlen, die Control-Flow-Integrität (Control-Flow Integrity, CFI), den Shadow Call Stack (SCS) oder die Integer Overflow-Bereinigung (IntSan) für Komponenten, für die sie aktiviert ist, nicht zu deaktivieren.
- [C-SR] wird dringend empfohlen, CFI, SCS und IntSan für alle zusätzlichen sicherheitsrelevanten Userspace-Komponenten zu aktivieren, wie unter CFI und IntSan erläutert.
Wenn Geräteimplementierungen einen Linux-Kernel verwenden, gilt Folgendes:
- [C-1-1] MÜSSEN SELinux implementieren.
- [C-1-2] MÜSSEN SELinux in den globalen Erzwingungsmodus setzen.
- [C-1-3] MÜSSEN alle Domains im Erzwingungsmodus konfigurieren. Domains im moderaten Modus sind nicht zulässig, auch nicht geräte- oder anbieterspezifische Domains.
- [C-1-4] DÜRFEN die „Neverallow“-Regeln im Ordner „system/sepolicy“, der im vorgelagerten Android Open Source Project (AOSP) angegeben ist, NICHT ändern, weglassen oder ersetzen. Die Richtlinie MÜSSEN sowohl für AOSP SELinux-Domains als auch geräte-/anbieterspezifische Domains mit allen „Neverallow“-Regeln kompiliert werden.
- [C-1-5] MÜSSEN Drittanbieter-Apps mit Ausrichtung auf API-Level 28 oder höher in anwendungsspezifischen SELinux-Sandboxes mit App-spezifischen SELinux-Einschränkungen für das private Datenverzeichnis jeder Anwendung ausführen.
- SOLLTEN die standardmäßige SELinux-Richtlinie beibehalten, die im Ordner "system/sepolicy" des vorgelagerten Android-Open-Source-Projekts bereitgestellt wird, und diese Richtlinie nur für ihre eigene gerätespezifische Konfiguration ergänzen.
Geräteimplementierungen, die bereits unter einer älteren Android-Version eingeführt wurden und die Anforderungen [C-1-1] und [C-1-5] nicht durch ein Systemsoftwareupdate erfüllen können, sind KÖNNEN von diesen Anforderungen ausgenommen.
Wenn Geräteimplementierungen einen anderen Kernel als Linux verwenden, gilt Folgendes:
- [C-2-1] MÜSSEN ein obligatorisches Zugriffssteuerungssystem verwenden, das SELinux entspricht.
Android umfasst mehrere gestaffelte Sicherheitsebenen, die für die Gerätesicherheit von zentraler Bedeutung sind.
9.8 Datenschutz
9.8.1 Nutzungsverlauf
Android speichert den Verlauf der Auswahl des Nutzers und verwaltet ihn durch UsageStatsManager.
Geräteimplementierungen:
- [C-0-1] MÜSSEN eine angemessene Aufbewahrungsdauer für einen solchen Nutzerverlauf beibehalten.
- [SR] wird dringend empfohlen, die in der AOSP-Implementierung standardmäßig konfigurierte Aufbewahrungsdauer von 14 Tagen beizubehalten.
Android speichert die Systemereignisse mithilfe der StatsLog
-IDs und verwaltet diesen Verlauf über die StatsManager
und die IncidentManager
-System-API.
Geräteimplementierungen:
- [C-0-2] DARF nur die mit
DEST_AUTOMATIC
gekennzeichneten Felder im Vorfallsbericht enthalten, der von der System-API-KlasseIncidentManager
erstellt wurde. - [C-0-3] DÜRFEN die Systemereignis-IDs nicht verwenden, um andere Ereignisse als in den
StatsLog
SDK-Dokumenten beschrieben zu protokollieren. Wenn zusätzliche Systemereignisse protokolliert werden, KÖNNEN sie eine andere Atomkennung im Bereich zwischen 100.000 und 200.000 verwenden.
9.8.2 Aufnahme läuft
Geräteimplementierungen:
- [C-0-1] Dürfen Softwarekomponenten, die die privaten Informationen des Nutzers (z. B. Tastenanschläge, auf dem Bildschirm angezeigter Text, Fehlerbericht) senden, NICHT vorab laden oder verbreiten, ohne dass der Nutzer seine Zustimmung gegeben hat. Auch das Löschen laufender Benachrichtigungen DÜRFEN NICHT.
-
[C-0-2] MÜSSEN die ausdrückliche Nutzereinwilligung angezeigt und eingeholt werden, die im Wesentlichen dieselbe Botschaft wie AOSP enthält, wenn das Bildschirmstreaming oder die Bildschirmaufzeichnung über
MediaProjection
oder proprietäre APIs aktiviert wird. DÜRFEN Nutzern NICHT die Möglichkeit bieten, die zukünftige Anzeige der Nutzereinwilligung zu deaktivieren. -
[C-0-3] Sie MUSS eine fortlaufende Benachrichtigung an den Nutzer erhalten, während die Bildschirmübertragung oder die Bildschirmaufzeichnung aktiviert ist. AOSP erfüllt diese Anforderung, indem in der Statusleiste ein fortlaufendes Benachrichtigungssymbol angezeigt wird.
Wenn Geräteimplementierungen Systemfunktionen umfassen, die entweder die auf dem Bildschirm angezeigten Inhalte erfassen und/oder den auf dem Gerät wiedergegebenen Audiostream aufzeichnen, außer über die System-API ContentCaptureService
, oder mit anderen proprietären Mitteln, die in Abschnitt 9.8.6 Inhaltserfassung beschrieben werden, gilt Folgendes:
- [C-1-1] Der Nutzer MUSS eine dauerhafte Benachrichtigung erhalten, wenn diese Funktion aktiviert ist und aktiv Daten erfasst/aufzeichnet.
Wenn Geräteimplementierungen eine standardmäßig aktivierte Komponente enthalten, die Umgebungsgeräusche aufzeichnen und/oder das auf dem Gerät wiedergegebene Audio aufzeichnen kann, um nützliche Informationen zum Nutzerkontext abzuleiten, gilt Folgendes:
- [C-2-1] DARF NICHT im dauerhaften Speicher auf dem Gerät gespeichert oder das aufgezeichnete Rohaudio oder ein anderes Format, das zurück in die Originalaudioinhalte oder ein FAST-Faxe konvertiert werden kann, vom Gerät übertragen, es sei denn, dies ist ausdrücklich erlaubt.
9.8.3 Konnektivität
Wenn Geräteimplementierungen einen USB-Port mit Unterstützung für den USB-Peripheriemodus haben, gilt Folgendes:
- [C-1-1] MÜSSEN eine Benutzeroberfläche einblenden, in der der Nutzer um seine Zustimmung gebeten wird, bevor er über den USB-Port auf den Inhalt des freigegebenen Speichers zugreifen darf.
9.8.4 Netzwerkverkehr
Geräteimplementierungen:
- [C-0-1] MÜSSEN die Root-Zertifikate für den vertrauenswürdigen Zertifizierungsstellenspeicher des Systems vorinstallieren, die im vorgelagerten Android-Open-Source-Projekt bereitgestellt wurden.
- [C-0-2] MÜSSEN mit einem leeren Root-CA-Nutzerspeicher ausgeliefert werden.
- [C-0-3] MÜSSEN dem Nutzer eine Warnung angezeigt werden, die besagt, dass der Netzwerkverkehr möglicherweise überwacht wird, wenn eine Root-Zertifizierungsstelle des Nutzers hinzugefügt wird.
Wenn Gerätetraffic über ein VPN weitergeleitet wird, gilt für Geräteimplementierungen Folgendes:
- [C-1-1] Dem Nutzer MUSS eine Warnung mit folgenden Informationen angezeigt werden:
<ph type="x-smartling-placeholder">
- </ph>
- Dieser Netzwerkverkehr wird möglicherweise überwacht.
- Dieser Netzwerkverkehr wird über die spezifische VPN-Anwendung geleitet, die das VPN bereitstellt.
Wenn Geräteimplementierungen einen Mechanismus haben, der standardmäßig standardmäßig aktiviert ist und Netzwerkdatenverkehr über einen Proxyserver oder VPN-Gateway weiterleitet (z. B. durch Vorabladen eines VPN-Dienstes mit gewährter android.permission.CONTROL_VPN
), gilt Folgendes:
- [C-2-1] MÜSSEN vor der Aktivierung dieses Mechanismus die Einwilligung des Nutzers einholen, es sei denn , das VPN wird vom Device Policy Controller über die
DevicePolicyManager.setAlwaysOnVpnPackage()
aktiviert. In diesem Fall muss der Nutzer keine gesonderte Einwilligung geben, sondern nur benachrichtigt werden.
Ob in Geräteimplementierungen die Möglichkeit geboten wird, das durchgehend aktive VPN zu aktivieren Funktion einer Drittanbieter-VPN-App:
- [C-3-1] MÜSSEN diese Funktion für Apps deaktivieren, die in der Datei
AndroidManifest.xml
keinen durchgehend aktiven VPN-Dienst unterstützen. Dazu setzen Sie das AttributSERVICE_META_DATA_SUPPORTS_ALWAYS_ON
auffalse
.
9.8.5 Geräte-IDs
Geräteimplementierungen:
- [C-0-1] MÜSSEN den Zugriff auf die Seriennummer und gegebenenfalls die IMEI/MEID, die SIM-Seriennummer und die IMSI (International Mobile Subscriber Identity) einer App verhindern, es sei denn, sie erfüllt eine der folgenden Anforderungen:
<ph type="x-smartling-placeholder">
- </ph>
- ist eine signierte Mobilfunkanbieter-App, die von Geräteherstellern verifiziert wird.
- hat die Berechtigung
READ_PRIVILEGED_PHONE_STATE
erhalten. - verfügt über Mobilfunkanbieterberechtigungen, die in den UICC-Mobilfunkanbieterberechtigungen definiert sind.
- ist der Geräte- oder Profilinhaber, dem die Berechtigung
READ_PHONE_STATE
gewährt wurde. - (Nur für SIM-Seriennummer/ICCID) Gemäß den lokalen Vorschriften muss die App Änderungen an der Identität des Abonnenten erkennen.
9.8.6. Inhalte erfassen
Android unterstützt über die System API ContentCaptureService
oder andere proprietäre Methoden einen Mechanismus für Geräteimplementierungen, um die folgenden Interaktionen zwischen den Apps und dem Nutzer zu erfassen.
- Auf dem Bildschirm gerenderte Texte und Grafiken, einschließlich, aber nicht beschränkt auf Benachrichtigungen und Unterstützungsdaten über die
AssistStructure
API. - Mediendaten wie Audio oder Video, die vom Gerät aufgenommen oder abgespielt wurden.
- Eingabeereignisse (z. B. Taste, Maus, Touch-Geste, Sprache, Video und Bedienungshilfen)
- Alle anderen Ereignisse, die eine Anwendung dem System über die
Content Capture
API oder eine ähnliche leistungsstarke, proprietäre API zur Verfügung stellt.
Wenn Geräteimplementierungen die oben genannten Daten erfassen, geschieht Folgendes:
- [C-1-1] MÜSSEN alle diese Daten verschlüsseln, wenn sie auf dem Gerät gespeichert werden. Diese Verschlüsselung KANN mithilfe der dateibasierten Android-Verschlüsselung oder einer der Chiffren mit API-Version 26 oder höher erfolgen. Diese sind im Cipher SDK beschrieben.
- [C-1-2] DÜRFEN KEINE Rohdaten oder verschlüsselten Daten mit Android-Sicherungsmethoden oder anderen Sicherungsmethoden sichern.
- [C-1-3] DARF nur alle diese Daten und das Geräteprotokoll über eine datenschutzfreundliche Methode senden. Der datenschutzfreundliche Mechanismus ist definiert als „Maßnahmen, die nur Analysen in aggregierter Form ermöglichen und den Abgleich protokollierter Ereignisse oder abgeleiteter Ergebnisse mit einzelnen Nutzern verhindern“, um zu verhindern, dass nutzerspezifische Daten introspektiv sind (z.B. Implementierung mit einer Differential Privacy-Technologie wie
RAPPOR
). - [C-1-4] DÜRFEN derartige Daten NICHT mit einer Nutzeridentität (z. B.
Account
) auf dem Gerät verknüpfen, es sei denn, die ausdrückliche Einwilligung des Nutzers bei jeder Datenverknüpfung ist erforderlich. - [C-1-5] DÜRFEN derartige Daten NICHT an andere Apps weitergegeben werden, es sei denn, die Freigabe erfolgt ausdrücklich mit der ausdrücklichen Zustimmung des Nutzers.
- [C-1-6] MÜSSEN Nutzern die Möglichkeit bieten, solche Daten zu löschen, die von
ContentCaptureService
oder den proprietären Verfahren erhoben werden, falls die Daten in irgendeiner Form auf dem Gerät gespeichert werden.
Wenn Geräteimplementierungen einen Dienst umfassen, in dem die System API ContentCaptureService
implementiert ist, oder einen proprietären Dienst, der die Daten wie oben beschrieben erfasst, gilt Folgendes:
- [C-2-1] DÜRFEN Nutzern NICHT erlauben, den Dienst zur Inhaltserfassung durch eine vom Nutzer installierbare App oder einen Dienst zu ersetzen, und MÜSSEN die Erfassung solcher Daten nur dem vorinstallierten Dienst gestatten.
- [C-2-2] DÜRFEN NICHT zulassen, dass mit Ausnahme des vorinstallierten Mechanismus der Inhaltserfassungsdienst solche Daten von anderen Apps erfasst werden.
- [C-2-3] MÜSSEN die Nutzeroptionen anbieten, um den Dienst zur Inhaltserfassung zu deaktivieren.
- [C-2-4] DARF NICHT auf die Nutzerangebote verzichten, um Android-Berechtigungen des Inhaltserfassungsdienstes zu verwalten und dem Android-Berechtigungsmodell zu folgen, wie in Abschnitt 9.1 beschrieben. Berechtigung:
-
[C-SR] Es wird dringend empfohlen, die Dienstkomponenten zur Inhaltserfassung getrennt zu halten. Sie dürfen beispielsweise die Dienst- oder Prozess-IDs nicht von anderen Systemkomponenten binden. Hiervon ausgenommen sind die folgenden:
- Telefonie, Kontakte, System-UI und Medien
9.8.7 Zugriff auf Zwischenablage
Geräteimplementierungen:
- [C-0-1] DARF KEINE abgeschnittenen Daten aus der Zwischenablage (z.B. über die
ClipboardManager
API) zurückgeben, es sei denn, es handelt sich bei der App um den Standard-IME oder die App, auf die der Fokus gerade liegt.
9.8.8 Standort
Geräteimplementierungen:
- [C-0-1] DÜRFEN NICHT die Einstellung für den Gerätestandort und die Einstellungen für die WLAN-/Bluetooth-Suche ohne ausdrückliche Zustimmung des Nutzers oder Initiierung des Nutzers aktivieren/deaktivieren.
- [C-0-2] MÜSSEN dem Nutzer die Möglichkeit bieten, auf standortbezogene Informationen zuzugreifen, einschließlich der letzten Standortanfragen, Berechtigungen auf App-Ebene und der Nutzung der WLAN-/Bluetooth-Suche zur Standortbestimmung.
- [C-0-3] MÜSSEN Sie sicherstellen, dass die Anwendung, die die Emergency Location Bypass API [LocationRequest.setLocationSettingsignored()] verwendet, eine vom Nutzer initiierte Notfallsitzung ist (z.B. 911 wählen oder eine SMS an 911 senden).
- [C-0-4] Die Emergency Location Bypass API MUSS die Fähigkeit der Emergency Location Bypass API beibehalten, die Einstellungen für den Gerätestandort zu umgehen, ohne die Einstellungen zu ändern.
- [C-0-5] MÜSSEN eine Benachrichtigung planen, die den Nutzer erinnert, nachdem eine App im Hintergrund mit der Berechtigung [
ACCESS_BACKGROUND_LOCATION
] auf seinen Standort zugegriffen hat.
9.9. Verschlüsselung der Datenspeicherung
Alle Geräte MÜSSEN die Anforderungen in Abschnitt 9.9.1 erfüllen. Geräte, die auf einer API-Ebene vor dem in diesem Dokument eingeführten Produkt eingeführt wurden, sind von den Anforderungen der Abschnitte 9.9.2 und 9.9.3 ausgenommen. Stattdessen MÜSSEN sie die Anforderungen in Abschnitt 9.9 des Dokuments zur Definition der Android-Kompatibilität erfüllen, die dem API-Level entsprechen, auf dem das Gerät gestartet wurde.
9.9.1 Direct Boot
Geräteimplementierungen:
-
[C-0-1] MÜSSEN die APIs für den Direct Boot Mode auch dann implementieren, wenn sie die Speicherverschlüsselung nicht unterstützen.
-
[C-0-2] Die Intents
ACTION_LOCKED_BOOT_COMPLETED
undACTION_USER_UNLOCKED
MÜSSEN weiterhin übertragen werden, um Direct Boot-fähige Anwendungen zu signalisieren, dass die Speicherstandorte für Geräteverschlüsselung (DE) und Credential Encrypted (CE) für Nutzer verfügbar sind.
9.9.2 Verschlüsselungsanforderungen
Geräteimplementierungen:
- [C-0-1] MÜSSEN die privaten App-Daten (Partition
/data
) sowie die freigegebene Speicherpartition der App (/sdcard
-Partition) verschlüsseln, falls diese ein dauerhafter, nicht entfernbarer Teil des Geräts ist. - [C-0-2] MÜSSEN die Verschlüsselung von Datenspeichern standardmäßig zu dem Zeitpunkt aktivieren, zu dem der Nutzer die vorkonfigurierte Einrichtung abgeschlossen hat.
- [C-0-3] MÜSSEN die oben genannten Anforderungen an die Verschlüsselung von Datenspeichern durch die Implementierung der dateibasierten Verschlüsselung (File-Based Encryption, FBE) erfüllen.
9.9.3 Dateibasierte Verschlüsselung
Verschlüsselte Geräte:
- [C-1-1] MÜSSEN gestartet werden, ohne dass der Nutzer nach Anmeldedaten gefragt wird, und Direct Boot-fähige Apps den Zugriff auf den DE-Speicher (Device Encrypted (DE)) erlauben, nachdem die
ACTION_LOCKED_BOOT_COMPLETED
-Nachricht übertragen wurde. - [C-1-2] DARF erst den Zugriff auf den Credential Encrypted (CE)-Speicher gewähren, nachdem der Nutzer das Gerät durch Eingabe seiner Anmeldedaten (z. B. Sicherheitscode, PIN, Muster oder Fingerabdruck) entsperrt hat und die
ACTION_USER_UNLOCKED
-Nachricht übertragen wurde. - [C-1-3] DARF KEINE Methode zum Entsperren des CE-geschützten Speichers ohne die vom Nutzer bereitgestellten Anmeldedaten oder einen registrierten Treuhandschlüssel anbieten.
- [C-1-4] MÜSSEN den verifizierten Bootmodus verwenden und sicherstellen, dass DE-Schlüssel kryptografisch an den Hardware-Vertrauensstamm des Geräts gebunden sind.
- [C-1-5] MÜSSEN Dateiinhalte mit AES-256-XTS oder Adiantum verschlüsseln. AES-256-XTS bezieht sich auf den Advanced Encryption Standard mit einer Chiffreschlüssellänge von 256 Bit, der im XTS-Modus betrieben wird. volle Länge des Schlüssels beträgt 512 Bit. Adiantum bezieht sich auf Adiantum-XChaCha12-AES, wie unter https://github.com/google/adiantum angegeben.
- [C-1-6] MÜSSEN Dateinamen mit AES-256-CBC-CTS oder Adiantum verschlüsseln.
-
[C-1-12] MÜSSEN AES-256-XTS für Dateiinhalte und AES-256-CBC-CTS für Dateinamen verwenden (anstelle von Adiantum), wenn das Gerät über Anleitungen zum Advanced Encryption Standard (AES) verfügt. AES-Anweisungen sind ARMv8-Kryptografie-Erweiterungen auf ARM-basierten Geräten oder AES-NI auf x86-basierten Geräten. Wenn auf dem Gerät keine AES-Anleitung verfügbar ist, KANN das Gerät Adiantum verwenden.
-
Die Schlüssel zum Schutz der CE- und DE-Speicherbereiche:
-
[C-1-7] MÜSSEN kryptografisch an einen hardwaregestützten Schlüsselspeicher gebunden sein.
- [C-1-8] CE-Schlüssel MÜSSEN an die Anmeldedaten des Nutzers auf dem Sperrbildschirm gebunden sein.
- [C-1-9] CE-Schlüssel MÜSSEN an einen Standard-Sicherheitscode gebunden sein, wenn der Nutzer keine Anmeldedaten für den Sperrbildschirm angegeben hat.
- [C-1-10] MÜSSEN eindeutig und eindeutig sein. Mit anderen Worten: Der CE- oder DE-Schlüssel eines Nutzers stimmt nicht mit den CE- oder DE-Schlüsseln anderer Nutzer überein.
- [C-1-11] MÜSSEN die vorgeschriebenen Chiffren, Schlüssellängen und Modi verwenden.
-
[C-SR] wird dringend empfohlen, Dateisystemmetadaten wie Dateigrößen, Eigentümerschaft, Modi und erweiterte Attribute (xattrs) mit einem Schlüssel zu verschlüsseln, der kryptografisch an den Hardware-Root of Trust des Geräts gebunden ist.
-
SOLLTEN vorinstallierte wichtige Apps wie Wecker, Telefon oder Messenger auf den Direct Boot-Modus achten.
Das vorgelagerte Open-Source-Projekt von Android bietet eine bevorzugte Implementierung dieser Funktion, die auf dem Linux-Kernel "fscrypt" basiert. Verschlüsselungsfunktion verwenden.
9:10. Geräteintegrität
Die folgenden Anforderungen sorgen dafür, dass der Status der Geräteintegrität transparent ist. Geräteimplementierungen:
-
[C-0-1] MÜSSEN über die System-API-Methode
PersistentDataBlockManager.getFlashLockState()
korrekt melden, ob ihr Bootloader-Status das Flashen des System-Images zulässt. Der StatusFLASH_LOCK_UNKNOWN
ist für Geräteimplementierungen reserviert, die ein Upgrade von einer früheren Android-Version ausführen, bei denen diese neue System-API-Methode nicht vorhanden war. -
[C-0-2] MUSS zur Geräteintegrität den verifizierten Bootmodus unterstützen.
Wenn Geräteimplementierungen bereits auf einer früheren Android-Version ohne Unterstützung des verifizierten Bootmodus eingeführt werden und diese Funktion nicht durch ein Systemsoftwareupdate unterstützt werden kann, sind sie MÖGLICHERWEISE von der Anforderung ausgenommen.
Der verifizierte Bootmodus ist eine Funktion, die die Integrität der Gerätesoftware garantiert. Wenn Geräteimplementierungen die Funktion unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN das Funktions-Flag für die Plattform
android.software.verified_boot
deklarieren. - [C-1-2] MÜSSEN bei jeder Startsequenz eine Überprüfung durchführen.
- [C-1-3] MÜSSEN die Bestätigung von einem unveränderlichen Hardwareschlüssel starten, der die Root of Trust ist, und bis zur Systempartition gehen.
- [C-1-4] MÜSSEN in der nächsten Phase jede Überprüfungsphase implementieren, um die Integrität und Authentizität aller Byte zu prüfen, bevor der Code in der nächsten Phase ausgeführt wird.
- [C-1-5] MÜSSEN Verifikationsalgorithmen verwendet werden, die den aktuellen Empfehlungen des NIST für Hash-Algorithmen (SHA-256) und Größen öffentlicher Schlüssel (RSA-2048) entsprechen.
- [C-1-6] DARF NICHT erlauben, den Bootvorgang abzuschließen, wenn die Systemüberprüfung fehlschlägt, es sei denn, der Nutzer willigt ein, trotzdem zu starten. In diesem Fall DÜRFEN die Daten aus nicht verifizierten Speicherblöcken nicht verwendet werden.
- [C-1-7] DÜRFEN NICHT zulassen, dass verifizierte Partitionen auf dem Gerät geändert werden, es sei denn, der Nutzer hat den Bootloader explizit entsperrt.
- [C-SR] Wenn sich im Gerät mehrere separate Chips befinden (z.B. ein Funkgerät oder ein spezialisierter Bildprozessor), wird dringend empfohlen, für jeden einzelnen Chip alle Phasen beim Starten zu überprüfen.
- [C-1-8] MÜSSEN einen manipulationssicheren Speicher verwenden, um zu speichern, ob der Bootloader entsperrt ist. Ein fälschungssicherer Speicher bedeutet, dass der Bootloader erkennen kann, ob der Speicher in Android manipuliert wurde.
- [C-1-9] MÜSSEN den Nutzer während der Verwendung des Geräts auffordern und eine physische Bestätigung erfordern, bevor ein Wechsel vom Bootloader-Sperrmodus in den entsperrten Bootloader-Modus möglich ist.
- [C-1-10] MÜSSEN für von Android verwendete Partitionen, z.B. Boot- oder Systempartitionen, einen Rollback-Schutz implementieren und einen manipulationssicheren Speicher zum Speichern der Metadaten verwenden, die zum Ermitteln der minimal zulässigen Betriebssystemversion verwendet werden.
- [C-SR] Wir empfehlen dringend, alle privilegierten APK-Dateien von privilegierten Apps mit einer Vertrauenskette in Partitionen zu prüfen, die durch den verifizierten Bootmodus geschützt sind.
- [C-SR] Wir empfehlen dringend, ausführbare Artefakte, die von einer privilegierten App von außerhalb ihrer APK-Datei geladen werden (z. B. dynamisch geladener oder kompilierter Code), vor der Ausführung zu prüfen, oder UNBEDINGT EMPFOHLEN, sie überhaupt nicht auszuführen.
- SOLLTEN Sie einen Rollback-Schutz für alle Komponenten mit dauerhafter Firmware implementieren (z.B. Modem oder Kamera) und SOLLTEN einen manipulationssicheren Speicher zum Speichern der Metadaten verwenden, die zur Bestimmung der zulässigen Mindestversion verwendet werden.
Wenn Geräteimplementierungen bereits auf einer früheren Version von Android ohne Unterstützung von C-1-8 bis C-1-10 eingeführt wurden und diese Anforderungen nicht durch ein Systemsoftwareupdate erfüllt werden können, sind sie möglicherweise von den Anforderungen ausgenommen.
Das vorgelagerte Open-Source-Projekt von Android bietet eine bevorzugte Implementierung dieser Funktion im Repository external/avb/
, das in den Bootloader integriert werden kann, der zum Laden von Android verwendet wird.
Geräteimplementierungen:
- [C-R] WIRDEN EMPFOHLEN, die Android Protected Confirmation API zu unterstützen.
Wenn Geräteimplementierungen die Android Protected Confirmation API unterstützen, gilt Folgendes:
-
[C-3-1] MÜSSEN
true
für dieConfirmationPrompt.isSupported()
API melden. -
[C-3-2] MÜSSEN sicherstellen, dass Code, der im Android-Betriebssystem einschließlich seines Kernels ausgeführt wird, ob schädlicher oder sonstiger Code, ohne Interaktion des Nutzers eine positive Antwort erzeugen kann.
-
[C-3-3] MÜSSEN sicherstellen, dass der Nutzer die entsprechende Meldung lesen und genehmigen konnte, auch wenn das Android-Betriebssystem einschließlich des Kernels manipuliert wurde.
9.11. Schlüssel und Anmeldedaten
Mit dem Android Keystore System können App-Entwickler kryptografische Schlüssel in einem Container speichern und über die KeyChain API oder die Keystore API für kryptografische Vorgänge verwenden. Geräteimplementierungen:
- [C-0-1] MÜSSEN zulassen,dass mindestens 8.192 Schlüssel importiert oder generiert werden.
- [C-0-2] Die Authentifizierung auf dem Sperrbildschirm MUSS die Anzahl der Versuche begrenzen und MUSS einen exponentiellen Backoff-Algorithmus haben. Nach 150 fehlgeschlagenen Versuchen MUSS die Verzögerung mindestens 24 Stunden pro Versuch betragen.
- SOLLTE die Anzahl der Schlüssel, die generiert werden können, nicht einschränken
Wenn die Geräteimplementierung einen sicheren Sperrbildschirm unterstützt, geschieht Folgendes:
- [C-1-1] MÜSSEN die Schlüsselspeicherimplementierung in einer isolierten Ausführungsumgebung sichern.
- [C-1-2] MÜSSEN Implementierungen der kryptografischen Algorithmen RSA, AES, ECDSA und HMAC sowie Hash-Funktionen der Familie MD5, SHA1 und SHA-2 haben, um die unterstützten Algorithmen des Android Keystore-Systems in einem Bereich zu unterstützen, der sicher vom Code isoliert ist, der im Kernel und darüber ausgeführt wird. Sichere Isolation MÜSSEN alle potenziellen Mechanismen blockieren, über die Kernel- oder Userspace-Code auf den internen Status der isolierten Umgebung zugreifen kann, einschließlich DMA. Das vorgelagerte Open-Source-Projekt von Android (AOSP) erfüllt diese Anforderung durch die Verwendung der Trusty-Implementierung. Alternativ können auch eine andere ARM TrustZone-basierte Lösung oder eine von einem Drittanbieter geprüfte sichere Implementierung einer ordnungsgemäßen Hypervisor-basierten Isolierung verwendet werden.
- [C-1-3] MÜSSEN die Sperrbildschirm-Authentifizierung in der isolierten Ausführungsumgebung durchführen und nur bei erfolgreicher Ausführung die Verwendung der mit der Authentifizierung verbundenen Schlüssel zulassen. Anmeldedaten für den Sperrbildschirm MÜSSEN so gespeichert werden, dass nur die isolierte Ausführungsumgebung die Sperrbildschirm-Authentifizierung durchführen kann. Das vorgelagerte Android-Open-Source-Projekt bietet den Gatekeeper Hardware Abstraktionsschicht (HAL) und Trusty, mit denen diese Anforderung erfüllt werden kann.
- [C-1-4] MUSS die Schlüsselattestierung unterstützen, wenn der Bestätigungsschlüssel durch sichere Hardware geschützt und die Signatur auf sicherer Hardware erfolgt. Die Signaturschlüssel für die Attestierung MÜSSEN für eine ausreichend große Anzahl von Geräten freigegeben werden, um zu verhindern, dass die Schlüssel als Gerätekennungen verwendet werden. Eine Möglichkeit, diese Anforderung zu erfüllen, besteht darin, denselben Attestierungsschlüssel zu verwenden, sofern nicht mindestens 100.000 Einheiten einer bestimmten Artikelnummer erzeugt werden. Wenn mehr als 100.000 Einheiten einer Artikelnummer produziert werden, kann für 100.000 Einheiten ein anderer Schlüssel verwendet werden.
Wenn eine Geräteimplementierung bereits unter einer früheren Android-Version gestartet wurde, ist ein solches Gerät von der Anforderung ausgenommen, einen Schlüsselspeicher in einer isolierten Ausführungsumgebung zu verwenden und die Schlüsselattestierung zu unterstützen, es sei denn, es deklariert die Funktion android.hardware.fingerprint
, die einen Schlüsselspeicher erfordert, der von einer isolierten Ausführungsumgebung unterstützt wird.
- [C-1-5] MÜSSEN Nutzer das Zeitlimit für den Ruhemodus für den Wechsel vom entsperrten in den gesperrten Zustand mit einem zulässigen Mindestzeitlimit von bis zu 15 Sekunden auswählen können.
9.11.1. Sicherer Sperrbildschirm und Authentifizierung
Die AOSP-Implementierung folgt einem gestaffelten Authentifizierungsmodell, bei dem eine auf Wissensfabriken basierende primäre Authentifizierung entweder durch eine sekundäre starke biometrische Methode oder durch schwächere tertiäre Modalitäten gestützt werden kann.
Geräteimplementierungen:
- [C-SR] wird dringend empfohlen, nur eine der folgenden Optionen als primäre Authentifizierungsmethode festzulegen:
<ph type="x-smartling-placeholder">
- </ph>
- Eine numerische PIN
- Ein alphanumerisches Passwort
- Ein Wischmuster auf einem Raster aus genau 3 x 3 Punkten
Beachten Sie, dass die oben genannten Authentifizierungsmethoden in diesem Dokument als empfohlene primäre Authentifizierungsmethoden bezeichnet werden.
Wenn bei Geräteimplementierungen die empfohlenen primären Authentifizierungsmethoden hinzugefügt oder geändert werden und eine neue Authentifizierungsmethode als sichere Methode zum Sperren des Bildschirms verwendet wird, gilt Folgendes:
- [C-2-1] MUSS die Nutzerauthentifizierungsmethode sein, wie unter Nutzerauthentifizierung für Schlüsselverwendung erforderlich beschrieben.
- [C-2-2] MÜSSEN alle Schlüssel für eine Drittanbieter-Entwickler-App entsperren, wenn der Nutzer den sicheren Sperrbildschirm entsperrt. Beispielsweise MÜSSEN alle Schlüssel für eine Drittanbieter-Entwickler-App über relevante APIs wie
createConfirmDeviceCredentialIntent
undsetUserAuthenticationRequired
verfügbar sein.
Wenn bei Geräteimplementierungen die Authentifizierungsmethoden zum Entsperren des Sperrbildschirms hinzugefügt oder geändert werden, sofern dies auf einem bekannten Secret basiert, und eine neue Authentifizierungsmethode als sichere Methode zum Sperren des Bildschirms verwenden muss, gilt Folgendes:
- [C-3-1] Die Entropie der kürzesten zulässigen Länge von Eingaben MUSS größer als 10 Bit sein.
- [C-3-2] Die maximale Entropie aller möglichen Eingaben MUSS größer als 18 Bit sein.
- [C-3-3] Die neue Authentifizierungsmethode DARF KEINE der empfohlenen primären Authentifizierungsmethoden (z.B. PIN, Muster, Passwort) ersetzen, die in AOSP implementiert und bereitgestellt werden.
- [C-3-4] Die neue Authentifizierungsmethode MUSS deaktiviert werden, wenn die DPC-Anwendung (Device Policy Controller) die Richtlinie für die Passwortqualität in der Methode
DevicePolicyManager.setPasswordQuality()
mit einer restriktiveren Qualitätskonstante alsPASSWORD_QUALITY_SOMETHING
festgelegt hat. - [C-3-5] Neue Authentifizierungsmethoden MÜSSEN entweder alle 72 Stunden oder seltener auf die empfohlenen primären Authentifizierungsmethoden (z.B. PIN, Muster, Passwort) zurückgreifen ODER dem Nutzer unmissverständlich offenlegen, dass einige Daten nicht gesichert werden, um die Privatsphäre der Daten zu schützen.
Wenn bei Geräteimplementierungen die empfohlenen primären Authentifizierungsmethoden zum Entsperren des Sperrbildschirms hinzugefügt oder geändert werden und eine neue Authentifizierungsmethode verwendet wird, die auf biometrischen Verfahren als sichere Methode zum Sperren des Bildschirms basiert, gilt die neue Methode:
- [C-4-1] MUSS aus Gründen der Nutzerfreundlichkeit alle in Abschnitt 7.3.10 beschriebenen Anforderungen erfüllen.
- [C-4-2] MÜSSEN über einen Fallback-Mechanismus verfügen, um eine der empfohlenen primären Authentifizierungsmethoden zu verwenden, die auf einem bekannten Secret basieren.
- [C-4-3] MÜSSEN deaktiviert sein und nur die empfohlene primäre Authentifizierung zum Entsperren des Bildschirms zulassen, wenn die Device Policy Controller-Anwendung (DPC) die Keyguard-Funktionsrichtlinie durch Aufrufen der Methode
DevicePolicyManager.setKeyguardDisabledFeatures()
mit einem der zugehörigen biometrischen Flags (z.B.KEYGUARD_DISABLE_BIOMETRICS
,KEYGUARD_DISABLE_FINGERPRINT
,KEYGUARD_DISABLE_FACE
oderKEYGUARD_DISABLE_IRIS
) festgelegt hat.
Wenn die biometrischen Authentifizierungsmethoden nicht die in Abschnitt 7.3.10 beschriebenen Anforderungen für Stark erfüllen, gehen Sie so vor:
- [C-5-1] Die Methoden MÜSSEN deaktiviert werden, wenn die Device Policy Controller-App (DPC) die Richtlinie für die Passwortqualität über die Methode
DevicePolicyManager.setPasswordQuality()
mit einer restriktiveren Qualitätskonstante alsPASSWORD_QUALITY_BIOMETRIC_WEAK
festgelegt hat. - [C-5-2] Nach einem Zeitlimit von 4 Stunden bei Inaktivität MUSS der Nutzer zur primären Authentifizierung aufgefordert werden (z. B. mit PIN, Muster, Passwort). Das Zeitlimit für die Inaktivität wird zurückgesetzt, nachdem die Geräteanmeldedaten erfolgreich bestätigt wurden.
- [C-5-3] Die Methoden DÜRFEN NICHT als sicherer Sperrbildschirm behandelt werden und MÜSSEN die Anforderungen erfüllen, die mit C-8 in diesem Abschnitt beginnen.
Wenn bei Geräteimplementierungen die Authentifizierungsmethoden zum Entsperren des Sperrbildschirms hinzugefügt oder geändert werden und eine neue Authentifizierungsmethode auf einem physischen Token oder dem Standort basiert:
- [C-6-1] Sie MÜSSEN über einen Fallback-Mechanismus verfügen, um eine der empfohlenen primären Authentifizierungsmethoden zu verwenden, die auf einem bekannten Secret basieren und die Anforderungen für einen sicheren Sperrbildschirm erfüllen.
- [C-6-2] Die neue Methode MÜSSEN deaktiviert werden und nur eine der empfohlenen primären Authentifizierungsmethoden zum Entsperren des Bildschirms zulassen, wenn die DPC-Anwendung (Device Policy Controller) die Richtlinie mit der Methode
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS)
oder der MethodeDevicePolicyManager.setPasswordQuality()
mit einer restriktiveren Qualitätskonstante alsPASSWORD_QUALITY_UNSPECIFIED
festgelegt hat. - [C-6-3] Der Nutzer MUSS mindestens alle 4 Stunden zur Eingabe einer der empfohlenen primären Authentifizierungsmethoden (z.B.PIN, Muster, Passwort) aufgefordert werden.
- [C-6-4] Die neue Methode DARF NICHT als sicherer Sperrbildschirm behandelt werden und MÜSSEN den unten in C-8 aufgeführten Einschränkungen entsprechen.
Wenn Geräteimplementierungen einen sicheren Sperrbildschirm haben und einen oder mehrere Trust Agenten enthalten, die die TrustAgentService
System API implementieren, geschieht Folgendes:
- [C-7-1] MUSS im Menü "Einstellungen" und auf dem Sperrbildschirm deutlich erkennbar sein, wenn die Gerätesperre ausgesetzt ist oder von einem Trust Agent entsperrt werden kann. AOSP erfüllt diese Anforderung beispielsweise, indem eine Textbeschreibung für die Einstellung „Automatische Sperre“ eingeblendet wird. und „Ein/Aus-Taste sperrt“ im Menü „Einstellungen“ und ein gut erkennbares Symbol auf dem Sperrbildschirm.
- [C-7-2] MÜSSEN alle Trust Agent-APIs in der Klasse
DevicePolicyManager
, z. B. die KonstanteKEYGUARD_DISABLE_TRUST_AGENTS
, respektieren und vollständig implementieren. - [C-7-3] DARF die
TrustAgentService.addEscrowToken()
-Funktion NICHT vollständig auf einem Gerät implementieren, das als primäres persönliches Gerät verwendet wird (z.B. ein Handheld), aber bei Geräteimplementierungen, die in der Regel gemeinsam genutzt werden (z.B. Android TV- oder Automotive-Geräte), DARF die Funktion vollständig implementiert werden. - [C-7-4] MÜSSEN alle von
TrustAgentService.addEscrowToken()
hinzugefügten gespeicherten Tokens verschlüsseln. - [C-7-5] DARF den Verschlüsselungsschlüssel bzw. das Treuhandtoken NICHT auf dem Gerät speichern, auf dem der Schlüssel verwendet wird. Beispielsweise ist es mit einem auf einem Smartphone gespeicherten Schlüssel zulässig, ein Nutzerkonto auf einem Fernseher zu entsperren.
- [C-7-6] MÜSSEN den Nutzer über die Auswirkungen auf die Sicherheit informieren, bevor das Treuhandtoken zur Entschlüsselung des Datenspeichers aktiviert wird.
- [C-7-7] MÜSSEN einen Fallback-Mechanismus haben, damit eine der empfohlenen primären Authentifizierungsmethoden verwendet werden kann.
- [C-7-8] Der Nutzer MUSS mindestens alle 72 Stunden zu einer der empfohlenen Methoden zur primären Authentifizierung (z. B. PIN, Muster, Passwort) aufgefordert werden, es sei denn, die Sicherheit des Nutzers (z. B. Ablenkung des Fahrers) ist ein Problem.
- [C-7-9] Nach einem Zeitlimit von 4 Stunden bei Inaktivität MUSS der Nutzer zu einer der empfohlenen Methoden zur primären Authentifizierung (z. B. PIN, Muster, Passwort) aufgefordert werden, es sei denn, die Sicherheit des Nutzers (z. B. Ablenkung des Fahrers) ist ein Problem. Das Zeitlimit für die Inaktivität wird zurückgesetzt, nachdem die Geräteanmeldedaten erfolgreich bestätigt wurden.
- [C-7-10] DARF NICHT als sicherer Sperrbildschirm behandelt werden und MÜSSEN die in C-8 unten aufgeführten Einschränkungen einhalten.
- [C-7-11] TrustAgents dürfen auf primären persönlichen Geräten (z. B. einem Handheld) NICHT erlauben, das Gerät zu entsperren. Sie können damit ein bereits entsperrtes Gerät maximal vier Stunden lang im entsperrten Zustand belassen. Die Standardimplementierung von TrustManagerService in AOSP erfüllt diese Anforderung.
- [C-7-12] MÜSSEN einen kryptografisch sicheren Kommunikationskanal (z. B. UKEY2) verwenden, um das Treuhandtoken vom Speichergerät an das Zielgerät zu übergeben.
Wenn bei Geräteimplementierungen die Authentifizierungsmethoden zum Entsperren des Sperrbildschirms, der kein sicherer Sperrbildschirm wie oben beschrieben ist, hinzugefügt oder geändert werden und eine neue Authentifizierungsmethode zum Entsperren des Keyguard verwendet wird:
- [C-8-1] Die neue Methode MUSS deaktiviert werden, wenn die Device Policy Controller-App (DPC) die Richtlinie für die Passwortqualität in der Methode
DevicePolicyManager.setPasswordQuality()
mit einer restriktiveren Qualitätskonstante alsPASSWORD_QUALITY_UNSPECIFIED
festgelegt hat. - [C-8-2] Sie DÜRFEN die von
DevicePolicyManager.setPasswordExpirationTimeout()
festgelegten Timer für das Ablaufen des Passworts NICHT zurücksetzen. - [C-8-3] Sie DÜRFEN KEINE API zur Verwendung durch Drittanbieter-Apps zur Verfügung stellen, um den Sperrstatus zu ändern.
9.11.2. Kofferraum
Mit dem Android-Schlüsselspeichersystem können App-Entwickler kryptografische Schlüssel in einem dedizierten sicheren Prozessor sowie in der oben beschriebenen isolierten Ausführungsumgebung speichern. Ein solcher dedizierter, sicherer Prozessor wird als „StrongBox“ bezeichnet. In den nachfolgenden Anforderungen C-1-3 bis C-1-11 werden die Anforderungen definiert, die ein Gerät erfüllen muss, um als StrongBox eingestuft zu werden.
Geräteimplementierungen mit einem dedizierten sicheren Prozessor:
- [C-SR] wird dringend empfohlen, StrongBox zu unterstützen. StrongBox wird voraussichtlich in einer zukünftigen Version eine Voraussetzung sein.
Wenn Geräteimplementierungen StrongBox unterstützen, gilt Folgendes:
-
[C-1-1] MUSS FEATURE_STRONGBOX_KEYSTORE deklarieren.
-
[C-1-2] MÜSSEN dedizierte sichere Hardware zur Sicherung des Schlüsselspeichers und der sicheren Nutzerauthentifizierung bereitstellen. Die dedizierte Hardware kann auch für andere Zwecke verwendet werden.
-
[C-1-3] MUSS eine diskrete CPU haben, die keinen Cache, DRAM, Koprozessoren oder andere Kernressourcen mit dem Anwendungsprozessor (AP) teilt.
-
[C-1-4] MÜSSEN Sie sicherstellen, dass Peripheriegeräte, die mit dem Zugangspunkt gemeinsam genutzt werden, die StrongBox-Verarbeitung in keiner Weise verändern und keine Informationen von der StrongBox beziehen können. Der AP kann den Zugriff auf StrongBox deaktivieren oder blockieren.
-
[C-1-5] MUSS eine interne Uhr mit angemessener Genauigkeit (+-10%) haben, die nicht von Manipulation durch den AP beeinflusst werden kann.
-
[C-1-6] MUSS einen echten Zufallszahlengenerator haben, der eine gleichmäßig verteilte und unvorhersehbare Ausgabe erzeugt.
-
[C-1-7] MUSS manipulationsgeschützt sein, einschließlich physikalischer Durchdringung und Störungen.
-
[C-1-8] MUSS einen Seitenkanalwiderstand haben, einschließlich Widerstand gegen das Auslaufen von Informationen über die Seitenkanäle für Strom, Zeit, elektromagnetische und Wärmestrahlung.
-
[C-1-9] MÜSSEN über einen sicheren Speicher verfügen, der Vertraulichkeit, Integrität, Authentizität, Konsistenz und Aktualität der Inhalte gewährleistet. Der Speicher DÜRFEN NICHT gelesen oder geändert werden, sofern dies nicht gemäß den StrongBox-APIs zulässig ist.
-
Um die Einhaltung von [C-1-3] bis [C-1-9] zu prüfen, müssen folgende Geräteimplementierungen erfüllt sein:
- [C-1-10] MÜSSEN die Hardware enthalten, die gemäß dem Secure IC Protection Profile BSI-CC-PP-0084-2014 zertifiziert oder von einem landesweit akkreditierten Testlabor bewertet wurde, das eine Bewertung von Sicherheitslücken mit hohem Angriffspotenzial gemäß der Common Criteria-Anwendung des Angriffspotenzials auf Smartcards aufweist.
- [C-1-11] MUSS die Firmware enthalten, die von einem landesweit akkreditierten Testlabor bewertet wird, das eine Bewertung des Angriffspotenzials mit hohem Angriffspotenzial gemäß der Common Criteria-Anwendung des Angriffspotenzials auf Smartcards anbietet.
- [C-SR] wird dringend empfohlen, die Hardware einzubeziehen, die anhand eines Sicherheitsziels, EAL 5 (Evaluation Assurance Level, EAL) 5 (geprüft durch AVA_VAN.5) bewertet wird. Die EAL 5-Zertifizierung wird voraussichtlich in einem zukünftigen Release eine Voraussetzung sein.
-
[C-SR] wird UNBEDINGT dazu empfohlen, die IAR (Insider-Angriffe) zu schützen. Das bedeutet, dass Insider mit Zugriff auf Firmware-Signaturschlüssel keine Firmware produzieren können, die dazu führt, dass StrongBox Geheimnisse preisgibt, Funktionssicherheitsanforderungen umgeht oder anderweitig den Zugriff auf sensible Nutzerdaten ermöglicht. Die empfohlene Methode zur Implementierung von IAR besteht darin, Firmware-Updates nur dann zuzulassen, wenn das Passwort des primären Nutzers über den IAuthSecret-HAL bereitgestellt wird.
9.12. Löschen von Daten
Alle Geräteimplementierungen:
- [C-0-1] MÜSSEN Nutzern eine Methode zum Zurücksetzen auf die Werkseinstellungen zur Verfügung stellen.
- [C-0-2] MÜSSEN alle Daten im Dateisystem der Benutzerdaten löschen.
- [C-0-3] MÜSSEN die Daten auf eine Weise löschen, die den relevanten Branchenstandards wie NIST SP800-88 entspricht.
- [C-0-4] MÜSSEN den obigen "Zurücksetzen auf die Werkseinstellungen" auslösen. Prozess, wenn die
DevicePolicyManager.wipeData()
API von der Device Policy Controller-App des primären Nutzers aufgerufen wird. - KANN eine Option zur schnellen Datenlöschung anbieten, bei der nur eine logische Löschung durchgeführt wird.
9:13. Abgesicherter Modus
Android bietet den abgesicherten Startmodus, mit dem Nutzer in einem Modus starten können, in dem nur vorinstallierte System-Apps ausgeführt und alle Drittanbieter-Apps deaktiviert sind. In diesem Modus, der als „Abgesicherter Modus“ bezeichnet wird, können Nutzer potenziell schädliche Apps von Drittanbietern deinstallieren.
Es gibt folgende Geräteimplementierungen:
- [SR] UNBEDINGT EMPFOHLEN, den abgesicherten Bootmodus zu implementieren.
Wenn Geräteimplementierungen den abgesicherten Bootmodus implementieren, gilt Folgendes:
-
[C-1-1] MÜSSEN dem Nutzer die Möglichkeit geben, den abgesicherten Bootmodus so zu starten, dass er mit auf dem Gerät installierten Drittanbieter-Apps nicht unterbrochen werden kann, es sei denn, die Drittanbieter-App ist ein Device Policy Controller und hat das Flag
UserManager.DISALLOW_SAFE_BOOT
auf „true“ gesetzt. -
[C-1-2] MÜSSEN Nutzern die Möglichkeit geben, Drittanbieter-Apps im abgesicherten Modus zu deinstallieren.
-
SOLLTE dem Nutzer eine Option anbieten, mit der er über das Bootmenü in den abgesicherten Modus wechseln kann.
9:14. Kfz-Systemisolierung
Android Automotive-Geräte müssen Daten mit wichtigen Fahrzeug-Subsystemen austauschen. Dazu verwenden sie den Fahrzeug-HAL, um Nachrichten über Fahrzeugnetzwerke wie den CAN-Bus zu senden und zu empfangen.
Der Datenaustausch kann gesichert werden, indem Sicherheitsfunktionen unterhalb der Android-Framework-Ebenen implementiert werden, um bösartige oder unbeabsichtigte Interaktionen mit diesen Subsystemen zu verhindern.
9:15. Abos
„Abos“ Weitere Informationen finden Sie in den Details zum Tarif für die Abrechnung, die von einem Mobilfunkanbieter über SubscriptionManager.setSubscriptionPlans()
bereitgestellt werden.
Alle Geräteimplementierungen:
- [C-0-1] MÜSSEN Abonnements nur an die App des Mobilfunkanbieters zurückgeben, von der sie ursprünglich bereitgestellt wurden.
- [C-0-2] DÜRFEN KEINE Abos per Remotezugriff sichern oder hochladen.
- [C-0-3] MUSS nur Überschreibungen wie
SubscriptionManager.setSubscriptionOverrideCongested()
aus der Mobilfunkanbieter-App zulassen, die aktuell gültige Abos anbietet.
10. Software-Kompatibilitätstests
Geräteimplementierungen MÜSSEN alle in diesem Abschnitt beschriebenen Tests bestehen. Beachten Sie jedoch, dass kein Softwaretestpaket vollständig umfassend ist. Aus diesem Grund wird dringend empfohlen, Implementierungen von Geräten, die im Android Open Source Project verfügbar sind, möglichst wenige Änderungen an der Referenz und bevorzugten Implementierung von Android vorzunehmen. Dadurch wird das Risiko minimiert, dass Fehler eingebaut werden, die zu Inkompatibilitäten führen, die überarbeitet werden müssen und potenzielle Geräteupdates erfordern.
10.1. Kompatibilitätstest-Suite
Geräteimplementierungen:
-
[C-0-1] MÜSSEN die im Android Open Source Project verfügbare Android Compatibility Test Suite (CTS) mit der endgültigen Versandsoftware auf dem Gerät erfolgreich durchlaufen.
-
[C-0-2] MÜSSEN die Kompatibilität bei Unklarheiten in CTS und bei Neuimplementierungen von Teilen des Referenzquellcodes gewährleisten.
Das CTS ist für die Ausführung auf einem echten Gerät konzipiert. Wie jede Software kann auch die CTS selbst Fehler enthalten. Die CTS wird unabhängig von dieser Kompatibilitätsdefinition versioniert und für Android 10 können mehrere Versionen der CTS veröffentlicht werden.
Geräteimplementierungen:
-
[C-0-3] MÜSSEN die zum Zeitpunkt der Fertigstellung der Gerätesoftware verfügbare CTS-Version verwendet werden.
-
SOLLTEN so weit wie möglich die Referenzimplementierung in der Android Open Source-Struktur verwenden.
10.2. CTS-Prüfung
Der CTS Verifier ist in der Kompatibilitätstest-Suite enthalten und wurde für einen menschlichen Bediener vorgesehen, um Funktionen zu testen, die von einem automatisierten System nicht getestet werden können, z. B. die korrekte Funktion einer Kamera und von Sensoren.
Geräteimplementierungen:
- [C-0-1] MÜSSEN alle anwendbaren Fälle in der CTS-Prüfung korrekt ausführen.
Der CTS Verifier bietet Tests für viele Arten von Hardware, unter anderem für einige optionale Hardware.
Geräteimplementierungen:
- [C-0-2] MÜSSEN alle Tests für eigene Hardware bestehen. Verfügt ein Gerät beispielsweise über einen Beschleunigungsmesser, MUSS es den Testlauf des Beschleunigungsmessers im CTS Verifier ordnungsgemäß ausführen.
Testläufe für Funktionen, die in diesem Dokument zur Kompatibilitätsdefinition als optional gekennzeichnet sind, können übersprungen oder weggelassen werden.
- [C-0-2] Jedes Gerät und jeder Build MÜSSEN den CTS Verifier wie oben beschrieben ordnungsgemäß ausführen. Da viele Builds sehr ähnlich sind, wird jedoch nicht erwartet, dass die Geräte-Implementierer den CTS Verifier explizit auf Builds ausführen, die sich nur geringfügig unterscheiden. Insbesondere bei Geräteimplementierungen, die sich von einer Implementierung unterscheiden, die den CTS Verifier nur durch die Gruppe der enthaltenen Sprachen, Branding usw. bestanden hat, KÖNNEN den CTS Verifier-Test weglassen.
11. Software zum Aktualisieren
-
[C-0-1] Geräteimplementierungen MÜSSEN einen Mechanismus enthalten, der die gesamte Systemsoftware ersetzt. Der Mechanismus muss keine „Live“-Upgrades durchführen, d. h. es ist KÖNNEN ein Neustart des Geräts erforderlich. Es kann jede Methode verwendet werden, vorausgesetzt, sie ersetzt die gesamte auf dem Gerät vorinstallierte Software. Diese Anforderung wird beispielsweise von einem der folgenden Ansätze erfüllt:
- Over-the-Air-Downloads (OTA) mit Offline-Aktualisierung durch Neustart
- Aktualisierungen per Tethering von einem Host-PC über USB
- „Offline“-Updates werden nach einem Neustart durchgeführt und über eine Datei auf einem Wechseldatenträger aktualisiert.
-
[C-0-2] Der verwendete Aktualisierungsmechanismus MÜSSEN Updates unterstützen, ohne die Nutzerdaten zu löschen. Das heißt, der Aktualisierungsmechanismus MÜSSEN die privaten Daten der Anwendung und die freigegebenen Daten der Anwendung beibehalten. Beachten Sie, dass die vorgelagerte Android-Software einen Updatemechanismus enthält, der diese Anforderung erfüllt.
-
[C-0-3] Das gesamte Update MUSS signiert sein und der Updatemechanismus auf dem Gerät MÜSSEN die Aktualisierung und Signatur anhand eines öffentlichen Schlüssels auf dem Gerät prüfen.
- [C-SR] Für den Signaturmechanismus wird dringend empfohlen, das Update mit SHA-256 zu hashen und mit ECDSA NIST P-256 anhand des öffentlichen Schlüssels zu validieren.
Wenn Geräteimplementierungen eine nicht getaktete Datenverbindung unterstützen, z. B. ein 802.11- oder Bluetooth PAN-Profil (Personal Area Network), gilt Folgendes:
- [C-1-1] MÜSSEN OTA-Downloads mit Offline-Updates per Neustart unterstützen.
Bei Geräteimplementierungen, die mit Android 6.0 und höher auf den Markt gebracht werden, sollte der Updatemechanismus die Überprüfung unterstützen, ob das System-Image binär identisch mit dem erwarteten Ergebnis nach einem OTA-Update ist. Die blockbasierte OTA-Implementierung im vorgelagerten Android-Open-Source-Projekt, die seit Android 5.1 hinzugefügt wurde, erfüllt diese Anforderung.
Außerdem sollten Geräteimplementierungen A/B-Systemupdates unterstützen. Der AOSP implementiert diese Funktion mithilfe des Boot-Steuerelement-HAL.
Wenn in einer Geräteimplementierung ein Fehler gefunden wird, nachdem diese veröffentlicht wurde, aber innerhalb der angemessenen Produktlebensdauer, die in Absprache mit dem Android-Kompatibilitätsteam ermittelt wurde, um die Kompatibilität von Drittanbieter-Apps zu beeinflussen, dann:
- [C-2-1] Der Implementierer des Geräts MÜSSEN den Fehler über ein verfügbares Softwareupdate beheben, das mit dem oben beschriebenen Mechanismus angewendet werden kann.
Android umfasst Funktionen, mit denen die Geräteinhaber-App (falls vorhanden) die Installation von Systemupdates steuern kann. Wenn das Systemupdate-Subsystem für Geräte „android.software.device_admin“ meldet, geschieht Folgendes:
- [C-3-1] MÜSSEN das in der Klasse SystemUpdatePolicy beschriebene Verhalten implementieren.
12. Änderungsprotokoll für Dokumente
Für eine Zusammenfassung der Änderungen an der Kompatibilitätsdefinition in diesem Release:
Zusammenfassung der Änderungen in einzelnen Abschnitten:
- Einführung
- Gerätetypen
- Software
- Anwendungspaket erstellen
- Multimedia
- Entwicklertools und -optionen
- Kompatibilität mit Hardware
- Leistung und Leistung
- Sicherheitsmodell
- Software-Kompatibilitätstests
- Aktualisierungen von Software
- Änderungsprotokoll für Dokumente
- Kontakt
12.1 Tipps zum Aufrufen des Änderungsprotokolls
Änderungen sind wie folgt gekennzeichnet:
-
CDD
Die Kompatibilitätsanforderungen wurden grundlegend geändert. -
Google Docs
Kosmetische oder baubezogene Änderungen.
Für eine optimale Darstellung hängen Sie die URL-Parameter pretty=full
und no-merges
an Ihre Änderungsprotokoll-URLs an.
13. Kontakt
Sie können dem Forum zur Android-Kompatibilität beitreten und dort um Erläuterungen bitten oder Probleme melden, die im Dokument Ihrer Meinung nach nicht behandelt werden.