1. Einführung
In diesem Dokument werden die Anforderungen aufgeführt, die erfüllt sein müssen, damit Geräte mit Android 9 kompatibel sind.
Die Verwendung von „MUSS“, „MÜSSEN“, „ERFORDERLICH“, „SHALL“, „SHALL NOT“, „SOLLTE“, „SOLLTEN NICHT“, „EMPFOHLEN“, „KANN“ und „OPTIONAL“ erfolgt gemäß dem IETF-Standard RFC2119.
In diesem Dokument bezeichnet ein „Geräteimplementierer“ oder „Implementierer“ eine Person oder Organisation, die eine Hardware-/Softwarelösung mit Android 9 entwickelt. Eine „Geräteimplementierung“ oder „Implementierung“ ist die so entwickelte Hardware-/Softwarelösung.
Damit Geräte als mit Android 9 kompatibel gelten, MÜSSEN sie die in dieser Kompatibilitätsdefinition aufgeführten Anforderungen erfüllen, einschließlich aller Dokumente, die durch Verweis einbezogen werden.
Wenn diese Definition oder die in Abschnitt 10 beschriebenen Softwaretests nicht eindeutig oder unvollständig sind, liegt es in der Verantwortung des Geräteimplementators, für die Kompatibilität mit vorhandenen Implementierungen zu sorgen.
Aus diesem Grund ist das Open-Source-Projekt für Android sowohl die Referenz- als auch die bevorzugte Implementierung von Android. Geräteimplementierern wird DRINGEND empfohlen, ihre Implementierungen nach Möglichkeit auf dem „Upstream“-Quellcode zu basieren, der im Android Open Source Project verfügbar ist. Einige Komponenten können zwar hypothetisch durch alternative Implementierungen ersetzt werden, dies wird jedoch DRINGEND abgeraten, da das Bestehen der Softwaretests dadurch erheblich erschwert wird. Es liegt in der Verantwortung des Implementators, für eine vollständige Verhaltenskompatibilität mit der Standard-Android-Implementierung zu sorgen, einschließlich und über die Compatibility Test Suite hinaus. Bestimmte Komponentenersetzungen und -änderungen sind gemäß diesem Dokument ausdrücklich untersagt.
Viele der in diesem Dokument verlinkten Ressourcen stammen direkt oder indirekt aus dem Android SDK und sind funktional mit den Informationen in der Dokumentation dieses SDK identisch. In allen Fällen, in denen diese Kompatibilitätsdefinition oder die Kompatibilitätstestsuite nicht mit der SDK-Dokumentation übereinstimmt, gilt die SDK-Dokumentation als verbindlich. Alle technischen Details in den verlinkten Ressourcen in diesem Dokument gelten als Teil dieser Kompatibilitätsdefinition.
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 von Abschnitt 2 ist einem bestimmten Gerätetyp gewidmet.
Alle anderen Anforderungen, die allgemein für alle Android-Geräte gelten, sind in den Abschnitten nach Abschnitt 2 aufgeführt. Diese Anforderungen werden in diesem Dokument als „Grundlegende Anforderungen“ bezeichnet.
1.1.2. Anforderungs-ID
Die Anforderungs-ID wird für MUST-Anforderungen zugewiesen.
- Die ID wird nur für MUSS-Anforderungen zugewiesen.
- DRINGEND EMPFOHLENE Anforderungen sind als [SR] gekennzeichnet, aber es ist keine ID zugewiesen.
- Die ID besteht aus : Gerätetyp-ID – Bedingungs-ID – Anforderungs-ID (z.B. C-0-1).
Jede ID wird so definiert:
- Gerätetyp-ID (weitere Informationen finden Sie unter 2. Gerätetypen)
- C: Kern (Anforderungen, die auf alle Android-Geräteimplementierungen angewendet werden)
- H: Android-Mobilgerät
- T: Android TV-Gerät
- A: Android Automotive-Implementierung
- Tab: Implementierung für Android-Tablets
- Bedingungs-ID
- Wenn die Anforderung bedingungslos ist, wird diese ID auf 0 festgelegt.
- Wenn die Anforderung bedingt ist, wird der ersten Bedingung 1 zugewiesen. Die Zahl wird innerhalb desselben Abschnitts und desselben Gerätetyps um 1 erhöht.
- Anforderungs-ID
- Diese ID beginnt mit dem Wert 1 und wird innerhalb desselben Abschnitts und derselben Bedingung jeweils 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 : Abschnitts-ID / Gerätetyp-ID – Bedingungs-ID – Anforderungs-ID (z.B. 7.4.3/A-0-1).
2. Gerätetypen
Das Android Open Source Project bietet einen Softwarestack, der für eine Vielzahl von Gerätetypen und Formfaktoren verwendet werden kann. Es gibt jedoch einige Gerätetypen, für die ein relativ besser etabliertes Ökosystem für die Anwendungsverteilung besteht.
In diesem Abschnitt werden diese Gerätetypen sowie zusätzliche Anforderungen und Empfehlungen für jeden Gerätetyp beschrieben.
Alle Android-Geräte, die in keinen der beschriebenen Gerätetypen fallen, MÜSSEN trotzdem alle Anforderungen in den anderen Abschnitten dieser Kompatibilitätsdefinition erfüllen.
2.1 Gerätekonfigurationen
Die wichtigsten Unterschiede bei der Hardwarekonfiguration nach Gerätetyp finden Sie in den folgenden gerätespezifischen Anforderungen in diesem Abschnitt.
2.2. Anforderungen an Handhelds
Ein Android-Handheld-Gerät ist eine Android-Geräteimplementierung, die in der Regel in der Hand gehalten wird, z. B. ein MP3-Player, ein Smartphone oder ein Tablet.
Android-Geräte werden als Mobilgeräte klassifiziert, wenn sie alle folgenden Kriterien erfüllen:
- Sie haben eine Stromquelle, die Mobilität bietet, z. B. einen Akku.
- Die Bildschirmdiagonale muss zwischen 6,4 und 20,3 cm liegen.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts gelten speziell für Android-Implementierungen auf Mobilgeräten.
2.2.1. Hardware
Implementierungen für Handheld-Geräte:
- [7.1.1.1/H-0-1] MÜSSEN ein Display mit einer physischen Diagonale von mindestens 6,4 cm haben.
- [7.1.1.3/H-SR] Es wird DRINGEND EMPFOHLEN, Nutzern die Möglichkeit zu geben, die Displaygröße zu ändern.(Bildschirmdichte)
Wenn für Implementierungen von Mobilgeräten die Unterstützung von HDR-Displays über Configuration.isScreenHdr()
angegeben ist , gilt Folgendes:
- [7.1.4.5/H-1-1] MÜSSEN die Unterstützung der 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
angeben.
Implementierungen für Handheld-Geräte:
- [7.1.5/H-0-1] MÜSSEN den Modus für die Kompatibilität mit älteren Anwendungen unterstützen, wie er im Upstream-Android-Open-Source-Code implementiert ist. Das heißt, die Auslöser oder Grenzwerte, bei denen der Kompatibilitätsmodus aktiviert wird, und das Verhalten des Kompatibilitätsmodus selbst DÜRFEN NICHT geändert werden.
- [7.2.1/H-0-1] MÜSSEN die Unterstützung von IME-Anwendungen (Eingabemethoden-Editor) von Drittanbietern umfassen.
- [7.2.3/H-0-1] MÜSSEN die Funktionen „Startseite“, „Letzte“ und „Zurück“ bereitstellen.
- [7.2.3/H-0-2] MÜSSEN sowohl das normale als auch das Ereignis „Lang gedrückt halten“ der Zurück-Funktion (
KEYCODE_BACK
) an die Anwendung im Vordergrund senden. Diese Ereignisse DÜRFEN NICHT vom System verwendet werden und KÖNNEN außerhalb des Android-Geräts ausgelöst werden (z.B. über eine externe Hardwaretastatur, die mit dem Android-Gerät verbunden ist). - [7.2.4/H-0-1] MÜSSEN die Eingabe per Touchscreen unterstützen.
- [7.2.4/H-SR] Es wird DRINGEND EMPFOHLEN, die vom Nutzer ausgewählte Assistenz-App, d. h. die App, die VoiceInteractionService implementiert, oder eine Aktivität zu starten, die
ACTION_ASSIST
beim langen Drücken vonKEYCODE_MEDIA_PLAY_PAUSE
oderKEYCODE_HEADSETHOOK
verarbeitet, wenn die Aktivität im Vordergrund diese Ereignisse nicht verarbeitet. - [7.3.1/H-SR] Es wird DRINGEND EMPFOHLEN, einen 3‑Achsen-Beschleunigungsmesser zu verwenden.
Wenn Implementierungen von Handheld-Geräten einen 3‑Achsen-Beschleunigungsmesser enthalten, gilt Folgendes:
- [7.3.1/H-1-1] MÜSSEN Ereignisse mit einer Frequenz von mindestens 100 Hz melden können.
Wenn Implementierungen von Handheld-Geräten ein Gyroskop enthalten, gilt Folgendes:
- [7.3.4/H-1-1] MÜSSEN Ereignisse mit einer Frequenz von mindestens 100 Hz melden können.
Implementierungen von Mobilgeräten, die Sprachanrufe starten können und in getPhoneType
einen anderen Wert als PHONE_TYPE_NONE
angeben:
- [7.3.8/H] SOLLTEN einen Näherungssensor enthalten.
Implementierungen für Handheld-Geräte:
- [7.3.12/H-SR] Es wird EMPFOHLEN, einen Pose-Sensor mit 6 Freiheitsgraden zu unterstützen.
- [7.4.3/H] SOLLTEN Bluetooth und Bluetooth LE unterstützen.
Wenn Implementierungen von Handheld-Geräten eine getaktete Verbindung umfassen, gilt Folgendes:
- [7.4.7/H-1-1] MÜSSEN den Datensparmodus bereitstellen.
Implementierungen für Handheld-Geräte:
- [7.6.1/H-0-1] Es muss mindestens 4 GB nicht flüchtiger Speicher für private Anwendungsdaten (auch „/data“-Partition genannt) verfügbar sein.
- [7.6.1/H-0-2] MÜSSEN für
ActivityManager.isLowRamDevice()
„wahr“ zurückgeben, wenn für den Kernel und den Userspace weniger als 1 GB Arbeitsspeicher verfügbar sind.
Wenn Implementierungen von Handheld-Geräten nur die Unterstützung eines 32-Bit-ABI deklarieren:
-
[7.6.1/H-1-1] Der für den Kernel und den Userspace verfügbare Arbeitsspeicher MUSS mindestens 416 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis zu qHD (z.B. FWVGA) verwendet.
-
[7.6.1/H-2-1] Der für den Kernel und den Userspace verfügbare Arbeitsspeicher MUSS mindestens 592 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis HD+ (z.B. HD, WSVGA) verwendet.
-
[7.6.1/H-3-1] Der für den Kernel und den Userspace verfügbare Arbeitsspeicher MUSS mindestens 896 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis zu FHD (z.B. WSXGA+) verwendet.
-
[7.6.1/H-4-1] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 1.344 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis QHD (z. B. QWXGA) verwendet.
Wenn Implementierungen von Handheld-Geräten die Unterstützung eines 64‑Bit-ABI (mit oder ohne 32‑Bit-ABI) angeben:
-
[7.6.1/H-5-1] Der für den Kernel und den Userspace verfügbare Arbeitsspeicher MUSS mindestens 816 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis zu qHD (z.B. FWVGA) verwendet.
-
[7.6.1/H-6-1] Der für den Kernel und den Userspace verfügbare Arbeitsspeicher MUSS mindestens 944 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis zu HD+ (z.B. HD, WSVGA) verwendet.
-
[7.6.1/H-7-1] Der für den Kernel und den Userspace verfügbare Arbeitsspeicher MUSS mindestens 1.280 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis zu FHD (z. B. WSXGA+) verwendet.
-
[7.6.1/H-8-1] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 1.824 MB betragen, wenn das Standarddisplay Framebufferauflösungen bis QHD (z. B. QWXGA) verwendet.
Hinweis: Der oben genannte „für den Kernel und Userspace verfügbare Arbeitsspeicher“ bezieht sich auf den Arbeitsspeicherplatz, der zusätzlich zu dem Arbeitsspeicher zur Verfügung gestellt wird, der bereits für Hardwarekomponenten wie Radio, Video usw. reserviert ist, die bei Geräteimplementierungen nicht vom Kernel verwaltet werden.
Wenn für die Implementierung von Handheld-Geräten weniger als 1 GB Arbeitsspeicher für den Kernel und den Userspace verfügbar ist, gilt Folgendes:
- [7.6.1/H-9-1] MÜSSEN das Funktions-Flag
android.hardware.ram.low
deklarieren. - [7.6.1/H-9-2] Es MUSS mindestens 1,1 GB nicht flüchtiger Speicher für private Anwendungsdaten (auch „/data“-Partition genannt) vorhanden sein.
Wenn für die Implementierung von Handheld-Geräten mehr als 1 GB Arbeitsspeicher für den Kernel und den Userspace verfügbar ist, gilt Folgendes:
- [7.6.1/H-10-1] Es MUSS mindestens 4 GB nicht flüchtiger Speicher für private Anwendungsdaten (auch „/data“-Partition genannt) verfügbar sein.
- SOLLTEN das Funktions-Flag
android.hardware.ram.normal
deklarieren.
Implementierungen für Handheld-Geräte:
- [7.6.2/H-0-1] Der gemeinsam genutzte Speicherplatz für Anwendungen darf NICHT kleiner als 1 GiB sein.
- [7.7.1/H] Es sollte einen USB-Anschluss haben, der den Peripheriemodus unterstützt.
Wenn Implementierungen von Handheld-Geräten einen USB-Anschluss haben, der den Peripheriemodus unterstützt, gilt Folgendes:
- [7.7.1/H-1-1] Die Android Open Accessory API (AOA) MUSS implementiert werden.
Implementierungen für Handheld-Geräte:
- [7.8.1/H-0-1] MÜSSEN ein Mikrofon enthalten.
- [7.8.2/H-0-1] MÜSSEN eine Audioausgabe haben und
android.hardware.audio.output
angeben.
Wenn Implementierungen von Handheld-Geräten 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
android.hardware.vr.high_performance
-Funktions-Flag deklarieren. - [7.9.1/H-1-2] MÜSSEN eine Anwendung enthalten, die
android.service.vr.VrListenerService
implementiert und von VR-Anwendungen überandroid.app.Activity#setVrModeEnabled
aktiviert werden kann.
2.2.2. Multimedia
Implementierungen für Mobilgeräte MÜSSEN die folgende Audiocodierung unterstützen:
- [5.1.1/H-0-1] AMR-NB
- [5.1.1/H-0-2] AMR-WB
- [5.1.1/H-0-3] MPEG-4 AAC-Profil (AAC LC)
- [5.1.1/H-0-4] MPEG-4 HE AAC Profile (AAC+)
- [5.1.1/H-0-5] AAC ELD (Enhanced Low Delay AAC)
Implementierungen von Handheld-Geräten MÜSSEN die folgende Audiodekodierung unterstützen:
Implementierungen von Mobilgeräten MÜSSEN die folgende Videocodierung unterstützen und für Drittanbieter-Apps verfügbar machen:
Implementierungen für Mobilgeräte MÜSSEN die folgende Videodecodierung unterstützen:
2.2.3. Software
Implementierungen für Handheld-Geräte:
- [3.2.3.1/H-0-1] Es MUSS eine Anwendung geben, die die Intents
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
,ACTION_OPEN_DOCUMENT_TREE
undACTION_CREATE_DOCUMENT
wie in den SDK-Dokumenten beschrieben verarbeitet und Nutzern die Möglichkeit bietet, über dieDocumentsProvider
API auf die Daten des Dokumentanbieters zuzugreifen. - [3.4.1/H-0-1] MÜSSEN eine vollständige Implementierung der
android.webkit.Webview
API bereitstellen. - [3.4.2/H-0-1] MÜSSEN eine eigenständige Browseranwendung für das allgemeine Surfen im Web enthalten.
- [3.8.1/H-SR] Es wird DRINGEND EMPFOHLEN, einen Standard-Launcher zu implementieren, der das Anpinnen von Verknüpfungen, Widgets und widgetFeatures in Apps unterstützt.
- [3.8.1/H-SR] Es wird DRINGEND EMPFOHLEN, einen Standard-Launcher zu implementieren, der über die ShortcutManager API schnellen Zugriff auf die zusätzlichen Verknüpfungen von Drittanbieter-Apps bietet.
- [3.8.1/H-SR] Es wird DRINGEND EMPFOHLEN, eine Standard-Launcher-App einzubinden, die Badges für die App-Symbole anzeigt.
- [3.8.2/H-SR] Es wird DRINGEND EMPFOHLEN, Widgets von Drittanbieter-Apps zu unterstützen.
- [3.8.3/H-0-1] Drittanbieter-Apps MÜSSEN Nutzern über die API-Klassen
Notification
undNotificationManager
Benachrichtigungen zu wichtigen Ereignissen senden dürfen. - [3.8.3/H-0-2] MÜSSEN erweiterte Benachrichtigungen unterstützen.
- [3.8.3/H-0-3] MÜSSEN wichtige Benachrichtigungen unterstützen.
- [3.8.3/H-0-4] MUSS einen Benachrichtigungs-Schirm enthalten, über den Nutzer die Benachrichtigungen direkt steuern können (z. B. antworten, pausieren, schließen, blockieren) – z. B. über Aktionsschaltflächen oder das Steuerfeld, wie im AOSP implementiert.
- [3.8.3/H-0-5] MÜSSEN die über
RemoteInput.Builder setChoices()
verfügbaren Optionen in der Benachrichtigungsleiste angezeigt werden. - [3.8.3/H-SR] Es wird DRINGEND EMPFOHLEN, die erste Option, die über
RemoteInput.Builder setChoices()
bereitgestellt wird, im Benachrichtigungs-Schieberegler ohne zusätzliche Nutzerinteraktion anzuzeigen. - [3.8.3/H-SR] Es wird DRINGEND EMPFOHLEN, alle Optionen, die über
RemoteInput.Builder setChoices()
verfügbar sind, in der Benachrichtigungsleiste anzuzeigen, wenn der Nutzer alle Benachrichtigungen in der Benachrichtigungsleiste maximiert. - [3.8.4/H-SR] Es wird DRINGEND EMPFOHLEN, einen Assistenten auf dem Gerät zu implementieren, um die Assist-Aktion zu verarbeiten.
Wenn Implementierungen von Handheld-Geräten die Assist-Aktion unterstützen, gilt Folgendes:
- [3.8.4/H-SR] Es wird DRINGEND EMPFOHLEN, die Taste
HOME
lange zu drücken, um die Assistenz-App zu starten, wie in Abschnitt 7.2.3 beschrieben. MUSS die vom Nutzer ausgewählte Assistenz-App starten, d. h. die App, dieVoiceInteractionService
implementiert, oder eine Aktivität, die denACTION_ASSIST
-Intent verarbeitet.
Wenn Android-Implementierungen für Mobilgeräte einen Sperrbildschirm unterstützen, gilt Folgendes:
- [3.8.10/H-1-1] MÜSSEN die Sperrbildschirmbenachrichtigungen einschließlich der Vorlage für Medienbenachrichtigungen anzeigen.
Wenn Implementierungen von Mobilgeräten einen sicheren Sperrbildschirm unterstützen, gilt Folgendes:
- [3.9/H-1-1] MÜSSEN die gesamte Palette der in der Android SDK-Dokumentation definierten Richtlinien zur Geräteverwaltung implementieren.
- [3.9/H-1-2] Die Unterstützung verwalteter Profile muss über das
android.software.managed_users
-Funktionsflag deklariert werden, 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 freigegebenen Speicher zuweist.
Implementierungen für Handheld-Geräte:
- [3.10/H-0-1] MÜSSEN Dienste zur Barrierefreiheit von Drittanbietern unterstützen.
- [3.10/H-SR] Es wird DRINGEND EMPFOHLEN, Bedienungshilfen auf dem Gerät vorinstalliert zu haben, die mit den Bedienungshilfen „Schalterzugriff“ und „TalkBack“ (für Sprachen, die von der vorinstallierten Sprachausgabe unterstützt werden) vergleichbar sind oder diese übertreffen, wie sie im TalkBack Open Source Project bereitgestellt werden.
- [3.11/H-0-1] MÜSSEN die Installation von TTS-Engines von Drittanbietern unterstützen.
- [3.11/H-SR] Es wird DRINGEND EMPFOHLEN, eine TTS-Engine zu verwenden, die die auf dem Gerät verfügbaren Sprachen unterstützt.
- [3.13/H-SR] Es wird DRINGEND EMPFOHLEN, eine UI-Komponente für die Schnelleinstellungen einzubinden.
Wenn Android-Implementierungen für Mobilgeräte FEATURE_BLUETOOTH
oder FEATURE_WIFI
unterstützen, gilt Folgendes:
- [3.16/H-1-1] MUSS die Kopplungsfunktion für Companion-Geräte unterstützen.
2.2.4. Leistung und Stromverbrauch
- [8.1/H-0-1] Gleichbleibende Frame-Latenz. Eine ungleichmäßige Frame-Latenz oder eine Verzögerung beim Rendern von Frames darf NICHT häufiger als 5 Frames pro Sekunde auftreten und sollte unter 1 Frame pro Sekunde liegen.
- [8.1/H-0-2] Latenz der Benutzeroberfläche. Geräteimplementierungen MÜSSEN eine geringe Latenz gewährleisten, indem eine Liste mit 10.000 Listeneinträgen gemäß der Android Compatibility Test Suite (CTS) in weniger als 36 Sekunden gescrollt werden kann.
- [8.1/H-0-3] Aufgabenwechsel. Wenn mehrere Anwendungen gestartet wurden, darf das erneute Starten einer bereits laufenden Anwendung nach dem Start weniger als eine Sekunde dauern.
Implementierungen für Handheld-Geräte:
- [8.2/H-0-1] MÜSSEN eine sequenzielle Schreibleistung von mindestens 5 MB/s gewährleisten.
- [8.2/H-0-2] MÜSSEN eine zufällige Schreibleistung von mindestens 0,5 MB/s gewährleisten.
- [8.2/H-0-3] MÜSSEN eine sequenzielle Leseleistung von mindestens 15 MB/s gewährleisten.
- [8.2/H-0-4] MUSS eine Leistung bei zufälligen Lesevorgängen von mindestens 3,5 MB/s bieten.
Wenn Implementierungen von Handheld-Geräten Funktionen zur Verbesserung der Geräteenergieverwaltung enthalten, die in AOSP enthalten sind, oder die in AOSP enthaltenen Funktionen erweitern, gelten folgende Anforderungen:
- [8.3/H-1-1] MÜSSEN Nutzern die Möglichkeit geben, den Energiesparmodus zu aktivieren und zu deaktivieren.
- [8.3/H-1-2] Es MUSS eine Nutzerfunktion geben, mit der alle Apps angezeigt werden können, die vom App-Standby- und Doze-Energiesparmodus ausgenommen sind.
Implementierungen für Handheld-Geräte:
- [8.4/H-0-1] MÜSSEN ein Energieprofil pro Komponente bereitstellen, das den aktuellen Verbrauchswert für jede Hardwarekomponente und den ungefähren Akkuverbrauch definiert, der im Laufe der Zeit durch die Komponenten verursacht wird, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/H-0-2] Alle Werte für den Energieverbrauch MÜSSEN in Milliamperestunden (mAh) angegeben werden.
- [8.4/H-0-3] MÜSSEN die CPU-Stromaufnahme pro UID des Prozesses melden. Das Open-Source-Projekt für Android erfüllt die Anforderung durch die Implementierung des
uid_cputime
-Kernelmoduls. - [8.4/H-0-4] MÜSSEN diese Stromaufnahme über den Shell-Befehl
adb shell dumpsys batterystats
für den App-Entwickler verfügbar machen. - [8.4/H] MÜSSEN der Hardwarekomponente selbst zugeordnet werden, wenn die Stromaufnahme der Hardwarekomponente keiner Anwendung zugeordnet werden kann.
Wenn Implementierungen von Handheld-Geräten einen Bildschirm oder eine Videoausgabe umfassen, gilt Folgendes:
- [8.4/H-1-1] MÜSSEN die
android.intent.action.POWER_USAGE_SUMMARY
-Intent berücksichtigen und ein Einstellungsmenü anzeigen, in dem diese Stromnutzung angezeigt wird.
2.2.5. Sicherheitsmodell
Implementierungen für Handheld-Geräte:
- [9.1/H-0-1] Drittanbieter-Apps MÜSSEN über die Berechtigung
android.permission.PACKAGE_USAGE_STATS
auf die Nutzungsstatistiken zugreifen können und einen nutzerzugänglichen Mechanismus bereitstellen, um den Zugriff auf solche Apps als Reaktion auf die Absichtandroid.settings.ACTION_USAGE_ACCESS_SETTINGS
zu gewähren oder zu widerrufen.
Wenn Implementierungen von Handheld-Geräten einen sicheren Sperrbildschirm unterstützen, gilt Folgendes:
- [9.11/H-1-1] Der Nutzer MUSS die kürzeste Zeitüberschreitung für den Ruhemodus auswählen können, d. h. die Übergangszeit vom entsperrten zum gesperrten Zustand, und diese darf maximal 15 Sekunden betragen.
- [9.11/H-1-2] Es MUSS eine Nutzerfunktion geben, mit der Benachrichtigungen ausgeblendet und alle Authentifizierungsformen deaktiviert werden können, mit Ausnahme der primären Authentifizierung, die in 9.11.1 Sicherer Sperrbildschirm beschrieben ist. Das AOSP erfüllt die Anforderung als Sperrmodus.
2.3. Anforderungen an Fernseher
Ein Android TV-Gerät ist eine Android-Geräteimplementierung, die eine Unterhaltungsoberfläche für digitale Medien, Filme, Spiele, Apps und/oder Live-TV für Nutzer bietet, die etwa drei Meter entfernt sitzen (eine „Lean-back-Oberfläche“ oder „10-Foot-User-Interface“).
Android-Geräte werden als Fernseher klassifiziert, wenn sie alle folgenden Kriterien erfüllen:
- Sie haben einen Mechanismus zur Fernsteuerung der gerenderten Benutzeroberfläche auf dem Display bereitgestellt, das sich möglicherweise drei Meter vom Nutzer entfernt befindet.
- Sie müssen ein integriertes Display mit einer Diagonale von mehr als 61 cm haben ODER einen Videoausgang wie VGA, HDMI, DisplayPort oder einen kabellosen Anschluss für das Display haben.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts gelten speziell für Android TV-Geräteimplementierungen.
2.3.1. Hardware
Fernseherimplementierungen:
- [7.2.2/T-0-1] MÜSSEN ein D-Pad unterstützen.
- [7.2.3/T-0-1] MÜSSEN die Funktionen „Startseite“ und „Zurück“ bereitstellen.
- [7.2.3/T-0-2] MÜSSEN sowohl das normale als auch das Ereignis „Langes Drücken“ der Zurück-Funktion (
KEYCODE_BACK
) an die App im Vordergrund senden. - [7.2.6.1/T-0-1] MÜSSEN Gamecontroller unterstützen und das
android.hardware.gamepad
-Feature-Flag deklarieren. - [7.2.7/T] Es sollte eine Fernbedienung vorhanden sein, über die Nutzer auf die Bedienung ohne Touchbedienung und die wichtigsten Navigationstasten zugreifen können.
Wenn Fernsehgeräte ein Gyroskop haben, gilt Folgendes:
- [7.3.4/T-1-1] MÜSSEN Ereignisse mit einer Frequenz von mindestens 100 Hz melden können.
Implementierungen von Fernsehgeräten:
- [7.4.3/T-0-1] MÜSSEN Bluetooth und Bluetooth LE unterstützen.
- [7.6.1/T-0-1] Es muss mindestens 4 GB nicht flüchtiger Speicher für private Daten der Anwendung (auch „/data“-Partition genannt) verfügbar sein.
Wenn Fernseher einen USB-Anschluss haben, der den Hostmodus unterstützt, gilt Folgendes:
- [7.5.3/T-1-1] MUSS die Unterstützung einer externen Kamera umfassen, die über diesen USB-Anschluss verbunden ist, aber nicht unbedingt immer verbunden ist.
Wenn die Implementierungen von Fernsehgeräten 32-Bit sind:
-
[7.6.1/T-1-1] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 896 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- 400 dpi oder höher auf kleinen/normalen Bildschirmen
- xhdpi oder höher auf großen Bildschirmen
- tvdpi oder höher auf sehr großen Bildschirmen
Wenn die Implementierungen von Fernsehgeräten 64-Bit sind:
-
[7.6.1/T-2-1] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 1.280 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- 400 dpi oder höher auf kleinen/normalen Bildschirmen
- xhdpi oder höher auf großen Bildschirmen
- tvdpi oder höher auf sehr großen Bildschirmen
Hinweis: Der oben genannte „für den Kernel und Userspace verfügbare Arbeitsspeicher“ bezieht sich auf den Arbeitsspeicherplatz, der zusätzlich zu dem Arbeitsspeicher zur Verfügung gestellt wird, der bereits für Hardwarekomponenten wie Radio, Video usw. reserviert ist, die bei Geräteimplementierungen nicht vom Kernel verwaltet werden.
Fernseherimplementierungen:
- [7.8.1/T] Es sollte ein Mikrofon enthalten.
- [7.8.2/T-0-1] MÜSSEN eine Audioausgabe haben und
android.hardware.audio.output
angeben.
2.3.2. Multimedia
Fernsehgeräteimplementierungen MÜSSEN die folgenden Audiocodierungsformate unterstützen:
- [5.1/T-0-1] MPEG-4 AAC-Profil (AAC LC)
- [5.1/T-0-2] MPEG-4 HE AAC Profile (AAC+)
- [5.1/T-0-3] AAC ELD (Enhanced Low Delay AAC)
Implementierungen von Fernsehgeräten MÜSSEN die folgenden Videocodierungsformate unterstützen:
Implementierungen von Fernsehgeräten:
- [5.2.2/T-SR] Es wird DRINGEND empfohlen, die H.264-Codierung von Videos mit 720p- und 1080p-Auflösung bei 30 Bildern pro Sekunde zu unterstützen.
Fernsehgeräteimplementierungen MÜSSEN die folgenden Videodekodierungsformate unterstützen:
- [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
Bei der Implementierung von Fernsehgeräten wird dringend empfohlen, die folgenden Videodekodierungsformate zu unterstützen:
- [5.3.1/T-SR] MPEG-2
Fernsehgeräte müssen die H.264-Dekodierung gemäß Abschnitt 5.3.4 bei Standard-Videoframeraten und -auflösungen bis zu und einschließlich der folgenden unterstützen:
- [5.3.4.4/T-1-1] HD 1080p bei 60 Bildern pro Sekunde mit Baseline-Profil
- [5.3.4.4/T-1-2] HD 1080p bei 60 Bildern pro Sekunde mit Hauptprofil
- [5.3.4.4/T-1-3] HD 1080p bei 60 Bildern pro Sekunde mit High Profile Level 4.2
Fernsehgeräte mit H.265-Hardware-Decodern MÜSSEN die H.265-Decodierung gemäß Abschnitt 5.3.5 bei Standard-Videoframeraten und -auflösungen bis einschließlich Folgendem unterstützen:
- [5.3.5.4/T-1-1] HD 1080p bei 60 Bildern pro Sekunde mit dem Hauptprofil der Stufe 4.1
Wenn Fernsehgeräte mit H.265-Hardware-Decodern die H.265-Decodierung und das UHD-Decodierungsprofil unterstützen, gilt Folgendes:
- [5.3.5.5/T-2-1] MUSS das UHD-Dekodierungsprofil mit 60 Frames pro Sekunde mit dem Main10-Level-5-Hauptebeneprofil unterstützen.
Fernsehgeräteimplementierungen MÜSSEN die VP8-Decodierung gemäß Abschnitt 5.3.6 bei Standard-Videoframeraten und -auflösungen bis einschließlich Folgendem unterstützen:
- [5.3.6.4/T-1-1] Dekodierungsprofil für HD 1080p bei 60 Bildern pro Sekunde
Fernsehgeräte mit VP9-Hardware-Decodern MÜSSEN die VP9-Decodierung gemäß Abschnitt 5.3.7 bei Standard-Videoframeraten und -auflösungen bis einschließlich Folgendem unterstützen:
- [5.3.7.4/T-1-1] HD 1080p bei 60 Bildern pro Sekunde mit Profil 0 (8-Bit-Farbtiefe)
Wenn Fernsehgeräte mit VP9-Hardware-Decodern die VP9-Decodierung und das UHD-Decodierungsprofil unterstützen, müssen sie:
- [5.3.7.5/T-2-1] MÜSSEN das UHD-Dekodierungsprofil mit 60 Frames pro Sekunde mit Profil 0 (8 Bit Farbtiefe) unterstützen.
- [5.3.7.5/T-2-1] Es wird DRINGEND empfohlen, das UHD-Dekodierungsprofil mit 60 Frames pro Sekunde mit Profil 2 (10-Bit-Farbtiefe) zu unterstützen.
Fernseherimplementierungen:
- [5.5.3/T-0-1] MÜSSEN die Master-Lautstärke des Systems und die Lautstärkedämpfung der digitalen Audioausgabe an unterstützten Ausgängen unterstützen, mit Ausnahme der komprimierten Audio-Passthrough-Ausgabe (bei der keine Audiodekodierung auf dem Gerät erfolgt).
- [5.8/T-0-1] Der HDMI-Ausgabemodus MUSS so eingestellt werden, dass die maximale Auflösung ausgewählt wird, die mit einer Bildwiederholfrequenz von 50 Hz oder 60 Hz für alle kabelgebundenen Displays unterstützt werden kann.
- [5.8/T-SR] Es wird DRINGEND EMPFOHLEN, für alle kabelgebundenen Displays eine vom Nutzer konfigurierbare HDMI-Bildwiederholratenauswahl bereitzustellen.
- [5.8/T-SR] Es wird DRINGEND EMPFOHLEN, die gleichzeitige Dekodierung sicherer Streams zu unterstützen. Die gleichzeitige Dekodierung von mindestens zwei Streams wird DRINGEND empfohlen.
- [5.8] Die Aktualisierungsrate des HDMI-Ausgabemodus sollte für alle kabelgebundenen Displays entweder auf 50 Hz oder 60 Hz eingestellt werden, je nach Videoaktualisierungsrate für die Region, in der das Gerät verkauft wird.
Wenn Fernseher UHD-Decodierung und externe Displays unterstützen, gilt Folgendes:
- [5.8/T-1-1] MÜSSEN HDCP 2.2 unterstützen.
Wenn Fernsehgeräte keine UHD-Dekodierung, aber externe Bildschirme unterstützen, gilt Folgendes:
- [5.8/T-2-1] MÜSSEN HDCP 1.4 unterstützen
2.3.3. Software
Fernseherimplementierungen:
- [3/T-0-1] MÜSSEN die Funktionen
android.software.leanback
undandroid.hardware.type.television
deklarieren. - [3.4.1/T-0-1] MÜSSEN 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 Benachrichtigungen auf dem Sperrbildschirm einschließlich der Vorlage für Medienbenachrichtigungen anzeigen.
Fernseherimplementierungen:
- [3.8.14/T-SR] Es wird DRINGEND EMPFOHLEN, den Modus „Bild im Bild“ (Picture-in-Picture, PiP) für mehrere Fenster zu unterstützen.
- [3.10/T-0-1] MÜSSEN Dienste zur Barrierefreiheit von Drittanbietern unterstützen.
- [3.10/T-SR] Es wird DRINGEND EMPFOHLEN, Bedienungshilfen auf dem Gerät vorinstalliert zu haben, die mit den Funktionen von Schalterzugriff und TalkBack (für Sprachen, die von der vorinstallierten Sprachausgabe unterstützt werden) vergleichbar sind oder diese übertreffen, wie sie im TalkBack Open Source Project bereitgestellt werden.
Wenn bei der Implementierung von Fernsehgeräten die Funktion android.hardware.audio.output
gemeldet wird, gilt Folgendes:
- [3.11/T-SR] Es wird DRINGEND EMPFOHLEN, eine TTS-Engine zu verwenden, die die auf dem Gerät verfügbaren Sprachen unterstützt.
- [3.11/T-1-1] MÜSSEN die Installation von TTS-Engines von Drittanbietern unterstützen.
Fernseherimplementierungen:
- [3.12/T-0-1] MÜSSEN das TV Input Framework unterstützen.
2.3.4. Leistung und Stromverbrauch
- [8.1/T-0-1] Gleichbleibende Frame-Latenz. Eine ungleichmäßige Frame-Latenz oder eine Verzögerung beim Rendern von Frames darf NICHT häufiger als 5 Frames pro Sekunde auftreten und sollte unter 1 Frame pro Sekunde liegen.
- [8.2/T-0-1] MÜSSEN eine sequenzielle Schreibleistung von mindestens 5 MB/s gewährleisten.
- [8.2/T-0-2] MÜSSEN eine zufällige Schreibleistung von mindestens 0,5 MB/s gewährleisten.
- [8.2/T-0-3] MÜSSEN eine sequenzielle Leseleistung von mindestens 15 MB/s gewährleisten.
- [8.2/T-0-4] MÜSSEN eine Leistung bei zufälligen Lesevorgängen von mindestens 3,5 MB/s gewährleisten.
Wenn Fernseher Funktionen zur Verbesserung der Geräteenergieverwaltung enthalten, die in AOSP enthalten sind, oder die in AOSP enthaltenen Funktionen erweitern, gelten folgende Anforderungen:
- [8.3/T-1-1] MÜSSEN Nutzern die Möglichkeit geben, den Energiesparmodus zu aktivieren und zu deaktivieren.
- [8.3/T-1-2] Es MUSS eine Nutzerfunktion geben, mit der alle Apps angezeigt werden können, die vom App-Standby und vom Doze-Energiesparmodus ausgenommen sind.
Fernseherimplementierungen:
- [8.4/T-0-1] Es MUSS ein Energieprofil pro Komponente bereitgestellt werden, das den aktuellen Verbrauchswert für jede Hardwarekomponente und den ungefähren Akkuverbrauch definiert, der durch die Komponenten im Laufe der Zeit verursacht wird, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/T-0-2] Alle Werte für den Energieverbrauch MÜSSEN in Milliamperestunden (mAh) angegeben werden.
- [8.4/T-0-3] MÜSSEN den CPU-Stromverbrauch pro UID des Prozesses melden. Das Open-Source-Projekt für Android erfüllt die Anforderung durch die Implementierung des
uid_cputime
-Kernelmoduls. - [8.4/T] MÜSSEN der Hardwarekomponente selbst zugeordnet werden, wenn die Stromaufnahme der Hardwarekomponente keiner Anwendung zugeordnet werden kann.
- [8.4/T-0-4] MÜSSEN diese Stromaufnahme über den Shell-Befehl
adb shell dumpsys batterystats
für den App-Entwickler verfügbar machen.
2.4. Smartwatch-Anforderungen
Eine Smartwatch ist eine Android-Geräteimplementierung, die am Körper getragen werden soll, z. B. am Handgelenk.
Android-Geräte werden als Smartwatch klassifiziert, wenn sie alle folgenden Kriterien erfüllen:
- Sie haben ein Display mit einer physischen Diagonale von 28 bis 64 mm.
- Sie müssen einen Mechanismus zum Tragen am Körper haben.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts gelten speziell für Android Watch-Geräteimplementierungen.
2.4.1. Hardware
Smartwatch-Implementierungen:
-
[7.1.1.1/W-0-1] MÜSSEN ein Display mit einer physischen Diagonale von 2,8 bis 6,4 cm haben.
-
[7.2.3/W-0-1] Die Funktion „Startseite“ und die Funktion „Zurück“ MÜSSEN für den Nutzer verfügbar sein, es sei denn, das Gerät befindet sich in
UI_MODE_TYPE_WATCH
. -
[7.2.4/W-0-1] MÜSSEN die Eingabe über einen Touchscreen unterstützen.
-
[7.3.1/W-SR] Es wird DRINGEND EMPFOHLEN, einen 3‑Achsen-Beschleunigungsmesser zu verwenden.
-
[7.4.3/W-0-1] MÜSSEN Bluetooth unterstützen.
-
[7.6.1/W-0-1] Es muss mindestens 1 GB nicht flüchtiger Speicher für private Daten der Anwendung (d. h. die Partition „/data“) verfügbar sein.
-
[7.6.1/W-0-2] MÜSSEN mindestens 416 MB Arbeitsspeicher für den Kernel und den Nutzerbereich verfügbar haben.
-
[7.8.1/W-0-1] MÜSSEN ein Mikrofon enthalten.
-
[7.8.2/W] KANN, MUSS aber KEINE Audioausgabe haben.
2.4.2. Multimedia
Es gelten keine zusätzlichen Anforderungen.
2.4.3. Software
Smartwatch-Implementierungen:
- [3/W-0-1] MÜSSEN die Funktion
android.hardware.type.watch
deklarieren. - [3/W-0-2] MUSS uiMode = UI_MODE_TYPE_WATCH unterstützen.
Smartwatch-Implementierungen:
- [3.8.4/W-SR] Es wird DRINGEND EMPFOHLEN, einen Assistenten auf dem Gerät zu implementieren, um die Assist-Aktion zu verarbeiten.
Sehen Sie sich Geräteimplementierungen an, in denen das android.hardware.audio.output
-Funktionsflag deklariert wird:
- [3.10/W-1-1] MÜSSEN Dienste zur Barrierefreiheit von Drittanbietern unterstützen.
- [3.10/W-SR] Es wird DRINGEND EMPFOHLEN, Bedienungshilfen auf dem Gerät vorinstalliert zu haben, die mit den Funktionen von Switch Access und TalkBack (für Sprachen, die von der vorinstallierten Sprachausgabe unterstützt werden) vergleichbar sind oder diese übertreffen, wie sie im Open-Source-Projekt TalkBack bereitgestellt werden.
Wenn bei Smartwatch-Implementierungen die Funktion „android.hardware.audio.output“ gemeldet wird, gilt Folgendes:
-
[3.11/W-SR] Es wird DRINGEND EMPFOHLEN, eine TTS-Engine zu verwenden, die die auf dem Gerät verfügbaren Sprachen unterstützt.
-
[3.11/W-0-1] MÜSSEN die Installation von TTS-Engines von Drittanbietern unterstützen.
2.4.4. Leistung und Stromverbrauch
Wenn Smartwatch-Implementierungen Funktionen zur Verbesserung der Geräteenergieverwaltung enthalten, die in AOSP enthalten sind, oder die in AOSP enthaltenen Funktionen erweitern, gelten folgende Anforderungen:
- [8.3/W-SR] Es wird DRINGEND EMPFOHLEN, Nutzern die Möglichkeit zu geben, alle Apps anzuzeigen, die von den Energiesparmodi „App Standby“ und „Doze“ ausgenommen sind.
- [8.3/W-SR] Es wird DRINGEND EMPFOHLEN, Nutzern die Möglichkeit zu geben, den Energiesparmodus zu aktivieren und zu deaktivieren.
Smartwatch-Implementierungen:
- [8.4/W-0-1] Es MUSS ein Energieprofil pro Komponente bereitgestellt werden, das den aktuellen Verbrauchswert für jede Hardwarekomponente und die ungefähre Akkuentladung durch die Komponenten im Laufe der Zeit definiert, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/W-0-2] MÜSSEN alle Werte für den Energieverbrauch in Milliamperestunden (mAh) angeben.
- [8.4/W-0-3] Der CPU-Stromverbrauch muss für jede Prozess-UID angegeben werden. Das Open-Source-Projekt für Android erfüllt die Anforderung durch die Implementierung des
uid_cputime
-Kernelmoduls. - [8.4/W-0-4] MÜSSEN diese Stromaufnahme über den Shell-Befehl
adb shell dumpsys batterystats
für den App-Entwickler verfügbar machen. - [8,4 W] MÜSSEN der Hardwarekomponente selbst zugeordnet werden, wenn die Stromaufnahme der Hardwarekomponente keiner Anwendung zugeordnet werden kann.
2.5. Anforderungen für die Automobilbranche
Eine Android Automotive-Implementierung bezieht sich auf eine Auto-Haupteinheit, auf der Android als Betriebssystem für einen Teil oder alle System- und/oder Infotainmentfunktionen ausgeführt wird.
Android-Geräteimplementierungen werden als Automotive-Geräte klassifiziert, wenn sie die Funktion android.hardware.type.automotive
deklarieren oder alle folgenden Kriterien erfüllen.
- Sie sind in ein Fahrzeug eingebettet oder können an ein Fahrzeug angeschlossen werden.
- Sie verwenden einen Bildschirm in der Fahrerreihe als primäres Display.
Die zusätzlichen Anforderungen im Rest dieses Abschnitts beziehen sich speziell auf Android Automotive-Geräteimplementierungen.
2.5.1. Hardware
Automotive-Geräteimplementierungen:
- [7.1.1.1/A-0-1] MÜSSEN ein Display mit einer physischen Diagonale von mindestens 6 Zoll haben.
-
[7.1.1.1/A-0-2] Das Layout muss eine Bildschirmgröße von mindestens 750 dp × 480 dp haben.
-
[7.2.3/A-0-1] MÜSSEN die Startbildschirmfunktion und KÖNNEN die Funktionen „Zurück“ und „Letzte Apps“ bereitstellen.
-
[7.2.3/A-0-2] MÜSSEN sowohl das normale als auch das Ereignis „Langes Drücken“ der Zurück-Funktion (
KEYCODE_BACK
) an die App im Vordergrund senden. -
[7.3.1/A-SR] Es wird DRINGEND EMPFOHLEN, einen 3‑Achsen-Beschleunigungsmesser einzubauen.
Wenn Automotive-Geräteimplementierungen einen 3‑Achsen-Beschleunigungsmesser enthalten, gilt Folgendes:
- [7.3.1/A-1-1] MÜSSEN Ereignisse mit einer Frequenz von mindestens 100 Hz melden können.
- [7.3.1/A-1-2] MUSS dem Koordinatensystem des Android-Autosensors entsprechen.
Wenn Automotive-Geräteimplementierungen ein Gyroskop enthalten, gilt Folgendes:
- [7.3.4/A-1-1] MÜSSEN Ereignisse mit einer Frequenz von mindestens 100 Hz melden können.
Automotive-Geräteimplementierungen:
- [7.3.11/A-0-1] MÜSSEN das aktuelle Getriebe als
SENSOR_TYPE_GEAR
angeben.
Automotive-Geräteimplementierungen:
- [7.3.11.2/A-0-1] MÜSSEN den als
SENSOR_TYPE_NIGHT
definierten Tag-/Nachtmodus unterstützen. - [7.3.11.2/A-0-2] Der Wert des Flags
SENSOR_TYPE_NIGHT
MUSS mit dem Tag-/Nachtmodus des Dashboards übereinstimmen und SOLLTE auf dem Eingang des Umgebungslichtsensors basieren. -
Der zugrunde liegende Umgebungslichtsensor kann mit dem Photometer identisch sein.
-
[7.3.11.4/A-0-1] MÜSSEN die Fahrzeuggeschwindigkeit gemäß
SENSOR_TYPE_CAR_SPEED
angeben. -
[7.3.11.5/A-0-1] MÜSSEN den Status der Feststellbremse gemäß
SENSOR_TYPE_PARKING_BRAKE
angeben. -
[7.4.3/A-0-1] MÜSSEN Bluetooth und SOLLTEN Bluetooth LE unterstützen.
- [7.4.3/A-0-2] Android Automotive-Implementierungen MÜSSEN die folgenden Bluetooth-Profile unterstützen:
- Telefonieren über Hands-Free Profile (HFP)
- Medienwiedergabe über Audio Distribution Profile (A2DP)
- Steuerung der Medienwiedergabe über das Remote Control Profile (AVRCP).
- Kontaktfreigabe anhand des Phone Book Access Profile (PBAP)
-
[7.4.3/A-SR] Es wird DRINGEND EMPFOHLEN, das Message Access Profile (MAP) zu unterstützen.
-
[7.4.5/A] SOLLTEN die Unterstützung für eine mobilfunkbasierte Datenverbindung umfassen.
-
[7.4.5/A] Die System API-Konstante
NetworkCapabilities#NET_CAPABILITY_OEM_PAID
darf für Netzwerke verwendet werden, die für System-Apps verfügbar sein sollten. -
[7.6.1/A-0-1] Es MUSS mindestens 4 GB nicht flüchtiger Speicher für private Anwendungsdaten (auch „/data“-Partition genannt) verfügbar sein.
Automotive-Geräteimplementierungen:
- [7.6.1/A] Die Datenpartition sollte formatiert werden, um eine bessere Leistung und Langlebigkeit des Flash-Speichers zu ermöglichen, z. B. mit dem Dateisystem
f2fs
.
Wenn Automotive-Geräteimplementierungen über einen Teil des internen nicht entfernbaren Speichers freigegebenen externen Speicher bereitstellen, gilt Folgendes:
- [7.6.1/A-SR] Es wird DRINGEND EMPFOHLEN, den E/A-Overhead bei Vorgängen zu reduzieren, die auf dem externen Speicher ausgeführt werden, z. B. durch die Verwendung von
SDCardFS
.
Bei 32-Bit-Automotive-Geräteimplementierungen gilt Folgendes:
-
[7.6.1/A-1-1] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 512 MB betragen, wenn eine der folgenden Dichten verwendet wird:
- 280 dpi oder weniger 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 den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 608 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- xhdpi oder höher auf kleinen/normalen Displays
- hdpi oder höher auf großen Bildschirmen
- mdpi oder höher auf sehr großen Bildschirmen
-
[7.6.1/A-1-3] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 896 MB betragen, wenn eine der folgenden Dichten verwendet wird:
- 400 dpi oder höher 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 den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 1.344 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- 560 dpi oder höher auf kleinen/normalen Bildschirmen
- 400 dpi oder höher auf großen Bildschirmen
- XHDPI oder höher auf extra großen Bildschirmen
Bei 64-Bit-Implementierungen von Automotive-Geräten gilt Folgendes:
-
[7.6.1/A-2-1] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 816 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- 280 dpi oder weniger 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 den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 944 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- xhdpi oder höher auf kleinen/normalen Displays
- hdpi oder höher auf großen Bildschirmen
- mdpi oder höher auf sehr großen Bildschirmen
-
[7.6.1/A-2-3] Der für den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 1.280 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- 400 dpi oder höher 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 den Kernel und den Nutzerbereich verfügbare Arbeitsspeicher MUSS mindestens 1.824 MB betragen, wenn eine der folgenden Speicherdichten verwendet wird:
- 560 dpi oder höher auf kleinen/normalen Bildschirmen
- 400 dpi oder höher auf großen Bildschirmen
- XHDPI oder höher auf extra großen Bildschirmen
Hinweis: Der oben genannte „für den Kernel und Userspace verfügbare Arbeitsspeicher“ bezieht sich auf den Arbeitsspeicherplatz, der zusätzlich zu dem Arbeitsspeicher zur Verfügung gestellt wird, der bereits für Hardwarekomponenten wie Radio, Video usw. reserviert ist, die bei Geräteimplementierungen nicht vom Kernel verwaltet werden.
Automotive-Geräteimplementierungen:
- [7.7.1/A] Es sollte einen USB-Anschluss mit Peripheriegerätemodus geben.
Automotive-Geräteimplementierungen:
- [7.8.1/A-0-1] MÜSSEN ein Mikrofon enthalten.
Automotive-Geräteimplementierungen:
- [7.8.2/A-0-1] MÜSSEN eine Audioausgabe haben und
android.hardware.audio.output
angeben.
2.5.2. Multimedia
Automotive-Geräteimplementierungen MÜSSEN die folgende Audiocodierung unterstützen:
- [5.1/A-0-1] MPEG-4 AAC-Profil (AAC LC)
- [5.1/A-0-2] MPEG-4 HE AAC Profile (AAC+)
- [5.1/A-0-3] AAC ELD (Enhanced Low Delay AAC)
Automotive-Geräteimplementierungen MÜSSEN die folgende Videocodierung unterstützen:
Automotive-Geräteimplementierungen MÜSSEN die folgende Videodecodierung unterstützen:
Für Automotive-Geräteimplementierungen wird dringend empfohlen, die folgende Videodekodierung zu unterstützen:
- [5.3/A-SR] H.265 HEVC
2.5.3. Software
Automotive-Geräteimplementierungen:
-
[3/A-0-1] MÜSSEN die Funktion
android.hardware.type.automotive
deklarieren. -
[3/A-0-2] MÜSSEN uiMode =
UI_MODE_TYPE_CAR
unterstützen. -
[3/A-0-3] MÜSSEN alle öffentlichen APIs im Namespace
android.car.*
unterstützen. -
[3.4.1/A-0-1] MÜSSEN 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 Drittanbieteranwendungen angefordert werden. -
[3.8.4/A-SR] Es wird dringend empfohlen, auf dem Gerät einen Assistenten zu implementieren, der die Hilfeaktion verarbeitet.
-
[3.13/A-SR] Es wird DRINGEND EMPFOHLEN, eine UI-Komponente für die Schnelleinstellungen einzubinden.
Wenn Automotive-Geräteimplementierungen eine Push-to-Talk-Schaltfläche enthalten, gilt Folgendes:
- [3.8.4/A-1-1] MUSS ein kurzes Drücken der Push-to-Talk-Taste als Interaktion zum Starten der vom Nutzer ausgewählten Assistenz-App verwenden, d. h. der App, die
VoiceInteractionService
implementiert.
Automotive-Geräteimplementierungen:
- [3.14/A-0-1] MUSS ein UI-Framework enthalten, um Drittanbieter-Apps zu unterstützen, die die Media APIs wie in Abschnitt 3.14 beschrieben verwenden.
2.5.4. Leistung und Stromverbrauch
Wenn Automotive-Geräteimplementierungen Funktionen zur Verbesserung der Geräteenergieverwaltung enthalten, die in AOSP enthalten sind, oder die in AOSP enthaltenen Funktionen erweitern, gelten folgende Anforderungen:
- [8.3/A-1-1] MÜSSEN Nutzern die Möglichkeit bieten, den Energiesparmodus zu aktivieren und zu deaktivieren.
- [8.3/A-1-2] Es MUSS eine Nutzerfunktion geben, mit der alle Apps angezeigt werden können, die vom App-Standby- und Doze-Energiesparmodus ausgenommen sind.
Automotive-Geräteimplementierungen:
- [8.2/A-0-1] MUSS die Anzahl der Bytes melden, die pro UID des Prozesses aus dem nichtflüchtigen Speicher gelesen und in diesen geschrieben wurden, damit die Statistiken für Entwickler über die System API
android.car.storagemonitoring.CarStorageMonitoringManager
verfügbar sind. Das Android Open Source Project erfüllt die Anforderung über dasuid_sys_stats
-Kernelmodul. - [8.4/A-0-1] Es MUSS ein Energieprofil pro Komponente bereitgestellt werden, das den aktuellen Verbrauchswert für jede Hardwarekomponente und den ungefähren Akkuverbrauch definiert, der durch die Komponenten im Laufe der Zeit verursacht wird, wie auf der Website des Android Open Source Project dokumentiert.
- [8.4/A-0-2] Alle Werte für den Energieverbrauch MÜSSEN in Milliamperestunden (mAh) angegeben werden.
- [8.4/A-0-3] MÜSSEN den CPU-Stromverbrauch pro UID des Prozesses melden. Das Open-Source-Projekt für Android erfüllt die Anforderung durch die Implementierung des
uid_cputime
-Kernelmoduls. - [8.4/A] SOLLTE der Hardwarekomponente selbst zugeordnet werden, wenn die Stromaufnahme der Hardwarekomponente keiner Anwendung zugeordnet werden kann.
- [8.4/A-0-4] MÜSSEN diese Stromaufnahme über den Shell-Befehl
adb shell dumpsys batterystats
für den App-Entwickler verfügbar machen.
2.5.5. Sicherheitsmodell
Wenn Automotive-Geräteimplementierungen mehrere Nutzer unterstützen, gilt Folgendes:
- [9.5/A-1-1] MUSS ein Gastkonto enthalten, mit dem alle vom Fahrzeugsystem bereitgestellten Funktionen genutzt werden können, ohne dass sich ein Nutzer anmelden muss.
Wenn Automotive-Geräteimplementierungen einen sicheren Sperrbildschirm unterstützen, gilt Folgendes:
- [9.9.2/A-1-1] MÜSSEN die Verschlüsselung nach benutzerspezifischen Authentifizierungsschlüsseln unterstützen. Eine Möglichkeit ist die dateibasierte Verschlüsselung (File-Based Encryption, FBE).
Automotive-Geräteimplementierungen:
- [9.14/A-0-1] MÜSSEN Nachrichten von Fahrzeug-Subsystemen des Android-Frameworks verwalten, z.B. eine Zulassungsliste für zulässige Nachrichtentypen und Nachrichtenquellen.
- [9.14/A-0-2] Es MUSS einen Watchdog gegen Denial-of-Service-Angriffe vom Android-Framework oder von Drittanbieter-Apps geben. So wird verhindert, dass Malware das Fahrzeugnetzwerk mit Traffic überlastet, was zu Fehlfunktionen von Fahrzeuguntersystemen führen kann.
2.6. Tabletanforderungen
Ein Android-Tablet ist eine Android-Geräteimplementierung, die alle folgenden Kriterien erfüllt:
- Wird in der Regel mit beiden Händen gehalten.
- Es hat keine Clamshell- oder Convertible-Konfiguration.
- Alle physischen Tastaturen, die mit dem Gerät verwendet werden, MÜSSEN über eine Standardverbindung verbunden werden.
- Sie haben eine Stromquelle, die Mobilität bietet, z. B. einen Akku.
- Die Bildschirmdiagonale liegt zwischen 7 und 18 Zoll.
Die Implementierung von Tablets unterliegt ähnlichen Anforderungen wie die von Mobilgeräten. Die Ausnahmen sind in diesem Abschnitt mit * gekennzeichnet.
2.4.1. Hardware
Displaygröße
- [7.1.1.1/Tab-0-1] MÜSSEN ein Display mit einer Größe von 18 bis 46 Zentimetern haben.
Minimaler Arbeitsspeicher und Speicherplatz (Abschnitt 7.6.1)
Die Bildschirmdichten, die in den Anforderungen für Smartphones für kleine/normale Bildschirme aufgeführt sind, gelten nicht für Tablets.
USB-Peripheriegerätemodus (Abschnitt 7.7.1)
Wenn Tablet-Implementierungen einen USB-Anschluss haben, der den Peripheriemodus unterstützt, gilt Folgendes:
- [7.7.1/Tab] MÖGEN die Android Open Accessory API (AOA) implementieren.
Virtueller Realitätsmodus (Abschnitt 7.9.1)
Hochleistung für virtuelle Realität (Abschnitt 7.9.2)
Die Anforderungen für Virtual Reality gelten nicht für Tablets.
3. Software
3.1. Kompatibilität mit verwalteten APIs
Die verwaltete Dalvik-Bytecode-Ausführungsumgebung ist das primäre Mittel für Android-Anwendungen. Die Android API (Application Programming Interface) ist die Gruppe von Android-Plattformschnittstellen, die für Anwendungen verfügbar sind, die in der verwalteten Laufzeitumgebung ausgeführt werden.
Geräteimplementierungen:
-
[C-0-1] MÜSSEN vollständige Implementierungen, einschließlich aller dokumentierten Verhaltensweisen, für jede dokumentierte API bereitstellen, die vom Android SDK oder einer API mit dem Markierungs-„@SystemApi“ im Upstream-Android-Quellcode bereitgestellt wird.
-
[C-0-2] MUSS alle Klassen, Methoden und zugehörigen Elemente unterstützen/erhalten, die mit der TestApi-Anmerkung (@TestApi) gekennzeichnet sind.
-
[C-0-3] Es DÜRFEN KEINE verwalteten APIs ausgelassen, API-Schnittstellen oder ‑Signaturen geändert, vom dokumentierten Verhalten abgewichen oder No-Ops enthalten werden, es sei denn, dies ist in dieser Kompatibilitätsdefinition ausdrücklich zulässig.
-
[C-0-4] Die APIs MÜSSEN vorhanden sein und sich angemessen verhalten, auch wenn einige Hardwarefunktionen, für die Android APIs enthält, weggelassen werden. In Abschnitt 7 finden Sie spezifische Anforderungen für dieses Szenario.
-
[C-0-5] Die Verwendung ausgeblendeter APIs in Drittanbieter-Apps, definiert als APIs im Android-Namespace, die mit der Anmerkung
@hidden
, aber nicht mit@SystemAPI
oder@TestApi
versehen sind, wie in den SDK-Dokumenten beschrieben, MUSS eingeschränkt werden. Jede ausgeblendete API muss auf denselben eingeschränkten Listen stehen, die über die vorläufige Liste und die Sperrliste im Pfadprebuilts/runtime/appcompat/
für den entsprechenden API-Ebene-Zweig im AOSP bereitgestellt werden. Allerdings gilt:- MÖGLICH: Wenn eine ausgeblendete API in der Geräteimplementierung nicht vorhanden oder anders implementiert ist, können Sie die ausgeblendete API in die Sperrliste verschieben oder aus allen eingeschränkten Listen entfernen.
- MÖGLICH: Wenn eine versteckte API noch nicht im AOSP vorhanden ist, fügen Sie sie einer der eingeschränkten Listen hinzu.
- Es KANN ein dynamisches Aktualisierungsmechanismus implementiert werden, mit dem eine ausgeblendete API aus einer eingeschränkten Liste in eine weniger eingeschränkte Liste verschoben wird, mit Ausnahme der Zulassungsliste.
3.1.1. Android-Erweiterungen
Android unterstützt die Erweiterung der verwalteten APIs bei Beibehaltung derselben API-Level-Version.
- [C-0-1] Android-Geräteimplementierungen MÜSSEN die AOSP-Implementierung sowohl der freigegebenen Bibliothek
ExtShared
als auch der DiensteExtServices
mit Versionen vorladen, die mindestens den für jedes API-Level zulässigen Mindestversionen entsprechen. Beispielsweise müssen Geräteimplementierungen von Android 7.0 mit API-Level 24 mindestens Version 1 enthalten.
3.1.2. Android-Bibliothek
Aufgrund der Einstellung des Apache HTTP-Clients gilt für Geräteimplementierungen Folgendes:
- [C-0-1] Die
org.apache.http.legacy
-Bibliothek DARF NICHT in der Boot-Classpath platziert werden. - [C-0-2] Die
org.apache.http.legacy
-Bibliothek DARF dem Classpath der Anwendung nur dann hinzugefügt werden, wenn die App eine der folgenden Bedingungen erfüllt:- Sie sind auf API-Level 28 oder niedriger ausgerichtet.
- Sie geben in Ihrem Manifest an, dass die Bibliothek erforderlich ist, indem Sie das
android:name
-Attribut von<uses-library>
auforg.apache.http.legacy
festlegen.
Die AOSP-Implementierung erfüllt diese Anforderungen.
3.2 Soft API Compatibility
Neben den verwalteten APIs aus Abschnitt 3.1 enthält Android auch eine wichtige „weiche“ API, die nur zur Laufzeit verwendet wird. Dazu gehören beispielsweise Intents, Berechtigungen und ähnliche Aspekte von Android-Apps, die nicht zur Kompilierungszeit der App erzwungen werden können.
3.2.1. Berechtigungen
- [C-0-1] Geräteimplementierer MÜSSEN alle Berechtigungskonstanten unterstützen und erzwingen, die auf der Referenzseite für Berechtigungen dokumentiert sind. In Abschnitt 9 sind zusätzliche Anforderungen im Zusammenhang mit dem Android-Sicherheitsmodell aufgeführt.
3.2.2. Parameter erstellen
Die Android APIs enthalten eine Reihe von Konstanten in der Klasse „android.os.Build“, die das aktuelle Gerät beschreiben sollen.
- [C-0-1] Um für alle Geräteimplementierungen einheitliche, aussagekräftige Werte bereitzustellen, enthält die folgende Tabelle zusätzliche Einschränkungen für die Formate dieser Werte, die von Geräteimplementierungen einzuhalten SIND.
Parameter | Details |
---|---|
VERSION.RELEASE | Die Version des derzeit ausgeführten Android-Systems in einem für Menschen lesbaren Format. Dieses Feld MUSS einen der in 9 definierten Stringwerte haben. |
VERSION.SDK | Die Version des derzeit ausgeführten Android-Systems in einem Format, das für den Anwendungscode von Drittanbietern zugänglich ist. Für Android 9 MUSS dieses Feld den Ganzzahlwert 9_INT haben. |
VERSION.SDK_INT | Die Version des derzeit ausgeführten Android-Systems in einem Format, das für den Anwendungscode von Drittanbietern zugänglich ist. Für Android 9 MUSS dieses Feld den Ganzzahlwert 9_INT haben. |
VERSION.INCREMENTAL | Ein vom Geräteimplementierer ausgewählter Wert, der den 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. Dieses Feld wird in der Regel verwendet, um anzugeben, welche Build-Nummer oder Änderungs-ID der Quellkontrolldatei zum Generieren des Builds verwendet wurde. Es gibt keine Anforderungen an das spezifische Format dieses Felds, es darf jedoch NICHT null oder der leere String ("") sein. |
BRETTSPIEL | Ein vom Geräteimplementierer ausgewählter Wert, der die spezifische interne Hardware des Geräts in einem visuell lesbaren Format angibt. Dieses Feld kann beispielsweise verwendet werden, um die spezifische Version des Boards anzugeben, das das Gerät mit Strom versorgt. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen. |
MARKE | Ein Wert, der den Markennamen des Geräts widerspiegelt, der den Endnutzern bekannt ist. MÜSSEN in einem für Menschen lesbaren Format vorliegen und SOLLEN den Hersteller des Geräts oder die Marke des Unternehmens repräsentieren, unter dem das Gerät vertrieben wird. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen. |
SUPPORTED_ABIS | Der Name des Instruction Sets (CPU-Typ + ABI-Konvention) des Native-Codes. Weitere Informationen finden Sie unter Abschnitt 3.3. Native API-Kompatibilität |
SUPPORTED_32_BIT_ABIS | Der Name des Instruction Sets (CPU-Typ + ABI-Konvention) des Native-Codes. Weitere Informationen finden Sie unter Abschnitt 3.3. Native API-Kompatibilität |
SUPPORTED_64_BIT_ABIS | Der Name des zweiten Befehlssatzes (CPU-Typ + ABI-Konvention) des Native-Codes. Weitere Informationen finden Sie unter Abschnitt 3.3. Native API-Kompatibilität |
CPU_ABI | Der Name des Instruction Sets (CPU-Typ + ABI-Konvention) des Native-Codes. Weitere Informationen finden Sie unter Abschnitt 3.3. Native API-Kompatibilität |
CPU_ABI2 | Der Name des zweiten Befehlssatzes (CPU-Typ + ABI-Konvention) des Native-Codes. Weitere Informationen finden Sie unter Abschnitt 3.3. Native API-Kompatibilität |
GERÄT | Ein vom Geräteimplementierer ausgewählter Wert, der den Entwicklungsnamen oder Codenamen enthält, der die Konfiguration der Hardwarefunktionen und das Industriedesign des Geräts identifiziert. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen. Dieser Gerätename darf sich während der Lebensdauer des Produkts nicht ändern. |
FINGERPRINT |
Ein String, der diesen Build eindeutig identifiziert. Er sollte für Menschen gut lesbar sein. Es MUSS dieser Vorlage entsprechen:
$(BRAND)/$(PRODUCT)/ Beispiel:
acme/myproduct/ Der Fingerabdruck darf KEINE Leerzeichen enthalten. Wenn andere Felder in der Vorlage oben Leerzeichen enthalten, MÜSSEN sie im Build-Fingerabdruck durch ein anderes Zeichen ersetzt werden, z. B. durch den Unterstrich („_“). Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein. |
HARDWARE | Der Name der Hardware (aus der Kernel-Befehlszeile oder /proc). Er sollte für Menschen gut lesbar sein. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen. |
HOST | Ein String, der den Host, auf dem der Build erstellt wurde, eindeutig in einem für Menschen lesbaren Format identifiziert. Es gibt keine Anforderungen an das spezifische Format dieses Felds, es darf jedoch NICHT null oder der leere String ("") sein. |
ID | Eine vom Geräteimplementierer ausgewählte Kennung für eine bestimmte Version in einem für Menschen lesbaren Format. Dieses Feld kann mit „android.os.Build.VERSION.INCREMENTAL“ identisch sein, sollte aber einen ausreichend aussagekräftigen Wert haben, damit Endnutzer zwischen Software-Builds unterscheiden können. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein 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 an das spezifische Format dieses Felds. Es darf jedoch NICHT null oder der leere String („"") sein. Dieses Feld darf sich während der Lebensdauer des Produkts NICHT ändern. |
MODELL | Ein vom Geräteimplementierer ausgewählter Wert, der den Namen des Geräts enthält, wie er dem Endnutzer bekannt ist. Dies sollte derselbe Name sein, unter dem das Gerät vermarktet und an Endnutzer verkauft wird. Es gibt keine Anforderungen an das spezifische Format dieses Felds. Es darf jedoch NICHT null oder der leere String („"") sein. Dieses Feld darf sich während der Lebensdauer des Produkts NICHT ändern. |
PRODUKT/FUNKTION | Ein vom Geräteimplementierer ausgewählter Wert, der den Entwicklungsnamen oder Codenamen des jeweiligen Produkts (SKU) enthält und innerhalb derselben Marke eindeutig sein MUSS. MÜSSEN für Menschen lesbar sein, sind aber nicht unbedingt für Endnutzer gedacht. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen. Dieser Produktname darf sich während der Lebensdauer des Produkts NICHT ändern. |
SERIAL | MUSS „UNKNOWN“ zurückgeben. |
TAGS | Eine durch Kommas getrennte Liste von Tags, die vom Geräteimplementierer ausgewählt wird und die den Build weiter unterscheidet. Dieses Feld MUSS einen der Werte haben, die den drei gängigen Signaturkonfigurationen der Android-Plattform entsprechen: „release-keys“, „dev-keys“ und „test-keys“. |
UHRZEIT | Ein Wert, der den Zeitstempel des Builds angibt. |
SCHREIBMASCHINE | Ein vom Geräteimplementierer ausgewählter Wert, der die Laufzeitkonfiguration des Builds angibt. Dieses Feld MUSS einen der Werte haben, die den drei gängigen Android-Laufzeitkonfigurationen entsprechen: „user“, „userdebug“ oder „eng“. |
NUTZER | Ein Name oder eine Nutzer-ID des Nutzers (oder automatisierten Nutzers), der den Build generiert hat. Es gibt keine Anforderungen an das spezifische Format dieses Felds, es darf jedoch NICHT null oder der leere String ("") sein. |
SECURITY_PATCH | Ein Wert, der das Sicherheitspatch-Level eines Builds angibt. Sie MUSS angeben, dass der Build in keiner Weise anfällig für die in dem angegebenen öffentlichen Sicherheitsbulletin für Android beschriebenen Probleme ist. Es MUSS im Format [JJJJ-MM-TT] vorliegen und mit einem definierten String übereinstimmen, der im öffentlichen Sicherheitsbulletin für Android oder in der Sicherheitswarnung für Android dokumentiert ist, z. B. „2015-11-01“. |
BASE_OS | Ein Wert, der dem FINGERPRINT-Parameter des Builds entspricht, der mit Ausnahme der im Android Public Security Bulletin bereitgestellten Patches mit diesem Build identisch ist. Es MUSS der richtige Wert angegeben werden. Wenn ein solcher Build nicht vorhanden ist, muss ein leerer String („"") angegeben werden. |
BOOTLOADER | Ein vom Geräteimplementierer ausgewählter Wert, der die spezifische interne Bootloader-Version des Geräts in einem visuell lesbaren Format angibt. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9._-]+$“ entsprechen. |
getRadioVersion() | MÜSSEN (sein oder zurückgeben) ein vom Geräteimplementierer ausgewählter Wert sein, der die spezifische interne Funk-/Modemversion des Geräts in einem für Menschen lesbaren Format angibt. Wenn ein Gerät kein internes Funkmodul/Modem hat, MUSS NULL zurückgegeben werden. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9._-,]+$“ entsprechen. |
getSerial() | Es MUSS eine Hardware-Seriennummer angegeben werden, die für alle Geräte mit demselben MODELL und HERSTELLER verfügbar und eindeutig sein MUSS. Der Wert dieses Felds MUSS als 7-Bit-ASCII codierbar sein und dem regulären Ausdruck „^[a-zA-Z0-9._-,]+$“ entsprechen. |
3.2.3. Intent-Kompatibilität
3.2.3.1. Wichtige Anwendungsabsichten
Mit Android-Intents können Anwendungskomponenten Funktionen von anderen Android-Komponenten anfordern. Das Android-Upstream-Projekt enthält eine Liste von Anwendungen, die als Android-Kernanwendungen gelten. Dort werden mehrere Intent-Muster für die Ausführung gängiger Aktionen implementiert.
-
[C-0-1] Geräteimplementierungen MÜSSEN eine oder mehrere Anwendungen oder Dienstkomponenten mit einem Intent-Handler für alle öffentlichen Intent-Filtermuster vorladen, die von den folgenden Android-Kernanwendungen in AOSP definiert sind:
- Tischuhr
- Browser
- Kalender
- Kontakte
- Galerie
- GlobalSearch
- Launcher
- 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 Intent-Muster, auf das in Abschnitt 3.2.3.1 verwiesen wird, mit Ausnahme der Einstellungen, von Drittanbieter-Apps überschrieben werden kann. Die Open-Source-Implementierung von Android ermöglicht dies standardmäßig.
-
[C-0-2] Dvice-Implementierer DÜRFEN der Verwendung dieser Intent-Muster durch Systemanwendungen KEINE speziellen Berechtigungen zuweisen oder verhindern, dass Drittanbieteranwendungen eine Bindung an diese Muster herstellen und die Kontrolle übernehmen. Dieses Verbot umfasst insbesondere, aber nicht ausschließlich, die Deaktivierung der Benutzeroberfläche „Chooser“, über die Nutzer zwischen mehreren Anwendungen auswä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 die Daten-URI enthält. Ein Intent-Filtermuster, das den Daten-URI „http://www.android.com“ angibt, ist beispielsweise spezifischer als das Haupt-Intent-Muster des Browsers für „http://“.
Android bietet außerdem einen Mechanismus, mit dem Drittanbieter-Apps ein vertrauenswürdiges Standard-App-Verknüpfungsverhalten für bestimmte Arten von Web-URI-Intents angeben können. Wenn solche autorisierten Erklärungen in den Intent-Filtermustern einer App definiert sind, gilt für Geräteimplementierungen Folgendes:
- [C-0-4] MÜSSEN versuchen, alle Intent-Filter zu validieren, indem die in der Digital Asset Links-Spezifikation definierten Validierungsschritte ausgeführt werden, die vom Paketmanager im Upstream-Android Open Source Project implementiert wurden.
- [C-0-5] Die Intent-Filter MÜSSEN während der Installation der Anwendung validiert werden und alle erfolgreich validierten URI-Intent-Filter müssen als Standard-App-Handler für ihre URIs festgelegt werden.
- KÖNNEN bestimmte URI-Intent-Filter als Standard-App-Handler für ihre URIs festlegen, wenn sie erfolgreich überprüft wurden, andere infrage kommende URI-Filter jedoch nicht. Wenn eine Geräteimplementierung dies tut, MUSS sie dem Nutzer im Einstellungsmenü entsprechende URI-Musterüberschreibungen zur Verfügung stellen.
- MÜSSEN Nutzern in den Einstellungen App-Link-Einstellungen pro App zur Verfügung stellen:
- [C-0-6] Der Nutzer MUSS in der Lage sein, das Standardverhalten von App-Links für eine App ganzheitlich zu überschreiben: „Immer öffnen“, „Immer fragen“ oder „Nie öffnen“. Dies muss für alle infrage kommenden URI-Intent-Filter gleichermaßen gelten.
- [C-0-7] Der Nutzer MUSS eine Liste der Kandidaten für URI-Intent-Filter sehen können.
- Die Geräteimplementierung DARF dem Nutzer die Möglichkeit geben, bestimmte URI-Intent-Filter, die erfolgreich überprüft wurden, pro Intent-Filter zu überschreiben.
- [C-0-8] Die Geräteimplementierung MUSS Nutzern die Möglichkeit bieten, bestimmte URI-Intent-Filter für Kandidaten aufzurufen und zu überschreiben, wenn bei der Geräteimplementierung einige URI-Intent-Filter für Kandidaten die Überprüfung bestehen, andere aber nicht.
3.2.3.3. Intent-Namespaces
- [C-0-1] Geräteimplementierungen DÜRFEN KEINE Android-Komponenten enthalten, die neue Intent- oder Broadcast-Intent-Muster mit einer ACTION, CATEGORY oder einem anderen Schlüsselstring im Namespace „android“ oder „com.android“ berücksichtigen.
- [C-0-2] Geräteimplementierer DÜRFEN KEINE Android-Komponenten einbinden, die neue Intent- oder Broadcast-Intent-Muster mit einer ACTION, CATEGORY oder einem anderen Schlüsselstring in einem Paketbereich einer anderen Organisation berücksichtigen.
- [C-0-3] Geräteimplementierer DÜRFEN KEINE der Intent-Muster ändern oder erweitern, die von den in Abschnitt 3.2.3.1 aufgeführten Haupt-Apps verwendet werden.
- Geräteimplementierungen KÖNNEN Intent-Muster mit Namespaces enthalten, die eindeutig und offensichtlich mit der eigenen Organisation verknüpft sind. Dieses Verbot entspricht dem für Java-Sprachklassen in Abschnitt 3.6.
3.2.3.4. Broadcast-Intents
Drittanbieteranwendungen sind auf die Plattform angewiesen, um bestimmte Intents zu senden, die sie über Änderungen in der Hardware- oder Softwareumgebung informieren.
Geräteimplementierungen:
- [C-0-1] MÜSSEN die öffentlichen Broadcast-Intents als Reaktion auf entsprechende Systemereignisse senden, wie in der SDK-Dokumentation beschrieben. Diese Anforderung steht nicht im Widerspruch zu Abschnitt 3.5, da die Einschränkung für Hintergrundanwendungen auch in der SDK-Dokumentation beschrieben ist.
3.2.3.5. Standard-App-Einstellungen
Android bietet Einstellungen, mit denen Nutzer ihre Standard-Apps ganz einfach auswählen können, z. B. für den Startbildschirm oder SMS.
Wenn sinnvoll, MÜSSEN Geräteimplementierungen ein ähnliches Einstellungsmenü bereitstellen und mit dem Intent-Filtermuster und den API-Methoden kompatibel sein, die in der SDK-Dokumentation unten beschrieben sind.
Wenn für Geräteimplementierungen android.software.home_screen
gemeldet wird, gilt Folgendes:
- [C-1-1] Es MUSS der
android.settings.HOME_SETTINGS
-Intentienz gefolgt werden, um ein Menü mit Standardeinstellungen für Apps auf dem Startbildschirm anzuzeigen.
Wenn für Geräteimplementierungen android.hardware.telephony
gemeldet wird, gilt Folgendes:
-
[C-2-1] Es MUSS ein Einstellungsmenü geben, das die Intent
android.provider.Telephony.ACTION_CHANGE_DEFAULT
aufruft, um ein Dialogfeld zum Ändern der Standard-SMS-Anwendung zu öffnen. -
[C-2-2] MUSS die Absicht
android.telecom.action.CHANGE_DEFAULT_DIALER
berücksichtigen, um ein Dialogfeld anzuzeigen, über das der Nutzer die Standardtelefon-App ändern kann.- Die Benutzeroberfläche der vom Nutzer ausgewählten Standard-Telefonie-App muss für eingehende und ausgehende Anrufe verwendet werden, mit Ausnahme von Notrufen, für die die vorinstallierte Telefonie-App verwendet wird.
-
[C-2-3] MUSS die Absicht android.telecom.action.CHANGE_PHONE_ACCOUNTS einhalten, um Nutzern die Möglichkeit zu geben, die
ConnectionServices
zu konfigurieren, die mit derPhoneAccounts
verknüpft ist, sowie eine Standard-PhoneAccount, die der Telekommunikationsanbieter für ausgehende Anrufe verwendet. Die AOSP-Implementierung erfüllt diese Anforderung, indem im Menü „Anrufe“ die Option „Anrufkonten“ enthalten ist.
Wenn für Geräteimplementierungen android.hardware.nfc.hce
gemeldet wird, gilt Folgendes:
- [C-3-1] Die Intent android.settings.NFC_PAYMENT_SETTINGS MUSS berücksichtigt werden, um ein Menü mit Standard-App-Einstellungen für das kontaktlose Bezahlen anzuzeigen.
Wenn Geräteimplementierungen die VoiceInteractionService
unterstützen und mehr als eine Anwendung installiert ist, die diese API verwendet, gilt Folgendes:
- [C-4-1] Es MUSS der Absicht von
android.settings.ACTION_VOICE_INPUT_SETTINGS
nachgekommen werden, ein Menü mit Standardeinstellungen für die App-Spracherkennung und -Unterstützung anzuzeigen.
3.2.4. Aktivitäten auf sekundären Displays
Wenn Geräteimplementierungen das Starten normaler Android-Aktivitäten auf sekundären Displays zulassen, gilt Folgendes:
- [C-1-1] MUSS das
android.software.activities_on_secondary_displays
-Funktions-Flag setzen. - [C-1-2] Die API-Kompatibilität muss der einer Aktivität auf dem Hauptdisplay entsprechen.
- [C-1-3] Die neue Aktivität MUSS auf demselben Display wie die Aktivität gestartet werden, die sie gestartet hat, wenn die neue Aktivität gestartet wird, ohne über die
ActivityOptions.setLaunchDisplayId()
API ein Zieldisplay anzugeben. - [C-1-4] ALLE Aktivitäten MÜSSEN gelöscht werden, wenn ein Display mit dem Flag
Display.FLAG_PRIVATE
entfernt wird. - [C-1-5] Alle Aktivitäten auf einer
VirtualDisplay
MÜSSEN entsprechend der Größe des Displays angepasst werden, wenn das Display selbst verkleinert wird. - Es KANN vorkommen, dass auf dem Hauptdisplay eine Eingabemethode (IME, ein Steuerelement, mit dem Nutzer Text eingeben können) angezeigt wird, wenn das Fokusfeld für die Texteingabe auf einem sekundären Display liegt.
- Der Eingabefokus sollte unabhängig vom Hauptdisplay auf dem sekundären Display implementiert werden, wenn Touch- oder Tastatureingaben unterstützt werden.
- MÜSSEN
android.content.res.Configuration
haben, die diesem Display entspricht, damit sie angezeigt werden, ordnungsgemäß funktionieren und die Kompatibilität bei der Ausführung einer Aktivität auf dem sekundären Display erhalten bleibt.
Wenn Geräteimplementierungen das Starten normaler Android-Aktivitäten auf sekundären Displays zulassen und das primäre und das sekundäre Display unterschiedliche android.util.DisplayMetrics haben:
- [C-2-1] Aktivitäten, die nicht skaliert werden können (
resizeableActivity=false
inAndroidManifest.xml
) und Apps, die auf API-Level 23 oder niedriger ausgerichtet sind, DÜRFEN auf sekundären Displays NICHT zulässig sein.
Wenn Geräteimplementierungen das Starten normaler Android-Aktivitäten auf sekundären Displays zulassen und ein sekundäres Display das Flag android.view.Display.FLAG_PRIVATE hat:
- [C-3-1] Nur der Eigentümer des Displays, des Systems und der Aktivitäten, die sich bereits auf dem Display befinden, MUSS es starten können. Jeder kann auf einem Display starten, das das Flag android.view.Display.FLAG_PUBLIC hat.
3.3 Kompatibilität mit nativen APIs
Die Kompatibilität mit nativem Code ist eine Herausforderung. Aus diesem Grund sind Geräteimplementierer:
- [SR] Wir empfehlen DRINGEND, die Implementierungen der unten aufgeführten Bibliotheken aus dem Upstream-Android Open Source Project zu verwenden.
3.3.1. Application Binary Interfaces
Verwalteter Dalvik-Bytecode kann auf den nativen Code zugreifen, der in der Anwendungsdatei .apk
als ELF-Datei .so
bereitgestellt und 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 Application Binary Interfaces (ABIs).
Geräteimplementierungen:
- [C-0-1] MÜSSEN mit mindestens einer definierten ABI kompatibel sein und die Kompatibilität mit dem Android NDK implementieren.
- [C-0-2] MUSS Unterstützung für Code enthalten, der in der verwalteten Umgebung ausgeführt wird, um nativen Code mithilfe der Standard-Java Native Interface (JNI)-Semantik aufzurufen.
- [C-0-3] MÜSSEN mit jeder erforderlichen Bibliothek in der folgenden Liste Quell- (d.h. Header-) und Binärkompatibel (für das ABI) sein.
- [C-0-5] Die vom Gerät unterstützte native Application Binary Interface (ABI) MUSS über die Parameter
android.os.Build.SUPPORTED_ABIS
,android.os.Build.SUPPORTED_32_BIT_ABIS
undandroid.os.Build.SUPPORTED_64_BIT_ABIS
korrekt angegeben werden. Dabei muss es sich jeweils um eine durch Kommas getrennte Liste von ABIs handeln, die von der am häufigsten bis zur am wenigsten bevorzugten sortiert ist. -
[C-0-6] Es MÜSSEN über die oben genannten Parameter eine Teilmenge der folgenden Liste von ABIs gemeldet werden. Es DARF KEINE ABIs geben, 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 verfügbar machen:
-
libaaudio.so (native Audiounterstützung von AAudio)
- libandroid.so (Unterstützung für native Android-Aktivitäten)
- libc (C-Bibliothek)
- libcamera2ndk.so
- libdl (dynamischer Linker)
- libEGL.so (native OpenGL-Oberflächenverwaltung)
- 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 nativer Medien-APIs)
- libm (Mathematische Bibliothek)
- libneuralnetworks.so (Neural Networks API)
- libOpenMAXAL.so (Unterstützung von OpenMAX AL 1.0.1)
- libOpenSLES.so (OpenSL ES 1.0.1-Audiounterstützung)
- libRS.so
- libstdc++ (minimale Unterstützung für C++)
- libvulkan.so (Vulkan)
- libz (Zlib-Komprimierung)
- JNI-Schnittstelle
-
-
[C-0-8] Die öffentlichen Funktionen für die oben aufgeführten nativen Bibliotheken DÜRFEN NICHT hinzugefügt oder entfernt werden.
- [C-0-9] In
/vendor/etc/public.libraries.txt
MÜSSEN zusätzliche nicht AOSP-Bibliotheken aufgeführt werden, die direkt für Drittanbieter-Apps freigegeben sind. - [C-0-10] Andere native Bibliotheken, die in AOSP als Systembibliotheken implementiert und bereitgestellt werden, DÜRFEN NICHT für Drittanbieter-Apps freigegeben werden, die auf API-Level 24 oder höher ausgerichtet sind, da sie reserviert sind.
- [C-0-11] MÜSSEN alle OpenGL ES 3.1- und Android Extension Pack-Funktionssymbole, wie im NDK definiert, über die
libGLESv3.so
-Bibliothek exportieren. Alle Symbole MÜSSEN vorhanden sein. In Abschnitt 7.1.4.1 werden die Anforderungen beschrieben, wann die vollständige Implementierung der einzelnen Funktionen erwartet wird. - [C-0-12] MÜSSEN Funktionssymbole für die Vulkan 1.0-Kernfunktionssymbole 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. Alle Symbole MÜSSEN vorhanden sein. In Abschnitt 7.1.4.2 werden die Anforderungen beschrieben, wann die vollständige Implementierung der einzelnen Funktionen erwartet wird. - MÜSSEN mit dem Quellcode und den Headerdateien erstellt werden, die im Upstream-Android-Open-Source-Projekt verfügbar sind
In zukünftigen Android-Releases 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 armeabi
ABI melden, gilt Folgendes:
- [C-3-1] MÜSSEN auch
armeabi-v7a
unterstützen und dies angeben, daarmeabi
nur zur Abwärtskompatibilität mit älteren Apps dient.
Wenn die Geräteimplementierungen die Unterstützung der armeabi-v7a
-ABI melden, gilt für Apps, die diese ABI verwenden, Folgendes:
-
[C-2-1]
/proc/cpuinfo
MUSS die folgenden Zeilen enthalten und die Werte auf demselben Gerät DÜRFEN NICHT geändert werden, auch 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] Die folgenden Vorgänge MÜSSEN immer verfügbar sein, auch wenn das ABI auf einer ARMv8-Architektur implementiert ist, entweder durch native CPU-Unterstützung oder durch Softwareemulation:
- SWP- und SWPB-Anweisungen
- SETEND-Anweisung
- Barriere-Vorgänge CP15ISB, CP15DSB und CP15DMB
-
[C-2-3] MÜSSEN die Erweiterung Advanced SIMD (auch NEON genannt) unterstützen.
3.4. Webkompatibilität
3.4.1. WebView-Kompatibilität
Wenn Geräteimplementierungen eine vollständige Implementierung der android.webkit.Webview
API bieten, gilt Folgendes:
- [C-1-1] MÜSSEN
android.software.webview
melden. - [C-1-2] Für die Implementierung der
android.webkit.WebView
API MUSS das Chromium-Projekt verwendet werden, das aus dem Upstream-Android-Open-Source-Projekt im Android 9-Branch erstellt wurde. -
[C-1-3] Der von WebView gemeldete User-Agent-String MUSS dieses 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) DARF leer sein. Wenn er nicht leer ist, MUSS er mit dem Wert von „android.os.Build.MODEL“ übereinstimmen.
- „Build/$(BUILD)“ kann weggelassen werden. Wenn der String vorhanden ist, MUSS er mit dem Wert für „android.os.Build.ID“ übereinstimmen.
- Der Wert des Strings $(CHROMIUM_VER) MUSS der Version von Chromium im Upstream-Android-Open-Source-Projekt entsprechen.
- Bei Geräteimplementierungen kann „Mobile“ im User-Agent-String weggelassen werden.
-
Die WebView-Komponente SOLLTE so viele HTML5-Funktionen wie möglich unterstützen und, sofern sie die Funktion unterstützt, der HTML5-Spezifikation entsprechen.
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] MÜSSEN alle folgenden APIs unterstützen, die mit HTML5 verknüpft sind:
- [C-1-2] MUSS die HTML5/W3C-Webstorage API unterstützen und SOLLTE die HTML5/W3C-IndexedDB API unterstützen. Da die Standardsteuergruppen für die Webentwicklung IndexedDB gegenüber Webstorage bevorzugen, wird IndexedDB voraussichtlich in einer zukünftigen Version von Android zu einer erforderlichen Komponente.
- Es darf ein benutzerdefinierter User-Agent-String in der eigenständigen Browseranwendung enthalten sein.
- Es sollte in der eigenständigen Browseranwendung möglichst viel HTML5 unterstützt werden, unabhängig davon, ob sie auf der Upstream-WebKit-Browseranwendung oder einem Ersatz von Drittanbietern basiert.
Wenn Geräteimplementierungen jedoch keine eigenständige Browseranwendung enthalten, gilt Folgendes:
- [C-2-1] MÜSSEN weiterhin die Muster für öffentliche Absichten unterstützen, wie in Abschnitt 3.2.3.1 beschrieben.
3.5. API-Verhaltenskompatibilität
Geräteimplementierungen:
- [C-0-9] MÜSSEN dafür sorgen, dass die API-Verhaltenskompatibilität für alle installierten Apps angewendet wird, es sei denn, sie sind wie in Abschnitt 3.5.1 beschrieben eingeschränkt.
- [C-0-10] Der Ansatz der Zulassungsliste, der nur für von Geräteimplementierern ausgewählte Apps für die API-Verhaltenskompatibilität sorgt, DARF NICHT implementiert werden.
Das Verhalten der einzelnen API-Typen (verwaltet, soft, nativ und Web) muss mit der bevorzugten Implementierung des Upstream-Android Open Source Project übereinstimmen. Beispiele für Bereiche, in denen die Kompatibilität geprüft wird:
- [C-0-1] Geräte dürfen das Verhalten oder die Semantik einer Standardabsicht NICHT ändern.
- [C-0-2] Geräte DÜRFEN den Lebenszyklus oder die Lebenszyklussemantik einer bestimmten Art von Systemkomponente (z. B. Dienst, Aktivität, Content-Provider usw.) NICHT ändern.
- [C-0-3] Die Semantik einer Standardberechtigung DARF von Geräten NICHT geändert werden.
- Geräte dürfen die Einschränkungen für Hintergrund-Apps NICHT ändern. Für Apps im Hintergrund gilt Folgendes:
- [C-0-4] Sie MÜSSEN die Ausführung von Callbacks beenden, die von der App registriert wurden, um Ausgaben von
GnssMeasurement
undGnssNavigationMessage
zu erhalten. - [C-0-5] Die Häufigkeit der Updates, die der App über die
LocationManager
API-Klasse oder dieWifiManager.startScan()
-Methode zur Verfügung gestellt werden, MUSS begrenzt werden. - [C-0-6] Wenn die App auf API-Level 25 oder höher ausgerichtet ist, dürfen im Manifest der App keine Broadcastempfänger für die impliziten Broadcasts von Standard-Android-Intents registriert werden, es sei denn, die Broadcast-Intents erfordern eine
"signature"
- oder"signatureOrSystem"
-BerechtigungprotectionLevel
oder die App steht auf der Befreiungsliste. - [C-0-7] Wenn die App auf API-Level 25 oder höher ausgerichtet ist, MÜSSEN die Hintergrunddienste der App beendet werden, als hätte die App die Methode
stopSelf()
der Dienste aufgerufen, es sei denn, die App wird auf eine temporäre Zulassungsliste gesetzt, um eine Aufgabe zu erledigen, 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 Wakelocks freigegeben werden, die die App hält.
- [C-0-4] Sie MÜSSEN die Ausführung von Callbacks beenden, die von der App registriert wurden, um Ausgaben von
- [C-0-9] Geräte MÜSSEN die folgenden Sicherheitsanbieter als die ersten sieben Arraywerte aus 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 nach der unten aufgeführten Liste von Anbietern zusätzliche 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 oben genannte Liste ist nicht vollständig. Die Compatibility Test Suite (CTS) testet einen Großteil der Plattform auf Verhaltenskompatibilität, aber nicht alle Bereiche. Es liegt in der Verantwortung des Implementators, für die Verhaltenskompatibilität mit dem Android Open Source Project zu sorgen. Aus diesem Grund sollten Geräteimplementierer nach Möglichkeit den über das Android Open Source Project verfügbaren Quellcode verwenden, anstatt wichtige Teile des Systems neu zu implementieren.
3.5.1. Einschränkung der Hintergrundnutzung
Wenn die Geräteimplementierungen die in AOSP enthaltenen App-Einschränkungen implementieren oder erweitern, gelten folgende Anforderungen:
- [C-SR] Es wird DRINGEND EMPFOHLEN, eine Nutzerfunktion bereitzustellen, über die Nutzer die Liste der eingeschränkten Apps aufrufen können.
- [C-1-2] Es MUSS eine Nutzerfunktion geben, mit der die Einschränkungen für jede App aktiviert oder deaktiviert werden können.
- [C-1-3] Einschränkungen dürfen nicht automatisch angewendet werden, ohne dass ein Hinweis auf eine schlechte Systemgesundheit vorliegt. Sie können jedoch bei Erkennen eines schlechten Systemzustands wie festsitzender Wakelocks, lang laufender Dienste und anderer Kriterien auf Apps angewendet werden. Die Kriterien KÖNNEN von Geräteimplementierern festgelegt werden, MÜSSEN aber mit der Auswirkung der App auf den Systemzustand in Verbindung stehen. Andere Kriterien, die nicht ausschließlich mit der Systemintegrität zusammenhängen, wie die geringe Beliebtheit der App auf dem Markt, DÜRFEN NICHT als Kriterien verwendet werden.
- [C-1-4] App-Einschränkungen dürfen nicht automatisch für Apps angewendet werden, wenn ein Nutzer sie manuell deaktiviert hat. Es kann dem Nutzer jedoch vorgeschlagen werden, App-Einschränkungen anzuwenden.
- [C-1-5] Nutzer MÜSSEN darüber informiert werden, wenn App-Einschränkungen automatisch auf eine App angewendet werden.
- [C-1-6] Es MUSS
true
fürActivityManager.isBackgroundRestricted()
zurückgegeben werden, wenn die eingeschränkte App diese API aufruft. - [C-1-7] Die oberste App im Vordergrund, die vom Nutzer explizit verwendet wird, DARF NICHT eingeschränkt werden.
- [C-1-8] Es MÜSSEN Einschränkungen für eine App aufgehoben werden, die die oberste App im Vordergrund wird, wenn der Nutzer die zuvor eingeschränkte App explizit verwendet.
3.6. API-Namespaces
Android folgt den Paket- und Klassen-Namespace-Konventionen, die von der Java-Programmiersprache definiert wurden. Um die Kompatibilität mit Anwendungen von Drittanbietern zu gewährleisten, dürfen Geräteimplementierer an diesen Paketnamenräumen KEINE verbotenen Änderungen vornehmen (siehe unten):
-
java.*
-
javax.*
-
sun.*
-
android.*
-
androidx.*
-
com.android.*
Das bedeutet:
- [C-0-1] Die öffentlich zugänglichen APIs auf der Android-Plattform DÜRFEN NICHT durch Ändern von Methoden- oder Klassensignaturen oder durch Entfernen von Klassen oder Klassenfeldern geändert werden.
- [C-0-2] Den APIs in den oben genannten Namespaces DÜRFEN KEINE öffentlich zugänglichen Elemente (z. B. Klassen oder Schnittstellen oder Felder oder Methoden zu vorhandenen Klassen oder Schnittstellen) oder Test- oder System-APIs hinzugefügt werden. Ein „öffentlich zugängliches Element“ ist jedes Konstrukt, das nicht mit der Markierung „@hide“ versehen ist, wie sie im Upstream-Android-Quellcode verwendet wird.
Geräteimplementierer KÖNNEN die zugrunde liegende Implementierung der APIs ändern. Solche Änderungen:
- [C-0-3] Darf sich NICHT auf das angegebene Verhalten und die Java-Signatur öffentlich zugänglicher APIs auswirken.
- [C-0-4] DÜRFEN NICHT beworben oder Entwicklern anderweitig zugänglich gemacht werden.
Geräteimplementierer KÖNNEN jedoch benutzerdefinierte APIs außerhalb des standardmäßigen Android-Namespace hinzufügen. Diese benutzerdefinierten APIs müssen folgende Anforderungen erfüllen:
- [C-0-5] DARF NICHT in einem Namespace enthalten sein, der einer anderen Organisation gehört oder sich auf eine andere Organisation bezieht. Geräteimplementierer dürfen dem Namespace
com.google.*
oder einem ähnlichen Namespace KEINE APIs hinzufügen. Das darf nur Google tun. Ebenso darf Google KEINE APIs zu Namespaces anderer Unternehmen hinzufügen. - [C-0-6] MÜSSEN in einer freigegebenen Android-Bibliothek verpackt sein, damit nur Apps, die sie explizit verwenden (über den Mechanismus <uses-library>), von der erhöhten Speichernutzung solcher APIs betroffen sind.
Wenn ein Geräteimplementierer vorschlägt, einen der oben genannten Paketnamensräume zu verbessern, z. B. durch Hinzufügen nützlicher neuer Funktionen zu einer vorhandenen API oder durch Hinzufügen einer neuen API, sollte er source.android.com aufrufen und gemäß den Informationen auf dieser Website mit dem Einreichen von Änderungen und Code beginnen.
Die oben genannten Einschränkungen entsprechen den Standardkonventionen für die Benennung von APIs in der Programmiersprache Java. Dieser Abschnitt soll diese Konventionen lediglich verstärken und durch Aufnahme in diese Kompatibilitätsdefinition verbindlich machen.
3.7. Laufzeitkompatibilität
Geräteimplementierungen:
-
[C-0-1] MÜSSEN das vollständige Dalvik-Ausführformat (DEX) und die Dalvik-Bytecodespezifikation und -Semantik unterstützen.
-
[C-0-2] Dalvik-Laufzeitumgebungen MÜSSEN so konfiguriert werden, dass sie Speicher gemäß der Upstream-Android-Plattform und wie in der folgenden Tabelle angegeben zuweisen. (Definitionen für Bildschirmgröße und Bildschirmdichte finden Sie unter Abschnitt 7.1.1.)
-
Es sollte Android Runtime (ART), die Referenz-Upstream-Implementierung des Dalvik-Ausführbaren Formats und das Paketverwaltungssystem der Referenzimplementierung verwenden.
-
MÜSSEN Fuzz-Tests unter verschiedenen Ausführungsmodi und Zielarchitekturen ausführen, um die Stabilität der Laufzeit zu gewährleisten. Weitere Informationen finden Sie auf der Website des Open-Source-Projekts von Android unter JFuzz und DexFuzz.
Die unten angegebenen Speicherwerte gelten als Mindestwerte. Geräteimplementierungen KÖNNEN mehr Arbeitsspeicher pro Anwendung zuweisen.
Bildschirmlayout | Bildschirmdichte | Mindestanforderung an den Arbeitsspeicher der Anwendung |
---|---|---|
Android-Uhr | 120 dpi (ldpi) | 32 MB |
160 dpi (mdpi) | ||
213 dpi (tvdpi) | ||
240 dpi (hdpi) | 36 MB | |
280 dpi (280dpi) | ||
320 dpi (xhdpi) | 48 MB | |
360 dpi (360dpi) | ||
400 dpi (400dpi) | 56 MB | |
420 dpi (420dpi) | 64 MB | |
480 dpi (xxhdpi) | 88 MB | |
560 dpi (560dpi) | 112 MB | |
640 dpi (xxxhdpi) | 154 MB | |
klein/normal | 120 dpi (ldpi) | 32 MB |
160 dpi (mdpi) | ||
213 dpi (tvdpi) | 48 MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | ||
320 dpi (xhdpi) | 80 MB | |
360 dpi (360dpi) | ||
400 dpi (400dpi) | 96 MB | |
420 dpi (420dpi) | 112 MB | |
480 dpi (xxhdpi) | 128 MB | |
560 dpi (560dpi) | 192 MB | |
640 dpi (xxxhdpi) | 256 MB | |
Groß | 120 dpi (ldpi) | 32 MB |
160 dpi (mdpi) | 48 MB | |
213 dpi (tvdpi) | 80 MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | 96 MB | |
320 dpi (xhdpi) | 128 MB | |
360 dpi (360dpi) | 160 MB | |
400 dpi (400dpi) | 192 MB | |
420 dpi (420dpi) | 228 MB | |
480 dpi (xxhdpi) | 256 MB | |
560 dpi (560dpi) | 384 MB | |
640 dpi (xxxhdpi) | 512 MB | |
xlarge | 120 dpi (ldpi) | 48 MB |
160 dpi (mdpi) | 80 MB | |
213 dpi (tvdpi) | 96 MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | 144 MB | |
320 dpi (xhdpi) | 192 MB | |
360 dpi (360dpi) | 240 MB | |
400 dpi (400dpi) | 288 MB | |
420 dpi (420dpi) | 336 MB | |
480 dpi (xxhdpi) | 384 MB | |
560 dpi (560dpi) | 576 MB | |
640 dpi (xxxhdpi) | 768 MB |
3.8. Kompatibilität der Benutzeroberfläche
3.8.1. Launcher (Startbildschirm)
Android enthält eine Launcher-Anwendung (Startbildschirm) und unterstützt Drittanbieteranwendungen, die den Geräte-Launcher (Startbildschirm) ersetzen.
Wenn bei Geräteimplementierungen Drittanbieter-Apps den Startbildschirm des Geräts ersetzen können, gilt Folgendes:
- [C-1-1] MÜSSEN die Plattformfunktion
android.software.home_screen
deklarieren. - [C-1-2] MUSS das
AdaptiveIconDrawable
-Objekt zurückgeben, wenn die Drittanbieteranwendung das<adaptive-icon>
-Tag zum Angeben ihres Symbols verwendet und die MethodenPackageManager
zum Abrufen von Symbolen aufgerufen werden.
Wenn Geräteimplementierungen einen Standard-Launcher enthalten, der das Anpinnen von Verknüpfungen in Apps unterstützt, gilt Folgendes:
- [C-2-1] MÜSSEN
true
fürShortcutManager.isRequestPinShortcutSupported()
melden. - [C-2-2] Es MUSS eine Nutzerinteraktion geben, bevor ein über die
ShortcutManager.requestPinShortcut()
API-Methode von Apps angeforderter Verknüpfung hinzugefügt wird. - [C-2-3] MUSS angepinnte Verknüpfungen sowie dynamische und statische Verknüpfungen unterstützen, wie auf der Seite zu App-Verknüpfungen beschrieben.
Wenn Geräteimplementierungen das Anpinnen von Verknüpfungen in Apps nicht unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN
false
fürShortcutManager.isRequestPinShortcutSupported()
melden.
Wenn Geräteimplementierungen einen Standard-Launcher implementieren, der über die ShortcutManager API schnellen Zugriff auf die zusätzlichen Verknüpfungen von Drittanbieter-Apps bietet, gilt Folgendes:
- [C-4-1] MÜSSEN alle dokumentierten Tastenkürzelfunktionen (z.B. statische und dynamische Tastenkürzel, angepinnte Tastenkürzel) unterstützen und die APIs der
ShortcutManager
API-Klasse vollständig implementieren.
Wenn Geräteimplementierungen eine Standard-Launcher-App enthalten, die Logos für die App-Symbole anzeigt, gilt Folgendes:
- [C-5-1] MUSS die API-Methode
NotificationChannel.setShowBadge()
einhalten. Mit anderen Worten: Zeigen Sie eine visuelle Aufforderung im Zusammenhang mit dem App-Symbol an, wenn der Wert auftrue
festgelegt ist, und zeigen Sie kein App-Symbol-Badge-Schema an, wenn der Wert für alle Benachrichtigungskanäle der App auffalse
festgelegt ist. - Sie KÖNNEN die App-Symbol-Kennzeichen mit ihrem eigenen Kennzeichensystem überschreiben, wenn Anwendungen von Drittanbietern die Unterstützung des eigenen Kennzeichensystems durch die Verwendung proprietärer APIs angeben. Sie SOLLTEN jedoch die Ressourcen und Werte verwenden, die über die im SDK beschriebenen APIs für Benachrichtigungskennzeichen bereitgestellt werden, z. B. die
Notification.Builder.setNumber()
- und dieNotification.Builder.setBadgeIconType()
-API.
3.8.2. Widgets
Android unterstützt App-Widgets von Drittanbietern, indem ein Komponententyp und eine entsprechende API und ein Lebenszyklus definiert werden, mit denen Anwendungen Endnutzern ein App-Widget zur Verfügung stellen können.
Wenn Geräteimplementierungen Widgets von Drittanbieter-Apps unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Unterstützung der Plattformfunktion
android.software.app_widgets
angeben. - [C-1-2] MUSS eine integrierte Unterstützung für App-Widgets bieten und Nutzeroberflächenelemente zum Hinzufügen, Konfigurieren, Ansehen und Entfernen von App-Widgets direkt im Launcher enthalten.
- [C-1-3] MUSS Widgets in der Standardrastergröße von 4 × 4 rendern können. Weitere Informationen finden Sie in der Android SDK-Dokumentation unter Designrichtlinien für App-Widgets.
- Unter Umständen werden Anwendungs-Widgets auf dem Sperrbildschirm unterstützt.
Wenn Geräteimplementierungen Widgets von Drittanbieter-Apps und das Anpinnen von Verknüpfungen in Apps unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN
true
fürAppWidgetManager.html.isRequestPinAppWidgetSupported()
melden. - [C-2-2] Es MUSS eine Nutzerinteraktion geben, bevor ein über die
AppWidgetManager.requestPinAppWidget()
API-Methode von Apps angeforderter Verknüpfung hinzugefügt wird.
3.8.3. Benachrichtigungen
Android bietet die APIs Notification
und NotificationManager
, mit denen App-Entwickler von Drittanbietern Nutzer über wichtige Ereignisse informieren und ihre Aufmerksamkeit mithilfe der Hardwarekomponenten (z.B. Ton, Vibration und Licht) und Softwarefunktionen (z.B. Benachrichtigungsleiste, Systemleiste) des Geräts auf sich lenken können.
3.8.3.1. Darstellung von Benachrichtigungen
Wenn bei Geräteimplementierungen 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 nach Möglichkeit mit der Hardware der Geräteimplementierung. Wenn eine Geräteimplementierung beispielsweise einen Vibrator enthält, MÜSSEN die Vibrations-APIs korrekt implementiert sein. Wenn bei einer Geräteimplementierung die Hardware fehlt, MÜSSEN die entsprechenden APIs als No-Ops implementiert werden. Dieses Verhalten wird in Abschnitt 7 näher erläutert.
- [C-1-2] Alle Ressourcen (Symbole, Animationsdateien usw.), die in den APIs oder im Symbolstilhandbuch für die Status-/Systemleiste bereitgestellt werden, MÜSSEN korrekt gerendert werden. Sie dürfen jedoch eine andere Nutzererfahrung für Benachrichtigungen bieten als die der Referenzimplementierung von Android Open Source.
- [C-1-3] Sie MÜSSEN die für die APIs beschriebenen Verhaltensweisen einhalten und ordnungsgemäß implementieren, um Benachrichtigungen zu aktualisieren, zu entfernen und zu gruppieren.
- [C-1-4] MUSS das vollständige Verhalten der im SDK dokumentierten NotificationChannel API angeben.
- [C-1-5] Es MUSS eine Nutzerfunktion geben, mit der Benachrichtigungen einer bestimmten Drittanbieter-App auf Ebene jedes Kanals und App-Pakets blockiert und geändert werden können.
- [C-1-6] MUSS Nutzern auch die Möglichkeit bieten, gelöschte Benachrichtigungskanäle anzuzeigen.
- [C-1-7] Alle über Notification.MessagingStyle bereitgestellten Ressourcen (Bilder, Sticker, Symbole usw.) MÜSSEN zusammen mit dem Benachrichtigungstext korrekt gerendert werden, ohne dass der Nutzer etwas tun muss. Beispielsweise MÜSSEN alle Ressourcen einschließlich Symbole, die über android.app.Person bereitgestellt werden, in einer Gruppenunterhaltung angezeigt werden, die über setGroupConversation festgelegt wird.
- [C-SR] Es wird dringend empfohlen, Nutzern auf jeder Kanal- und App-Paketebene automatisch die Möglichkeit zu geben, die Benachrichtigungen einer bestimmten Drittanbieter-App zu blockieren, nachdem der Nutzer diese Benachrichtigung mehrmals geschlossen hat.
- MÜSSEN umfassende Benachrichtigungen unterstützen.
- MÜSSEN einige Benachrichtigungen mit höherer Priorität als Vorabbenachrichtigungen angezeigt werden.
- Es sollte eine Nutzerfunktion geben, mit der Benachrichtigungen auf später gestellt werden können.
- Darf nur die Sichtbarkeit und den Zeitpunkt verwalten, zu dem Drittanbieter-Apps Nutzer über wichtige Ereignisse benachrichtigen können, um Sicherheitsrisiken wie Ablenkungen des Fahrers zu minimieren.
Wenn Geräteimplementierungen erweiterte Benachrichtigungen unterstützen, gilt Folgendes:
- [C-2-1] Für die dargestellten Ressourcenelemente MÜSSEN genau die Ressourcen verwendet werden, die über die
Notification.Style
API-Klasse und ihre Unterklassen bereitgestellt werden. - MÜSSEN alle Ressourcenelemente (z.B. Symbol, Titel und Zusammenfassungstext) enthalten, die in der
Notification.Style
API-Klasse und ihren Unterklassen definiert sind.
Wenn Geräteimplementierungen Push-Benachrichtigungen unterstützen, gilt Folgendes:
- [C-3-1] Bei der Darstellung von Pop-up-Benachrichtigungen MÜSSEN die Ansicht und die Ressourcen für Pop-up-Benachrichtigungen wie in der
Notification.Builder
API-Klasse beschrieben verwendet werden. - [C-3-2] Die über
Notification.Builder.addAction()
bereitgestellten Aktionen MÜSSEN zusammen mit dem Inhalt der Benachrichtigung ohne zusätzliche Nutzerinteraktion angezeigt werden, wie im SDK beschrieben.
3.8.3.2. Notification Listener Service
Android enthält die NotificationListenerService
APIs, mit denen Apps (nachdem sie vom Nutzer explizit aktiviert wurden) eine Kopie aller Benachrichtigungen erhalten, sobald sie gepostet oder aktualisiert werden.
Wenn Geräteimplementierungen das Feature-Flag android.hardware.ram.normal
melden, gilt Folgendes:
- [C-1-1] Benachrichtigungen müssen korrekt und zeitnah in ihrer Gesamtheit an alle installierten und vom Nutzer aktivierten Listener-Dienste gesendet werden, einschließlich aller Metadaten, die dem Benachrichtigungsobjekt zugeordnet sind.
- [C-1-2] MUSS den
snoozeNotification()
-API-Aufruf einhalten und die Benachrichtigung schließen und einen Callback ausführen, nachdem die im API-Aufruf festgelegte Schlummerdauer abgelaufen ist.
Wenn Nutzer auf Geräten Benachrichtigungen pausieren können, gilt Folgendes:
- [C-2-1] Der Status der Schlummerfunktion für Benachrichtigungen MUSS über die Standard-APIs wie
NotificationListenerService.getSnoozedNotifications()
korrekt widergespiegelt werden. - [C-2-2] Nutzer müssen die Möglichkeit haben, Benachrichtigungen von jeder installierten Drittanbieter-App zu pausieren, es sei denn, sie stammen von Diensten im Hintergrund oder im Vordergrund.
3.8.3.3. „Bitte nicht stören“
Wenn Geräteimplementierungen die Funktion „Bitte nicht stören“ unterstützen, gilt Folgendes:
- [C-1-1] Es MUSS eine Aktivität implementiert werden, die auf die Absicht ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS reagiert. Bei Implementierungen mit UI_MODE_TYPE_NORMAL MUSS es sich dabei um eine Aktivität handeln, bei der der Nutzer der App Zugriff auf die Konfigurationen der DND-Richtlinie gewähren oder verweigern kann.
- [C-1-2] MUST: Wenn die Geräteimplementierung dem Nutzer die Möglichkeit bietet, Drittanbieter-Apps Zugriff auf die DND-Richtlinienkonfiguration zu gewähren oder zu verweigern, müssen von Apps erstellte automatische DND-Regeln neben den vom Nutzer erstellten und vordefinierten Regeln angezeigt werden.
- [C-1-3] MÜSSEN die Werte
suppressedVisualEffects
berücksichtigen, die überNotificationManager.Policy
übergeben werden. Wenn eine App eines der Flags SUPPRESSED_EFFECT_SCREEN_OFF oder SUPPRESSED_EFFECT_SCREEN_ON festgelegt hat, SOLLTE dem Nutzer im Menü der Einstellungen für die Funktion „Bitte nicht stören“ angezeigt werden, dass die visuellen Effekte unterdrückt werden.
3.8.4. Suchen
Android bietet APIs, mit denen Entwickler die Suche in ihre Anwendungen einbinden und die Daten ihrer Anwendung in die globale Systemsuche einbinden können. Im Allgemeinen besteht diese Funktion aus einer einzigen systemweiten Benutzeroberfläche, über die Nutzer Suchanfragen eingeben können, während sie Vorschläge eingeben und Ergebnisse angezeigt werden. Mit den Android APIs können Entwickler diese Benutzeroberfläche wiederverwenden, um die Suche in ihren eigenen Apps bereitzustellen, und Ergebnisse für die gemeinsame Benutzeroberfläche der globalen Suche bereitstellen.
- Android-Geräteimplementierungen MÜSSEN eine globale Suche enthalten, eine einzelne, gemeinsame systemweite Suchoberfläche, die Echtzeitvorschläge als Reaktion auf Nutzereingaben liefern kann.
Wenn die Geräteimplementierungen die globale Suchoberfläche implementieren, gilt Folgendes:
- [C-1-1] MÜSSEN die APIs implementieren, die es Drittanbieter-Anwendungen ermöglichen, dem Suchfeld Vorschläge hinzuzufügen, wenn es im Modus für die globale Suche ausgeführt wird.
Wenn keine Drittanbieter-Apps installiert sind, die die globale Suche nutzen:
- Standardmäßig sollten Ergebnisse und Vorschläge der Websuchmaschine angezeigt werden.
Android enthält außerdem die Assist APIs, mit denen Anwendungen festlegen können, wie viele Informationen des aktuellen Kontexts mit dem Assistant auf dem Gerät geteilt werden.
Wenn Geräteimplementierungen die Aktion „Hilfe“ unterstützen, gilt Folgendes:
- [C-2-1] Es MUSS dem Endnutzer klar und deutlich angezeigt werden, wann der Kontext weitergegeben wird. Dies kann auf folgende Weise geschehen:
- Jedes Mal, wenn die Assistent-App auf den Kontext zugreift, wird ein weißes Licht um die Ränder des Displays herum angezeigt, das die Dauer und Helligkeit der Android Open Source Project-Implementierung erfüllt oder übertrifft.
- Für die vorinstallierte Assistenz-App muss der Nutzer weniger als zwei Navigationsschritte vom Standardmenü für die Spracheingabe und die Einstellungen der Assistenz-App entfernt sein. Außerdem darf der Kontext nur geteilt werden, wenn die Assistenz-App vom Nutzer explizit über ein Hotword oder eine Navigationstaste für die Assistenz aufgerufen wird.
- [C-2-2] Die in Abschnitt 7.2.3 beschriebene Interaktion zum Starten der Assistenz-App MUSS die vom Nutzer ausgewählte Assistenz-App starten, d. h. die App, die
VoiceInteractionService
implementiert, oder eine Aktivität, die den IntentACTION_ASSIST
verarbeitet.
3.8.5. Benachrichtigungen und Toasts
Mit der Toast
API können Anwendungen Endnutzern kurze nicht modale Strings anzeigen, die nach kurzer Zeit verschwinden. Mit der Window Type API TYPE_APPLICATION_OVERLAY
können Benachrichtigungsfenster als Overlay über anderen Apps angezeigt werden.
Wenn Geräteimplementierungen einen Bildschirm oder eine Videoausgabe umfassen, gilt Folgendes:
-
[C-1-1] Es MUSS eine Nutzerfunktion geben, mit der verhindert werden kann, dass eine App Benachrichtigungsfenster mit dem
TYPE_APPLICATION_OVERLAY
anzeigt . Die AOSP-Implementierung erfüllt diese Anforderung durch Steuerelemente im Benachrichtigungs-Schieberegler. -
[C-1-2] MÜSSEN die Toast API einhalten und Toasts von Anwendungen für Endnutzer gut sichtbar anzeigen.
3.8.6. Designs
Android bietet „Designs“ als Mechanismus für Anwendungen, um Stile auf eine gesamte Aktivität oder Anwendung anzuwenden.
Android umfasst die Themenfamilien „Holo“ und „Material“ als Reihe von definierten Stilen, die App-Entwickler verwenden können, wenn sie das Holo-Design des Android SDK nachahmen möchten.
Wenn Geräteimplementierungen einen Bildschirm oder eine Videoausgabe umfassen, gilt Folgendes:
- [C-1-1] DÜRFEN KEINE der Holo-Designattribute ändern, die für Anwendungen freigegeben sind.
- [C-1-2] Die Designfamilie „Material“ MUSS unterstützt werden und es dürfen keine der Material Design-Attribute oder deren Assets geändert werden, die für Anwendungen freigegeben sind.
Android enthält auch die Designfamilie „Gerätestandard“ mit einer Reihe von definierten Stilen, die App-Entwickler verwenden können, wenn sie das Erscheinungsbild des vom Geräteimplementierer definierten Gerätedesigns anpassen möchten.
- Geräteimplementierungen KÖNNEN die Standarddesign-Designattribute des Geräts ändern, die für Anwendungen freigegeben sind.
Android unterstützt ein Variante-Design mit durchsichtigen Systemleisten, mit denen App-Entwickler den Bereich hinter der Status- und Navigationsleiste mit ihren App-Inhalten füllen können. Damit Entwickler in dieser Konfiguration einheitlich arbeiten können, ist es wichtig, dass der Symbolstil der Statusleiste bei verschiedenen Geräteimplementierungen beibehalten wird.
Wenn Geräteimplementierungen eine Systemstatusleiste enthalten, gilt Folgendes:
- [C-2-1] Für Symbole für den Systemstatus (z. B. Signalstärke und Akkustand) und vom System ausgegebene Benachrichtigungen MUSS Weiß verwendet werden, es sei denn, das Symbol weist auf einen problematischen Status hin oder eine App fordert mit dem Flag SYSTEM_UI_FLAG_LIGHT_STATUS_BAR eine helle Statusleiste an.
- [C-2-2] Bei Android-Geräten muss die Farbe der Systemstatussymbole in Schwarz geändert werden, wenn eine App eine helle Statusleiste anfordert (weitere Informationen finden Sie unter R.style).
3.8.7. Live-Hintergründe
Android definiert einen Komponententyp und eine entsprechende API und einen Lebenszyklus, mit denen Anwendungen Nutzern einen oder mehrere Live-Hintergründe zur Verfügung stellen können. Live-Hintergründe sind Animationen, Muster oder ähnliche Bilder mit eingeschränkten Eingabemöglichkeiten, die als Hintergrund hinter anderen Apps angezeigt werden.
Hardware gilt als zuverlässig für die Ausführung von Live-Hintergründen, wenn sie alle Live-Hintergründe ohne Funktionseinschränkungen mit einer angemessenen Framerate und ohne negative Auswirkungen auf andere Anwendungen ausführen kann. Wenn aufgrund von Hardwareeinschränkungen Hintergründe und/oder Anwendungen abstürzen, nicht richtig funktionieren, zu viel CPU- oder Akkuleistung verbrauchen oder mit unzumutbar niedrigen Frameraten laufen, ist die Hardware nicht in der Lage, Live-Hintergründe auszuführen. Einige Live-Hintergründe verwenden beispielsweise einen OpenGL 2.0- oder 3.x-Kontext, um ihre Inhalte zu rendern. Live-Hintergründe funktionieren auf Hardware, die keine mehreren OpenGL-Kontexte unterstützt, nicht zuverlässig, da die Verwendung eines OpenGL-Kontexts für den Live-Hintergrund mit anderen Anwendungen in Konflikt stehen kann, die ebenfalls einen OpenGL-Kontext verwenden.
- Bei Geräteimplementierungen, die wie oben beschrieben zuverlässig Live-Hintergründe ausführen können, SOLLTEN Live-Hintergründe implementiert werden.
Wenn Geräteimplementierungen Live-Hintergründe implementieren, gilt Folgendes:
- [C-1-1] MÜSSEN das Plattform-Funktions-Flag „android.software.live_wallpaper“ angeben.
3.8.8. Aktivitätswechsel
Der Upstream-Android-Quellcode enthält den Übersichtsbildschirm, eine Benutzeroberfläche auf Systemebene zum Wechseln von Aufgaben und zum Anzeigen kürzlich aufgerufener Aktivitäten und Aufgaben mit einem Thumbnail-Bild des grafischen Zustands der Anwendung, als der Nutzer die Anwendung zuletzt verlassen hat.
Geräteimplementierungen, die die Navigationstaste für die letzten Aufrufe enthalten, wie in Abschnitt 7.2.3 beschrieben, KÖNNEN die Benutzeroberfläche verändern.
Wenn Geräteimplementierungen, einschließlich der Navigationstaste für die letzten Aktivitäten wie in Abschnitt 7.2.3 beschrieben, die Benutzeroberfläche ändern, müssen sie:
- [C-1-1] Es müssen mindestens sieben angezeigte Aktivitäten unterstützt werden.
- Es SOLLTE mindestens die Titel von vier Aktivitäten gleichzeitig anzeigen.
- [C-1-2] MÜSSEN das Verhalten der Bildschirmsperre implementieren und dem Nutzer ein Einstellungsmenü zur Verfügung stellen, mit dem er die Funktion aktivieren oder deaktivieren kann.
- MÜSSEN die Markierungsfarbe, das Symbol und den Bildschirmtitel in den letzten Elementen anzeigen.
- Es sollte eine Schließfunktion („x“) geben, die aber verzögert werden kann, bis der Nutzer mit den Bildschirmen interagiert.
- Es sollte ein Tastenkürzel geben, mit dem man einfach zur vorherigen Aktivität zurückkehren kann.
- SOLLTE die Aktion zum schnellen Wechsel zwischen den beiden zuletzt verwendeten Apps auslösen, wenn zweimal auf die Funktionstaste für die zuletzt verwendeten Apps getippt wird.
- Sollte den Splitscreen-Multifenstermodus auslösen, sofern unterstützt, wenn die Taste für die letzten Apps lange gedrückt wird.
- Es kann sein, dass ähnliche aktuelle Inhalte als Gruppe angezeigt werden, die sich gemeinsam bewegt.
- [SR] Es wird DRINGEND EMPFOHLEN, die Android-Benutzeroberfläche (oder eine ähnliche, auf Miniaturansichten basierende Benutzeroberfläche) für den Übersichtsbildschirm zu verwenden.
3.8.9. Eingabeverwaltung
Android unterstützt die Eingabeverwaltung und Editoren für Eingabemethoden von Drittanbietern.
Wenn Geräteimplementierungen es Nutzern erlauben, Eingabemethoden von Drittanbietern auf dem Gerät zu verwenden, gilt Folgendes:
- [C-1-1] Die Plattformfunktion „android.software.input_methods“ MUSS deklariert und IME APIs müssen gemäß der Definition in der Android SDK-Dokumentation unterstützt werden.
- [C-1-2] Es MUSS ein nutzerzugänglicher Mechanismus zum Hinzufügen und Konfigurieren von Eingabemethoden von Drittanbietern als Reaktion auf den Intent „android.settings.INPUT_METHOD_SETTINGS“ bereitgestellt werden.
Wenn Geräteimplementierungen das Funktionsflag android.software.autofill
deklarieren, gilt Folgendes:
- [C-2-1] Die APIs
AutofillService
undAutofillManager
MÜSSEN vollständig implementiert werden. Außerdem muss dieandroid.settings.REQUEST_SET_AUTOFILL_SERVICE
-Intention befolgt werden, um ein Menü mit Standard-App-Einstellungen anzuzeigen, mit dem Nutzer Autofill aktivieren und deaktivieren sowie den Standard-Autofill-Dienst ändern können.
3.8.10. Mediensteuerung auf dem Sperrbildschirm
Die Remote Control Client API wird ab Android 5.0 zugunsten der Media Notification Template eingestellt. Mit dieser Vorlage können Medienanwendungen in Wiedergabesteuerungen eingebunden werden, die auf dem Sperrbildschirm angezeigt werden.
3.8.11. Bildschirmschoner (früher „Träume“)
Android unterstützt interaktive Bildschirmschoner, die zuvor als „Träume“ bezeichnet wurden. Mit Bildschirmschonern können Nutzer mit Anwendungen interagieren, wenn ein an eine Stromquelle angeschlossenes Gerät inaktiv ist oder an einem Dock angedockt ist. Auf Android-Smartwatches KÖNNEN Bildschirmschoner implementiert werden. Andere Arten von Geräteimplementierungen MÜSSEN jedoch Bildschirmschoner unterstützen und eine Einstellungsoption für Nutzer bereitstellen, mit der sie Bildschirmschoner als Reaktion auf die android.settings.DREAM_SETTINGS
-Intent konfigurieren können.
3.8.12. Standort
Wenn Geräteimplementierungen einen Hardwaresensor (z.B. GPS) enthalten, der die Standortkoordinaten bereitstellen kann,
- [C-1-2] Im Menü „Standort“ in den Einstellungen MUSS der aktuelle Status der Standortermittlung angezeigt werden.
- [C-1-3] Im Menü „Standort“ in den Einstellungen DÜRFEN KEINE Standortmodi angezeigt werden.
3.8.13. Unicode und Schriftart
Android unterstützt die Emoji-Zeichen, die in Unicode 10.0 definiert sind.
Wenn Geräteimplementierungen einen Bildschirm oder eine Videoausgabe umfassen, gilt Folgendes:
- [C-1-1] MUSS diese Emoji-Zeichen als farbiges Glyph rendern können.
- [C-1-2] MÜSSEN Folgendes unterstützen:
- Roboto 2-Schriftart mit verschiedenen Stärken: „sans-serif-thin“, „sans-serif-light“, „sans-serif-medium“, „sans-serif-black“, „sans-serif-condensed“ und „sans-serif-condensed-light“ für die auf dem Gerät verfügbaren Sprachen.
- Vollständige Abdeckung von lateinischen, griechischen und kyrillischen Schriftzeichen gemäß Unicode 7.0, einschließlich der Bereiche „Latin Extended A“, „Latin Extended B“, „Latin Extended C“ und „Latin Extended D“ sowie aller Schriftzeichen im Block „Währungssymbole“ von Unicode 7.0.
- MÜSSEN die Emojis für Hauttöne und verschiedene Familien unterstützen, wie im Unicode Technical Report #51 angegeben.
Wenn Geräteimplementierungen eine IME enthalten, gilt Folgendes:
- MÜSSEN Nutzern eine Eingabemethode für diese Emoji-Zeichen zur Verfügung stellen.
3.8.14. Mehrfenstermodus
Wenn Geräteimplementierungen mehrere Aktivitäten gleichzeitig anzeigen können, gilt Folgendes:
- [C-1-1] Müssen solche Mehrfenstermodi gemäß den Anwendungsverhalten und APIs implementieren, die in der Dokumentation zur Unterstützung des Mehrfenstermodus des Android SDK beschrieben sind, und die folgenden Anforderungen erfüllen:
- [C-1-2] Anwendungen können in der
AndroidManifest.xml
-Datei angeben, ob sie im Multifenstermodus ausgeführt werden können. Das kann entweder explizit durch Festlegen des Attributsandroid:resizeableActivity
auftrue
oder implizit durch eine targetSdkVersion > 24 erfolgen. Apps, bei denen dieses Attribut in ihrem Manifest explizit auffalse
festgelegt ist, DÜRFEN NICHT im Mehrfenstermodus gestartet werden. Ältere Apps mit einer targetSdkVersion < 24, für die diesesandroid:resizeableActivity
-Attribut nicht festgelegt wurde, KÖNNEN im Mehrfenstermodus gestartet werden. Das System MUSS jedoch eine Warnung anzeigen, dass die App im Mehrfenstermodus möglicherweise nicht wie erwartet funktioniert. - [C-1-3] Der Splitscreen- oder Freiformmodus darf NICHT angeboten werden, wenn die Bildschirmhöhe und -breite unter 440 dp liegen.
- Geräteimplementierungen mit einer Bildschirmgröße von
xlarge
MÜSSEN den Freeform-Modus unterstützen.
Wenn die Geräteimplementierungen den Mehrfenstermodus und den Splitscreen-Modus unterstützen, gilt Folgendes:
- [C-2-1] MUSS einen veränderbaren Launcher als Standard vorladen.
- [C-2-2] Die angedockte Aktivität eines Splitscreen-Multifensters MUSS zugeschnitten werden, sollte aber einige Inhalte davon anzeigen, wenn die Launcher-App das fokussierte Fenster ist.
- [C-2-3] MÜSSEN die angegebenen Werte
AndroidManifestLayout_minWidth
undAndroidManifestLayout_minHeight
der Launcher-Anwendung des Drittanbieters einhalten und 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] Aktivitäten MÜSSEN im Bild-im-Bild-Multifenstermodus gestartet werden, wenn die App: * auf API-Level 26 oder höher ausgerichtet ist und
android:supportsPictureInPicture
deklariert * auf API-Level 25 oder niedriger ausgerichtet ist und sowohlandroid:resizeableActivity
als auchandroid:supportsPictureInPicture
deklariert. - [C-3-2] MÜSSEN die Aktionen in der SystemUI gemäß der aktuellen PIP-Aktivität über die
setActions()
API bereitstellen. - [C-3-3] MUSS Seitenverhältnisse unterstützen, die mindestens 1:2,39 und maximal 2,39:1 sind, wie in der PIP-Aktivität über die
setAspectRatio()
API angegeben. - [C-3-4] Zum Steuern des PIP-Fensters MUSS
KeyEvent.KEYCODE_WINDOW
verwendet werden. Wenn der PIP-Modus nicht implementiert ist, MUSS die Taste für die Aktivität im Vordergrund verfügbar sein. - [C-3-5] Es MUSS eine Nutzerfunktion geben, mit der eine App daran gehindert werden kann, im PIP-Modus angezeigt zu werden. Die AOSP-Implementierung erfüllt diese Anforderung durch Steuerelemente im Benachrichtigungs-Schieberegler.
- [C-3-6] Dem PIP-Fenster muss eine Mindestbreite und -höhe von 108 dp zugewiesen werden. Wenn die
Configuration.uiMode
alsUI_MODE_TYPE_TELEVISION
konfiguriert ist, muss das PIP-Fenster eine Mindestbreite von 240 dp und eine Mindesthöhe von 135 dp haben.
3.8.15. Display-Aussparung
Android unterstützt einen Displayausschnitt wie im SDK-Dokument beschrieben. Die DisplayCutout
API definiert einen Bereich am Rand des Displays, der nicht für die Anzeige von Inhalten verwendet werden kann.
Wenn Geräteimplementierungen Displayausschnitte enthalten, gilt Folgendes:
- [C-1-1] Es dürfen nur Ausschnitte an den kurzen Seiten des Geräts vorhanden sein. Wenn das Seitenverhältnis des Geräts dagegen 1, 0 (1:1) beträgt, dürfen keine Ausschnitte vorhanden sein.
- [C-1-2] Es darf nicht mehr als einen Ausschnitt pro Kante geben.
- [C-1-3] Die von der App über die
WindowManager.LayoutParams
API festgelegten Displayausschnitt-Flags MÜSSEN wie im SDK beschrieben berücksichtigt werden. - [C-1-4] MÜSSEN für alle in der
DisplayCutout
API definierten Messwerte für Ausschnitte korrekte Werte zurückgeben.
3.9. Geräteverwaltung
Android bietet Funktionen, mit denen sicherheitsbewusste Anwendungen über die Android Device Administration API Geräteverwaltungsfunktionen auf Systemebene ausführen können, z. B. die Erzwingung von Passwortrichtlinien oder die Remote-Löschfunktion.
Wenn bei Geräteimplementierungen die gesamte Palette der in der Android SDK-Dokumentation definierten Richtlinien für die Geräteverwaltung implementiert wird, gilt Folgendes:
- [C-1-1] MÜSSEN
android.software.device_admin
deklarieren. - [C-1-2] MUSS die Bereitstellung des Geräteeigentümers gemäß Abschnitt 3.9.1 und Abschnitt 3.9.1.1 unterstützen.
3.9.1 Gerätebereitstellung
3.9.1.1 Geräteeigentümer-Bereitstellung
Wenn Geräteimplementierungen android.software.device_admin
angeben, gilt Folgendes:
- [C-1-1] MUSS die Registrierung eines Device Policy Clients (DPC) als App des Geräteeigentümers wie unten beschrieben unterstützen:
- Wenn für die Geräteimplementierung noch keine Nutzerdaten konfiguriert sind, geschieht Folgendes:
- [C-1-3] MÜSSEN
true
fürDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
melden. - [C-1-4] Die DPC-Anwendung MUSS als App des Geräteeigentümers in Reaktion auf die Intent-Aktion
android.app.action.PROVISION_MANAGED_DEVICE
registriert werden. - [C-1-5] Die DPC-Anwendung MUSS als App des Geräteeigentümers registriert werden, wenn das Gerät die NFC-Unterstützung (Near Field Communication) über das Feature-Flag
android.hardware.nfc
angibt und eine NFC-Nachricht mit einem Eintrag vom MIME-TypMIME_TYPE_PROVISIONING_NFC
empfängt.
- [C-1-3] MÜSSEN
- Wenn die Geräteimplementierung Nutzerdaten enthält, gilt Folgendes:
- [C-1-6] MÜSSEN
false
für dieDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
melden. - [C-1-7] Es darf KEINE DPC-Anwendung mehr als App des Geräteinhabers registriert werden.
- [C-1-6] MÜSSEN
- Wenn für die Geräteimplementierung noch keine Nutzerdaten konfiguriert sind, geschieht Folgendes:
- [C-1-2] Während der Bereitstellung MUSS eine aktive Aktion erforderlich sein, um der App die Rolle des Geräteeigentümers zuzuweisen. Die Einwilligung kann über eine Nutzeraktion oder auf programmatische Weise während der Bereitstellung erfolgen. Sie darf jedoch NICHT hartcodiert sein oder die Verwendung anderer Apps des Geräteeigentümers verhindern.
Wenn Geräteimplementierungen android.software.device_admin
angeben, aber auch eine proprietäre Lösung zur Verwaltung des Geräteeigentümers enthalten und einen Mechanismus bereitstellen, um eine in ihrer Lösung konfigurierte App als „Geräteeigentümer-Äquivalent“ für den Standard-Geräteeigentümer zu verwenden, der von den standardmäßigen Android-DevicePolicyManager APIs erkannt wird, gilt Folgendes:
- [C-2-1] Es MUSS ein Verfahren geben, mit dem überprüft wird, ob die beworbene App zu einer legitimen Lösung zur Geräteverwaltung für Unternehmen gehört und bereits so konfiguriert wurde, dass sie die Rechte eines „Geräteeigentümers“ hat.
- [C-2-2] Es muss dieselbe AOSP-Offenlegung zur Einwilligung des Geräteeigentümers wie beim von
android.app.action.PROVISION_MANAGED_DEVICE
initiierten Ablauf angezeigt werden, bevor die DPC-Anwendung als „Geräteeigentümer“ registriert wird. - Es KÖNNEN Nutzerdaten auf dem Gerät vorhanden sein, bevor die DPC-Anwendung als „Geräteeigentümer“ registriert wird.
3.9.1.2 Bereitstellung verwalteter Profile
Wenn Geräteimplementierungen android.software.managed_users
angeben, gilt Folgendes:
-
[C-1-1] MÜSSEN die APIs implementieren, die es einer Device Policy Controller-Anwendung (DPC) ermöglichen, Inhaber eines neuen verwalteten Profils zu werden.
-
[C-1-2] Der Bereitstellungsprozess für verwaltete Profile (der Ablauf, der durch android.app.action.PROVISION_MANAGED_PROFILE initiiert wird) MUSS der AOSP-Implementierung entsprechen.
-
[C-1-3] MÜSSEN in den Einstellungen die folgenden Nutzeroptionen zur Verfügung stellen, um dem Nutzer anzuzeigen, wenn eine bestimmte Systemfunktion vom Device Policy Controller (DPC) deaktiviert wurde:
- Ein einheitliches Symbol oder eine andere Nutzerfunktion (z. B. das Infosymbol von AOSP) für den Fall, dass eine bestimmte Einstellung durch einen Geräteadministrator eingeschränkt ist.
- Eine kurze Erklärung, die der Geräteadministrator über die
setShortSupportMessage
angegeben hat. - Das Symbol der DPC-Anwendung.
3.9.2 Unterstützung für verwaltete Profile
Wenn Geräteimplementierungen android.software.managed_users
angeben, gilt Folgendes:
- [C-1-1] Es MÜSSEN verwaltete Profile über die
android.app.admin.DevicePolicyManager
APIs unterstützt werden. - [C-1-2] Es darf nur ein einziges verwaltetes Profil erstellt werden.
- [C-1-3] Es muss ein Symbolsymbol (ähnlich dem AOSP-Upstream-Arbeitssymbol) verwendet werden, um die verwalteten Anwendungen und Widgets sowie andere UI-Elemente mit Symbolen wie „Letzte“ und „Benachrichtigungen“ darzustellen.
- [C-1-4] Es MUSS ein Benachrichtigungssymbol (ähnlich dem AOSP-Arbeitssymbol) angezeigt werden, um anzuzeigen, dass sich der Nutzer in einer Anwendung mit verwaltetem Profil befindet.
- [C-1-5] Es MUSS ein Toast angezeigt werden, das darauf hinweist, dass sich der Nutzer im verwalteten Profil befindet, wenn das Gerät aktiviert wird (ACTION_USER_PRESENT) und die App im Vordergrund sich im verwalteten Profil befindet.
- [C-1-6] Wenn ein verwaltetes Profil vorhanden ist, MUSS in der Intent-Auswahl eine visuelle Aufforderung angezeigt werden, damit der Nutzer den Intent vom verwalteten Profil an den Hauptnutzer oder umgekehrt weiterleiten kann, sofern dies vom Device Policy Controller aktiviert ist.
- [C-1-7] Wenn ein verwaltetes Profil vorhanden ist, MÜSSEN sowohl für den Hauptnutzer als auch für das verwaltete Profil die folgenden Nutzerfunktionen verfügbar sein:
- Separate Erfassung der Akku-, Standort-, mobilen 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 im primären Nutzer- oder verwalteten Profil
- [C-1-8] Die vorinstallierten Telefon-, Kontakt- und Messaging-Apps MÜSSEN die Möglichkeit haben, Anruferinformationen aus dem verwalteten Profil (falls vorhanden) zusammen mit denen aus dem primären Profil zu suchen und abzurufen, sofern dies vom Device Policy Controller zulässig ist.
- [C-1-9] Es MUSS sichergestellt sein, dass alle Sicherheitsanforderungen für ein Gerät mit aktivierter Mehrfachnutzung erfüllt werden (siehe Abschnitt 9.5), auch wenn das verwaltete Profil nicht zusätzlich zum primären Nutzer gezählt wird.
- [C-1-10] Es MUSS möglich sein, einen separaten Sperrbildschirm anzugeben, der die folgenden Anforderungen erfüllt, um Apps Zugriff zu gewähren, die in einem verwalteten Profil ausgeführt werden.
- Geräteimplementierungen MÜSSEN die
DevicePolicyManager.ACTION_SET_NEW_PASSWORD
-Intent einhalten und eine Benutzeroberfläche anzeigen, über die separate Anmeldedaten für den Sperrbildschirm für das verwaltete Profil konfiguriert werden können. - Für die Anmeldedaten des Sperrbildschirms des verwalteten Profils MÜSSEN dieselben Speicher- und Verwaltungsmechanismen für Anmeldedaten wie für das übergeordnete Profil verwendet werden, wie auf der Android Open Source Project-Website beschrieben.
- Die Passwortrichtlinien des DPC MÜSSEN nur auf die Anmeldedaten für den Sperrbildschirm des verwalteten Profils angewendet werden, es sei denn, die
DevicePolicyManager
-Instanz wird von getParentProfileInstance zurückgegeben.
- Geräteimplementierungen MÜSSEN die
- Wenn Kontakte aus dem verwalteten Profil im vorinstallierten Anrufprotokoll, in der Anrufoberfläche, in Benachrichtigungen zu laufenden und verpassten Anrufen, in Kontakt- und Messaging-Apps angezeigt werden, MÜSSEN sie mit demselben Symbol gekennzeichnet sein, das für Anwendungen im verwalteten Profil verwendet wird.
3.9.3 Support für verwaltete Nutzer
Wenn Geräteimplementierungen android.software.managed_users
angeben, gilt Folgendes:
- [C-1-1] Es MUSS eine Nutzerfunktion geben, mit der er sich von dem aktuellen Nutzer abmelden und in einer Sitzung mit mehreren Nutzern zum Hauptnutzer wechseln kann, wenn
isLogoutEnabled
true
zurückgibt. Auf die Nutzerfunktion MUSS vom Sperrbildschirm aus zugegriffen werden können, ohne das Gerät entsperren zu müssen.
3.10. Bedienungshilfen
Android bietet eine Bedienungshilfenebene, die es Nutzern mit Beeinträchtigungen erleichtert, ihre Geräte zu bedienen. Außerdem bietet Android Plattform-APIs, mit denen Implementierungen von Bedienungshilfen Rückrufe für Nutzer- und Systemereignisse erhalten und alternative Feedbackmechanismen wie Text-zu-Sprache-Funktion, haptisches Feedback und Navigation per Trackball/D-Pad generieren können.
Wenn Geräteimplementierungen Bedienungshilfen von Drittanbietern unterstützen, gilt Folgendes:
- [C-1-1] Es MUSS eine Implementierung des Android-Bedienungshilfen-Frameworks wie in der SDK-Dokumentation der Accessibility APIs beschrieben bereitgestellt werden.
- [C-1-2] MÜSSEN Ereignisse zur Barrierefreiheit generieren und die entsprechenden
AccessibilityEvent
an alle registriertenAccessibilityService
-Implementierungen senden, wie im SDK dokumentiert. - [C-1-3] MUSS der Absicht der
android.settings.ACCESSIBILITY_SETTINGS
entsprechen, 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] Es MUSS eine Schaltfläche in der Navigationsleiste des Systems hinzugefügt werden, mit der der Nutzer den Bedienungshilfendienst steuern kann, wenn die aktivierten Bedienungshilfen den
AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
angeben . Für Geräteimplementierungen ohne Systemnavigationsleiste gilt diese Anforderung nicht. Geräteimplementierungen sollten jedoch eine Nutzeroberfläche zur Steuerung dieser Bedienungshilfen bieten.
Wenn auf Geräten vorinstallierte Dienste zur Barrierefreiheit vorhanden sind, gilt Folgendes:
- [C-2-1] Diese vorinstallierten Bedienungshilfen MÜSSEN als Direct Boot Aware-Apps implementiert werden, wenn der Datenspeicher mit der dateibasierten Verschlüsselung (File Based Encryption, FBE) verschlüsselt ist.
- MÜSSEN in der Einrichtungsoberfläche einen Mechanismus für Nutzer bereitstellen, mit dem sie relevante Bedienungshilfen aktivieren können, sowie Optionen zum Anpassen der Schrift- und Anzeigegröße und der Vergrößerungsbewegungen.
3.11. Sprachausgabe
Android enthält APIs, mit denen Anwendungen TTS-Dienste (Text-to-Speech) nutzen und Dienstanbieter TTS-Dienste implementieren können.
Bei Geräteimplementierungen, die die Funktion „android.hardware.audio.output“ melden, gilt Folgendes:
- [C-1-1] MUSS die APIs des Android TTS Framework unterstützen.
Wenn Geräteimplementierungen die Installation von TTS-Engines von Drittanbietern unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN eine Nutzerinteraktion bieten, mit der Nutzer eine TTS-Engine für die Verwendung auf Systemebene auswählen können.
3.12. TV Input Framework
Das Android Television Input Framework (TIF) vereinfacht die Bereitstellung von Liveinhalten auf Android TV-Geräten. TIF bietet eine Standard-API zum Erstellen von Eingabemodulen, mit denen Android TV-Geräte gesteuert werden.
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 unterstützen, damit eine Anwendung, die diese APIs und den Dienst für TIF-basierte Eingaben von Drittanbietern 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 die Schnelleinstellungen enthalten, gilt Folgendes:
- [C-1-1] Der Nutzer MUSS die Möglichkeit haben, die über die
quicksettings
APIs bereitgestellten Kacheln aus einer Drittanbieter-App hinzuzufügen oder zu entfernen. - [C-1-2] Es darf KEINE Kacheln von Drittanbieter-Apps automatisch in die Schnelleinstellungen aufgenommen werden.
- [C-1-3] Alle vom Nutzer hinzugefügten Kacheln von Drittanbieter-Apps MÜSSEN neben den vom System bereitgestellten Kacheln für die Schnelleinstellungen angezeigt werden.
3.14. Media-UI
Wenn Geräteimplementierungen das UI-Framework enthalten, das Drittanbieter-Apps unterstützt, die von MediaBrowser
und MediaSession
abhängen, gilt Folgendes:
- [C-1-1] MediaItem-Symbole und Benachrichtigungssymbole MÜSSEN unverändert angezeigt werden.
- [C-1-2] Diese Elemente MÜSSEN wie von MediaSession beschrieben angezeigt werden, z.B. Metadaten, Symbole und Bilder.
- [C-1-3] Der App-Titel MUSS angezeigt werden.
- [C-1-4] Es MUSS eine Schublade oder ein anderer Mechanismus vorhanden sein, um die MediaBrowser-Hierarchie darzustellen und Nutzern eine entsprechende Aufforderung für die MediaBrowser-Hierarchie zu geben.
- [C-1-5] Das Doppeltippen auf
KEYCODE_HEADSETHOOK
oderKEYCODE_MEDIA_PLAY_PAUSE
MUSS alsKEYCODE_MEDIA_NEXT
fürMediaSession.Callback#onMediaButtonEvent
betrachtet werden.
3.15. Android Instant Apps
Geräteimplementierungen MÜSSEN die folgenden Anforderungen erfüllen:
- [C-0-1] Instant Apps dürfen nur Berechtigungen gewährt werden, für die
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:
- Der Intent-Musterfilter der Komponente ist freigegeben und hat CATEGORY_BROWSABLE
- Die Aktion ist eine der folgenden: ACTION_SEND, ACTION_SENDTO, ACTION_SEND_MULTIPLE
- Das Ziel wird explizit mit android:visibleToInstantApps freigegeben.
- [C-0-3] Instant Apps DÜRFEN NICHT explizit mit installierten Apps interagieren, es sei denn, die Komponente wird über „android:visibleToInstantApps“ freigegeben.
- [C-0-4] Installierte Apps DÜRFEN KEINE Details zu Instant Apps auf dem Gerät sehen, es sei denn, die Instant App stellt explizit eine Verbindung zur installierten Anwendung her.
3.16. Kopplung von Begleitgeräten
Android unterstützt das Koppeln von Zusatzgeräten, um die Verknüpfung mit Zusatzgeräten effizienter zu verwalten. Außerdem bietet die CompanionDeviceManager
API Apps die Möglichkeit, auf diese Funktion zuzugreifen.
Wenn Geräteimplementierungen die Kopplungsfunktion für Companion-Geräte unterstützen, gilt Folgendes:
- [C-1-1] MUSS das Funktions-Flag
FEATURE_COMPANION_DEVICE_SETUP
deklarieren . - [C-1-2] Die APIs im Paket
android.companion
MÜSSEN vollständig implementiert sein. - [C-1-3] Es MÜSSEN Nutzeroptionen vorhanden sein, mit denen Nutzer ein Companion-Gerät auswählen und bestätigen können, dass es vorhanden und funktionsfähig ist.
3:17. Ressourcenintensive Apps
Wenn die Funktion FEATURE_CANT_SAVE_STATE
in Geräteimplementierungen deklariert wird, gilt Folgendes:
- [C-1-1] Es darf nur eine installierte App geben, die angibt, dass
cantSaveState
im System ausgeführt wird. Wenn der Nutzer eine solche App verlässt, ohne sie explizit zu beenden (z. B. durch Drücken der Startbildschirmtaste, während eine aktive Aktivität im System aktiv ist, anstatt die Rücktaste zu drücken, wenn keine aktiven Aktivitäten mehr im System vorhanden sind), muss diese App in der Geräteimplementierung im RAM priorisiert werden, genau wie andere Elemente, die voraussichtlich weiter ausgeführt werden, z. B. Dienste im Vordergrund. Auch wenn eine solche App im Hintergrund ausgeführt wird, kann das System weiterhin Energiesparfunktionen darauf anwenden, z. B. den CPU- und Netzwerkzugriff einschränken. - [C-1-2] Es MUSS eine UI-Affordance zur Auswahl der App geben, die nicht am normalen Speicher-/Wiederherstellungsmechanismus für den Status teilnimmt, wenn der Nutzer eine zweite App startet, die mit dem Attribut
cantSaveState
deklariert wurde. - [C-1-3] Es dürfen KEINE anderen Richtlinienänderungen auf Apps angewendet werden, für die
cantSaveState
angegeben ist, z. B. Änderungen an der CPU-Leistung oder an der Planungspriorisierung.
Wenn die Funktion FEATURE_CANT_SAVE_STATE
in Geräteimplementierungen nicht deklariert wird, gilt Folgendes:
- [C-1-1] Das von Apps festgelegte Attribut
cantSaveState
MUSS ignoriert werden und das App-Verhalten darf NICHT auf Grundlage dieses Attributs geändert werden.
4. Kompatibilität von Anwendungspaketen
Geräteimplementierungen:
- [C-0-1] MÜSSEN in der Lage sein, Android-APK-Dateien zu installieren und auszuführen, die mit dem im offiziellen Android SDK enthaltenen Tool „aapt“ generiert wurden.
- Da die oben genannte Anforderung eine Herausforderung darstellen kann, wird für Geräteimplementierungen das Paketverwaltungssystem der AOSP-Referenzimplementierung EMPFOHLEN.
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] Die Dateiformate .apk, Android-Manifest, Dalvik-Bytecode oder RenderScript-Bytecode dürfen NICHT so erweitert werden, dass die Installation und Ausführung dieser Dateien auf anderen kompatiblen Geräten verhindert wird.
-
[C-0-4] Es darf KEINEN Apps außer dem aktuellen „installer of record“ für das Paket erlaubt sein, die App ohne Nutzerbestätigung im Hintergrund zu deinstallieren, wie im SDK für die Berechtigung
DELETE_PACKAGE
dokumentiert. Die einzigen Ausnahmen sind die App zur Überprüfung von Systempaketen, die den Intent PACKAGE_NEEDS_VERIFICATION verarbeitet, und die App zum Speichermanager, die den Intent ACTION_MANAGE_STORAGE verarbeitet. -
[C-0-5] Es MUSS eine Aktivität geben, die den Intent
android.settings.MANAGE_UNKNOWN_APP_SOURCES
verarbeitet. -
[C-0-6] Es dürfen KEINE App-Pakete aus unbekannten Quellen installiert werden, es sei denn, die App, die die Installation anfordert, erfüllt alle folgenden Anforderungen:
- Es MUSS die Berechtigung
REQUEST_INSTALL_PACKAGES
angeben oder der Wert fürandroid:targetSdkVersion
muss 24 oder niedriger sein. - Der Nutzer MUSS die Berechtigung erteilt haben, Apps aus unbekannten Quellen zu installieren.
- Es MUSS die Berechtigung
-
Es sollte Nutzern ermöglicht werden, die Berechtigung zum Installieren von Apps aus unbekannten Quellen pro Anwendung zu gewähren oder zu widerrufen. Es ist jedoch zulässig, dies als No-Op zu implementieren und
RESULT_CANCELED
fürstartActivityForResult()
zurückzugeben, wenn Nutzern diese Auswahl nicht über die Geräteimplementierung ermöglicht werden soll. Auch in solchen Fällen sollte dem Nutzer jedoch mitgeteilt werden, warum keine solche Auswahl angezeigt wird. -
[C-0-7] Es MUSS ein Warndialogfeld mit dem Warnstring angezeigt werden, der dem Nutzer über die System-API
PackageManager.setHarmfulAppWarning
zur Verfügung gestellt wird, bevor eine Aktivität in einer Anwendung gestartet wird, die von derselben System-APIPackageManager.setHarmfulAppWarning
als potenziell schädlich gekennzeichnet wurde. - Es sollte Nutzern im Warndialogfeld die Möglichkeit gegeben werden, eine Anwendung zu deinstallieren oder zu starten.
5. Multimedia-Kompatibilität
Geräteimplementierungen:
- [C-0-1] MÜSSEN die in Abschnitt 5.1 definierten Medienformate, Encoder, Decoder, Dateitypen und Containerformate für jeden von
MediaCodecList
deklarierten Codec unterstützen. - [C-0-2] Sie MÜSSEN die Unterstützung der Encoder und Decoder angeben und melden, die Drittanbieter-Apps über
MediaCodecList
zur Verfügung stehen. - [C-0-3] MÜSSEN alle Formate decodieren und für Drittanbieter-Apps verfügbar machen, die sie codieren können. Dazu gehören alle Bitstreams, die von den Encodern generiert werden, und die Profile, die in der
CamcorderProfile
gemeldet werden.
Geräteimplementierungen:
- SOLLTEN eine minimale Codec-Latenz anstreben, d. h. sie sollten:
- Darf keine Eingabebuffer verbrauchen und speichern und muss Eingabebuffer nur nach der Verarbeitung zurückgeben.
- Dekodierte Puffer DÜRFEN nicht länger als vom Standard angegeben (z.B. SPS) aufbewahrt werden.
- Die codierten Puffer dürfen NICHT länger als für die GOP-Struktur erforderlich gehalten werden.
Alle im folgenden Abschnitt aufgeführten Codecs werden als Softwareimplementierungen in der bevorzugten Android-Implementierung des Android Open Source Project bereitgestellt.
Weder Google noch die Open Handset Alliance geben eine Zusicherung dafür, dass diese Codecs frei von Patenten Dritter sind. Nutzer, die diesen Quellcode in Hardware- oder Softwareprodukten verwenden möchten, werden darauf hingewiesen, dass für die Implementierung dieses Codes, einschließlich in Open-Source-Software oder Shareware, Patentlizenzen der entsprechenden Patentinhaber erforderlich sein können.
5.1. Medien-Codecs
5.1.1. Audiocodierung
Weitere Informationen finden Sie unter 5.1.3. Details zu Audio-Codecs
Wenn Geräteimplementierungen android.hardware.microphone
angeben, MÜSSEN sie die folgende Audiocodierung unterstützen:
- [C-1-1] PCM/WAVE
5.1.2. Audiodekodierung
Weitere Informationen finden Sie unter 5.1.3. Details zu Audio-Codecs
Wenn Geräteimplementierungen die Unterstützung der android.hardware.audio.output
-Funktion angeben, müssen sie die Dekodierung der folgenden Audioformate unterstützen:
- [C-1-1] MPEG-4 AAC-Profil (AAC LC)
- [C-1-2] MPEG-4 HE AAC Profile (AAC+)
- [C-1-3] MPEG-4 HE AACv2-Profil (erweitertes AAC+)
- [C-1-4] AAC ELD (Enhanced Low Delay AAC)
- [C-1-11] xHE-AAC (ISO/IEC 23003-3 Extended HE AAC Profile, einschließlich USAC Baseline Profile und ISO/IEC 23003-4 Dynamic Range Control Profile)
- [C-1-5] FLAC
- [C-1-6] MP3
- [C-1-7] MIDI
- [C-1-8] Vorbis
- [C-1-9] PCM/WAVE
- [C-1-10] Opus
Wenn Geräteimplementierungen die Dekodierung von AAC-Eingabepuffern von Mehrkanalstreams (d.h. mehr als zwei Kanäle) in PCM über den Standard-AAC-Audiodecoder in der android.media.MediaCodec
API unterstützen, MÜSSEN Folgendes unterstützt werden:
- [C-2-1] Die Dekodierung MUSS ohne Downmix erfolgen (z.B. muss ein 5.0-AAC-Stream in fünf PCM-Kanäle decodiert werden, ein 5.1-AAC-Stream in sechs PCM-Kanäle).
- [C-2-2] Die Metadaten für den dynamischen Bereich MÜSSEN gemäß der Definition in „Dynamic Range Control (DRC)“ in ISO/IEC 14496-3 und den
android.media.MediaFormat
DRC-Schlüsseln für die Konfiguration des dynamisch bereichsbezogenen Verhaltens des Audiodecoders sein. 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
.
Bei der Dekodierung von USAC-Audio, MPEG-D (ISO/IEC 23003-4):
- [C-3-1] Lautstärke- und DRC-Metadaten MÜSSEN gemäß dem MPEG-D DRC Dynamic Range Control Profile Level 1 interpretiert und angewendet werden.
- [C-3-2] Der Decoder MUSS 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
.
Decoder für MPEG-4 AAC-, HE AAC- und HE AACv2-Profile:
- KANN die Lautstärke- und den Dynamikbereich mit dem Dynamic Range Control Profile (ISO/IEC 23003-4) steuern.
Wenn ISO/IEC 23003-4 unterstützt wird und sowohl ISO/IEC 23003-4- als auch ISO/IEC 14496-3-Metadaten in einem decodierten Bitstream vorhanden sind, gilt Folgendes:
- Die Metadaten nach ISO/IEC 23003-4 MÜSSEN Vorrang haben.
5.1.3. Audio-Codecs – Details
Format/Codec | Details | Unterstützte 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 Profile (erweitertes AAC+) |
Unterstützung für Mono-/Stereo-/5.0-/5.1-Inhalte mit Standardabtastraten von 16 bis 48 kHz. | |
AAC ELD (Enhanced Low Delay AAC) | Unterstützung für Mono-/Stereoinhalte mit Standardabtastraten von 16 bis 48 kHz. | |
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 bei 8 kHz abgetastet | 3GPP (.3gp) |
AMR-WB | 9 Raten von 6,60 kbit/s bis 23,85 kbit/s bei 16 kHz Abtastrate | |
FLAC | Mono/Stereo (kein Mehrkanalton). Abtastraten bis zu 48 kHz (auf Geräten mit 44,1 kHz-Ausgabe wird jedoch eine Abtastrate von bis zu 44,1 kHz EMPFOHLEN, da der Downsampler von 48 auf 44,1 kHz keinen Tiefpassfilter enthält). 16 Bit EMPFOHLEN; bei 24 Bit wird kein Dithering angewendet. | Nur FLAC (.flac) |
MP3 | Mono/Stereo 8–320 kbit/s konstant (CBR) oder variable Bitrate (VBR) | MP3 (.mp3) |
MIDI | MIDI-Typ 0 und 1 DLS-Version 1 und 2 XMF und Mobile XMF. Unterstützung für Klingeltonformate RTTTL/RTX, OTA und iMelody |
|
Vorbis |
|
|
PCM/WAVE | Lineare 16-Bit-PCM (Raten bis zum Limit der Hardware) Geräte MÜSSEN Abtastraten für die Aufzeichnung von Roh-PCM mit den Frequenzen 8.000, 11.025, 16.000 und 44.100 Hz unterstützen. | WAVE (.wav) |
Opus | Matroska (.mkv), Ogg(.ogg) |
5.1.4. Bildcodierung
Weitere Informationen finden Sie unter 5.1.6. Details zu Bildcodecs
Geräteimplementierungen MÜSSEN die folgenden Bildcodierungen unterstützen:
- [C-0-1] JPEG
- [C-0-2] PNG
- [C-0-3] WebP
5.1.5. Bild-Decodierung
Weitere Informationen finden Sie unter 5.1.6. Details zu Bildcodecs
Geräteimplementierungen MÜSSEN die Dekodierung der folgenden Bildcodierungen 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)
5.1.6. Details zu Bildcodecs
Format/Codec | Details | Unterstützte Dateitypen/Containerformate |
---|---|---|
JPEG | Basispreis + progressiver Preis | 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) | |
HEIF | Bild, Bildsammlung, Bildsequenz | HEIF (.heif), HEIC (.heic) |
5.1.7. Video-Codecs
- Für eine akzeptable Qualität von Webvideostreaming und Videokonferenzdiensten SOLLTE bei Geräteimplementierungen ein Hardware-VP8-Codec verwendet werden, der die Anforderungen erfüllt.
Wenn Geräteimplementierungen einen Video-Decoder oder -Encoder enthalten:
-
[C-1-1] Videocodecs MÜSSEN Ausgabe- und Eingabe-Bytebuffergrößen unterstützen, die den größten möglichen komprimierten und unkomprimierten Frame gemäß Standard und Konfiguration aufnehmen, aber auch nicht überbelegen.
-
[C-1-2] Video-Encoder und ‑Decoder MÜSSEN das flexible Farbformat YUV420 (COLOR_FormatYUV420Flexible) unterstützen.
Wenn Geräteimplementierungen die Unterstützung von HDR-Profilen über Display.HdrCapabilities
angeben, gilt Folgendes:
- [C-2-1] MÜSSEN das Parsen und die Verarbeitung statischer HDR-Metadaten unterstützen.
Wenn Geräteimplementierungen die Unterstützung von Zwischenaktualisierungen über FEATURE_IntraRefresh
in der Klasse MediaCodecInfo.CodecCapabilities
angeben, gilt Folgendes:
- [C-3-1] MUSS die Aktualisierungszeiten im Bereich von 10 bis 60 Frames unterstützen und innerhalb von 20% der konfigurierten Aktualisierungszeit genau funktionieren.
5.1.8. Liste der Video-Codecs
Format/Codec | Details |
Unterstützte Dateitypen/ Containerformate |
---|---|---|
H.263 |
|
|
H.264 AVC | Weitere Informationen finden Sie in den Abschnitten 5.2 und 5.3. |
|
H.265 HEVC | Weitere Informationen finden Sie unter Abschnitt 5.3. | MPEG-4 (.mp4) |
MPEG-2 | Profil "Main" | MPEG2-TS |
MPEG-4 SP | 3GPP (.3gp) | |
VP8 | Weitere Informationen finden Sie in den Abschnitten 5.2 und 5.3. |
|
VP9 | Weitere Informationen finden Sie unter Abschnitt 5.3. |
|
5.2. Videocodierung
Wenn Geräteimplementierungen einen Videoencoder unterstützen und für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- Die Bitrate zwischen den Intraframe-Intervallen (I-Frame-Intervallen) darf über zwei gleitende Fenster hinweg nicht um mehr als etwa 15% über der Bitrate liegen.
- Die Bitrate darf in einem gleitenden Fenster von 1 Sekunde nicht um mehr als 100% überschritten werden.
Wenn Geräteimplementierungen ein integriertes Display mit einer Diagonale von mindestens 6,4 cm haben oder einen Videoausgang enthalten oder die Unterstützung einer Kamera über das android.hardware.camera.any
-Funktionsflag deklarieren, gelten für sie folgende Anforderungen:
- [C-1-1] MÜSSEN mindestens einen der Video-Encoder VP8 oder H.264 unterstützen und für Drittanbieteranwendungen verfügbar machen.
- SOLLTEN sowohl VP8- als auch H.264-Videoencoder unterstützen und diese für Anwendungen von Drittanbietern verfügbar machen.
Wenn Geräteimplementierungen einen der Videoencoder H.264, VP8, VP9 oder HEVC unterstützen und für Drittanbieteranwendungen verfügbar machen, müssen sie:
- [C-2-1] MÜSSEN dynamisch konfigurierbare Bitraten unterstützen.
- MÜSSEN variable Frameraten unterstützen, wobei der Videoencoder die momentane Framedauer anhand der Zeitstempel der Eingabebuffer bestimmen und den Bitbucket basierend auf dieser Framedauer zuweisen SOLLTE.
Wenn Geräteimplementierungen den MPEG-4 SP-Videoencoder unterstützen und für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- MÜSSEN dynamisch konfigurierbare Bitraten für den unterstützten Encoder unterstützen.
5.2.1. H.263
Wenn Geräteimplementierungen H.263-Encoder unterstützen und diese für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- [C-1-1] MÜSSEN das Baseline-Profil Level 45 unterstützen.
- MÜSSEN dynamisch konfigurierbare Bitraten für den unterstützten Encoder unterstützen.
5.2.2. H-264
Wenn Geräteimplementierungen den H.264-Codec unterstützen, gilt Folgendes:
- [C-1-1] MUSS das Baseline-Profil der Stufe 3 unterstützen. Die Unterstützung von ASO (Arbitrary Slice Ordering), FMO (Flexible Macroblock Ordering) und RS (Redundant Slices) ist jedoch OPTIONAL. Außerdem wird empfohlen, ASO, FMO und RS nicht für das Baseline-Profil von Encodern zu verwenden, um die Kompatibilität mit anderen Android-Geräten aufrechtzuerhalten.
- [C-1-2] MUSS die Videocodierungsprofile für SD (Standardauflösung) in der folgenden Tabelle unterstützen.
- SOLLTEN Main Profile Level 4 unterstützen.
- MÜSSEN die HD-Videocodierungsprofile (High Definition) wie in der folgenden Tabelle angegeben unterstützen.
Wenn Geräteimplementierungen über die Medien-APIs die Unterstützung der H.264-Codierung für Videos mit einer Auflösung von 720p oder 1080p melden, müssen sie:
- [C-2-1] MÜSSEN die Codierungsprofile in der folgenden Tabelle unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 × 240 px | 720 x 480 px | 1.280 × 720 Pixel | 1920 × 1080 Pixel |
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] Die SD-Videocodierungsprofile MÜSSEN unterstützt werden.
- MÜSSEN die folgenden HD-Videocodierungsprofile (High Definition) unterstützen.
- SOLLTE das Schreiben von Matroska WebM-Dateien unterstützen.
- Es sollte ein Hardware-VP8-Codec verwendet werden, der die Anforderungen an die RTC-Hardwarecodierung des WebM-Projekts erfüllt, um eine akzeptable Qualität von Webvideostreaming- und Videokonferenzdiensten zu gewährleisten.
Wenn Geräteimplementierungen über die Media APIs die Unterstützung der VP8-Codierung für Videos mit einer Auflösung von 720p oder 1080p melden, gilt Folgendes:
- [C-2-1] MÜSSEN die Codierungsprofile in der folgenden Tabelle unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 × 180 px | 640 × 360 px | 1.280 × 720 Pixel | 1920 × 1080 Pixel |
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:
- SOLLTE das Schreiben von Matroska WebM-Dateien unterstützen.
5.3. Video-Decodierung
Wenn die Geräteimplementierungen die Codecs VP8, VP9, H.264 oder H.265 unterstützen, müssen sie:
- [C-1-1] MÜSSEN dynamische Videoauflösung und Framerate-Wechsel über die standardmäßigen Android APIs innerhalb desselben 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.
Wenn Geräteimplementierungen die Unterstützung des Dolby Vision-Decoders über HDR_TYPE_DOLBY_VISION
deklarieren , gilt Folgendes:
- [C-2-1] MÜSSEN einen Dolby Vision-fähigen Extractor bereitstellen.
- [C-2-2] Dolby Vision-Inhalte MÜSSEN korrekt auf dem Bildschirm des Geräts oder über einen Standard-Videoausgang (z.B. HDMI).
- [C-2-3] Der Titelindex der rückwärtskompatiblen Basisebenen (falls vorhanden) MUSS mit dem Titelindex der kombinierten Dolby Vision-Ebene übereinstimmen.
5.3.1. MPEG-2
Wenn Geräteimplementierungen MPEG-2-Decoder unterstützen, gilt Folgendes:
- [C-1-1] MUSS das Hauptprofil auf hoher Ebene unterstützen.
5.3.2. H.263
Wenn Geräteimplementierungen H.263-Decoder unterstützen, gilt Folgendes:
- [C-1-1] MUSS das Baseline-Profil Level 30 und Level 45 unterstützen.
5.3.3. MPEG-4
Bei Geräteimplementierungen mit MPEG-4-Decodern gilt Folgendes:
- [C-1-1] MÜSSEN Simple Profile Level 3 unterstützen.
5.3.4. H.264
Wenn Geräteimplementierungen H.264-Decoder unterstützen, gilt Folgendes:
- [C-1-1] MUSS Main Profile Level 3.1 und Baseline Profile unterstützen. Die Unterstützung von ASO (Arbitrary Slice Ordering), FMO (Flexible Macroblock Ordering) und RS (Redundant Slices) ist OPTIONAL.
- [C-1-2] MUSS Videos mit den in der folgenden Tabelle aufgeführten SD-Profilen (Standarddefinition) decodieren können, die mit dem Baseline-Profil und dem Hauptprofil der Stufe 3.1 codiert sind (einschließlich 720p30).
- MÜSSEN Videos mit den HD-Profilen (High Definition) decodieren können, wie in der folgenden Tabelle angegeben.
Wenn die von der Display.getSupportedModes()
-Methode gemeldete Höhe der Videoauflösung entspricht oder diese übersteigt, gilt für Geräteimplementierungen Folgendes:
- [C-2-1] MÜSSEN die Video-Decodierungsprofile für HD 720p in der folgenden Tabelle unterstützen.
- [C-2-2] MUSS die in der folgenden Tabelle aufgeführten Video-Dekodierungsprofile für HD 1080p unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 × 240 px | 720 x 480 px | 1.280 × 720 Pixel | 1920 × 1080 Pixel |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 60 fps | 30 fps (60 fpsFernseher) |
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] MUSS das Main Profile Level 3 Main Tier und die SD-Videodekodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
- MÜSSEN die HD-Dekodierungsprofile wie in der folgenden Tabelle angegeben unterstützen.
- [C-1-2] MUSS die HD-Dekodierungsprofile wie in der folgenden Tabelle angegeben unterstützen, wenn ein Hardware-Decoder vorhanden ist.
Wenn die mit der Methode Display.getSupportedModes()
gemeldete Höhe der Videoauflösung entspricht oder größer ist, gilt Folgendes:
- [C-2-1] Geräteimplementierungen MÜSSEN mindestens eine der H.265- oder VP9-Decodierungen von 720p-, 1080p- und UHD-Profilen unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
Videoauflösung | 352 × 288 px | 720 x 480 px | 1.280 × 720 Pixel | 1920 × 1080 Pixel | 3840 x 2160 px |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 30/60 fps (60 fpsFernseher mit H.265-Hardwaredekodierung) | 60 fps |
Video-Bitrate | 600 Kbit/s | 1,6 Mbit/s | 4 Mbit/s | 5 Mbit/s | 20 Mbit/s |
5.3.6. VP8
Wenn Geräteimplementierungen den VP8-Codec unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die SD-Dekodierungsprofile in der folgenden Tabelle unterstützen.
- Es sollte ein Hardware-VP8-Codec verwendet werden, der die Anforderungen erfüllt.
- MÜSSEN die HD-Dekodierungsprofile in der folgenden Tabelle unterstützen.
Wenn die Höhe, die mit der Methode Display.getSupportedModes()
ermittelt wurde, der Videoauflösung entspricht oder größer ist, gilt Folgendes:
- [C-2-1] Geräteimplementierungen MÜSSEN die 720p-Profile in der folgenden Tabelle unterstützen.
- [C-2-2] Geräteimplementierungen MÜSSEN die 1080p-Profile in der folgenden Tabelle unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | |
---|---|---|---|---|
Videoauflösung | 320 × 180 px | 640 × 360 px | 1.280 × 720 Pixel | 1920 × 1080 Pixel |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 30 fps (60 fpsFernseher) | 30 (60 fpsFernseher) |
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] MUSS die SD-Video-Dekodierungsprofile unterstützen, die in der folgenden Tabelle aufgeführt sind.
- MÜSSEN die HD-Dekodierungsprofile wie in der folgenden Tabelle angegeben unterstützen.
Wenn Geräteimplementierungen den VP9-Codec und einen Hardware-Decoder unterstützen:
- [C-2-1] MUSS die HD-Dekodierungsprofile wie in der folgenden Tabelle angegeben unterstützen.
Wenn die mit der Methode Display.getSupportedModes()
gemeldete Höhe der Videoauflösung entspricht oder größer ist, gilt Folgendes:
- [C-3-1] Geräteimplementierungen MÜSSEN mindestens eine der Dekodierungen VP9 oder H.265 der Profile 720, 1080 und UHD unterstützen.
SD (niedrige Qualität) | SD (hohe Qualität) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
Videoauflösung | 320 × 180 px | 640 × 360 px | 1.280 × 720 Pixel | 1920 × 1080 Pixel | 3840 x 2160 px |
Video-Framerate | Frame-Rate: 30 fps | Frame-Rate: 30 fps | Frame-Rate: 30 fps | 30 fps (60 fpsFernseher mit VP9-Hardware-Decodierung) | 60 fps |
Video-Bitrate | 600 Kbit/s | 1,6 Mbit/s | 4 Mbit/s | 5 Mbit/s | 20 Mbit/s |
5.4. Audioaufnahmen
Einige der in diesem Abschnitt beschriebenen Anforderungen sind seit Android 4.3 als „SOLLTE“ aufgeführt. In der Kompatibilitätsdefinition für zukünftige Versionen werden diese jedoch in „MUSS“ geändert. Für bestehende und neue Android-Geräte wird DRINGEND empfohlen, diese Anforderungen zu erfüllen, die als „SOLLTE“ aufgeführt sind. Andernfalls können sie nach dem Upgrade auf die zukünftige Version nicht mit Android kompatibel sein.
5.4.1. Aufzeichnung von Roh-Audio
Wenn Geräteimplementierungen android.hardware.microphone
angeben, gilt Folgendes:
-
[C-1-1] MÜSSEN die Erfassung von Roh-Audioinhalten mit den folgenden Eigenschaften zulassen:
- Format: Lineare PCM, 16 Bit
- Abtastraten: 8.000, 11.025, 16.000, 44.100 Hz
- Kanäle: Mono
-
[C-1-2] Die Aufnahme muss mit den oben genannten Abtastraten erfolgen, ohne Upsampling.
- [C-1-3] Es MUSS ein geeigneter Anti-Aliasing-Filter verwendet werden, wenn die oben genannten Abtastrate mit Downsampling erfasst werden.
-
MÜSSEN die Aufnahme von Roh-Audioinhalten in AM-Radio- und DVD-Qualität ermöglichen. Das bedeutet, dass die folgenden Eigenschaften erfüllt sein müssen:
- Format: Lineare PCM, 16 Bit
- Abtastraten: 22.050, 48.000 Hz
- Kanäle: Stereo
Wenn die Geräteimplementierungen die Aufnahme von Roh-Audioinhalten 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 aufnehmen.
- [C-2-2] Es MUSS ein geeigneter Anti-Aliasing-Filter für jede Art von Up- oder Downsampling verwendet werden.
5.4.2. Für Spracherkennung aufnehmen
Wenn Geräteimplementierungen android.hardware.microphone
angeben, gilt Folgendes:
- [C-1-1] MÜSSEN die
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION
-Audioquelle mit einer der Abtastraten 44.100 oder 48.000 aufnehmen. - [C-1-2] MÜSSEN standardmäßig alle Audioverarbeitungsmethoden zur Rauschunterdrückung deaktivieren, wenn ein Audiostream von der
AudioSource.VOICE_RECOGNITION
-Audioquelle aufgezeichnet wird. - [C-1-3] Bei der Aufzeichnung eines Audiostreams von der
AudioSource.VOICE_RECOGNITION
-Audioquelle MUSS standardmäßig die automatische Verstärkungsregelung deaktiviert sein. - Der Audiostream für die Spracherkennung sollte mit einer nahezu flachen Amplituden-zu-Frequenz-Charakteristik aufgezeichnet werden, genauer gesagt mit ± 3 dB von 100 Hz bis 4.000 Hz.
- Der Audiostream für die Spracherkennung sollte mit einer Empfindlichkeit für die Eingabe eingestellt werden, die bei einer Quelle mit einem Schallpegel von 90 dB bei 1.000 Hz eine RMS von 2.500 für 16‑Bit-Samples ergibt.
- Der Audiostream für die Spracherkennung sollte so aufgezeichnet werden, dass die PCM-Amplitudenstufen die Änderungen des Eingangs-SPL über einen Bereich von mindestens 30 dB von −18 dB bis +12 dB bezogen auf 90 dB SPL am Mikrofon linear verfolgen.
- Der Audiostream für die Spracherkennung sollte mit einer Gesamtharmonischen Verzerrung (Total Harmonic Distortion, THD) von weniger als 1% für 1 kHz bei einem Eingangspegel von 90 dB SPL am Mikrofon aufgezeichnet werden.
Wenn bei Geräteimplementierungen android.hardware.microphone
und Geräuschunterdrückungstechnologien für die Spracherkennung angegeben werden, gilt Folgendes:
- [C-2-1] Dieser Audioeffekt MUSS mit der
android.media.audiofx.NoiseSuppressor
API steuerbar sein. - [C-2-2] Jede Implementierung von Geräuschunterdrückungstechnologien MUSS über das Feld
AudioEffect.Descriptor.uuid
eindeutig identifiziert werden.
5.4.3. Aufzeichnung für die Weiterleitung der Wiedergabe
Die android.media.MediaRecorder.AudioSource
-Klasse enthält die Audioquelle REMOTE_SUBMIX
.
Wenn in Geräteimplementierungen sowohl android.hardware.audio.output
als auch android.hardware.microphone
deklariert werden, gilt Folgendes:
-
[C-1-1] Die
REMOTE_SUBMIX
-Audioquelle MUSS richtig implementiert sein, damit eine Anwendung, die dieandroid.media.AudioRecord
API zum Aufzeichnen von dieser Audioquelle verwendet, einen Mix aller Audiostreams aufnimmt, mit folgenden Ausnahmen:-
AudioManager.STREAM_RING
-
AudioManager.STREAM_ALARM
-
AudioManager.STREAM_NOTIFICATION
-
5.5. Audiowiedergabe
Android unterstützt die Audiowiedergabe über das Audioausgabegerät, wie in Abschnitt 7.8.2 definiert.
5.5.1. Rohe Audiowiedergabe
Wenn Geräteimplementierungen android.hardware.audio.output
angeben, gilt Folgendes:
-
[C-1-1] MÜSSEN die Wiedergabe von Roh-Audioinhalten mit den folgenden Eigenschaften zulassen:
- Format: Lineare PCM, 16-Bit, 8-Bit, Float
- Kanäle: Mono, Stereo, gültige Mehrkanalkonfigurationen mit bis zu 8 Kanälen
-
Abtastfrequenzen (in Hz):
- 8.000, 11.025, 16.000, 22.050, 32.000, 44.100, 48.000 bei den oben aufgeführten Channelkonfigurationen
- 96.000 Hz in Mono und Stereo
-
MÜSSEN die Wiedergabe von Roh-Audioinhalten mit den folgenden Eigenschaften zulassen:
- Abtastraten: 24.000, 48.000
5.5.2. Audioeffekte
Android bietet eine API für Audioeffekte für Geräteimplementierungen.
Wenn die Funktion android.hardware.audio.output
in Geräteimplementierungen deklariert wird, gilt Folgendes:
- [C-1-1] MÜSSEN die
EFFECT_TYPE_EQUALIZER
- undEFFECT_TYPE_LOUDNESS_ENHANCER
-Implementierungen unterstützen, die über die AudioEffect-UnterklassenEqualizer
undLoudnessEnhancer
gesteuert werden. - [C-1-2] MÜSSEN die Visualizer API-Implementierung unterstützen, die über die
Visualizer
-Klasse gesteuert wird. - [C-1-3] MÜSSEN die
EFFECT_TYPE_DYNAMICS_PROCESSING
-Implementierung unterstützen, die über die Audioeffekt-UnterklasseDynamicsProcessing
steuerbar ist. - MÜSSEN die
EFFECT_TYPE_BASS_BOOST
-,EFFECT_TYPE_ENV_REVERB
-,EFFECT_TYPE_PRESET_REVERB
- undEFFECT_TYPE_VIRTUALIZER
-Implementierungen unterstützen, die über dieAudioEffect
-UnterklassenBassBoost
,EnvironmentalReverb
,PresetReverb
undVirtualizer
gesteuert werden.
5.5.3. Audioausgabelautstärke
Automotive-Geräteimplementierungen:
- Die Audiolautstärke sollte für jeden Audiostream separat angepasst werden können. Dabei sollte der Inhaltstyp oder die Verwendung gemäß AudioAttributes und die Verwendung von Audioinhalten in Autos gemäß der öffentlichen Definition in
android.car.CarAudioManager
berücksichtigt werden.
5.6. Audiolatenz
Die Audiolatenz ist die Zeitverzögerung, die ein Audiosignal beim Durchlaufen eines Systems hat. Viele Anwendungsklassen erfordern kurze Latenzen, um Echtzeit-Toneffekte zu erzielen.
Im Sinne dieses Abschnitts gelten für die folgenden Begriffe die unten aufgeführten Definitionen:
- Ausgabelatenz. Das Intervall zwischen dem Schreiben eines Frames mit PCM-codierten Daten durch eine Anwendung und der Ausgabe des entsprechenden Tons über einen On-Device-Transducer oder dem Verlassen des Signals über einen Port, das extern beobachtet werden kann.
- Cold-Output-Latenz. Die Ausgabelatenz für den ersten Frame, wenn das Audioausgabesystem vor der Anfrage inaktiv und ausgeschaltet war.
- Kontinuierliche Ausgabelatenz Die Ausgabelatenz für nachfolgende Frames, nachdem das Gerät Audio wiedergegeben hat.
- Eingabelatenz. Das Intervall zwischen dem Zeitpunkt, zu dem ein Ton von der Umgebung an einen On-Device-Transducer oder ein Signal über einen Port an das Gerät gesendet wird, und dem Zeitpunkt, zu dem eine Anwendung den entsprechenden Frame mit PCM-codierten Daten liest.
- Eingabe verloren Der erste Teil eines Eingabesignals, der nicht verwendet werden kann oder nicht verfügbar ist.
- Cold-Input-Latenz. Die Summe aus der verlorenen Eingabezeit und der Eingabelatenz für den ersten Frame, wenn das Audioeingabesystem vor der Anfrage inaktiv und ausgeschaltet war.
- kontinuierliche Eingabelatenz. Die Eingabelatenz für nachfolgende Frames, während das Gerät Audio aufnimmt.
- Jitter bei kaltem Start. Die Variabilität zwischen verschiedenen Messungen der Latenzwerte der kalten Ausgabe.
- Jitter bei kaltem Eingang. Die Variabilität zwischen den einzelnen Messungen der Latenzwerte für die kalte Eingabe.
- kontinuierliche Umlauflatenz. Die Summe aus kontinuierlicher Eingabelatenz, kontinuierlicher Ausgabelatenz und einer Pufferzeit. Die Pufferzeit gibt der App Zeit, das Signal zu verarbeiten und die Phasendifferenz zwischen Eingabe- und Ausgabestreams zu verringern.
- OpenSL ES PCM-Puffer-Queue-API Die PCM-bezogenen OpenSL ES APIs im Android NDK.
- AAudio Native Audio API Die AAudio APIs im Android NDK.
- Zeitstempel. Ein Paar, das aus einer relativen Frameposition innerhalb eines Streams und der geschätzten Zeit besteht, zu der dieser Frame die Audioverarbeitungspipeline am zugehörigen Endpunkt betritt oder verlässt. Siehe auch AudioTimestamp.
Wenn für Geräteimplementierungen android.hardware.audio.output
deklariert wird, wird dringend empfohlen, die folgenden Anforderungen zu erfüllen oder zu übertreffen:
- [C-SR] Latenz der Kaltstartausgabe von 100 Millisekunden oder weniger
- [C-SR] Kontinuierliche Ausgabelatenz von maximal 45 Millisekunden
- [C-SR] Jitter der Kaltstartausgabe minimieren
- [C-SR] Der Ausgabezeitstempel, der von AudioTrack.getTimestamp und
AAudioStream_getTimestamp
zurückgegeben wird, ist auf +/- 1 ms genau.
Wenn die Geräteimplementierungen die oben genannten Anforderungen erfüllen, sind nach der Erstkalibrierung bei Verwendung sowohl der OpenSL ES PCM-Pufferwarteschlange als auch der nativen Audio-APIs von AAudio die kontinuierliche Ausgabelatenz und die Kaltstartlatenz über mindestens ein unterstütztes Audioausgabegerät:
- [C-SR] Es wird DRINGEND EMPFOHLEN, Audio mit niedriger Latenz zu melden, indem das
android.hardware.audio.low_latency
-Funktions-Flag deklariert wird. - [C-SR] Es wird DRINGEND EMPFOHLEN, die Anforderungen für Audio mit niedriger Latenz über die AAudio API zu erfüllen.
- [C-SR] Es wird dringend empfohlen, dass für Streams, die
AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
vonAAudioStream_getPerformanceMode()
zurückgeben, der vonAAudioStream_getFramesPerBurst()
zurückgegebene Wert kleiner oder gleich dem vonandroid.media.AudioManager.getProperty(String)
für den Property-SchlüsselAudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER
zurückgegebenen Wert ist.
Wenn die Geräteimplementierungen die Anforderungen für Audio mit niedriger Latenz sowohl über die OpenSL ES PCM-Pufferwarteschlange als auch über die nativen Audio-APIs von AAudio nicht erfüllen, gilt Folgendes:
- [C-1-1] DÜRFEN KEINE Unterstützung für Audio mit niedriger Latenz melden.
Wenn Geräteimplementierungen android.hardware.microphone
enthalten, wird DRINGEND EMPFOHLEN, die folgenden Anforderungen an die Audioeingabe zu erfüllen:
- [C-SR] Die Eingabelatenz nach dem Kaltstart darf maximal 100 Millisekunden betragen.
- [C-SR] Kontinuierliche Eingabelatenz von maximal 30 Millisekunden.
- [C-SR] Eine kontinuierliche Round-Trip-Latenz von 50 Millisekunden oder weniger.
- [C-SR] Jitter bei der Kaltstarteingabe minimieren.
- [C-SR] Begrenzen Sie den Fehler bei Eingabezeitstempeln, wie von AudioRecord.getTimestamp oder
AAudioStream_getTimestamp
zurückgegeben, auf +/- 1 ms.
5.7. Netzwerkprotokolle
Geräteimplementierungen MÜSSEN die Medianetzwerkprotokolle für die Audio- und Videowiedergabe unterstützen, wie in der Android SDK-Dokumentation angegeben.
Wenn Geräteimplementierungen einen Audio- oder Video-Decoder enthalten, gilt Folgendes:
-
[C-1-1] MUSS alle erforderlichen Codecs und Containerformate in Abschnitt 5.1 über HTTP(S) unterstützen.
-
[C-1-2] MUSS die in der Tabelle „Mediensegmentformate“ unten aufgeführten Mediensegmentformate über das HTTP Live Streaming-Entwurfsprotokoll, Version 7 unterstützen.
-
[C-1-3] MUSS das folgende RTP-Audio-Videoprofil und die zugehörigen Codecs in der folgenden RTSP-Tabelle unterstützen. Ausnahmen finden Sie in den Fußnoten der Tabelle in Abschnitt 5.1.
Mediensegmentformate
Segmentformate | Referenzen | Erforderliche Codec-Unterstützung |
---|---|---|
MPEG-2-Transportstream | ISO 13818 |
Video-Codecs:
Audio-Codecs:
|
AAC mit ADTS-Framing und ID3-Tags | ISO 13818-7 | Weitere Informationen zu AAC und seinen Varianten findest du in Abschnitt 5.1.1. |
WebVTT | WebVTT |
RTSP (RTP, SDP)
Profilname | Referenzen | Erforderliche Codec-Unterstützung |
---|---|---|
H264 AVC | RFC 6184 | Weitere Informationen zu H264 AVC findest du in Abschnitt 5.1.3. |
MP4A-LATM | RFC 6416 | Weitere Informationen zu AAC und seinen Varianten findest du in Abschnitt 5.1.1. |
H263-1998 |
RFC 3551 RFC 4629 RFC 2190 |
Weitere Informationen zu H263 findest du in Abschnitt 5.1.3. |
H263-2000 | RFC 4629 | Weitere Informationen zu H263 findest du in Abschnitt 5.1.3. |
AMR | RFC 4867 | Weitere Informationen zu AMR-NB findest du unter Abschnitt 5.1.1. |
AMR-WB | RFC 4867 | Weitere Informationen zu AMR-WB findest du im Abschnitt 5.1.1. |
MP4V-ES | RFC 6416 | Weitere Informationen zu MPEG-4 SP findest du in Abschnitt 5.1.3. |
mpeg4-generic | RFC 3640 | Weitere Informationen zu AAC und seinen Varianten findest du in Abschnitt 5.1.1. |
MP2T | RFC 2250 | Weitere Informationen finden Sie unter „HTTP Live Streaming“ im Abschnitt MPEG-2-Transportstream. |
5.8. Secure Media
Wenn Geräteimplementierungen eine sichere Videoausgabe und sichere Oberflächen unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die Unterstützung für
Display.FLAG_SECURE
deklarieren.
Wenn Geräteimplementierungen Display.FLAG_SECURE
und das Wireless Display Protocol unterstützen, gilt Folgendes:
- [C-2-1] Die Verbindung muss mit einem kryptografisch starken Mechanismus wie HDCP 2.x oder höher für die Displays gesichert werden, die über drahtlose Protokolle wie Miracast verbunden sind.
Wenn Geräteimplementierungen Display.FLAG_SECURE
und ein kabelgebundenes externes Display unterstützen, gilt Folgendes:
- [C-3-1] MUSS HDCP 1.2 oder höher für alle externen Bildschirme unterstützen, die über einen für Nutzer zugänglichen kabelgebundenen Anschluss verbunden sind.
5.9. Musical Instrument Digital Interface (MIDI)
Wenn Geräteimplementierungen die Unterstützung der Funktion android.software.midi
über die Klasse android.content.pm.PackageManager
melden, gilt Folgendes:
-
[C-1-1] MUSS MIDI über alle MIDI-fähigen Hardware-Transporte unterstützen, für die eine generische nicht-MIDI-Verbindung bereitgestellt wird. Diese Transporte sind:
- USB-Hostmodus, Abschnitt 7.7
- USB-Peripheriegerätemodus, Abschnitt 7.7
- MIDI over Bluetooth LE in zentraler Rolle, Abschnitt 7.4.3
-
[C-1-2] MUSS den Inter-App-MIDI-Software-Transport (virtuelle MIDI-Geräte) unterstützen
5.10. Professionelles Audio
Wenn Geräteimplementierungen die Unterstützung für die Funktion android.hardware.audio.pro
über die Klasse android.content.pm.PackageManager melden, gilt Folgendes:
- [C-1-1] MÜSSEN die Unterstützung für die Funktion
android.hardware.audio.low_latency
melden. - [C-1-2] Die kontinuierliche Audio-Rücklauflatenz, wie in Abschnitt 5.6 Audiolatenz definiert, darf maximal 20 Millisekunden betragen und sollte über mindestens einen unterstützten Pfad 10 Millisekunden oder weniger betragen.
- [C-1-3] MUSS USB-Ports haben, die den USB-Host-Modus und den USB-Peripheriegerätemodus unterstützen.
- [C-1-4] MÜSSEN die Unterstützung für die Funktion
android.software.midi
melden. - [C-1-5] Die Latenz und die USB-Audioanforderungen MÜSSEN sowohl mit der OpenSL ES-PCM-Pufferwarteschlange als auch mit den AAudio-nativen Audio-APIs erfüllt werden.
- [SR] Es wird DRINGEND EMPFOHLEN, eine gleichbleibende CPU-Leistung zu bieten, während Audio aktiv ist und die CPU-Auslastung variiert. Dies sollte mit dem Commit 1bd6391 von SimpleSynth getestet werden. Die SimpleSynth-App muss mit den folgenden Parametern ausgeführt werden und nach 10 Minuten keine Unterbrechungen mehr aufweisen:
- Arbeitszyklen: 200.000
- Variable Last: AN (dieser Wert wechselt alle 2 Sekunden zwischen 100% und 10% des Werts für die Arbeitszyklen und dient zum Testen des Verhaltens des CPU-Gouverneurs)
- Stabilisierte Last: AUS
- MÜSSEN Abweichungen und Abweichungen der Audiouhr relativ zur Standardzeit minimieren.
- SOLLTE die Audiotaktabweichung relativ zur CPU-
CLOCK_MONOTONIC
minimieren, wenn beide aktiv sind. - MÜSSEN die Audiolatenz über die On-Device-Wandler minimieren.
- MÜSSEN die Audiolatenz über digitale USB-Audioschnittstellen minimieren.
- MÜSSEN Audiolatenzmessungen über alle Pfade dokumentieren.
- Der Jitter bei den Callback-Eingabezeiten für den Abschluss des Audiopuffers sollte minimiert werden, da dies sich auf den nutzbaren Prozentsatz der vollen CPU-Bandbreite durch den Callback auswirkt.
- Bei normalem Gebrauch und der angegebenen Latenz sollte es KEINE Unterbrechungen (Ausgabe) oder Überläufe (Eingabe) bei der Audiowiedergabe geben.
- Die Latenz zwischen den Kanälen sollte gleich sein.
- Die durchschnittliche MIDI-Latenz über alle Transports sollte MINIMIERT werden.
- MÜSSEN die MIDI-Latenzvariabilität bei Belastung (Jitter) über alle Übertragungen minimieren.
- MÜSSEN genaue MIDI-Zeitstempel über alle Übertragungen hinweg bereitstellen.
- MÜSSEN Audiosignalrauschen über On-Device-Wandler minimieren, einschließlich der Zeit unmittelbar nach dem Kaltstart.
- Die Audiotaktdifferenz zwischen der Eingabe- und Ausgabeseite der entsprechenden Endpunkte sollte null sein, wenn beide aktiv sind. Beispiele für entsprechende Endpunkte sind das Mikrofon und der Lautsprecher auf dem Gerät oder der Audioeingang und -ausgang.
- MÜSSEN Callbacks für den Abschluss des Audiopuffers für die Eingabe- und Ausgabeseite der entsprechenden Endpunkte im selben Thread verarbeiten, wenn beide aktiv sind, und den Ausgabe-Callback sofort nach der Rückkehr aus dem Eingabe-Callback aufrufen. Wenn es nicht möglich ist, die Rückrufe im selben Thread zu verarbeiten, geben Sie den Ausgaberückruf kurz nach dem Eingaberückruf ein, damit die Anwendung eine einheitliche Zeitabfolge für die Eingabe- und Ausgabeseite hat.
- MÜSSEN die Phasendifferenz zwischen der HAL-Audiopufferung für die Eingabe- und Ausgabeseite der entsprechenden Endpunkte minimieren.
- Die Touch-Latenz sollte MINIMIERT werden.
- Die Touch-Latenz sollte unter Last möglichst gering sein (Jitter).
- Die Latenz von der Touchbedienung bis zur Audioausgabe sollte maximal 40 ms betragen.
Wenn Geräteimplementierungen alle oben genannten Anforderungen erfüllen, gilt Folgendes:
- [SR] Es wird DRINGEND EMPFOHLEN, die Unterstützung für die Funktion
android.hardware.audio.pro
über die Klasseandroid.content.pm.PackageManager
zu melden.
Wenn Geräteimplementierungen eine 4-polige 3,5-mm-Audiobuchse enthalten, gelten folgende Anforderungen:
- [C-2-1] Die kontinuierliche Audio-Rundlauflatenz über den Audio-Anschluss darf maximal 20 Millisekunden betragen.
- [SR] Es wird DRINGEND EMPFOHLEN, den Abschnitt Spezifikationen für Mobilgeräte (Stecker) der Spezifikation für kabelgebundene Audio-Headsets (Version 1.1) einzuhalten.
- Die kontinuierliche Audio-Rundlauflatenz über den Audio-Anschluss DARF 10 Millisekunden nicht überschreiten.
Wenn bei Geräten keine 4-polige 3,5-mm-Audiobuchse vorhanden ist, aber USB-Ports, die den USB-Host-Modus unterstützen, gelten folgende Einschränkungen:
- [C-3-1] MÜSSEN die USB-Audioklasse implementieren.
- [C-3-2] MÜSSEN eine kontinuierliche Audio-Round-Trip-Latenz von 20 Millisekunden oder weniger über den USB-Host-Modus-Port mit USB-Audioklasse haben.
- Die kontinuierliche Audio-Round-Trip-Latenz über den USB-Host-Modus-Port mit USB-Audioklasse sollte 10 Millisekunden oder weniger betragen.
Wenn Geräteimplementierungen einen HDMI-Port enthalten, müssen sie:
- [C-4-1] MUSS in mindestens einer Konfiguration die Ausgabe in Stereo und acht Kanälen mit 20-Bit- oder 24-Bit-Tiefe und 192 kHz ohne Bittiefeverlust oder Resampling unterstützen.
5.11. Aufnahmen für „Unverarbeitet“
Android unterstützt die Aufzeichnung von unverarbeitetem Audio über die Audioquelle android.media.MediaRecorder.AudioSource.UNPROCESSED
. In OpenSL ES kann mit der Aufnahmevoreinstellung SL_ANDROID_RECORDING_PRESET_UNPROCESSED
darauf zugegriffen werden.
Wenn Geräteimplementierungen die Unterstützung der unverarbeiteten Audioquelle beabsichtigen und sie für Drittanbieter-Apps verfügbar machen möchten, müssen sie:
-
[C-1-1] MÜSSEN die Unterstützung über die
android.media.AudioManager
-Property PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED melden. -
[C-1-2] MÜSSEN im mittleren Frequenzbereich eine nahezu flache Amplitude-zu-Frequenz-Charakteristik aufweisen: insbesondere ± 10 dB von 100 Hz bis 7.000 Hz für jedes Mikrofon, das zum Aufzeichnen der unbehandelten Audioquelle verwendet wird.
-
[C-1-3] MÜSSEN Amplitudenwerte im niedrigen Frequenzbereich aufweisen: insbesondere von ± 20 dB von 5 Hz bis 100 Hz im Vergleich zum Mittelfrequenzbereich für jedes Mikrofon, das zum Aufzeichnen der unbehandelten Audioquelle verwendet wird.
-
[C-1-4] MÜSSEN Amplitudenwerte im Hochfrequenzbereich aufweisen: insbesondere von ± 30 dB von 7.000 Hz bis 22.000 Hz im Vergleich zum Mittelfrequenzbereich für jedes Mikrofon, das zum Aufzeichnen der unbehandelten Audioquelle verwendet wird.
-
[C-1-5] Die Audioeingabeempfindlichkeit MUSS so eingestellt sein, dass eine Sinustonquelle mit 1.000 Hz, die bei einem Schalldruckpegel (SPL) von 94 dB wiedergegeben wird, für jedes Mikrofon, das zum Aufzeichnen der unbehandelten Audioquelle verwendet wird, eine Antwort mit einem RMS von 520 für 16‑Bit-Samples (oder −36 dB Vollskala für Gleitkomma-/Doppelpräzision-Samples) liefert.
-
[C-1-6] Für jedes Mikrofon, das zur Aufzeichnung der unbehandelten Audioquelle verwendet wird, MUSS ein Signal-Rausch-Verhältnis (SNR) von mindestens 60 dB vorhanden sein. Der SNR wird als Differenz zwischen 94 dB SPL und dem äquivalenten SPL des Eigenrauschens (A-bewertet) gemessen.
-
[C-1-7] MUSS für jedes Mikrofon, das zur Aufzeichnung der unbehandelten Audioquelle verwendet wird, eine Gesamtharmonisierungsunterbrechung (Total Harmonic Distortion, THD) von weniger als 1% bei 1 kHz bei einem Eingangspegel von 90 dB SPL haben.
-
Der Pfad darf keine andere Signalverarbeitung (z.B. automatische Verstärkungsregelung, Hochpassfilter oder Echounterdrückung) enthalten, außer einem Pegelmultiplikator, um den Pegel in den gewünschten Bereich zu bringen. Mit anderen Worten:
- [C-1-8] Wenn die Architektur aus irgendeinem Grund eine Signalverarbeitung enthält, MUSS diese deaktiviert werden und darf keine zusätzliche Latenz oder Verzögerung im Signalpfad verursachen.
- [C-1-9] Der Pegelmultiplikator darf sich zwar im Pfad befinden, darf aber KEINE Verzögerung oder Latenz im Signalpfad verursachen.
Alle SPL-Messungen werden direkt neben dem zu testenden Mikrofon durchgeführt. Bei mehreren Mikrofonkonfigurationen gelten diese Anforderungen für jedes Mikrofon.
Wenn Geräteimplementierungen android.hardware.microphone
angeben, aber keine unverarbeitete Audioquelle unterstützen, gilt Folgendes:
- [C-2-1] Für die
AudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED)
API-Methode MUSSnull
zurückgegeben werden, um die fehlende Unterstützung korrekt anzugeben. - [SR] Es wird nach wie vor DRINGEND empfohlen, so viele Anforderungen wie möglich für den Signalpfad der unbearbeiteten 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 gemäß der Dokumentation im Android SDK und die im AOSP bereitgestellten Shell-Befehle unterstützen, die von App-Entwicklern verwendet werden können, einschließlich
dumpsys
undcmd stats
. - [C-0-3] Das Format oder den Inhalt von Gerätesystemereignissen (batterystats, diskstats, fingerprint, graphicsstats, netstats, notification, procstats), die über den Befehl „dumpsys“ protokolliert werden, DARF NICHT geändert werden.
- [C-0-10] Die folgenden Ereignisse MÜSSEN ohne Auslassung aufgezeichnet und für den
cmd stats
-Shell-Befehl und dieStatsManager
-System-API-Klasse zugänglich gemacht werden.- ActivityForegroundStateChanged
- AnomalyDetected
- AppBreadcrumbReported
- AppCrashOccurred
- AppStartOccurred
- BatteryLevelChanged
- BatterySaverModeStateChanged
- BleScanResultReceived
- BleScanStateChanged
- ChargingStateChanged
- DeviceIdleModeStateChanged
- ForegroundServiceStateChanged
- GpsScanStateChanged
- JobStateChanged
- PluggedStateChanged
- ScheduledJobStateChanged
- ScreenStateChanged
- SyncStateChanged
- SystemElapsedRealtime
- UidProcessStateChanged
- WakelockStateChanged
- WakeupAlarmOccurred
- WifiLockStateChanged
- WifiMulticastLockStateChanged
- WifiScanStateChanged
- [C-0-4] Der geräteseitige adb-Daemon MUSS standardmäßig inaktiv sein und es MUSS einen nutzerzugänglichen Mechanismus zum Aktivieren der Android Debug Bridge geben.
- [C-0-5] MÜSSEN sicheres adb unterstützen. Android unterstützt sichere adb-Verbindungen. Mit Secure adb wird adb auf bekannten authentifizierten Hosts aktiviert.
-
[C-0-6] Es MUSS ein Mechanismus vorhanden sein, mit dem adb von einem Hostcomputer aus verbunden werden kann. Beispiel:
- Geräteimplementierungen ohne USB-Port, der den Peripheriemodus unterstützt, 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 eine Verbindung zum Gerät über das ADB-Protokoll herstellen können.
- [C-0-2] MUSS adb gemäß der Dokumentation im Android SDK und die im AOSP bereitgestellten Shell-Befehle unterstützen, die von App-Entwicklern verwendet werden können, einschließlich
-
Dalvik Debug Monitor Service (ddms)
- [C-0-7] MÜSSEN alle DDMS-Funktionen unterstützen, die im Android SDK dokumentiert sind. Da ddms adb verwendet, sollte die Unterstützung für ddms standardmäßig inaktiv sein, muss aber unterstützt werden, wenn der Nutzer die Android Debug Bridge wie oben aktiviert hat.
-
Monkey
- [C-0-8] MUSS das Monkey-Framework enthalten und für Anwendungen verfügbar machen.
-
SysTrace
- [C-0-9] MÜSSEN das systrace-Tool wie im Android SDK beschrieben unterstützen. Systrace muss standardmäßig inaktiv sein und es MUSS einen nutzerzugänglichen Mechanismus geben, um Systrace zu aktivieren.
Wenn Geräteimplementierungen die Unterstützung von Vulkan 1.0 oder höher über die android.hardware.vulkan.version
-Funktions-Flags melden, gilt Folgendes:
- [C-1-1] Es MUSS eine Funktion geben, mit der der App-Entwickler GPU-Debug-Ebenen aktivieren oder deaktivieren kann.
- [C-1-2] Wenn die GPU-Debugebenen aktiviert sind, MÜSSEN im Basisverzeichnis der debugbaren Anwendungen Ebenen in Bibliotheken aufgezählt werden, die von externen Tools bereitgestellt werden (d.h. nicht Teil des Plattform- oder Anwendungspakets), um die API-Methoden vkEnumerateInstanceLayerProperties() und vkCreateInstance() zu unterstützen.
6.2. Entwickleroptionen
Android bietet Entwicklern die Möglichkeit, Einstellungen für die App-Entwicklung zu konfigurieren.
Geräteimplementierungen MÜSSEN eine einheitliche Nutzung der Entwickleroptionen ermöglichen. Sie müssen:
- [C-0-1] Der Intent android.settings.APPLICATION_DEVELOPMENT_SETTINGS MUSS berücksichtigt werden, um Einstellungen für die Anwendungsentwicklung anzuzeigen. In der Upstream-Android-Implementierung wird das Menü „Entwickleroptionen“ standardmäßig ausgeblendet. Nutzer können die Entwickleroptionen aufrufen, indem sie siebenmal auf das Menüelement Einstellungen > Informationen zum Gerät > Build-Nummer tippen.
- [C-0-2] Die Entwickleroptionen MÜSSEN standardmäßig ausgeblendet sein.
- [C-0-3] Es MUSS ein klarer Mechanismus vorhanden sein, der keine Bevorzugung einer Drittanbieter-App gegenüber einer anderen bei der Aktivierung der Entwickleroptionen vorsieht. Sie MÜSSEN ein öffentlich sichtbares Dokument oder eine öffentlich sichtbare Website angeben, in dem bzw. der beschrieben wird, wie die Entwickleroptionen aktiviert werden. Dieses Dokument oder diese Website MUSS über die Android SDK-Dokumente verlinkbar sein.
- Es sollte eine fortlaufende visuelle Benachrichtigung für den Nutzer geben, wenn die Entwickleroptionen aktiviert sind und die Sicherheit des Nutzers gefährdet ist.
- Es ist zulässig, den Zugriff auf das Menü „Entwickleroptionen“ vorübergehend einzuschränken, indem es ausgeblendet oder deaktiviert wird, um Ablenkungen in Situationen zu vermeiden, in denen die Sicherheit des Nutzers ein Anliegen ist.
7. Hardwarekompatibilität
Wenn ein Gerät eine bestimmte Hardwarekomponente mit einer entsprechenden API für Drittanbieterentwickler hat:
- [C-0-1] Die Geräteimplementierung MUSS diese API wie in der Android SDK-Dokumentation beschrieben implementieren.
Wenn eine API im SDK mit einer Hardwarekomponente interagiert, die als optional angegeben ist, und die Geräteimplementierung diese Komponente nicht hat:
- [C-0-2] Vollständige Klassendefinitionen (wie im SDK dokumentiert) für die Komponenten-APIs MÜSSEN weiterhin angegeben werden.
- [C-0-3] Das Verhalten der API MUSS auf angemessene Weise als No-Op implementiert werden.
- [C-0-4] API-Methoden MÜSSEN Nullwerte zurückgeben, sofern dies in 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 beschrieben sind.
- [C-0-7] Geräteimplementierungen MÜSSEN für dieselbe Build-Fingerabdruck-Kennung über die Methoden
getSystemAvailableFeatures()
undhasSystemFeature(String)
der Klasse android.content.pm.PackageManager korrekte Informationen zur Hardwarekonfiguration melden.
Ein typisches Beispiel für ein Szenario, in dem diese Anforderungen gelten, ist die Telephony API: Auch auf Geräten, die keine Smartphones sind, müssen diese APIs als sinnvolle No-Ops implementiert werden.
7.1. Display und Grafik
Android bietet Funktionen, mit denen Anwendungs-Assets und UI-Layouts automatisch an das Gerät angepasst werden, damit Drittanbieter-Apps auf verschiedenen Hardwarekonfigurationen reibungslos funktionieren. Auf Geräten MÜSSEN diese APIs und Verhaltensweisen wie in diesem Abschnitt beschrieben ordnungsgemäß implementiert sein.
Die Einheiten, auf die in den Anforderungen in diesem Abschnitt verwiesen wird, sind so definiert:
- die physische Diagonale. Der Abstand in Zoll zwischen zwei gegenüberliegenden Ecken des beleuchteten Bereichs des Displays.
- Punkte pro Zoll (dpi). Die Anzahl der Pixel, die von einer linearen horizontalen oder vertikalen Spannweite von 1" abgedeckt werden. Wenn dpi-Werte aufgeführt sind, müssen sowohl die horizontalen als auch die vertikalen dpi in den Bereich fallen.
- Seitenverhältnis. Das Verhältnis der Pixel der längeren zur kürzeren Bildschirmseite. Ein Display mit 480 × 854 Pixeln hat beispielsweise ein Seitenverhältnis von 854 ÷ 480 = 1, 779, also ungefähr „16:9“.
- Dichteunabhängiges Pixel (dp). Die virtuelle Pixeleinheit, normalisiert auf ein Display mit 160 dpi, berechnet als: Pixel = dp * (Dichte/160).
7.1.1. Bildschirmkonfiguration
7.1.1.1. Bildschirmgröße und -form
Das Android-UI-Framework unterstützt eine Vielzahl verschiedener logischer Bildschirmlayoutgrößen und ermöglicht es Apps, die Größe des Bildschirmlayouts der aktuellen Konfiguration über Configuration.screenLayout
mit SCREENLAYOUT_SIZE_MASK
und Configuration.smallestScreenWidthDp
abzufragen.
Geräteimplementierungen:
-
[C-0-1] MÜSSEN die richtige Layoutgröße für die
Configuration.screenLayout
gemäß der Definition in der Android SDK-Dokumentation angeben. Insbesondere müssen Geräteimplementierungen die korrekten logischen Bildschirmabmessungen in Dichte-unabhängigen Pixeln (dp) wie unten angegeben angeben:- Geräte, für die
Configuration.uiMode
auf einen anderen Wert als UI_MODE_TYPE_WATCH festgelegt ist und die einesmall
-Größe für dieConfiguration.screenLayout
melden, MÜSSEN mindestens 426 dp × 320 dp haben. - Geräte, die eine
normal
-Größe für dieConfiguration.screenLayout
melden, MÜSSEN mindestens 480 dp × 320 dp haben. - Geräte, die eine
large
-Größe für dieConfiguration.screenLayout
melden, MÜSSEN mindestens 640 dp × 480 dp haben. - Geräte, die eine
xlarge
-Größe für dieConfiguration.screenLayout
melden, MÜSSEN mindestens 960 dp × 720 dp haben.
- Geräte, für die
-
[C-0-2] MÜSSEN die angegebene Unterstützung von Bildschirmgrößen durch das <
supports-screens
>-Attribut in der AndroidManifest.xml-Datei korrekt einhalten, wie in der Android SDK-Dokumentation beschrieben. -
KANN ein Display mit abgerundeten Ecken haben.
Wenn Geräteimplementierungen UI_MODE_TYPE_NORMAL
unterstützen und ein Display mit abgerundeten Ecken haben, gilt Folgendes:
- [C-1-1] Der Radius der abgerundeten Ecken darf maximal 38 dp betragen.
- Es sollte eine Nutzerinteraktion geben, um zum Displaymodus mit den rechteckigen Ecken zu wechseln.
7.1.1.2. Seitenverhältnis des Bildschirms
Für das Seitenverhältnis des physischen Displays gibt es keine Einschränkungen. Das Seitenverhältnis des logischen Displays, in dem Drittanbieter-Apps gerendert werden, muss jedoch den folgenden Anforderungen entsprechen. Diese Anforderungen können aus den über die view.Display
APIs und die Configuration API gemeldeten Werten für Höhe und Breite abgeleitet werden:
-
[C-0-1] Bei Geräteimplementierungen, bei denen
Configuration.uiMode
aufUI_MODE_TYPE_NORMAL
festgelegt ist, MUSS das Seitenverhältnis zwischen 1,3333 (4:3) und 1,86 (ungefähr 16:9) liegen, es sei denn, die App kann als für eine größere Darstellung geeignet angesehen werden, da eine der folgenden Bedingungen erfüllt ist:- Die App hat angegeben, dass sie ein größeres Seitenverhältnis unterstützt. Das geht aus dem Metadatenwert
android.max_aspect
hervor. - Die App gibt über das Attribut android:resizeableActivity an, dass sie in der Größe veränderbar ist.
- Die App ist auf API-Level 24 oder höher ausgerichtet und deklariert keine
android:MaxAspectRatio
, die das zulässige Seitenverhältnis einschränken würde.
- Die App hat angegeben, dass sie ein größeres Seitenverhältnis unterstützt. Das geht aus dem Metadatenwert
-
[C-0-2] Bei Geräteimplementierungen, bei denen
Configuration.uiMode
aufUI_MODE_TYPE_WATCH
festgelegt ist, MUSS das Seitenverhältnis auf 1,0 (1:1) festgelegt sein.
7.1.1.3. Bildschirmdichte
Das Android-UI-Framework definiert eine Reihe von standardmäßigen logischen Dichten, die Entwicklern helfen, ihre Anwendungsressourcen zu optimieren.
-
[C-0-1] Standardmäßig MÜSSEN Geräteimplementierungen über die DENSITY_DEVICE_STABLE API nur eine der folgenden logischen Android-Framework-Dichten melden und dieser Wert DARF sich zu keinem Zeitpunkt ändern. Das Gerät KANN jedoch eine andere beliebige Dichte melden, je nach den Änderungen an der Displaykonfiguration, die der Nutzer nach dem ersten Start vorgenommen hat (z. B. Displaygröße).
- 120 dpi (ldpi)
- 160 dpi (mdpi)
- 213 dpi (tvdpi)
- 240 dpi (hdpi)
- 260 dpi (260dpi)
- 280 dpi (280dpi)
- 300 dpi (300dpi)
- 320 dpi (xhdpi)
- 340 dpi (340dpi)
- 360 dpi (360dpi)
- 400 dpi (400dpi)
- 420 dpi (420dpi)
- 480 dpi (xxhdpi)
- 560 dpi (560dpi)
- 640 dpi (xxxhdpi)
-
Bei Geräteimplementierungen sollte die Standarddichte des Android-Frameworks definiert werden, die der physischen Dichte des Bildschirms am nächsten kommt, es sei denn, diese logische Dichte drückt die gemeldete Bildschirmgröße unter die unterstützte Mindestgröße. Wenn die Standarddichte des Android-Frameworks, die der physischen Dichte numerisch am nächsten kommt, zu einer Bildschirmgröße führt, die kleiner als die kleinste unterstützte kompatible Bildschirmgröße (320 dp Breite) ist, SOLLTE bei Geräteimplementierungen die nächstniedrigere Standarddichte des Android-Frameworks angegeben werden.
Wenn es eine Option gibt, die Displaygröße des Geräts zu ändern:
- [C-1-1] Die Displaygröße darf nicht größer als das 1,5-fache der nativen Dichte sein oder eine effektive Mindestbildschirmgröße von weniger als 320 dp (entspricht dem Ressourcenqualifizierer „sw320dp“) haben, je nachdem, was zuerst eintritt.
- [C-1-2] Die Displaygröße darf NICHT auf weniger als 0,85-fache der nativen Dichte skaliert werden.
- Für eine gute Nutzerfreundlichkeit und einheitliche Schriftgrößen wird die folgende Skalierung der Optionen für native Anzeigen EMPFOHLEN (unter Einhaltung der oben genannten Limits):
- Klein: 0,85x
- Standard: 1x (native Displayskala)
- Groß: 1,15-fach
- Größer: 1,3-fach
- Größter Wert: 1,45-fach
7.1.2. Displaymesswerte
Wenn Geräteimplementierungen einen Bildschirm oder eine Videoausgabe umfassen, gilt Folgendes:
- [C-1-1] MÜSSEN für alle in der
android.util.DisplayMetrics
API definierten Messwerte für Anzeigen korrekte Werte zurückgeben.
Wenn die Geräteimplementierungen kein eingebettetes Display oder eine Videoausgabe enthalten, gilt Folgendes:
- [C-2-1] Es MÜSSEN vernünftige Werte für alle in der
android.util.DisplayMetrics
API definierten Displaymesswerte für den emulierten Standardview.Display
gemeldet werden.
7.1.3. Displayausrichtung
Geräteimplementierungen:
- [C-0-1] MÜSSEN angeben, welche Bildschirmausrichtungen unterstützt werden (
android.hardware.screen.portrait
und/oderandroid.hardware.screen.landscape
) und MÜSSEN mindestens eine unterstützte Ausrichtung angeben. Bei einem Gerät mit einem fixierten Querformat-Display, z. B. einem Fernseher oder Laptop, sollte nurandroid.hardware.screen.landscape
gemeldet werden. - [C-0-2] MÜSSEN bei jeder Abfrage über die
android.content.res.Configuration.orientation
,android.view.Display.getOrientation()
oder andere APIs den korrekten Wert für die aktuelle Ausrichtung des Geräts zurückgeben.
Wenn Geräteimplementierungen beide Bildschirmausrichtungen unterstützen, gilt Folgendes:
- [C-1-1] Apps MÜSSEN eine dynamische Ausrichtung im Hoch- oder Querformat unterstützen. Das Gerät muss also die Anfrage der Anwendung für eine bestimmte Bildschirmausrichtung respektieren.
- [C-1-2] Die gemeldete Bildschirmgröße oder -dichte darf sich beim Ändern der Ausrichtung NICHT ändern.
- Sie können als Standardeinstellung entweder das Hoch- oder das Querformat auswählen.
7.1.4. 2D- und 3D-Grafikbeschleunigung
7.1.4.1 OpenGL ES
Geräteimplementierungen:
- [C-0-1] Die unterstützten OpenGL ES-Versionen (1.1, 2.0, 3.0, 3.1, 3.2) MÜSSEN über die verwalteten APIs (z. B. über die
GLES10.getString()
-Methode) und die nativen APIs korrekt angegeben werden. - [C-0-2] MÜSSEN die Unterstützung für alle entsprechenden verwalteten APIs und nativen APIs für jede OpenGL ES-Version umfassen, die sie als unterstützt angegeben haben.
Wenn Geräteimplementierungen einen Bildschirm oder eine Videoausgabe umfassen, gilt Folgendes:
- [C-1-1] MÜSSEN sowohl OpenGL ES 1.1 als auch 2.0 unterstützen, wie in der Android SDK-Dokumentation beschrieben.
- [SR] Es wird DRINGEND EMPFOHLEN, 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] Alle anderen von ihnen implementierten OpenGL ES-Erweiterungen MÜSSEN über die von OpenGL ES verwalteten APIs und nativen APIs gemeldet werden. Erweiterungsstrings, die nicht unterstützt werden, DÜRFEN NICHT gemeldet werden.
- [C-2-2] MÜSSEN 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
undEGL_ANDROID_recordable
unterstützen. - [SR] Es wird DRINGEND EMPFOHLEN, EGL_KHR_partial_update zu unterstützen.
- MÜSSEN alle unterstützten Texturkomprimierungsformate (in der Regel anbieterspezifisch) korrekt über die
getString()
-Methode melden.
Wenn Geräteimplementierungen die Unterstützung von OpenGL ES 3.0, 3.1 oder 3.2 angeben, 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.
Wenn Geräteimplementierungen OpenGL ES 3.2 unterstützen, gilt Folgendes:
- [C-4-1] MÜSSEN das OpenGL ES Android Extension Pack vollständig unterstützen.
Wenn Geräteimplementierungen das Android Extension Pack von OpenGL ES vollständig unterstützen, gilt Folgendes:
- [C-5-1] MÜSSEN die Unterstützung über das
android.hardware.opengles.aep
-Funktions-Flag angeben.
Wenn Geräteimplementierungen die Unterstützung der EGL_KHR_mutable_render_buffer
-Erweiterung anbieten, gilt Folgendes:
- [C-6-1] MÜSSEN außerdem die
EGL_ANDROID_front_buffer_auto_refresh
-Erweiterung unterstützen.
7.1.4.2 Vulkan
Android unterstützt Vulkan, eine plattformübergreifende API mit geringem Overhead für leistungsstarke 3D-Grafiken.
Wenn Geräteimplementierungen OpenGL ES 3.1 unterstützen, gilt Folgendes:
- [SR] Es wird DRINGEND EMPFOHLEN, Vulkan 1.1 zu unterstützen.
Wenn Geräteimplementierungen einen Bildschirm oder eine Videoausgabe umfassen, gilt Folgendes:
- SOLLTEN Unterstützung für Vulkan 1.1 umfassen.
Wenn Geräteimplementierungen Vulkan 1.0 unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN den korrekten Ganzzahlwert mit den Funktions-Flags
android.hardware.vulkan.level
undandroid.hardware.vulkan.version
angeben. - [C-1-2] MÜSSEN mindestens eine
VkPhysicalDevice
für die native Vulkan APIvkEnumeratePhysicalDevices()
auflisten . - [C-1-3] MÜSSEN die Vulkan 1.0 APIs für jede aufgezählte
VkPhysicalDevice
vollständig implementieren. - [C-1-4] MUST enumerate layers, contained in native libraries named as
libVkLayer*.so
in the native library directory of the application package, through the Vulkan native APIsvkEnumerateInstanceLayerProperties()
andvkEnumerateDeviceLayerProperties()
. - [C-1-5] Es DÜRFEN KEINE Ebenen aufgelistet werden, die von Bibliotheken außerhalb des Anwendungspakets bereitgestellt werden, und es DÜRFEN KEINE anderen Möglichkeiten zum Überwachen oder Abfangen der Vulkan API bereitgestellt werden, es sei denn, das Attribut
android:debuggable
der Anwendung ist auftrue
festgelegt. - [C-1-6] MÜSSEN alle Erweiterungsstrings melden, die sie über die nativen Vulkan-APIs unterstützen, und umgekehrt MÜSSEN sie keine Erweiterungsstrings melden, die sie nicht korrekt unterstützen.
- [C-1-7] MÜSSEN die Erweiterungen VK_KHR_surface, VK_KHR_android_surface, VK_KHR_swapchain und VK_KHR_incremental_present unterstützen.
Wenn Geräteimplementierungen keine Unterstützung für Vulkan 1.0 bieten, gilt Folgendes:
- [C-2-1] DÜRFEN KEINE Vulkan-Funktions-Flags deklarieren (z.B.
android.hardware.vulkan.level
,android.hardware.vulkan.version
). - [C-2-2] Es DÜRFEN KEINE
VkPhysicalDevice
für die native Vulkan APIvkEnumeratePhysicalDevices()
aufgezählt werden.
Wenn Geräteimplementierungen Vulkan 1.1 unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN Unterstützung für die externen Semaphoren- und Handle-Typen von
SYNC_FD
bereitstellen. - [SR] Es wird DRINGEND EMPFOHLEN, die
VK_ANDROID_external_memory_android_hardware_buffer
-Erweiterung zu unterstützen.
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 2D-Grafikbeschleunigung
Android bietet einen Mechanismus, mit dem Anwendungen über das Manifest-Tag android:hardwareAccelerated oder direkte API-Aufrufe angeben können, dass sie die Hardwarebeschleunigung für 2D-Grafiken auf Anwendungs-, Aktivitäts-, Fenster- oder Ansichtsebene aktivieren möchten.
Geräteimplementierungen:
- [C-0-1] Die Hardwarebeschleunigung MUSS standardmäßig aktiviert und MUSS deaktiviert werden, wenn der Entwickler dies anfordert, indem er „android:hardwareAccelerated=“false““ festlegt oder die Hardwarebeschleunigung direkt über die Android View APIs deaktiviert.
- [C-0-2] MÜSSEN sich gemäß der Android SDK-Dokumentation zur Hardwarebeschleunigung verhalten.
Android enthält ein TextureView-Objekt, mit dem Entwickler hardwarebeschleunigte OpenGL ES-Texturen direkt als Rendering-Ziele in eine UI-Hierarchie einbinden können.
Geräteimplementierungen:
- [C-0-3] MÜSSEN die TextureView API unterstützen und ein einheitliches Verhalten mit der Android-Implementierung aufweisen.
7.1.4.5 Bildschirme mit breitem Farbraum
Wenn Geräteimplementierungen die Unterstützung von Wide-Gamut-Displays über Configuration.isScreenWideColorGamut()
angeben , gilt Folgendes:
- [C-1-1] MUSS ein farbkalibriertes Display haben.
- [C-1-2] MÜSSEN ein Display haben, dessen Farbraum den sRGB-Farbraum vollständig im CIE 1931 xyY-Farbraum abdeckt.
- [C-1-3] MÜSSEN ein Display haben, dessen Farbraum im CIE 1931 xyY-Farbraum eine Fläche von mindestens 90% des DCI-P3-Farbraums hat.
- [C-1-4] MUSS OpenGL ES 3.1 oder 3.2 unterstützen und dies korrekt melden.
- [C-1-5] Es MUSS Unterstützung 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
undEGL_KHR_gl_colorspace_display_p3
angeboten werden. - [SR] Es wird DRINGEND EMPFOHLEN,
GL_EXT_sRGB
zu unterstützen.
Wenn Geräteimplementierungen keine Wide-Gamut-Displays unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN mindestens 100% des sRGB-Farbraums im CIE 1931 xyY-Farbraum abdecken, auch wenn der Farbumfang des Bildschirms nicht definiert ist.
7.1.5. Modus für die Kompatibilität mit älteren Anwendungen
Android bietet einen „Kompatibilitätsmodus“, in dem das Framework mit einer „normalen“ Bildschirmgröße (320 dp Breite) arbeitet. Dieser Modus ist für ältere Anwendungen gedacht, die nicht für alte Android-Versionen entwickelt wurden, die noch keine Unabhängigkeit von der Bildschirmgröße hatten.
7.1.6. Displaytechnologie
Die Android-Plattform enthält APIs, mit denen Anwendungen auf dem Display ansprechende Grafiken rendern können. Geräte MÜSSEN alle diese APIs gemäß der Definition im Android SDK unterstützen, sofern dies nicht ausdrücklich in diesem Dokument erlaubt ist.
Geräteimplementierungen:
- [C-0-1] MÜSSEN Displays unterstützen, die 16‑Bit-Farbgrafiken rendern können.
- SOLLTE Displays mit 24-Bit-Farbgrafik unterstützen.
- [C-0-2] MÜSSEN Displays unterstützen, die Animationen rendern können.
- [C-0-3] Es MUSS die Displaytechnologie verwendet werden, die ein Pixelseitenverhältnis (Pixel Aspect Ratio, PAR) zwischen 0,9 und 1,15 hat. Das Pixelseitenverhältnis muss also nahezu quadratisch (1,0) sein, mit einer Toleranz von 10 bis 15 %.
7.1.7. Sekundäre Displays
Android unterstützt ein sekundäres Display, um die Medienfreigabe zu ermöglichen, und Entwickler-APIs für den Zugriff auf externe Displays.
Wenn Geräteimplementierungen ein externes Display entweder über eine kabelgebundene, drahtlose oder eine eingebettete zusätzliche Displayverbindung unterstützen, müssen sie:
- [C-1-1] MÜSSEN den Systemdienst und die API
DisplayManager
wie in der Android SDK-Dokumentation beschrieben implementieren.
7.2. Eingabegeräte
Geräteimplementierungen:
- [C-0-1] Es MUSS einen Eingabemechanismus wie einen Touchscreen oder eine Touchbedienungsfreie Navigation geben, um zwischen den UI-Elementen zu wechseln.
7.2.1. Tastatur
Wenn Geräteimplementierungen die Unterstützung von IME-Anwendungen (Eingabemethoden-Editor) von Drittanbietern umfassen, müssen sie:
- [C-1-1] MUSS das Funktions-Flag
android.software.input_methods
deklarieren. - [C-1-2] MÜSSEN
Input Management Framework
vollständig implementieren. - [C-1-3] Es 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. * MÜSSEN zusätzliche Softkeyboard-Implementierungen enthalten. * KANN eine Hardwaretastatur enthalten.
7.2.2. Bedienung ohne Touchscreen
Android unterstützt D-Pads, Trackballs und Rollen als Mechanismen für die Bedienung ohne Touchbedienung.
Geräteimplementierungen:
- [C-0-1] MÜSSEN den richtigen Wert für android.content.res.Configuration.navigation angeben.
Wenn bei Geräteimplementierungen keine Touchbedienung verfügbar ist, sind folgende Probleme zu erwarten:
- [C-1-1] Es MUSS ein angemessener alternativer Mechanismus für die Benutzeroberfläche zur Auswahl und Bearbeitung von Text vorhanden sein, der mit Eingabeverwaltungs-Engines kompatibel ist. Die Upstream-Open-Source-Implementierung von Android enthält einen Auswahlmechanismus, der für Geräte geeignet ist, die keine Eingaben für die Navigation ohne Touchbedienung haben.
7.2.3. Navigationstasten
Die Funktionen Startbildschirm, Letzte Apps und Zurück, die in der Regel über eine Interaktion mit einer speziellen physischen Taste oder einem bestimmten Bereich des Touchscreens bereitgestellt werden, sind für das Android-Navigationsparadigma und daher für die Geräteimplementierung unerlässlich:
- [C-0-1] Es MUSS eine Nutzerfunktion zum Starten installierter Anwendungen geben, die eine Aktivität mit der
<intent-filter>
haben, die mitACTION=MAIN
undCATEGORY=LAUNCHER
oderCATEGORY=LEANBACK_LAUNCHER
für Fernsehgeräte implementiert ist. Die Startbildschirmfunktion SOLLTE der Mechanismus für diese Nutzeraffordance sein. - Es MÜSSEN Schaltflächen für die Funktionen „Letzte Apps“ und „Zurück“ vorhanden sein.
Wenn die Funktionen „Startseite“, „Letzte“ oder „Zurück“ verfügbar sind, gelten folgende Regeln:
- [C-1-1] Sie MÜSSEN mit einer einzelnen Aktion (z.B. Tippen, Doppelklicken oder Geste) zugänglich sein, wenn eine davon zugänglich ist.
- [C-1-2] Es MUSS klar angegeben werden, welche einzelne Aktion jede Funktion auslösen würde. Beispiele für solche Hinweise sind ein gut sichtbares Symbol auf der Schaltfläche, ein Softwaresymbol in der Navigationsleiste auf dem Bildschirm oder eine Schritt-für-Schritt-Demo während der Ersteinrichtung.
Geräteimplementierungen:
- [SR] Es wird DRINGEND EMPFOHLEN, keinen Eingabemechanismus für die Menüfunktion bereitzustellen, da diese seit Android 4.0 zugunsten der Aktionsleiste eingestellt wurde.
Wenn Geräteimplementierungen die Menüfunktion bieten, gilt Folgendes:
- [C-2-1] Die Schaltfläche für das Dreipunkt-Menü muss angezeigt werden, wenn das Dreipunkt-Menü nicht leer ist und die Aktionsleiste sichtbar ist.
- [C-2-2] Die Position des Pop-ups für die Aktionsleiste darf NICHT geändert werden, wenn die Schaltfläche „Overflow“ in der Aktionsleiste ausgewählt wird. Das Pop-up für die Aktionsleiste darf aber an einer anderen Position auf dem Bildschirm gerendert werden, wenn es durch Auswahl der Menüfunktion angezeigt wird.
Wenn die Geräteimplementierungen die Menüfunktion nicht bieten, müssen sie aus Gründen der Abwärtskompatibilität Folgendes tun: * [C-3-1] Die Menüfunktion MUSS für Anwendungen verfügbar sein, wenn targetSdkVersion
unter 10 liegt, entweder über eine physische Taste, einen Softwareschlüssel oder Touch-Gesten. Diese Menüfunktion sollte zugänglich sein, es sei denn, sie ist zusammen mit anderen Navigationsfunktionen ausgeblendet.
Wenn die Geräteimplementierung die Assistenzfunktion bietet, gilt Folgendes: * [C-4-1] Die Assistenzfunktion muss mit einer einzelnen Aktion (z.B. Tippen, Doppelklicken oder Geste) zugänglich sein, wenn andere Navigationstasten zugänglich sind. * [SR] Es wird DRINGEND EMPFOHLEN, die Funktion „Zum Startbildschirm gedrückt halten“ als vorgesehene Interaktion zu verwenden.
Wenn bei Geräteimplementierungen die Navigationstasten in einem separaten Bereich des Displays angezeigt werden, gilt Folgendes:
- [C-5-1] Die Navigationstasten MÜSSEN einen eigenen Bereich des Displays belegen, der für Apps nicht verfügbar ist. Sie DÜRFEN den für Apps verfügbaren Bereich des Displays NICHT verdecken oder anderweitig beeinträchtigen.
- [C-5-2] MUSS einen Teil des Displays für Anwendungen verfügbar machen, die die in Abschnitt 7.1.1 definierten Anforderungen erfüllen.
- [C-5-3] Die von der App über die API-Methode
View.setSystemUiVisibility()
festgelegten Flags MÜSSEN berücksichtigt werden, damit dieser bestimmte Bereich des Bildschirms (auch Navigationsleiste genannt) wie im SDK dokumentiert ausgeblendet wird.
7.2.4. Touchscreen-Eingabe
Android unterstützt eine Vielzahl von Eingabesystemen für Zeiger, z. B. Touchscreens, Touchpads und Eingabegeräte mit Touch-Emulation. Touchscreen-basierte Geräteimplementierungen sind mit einem Display verbunden, sodass der Nutzer den Eindruck hat, Elemente direkt auf dem Bildschirm zu bearbeiten. Da der Nutzer den Bildschirm direkt berührt, sind keine zusätzlichen visuellen Hinweise erforderlich, um die manipulierten Objekte anzuzeigen.
Geräteimplementierungen:
- SOLLTE eine Art Eingabesystem für den Cursor haben (entweder mausähnlich oder per Berührung).
- MÜSSEN vollständig unabhängige gefolgte Zeiger unterstützen.
Wenn Geräteimplementierungen einen Touchscreen (Einzelpunkt-Touchscreen oder besser) haben, gelten folgende Anforderungen:
- [C-1-1] MÜSSEN für das API-Feld
Configuration.touchscreen
den WertTOUCHSCREEN_FINGER
angeben. - [C-1-2] MÜSSEN die Funktions-Flags
android.hardware.touchscreen
undandroid.hardware.faketouch
melden.
Wenn die Geräteimplementierung einen Touchscreen enthält, der mehr als eine Berührung erfassen kann, gilt Folgendes:
- [C-2-1] MÜSSEN die entsprechenden Feature-Flags
android.hardware.touchscreen.multitouch
,android.hardware.touchscreen.multitouch.distinct
,android.hardware.touchscreen.multitouch.jazzhand
für den Typ des Touchscreens auf dem Gerät melden.
Wenn Geräteimplementierungen keinen Touchscreen haben (und nur ein Zeigegerät verwenden) und die Anforderungen an gefälschte Touch-Ereignisse 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. Gefälschte Eingabe per Berührung
Eine gefälschte Touch-Oberfläche bietet ein Nutzereingabesystem, das eine Teilmenge der Touchscreen-Funktionen annähernd nachahmt. Eine Maus oder Fernbedienung, die einen Cursor auf dem Bildschirm steuert, ähnelt beispielsweise dem Tippen, erfordert aber, dass der Nutzer zuerst den Cursor bewegt oder den Fokus darauf legt und dann klickt. Zahlreiche Eingabegeräte wie Maus, Touchpad, gyrobasierte Air Mouse, Gyro-Cursor, Joystick und Multi-Touch-Touchpad können gefälschte Touch-Interaktionen unterstützen. Android enthält die Funktionskonstante „android.hardware.faketouch“, die einem High-Fidelity-Eingabegerät ohne Touchbedienung (Maus oder Touchpad) entspricht, das die Touchbedienung (einschließlich grundlegender Gestenunterstützung) angemessen emulieren kann. Sie gibt an, dass das Gerät eine emulierte Teilmenge der Touchscreen-Funktionen unterstützt.
Wenn Geräteimplementierungen keinen Touchscreen, aber ein anderes Eingabesystem mit einem Zeiger enthalten, das verfügbar gemacht werden soll, müssen sie Folgendes tun:
- SOLLTEN die Unterstützung für das
android.hardware.faketouch
-Funktions-Flag erklären.
Wenn Geräteimplementierungen android.hardware.faketouch
unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN die absoluten X- und Y-Bildschirmpositionen des Cursors melden und einen visuellen Cursor auf dem Bildschirm anzeigen.
- [C-1-2] Es MUSS ein Touch-Ereignis mit dem Aktionscode gemeldet werden, der die Statusänderung angibt, die auftritt, wenn der Cursor auf dem Bildschirm nach unten oder oben bewegt wird.
- [C-1-3] Es MUSS möglich sein, den Cursor auf ein Objekt auf dem Display zu bewegen und dann nach unten oder oben zu bewegen, damit Nutzer das Tippen auf ein Objekt auf dem Display emulieren können.
- [C-1-4] Es MUSS möglich sein, innerhalb eines bestimmten Zeitlimits an derselben Stelle auf einem Objekt auf dem Display den Cursor nach unten, nach oben, nach unten und dann nach oben zu bewegen, damit Nutzer ein Doppeltippen auf ein Objekt auf dem Display emulieren können.
- [C-1-5] MUSS die Bewegung des Mauszeigers auf einen beliebigen Punkt auf dem Bildschirm, die Bewegung des Mauszeigers zu einem beliebigen anderen Punkt auf dem Bildschirm und dann die Bewegung des Mauszeigers nach oben unterstützen, damit Nutzer ein Ziehen per Touch emulieren können.
- [C-1-6] MUSS die Bewegung des Cursors nach unten unterstützen, damit Nutzer das Objekt schnell an eine andere Position auf dem Bildschirm verschieben können, und dann den Cursor auf dem Bildschirm nach oben bewegen, damit Nutzer ein Objekt auf dem Bildschirm werfen können.
- [C-1-7] MÜSSEN für das API-Feld
Configuration.touchscreen
den WertTOUCHSCREEN_NOTOUCH
angeben.
Wenn Geräteimplementierungen android.hardware.faketouch.multitouch.distinct
unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN die Unterstützung für
android.hardware.faketouch
angeben. - [C-2-2] MUSS das eindeutige Tracking von zwei oder mehr unabhängigen Eingaben des Touchpads unterstützen.
Wenn Geräteimplementierungen android.hardware.faketouch.multitouch.jazzhand
unterstützen, gilt Folgendes:
- [C-3-1] MÜSSEN die Unterstützung für
android.hardware.faketouch
angeben. - [C-3-2] MUSS das unabhängige Tracking von mindestens fünf (Tracking einer Hand mit Fingern) Eingaben von Eingabegeräten unterstützen.
7.2.6. Unterstützung für Gamecontroller
7.2.6.1. Tastenbelegung
Wenn Geräteimplementierungen das android.hardware.gamepad
-Funktionsflag deklarieren, gilt Folgendes:
- [C-1-1] Es MUSS ein Controller eingebettet oder im Lieferumfang enthalten sein, mit dem alle in den folgenden 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 Upstream-Android-Implementierung enthält eine Implementierung für Gamecontroller, die diese Anforderung erfüllt.
Schaltfläche | HID-Nutzung2 | Android-Schaltfläche |
---|---|---|
A1 | 0x09 0x0001 | KEYCODE_BUTTON_A (96) |
B1 | 0x09 0x0002 | KEYCODE_BUTTON_B (97) |
X1 | 0x09 0x0004 | KEYCODE_BUTTON_X (99) |
Y1 | 0x09 0x0005 | KEYCODE_BUTTON_Y (100) |
D-Pad nach oben1 D-Pad nach unten1 |
0x01 0x00393 | AXIS_HAT_Y4 |
Steuerkreuz links1 Steuerkreuz rechts1 |
0x01 0x00393 | AXIS_HAT_X4 |
Linke Schultertaste1 | 0x09 0x0007 | KEYCODE_BUTTON_L1 (102) |
Rechte Schultertaste1 | 0x09 0x0008 | KEYCODE_BUTTON_R1 (103) |
Linker Stick klicken1 | 0x09 0x000E | KEYCODE_BUTTON_THUMBL (106) |
Rechter Stick klicken1 | 0x09 0x000F | KEYCODE_BUTTON_THUMBR (107) |
Start1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
Zurück1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
1 KeyEvent
2 Die oben genannten HID-Nutzungen müssen in einer Gamepad-CA (0x01 0x0005) deklariert werden.
3 Dieser Wert muss ein logisches Minimum von 0, ein logisches Maximum von 7, ein physikalisches Minimum von 0, ein physikalisches Maximum von 315, Einheiten in Grad und eine Berichtsgröße von 4 haben. Der Logikwert ist als Drehung im Uhrzeigersinn weg von der vertikalen Achse definiert. Ein Logikwert von 0 steht beispielsweise für keine Drehung und die gedrückte Aufwärtstaste, während ein Logikwert von 1 für eine Drehung von 45 Grad und die gedrückten Auf- und Linkstasten steht.
Analoge Steuerelemente1 | HID-Nutzung | Android-Schaltfläche |
---|---|---|
Linker Trigger | 0x02 0x00C5 | AXIS_LTRIGGER |
Rechter Trigger | 0x02 0x00C4 | AXIS_RTRIGGER |
Linker Joystick |
0x01 0x0030 0x01 0x0031 |
AXIS_X AXIS_Y |
Rechter Joystick |
0x01 0x0032 0x01 0x0035 |
AXIS_Z AXIS_RZ |
7.2.7. Fernbedienung
Gerätespezifische Anforderungen finden Sie unter Abschnitt 2.3.1.
7.3. Sensoren
Wenn Geräteimplementierungen einen bestimmten Sensortyp mit einer entsprechenden API für Drittanbieter enthalten, MUSS die Geräteimplementierung diese API wie in der Android SDK-Dokumentation und in 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
SensorManager.getSensorList()
und ähnliche Methoden eine genaue Liste der unterstützten Sensoren zurückgeben. - [C-0-3] MÜSSEN sich für alle anderen Sensor-APIs angemessen verhalten (z. B.
true
oderfalse
zurückgeben, wenn Anwendungen versuchen, Listener zu registrieren, Sensor-Listener nicht aufrufen, wenn die entsprechenden Sensoren nicht vorhanden sind usw.).
Wenn Geräteimplementierungen einen bestimmten Sensortyp mit einer entsprechenden API für Drittanbieter enthalten, gilt Folgendes:
- [C-1-1] Alle Sensormessungen MÜSSEN mit den entsprechenden metrischen Werten des Internationalen Einheitensystems (SI) für jeden Sensortyp gemäß der Android SDK-Dokumentation erfasst werden.
- [C-1-2] Sensordaten müssen mit einer maximalen Latenz von 100 Millisekunden + 2 * „sample_time“ für den Fall eines gestreamten Sensors mit einer erforderlichen Mindestlatenz von 5 ms + 2 * „sample_time“ gemeldet werden, wenn der Anwendungsprozessor aktiv ist. Diese Verzögerung schließt keine Filterverzögerungen ein.
- [C-1-3] Die erste Sensorstichprobe MUSS innerhalb von 400 Millisekunden + 2 * „sample_time“ nach der Aktivierung des Sensors gemeldet werden. Für dieses Beispiel ist eine Genauigkeit von 0 zulässig.
-
[SR] Die Ereigniszeit sollte in Nanosekunden angegeben werden, wie in der Android SDK-Dokumentation definiert. Sie entspricht dem Zeitpunkt, zu dem das Ereignis stattgefunden hat, und ist mit der SystemClock.elapsedRealtimeNano()-Uhr synchronisiert. Für bestehende und neue Android-Geräte wird DRINGEND empfohlen, diese Anforderungen zu erfüllen, damit sie auf die zukünftigen Plattformversionen umgestellt werden können, bei denen diese Funktion möglicherweise zur ERFORDERLICHEN Komponente wird. Der Synchronisierungsfehler sollte unter 100 Millisekunden liegen.
-
[C-1-4] Für jede API, die in der Android SDK-Dokumentation als kontinuierlicher Sensor angegeben ist, MÜSSEN Geräteimplementierungen kontinuierliche Datenproben bereitstellen, deren Jitter UNTER 3 % liegen SOLLTE. Jitter wird als Standardabweichung der Differenz der gemeldeten Zeitstempelwerte zwischen aufeinanderfolgenden Ereignissen definiert.
-
[C-1-5] Der Sensorereignisstream darf die CPU des Geräts nicht daran hindern, in den Ruhemodus zu wechseln oder aus dem Ruhemodus aufzuwachen.
- Wenn mehrere Sensoren aktiviert sind, darf der Energieverbrauch NICHT die Summe des gemeldeten Energieverbrauchs der einzelnen Sensoren überschreiten.
Die Liste oben ist nicht vollständig. Als verbindlich gilt das dokumentierte Verhalten des Android SDK und die Android Open Source-Dokumentation zu Sensoren.
Einige Sensortypen sind zusammengesetzt, d. h., sie können aus Daten abgeleitet werden, die von einem oder mehreren anderen Sensoren bereitgestellt werden. Beispiele sind der Orientierungssensor und der lineare Beschleunigungssensor.
Geräteimplementierungen:
- MÜSSEN diese Sensortypen implementiert werden, wenn sie die erforderlichen physischen Sensoren enthalten, wie unter Sensortypen beschrieben.
Wenn Geräteimplementierungen einen zusammengesetzten Sensor enthalten, gilt Folgendes:
- [C-2-1] Der Sensor muss wie in der Android Open Source-Dokumentation zu Verbundsensoren beschrieben implementiert sein.
7.3.1. Beschleunigungsmesser
- Geräteimplementierungen SOLLTEN einen 3‑Achsen-Beschleunigungsmesser enthalten.
Wenn Geräteimplementierungen einen 3‑Achsen-Beschleunigungsmesser enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN Ereignisse mit einer Frequenz von mindestens 50 Hz melden können.
- [C-1-2] MÜSSEN den
TYPE_ACCELEROMETER
-Sensor implementieren und melden. - [C-1-3] MÜSSEN dem Android-Sensorkoordinatensystem entsprechen, wie in den Android APIs beschrieben.
- [C-1-4] MÜSSEN in der Lage sein, in jeder Achse von freiem Fall bis zu viermal die Erdbeschleunigung(4 g) oder mehr zu messen.
- [C-1-5] MUSS eine Auflösung von mindestens 12 Bit haben.
- [C-1-6] Die Standardabweichung darf maximal 0,05 m/s² betragen.Die Standardabweichung sollte pro Achse anhand von Stichproben berechnet werden, die über einen Zeitraum von mindestens 3 Sekunden mit der höchsten Abtastrate erfasst wurden.
- [SR] Es wird DRINGEND EMPFOHLEN, den
TYPE_SIGNIFICANT_MOTION
-Verbundsensor zu implementieren. - [SR] Es wird DRINGEND EMPFOHLEN, den
TYPE_ACCELEROMETER_UNCALIBRATED
-Sensor zu implementieren, wenn eine Online-Beschleunigungsmesserkalibrierung verfügbar ist. - MÜSSEN die Kompositsensoren
TYPE_SIGNIFICANT_MOTION
,TYPE_TILT_DETECTOR
,TYPE_STEP_DETECTOR
undTYPE_STEP_COUNTER
gemäß der Beschreibung im Android SDK-Dokument implementieren. - MÜSSEN Ereignisse mit mindestens 200 Hz erfassen.
- SOLLTE eine Auflösung von mindestens 16 Bit haben.
- MÜSSEN während der Nutzung kalibriert werden, wenn sich die Eigenschaften im Laufe des Lebenszyklus ändern und kompensiert werden, und die Kompensationsparameter zwischen den Neustarts des Geräts beibehalten.
- MÜSSEN temperaturkompensiert sein.
- SOLLTEN auch den
TYPE_ACCELEROMETER_UNCALIBRATED
-Sensor implementieren.
Wenn die Geräteimplementierungen einen 3‑Achsen-Beschleunigungsmesser und einen der zusammengesetzten Sensoren TYPE_SIGNIFICANT_MOTION
, TYPE_TILT_DETECTOR
, TYPE_STEP_DETECTOR
oder TYPE_STEP_COUNTER
enthalten:
- [C-2-1] Die Summe ihres Energieverbrauchs DARF immer unter 4 mW liegen.
- SOLLTE jeweils unter 2 mW und 0,5 mW liegen, wenn sich das Gerät in einem dynamischen oder statischen Zustand befindet.
Wenn Geräteimplementierungen einen 3‑Achsen-Beschleunigungsmesser und einen Gyroskopsensor enthalten, gilt Folgendes:
- [C-3-1] MÜSSEN die Verbundsensoren
TYPE_GRAVITY
undTYPE_LINEAR_ACCELERATION
implementieren. - SOLLTEN den
TYPE_GAME_ROTATION_VECTOR
-Verbundsensor implementieren. - [SR] Für bestehende und neue Android-Geräte wird DRINGEND empfohlen, den
TYPE_GAME_ROTATION_VECTOR
-Sensor zu implementieren.
Wenn Geräteimplementierungen einen 3‑Achsen-Beschleunigungsmesser, einen Gyroskopsensor und einen Magnetometersensor enthalten, gilt Folgendes:
- [C-4-1] MÜSSEN einen
TYPE_ROTATION_VECTOR
-Verbundsensor implementieren.
7.3.2. Magnetometer
- Geräteimplementierungen SOLLTEN ein 3‑Achsen-Magnetometer (Kompass) enthalten.
Wenn Geräteimplementierungen einen 3‑Achsen-Magnetometer enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN den
TYPE_MAGNETIC_FIELD
-Sensor implementieren. - [C-1-2] MUSS Ereignisse mit einer Häufigkeit von mindestens 10 Hz erfassen und SOLLTE Ereignisse mit einer Häufigkeit von mindestens 50 Hz erfassen.
- [C-1-3] MÜSSEN dem Android-Sensorkoordinatensystem entsprechen, wie in den Android APIs beschrieben.
- [C-1-4] MUSS in der Lage sein, zwischen -900 µT und +900 µT auf jeder Achse zu messen, bevor es zu einer Sättigung kommt.
- [C-1-5] Der Wert für den harten Eisenabstand MUSS unter 700 µT liegen und SOLLTE unter 200 µT liegen, wenn der Magnetometer weit von dynamischen (strominduzierten) und statischen (magnetinduzierten) Magnetfeldern entfernt platziert wird.
- [C-1-6] Die Auflösung MUSS mindestens 0,6 µT betragen.
- [C-1-7] MUSS die Onlinekalibrierung und ‑kompensation der Magnetfeldabweichung unterstützen und die Kompensationsparameter zwischen den Geräteneustarts beibehalten.
- [C-1-8] Die Weicheisenkompensation MUSS angewendet werden. Die Kalibrierung kann entweder während der Verwendung oder während der Herstellung des Geräts erfolgen.
- [C-1-9] Die Standardabweichung, die auf der Grundlage von Stichproben berechnet wird, die über einen Zeitraum von mindestens 3 Sekunden mit der höchsten Abtastfrequenz erfasst wurden, darf pro Achse maximal 1,5 µT betragen. Die Standardabweichung sollte maximal 0,5 µT betragen.
- SOLLTEN den
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 Geräteimplementierungen ein 3‑Achsen-Magnetometer, einen Beschleunigungsmesser und ein Gyroskop enthalten, müssen sie:
- [C-2-1] MÜSSEN einen
TYPE_ROTATION_VECTOR
-Verbundsensor implementieren.
Wenn Geräteimplementierungen ein 3‑Achsen-Magnetometer und einen Beschleunigungsmesser enthalten, gilt Folgendes:
- KÖNNEN den
TYPE_GEOMAGNETIC_ROTATION_VECTOR
-Sensor implementieren.
Wenn Geräteimplementierungen einen 3‑Achsen-Magnetometer, einen Beschleunigungsmesser und einen TYPE_GEOMAGNETIC_ROTATION_VECTOR
-Sensor enthalten, müssen sie:
- [C-3-1] Der Energieverbrauch DARF nicht über 10 mW liegen.
- Der Energieverbrauch sollte unter 3 mW liegen, wenn der Sensor für den Batchmodus bei 10 Hz registriert ist.
7.3.3. GPS
Geräteimplementierungen:
- SOLLTEN einen GPS-/GNSS-Empfänger enthalten.
Wenn Geräteimplementierungen einen GPS-/GNSS-Empfänger enthalten und die Funktion über das Funktions-Flag android.hardware.location.gps
an Anwendungen melden, gilt Folgendes:
- [C-1-1] MÜSSEN Standortausgaben mit einer Rate von mindestens 1 Hz unterstützen, wenn sie über
LocationManager#requestLocationUpdate
angefordert werden. - [C-1-2] Die HU MUSS unter störungsfreien Bedingungen (starke Signale, vernachlässigbarer Mehrwegeeffekt, HDOP < 2) innerhalb von 10 Sekunden (schnelle Zeit bis zur ersten Standortbestimmung) den Standort bestimmen können, wenn eine Internetverbindung mit einer Datenübertragungsgeschwindigkeit von mindestens 0,5 Mbit/s besteht. Diese Anforderung wird in der Regel durch die Verwendung einer Form von Assisted oder Predicted GPS/GNSS-Technologie erfüllt, um die GPS/GNSS-Verbindungszeit zu minimieren. Zu den Hilfsdaten gehören Referenzzeit, Referenzstandort und Satellitenephemeriden/-uhr.
- [C-1-6] Nach einer solchen Standortberechnung müssen Geräteimplementierungen ihren Standort unter störungsfreien Bedingungen innerhalb von 5 Sekunden bestimmen, wenn Standortanfragen neu gestartet werden, und zwar bis zu einer Stunde nach der ersten Standortberechnung, auch wenn die nachfolgende Anfrage ohne Datenverbindung und/oder nach einem Neustart erfolgt.
-
Unter störungsfreien Bedingungen nach der Standortbestimmung, wenn das Gerät steht oder sich mit einer Beschleunigung von weniger als 1 Meter pro Sekunde zum Quadrat bewegt:
- [C-1-3] Die HU MUSS in mindestens 95% der Fälle den Standort in einem Radius von 20 Metern und die Geschwindigkeit mit einer Genauigkeit von 0,5 Metern pro Sekunde bestimmen können.
- [C-1-4] Die HU MUSS mindestens 8 Satelliten aus einer Konstellation gleichzeitig über
GnssStatus.Callback
verfolgen und melden. - Die HU SOLLTE mindestens 24 Satelliten aus mehreren Konstellationen gleichzeitig verfolgen können (z.B. GPS und mindestens eine von Glonass, Beidou oder Galileo).
- [C-1-5] MÜSSEN die GNSS-Technologiegeneration über die Test-API „getGnssYearOfHardware“ melden.
- [SR] Während eines Notrufs weiterhin normale GPS-/GNSS-Standortausgaben liefern.
- [SR] GNSS-Messungen von allen verfolgten Konstellationen (wie in GnssStatus-Nachrichten angegeben) mit Ausnahme von SBAS melden
- [SR] AGC und GNSS-Messfrequenz melden
- [SR] Alle Genauigkeitsschätzungen (einschließlich Richtung, Geschwindigkeit und Höhe) müssen als Teil jeder GPS-/GNSS-Positionsangabe gemeldet werden.
- [SR] Es wird DRINGEND EMPFOHLEN, so viele wie möglich der zusätzlichen obligatorischen Anforderungen für Geräte zu erfüllen, die das Jahr „2016“ oder „2017“ über die Test API
LocationManager.getGnssYearOfHardware()
melden.
Wenn Geräteimplementierungen einen GPS-/GNSS-Empfänger enthalten und die Funktion über das Funktions-Flag android.hardware.location.gps
an Anwendungen melden und die LocationManager.getGnssYearOfHardware()
-Test-API das Jahr „2016“ oder höher meldet, gilt Folgendes:
- [C-2-1] MÜSSEN GNSS-Messungen melden, sobald sie gefunden wurden, auch wenn noch kein aus dem GPS/GNSS berechneter Standort gemeldet wurde.
- [C-2-2] MÜSSEN GNSS-Pseudostrecken und Pseudostreckenraten melden, die unter störungsfreien Bedingungen nach der Standortbestimmung, bei Stillstand oder bei einer Beschleunigung von weniger als 0, 2 Metern pro Sekunde zum Quadrat, in mindestens 95% der Fälle ausreichen, um die Position innerhalb von 20 Metern und die Geschwindigkeit innerhalb von 0, 2 Metern pro Sekunde zu berechnen.
Wenn Geräteimplementierungen einen GPS-/GNSS-Empfänger enthalten und die Funktion über das Funktions-Flag android.hardware.location.gps
an Anwendungen melden und die LocationManager.getGnssYearOfHardware()
-Test-API das Jahr „2017“ oder höher meldet, gilt Folgendes:
- [C-3-1] MÜSSEN während eines Notanrufs weiterhin normale GPS-/GNSS-Standortausgaben liefern.
- [C-3-2] MÜSSEN GNSS-Messungen von allen verfolgten Konstellationen (wie in GnssStatus-Nachrichten angegeben) mit Ausnahme von SBAS melden.
- [C-3-3] MÜSSEN AGC und die Frequenz der GNSS-Messung melden.
- [C-3-4] MÜSSEN alle Genauigkeitsschätzungen (einschließlich Richtung, Geschwindigkeit und Höhe) als Teil jeder GPS-/GNSS-Positionsangabe melden.
Wenn Geräteimplementierungen einen GPS-/GNSS-Empfänger enthalten und die Funktion über das android.hardware.location.gps
-Funktions-Flag an Apps melden und die LocationManager.getGnssYearOfHardware()
-Test API das Jahr „2018“ oder höher meldet, gilt Folgendes:
- [C-4-1] MÜSSEN während eines von einer mobilen Station (MS-basiert) initiierten Notanrufs normale GPS-/GNSS-Ausgaben an Anwendungen weitergeben.
- [C-4-2] MÜSSEN Positionen und Messungen an die APIs des GNSS-Standortanbieters melden.
7.3.4. Gyroskop
Geräteimplementierungen:
- SOLLTEN ein Gyroskop (Winkeländerungssensor) enthalten.
- DÜRFEN KEIN Gyroskop enthalten, es sei denn, es ist auch ein 3‑Achsen-Beschleunigungsmesser vorhanden.
Wenn Geräteimplementierungen ein Gyroskop enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN Ereignisse mit einer Frequenz von mindestens 50 Hz melden können.
- [C-1-2] MÜSSEN den
TYPE_GYROSCOPE
-Sensor implementieren und SOLLTEN auch denTYPE_GYROSCOPE_UNCALIBRATED
-Sensor implementieren. - [C-1-3] MUSS in der Lage sein,Ausrichtungsänderungen von bis zu 1.000 Grad pro Sekunde zu messen.
- [C-1-4] Die Auflösung MUSS mindestens 12 Bit betragen und SOLLTE mindestens 16 Bit betragen.
- [C-1-5] MUSS temperaturkompensiert sein.
- [C-1-6] MÜSSEN während der Verwendung kalibriert und kompensiert werden und die Kompensationsparameter zwischen den Neustarts des Geräts beibehalten.
- [C-1-7] Die Abweichung darf maximal 1 × 10−7 rad² / s² pro Hz betragen (Abweichung pro Hz oder rad² / s). Die Abweichung darf mit der Abtastrate variieren, muss aber auf diesen Wert beschränkt sein. Mit anderen Worten: Wenn Sie die Abweichung des Gyroskops bei einer Abtastrate von 1 Hz messen, sollte sie nicht größer als 1 E-7 rad²/s² sein.
- [SR] Für bestehende und neue Android-Geräte wird DRINGEND empfohlen, den
SENSOR_TYPE_GYROSCOPE_UNCALIBRATED
-Sensor zu implementieren. - [SR] Der Kalibrierungsfehler sollte bei einem ruhenden Gerät bei Raumtemperatur DRINGEND unter 0,01 rad/s liegen.
- MÜSSEN Ereignisse mit mindestens 200 Hz erfassen.
Wenn Geräteimplementierungen ein Gyroskop, einen Beschleunigungsmesser und einen Magnetometer enthalten, gilt Folgendes:
- [C-2-1] MÜSSEN einen
TYPE_ROTATION_VECTOR
-Verbundsensor implementieren.
Wenn Geräteimplementierungen ein Gyroskop und einen Beschleunigungsmesser enthalten, gilt Folgendes:
- [C-3-1] MÜSSEN die Verbundsensoren
TYPE_GRAVITY
undTYPE_LINEAR_ACCELERATION
implementieren. - [SR] Für bestehende und neue Android-Geräte wird DRINGEND empfohlen, den
TYPE_GAME_ROTATION_VECTOR
-Sensor zu implementieren. - SOLLTEN den
TYPE_GAME_ROTATION_VECTOR
-Verbundsensor implementieren.
7.3.5. Barometer
- Geräteimplementierungen MÜSSEN ein Barometer (Umgebungsluftdrucksensor) enthalten.
Wenn Geräteimplementierungen ein Barometer enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN den
TYPE_PRESSURE
-Sensor implementieren und melden. - [C-1-2] MÜSSEN Ereignisse mit mindestens 5 Hz senden können.
- [C-1-3] MUSS temperaturkompensiert sein.
- [SR] Es wird DRINGEND EMPFOHLEN, Druckmessungen im Bereich von 300 hPa bis 1.100 hPa erfassen zu können.
- MÜSSEN eine absolute Genauigkeit von 1 hPa haben.
- SOLLTE eine relative Genauigkeit von 0,12 hPa über einen Bereich von 20 hPa haben (entspricht einer Genauigkeit von etwa 1 m bei einer Änderung von etwa 200 m über dem Meeresspiegel).
7.3.6. Thermometer
Geräteimplementierungen: * KANN ein Umgebungsthermometer (Temperatursensor) enthalten. * KANN, aber sollte keinen CPU-Temperatursensor enthalten.
Wenn Geräteimplementierungen ein Umgebungsthermometer (Temperatursensor) enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN als
SENSOR_TYPE_AMBIENT_TEMPERATURE
definiert sein und MÜSSEN die Umgebungstemperatur (Raum-/Fahrzeuginnenraumtemperatur) an dem Ort messen, an dem der Nutzer mit dem Gerät interagiert, in Grad Celsius. - [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] Es darf KEINE andere Temperatur gemessen werden.
Der Sensortyp SENSOR_TYPE_TEMPERATURE
wurde in Android 4.0 eingestellt.
7.3.7. Fotometer
- Geräteimplementierungen KÖNNEN einen Photometer (Umgebungslicht-Sensor) enthalten.
7.3.8. Näherungssensor
- Geräteimplementierungen KÖNNEN einen Näherungssensor enthalten.
Geräteimplementierungen mit Näherungssensor:
- [C-1-1] Die Nähe eines Objekts MUSS in derselben Richtung wie das Display gemessen werden. Der Näherungssensor MUSS so ausgerichtet sein, dass er Objekte in der Nähe des Displays erkennt, da dieser Sensortyp in erster Linie dazu dient, ein vom Nutzer verwendetes Smartphone zu erkennen. Wenn Geräteimplementierungen einen Näherungssensor mit einer anderen Ausrichtung enthalten, darf dieser NICHT über diese API zugänglich sein.
- [C-1-2] MÜSSEN eine Genauigkeit von mindestens 1 Bit haben.
7.3.9. Hochpräzise Sensoren
Wenn Geräteimplementierungen eine Reihe von Sensoren mit höherer Qualität wie in diesem Abschnitt definiert enthalten und diese für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- [C-1-1] MÜSSEN die Funktion über das Funktions-Flag
android.hardware.sensor.hifi_sensors
angeben.
Wenn Geräteimplementierungen android.hardware.sensor.hifi_sensors
angeben, gilt Folgendes:
-
[C-2-1] MÜSSEN einen
TYPE_ACCELEROMETER
-Sensor haben, der:- Der Messbereich MUSS mindestens -8 g bis +8 g betragen, SOLLTE mindestens -16 g bis +16 g betragen.
- MUSS eine Messauflösung von mindestens 2.048 LSB/g haben.
- Die Mindestmessungsfrequenz muss 12,5 Hz oder weniger betragen.
- MUSS eine maximale Messfrequenz von mindestens 400 Hz haben; SOLLTE den SensorDirectChannel
RATE_VERY_FAST
unterstützen. - Der Messrauschen darf maximal 400 µg/√Hz betragen.
- Es MUSS eine Variante dieses Sensors ohne Weckfunktion mit einer Pufferkapazität von mindestens 3.000 Sensorereignissen implementiert werden.
- Der Batch-Stromverbrauch darf maximal 3 mW betragen.
- [C-SR] Es wird DRINGEND EMPFOHLEN, eine 3-dB-Messbandbreite von mindestens 80% der Nyquist-Frequenz und ein Weißrauschenspektrum innerhalb dieser Bandbreite zu verwenden.
- MÜSSEN einen Zufallspfad der Beschleunigung von weniger als 30 μg √Hz bei Raumtemperatur haben.
- SOLLTE eine Bias-Änderung in Abhängigkeit von der Temperatur von ≤ ± 1 mg/°C haben.
- Die Nichtlinearität der Bestfit-Linie sollte ≤ 0,5 % und die Empfindlichkeitsänderung bei Temperaturschwankungen ≤ 0,03%/C° betragen.
- MÜSSEN eine Querachsenempfindlichkeit von weniger als 2,5 % und eine Abweichung der Querachsenempfindlichkeit von weniger als 0,2% im Betriebstemperaturbereich des Geräts haben.
-
[C-2-2]
TYPE_ACCELEROMETER_UNCALIBRATED
MUSS dieselben Qualitätsanforderungen wieTYPE_ACCELEROMETER
erfüllen. -
[C-2-3] MÜSSEN einen
TYPE_GYROSCOPE
-Sensor haben, der:- Der Messbereich muss mindestens -1.000 und +1.000 dps betragen.
- MÜSSEN eine Messauflösung von mindestens 16 LSB/dps haben.
- Die Mindestmessungsfrequenz muss 12,5 Hz oder weniger betragen.
- MUSS eine maximale Messfrequenz von mindestens 400 Hz haben; SOLLTE den SensorDirectChannel
RATE_VERY_FAST
unterstützen. - Der Messrauschen darf maximal 0,014 °/s/√Hz betragen.
- [C-SR] Es wird DRINGEND EMPFOHLEN, eine 3-dB-Messbandbreite von mindestens 80% der Nyquist-Frequenz und ein Weißrauschenspektrum innerhalb dieser Bandbreite zu verwenden.
- SOLLTE bei Raumtemperatur einen Raten-Zufallsgang von weniger als 0,001 °/s √Hz haben.
- Die Vorabweichung sollte bei Temperaturänderungen ≤ ± 0,05 °/ s / °C betragen.
- Die Empfindlichkeit sollte sich bei Temperaturänderungen um maximal 0,02 % pro °C ändern.
- Die Nichtlinearität der Ausgleichsgerade SOLLTE ≤ 0,2 % betragen.
- SOLLTE eine Rauschdichte von ≤ 0,007 °/s/√Hz haben.
- Der Kalibrierungsfehler sollte bei einer Temperatur von 10 bis 40 °C unter 0,002 rad/s liegen, wenn sich das Gerät nicht bewegt.
- SOLLTE eine G-Empfindlichkeit von weniger als 0,1 °/s/g haben.
- MÜSSEN eine Achsenkreuzempfindlichkeit von weniger als 4,0 % und eine Achsenkreuzempfindlichkeitsabweichung von weniger als 0,3% im Betriebstemperaturbereich des Geräts haben.
-
[C-2-4]
TYPE_GYROSCOPE_UNCALIBRATED
MUSS dieselben Qualitätsanforderungen wieTYPE_GYROSCOPE
erfüllen. -
[C-2-5] MÜSSEN einen
TYPE_GEOMAGNETIC_FIELD
-Sensor haben, der:- MÜSSEN einen Messbereich von mindestens -900 bis +900 μT haben.
- Die Messauflösung muss mindestens 5 LSB/uT betragen.
- Die Mindestmessungsfrequenz muss 5 Hz oder weniger betragen.
- Die maximale Messfrequenz muss mindestens 50 Hz betragen.
- Der Messrauschen darf maximal 0,5 µT betragen.
-
[C-2-6] Es MUSS eine
TYPE_MAGNETIC_FIELD_UNCALIBRATED
mit denselben Qualitätsanforderungen wieTYPE_GEOMAGNETIC_FIELD
geben. Außerdem gilt Folgendes:- MÜSSEN eine Variante dieses Sensors ohne Weckfunktion mit einer Pufferkapazität von mindestens 600 Sensorereignissen implementieren.
- [C-SR] Es wird DRINGEND EMPFOHLEN, ein Weißrauschenspektrum von 1 Hz bis mindestens 10 Hz zu verwenden, wenn die Berichtsrate 50 Hz oder höher ist.
-
[C-2-7] MÜSSEN einen
TYPE_PRESSURE
-Sensor haben, der:- MÜSSEN einen Messbereich von mindestens 300 bis 1.100 hPa haben.
- Die Messauflösung muss mindestens 80 LSB/hPa betragen.
- Die Mindestmessungsfrequenz muss 1 Hz oder weniger betragen.
- Die maximale Messfrequenz muss mindestens 10 Hz betragen.
- Der Messrauschen darf maximal 2 Pa/√Hz betragen.
- Es MUSS eine Variante dieses Sensors ohne Weckfunktion mit einer Pufferkapazität von mindestens 300 Sensorereignissen implementiert werden.
- Der Batch-Stromverbrauch darf maximal 2 mW betragen.
- [C-2-8] MÜSSEN einen
TYPE_GAME_ROTATION_VECTOR
-Sensor haben, der:- Es MUSS eine Variante dieses Sensors ohne Weckfunktion mit einer Pufferkapazität von mindestens 300 Sensorereignissen implementiert werden.
- Der Batch-Stromverbrauch darf maximal 4 mW betragen.
- [C-2-9] MÜSSEN einen
TYPE_SIGNIFICANT_MOTION
-Sensor haben, der:- Der Stromverbrauch darf bei inaktivem Gerät nicht über 0,5 mW und bei in Bewegung befindlichem Gerät nicht über 1,5 mW liegen.
- [C-2-10] MÜSSEN einen
TYPE_STEP_DETECTOR
-Sensor haben, der:- Es MUSS eine Variante dieses Sensors ohne Weckfunktion mit einer Pufferkapazität von mindestens 100 Sensorereignissen implementiert werden.
- Der Stromverbrauch darf bei inaktivem Gerät nicht über 0,5 mW und bei in Bewegung befindlichem Gerät nicht über 1,5 mW liegen.
- Der Batch-Stromverbrauch darf maximal 4 mW betragen.
- [C-2-11] MÜSSEN einen
TYPE_STEP_COUNTER
-Sensor haben, der:- Der Stromverbrauch darf bei inaktivem Gerät nicht über 0,5 mW und bei in Bewegung befindlichem Gerät nicht über 1,5 mW liegen.
- [C-2-12] MÜSSEN einen
TILT_DETECTOR
-Sensor haben, der:- Der Stromverbrauch darf bei inaktivem Gerät nicht über 0,5 mW und bei in Bewegung befindlichem Gerät nicht über 1,5 mW liegen.
- [C-2-13] Der Zeitstempel desselben physischen Ereignisses, der vom Beschleunigungsmesser, Gyroskop und Magnetometer erfasst wird, DARF maximal 2,5 Millisekunden voneinander abweichen. Der Zeitstempel des Ereignisses für dasselbe physische Ereignis, das vom Beschleunigungsmesser und Gyroskop erfasst wird, sollte innerhalb von 0,25 Millisekunden voneinander abweichen.
- [C-2-14] Die Zeitstempel der Gyroskopsensore MÜSSEN auf derselben Zeitbasis wie das Kamera-Subsystem liegen und eine Abweichung von maximal 1 Millisekunde haben.
- [C-2-15] Die Samples MÜSSEN innerhalb von 5 Millisekunden an die Anwendungen gesendet werden, nachdem die Daten auf einem der oben genannten physischen Sensoren für die Anwendung verfügbar sind.
- [C-2-16] Die Leistungsaufnahme darf bei inaktivem Gerät nicht mehr als 0,5 mW und bei in Bewegung befindlichem Gerät nicht mehr als 2,0 mW betragen, wenn eine beliebige Kombination der folgenden Sensoren aktiviert ist:
-
SENSOR_TYPE_SIGNIFICANT_MOTION
-
SENSOR_TYPE_STEP_DETECTOR
-
SENSOR_TYPE_STEP_COUNTER
-
SENSOR_TILT_DETECTORS
-
- [C-2-17] KANN einen
TYPE_PROXIMITY
-Sensor haben, muss aber einen Mindestpuffer von 100 Sensorereignissen haben.
Hinweis: Alle in diesem Abschnitt aufgeführten Anforderungen an den Stromverbrauch umfassen nicht den Stromverbrauch des Anwendungsprozessors. Sie umfasst den Stromverbrauch der gesamten Sensorkette – des Sensors, aller unterstützenden Schaltkreise und aller speziellen Sensorverarbeitungssysteme usw.
Wenn Geräteimplementierungen die direkte Sensorunterstützung umfassen, gilt Folgendes:
- [C-3-1] Die Unterstützung von direkten Kanaltypen und Berichtsraten für direkte Zugriffe muss über die
isDirectChannelTypeSupported
- undgetHighestDirectReportRateLevel
-API korrekt deklariert werden. - [C-3-2] MÜSSEN mindestens einen der beiden Sensor-Direktkanaltypen für alle Sensoren unterstützen, die die Unterstützung für Sensor-Direktkanäle angeben.
- MÜSSEN Ereignisberichte über den direkten Sensorkanal für den primären Sensor (Variante ohne Weckfunktion) der folgenden Typen unterstützen:
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-
7.3.10. Biometrische Sensoren
7.3.10.1. Fingerabdrucksensoren
Wenn Geräteimplementierungen einen sicheren Sperrbildschirm enthalten, gilt Folgendes:
- SOLLTEN einen Fingerabdrucksensor enthalten.
Wenn Geräteimplementierungen einen Fingerabdrucksensor enthalten und den Sensor für Drittanbieter-Apps verfügbar machen, gelten folgende Anforderungen:
- [C-1-1] MÜSSEN die Unterstützung für die
android.hardware.fingerprint
-Funktion deklarieren. - [C-1-2] Die entsprechende API muss vollständig gemäß der Android SDK-Dokumentation implementiert sein.
- [C-1-3] Die Falsch-Akzeptanzrate darf maximal 0,002 % betragen.
- [SR] Es wird DRINGEND EMPFOHLEN, dass die Akzeptanzrate für Spoofing und Identitätsdiebstahl nicht höher als 7 % ist.
- [C-1-4] Es MUSS offengelegt werden, dass dieser Modus möglicherweise weniger sicher ist als eine starke PIN, ein starkes Muster oder ein starkes Passwort. Außerdem müssen die Risiken der Aktivierung klar aufgelistet werden, wenn die Akzeptanzraten für Spoofing und Identitätsdiebstahl über 7 % liegen.
- [C-1-5] Nach fünf fehlgeschlagenen Versuchen bei der Fingerabdruckbestätigung muss die Rate der Versuche für mindestens 30 Sekunden begrenzt werden.
- [C-1-6] Es MUSS eine hardwaregestützte Schlüsselspeicherimplementierung haben und den Fingerabdruckabgleich in einer vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE) oder auf einem Chip mit einem sicheren Kanal zur TEE ausführen.
- [C-1-7] Alle identifizierbaren Fingerabdruckdaten MÜSSEN verschlüsselt und kryptografisch authentifiziert sein, damit sie nicht außerhalb des TEE abgerufen, gelesen oder verändert werden können. Alternativ ist ein Chip mit einem sicheren Kanal zum TEE erforderlich, wie in den Implementierungsrichtlinien auf der Website des Android Open Source Project beschrieben.
- [C-1-8] Es MUSS verhindert werden, dass ein Fingerabdruck hinzugefügt wird, ohne zuerst eine Vertrauenskette zu erstellen. Dazu muss der Nutzer vorhandene Anmeldedaten bestätigen oder neue Geräteanmeldedaten (PIN/Muster/Passwort) hinzufügen, die durch TEE geschützt sind. Die Implementierung des Android Open Source Project bietet dafür den Mechanismus im Framework.
- [C-1-9] DARF NICHT Drittanbieter-Apps ermöglichen, zwischen einzelnen Fingerabdrücken zu unterscheiden.
- [C-1-10] MUSS das Flag „DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT“ berücksichtigen.
- [C-1-11] Bei einem Upgrade von einer Version vor Android 6.0 MÜSSEN die Fingerabdruckdaten sicher migriert werden, um die oben genannten Anforderungen zu erfüllen, oder entfernt werden.
- [C-1-12] Alle identifizierbaren Fingerabdruckdaten eines Nutzers MÜSSEN vollständig entfernt werden, wenn das Konto des Nutzers entfernt wird (auch durch Zurücksetzen auf die Werkseinstellungen).
- [C-1-13] Der Anwendungs-Prozessor darf keinen unverschlüsselten Zugriff auf personenidentifizierbare Fingerabdruckdaten oder abgeleitete Daten (z. B. Einbettungen) haben.
- [SR] Es wird DRINGEND EMPFOHLEN, dass die Falsch-Ablehnungsrate auf dem Gerät unter 10 % liegt.
- [SR] Es wird EMPFOHLEN, dass die Latenz für einen registrierten Finger unter 1 Sekunde liegt, gemessen vom Zeitpunkt, an dem der Fingerabdrucksensor berührt wird, bis das Display entsperrt wird.
- MÜSSEN das Android-Fingerabdrucksymbol verwenden, das im Android Open Source Project enthalten ist.
7.3.10.2. Sonstige biometrische Sensoren
Wenn Geräteimplementierungen einen oder mehrere nicht fingerabdruckbasierte biometrische Sensoren enthalten und diese für Drittanbieter-Apps verfügbar machen, gelten folgende Anforderungen:
- [C-1-1] Die Falsch-Akzeptanzrate darf maximal 0,002 % betragen.
- [C-SR] Es wird DRINGEND EMPFOHLEN, dass die Akzeptanzrate für Spoofing und Identitätsdiebstahl nicht höher als 7 % ist.
- [C-1-2] Es MUSS darauf hingewiesen werden, dass dieser Modus möglicherweise weniger sicher ist als eine starke PIN, ein starkes Muster oder ein starkes Passwort. Außerdem müssen die Risiken der Aktivierung klar aufgeführt werden, wenn die Akzeptanzraten für Spoofing und Identitätsdiebstahl über 7 % liegen.
- [C-1-3] Nach fünf fehlgeschlagenen Versuchen bei der biometrischen Bestätigung MUSS die Rate der Versuche für mindestens 30 Sekunden begrenzt werden. Ein fehlgeschlagener Versuch ist ein Versuch mit einer ausreichenden Erfassungsqualität (ACQUIRED_GOOD), der nicht mit einem registrierten biometrischen Merkmal übereinstimmt.
- [C-1-4] Es MUSS eine hardwaregestützte Schlüsselspeicherimplementierung geben und die biometrische Übereinstimmung muss in einer TEE oder auf einem Chip mit einem sicheren Kanal zur TEE erfolgen.
- [C-1-5] Alle identifizierbaren Daten MÜSSEN verschlüsselt und kryptografisch authentifiziert sein, damit sie nicht außerhalb des TEE abgerufen, gelesen oder geändert werden können. Alternativ ist ein Chip mit einem sicheren Kanal zum TEE erforderlich, wie in den Implementierungsrichtlinien auf der Website des Android Open Source Project beschrieben.
- [C-1-6] Es MUSS verhindert werden, dass neue biometrische Daten hinzugefügt werden, ohne zuerst eine Vertrauenskette zu erstellen. Dazu muss der Nutzer vorhandene Anmeldedaten (PIN/Muster/Passwort) bestätigen oder neue Anmeldedaten hinzufügen, die durch die TEE gesichert sind. Die Implementierung des Android Open Source Project bietet dafür den Mechanismus im Framework.
- [C-1-7] Drittanbieter-Apps DÜRFEN NICHT zwischen biometrischen Registrierungen unterscheiden.
- [C-1-8] MÜSSEN das individuelle Flag für diese biometrische Daten (z. B.
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT
,DevicePolicymanager.KEYGUARD_DISABLE_FACE
oderDevicePolicymanager.KEYGUARD_DISABLE_IRIS
) berücksichtigen. - [C-1-9] Alle identifizierbaren biometrischen Daten eines Nutzers MÜSSEN vollständig entfernt werden, wenn das Konto des Nutzers entfernt wird (auch durch Zurücksetzen auf die Werkseinstellungen).
- [C-1-10] Der Anwendungsprozessor darf außerhalb des TEE keinen unverschlüsselten Zugriff auf identifizierbare biometrische Daten oder abgeleitete Daten (z. B. Einbettungen) haben.
- [C-SR] Es wird DRINGEND EMPFOHLEN, dass die Falschablehnungsrate auf dem Gerät unter 10 % liegt.
- [C-SR] Für jede registrierte biometrische Authentifizierung wird DRINGEND EMPFOHLEN, eine Latenz von weniger als einer Sekunde zu haben, gemessen vom Zeitpunkt der Erkennung des biometrischen Faktors bis zum Entsperren des Displays.
7.3.11. Nur für Android Automotive verfügbare Sensoren
Automobilspezifische Sensoren werden in der android.car.CarSensorManager API
definiert.
7.3.11.1. Aktuelles Übersetzungsverhältnis
Gerätespezifische Anforderungen finden Sie unter Abschnitt 2.5.1.
7.3.11.2. Tag-/Nachtmodus
Gerätespezifische Anforderungen finden Sie unter Abschnitt 2.5.1.
7.3.11.3. Fahrstatus
Diese Anforderung ist nicht mehr erforderlich.
7.3.11.4. Raddrehzahl
Gerätespezifische Anforderungen finden Sie unter Abschnitt 2.5.1.
7.3.11.5. Feststellbremse
Gerätespezifische Anforderungen finden Sie unter Abschnitt 2.5.1.
7.3.12. Positionssensor
Geräteimplementierungen:
- Es wird unter Umständen ein Positionssensor mit 6 Freiheitsgraden unterstützt.
Wenn Geräteimplementierungen einen 6-Achsen-Pose-Sensor unterstützen, gilt Folgendes:
- [C-1-1] MÜSSEN den
TYPE_POSE_6DOF
-Sensor implementieren und melden. - [C-1-2] MUSS genauer sein als der Drehvektor allein.
7.4. Datenverbindung
7.4.1. Telefonie
„Telefonie“ bezieht sich in den Android APIs und in diesem Dokument speziell auf Hardware, die für Sprachanrufe und das Senden von SMS über ein GSM- oder CDMA-Netzwerk verwendet wird. Diese Sprachanrufe können paketvermittelt sein oder nicht, werden aber für Android unabhängig von jeder Datenverbindung betrachtet, die über dasselbe Netzwerk implementiert werden kann. Mit anderen Worten: Die Android-Funktionen und APIs für die „Telefonie“ beziehen sich speziell auf Sprachanrufe und SMS. Geräteimplementierungen, mit denen keine Anrufe getätigt oder SMS gesendet und empfangen werden können, gelten beispielsweise nicht als Telefoniegeräte, unabhängig davon, ob sie ein Mobilfunknetz für die Datenverbindung verwenden.
- Android kann auf Geräten verwendet werden, die keine Telefoniehardware enthalten. Android ist also mit Geräten kompatibel, die keine Smartphones sind.
Wenn die Geräteimplementierungen GSM- oder CDMA-Telefonie umfassen, müssen sie:
- [C-1-1] MUSS das
android.hardware.telephony
-Funktions-Flag und andere untergeordnete Funktions-Flags gemäß der Technologie deklarieren. - [C-1-2] Es MUSS eine vollständige Unterstützung der API für diese Technologie implementiert werden.
Wenn Geräteimplementierungen keine Telefoniehardware enthalten, gelten folgende Anforderungen:
- [C-2-1] Die APIs MÜSSEN vollständig als No-Ops implementiert werden.
7.4.1.1. Kompatibilität mit der Nummernblockierung
Wenn Geräteimplementierungen die android.hardware.telephony feature
melden, gilt Folgendes:
- [C-1-1] MUSS die Blockierung von Nummern unterstützen
- [C-1-2]
BlockedNumberContract
und die entsprechende API MÜSSEN vollständig gemäß der SDK-Dokumentation implementiert werden. - [C-1-3] Alle Anrufe und Nachrichten von einer Telefonnummer in „BlockedNumberProvider“ MÜSSEN ohne Interaktion mit Apps blockiert werden. Die einzige Ausnahme ist, wenn die Blockierung von Nummern wie in der SDK-Dokumentation beschrieben vorübergehend aufgehoben wird.
- [C-1-4] Darf bei einem blockierten Anruf NICHT an den Anruflistenanbieter der Plattform schreiben.
- [C-1-5] Darf nicht an den Telefonieanbieter wegen einer blockierten Nachricht schreiben.
- [C-1-6] Es MUSS eine Benutzeroberfläche zum Verwalten blockierter Nummern implementiert werden, die mit dem Intent geöffnet wird, der von der Methode
TelecomManager.createManageBlockedNumbersIntent()
zurückgegeben wird. - [C-1-7] Sekundäre Nutzer dürfen die blockierten Nummern auf dem Gerät NICHT ansehen oder bearbeiten, da die Android-Plattform davon ausgeht, dass der Hauptnutzer die vollständige Kontrolle über die Telefondienste (eine einzelne Instanz) auf dem Gerät hat. Alle blockierungsbezogenen Benutzeroberflächen MÜSSEN für sekundäre Nutzer ausgeblendet sein und die Blockierungsliste MÜSSEN weiterhin berücksichtigt werden.
- Die blockierten Nummern MÜSSEN zum Anbieter migriert werden, wenn ein Gerät auf Android 7.0 aktualisiert wird.
7.4.1.2. Telecom API
Wenn für Geräteimplementierungen android.hardware.telephony
gemeldet wird, gilt Folgendes:
- [C-1-1] MÜSSEN die im SDK beschriebenen
ConnectionService
APIs unterstützen. - [C-1-2] Es MUSS ein neuer eingehender Anruf angezeigt werden und der Nutzer muss die Möglichkeit haben, den Anruf anzunehmen oder abzulehnen, wenn er sich in einem laufenden Anruf befindet, der über eine Drittanbieter-App gestartet wurde, die die über
CAPABILITY_SUPPORT_HOLD
angegebene Funktion „Anruf pausieren“ nicht unterstützt. -
[C-SR] Es wird EMPFOHLEN, den Nutzer darüber zu informieren, dass ein laufender Anruf beendet wird, wenn er einen eingehenden Anruf annimmt.
Die AOSP-Implementierung erfüllt diese Anforderungen durch eine Benachrichtigung, die den Nutzer darüber informiert, dass der andere Anruf beendet wird, wenn er einen eingehenden Anruf annimmt.
-
[C-SR] Es wird DRINGEND EMPFOHLEN, die Standard-Telefon-App vorab zu laden, die einen Anrufprotokolleintrag und den Namen einer Drittanbieter-App im Anrufprotokoll anzeigt, wenn die Drittanbieter-App den Extraschlüssel
EXTRA_LOG_SELF_MANAGED_CALLS
in ihrerPhoneAccount
auftrue
festlegt. - [C-SR] Es wird DRINGEND EMPFOHLEN, die
KEYCODE_MEDIA_PLAY_PAUSE
- undKEYCODE_HEADSETHOOK
-Ereignisse des Audio-Headsets für dieandroid.telecom
APIs wie unten beschrieben zu verarbeiten:- Ruft
Connection.onDisconnect()
auf, wenn während eines laufenden Anrufs eine kurze Betätigung des Schlüsselereignisses erkannt wird. - Ruft
Connection.onAnswer()
auf, wenn während eines eingehenden Anrufs eine kurze Betätigung des Schlüsselereignisses erkannt wird. - Ruft
Connection.onReject()
auf, wenn während eines eingehenden Anrufs das Schlüsselereignis lange gedrückt wird. - Aktivieren oder deaktivieren Sie die Stummschaltung der
CallAudioState
.
- Ruft
7.4.2. IEEE 802.11 (Wi‑Fi)
Geräteimplementierungen:
- MÜSSEN eine oder mehrere Formen von 802.11 unterstützen.
Wenn Geräteimplementierungen 802.11 unterstützen und die Funktion für eine Drittanbieteranwendung freigeben, gelten folgende Anforderungen:
- [C-1-1] MÜSSEN die entsprechende Android API implementieren.
- [C-1-2] MUSS das Hardware-Funktions-Flag
android.hardware.wifi
melden. - [C-1-3] Die Multicast API muss wie in der SDK-Dokumentation beschrieben implementiert sein.
- [C-1-4] MÜSSEN Multicast-DNS (mDNS) unterstützen und MÜSSEN mDNS-Pakete (224.0.0.251) zu keinem Zeitpunkt filtern, einschließlich:
- Auch wenn der Bildschirm nicht aktiv ist.
- Bei Android TV-Geräteimplementierungen, auch im Standby-Modus.
- [C-1-5] Der API-Methodenaufruf
WifiManager.enableNetwork()
darf NICHT als ausreichender Hinweis zum Wechseln des aktuell aktivenNetwork
behandelt werden, der standardmäßig für den Anwendungstraffic verwendet und vonConnectivityManager
-API-Methoden wiegetActiveNetwork
undregisterDefaultNetworkCallback
zurückgegeben wird. Mit anderen Worten: Sie KÖNNEN den Internetzugriff eines anderen Netzwerkanbieters (z.B. Mobilfunkdaten) nur dann deaktivieren, wenn sie bestätigt haben, dass das WLAN-Netzwerk Internetzugriff bietet. - [C-SR] Es wird DRINGEND EMPFOHLEN, bei Aufruf der
ConnectivityManager.reportNetworkConnectivity()
API-Methode den Internetzugriff auf demNetwork
noch einmal zu prüfen und, sobald die Prüfung ergibt, dass der aktuelleNetwork
keinen Internetzugriff mehr bietet, zu einem anderen verfügbaren Netzwerk (z.B. Mobilfunkdaten) zu wechseln, das Internetzugriff bietet. - [C-SR] Es wird DRINGEND empfohlen, die MAC‑Quelladresse und die Sequenznummer von Frames zur Prüfungsanfrage einmal zu Beginn jedes Scans zu randomisieren, während die STA getrennt ist.
- Jede Gruppe mit Frames zur Prüfungsanfrage mit einen Scan sollte eine gleichbleibende MAC‑Adresse verwenden (MAC‑Adresse sollte nicht nach der Hälfte des Scans randomisiert werden).
- Die Sequenznummer der Prüfungsanfrage sollte zwischen den Prüfungsanfragen in einem Scan wie gewohnt (sequenziell) iteriert werden.
- Die Sequenznummer der Prüfungsanfrage sollte zwischen der letzten Prüfungsanfrage eines Scans und der ersten Prüfungsanfrage des nächsten Scans zufällig generiert werden.
- [C-SR] Es wird DRINGEND EMPFOHLEN, während die STA getrennt ist, nur die folgenden Elemente in Probe-Anfrageframes zuzulassen:
- SSID-Parametersatz (0)
- DS-Parametersatz (3)
Wenn Geräteimplementierungen WLAN unterstützen und WLAN für die Standortermittlung verwenden, gilt Folgendes:
- [C-2-1] Es MUSS eine Nutzerfunktion geben, mit der der über die API-Methode
WifiManager.isScanAlwaysAvailable
gelesene Wert aktiviert oder deaktiviert werden kann.
7.4.2.1. Wi-Fi Direct
Geräteimplementierungen:
- SOLLTEN Unterstützung für Wi‑Fi Direct (Wi‑Fi-Peer-to-Peer) umfassen.
Wenn Geräteimplementierungen Wi‑Fi Direct unterstützen, gilt Folgendes:
- [C-1-1] Die entsprechende Android API muss wie in der SDK-Dokumentation beschrieben implementiert werden.
- [C-1-2] MÜSSEN die Hardwarefunktion
android.hardware.wifi.direct
melden. - [C-1-3] MÜSSEN den regulären WLAN-Betrieb unterstützen.
- [C-1-4] MÜSSEN WLAN- und Wi‑Fi Direct-Vorgänge gleichzeitig unterstützen.
7.4.2.2. Einrichtung eines Wi‑Fi-Tunnel-Direkt-Links
Geräteimplementierungen:
- MÜSSEN Unterstützung für Wi‑Fi Tunneled Direct Link Setup (TDLS) bieten, wie in der Android SDK-Dokumentation beschrieben.
Wenn Geräteimplementierungen TDLS unterstützen und TDLS über die WiFiManager API aktiviert ist, gilt Folgendes:
- [C-1-1] MÜSSEN die Unterstützung für TDLS über
WifiManager.isTdlsSupported
deklarieren. - TDLS sollte nur verwendet werden, wenn es möglich UND vorteilhaft ist.
- SOLLTE eine Heuristik haben und TDLS NICHT verwenden, wenn die Leistung schlechter als über den WLAN-Zugangspunkt ist.
7.4.2.3. Wi‑Fi Aware
Geräteimplementierungen:
- SOLLTEN Wi‑Fi Aware unterstützen.
Wenn Geräteimplementierungen die Unterstützung von Wi‑Fi Aware umfassen und die Funktion für Drittanbieter-Apps freigeben, gelten folgende Anforderungen:
- [C-1-1] Die
WifiAwareManager
APIs MÜSSEN wie in der SDK-Dokumentation beschrieben implementiert werden. - [C-1-2] MUSS das
android.hardware.wifi.aware
-Funktions-Flag deklarieren. - [C-1-3] MÜSSEN WLAN- und Wi‑Fi Aware-Vorgänge gleichzeitig unterstützen.
- [C-1-4] Die Adresse der Wi‑Fi Aware-Verwaltungsschnittstelle MUSS in Intervallen von maximal 30 Minuten und immer dann zufällig generiert werden, wenn Wi‑Fi Aware aktiviert ist.
Wenn die Geräteimplementierungen die Unterstützung für WLAN-Aware und WLAN-Standortermittlung wie in Abschnitt 7.4.2.5 beschrieben umfassen und diese Funktionen für Drittanbieter-Apps freigeben, gelten folgende Anforderungen:
- [C-2-1] MÜSSEN die APIs zur standortbasierten Suche implementieren: setRangingEnabled, setMinDistanceMm, setMaxDistanceMm und onServiceDiscoveredWithinRange.
7.4.2.4. WLAN-Passpoint
Geräteimplementierungen:
- MÜSSEN Wi‑Fi Passpoint unterstützen.
Wenn Geräteimplementierungen Wi‑Fi Passpoint unterstützen, gilt Folgendes:
- [C-1-1] Die Passpoint-bezogenen
WifiManager
APIs MÜSSEN wie in der SDK-Dokumentation beschrieben implementiert werden. - [C-1-2] MUSS den IEEE 802.11u-Standard unterstützen, insbesondere im Zusammenhang mit der Netzwerksuche und ‑auswahl, z. B. den Generic Advertisement Service (GAS) und das Access Network Query Protocol (ANQP).
Wenn die Geräteimplementierungen keine Unterstützung für Wi‑Fi Passpoint umfassen, gilt Folgendes:
- [C-2-1] Die Implementierung der Passpoint-bezogenen
WifiManager
APIs MUSS eineUnsupportedOperationException
auslösen.
7.4.2.5. WLAN-Standort (WLAN-Umlaufzeit – RTT)
Geräteimplementierungen:
- MÜSSEN die WLAN-Standortermittlung unterstützen.
Wenn Geräteimplementierungen die Unterstützung für die WLAN-Standortermittlung umfassen und die Funktion für Drittanbieter-Apps freigeben, gilt Folgendes:
- [C-1-1] Die
WifiRttManager
APIs MÜSSEN wie in der SDK-Dokumentation beschrieben implementiert werden. - [C-1-2] MUSS das
android.hardware.wifi.rtt
-Funktions-Flag deklarieren. - [C-1-3] Die MAC-Quelladresse für jeden RTT-Burst MUSS zufällig generiert werden, der ausgeführt wird, während die WLAN-Schnittstelle, auf der die RTT ausgeführt wird, nicht mit einem Zugangspunkt verknüpft ist.
7.4.3. Bluetooth
Wenn Geräteimplementierungen das Bluetooth Audio-Profil unterstützen, gilt Folgendes:
- SOLLTEN erweiterte Audio-Codecs und Bluetooth-Audio-Codecs (z.B. LDAC) unterstützen.
Wenn Geräteimplementierungen HFP, A2DP und AVRCP unterstützen, gilt Folgendes:
- Es sollte mindestens fünf verbundene Geräte unterstützen.
Wenn Geräteimplementierungen die Funktion android.hardware.vr.high_performance
angeben, gilt Folgendes:
- [C-1-1] MÜSSEN Bluetooth 4.2 und die Datenlängenerweiterung von Bluetooth LE 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
undandroid.hardware.bluetooth_le
) deklarieren und die Plattform-APIs implementieren. - MÜSSEN relevante Bluetooth-Profile wie A2DP, AVRCP, OBEX, HFP usw. implementieren, je nach Gerät.
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 GATT-basierten (Generic Attribute Profile) Bluetooth APIs wie in der SDK-Dokumentation und android.bluetooth beschrieben aktivieren.
- [C-3-3] Es MUSS der richtige Wert für
BluetoothAdapter.isOffloadedFilteringSupported()
angegeben werden, um anzugeben, ob die Filterlogik für die API-Klassen ScanFilter implementiert ist. - [C-3-4] Für
BluetoothAdapter.isMultipleAdvertisementSupported()
MUSS der korrekte Wert angegeben werden, um anzugeben, ob Werbung mit niedrigem Energieverbrauch unterstützt wird. - MÜSSEN die Auslagerung der Filterlogik an den Bluetooth-Chipsatz bei der Implementierung der ScanFilter API unterstützen.
- Sollte das Auslagern des Batch-Scans an den Bluetooth-Chip unterstützen.
-
MÜSSEN mehrere Anzeigen mit mindestens 4 Slots unterstützen.
-
[SR] Es wird dringend empfohlen, ein Zeitlimit für resolvable private addresses (RPA) von maximal 15 Minuten zu implementieren und die Adresse nach Ablauf des Zeitlimits zu wechseln, um die Privatsphäre der Nutzer zu schützen.
Wenn Geräteimplementierungen Bluetooth LE unterstützen und Bluetooth LE für die Standortermittlung verwenden, gilt Folgendes:
- [C-4-1] Es MUSS eine Nutzerfunktion zum Aktivieren/Deaktivieren des über die System-API
BluetoothAdapter.isBleScanAlwaysAvailable()
gelesenen Werts geben.
7.4.4. Nahfeldkommunikation
Geräteimplementierungen:
- MÜSSEN einen Transceiver und zugehörige Hardware für die Nahfeldkommunikation (Near Field Communication, NFC) enthalten.
- [C-0-1] Die
android.nfc.NdefMessage
- undandroid.nfc.NdefRecord
-APIs MÜSSEN implementiert werden, auch wenn sie keine Unterstützung für NFC bieten oder dieandroid.hardware.nfc
-Funktion deklarieren, da die Klassen ein protokollunabhängiges Datendarstellungsformat darstellen.
Wenn die Geräteimplementierungen NFC-Hardware enthalten und diese für Drittanbieter-Apps verfügbar gemacht werden sollen, müssen sie:
- [C-1-1] MÜSSEN die
android.hardware.nfc
-Funktion über dieandroid.content.pm.PackageManager.hasSystemFeature()
-Methode melden. - MÜSSEN NDEF-Nachrichten über die folgenden NFC-Standards lesen und schreiben können:
- [C-1-2] MUSS über die folgenden NFC-Standards als NFC-Forum-Lese-/Schreibgerät (wie in der technischen NFC-Forum-Spezifikation NFCForum-TS-DigitalProtocol-1.0 definiert) fungieren können:
- NfcA (ISO14443-3A)
- NfcB (ISO14443-3B)
- NfcF (JIS X 6319-4)
- IsoDep (ISO 14443-4)
- NFC-Forum-Tag-Typen 1, 2, 3, 4 und 5 (vom NFC-Forum definiert)
-
[SR] Es wird DRINGEND EMPFOHLEN, NDEF-Nachrichten sowie Rohdaten über die folgenden NFC-Standards lesen und schreiben zu können. Die NFC-Standards sind zwar als „EMPFOHLENE VORAUSSETZUNG“ angegeben, in der Kompatibilitätsdefinition für eine zukünftige Version sollen sie jedoch in „ERFORDERLICH“ geändert werden. Diese Standards sind in dieser Version optional, werden aber in zukünftigen Versionen erforderlich sein. Wir empfehlen dringend, diese Anforderungen jetzt auf allen Geräten zu erfüllen, auf denen diese Version von Android ausgeführt wird, damit sie auf die zukünftigen Plattformversionen umgestellt werden können.
-
[C-1-3] MUSS Daten über die folgenden Peer-to-Peer-Standards und ‑Protokolle senden und empfangen können:
- ISO 18092
- LLCP 1.2 (vom NFC Forum definiert)
- SDP 1.0 (vom NFC Forum definiert)
- NDEF Push Protocol
- SNEP 1.0 (vom NFC-Forum definiert)
- [C-1-4] MÜSSEN Android Beam unterstützen und SOLLTEN Android Beam standardmäßig aktivieren.
- [C-1-5] MUSS mit Android Beam senden und empfangen können, wenn Android Beam oder ein anderer proprietärer NFC-P2P-Modus aktiviert ist.
- [C-1-6] Der SNEP-Standardserver MUSS implementiert werden. Gültige NDEF-Nachrichten, die vom Standard-SNEP-Server empfangen werden, MÜSSEN an Anwendungen mit der
android.nfc.ACTION_NDEF_DISCOVERED
-Intent gesendet werden. Wenn Android Beam in den Einstellungen deaktiviert wird, darf der Versand eingehender NDEF-Nachrichten NICHT deaktiviert werden. - [C-1-7] MÜSSEN die
android.settings.NFCSHARING_SETTINGS
-Intention einhalten, um die NFC-Freigabeeinstellungen anzuzeigen. - [C-1-8] MÜSSEN den NPP-Server implementieren. Nachrichten, die vom NPP-Server empfangen werden, MÜSSEN auf die gleiche Weise verarbeitet werden wie vom SNEP-Standardserver.
- [C-1-9] Es MUSS ein SNEP-Client implementiert werden und es MUSS versucht werden, ausgehende P2P-NDEFs an den Standard-SNEP-Server zu senden, wenn Android Beam aktiviert ist. Wenn kein Standard-SNEP-Server gefunden wird, MUSS der Client versuchen, an einen NPP-Server zu senden.
- [C-1-10] Aktivitäten im Vordergrund MÜSSEN die ausgehende P2P-NDEF-Nachricht mit
android.nfc.NfcAdapter.setNdefPushMessage
,android.nfc.NfcAdapter.setNdefPushMessageCallback
undandroid.nfc.NfcAdapter.enableForegroundNdefPush
festlegen können. - Es sollte eine Geste oder Bestätigung auf dem Bildschirm verwendet werden, z. B. „Zum Übertragen berühren“, bevor ausgehende P2P-NDEF-Nachrichten gesendet werden.
- [C-1-11] MÜSSEN die NFC-Verbindungsweitergabe an Bluetooth unterstützen, wenn das Gerät das Bluetooth Object Push Profile unterstützt.
- [C-1-12] MUSS die Verbindungsweitergabe an Bluetooth unterstützen, wenn
android.nfc.NfcAdapter.setBeamPushUris
verwendet wird. Dazu müssen die Spezifikationen „Connection Handover version 1.2“ und „Bluetooth Secure Simple Pairing Using NFC version 1.0“ des NFC Forums implementiert werden. Eine solche Implementierung MUSS den LLCP-Übertragungsdienst mit dem Dienstnamen „urn:nfc:sn:handover“ zum Austausch der Übertragungsanfrage/Auswahldatensätze über NFC implementieren und MUSS das Bluetooth Object Push Profile für die eigentliche Bluetooth-Datenübertragung verwenden. Aus Gründen der Abwärtskompatibilität (für die Kompatibilität mit Android 4.1-Geräten) sollte die Implementierung weiterhin SNEP-GET-Anfragen für den Austausch der Übergabeanfrage/Auswahleinträge über NFC akzeptieren. Eine Implementierung sollte jedoch KEINE SNEP-GET-Anfragen zum Übergeben der Verbindung senden. - [C-1-13] MUSS im NFC-Suchmodus nach allen unterstützten Technologien abfragen.
- Sollte sich im NFC-Erkennungsmodus befinden, während das Gerät aktiv ist, das Display eingeschaltet und der Sperrbildschirm entsperrt ist.
- MÜSSEN den Barcode und die URL (falls codiert) von Thinfilm NFC-Barcodes lesen können.
Für die oben genannten JIS-, ISO- und NFC Forum-Spezifikationen sind keine öffentlich zugänglichen Links verfügbar.
Android unterstützt den NFC-HCE-Modus (Host Card Emulation).
Wenn Geräteimplementierungen einen HCE-fähigen NFC-Controller-Chipsatz (für NfcA und/oder NfcB) und das Routing der Anwendungs-ID (AID) unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN die
android.hardware.nfc.hce
-Funktionskonstante melden. - [C-2-2] MUSS NFC HCE APIs gemäß der Definition im Android SDK unterstützen.
Wenn Geräteimplementierungen einen HCE-fähigen NFC-Controller-Chipsatz für NfcF enthalten und die Funktion für Drittanbieter-Apps implementieren, gilt Folgendes:
- [C-3-1] MÜSSEN die
android.hardware.nfc.hcef
-Funktionskonstante angeben. - [C-3-2] MÜSSEN die NfcF Card Emulation APIs gemäß der Definition im Android SDK implementieren.
Wenn die Geräteimplementierungen die allgemeine NFC-Unterstützung wie in diesem Abschnitt beschrieben und MIFARE-Technologien (MIFARE Classic, MIFARE Ultralight, NDEF auf MIFARE Classic) in der Leser-/Schreiberrolle unterstützen, müssen sie:
- [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. Hinweis: Dies ist keine Standardfunktion von Android und wird daher nicht als Konstante in der Klasseandroid.content.pm.PackageManager
angezeigt.
7.4.5. Mindestnetzwerkanforderungen
Geräteimplementierungen:
- [C-0-1] MUSS eine Unterstützung für eine oder mehrere Formen von Datennetzwerken umfassen. Insbesondere müssen Geräteimplementierungen mindestens einen Datenstandard unterstützen, der eine Geschwindigkeit von mindestens 200 Kbit/s bietet. Beispiele für Technologien, die diese Anforderung erfüllen, sind EDGE, HSPA, EV-DO, 802.11g, Ethernet und Bluetooth PAN.
- SOLLTE auch die Unterstützung für mindestens einen gängigen drahtlosen Datenstandard wie 802.11 (Wi‑Fi) umfassen, wenn ein physischer Netzwerkstandard wie Ethernet die primäre Datenverbindung ist.
- Es kann mehr als eine Form der Datenverbindung implementiert werden.
- [C-0-2] MUSS einen IPv6-Netzwerkstack enthalten und die IPv6-Kommunikation über die verwalteten APIs wie
java.net.Socket
undjava.net.URLConnection
sowie die nativen APIs wieAF_INET6
-Sockets unterstützen. - [C-0-3] IPv6 MUSS standardmäßig aktiviert sein.
- Die IPv6-Kommunikation muss so zuverlässig wie IPv4 sein, z. B.:
- [C-0-4] MÜSSEN die IPv6-Verbindung im Ruhemodus aufrechterhalten.
- [C-0-5] Die Ratenbegrenzung darf NICHT dazu führen, dass das Gerät die IPv6-Verbindung in einem IPv6-kompatiblen Netzwerk verliert, das RA-Lebensdauern von mindestens 180 Sekunden verwendet.
- [C-0-6] MUSS Drittanbieteranwendungen eine direkte IPv6-Verbindung zum Netzwerk bereitstellen, wenn eine Verbindung zu einem IPv6-Netzwerk besteht, ohne dass lokal auf dem Gerät eine Adress- oder Portübersetzung 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] MUSS Dual-Stack und reinen IPv6-Betrieb über WLAN unterstützen.
Wenn Geräteimplementierungen Ethernet unterstützen, gilt Folgendes:
- [C-2-1] MUSS den Dual-Stack-Betrieb über Ethernet unterstützen.
Wenn Geräteimplementierungen Mobilfunkdaten unterstützen, gilt Folgendes:
- SOLLTE IPv6-Betrieb (nur IPv6 und möglicherweise Dual-Stack) über Mobilfunk unterstützen.
Wenn Geräteimplementierungen mehr als einen Netzwerktyp unterstützen (z.B. WLAN und mobile Daten) haben folgende Vorteile:
- [C-3-1] Die oben genannten Anforderungen MÜSSEN gleichzeitig für jedes Netzwerk erfüllt werden, wenn das Gerät gleichzeitig mit mehreren Netzwerktypen verbunden ist.
7.4.6. Synchronisierungseinstellungen
Geräteimplementierungen:
- [C-0-1] Die Einstellung für die automatische Synchronisierung des Masters MUSS standardmäßig aktiviert sein, damit die Methode
getMasterSyncAutomatically()
„wahr“ zurückgibt.
7.4.7. Datensparmodus
Wenn Geräteimplementierungen eine getaktete Verbindung umfassen, gilt Folgendes:
- [SR] Es wird DRINGEND EMPFOHLEN, den Datensparmodus bereitzustellen.
Wenn Geräteimplementierungen den Datensparmodus bieten, gilt Folgendes:
- [C-1-1] MÜSSEN alle APIs in der Klasse
ConnectivityManager
unterstützen, wie in der SDK-Dokumentation beschrieben. - [C-1-2] Es MUSS in den Einstellungen eine Benutzeroberfläche vorhanden sein, die die
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
-Intent verarbeitet und es Nutzern ermöglicht, der Zulassungsliste Anwendungen hinzuzufügen oder daraus zu entfernen.
Wenn Geräteimplementierungen keinen Datensparmodus bieten, gilt Folgendes:
- [C-2-1] MÜSSEN für
ConnectivityManager.getRestrictBackgroundStatus()
den WertRESTRICT_BACKGROUND_STATUS_DISABLED
zurückgeben - [C-2-2] DÜRFEN KEINE
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
übertragen. - [C-2-3] Es MUSS eine Aktivität geben, die den
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
-Intent verarbeitet, aber sie KANN als No-Op implementiert werden.
7.4.8. Secure Elements
Wenn Geräteimplementierungen sichere Elemente unterstützen, die die Open Mobile API nutzen, und diese für Drittanbieter-Apps verfügbar machen, gilt Folgendes:
- [C-1-1] MÜSSEN die verfügbaren Secure Elements-Lesegeräte auflisten, wenn die Methode
android.se.omapi.SEService.getReaders()
aufgerufen wird.
7.5. Kameras
Wenn Geräteimplementierungen mindestens eine Kamera enthalten, gilt Folgendes:
- [C-1-1] MUSS das
android.hardware.camera.any
-Funktions-Flag deklarieren. - [C-1-2] Es MUSS möglich sein, dass eine Anwendung gleichzeitig drei RGBA_8888-Bitmaps zuweist, die der Größe der Bilder entsprechen, die vom Kamerasensor mit der höchsten Auflösung auf dem Gerät erzeugt werden, während die Kamera für eine einfache Vorschau und Standbildaufnahme geöffnet ist.
7.5.1. Rückkamera
Eine Rückkamera befindet sich auf der Seite des Geräts, die dem Display gegenüberliegt. Sie nimmt also Bilder auf der Rückseite des Geräts auf, ähnlich wie eine herkömmliche Kamera.
Geräteimplementierungen:
- MÜSSEN eine Rückkamera haben.
Wenn Geräteimplementierungen mindestens eine Rückkamera enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN die Funktions-Flags
android.hardware.camera
undandroid.hardware.camera.any
melden. - [C-1-2] MÜSSEN eine Auflösung von mindestens 2 Megapixeln haben.
- Es sollte entweder ein Hardware- oder Software-Autofokus im Kameratreiber implementiert sein (für die Anwendungssoftware transparent).
- KANN Hardware mit fester Brennweite oder erweiterter Schärfentiefe haben.
- KANN einen Blitz enthalten.
Wenn die Kamera einen Blitz hat:
- [C-2-1] Der Blitz darf NICHT leuchten, während eine
android.hardware.Camera.PreviewCallback
-Instanz auf einer Kameravorschauoberfläche registriert ist, es sei denn, die Anwendung hat den Blitz explizit aktiviert, indem sie die AttributeFLASH_MODE_AUTO
oderFLASH_MODE_ON
einesCamera.Parameters
-Objekts aktiviert hat. 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 befindet sich auf derselben Seite des Geräts wie das Display. Sie wird in der Regel zum Aufnehmen von Bildern des Nutzers verwendet, z. B. für Videokonferenzen und ähnliche Anwendungen.
Geräteimplementierungen:
- KANN eine Frontkamera enthalten.
Wenn Geräteimplementierungen mindestens eine nach vorne gerichtete Kamera enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN die Funktions-Flags
android.hardware.camera.any
undandroid.hardware.camera.front
melden. - [C-1-2] MÜSSEN eine Auflösung von mindestens VGA (640 × 480 Pixel) haben.
- [C-1-3] Die Frontkamera darf NICHT als Standard für die Camera API verwendet werden und die API darf NICHT so konfiguriert werden, dass eine Frontkamera als Standardrückkamera behandelt wird, auch wenn sie die einzige Kamera auf dem Gerät ist.
- [C-1-4] Die Kameravorschau MUSS horizontal gespiegelt werden, bezogen auf die von der Anwendung angegebene Ausrichtung, wenn die aktuelle Anwendung ausdrücklich die Drehung des Kameradisplays über einen Aufruf der Methode
android.hardware.Camera.setDisplayOrientation()
angefordert hat. Umgekehrt MUSS die Vorschau entlang der Standardhorizontalachse des Geräts gespiegelt werden, wenn die aktuelle Anwendung nicht explizit über einen Aufruf der Methodeandroid.hardware.Camera.setDisplayOrientation()
anfordert, dass das Kameradisplay gedreht wird. - [C-1-5] Die finalen aufgenommenen Standbilder oder Videostreams, die an Anwendungs-Callbacks zurückgegeben oder im Medienspeicher gespeichert werden, DÜRFEN NICHT gespiegelt werden.
- [C-1-6] Das Bild, das in der Postview angezeigt wird, MUSS auf dieselbe Weise gespiegelt werden wie der Bildstream der Kameravorschau.
- KANN Funktionen wie Autofokus und Blitz enthalten, die für Rückkameras verfügbar sind, 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 Nutzereingaben):
- [C-2-1] Die Kameravorschau MUSS horizontal gespiegelt sein, bezogen auf die aktuelle Ausrichtung des Geräts.
7.5.3. Externe Kamera
Geräteimplementierungen:
- MÖGLICHERWEISE Unterstützung für eine externe Kamera, die nicht unbedingt immer verbunden ist.
Wenn Geräteimplementierungen die Unterstützung einer externen Kamera umfassen, gilt Folgendes:
- [C-1-1] MÜSSEN die Plattform-Funktions-Flags
android.hardware.camera.external
undandroid.hardware camera.any
deklarieren. - [C-1-2] MUSS USB Video Class (UVC 1.0 oder höher) unterstützen, wenn die externe Kamera über den USB-Host-Port verbunden ist.
- [C-1-3] MÜSSEN die CTS-Tests für Kameras bestehen, wenn eine physische externe Kamera angeschlossen ist. Details zu den CTS-Tests für Kameras finden Sie unter source.android.com.
- MÜSSEN Videokomprimierungen wie MJPEG unterstützen, um die Übertragung von hochwertigen, nicht codierten Streams (d.h. Roh- oder unabhängig komprimierte Bildstreams) zu ermöglichen.
- Unter Umständen wird die Nutzung mehrerer Kameras unterstützt.
- KANN kamerabasierte Videocodierung unterstützen.
Wenn die kamerabasierte Videocodierung unterstützt wird:
- [C-2-1] Auf einen gleichzeitigen uncodierten / MJPEG-Stream (QVGA oder höhere Auflösung) MUSS von der Geräteimplementierung aus zugegriffen werden können.
7.5.4. Verhalten der Camera API
Android enthält zwei API-Pakete für den Zugriff auf die Kamera. Die neuere android.hardware.camera2 API stellt der App eine Kamerasteuerung auf niedriger Ebene zur Verfügung, einschließlich effizienter Zero-Copy-Burst-/Streaming-Abläufe und Frames-spezifischer Einstellungen für Belichtung, Verstärkung, Weißabgleich, Farbkonvertierung, Rauschunterdrückung, Schärfung und mehr.
Das ältere API-Paket android.hardware.Camera
ist in Android 5.0 als eingestellt gekennzeichnet, sollte aber weiterhin für Apps verfügbar sein. Bei der Implementierung von Android-Geräten MUSS die API wie in diesem Abschnitt und im Android SDK beschrieben weiter unterstützt werden.
Alle Funktionen, die der eingestellten Klasse „android.hardware.Camera“ und dem neueren Paket „android.hardware.camera2“ gemeinsam sind, MÜSSEN in beiden APIs dieselbe Leistung und Qualität haben. Bei vergleichbaren Einstellungen müssen beispielsweise die Geschwindigkeit und Genauigkeit des Autofokus sowie die Qualität der aufgenommenen Bilder identisch sein. Funktionen, die von der unterschiedlichen Semantik der beiden APIs abhängen, müssen nicht dieselbe Geschwindigkeit oder Qualität haben, sollten aber so nah wie möglich übereinstimmen.
Geräteimplementierungen MÜSSEN die folgenden Verhaltensweisen für die kamerabezogenen APIs für alle verfügbaren Kameras implementieren. Geräteimplementierungen:
- [C-0-1]
android.hardware.PixelFormat.YCbCr_420_SP
MUSS für Vorschaudaten verwendet werden, die an Anwendungs-Callbacks übergeben werden, wenn eine Anwendung noch nieandroid.hardware.Camera.Parameters.setPreviewFormat(int)
aufgerufen hat. - [C-0-2] MÜSSEN außerdem im NV21-Codierungsformat sein, wenn eine Anwendung eine
android.hardware.Camera.PreviewCallback
-Instanz registriert und das System dieonPreviewFrame()
-Methode aufruft und das Vorschauformat YCbCr_420_SP ist, werden die Daten in der byte[] anonPreviewFrame()
übergeben. Das heißt, NV21 MUSS der Standard sein. - [C-0-3] Für
android.hardware.Camera
MÜSSEN sowohl die Front- als auch die Rückkamera das YV12-Format (wie durch die Konstanteandroid.graphics.ImageFormat.YV12
angegeben) für Kameravorschauen unterstützen. Der Hardware-Video-Encoder und die Kamera können beliebige native Pixelformate verwenden, aber die Geräteimplementierung MUSS die Umwandlung in YV12 unterstützen. - [C-0-4] MÜSSEN 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
angeben. - [C-0-5] Die vollständige Camera API in der Android SDK-Dokumentation MUSS implementiert werden, unabhängig davon, ob das Gerät einen Hardware-Autofokus oder andere Funktionen hat. Kameras ohne Autofokus MÜSSEN beispielsweise alle registrierten
android.hardware.Camera.AutoFocusCallback
-Instanzen aufrufen, auch wenn dies für eine Kamera ohne Autofokus keine Relevanz hat. Dies gilt auch für Frontkameras. Auch wenn die meisten Frontkameras keinen Autofokus unterstützen, müssen die API-Callbacks wie beschrieben „gefaket“ werden. - [C-0-6] MUSS jeden Parameternamen erkennen und berücksichtigen, der als Konstante in der Klasse
android.hardware.Camera.Parameters
definiert ist. Umgekehrt dürfen Geräteimplementierungen nur Stringkonstanten berücksichtigen oder erkennen, die an dieandroid.hardware.Camera.setParameters()
-Methode übergeben werden und als Konstanten in derandroid.hardware.Camera.Parameters
dokumentiert sind. Das bedeutet, dass Geräteimplementierungen alle Standardkameraparameter unterstützen MÜSSEN, sofern die Hardware dies zulässt, und KEINE benutzerdefinierten Kameraparametertypen unterstützen DÜRFEN. Geräteimplementierungen, die die Bildaufnahme mit HDR-Bildgebungstechniken (High Dynamic Range) unterstützen, MÜSSEN beispielsweise den KameraparameterCamera.SCENE_MODE_HDR
unterstützen. - [C-0-7] MÜSSEN das richtige Unterstützungsniveau mit der
android.info.supportedHardwareLevel
-Eigenschaft gemäß der Beschreibung im Android SDK und die entsprechenden Framework-Funktions-Flags melden. - [C-0-8] MÜSSEN auch die einzelnen Kamerafunktionen von
android.hardware.camera2
über die Propertyandroid.request.availableCapabilities
deklarieren und die entsprechenden Funktions-Flags deklarieren. MÜSSEN das Funktions-Flag definieren, wenn eines der angeschlossenen Kamerageräte die Funktion unterstützt. - [C-0-9] Die
Camera.ACTION_NEW_PICTURE
-Intention MUSS gesendet werden, wenn mit der Kamera ein neues Foto aufgenommen und der Eintrag des Fotos dem Medienspeicher hinzugefügt wurde. - [C-0-10] MÜSSEN die
Camera.ACTION_NEW_VIDEO
-Intent senden, wenn von der Kamera ein neues Video aufgenommen und der Eintrag des Bildes dem Medienspeicher hinzugefügt wurde. - [C-SR] Es wird DRINGEND empfohlen, ein logisches Kameragerät zu unterstützen, das die Funktion
CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
für Geräte mit mehreren Kameras aufweist, die in dieselbe Richtung zeigen, und das aus allen physischen Kameras besteht, die in diese Richtung zeigen, sofern der physische Kameratyp vom Framework unterstützt wird undCameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL
für die physischen Kameras entwederLIMITED
,FULL
oderLEVEL_3
ist.
7.5.5. Kameraausrichtung
Wenn Geräte eine Front- oder Rückkamera haben, gelten für diese Kamera(s) die folgenden Anforderungen:
- [C-1-1] MUSS so ausgerichtet sein, dass die lange Dimension der Kamera mit der langen Dimension des Bildschirms übereinstimmt. Das bedeutet, dass die Kameras Bilder im Querformat aufnehmen MÜSSEN, wenn das Gerät im Querformat gehalten wird. Das gilt unabhängig von der natürlichen Ausrichtung des Geräts, also sowohl für Geräte, die im Querformat als auch im Hochformat verwendet werden.
7.6. Arbeitsspeicher und Datenspeicher
7.6.1. Mindestarbeitsspeicher und Mindestspeicherplatz
Geräteimplementierungen:
- [C-0-1] MUSS einen Download-Manager enthalten, den Anwendungen zum Herunterladen von Datendateien VERWENDEN DÜRFEN. Außerdem MUSS es möglich sein, einzelne Dateien mit einer Größe von mindestens 100 MB an den standardmäßigen Cache-Speicherort herunterzuladen.
7.6.2. Gemeinsam genutzter Speicherplatz für Anwendungen
Geräteimplementierungen:
- [C-0-1] MUSS Speicherplatz für die gemeinsame Nutzung durch Anwendungen bieten, der auch oft als „freigegebener externer Speicher“, „freigegebener Speicher für Anwendungen“ oder durch den Linux-Pfad „/sdcard“, auf dem er bereitgestellt wird, bezeichnet wird.
- [C-0-2] MÜSSEN mit freigegebenem Speicher konfiguriert sein, der standardmäßig bereitgestellt wird, also „out of the box“, unabhängig davon, ob der Speicher auf einer internen Speicherkomponente oder einem Wechselspeichermedium (z.B. SD-Kartenslot) implementiert ist.
- [C-0-3] Der freigegebene Speicherplatz der Anwendung MUSS direkt über den Linux-Pfad
sdcard
bereitgestellt oder einen Linux-Symbollink vonsdcard
zum tatsächlichen Bereitstellungspunkt enthalten. - [C-0-4] MÜSSEN die Berechtigung
android.permission.WRITE_EXTERNAL_STORAGE
für diesen freigegebenen Speicher erzwingen, wie im SDK beschrieben. Andernfalls MUSS der freigegebene Speicher für alle Anwendungen beschreibbar sein, die diese Berechtigung erhalten.
Geräteimplementierungen KÖNNEN die oben genannten Anforderungen mit einer der folgenden Methoden erfüllen:
- Ein für Nutzer zugänglicher Wechseldatenträger, z. B. ein SD-Kartenslot (Secure Digital).
- Ein Teil des internen (nicht entfernbaren) Speichers, wie im Android Open Source Project (AOSP) implementiert.
Wenn bei Geräteimplementierungen Wechselspeicher verwendet wird, um die oben genannten Anforderungen zu erfüllen, gilt Folgendes:
- [C-1-1] Es MUSS eine Toast- oder Pop-up-Benutzeroberfläche implementiert werden, die den Nutzer warnt, wenn sich kein Speichermedium im Steckplatz befindet.
- [C-1-2] MUSS ein FAT-formatiertes Speichermedium (z.B. eine SD-Karte) enthalten oder auf der Verpackung und in anderen zum Zeitpunkt des Kaufs verfügbaren Materialien muss angegeben sein, dass das Speichermedium separat erworben werden muss.
Wenn bei Geräteimplementierungen ein Teil des nicht entfernbaren Speichers verwendet wird, um die oben genannten Anforderungen zu erfüllen, gilt Folgendes:
- SOLLTE die AOSP-Implementierung des internen freigegebenen Speichers der Anwendung verwenden.
- KANN den Speicherplatz mit den privaten Daten der Anwendung teilen.
Wenn Geräteimplementierungen mehrere freigegebene Speicherpfade umfassen (z. B. einen SD-Kartensteckplatz und einen freigegebenen internen Speicher), gilt Folgendes:
- [C-2-1] Nur vorinstallierte und privilegierte Android-Anwendungen mit der Berechtigung
WRITE_EXTERNAL_STORAGE
dürfen zum Schreiben auf den sekundären externen Speicher berechtigt sein, es sei denn, sie schreiben in ihre paketspezifischen Verzeichnisse oder in denURI
, der durch das Auslösen derACTION_OPEN_DOCUMENT_TREE
-Intent zurückgegeben wird.
Wenn Geräteimplementierungen einen USB-Anschluss mit Unterstützung des USB-Peripheriemodus haben, gilt Folgendes:
- [C-3-1] Es MUSS ein Mechanismus zum Zugriff auf die Daten im freigegebenen Speicher der Anwendung von einem Hostcomputer aus bereitgestellt werden.
- MÜSSEN Inhalte aus beiden Speicherpfaden transparent über den Medien-Scandienst von Android und
android.provider.MediaStore
bereitstellen. - Es kann USB-Massenspeicher verwenden, sollte aber das Media-Transfer-Protokoll verwenden, um diese Anforderung zu erfüllen.
Wenn Geräteimplementierungen einen USB-Anschluss mit USB-Peripheriemodus haben und das Media-Transfer-Protokoll unterstützen, gilt Folgendes:
- MÜSSEN mit dem Referenz-Android-MTP-Host Android File Transfer kompatibel sein.
- MÜSSEN eine USB-Geräteklasse von 0x00 melden.
- MÜSSEN den Namen „MTP“ für die USB-Schnittstelle angeben.
7.6.3. Verwendbarer Speicher
Wenn das Gerät im Gegensatz zu einem Fernseher mobil sein soll, sind Geräteimplementierungen:
- [SR] Es wird DRINGEND EMPFOHLEN, den anpassbaren Speicher an einem langfristig stabilen Ort zu implementieren, da ein versehentliches Trennen zu Datenverlusten oder Beschädigungen führen kann.
Wenn sich der Anschluss für das Wechselspeichergerät an einer dauerhaft stabilen Stelle befindet, z. B. im Batteriefach oder in einer anderen Schutzabdeckung, sind die Geräteimplementierungen:
- [SR] Es wird DRINGEND EMPFOHLEN, Adaptive Storage zu implementieren.
7.7. USB
Geräteimplementierungen mit einem USB-Anschluss:
- MÜSSEN den USB-Peripheriegerätemodus und den USB-Hostmodus unterstützen.
7.7.1. USB-Peripheriegerätemodus
Wenn Geräteimplementierungen einen USB-Anschluss mit Peripheriemodus haben:
- [C-1-1] Der Anschluss MUSS mit einem USB-Host mit einem Standard-USB-Typ-A- oder -Typ-C-Anschluss verbunden werden können.
- [C-1-2] Der korrekte Wert von
iSerialNumber
muss im USB-Standardgeräte-Descriptor überandroid.os.Build.SERIAL
gemeldet werden. - [C-1-3] MÜSSEN Ladegeräte mit 1,5 A und 3,0 A gemäß dem Widerstandsstandard für USB-Typ-C erkennen und MÜSSEN Änderungen in der Werbung erkennen, wenn sie USB-Typ-C unterstützen.
- [SR] Der Anschluss sollte den USB-Formfaktor Micro-B, Micro-AB oder Typ-C haben. Für bestehende und neue Android-Geräte wird dringend empfohlen, diese Anforderungen zu erfüllen, damit sie auf die zukünftigen Plattformversionen umgestellt werden können.
- [SR] Der Anschluss SOLLTE sich auf der Unterseite des Geräts befinden (entsprechend der natürlichen Ausrichtung) oder die Software-Displaydrehung für alle Apps (einschließlich Startbildschirm) aktivieren, damit das Display korrekt dargestellt wird, wenn sich das Gerät mit dem Anschluss nach unten befindet. Für bestehende und neue Android-Geräte wird dringend empfohlen, diese Anforderungen zu erfüllen, damit sie auf zukünftige Plattformversionen umgestellt werden können.
- [SR] Es sollte Unterstützung für einen Stromverbrauch von 1,5 A während des HS-Chirps und des Traffics implementiert werden, wie in der USB Battery Charging specification, Revision 1.2 angegeben. Für bestehende und neue Android-Geräte wird dringend empfohlen, diese Anforderungen zu erfüllen, damit sie auf die zukünftigen Plattformversionen umgestellt werden können.
- [SR] Es wird DRINGEND EMPFOHLEN, keine proprietären Lademethoden zu unterstützen, die die Vbus-Spannung über die Standardwerte hinaus ändern oder die Rolle des Sinks/der Quelle ändern, da dies zu Inkompatibilitätsproblemen mit Ladegeräten oder Geräten führen kann, die die standardmäßigen USB-PD-Methoden unterstützen. Diese Funktion wird zwar als „EMPFOHLENE OPTION“ gekennzeichnet, in zukünftigen Android-Versionen wird es jedoch möglicherweise erforderlich sein, dass alle Geräte mit USB-C-Anschluss die vollständige Interoperabilität mit Standard-USB-C-Ladegeräten unterstützen.
- [SR] Es wird DRINGEND EMPFOHLEN, die Stromversorgung für den Daten- und Stromversorgungsrollentausch zu unterstützen, wenn sie USB-Typ-C und den USB-Host-Modus unterstützen.
- MÜSSEN Power Delivery für das Laden mit hoher Spannung und Unterstützung für alternative Modi wie Displayausgang unterstützen.
- MÜSSEN die Android Open Accessory (AOA) API und ‑Spezifikation wie in der Android SDK-Dokumentation beschrieben implementieren.
Wenn Geräteimplementierungen einen USB-Anschluss und die AOA-Spezifikation implementieren, gilt Folgendes:
- [C-2-1] MÜSSEN die Unterstützung für die Hardwarefunktion
android.hardware.usb.accessory
deklarieren. - [C-2-2] Die USB-Massenspeicherklasse MUSS am Ende des Interface-Beschreibungsstrings
iInterface
des USB-Massenspeichers den String „android“ enthalten.
7.7.2. USB-Host-Modus
Wenn Geräteimplementierungen einen USB-Anschluss mit Hostmodus haben, gilt Folgendes:
- [C-1-1] Die Android USB Host API MUSS gemäß der Dokumentation im Android SDK implementiert werden und die Unterstützung der Hardwarefunktion
android.hardware.usb.host
MUSS erklärt werden. - [C-1-2] MUSS die Unterstützung für die Verbindung von Standard-USB-Peripheriegeräten implementieren. Das bedeutet, dass EINE der folgenden Optionen MUSS implementiert werden:
- Sie haben einen USB-C-Anschluss oder werden mit Kabeln geliefert, die einen proprietären Anschluss des Geräts an einen standardmäßigen USB-C-Anschluss anpassen (USB-C-Gerät).
- Sie haben einen USB-A-Anschluss oder werden mit Kabeln geliefert, die einen proprietären Anschluss des Geräts an einen Standard-USB-A-Anschluss anpassen.
- einen Micro-AB-Anschluss auf dem Gerät haben, der MIT einem Kabel geliefert werden sollte, das an einen Standard-Typ-A-Anschluss passt.
- [C-1-3] Der Lieferumfang darf KEIN Adapter enthalten, der von USB-Typ-A- oder Micro-AB-Ports zu einem Typ-C-Port (Anschluss) konvertiert.
- [SR] Es wird DRINGEND EMPFOHLEN, die USB Audio Class gemäß der Dokumentation des Android SDK zu implementieren.
- MÜSSEN das Aufladen des angeschlossenen USB-Peripheriegeräts im Hostmodus unterstützen und einen Quellstrom von mindestens 1,5 A anzeigen, wie im Abschnitt „Termination Parameters“ (Begrenzungsparameter) der USB Type-C Cable and Connector Specification Revision 1.2 (USB-Typ-C-Kabel- und Anschlussspezifikation, Version 1.2) für USB-Typ-C-Anschlüsse angegeben oder den Ausgabestrombereich des Charging Downstream Ports (CDP) wie in den USB Battery Charging specifications, revision 1.2 (USB-Spezifikationen für das Aufladen von Akkus, Version 1.2) für Micro-AB-Anschlüsse verwenden.
- MÜSSEN USB-Typ-C-Standards implementieren und unterstützen.
Wenn Geräteimplementierungen einen USB-Anschluss haben, 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 unterstützen, die in den USB HID-Nutzungstabellen und der Nutzungsanfrage für Sprachbefehle an die
KeyEvent
-Konstanten unten angegeben sind:- Seite für die Nutzung (0xC) – Nutzungs-ID (0x0CD):
KEYCODE_MEDIA_PLAY_PAUSE
- Seite für die Nutzung (0xC) – Nutzungs-ID (0x0E9):
KEYCODE_VOLUME_UP
- Seite „Nutzung“ (0xC) – Nutzungs-ID (0x0EA):
KEYCODE_VOLUME_DOWN
- Seite für die Nutzung (0xC) – Nutzungs-ID (0x0CF):
KEYCODE_VOICE_ASSIST
- Seite für die Nutzung (0xC) – Nutzungs-ID (0x0CD):
Wenn Geräteimplementierungen einen USB-Anschluss haben, der den Host-Modus und das Storage Access Framework (SAF) unterstützt, gilt Folgendes:
- [C-3-1] MÜSSEN alle per Fernzugriff verbundenen MTP-Geräte (Media Transfer Protocol) erkennen und deren Inhalte über die Intents
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
undACTION_CREATE_DOCUMENT
zugänglich machen. .
Wenn Geräteimplementierungen einen USB-Port haben, der den Hostmodus und USB Typ-C unterstützt, gilt Folgendes:
- [C-4-1] MUSS die Funktion „Dual Role Port“ gemäß der USB-Typ-C-Spezifikation (Abschnitt 4.5.1.3.3) implementieren.
- [SR] DisplayPort wird DRINGEND EMPFOHLEN, USB SuperSpeed-Datenraten SOLLTEN unterstützt werden und Power Delivery für den Austausch von Daten- und Stromversorgungsrollen wird DRINGEND EMPFOHLEN.
- [SR] Es wird DRINGEND EMPFOHLEN, den Zubehörmodus für Audioadapter gemäß Anhang A der USB Type-C Cable and Connector Specification Revision 1.2 NICHT zu unterstützen.
- MÜSSEN das Try.*-Modell implementieren, das am besten zum Geräteformfaktor passt. Beispielsweise sollte ein Handheld das Try.SNK-Modell implementieren.
7.8. Audio
7.8.1. Mikrofon
Wenn Geräteimplementierungen ein Mikrofon enthalten, gilt Folgendes:
- [C-1-1] MÜSSEN die
android.hardware.microphone
-Funktionskonstante angeben. - [C-1-2] MÜSSEN die Anforderungen an Audioaufnahmen in Abschnitt 5.4 erfüllen.
- [C-1-3] MÜSSEN die Anforderungen an die Audiolatenz in Abschnitt 5.6 erfüllen.
- [SR] Es wird DRINGEND EMPFOHLEN, die Aufzeichnung von Nah-Ultraschall wie in Abschnitt 7.8.3 beschrieben zu unterstützen.
Wenn bei Geräteimplementierungen kein Mikrofon vorhanden ist, gilt Folgendes:
- [C-2-1] DÜRFEN NICHT die
android.hardware.microphone
-Funktionskonstante melden. - [C-2-2] Die Audioaufzeichnungs-API MUSS gemäß Abschnitt 7 mindestens als No-Op implementiert werden.
7.8.2. Audioausgabe
Wenn Geräteimplementierungen einen Lautsprecher oder einen Audio-/Multimedia-Ausgabeanschluss für ein Audioausgabegerät wie eine 4-polige 3,5-mm-Audiobuchse oder einen USB-Host-Modus-Anschluss mit USB Audio Class enthalten, müssen sie:
- [C-1-1] MÜSSEN die
android.hardware.audio.output
-Funktionskonstante angeben. - [C-1-2] MUSS die Anforderungen an die Audiowiedergabe in Abschnitt 5.5 erfüllen.
- [C-1-3] MÜSSEN die Anforderungen an die Audiolatenz in Abschnitt 5.6 erfüllen.
- [SR] Es wird DRINGEND EMPFOHLEN, die Wiedergabe von Near-Ultraschall wie in Abschnitt 7.8.3 beschrieben zu unterstützen.
Wenn die Geräteimplementierungen keinen Lautsprecher oder Audioausgang haben, gilt Folgendes:
- [C-2-1] DÜRFEN die
android.hardware.audio.output
-Funktion NICHT melden. - [C-2-2] Die APIs für den Audioausgang MÜSSEN mindestens als No-Ops implementiert werden.
In diesem Abschnitt bezeichnet ein „Ausgabeanschluss“ eine physische Schnittstelle wie einen 3,5-mm-Audioanschluss, einen HDMI-Anschluss oder einen USB-Hostmodus-Anschluss mit USB-Audioklasse. Die Unterstützung der Audioausgabe über drahtlose Protokolle wie Bluetooth, WLAN oder Mobilfunknetz gilt nicht als „Ausgabeport“.
7.8.2.1. Analoge Audioports
Damit Geräte mit einem oder mehreren analogen Audioanschlüssen mit Headsets und anderem Audiozubehör kompatibel sind, die den 3,5-mm-Audiostecker verwenden, müssen sie folgende Anforderungen erfüllen:
- [C-SR] Es wird DRINGEND EMPFOHLEN, dass mindestens einer der Audioanschlüsse eine 4-polige 3,5-mm-Audiobuchse ist.
Wenn die Geräteimplementierungen eine 3,5-mm-Audiobuchse mit vier Adern haben, gilt Folgendes:
- [C-1-1] MÜSSEN die Audiowiedergabe über Stereokopfhörer und Stereoheadsets mit Mikrofon unterstützen.
- [C-1-2] MÜSSEN TRRS-Audiostecker mit der CTIA-Belegung unterstützen.
- [C-1-3] MÜSSEN die Erkennung und Zuordnung zu den Tastencodes für die folgenden drei Bereiche der äquivalenten Impedanz zwischen dem Mikrofon und den Erdleitern am Audiostecker unterstützen:
-
70 Ohm oder weniger:
KEYCODE_HEADSETHOOK
-
210–290 Ohm:
KEYCODE_VOLUME_UP
-
360–680 Ohm:
KEYCODE_VOLUME_DOWN
-
70 Ohm oder weniger:
- [C-1-4] MUSS
ACTION_HEADSET_PLUG
beim Einstecken des Steckers auslösen, aber erst, nachdem alle Kontakte am Stecker ihre entsprechenden Segmente an der Buchse berühren. - [C-1-5] MUSS mindestens 150 mV ± 10% der Ausgangsspannung bei einer Lautsprecherimpedanz von 32 Ohm liefern können.
- [C-1-6] MÜSSEN eine Mikrofonvorspannung zwischen 1,8 V und 2,9 V haben.
- [C-1-7] MÜSSEN den folgenden Bereich der äquivalenten Impedanz zwischen dem Mikrofon und den Erdleitern am Audiostecker erkennen und dem Schlüsselcode zuordnen:
-
110–180 Ohm:
KEYCODE_VOICE_ASSIST
-
110–180 Ohm:
- [C-SR] Es wird DRINGEND EMPFOHLEN, Audiostecker mit der OMTP-Belegung zu unterstützen.
- [C-SR] Es wird DRINGEND EMPFOHLEN, die Audioaufnahme über Stereo-Headsets mit Mikrofon zu unterstützen.
Wenn Geräteimplementierungen eine 4-polige 3,5-mm-Audiobuchse haben, ein Mikrofon unterstützen und android.intent.action.HEADSET_PLUG
mit dem zusätzlichen Wert „Mikrofon“ auf „1“ ausstrahlen, gilt Folgendes:
- [C-2-1] MÜSSEN die Erkennung des Mikrofons des angeschlossenen Audiozubehörs unterstützen.
7.8.3. Nah-Ultraschall
Nah-Ultraschall-Audio ist das Band von 18,5 kHz bis 20 kHz.
Geräteimplementierungen:
- MÜSSEN die Unterstützung der Near-Ultrasound-Audiofunktion über die AudioManager.getProperty API wie unten beschrieben korrekt melden:
Wenn PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND
„wahr“ ist, MÜSSEN die folgenden Anforderungen von den Audioquellen VOICE_RECOGNITION
und UNPROCESSED
erfüllt werden:
- [C-1-1] Die mittlere Leistungsantwort des Mikrofons im Bereich von 18,5 kHz bis 20 kHz DARF maximal 15 dB unter der Antwort bei 2 kHz liegen.
- [C-1-2] Das ungewichtete Signal-Rausch-Verhältnis des Mikrofons bei 18,5 kHz bis 20 kHz für einen 19-kHz-Ton bei −26 dBFS DARF nicht unter 50 dB liegen.
Wenn PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND
„wahr“ ist:
- [C-2-1] Die mittlere Antwort des Lautsprechers bei 18,5 kHz bis 20 kHz DARF nicht mehr als 40 dB unter der Antwort bei 2 kHz liegen.
7.9. Virtual Reality
Android bietet APIs und Funktionen zum Erstellen von Virtual-Reality-Anwendungen (VR), einschließlich hochwertiger mobiler VR-Erlebnisse. Geräteimplementierungen MÜSSEN diese APIs und Verhaltensweisen wie in diesem Abschnitt beschrieben ordnungsgemäß implementieren.
7.9.1. Virtual Reality-Modus
Android unterstützt den VR-Modus. Diese Funktion verarbeitet das stereoskopische Rendern von Benachrichtigungen und deaktiviert monokulare System-UI-Komponenten, während eine VR-Anwendung im Fokus des Nutzers steht.
7.9.2. Virtual Reality-Modus – Hohe Leistung
Wenn Geräteimplementierungen den VR-Modus unterstützen, gilt Folgendes:
- [C-1-1] Es müssen mindestens zwei physische Kerne vorhanden sein.
- [C-1-2] MÜSSEN die
android.hardware.vr.high_performance
-Funktion deklarieren. - [C-1-3] MÜSSEN den Modus für eine konstante Leistung unterstützen.
- [C-1-4] MUSS OpenGL ES 3.2 unterstützen.
- [C-1-5] MÜSSEN
android.hardware.vulkan.level
0 unterstützen. - Sollte
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 verfügbar machen. - [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 angeben. - [C-SR] Es 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 anzugeben. - [C-SR] Es wird DRINGEND EMPFOHLEN, Vulkan 1.1 zu unterstützen.
- [C-SR] Es 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 offenzulegen. - [C-SR] Es wird DRINGEND empfohlen, mindestens eine Vulkan-Warteschlangenfamilie bereitzustellen, bei der
flags
sowohlVK_QUEUE_GRAPHICS_BIT
als auchVK_QUEUE_COMPUTE_BIT
enthält undqueueCount
mindestens 2 ist. - [C-1-7] Die GPU und das Display MÜSSEN den Zugriff auf den freigegebenen Front-Buffer synchronisieren können, damit das abwechselnde Rendern von VR-Inhalten mit zwei Rendering-Kontexten bei 60 fps ohne sichtbare Tearing-Artefakte angezeigt wird.
- [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
wie im NDK beschrieben implementieren. - [C-1-10] MÜSSEN Unterstützung für
AHardwareBuffer
s mit beliebiger Kombination der NutzungsflagsAHARDWAREBUFFER_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] Es wird DRINGEND EMPFOHLEN, die Zuweisung 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] MUSS H.264-Dekodierung mit mindestens 3.840 × 2.160 Pixeln bei 30 fps unterstützen, komprimiert auf durchschnittlich 40 Mbit/s (entspricht 4 Instanzen von 1.920 × 1.080 Pixeln bei 30 fps – 10 Mbit/s oder 2 Instanzen von 1.920 × 1.080 Pixeln bei 60 fps – 20 Mbit/s).
- [C-1-12] MUSS HEVC und VP9 unterstützen, MUSS mindestens 1920 × 1080 bei 30 fps decodieren können, komprimiert auf durchschnittlich 10 Mbit/s, und SOLLTE 3840 × 2160 bei 30 fps bis 20 Mbit/s decodieren können (entspricht 4 Instanzen von 1920 × 1080 bei 30 fps bis 5 Mbit/s).
- [C-1-13] MÜSSEN die
HardwarePropertiesManager.getDeviceTemperatures
API unterstützen und genaue Werte für die Hauttemperatur zurückgeben. - [C-1-14] Es MUSS ein eingebetteter Bildschirm vorhanden sein und die Auflösung MUSS mindestens 1.920 × 1.080 betragen.
- [C-SR] Es wird DRINGEND EMPFOHLEN, eine Bildschirmauflösung von mindestens 2560 × 1440 zu verwenden.
- [C-1-15] Das Display MUSS im VR-Modus mindestens mit 60 Hz aktualisiert werden.
- [C-1-17] Das Display MUSS einen Modus mit geringer Nachleuchtdauer mit einer Nachleuchtdauer von maximal 5 Millisekunden unterstützen. Die Nachleuchtdauer wird definiert als die Zeitspanne, in der ein Pixel Licht ausstrahlt.
- [C-1-18] MÜSSEN Bluetooth 4.2 und die Bluetooth LE-Datenlängenerweiterung Abschnitt 7.4.3 unterstützen.
- [C-1-19] MÜSSEN den Direct Channel Type für alle folgenden Standardsensortypen unterstützen und korrekt melden:
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-
- [C-SR] Es wird DRINGEND empfohlen, den Direktkanaltyp
TYPE_HARDWARE_BUFFER
für alle oben aufgeführten Direktkanaltypen zu unterstützen. - [C-1-21] MÜSSEN die Anforderungen an Gyroskop, Beschleunigungsmesser und Magnetometer für
android.hardware.hifi_sensors
erfüllen, wie in Abschnitt 7.3.9 angegeben. - [C-SR] Es wird DRINGEND EMPFOHLEN, die
android.hardware.sensor.hifi_sensors
-Funktion zu unterstützen. - [C-1-22] Die End-to-End-Bewegungs-zu-Photon-Latenz darf maximal 28 Millisekunden betragen.
- [C-SR] Es wird DRINGEND EMPFOHLEN, die End-to-End-Latenz von Bewegung zu Photonen auf maximal 20 Millisekunden zu begrenzen.
- [C-1-23] Das Verhältnis des ersten Frames, also das Verhältnis zwischen der Helligkeit der Pixel im ersten Frame nach einem Übergang von Schwarz nach Weiß und der Helligkeit der weißen Pixel im stabilen Zustand, MUSS mindestens 85 % betragen.
- [C-SR] Es wird DRINGEND EMPFOHLEN, dass das Verhältnis des ersten Frames mindestens 90 % beträgt.
- KANN einen exklusiven Kern für die Anwendung im Vordergrund bereitstellen und KANN die
Process.getExclusiveCores
API unterstützen, um die Anzahl der CPU-Kerne zurückzugeben, die exklusiv für die oberste Anwendung im Vordergrund sind.
Wenn der exklusive Kern unterstützt wird, gilt Folgendes:
- [C-2-1] Es dürfen keine anderen Prozesse im Userspace darauf ausgeführt werden (außer Gerätetreibern, die von der Anwendung verwendet werden). Es dürfen jedoch bei Bedarf einige Kernelprozesse ausgeführt werden.
8. Leistung und Stromverbrauch
Einige Mindestanforderungen an Leistung und Stromverbrauch sind entscheidend für die Nutzerfreundlichkeit und wirken sich auf die Grundannahmen aus, die Entwickler bei der Entwicklung einer App haben.
8.1. Einheitliche Nutzererfahrung
Eine flüssige Benutzeroberfläche kann für den Endnutzer bereitgestellt werden, wenn bestimmte Mindestanforderungen für eine gleichbleibende Framerate und Reaktionszeiten für Anwendungen und Spiele erfüllt werden. Geräteimplementierungen können je nach Gerätetyp messbare Anforderungen an die Latenz der Benutzeroberfläche und die Aufgabenübergabe haben, wie in Abschnitt 2 beschrieben.
8.2. Leistung des Datei-E/A-Zugriffs
Wenn eine gemeinsame Baseline für eine konsistente Dateizugriffsleistung im privaten Datenspeicher der Anwendung (/data
-Partition) bereitgestellt wird, können App-Entwickler angemessene Erwartungen stellen, die ihrem Softwaredesign helfen. Je nach Gerätetyp können für Geräteimplementierungen bestimmte Anforderungen an die folgenden Lese- und Schreibvorgänge gelten, die in Abschnitt 2 beschrieben sind:
- Sequenzielle Schreibleistung Gemessen beim Schreiben einer 256 MB großen Datei mit einem 10 MB großen Schreibpuffer.
- Zufallsschreibleistung Gemessen beim Schreiben einer 256 MB großen Datei mit einem Schreibpuffer von 4 KB.
- Sequenzielle Leseleistung Gemessen beim Lesen einer 256 MB großen Datei mit einem 10 MB großen Schreibpuffer.
- Leistung bei zufälligen Lesezugriffen Gemessen beim Lesen einer 256 MB großen Datei mit einem Schreibpuffer von 4 KB.
8.3. Energiesparmodi
Wenn Geräteimplementierungen Funktionen zur Verbesserung der Geräteenergieverwaltung enthalten, die in AOSP enthalten sind, oder die in AOSP enthaltenen Funktionen erweitern, gelten folgende Anforderungen:
- [C-1-1] Die Trigger-, Wartungs- und Weckalgorithmen sowie die Verwendung der globalen Systemeinstellungen der Energiesparmodi „App Standby“ und „Doze“ DÜRFEN NICHT von der AOSP-Implementierung abweichen.
- [C-1-2] Die Verwendung globaler Einstellungen zur Verwaltung der Drosselung von Jobs, Weckern und Netzwerken für Apps in jedem Bucket für den App-Standby darf NICHT von der AOSP-Implementierung abweichen.
- [C-1-3] Die Anzahl der für den App-Standby verwendeten App-Standby-Buckets DARF NICHT von der AOSP-Implementierung abweichen.
- [C-1-4] MÜSSEN App-Standby-Buckets und Doze wie unter Energieverwaltung beschrieben implementieren.
- [C-1-5]
true
muss fürPowerManager.isPowerSaveMode()
zurückgegeben werden, wenn sich das Gerät im Energiesparmodus befindet. - [C-SR] Es wird DRINGEND EMPFOHLEN, Nutzern die Möglichkeit zu geben, den Energiesparmodus zu aktivieren und zu deaktivieren.
- [C-SR] Es wird DRINGEND empfohlen, Nutzern die Möglichkeit zu geben, alle Apps anzuzeigen, die von den Energiesparmodi „App Standby“ und „Doze“ ausgenommen sind.
Zusätzlich zu den Energiesparmodi können Android-Geräteimplementierungen einen oder alle vier Ruhemodi implementieren, die von der Advanced Configuration and Power Interface (ACPI) definiert sind.
Wenn Geräteimplementierungen die von ACPI definierten S4-Energiesparzustände implementieren, gilt Folgendes:
- [C-1-1] Dieser Status darf nur dann erreicht werden, wenn der Nutzer eine explizite Aktion ausgeführt hat, um das Gerät in den Inaktivitätsstatus zu versetzen (z.B. durch Schließen eines Deckels, der physisch zum Gerät gehört, oder durch Ausschalten eines Fahrzeugs oder Fernsehers) und bevor der Nutzer das Gerät wieder aktiviert (z.B. durch Öffnen des Deckels oder Einschalten des Fahrzeugs oder Fernsehers).
Wenn Geräteimplementierungen die von ACPI definierten S3-Energiesparzustände implementieren, gilt Folgendes:
-
[C-2-1] MUSS C-1-1 oben erfüllen oder MUSS den Status S3 nur dann eingeben, wenn Anwendungen von Drittanbietern die Systemressourcen (z.B. den Bildschirm, die CPU) nicht benötigen.
Umgekehrt muss der S3-Status beendet werden, wenn Anwendungen von Drittanbietern die Systemressourcen benötigen, wie in diesem SDK beschrieben.
Wenn die Drittanbieteranwendungen beispielsweise über
FLAG_KEEP_SCREEN_ON
anfordern, dass der Bildschirm eingeschaltet bleibt, oder überPARTIAL_WAKE_LOCK
anfordern, dass die CPU weiterläuft, darf das Gerät NICHT in den S3-Zustand wechseln, es sei denn, der Nutzer hat wie in C-1-1 beschrieben ausdrücklich eine Aktion ausgeführt, um das Gerät in den Inaktivitätsstatus zu versetzen. Umgekehrt muss das Gerät den S3-Status verlassen, wenn eine Aufgabe, die von Drittanbieter-Apps über JobScheduler implementiert wird, ausgelöst wird oder Firebase Cloud Messaging an Drittanbieter-Apps gesendet wird, es sei denn, der Nutzer hat das Gerät in den Inaktivitätsstatus versetzt. Dies sind keine umfassenden Beispiele. AOSP implementiert umfangreiche Wecksignale, die ein Aufwachen aus diesem Zustand auslösen.
8.4. Stromverbrauchserfassung
Eine genauere Erfassung und Berichterstellung des Energieverbrauchs bietet App-Entwicklern sowohl Anreize als auch Tools, um den Energieverbrauch der App zu optimieren.
Geräteimplementierungen:
- [SR] Es wird dringend empfohlen, ein Energieprofil pro Komponente anzugeben, das den aktuellen Verbrauchswert für jede Hardwarekomponente und den ungefähren Akkuverbrauch definiert, der durch die Komponenten im Laufe der Zeit verursacht wird, wie auf der Website des Android Open Source Project dokumentiert.
- [SR] Es wird DRINGEND EMPFOHLEN, alle Werte für den Energieverbrauch in Milliamperestunden (mAh) anzugeben.
- [SR] Es wird dringend empfohlen, die CPU-Stromaufnahme pro UID des Prozesses zu erfassen. Das Open-Source-Projekt für Android erfüllt die Anforderung durch die Implementierung des
uid_cputime
-Kernelmoduls. - [SR] Es wird dringend empfohlen, diese Stromnutzung über den Shell-Befehl
adb shell dumpsys batterystats
für den App-Entwickler verfügbar zu machen. - SOLLTE der Hardwarekomponente selbst zugeordnet werden, wenn die Stromaufnahme der Hardwarekomponente keiner Anwendung zugeordnet werden kann.
8.5. Konstante Leistung
Bei leistungsstarken, lang laufenden Apps kann die Leistung stark schwanken, entweder aufgrund anderer Apps, die im Hintergrund ausgeführt werden, oder aufgrund der CPU-Drosselung aufgrund von Temperaturlimits. Android bietet programmatische Schnittstellen, mit denen die führende App im Vordergrund das System bitten kann, die Ressourcenzuweisung zu optimieren, um solche Schwankungen zu beheben, sofern das Gerät dies unterstützt.
Geräteimplementierungen:
-
[C-0-1] MÜSSEN die Unterstützung des Modus für nachhaltige Leistung korrekt über die API-Methode
PowerManager.isSustainedPerformanceModeSupported()
melden. -
MÜSSEN den Modus für nachhaltige Leistung unterstützen.
Wenn Geräteimplementierungen den Modus für nachhaltige Leistung unterstützen, gilt Folgendes:
- [C-1-1] Die führende App im Vordergrund MUSS mindestens 30 Minuten lang eine gleichbleibende Leistung bieten, wenn die App dies anfordert.
- [C-1-2] MUSS die
Window.setSustainedPerformanceMode()
API und andere zugehörige APIs einhalten.
Wenn Geräteimplementierungen zwei oder mehr CPU-Kerne umfassen, haben sie folgende Vorteile:
- Es sollte mindestens einen exklusiven Kern geben, der von der führenden Anwendung im Vordergrund reserviert werden kann.
Wenn die Geräteimplementierungen die Reservierung eines exklusiven Kerns für die führende Anwendung im Vordergrund unterstützen, gilt Folgendes:
- [C-2-1] MÜSSEN über die API-Methode
Process.getExclusiveCores()
die ID-Nummern der exklusiven Kerne melden, die von der führenden Anwendung im Vordergrund reserviert werden können. - [C-2-2] Es dürfen keine Userspace-Prozesse außer den von der Anwendung verwendeten Gerätetreibern auf den exklusiven Kernen ausgeführt werden. Es können jedoch bei Bedarf einige Kernelprozesse ausgeführt werden.
Wenn Geräteimplementierungen keinen exklusiven Kern unterstützen, gilt Folgendes:
- [C-3-1] MUSS über die 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 im Referenzdokument zu Sicherheit und Berechtigungen in den APIs in der Android-Entwicklerdokumentation definiert.
-
[C-0-2] Die Installation selbst signierter Anwendungen MUSS unterstützt werden, ohne dass zusätzliche Berechtigungen/Zertifikate von Dritten/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] MÜSSEN das Android-Berechtigungsmodell gemäß der Definition in der Android-Entwicklerdokumentation unterstützen. Insbesondere MÜSSEN alle Berechtigungen erzwungen werden, die in der SDK-Dokumentation beschrieben sind. Keine Berechtigungen dürfen ausgelassen, geändert oder ignoriert werden.
-
Es dürfen zusätzliche Berechtigungen hinzugefügt werden, sofern die neuen Berechtigungs-ID-Strings nicht zum Namespace
android.\*
gehören. -
[C-0-2] Berechtigungen mit einer
protectionLevel
vonPROTECTION_FLAG_PRIVILEGED
DÜRFEN nur Apps gewährt werden, die im privilegierten Pfad bzw. den privilegierten Pfaden des System-Images vorinstalliert sind und in den explizit auf die Zulassungsliste gesetzten Berechtigungen für jede App enthalten sind. Die AOSP-Implementierung erfüllt diese Anforderung, indem sie die auf die Zulassungsliste gesetzten Berechtigungen für jede App aus den Dateien im Pfadetc/permissions/
liest und den Pfadsystem/priv-app
als privilegierten Pfad verwendet.
Berechtigungen mit dem Schutzniveau „Schädlich“ sind Laufzeitberechtigungen. Anwendungen mit targetSdkVersion
> 22 fordern sie zur Laufzeit an.
Geräteimplementierungen:
- [C-0-3] Es MUSS eine spezielle Benutzeroberfläche geben, über die der Nutzer entscheiden kann, ob er die angeforderten Laufzeitberechtigungen gewähren möchte. Außerdem muss eine Benutzeroberfläche zum Verwalten der Laufzeitberechtigungen vorhanden sein.
- [C-0-4] Es MUSS genau eine Implementierung der beiden Benutzeroberflächen geben.
- [C-0-5] Vorinstallierten Apps DÜRFEN KEINE Laufzeitberechtigungen gewährt werden, es sei denn:
- 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] Die Berechtigung
android.permission.RECOVER_KEYSTORE
darf nur System-Apps gewährt werden, die einen ordnungsgemäß gesicherten Wiederherstellungs-Agenten registrieren. Ein ordnungsgemäß gesicherter Wiederherstellungsagent wird als On-Device-Softwareagent definiert, der mit einem externen Remote-Speicher synchronisiert wird, der mit sicherer Hardware ausgestattet ist, deren Schutz dem im Google Cloud Key Vault-Dienst beschriebenen Schutz entspricht oder darüber hinausgeht, um Brute-Force-Angriffe auf den Wissensfaktor des Sperrbildschirms zu verhindern.
Wenn Geräteimplementierungen eine vorinstallierte App enthalten oder Drittanbieter-Apps den Zugriff auf die Nutzungsstatistiken erlauben sollen, müssen folgende Voraussetzungen erfüllt sein:
- [SR] Es wird DRINGEND empfohlen, einen nutzerzugänglichen Mechanismus bereitzustellen, um den Zugriff auf die Nutzungsstatistiken als Reaktion auf die
android.settings.ACTION_USAGE_ACCESS_SETTINGS
-Intention für Apps zu gewähren oder zu widerrufen, die die Berechtigungandroid.permission.PACKAGE_USAGE_STATS
angeben.
Wenn bei der Geräteimplementierung der Zugriff auf die Nutzungsstatistiken für alle Apps, einschließlich vorinstallierter Apps, verhindert werden soll, müssen folgende Voraussetzungen erfüllt sein:
- [C-1-1] Es MUSS weiterhin eine Aktivität geben, die das Intent-Muster
android.settings.ACTION_USAGE_ACCESS_SETTINGS
verarbeitet, aber es MUSS als No-Op implementiert werden, d. h. es muss dasselbe Verhalten haben wie bei der Ablehnung des Zugriffs für den Nutzer.
9.2. UID und Prozessisolierung
Geräteimplementierungen:
- [C-0-1] MUSS das Android-Sandbox-Modell für Anwendungen unterstützen, bei dem jede Anwendung als eindeutige UID im Unix-Stil und in einem separaten Prozess ausgeführt wird.
- [C-0-2] MUSS das Ausführen mehrerer Anwendungen mit derselben Linux-Nutzer-ID unterstützen, sofern die Anwendungen wie in der Referenz zu Sicherheit und Berechtigungen definiert korrekt signiert und erstellt sind.
9.3. Dateisystemberechtigungen
Geräteimplementierungen:
- [C-0-1] MÜSSEN das Modell für Berechtigungen für den Dateizugriff unter Android gemäß der Referenz zu Sicherheit und Berechtigungen unterstützen.
9.4. Alternative Ausführungsumgebungen
Geräteimplementierungen MÜSSEN das Android-Sicherheits- und Berechtigungsmodell einhalten, auch wenn sie Laufzeitumgebungen enthalten, in denen Anwendungen mit einer anderen Software oder Technologie als dem Dalvik-Ausführformat oder nativem Code ausgeführt werden. Mit anderen Worten:
-
[C-0-1] Alternative Laufzeiten MÜSSEN selbst Android-Anwendungen sein und dem standardmäßigen Android-Sicherheitsmodell entsprechen, wie in Abschnitt 9 beschrieben.
-
[C-0-2] Alternanten dürfen NICHT über den Mechanismus <
uses-permission
> Zugriff auf Ressourcen erhalten, die durch Berechtigungen geschützt sind, die nicht in derAndroidManifest.xml
-Datei der Laufzeit angefordert wurden. -
[C-0-3] Alternative Laufzeiten DÜRFEN Anwendungen NICHT die Nutzung von Funktionen erlauben, 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. Installierte Anwendungen, die eine alternative Laufzeit verwenden, DÜRFEN die Sandbox einer anderen auf dem Gerät installierten App NICHT wiederverwenden, es sei denn, dies geschieht über die standardmäßigen Android-Mechanismen für die gemeinsame Nutzer-ID und das Signaturzertifikat.
-
[C-0-5] Alternative Laufzeiten DÜRFEN NICHT mit den Sandboxes anderer Android-Anwendungen gestartet werden, ihnen NICHT Zugriff auf diese Sandboxes gewähren und ihnen NICHT Zugriff auf diese Sandboxes gewährt werden.
-
[C-0-6] Alternative Laufzeiten DÜRFEN NICHT mit Berechtigungen des Superusers (root) oder einer anderen Nutzer-ID gestartet werden, ihnen NICHT Berechtigungen des Superusers (root) oder einer anderen Nutzer-ID gewährt werden oder anderen Anwendungen Berechtigungen des Superusers (root) oder einer anderen Nutzer-ID gewähren.
-
[C-0-7] Wenn die
.apk
-Dateien der alternativen Laufzeiten im System-Image der Geräteimplementierungen enthalten sind, MÜSSEN sie mit einem anderen Schlüssel signiert werden als der Schlüssel, der zum Signieren anderer Anwendungen verwendet wurde, die in den Geräteimplementierungen enthalten sind. -
[C-0-8] Bei der Installation von Anwendungen MÜSSEN alternative Laufzeiten die Nutzereinwilligung für die von der Anwendung verwendeten Android-Berechtigungen einholen.
-
[C-0-9] Wenn eine Anwendung eine Geräteressource verwenden muss, für die es eine entsprechende Android-Berechtigung gibt (z. B. Kamera, GPS usw.), MUSS die alternative Laufzeit den Nutzer darüber informieren, dass die Anwendung auf diese Ressource zugreifen kann.
-
[C-0-10] Wenn die Laufzeitumgebung die Anwendungsfunktionen nicht auf diese Weise aufzeichnet, MUSS die Laufzeitumgebung bei der Installation einer Anwendung, die diese Laufzeit verwendet, alle Berechtigungen auflisten, die der Laufzeit selbst zugewiesen sind.
-
Alternative Laufzeiten MÜSSEN Apps über die
PackageManager
in separaten Android-Sandboxes (z. B. Linux-Nutzer-IDs) 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 unterstützt mehrere Nutzer und bietet eine vollständige Nutzerisolierung.
- Bei Geräteimplementierungen kann die Mehrfachnutzung aktiviert werden, sollte aber nicht, wenn Wechseldatenträger als primärer externer Speicher verwendet werden.
Wenn Geräteimplementierungen mehrere Nutzer umfassen, gilt Folgendes:
- [C-1-1] MUSS die folgenden Anforderungen im Zusammenhang mit der 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] Es MUSS für jede Nutzerinstanz separate und isolierte Verzeichnisse für den gemeinsamen Anwendungsspeicher (auch
/sdcard
genannt) geben. - [C-1-4] Es MUSS sichergestellt sein, dass Anwendungen, die einem bestimmten Nutzer gehören und in seinem Namen ausgeführt werden, die Dateien anderer Nutzer nicht auflisten, lesen oder darauf schreiben können, auch wenn die Daten beider Nutzer auf demselben Volume oder Dateisystem gespeichert sind.
- [C-1-5] Der Inhalt der SD-Karte muss verschlüsselt werden, wenn die Mehrfachnutzung aktiviert ist, und zwar mit einem Schlüssel, der nur auf nicht entfernbaren Medien gespeichert ist, auf die nur das System zugreifen kann, wenn die Geräteimplementierungen für die externen Speicher-APIs nicht entfernbare Medien verwenden. Da die Medien dadurch für einen Host-PC unlesbar werden, müssen Geräteimplementierungen zu MTP oder einem ähnlichen System wechseln, um Host-PCs Zugriff auf die Daten des aktuellen Nutzers zu gewähren.
Wenn Geräteimplementierungen mehrere Nutzer umfassen und das android.hardware.telephony
-Funktionsflag nicht deklariert wird, gilt Folgendes:
- [C-2-1] MUSS eingeschränkte Profile unterstützen, eine Funktion, mit der Geräteeigentümer zusätzliche Nutzer und deren Funktionen auf dem Gerät verwalten können. Mit eingeschränkten Profilen können Geräteeigentümer schnell separate Umgebungen für zusätzliche Nutzer einrichten und detailliertere Einschränkungen in den Apps verwalten, die in diesen Umgebungen verfügbar sind.
Wenn Geräteimplementierungen mehrere Nutzer umfassen und das android.hardware.telephony
-Funktionsflag deklarieren, gilt Folgendes:
- [C-3-1] Die Funktion für eingeschränkte Profile DARF NICHT unterstützt werden, muss aber der AOSP-Implementierung der Steuerelemente entsprechen, um anderen Nutzern den Zugriff auf Sprachanrufe und SMS zu ermöglichen oder zu deaktivieren.
9.6. Warnung zu Premium-SMS
Android unterstützt die Warnung von Nutzern vor jeder ausgehenden Premium-SMS. Premium-SMS sind Nachrichten, die an einen bei einem Mobilfunkanbieter registrierten Dienst gesendet werden und für den Nutzer möglicherweise kostenpflichtig sind.
Wenn Geräteimplementierungen android.hardware.telephony
unterstützen, gilt Folgendes:
- [C-1-1] Nutzer MÜSSEN vor dem Senden einer SMS an Nummern gewarnt werden, die durch reguläre Ausdrücke identifiziert werden, die in der Datei
/data/misc/sms/codes.xml
auf dem Gerät definiert sind. Das Upstream-Android Open Source Project bietet eine Implementierung, die diese Anforderung erfüllt.
9.7. Sicherheitsfunktionen
Geräteimplementierungen MÜSSEN die Einhaltung der Sicherheitsfunktionen sowohl im Kernel als auch auf der Plattform wie unten beschrieben sicherstellen.
Die Android-Sandbox umfasst Funktionen, die das MAC-System (Mandatory Access Control) von Security-Enhanced Linux (SELinux), das seccomp-Sandboxing und andere Sicherheitsfunktionen im Linux-Kernel nutzen. Geräteimplementierungen:
- [C-0-1] Die Kompatibilität mit vorhandenen Anwendungen MUSS erhalten bleiben, auch wenn SELinux oder andere Sicherheitsfunktionen unterhalb des Android-Frameworks implementiert sind.
- [C-0-2] Es darf KEINE sichtbare Benutzeroberfläche geben, wenn ein Sicherheitsverstoß erkannt und durch die Sicherheitsfunktion, die unter dem Android-Framework implementiert ist, erfolgreich blockiert wird. Es kann jedoch eine sichtbare Benutzeroberfläche geben, wenn ein nicht blockierter Sicherheitsverstoß auftritt, der zu einer erfolgreichen Ausnutzung führt.
- [C-0-3] SELinux oder andere Sicherheitsfunktionen, die unter dem Android-Framework implementiert sind, DÜRFEN NICHT vom Nutzer oder App-Entwickler konfiguriert werden.
- [C-0-4] Es DARF nicht möglich sein, dass eine Anwendung, die sich über eine API (z. B. eine Device Administration API) auf eine andere Anwendung auswirken kann, eine Richtlinie konfiguriert, die die Kompatibilität beeinträchtigt.
- [C-0-5] Das Media-Framework MUSS in mehrere Prozesse unterteilt werden, damit der Zugriff für jeden Prozess eingegrenzt werden kann, wie auf der Website des Android Open Source Project beschrieben.
- [C-0-6] Es MUSS ein Kernel-Sandboxing-Mechanismus für Anwendungen implementiert werden, der das Filtern von Systemaufrufen mithilfe einer konfigurierbaren Richtlinie aus mehrstufigen Programmen ermöglicht. Das Upstream-Android Open Source Project erfüllt diese Anforderung durch die Aktivierung von seccomp-BPF mit Threadgruppensynchronisierung (TSYNC), wie im Abschnitt „Kernel Configuration“ (Kernelkonfiguration) von source.android.com beschrieben.
Kernelintegrität und Selbstschutzfunktionen sind ein wesentlicher Bestandteil der Android-Sicherheit. Geräteimplementierungen:
- [C-0-7] MÜSSEN Schutzmaßnahmen gegen Buffer Overflows im Kernelstack implementieren (z.B.
CONFIG_CC_STACKPROTECTOR_STRONG
). - [C-0-8] Es MUSS ein strenger Kernel-Speicherschutz implementiert werden, bei dem ausführbarer Code nur lesbar, schreibgeschützte Daten nicht ausführbar und nicht beschreibbar und beschreibbare Daten nicht ausführbar sind (z.B.
CONFIG_DEBUG_RODATA
oderCONFIG_STRICT_KERNEL_RWX
). - [C-0-9] Auf Geräten, die ursprünglich mit API-Level 28 oder höher ausgeliefert wurden, MÜSSEN statische und dynamische Grenzwertprüfungen für die Objektgröße von Kopien zwischen Userspace und Kernelspace (z.B.
CONFIG_HARDENED_USERCOPY
) implementiert werden. - [C-0-10] DÜRFEN KEIN User-Space-Speicher ausführen, wenn sie im Kernelmodus ausgeführt werden (z.B. Hardware-PXN oder über
CONFIG_CPU_SW_DOMAIN_PAN
oderCONFIG_ARM64_SW_TTBR0_PAN
emuliert) auf Geräten, die ursprünglich mit API-Level 28 oder höher ausgeliefert wurden. - [C-0-11] Es darf KEIN Nutzerspeicher im Kernel außerhalb der normalen APIs für den Usercopy-Zugriff (z.B. Hardware-PAN oder über
CONFIG_CPU_SW_DOMAIN_PAN
oderCONFIG_ARM64_SW_TTBR0_PAN
emuliert) auf Geräten gelesen oder geschrieben werden, die ursprünglich mit API-Level 28 oder höher ausgeliefert wurden. - [C-0-12] Auf allen Geräten, die ursprünglich mit API-Ebene 28 oder höher ausgeliefert wurden (z.B.
CONFIG_PAGE_TABLE_ISOLATION
oder CONFIG_UNMAP_KERNEL_AT_EL0), MUSS die Kernel-Seitentabellenisolation implementiert sein. - [SR] Es wird DRINGEND EMPFOHLEN, Kerneldaten, die nur während der Initialisierung geschrieben werden, nach der Initialisierung als schreibgeschützt zu markieren (z.B.
__ro_after_init
). - [SR] Es wird DRINGEND EMPFOHLEN, das Layout des Kernelcodes und des Arbeitsspeichers zufällig zu generieren und Sicherheitslücken zu vermeiden, die die Zufallsgenerierung beeinträchtigen würden (z.B.
CONFIG_RANDOMIZE_BASE
mit Bootloader-Entropie über/chosen/kaslr-seed Device Tree node
oderEFI_RNG_PROTOCOL
).
Wenn Geräteimplementierungen einen Linux-Kernel verwenden, gilt Folgendes:
- [C-1-1] SELinux MUSS implementiert sein.
- [C-1-2] SELinux MUSS auf den globalen Erzwingungsmodus gesetzt werden.
- [C-1-3] Alle Domains MÜSSEN im Erzwingungsmodus konfiguriert werden. Domains im permissiven Modus sind nicht zulässig, einschließlich geräte-/anbieterspezifischer Domains.
- [C-1-4] Die im Ordner „system/sepolicy“ des Upstream-Android Open Source Project (AOSP) enthaltenen Neverallow-Regeln DÜRFEN NICHT geändert, weggelassen oder ersetzt werden. Die Richtlinie MUSS mit allen vorhandenen Neverallow-Regeln kompiliert werden, sowohl für AOSP-SELinux-Domains als auch für geräte-/anbieterspezifische Domains.
- [C-1-5] Drittanbieteranwendungen, die auf API-Ebene 28 oder höher ausgeführt werden, MÜSSEN in SELinux-Sandboxes pro Anwendung mit SELinux-Einschränkungen pro Anwendung im privaten Datenverzeichnis der jeweiligen Anwendung ausgeführt werden.
- MÜSSEN die Standard-SELinux-Richtlinie im Ordner „system/sepolicy“ des Upstream-Android-Open-Source-Projekts beibehalten und diese Richtlinie nur für die eigene gerätespezifische Konfiguration ergänzen.
Wenn Geräteimplementierungen bereits mit einer früheren Android-Version eingeführt wurden und die Anforderungen [C-1-1] und [C-1-5] nicht durch ein Systemsoftwareupdate erfüllt werden können, KÖNNEN sie von diesen Anforderungen ausgenommen werden.
Wenn bei Geräteimplementierungen ein anderer Kernel als Linux verwendet wird, gilt Folgendes:
- [C-2-1] Es MUSS ein System zur obligatorischen Zugriffssteuerung verwendet werden, das SELinux entspricht.
Android bietet mehrere Funktionen für die abgestufte Sicherheit, die für die Gerätesicherheit unerlässlich sind.
Geräteimplementierungen:
- [C-SR] Es wird DRINGEND empfohlen, die Control-Flow Integrity (CFI) oder die Bereinigung von Ganzzahlüberläufen (IntSan) bei Komponenten, bei denen diese Funktionen aktiviert sind, NICHT zu deaktivieren.
- [C-SR] Es wird DRINGEND EMPFOHLEN, sowohl CFI als auch IntSan für alle zusätzlichen sicherheitssensiblen Nutzerbereichskomponenten zu aktivieren, wie unter CFI und IntSan erläutert.
9.8. Datenschutz
9.8.1. Nutzungsverlauf
Android speichert den Verlauf der Auswahlen des Nutzers und verwaltet diesen Verlauf über UsageStatsManager.
Geräteimplementierungen:
- [C-0-1] Der Nutzerverlauf muss für einen angemessenen Zeitraum aufbewahrt werden.
- [SR] Es wird DRINGEND EMPFOHLEN, die standardmäßig in der AOSP-Implementierung konfigurierte Aufbewahrungsdauer von 14 Tagen beizubehalten.
Android speichert die Systemereignisse mit den StatsLog
-IDs und verwaltet diesen Verlauf über die StatsManager
- und die IncidentManager
-System-API.
Geräteimplementierungen:
- [C-0-2] Der von der System API-Klasse
IncidentManager
erstellte Vorfallbericht DARF nur die mitDEST_AUTOMATIC
gekennzeichneten Felder enthalten. - [C-0-3] Die Systemereignis-IDs dürfen nicht verwendet werden, um andere Ereignisse als die in den SDK-Dokumenten von
StatsLog
beschriebenen zu erfassen. Wenn zusätzliche Systemereignisse protokolliert werden, wird ggf. eine andere Atom-ID im Bereich zwischen 100.000 und 200.000 verwendet.
9.8.2. Aufnahme
Geräteimplementierungen:
- [C-0-1] Softwarekomponenten dürfen NICHT vorinstalliert oder ohne die Zustimmung des Nutzers oder klare Benachrichtigungen über laufende Prozesse verteilt werden, die personenbezogene Daten des Nutzers (z.B. Tastenanschläge, auf dem Bildschirm angezeigter Text) vom Gerät senden.
Wenn Geräteimplementierungen Funktionen im System enthalten, die den auf dem Bildschirm angezeigten Inhalt und/oder den auf dem Gerät wiedergegebenen Audiostream erfassen, gilt Folgendes:
- [C-1-1] Der Nutzer muss ständig benachrichtigt werden, wenn diese Funktion aktiviert ist und aktiv Daten erfasst oder aufzeichnet.
Wenn Geräteimplementierungen eine standardmäßig aktivierte Komponente enthalten, die Umgebungsaudio aufnehmen kann, um nützliche Informationen über den Kontext des Nutzers zu gewinnen, gilt Folgendes:
- [C-2-1] Die aufgezeichneten Roh-Audiodaten oder ein Format, das in das ursprüngliche Audioformat oder ein ähnliches Format umgewandelt werden kann, DÜRFEN NICHT im dauerhaften Gerätespeicher gespeichert oder vom Gerät übertragen werden, es sei denn, der Nutzer hat ausdrücklich zugestimmt.
9.8.3. Konnektivität
Wenn Geräteimplementierungen einen USB-Anschluss mit Unterstützung des USB-Peripheriemodus haben, gilt Folgendes:
- [C-1-1] Es MUSS eine Benutzeroberfläche angezeigt werden, auf der die Einwilligung des Nutzers eingeholt wird, bevor der Zugriff auf den Inhalt des freigegebenen Speichers über den USB-Anschluss gewährt wird.
9.8.4. Netzwerkverkehr
Geräteimplementierungen:
- [C-0-1] MÜSSEN dieselben Stammzertifikate für den vom System als vertrauenswürdig eingestuften CA-Speicher (Zertifizierungsstelle) vorinstalliert werden, wie sie im Upstream-Android Open Source Project zur Verfügung gestellt werden.
- [C-0-2] MÜSSEN mit einem leeren Nutzer-Stammzertifizierungsstellenspeicher ausgeliefert werden.
- [C-0-3] MÜSSEN dem Nutzer eine Warnung anzeigen, dass der Netzwerkverkehr möglicherweise überwacht wird, wenn eine Nutzer-Root-Zertifizierungsstelle hinzugefügt wird.
Wenn der Geräteverkehr über ein VPN geleitet wird, gilt für Geräteimplementierungen Folgendes:
- [C-1-1] Es MUSS dem Nutzer eine Warnung angezeigt werden, die entweder Folgendes angibt:
- Dieser Netzwerkverkehr kann überwacht werden.
- Dieser Netzwerkverkehr wird über die VPN-Anwendung geleitet, die das VPN bereitstellt.
Wenn Geräteimplementierungen einen Mechanismus haben, der standardmäßig aktiviert ist und Netzwerkdatenverkehr über einen Proxyserver oder ein VPN-Gateway leitet (z. B. das Vorladen eines VPN-Dienstes mit android.permission.CONTROL_VPN
), gilt Folgendes:
- [C-2-1] Es MUSS die Einwilligung des Nutzers eingeholt werden, bevor dieser Mechanismus aktiviert wird, es sei denn, das VPN wird vom Device Policy Controller über die
DevicePolicyManager.setAlwaysOnVpnPackage()
aktiviert. In diesem Fall muss der Nutzer keine separate Einwilligung erteilen, sondern MUSS nur benachrichtigt werden.
Wenn bei Geräteimplementierungen eine Nutzerfunktion zum Aktivieren der Funktion „Durchgehend aktives VPN“ einer VPN-App eines Drittanbieters implementiert ist, müssen folgende Anforderungen erfüllt sein:
- [C-3-1] Diese Nutzerfunktion für Apps, die keinen durchgehend aktiven VPN-Dienst unterstützen, MUSS in der Datei
AndroidManifest.xml
deaktiviert werden. Dazu muss das AttributSERVICE_META_DATA_SUPPORTS_ALWAYS_ON
auffalse
festgelegt werden.
9.9. Datenspeicherverschlüsselung
Wenn die AES-Kryptoleistung (Advanced Encryption Standard), gemessen mit der leistungsstärksten AES-Technologie, die auf dem Gerät verfügbar ist (z.B. die ARM-Kryptografieerweiterungen), über 50 MiB/s liegt, gilt für Geräteimplementierungen Folgendes:
- [C-1-1] MUSS die Datenspeicherverschlüsselung der privaten Daten der Anwendung (
/data
-Partition) sowie der freigegebenen Speicherpartition der Anwendung (/sdcard
-Partition) unterstützen, wenn es sich um einen dauerhaften, nicht entfernbaren Teil des Geräts handelt, mit Ausnahme von Geräteimplementierungen, die in der Regel gemeinsam genutzt werden (z.B. Fernseher). - [C-1-2] Die Datenspeicherverschlüsselung MUSS standardmäßig aktiviert sein, wenn der Nutzer die Ersteinrichtung abgeschlossen hat, mit Ausnahme von Geräteimplementierungen, die in der Regel gemeinsam genutzt werden (z.B. Fernseher).
Wenn die AES-Kryptoleistung 50 MiB/s oder weniger beträgt, KÖNNEN Geräteimplementierungen Adiantum-XChaCha12-AES anstelle der folgenden AES-Formen verwenden: AES-256-XTS in Abschnitt 9.9.2 [C-1-5]; AES-256 im CBS-CTS-Modus in Abschnitt 9.9.2 [C-1-6]; AES in Abschnitt 9.9.3 [C-1-1]; AES in Abschnitt 9.9.3 [C-1-3].
Wenn Geräteimplementierungen bereits mit einer früheren Android-Version eingeführt wurden und die Anforderung nicht durch ein Systemsoftwareupdate erfüllt werden kann, können sie von den oben genannten Anforderungen AUSGESCHLOSSEN werden.
Geräteimplementierungen:
- MÜSSEN die oben genannte Anforderung an die Datenspeicherverschlüsselung durch Implementierung der dateibasierten Verschlüsselung (File Based Encryption, FBE) erfüllen.
9.9.1. Direct Boot
Geräteimplementierungen:
-
[C-0-1] Die APIs für den Direktstartmodus MÜSSEN implementiert werden, auch wenn sie die Speicherverschlüsselung nicht unterstützen.
-
[C-0-2] Die Intents
ACTION_LOCKED_BOOT_COMPLETED
undACTION_USER_UNLOCKED
MÜSSEN weiterhin gesendet werden, um Direct Boot-kompatiblen Anwendungen zu signalisieren, dass Speicherorte mit Geräteverschlüsselung (Device Encrypted, DE) und mit Anmeldedaten verschlüsselt (Credential Encrypted, CE) für den Nutzer verfügbar sind.
9.9.2. Dateibasierte Verschlüsselung
Wenn Geräteimplementierungen FBE unterstützen, gilt Folgendes:
- [C-1-1] MUSS ohne Aufforderung des Nutzers zur Eingabe von Anmeldedaten starten und Direct Boot-kompatiblen Apps den Zugriff auf den verschlüsselten Gerätespeicher (Device Encrypted, DE) nach der Ausstrahlung der
ACTION_LOCKED_BOOT_COMPLETED
-Nachricht erlauben. - [C-1-2] Der Zugriff auf den verschlüsselten Anmeldedatenspeicher (Credential Encrypted, CE) DARF nur gewährt werden, nachdem der Nutzer das Gerät durch Eingabe seiner Anmeldedaten (z. B. Sicherheitscode, PIN, Muster oder Fingerabdruck) entsperrt und die
ACTION_USER_UNLOCKED
-Nachricht gesendet wurde. - [C-1-3] Es DARF KEINE Methode zum Entsperren des durch die Zertifizierungsstelle geschützten Speichers ohne die vom Nutzer bereitgestellten Anmeldedaten oder einen registrierten Treuhänderschlüssel geben.
- [C-1-4] MÜSSEN den verifizierten Boot unterstützen und dafür sorgen, dass DE-Schlüssel kryptografisch an die Root of Trust-Hardware des Geräts gebunden sind.
- [C-1-5] MUSS die Verschlüsselung von Dateiinhalten mit AES-256-XTS unterstützen. AES-256-XTS bezieht sich auf den Advanced Encryption Standard mit einer Schlüssellänge von 256 Bit, der im XTS-Modus verwendet wird. Die volle Länge des XTS-Schlüssels beträgt 512 Bit.
-
[C-1-6] MUSS die Verschlüsselung von Dateinamen mit AES-256 im CBC-CTS-Modus unterstützen.
-
Die Schlüssel, die die CE- und DE-Speicherbereiche schützen:
-
[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 Sperrbildschirms eines Nutzers 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 unterschiedlich sein. Das bedeutet, dass der CE- oder DE-Schlüssel eines Nutzers nicht mit dem CE- oder DE-Schlüssel eines anderen Nutzers übereinstimmen darf.
-
[C-1-11] Es MÜSSEN standardmäßig die obligatorisch unterstützten Chiffren, Schlüssellängen und Modi verwendet werden.
-
[C-SR] Es wird DRINGEND EMPFOHLEN, Dateisystemmetadaten wie Dateigrößen, Inhaberschaft, 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.
-
Vorinstallierte wichtige Apps (z.B. Wecker, Telefon, Messenger) MÜSSEN Direct Boot unterstützen.
- KANN alternative Chiffren, Schlüssellängen und Modi für die Verschlüsselung von Dateiinhalten und Dateinamen unterstützen.
Das Upstream-Android-Open-Source-Projekt bietet eine bevorzugte Implementierung dieser Funktion, die auf der Ext4-Verschlüsselungsfunktion des Linux-Kernels basiert.
9.9.3. Datenträgervollverschlüsselung
Wenn Geräteimplementierungen die Datenträgervollverschlüsselung (Full Disk Encryption, FDE) unterstützen, gilt Folgendes:
- [C-1-1] AES MUSS in einem Modus verwendet werden, der für die Speicherung vorgesehen ist (z. B. XTS oder CBC-ESSIV) und mit einer Schlüssellänge von mindestens 128 Bit.
- [C-1-2] Es MUSS ein Standardpasscode zum Verpacken des Verschlüsselungsschlüssels verwendet werden und der Verschlüsselungsschlüssel darf zu keinem Zeitpunkt unverschlüsselt auf den Speicher geschrieben werden.
- [C-1-3] Der Verschlüsselungsschlüssel MUSS standardmäßig mit AES verschlüsselt werden, es sei denn, der Nutzer deaktiviert diese Funktion ausdrücklich. Dies gilt nicht, wenn der Schlüssel aktiv verwendet wird. Die Anmeldedaten für den Sperrbildschirm müssen mit einem langsamen Stretching-Algorithmus (z. B. PBKDF2 oder scrypt) gestreckt werden.
- [C-1-4] Der oben genannte Standardalgorithmus zum Passwort-Stretching MUSS kryptografisch an diesen Schlüsselspeicher gebunden sein, wenn der Nutzer keine Anmeldedaten für den Sperrbildschirm angegeben oder die Verwendung des Sicherheitscodes für die Verschlüsselung deaktiviert hat und das Gerät einen hardwaregestützten Schlüsselspeicher bietet.
- [C-1-5] Der Verschlüsselungsschlüssel darf NICHT vom Gerät gesendet werden, auch nicht, wenn er mit dem Sicherheitscode des Nutzers und/oder einem hardwaregebundenen Schlüssel verpackt ist.
Das Upstream-Android-Open-Source-Projekt bietet eine bevorzugte Implementierung dieser Funktion, die auf der Linux-Kernel-Funktion dm-crypt basiert.
9.10. Geräteintegrität
Die folgenden Anforderungen sorgen für Transparenz beim Status der Geräteintegrität. Geräteimplementierungen:
-
[C-0-1] MÜSSEN über die System API-Methode
PersistentDataBlockManager.getFlashLockState()
korrekt melden, ob der Bootloader-Status das Flashen des System-Images zulässt. Der StatusFLASH_LOCK_UNKNOWN
ist für Geräteimplementierungen reserviert, die von einer früheren Android-Version umgestellt werden, in der diese neue System-API-Methode nicht vorhanden war. -
[C-0-2] MÜSSEN den Bootmodus mit Verifikation zur Geräteintegrität unterstützen.
Wenn Geräteimplementierungen bereits ohne Unterstützung des Bootmodus mit Verifikation in einer früheren Android-Version eingeführt wurden und diese Funktion nicht durch ein Systemsoftwareupdate hinzugefügt werden kann, KÖNNEN sie von der Anforderung ausgenommen werden.
Der verifizierte Bootmodus ist eine Funktion, die die Integrität der Gerätesoftware garantiert. Wenn die Geräteimplementierung die Funktion unterstützt, gilt Folgendes:
- [C-1-1] MUSS das Plattform-Funktions-Flag
android.software.verified_boot
deklarieren. - [C-1-2] Die Überprüfung muss bei jeder Bootreihenfolge erfolgen.
- [C-1-3] Die Überprüfung MUSS mit einem unveränderlichen Hardwareschlüssel beginnen, der der Root of Trust ist, und bis zur Systempartition reichen.
- [C-1-4] MÜSSEN alle Phasen der Überprüfung implementieren, um die Integrität und Authentizität aller Bytes in der nächsten Phase zu prüfen, bevor der Code in der nächsten Phase ausgeführt wird.
- [C-1-5] Es MÜSSEN Überprüfungsalgorithmen verwendet werden, die so stark sind wie die aktuellen Empfehlungen des NIST für Hash-Algorithmen (SHA-256) und öffentliche Schlüsselgrößen (RSA-2048).
- [C-1-6] Der Start darf NICHT abgeschlossen werden, wenn die Systemüberprüfung fehlschlägt, es sei denn, der Nutzer stimmt dem Startversuch zu. In diesem Fall dürfen die Daten aus nicht überprüften Speicherblöcken NICHT verwendet werden.
- [C-1-7] Es darf NICHT zulässig sein, dass bestätigte Partitionen auf dem Gerät geändert werden, es sei denn, der Nutzer hat den Bootloader ausdrücklich entsperrt.
- [C-SR] Wenn sich auf dem Gerät mehrere diskrete Chips befinden (z.B. Funkschnittstelle, spezieller Bildprozessor), wird DRINGEND EMPFOHLEN, beim Starten jede Phase des Bootvorgangs für jeden dieser Chips zu überprüfen.
- [C-1-8] Es MUSS ein manipulationssicherer Speicher verwendet werden, um zu speichern, ob der Bootloader entsperrt ist. Ein manipulationssicherer Speicher bedeutet, dass der Bootloader erkennen kann, ob der Speicher von Android aus manipuliert wurde.
- [C-1-9] MUSS den Nutzer während der Nutzung des Geräts auffordern und eine physische Bestätigung verlangen, bevor ein Wechsel vom gesperrten zum entsperrten Bootloader-Modus zulässig ist.
- [C-1-10] Es MUSS ein Rollback-Schutz für Partitionen implementiert werden, die von Android verwendet werden (z. B. Boot- und Systempartitionen). Außerdem muss für das Speichern der Metadaten, die zur Bestimmung der zulässigen Mindestbetriebssystemversion verwendet werden, ein manipulationssicherer Speicher verwendet werden.
- [C-SR] Es wird DRINGEND EMPFOHLEN, alle APK-Dateien mit Berechtigungen mit einer Vertrauenskette zu überprüfen, die auf
/system
basiert und durch den verifizierten Boot geschützt ist. - [C-SR] Es wird DRINGEND empfohlen, alle ausführbaren Artefakte, die von einer privilegierten App außerhalb ihrer APK-Datei geladen werden (z. B. dynamisch geladener Code oder kompilierter Code), vor der Ausführung zu überprüfen oder DRINGEND, sie gar nicht auszuführen.
- Es sollte ein Rollback-Schutz für alle Komponenten mit nichtflüchtiger Firmware (z. B. Modem, Kamera) implementiert werden. Außerdem sollte zur Speicherung der Metadaten, die zur Bestimmung der zulässigen Mindestversion verwendet werden, ein manipulationssicherer Speicher verwendet werden.
Wenn Geräteimplementierungen bereits ohne Unterstützung von C-1-8 bis C-1-10 auf einer früheren Android-Version eingeführt wurden und diese Anforderungen nicht durch ein Systemsoftwareupdate unterstützt werden können, KÖNNEN sie von den Anforderungen ausgenommen werden.
Das Upstream-Android Open Source Project bietet eine bevorzugte Implementierung dieser Funktion im external/avb/
-Repository, die in den Bootloader integriert werden kann, der zum Laden von Android verwendet wird.
Geräteimplementierungen:
- [C-R] Es wird 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] Es MUSS dafür gesorgt werden, dass die sichere Hardware die vollständige Kontrolle über das Display übernimmt, sodass das Android-Betriebssystem es nicht ohne Erkennung durch die sichere Hardware blockieren kann.
- [C-3-3] MÜSSEN dafür sorgen, dass sichere Hardware die volle Kontrolle über den Touchscreen übernimmt.
9.11. Schlüssel und Anmeldedaten
Mit dem Android-Schlüsselspeichersystem können App-Entwickler kryptografische Schlüssel in einem Container speichern und sie über die KeyChain API oder die Keystore API in kryptografischen Vorgängen verwenden. Geräteimplementierungen:
- [C-0-1] Es MÜSSEN mindestens 8.192 Schlüssel importiert oder generiert werden können.
- [C-0-2] Die Authentifizierung über den Sperrbildschirm MUSS die Anzahl der Versuche begrenzen und einen exponentiellen Backoff-Algorithmus haben. Nach 150 fehlgeschlagenen Versuchen muss die Verzögerung mindestens 24 Stunden pro Versuch betragen.
- Die Anzahl der generierbaren Schlüssel sollte NICHT begrenzt sein.
Wenn die Geräteimplementierung einen sicheren Sperrbildschirm unterstützt, gilt Folgendes:
- [C-1-1] Die Implementierung des Schlüsselspeichers MUSS mit einer isolierten Ausführungsumgebung gesichert werden.
- [C-1-2] MUSS Implementierungen der kryptografischen Algorithmen RSA, AES, ECDSA und HMAC sowie Hash-Funktionen der MD5-, SHA1- und SHA-2-Familie haben, um die unterstützten Algorithmen des Android Keystore-Systems in einem Bereich ordnungsgemäß zu unterstützen, der sicher vom Code isoliert ist, der im Kernel und darüber ausgeführt wird. Die sichere Isolierung MUSS alle potenziellen Mechanismen blockieren, über die Kernel- oder Userspace-Code auf den internen Status der isolierten Umgebung zugreifen kann, einschließlich DMA. Das Upstream-Android Open Source Project (AOSP) erfüllt diese Anforderung durch die Verwendung der Trusty-Implementierung. Alternativ sind auch eine andere ARM TrustZone-basierte Lösung oder eine von Drittanbietern geprüfte sichere Implementierung einer ordnungsgemäßen hypervisorbasierten Isolation möglich.
- [C-1-3] Die Sperrbildschirmauthentifizierung MUSS in der isolierten Ausführungsumgebung erfolgen und nur bei Erfolg dürfen die an die Authentifizierung gebundenen Schlüssel verwendet werden. Anmeldedaten für den Sperrbildschirm MÜSSEN so gespeichert werden, dass nur die isolierte Ausführungsumgebung die Sperrbildschirmauthentifizierung ausführen kann. Das Upstream-Android Open Source Project bietet die Gatekeeper Hardware Abstraction Layer (HAL) und Trusty, mit denen diese Anforderung erfüllt werden kann.
- [C-1-4] MÜSSEN die Schlüsselattestierung unterstützen, bei der der Attestierungssignaturschlüssel durch sichere Hardware geschützt und die Signatur in sicherer Hardware ausgeführt wird. Die Attestierungssignaturschlüssel MÜSSEN auf einer ausreichend großen Anzahl von Geräten freigegeben werden, um zu verhindern, dass die Schlüssel als Geräte-IDs verwendet werden. Eine Möglichkeit, diese Anforderung zu erfüllen, besteht darin, denselben Attestierungsschlüssel zu verwenden, es sei denn, es werden mindestens 100.000 Einheiten einer bestimmten SKU produziert. Wenn mehr als 100.000 Einheiten einer SKU produziert werden, kann für jede 100.000 Einheiten ein anderer Schlüssel verwendet werden.
- [C-1-5] Der Nutzer MUSS die Zeitüberschreitung für den Ruhemodus für den Übergang vom entsperrten zum gesperrten Zustand auswählen können. Die zulässige Mindestzeitüberschreitung beträgt 15 Sekunden.
Wenn eine Geräteimplementierung bereits mit einer früheren Android-Version gestartet wurde, ist dieses Gerät von der Anforderung ausgenommen, einen Schlüsselspeicher zu haben, der von einer isolierten Ausführungsumgebung unterstützt wird, und die Schlüsselattestierung zu unterstützen, es sei denn, die android.hardware.fingerprint
-Funktion wird deklariert, für die ein Schlüsselspeicher erforderlich ist, der von einer isolierten Ausführungsumgebung unterstützt wird.
9.11.1. Sichere Displaysperre
Die AOSP-Implementierung folgt einem mehrstufigen Authentifizierungsmodell, bei dem eine Knowledge-Factory-basierte primäre Authentifizierung entweder durch eine sekundäre starke biometrische Authentifizierung oder durch schwächere tertiäre Modalitäten unterstützt werden kann.
Geräteimplementierungen:
- [C-SR] Es wird DRINGEND EMPFOHLEN, nur eine der folgenden Methoden als primäre Authentifizierungsmethode festzulegen:
- Eine numerische PIN
- Ein alphanumerisches Passwort
- Wischmuster in einem Raster mit genau 3 × 3 Punkten
Die oben genannten Authentifizierungsmethoden werden in diesem Dokument als empfohlene primäre Authentifizierungsmethoden bezeichnet.
Wenn bei der Geräteimplementierung die empfohlenen primären Authentifizierungsmethoden hinzugefügt oder geändert werden und eine neue Authentifizierungsmethode als sichere Möglichkeit zum Sperren des Bildschirms verwendet wird, muss die neue Authentifizierungsmethode:
- [C-2-1] MUSS die Nutzerauthentifizierungsmethode sein, die unter Nutzerauthentifizierung für die Schlüsselnutzung erforderlich machen beschrieben ist.
- [C-2-2] Alle Schlüssel für eine Drittanbieter-App MÜSSEN entsperrt werden, 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, wenn sie auf einem bekannten Geheimnis basieren, und eine neue Authentifizierungsmethode verwendet wird, die als sichere Methode zum Sperren des Displays behandelt wird:
- [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 Anwendung „Device Policy Controller“ (DPC) die Passwortqualitätsrichtlinie über die Methode
DevicePolicyManager.setPasswordQuality()
mit einer restriktiveren Qualitätskonstante alsPASSWORD_QUALITY_SOMETHING
festgelegt hat.
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 Biometrie basiert und als sichere Methode zum Entsperren des Bildschirms behandelt wird, gilt für die neue Methode Folgendes:
- [C-4-1] MUSS alle in Abschnitt 7.3.10.2 beschriebenen Anforderungen erfüllen.
- [C-4-2] Es MUSS einen Fallback-Mechanismus geben, um eine der empfohlenen primären Authentifizierungsmethoden zu verwenden, die auf einem bekannten Geheimnis basiert.
- [C-4-3] MUSS deaktiviert sein und nur die empfohlene primäre Authentifizierung zum Entsperren des Displays zulassen , wenn die Anwendung „Device Policy Controller“ (DPC) die Richtlinie für die KeGuard-Funktion festgelegt hat, indem sie die Methode
DevicePolicyManager.setKeyguardDisabledFeatures()
mit einem der zugehörigen biometrischen Flags (KEYGUARD_DISABLE_BIOMETRICS
,KEYGUARD_DISABLE_FINGERPRINT
,KEYGUARD_DISABLE_FACE
oderKEYGUARD_DISABLE_IRIS
) aufgerufen hat. - [C-4-4] Der Nutzer MUSS mindestens alle 72 Stunden zur empfohlenen primären Authentifizierung aufgefordert werden (z.B. PIN, Muster, Passwort).
- [C-4-5] Die Falsch-Akzeptanzrate MUSS gleich oder strenger sein als die für einen Fingerabdrucksensor erforderliche Rate, wie in Abschnitt 7.3.10 beschrieben. Andernfalls MUSS sie deaktiviert sein und nur die empfohlene primäre Authentifizierung zum Entsperren des Bildschirms zulassen, wenn die DPC-Anwendung (Device Policy Controller) die Passwortqualitätsrichtlinie über die Methode
DevicePolicyManager.setPasswordQuality()
mit einer strengeren Qualitätskonstante alsPASSWORD_QUALITY_BIOMETRIC_WEAK
festgelegt hat. - [C-SR] Es wird DRINGEND EMPFOHLEN, dass die Akzeptanzraten für Spoofing und Imposter denen für einen Fingerabdrucksensor entsprechen oder höher sind, wie in Abschnitt 7.3.10 beschrieben.
- [C-4-6] Es MUSS eine sichere Verarbeitungspipeline geben, damit bei einem Betriebssystem- oder Kernel-Hack keine Daten direkt eingefügt werden können, um sich als Nutzer zu authentifizieren.
- [C-4-7] MUSS mit einer expliziten Bestätigungsaktion (z. B. Drücken einer Taste) kombiniert werden, um den Zugriff auf Schlüsselspeicherschlüssel zu ermöglichen, wenn die Anwendung
true
fürKeyGenParameterSpec.Built.setUserAuthenticationRequired()
festlegt und die biometrische Authentifizierung passiv ist (z. B. Gesicht oder Iris, bei denen kein explizites Signal der Absicht vorliegt). - [C-SR] Es wird DRINGEND EMPFOHLEN, die Bestätigungsaktion für passive biometrische Verfahren so zu sichern, dass sie nicht durch einen Betriebssystem- oder Kernel-Hack gefälscht werden kann. Das bedeutet beispielsweise, dass die Bestätigungsaktion, die auf einer physischen Taste basiert, über einen GPIO-Pin (General Purpose Input/Output) eines Secure Elements (SE) mit nur Eingabefunktion geleitet wird, der nur durch Drücken einer physischen Taste gesteuert werden kann.
Wenn die biometrischen Authentifizierungsmethoden die in Abschnitt 7.3.10 beschriebenen Akzeptanzraten für Spoofing und Identitätsdiebstahl nicht erfüllen:
- [C-5-1] Die Methoden MÜSSEN deaktiviert werden, wenn die DPC-Anwendung (Device Policy Controller) die Passwortqualitätsrichtlinie über die Methode
DevicePolicyManager.setPasswordQuality()
mit einer strengeren Qualitätskonstante alsPASSWORD_QUALITY_BIOMETRIC_WEAK
festgelegt hat. - [C-5-2] Nach einer Inaktivitätsdauer von 4 Stunden MUSS der Nutzer zur empfohlenen primären Authentifizierung aufgefordert werden (z. B. PIN, Muster, Passwort). Die Zeitüberschreitung für die Inaktivität wird nach jeder erfolgreichen Bestätigung der Geräteanmeldedaten zurückgesetzt.
- [C-5-3] Die Methoden DÜRFEN NICHT als sicherer Sperrbildschirm behandelt werden und MÜSSEN die Anforderungen erfüllen, die in diesem Abschnitt mit C-8 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] Es MUSS ein Fallback-Mechanismus vorhanden sein, um eine der empfohlenen primären Authentifizierungsmethoden zu verwenden, die auf einem bekannten Geheimnis basiert und die Anforderungen erfüllt, um als sicherer Sperrbildschirm behandelt zu werden.
- [C-6-2] Die neue Methode MUSS deaktiviert sein und nur eine der empfohlenen primären Authentifizierungsmethoden zum Entsperren des Bildschirms zulassen, wenn die Device Policy Controller-Anwendung (DPC) die Richtlinie entweder 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 72 Stunden aufgefordert werden, eine der empfohlenen primären Authentifizierungsmethoden (z.B.PIN, Muster, Passwort) zu verwenden.
- [C-6-4] Die neue Methode DARF NICHT als sicherer Sperrbildschirm behandelt werden und MUSS den in C-8 unten aufgeführten Einschränkungen entsprechen.
Wenn Geräteimplementierungen einen sicheren Sperrbildschirm haben und einen oder mehrere Vertrauensagenten enthalten, die die TrustAgentService
System API implementieren, gilt Folgendes:
- [C-7-1] Es MUSS im Einstellungsmenü und auf dem Sperrbildschirm klar angezeigt werden, ob die Gerätesperre verzögert wird oder von Vertrauenspersonen entsperrt werden kann. AOSP erfüllt diese Anforderung beispielsweise, indem im Einstellungsmenü eine Textbeschreibung für die Einstellungen „Automatische Sperre“ und „Ein/Aus-Taste sperrt sofort“ sowie ein gut sichtbares Symbol auf dem Sperrbildschirm angezeigt werden.
- [C-7-2] Alle Trust-Agent-APIs in der Klasse
DevicePolicyManager
MÜSSEN berücksichtigt und vollständig implementiert werden, z. B. die KonstanteKEYGUARD_DISABLE_TRUST_AGENTS
. - [C-7-3] Die Funktion
TrustAgentService.addEscrowToken()
MUSS auf einem Gerät, das als primäres privates Gerät verwendet wird (z. B. ein Mobilgerät), NICHT vollständig implementiert werden. Sie KANN jedoch vollständig auf Geräten implementiert werden, die in der Regel gemeinsam genutzt werden (z. B. Android-Fernseher oder Automotive-Geräte). - [C-7-4] MÜSSEN alle von
TrustAgentService.addEscrowToken()
hinzugefügten gespeicherten Tokens verschlüsseln. - [C-7-5] Der Verschlüsselungsschlüssel darf NICHT auf demselben Gerät gespeichert werden, auf dem er verwendet wird. So ist es beispielsweise zulässig, dass ein auf einem Smartphone gespeicherter Schlüssel ein Nutzerkonto auf einem Fernseher entsperren kann.
- [C-7-6] Der Nutzer MUSS über die Sicherheitsrisiken informiert werden, bevor das Treuhänder-Token zum Entschlüsseln des Datenspeichers aktiviert wird.
- [C-7-7] Es MUSS einen Fallback-Mechanismus geben, um eine der empfohlenen primären Authentifizierungsmethoden zu verwenden.
- [C-7-8] Der Nutzer muss mindestens alle 72 Stunden aufgefordert werden, eine der empfohlenen Methoden der primären Authentifizierung (z. B. PIN, Muster, Passwort) durchzuführen.
- [C-7-9] Nach einer Inaktivitätsdauer von 4 Stunden MUSS der Nutzer zu einer der empfohlenen primären Authentifizierungsmethoden aufgefordert werden (z. B. PIN, Muster, Passwort). Die Zeitüberschreitung für die Inaktivität wird nach jeder erfolgreichen Bestätigung der Geräteanmeldedaten zurückgesetzt.
- [C-7-10] Darf NICHT als sicherer Sperrbildschirm behandelt werden und MUSS den in C-8 unten aufgeführten Einschränkungen entsprechen.
Wenn bei Geräteimplementierungen Authentifizierungsmethoden zum Entsperren des Sperrbildschirms hinzugefügt oder geändert werden, der nicht wie oben beschrieben sicher ist, und eine neue Authentifizierungsmethode zum Entsperren des Keyguards verwendet wird:
- [C-8-1] Die neue Methode MUSS deaktiviert werden, wenn die DPC-Anwendung (Device Policy Controller) die Passwortqualitätsrichtlinie über die Methode
DevicePolicyManager.setPasswordQuality()
mit einer restriktiveren Qualitätskonstante alsPASSWORD_QUALITY_UNSPECIFIED
festgelegt hat. - [C-8-2] Die von
DevicePolicyManager.setPasswordExpirationTimeout()
festgelegten Timer für das Ablaufen von Passwörtern DÜRFEN NICHT zurückgesetzt werden. - [C-8-3] Der Zugriff auf Schlüsselspeicher darf NICHT authentifiziert werden, wenn die Anwendung
true
fürKeyGenParameterSpec.Builder.setUserAuthenticationRequired()
festlegt.
9.11.2. StrongBox
Mit dem Android Keystore System können App-Entwickler kryptografische Schlüssel in einem speziellen sicheren Prozessor sowie in der oben beschriebenen isolierten Ausführungsumgebung speichern.
Geräteimplementierungen:
- [C-SR] Es wird DRINGEND EMPFOHLEN, StrongBox zu unterstützen.
Wenn Geräteimplementierungen StrongBox unterstützen, gilt Folgendes:
-
[C-1-1] MÜSSEN FEATURE_STRONGBOX_KEYSTORE deklarieren.
-
[C-1-2] Es MUSS spezielle sichere Hardware zur Sicherung des Schlüsselspeichers und zur sicheren Nutzerauthentifizierung bereitgestellt werden.
-
[C-1-3] MUSS eine diskrete CPU haben, die keinen Cache, DRAM, Coprozessor oder andere Kernressourcen mit dem Anwendungsprozessor (AP) teilt.
-
[C-1-4] Es MUSS sichergestellt sein, dass Peripheriegeräte, die mit dem AP geteilt werden, die StrongBox-Verarbeitung in keiner Weise verändern oder Informationen aus dem StrongBox abrufen 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 manipuliert werden kann.
-
[C-1-6] Es MUSS einen echten Zufallszahlengenerator geben, der eine gleichmäßig verteilte und unvorhersehbare Ausgabe liefert.
-
[C-1-7] MÜSSEN manipulationssicher sein, einschließlich Widerstandsfähigkeit gegen physisches Eindringen und Glitching.
-
[C-1-8] MÜSSEN eine Seitenkanalresistenz haben, einschließlich Widerstand gegen das Austreten von Informationen über Stromversorgung, Timing, elektromagnetische Strahlung und thermische Strahlung.
-
[C-1-9] Es MUSS ein sicherer Speicher vorhanden sein, der für Vertraulichkeit, Integrität, Authentizität, Konsistenz und Aktualität der Inhalte sorgt. Der Speicher darf nur dann gelesen oder geändert werden, wenn dies von den StrongBox APIs zugelassen ist.
-
Zur Validierung der Einhaltung von [C-1-3] bis [C-1-9] müssen Geräteimplementierungen:
- [C-1-10] Die Hardware MUSS gemäß dem Secure IC Protection Profile BSI-CC-PP-0084-2014 zertifiziert oder von einem national akkreditierten Testlabor gemäß der Common Criteria Application of Attack Potential to Smartcards bewertet sein.
- [C-1-11] Die Firmware MUSS von einem national akkreditierten Testlabor bewertet werden und eine Bewertung der Sicherheitslücken mit hohem Angriffspotenzial gemäß den Common Criteria Application of Attack Potential to Smartcards enthalten.
- [C-SR] Es wird DRINGEND EMPFOHLEN, die Hardware anzugeben, die mit einem Sicherheitsziel der Bewertungssicherheitsstufe 5 (Evaluation Assurance Level, EAL) bewertet wird, ergänzt durch AVA_VAN.5. Die EAL 5-Zertifizierung wird wahrscheinlich in einer zukünftigen Version erforderlich.
-
[C-SR] Es wird DRINGEND empfohlen, einen Schutz vor Insiderangriffen (Insider Attack Resistance, IAR) bereitzustellen. Das bedeutet, dass ein Insider mit Zugriff auf Firmware-Signaturschlüssel keine Firmware erstellen kann, die dazu führt, dass der StrongBox Geheimnisse preisgibt, funktionale Sicherheitsanforderungen umgeht oder anderweitig den Zugriff auf vertrauliche Nutzerdaten ermöglicht. Wir empfehlen, Firmwareupdates nur zuzulassen, wenn das primäre Nutzerpasswort über die IAuthSecret HAL angegeben wird.
9.12. Löschen von Daten
Alle Geräteimplementierungen:
- [C-0-1] Es MUSS Nutzern möglich sein, das Gerät auf die Werkseinstellungen zurückzusetzen.
- [C-0-2] Alle von Nutzern erstellten Daten MÜSSEN gelöscht werden. Das sind alle Daten mit folgenden Ausnahmen:
- Das System-Image
- Alle vom System-Image benötigten Betriebssystemdateien
- [C-0-3] Die Daten MÜSSEN so gelöscht werden, dass relevante Branchenstandards wie NIST SP800-88 erfüllt werden.
- [C-0-4] MÜSSEN den oben genannten Vorgang „Zurücksetzen auf die Werkseinstellungen“ auslösen, wenn die
DevicePolicyManager.wipeData()
API von der Device Policy Controller App des Hauptnutzers aufgerufen wird. - KANN eine Option zum schnellen Löschen von Daten bieten, bei der nur die logischen Daten gelöscht werden.
9.13. Abgesicherter Modus
Android bietet den abgesicherten Modus, in dem Nutzer ein Gerät in einem Modus starten können, in dem nur vorinstallierte System-Apps ausgeführt werden dürfen und alle Drittanbieter-Apps deaktiviert sind. In diesem Modus, dem sogenannten „Abgesicherten Boot-Modus“, können Nutzer potenziell schädliche Drittanbieter-Apps deinstallieren.
Geräteimplementierungen sind:
- [SR] Es wird DRINGEND EMPFOHLEN, den abgesicherten Modus zu implementieren.
Wenn Geräteimplementierungen den abgesicherten Bootmodus implementieren, gilt Folgendes:
-
[C-1-1] Dem Nutzer MUSS eine Option zum Aufrufen des abgesicherten Modus zur Verfügung gestellt werden, die nicht von auf dem Gerät installierten Drittanbieter-Apps unterbrochen werden kann, es sei denn, die Drittanbieter-App ist ein Device Policy Controller und hat das Flag
UserManager.DISALLOW_SAFE_BOOT
auf „wahr“ gesetzt. -
[C-1-2] Der Nutzer MUSS im abgesicherten Modus Drittanbieter-Apps deinstallieren können.
-
SOLLTE dem Nutzer die Möglichkeit bieten, über das Boot-Menü in den abgesicherten Modus zu wechseln, wobei der Ablauf vom normalen Start abweichen sollte.
9.14. Isolation des Fahrzeugsystems
Android Automotive-Geräte sollen Daten mit kritischen Fahrzeug-Subsystemen austauschen. Dazu wird die Vehicle HAL verwendet, um Nachrichten über Fahrzeugnetzwerke wie CAN-Bus zu senden und zu empfangen.
Der Datenaustausch kann durch Implementierung von Sicherheitsfunktionen unterhalb der Android-Framework-Ebenen gesichert werden, um böswillige oder unbeabsichtigte Interaktionen mit diesen Subsystemen zu verhindern.
9.15. Abos
„Abos“ bezieht sich auf die Details zum Abrechnungsverhältnis, die von einem Mobilfunkanbieter über SubscriptionManager.setSubscriptionPlans()
bereitgestellt werden.
Alle Geräteimplementierungen:
- [C-0-1] Abos MÜSSEN nur an die App des Mobilfunkanbieters zurückgegeben werden, der sie ursprünglich bereitgestellt hat.
- [C-0-2] Abos DÜRFEN NICHT aus der Ferne gesichert oder hochgeladen werden.
- [C-0-3] MÜSSEN Überschreibungen wie
SubscriptionManager.setSubscriptionOverrideCongested()
nur über die App des Mobilfunkanbieters zulassen, der derzeit gültige Abotarife anbietet.
10. Softwarekompatibilitätstests
Geräteimplementierungen MÜSSEN alle in diesem Abschnitt beschriebenen Tests bestehen. Beachten Sie jedoch, dass kein Softwaretestpaket vollständig ist. Aus diesem Grund wird Geräteimplementierern DRINGEND empfohlen, nur so wenige Änderungen wie möglich an der Referenz- und bevorzugten Implementierung von Android vorzunehmen, die im Android Open Source Project verfügbar ist. So wird das Risiko minimiert, dass Fehler auftreten, die Inkompatibilitäten verursachen, die Neuarbeit und potenzielle Geräteupdates erfordern.
10.1. Compatibility Test Suite
Geräteimplementierungen:
-
[C-0-1] MÜSSEN die Android Compatibility Test Suite (CTS) bestehen, die im Android Open Source Project verfügbar ist, und dabei die finale Software verwenden, die auf dem Gerät installiert ist.
-
[C-0-2] MÜSSEN für Kompatibilität bei Unklarheiten im CTS und bei jeder Neuimplementierung von Teilen des Referenz-Quellcodes sorgen.
Der CTS ist für die Ausführung auf einem echten Gerät konzipiert. Wie jede Software kann auch die CTS Fehler enthalten. Die CTS wird unabhängig von dieser Kompatibilitätsdefinition versioniert. Es können mehrere Versionen der CTS für Android 9 veröffentlicht werden.
Geräteimplementierungen:
-
[C-0-3] MUSS die neueste CTS-Version bestehen, die zum Zeitpunkt der Fertigstellung der Gerätesoftware verfügbar ist.
-
Sie sollten die Referenzimplementierung im Android Open Source-Baum so weit wie möglich verwenden.
10.2. CTS‑Prüfung
Der CTS Verifier ist in der Compatibility Test Suite enthalten und soll von einem menschlichen Operator ausgeführt werden, um Funktionen zu testen, die nicht von einem automatisierten System getestet werden können, z. B. die ordnungsgemäße Funktion von Kameras und Sensoren.
Geräteimplementierungen:
- [C-0-1] MÜSSEN alle anwendbaren Fälle im CTS-Verifier korrekt ausgeführt werden.
Der CTS-Verifier bietet Tests für viele Arten von Hardware, einschließlich optionaler Hardware.
Geräteimplementierungen:
- [C-0-2] MÜSSEN alle Tests für die vorhandene Hardware bestehen. Wenn ein Gerät beispielsweise einen Beschleunigungsmesser hat, MUSS der Testfall „Beschleunigungsmesser“ im CTS-Verifier korrekt ausgeführt werden.
Testfälle für Funktionen, die in diesem Dokument zur Kompatibilitätsdefinition als optional gekennzeichnet sind, KÖNNEN übersprungen oder weggelassen werden.
- [C-0-2] Auf jedem Gerät und für jede Build-Version MUSS der CTS-Verifier wie oben beschrieben ausgeführt werden. Da viele Builds jedoch sehr ähnlich sind, wird von Geräteimplementierern nicht erwartet, dass sie den CTS-Verifier explizit auf Builds ausführen, die sich nur unwesentlich unterscheiden. Insbesondere bei Geräteimplementierungen, die sich von einer Implementierung, die den CTS-Verifier bestanden hat, nur durch die enthaltenen Sprachen, das Branding usw. unterscheiden, kann der CTS-Verifier-Test weggelassen werden.
11. Aktualisierbare Software
-
[C-0-1] Geräteimplementierungen MÜSSEN einen Mechanismus zum Ersetzen der gesamten Systemsoftware enthalten. Der Mechanismus muss keine „Live-Upgrades“ ausführen. Das bedeutet, dass ein Neustart des Geräts erforderlich sein kann. Es kann jede Methode verwendet werden, sofern damit die gesamte auf dem Gerät vorinstallierte Software ersetzt werden kann. Beispielsweise erfüllen alle der folgenden Ansätze diese Anforderung:
- „Over-the-air“-Downloads (OTA) mit Offlineupdate über Neustart
- Tethering-Updates über USB von einem Host-PC
- „Offline“-Updates über einen Neustart und ein Update über eine Datei auf einem Wechseldatenträger
-
[C-0-2] Der verwendete Updatemechanismus MUSS Updates ohne Löschen von Nutzerdaten unterstützen. Das bedeutet, dass der Aktualisierungsmechanismus private Daten der Anwendung und freigegebene Daten der Anwendung MUSS beibehalten. Die Android-Software enthält einen Aktualisierungsmechanismus, der diese Anforderung erfüllt.
Wenn die Geräteimplementierungen die Unterstützung einer unbegrenzten Datenverbindung wie 802.11 oder Bluetooth PAN (Personal Area Network) umfassen, müssen sie:
- [C-1-1] MUSS OTA-Downloads mit Offline-Update über Neustart unterstützen.
Bei Geräteimplementierungen, die mit Android 6.0 und höher eingeführt werden, sollte der Updatemechanismus die Überprüfung unterstützen, ob das System-Image nach einem Over-the-air-Update binär mit dem erwarteten Ergebnis identisch ist. Die blockbasierte OTA-Implementierung im Upstream-Android Open Source Project, die seit Android 5.1 hinzugefügt wurde, erfüllt diese Anforderung.
Außerdem sollten Geräteimplementierungen A/B-Systemupdates unterstützen. Das AOSP implementiert diese Funktion mit der Boot Control HAL.
Wenn nach der Markteinführung, aber innerhalb der angemessenen Lebensdauer eines Produkts, in der Geräteimplementierung ein Fehler gefunden wird, der sich in Absprache mit dem Android-Kompatibilitätsteam auf die Kompatibilität von Drittanbieter-Apps auswirkt, gilt Folgendes:
- [C-2-1] Der Geräteimplementierer MUSS den Fehler über ein verfügbares Softwareupdate korrigieren, das gemäß dem gerade beschriebenen Mechanismus angewendet werden kann.
Android bietet Funktionen, mit denen die App „Geräteinhaber“ (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
Hier eine Zusammenfassung der Änderungen an der Kompatibilitätsdefinition in dieser Version:
Hier eine Zusammenfassung der Änderungen an den Abschnitten für Einzelpersonen:
- Einführung
- Gerätetypen
- Software
- Anwendungs-Packaging
- Multimedia
- Entwicklertools und ‑optionen
- Hardwarekompatibilität
- Leistung und Stromversorgung
- Sicherheitsmodell
- Softwarekompatibilitätstests
- Aktualisierbare Software
- Änderungslog für Dokumente
- Kontakt
12.1. Tipps zum Ansehen des Änderungslogs
Änderungen werden so gekennzeichnet:
-
CDD
Wesentliche Änderungen an den Kompatibilitätsanforderungen. -
Docs
Änderungen am Erscheinungsbild oder am Build.
Für eine optimale Darstellung sollten Sie den pretty=full
- und no-merges
-URL-Parameter an die Protokoll-URLs anhängen.
13. Kontakt
Sie können dem Android-Kompatibilitätsforum beitreten und um Erläuterungen bitten oder Probleme ansprechen, die Ihrer Meinung nach im Dokument nicht behandelt werden.