Android 7.0 (N)-Kompatibilitätsdefinition

Inhaltsverzeichnis

1. Einführung

In diesem Dokument werden die Anforderungen aufgeführt, die erfüllt sein müssen, damit Geräte mit Android 7.0 kompatibel sind.

Die Verwendung von „MUSS“, „DARF NICHT“, „ERFORDERLICH“, „WIRD“, „WIRD NICHT“, „SOLLTE“, „SOLLTE NICHT“, „EMPFOHLEN“, „KÖNNEN“ und „OPTIONAL“ gemäß dem in RFC 2119 definierten IETF-Standard verwendet werden.

In diesem Dokument ist ein „Geräteimplementierung“ oder „Implementierer“ eine Person oder Organisation, die eine Hardware-/Softwarelösung mit Android 7.0 entwickelt. Eine „Geräteimplementierung“ oder „Implementierung“ ist die so entwickelte Hardware-/Softwarelösung.

Um als mit Android 7.0 kompatibel zu gelten, MÜSSEN Geräteimplementierungen den Anforderungen dieser Kompatibilitätsdefinition entsprechen, einschließlich aller Dokumente, auf die sie verweist.

Wenn diese Definition oder die in Abschnitt 10 beschriebenen Softwaretests nichtssagen, mehrdeutig oder unvollständig sind, liegt es in der Verantwortung des Geräteimplementierung, die Kompatibilität mit bestehenden Implementierungen sicherzustellen.

Aus diesem Grund ist das Android Open Source Project sowohl die Referenz als auch die bevorzugte Implementierung von Android. Implementierungen von Geräten wird dringend empfohlen, ihre Implementierungen so weit wie möglich auf dem vorgelagerten Quellcode des Android Open Source Project zu basieren. Zwar können einige Komponenten hypothetisch durch alternative Implementierungen ersetzt werden, es wird jedoch UNBEDINGT EMPFOHLEN, diese Vorgehensweise nicht zu befolgen, da das Bestehen der Softwaretests erheblich schwieriger wird. Es liegt in der Verantwortung des Implementierers, die vollständige Verhaltenskompatibilität mit der Android-Standardimplementierung sicherzustellen, einschließlich der Compatibility Test Suite und darüber hinaus. Beachten Sie schließlich, dass bestimmte Ersetzungen und Änderungen von Komponenten gemäß diesem Dokument ausdrücklich verboten sind.

Viele der in diesem Dokument verlinkten Ressourcen stammen direkt oder indirekt vom Android SDK und sind funktional mit den Informationen in der Dokumentation dieses SDK identisch. In Fällen, in denen diese Kompatibilitätsdefinition oder die Kompatibilitätstest-Suite nicht mit der SDK-Dokumentation übereinstimmt, gilt die SDK-Dokumentation als maßgeblich. Alle technischen Details, die in den verlinkten Ressourcen in diesem Dokument enthalten sind, werden als Teil dieser Kompatibilitätsdefinition angesehen.

2. Gerätetypen

Das Open-Source-Projekt von Android wurde zwar für die Implementierung verschiedener Gerätetypen und Formfaktoren verwendet, aber viele Aspekte der Architektur- und Kompatibilitätsanforderungen wurden für Handheld-Geräte optimiert. Ab Android 5.0 zielt das Android Open Source Project darauf ab, eine breitere Vielfalt von Gerätetypen zu unterstützen, die in diesem Abschnitt beschrieben werden.

Android-Handheld-Geräte sind Android-Geräte, die normalerweise in der Hand gehalten werden, z. B. MP3-Player, Smartphones und Tablets. Implementierungen auf Android-Handheld-Geräten:

  • Im Gerät MUSS ein Touchscreen integriert sein.
  • MÜSSEN über eine Stromquelle verfügen, die Mobilität ermöglicht, z. B. ein Akku.

Android-Fernsehgerät bezieht sich auf eine Android-Geräteimplementierung, die eine Unterhaltungsoberfläche für die Wiedergabe digitaler Medien, Filme, Spiele, Apps und/oder Live-TV für Nutzer ist, die etwa drei Meter entfernt sitzen (eine „lehnende Benutzeroberfläche“ oder „3 Meter große Benutzeroberfläche“). Android TV-Geräte:

  • MÜSSEN einen eingebetteten Bildschirm haben ODER einen Videoausgangsanschluss (z. B. VGA oder HDMI) oder einen drahtlosen Anschluss für die Anzeige haben.
  • MÜSSEN die Funktionen android.software.leanback und android.hardware.type.television deklarieren.

Android Watch-Gerät bezieht sich auf eine Android-Geräteimplementierung, die am Körper getragen werden soll, z. B. am Handgelenk, und:

  • MÜSSEN über ein Display mit einer physischen diagonalen Länge von 1,1 bis 2,5 Zoll verfügen.
  • MÜSSEN die Funktion „android.hardware.type.watch“ deklarieren.
  • MÜSSEN uiMode = UI_MODE_TYPE_WATCH unterstützen.

Die Android Automotive-Implementierung bezieht sich auf die Haupteinheit eines Fahrzeugs, auf der Android als Betriebssystem für einen Teil oder die gesamte System- und/oder Infotainmentfunktionalität ausgeführt wird. Android Automotive-Implementierungen:

  • MUSS das Display mindestens 15 cm lang sein.
  • MÜSSEN die Funktion „android.hardware.type.automotive“ deklarieren.
  • MUSS uiMode = UI_MODE_TYPE_CAR unterstützen.
  • Android Automotive-Implementierungen MÜSSEN alle öffentlichen APIs im Namespace android.car.* unterstützen.

Alle Implementierungen von Android-Geräten, die keinem der oben genannten Gerätetypen entsprechen, MÜSSEN trotzdem alle in diesem Dokument genannten Anforderungen erfüllen, um mit Android 7.0 kompatibel zu sein, es sei denn, die oben beschriebene Anforderung gilt nur für einen bestimmten Android-Gerätetyp.

2.1 Gerätekonfigurationen

Dies ist eine Zusammenfassung der wichtigsten Unterschiede bei der Hardwarekonfiguration je nach Gerätetyp. Leere Zellen sind mit einem „MAY“ gekennzeichnet. In dieser Tabelle werden nicht alle Konfigurationen behandelt. finden Sie in den entsprechenden Abschnitten zur Hardware.

Kategorie Funktion Abschnitt Handkamera TV Ansehen Automotive Sonstiges
Eingang Steuerkreuz 7.2.2 Touchbedienung MUSS
Touchscreen 7.2.4 Eingabe über Touchscreen MUSS MUSS SOLLTEN
Mikrofon 7.8.1 Mikrofon MUSS SOLLTEN MUSS MUSS SOLLTEN
Sensoren Beschleunigungsmesser 7.3.1 Beschleunigungsmesser SOLLTEN SOLLTEN SOLLTEN
GPS 7.3.3 GPS SOLLTEN SOLLTEN
Konnektivität WLAN 7.4.2 IEEE 802.11 SOLLTEN SOLLTEN SOLLTEN SOLLTEN
Wi-Fi Direct 7.4.2.1 Wi-Fi Direct SOLLTEN SOLLTEN SOLLTEN
Bluetooth 7.4.3 Bluetooth SOLLTEN MUSS MUSS MUSS SOLLTEN
Bluetooth Low Energy 7.4.3 Bluetooth SOLLTEN MUSS SOLLTEN SOLLTEN SOLLTEN
Mobilfunkradio 7.4.5 Minimale Netzwerkfähigkeit SOLLTEN
USB-Peripherie-/Hostmodus 7.7 USB SOLLTEN SOLLTEN SOLLTEN
Ausgabe Lautsprecher- und/oder Audioausgabeanschlüsse 7.8.2 Audioausgabe MUSS MUSS MUSS MUSS

3. Software

3.1. Kompatibilität mit verwalteten APIs

Die verwaltete Dalvik-Umgebung für die Bytecode-Ausführung ist das wichtigste Instrument für Android-Apps. Die Android Application Programming Interface (API) besteht aus mehreren Android-Plattformschnittstellen, die für Anwendungen sichtbar sind, die in der verwalteten Laufzeitumgebung ausgeführt werden. Geräteimplementierungen MÜSSEN vollständige Implementierungen, einschließlich aller dokumentierten Verhaltensweisen, aller dokumentierten APIs bereitstellen, die vom Android SDK oder einer API bereitgestellt werden, die im vorgelagerten Android-Quellcode mit der Markierung „@SystemApi“ versehen ist.

Geräteimplementierungen MÜSSEN alle Klassen, Methoden und zugehörigen Elemente unterstützen bzw. beibehalten, die von der TestApi-Annotation (@TestApi) gekennzeichnet sind.

Bei Geräteimplementierungen DÜRFEN KEINE verwalteten APIs weggelassen, API-Schnittstellen oder Signaturen geändert, vom dokumentierten Verhalten abweichen oder No-Ops-Vorgänge enthalten, es sei denn, dies ist gemäß dieser Kompatibilitätsdefinition ausdrücklich zulässig.

Diese Kompatibilitätsdefinition ermöglicht es, dass einige Hardwaretypen, für die Android APIs enthält, in Geräteimplementierungen weggelassen werden. In solchen Fällen MÜSSEN die APIs weiterhin vorhanden sein und sich in einem vernünftigen Verhalten verhalten. Informationen zu den spezifischen Anforderungen für dieses Szenario finden Sie in Abschnitt 7.

3.1.1. Android-Erweiterungen

Android bietet die Unterstützung der Erweiterung der verwalteten APIs unter Beibehaltung derselben API-Level-Version. Implementierungen auf Android-Geräten MÜSSEN die AOSP-Implementierung der gemeinsam genutzten Bibliothek ExtShared und der Dienste ExtServices vorab mit Versionen laden, die mindestens der für jedes API-Level zulässigen Mindestversion entsprechen. Beispielsweise MUSS bei Geräteimplementierungen mit Android 7.0 mit API-Level 24 mindestens Version 1 enthalten sein.

3.2. Soft API-Kompatibilität

Zusätzlich zu den verwalteten APIs aus Abschnitt 3.1 enthält Android auch eine erhebliche nur zur Laufzeit verfügbare „weiche“ API in Form von Intents, Berechtigungen und ähnlichen Aspekten von Android-Apps, die nicht zum Kompilieren der Anwendung erzwungen werden können.

3.2.1. Berechtigungen

Geräteimplementierungen MÜSSEN alle Berechtigungskonstanten unterstützen und durchsetzen, wie auf der Referenzseite für Berechtigungen beschrieben. In Abschnitt 9 sind zusätzliche Anforderungen im Zusammenhang mit dem Android-Sicherheitsmodell aufgeführt.

3.2.2. Build-Parameter

Die Android-APIs enthalten eine Reihe von Konstanten für die android.os.Build-Klasse, die das aktuelle Gerät beschreiben sollen. Um konsistente, aussagekräftige Werte für alle Geräteimplementierungen bereitzustellen, enthält die folgende Tabelle zusätzliche Beschränkungen für die Formate dieser Werte, denen die Geräteimplementierungen entsprechen MÜSSEN.

Parameter Details
VERSION.VERÖFFENTLICHUNG Die Version des derzeit ausgeführten Android-Systems in einem visuell lesbaren Format. Dieses Feld MUSS einen der in 7.0 definierten Stringwerte enthalten.
SDK VERSION Die Version des derzeit ausgeführten Android-Systems in einem Format, auf das Drittanbieter-App-Code zugreifen kann. Bei Android 7.0 MUSS dieses Feld den Ganzzahlwert 7.0_INT haben.
VERSION.SDK_INT Die Version des derzeit ausgeführten Android-Systems in einem Format, auf das Drittanbieter-App-Code zugreifen kann. Bei Android 7.0 MUSS dieses Feld den Ganzzahlwert 7.0_INT haben.
VERSION.INCREMENTAL Ein vom Geräte-Implementierer ausgewählter Wert, der den spezifischen Build des derzeit ausgeführten Android-Systems in einem visuell lesbaren Format angibt. Dieser Wert DARF NICHT für verschiedene Builds wiederverwendet werden, die Endnutzern zur Verfügung gestellt werden. Mit diesem Feld wird üblicherweise angegeben, welche Build-Nummer oder Versionsverwaltungs-ID zum Generieren des Builds verwendet wurde. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf.
BRETTSPIEL Ein von der Geräteimplementierung ausgewählter Wert, der die vom Gerät verwendete spezifische interne Hardware in einem für Menschen lesbaren Format identifiziert. Dieses Feld kann verwendet werden, um die spezifische Version der Leiterplatte anzugeben, über die das Gerät betrieben wird. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen.
MARKE Ein Wert, der den mit dem Gerät assoziierten Markennamen widerspiegelt, der den Endnutzern bekannt ist. MÜSSEN in einem visuell lesbaren Format vorliegen und den Hersteller des Geräts oder die Unternehmensmarke repräsentieren, unter der das Gerät vertrieben wird. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen.
UNTERSTÜTZTE ABIS Der Name des Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität.
UNTERSTÜTZT_32_BIT_ABIS Der Name des Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität.
UNTERSTÜTZT_64_BIT_ABIS Der Name des zweiten Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität.
CPU_ABI Der Name des Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität.
CPU_ABI2 Der Name des zweiten Befehlssatzes (CPU-Typ + ABI-Konvention) des nativen Codes. Siehe Abschnitt 3.3. Native API-Kompatibilität.
GERÄT Wert, der vom Geräte-Implementierer ausgewählt wird und den Entwicklungsnamen oder Codenamen enthält, der die Konfiguration der Hardwarefunktionen und das industrielle Design des Geräts identifiziert. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen. Dieser Gerätename DARF während der Lebensdauer des Produkts NICHT geändert werden.
Fingerabdruck Ein String, der diesen Build eindeutig identifiziert. Sie SOLLTEN menschenlesbar sein. Sie MUSS dieser Vorlage folgen:

$(BRAND)/$(PRODUKT)/
$(GERÄT):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)

Beispiel:

acme/meinprodukt/
meinGerät:7.0/LMYXX/3359:NutzerDebug/Testschlüssel

Der Fingerabdruck DARF KEINE Leerzeichen enthalten. Wenn andere Felder in der obigen Vorlage Leerzeichen enthalten, MÜSSEN sie im Build-Fingerabdruck durch ein anderes Zeichen ersetzt werden, z. B. den Unterstrich ("_"). Der Wert in diesem Feld MUSS als 7-Bit-ASCII codiert werden können.

Hardware Der Name der Hardware (aus der Kernel-Befehlszeile oder aus „/proc“). Sie SOLLTEN menschenlesbar sein. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9_-]+$“ entsprechen.
Moderator Ein String, der den Host, auf dem der Build basiert, in einem für Menschen lesbaren Format eindeutig identifiziert. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf.
ID Eine vom Geräteimplementierung ausgewählten Kennung in einem visuell lesbaren Format, um auf eine bestimmte Version zu verweisen. Dieses Feld kann mit „android.os.Build.VERSION.INCREMENTAL“ übereinstimmen, SOLLTE aber ein Wert sein, der für Endnutzer aussagekräftig genug ist, um zwischen Software-Builds zu unterscheiden. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^[a-zA-Z0-9._-]+$“ entsprechen.
HERSTELLER Der Handelsname des Erstausrüsters (Original Equipment Manufacturer, OEM) des Produkts. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf.
MODELL Wert, der von der Geräteimplementierung ausgewählt wird und den Namen des Geräts enthält, der dem Endnutzer bekannt ist. Dies SOLLTE der Name sein, unter dem das Gerät vermarktet und an Endnutzer verkauft wird. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf.
PRODUKT/FUNKTION Ein Wert, der vom Geräte-Implementierer ausgewählt wird und den Entwicklungs- oder Codenamen des spezifischen Produkts (SKU) enthält, der innerhalb derselben Marke eindeutig sein MUSS. MÜSSEN lesbar sein, sind aber nicht unbedingt zur Ansicht für Endnutzer gedacht. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck "^[a-zA-Z0-9_-]+$" entsprechen. Dieser Produktname DARF NICHT während der Lebensdauer des Produkts geändert werden.
Seriennummer Eine Hardware-Seriennummer, die auf allen Geräten mit demselben MODELL und MANUFACTURER verfügbar und eindeutig sein muss. Der Wert dieses Felds MUSS als 7-Bit-ASCII codiert werden können und dem regulären Ausdruck „^([a-zA-Z0-9]{6,20})$“ entsprechen.
TAGS Eine durch Kommas getrennte Liste von Tags, die vom Geräte-Implementierer ausgewählt wurden und den Build weiter unterscheiden. Dieses Feld MUSS einen der Werte enthalten, die den drei typischen Signaturkonfigurationen für Android-Plattformen entsprechen: Releaseschlüssel, Entwicklerschlüssel, Testschlüssel.
UHRZEIT Ein Wert, der den Zeitstempel für den Build darstellt.
SCHREIBMASCHINE Wert, der vom Geräte-Implementierer ausgewählt wird, der die Laufzeitkonfiguration des Builds angibt. Dieses Feld MUSS einen der Werte enthalten, die den drei typischen Android-Laufzeitkonfigurationen entsprechen: user, userdebug oder eng.
NUTZER Ein Name oder die Nutzer-ID des Nutzers (oder des automatisierten Nutzers), der den Build generiert hat. Es gibt keine Anforderungen für das spezifische Format dieses Felds, außer dass es NICHT null sein oder der leere String ("") sein darf.
SICHERHEITSPATCH Ein Wert, der die Sicherheitspatch-Ebene eines Builds angibt. Er MUSS angeben, dass der Build in keiner Weise anfällig für eines der Probleme ist, die im ausgewiesenen öffentlichen Sicherheitsbulletin für Android beschrieben sind. Sie MUSS das Format [JJJJ-MM-TT] haben und mit einem definierten String übereinstimmen, der im öffentlichen Sicherheitsbulletin von Android oder in den Sicherheitshinweisen für Android dokumentiert ist, z. B. „2015-11-01“.
BASIS_OS Ein Wert, der den FINGERPrint-Parameter des Builds darstellt, der ansonsten mit diesem Build identisch ist, mit Ausnahme der Patches, die im Android Public Security Bulletin bereitgestellt werden. Sie MÜSSEN den richtigen Wert melden. Wenn ein solcher Build nicht vorhanden ist, wird ein leerer String („“) gemeldet.

3.2.3 Intent-Kompatibilität

3.2.3.1 Kernanwendungs-Intents

Android-Intents ermöglichen es Anwendungskomponenten, Funktionen von anderen Android-Komponenten anzufordern. Das Android-Upstream-Projekt umfasst eine Liste von Anwendungen, die als Android-Kernanwendungen gelten und die mehrere Intent-Muster zum Ausführen gängiger Aktionen implementiert. Die wichtigsten Android-Anwendungen sind:

  • Schreibtischuhr
  • Browser
  • Kalender
  • Kontakte
  • Galerie
  • Globale Suche
  • Werfer
  • Musik
  • Einstellungen

Geräteimplementierungen MÜSSEN wie erforderlich die Android-Kernanwendungen enthalten oder eine Komponente, die dieselben Intent-Muster implementiert, die durch alle Aktivitäts- oder Dienstkomponenten dieser Android-Kernanwendungen definiert sind, die anderen Apps implizit oder explizit über das android:exported-Attribut zugänglich gemacht werden.

3.2.3.2 Intent-Auflösung

Da Android eine erweiterbare Plattform ist, MÜSSEN Geräteimplementierungen zulassen, dass jedes in Abschnitt 3.2.3.1 referenzierte Intent-Muster von Drittanbieter-Apps überschrieben wird. Bei der vorgelagerten Open-Source-Implementierung von Android ist dies standardmäßig möglich. Geräte-Implementierer DÜRFEN KEINE Sonderberechtigungen System-Apps zuweisen, oder verhindern, dass Anwendungen von Drittanbietern an diese Muster binden und die Kontrolle über sie übernehmen. Dieses Verbot umfasst insbesondere die Deaktivierung der Benutzeroberfläche „Auswahl“, über die Nutzer zwischen mehreren Anwendungen wählen können, die alle dasselbe Intent-Muster verarbeiten.

Geräteimplementierungen MÜSSEN eine Benutzeroberfläche bereitstellen, über die Nutzer die Standardaktivität für Intents ändern können.

Geräteimplementierungen KÖNNEN jedoch Standardaktivitäten für bestimmte URI-Muster (z.B. http://play.google.com) bereitstellen, wenn die Standardaktivität ein spezifischeres Attribut für den Daten-URI bietet. Beispielsweise ist ein Intent-Filtermuster, das den Daten-URI „http://www.android.com“ angibt, spezifischer als das grundlegende Intent-Muster des Browsers für „http://“.

Android umfasst auch einen Mechanismus, mit dem Drittanbieter-Apps ein autoritatives Standardverhalten zum Verknüpfen von Apps für bestimmte Arten von Web-URI-Intents deklarieren können. Wenn solche maßgeblichen Deklarationen in den Intent-Filtermustern einer App definiert sind, gilt für Geräteimplementierungen Folgendes:

  • MÜSSEN Sie versuchen, Intent-Filter zu validieren, indem Sie die in der Digital Asset Links-Spezifikation definierten Validierungsschritte ausführen, die vom Paketmanager im vorgelagerten Android-Open-Source-Projekt implementiert wurden.
  • MÜSSEN Sie während der Installation der Anwendung die Intent-Filter validieren und alle erfolgreich validierten UIR-Intent-Filter als Standard-App-Handler für ihre UIRs festlegen.
  • Sie können bestimmte URI-Intent-Filter als Standard-App-Handler für ihre URIs festlegen, wenn sie erfolgreich überprüft wurden, aber andere mögliche URI-Filter die Überprüfung nicht bestehen. Wenn dies bei einer Geräteimplementierung geschieht, MUSS dem Nutzer im Einstellungsmenü die entsprechenden Pro-URI-Musterüberschreibungen bereitgestellt werden.
  • Dem Nutzer MUSS in den Einstellungen die folgenden Einstellungen für App-Links zur Verfügung stehen: <ph type="x-smartling-placeholder">
      </ph>
    • Der Nutzer MÜSSEN in der Lage sein, das Standardverhalten von App-Links als Ganzes überschreiben zu können: „immer offen“, „Immer fragen“ oder „Nie öffnen“. Diese Werte müssen für alle möglichen URI-Intent-Filter gleichwertig gelten.
    • Der Nutzer MÜSSEN eine Liste möglicher URI-Intent-Filter sehen können.
    • Mit der Geräteimplementierung MÖGLICHERWEISE dem Nutzer die Möglichkeit geben, bestimmte URI-Intent-Filter, die erfolgreich verifiziert wurden, für einzelne Intent-Filter zu überschreiben.
    • Die Geräteimplementierung MÜSSEN Nutzern die Möglichkeit geben, bestimmte mögliche URI-Intent-Filter aufzurufen und zu überschreiben, wenn bei der Geräteimplementierung einige mögliche URI-Intent-Filter erfolgreich überprüft werden können, während andere fehlschlagen können.

3.2.3.3 Intent-Namespaces

Geräteimplementierungen DÜRFEN KEINE Android-Komponente enthalten, die neue Intents oder Broadcast-Intent-Muster berücksichtigt, die eine ACTION-, CATEGORY- oder einen anderen Schlüsselstring in Android verwenden. oder com.android.-Namespace auf sie zugreifen. Geräte-Implementierer DÜRFEN KEINE Android-Komponenten enthalten, die neue Intent- oder Broadcast-Intent-Muster berücksichtigen und dabei eine ACTION-, CATEGORY- oder andere Schlüsselzeichenfolge in einem Paketbereich verwenden, der zu einer anderen Organisation gehört. Implementierungen von Geräten DÜRFEN KEINE Intent-Muster ändern oder erweitern, die von den in Abschnitt 3.2.3.1 aufgeführten Kern-Apps verwendet werden. Geräteimplementierungen KÖNNEN Intent-Muster mit Namespaces enthalten, die klar und deutlich mit der eigenen Organisation verknüpft sind. Dieses Verbot entspricht dem, das in Abschnitt 3.6 für Java-Sprachklassen festgelegt wurde.

3.2.3.4 Übertragungs-Intents

Drittanbieteranwendungen nutzen die Plattform, um bestimmte Intents zu senden und so über Änderungen in der Hardware- oder Softwareumgebung zu informieren. Android-kompatible Geräte MÜSSEN die öffentlichen Übertragungs-Intents als Reaktion auf geeignete Systemereignisse senden. Broadcast-Intents werden in der SDK-Dokumentation beschrieben.

3.2.3.5 Standard-App-Einstellungen

Android bietet Einstellungen, mit denen Nutzer ihre Standardanwendungen einfach auswählen können, z. B. für den Startbildschirm oder für SMS. Wo es sinnvoll ist, MÜSSEN Geräteimplementierungen ein ähnliches Einstellungsmenü bereitstellen und mit dem Intent-Filtermuster und den API-Methoden kompatibel sein, die in der SDK-Dokumentation beschrieben werden (siehe unten).

Geräteimplementierungen:

  • MÜSSEN den Intent android.settings.HOME_SETTINGS berücksichtigen, um ein Standardmenü mit App-Einstellungen für den Startbildschirm anzuzeigen, wenn die Geräteimplementierung „android.software.home_screen“ meldet.
  • MÜSSEN ein Einstellungsmenü bereitstellen, das den Intent android.provider.Telephony.ACTION_CHANGE_DEFAULT aufruft, um ein Dialogfeld zum Ändern der Standard-SMS-App anzuzeigen, wenn die Geräteimplementierung „android.hardware.telephony“ meldet.
  • MÜSSEN den Intent android.settings.NFC_PAYMENT_SETTINGS berücksichtigen, um ein Standard-App-Einstellungsmenü für kontaktloses Bezahlen anzuzeigen, wenn die Geräteimplementierung android.hardware.nfc.hce meldet.
  • MÜSSEN dem Intent android.telecom.action.CHANGE_DEFAULT_DIALER ein Dialogfeld angezeigt werden, über das der Nutzer die Standard-Telefon-App ändern kann, wenn die Geräteimplementierung android.hardware.telephony meldet .

3.3 Native API-Kompatibilität

Die Kompatibilität mit nativem Code ist schwierig. Aus diesem Grund wird Geräte-Implementierern Dringend empfohlen, die Implementierungen der unten aufgeführten Bibliotheken aus dem vorgelagerten Android-Open-Source-Projekt zu verwenden.

3.3.1. Binäre Anwendungsschnittstellen

Der verwaltete Dalvik-Bytecode kann in nativen Code, der in der APK-Datei der Anwendung bereitgestellt wird, als ELF-.so-Datei aufrufen, die für die entsprechende Gerätehardware-Architektur kompiliert ist. Da nativer Code stark von der zugrunde liegenden Prozessortechnologie abhängt, definiert Android im Android-NDK eine Reihe von Binärschnittstellen (Application Binary Interfaces, ABIs). Geräteimplementierungen MÜSSEN mit einem oder mehreren definierten ABIs kompatibel sein und die Kompatibilität mit dem Android-NDK wie unten beschrieben implementieren.

Wenn eine Geräteimplementierung ein Android ABI unterstützt, gilt Folgendes:

  • MÜSSEN Support für Code bereitstellen, der in der verwalteten Umgebung ausgeführt wird, um nativer Code mit der standardmäßigen JNI-Semantik (Java Native Interface) aufzurufen.
  • MÜSSEN mit jeder erforderlichen Bibliothek in der Liste unten quellkompatibel (d.h. Header-kompatibel) und binär kompatibel (für das ABI) sein.
  • MÜSSEN die entsprechende 32-Bit-ABI unterstützen, wenn eine 64-Bit-ABI unterstützt wird.
  • MÜSSEN die systemeigene Binärschnittstelle (Application Binary Interface, ABI), die vom Gerät unterstützt wird, korrekt über die Parameter android.os.Build.SUPPORTED_ABIS, android.os.Build.SUPPORTED_32_BIT_ABIS und android.os.Build.SUPPORTED_64_BIT_ABIS gemeldet werden, jeweils eine durch Kommas getrennte Liste von ABIs, sortiert vom höchsten bis zum am wenigsten bevorzugten.
  • MÜSSEN mit den oben genannten Parametern nur die ABIs melden, die in der neuesten Version der Android NDK ABI Management-Dokumentation dokumentiert und beschrieben sind, und MÜSSEN Support für die Erweiterung Advanced SIMD (auch bekannt als NEON) bereitstellen.
  • SOLLTEN mit dem Quellcode und den Header-Dateien erstellt werden, die im vorgelagerten Android Open Source Project verfügbar sind.

In zukünftigen Versionen des Android-NDK werden möglicherweise weitere ABIs unterstützt. Wenn eine Geräteimplementierung nicht mit einer vorhandenen vordefinierten ABI kompatibel ist, DARF sie KEINE Unterstützung für ABIs melden.

Die folgenden APIs mit nativem Code MÜSSEN für Apps mit nativem Code verfügbar sein:

  • libandroid.so (native Unterstützung für Android-Aktivitäten)
  • libc (C-Bibliothek)
  • libcamera2ndk.so
  • libdl (dynamische Verknüpfung)
  • libEGL.so (natives OpenGL-Oberflächenmanagement)
  • libGLESv1_CM.so (OpenGL ES 1.x)
  • libGLESv2.so (OpenGL ES 2.0)
  • libGLESv3.so (OpenGL ES 3.x)
  • libicui18n.so
  • libicuuc.so
  • libjnigraphics.so
  • Liblog (Android-Protokollierung)
  • libmediandk.so (Unterstützung für native Media APIs)
  • libm (Mathematikbibliothek)
  • libOpenMAXAL.so (Unterstützung von OpenMAX AL 1.0.1)
  • libOpenSLES.so (Audiounterstützung von OpenSL ES 1.0.1)
  • libRS.so
  • libstdc++ (Minimale Unterstützung für C++)
  • libvulkan.so (Vulkan)
  • libz (Zlib-Komprimierung)
  • JNI-Schnittstelle
  • Unterstützung für OpenGL, wie unten beschrieben

Bei den oben aufgeführten nativen Bibliotheken DARF die Geräteimplementierung die öffentlichen Funktionen NICHT hinzufügen oder entfernen.

Native Bibliotheken, die nicht oben aufgeführt sind, aber in AOSP implementiert und bereitgestellt werden, da Systembibliotheken reserviert sind und DÜRFEN NICHT mit Apps von Drittanbietern ausgeliefert werden, die auf API-Level 24 oder höher ausgerichtet sind.

Bei Geräteimplementierungen KÖNNEN Bibliotheken hinzugefügt werden, die nicht von AOSP stammen und in Drittanbieter-Apps direkt als API zur Verfügung gestellt werden. Die zusätzlichen Bibliotheken sollten sich jedoch in /vendor/lib oder /vendor/lib64 befinden und unter /vendor/etc/public.libraries.txt aufgelistet sein.

Beachten Sie, dass Geräteimplementierungen libGLESv3.so enthalten MÜSSEN und wiederum alle Funktionssymbole für OpenGL ES 3.1 und Android Extension Pack exportieren MÜSSEN, wie im NDK-Release „android-24“ definiert. Obwohl alle Symbole vorhanden sein müssen, müssen nur die entsprechenden Funktionen für OpenGL ES-Versionen und -Erweiterungen vollständig implementiert sein, die tatsächlich vom Gerät unterstützt werden.

3.3.1.1 Grafikbibliotheken

Vulkan ist eine plattformübergreifende API mit geringem Aufwand für leistungsstarke 3D-Grafiken. Geräteimplementierungen MÜSSEN die folgenden Anforderungen erfüllen, auch wenn keine Unterstützung für die Vulkan-APIs vorgesehen ist:

  • Sie MUSS immer eine native Bibliothek mit dem Namen libvulkan.so bereitstellen , die Funktionssymbole für die Vulkan 1.0 API sowie die Erweiterungen VK_KHR_surface , VK_KHR_android_surface und VK_KHR_swapchain exportiert.

Geräteimplementierungen, sofern die Vulkan-APIs unterstützt werden:

  • MÜSSEN gemeldet werden, mindestens ein VkPhysicalDevices über den vkEnumeratePhysicalDevices-Aufruf.
  • In jedem aufgeführten VkPhysicalDevices MUSS die Vulkan 1.0 API vollständig implementiert werden.
  • MÜSSEN die korrekten Funktions-Flags PackageManager#FEATURE_VULKAN_HARDWARE_LEVEL und PackageManager#FEATURE_VULKAN_HARDWARE_VERSION gemeldet werden.
  • MÜSSEN Ebenen, die in nativen Bibliotheken namens libVkLayer*.so im Bibliotheksverzeichnis des Anwendungspakets enthalten sind, mithilfe der Funktionen vkEnumerateInstanceLayerProperties und vkEnumerateDeviceLayerProperties in libvulkan.so aufzählen.
  • DÜRFEN KEINE Ebenen auflisten, die von Bibliotheken außerhalb des Anwendungspakets bereitgestellt werden, oder andere Möglichkeiten zum Nachverfolgen oder Abfangen der Vulkan API anbieten, es sei denn, die Anwendung hat das Attribut android:debuggable=”true”.

Geräteimplementierungen, sofern keine Unterstützung der Vulkan APIs inbegriffen ist:

3.3.2 Kompatibilität mit nativem 32-Bit-ARM-Code

Die ARMv8-Architektur stellt mehrere CPU-Vorgänge ein, einschließlich einiger Vorgänge, die in vorhandenem nativem Code verwendet werden. Auf 64-Bit-ARM-Geräten MÜSSEN die folgenden veralteten Vorgänge für nativen 32-Bit-ARM-Code verfügbar bleiben, entweder über native CPU-Unterstützung oder durch Softwareemulation:

  • Anweisungen zu SWP und SWPB
  • SETEND-Anweisung
  • CP15ISB-, CP15DSB- und CP15DMB-Hürdenoperationen

Bei Legacy-Versionen des Android-NDK wurde /proc/cpuinfo verwendet, um CPU-Funktionen aus nativem 32-Bit-ARM-Code zu ermitteln. Für die Kompatibilität mit Anwendungen, die mit diesem NDK erstellt wurden, MÜSSEN Geräte die folgenden Zeilen in /proc/cpuinfo einfügen, wenn es von 32-Bit-ARM-Anwendungen gelesen wird:

  • „Features:“, gefolgt von einer Liste optionaler ARMv7-CPU-Funktionen, die vom Gerät unterstützt werden.
  • „CPU-Architektur:“, gefolgt von einer Ganzzahl, die die höchste unterstützte ARM-Architektur des Geräts beschreibt (z.B. „8“ für ARMv8-Geräte).

Diese Anforderungen gelten nur, wenn „/proc/cpuinfo“ von 32-Bit-ARM-Anwendungen gelesen wird. Auf Geräten sollte „/proc/cpuinfo“ nicht geändert werden, wenn sie von 64-Bit-ARM- oder Nicht-ARM-Anwendungen gelesen werden.

3.4 Webkompatibilität

3.4.1. WebView-Kompatibilität

Android Watch-Geräte KÖNNEN, aber alle anderen Geräteimplementierungen MÜSSEN eine vollständige Implementierung der android.webkit.Webview API bieten.

Die Plattformfunktion android.software.webview MÜSSEN auf jedem Gerät gemeldet werden, das eine vollständige Implementierung der android.webkit.WebView API bietet, und DARF NICHT auf Geräten gemeldet werden, auf denen die API nicht vollständig implementiert ist. Die Android Open Source-Implementierung verwendet Code aus dem Chromium-Projekt, um android.webkit.WebView zu implementieren. Da es nicht möglich ist, eine umfassende Testsuite für ein Web-Rendering-System zu entwickeln, MÜSSEN Geräte-Implementierer den spezifischen Upstream-Build von Chromium in der WebView-Implementierung verwenden. Im Detail:

  • Implementierungen von „android.webkit.WebView“ auf dem Gerät MÜSSEN auf dem Chromium-Build des vorgelagerten Android Open Source Project für Android 7.0 basieren. Dieser Build enthält eine Reihe von Funktions- und Sicherheitsupdates für WebView.
  • Der von WebView gemeldete User-Agent-String MUSS folgendes Format haben:

    Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like 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 Wert des Strings $(MODEL) MUSS mit dem Wert für android.os.Build.MODEL übereinstimmen.
    • Der Wert des Strings $(BUILD) MUSS mit dem Wert für android.os.Build.ID übereinstimmen.
    • Der Wert des Strings $(CHROMIUM_VER) MUSS der Version von Chromium im vorgelagerten Android-Open-Source-Projekt sein.
    • Bei Geräteimplementierungen KANN „Mobile“ im User-Agent-String weggelassen werden.

Die WebView-Komponente sollte so viele HTML5-Funktionen wie möglich unterstützen. Sofern sie dies unterstützt, SOLLTE die WebView-Komponente der HTML5-Spezifikation entsprechen.

3.4.2 Browserkompatibilität

Implementierungen von Android TV, Watch und Android Automotive KÖNNEN eine Browser-App weglassen, MÜSSEN jedoch die in Abschnitt 3.2.3.1 beschriebenen Muster für die öffentliche Absicht unterstützen. Alle anderen Arten von Geräteimplementierungen MÜSSEN eine eigenständige Browser-Anwendung für das allgemeine Surfen im Web enthalten.

Der eigenständige Browser KANN auf einer anderen Browser-Technologie als WebKit basieren. Selbst wenn eine alternative Browseranwendung verwendet wird, muss die für Drittanbieteranwendungen bereitgestellte Komponente „android.webkit.WebView“ auf WebKit basieren, wie in Abschnitt 3.4.1 beschrieben.

Implementierungen KÖNNEN einen benutzerdefinierten User-Agent-String in der eigenständigen Browser-Anwendung versenden.

Die eigenständige Browseranwendung (ob auf der vorgelagerten WebKit-Browseranwendung oder einer Ersatzanwendung eines Drittanbieters basiert) SOLLTE möglichst viele HTML5-Funktionen unterstützen. Geräteimplementierungen MÜSSEN mindestens die folgenden mit HTML5 verknüpften APIs unterstützen:

Außerdem MÜSSEN Geräteimplementierungen die HTML5/W3C Webstorage API und die HTML5/W3C IndexedDB API unterstützen. Im Zuge der Umstellung der Normen zur Webentwicklung auf IndexedDB gegenüber Webspeichern wird erwartet, dass IndexedDB in einer zukünftigen Android-Version eine erforderliche Komponente sein wird.

3.5 API-Verhaltenskompatibilität

Das Verhalten der einzelnen API-Typen (verwaltet, weich, nativ und Web) muss der bevorzugten Implementierung des vorgelagerten Android-Open-Source-Projekts entsprechen. Einige spezifische Kompatibilitätsbereiche sind:

  • Geräte DÜRFEN das Verhalten oder die Semantik eines Standard-Intents NICHT ändern.
  • Geräte DÜRFEN die Lebenszyklus- oder Lebenszyklussemantik einer bestimmten Art von Systemkomponente (wie Service, Activity, ContentProvider usw.) NICHT verändern.
  • Geräte DÜRFEN die Semantik einer Standardberechtigung NICHT ändern.

Die obige Liste ist nicht vollständig. Die Compatibility Test Suite (CTS) testet signifikante Teile der Plattform auf Verhaltenskompatibilität, aber nicht alle. Der Implementierer ist dafür verantwortlich, die Verhaltenskompatibilität mit dem Android Open Source Project zu gewährleisten. Aus diesem Grund sollten Geräte-Implementierer nach Möglichkeit den über das Android Open Source Project verfügbaren Quellcode verwenden, anstatt große Teile des Systems erneut zu implementieren.

3.6. API-Namespaces

Android folgt den Konventionen für Paket- und Klassen-Namespaces, die von der Programmiersprache Java definiert werden. Um die Kompatibilität mit Anwendungen von Drittanbietern sicherzustellen, dürfen Geräte-Implementierer KEINE unzulässigen Änderungen (siehe unten) an diesen Paket-Namespaces vornehmen:

  • java.*
  • javax.*
  • Sonne.*
  • Android.*
  • com.android.*

Unzulässige Änderungen sind unter anderem:

  • Bei Geräteimplementierungen DÜRFEN die öffentlich zugänglichen APIs auf der Android-Plattform NICHT geändert werden, indem Methoden oder Klassensignaturen geändert oder Klassen oder Klassenfelder entfernt werden.
  • Geräte-Implementierer KÖNNEN die zugrunde liegende Implementierung der APIs ändern, aber solche Änderungen DÜRFEN NICHT das angegebene Verhalten und die Java-Sprachsignatur der öffentlich zugänglichen APIs beeinflussen.
  • Geräteimplementierungen DÜRFEN den oben genannten APIs KEINE öffentlich zugänglichen Elemente wie Klassen oder Schnittstellen oder Felder oder Methoden zu vorhandenen Klassen oder Schnittstellen hinzufügen.

Ein „öffentlich zugängliches Element“ ist ein Konstrukt, das nicht mit der Markierung „@hide“ dekoriert ist, wie es im vorgelagerten Android-Quellcode verwendet wird. Mit anderen Worten: Geräte-Implementierer DÜRFEN KEINE neuen APIs verfügbar machen oder vorhandene APIs in den oben genannten Namespaces ändern. Entwickler, die Geräte implementieren, KÖNNEN nur interne Änderungen vornehmen. Diese DÜRFEN jedoch nicht beworben oder den Entwicklern auf andere Weise angezeigt werden.

Geräte-Implementierer KÖNNEN benutzerdefinierte APIs hinzufügen, solche APIs DÜRFEN sich jedoch NICHT in einem Namespace befinden, der einer anderen Organisation gehört oder auf diese verweist. Beispielsweise dürfen Geräte-Implementierer KEINE APIs zu com.google.* oder einem ähnlichen Namespace hinzufügen. Nur Google darf dies tun. Ebenso DARF Google KEINE APIs zu den APIs anderer Unternehmen hinzufügen. Namespaces. Wenn eine Geräteimplementierung außerdem benutzerdefinierte APIs außerhalb des standardmäßigen Android-Namespace enthält, MÜSSEN diese APIs in einer gemeinsam genutzten Bibliothek von Android gepackt sein, damit nur Apps, die diese explizit (über den Mechanismus <uses-library>) verwenden, von der erhöhten Arbeitsspeichernutzung solcher APIs betroffen sind.

Wenn ein Geräte-Implementierer vorschlägt, einen der oben genannten Paket-Namespaces zu verbessern, z. B. durch das Hinzufügen nützlicher neuer Funktionen zu einer vorhandenen API oder das Hinzufügen einer neuen API, sollte der Implementierer source.android.com aufrufen und mit dem Prozess beginnen, Änderungen und Code gemäß den Informationen auf dieser Website beizusteuern.

Beachten Sie, dass die oben genannten Einschränkungen den Standardkonventionen für die Benennung von APIs in der Programmiersprache Java entsprechen. Dieser Abschnitt zielt einfach darauf ab, diese Konventionen zu bekräftigen und sie durch Einbeziehung in diese Kompatibilitätsdefinition bindend zu machen.

3.7 Laufzeitkompatibilität

Geräteimplementierungen MÜSSEN das vollständige Dalvik Executable-Format (DEX) sowie die Dalvik-Bytecode-Spezifikation und die Semantik unterstützen. Geräteimplementierungen SOLLTEN ART, die vorgelagerte Referenzimplementierung des Dalvik Executable Formats, und das Paketverwaltungssystem der Referenzimplementierung verwenden.

Geräteimplementierungen MÜSSEN Dalvik-Laufzeiten so konfigurieren, dass Speicher entsprechend der vorgelagerten Android-Plattform und wie in der folgenden Tabelle angegeben zugeordnet werden. Informationen zu Bildschirmgrößen und Bildschirmdichten finden Sie in Abschnitt 7.1.1. Hinweis: Die unten angegebenen Speicherwerte gelten als Mindestwerte. Bei Geräteimplementierungen MÖGLICHERWEISE kann mehr Speicher pro Anwendung zugewiesen werden.

Bildschirmlayout Bildschirmdichte Mindestanforderungen an den Anwendungsarbeitsspeicher
Android-Uhr 120 dpi (ldpi) 32MB
160 dpi (mdpi)
213 dpi (tvdpi)
240 dpi (hdpi) 36MB
280 dpi (280dpi)
320 dpi (xhdpi) 48MB
360 dpi (360dpi)
400 dpi (400dpi) 56MB
420 dpi (420dpi) 64MB
480 dpi (xxhdpi) 88MB
560 dpi (560dpi) 112MB
640 dpi (xxxhdpi) 154MB
klein/normal 120 dpi (ldpi) 32MB
160 dpi (mdpi)
213 dpi (tvdpi) 48MB
240 dpi (hdpi)
280 dpi (280dpi)
320 dpi (xhdpi) 80MB
360 dpi (360dpi)
400 dpi (400dpi) 96MB
420 dpi (420dpi) 112MB
480 dpi (xxhdpi) 128MB
560 dpi (560dpi) 192MB
640 dpi (xxxhdpi) 256MB
groß 120 dpi (ldpi) 32MB
160 dpi (mdpi) 48MB
213 dpi (tvdpi) 80MB
240 dpi (hdpi)
280 dpi (280dpi) 96MB
320 dpi (xhdpi) 128MB
360 dpi (360dpi) 160MB
400 dpi (400dpi) 192MB
420 dpi (420dpi) 228MB
480 dpi (xxhdpi) 256MB
560 dpi (560dpi) 384MB
640 dpi (xxxhdpi) 512MB
xlarge 120 dpi (ldpi) 48MB
160 dpi (mdpi) 80MB
213 dpi (tvdpi) 96MB
240 dpi (hdpi)
280 dpi (280dpi) 144MB
320 dpi (xhdpi) 192MB
360 dpi (360dpi) 240MB
400 dpi (400dpi) 288MB
420 dpi (420dpi) 336MB
480 dpi (xxhdpi) 384MB
560 dpi (560dpi) 576MB
640 dpi (xxxhdpi) 768MB

3.8 Kompatibilität der Benutzeroberfläche

3.8.1 Launcher (Startbildschirm)

Android umfasst eine Launcher-App (Startbildschirm) und Unterstützung für Drittanbieter-Apps als Ersatz für den Geräte-Launcher (Startbildschirm). Geräteimplementierungen, die es Apps von Drittanbietern ermöglichen, den Startbildschirm des Geräts zu ersetzen, MÜSSEN die Plattformfunktion "android.software.home_screen" deklarieren.

3.8.2 Widgets

Widgets sind für alle Implementierungen von Android-Geräten optional, sollten jedoch auf Android-Handheld-Geräten unterstützt werden.

Android definiert einen Komponententyp sowie eine entsprechende API und einen entsprechenden API-Lebenszyklus, der es Anwendungen ermöglicht, dem Endnutzer ein „AppWidget“ bereitzustellen. Diese Funktion wird UNBEDINGT empfohlen, auf Handheld-Implementierungen zu unterstützen. Geräteimplementierungen, die das Einbetten von Widgets auf dem Startbildschirm unterstützen, MÜSSEN die folgenden Anforderungen erfüllen und die Unterstützung der Plattformfunktion android.software.app_widgets erklären.

  • Geräte-Launcher MÜSSEN über integrierte Unterstützung für AppWidgets verfügen und Funktionen der Benutzeroberfläche zum Hinzufügen, Konfigurieren, Anzeigen und Entfernen von AppWidgets direkt im Launcher anzeigen.
  • Geräteimplementierungen MÜSSEN in der Lage sein, Widgets zu rendern, die 4 x 4 in der Standardrastergröße aufweisen. Einzelheiten finden Sie in den Designrichtlinien für App-Widgets in der Android SDK-Dokumentation.
  • Bei Geräteimplementierungen, die einen Sperrbildschirm unterstützen, können App-Widgets auf dem Sperrbildschirm angezeigt werden.

3.8.3 Benachrichtigungen

Android umfasst APIs, mit denen Entwickler über die Hardware- und Softwarefunktionen des Geräts Nutzer über wichtige Ereignisse benachrichtigen können.

Einige APIs ermöglichen es Anwendungen, mithilfe von Tönen, Vibrationen und Licht Benachrichtigungen zu senden oder Aufmerksamkeit zu generieren. Geräteimplementierungen MÜSSEN Benachrichtigungen unterstützen, die Hardwarefunktionen verwenden, wie in der SDK-Dokumentation beschrieben, und soweit dies mit der Implementierungshardware möglich ist. Wenn beispielsweise eine Geräteimplementierung einen Vibrationsalarm enthält, MÜSSEN die Vibrations-APIs korrekt implementiert werden. Wenn bei einer Geräteimplementierung keine Hardware vorhanden ist, MÜSSEN die entsprechenden APIs als managementfrei implementiert werden. Dieses Verhalten wird in Abschnitt 7 ausführlicher beschrieben.

Außerdem MUSS die Implementierung alle Ressourcen (Symbole, Animationsdateien usw.), die in den APIs oder im Styleguide für Status-/Systemleisten angegeben sind, korrekt rendern. Bei Android TV-Geräten besteht die Möglichkeit, dass die Benachrichtigungen nicht angezeigt werden. Geräte-Implementierer KÖNNEN eine alternative Nutzererfahrung für Benachrichtigungen bieten als die, die von der Referenz-Android-Open-Source-Implementierung bereitgestellt wird. Diese alternativen Benachrichtigungssysteme MÜSSEN jedoch vorhandene Benachrichtigungsressourcen unterstützen (siehe oben).

Android Automotive-Implementierungen KÖNNEN die Sichtbarkeit und das Timing von Benachrichtigungen verwalten, um die Ablenkung des Fahrers zu verringern. Sie MÜSSEN jedoch Benachrichtigungen anzeigen, die CarExtender verwenden, wenn sie von Apps angefordert werden.

Android unterstützt verschiedene Benachrichtigungen, z. B.:

  • Umfassende Benachrichtigungen . Interaktive Ansichten für laufende Benachrichtigungen.
  • Vorabbenachrichtigungen . Nutzer von interaktiven Ansichten können Aktionen ausführen oder sie schließen, ohne die aktuelle App zu verlassen.
  • Benachrichtigungen auf dem Sperrbildschirm Benachrichtigungen werden über einem Sperrbildschirm angezeigt und können besser sichtbar sein.

Wenn solche Benachrichtigungen auf Android-Geräten sichtbar gemacht werden, MÜSSEN die Rich- und Heads-up-Benachrichtigungen korrekt ausgeführt werden und Titel/Name, Symbol und Text enthalten, wie in den Android-APIs dokumentiert.

Android umfasst Notification Listener Service APIs, die es Apps (sobald sie ausdrücklich durch den Nutzer aktiviert wurden) ermöglichen, eine Kopie aller Benachrichtigungen zu erhalten, sobald diese gepostet oder aktualisiert werden. Geräteimplementierungen MÜSSEN korrekt und unverzüglich Benachrichtigungen vollständig an alle installierten und nutzeraktivierten Listener-Dienste senden, einschließlich aller an das Benachrichtigungsobjekt angehängten Metadaten.

Geräteimplementierungen, die die Funktion „Bitte nicht stören“ unterstützen, MÜSSEN die folgenden Anforderungen erfüllen:

  • MÜSSEN eine Aktivität implementieren, die auf den Intent ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS reagieren würde. Bei Implementierungen mit UI_MODE_TYPE_NORMAL MUSS es sich dabei um eine Aktivität handeln, bei der der Nutzer der App Zugriff auf nicht störende Richtlinienkonfigurationen gewähren oder verweigern kann.
  • Wenn die Geräteimplementierung dem Nutzer die Möglichkeit bietet, Apps von Drittanbietern den Zugriff auf die Konfiguration der „Nicht stören“-Richtlinie zu gewähren oder zu verweigern, MÜSSEN die automatischen Regeln für „Nicht stören“ angezeigt werden, die von Anwendungen erstellt wurden, zusammen mit den vom Nutzer erstellten und vordefinierten Regeln.
  • MÜSSEN die über NotificationManager.Policy übergebenen Werte für suppressedVisualEffects berücksichtigt werden. Wenn für eine App eines der Flags SUPPRESSED_EFFEKT_SCREEN_OFF oder SUPPRESSED_EFFECT_SCREEN_ON festgelegt ist, SOLLTEN die Nutzer darauf hingewiesen werden, dass die visuellen Effekte im Einstellungsmenü „Nicht stören“ unterdrückt sind.

Android enthält APIs, mit denen Entwickler die Suche in ihre Anwendungen einbinden und die Daten ihrer Anwendungen in die globale Systemsuche aufnehmen können. Im Allgemeinen besteht diese Funktion aus einer einzigen, systemweiten Benutzeroberfläche, über die Nutzer Suchanfragen eingeben, Vorschläge während der Eingabe anzeigen und Ergebnisse anzeigen können. Mit den Android-APIs können Entwickler diese Oberfläche wiederverwenden, um eine Suche in ihren eigenen Apps durchzuführen, und ermöglichen es Entwicklern, Ergebnisse über die allgemeine Benutzeroberfläche für die globale Suche bereitzustellen.

Implementierungen von Android-Geräten SOLLTEN die globale Suche umfassen. Dabei handelt es sich um eine einzige, gemeinsam genutzte, systemweite Suchoberfläche, die in Echtzeit Vorschläge als Reaktion auf Nutzereingaben erhalten kann. Bei Geräteimplementierungen SOLLTEN die APIs implementiert werden, die es Entwicklern ermöglichen, diese Benutzeroberfläche für die Suche in ihren eigenen Anwendungen wiederzuverwenden. Geräteimplementierungen, die die globale Suchoberfläche implementieren MÜSSEN die APIs implementieren, die es Anwendungen von Drittanbietern ermöglichen, dem Suchfeld Vorschläge hinzuzufügen, wenn das Suchfeld im globalen Suchmodus ausgeführt wird. Wenn keine Anwendungen von Drittanbietern installiert sind, die diese Funktion nutzen, sollte das Standardverhalten darin bestehen, Ergebnisse und Vorschläge von Websuchmaschinen anzuzeigen.

Implementierungen von Android-Geräten SOLLTEN und Implementierungen mit Android Automotive MÜSSEN einen Assistenten auf dem Gerät implementieren, der die Unterstützungsaktion ausführt.

Android umfasst auch die Assist APIs, über die Apps festlegen können, wie viele Informationen des aktuellen Kontextes mit dem Assistenten auf dem Gerät geteilt werden. Geräteimplementierungen, die die unterstützende Aktion unterstützen, MÜSSEN Endnutzer durch ein weißes Licht am Bildschirmrand deutlich darauf hinweisen, wenn der Kontext geteilt wird. Damit Endnutzer gut zu sehen sind, MÜSSEN die Angaben der Dauer und Helligkeit der Implementierung des Android Open Source Project entsprechen oder diese überschreiten.

3.8.5 Toast

Anwendungen können die Toast API verwenden, um dem Endnutzer kurze nicht modale Strings anzuzeigen, die nach kurzer Zeit ausgeblendet werden. In Geräteimplementierungen MÜSSEN Endnutzer-Toasts von Apps gut sichtbar angezeigt werden.

3.8.6. Designs

Android bietet „Designs“, mit denen Apps Stile auf eine gesamte Aktivität oder App anwenden können.

Android umfasst eine „Holo“-Designfamilie als eine Reihe definierter Stile, die App-Entwickler verwenden können, wenn sie dem Holo-Design-Design entsprechen möchten, das im Android SDK definiert ist. Bei Geräteimplementierungen DÜRFEN KEINE der Holo-Designattribute geändert werden, die Anwendungen zur Verfügung stehen.

Android umfasst eine „Material“-Designfamilie als eine Reihe definierter Stile, die Anwendungsentwickler verwenden können, wenn sie das Erscheinungsbild des Design-Themes an die Vielzahl verschiedener Android-Gerätetypen anpassen möchten. Geräteimplementierungen MÜSSEN die Designfamilie „Material“ unterstützen und DÜRFEN KEINE der Attribute für das Material-Design oder deren Assets ändern, die in Apps sichtbar sind.

Android umfasst auch eine „Gerätestandard“-Designfamilie als eine Reihe definierter Stile, die Anwendungsentwickler verwenden können, wenn sie das Erscheinungsbild des Gerätedesigns anpassen möchten, das vom Geräte-Implementierer definiert wurde. Bei Geräteimplementierungen KÖNNEN die Attribute für Gerätestandarddesigns, die Apps zur Verfügung stehen, geändert werden.

Android unterstützt ein Variantendesign mit durchscheinenden Systemleisten, mit dem App-Entwickler den Bereich hinter der Status- und Navigationsleiste mit ihren App-Inhalten ausfüllen können. Damit Entwickler in dieser Konfiguration einheitlich arbeiten können, ist es wichtig, dass das Symbol der Statusleiste bei verschiedenen Geräteimplementierungen beibehalten wird. Daher MÜSSEN bei Implementierungen von Android-Geräten für Systemstatussymbole (z. B. Signalstärke und Akkustand) und vom System ausgegebene Benachrichtigungen Weiß verwendet werden, es sei denn, das Symbol zeigt einen problematischen Status an oder eine App fordert mit der Markierung SYSTEM_UI_FLAG_LIGHT_STATUS_BAR eine Lichtstatusleiste an. Wenn eine App eine helle Statusleiste anfordert, MÜSSEN bei Android-Geräteimplementierungen die Farbe der Systemstatussymbole zu Schwarz geändert werden. Weitere Informationen finden Sie unter R.style.

3.8.7 Live-Hintergründe

Android definiert einen Komponententyp sowie eine entsprechende API und einen entsprechenden Lebenszyklus, die es Anwendungen ermöglichen, einem oder mehreren Live-Hintergründen für Endnutzer verfügbar zu sein. Live-Hintergründe sind Animationen, Muster oder ähnliche Bilder mit eingeschränkten Eingabemöglichkeiten, die als Hintergrund hinter anderen Anwendungen angezeigt werden.

Hardware gilt als in der Lage, Live-Hintergründe zuverlässig auszuführen, wenn sie alle Live-Hintergründe ohne Einschränkung der Funktionalität mit einer angemessenen Framerate und ohne negative Auswirkungen auf andere Anwendungen ausführen kann. Wenn Einschränkungen in der Hardware dazu führen, dass Hintergründe und/oder Anwendungen abstürzen, nicht richtig funktionieren, zu viel CPU- oder Akkuleistung beansprucht werden oder mit inakzeptablen Frame-Rates ausgeführt wird, wird davon ausgegangen, dass die Hardware keinen Live-Hintergrund ausführen kann. So können beispielsweise einige Live-Hintergründe zum Rendern ihrer Inhalte möglicherweise den OpenGL 2.0- oder 3.x-Kontext verwenden. Live-Hintergrund funktioniert nicht zuverlässig auf Hardware, die nicht mehrere OpenGL-Kontexte unterstützt, da die Verwendung eines OpenGL-Kontexts mit anderen Anwendungen in Konflikt stehen kann, die ebenfalls einen OpenGL-Kontext verwenden.

Geräteimplementierungen, die Live-Hintergründe zuverlässig ausführen können, wie oben beschrieben, SOLLTEN Live-Hintergründe implementieren. Bei der Implementierung MÜSSEN sie das Funktions-Flag der Plattform android.software.live_wallpaper angeben.

3.8.8. Wechseln zwischen Aktivitäten

Da die Navigationstaste „Zuletzt verwendet“ optional ist, ist die Implementierung des Übersichtsbildschirms bei Android Watch- und Android Automotive-Implementierungen OPTIONAL und bei Android TV-Geräten EMPFOHLEN. Es sollte trotzdem eine Möglichkeit geben, zwischen Aktivitäten in Android Automotive-Implementierungen zu wechseln.

Der vorgelagerte Android-Quellcode umfasst den Übersichtsbildschirm, eine Benutzeroberfläche auf Systemebene zum Wechseln zwischen Aufgaben und zur Anzeige der zuletzt aufgerufenen Aktivitäten und Aufgaben. Dabei wird eine Miniaturansicht der grafischen Darstellung der App zum Zeitpunkt des letzten Verlassens der App angezeigt. Bei Geräteimplementierungen einschließlich der Navigationstaste für die Funktion „Recents“ (Kürzlich) wie in Abschnitt 7.2.3 beschrieben KÖNNEN MÖGLICHERWEISE die Schnittstelle verändern, MÜSSEN jedoch die folgenden Anforderungen erfüllen:

  • MÜSSEN mindestens bis zu 6 angezeigte Aktivitäten unterstützen.
  • SOLLTE mindestens den Titel von vier Aktivitäten gleichzeitig anzeigen.
  • MÜSSEN die Funktion zur Bildschirmfixierung implementieren und dem Nutzer ein Einstellungsmenü zur Ein/Aus-Schaltfläche für die Funktion zur Verfügung stellen.
  • SOLLTEN unter „Letzte“ die Farbe, das Symbol und den Bildschirmtitel hervorheben.
  • SOLLTE ein abschließendes Angebot („x“) angezeigt werden, aber KANN die Anzeige verzögern, bis der Nutzer mit den Bildschirmen interagiert.
  • SOLLTEN Sie eine Verknüpfung implementieren, um einfach zur vorherigen Aktivität zu wechseln.
  • KANN verbundene zuletzt verwendete Elemente als Gruppe angezeigt werden, die zusammen verschoben wird.
  • SOLLTEN Sie den schnellen Wechsel zwischen den beiden zuletzt verwendeten Apps auslösen, wenn zweimal auf die Taste „Zuletzt verwendet“ getippt wird.
  • SOLLTE den Splitscreen-Mehrfenstermodus (falls unterstützt) auslösen, wenn die Taste „Recents“ (Zuletzt verwendet) gedrückt wird.

Bei Geräteimplementierungen wird dringend empfohlen, die vorgelagerte Android-Benutzeroberfläche (oder eine ähnliche Miniaturansicht-basierte Oberfläche) für den Übersichtsbildschirm zu verwenden.

3.8.9. Eingabeverwaltung

Android unterstützt Input Management und Eingabemethodeneditoren von Drittanbietern. Geräteimplementierungen, die es Nutzern ermöglichen, Eingabemethoden von Drittanbietern auf dem Gerät zu verwenden, MÜSSEN die Plattformfunktion android.software.input_methods deklarieren und IME APIs unterstützen, wie in der Android SDK-Dokumentation definiert.

Geräteimplementierungen, die die Funktion "android.software.input_methods" deklarieren, MÜSSEN einen vom Nutzer zugänglichen Mechanismus zum Hinzufügen und Konfigurieren von Eingabemethoden von Drittanbietern bereitstellen. Bei Geräteimplementierungen MÜSSEN die Einstellungsoberfläche als Reaktion auf den Intent android.settings.INPUT_METHOD_SETTINGS angezeigt werden.

3.8.10 Mediensteuerung auf dem Sperrbildschirm

Die Remote Control Client API wird von Android 5.0 durch die Media Notification Template ersetzt, mit der Medien-Apps in die Wiedergabesteuerung auf dem Sperrbildschirm integriert werden können. Geräteimplementierungen, die einen Sperrbildschirm unterstützen, MÜSSEN, sofern keine Android Automotive- oder Watch-Implementierung verwendet wird, die Sperrbildschirm-Benachrichtigungen einschließlich der Media Notification Template anzeigen.

3.8.11 Bildschirmschoner (früher „Dreams“)

Android unterstützt interaktive Bildschirmschoner, die zuvor als Dreams bezeichnet wurden. Mit Bildschirmschonern können Nutzer mit Apps interagieren, wenn ein an eine Stromquelle angeschlossenes Gerät inaktiv ist oder in einem Dock angedockt ist. Android Watch-Geräte KÖNNEN Bildschirmschoner implementieren. Andere Arten von Geräteimplementierungen SOLLTEN jedoch Bildschirmschoner unterstützen und Nutzern eine Option zur Konfiguration von Bildschirmschonern als Reaktion auf den Intent android.settings.DREAM_SETTINGS bieten.

3.8.12. Standort

Wenn ein Gerät über einen Hardwaresensor (z.B. GPS) verfügt, der die Standortkoordinaten übermitteln kann, MÜSSEN in den Einstellungen im Menü „Standort“ die Standortmodi angezeigt werden.

3.8.13. Unicode und Schriftart

Android unterstützt die in Unicode 9.0 definierten Emoji-Zeichen. Alle Geräteimplementierungen MÜSSEN diese Emoji-Zeichen in Farbglyphen rendern können. Wenn Android-Geräteimplementierungen einen IME enthalten, SOLLTEN sie dem Nutzer eine Eingabemethode für diese Emoji-Zeichen bereitstellen.

Android-Handheld-Geräte SOLLTEN den Hautton und verschiedene Familien-Emojis unterstützen, wie im Unicode Technical Report Nr. 51 angegeben.

Android unterstützt die Schriftart Roboto 2 mit unterschiedlichen Schriftstärken: sans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black, sans-serif-kondensed, sans-serif-condensed-light.Diese MÜSSEN alle für die auf dem Gerät verfügbaren Sprachen enthalten sein und alle Unicode 7.0- und Unicode-Zeichen 7.0 sowie die Buchstaben Unicode C, Unicode C, Unicode C, Unicode C, Unicode C, Unicode C, Unicode C und Unicode

3.8.14. Mehrere Fenster

Bei einer Geräteimplementierung MÜSSEN keine Mehrfenstermodi implementiert werden. Wenn jedoch mehrere Aktivitäten gleichzeitig angezeigt werden können, MÜSSEN diese Mehrfenstermodi gemäß dem Anwendungsverhalten und den APIs implementiert werden, die in der Dokumentation zur Unterstützung des Mehrfenstermodus des Android SDK beschrieben sind. Außerdem müssen die folgenden Anforderungen erfüllt werden:

  • Apps können in der Datei AndroidManifest.xml entweder explizit über das Attribut android:resizeableActivity oder implizit durch die Angabe von targetSdkVersion > 24. Apps, die dieses Attribut in ihrem Manifest explizit auf „false“ setzen, DÜRFEN nicht im Mehrfenstermodus gestartet werden. Apps, für die das Attribut nicht in ihrer Manifestdatei festgelegt ist (targetSdkVersion < 24), können im Mehrfenstermodus gestartet werden. Das System MÜSSEN jedoch darauf hinweisen, dass die App im Mehrfenstermodus möglicherweise nicht wie erwartet funktioniert.
  • Geräteimplementierungen DÜRFEN NICHT den Splitscreen- oder Freiformmodus anbieten, wenn die Bildschirmhöhe und -breite unter 440 dp liegen.
  • Geräteimplementierungen mit einer Bildschirmgröße von xlarge SOLLTEN den Freiformmodus unterstützen.
  • Implementierungen von Android-Fernsehgeräten MÜSSEN den Bild-im-Bild-Modus (PIP) unterstützen und den BiB-Mehrfenstermodus in der oberen rechten Ecke platzieren, wenn BiB aktiviert ist.
  • Geräteimplementierungen mit Unterstützung für den Mehrfenstermodus im BiB-Modus MÜSSEN mindestens 240 × 135 dp für das BiB-Fenster zuweisen.
  • Wenn der BiB-Mehrfenstermodus unterstützt wird, MUSS die Taste KeyEvent.KEYCODE_WINDOW zur Steuerung des BiB-Fensters verwendet werden. Andernfalls MUSS der Schlüssel für die Vordergrundaktivität verfügbar sein.

3.9. Geräteverwaltung

Android umfasst Funktionen, mit denen sicherheitsbewusste Apps über die Android Device Administration API Geräteverwaltungsfunktionen auf Systemebene ausführen können. So können beispielsweise Passwortrichtlinien erzwungen oder Daten aus der Ferne gelöscht werden. Geräteimplementierungen MÜSSEN eine Implementierung der DevicePolicyManager-Klasse bereitstellen. Geräteimplementierungen, die einen sicheren Sperrbildschirm unterstützen, MÜSSEN alle in der Android SDK-Dokumentation definierten Richtlinien zur Geräteverwaltung implementieren und die Plattformfunktion android.software.device_admin melden.

3.9.1 Gerätebereitstellung

3.9.1.1 Nutzerverwaltung für Geräteinhaber

Wenn in einer Geräteimplementierung die Funktion android.software.device_admin deklariert ist, MUSS die Bereitstellung der Device Owner-App einer Device Policy Client-Anwendung (DPC) wie unten angegeben implementiert werden:

Geräteimplementierungen KÖNNEN eine vorinstallierte App zur Geräteverwaltung enthalten. Diese App DARF jedoch NICHT als Geräteeigentümer-App festgelegt werden, ohne dass der Nutzer oder der Administrator des Geräts ausdrücklich seine Zustimmung erteilt hat.

3.9.1.2 Verwaltete Bereitstellung von Profilen

Wenn in einer Geräteimplementierung android.software.managed_users deklariert wird, MUSS eine DPC-Anwendung (Device Policy Controller) als Inhaber eines neuen verwalteten Profils registriert werden können.

Der Bereitstellungsprozess für verwaltete Profile (der von android.app.action.PROVISION_MANAGED_PROFILE initiierte Ablauf) MÜSSEN mit der AOSP-Implementierung übereinstimmen.

Geräteimplementierungen MÜSSEN die folgenden Nutzereigenschaften in der Benutzeroberfläche der Einstellungen bereitstellen, um dem Nutzer anzuzeigen, wenn eine bestimmte Systemfunktion durch den Device Policy Controller (DPC) deaktiviert wurde:

  • Ein einheitliches Symbol oder ein anderes Nutzerangebot (z. B. das vorgelagerte AOSP-Infosymbol), das angibt, wann eine bestimmte Einstellung von einem Geräteadministrator eingeschränkt wird.
  • Eine kurze Erklärung, die der Device Admin über das setShortSupportMessage bereitstellt.
  • Das Symbol der DPC-Anwendung.

3.9.2 Unterstützung für verwaltete Profile

Geräte, die mit verwalteten Profilen kompatibel sind, sind Geräte, die:

Geräte, die verwaltete Profile unterstützen, MÜSSEN:

  • Deklarieren Sie das Funktions-Flag für die Plattform android.software.managed_users .
  • Verwaltete Profile über die android.app.admin.DevicePolicyManager APIs unterstützen.
  • Lassen Sie zu, dass nur ein einziges verwaltetes Profil erstellt wird.
  • Verwenden Sie ein Symbol (ähnlich dem AOSP-Upstream-Logo), das verwaltete Apps und Widgets und andere Badge-UI-Elemente wie „Letzte“ und Benachrichtigungen.
  • Ein Benachrichtigungssymbol (ähnlich dem AOSP-Upstream-Arbeitsabzeichen) anzeigen, das darauf hinweist, wenn sich der Nutzer in einer Anwendung mit einem verwalteten Profil befindet.
  • Benachrichtigung anzeigen, dass sich der Nutzer im verwalteten Profil befindet, wenn das Gerät aktiviert wird (ACTION_USER_PRESENT) und sich die Anwendung im Vordergrund im verwalteten Profil befindet.
  • Wenn ein verwaltetes Profil vorhanden ist, sollte die visuelle Darstellung in der Intent-Auswahl angezeigt werden. damit der Nutzer den Intent vom verwalteten Profil an den primären Nutzer weiterleiten kann oder umgekehrt, wenn er vom Device Policy Controller aktiviert wurde.
  • Wenn ein verwaltetes Profil vorhanden ist, sollten Sie die folgenden Nutzereigenschaften sowohl für den primären Nutzer als auch für das verwaltete Profil anzeigen: <ph type="x-smartling-placeholder">
      </ph>
    • Separate Abrechnung von Akku, Standort, mobiler Daten und Speichernutzung für den Hauptnutzer und das verwaltete Profil.
    • Unabhängige Verwaltung von VPN-Anwendungen, die im primären Nutzer oder verwalteten Profil installiert sind
    • Unabhängige Verwaltung von Anwendungen, die im primären Nutzer oder im verwalteten Profil installiert sind
    • Unabhängige Verwaltung von Konten innerhalb des primären Nutzers oder des verwalteten Profils
  • Sorgen Sie dafür, dass die vorinstallierten Telefon-, Kontakt- und Messaging-Anwendungen Anruferinformationen im verwalteten Profil (falls vorhanden) neben denen aus dem primären Profil suchen und nachschlagen können, wenn der Device Policy Controller dies zulässt. Wenn Kontakte aus dem verwalteten Profil in der vorinstallierten Anrufliste, auf der Benutzeroberfläche für laufende Anrufe, in Benachrichtigungen über laufende und verpasste Anrufe, Kontakte und Messaging-Apps angezeigt werden, SOLLTEN sie mit demselben Kennzeichen versehen sein, das auch für Apps in verwalteten Profilen verwendet wird.
  • MÜSSEN sicherstellen, dass es alle Sicherheitsanforderungen für ein Gerät mit mehreren aktivierten Nutzern erfüllt (siehe Abschnitt 9.5), auch wenn das verwaltete Profil nicht zusätzlich zum primären Nutzer als weiterer Nutzer gezählt wird.
  • Die Möglichkeit, einen separaten Sperrbildschirm anzugeben, der die folgenden Anforderungen erfüllt, um Zugriff auf Apps zu gewähren, die in einem verwalteten Profil ausgeführt werden.
    • Geräteimplementierungen MÜSSEN den Intent DevicePolicyManager.ACTION_SET_NEW_PASSWORD berücksichtigen und eine Schnittstelle zum Konfigurieren separater Anmeldedaten für den Sperrbildschirm für das verwaltete Profil anzeigen.
    • Die Anmeldedaten für den Sperrbildschirm des verwalteten Profils MÜSSEN die gleichen Mechanismen zum Speichern und Verwalten von Anmeldedaten wie das übergeordnete Profil verwenden, wie auf der Website des Android-Open-Source-Projekts beschrieben.
    • Die DPC-Passwortrichtlinien MÜSSEN nur für die Sperrbildschirm-Anmeldedaten des verwalteten Profils gelten, es sei denn, sie werden über die DevicePolicyManager-Instanz aufgerufen, die von getParentProfileInstance zurückgegeben wird.

3:10. Bedienungshilfen

Android bietet eine Ebene der Bedienungshilfen, über die Nutzer mit Behinderungen ihre Geräte einfacher bedienen können. Darüber hinaus bietet Android Plattform-APIs, mit denen Implementierungen von Bedienungshilfen Callbacks für Nutzer- und Systemereignisse empfangen und alternative Feedbackmechanismen wie Sprachausgabe, haptisches Feedback und Navigation mit Trackball oder Steuerkreuz generiert werden können.

Für Geräteimplementierungen gelten die folgenden Anforderungen:

  • Android Automotive-Implementierungen SOLLTEN eine Implementierung des Android-Frameworks für Bedienungshilfen umfassen, das der standardmäßigen Android-Implementierung entspricht.
  • Geräteimplementierungen (ausgenommen Android Automotive) MÜSSEN eine Implementierung des Android-Frameworks für Bedienungshilfen bereitstellen, das der standardmäßigen Android-Implementierung entspricht.
  • Geräteimplementierungen (ausgenommen Android Automotive) MÜSSEN Drittanbieter-Implementierungen von Bedienungshilfen über die android.accessibilityservice APIs unterstützen.
  • Geräteimplementierungen (ausgenommen Android Automotive) MÜSSEN AccessibilityEvents generieren und diese Ereignisse in Übereinstimmung mit der standardmäßigen Android-Implementierung an alle registrierten AccessibilityService-Implementierungen senden.
  • Geräteimplementierungen (Android Automotive- und Android Watch-Geräte ohne Audioausgabe) MÜSSEN einen für den Nutzer zugänglichen Mechanismus zum Aktivieren und Deaktivieren von Bedienungshilfen anbieten und MÜSSEN diese Oberfläche als Reaktion auf den Intent android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS anzeigen.

  • Implementierungen von Android-Geräten mit Audioausgabe werden dringend empfohlen, Bedienungshilfen auf dem Gerät zu implementieren, die mit den Funktionen der Bedienungshilfen TalkBack** und des Schalterzugriffs vergleichbar sind oder diese sogar übersteigen (https://github.com/google/talkback).

  • Android Watch-Geräte mit Audioausgabe sollten auf dem Gerät Implementierungen einer Bedienungshilfe bieten, die mit der Bedienungshilfe TalkBack (https://github.com/google/talkback) vergleichbar oder darüber hinausgeht.
  • Geräteimplementierungen SOLLTEN einen Mechanismus innerhalb des vorkonfigurierten Einrichtungsvorgangs bereitstellen, mit dem Nutzer relevante Bedienungshilfen aktivieren können, sowie Optionen zum Anpassen der Schriftgröße, der Anzeigegröße und der Vergrößerungsbewegungen.

** Für Sprachen, die von der Sprachausgabe unterstützt werden.

Wenn eine vorab geladene Bedienungshilfe vorhanden ist, MUSS diese {directBootAware}-App mit Direct Boot-fähig sein, wenn das Gerät über verschlüsselten Speicher mit dateibasierter Verschlüsselung (File-Based Encryption, FBE) verfügt.

3:11. Sprachausgabe

Android umfasst APIs, mit denen Anwendungen die Sprachausgabedienste nutzen können. Außerdem können Dienstanbieter Implementierungen von Text-in-Sprache-Diensten zur Verfügung stellen. Geräteimplementierungen, die die Funktion „android.hardware.audio.output“ melden, MÜSSEN die folgenden Anforderungen des Android TTS-Frameworks erfüllen.

Android Automotive-Implementierungen:

  • MÜSSEN die Android TTS Framework APIs unterstützen.
  • KANN die Installation von Sprachausgabe-Engines von Drittanbietern unterstützen. Sofern unterstützt, MÜSSEN Partner eine für den Nutzer zugängliche Oberfläche bereitstellen, über die der Nutzer eine Text-in-Sprache-Engine für die Verwendung auf Systemebene auswählen kann.

Alle anderen Geräteimplementierungen:

  • MÜSSEN die Android TTS Framework APIs unterstützen und eine Sprachausgabe-Engine hinzufügen, die die auf dem Gerät verfügbaren Sprachen unterstützt. Beachten Sie, dass die vorgelagerte Open-Source-Software von Android eine voll funktionsfähige TTS-Engine-Implementierung enthält.
  • MÜSSEN die Installation der Sprachausgabe-Engines von Drittanbietern unterstützen.
  • MÜSSEN eine für den Nutzer zugängliche Oberfläche zur Verfügung stehen, über die Nutzer eine Text-in-Sprache-Engine für die Verwendung auf Systemebene auswählen können.

3:12. TV-Eingabe-Framework

Das Android Television Input Framework (TIF) vereinfacht die Übertragung von Live-Inhalten auf Android Television-Geräten. TIF stellt eine Standard-API zum Erstellen von Eingabemodulen zur Steuerung von Android TV-Geräten bereit. Implementierungen von Android-Fernsehgeräten MÜSSEN das TV Input Framework unterstützen.

In Geräteimplementierungen, die TIF unterstützen, muss die Plattformfunktion android.software.live_tv deklariert werden.

3.12.1. TV-App

Für jede Geräteimplementierung, die eine Unterstützung für Live-TV erklärt, MUSS eine TV-App (TV App) installiert sein. Das Open-Source-Projekt von Android bietet eine Implementierung der TV-App.

Die TV-App MUSS die Möglichkeit haben, TV-Kanäle zu installieren und zu nutzen, und muss die folgenden Anforderungen erfüllen:

  • Geräteimplementierungen MÜSSEN die Installation und Verwaltung von TIF-basierten Eingaben von Drittanbietern ( Eingaben von Drittanbietern) erlauben.
  • Geräteimplementierungen bieten eine visuelle Trennung zwischen vorinstallierten TIF-basierten Eingaben (installierten Eingängen) und Eingängen von Drittanbietern.
  • Bei Geräteimplementierungen DÜRFEN die Drittanbietereingaben NICHT mehr als eine einzige Navigationsaktion von der TV-App entfernt angezeigt werden (z.B. Erweiterung einer Liste mit Drittanbietereingaben über die TV-App).

3.12.1.1 Elektronische Programmübersicht

Implementierungen von Android TV-Geräten MÜSSEN ein interaktives und informatives Overlay anzeigen, das einen elektronischen Programmführer (Electronic Program Guide, EPG) enthalten MÜSSEN, der aus den Werten in den Feldern TvContract.Programs generiert wird. Der elektronische Programmführer MUSS die folgenden Anforderungen erfüllen:

  • Der EPG MÜSSEN Informationen zu allen installierten Eingaben und Drittanbietereingängen anzeigen.
  • Der elektronische Programmführer bietet eine visuelle Trennung zwischen den installierten Eingaben und den Eingaben von Drittanbietern.
  • Im EPG wird dringend empfohlen, installierte Eingaben und Eingaben von Drittanbietern gleichwertig darzustellen. Im elektronischen Programmführer dürfen die Drittanbietereingaben NICHT mehr als eine einzige Navigationsaktion neben den installierten Eingaben im elektronischen Programmführer angezeigt werden.
  • Bei einem Kanalwechsel MÜSSEN Geräteimplementierungen EPG-Daten für das aktuell wiedergegebene Programm anzeigen.

3.12.1.2 Navigation

Die TV-App MUSS die Navigation für die folgenden Funktionen über das Steuerkreuz, die Zurück- und die Startbildschirmtaste auf den Eingabegeräten des Android TV-Geräts (z.B. Fernbedienung, Fernbedienungs-App oder Gamecontroller) zulassen:

  • TV-Kanäle wechseln
  • EPG wird geöffnet
  • TIF-basierte Eingaben von Drittanbietern konfigurieren und darauf abstimmen
  • Menü „Einstellungen“ wird geöffnet

Die TV-App sollte Schlüsselereignisse über CEC an HDMI-Eingänge weiterleiten.

3.12.1.3 Verknüpfung der TV-Eingabe-App

Implementierungen von Android-Fernsehgeräten MÜSSEN die Verknüpfung von TV-Eingabe-Apps unterstützen. So können über alle Eingaben Aktivitätsverknüpfungen von der aktuellen Aktivität zu einer anderen Aktivität bereitgestellt werden, z. B. ein Link von der Live-Sendung zu ähnlichen Inhalten. Wenn die TV-App zur Verfügung steht, MUSS die App-Verknüpfung für die TV-Eingabe angezeigt werden.

3.12.1.4 Zeitversetzt

Implementierungen von Android TV-Geräten MÜSSEN die zeitversetzte Nutzung unterstützen, sodass Nutzer Liveinhalte pausieren und fortsetzen können. Geräteimplementierungen MÜSSEN dem Nutzer die Möglichkeit geben, das gerade wiedergegebene Programm zu pausieren und fortzusetzen, wenn zeitversetztes Fernsehen für dieses Programm verfügbar ist.

3.12.1.5 TV-Aufzeichnung

Implementierungen von Android Television-Geräten werden dringend empfohlen, die TV-Aufzeichnung zu unterstützen. Wenn der TV-Eingang die Aufzeichnung unterstützt, bietet der elektronische Programmführer MÖGLICHERWEISE die Möglichkeit zur Aufzeichnung einer Sendung, sofern die Aufzeichnung nicht verboten ist. Geräteimplementierungen SOLLTEN eine Benutzeroberfläche zur Wiedergabe der aufgezeichneten Sendungen bereitstellen.

3:13. Schnelleinstellungen

Implementierungen für Android-Geräte SOLLTEN eine UI-Komponente für die Schnelleinstellungen enthalten, die einen schnellen Zugriff auf häufig genutzte oder dringend benötigte Aktionen ermöglicht.

Android enthält die quicksettings API, mit der Drittanbieter-Apps Kacheln implementieren können, die vom Nutzer zusammen mit den vom System bereitgestellten Kacheln in der Komponente „Schnelleinstellungen“ hinzugefügt werden können. Wenn eine Geräteimplementierung über eine UI-Komponente für Schnelleinstellungen verfügt, geschieht Folgendes:

  • MÜSSEN dem Nutzer erlauben, Kacheln zu einer Drittanbieter-App zu den Schnelleinstellungen hinzuzufügen oder zu entfernen.
  • DÜRFEN NICHT automatisch eine Ansicht aus einer Drittanbieter-App direkt zu den Schnelleinstellungen hinzugefügt werden.
  • MÜSSEN alle vom Nutzer hinzugefügten Kacheln aus Drittanbieter-Apps zusammen mit den vom System bereitgestellten Kacheln für die Schnelleinstellungen angezeigt werden.

3:14. Fahrzeug-UI-APIs

3.14.1. Fahrzeugmedien-UI

Jede Geräteimplementierung, in der Automobil-Unterstützung deklariert wird, MÜSSEN ein UI-Framework zur Unterstützung von Drittanbieter-Apps enthalten, die die MediaBrowser- und MediaSession-APIs nutzen.

Das UI-Framework, das Drittanbieter-Apps unterstützt, die von MediaBrowser und MediaSession abhängen, hat die folgenden visuellen Anforderungen:

  • MediaItem- und Benachrichtigungssymbole MÜSSEN unverändert angezeigt werden.
  • MÜSSEN diese Elemente wie von MediaSession beschrieben angezeigt werden, z.B. Metadaten, Symbole oder Bilder.
  • MÜSSEN den App-Titel anzeigen.
  • MÜSSEN über eine Leiste verfügen, um die MediaBrowser-Hierarchie darzustellen.

4. Kompatibilität der App-Paketerstellung

Bei Geräteimplementierungen MÜSSEN die Android-APK-Dateien installiert und ausgeführt werden, die mit dem im offiziellen Android SDK enthaltenen Tool "aapt" generiert wurden. Aus diesem Grund SOLLTEN bei Geräteimplementierungen das Paketverwaltungssystem der Referenzimplementierung verwendet werden.

Der Paketmanager muss die Überprüfung von APK-Dateien mithilfe des APK Signature Scheme v2 und der JAR-Signatur unterstützen.

Bei Geräteimplementierungen dürfen die APK-, Android-Manifest-, Dalvik-Bytecode- oder RenderScript-Bytecodeformate NICHT so erweitert werden, dass diese Dateien nicht korrekt installiert werden können und auf anderen kompatiblen Geräten ausgeführt werden.

5. Multimedia-Kompatibilität

5.1. Medien-Codecs

Geräteimplementierungen:

  • MÜSSEN die in der Android SDK-Dokumentation angegebenen Kernmedienformate unterstützen, es sei denn, dies ist in diesem Dokument ausdrücklich zulässig.

  • MÜSSEN die in den folgenden Tabellen definierten und über MediaCodecList gemeldeten Medienformate, Encoder, Decodierer, Dateitypen und Containerformate unterstützen.

  • MÜSSEN auch alle in CamcorderProfile gemeldeten Profile decodieren können.

  • MÜSSEN alle Formate decodieren können, die codiert werden können. Dazu gehören alle von seinen Encodern generierten Bitstreams.

Codecs SOLLTEN eine minimale Codec-Latenz anstreben, mit anderen Worten, Codecs –

  • SOLLTEN KEINE Eingabepuffer verbrauchen und speichern und erst nach der Verarbeitung Eingabepuffer zurückgeben.
  • Decodierte Puffer sollten NICHT länger aufbewahrt werden, als vom Standard vorgegeben (z.B. SPS).
  • Sie sollten codierte Puffer NICHT länger aufbewahren, als von der GoP-Struktur vorgegeben.

Alle in der folgenden Tabelle aufgeführten Codecs sind Software-Implementierungen in der bevorzugten Android-Implementierung aus dem Android Open Source-Projekt.

Weder Google noch die Open Handset Alliance machen Zusicherungen, dass diese Codecs frei von Patenten Dritter sind. Personen, die diesen Quellcode in Hardware- oder Softwareprodukten verwenden möchten, werden darauf hingewiesen, dass für Implementierungen dieses Codes, einschließlich in Open-Source-Software oder Shareware, möglicherweise Patentlizenzen von den entsprechenden Patentinhabern erforderlich sind.

5.1.1 Audio-Codecs

Format/Codec Encoder Decoder Details Unterstützte Dateitypen/Containerformate
MPEG-4 AAC-Profil
(AAC LC)
ERFORDERLICH 1 REQUIRED Unterstützung für Inhalte in Mono/Stereo/5.0/5.12 mit Standardabtastraten von 8 bis 48 kHz.
  • 3GPP (3GP)
  • MPEG-4 (MP4, M4A)
  • Raw-AAC von ADTS (AAC, Decodierung in Android 3.1 und höher, Codierung in Android 4.0 und höher, ADIF nicht unterstützt)
  • MPEG-TS (Ts, nicht suchbar, Android 3.0 oder höher)
MPEG-4 HE AAC Profile (AAC+) ERFORDERLICH 1
(Android 4.1 und höher)
REQUIRED Unterstützung für Inhalte in Mono/Stereo/5.0/5.12 mit Standardabtastraten von 16 bis 48 kHz.
MPEG-4 HE AACv2
Profil (erweitertes AAC+)
REQUIRED Unterstützung für Inhalte in Mono/Stereo/5.0/5.12 mit Standardabtastraten von 16 bis 48 kHz.
AAC ELD (Optimierte AAC mit geringer Verzögerung) ERFORDERLICH 1
(Android 4.1 und höher)
ERFORDERLICH
(Android 4.1 und höher)
Unterstützung für Mono-/Stereoinhalte mit Standardabtastraten von 16 bis 48 kHz.
AMR-NB ERFORDERLICH 3 ERFORDERLICH 3 4,75 bis 12,2 kbit/s, Stichproben bei 8 kHz 3GPP (3GP)
AMR-WB ERFORDERLICH 3 ERFORDERLICH 3 9 Raten von 6,60 kbit/s bis 23,85 kbit/s, Stichproben bei 16 kHz
FLAC ERFORDERLICH
(Android 3.1 und höher)
Mono/Stereo (kein Multi-Channel). Abtastraten von bis zu 48 kHz (bei Geräten mit einer Ausgabe von 44,1 kHz werden jedoch bis zu 44,1 kHz empfohlen, da der Downsampler von 48 bis 44,1 kHz keinen Tiefpassfilter hat). 16-Bit EMPFOHLEN; keine 24-Bit-Wiedergabe. Nur FLAC (.flac)
MP3 REQUIRED Mono/Stereo, 8–320 Kbit/s konstant (CBR) oder variable Bitrate (VBR) MP3 (.mp3)
MIDI REQUIRED MIDI-Typ 0 und 1. DLS Version 1 und 2. XMF und XMF für Mobilgeräte Unterstützung der Klingeltonformate RTTTL/RTX, OTA und iMelody
  • Geben Sie 0 und 1 (.mid, .xmf, .mxmf) ein
  • RTTTL/RTX (.rtttl, .rtx)
  • Onlinereisebüro (OTA)
  • iMelody (Imy)
Vorbis REQUIRED
  • OGG (OGG)
  • Matroska (MKV, Android 4.0 und höher)
PCM/WAVE ERFORDERLICH 4
(Android 4.1 und höher)
REQUIRED Lineare 16-Bit-PCM (Raten bis zur Grenze der Hardware). Geräte MÜSSEN Abtastraten für PCM-Rohdaten bei Frequenzen von 8.000, 11.025, 1.6.000 und 4.4.100 Hz unterstützen. WAVE (WAV)
Opus ERFORDERLICH
(Android 5.0 und höher)
Matroska (.mkv), Ogg(.ogg)

1 Erforderlich für Geräteimplementierungen, die „android.hardware.microphone“ definieren, aber optional für Android Watch-Geräteimplementierungen.

2 Die Aufzeichnung oder Wiedergabe KANN in Mono oder Stereo durchgeführt werden, die Decodierung von AAC-Eingabepuffern von Mehrkanal-Streams (d.h. mehr als zwei Kanälen) in PCM über den Standard-AAC-Audiodecoder in der android.media.MediaCodec API MÜSSEN jedoch unterstützt werden:

  • Die Decodierung erfolgt ohne Downmix (Beispiel: Ein 5.0-AAC-Stream muss in fünf PCM-Kanäle decodiert werden, ein 5.1-AAC-Stream muss in sechs PCM-Kanäle decodiert werden).
  • Dynamic Range-Metadaten, wie in „Dynamic Range Control (DRC)“ definiert gemäß ISO/IEC 14496-3 und die DRC-Tasten „android.media.MediaFormat“, um das Verhalten des Audiodecoders in Bezug auf den dynamischen Bereich zu konfigurieren. 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_LEVEL_LEVEL und KEY_AAC_ENCODED_REFERENCE_TARGET_

3 Erforderlich für Implementierungen von Android-Handheld-Geräten.

4 Erforderlich für Geräteimplementierungen, die „android.hardware.microphone“ definieren, einschließlich der Implementierung von Android Watch-Geräten.

5.1.2 Bild-Codecs

Format/Codec Encoder Decoder Details Unterstützte Dateitypen/Containerformate
JPEG REQUIRED REQUIRED Base+progressiv JPEG (JPG)
GIF REQUIRED GIF (.gif)
PNG REQUIRED REQUIRED PNG (PNG)
BMP REQUIRED BMP (BMP)
WebP REQUIRED REQUIRED WebP (WebP)
Raw REQUIRED ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw)

5.1.3 Video-Codecs

  • Codecs, die HDR-Profile bewerben, MUSS die Analyse und Verarbeitung statischer HDR-Metadaten unterstützen.

  • Wenn ein Medien-Codec die Unterstützung für die interne Aktualisierung wirbt, MUSS er die Aktualisierungszeiträume im Bereich von 10 bis 60 Frames unterstützen und innerhalb von 20% des konfigurierten Aktualisierungszeitraums korrekt funktionieren.

  • Video-Codecs MÜSSEN Unterstützung für Ausgabe- und Eingabe-Bytebuffer-Größen leisten, die den größtmöglichen komprimierten und unkomprimierten Frame gemäß den Vorgaben des Standards und der Konfiguration aufnehmen. Eine übermäßige Zuweisung ist jedoch nicht zulässig.

  • Videoencoder und -decoder müssen das flexible Farbformat YUV420 unterstützen (COLOR_FormatYUV420Flexible).

Format/Codec Encoder Decoder Details Unterstützte Dateitypen/
Containerformate
H.263 MAI MAI
  • 3GPP (3GP)
  • MPEG-4 (MP4)
H.264-AVC ERFORDERLICH 2 ERFORDERLICH 2 Einzelheiten finden Sie in Abschnitten 5.2 und 5.3.
  • 3GPP (3GP)
  • MPEG-4 (MP4)
  • MPEG-2 TS (TS, nur AAC-Audio, nicht suchbar, Android 3.0 oder höher)
H.265 HEVC ERFORDERLICH 5 Weitere Informationen finden Sie in Abschnitt 5.3. MPEG-4 (MP4)
MPEG-2 EMPFOHLEN6 Profil "Main" MPEG2-TS
MPEG-4 SP ERFORDERLICH 2 3GPP (3GP)
VP8 3 ERFORDERLICH 2
(Android 4.3 und höher)
ERFORDERLICH 2
(Android 2.3.3 und höher)
Einzelheiten finden Sie in Abschnitten 5.2 und 5.3.
VP9 ERFORDERLICH 2
(Android 4.4 und höher)
Weitere Informationen finden Sie in Abschnitt 5.3.

1 Erforderlich für Geräteimplementierungen, die Kamerahardware enthalten und „android.hardware.camera“ oder „android.hardware.camera.front“ definieren.

2 Erforderlich für Geräteimplementierungen mit Ausnahme von Android Watch-Geräten.

3 Für eine akzeptable Qualität von Webvideostreamingdiensten und Videokonferenzen SOLLTEN Sie bei der Geräteimplementierung einen VP8-Hardware-Codec verwenden, der die Anforderungen erfüllt.

4 Geräteimplementierungen SOLLTEN das Schreiben von Matroska WebM-Dateien unterstützen.

5 Dringend für Android Automotive empfohlen, optional für Android Watch und für alle anderen Gerätetypen erforderlich.

6 Gilt nur für Android TV-Geräteimplementierungen.

5.2. Videocodierung

Video-Codecs sind für Android Watch-Geräteimplementierungen optional.

Video-Encoder H.264, VP8, VP9 und HEVC –

  • MÜSSEN dynamisch konfigurierbare Bitraten unterstützen.
  • SOLLTE variable Frame-Rates unterstützen, wobei der Video-Encoder die sofortige Frame-Dauer anhand der Zeitstempel der Eingabepuffer bestimmen und seinen Bit-Bucket basierend auf dieser Frame-Dauer zuweisen sollte.

H.263- und MPEG-4-Video-Encoder sollten dynamisch konfigurierbare Bitraten unterstützen.

Alle Videoencoder SOLLTEN die folgenden Bitratenziele über zwei gleitende Fenster erreichen:

  • Sie SOLLTEN nicht mehr als ~15% über der Bitrate zwischen Intraframe-Intervallen (I-Frames) liegen.
  • Sie sollte über ein gleitendes Fenster von 1 Sekunde nicht mehr als ca. 100% über der Bitrate liegen.

5.2.1 H.263

Implementierungen von Android-Geräten mit H.263-Encodern MÜSSEN Baseline-Profillevel 45 unterstützen.

5.2.2 H-264

Implementierungen auf Android-Geräten mit H.264-Codec-Unterstützung:

  • MUSS Baseline-Profilebene 3 unterstützen.
    Die Unterstützung für ASO (Arbitrary Slice Ordering), FMO (Flexible Macroblock Ordering) und RS (redundante Slices) ist jedoch OPTIONAL. Aus Gründen der Kompatibilität mit anderen Android-Geräten wird empfohlen, ASO, FMO und RS von Encodern nicht für das Baseline-Profil zu verwenden.
  • MÜSSEN die SD-Videocodierungsprofile (Standard Definition) in der folgenden Tabelle unterstützen.
  • SOLLTEN die Hauptprofilebene 4 unterstützen.
  • SOLLTEN die Videocodierungsprofile in HD (High Definition) unterstützen, wie in der folgenden Tabelle angegeben.
  • Außerdem wird Android TV-Geräten dringend empfohlen, HD-Videos in 1080p mit 30 fps zu codieren.
SD (niedrige Qualität) SD (hohe Qualität) HD 720p 1 HD 1080p 1
Videoauflösung 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
Video-Framerate 20 fps Frame-Rate: 30 fps Frame-Rate: 30 fps Frame-Rate: 30 fps
Video-Bitrate 384 kbit/s 2 Mbit/s 4 Mbit/s 10 Mbit/s

1 Wenn dies von der Hardware unterstützt wird, aber UNBEDINGT EMPFOHLEN für Android TV-Geräte.

5.2.3 VP8

Implementierungen auf Android-Geräten mit Unterstützung für den VP8-Codec MÜSSEN die SD-Videocodierungsprofile sowie die folgenden HD-Videocodierungsprofile (High Definition) unterstützen.

SD (niedrige Qualität) SD (hohe Qualität) HD 720p 1 HD 1080p 1
Videoauflösung 320 x 180 Pixel 640 x 360 Pixel 1280 x 720 px 1920 x 1080 px
Video-Framerate Frame-Rate: 30 fps Frame-Rate: 30 fps Frame-Rate: 30 fps Frame-Rate: 30 fps
Video-Bitrate 800 kbit/s 2 Mbit/s 4 Mbit/s 10 Mbit/s

1 Wenn dies von der Hardware unterstützt wird.

5.3. Videodecodierung

Video-Codecs sind für Android Watch-Geräteimplementierungen optional.

Geräteimplementierungen:

  • MÜSSEN die dynamische Videoauflösung und Framerate-Wechsel über die standardmäßigen Android-APIs innerhalb eines Streams für alle VP8-, VP9-, H.264- und H.265-Codecs in Echtzeit und bis zur maximalen Auflösung unterstützen, die von jedem Codec auf dem Gerät unterstützt wird.

  • Implementierungen, die den Dolby Vision-Decoder unterstützen:

  • MÜSSEN einen Dolby Vision-fähigen Extraktor bereitstellen.
  • MÜSSEN Dolby Vision-Inhalte korrekt auf dem Gerätebildschirm oder an einem Standard-Videoausgangsport (z.B. HDMI).

  • Implementierungen, die einen Dolby Vision-fähigen Extraktor bereitstellen, MÜSSEN den Trackindex der abwärtskompatiblen Basisschicht (falls vorhanden) so festlegen, dass er mit dem Trackindex der kombinierten Dolby Vision-Ebene übereinstimmt.

5.3.1 MPEG-2

Implementierungen von Android-Geräten mit MPEG-2-Decodierern müssen die hohe Ebene des Hauptprofils unterstützen.

5.3.2 H.263

Implementierungen von Android-Geräten mit H.263-Decodierern MÜSSEN Baseline-Profillevel 30 und -Level 45 unterstützen.

5.3.3 MPEG-4

Implementierungen auf Android-Geräten mit MPEG-4-Decodiern MÜSSEN einfache Profilebene 3 unterstützen.

5.3.4. H.264

Implementierungen von Android-Geräten mit H.264-Decodern:

  • MÜSSEN die Hauptprofilebene 3.1 und das Basisprofil unterstützen.
    Die Unterstützung für ASO (Arbitrary Slice Ordering), FMO (Flexible Macroblock Ordering) und RS (redundante Slices) ist OPTIONAL.
  • MÜSSEN Videos mit den SD-Profilen (Standard Definition) decodieren können, die in der folgenden Tabelle aufgeführt und mit dem Basisprofil und der Hauptprofilebene 3.1 (einschließlich 720p30) codiert sind.
  • SOLLTEN in der Lage sein, Videos mit HD-Profilen (High Definition) zu decodieren, wie in der folgenden Tabelle angegeben.
  • Außerdem können Android-Fernsehgeräte – <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN High Profile Level 4.2 und das HD 1080p60-Decodierungsprofil unterstützen.
    • MÜSSEN in der Lage sein, Videos mit beiden HD-Profilen, wie in der folgenden Tabelle angegeben, zu decodieren und mit dem Baseline-Profil, dem Hauptprofil oder dem High-Profil-Level 4.2 codiert zu sein.
SD (niedrige Qualität) SD (hohe Qualität) HD 720p 1 HD 1080p 1
Videoauflösung 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
Video-Framerate Frame-Rate: 30 fps Frame-Rate: 30 fps 60 fps 30 fps (60 fps 2 )
Video-Bitrate 800 kbit/s 2 Mbit/s 8 Mbit/s 20 Mbit/s

1 ERFORDERLICH, wenn die von der Display.getSupportedModes()-Methode gemeldete Höhe gleich oder größer als die Videoauflösung ist.

2 Für Android TV-Geräteimplementierungen ERFORDERLICH.

5.3.5. H.265 (HEVC)

Implementierungen von Android-Geräten, wenn H.265-Codec unterstützt wird, wie in Abschnitt 5.1.3 beschrieben:

  • MÜSSEN die Hauptprofilebene 3 der Hauptstufe und die SD-Video-Decodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
  • SOLLTEN die HD-Decodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
  • MÜSSEN die HD-Decodierungsprofile wie in der folgenden Tabelle angegeben unterstützt werden, wenn ein Hardware-Decodierer vorhanden ist.
  • Außerdem gilt für Android-Fernsehgeräte Folgendes:
  • MÜSSEN das HD-720p-Decodierungsprofil unterstützen.
  • Die Unterstützung des HD-1080p-Decodierungsprofils wird dringend empfohlen. Wenn das HD 1080p-Decodierungsprofil unterstützt wird, MUSS es die Hauptstufe 4.1 des Hauptprofils unterstützen.
  • SOLLTEN das UHD-Decodierungsprofil unterstützen. Wenn das UHD-Decodierungsprofil unterstützt wird, MUSS der Codec Main10 Level 5 der Hauptstufe unterstützen.
SD (niedrige Qualität) SD (hohe Qualität) HD 720p HD 1080p UHD
Videoauflösung 352 x 288 px 720 x 480 px 1280 x 720 px 1920 x 1080 px 3840 x 2160 Pixel
Video-Framerate Frame-Rate: 30 fps Frame-Rate: 30 fps Frame-Rate: 30 fps 30 fps (60 fps 1 ) 60 fps
Video-Bitrate 600 Kbit/s 1,6 Mbit/s 4 Mbit/s 5 Mbit/s 20 Mbit/s

1 ERFORDERLICH für Implementierungen von Android TV-Geräten mit H.265-Hardware-Decodierung.

5.3.6. VP8

Implementierungen auf Android-Geräten, wenn der VP8-Codec wie in Abschnitt 5.1.3 beschrieben unterstützt wird:

  • MÜSSEN die SD-Decodierungsprofile in der folgenden Tabelle unterstützen.
  • SOLLTEN die HD-Decodierungsprofile in der folgenden Tabelle unterstützen.
  • Android-Fernsehgeräte MÜSSEN das HD-1080p60-Decodierungsprofil unterstützen.
SD (niedrige Qualität) SD (hohe Qualität) HD 720p 1 HD 1080p 1
Videoauflösung 320 x 180 Pixel 640 x 360 Pixel 1280 x 720 px 1920 x 1080 px
Video-Framerate Frame-Rate: 30 fps Frame-Rate: 30 fps 30 fps (60 fps 2 ) 30 (60 fps 2 )
Video-Bitrate 800 kbit/s 2 Mbit/s 8 Mbit/s 20 Mbit/s

1 ERFORDERLICH, wenn die von der Display.getSupportedModes()-Methode gemeldete Höhe gleich oder größer als die Videoauflösung ist.

2 Für Android TV-Geräteimplementierungen ERFORDERLICH.

5.3.7. VP9

Implementierungen auf Android-Geräten, wenn der VP9-Codec wie in Abschnitt 5.1.3 beschrieben unterstützt wird:

  • MÜSSEN die SD-Videodecodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
  • SOLLTEN die HD-Decodierungsprofile unterstützen, wie in der folgenden Tabelle angegeben.
  • Wenn ein Hardware-Decodierer vorhanden ist, MÜSSEN die HD-Decodierungsprofile wie in der folgenden Tabelle angegeben unterstützt werden.
  • Außerdem gilt für Android-Fernsehgeräte Folgendes:

    • MÜSSEN das HD-720p-Decodierungsprofil unterstützen.
    • Die Unterstützung des HD-1080p-Decodierungsprofils wird dringend empfohlen.
    • SOLLTEN das UHD-Decodierungsprofil unterstützen. Wenn das UHD-Videodecodierungsprofil unterstützt wird, MUSS es eine 8-Bit-Farbtiefe und VP9-Profil 2 (10-Bit) unterstützen.
SD (niedrige Qualität) SD (hohe Qualität) HD 720p HD 1080p UHD
Videoauflösung 320 x 180 Pixel 640 x 360 Pixel 1280 x 720 px 1920 x 1080 px 3840 x 2160 Pixel
Video-Framerate Frame-Rate: 30 fps Frame-Rate: 30 fps Frame-Rate: 30 fps 30 fps (60 fps 1 ) 60 fps
Video-Bitrate 600 Kbit/s 1,6 Mbit/s 4 Mbit/s 5 Mbit/s 20 Mbit/s

1 ERFORDERLICH für Android TV-Geräteimplementierungen mit VP9-Hardware-Decodierung.

5.4. Audioaufnahmen

Während einige der in diesem Abschnitt beschriebenen Anforderungen seit Android 4.3 als MÜSSEN ausgewiesen sind, werden diese in der Kompatibilitätsdefinition für eine zukünftige Version in MÜSSEN geändert. Bestehenden und neuen Android-Geräten EMPFOHLEN, die genannten Anforderungen zu erfüllen, da sie sonst mit einem Upgrade auf die zukünftige Version nicht mehr mit Android kompatibel sind.

5.4.1 Aufzeichnung von Rohdaten

Geräteimplementierungen, in denen „android.hardware.microphone“ deklariert ist, MÜSSEN die Erfassung von unbearbeiteten Audioinhalten mit den folgenden Eigenschaften zulassen:

  • Format : Lineare PCM, 16 Bit
  • Abtastraten : 8.000, 11.025, 16.000, 44.100
  • Kanäle : Mono

Die Erfassung für die oben genannten Abtastraten MUSS ohne Up-Sampling erfolgen und das Downsampling MÜSSEN einen geeigneten Anti-Aliasing-Filter enthalten.

Geräteimplementierungen, in denen „android.hardware.microphone“ deklariert ist, SOLLTEN die Erfassung von unbearbeiteten Audioinhalten mit den folgenden Eigenschaften ermöglichen:

  • Format : Lineare PCM, 16 Bit
  • Abtastraten : 22.050, 48.000
  • Kanäle : Stereo

Wenn die Erfassung für die obigen Abtastraten unterstützt wird, MUSS die Erfassung ohne ein Upsampling bei einem Verhältnis über 16.000:22050 oder 44.100:48.000 erfolgen. Upsampling und Downsampling MÜSSEN einen geeigneten Antialiasing-Filter enthalten.

5.4.2 Für Spracherkennung aufnehmen

Die Audioquelle android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION muss die Erfassung mit einer der Abtastraten 44.100 und 48.000 unterstützen.

Wenn eine App mit der Aufzeichnung eines Audiostreams mit der Audioquelle android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION beginnt, gilt zusätzlich zu den oben genannten Spezifikationen Folgendes:

  • Das Gerät sollte eine annähernd flache Amplitude gegenüber Frequenzeigenschaften aufweisen, insbesondere ±3 dB von 100 Hz bis 4.000 Hz.
  • Die Empfindlichkeit der Audioeingabe SOLLTE so eingestellt werden, dass eine Schallleistungsquelle von 90 dB bei 1.000 Hz einen RMS-Wert von 2.500 für 16-Bit-Samples ergibt.
  • Die PCM-Amplitudenpegel sollten Änderungen des Eingangs-SPL in einem Bereich von -18 dB bis +12 dB bzw. 90 dB SPL am Mikrofon linear verfolgen.
  • Die gesamte harmonische Verzerrung SOLLTE für 1 kHz bei 90 dB SPL-Eingangslautstärke am Mikrofon weniger als 1% betragen.
  • Die Verarbeitung zur Rauschunterdrückung MUSS deaktiviert werden, falls vorhanden.
  • Die automatische Verstärkungsregelung MUSS deaktiviert werden, falls vorhanden.

Wenn die Plattform Technologien zur Rauschunterdrückung unterstützt, die für Spracherkennung optimiert sind, MUSS der Effekt über die android.media.audiofx.NoiseSuppressor API gesteuert werden können. Darüber hinaus MUSS das UUID-Feld für den Effektdeskriptor des Rauschunterdrückungs jede Implementierung der Rauschunterdrückungstechnologie eindeutig identifizieren.

5.4.3 Aufnahme für Umleitung der Wiedergabe

Die Klasse „android.media.MediaRecorder.AudioSource“ enthält die Audioquelle REMOTE_SUBMIX. Geräte, auf denen „android.hardware.audio.output“ deklariert ist, MÜSSEN die REMOTE_SUBMIX-Audioquelle ordnungsgemäß implementieren. Wenn eine App die android.media.AudioRecord API zum Aufzeichnen aus dieser Audioquelle verwendet, kann sie damit eine Mischung aus allen Audiostreams erfassen. Hiervon ausgenommen sind die folgenden:

  • STREAM_RING
  • STREAM_ALARM
  • STREAM-BENACHRICHTIGUNG

5.5. Audiowiedergabe

Geräteimplementierungen, die „android.hardware.audio.output“ deklarieren, MÜSSEN den Anforderungen in diesem Abschnitt entsprechen.

5.5.1. Raw-Audiowiedergabe

Das Gerät MUSS die Wiedergabe von unbearbeiteten Audioinhalten mit den folgenden Eigenschaften zulassen:

  • Format : Lineare PCM, 16 Bit
  • Abtastraten : 8.000, 11.025, 16.000, 22.050, 32.000, 44.100
  • Kanäle : Mono, Stereo

Das Gerät sollte die Wiedergabe von unformatierten 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. Geräteimplementierungen, die die Funktion „android.hardware.audio.output“ deklarieren:

  • MÜSSEN die Implementierungen EFFEKT_TYPE_EQUALIZER und EFFEKT_TYPE_LOUDNESS_ENHANCER unterstützen, die über die Unterklassen "Equalizer AudioEffect", LoudnessEnhancer gesteuert werden können.
  • MÜSSEN die Visualizer-API-Implementierung unterstützen, die über die Visualizer-Klasse gesteuert werden kann.
  • SOLLTEN die Implementierungen EFFEKT_TYPE_BASS_BOOST, EFFEKT_TYPE_ENV_REVERB, EFFEKT_TYPE_PRESET_REVERB und EFFEKT_TYPE_VIRTUALIZER unterstützen, die über die AudioEffect-Unterklassen BassBoost, EnvironmentalReverb, PresetReverb und Virtualizer gesteuert werden können.

5.5.3 Audioausgabelautstärke

Implementierungen von Android-Fernsehgeräten MÜSSEN auf unterstützten Ausgängen Unterstützung für die allgemeine Lautstärke des Systems und die Dämpfung der digitalen Audioausgabe enthalten. Hiervon ausgenommen ist die komprimierte Audio-Passthrough-Ausgabe, bei der keine Audiodecodierung auf dem Gerät durchgeführt wird.

Bei Android Automotive-Geräteimplementierungen SOLLTEN die Audiolautstärke für jeden Audiostream separat angepasst werden. Dabei muss der Inhaltstyp oder die Nutzung gemäß der Definition in den Audioattributen und die öffentlich in android.car.CarAudioManager definierte Nutzung der Audiofunktion des Autos erlaubt sein.

5.6. Audiolatenz

Die Audiolatenz ist die Zeitverzögerung, wenn ein Audiosignal ein System durchläuft. Viele Arten von Anwendungen nutzen kurze Latenzen, um Soundeffekte in Echtzeit zu erzielen.

Verwenden Sie für die Zwecke dieses Abschnitts die folgenden Definitionen:

  • Ausgabelatenz . Das Intervall zwischen dem Zeitpunkt, zu dem eine Anwendung einen Frame mit PCM-codierten Daten schreibt, und dem Zeitpunkt, zu dem der entsprechende Ton der Umgebung über einen geräteinternen Transducer oder ein Signal präsentiert wird, das das Gerät über einen Anschluss verlässt und extern erfasst werden kann.
  • Kaltausgabelatenz Die Ausgabelatenz für den ersten Frame, wenn das Audioausgabesystem vor der Anfrage inaktiv und heruntergefahren wurde.
  • Kontinuierliche Ausgabelatenz . Die Ausgabelatenz für nachfolgende Frames nach der Audiowiedergabe auf dem Gerät.
  • Eingabelatenz Das Intervall zwischen dem Zeitpunkt, zu dem ein Schall dem Gerät von der Umgebung über einen geräteinternen Transducer oder ein Signal übertragen wird, der über einen Port in das Gerät eintritt, und wenn eine Anwendung den entsprechenden Frame von PCM-codierten Daten liest.
  • Keine Eingabe Der erste Teil eines Eingabesignals, der nicht verwendbar oder nicht verfügbar ist.
  • Kalteingabelatenz Die Summe der verlorenen Eingabezeit und der Eingabelatenz für den ersten Frame, wenn das Audioeingabesystem vor der Anfrage inaktiv war und heruntergefahren wurde.
  • Kontinuierliche Eingabelatenz Die Eingabelatenz für nachfolgende Frames, während das Gerät Audio aufzeichnet.
  • Kalter Ausgabejitter . Die Variabilität zwischen separaten Messungen der Latenzwerte für die kalte Ausgabe.
  • Kalter Eingabejitter . Die Variabilität zwischen separaten Messungen der Latenzwerte für die Cold-Eingabe.
  • Kontinuierliche Umlauflatenz . Die Summe der kontinuierlichen Eingabelatenz plus der kontinuierlichen Ausgabelatenz plus einem Pufferzeitraum. Der Pufferzeitraum gibt der App Zeit, das Signal zu verarbeiten, und die App hat genug Zeit, um den Phasenunterschied zwischen Ein- und Ausgabestreams auszugleichen.
  • OpenSL ES PCM Buffer Queue API Eine Reihe von PCM-bezogenen OpenSL ES APIs im Android NDK.

Bei Geräteimplementierungen, in denen „android.hardware.audio.output“ deklariert ist, wird dringend empfohlen, die folgenden Anforderungen an die Audioausgabe zu erfüllen oder zu übertreffen:

  • Latenz der kalten Ausgabe von 100 Millisekunden oder weniger
  • Latenz für kontinuierliche Ausgabe von maximal 45 Millisekunden
  • kalten Ausgabejitter minimieren

Wenn eine Geräteimplementierung bei Verwendung der OpenSL ES PCM-Pufferwarteschlangen-API nach der ersten Kalibrierung die Anforderungen dieses Abschnitts für die kontinuierliche und die kalte Ausgabelatenz für mindestens ein unterstütztes Audioausgabegerät erfüllt, wird UNBEDINGT EMPFOHLEN, die Unterstützung von Audio mit niedriger Latenz zu melden, indem Sie die Funktion „android.hardware.audio.low_latenz“ über die Klasse android.content.pm.PackageManager melden. Umgekehrt gilt: Wenn die Geräteimplementierung diese Anforderungen nicht erfüllt, DARF sie KEINE Unterstützung für Audio mit niedriger Latenz melden.

Geräteimplementierungen, die android.hardware.microphone beinhalten, werden UNBEDINGT EMPFOHLEN, um die folgenden Anforderungen für die Audioeingabe zu erfüllen:

  • Cold-Input-Latenz von 100 Millisekunden oder weniger
  • Latenz für kontinuierliche Eingabe von maximal 30 Millisekunden
  • Kontinuierliche Umlauflatenz von maximal 50 Millisekunden
  • Kalten Eingabejitter minimieren

5.7. Netzwerkprotokolle

Geräte MÜSSEN die Mediennetzwerkprotokolle für die Audio- und Videowiedergabe unterstützen, wie in der Android SDK-Dokumentation beschrieben. Konkret MÜSSEN Geräte die folgenden Mediennetzwerkprotokolle unterstützen:

Segmentformate Referenz(en) Codec-Unterstützung erforderlich
MPEG-2-Transportstrom ISO 13818 Video-Codecs: <ph type="x-smartling-placeholder">
    </ph>
  • H264-AVC
  • MPEG-4 SP
  • MPEG-2
Weitere Informationen zu H264 AVC, MPEG2-4 SP,
siehe Abschnitt 5.1.3 und MPEG-2.

Audio-Codecs:

  • AAC
Weitere Informationen zu AAC und seinen Varianten finden Sie in Abschnitt 5.1.1.
AAC mit ADTS-Framing und ID3-Tags ISO 13818-7 Weitere Informationen zu AAC und seinen Varianten finden Sie in Abschnitt 5.1.1.
WebVTT WebVTT
  • RTSP (RTP, SDP)

    Das folgende RTP-Audio-Videoprofil und die zugehörigen Codecs MÜSSEN unterstützt werden. Ausnahmen finden Sie in den Fußnoten in der Tabelle in Abschnitt 5.1.

Profilname Referenz(en) Codec-Unterstützung erforderlich
H264-AVC RFC 6184 Weitere Informationen zu H264 AVC finden Sie in Abschnitt 5.1.3.
MP4A-LATM RFC 6416 Weitere Informationen zu AAC und seinen Varianten finden Sie in Abschnitt 5.1.1.
H263–1998 RFC 3551
RFC 4629
RFC 2190
Weitere Informationen zu H263 finden Sie in Abschnitt 5.1.3.
H263–2000 RFC 4629 Weitere Informationen zu H263 finden Sie in Abschnitt 5.1.3.
Logo: AMR RFC 4867 Weitere Informationen zu AMR-NB finden Sie in Abschnitt 5.1.1.
AMR-WB RFC 4867 Weitere Informationen zu AMR-WB finden Sie in Abschnitt 5.1.1.
MP4V-ES RFC 6416 Weitere Informationen zu MPEG-4 SP finden Sie in Abschnitt 5.1.3.
MPEG4-generisch RFC 3640 Weitere Informationen zu AAC und seinen Varianten finden Sie in Abschnitt 5.1.1.
MP2T RFC 2250 Weitere Informationen findest du im Abschnitt MPEG-2 Transport Stream unter "HTTP Live Streaming"

5.8. Sichere Medien

Geräteimplementierungen, die eine sichere Videoausgabe und sichere Oberflächen unterstützen, MÜSSEN die Unterstützung für Display.FLAG_SECURE deklarieren. Geräteimplementierungen, die Display.FLAG_SECURE unterstützen und ein WLAN-Anzeigeprotokoll unterstützen, MÜSSEN die Verbindung mit einem kryptografisch starken Mechanismus wie HDCP 2.x oder höher für kabellose Miracast-Displays sichern. Wenn sie einen kabelgebundenen externen Bildschirm unterstützen, MÜSSEN die Geräteimplementierungen HDCP 1.2 oder höher unterstützen. Implementierungen von Android-Fernsehgeräten MÜSSEN HDCP 2.2 bei Geräten mit 4K-Auflösung und HDCP 1.4 oder höher für niedrigere Auflösungen unterstützen. Die vorgelagerte Open-Source-Implementierung von Android umfasst Unterstützung für kabellose (Miracast) und kabelgebundene (HDMI) Bildschirme, die diese Anforderung erfüllen.

5.9. MIDI (Musical Instrument Digital Interface)

Wenn eine Geräteimplementierung den App-übergreifenden MIDI-Softwaretransport (virtuelle MIDI-Geräte) unterstützt und MIDI über alle der folgenden MIDI-fähigen Hardwaretransporte unterstützt, für die eine allgemeine Nicht-MIDI-Konnektivität bereitgestellt wird, wird UNBEDINGT EMPFOHLEN, die Unterstützung der Funktion android.software.midi über die Klasse android.content.pm.PackageManager zu melden.

Die MIDI-fähigen Hardwaretransporte sind:

  • USB-Hostmodus (Abschnitt 7.7 USB)
  • USB-Peripheriemodus (Abschnitt 7.7 USB)
  • MIDI over Bluetooth LE als zentrale Rolle (Abschnitt 7.4.3 Bluetooth)

Umgekehrt gilt: Wenn die Geräteimplementierung eine allgemeine Nicht-MIDI-Konnektivität über einen bestimmten, oben aufgeführten MIDI-fähigen Hardwaretransport bietet, MIDI über diesen Hardwaretransport aber nicht unterstützt, DARF die Funktion android.software.midi NICHT unterstützt werden.

5.10. Professionelles Audio

Wenn eine Geräteimplementierung alle folgenden Anforderungen erfüllt, wird dringend empfohlen, die Unterstützung der Funktion „android.hardware.audio.pro“ über die Klasse android.content.pm.PackageManager zu melden.

  • Die Geräteimplementierung MÜSSEN die Unterstützung der Funktion android.hardware.audio.low_latenz melden.
  • Die kontinuierliche Umlauf-Audiolatenz, wie in Abschnitt 5.6 Audiolatenz definiert, MÜSSEN maximal 20 Millisekunden und 10 Millisekunden oder weniger bei mindestens einem unterstützten Pfad betragen.
  • Wenn das Gerät über einen 3, 5-mm-Audioanschluss mit 4 Kabeln verfügt, MÜSSEN die kontinuierliche Umlauf-Audiolatenz 20 Millisekunden oder weniger über der Audiobuchse bzw.10 Millisekunden oder weniger über dem Pfad der Audiobuchse betragen.
  • Die Geräteimplementierung MUSS einen oder mehrere USB-Ports enthalten, die den USB-Hostmodus und den USB-Peripheriemodus unterstützen.
  • Im USB-Hostmodus MUSS die USB-Audioklasse implementiert werden.
  • Wenn das Gerät über einen HDMI-Port verfügt, MUSS die Geräteimplementierung die Ausgabe in Stereo und acht Kanäle bei 20-Bit- oder 24-Bit-Tiefe und 192 kHz ohne Bittiefenverlust oder -resampling unterstützen.
  • Die Geräteimplementierung MÜSSEN die Unterstützung der Funktion android.software.midi melden.
  • Wenn das Gerät über einen 3,5-mm-Audioanschluss mit 4 Kabeln verfügt, wird UNBEDINGT EMPFOHLEN, den Abschnitt Spezifikationen für Mobilgeräte (Anschlussbuchsen) in der Spezifikation für kabelgebundene Audio-Headsets (Version 1.1) zu erfüllen.

Latenzen und USB-Audioanforderungen MÜSSEN mit der PCM-Pufferwarteschlangen-API von OpenSL ES erfüllt werden.

Darüber hinaus sollte eine Geräteimplementierung, die die Unterstützung dieser Funktion meldet, folgende Schritte ausführen:

  • Sorgen Sie bei aktivem Audio für eine tragfähige CPU-Leistung.
  • Ungenauigkeiten und Abweichungen der Audiouhr im Verhältnis zur Standardzeit minimieren.
  • Minimieren Sie die Abweichung des Audiotakts relativ zum CPU-CLOCK_MONOTONIC, wenn beide aktiv sind.
  • Minimiere die Audiolatenz über On-Device-Transducer.
  • Minimiere die Audiolatenz über digitale USB-Audioinhalte.
  • Dokumentieren Sie Messungen der Audiolatenz über alle Pfade.
  • Minimieren Sie den Jitter bei den Callback-Eingabezeiten für den Abschluss des Audiopuffers, da sich dies auf den nutzbaren Prozentsatz der vollen CPU-Bandbreite durch den Callback auswirkt.
  • Bei normaler Nutzung und mit der gemeldeten Latenz darf es keine Audiounterläufe (Ausgabe) oder Audioüberläufe (Eingabe) geben.
  • Keine kanalübergreifende Latenzdifferenz.
  • Minimiert die mittlere MIDI-Latenz für alle Transporte.
  • MIDI-Latenzvariabilität unter Last (Jitter) über alle Transporte minimieren
  • Gib für alle Transporte genaue MIDI-Zeitstempel an.
  • Minimiere das Rauschen des Audiosignals über gerätespezifische Transducer, einschließlich der Zeit unmittelbar nach dem Kaltstart.
  • Die Audiotaktdifferenz zwischen den Ein- und Ausgabeseiten der entsprechenden Endpunkte muss null betragen, wenn beide aktiv sind. Beispiele für entsprechende Endpunkte sind das Mikrofon und der Lautsprecher auf dem Gerät oder der Ein- und Ausgang des Audioanschlusses.
  • Verarbeitet Callbacks zum Abschluss des Audiopuffers für die Eingabe- und Ausgabeseiten der entsprechenden Endpunkte im selben Thread, wenn beide aktiv sind. Der Ausgabe-Callback wird unmittelbar nach der Rückgabe des Eingabe-Callbacks eingegeben. Wenn es nicht möglich ist, die Callbacks im selben Thread zu verarbeiten, geben Sie den Ausgabe-Callback kurz nach dem Eingeben des Eingabe-Callbacks ein, damit die Anwendung ein einheitliches Timing der Ein- und Ausgabeseiten hat.
  • Minimieren Sie den Phasenunterschied zwischen der HAL-Audiozwischenspeicherung für die Ein- und Ausgabeseiten der entsprechenden Endpunkte.
  • Berührungslatenz minimieren
  • Minimieren Sie Schwankungen bei der Berührungslatenz unter Last (Jitter).

5:11. Für unverarbeitet erfassen

Ab Android 7.0 wurde eine neue Aufnahmequelle hinzugefügt. Sie können über die Audioquelle „android.media.MediaRecorder.AudioSource.UNPROCESSED“ darauf zugreifen. In OpenSL ES kann über die Datensatzvoreinstellung SL_ANDROID_RECORDING_PRESET_UNPROCESSED darauf zugegriffen werden .

Ein Gerät MÜSSEN alle folgenden Anforderungen erfüllen, um die Unterstützung der unverarbeiteten Audioquelle über die android.media.AudioManager-Property PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED zu melden:

  • Das Gerät MUSS im mittleren Frequenzbereich annähernd flache Amplitude-gegen-Frequenz-Eigenschaften aufweisen, insbesondere ±10 dB von 100 Hz bis 7.000 Hz.

  • Das Gerät MÜSSEN Amplitudenpegel im niedrigen Frequenzbereich aufweisen, insbesondere von ±20 dB von 5 Hz bis 100 Hz im Vergleich zum mittleren Frequenzbereich.

  • Das Gerät MÜSSEN Amplitudenpegel im hohen Frequenzbereich aufweisen, insbesondere von ±30 dB von 7.000 Hz bis zu 22 kHz im Vergleich zum mittleren Frequenzbereich.

  • Die Empfindlichkeit der Audioeingabe MUSS so eingestellt werden, dass eine sinusoidale 1000-Hz-Tonquelle, die bei 94 dB Schalldruckpegel (SPL) wiedergegeben wird, für 16-Bit-Samples (oder -36 dB Full Scale) mit Gleitkomma-/doppelter Genauigkeit eine Antwort mit einem RMS von 520 liefert.

  • SNR > 60 dB (Differenz zwischen 94 dB Schalldruckpegel und äquivalenter Schalldruckpegel des Eigenrauschens, A-gewichtet).

  • Die gesamte harmonische Verzerrung MUSS am Mikrofon für 1 kHz und 90 dB SPL weniger als 1% betragen.

  • Die einzige im Pfad zulässige Signalverarbeitung ist ein Stufenmultiplikator, mit dem das Pegel in den gewünschten Bereich gebracht werden kann. Dieser Stufenmultiplikator DARF KEINE Verzögerung oder Latenz in den Signalpfad einleiten.

  • Im Pfad ist keine andere Signalverarbeitung zulässig, z. B. die automatische Verstärkungsregelung, der Hochpassfilter oder die Echounterdrückung. Wenn in der Architektur eine Signalverarbeitung vorhanden ist, MÜSSEN sie deaktiviert werden und dem Signalpfad praktisch keine Verzögerung oder zusätzliche Latenz einbringen.

Alle Schallpegelmessungen erfolgen direkt neben dem zu testenden Mikrofon.

Bei mehreren Mikrofonkonfigurationen gelten diese Anforderungen für jedes Mikrofon.

Es wird UNBEDINGT empfohlen, dass ein Gerät so viele Anforderungen an den Signalpfad für die unverarbeitete Aufnahmequelle erfüllt. Ein Gerät muss jedoch alle oben aufgeführten Anforderungen erfüllen, wenn es angeblich die unverarbeitete Audioquelle unterstützt.

6. Kompatibilität von Entwicklertools und -optionen

6.1 Entwicklertools

Geräteimplementierungen MÜSSEN die im Android SDK bereitgestellten Android-Entwicklertools unterstützen. Android-kompatible Geräte MÜSSEN kompatibel sein mit:

  • Android Debug Bridge (ADB) <ph type="x-smartling-placeholder">
      </ph>
    • Geräteimplementierungen MÜSSEN alle im Android SDK dokumentierten ADB-Funktionen unterstützen, einschließlich dumpsys.
    • Der geräteseitige ADB-Daemon MUSS standardmäßig inaktiv sein und es muss einen vom Nutzer zugänglichen Mechanismus zum Aktivieren von Android Debug Bridge geben. Wenn bei einer Geräteimplementierung der USB-Peripheriemodus nicht verfügbar ist, MUSS die Android Debug Bridge über ein lokales Netzwerk (z. B. Ethernet oder 802.11) implementiert werden.
    • Android unterstützt Secure ADB. „Secure adb“ aktiviert ADB auf bekannten authentifizierten Hosts. Geräteimplementierungen MÜSSEN sicheres ADB unterstützen.
  • Dalvik Debug Monitor-Dienst (ddms) <ph type="x-smartling-placeholder">
      </ph>
    • Geräteimplementierungen MÜSSEN alle ddms-Funktionen unterstützen, wie im Android SDK dokumentiert.
    • Da ddms ADB verwendet, sollte die Unterstützung für ddms standardmäßig inaktiv sein, MÜSSEN jedoch unterstützt werden, wenn der Nutzer die Android Debug Bridge wie oben beschrieben aktiviert hat.
  • Monkey-Geräteimplementierungen MÜSSEN das Monkey-Framework enthalten und für Anwendungen zur Verfügung stellen.
  • SysTrace <ph type="x-smartling-placeholder">
      </ph>
    • Geräteimplementierungen MÜSSEN das Systrace-Tool unterstützen, wie im Android SDK dokumentiert. Systrace muss standardmäßig inaktiv sein und es MÜSSEN einen vom Nutzer zugänglichen Mechanismus zum Aktivieren von Systrace geben.
    • Die meisten Linux-basierten Systeme und Apple Macintosh-Systeme erkennen Android-Geräte mit den standardmäßigen Android SDK-Tools ohne zusätzliche Unterstützung. Microsoft Windows-Systeme erfordern jedoch in der Regel einen Treiber für neue Android-Geräte. Für neue Anbieter-IDs und manchmal auch neue Geräte-IDs sind beispielsweise benutzerdefinierte USB-Treiber für Windows-Systeme erforderlich.
    • Wenn eine Geräteimplementierung vom ADB-Tool gemäß dem standardmäßigen Android SDK nicht erkannt wird, MÜSSEN die Implementierungsprogramme Windows-Treiber bereitstellen, mit denen Entwickler über das ADB-Protokoll eine Verbindung zum Gerät herstellen können. Diese Treiber MÜSSEN für Windows XP, Windows Vista, Windows 7, Windows 8 und Windows 10 in der 32-Bit- und der 64-Bit-Version bereitgestellt werden.

6.2 Entwickleroptionen

Android unterstützt Entwickler bei der Konfiguration von Einstellungen für die Anwendungsentwicklung. Geräteimplementierungen MÜSSEN den Intent android.settings.APPLICATION_DEVELOPMENT_SETTINGS zur Anzeige von Einstellungen für die Anwendungsentwicklung berücksichtigen. Bei der vorgelagerten Android-Implementierung wird das Menü mit den Entwickleroptionen standardmäßig ausgeblendet und Nutzer können die Entwickleroptionen starten, nachdem sie sieben (7) auf Settings (Einstellungen) > geklickt haben. Über das Gerät > Build-Nummer. Die Geräteimplementierungen MÜSSEN für eine einheitliche Nutzererfahrung bei den Entwickleroptionen MÜSSEN sorgen. Insbesondere MÜSSEN bei Geräteimplementierungen die Entwickleroptionen standardmäßig ausgeblendet werden und MÜSSEN einen Mechanismus zum Aktivieren der Entwickleroptionen bereitstellen, der mit der vorgelagerten Android-Implementierung übereinstimmt.

Android Automotive-Implementierungen KÖNNEN den Zugriff auf das Menü „Entwickleroptionen“ einschränken, indem das Menü visuell ein- oder ausgeblendet wird, wenn das Fahrzeug in Bewegung ist.

7. Hardwarekompatibilität

Wenn ein Gerät eine bestimmte Hardwarekomponente mit einer entsprechenden API für Drittentwickler hat, MÜSSEN die Geräteimplementierung diese API wie in der Android SDK-Dokumentation beschrieben implementieren. Wenn eine API im SDK mit einer Hardwarekomponente interagiert, die als optional ausgewiesen wird, und die Geräteimplementierung diese Komponente nicht besitzt, gilt Folgendes:

  • Vollständige Klassendefinitionen (wie durch das SDK dokumentiert) für die Komponenten-APIs MÜSSEN weiterhin angezeigt werden.
  • Das Verhalten der API MÜSSEN in angemessener Weise managementfrei implementiert werden.
  • API-Methoden MÜSSEN NULL-Werte zurückgeben, sofern dies gemäß der SDK-Dokumentation zulässig ist.
  • API-Methoden MÜSSEN No-Op-Implementierungen von Klassen zurückgeben, bei denen Nullwerte gemäß der SDK-Dokumentation nicht zulässig sind.
  • API-Methoden DÜRFEN KEINE Ausnahmen auslösen, die nicht in der SDK-Dokumentation dokumentiert sind.

Ein typisches Beispiel für ein Szenario, in dem diese Anforderungen gelten, ist die Telefonie-API: Auch auf anderen Geräten als Smartphones müssen diese APIs als angemessener managementfreier implementiert werden.

Geräteimplementierungen MÜSSEN immer korrekte Informationen zur Hardwarekonfiguration über die Methoden getSystemAvailableFeatures() und hasSystemFeature(String) in der Klasse android.content.pm.PackageManager für denselben Build-Fingerabdruck melden.

7.1. Display und Grafik

Android bietet Funktionen, mit denen App-Assets und UI-Layouts automatisch an das Gerät angepasst werden, um sicherzustellen, dass Apps von Drittanbietern mit verschiedenen Hardwarekonfigurationen einwandfrei ausgeführt werden können. Die Geräte MÜSSEN diese APIs und Verhaltensweisen ordnungsgemäß implementieren, wie in diesem Abschnitt beschrieben.

Die Einheiten, auf die in den Anforderungen in diesem Abschnitt verwiesen wird, sind wie folgt definiert:

  • Diagonale . Der Abstand in Zoll zwischen zwei gegenüberliegenden Ecken des beleuchteten Teils des Displays.
  • DPI (Punkte pro Zoll) Die Anzahl der Pixel, die von einer linearen horizontalen oder vertikalen Spanne von 1 Zoll eingeschlossen werden. Bei der Angabe von dpi-Werten müssen sowohl horizontale als auch vertikale dpi-Werte innerhalb dieses Bereichs liegen.
  • Seitenverhältnis . Das Verhältnis der Pixel der längeren Seite zur kürzeren Seite. Ein Display mit 480 × 854 Pixeln wäre beispielsweise 854/480 = 1, 779, also ungefähr „16:9“.
  • dichteunabhängige Pixel (dp): Die virtuelle Pixeleinheit, normalisiert auf einen Bildschirm mit 160 dpi, berechnet wie folgt: Pixel = dps × (Dichte/160).

7.1.1 Bildschirmkonfiguration

7.1.1.1 Bildschirmgröße

Android Watch-Geräte (siehe Abschnitt 2) KÖNNEN kleinere Bildschirmgrößen haben, wie in diesem Abschnitt beschrieben.

Das Android UI-Framework unterstützt eine Vielzahl verschiedener Bildschirmgrößen und ermöglicht es Apps, die Bildschirmgröße des Geräts (auch „Bildschirmlayout“) über android.content.res.Configuration.screenLayout mit dem SCREENLAYOUT_SIZE_MASK abzufragen. Geräteimplementierungen MÜSSEN die korrekte Bildschirmgröße melden, wie in der Android SDK-Dokumentation definiert und von der vorgelagerten Android-Plattform festgelegt. Insbesondere MÜSSEN Geräteimplementierungen die korrekte Bildschirmgröße gemäß den folgenden dp-Bildschirmabmessungen (logisch dichteunabhängige Pixel) melden.

  • Sofern es sich nicht um eine Android Watch handelt, MÜSSEN Geräte eine Bildschirmgröße von mindestens 426 dp x 320 dp („klein“) haben.
  • Geräte, für die die Bildschirmgröße „normal“ gemeldet wird, MÜSSEN eine Bildschirmgröße von mindestens 480 dp x 320 dp haben.
  • Geräte, deren Bildschirmgröße als „groß“ gemeldet wird, MÜSSEN eine Bildschirmgröße von mindestens 640 dp x 480 dp haben.
  • Geräte mit der Bildschirmgröße „xlarge“ MÜSSEN eine Bildschirmgröße von mindestens 960 dp x 720 dp haben.

Darüber hinaus gilt Folgendes:

  • Android Watch-Geräte MÜSSEN über ein Display mit einer physischen Diagonale von 1,1 bis 2,5 Zoll verfügen.
  • Android Automotive-Geräte MÜSSEN über ein Display mit einer physischen Diagonale von mindestens 6 Zoll verfügen.
  • Android Automotive-Geräte MÜSSEN eine Bildschirmgröße von mindestens 750 dp x 480 dp haben.
  • Bei anderen Implementierungen für Android-Geräte mit integriertem Display MUSS das Display eine Bildschirmdiagonale von mindestens 2,5 Zoll haben.

Geräte DÜRFEN die angezeigte Bildschirmgröße zu keinem Zeitpunkt ändern.

Die Anwendungen geben optional über den <supports-screens>-Link an, welche Bildschirmgrößen unterstützt werden. in der Datei AndroidManifest.xml. Bei der Geräteimplementierung MÜSSEN die Einstellungen der Apps korrekt berücksichtigt werden Unterstützung für kleine, normale, große und große Bildschirme, wie in der Android SDK-Dokumentation beschrieben.

7.1.1.2 Bildschirmseitenverhältnis

Es gibt zwar keine Einschränkungen für das Seitenverhältnis des physischen Bildschirms, aber das Seitenverhältnis der Oberfläche, auf der Drittanbieter-Apps gerendert werden und die aus den über DisplayMetrics gemeldeten Werten abgeleitet werden kann, muss die folgenden Anforderungen erfüllen:

  • Wenn uiMode als UI_MODE_TYPE_WATCH konfiguriert ist, kann das Seitenverhältnis auf 1.0 (1:1) festgelegt werden.
  • Wenn in der Drittanbieter-App über das Attribut android:resizeableActivity angegeben wird, dass die Größe angepasst werden kann, gibt es keine Einschränkungen im Hinblick auf den Wert für das Seitenverhältnis.
  • In allen anderen Fällen MUSS das Seitenverhältnis zwischen 1,3333 (4:3) und 1,86 (ungefähr 16:9) liegen, es sei denn, in der App wurde durch den Metadatenwert maxAspectRatio explizit angegeben, dass ein höheres Bildschirmverhältnis unterstützt wird.

7.1.1.3 Bildschirmdichte

Das Android-UI-Framework definiert eine Reihe logischer Standarddichten, um Anwendungsentwicklern die Ausrichtung auf Anwendungsressourcen zu ermöglichen. Geräteimplementierungen MÜSSEN nur eine der folgenden logischen Android-Framework-Dichten über die android.util.DisplayMetrics-APIs melden und MÜSSEN Anwendungen mit dieser Standarddichte ausführen und DARF den Wert für die Standardanzeige zu keinem Zeitpunkt ändern.

  • 120 dpi (ldpi)
  • 160 dpi (mdpi)
  • 213 dpi (tvdpi)
  • 240 dpi (hdpi)
  • 280 dpi (280dpi)
  • 320 dpi (xhdpi)
  • 360 dpi (360dpi)
  • 400 dpi (400dpi)
  • 420 dpi (420dpi)
  • 480 dpi (xxhdpi)
  • 560 dpi (560dpi)
  • 640 dpi (xxxhdpi)

Bei Geräteimplementierungen MÜSSEN die standardmäßige Android-Framework-Dichte definiert werden, die numerisch der physischen Dichte des Bildschirms am nächsten kommt, es sei denn, diese logische Dichte führt dazu, dass die gemeldete Bildschirmgröße unter das unterstützte Minimum fällt. Wenn die standardmäßige Android-Framework-Dichte, die numerisch der physischen Dichte am nächsten kommt, zu einer Bildschirmgröße führt, die kleiner als die kleinste unterstützte kompatible Bildschirmgröße (320 dp) ist, SOLLTEN die Geräteimplementierungen die nächstniedrigere Standard-Android-Framework-Dichte melden.

Bei der Implementierung von Geräten wird dringend empfohlen, Nutzern eine Einstellung zum Ändern der Anzeigegröße zu bieten. Wenn eine Implementierung zum Ändern der Anzeigegröße des Geräts vorhanden ist, MUSS sie wie unten angegeben mit der AOSP-Implementierung übereinstimmen:

  • Die Anzeigegröße DARF NICHT größer als das 1,5-Fache der nativen Dichte skaliert werden oder eine effektive Mindestbildschirmgröße von 320 dp aufweisen (entspricht dem Ressourcen-Qualifier sw320dp), je nachdem, was zuerst eintritt.
  • Die Anzeigegröße DARF NICHT kleiner als das 0,85-Fache der nativen Dichte skaliert werden.
  • Um eine gute Nutzerfreundlichkeit und einheitliche Schriftgrößen zu gewährleisten, wird empfohlen, die folgende Skalierung der nativen Displayoptionen bereitzustellen (unter Einhaltung der oben genannten Beschränkungen).
  • Klein: 0,85x
  • Standardeinstellung: 1x (Skalierung für native Displayanzeige)
  • Groß: 1,15x
  • Größer: 1,3x
  • Größte 1,45x

7.1.2 Messwerte anzeigen

Geräteimplementierungen MÜSSEN korrekte Werte für alle in android.util.DisplayMetrics definierten Displaymesswerte melden und MÜSSEN dieselben Werte melden, unabhängig davon, ob der eingebettete oder externe Bildschirm als Standardanzeige verwendet wird.

7.1.3 Displayausrichtung

Geräte MÜSSEN angeben, welche Bildschirmausrichtungen sie unterstützen (android.hardware.screen.portrait und/oder android.hardware.screen.landscape) und MÜSSEN mindestens eine unterstützte Ausrichtung melden. Beispielsweise sollte auf einem Gerät mit fester Ausrichtung im Querformat, z. B. bei einem Fernseher oder Laptop, nur „android.hardware.screen.landscape“ gemeldet werden.

Geräte, die beide Bildschirmausrichtungen melden, MÜSSEN die dynamische Ausrichtung für Apps sowohl im Hoch- als auch im Querformat unterstützen. Das heißt, das Gerät muss die Anforderung der App für eine bestimmte Bildschirmausrichtung berücksichtigen. Für Geräteimplementierungen KÖNNEN als Standard entweder Hoch- oder Querformat ausgewählt werden.

Geräte MÜSSEN den richtigen Wert für die aktuelle Ausrichtung des Geräts melden, wenn eine Abfrage über „android.content.res.Configuration.orientation“, „android.view.Display.getOrientation()“ oder andere APIs erfolgt.

Bei einer Änderung der Ausrichtung DÜRFEN die angezeigte Bildschirmgröße oder -dichte bei Geräten NICHT geändert werden.

7.1.4 2D- und 3D-Grafikbeschleunigung

Geräteimplementierungen MÜSSEN sowohl OpenGL ES 1.0 als auch OpenGL ES 2.0 unterstützen, wie in den Android-SDK-Dokumentationen ausgeführt. Geräteimplementierungen SOLLTEN auf Geräten, die dies unterstützen, OpenGL ES 3.0, 3.1 oder 3.2 unterstützen. Geräteimplementierungen MÜSSEN außerdem Android RenderScript unterstützen, wie in der Android SDK-Dokumentation beschrieben.

Geräteimplementierungen MÜSSEN außerdem angeben, ob sie OpenGL ES 1.0, OpenGL ES 2.0, OpenGL ES 3.0, OpenGL 3.1 oder OpenGL 3.2 unterstützen. Das heißt:

  • Die verwalteten APIs (z. B. über die Methode GLES10.getString()) MÜSSEN die Unterstützung für OpenGL ES 1.0 und OpenGL ES 2.0 melden.
  • Die nativen C/C++ OpenGL APIs (APIs, die für Apps über libGLES_v1CM.so, libGLES_v2.so oder libEGL.so verfügbar sind) MÜSSEN die Unterstützung für OpenGL ES 1.0 und OpenGL ES 2.0 melden.
  • Geräteimplementierungen, die eine Unterstützung für OpenGL ES 3.0, 3.1 oder 3.2 deklarieren, MÜSSEN die entsprechenden verwalteten APIs sowie native C/C++ APIs unterstützen. Bei Geräteimplementierungen, die OpenGL ES 3.0, 3.1 oder 3.2 libGLESv2.2 unterstützen, MÜSSEN zusätzlich zu den OpenGL ES 2.0-Funktionssymbolen auch die entsprechenden Funktionssymbole exportiert werden.

Android bietet ein OpenGL ES-Erweiterungspaket mit Java-Oberflächen und nativer Unterstützung für erweiterte Grafikfunktionen wie Tesselierung und das ASTC-Texturkomprimierungsformat. Implementierungen von Android-Geräten MÜSSEN das Erweiterungspaket unterstützen, wenn das Gerät OpenGL ES 3.2 unterstützt. In allen anderen Fällen wird dies möglicherweise ebenfalls unterstützt. Wenn das Erweiterungspaket vollständig unterstützt wird, MUSS das Gerät die Unterstützung durch das Funktions-Flag „android.hardware.opengles.aep“ kennzeichnen.

Außerdem können in Geräteimplementierungen die gewünschten OpenGL ES-Erweiterungen implementiert werden. Geräteimplementierungen MÜSSEN jedoch über die von OpenGL ES verwalteten und nativen APIs alle von ihnen unterstützten Erweiterungsstrings melden. Umgekehrt DÜRFEN KEINE Erweiterungsstrings melden, die von ihnen nicht unterstützt werden.

Hinweis: Android unterstützt Anwendungen, mit denen optional angegeben werden kann, dass bestimmte OpenGL-Texturkomprimierungsformate erforderlich sind. Diese Formate sind in der Regel anbieterspezifisch. Android benötigt keine Geräteimplementierungen, um ein bestimmtes Texturkomprimierungsformat zu implementieren. Sie SOLLTEN jedoch alle Texturkomprimierungsformate, die sie unterstützen, über die getString()-Methode in der OpenGL API korrekt melden.

In Android gibt es einen Mechanismus, mit dem Apps deklarieren können, dass sie die Hardwarebeschleunigung für 2D-Grafiken auf App-, Aktivitäts-, Fenster- oder Ansichtsebene aktivieren möchten. Dazu wird das Manifest-Tag android:hardwareAccelerated oder direkte API-Aufrufe verwendet.

Geräteimplementierungen MÜSSEN standardmäßig die Hardwarebeschleunigung aktivieren und MÜSSEN die Hardwarebeschleunigung deaktivieren, wenn der Entwickler dies anfordert. Dazu muss der Entwickler android:hardwareAccelerated="false" festlegen oder die Hardwarebeschleunigung direkt über die Android View APIs deaktivieren.

Außerdem MÜSSEN Geräteimplementierungen ein Verhalten aufweisen, das der Android SDK-Dokumentation zur Hardwarebeschleunigung entspricht.

Android enthält ein TextureView-Objekt, mit dem Entwickler hardwarebeschleunigte OpenGL ES-Texturen direkt als Rendering-Ziele in einer UI-Hierarchie integrieren können. Geräteimplementierungen MÜSSEN die TextureView API unterstützen und ein einheitliches Verhalten gegenüber der vorgelagerten Android-Implementierung zeigen.

Android unterstützt das EGL_ANDROID_RECORDABLE, ein EGLConfig-Attribut, das angibt, ob EGLConfig das Rendern in einem ANativeWindow unterstützt, das Bilder in einem Video aufzeichnet. Geräteimplementierungen MÜSSEN die Erweiterung EGL_ANDROID_RECORDABLE unterstützen.

7.1.5 Legacy-App-Kompatibilitätsmodus

Android gibt einen „Kompatibilitätsmodus“ an, in dem das Framework in einem „normalen“ Modus arbeitet. Bildschirmgröße äquivalent (320 dp Breite) für ältere Apps, die nicht für ältere Android-Versionen entwickelt wurden, die in der Zeit vor der Unabhängigkeit der Bildschirmgröße standen.

  • Android Automotive unterstützt den alten Kompatibilitätsmodus nicht.
  • Alle anderen Geräteimplementierungen MÜSSEN Support für den Kompatibilitätsmodus älterer Apps beinhalten, der durch den vorgelagerten Open-Source-Code von Android implementiert wurde. Das heißt, Geräteimplementierungen DÜRFEN NICHT die Trigger oder Grenzwerte ändern, bei denen der Kompatibilitätsmodus aktiviert ist, und DÜRFEN NICHT das Verhalten des Kompatibilitätsmodus selbst ändern.

7.1.6 Bildschirmtechnologie

Die Android-Plattform umfasst APIs, mit denen Anwendungen komplexe Grafiken auf dem Display rendern können. Geräte MÜSSEN gemäß der Definition des Android SDK alle diese APIs unterstützen, sofern dies in diesem Dokument nicht ausdrücklich zulässig ist.

  • Geräte müssen Bildschirme unterstützen, die 16-Bit-Farbgrafiken unterstützen, und SOLLTEN Bildschirme mit 24-Bit-Farbgrafiken unterstützen.
  • Geräte müssen Bildschirme unterstützen, die Animationen rendern können.
  • Die verwendete Displaytechnologie MUSS ein Pixelseitenverhältnis (PAR) zwischen 0,9 und 1,15 haben. Das heißt, das Pixel-Seitenverhältnis MUSS nahe dem Quadratformat (1,0) mit einer Toleranz von 10 bis 15% liegen.

7.1.7 Sekundäre Displays

Android unterstützt einen sekundären Bildschirm, um Funktionen zum Teilen von Medien und Entwickler-APIs für den Zugriff auf externe Bildschirme zu aktivieren. Wenn ein Gerät einen externen Bildschirm über eine kabelgebundene, kabellose oder eingebettete zusätzliche Displayverbindung unterstützt, MÜSSEN bei der Geräteimplementierung die Display Manager API wie in der Android SDK-Dokumentation beschrieben implementiert werden.

7.2. Eingabegeräte

Die Geräte MÜSSEN einen Touchscreen unterstützen oder die in Abschnitt 7.2.2 aufgeführten Anforderungen für die berührungslose Navigation erfüllen.

7.2.1 Tastatur

In Android Watch- und Android Automotive-Implementierungen KANN eine Bildschirmtastatur implementiert werden. Alle anderen Geräteimplementierungen MÜSSEN eine Bildschirmtastatur implementieren und:

Geräteimplementierungen:

  • MÜSSEN Support für das Input Management Framework bereitstellen, mit dem Drittanbieter-Entwickler Eingabemethoden-Editoren, z. B. eine Tastatur, erstellen können. Einzelheiten hierzu finden Sie unter http://developer.android.com.
  • MÜSSEN mindestens eine Bildschirmtastatur bereitstellen (unabhängig davon, ob eine feste Tastatur vorhanden ist). Ausgenommen hiervon sind Android Watch-Geräte, bei denen die Bildschirmgröße die Verwendung einer solchen Tastatur weniger zweckdienlich macht.
  • KANN zusätzliche Implementierungen von Softtastaturen beinhalten.
  • KANN eine Hardware-Tastatur enthalten.
  • DÜRFEN KEINE Hardwaretastatur verwendet werden, die nicht einem der in android.content.res.Configuration.keyboard angegebenen Formate entspricht (QWERTY oder 12-Tasten).

7.2.2 Berührungslose Navigation

Android-Fernsehgeräte MÜSSEN das Steuerkreuz unterstützen.

Geräteimplementierungen:

  • KANN keine Option für die berührungslose Navigation (Trackball, Steuerkreuz oder Rad) weggelassen werden, wenn es sich bei der Geräteimplementierung nicht um ein Android TV-Gerät handelt.
  • MÜSSEN Sie den richtigen Wert für android.content.res.Configuration.navigation melden.
  • MÜSSEN eine angemessene alternative Benutzeroberfläche zum Auswählen und Bearbeiten von Text bereitstellen, die mit Input Management Engines kompatibel ist. Die vorgelagerte Open-Source-Implementierung von Android enthält einen Auswahlmechanismus, der sich für Geräte eignet, die keine berührungslosen Navigationseingaben enthalten.

7.2.3 Navigationstasten

Die Anforderungen an Verfügbarkeit und Sichtbarkeit der Funktionen „Zuhause“, „Letzte“ und „Zurück“ unterscheiden sich je nach Gerätetyp, wie in diesem Abschnitt beschrieben.

Die Funktionen „Home“, „Recents“ und „Back“, die den Schlüsselereignissen KEYCODE_HOME, KEYCODE_APP_SWITCH und KEYCODE_BACK zugeordnet sind, sind für das Navigationsparadigma von Android unerlässlich und daher:

  • Implementierungen von Android-Handheld-Geräten MÜSSEN die Funktionen „Startbildschirm“, „Letzte“ und „Zurück“ enthalten.
  • Implementierungen von Android TV-Geräten MÜSSEN die Funktionen „Startbildschirm“ und „Zurück“ enthalten.
  • Bei Android Watch-Geräten MÜSSEN die Startbildschirm- und die Zurück-Funktion für den Nutzer verfügbar sein, es sei denn, sie befindet sich in UI_MODE_TYPE_WATCH .
  • Bei Android Watch-Geräteimplementierungen (keine anderen Android-Gerätetypen) KÖNNEN das lange Drücken auf das Schlüsselereignis KEYCODE_BACK verarbeitet und nicht an die Anwendung im Vordergrund gesendet werden.
  • Android Automotive-Implementierungen MÜSSEN die Home-Funktion sowie die Funktionen „Zurück“ und „Letzte“ bereitstellen.
  • Bei allen anderen Geräteimplementierungen MÜSSEN die Funktionen „Startseite“ und „Zurück“ bereitgestellt werden.

Diese Funktionen KÖNNEN über spezielle physische Tasten (z. B. mechanische oder kapazitive Touch-Tasten) oder mithilfe spezieller Softwaretasten für einen bestimmten Bereich des Bildschirms, Gesten, Touchscreen usw. implementiert werden. Android unterstützt beide Implementierungen. Alle diese Funktionen MÜSSEN mit einer einzigen Aktion (z.B. Tippen, Doppelklick oder Touch-Geste) aufgerufen werden, sofern sie sichtbar sind.

Die „Recents“-Funktion, sofern angegeben, MÜSSEN eine sichtbare Schaltfläche oder ein sichtbares Symbol haben, sofern sie nicht zusammen mit anderen Navigationsfunktionen im Vollbildmodus ausgeblendet wird. Dies gilt nicht für Geräte, die von früheren Android-Versionen aktualisiert werden und physische Tasten für die Navigation und keinen Schlüssel für die letzten Käufe haben.

Die Start- und Zurück-Funktionen, sofern angegeben, MÜSSEN jeweils über eine sichtbare Schaltfläche oder ein sichtbares Symbol verfügen, es sei denn, sie werden zusammen mit anderen Navigationsfunktionen im Vollbildmodus ausgeblendet oder wenn die uiMode UI_MODE_TYPE_MASK auf UI_MODE_TYPE_WATCH gesetzt ist.

Die Menüfunktion wird seit Android 4.0 zugunsten der Aktionsleiste nicht mehr unterstützt. Daher DÜRFEN in neuen Geräteimplementierungen für Android 7.0 und höher KEINE spezielle physische Taste für die Menüfunktion implementiert werden. Bei älteren Geräteimplementierungen DARF KEINE eigene physische Taste für die Menüfunktion implementiert werden. Stattdessen muss die Menütaste jedoch implementiert sein und auf dem Gerät werden Anwendungen mit dem Parameter „targetSdkVersion“ ausgeführt. 10, die Geräteimplementierung:

  • MÜSSEN die Aktions-Überlaufschaltfläche auf der Aktionsleiste anzeigen, wenn sie sichtbar ist und das resultierende Pop-up-Fenster für das Aktions-Dreipunkt-Menü nicht leer ist. Bei einer Geräteimplementierung, die vor Android 4.4 eingeführt, aber auf Android 7.0 aktualisiert wurde, wird dies EMPFOHLEN.
  • Die Position des Aktions-Überlauf-Pop-ups, das durch Auswählen der Überlaufschaltfläche in der Aktionsleiste angezeigt wird, DARF NICHT geändert werden.
  • KANN das Aktions-Überlauf-Pop-up an einer geänderten Position auf dem Bildschirm rendern, wenn es durch Auswählen der physischen Menüschaltfläche angezeigt wird.

Aus Gründen der Abwärtskompatibilität MÜSSEN bei Geräteimplementierungen die Menüfunktion für Anwendungen verfügbar gemacht werden, wenn targetSdkVersion kleiner als 10 ist, entweder durch eine physische Schaltfläche, eine Softwaretaste oder Touch-Gesten. Diese Menüfunktion sollte angezeigt werden, sofern sie nicht zusammen mit anderen Navigationsfunktionen ausgeblendet wird.

Implementierungen von Android-Geräten, die die Assist-Aktion und/oder VoiceInteractionService unterstützen, MÜSSEN in der Lage sein, eine Assistent-App mit einer einzigen Interaktion (z.B. Tippen, Doppelklick oder Geste) zu starten, wenn andere Navigationstasten sichtbar sind. Es wird dringend empfohlen, bei dieser Interaktion lange auf die Startbildschirmtaste zu drücken. Die vorgesehene Interaktion MÜSSEN die vom Nutzer ausgewählte Unterstützungs-App starten, also die App, die einen VoiceInteractionService implementiert, oder eine Aktivität, die den Intent ACTION_ASSIST verarbeitet.

Bei Geräteimplementierungen KÖNNEN die Navigationstasten auf einem deutlich sichtbaren Teil des Bildschirms angezeigt werden. In diesem Fall MÜSSEN die folgenden Anforderungen erfüllt werden:

  • Die Navigationstasten für die Geräteimplementierung MÜSSEN einen deutlich erkennbaren Teil des Bildschirms verwenden, der für Apps nicht zugänglich ist, und dürfen den für Apps verfügbaren Teil des Bildschirms NICHT verdecken oder anderweitig beeinträchtigen.
  • Geräteimplementierungen MÜSSEN einen Teil des Displays Apps zur Verfügung stellen, die die in Abschnitt 7.1.1 definierten Anforderungen erfüllen.
  • Geräteimplementierungen MÜSSEN die Navigationstasten anzeigen, wenn Anwendungen keinen System-UI-Modus angeben oder SYSTEM_UI_FLAG_VISIBLE angeben.
  • Bei Geräteimplementierungen MÜSSEN die Navigationstasten in einem unauffälligen Low-Profil-Modus (z. B. abgeblendet) angezeigt werden, wenn Apps SYSTEM_UI_FLAG_LOW_PROFILE angeben.
  • Geräteimplementierungen MÜSSEN die Navigationstasten ausblenden, wenn Anwendungen SYSTEM_UI_FLAG_HIDE_NAVIGATION angeben.

7.2.4 Touchscreeneingabe

Android-Handhelds und -Smartwatches MÜSSEN die Touchscreen-Eingabe unterstützen.

Geräteimplementierungen SOLLTEN über ein Zeigereingabesystem verfügen (z. B. Maus- oder Toucheingabe). Wenn eine Geräteimplementierung jedoch ein Zeigereingabesystem nicht unterstützt, DARF die Funktion „android.hardware.touchscreen“ oder „android.hardware.faketouch“ NICHT dauerhaft gemeldet werden. Geräteimplementierungen, die ein Zeigereingabesystem enthalten:

  • SOLLTEN vollständig unabhängig nachverfolgte Zeiger unterstützen, wenn das Geräteeingabesystem mehrere Zeiger unterstützt.
  • MÜSSEN den Wert android.content.res.Configuration.touchscreen melden, der dem Typ des Touchscreens des Geräts entspricht.

Android unterstützt eine Vielzahl von Touchscreens, Touchpads und gefälschten Eingabegeräten. Implementierungen von Touchscreen-Geräten sind mit einem Display so verknüpft, dass der Nutzer den Eindruck hat, Elemente auf dem Bildschirm direkt zu manipulieren. Da der Nutzer den Bildschirm direkt berührt, benötigt das System keine zusätzlichen Angebote, um anzuzeigen, welche Objekte manipuliert werden. Im Gegensatz dazu bietet eine gefälschte Touch-Oberfläche ein Nutzereingabesystem, das einem Teil der Touchscreen-Funktionen ähnelt. So kann beispielsweise eine Maus oder eine Fernbedienung, die einen Bildschirmcursor ansteuert, eine Berührung annähern, aber der Nutzer muss zuerst die Maus oder den Fokus fokussieren und dann klicken. Zahlreiche Eingabegeräte wie Maus, Touchpad, Gyroskop, Gyroskop, Joystick und Multi-Touch-Trackpad können gefälschte Touch-Interaktionen unterstützen. Android enthält die Funktion „android.hardware.faketouch“, die einem High-Fidelity-Eingabegerät ohne Touchscreen entspricht, z. B. einer Maus oder einem Touchpad, das berührungsbasierte Eingaben angemessen emulieren kann (einschließlich der grundlegenden Unterstützung von Touch-Gesten) und darauf hinweist, dass das Gerät eine emulierte Teilmenge von Touchscreen-Funktionen unterstützt. Geräteimplementierungen, in denen die Funktion für gefälschte Berührungen deklariert ist, MÜSSEN die Anforderungen in Abschnitt 7.2.5 erfüllen.

Geräteimplementierungen MÜSSEN die richtige Funktion für die verwendete Eingabe melden. Geräteimplementierungen mit Touchscreen (Single-Touch oder besser) MÜSSEN die Plattformfunktion konstant „android.hardware.touchscreen“ melden. Geräteimplementierungen, bei denen die Plattformfunktion konstant „android.hardware.touchscreen“ gemeldet wird, MÜSSEN auch die Plattformfunktion konstant „android.hardware.faketouch“ angeben. Geräteimplementierungen ohne Touchscreen, die nur auf einem Zeigergerät basieren, DÜRFEN KEINE Touchscreen-Funktion melden und MÜSSEN nur „android.hardware.faketouch“ melden, wenn sie die in Abschnitt 7.2.5 genannten Anforderungen für gefälschte Touch-Gesten erfüllen.

7.2.5 Eingabe von gefälschten Berührungen

Geräteimplementierungen, die eine Unterstützung für android.hardware.faketouch deklarieren:

  • MÜSSEN die absolute X- und Y-Bildschirmposition der Zeigerposition gemeldet und ein visueller Zeiger auf dem Bildschirm angezeigt werden.
  • MÜSSEN das Touch-Ereignis mit dem Aktionscode gemeldet werden, der die Statusänderung angibt, die auf dem Zeiger auf dem Bildschirm nach unten oder oben auftritt.
  • MUSS den Zeiger nach unten und oben auf einem Objekt auf dem Bildschirm unterstützen, damit Nutzer das Tippen auf ein Objekt auf dem Bildschirm emulieren können.
  • MÜSSEN innerhalb einer Zeitgrenze an derselben Position auf einem Objekt auf dem Bildschirm die Zeiger nach unten, nach oben und nach unten und dann nach oben zeigen, da Nutzer dadurch Doppeltippen auf ein Objekt auf dem Bildschirm emulieren können.
  • MUSS den Zeiger an einem beliebigen Punkt auf dem Bildschirm nach unten unterstützen, den Zeiger zu einem beliebigen anderen beliebigen Punkt auf dem Bildschirm gefolgt von einem nach oben zeigenden Zeiger, sodass Nutzer eine Ziehbewegung durch Berührung emulieren können.
  • MUSS den Zeiger nach unten unterstützen, damit Nutzer das Objekt schnell an eine andere Position auf dem Bildschirm und dann den Mauszeiger auf dem Bildschirm nach oben bewegen können, damit Nutzende ein Objekt auf dem Bildschirm schwingen können.

Geräte, die eine Unterstützung für android.hardware.faketouch.multitouch.distinct erklären, MÜSSEN die oben genannten Anforderungen für faketouch erfüllen und MÜSSEN auch das separate Tracking von zwei oder mehr unabhängigen Zeigereingaben unterstützen.

7.2.6 Unterstützung für Gamecontroller

Implementierungen von Android TV-Geräten MÜSSEN die unten aufgeführten Schaltflächen für Controller unterstützen. Die vorgelagerte Android-Implementierung umfasst eine Implementierung für Gamecontroller, die diese Anforderung erfüllen.

7.2.6.1 Schaltflächenzuordnungen

Implementierungen von Android TV-Geräten MÜSSEN die folgenden Schlüsselzuordnungen unterstützen:

Schaltfläche HID-Nutzung2 Android-Taste
A 1 0x09 0x0001 KEYCODE_SCHALTFLÄCHE (96)
B 1 0x09 0x0002 KEYCODE_SCHALTFLÄCHE (97)
X 1 0x09 0x0004 KEYCODE_button_X (99)
J 1 0x09 0x0005 KEYCODE_SCHALTFLÄCHE (100)
Steuerkreuz nach oben 1
Steuerkreuz unten 1
0x01 0x0039 3 AXIS_HAT_Y 4
Steuerkreuz links 1
Steuerkreuz rechts 1
0x01 0x0039 3 AXIS_HAT_X 4
Taste an der linken Seite 1 0x09 0x0007 KEYCODE_button_L1 (102)
Rechte Schultertaste 1 0x09 0x0008 KEYCODE_button_R1 (103)
Mit linker Maustaste klicken 1 0x09 0x000E KEYCODE_BUTTON_THUMBL (106)
Mit der rechten Maustaste klicken 1 0x09 0x000F KEYCODE_button_THUMBR (107)
Zuhause 1 0x0c 0x0223 KEYCODE_HOME (3)
Zurück 1 0x0c 0x0224 KEYCODE_BACK (4)

1 Schlüsselereignis

2 Die oben genannten HID-Nutzungen müssen innerhalb einer Game Pad-CA (0x01 0x0005) deklariert werden.

3 Diese Nutzung muss ein logisches Minimum von 0, ein logisches Maximum von 7, ein physisches Minimum von 0, ein physisches Maximum von 315, ein Einheiten in Grad und eine Berichtsgröße von 4 sein. Der logische Wert ist als Drehung im Uhrzeigersinn von der vertikalen Achse weg definiert. Zum Beispiel steht ein logischer Wert von 0 für keine Drehung und das Drücken der Nach-oben-Taste, während ein logischer Wert von 1 eine Drehung von 45 Grad und das Betätigen der Nach-oben- und der Nach-links-Taste bedeutet.

4 MotionEvent

Analoge Steuerelemente1 HID-Nutzung Android-Taste
Linker Trigger 0x02 0x00C5 WASSERGRÖSSE
Rechter Trigger 0x02 0x00C4 AXIS_RTRIGGER
Linker Joystick 0 x 01, 0 x 0030
0x01 0x0031
AXIS_X
Achse_y
Rechter Joystick 0x01 0x0032
0x01 0x0035
AXIS_Z
AXIS_RZ

1 MotionEvent

7.2.7 Fernbedienung

Implementierungen von Android TV-Geräten SOLLTEN eine Fernbedienung umfassen, mit der Nutzer auf die Benutzeroberfläche des Fernsehers zugreifen können. Bei der Fernbedienung kann es sich um eine physische Fernbedienung handeln oder sie kann eine softwarebasierte Fernbedienung sein, auf die über ein Smartphone oder Tablet zugegriffen werden kann. Die Fernbedienung MUSS die unten definierten Anforderungen erfüllen.

7.3. Sensoren

Android umfasst APIs für den Zugriff auf eine Vielzahl von Sensortypen. Bei Geräteimplementierungen KÖNNEN diese Sensoren im Allgemeinen weggelassen werden, wie in den folgenden Unterabschnitten beschrieben. Wenn ein Gerät einen bestimmten Sensortyp mit einer entsprechenden API für Drittentwickler hat, MÜSSEN die Geräteimplementierung diese API wie in der Android SDK-Dokumentation und der Android Open Source-Dokumentation zu Sensoren beschrieben implementieren. Beispiele für Implementierungen auf Geräten:

  • MÜSSEN das Vorhandensein oder Fehlen von Sensoren gemäß der android.content.pm.PackageManager-Klasse korrekt melden.
  • MÜSSEN über „SensorManager.getSensorList()“ und ähnliche Methoden eine genaue Liste der unterstützten Sensoren zurückgeben.
  • MÜSSEN sich bei allen anderen Sensor-APIs vernünftig verhalten (z. B. durch Zurückgeben von WAHR oder FALSCH, wenn Anwendungen versuchen, Listener zu registrieren, oder indem Sensor-Listener nicht aufgerufen werden, wenn die entsprechenden Sensoren nicht vorhanden sind).
  • MÜSSEN alle Sensormessungen unter Verwendung der relevanten Werte des internationalen Maßeinheitensystems für jeden Sensortyp melden, wie in der Android SDK-Dokumentation definiert.
  • SOLLTEN die Ereigniszeit in Nanosekunden angeben, wie in der Android SDK-Dokumentation definiert. Diese stellen den Zeitpunkt dar, zu dem das Ereignis stattgefunden hat und mit der SystemClock.elapsedRealtimeNano()-Uhr synchronisiert wurde. Bestehenden und neuen Android-Geräten wird dringend empfohlen, diese Anforderungen zu erfüllen, sodass ein Upgrade auf zukünftige Plattform-Releases möglich ist, bei denen diese Komponente möglicherweise erforderlich ist. Der Synchronisierungsfehler SOLLTE unter 100 Millisekunden liegen.
  • MÜSSEN Sensordaten mit einer maximalen Latenz von 100 Millisekunden + 2 * sample_time gemeldet werden, wenn ein Sensor mit einer minimalen erforderlichen Latenz von 5 ms + 2 * sample_time gestreamt wird, wenn der Anwendungsprozessor aktiv ist. Diese Verzögerung umfasst keine Filterverzögerungen.
  • Die erste Sensorprobe MUSS innerhalb von 400 Millisekunden + 2 * sample_time nach der Aktivierung des Sensors gemeldet werden. Eine Genauigkeit von 0 ist für diese Stichprobe akzeptabel.

Die obige Liste ist nicht vollständig. das dokumentierte Verhalten des Android SDK und der Open-Source-Dokumentation von Android auf Sensoren wird als maßgeblich angesehen.

Einige Sensortypen sind zusammengesetzt, d. h., sie können aus Daten abgeleitet werden, die von einem oder mehreren anderen Sensoren bereitgestellt werden. (Beispiele hierfür sind der Ausrichtungssensor und der lineare Beschleunigungssensor.) In Geräteimplementierungen sollten diese Sensortypen implementiert werden, wenn sie die erforderlichen physischen Sensoren enthalten (siehe Sensortypen). Wenn eine Geräteimplementierung einen kombinierten Sensor umfasst, MÜSSEN sie den Sensor wie in der Android-Open-Source-Dokumentation zu zusammengesetzten Sensoren beschrieben implementieren.

Einige Android-Sensoren unterstützen den kontinuierlichen Triggermodus, der fortlaufend Daten zurückgibt. Damit alle in der Android SDK-Dokumentation angegebenen APIs ein kontinuierlicher Sensor sind, MÜSSEN Geräteimplementierungen kontinuierlich regelmäßige Datenstichproben bereitstellen, die einen Jitter unter 3 % haben sollten, wobei der Jitter als Standardabweichung der Differenz der gemeldeten Zeitstempelwerte zwischen aufeinanderfolgenden Ereignissen definiert ist.

Beachten Sie, dass bei den Geräteimplementierungen sichergestellt werden muss, dass der Sensor-Ereignisstream NICHT verhindern DA darf, dass die CPU des Geräts in den Ruhemodus wechselt oder wieder aufwacht.

Wenn mehrere Sensoren aktiviert sind, sollte der Stromverbrauch NICHT die Summe der vom einzelnen Sensor gemeldeten Stromverbrauch überschreiten.

7.3.1 Beschleunigungsmesser

Geräteimplementierungen SOLLTEN einen dreiachsigen Beschleunigungsmesser enthalten. Android-Handheld-Geräte, Android Automotive-Implementierungen und Android Watch-Geräte werden dringend empfohlen, diesen Sensor zu verwenden. Wenn eine Geräteimplementierung einen dreiachsigen Beschleunigungsmesser enthält, ist Folgendes zu beachten:

  • MÜSSEN den TYPE_ACCELEROMETER-Sensor implementieren und melden.
  • MÜSSEN in der Lage sein, Ereignisse bis zu einer Frequenz von mindestens 50 Hz für Android Watch-Geräte zu melden, da diese eine strengere Energiebeschränkung und 100 Hz für alle anderen Gerätetypen haben.
  • SOLLTE Ereignisse mit bis zu 200 Hz melden.
  • MÜSSEN dem Android-Sensorkoordinatensystem entsprechen, das in den Android-APIs beschrieben wird. Implementierungen von Android Automotive MÜSSEN dem Koordinatensystem der Autosensoren von Android entsprechen.
  • MUSS auf jeder Achse vom freien Fall bis zur vierfachen Schwerkraft (4 g) oder mehr gemessen werden können.
  • MÜSSEN eine Auflösung von mindestens 12 Bit und eine Auflösung von mindestens 16 Bit haben.
  • SOLLTEN während der Verwendung kalibriert werden, wenn sich die Eigenschaften im Laufe des Lebenszyklus ändern und kompensiert werden. Die Kompensationsparameter müssen zwischen Geräteneustarts beibehalten werden.
  • SOLLTE temperaturkompensiert werden.
  • MUSS eine Standardabweichung von maximal 0,05 m/s^ haben, wobei die Standardabweichung pro Achse mit Stichproben berechnet werden sollte, die über einen Zeitraum von mindestens 3 Sekunden mit der schnellsten Stichprobenrate erfasst wurden.
  • SOLLTEN die zusammengesetzten Sensoren TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR, TYPE_STEP_DETECTOR und TYPE_STEP_COUNTER wie im Android SDK-Dokument beschrieben implementieren. Für bestehende und neue Android-Geräte wird Dringend empfohlen, den TYPE_SIGNIFICANT_MOTION-Verbundsensor zu implementieren. Wenn einer dieser Sensoren implementiert ist, MUSS die Summe ihres Stromverbrauchs immer unter 4 mW liegen und SOLLTE jeweils unter 2 mW bzw.0,5 mW liegen, wenn sich das Gerät in einem dynamischen oder statischen Zustand befindet.
  • Wenn ein Gyroskopsensor enthalten ist, MÜSSEN die zusammengesetzten Sensoren TYPE_GRAVITY und TYPE_LINEAR_ACCELERATION sowie den TYPE_GAME_ROTATION_VECTOR-Verbundsensor implementiert werden. Für bestehende und neue Android-Geräte wird dringend empfohlen, den TYPE_GAME_ROTATION_VECTOR-Sensor zu implementieren.
  • MÜSSEN Sie einen TYPE_ROTATION_VECTOR-Verbundsensor implementieren, wenn auch ein Gyroskopsensor und ein Magnetometer-Sensor vorhanden sind.

7.3.2 Magnetometer

Geräteimplementierungen SOLLTEN ein dreiachsiges Magnetometer (Kompass) enthalten. Wenn ein Gerät über ein 3-Achsen-Magnetometer verfügt, ist es wie folgt:

  • MÜSSEN den TYPE_MAGNETIC_FIELD-Sensor und auch den TYPE_MAGNETIC_FIELD_UNCALIBRATED-Sensor implementieren. Für bestehende und neue Android-Geräte wird dringend empfohlen, den TYPE_MAGNETIC_FIELD_UNCALIBRATED-Sensor zu implementieren.
  • MÜSSEN in der Lage sein, Ereignisse bis zu einer Frequenz von mindestens 10 Hz zu melden, und MÜSSEN Ereignisse mit einer Frequenz von mindestens 50 Hz melden können.
  • MÜSSEN dem Android-Sensorkoordinatensystem entsprechen, das in den Android-APIs beschrieben wird.
  • MÜSSEN vor der Sättigung zwischen -900 μT und +900 μT auf jeder Achse gemessen werden können.
  • MÜSSEN einen Offset-Wert aus hartem Eisen unter 700 μT haben und einen Wert unter 200 μT haben. Platzieren Sie das Magnetometer in der Nähe von dynamischen (strominduzierten) und statischen (magnetinduzierten) Magnetfeldern.
  • MÜSSEN eine Auflösung von mindestens 0,6 μT und eine Auflösung von mindestens 0,2 μT haben.
  • SOLLTE temperaturkompensiert werden.
  • MÜSSEN die Online-Kalibrierung und -kompensation unterstützen und die Kompensationsparameter zwischen Geräteneustarts beibehalten.
  • MUSS die Kompensation für weiches Eisen angewendet werden – die Kalibrierung kann entweder während der Verwendung oder während der Produktion des Geräts erfolgen.
  • SOLLTEN eine Standardabweichung haben, berechnet pro Achse für Stichproben, die über einen Zeitraum von mindestens 3 Sekunden mit der schnellsten Stichprobenrate (nicht größer als 0,5 μT) erfasst wurden.
  • MÜSSEN Sie einen TYPE_ROTATION_VECTOR-Verbundsensor implementieren, wenn auch ein Beschleunigungsmessersensor und ein Gyroskopsensor vorhanden sind.
  • KANN den TYPE_GEOMAGNETIC_ROTATION_VECTOR-Sensor implementiert werden, wenn auch ein Beschleunigungsmessersensor implementiert ist. Wenn der Sensor implementiert ist, MÜSSEN weniger als 10 mW und weniger als 3 mW verbraucht werden, 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 eine Geräteimplementierung einen GPS-/GNSS-Empfänger enthält und die Funktion über das Funktions-Flag android.hardware.location.gps an Anwendungen meldet:

  • Es wird ausdrücklich empfohlen, dass das Gerät während eines Notrufs weiterhin normale GPS-/GNSS-Ausgaben an Anwendungen sendet und dass die Standortausgabe während eines Notrufs nicht blockiert wird.
  • Sie MUSS die Standortausgaben mit einer Frequenz von mindestens 1 Hz unterstützen, wenn sie über LocationManager#requestLocationUpdate angefordert werden .
  • Das Gerät MÜSSEN in der Lage sein, den Standort unter freiem Himmel (starke Signale, wenig Mehrwege, HDOP < 2) innerhalb von 10 Sekunden (schnelle Zeit bis zur ersten Behebung) zu bestimmen, wenn es mit einer Internetverbindung mit mindestens 0,5 Mbit/s verbunden ist. Diese Anforderung wird in der Regel durch die Verwendung einer unterstützten oder vorhergesagten GPS-/GNSS-Technik erfüllt, um die GPS-/GNSS-Lock-On-Zeit zu minimieren (Unterstützungsdaten umfassen Referenzzeit, Referenzstandort und Satelliten-Ephemeris/Uhr).
    • Nach einer solchen Standortberechnung wird dringend empfohlen, dass das Gerät seinen Standort unter freiem Himmel innerhalb von 10 Sekunden, wenn Standortanfragen neu gestartet werden, und bis zu einer Stunde nach der ursprünglichen Standortberechnung ermitteln kann, selbst wenn die nächste Anfrage ohne Datenverbindung und/oder nach dem Ein- und Ausschalten des Geräts erfolgt.
  • Bei freiem Himmel, nachdem der Ort bestimmt wurde, während Sie sich nicht bewegen oder sich im Stil von weniger als 1 Meter pro Sekunde im Quadrat der Beschleunigung bewegen: <ph type="x-smartling-placeholder">
      </ph>
    • Die Kamera MUSS in mindestens 95% der Fälle in der Lage sein, den Standort in einem Umkreis von 20 Metern und eine Geschwindigkeit von mindestens 0, 5 Metern pro Sekunde zu bestimmen.
    • Es MÜSSEN mindestens 8 Satelliten von einer Konstellation gleichzeitig verfolgen und über GnssStatus.Callback melden.
    • Es sollte mindestens 24 Satelliten aus mehreren Konstellationen gleichzeitig verfolgen können (z.B. GPS und mindestens eines von Glonass, Beidou oder Galileo).
  • Sie MÜSSEN die GNSS-Technologiegenerierung über die Test-API „getGnssYearOfHardware“ melden.
  • Es wird UNBEDINGT empfohlen, alle unten aufgeführten Anforderungen zu erfüllen, wenn die GNSS-Technologiegeneration als Jahr „2016“ angegeben wird, und MUSS diese auch erfüllen. oder neuer.
    • Sie MÜSSEN GPS-Messungen melden, sobald sie gefunden wurden, auch wenn ein über GPS/GNSS berechneter Standort noch nicht gemeldet wurde.
    • Sie MÜSSEN GPS-Pseudobereiche und Pseudorangeraten angeben, die bei freiem Himmel nach der Bestimmung des Standorts ausreichen, wenn sie sich nicht bewegen oder sich mit einer Beschleunigung von weniger als 0,2 Metern pro Sekunde im Quadrat der Beschleunigung bewegen, um die Position innerhalb von 20 Metern und die Geschwindigkeit in mindestens 95% der Zeit innerhalb von 0,2 Metern pro Sekunde zu berechnen.

Auch wenn einige der oben genannten GPS-Anforderungen als UNBEDINGT EMPFOHLEN sind, wird sie durch die Kompatibilitätsdefinition der nächsten Hauptversion in einen MÜSSEN geändert.

7.3.4 Gyroskop

Geräteimplementierungen SOLLTEN ein Gyroskop (Winkelsensor) beinhalten. Geräte SOLLTEN KEINE Gyroskopsensoren haben, es sei denn, es ist auch ein dreiachsiger Beschleunigungsmesser vorhanden. Wenn eine Geräteimplementierung ein Gyroskop umfasst, geschieht Folgendes:

  • MÜSSEN den TYPE_GYROSCOPE-Sensor und auch den TYPE_GYROSCOPE_UNCALIBRATED-Sensor implementiert werden. Für bestehende und neue Android-Geräte wird dringend empfohlen, den Sensor SENSOR_TYPE_GYROSCOPE_UNCALIBRATED zu implementieren.
  • MÜSSEN in der Lage sein,Ausrichtungsänderungen von bis zu 1.000 Grad pro Sekunde zu messen.
  • MÜSSEN in der Lage sein, Ereignisse bis zu einer Frequenz von mindestens 50 Hz für Android Watch-Geräte zu melden, da diese eine strengere Energiebeschränkung und 100 Hz für alle anderen Gerätetypen haben.
  • SOLLTE Ereignisse mit bis zu 200 Hz melden.
  • MÜSSEN eine Auflösung von mindestens 12 Bit und eine Auflösung von mindestens 16 Bit haben.
  • MÜSSEN temperaturkompensiert werden.
  • MÜSSEN bei Verwendung kalibriert und kompensiert werden und die Kompensationsparameter zwischen Geräteneustarts beibehalten.
  • MUSS eine Varianz von höchstens 1e–7 rad^2 / s^2 pro Hz (Abweichung pro Hz oder rad^2 / s) haben. Die Varianz darf mit der Stichprobenrate variieren, muss jedoch durch diesen Wert eingeschränkt werden. Mit anderen Worten: Wenn Sie die Varianz des Gyros mit einer Abtastrate von 1 Hz messen, sollte sie nicht größer als 1e-7 rad^2/s^2 sein.
  • MÜSSEN Sie einen TYPE_ROTATION_VECTOR-Verbundsensor implementieren, wenn zusätzlich ein Beschleunigungsmessersensor und ein Magnetometer-Sensor vorhanden sind.
  • Wenn ein Beschleunigungsmessersensor enthalten ist, MÜSSEN die zusammengesetzten Sensoren TYPE_GRAVITY und TYPE_LINEAR_ACCELERATION sowie den TYPE_GAME_ROTATION_VECTOR-Verbundsensor implementiert werden. Für bestehende und neue Android-Geräte wird dringend empfohlen, den TYPE_GAME_ROTATION_VECTOR-Sensor zu implementieren.

7.3.5 Barometer

Geräteimplementierungen SOLLTEN ein Barometer (Umgebungsdrucksensor) umfassen. Wenn eine Geräteimplementierung ein Barometer umfasst, gilt Folgendes:

  • MÜSSEN den TYPE_PRESSURE-Sensor implementieren und melden.
  • MÜSSEN in der Lage sein, Ereignisse bei 5 Hz oder mehr zu liefern.
  • MÜSSEN über eine ausreichende Genauigkeit verfügen, um die Höhe schätzen zu können.
  • MÜSSEN temperaturkompensiert werden.

7.3.6 Thermometer

Geräteimplementierungen KÖNNEN ein Umgebungsthermometer (Temperatursensor) umfassen. Falls vorhanden, MÜSSEN sie als SENSOR_TYPE_AMBIENT_TEMPERATURE definiert werden und die Umgebungs- bzw. Raumtemperatur in Grad Celsius messen.

Geräteimplementierungen KÖNNEN, SOLLTEN aber keinen CPU-Temperatursensor enthalten. Falls vorhanden, MÜSSEN sie als SENSOR_TYPE_TEMPERATURE definiert werden, MÜSSEN die Temperatur der Geräte-CPU messen und DARF KEINE andere Temperatur messen. Beachte, dass der Sensortyp SENSOR_TYPE_TEMPERATURE in Android 4.0 eingestellt wurde.

Bei Android Automotive-Implementierungen MUSS SENSOR_TYPE_AMBIENT_TEMPERATURE die Temperatur im Innenraum des Fahrzeugs messen.

7.3.7 Fotometer

Sie können ein Fotometer (Umgebungslicht-Sensor) verwenden, in dem ein entsprechendes Gerät implementiert ist.

7.3.8 Näherungssensor

Geräteimplementierungen KÖNNEN einen Näherungssensor enthalten. Geräte, die einen Sprachanruf tätigen und einen anderen Wert als PHONE_TYPE_NONE in getPhoneType anzeigen können, SOLLTEN einen Näherungssensor enthalten. Wenn eine Geräteimplementierung einen Näherungssensor umfasst, geschieht Folgendes:

  • MÜSSEN die Nähe eines Objekts in derselben Richtung wie der Bildschirm gemessen werden. Das heißt, der Näherungssensor MUSS so ausgerichtet sein, dass Objekte in der Nähe des Bildschirms erkannt werden, da die Hauptabsicht dieses Sensortyps darin besteht, ein vom Nutzer verwendetes Smartphone zu erkennen. Wenn eine Geräteimplementierung einen Näherungssensor mit einer anderen Ausrichtung umfasst, DARF NICHT über diese API auf ihn zugegriffen werden.
  • MUSS eine Genauigkeit von mindestens 1 Bit haben.

7.3.9 Hochwertige Sensoren

Geräteimplementierungen, die eine Reihe hochwertiger Sensoren unterstützen, die alle in diesem Abschnitt aufgeführten Anforderungen erfüllen, MÜSSEN den Support mit dem Funktions-Flag „android.hardware.sensor.hifi_sensors“ kennzeichnen.

Ein Gerät, für das android.hardware.sensor.hifi_sensors deklariert wird, MÜSSEN alle folgenden Sensortypen unterstützen, die den unten aufgeführten Qualitätsanforderungen entsprechen:

  • SENSORTYP_ACCELEROMETER <ph type="x-smartling-placeholder">
      </ph>
    • MUSS einen Messbereich zwischen -8 g und +8 g aufweisen.
    • MÜSSEN eine Auflösung von mindestens 1.024 LSB/G haben.
    • MUSS eine Mindest-Messfrequenz von 12,5 Hz oder weniger haben.
    • MUSS eine maximale Messfrequenz von 400 Hz oder höher haben.
    • MUSS ein Messrauschen aufweisen, das nicht über 400 uG/√Hz liegt.
    • MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 3.000 Sensorereignissen implementiert werden.
    • MUSS einen Batch-Stromverbrauch haben, der nicht unter 3 mW liegt.
    • SOLLTE bei einem statischen 24-Stunden-Dataset eine Stabilität der stationären Rauschverzerrung von \<15 μg √Hz haben.
    • SOLLTE eine Verzerrungsänderung gegenüber der Temperatur von ≤ +/- 1 mg / °C auftreten.
    • SOLLTEN eine optimale Linien-Nichtlinearität von ≤ 0,5 % und Empfindlichkeitsänderung gegenüber Temperatur ≤ 0,03%/C° haben.
  • SENSOR_TYPE_GYROSCOPE

    • MUSS einen Messbereich zwischen -1.000 und +1.000 dps haben.
    • MÜSSEN eine Auflösung von mindestens 16 LSB/dps haben.
    • MUSS eine Mindest-Messfrequenz von 12,5 Hz oder weniger haben.
    • MUSS eine maximale Messfrequenz von 400 Hz oder höher haben.
    • MUSS ein Messrauschen von maximal 0,014°/s/√Hz haben.
    • SOLLTE eine stabile Verzerrungsstabilität von < 0,0002 °/s √Hz aus einem statischen 24-Stunden-Datensatz.
    • SOLLTE eine Verzerrungsänderung gegenüber der Temperatur von ≤ +/- 0,05 °/ s / °C auftreten.
    • SOLLTE eine Änderung der Empfindlichkeit gegenüber der Temperatur von ≤ 0,02% / °C betragen.
    • SOLLTEN eine Nichtlinearität der bestmöglichen Linie von ≤ 0,2 % haben.
    • SOLLTEN eine Rauschdichte von ≤ 0,007°/s/√Hz haben.
  • SENSOR_TYPE_GYROSCOPE_UNCALIBRATED mit denselben Qualitätsanforderungen wie SENSOR_TYPE_GYROSCOPE

  • GEOMAGNETIC_FELD_SENSOR_TYPE <ph type="x-smartling-placeholder">
      </ph>
    • MUSS einen Messbereich zwischen -900 und +900 uT aufweisen.
    • MÜSSEN eine Auflösung von mindestens 5 LSB/uT haben.
    • MUSS eine Mindest-Messfrequenz von 5 Hz oder niedriger haben.
    • MUSS eine maximale Messfrequenz von 50 Hz oder höher haben.
    • MUSS ein Messrauschen aufweisen, das nicht über 0,5 uT liegt.
  • SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED mit denselben Qualitätsanforderungen wie SENSOR_TYPE_GEOMAGNETIC_FIELD und zusätzlich: <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 600 Sensorereignissen implementiert werden.
  • SENSOR_TYPE_PRESSURE <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN einen Messbereich zwischen mindestens 300 und 1100 hPa aufweisen.
    • MÜSSEN eine Auflösung von mindestens 80 LSB/hPa haben.
    • MUSS eine Mindest-Messfrequenz von 1 Hz oder niedriger haben.
    • MUSS eine maximale Messfrequenz von 10 Hz oder höher haben.
    • MUSS ein Messrauschen von maximal 2 P/√Hz haben.
    • MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 300 Sensorereignissen implementiert werden.
    • Der Stromverbrauch für die Batchverarbeitung MUSS nicht unter 2 mW liegen.
  • SENSOR_TYPE_GAME_ROTATION_VECTOR <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 300 Sensorereignissen implementiert werden.
    • MUSS einen Batch-Stromverbrauch haben, der nicht unter 4 mW liegt.
  • SENSORTYPE_SIGNIFICANT_MOTION <ph type="x-smartling-placeholder">
      </ph>
    • MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.
  • SCHRITT-DETECTOR_TYP_SENSOR <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN eine Nicht-Aktivierungsform dieses Sensors mit einer Pufferfunktion von mindestens 100 Sensorereignissen implementiert werden.
    • MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.
    • MUSS einen Batch-Stromverbrauch haben, der nicht unter 4 mW liegt.
  • SENSOR_TYPE_STEP_COUNTER <ph type="x-smartling-placeholder">
      </ph>
    • MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.
  • SENSOR_TILT_DETECTOR <ph type="x-smartling-placeholder">
      </ph>
    • MUSS einen Stromverbrauch von nicht weniger als 0,5 mW haben, wenn das Gerät statisch ist, und 1,5 mW, wenn das Gerät in Bewegung ist.

Außerdem MUSS ein solches Gerät die folgenden Anforderungen an das Sensor-Subsystem erfüllen:

  • Der Zeitstempel des Ereignisses desselben physischen Ereignisses, das vom Beschleunigungsmesser, dem Gyroskopsensor und dem Magnetometer gemeldet wird, MUSS nicht weiter als 2,5 Millisekunden voneinander entfernt sein.
  • Die Zeitstempel der Gyroskop-Sensorereignisse MÜSSEN auf derselben Zeitbasis wie das Kamerasubsystem und innerhalb von 1 Millisekunde nach dem Fehler liegen.
  • High-Fidelity-Sensoren MÜSSEN innerhalb von 5 Millisekunden ab dem Zeitpunkt, an dem die Daten auf dem physischen Sensor für die Anwendung verfügbar sind, Stichproben an Anwendungen liefern.
  • Der Stromverbrauch DARF nicht höher als 0,5 mW sein, wenn das Gerät statisch ist, und 2,0 mW, wenn das Gerät in Bewegung ist, wenn eine Kombination der folgenden Sensoren aktiviert ist: <ph type="x-smartling-placeholder">
      </ph>
    • SENSORTYPE_SIGNIFICANT_MOTION
    • SCHRITT-DETECTOR_TYP_SENSOR
    • SENSOR_TYPE_STEP_COUNTER
    • SENSOR_TILT_DETECTOREN

Beachten Sie, dass die Anforderungen an den Stromverbrauch in diesem Abschnitt nicht den Stromverbrauch des Anwendungsprozessors umfassen. Sie schließt auch die Leistung ein, die von der gesamten Sensorkette – Sensor, unterstützenden Schaltkreisen, dedizierten Sensorverarbeitungssystemen usw. – verbraucht wird.

Die folgenden Sensortypen KÖNNEN auch von einer Geräteimplementierung unterstützt werden, die android.hardware.sensor.hifi_sensors deklariert. Wenn diese Sensortypen jedoch vorhanden sind, MÜSSEN sie die folgenden Mindestanforderungen an die Pufferkapazität erfüllen:

  • SENSOR_TYPE_PROXIMITY: 100 Sensorereignisse

7.3.10 Fingerabdrucksensor

Geräte mit einem sicheren Sperrbildschirm SOLLTEN einen Fingerabdrucksensor enthalten. Wenn eine Geräteimplementierung einen Fingerabdrucksensor und eine entsprechende API für Drittanbieter-Entwickler umfasst, geschieht Folgendes:

  • MÜSSEN die Unterstützung für die Funktion „android.hardware.fingerprint“ deklarieren.
  • MÜSSEN die entsprechende API vollständig implementiert werden, wie in der Android SDK-Dokumentation beschrieben.
  • MUSS eine falsche Annahmequote von maximal 0,002 % haben.
  • Es wird dringend empfohlen, eine Rate falscher Ablehnungen von weniger als 10 % (gemessen am Gerät) zu haben
  • Es wird dringend empfohlen, eine Latenz von unter einer Sekunde, gemessen ab dem Berühren des Fingerabdrucksensors, bis zum Entsperren des Bildschirms für einen registrierten Finger zu haben.
  • MÜSSEN die Zahl der Versuche zur Bestätigung per Fingerabdruck mindestens 30 Sekunden lang begrenzt werden.
  • MÜSSEN 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 zum TEE durchführen.
  • Alle identifizierbaren Fingerabdruckdaten MÜSSEN verschlüsselt und kryptografisch authentifiziert werden, sodass sie nicht außerhalb der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE) erfasst, gelesen oder geändert werden können. Näheres hierzu finden Sie in den Implementierungsrichtlinien auf der Website des Open-Source-Projekts von Android.
  • MÜSSEN verhindern, dass ein Fingerabdruck hinzugefügt wird, ohne zuvor eine Vertrauenskette zu schaffen. Dazu muss der Nutzer das Vorhandensein von Anmeldedaten bestätigen oder neue, durch TEE gesicherte Geräteanmeldedaten hinzufügen (PIN/Muster/Passwort). Die Implementierung des Open-Source-Projekts von Android stellt den entsprechenden Mechanismus im Framework bereit.
  • DÜRFEN NICHT Drittanbieter-Apps zur Unterscheidung zwischen einzelnen Fingerabdrücken aktivieren.
  • MÜSSEN die Kennzeichnung DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT berücksichtigen.
  • Bei einem Upgrade von einer älteren Version als Android 6.0 MÜSSEN die Fingerabdruckdaten sicher migriert oder entfernt werden, damit sie die oben genannten Anforderungen erfüllen.
  • SOLLTE das Android-Fingerabdrucksymbol aus dem Android Open Source Project verwenden.

7.3.11 Reine Android Automotive-Sensoren

Automobilspezifische Sensoren sind in den android.car.CarSensorManager API definiert .

7.3.11.1 Aktuelles Getriebe

Bei Android Automotive-Implementierungen MUSS das aktuelle Gerät als SENSOR_TYPE_GEAR bereitgestellt werden.

7.3.11.2 Tag-/Nachtmodus

Android Automotive-Implementierungen MÜSSEN den Tag-/Nachtmodus unterstützen, definiert als SENSOR_TYPE_NIGHT. Der Wert dieses Flags MÜSSEN mit dem Tag-/Nachtmodus im Dashboard übereinstimmen und auf der Eingabe des Umgebungslicht-Sensors basieren. Der zugrunde liegende Umgebungslicht-Sensor KANN der gleiche wie Fotometer sein.

7.3.11.3 Fahrstatus

Android Automotive-Implementierungen MÜSSEN einen Fahrstatus unterstützen, der als SENSOR_TYPE_DRIVING_STATUS definiert ist, mit dem Standardwert DRIVE_STATUS_UNRESTRICTED, wenn das Fahrzeug vollständig angehalten und geparkt ist. Es liegt in der Verantwortung der Gerätehersteller, SENSOR_TYPE_DRIVING_STATUS gemäß allen Gesetzen und Vorschriften zu konfigurieren, die für die Länder gelten, in die das Produkt versendet wird.

7.3.11.4 Radgeschwindigkeit

Bei Android Automotive-Implementierungen MÜSSEN die Fahrzeuggeschwindigkeit als SENSOR_TYPE_CAR_SPEED definiert sein.

7.3.12 Positionssensor

Geräteimplementierungen KÖNNEN einen Positionssensor mit 6 Freiheitsgraden unterstützen. Android-Handheld-Geräte werden empfohlen, diesen Sensor zu unterstützen. Wenn eine Geräteimplementierung einen Positionssensor mit 6 Freiheitsgraden unterstützt, geschieht Folgendes:

  • MÜSSEN den TYPE_POSE_6DOF-Sensor implementieren und melden.
  • MUSS genauer sein als der Rotationsvektor allein.

7.4 Datenverbindung

7.4.1 Telefonie

Der von den Android-APIs verwendete Begriff "Telefonie" bezieht sich in diesem Dokument speziell auf Hardware für das Tätigen von Sprachanrufen und das Senden von SMS-Nachrichten über ein GSM- oder CDMA-Netzwerk. Auch wenn diese Sprachanrufe Paketvermittlung sein können oder nicht, gelten sie im Rahmen von Android als unabhängig von Datenverbindungen, die über dasselbe Netzwerk implementiert werden. Mit anderen Worten: Die Android-Telefoniefunktionen und APIs beziehen sich speziell auf Sprachanrufe und SMS. Geräteimplementierungen, die keine Anrufe tätigen oder SMS senden/empfangen können, DÜRFEN beispielsweise NICHT die Funktion "android.hardware.telephony" oder andere Unterfunktionen melden, unabhängig davon, ob sie ein Mobilfunknetz für die Datenverbindung verwenden.

Android KANN auf Geräten ohne Telefonie-Hardware verwendet werden. Das heißt, Android ist mit Geräten kompatibel, die keine Smartphones sind. Wenn eine Geräteimplementierung jedoch GSM- oder CDMA-Telefonie umfasst, MÜSSEN sie die vollständige API-Unterstützung für diese Technologie implementieren. Bei Geräteimplementierungen ohne Telefoniehardware MÜSSEN die vollständigen APIs als managementfreie Implementierung implementiert werden.

7.4.1.1 Kompatibilität mit Nummernblockierungen

Implementierungen von Android-Telefoniegeräten MÜSSEN Unterstützung für das Blockieren von Nummern enthalten und:

  • MÜSSEN BlockingNumberContract und die entsprechende API, wie in der SDK-Dokumentation beschrieben, vollständig implementiert werden.
  • MÜSSEN alle Anrufe und Nachrichten von einer Telefonnummer in „BlockingNumberProvider“ blockieren ohne Interaktion mit Apps. Die einzige Ausnahme ist, wenn die Blockierung von Nummern vorübergehend aufgehoben wird, wie in der SDK-Dokumentation beschrieben.
  • Bei einem blockierten Anruf DARF NICHT in den Plattformanbieter der Anrufliste geschrieben werden.
  • Bei einer blockierten Nachricht DARF NICHT an den Telefonieanbieter geschrieben werden.
  • MÜSSEN eine UI zur Verwaltung blockierter Nummern implementieren, die mit dem von der Methode TelecomManager.createManageBlockingNumbersIntent() zurückgegebenen Intent geöffnet wird.
  • DÜRFEN sekundäre Nutzer NICHT erlauben, die blockierten Nummern auf dem Gerät anzusehen oder zu bearbeiten, da die Android-Plattform davon ausgeht, dass der primäre Nutzer die vollständige Kontrolle über die Telefoniedienste auf dem Gerät in einer einzigen Instanz hat. Alle Benutzeroberflächen zu Blockierungen MÜSSEN für sekundäre Nutzer ausgeblendet werden und die Liste der blockierten Nutzer MÜSSEN weiterhin berücksichtigt werden.
  • SOLLTEN Sie die blockierten Nummern zum Anbieter migrieren, wenn ein Gerät auf Android 7.0 aktualisiert wird.

7.4.2 IEEE 802.11 (Wi-Fi)

Alle Implementierungen von Android-Geräten SOLLTEN mindestens eine Form von 802.11 unterstützen. Wenn eine Geräteimplementierung 802.11 unterstützt und die Funktion einer Drittanbieter-App zur Verfügung stellt, MÜSSEN sie die entsprechende Android API implementieren und:

  • MÜSSEN das Hardwarefunktions-Flag „android.hardware.wifi“ melden.
  • MÜSSEN die Multicast API wie in der SDK-Dokumentation beschrieben implementieren.
  • MUSS Multicast-DNS (mDNS) unterstützen und DÜRFEN KEINE mDNS-Pakete (224.0.0.251) zu keinem Zeitpunkt des Betriebs filtern, einschließlich: <ph type="x-smartling-placeholder">
      </ph>
    • Auch wenn der Bildschirm nicht aktiv ist.
    • Für Android TV-Geräteimplementierungen, auch im Stand-by-Modus.

7.4.2.1 Wi-Fi Direct

Geräteimplementierungen SOLLTEN Wi-Fi Direct (Wi-Fi Peer-to-Peer) unterstützen. Wenn eine Geräteimplementierung Wi-Fi Direct unterstützt, MÜSSEN sie die entsprechende Android API implementieren, wie in der SDK-Dokumentation beschrieben. Wenn eine Geräteimplementierung Wi-Fi Direct unterstützt, gilt Folgendes:

  • MÜSSEN die Hardwarefunktion „android.hardware.wifi.direct“ melden.
  • MUSS den normalen WLAN-Betrieb unterstützen.
  • SOLLTE die gleichzeitige Verwendung von Wi-Fi und Wi-Fi Direct unterstützen.

Geräteimplementierungen SOLLTEN die Unterstützung für Wi-Fi Tunneled Direct Link Setup (TDLS) beinhalten, wie in der Android SDK-Dokumentation beschrieben. Wenn eine Geräteimplementierung Unterstützung für TDLS und TDLS durch die WiFiManager API aktiviert, geschieht für das Gerät Folgendes:

  • SOLLTEN TDLS nur verwenden, wenn es möglich UND vorteilhaft ist.
  • SOLLTEN heuristisch sein und KEINE TDLS verwenden, wenn die Leistung schlechter ist als die Nutzung des WLAN-Zugangspunkts.

7.4.3 Bluetooth

Android Watch-Implementierungen MÜSSEN Bluetooth unterstützen. Implementierungen von Android TV MÜSSEN Bluetooth und Bluetooth LE unterstützen. Android Automotive-Implementierungen MÜSSEN Bluetooth und Bluetooth LE unterstützen.

Geräteimplementierungen, die die Funktion „android.hardware.vr.high_performance“ unterstützen, MÜSSEN Bluetooth 4.2 und Bluetooth LE-Datenlängenerweiterung unterstützen.

Android unterstützt Bluetooth und Bluetooth Low Energy. Bei Geräteimplementierungen, die Bluetooth und Bluetooth Low Energy unterstützen, MÜSSEN die relevanten Plattformfunktionen (android.hardware.bluetooth bzw. android.hardware.bluetooth_le) deklariert und die Plattform-APIs implementiert werden. Bei Geräteimplementierungen SOLLTEN die für das Gerät geeigneten Bluetooth-Profile wie A2DP, AVCP oder OBEX implementiert werden.

Android Automotive-Implementierungen SOLLTEN das Message Access Profile (MAP) unterstützen. Android Automotive-Implementierungen MÜSSEN die folgenden Bluetooth-Profile unterstützen:

  • Telefonanrufe über Hands-Free Profile (HFP).
  • Medienwiedergabe über das Audio Distribution Profile (A2DP)
  • Steuerung der Medienwiedergabe über das Remote Control Profile (AVRCP)
  • Kontaktfreigabe über das Phone Book Access Profile (PBAP)

Geräteimplementierungen, einschließlich Unterstützung von Bluetooth Low Energy:

  • MÜSSEN die Hardwarefunktion android.hardware.bluetooth_le deklarieren.
  • MÜSSEN die auf GATT (allgemeinen Attributprofil) basierenden Bluetooth-APIs aktiviert werden, wie in der SDK-Dokumentation und unter android.bluetooth beschrieben.
  • wird dringend empfohlen, aus Datenschutzgründen ein Zeitlimit für die auflösbare Privatadresse (RPA) von maximal 15 Minuten zu implementieren und die Adresse bei einer Zeitüberschreitung zu rotieren.
  • SOLLTEN bei der Implementierung der ScanFilter API die Übertragung der Filterlogik auf den Bluetooth-Chipsatz unterstützen und bei jeder Abfrage über die Methode „android.bluetooth.BluetoothAdapter.isOffloadedFilteringSupported()“ den korrekten Wert für den Ort melden, an dem die Filterlogik implementiert ist.
  • SOLLTEN die Übertragung des Batch-Scans auf den Bluetooth-Chipsatz unterstützen. Wenn dies jedoch nicht möglich ist, MÜSSEN Sie bei jeder Abfrage über die Methode „android.bluetooth.BluetoothAdapter.isOffloadedScanBatchingSupported()“ den Wert „false“ melden.
  • SOLLTEN Multi-Advertising mit mindestens 4 Slots unterstützen. Wenn dies jedoch nicht möglich ist, MÜSSEN bei Abfragen über die Methode „android.bluetooth.BluetoothAdapter.isMultiple WerbungSupported()“ „false“ gemeldet werden.

7.4.4 Nahfeldkommunikation

Geräteimplementierungen SOLLTEN einen Transceiver und die zugehörige Hardware für die Nahfeldkommunikation (NFC) umfassen. Wenn eine Geräteimplementierung NFC-Hardware enthält und plant, sie für Drittanbieter-Apps verfügbar zu machen, gilt Folgendes:

  • MÜSSEN die Funktion „android.hardware.nfc“ über die Methode android.content.pm.PackageManager.hasSystemFeature() melden.
  • MÜSSEN NDEF-Nachrichten über die folgenden NFC-Standards lesen und schreiben können: <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN in der Lage sein, als Leser/Schreiber im NFC-Forum (gemäß der technischen Spezifikation NFCForum-TS-DigitalProtocol-1.0) des NFC-Forums über die folgenden NFC-Standards zu fungieren: <ph type="x-smartling-placeholder">
        </ph>
      • NfcA (ISO14443-3A)
      • NFCB (ISO 14443-3B)
      • NFCF (JIS X 6319-4)
      • IsoDep (ISO 14443-4)
      • NFC-Forum: Tag-Typen 1, 2, 3, 4 (definiert vom NFC-Forum)
    • WIRD UNBEDINGT EMPFOHLEN, NDEF-Nachrichten sowie Rohdaten über die folgenden NFC-Standards zu lesen und zu schreiben. Beachten Sie, dass die unten aufgeführten NFC-Standards zwar als AUSSCHLIESSEND EMPFOHLEN werden, die Kompatibilitätsdefinition für eine zukünftige Version jedoch in "MÜSSEN" geändert wird. Diese Standards sind in dieser Version optional, werden aber in zukünftigen Versionen erforderlich sein. Bestehenden und neuen Geräten, auf denen diese Android-Version ausgeführt wird, wird dringend empfohlen, diese Anforderungen schon jetzt zu erfüllen, damit ein Upgrade auf die zukünftigen Plattform-Releases möglich ist.
      • NfcV (ISO 15693)
    • SOLLTEN Barcode und URL (falls codiert) von Thinfilm-NFC-Barcode-Produkten lesen können.
    • MÜSSEN in der Lage sein, Daten über die folgenden Peer-to-Peer-Standards und -Protokolle zu übertragen und zu empfangen: <ph type="x-smartling-placeholder">
        </ph>
      • ISO 18092
      • LLCP 1.2 (definiert vom NFC-Forum)
      • SDP 1.0 (definiert vom NFC-Forum)
      • NDEF-Push-Protokoll
      • SNEP 1.0 (definiert vom NFC-Forum)
    • MÜSSEN Support für Android Beam beinhalten.
    • MÜSSEN den SNEP-Standardserver implementiert werden. Gültige NDEF-Nachrichten, die vom Standard-SNEP-Server empfangen werden, MÜSSEN an Apps weitergeleitet werden, die den Intent „android.nfc.ACTION_NDEF_DISCOVERED“ verwenden. Durch die Deaktivierung von Android Beam in den Einstellungen DARF NICHT die Weiterleitung eingehender NDEF-Nachrichten deaktiviert werden.
    • MÜSSEN den Intent android.settings.NFCSHARING_SETTINGS berücksichtigen, um die NFC-Freigabeeinstellungen anzuzeigen.
    • MÜSSEN den NPP-Server implementieren. Nachrichten, die vom NPP-Server empfangen werden, MÜSSEN genauso verarbeitet werden wie der SNEP-Standardserver.
    • MÜSSEN einen SNEP-Client implementieren und versuchen, ausgehende P2P-NDEF an den Standard-SNEP-Server zu senden, wenn Android Beam aktiviert ist. Wenn kein Standard-SNEP-Server gefunden wird, MUSS der Client versuchen, eine Nachricht an einen NPP-Server zu senden.
    • MÜSSEN die NDEF-Nachricht für P2P-Aktivitäten im Vordergrund zulassen, um die ausgehende P2P-NDEF-Nachricht mit android.nfc.NfcAdapter.setNdefPushMessage, android.nfc.NfcAdapter.setNdefPushMessageCallback und android.nfc.NfcAdapter.enableForegroundNdefPush festzulegen.
    • SOLLTEN Sie vor dem Senden ausgehender P2P-NDEF-Nachrichten eine Geste oder eine Bestätigung auf dem Bildschirm verwenden, z. B. „Zum Beamen berühren“.
    • SOLLTEN Android Beam standardmäßig aktivieren und MUSS in der Lage sein, mit Android Beam Nachrichten zu senden und zu empfangen, auch wenn ein anderer proprietärer NFC-P2P-Modus aktiviert ist.
    • MÜSSEN die NFC-Verbindungsübergabe an Bluetooth unterstützen, wenn das Gerät das Bluetooth-Objekt Push-Profil unterstützt. Geräteimplementierungen MÜSSEN die Verbindungsübergabe an Bluetooth bei Verwendung von android.nfc.NfcAdapter.setBeamPushUris unterstützen, indem die Spezifikationen für Connection Handover Version 1.2 und Bluetooth Secure Simple Pairing Using NFC Version 1.0 vom NFC-Forum implementiert werden. Eine solche Implementierung MÜSSEN den Handover LLCP-Dienst mit dem Dienstnamen „urn:nfc:sn:handover“ für den Austausch der Handover-Anfrage-/Auswahleinträge über NFC implementieren. Außerdem MUSS das Bluetooth Object Push Profile für die eigentliche Bluetooth-Datenübertragung verwendet werden. Aus Gründen der Kompatibilität mit Android 4.1-Geräten SOLLTE die Implementierung weiterhin SNEP-GET-Anfragen für den Austausch der Handover-Anfrage/die Auswahl von Einträgen über NFC akzeptieren. Die Implementierung selbst sollte jedoch KEINE SNEP GET-Anfragen zur Durchführung eines Verbindungs-Handovers senden.
    • MÜSSEN im NFC-Erkennungsmodus alle unterstützten Technologien abfragen.
    • Muss sich im NFC-Erkennungsmodus befinden, wenn das Gerät aktiv ist, der Bildschirm aktiv und der Sperrbildschirm entsperrt ist.

Hinweis: Öffentlich verfügbare Links sind für die oben genannten Spezifikationen des JIS-, ISO- und NFC-Forums nicht verfügbar.

Android unterstützt den NFC-Modus "Host Card Emulation" (HCE). Wenn eine Geräteimplementierung einen HCE-fähigen NFC-Controller-Chipsatz (für NfcA und/oder NfcB) enthält und das Routing von Anwendungs-IDs (AID) unterstützt, gilt Folgendes:

  • MÜSSEN die Konstante der Funktion android.hardware.nfc.hce melden.
  • MÜSSEN gemäß der Definition im Android SDK die NFC HCE APIs unterstützen.

Wenn eine Geräteimplementierung einen NFC-Controller-Chipsatz mit HCE für NfcF enthält und die Funktion für Drittanbieteranwendungen implementiert, gilt Folgendes:

  • MÜSSEN die Funktionskonstante android.hardware.nfc.hcef melden.
  • MÜSSEN die NfcF Card Emulation APIs wie im Android SDK definiert implementiert werden.

Darüber hinaus können Geräteimplementierungen Lese-/Schreibunterstützung für die folgenden MIFARE-Technologien beinhalten.

  • MIFARE Classic
  • MIFARE Ultraleicht
  • NDEF auf MIFARE Classic

Beachten Sie, dass Android APIs für diese MIFARE-Typen enthält. Wenn eine Geräteimplementierung MIFARE in der Rolle „Reader/Writer“ unterstützt, gilt Folgendes:

  • MÜSSEN die entsprechenden Android-APIs gemäß der Dokumentation des Android-SDK implementieren.
  • MÜSSEN die Funktion „com.nxp.mifare“ aus der Methode android.content.pm.PackageManager.hasSystemFeature() melden. Beachten Sie, dass dies keine Android-Standardfunktion ist und daher nicht als Konstante in der Klasse „android.content.pm.PackageManager“ angezeigt wird.
  • DÜRFEN NICHT die entsprechenden Android-APIs implementieren und die Funktion com.nxp.mifare nicht melden, es sei denn, diese Funktion implementiert auch allgemeine NFC-Unterstützung, wie in diesem Abschnitt beschrieben.

Wenn eine Geräteimplementierung keine NFC-Hardware enthält, DARF die Funktion android.hardware.nfc NICHT aus der Methode android.content.pm.PackageManager.hasSystemFeature() deklariert werden und MÜSSEN die Android NFC API als No-Op-Methode implementieren.

Da die Klassen android.nfc.NdefMessage und android.nfc.NdefRecord ein protokollunabhängiges Datendarstellungsformat darstellen, MÜSSEN diese APIs in Geräteimplementierungen implementiert werden, auch wenn sie keine NFC-Unterstützung enthalten oder die Funktion „android.hardware.nfc“ nicht deklarieren.

7.4.5 Minimale Netzwerkfähigkeit

Geräteimplementierungen MÜSSEN Unterstützung für eine oder mehrere Formen von Datennetzwerken beinhalten. Insbesondere MÜSSEN Geräteimplementierungen Unterstützung für mindestens einen Datenstandard beinhalten, der 200 Kbit/s oder mehr unterstützen kann. Beispiele für Technologien, die diese Anforderung erfüllen, sind EDGE, HSPA, EV-DO, 802.11g, Ethernet, Bluetooth PAN usw.

Geräteimplementierungen, bei denen ein physischer Netzwerkstandard (z. B. Ethernet) die primäre Datenverbindung ist, SOLLTEN auch mindestens einen gängigen Standard für drahtlose Daten unterstützen, z. B. 802.11 (WLAN).

Geräte KÖNNEN mehr als eine Form der Datenverbindung implementieren.

Geräte MÜSSEN einen IPv6-Netzwerkstack enthalten und IPv6-Kommunikation über verwaltete APIs wie java.net.Socket und java.net.URLConnection sowie die nativen APIs wie AF_INET6-Sockets unterstützen. Die erforderliche IPv6-Unterstützung hängt vom Netzwerktyp ab:

  • Geräte, die WLANs unterstützen, MÜSSEN den Dual-Stack- und den Nur-IPv6-Betrieb im WLAN unterstützen.
  • Geräte, die Ethernet-Netzwerke unterstützen, MÜSSEN Dual-Stack-Betrieb auf Ethernet unterstützen.
  • Geräte, die mobile Daten unterstützen, sollten den IPv6-Betrieb (nur IPv6 und möglicherweise Dual-Stack) über die mobile Datenverbindung unterstützen.
  • Wenn ein Gerät gleichzeitig mit mehr als einem Netzwerk verbunden ist (z.B. WLAN und mobile Daten), MUSS das Gerät diese Anforderungen gleichzeitig in jedem Netzwerk, mit dem es verbunden ist, erfüllen.

IPv6 MUSS standardmäßig aktiviert sein.

Damit die IPv6-Kommunikation genauso zuverlässig ist wie die IPv4-Kommunikation, dürfen an das Gerät gesendete Unicast-IPv6-Pakete NICHT verworfen werden, auch wenn der Bildschirm nicht aktiv ist. Redundante Multicast-IPv6-Pakete, z. B. wiederholte identische Router-Werbung, KÖNNEN in der Hardware oder Firmware eine Ratenbegrenzung erhalten, wenn dies erforderlich ist, um Energie zu sparen. In solchen Fällen DARF die Ratenbegrenzung NICHT dazu führen, dass das Gerät die IPv6-Verbindung in einem IPv6-kompatiblen Netzwerk verliert, dessen RA-Lebensdauer mindestens 180 Sekunden beträgt.

IPv6-Verbindungen MUSS im Stromsparmodus aufrechterhalten werden.

7.4.6 Synchronisierungseinstellungen

Bei Geräteimplementierungen MÜSSEN die automatische Master-Synchronisierung standardmäßig aktiviert sein, damit die Methode getMasterSyncAutomatisch() den Wert "true" zurückgibt.

7.4.7 Datensparmodus

Bei Geräteimplementierungen mit einer kostenpflichtigen Verbindung wird dringend empfohlen, den Datensparmodus bereitzustellen.

Wenn eine Geräteimplementierung den Datensparmodus anbietet, geschieht Folgendes:

  • MÜSSEN alle APIs der ConnectivityManager-Klasse unterstützt werden, wie in der SDK-Dokumentation beschrieben.

  • MÜSSEN in den Einstellungen eine Benutzeroberfläche bereitstellen, über die Nutzer Apps hinzufügen oder von der Zulassungsliste entfernen können.

Umgekehrt gilt: Wenn eine Geräteimplementierung den Datensparmodus nicht bietet, geschieht Folgendes:

  • MÜSSEN den Wert RESTRICT_BACKGROUND_STATUS_DISABLED für ConnectivityManager.getRestrictBackgroundStatus() zurückgeben.

  • DARF NICHT übertragen werden: ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED

  • MÜSSEN eine Aktivität haben, die den Intent Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS verarbeitet, dies jedoch KANN als „No-Op“ implementiert werden.

7.5 Kameras

Geräteimplementierungen SOLLTEN eine Kamera auf der Rückseite und KANN eine Frontkamera enthalten. Eine Kamera auf der Rückseite ist eine Kamera an der Seite des Geräts gegenüber dem Display. d. h., es werden wie mit einer herkömmlichen Kamera Szenen am anderen Ende des Geräts erfasst. Eine Frontkamera ist eine Kamera, die sich auf derselben Seite des Geräts wie das Display befindet. d. h. eine Kamera, die in der Regel zum Abbilden des Nutzers verwendet wird, z. B. für Videokonferenzen und ähnliche Anwendungen.

Wenn eine Geräteimplementierung mindestens eine Kamera umfasst, MUSS eine App in der Lage sein, gleichzeitig 3 RGBA_8888-Bitmaps zuzuweisen, die der Größe der Bilder entsprechen, die mit dem Kamerasensor mit der größten Auflösung des Geräts aufgenommen wurden, während die Kamera für eine einfache Vorschau und dennoch für Aufnahmen geöffnet ist.

7.5.1 Rückkamera

Geräteimplementierungen SOLLTEN eine Kamera auf der Rückseite enthalten. Wenn eine Geräteimplementierung mindestens eine Kamera auf der Rückseite umfasst, ist Folgendes zu beachten:

  • MÜSSEN die Funktions-Flags „android.hardware.camera“ und android.hardware.camera.any gemeldet werden.
  • MÜSSEN eine Auflösung von mindestens 2 Megapixeln haben.
  • Im Kameratreiber sollte entweder Hardware-Autofokus oder Software-Autofokus implementiert sein (für die Anwendungssoftware transparent).
  • KÖNNEN mit Fixfokus oder EDOF-Hardware (erweiterte Tiefenschärfe) ausgestattet sein.
  • KANN einen Blitz enthalten. Wenn die Kamera über einen Blitz verfügt, DARF die Blitzlampe NICHT eingeschaltet werden, solange eine android.hardware.Camera.PreviewCallback-Instanz auf einer Kameravorschauoberfläche registriert wurde, es sei denn, die Anwendung hat den Blitz explizit durch Aktivieren der Attribute FLASH_MODE_AUTO oder FLASH_MODE_ON eines Camera.Parameters-Objekts aktiviert. Beachten Sie, dass diese Einschränkung nicht für die integrierte Systemkamera-App des Geräts gilt, sondern nur für Drittanbieter-Apps, die Camera.PreviewCallback verwenden.

7.5.2 Frontkamera

Geräteimplementierungen KÖNNEN eine Frontkamera enthalten. Wenn eine Geräteimplementierung mindestens eine Frontkamera umfasst, geschieht Folgendes:

  • MÜSSEN die Funktions-Flags „android.hardware.camera.any“ und „android.hardware.camera.front“ gemeldet werden.
  • MÜSSEN eine Auflösung von mindestens VGA (640 x 480 Pixel) haben.
  • DÜRFEN KEINE Frontkamera als Standardkamera für die Camera API verwenden. Die Kamera-API in Android bietet spezielle Unterstützung für Frontkameras und Geräteimplementierungen DÜRFEN die API NICHT so konfigurieren, dass eine Frontkamera als Standardrückkamera behandelt wird, selbst wenn sie die einzige Kamera des Geräts ist.
  • KÖNNEN Funktionen wie Autofokus, Blitz usw. für Rückkameras enthalten, wie in Abschnitt 7.5.1 beschrieben.
  • MUSS den Stream, der von einer App in der Kameravorschau angezeigt wird, wie folgt horizontal reflektieren (d.h. spiegeln): <ph type="x-smartling-placeholder">
      </ph>
    • Wenn die Geräteimplementierung vom Nutzer gedreht werden kann (z. B. automatisch über einen Beschleunigungsmesser oder manuell über eine Nutzereingabe), MÜSSEN die Kameravorschauen horizontal relativ zur aktuellen Ausrichtung des Geräts gespiegelt werden.
    • Wenn die aktuelle Anwendung ausdrücklich das Drehen des Kamerabildschirms über einen Aufruf der Methode android.hardware.Camera.setDisplayOrientation() angefordert hat, MUSS die Kameravorschau horizontal relativ zur in der App angegebenen Ausrichtung gespiegelt werden.
    • Andernfalls MUSS die Vorschau entlang der horizontalen Standardachse des Geräts gespiegelt werden.
  • MÜSSEN das im Postview angezeigte Bild auf dieselbe Weise spiegeln wie der Bildstream der Kameravorschau. Wenn Postview von der Geräteimplementierung nicht unterstützt wird, gilt diese Anforderung natürlich nicht.
  • DÜRFEN NICHT das endgültige aufgenommene Standbild oder die endgültigen Videostreams spiegeln, die an Anwendungsrückrufe zurückgegeben oder an den Medienspeicher übergeben werden.

7.5.3 Externe Kamera

Geräteimplementierungen KÖNNEN Unterstützung für eine externe Kamera beinhalten, die nicht unbedingt immer angeschlossen ist. Wenn ein Gerät eine externe Kamera unterstützt, gilt Folgendes:

  • MÜSSEN die Plattformfunktions-Flags android.hardware.camera.external und android.hardware camera.any deklariert werden .
  • KANN mehrere Kameras unterstützen.
  • MÜSSEN die USB Video Class (UVC 1.0 oder höher) unterstützen, wenn die externe Kamera über den USB-Port angeschlossen wird.
  • SOLLTEN Videokomprimierungen wie MJPEG unterstützen, um die Übertragung von qualitativ nicht codierten Streams (rohe oder unabhängig komprimierte Bildstreams) zu ermöglichen.
  • KANN die kamerabasierte Videocodierung unterstützen. Sofern unterstützt, MUSS ein gleichzeitiger, nicht codierter / MJPEG-Stream (QVGA oder höhere Auflösung) für die Geräteimplementierung zugänglich sein.

7.5.4 Verhalten der Camera API

Android umfasst zwei API-Pakete für den Zugriff auf die Kamera: Die neuere android.hardware.camera2-API ermöglicht die Steuerung der Kamera auf niedrigerer Ebene für die App, einschließlich effizienter Zero-Copy-Burst-/Streaming-Abläufe und Steuerungen pro Frame für Belichtung, Verstärkung, Weißabgleichzunahme, Farbkonvertierung, Geräuschunterdrückung, Schärfe und mehr.

Das ältere API-Paket, android.hardware.Camera, wurde in Android 5.0 als veraltet gekennzeichnet. Da es jedoch weiterhin für Apps zur Verwendung von Android-Geräteimplementierungen verfügbar sein sollte, MÜSSEN Sie sicherstellen, dass die API weiterhin unterstützt wird, wie in diesem Abschnitt und im Android SDK beschrieben.

Bei Geräteimplementierungen MÜSSEN für alle verfügbaren Kameras die folgenden Verhaltensweisen für die kamerabezogenen APIs implementiert werden:

  • Wenn eine App noch nie "android.hardware.Camera.Parameters.setPreviewFormat(int) aufgerufen hat, MUSS das Gerät "android.hardware.PixelFormat.YCbCr_420_SP" verwenden, um Vorschaudaten an App-Callbacks bereitzustellen.
  • Wenn eine Anwendung eine android.hardware.Camera.PreviewCallback-Instanz registriert und das System die onPreviewFrame()-Methode aufruft, wenn das Vorschauformat YCbCr_420_SP ist, müssen die an onPreviewFrame() übergebenen Daten im byte[]-Format weiter im NV21-Codierungsformat vorliegen. Das heißt, NV21 MUSS die Standardeinstellung sein.
  • Geräteimplementierungen für android.hardware.Camera MÜSSEN das YV12-Format unterstützen (wie durch die Konstante android.graphics.ImageFormat.YV12 angegeben) für Kameravorschauen für Front- und Rückkameras. Der Hardware-Videoencoder und die Kamera können jedes native Pixelformat verwenden. Die Geräteimplementierung muss jedoch die Konvertierung in YV12 unterstützen.
  • Für „android.hardware.camera2“ müssen Geräteimplementierungen die Formate „android.hardware.ImageFormat.YUV_420_888“ und „android.hardware.ImageFormat.JPEG“ als Ausgaben über die android.media.ImageReader API unterstützen.

Geräteimplementierungen MÜSSEN trotzdem die vollständige Camera API implementieren, die in der Android SDK-Dokumentation enthalten ist, unabhängig davon, ob das Gerät über Hardware-Autofokus oder andere Funktionen verfügt. Kameras ohne Autofokus MÜSSEN dennoch alle registrierten android.hardware.Camera.AutoFocusCallback-Instanzen aufrufen, auch wenn dies für eine Kamera ohne Autofokus nicht relevant ist. Hinweis: Dies gilt für Frontkameras. Auch wenn die meisten Frontkameras beispielsweise keinen Autofokus unterstützen, müssen die API-Callbacks dennoch wie beschrieben "gefälscht" werden.

Geräteimplementierungen MÜSSEN jeden Parameternamen erkennen und berücksichtigen, der als Konstante in der Klasse android.hardware.Camera.Parameters definiert ist, sofern die zugrunde liegende Hardware die Funktion unterstützt. Wenn die Gerätehardware eine Funktion nicht unterstützt, muss sich die API wie dokumentiert verhalten. Umgekehrt DÜRFEN bei Geräteimplementierungen keine String-Konstanten berücksichtigt oder erkannt werden, die an die Methode "android.hardware.Camera.setParameters()" übergeben werden, die nicht als Konstanten in der Methode "android.hardware.Camera.Parameters" dokumentiert sind. Das heißt, Geräteimplementierungen MÜSSEN alle standardmäßigen Kameraparameter unterstützen, wenn dies die Hardware zulässt. Benutzerdefinierte Kameraparametertypen DÜRFEN NICHT unterstützt werden. Beispielsweise MÜSSEN Geräteimplementierungen, die die Bilderfassung mit HDR-Bildverarbeitungstechniken unterstützen, den Kameraparameter Kamera.SCENE_MODE_HDR unterstützen.

Da nicht alle Geräteimplementierungen alle Funktionen der android.hardware.camera2-API vollständig unterstützen können, MÜSSEN sie die korrekte Unterstützung wie im Android SDK beschrieben mit der android.info.supportedHardwareLevel-Eigenschaft und die entsprechenden Flags für Framework-Funktionen melden.

Bei Geräteimplementierungen MÜSSEN außerdem die einzelnen Kamerafunktionen von android.hardware.camera2 über die Eigenschaft android.request.availableCapabilities und die entsprechenden Funktions-Flags deklarieren. Ein Gerät muss das Funktions-Flag definieren, wenn eine seiner angeschlossenen Kamerageräte die Funktion unterstützt.

Geräteimplementierungen MÜSSEN den Intent Camera.ACTION_NEW_PICTURE übertragen, sobald die Kamera ein neues Bild aufnimmt und dieses Bild zum Medienspeicher hinzugefügt wird.

Geräteimplementierungen MÜSSEN den Intent Camera.ACTION_NEW_VIDEO übertragen, wenn die Kamera ein neues Video aufzeichnet und das Bild im Medienspeicher hinzugefügt wurde.

7.5.5 Kameraausrichtung

Sowohl Front- als auch Rückkameras, sofern vorhanden, MÜSSEN so ausgerichtet sein, dass die lange Seite der Kamera mit der des Bildschirms übereinstimmt. Wenn das Gerät also in Querformat gehalten wird, MÜSSEN Kameras Bilder im Querformat aufnehmen. Dies gilt unabhängig von der natürlichen Ausrichtung des Geräts. Das heißt, sie gilt sowohl für primäre Geräte im Querformat als auch für primäre Geräte im Hochformat.

7.6 Arbeitsspeicher und Datenspeicher

7.6.1 Mindestanforderungen an Arbeitsspeicher und Speicherplatz

Android TV-Geräte müssen über mindestens 4 GB nichtflüchtigen Speicher für private App-Daten verfügen.

Der für Kernel und Userspace in Geräteimplementierungen verfügbare Arbeitsspeicher MÜSSEN mindestens gleich oder größer als die in der folgenden Tabelle angegebenen Mindestwerte sein. Informationen zu Bildschirmgröße und -dichte findest du in Abschnitt 7.1.1.

Dichte und Bildschirmgröße 32-Bit-Gerät 64-Bit-Gerät
Android Watch-Geräte (aufgrund kleinerer Displays) 416MB Nicht zutreffend
  • 280 dpi oder niedriger auf kleinen/normalen Bildschirmen
  • mdpi oder niedriger auf großen Bildschirmen
  • LDPI oder niedriger auf sehr großen Bildschirmen
512MB 816MB
  • xhdpi oder höher auf kleinen/normalen Bildschirmen
  • HDPI oder mehr auf großen Bildschirmen
  • mdpi oder höher auf extragroßen Bildschirmen
608MB 944MB
  • Mindestens 400 dpi auf kleinen/normalen Bildschirmen
  • xhdpi oder höher auf großen Bildschirmen
  • tvdpi oder höher auf sehr großen Bildschirmen
896MB 1.280 MB
  • 560 dpi oder höher auf kleinen/normalen Bildschirmen
  • Mindestens 400 dpi auf großen Bildschirmen
  • xhdpi oder höher auf extragroßen Bildschirmen
1.344 MB 1.824 MB

Die Mindestspeicherwerte MÜSSEN zusätzlich zu dem Speicherplatz angegeben werden, der bereits für Hardwarekomponenten wie Radio, Video usw. vorgesehen ist und nicht vom Kernel gesteuert wird.

Geräteimplementierungen mit weniger als 512 MB Arbeitsspeicher für den Kernel und Userspace, MÜSSEN den Wert „true“ zurückgeben, es sei denn, es handelt sich um eine Android Watch. für ActivityManager.isLowRamDevice().

Android-Fernsehgeräte MÜSSEN über mindestens 4 GB verfügen und andere Geräteimplementierungen MÜSSEN über mindestens 3 GB nichtflüchtigen Speicher für private App-Daten verfügen. Das heißt, die /data-Partition muss bei Android TV-Geräten mindestens 4 GB und bei anderen Geräteimplementierungen mindestens 3 GB groß sein. Bei Geräteimplementierungen mit Android wird dringend empfohlen, mindestens 4 GB nichtflüchtigen Speicher für private App-Daten zu haben, damit ein Upgrade auf zukünftige Plattform-Releases möglich ist.

Die Android-APIs umfassen einen Download-Manager, mit dem Anwendungen Datendateien herunterladen können. Die Geräteimplementierung des Download-Managers MUSS in der Lage sein, einzelne Dateien mit einer Größe von mindestens 100 MB in den Standard-Cache herunterzuladen.

7.6.2 Freigegebener Anwendungsspeicher

Geräteimplementierungen MÜSSEN gemeinsam genutzten Speicher für Anwendungen anbieten, die häufig als "freigegebener externer Speicher" bezeichnet werden.

Geräteimplementierungen MÜSSEN so konfiguriert werden, dass standardmäßig freigegebener Speicher („out of the box“) bereitgestellt wird. Wenn der freigegebene Speicher nicht unter Linuxpath „/sdcard“ bereitgestellt wird, MUSS das Gerät einen symbolischen Linux-Link von „/sdcard“ zum tatsächlichen Bereitstellungspunkt einfügen.

Geräteimplementierungen KÖNNEN Hardware für vom Nutzer zugängliche Wechseldatenträger enthalten, z. B. einen SD-Kartensteckplatz (Secure Digital). Wenn dieser Slot verwendet wird, um die Anforderungen an den gemeinsamen Speicher zu erfüllen, gilt für die Geräteimplementierung Folgendes:

  • MÜSSEN eine Toast- oder Pop-up-Benutzeroberfläche implementieren, die den Nutzer warnt, wenn keine SD-Karte vorhanden ist.
  • MÜSSEN eine FAT-formatierte SD-Karte mit einer Größe von mindestens 1 GB verwendet werden ODER auf der Verpackung und anderes Material, das zum Zeitpunkt des Kaufs verfügbar war, zeigen, dass die SD-Karte separat erworben werden muss.
  • SD-Karte MÜSSEN standardmäßig eingesetzt werden.

Alternativ können Geräteimplementierungen internen (nicht entfernbaren) Speicher als freigegebenen Speicher für Apps zuweisen, die im vorgelagerten Android Open Source Project enthalten sind. Geräteimplementierungen SOLLTEN diese Konfiguration und Softwareimplementierung verwenden. Wenn bei einer Geräteimplementierung internen (nicht entfernbaren) Speicher verwendet wird, um die Anforderungen an den gemeinsamen Speicher zu erfüllen, kann dieser Speicherplatz aber gemeinsam mit den privaten Daten der Anwendung genutzt werden. In diesem Fall MUSS er mindestens 1 GB groß und auf „/sdcard“ bereitgestellt sein (oder „/sdcard“ muss ein symbolischer Link zum physischen Speicherort sein, falls es an anderer Stelle bereitgestellt wird).

Geräteimplementierungen MÜSSEN wie dokumentiert die Berechtigung android.permission.WRITE_EXTERNAL_STORAGE für diesen freigegebenen Speicher erzwingen. Freig. Speicher MUSS ansonsten von jeder Anwendung beschreibbar sein, die diese Berechtigung erhält.

Bei Geräteimplementierungen, die mehrere Pfade mit gemeinsamem Speicher enthalten (z. B. einen SD-Kartensteckplatz und einen gemeinsamen internen Speicher), MÜSSEN nur vorinstallierte und privilegierten Android-Anwendungen mit der Berechtigung WRITE_EXTERNAL_STORAGE, um in den sekundären externen Speicher zu schreiben, es sei denn, sie schreiben in ihre paketspezifischen Verzeichnisse oder innerhalb des URI, der durch Auslösen des Intents ACTION_OPEN_DOCUMENT_TREE zurückgegeben wird.

Geräteimplementierungen sollten jedoch Inhalte aus beiden Speicherpfaden transparent über den Medienscanner-Dienst von Android und über android.provider.MediaStore offenlegen.

Unabhängig von der verwendeten Form des freigegebenen Speichers MUSS die Geräteimplementierung einen USB-Port mit Unterstützung für den USB-Peripheriemodus bereitstellen, um von einem Hostcomputer aus auf den Inhalt des freigegebenen Speichers zugreifen zu können. Bei Geräteimplementierungen KANN ein USB-Massenspeicher verwendet werden, SOLLTE jedoch das Media Transfer Protocol verwenden, um diese Anforderung zu erfüllen. Wenn die Geräteimplementierung Media Transfer Protocol unterstützt, gilt Folgendes:

  • SOLLTEN mit dem Android-MTP-Referenzhost Android File Transfer kompatibel sein.
  • SOLLTE eine USB-Geräteklasse von 0x00 melden.
  • MÜSSEN den Namen „MTP“ für die USB-Schnittstelle melden.

7.6.3 Verwendbare Speicher

Bei der Implementierung von Geräten wird dringend die Implementierung einer adaptiven Aufbewahrung empfohlen, wenn sich der Anschluss für Wechseldatenträger langfristig an einem sicheren Ort befindet, z. B. im Batteriefach oder in einer anderen Schutzabdeckung.

Geräteimplementierungen wie z. B. ein Fernseher KÖNNEN die Akzeptanz über USB-Anschlüsse ermöglichen, da das Gerät statisch und nicht mobil ist. Bei anderen Geräteimplementierungen für Mobilgeräte wird jedoch dringend empfohlen, den geeigneten Speicher an einem langfristigen, stabilen Ort zu implementieren, da das versehentliche Trennen der Verbindung zu Datenverlusten oder -beschädigungen führen kann.

7.7 USB

Geräteimplementierungen sollten den USB-Peripheriemodus und den USB-Hostmodus unterstützen.

7.7.1 USB-Peripheriemodus

Wenn eine Geräteimplementierung einen USB-Port umfasst, der den Peripheriemodus unterstützt:

  • Der Port MUSS mit einem USB-Host mit einem Standard-USB-Port vom Typ A oder Typ C verbunden werden können.
  • Der Port sollte den Formfaktor micro-B, micro-AB oder den USB-Typ-C-Anschluss verwenden. Bestehende und neue Android-Geräte EMPFOHLEN, diese Anforderungen zu erfüllen, damit ein Upgrade auf die zukünftigen Plattform-Releases möglich ist.
  • Der Anschluss sollte sich entsprechend der natürlichen Ausrichtung auf der Unterseite des Geräts befinden oder die Softwarebildschirmdrehung für alle Apps aktivieren (einschließlich des Startbildschirms), sodass der Bildschirm korrekt dargestellt wird, wenn das Gerät am Anschluss unten ausgerichtet ist. Bestehende und neue Android-Geräte EMPFOHLEN, diese Anforderungen zu erfüllen, damit ein Upgrade auf zukünftige Plattform-Releases möglich ist
  • Sie muss einem mit dem Android-Gerät verbundenen USB-Host erlauben, über den USB-Massenspeicher oder das Media Transfer Protocol auf den Inhalt des freigegebenen Speicher-Volumes zuzugreifen.
  • Er SOLLTEN die Android Open Accessory (AOA) API und die Spezifikation implementieren, wie in der Android SDK-Dokumentation dokumentiert. Wenn es sich um ein Android-Handheld-Gerät handelt, MÜSSEN die AOA API implementiert werden. Geräteimplementierungen mit der AOA-Spezifikation: <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN die Unterstützung für die Hardwarefunktion android.hardware.usb.accessory deklarieren.
    • MÜSSEN die USB-Audioklasse wie in der Android SDK-Dokumentation beschrieben implementieren.
    • Die USB-Massenspeicherklasse MUSS den String „android“ enthalten. am Ende der Schnittstellenbeschreibung iInterface des USB-Massenspeichers
  • Er sollte unterstützen, den Strom von 1,5 A während des HS-Pieptons und Traffics zu nutzen, wie in der Spezifikation für das USB-Akkuladevorgang, Version 1.2 beschrieben. Bestehende und neue Android-Geräte EMPFOHLEN, diese Anforderungen zu erfüllen, damit ein Upgrade auf die zukünftigen Plattform-Releases möglich ist.
  • Typ-C-Geräte MÜSSEN Ladegeräte mit 1,5 A und 3,0 A gemäß Typ-C-Widerstandsstandard erkennen und Änderungen in der Werbung erkennen.
  • Für Typ-C-Geräte, die auch den USB-Hostmodus unterstützen, wird dringend empfohlen, Power Delivery für das Austauschen von Daten- und Energierollen zu unterstützen.
  • Typ-C-Geräte sollten Power Delivery für Hochspannungsladevorgänge und alternative Modi wie Display-out unterstützen.
  • Der Wert von iSerialNumber im USB-Standard-Gerätedeskriptor MUSS dem Wert von android.os.Build.SERIAL entsprechen.
  • Typ-C-Geräte werden UNBEDINGT empfohlen, keine proprietären Lademethoden zu unterstützen, die die Vbus-Spannung über die Standardniveaus hinaus ändern, oder die Rollen der Senke/Quelle so ändern, dass dies zu Interoperabilitätsproblemen mit den Ladegeräten oder Geräten führen kann, die die standardmäßigen USB Power Delivery-Methoden unterstützen. Dies wird zwar als „Dringend empfohlen“ bezeichnet, in zukünftigen Android-Versionen benötigen wir jedoch möglicherweise alle Typ-C-Geräte, um die vollständige Interoperabilität mit standardmäßigen Typ-C-Ladegeräten zu ermöglichen.

7.7.2 USB-Hostmodus

Wenn eine Geräteimplementierung einen USB-Port enthält, der den Hostmodus unterstützt, geschieht Folgendes:

  • SOLLTE einen USB-Typ-C-Port verwenden, wenn die Geräteimplementierung USB 3.1 unterstützt.
  • KANN einen nicht standardmäßigen Port-Formfaktor verwenden, aber in diesem Fall MUSS mit einem oder mehreren Kabeln geliefert werden, die den Port für einen Standard-USB-Port vom Typ A oder Typ-C anpassen.
  • KANN einen Micro-AB-USB-Port verwenden, aber wenn ja, SOLLTEN Sie ein oder mehrere Kabel mitschicken, die den Port für einen Standard-USB-Port vom Typ A oder Typ-C anpassen.
  • wird dringend empfohlen, die USB-Audioklasse zu implementieren, wie in der Android SDK-Dokumentation beschrieben.
  • MÜSSEN die Android USB-Host-API gemäß der Dokumentation im Android SDK implementieren und die Unterstützung für die Hardwarefunktion android.hardware.usb.host angeben.
  • SOLLTEN das Aufladen des Geräts im Hostmodus unterstützen. mit einer Stromquelle von mindestens 1, 5 A gemäß den Angaben im Abschnitt mit den Beendigungsparametern der [USB Type-C Cable and Connector Specification Revision 1.2] (http://www.usb.org/developers/docs/usb_31_021517.zip) für USB Typ-C-Anschlüsse oder mit dem Lade-Downstream-Port(CDP)-Ausgabestrombereich gemäß den Angaben in den USB-Akku-/Ladeanschlüssen 2.
  • Für USB Typ-C-Geräte wird dringend empfohlen, DisplayPort zu unterstützen, sie sollten USB SuperSpeed-Datenübertragungsraten unterstützen und UNBEDINGT EMPFOHLEN, um Power Delivery für den Austausch von Daten und Power-Rollen zu unterstützen.
  • Geräte mit einem Typ-A- oder Typ-AB-Port DÜRFEN NICHT mit einem Adapter geliefert werden, der von diesem Anschluss in einen Typ-C-Anschluss umgewandelt wird.
  • MÜSSEN alle remote verbundenen MTP-Geräte (Media Transfer Protocol) erkennen und ihre Inhalte über die Intents ACTION_GET_CONTENT , ACTION_OPEN_DOCUMENT und ACTION_CREATE_DOCUMENT zugänglich machen, wenn das Storage Access Framework (SAF) unterstützt wird.
  • Wenn Sie einen USB-Typ-C-Port verwenden und den Peripheriemodus unterstützen, müssen Sie die Funktion „Dual-Role-Port“ entsprechend der USB-Typ-C-Spezifikation implementieren (Abschnitt 4.5.1.3.3).
  • SOLLTEN Sie, wenn die Funktion für den Dual-Role-Port unterstützt wird, das für den Formfaktor des Geräts geeignete Try.*-Modell implementieren, wenn diese Funktion unterstützt wird. Auf einem Handheld sollte beispielsweise das Modell „Try.SNK“ implementiert werden.

7.8 Audio

7.8.1 Mikrofon

Implementierungen von Android-Handheld-, -Watch- und -Automotive-Apps MÜSSEN über ein Mikrofon verfügen.

In Geräteimplementierungen KÖNNEN KÖNNEN ein Mikrofon weggelassen werden. Wenn das Mikrofon in einer Geräteimplementierung jedoch weggelassen wird, DARF die Funktion „android.hardware.microphone“ NICHT konstant angezeigt werden und MÜSSEN die API für die Audioaufnahme gemäß Abschnitt 7 mindestens als managementfrei implementieren. Umgekehrt gilt für Geräteimplementierungen, die über ein Mikrofon verfügen,

  • MÜSSEN die Funktion „android.hardware.microphone“ konstant melden.
  • MÜSSEN die Anforderungen für Audioaufzeichnungen in Abschnitt 5.4 erfüllen.
  • MÜSSEN die Anforderungen an die Audiolatenz in Abschnitt 5.6 erfüllen.
  • WIRD DRINGEND empfohlen, die Nah-Ultraschallaufzeichnung wie in Abschnitt 7.8.3 beschrieben zu unterstützen.

7.8.2 Audioausgabe

Android Watch-Geräte KÖNNEN über einen Audioausgang verfügen.

Geräteimplementierungen, die einen Lautsprecher oder einen Audio-/Multimedia-Ausgabeport für ein Audioausgabe-Peripheriegerät als Headset oder einen externen Lautsprecher umfassen:

  • MÜSSEN die Funktionskonstante „android.hardware.audio.output“ gemeldet werden.
  • MÜSSEN die Anforderungen an die Audiowiedergabe in Abschnitt 5.5 erfüllen.
  • MÜSSEN die Anforderungen an die Audiolatenz in Abschnitt 5.6 erfüllen.
  • WIRD UNBEDINGT EMPFOHLEN, die Wiedergabe mit Nah-Ultraschall wie in Abschnitt 7.8.3 beschrieben zu unterstützen.

Umgekehrt gilt: Wenn eine Geräteimplementierung keinen Lautsprecher- oder Audioausgabeport umfasst, DARF die Ausgabefunktion „android.hardware.audio“ NICHT gemeldet werden und MÜSSEN die APIs zur Audioausgabe zumindest als managementfrei implementiert werden.

Die Android Watch-Geräteimplementierung MÖGLICHERWEISE, SOLLTEN aber keine Audioausgabe haben. Andere Arten von Android-Geräteimplementierungen MÜSSEN jedoch über eine Audioausgabe verfügen und die Deklaration android.hardware.audio.output angeben.

7.8.2.1 Analoge Audioanschlüsse

Damit die Kompatibilität mit den Headsets und anderem Audiozubehör über den 3,5-mm-Audiostecker im gesamten Android-System gewährleistet ist, sollte bei einer Geräteimplementierung ein oder mehrere analoge Audioports verwendet werden, wenn mindestens einer der Audioports eine 3,5-mm-Audiobuchse mit vier Kabeln sein sollte. Wenn eine Geräteimplementierung einen 3,5-mm-Audioanschluss mit 4 Kabeln hat, ist Folgendes zu beachten:

  • MÜSSEN die Audiowiedergabe über Stereo- und Stereo-Headsets mit Mikrofon sowie die Audioaufnahme von Stereo-Headsets mit Mikrofon unterstützen.
  • MÜSSEN TRRS-Audiostecker mit der CTIA-Pin-out-Reihenfolge und Audiostecker mit OMTP-Pin-out-Reihenfolge unterstützen.
  • MÜSSEN die Erkennung des Mikrofons auf dem angeschlossenen Audiozubehör unterstützen, wenn die Geräteimplementierung ein Mikrofon unterstützt. Außerdem muss das Mikrofon android.intent.action.HEADSET_PLUG übertragen werden, wobei der zusätzliche Wert für das Mikrofon auf 1 gesetzt ist.
  • MUSS die Erkennung und Zuordnung zu den Keycodes für die folgenden drei Bereiche der entsprechenden Impedanz zwischen dem Mikrofon und den Erdleitern am Audiostecker unterstützen: <ph type="x-smartling-placeholder">
      </ph>
    • Max. 70 Ohm : KEYCODE_HEADSETHOOK
    • 210–290 Ohm : KEYCODE_VOLUME_UP
    • 360–680 Ohm : KEYCODE_VOLUME_DOWN
  • EMPFOHLEN, den Schlüsselcode für den folgenden Bereich der äquivalenten Impedanz zwischen dem Mikrofon und den Erdleitern am Audiostecker zu erkennen und zuzuordnen: <ph type="x-smartling-placeholder">
      </ph>
    • 110–180 Ohm:KEYCODE_VOICE_ASSIST
  • MÜSSEN ACTION_HEADSET_PLUG bei einem Steckerkontakt ausgelöst werden, aber nur dann, wenn alle Kontakte am Stecker die entsprechenden Segmente an der Buchse berühren.
  • MUSS mindestens 150 mV ± 10% der Ausgangsspannung über eine 32-Ohm-Lautsprecherimpedanz liefern können.
  • MÜSSEN über eine Mikrofonspannung zwischen 1,8 und 2,9 V verfügen.

7.8.3 Nah-Ultraschall

Nah-Ultraschall-Audio ist das Frequenzband von 18,5 kHz bis 20 kHz. Geräteimplementierungen MÜSSEN die Unterstützung von Nah-Ultraschall-Audiofunktionen wie folgt über die AudioManager.getProperty API melden:

  • Wenn PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND auf „true“ festgelegt ist, müssen die Audioquellen VOICE_RECOGNITION und UNPROCESSED die folgenden Anforderungen erfüllen: <ph type="x-smartling-placeholder">
      </ph>
    • Der durchschnittliche Stromausgang des Mikrofons im Frequenzband von 18,5 kHz bis 20 kHz DARF nicht mehr als 15 dB unter dem Antwortbereich bei 2 kHz liegen.
    • Das ungewichtete Signal-Rausch-Verhältnis des Mikrofons über 18,5 kHz bis 20 kHz für einen Ton von 19 kHz bei -26 dBFS DARF nicht unter 50 dB liegen.
  • Wenn PROPERTY_SUPPORT_MANAGER_NEAR_ULTRASOUND "true" ist, MUSS die mittlere Antwort des Lautsprechers in 18,5 kHz bis 20 kHz nicht weniger als 40 dB unter der Antwort bei 2 kHz liegen.

7.9. Virtual Reality

Android umfasst APIs und Einrichtungen zur Entwicklung von Virtual Reality (VR-Anwendungen) einschließlich hochwertiger VR-Erlebnisse für Mobilgeräte. Bei Geräteimplementierungen MÜSSEN diese APIs und Verhaltensweisen korrekt implementiert werden, wie in diesem Abschnitt beschrieben.

7.9.1 Virtual-Reality-Modus

Implementierungen von Android-Handheld-Geräten, die einen Modus für VR-Anwendungen unterstützen, der die stereoskopische Wiedergabe von Benachrichtigungen handhabt und monokulare Benutzeroberflächenkomponenten deaktiviert, während eine VR-App auf den Nutzerfokus ausgerichtet ist, MÜSSEN die Funktion android.software.vr.mode deklarieren. Geräte, die diese Funktion deklarieren, MÜSSEN eine App enthalten, die android.service.vr.VrListenerService implementiert, die von VR-Anwendungen über android.app.Activity#setVrModeEnabled aktiviert werden kann .

7.9.2 Virtual Reality: hohe Leistung

Implementierungen von Android-Handheld-Geräten MÜSSEN die Unterstützung von hochleistungsfähiger virtueller Realität für längere Nutzerzeiträume mit dem Funktions-Flag „android.hardware.vr.high_performance“ kennzeichnen und die folgenden Anforderungen erfüllen.

  • Geräteimplementierungen MÜSSEN mindestens zwei physische Kerne haben.
  • Geräteimplementierungen MÜSSEN die Funktion "android.software.vr.mode" deklarieren.
  • Geräteimplementierungen KÖNNEN einen exklusiven Kern für die Vordergrundanwendung bereitstellen und die Process.getExclusiveCores API unterstützen, um die Anzahl der CPU-Kerne zurückzugeben, die ausschließlich für die oberste Anwendung im Vordergrund gelten. Wenn der exklusive Kern unterstützt wird, MUSS der Kern keine anderen Userspace-Prozesse darauf zulassen (mit Ausnahme der von der Anwendung verwendeten Gerätetreiber). Möglicherweise können aber einige Kernel-Prozesse nach Bedarf ausgeführt werden.
  • Geräteimplementierungen MÜSSEN den Modus für kontinuierliche Leistung unterstützen.
  • Geräteimplementierungen MÜSSEN OpenGL ES 3.2 unterstützen.
  • Geräteimplementierungen müssen Vulkan-Hardwarestufe 0 und SOLLTEN Vulkan-Hardwarestufe 1 unterstützen.
  • Bei Geräteimplementierungen MÜSSEN EGL_KHR_mutable_render_buffer und EGL_ANDROID_front_buffer_auto_refresh, EGL_ANDROID_create_native_client_buffer, EGL_KHR_fence_sync und EGL_KHR_wait_sync implementiert werden, damit sie für den gemeinsamen Zwischenspeichermodus verwendet werden können. Die Erweiterungen müssen in der Liste der verfügbaren EGL-Erweiterungen angezeigt werden.
  • GPU und Display MÜSSEN in der Lage sein, den Zugriff auf den gemeinsamen Front-Zwischenspeicher zu synchronisieren, sodass VR-Inhalte mit 60 fps und zwei Renderingkontexten mit abwechselnden Augen und ohne sichtbare Tearing-Artefakte dargestellt werden.
  • Bei Geräteimplementierungen MÜSSEN EGL_IMG_context_Priority implementiert und die Erweiterung in der Liste der verfügbaren EGL-Erweiterungen angezeigt werden.
  • Geräteimplementierungen MÜSSEN GL_EXT_multisampled_render_to_texture, GL_OVR_multiview, GL_OVR_multiview2 und GL_OVR_multiview_multisampled_render_to_texture implementieren und die Erweiterungen in der Liste der verfügbaren GL-Erweiterungen anzeigen.
  • Bei Geräteimplementierungen MÜSSEN EGL_EXT_protect_content und GL_EXT_protected_textures implementiert werden, damit sie für die sichere Texturvideowiedergabe verwendet werden können. Die Erweiterungen müssen in der Liste der verfügbaren EGL- und GL-Erweiterungen aufgeführt werden.
  • Geräteimplementierungen MÜSSEN eine H.264-Decodierung mit einer Auflösung von mindestens 3840 x 2160 bei 30 fps bis 40 Mbit/s unterstützen. Dies entspricht 4 Instanzen von 1920 x 1080 bei 30 fps bis 10 Mbit/s oder zwei Instanzen von 1920 x 1080 bei 60 fps-20 Mbit/s.
  • Geräteimplementierungen MÜSSEN HEVC und VP9 unterstützen, MUSS mindestens 1920 x 1080 bei 30 fps bis 10 Mbit/s decodieren können und SOLLTEN in der Lage sein, 3840 x 2160 bei 30 fps bis 20 Mbit/s zu decodieren (entspricht vier Instanzen von 1920 x 1080@3 Mbit/s).
  • Die Implementierung der Geräte wird dringend empfohlen, die Funktion „android.hardware.sensor.hifi_sensors“ zu unterstützen, und MÜSSEN die Anforderungen für Gyroskop, Beschleunigungsmesser und Magnetometer für „android.hardware.hifi_sensors“ erfüllen.
  • Geräteimplementierungen MÜSSEN die HardwarePropertiesManager.getDeviceTemperatures API unterstützen und genaue Werte für die Hauttemperatur zurückgeben.
  • Die Geräteimplementierung MUSS einen eingebetteten Bildschirm haben und die Auflösung MUSS mindestens FullHD(1080p) sein. WIRD UNBEDINGT ZU QuadHD (1440p) oder höher empfohlen.
  • Die Displaygröße MUSS zwischen 4,7" liegen. und 6" diagonal sein.
  • Im VR-Modus MUSS das Display mindestens 60 Hz aktualisiert werden.
  • Die Anzeigelatenz beim Grau-Grau-, Weiß-Schwarz- und Schwarz-Weiß-Wechsel MUSS ≤ 3 ms sein.
  • Die Anzeige MUSS einen Modus mit niedriger Persistenz mit einer Persistenz von ≤ 5 ms unterstützen. Persistenz ist definiert als die Zeit,über die ein Pixel Licht ausstrahlt.
  • Geräteimplementierungen MÜSSEN Bluetooth 4.2 und Bluetooth LE-Datenlängenerweiterung unterstützen Abschnitt 7.4.3.

8. Leistung und Leistung

Einige Mindestleistungs- und Leistungskriterien sind entscheidend für die Nutzererfahrung und wirken sich auf die grundlegenden Annahmen aus, die Entwickler bei der Entwicklung einer App haben. Android Watch-Geräte SOLLTEN und andere Geräteimplementierungen die folgenden Kriterien erfüllen.

8.1. Konsistente Nutzererfahrung

Geräteimplementierungen MÜSSEN eine reibungslose Benutzeroberfläche bereitstellen, indem eine konsistente Framerate und Antwortzeiten für Apps und Spiele sichergestellt werden. Geräteimplementierungen MÜSSEN die folgenden Anforderungen erfüllen:

  • Konsistente Frame-Latenz Inkonsistente Frame-Latenz oder Verzögerung beim Rendern von Frames DÜRFEN NICHT häufiger als 5 Frames pro Sekunde auftreten und SOLLTEN unter einem Frame in einer Sekunde liegen.
  • Latenz der Benutzeroberfläche Geräteimplementierungen MÜSSEN für eine geringe Latenz sorgen, indem in einer Liste mit 10.000 Listeneinträgen, wie von der Android Compatibility Test Suite (CTS) definiert, in weniger als 36 Sekunden gescrollt wird.
  • Aufgabenwechsel . Wenn mehrere Anwendungen gestartet wurden, MUSS der Neustart einer bereits laufenden Anwendung nach dem Start weniger als eine Sekunde dauern.

8.2. Leistung des Datei-E/A-Zugriffs

Geräteimplementierungen MÜSSEN bei Lese- und Schreibvorgängen für eine konsistente Leistung des internen Speicherdateizugriffs sorgen.

  • Sequenzieller Schreibvorgang: Geräteimplementierungen MÜSSEN eine sequenzielle Schreibleistung von mindestens 5 MB/s für eine 256 MB große Datei mit einem 10 MB-Schreibpuffer gewährleisten.
  • Random Write Geräteimplementierungen MÜSSEN eine zufällige Schreibleistung von mindestens 0,5 MB/s für eine 256 MB große Datei mit einem 4-KB-Schreibpuffer gewährleisten.
  • Sequenzielle Lesevorgänge Geräteimplementierungen MÜSSEN eine sequenzielle Leseleistung von mindestens 15 MB/s für eine 256 MB große Datei mit einem 10 MB-Schreibpuffer gewährleisten.
  • Zufälliger Lesevorgang Geräteimplementierungen MÜSSEN eine zufällige Leseleistung von mindestens 3,5 MB/s für eine 256 MB große Datei mit einem 4-KB-Schreibpuffer gewährleisten.

8.3. Energiesparmodi

Mit Android 6.0 wurden die Energiesparmodi „App-Stand-by“ und „Stromsparmodus“ eingeführt, um die Akkunutzung zu optimieren. Alle Apps, die von diesen Modi ausgenommen sind, MÜSSEN für den Endnutzer sichtbar gemacht werden. Darüber hinaus DÜRFEN die Algorithmen für das Auslösen, die Wartung, Wakeup und die Verwendung globaler Systemeinstellungen dieser Energiesparmodi nicht vom Android Open Source Project abweichen.

Zusätzlich zu den Energiesparmodi KÖNNEN Implementierungen von Android-Geräten einen oder alle der vier Stromzustände für den Ruhemodus implementieren, wie in der Advanced Configuration and Power Interface (ACPI) definiert. Wenn jedoch ein S3- und S4-Energiestatus implementiert ist, können diese Status nur beim Schließen eines Deckels erreicht werden, der Teil des Geräts ist.

8.4. Berechnung des Stromverbrauchs

Eine genauere Berechnung und Berichterstellung des Stromverbrauchs bietet dem App-Entwickler sowohl Anreize als auch Tools zur Optimierung des Stromverbrauchsmusters der Anwendung. Daher gilt für Geräteimplementierungen Folgendes:

  • MÜSSEN in der Lage sein, den Stromverbrauch von Hardwarekomponenten nachzuverfolgen und diesen bestimmten Anwendungen zuzuordnen. Implementierungen: <ph type="x-smartling-placeholder">
      </ph>
    • MÜSSEN Sie pro Komponente ein Leistungsprofil angeben, das den Wert des aktuellen Verbrauchs für jede Hardwarekomponente und die ungefähre Entladung der Akkukapazität durch die Komponenten im Laufe der Zeit definiert, wie auf der Website des Android Open Source Project dokumentiert.
    • MÜSSEN alle Werte für den Energieverbrauch in Milliamperestunden (mAh) angeben.
    • SOLLTEN der Hardwarekomponente selbst zugeordnet werden, wenn sie den Stromverbrauch der Hardwarekomponente nicht einer Anwendung zuordnen können.
    • MÜSSEN Sie die CPU-Energieverbrauchsaufnahme gemäß der UID jedes Prozesses melden. Das Android Open Source-Projekt erfüllt die Anforderung über die Implementierung des Kernelmoduls uid_cputime.
  • MÜSSEN sie dem App-Entwickler über den Shell-Befehl adb shell dumpsys batterystats zur Verfügung stellen.
  • MÜSSEN den Intent android.intent.action.POWER_USAGE_SUMMARY berücksichtigen und ein Einstellungsmenü mit Angaben zu diesem Stromverbrauch anzeigen.

8.5. Konstante Leistung

Bei leistungsstarken Apps mit langer Laufzeit kann die Leistung stark schwanken – entweder aufgrund der anderen Apps, die im Hintergrund ausgeführt werden, oder aufgrund der CPU-Drosselung aufgrund von Temperaturlimits. Android umfasst programmatische Schnittstellen, mit denen die Anwendung im Vordergrund, wenn das Gerät kompatibel ist, anfordern kann, dass das System die Zuweisung von Ressourcen optimiert, um solche Schwankungen zu beheben.

Geräteimplementierungen SOLLTEN den Modus für kontinuierliche Leistung unterstützen. Dieser Modus kann der Anwendung im Vordergrund über einen längeren Zeitraum eine konstante Leistung bieten, wenn sie über die API-Methode Window.setSustainedPerformanceMode() angefordert wird. Bei einer Geräteimplementierung MÜSSEN die Unterstützung des Modus für kontinuierliche Leistung mithilfe der API-Methode PowerManager.isSustainedPerformanceModeSupported() korrekt gemeldet werden.

Geräteimplementierungen mit zwei oder mehr CPU-Kernen SOLLTEN mindestens einen exklusiven Kern bereitstellen, der von der Anwendung im Vordergrund reserviert werden kann. Implementierungen MÜSSEN die folgenden Anforderungen erfüllen, sofern angegeben:

  • Implementierungen MÜSSEN über die API-Methode Process.getExclusiveCores() die ID-Nummern der exklusiven Kerne melden, die von der Anwendung im Vordergrund reserviert werden können.
  • Geräteimplementierungen DÜRFEN keine Userspace-Prozesse zulassen, mit Ausnahme der von der Anwendung verwendeten Gerätetreiber, um auf den exklusiven Kernen ausgeführt zu werden, aber MÖGLICHERWEISE die Ausführung einiger Kernelprozesse bei Bedarf zulassen.

Wenn eine Geräteimplementierung einen exklusiven Kern nicht unterstützt, MUSS sie über die API-Methode Process.getExclusiveCores() eine leere Liste zurückgeben.

9. Kompatibilität des Sicherheitsmodells

Geräteimplementierungen MÜSSEN ein Sicherheitsmodell implementieren, das dem Sicherheitsmodell der Android-Plattform entspricht, wie in den APIs in der Android-Entwicklerdokumentation im Referenzdokument zu Sicherheit und Berechtigungen definiert. Geräteimplementierungen MÜSSEN die Installation selbst signierter Anwendungen unterstützen, ohne dass zusätzliche Berechtigungen/Zertifikate von Dritten oder Behörden erforderlich sind. Insbesondere MÜSSEN kompatible Geräte die in den folgenden Unterabschnitten beschriebenen Sicherheitsmechanismen unterstützen.

9.1 Berechtigungen

Geräteimplementierungen MÜSSEN das Android-Berechtigungsmodell unterstützen, das in der Android-Entwicklerdokumentation definiert ist. Insbesondere MÜSSEN Implementierungen jede in der SDK-Dokumentation beschriebene Berechtigung erzwingen. Keine Berechtigungen dürfen weggelassen, geändert oder ignoriert werden. Implementierungen KÖNNEN zusätzliche Berechtigungen hinzufügen, vorausgesetzt, die neuen Berechtigungs-ID-Strings befinden sich nicht im android.*-Namespace.

Berechtigungen mit dem protectionLevel 'PROTECTION_FLAG_PRIVILEGED' DÜRFEN nur Apps gewährt werden, die vorab in den privilegierten Pfaden auf der Zulassungsliste des System-Images geladen wurden, z. B. dem Pfad system/priv-app in der AOSP-Implementierung.

Berechtigungen mit dem Schutzniveau „gefährlich“ sind Laufzeitberechtigungen. Anwendungen mit targetSdkVersion > 22 fordern sie zur Laufzeit an. Geräteimplementierungen:

  • MÜSSEN eine dedizierte Schnittstelle für den Nutzer angezeigt werden, über die er entscheiden kann, ob die angeforderten Laufzeitberechtigungen gewährt werden sollen, und dem Nutzer außerdem eine Schnittstelle zur Verwaltung der Laufzeitberechtigungen zur Verfügung stellen.
  • MUSS nur eine Implementierung beider Benutzeroberflächen haben.
  • Sie DARF KEINEN Laufzeitberechtigungen für vorinstallierte Apps gewähren, es sei denn: <ph type="x-smartling-placeholder">
      </ph>
    • Die Einwilligung des Nutzers kann eingeholt werden, bevor die Anwendung sie verwendet.
    • Die Laufzeitberechtigungen sind mit einem Intent-Muster verknüpft, für das die vorinstallierte Anwendung als Standard-Handler festgelegt ist

9.2. UID und Prozessisolierung

Geräteimplementierungen MÜSSEN das Sandbox-Modell der Android-Anwendung unterstützen, bei dem jede Anwendung als eindeutige Unixstyle-UID und in einem separaten Prozess ausgeführt wird. Geräteimplementierungen MÜSSEN die Ausführung mehrerer Anwendungen unter derselben Linux-Nutzer-ID unterstützen, vorausgesetzt, die Anwendungen sind ordnungsgemäß signiert und konstruiert (siehe Referenz zu Sicherheit und Berechtigungen).

9.3 Dateisystemberechtigungen

Geräteimplementierungen MÜSSEN das Android-Modell für Dateizugriffsberechtigungen unterstützen, wie in der Referenz zu Sicherheit und Berechtigungen definiert.

9.4 Alternative Ausführungsumgebungen

Geräteimplementierungen KÖNNEN Laufzeitumgebungen enthalten, in denen Anwendungen ausgeführt werden, die andere Software oder Technologien als das Dalvik Executable Format oder nativen Code verwenden. Solche alternativen Ausführungsumgebungen DÜRFEN jedoch das Android-Sicherheitsmodell oder die Sicherheit installierter Android-Apps NICHT gefährden, wie in diesem Abschnitt beschrieben.

Alternative Laufzeiten MÜSSEN selbst Android-Apps sein und dem standardmäßigen Android-Sicherheitsmodell entsprechen, wie an anderer Stelle in Abschnitt 9 beschrieben.

Alternative Laufzeiten DÜRFEN KEINEN Zugriff auf Ressourcen erhalten, die durch Berechtigungen geschützt sind, die nicht in der AndroidManifest.xml-Datei der Laufzeit über die Berechtigung <uses-permission> angefordert werden. Mechanismus zur Verfügung.

Alternative Laufzeiten DÜRFEN NICHT zulassen, dass Anwendungen Funktionen nutzen, die durch Android-Berechtigungen eingeschränkt sind, die auf Systemanwendungen beschränkt sind.

Alternative Laufzeiten MÜSSEN dem Android-Sandbox-Modell entsprechen. Alternative Laufzeiten:

  • Apps sollten über den PackageManager in separaten Android-Sandboxes (Linux-Nutzer-IDs usw.) installiert werden.
  • KANN eine einzelne Android-Sandbox bereitstellen, die von allen Anwendungen gemeinsam genutzt wird, die die alternative Laufzeit verwenden.
  • Installierte Apps, die eine alternative Laufzeit verwenden, DÜRFEN NICHT die Sandbox einer anderen auf dem Gerät installierten App wiederverwenden, außer über die Android-Standardmechanismen einer gemeinsamen Nutzer-ID und eines Signaturzertifikats.
  • DÜRFEN NICHT mit den Sandboxes für andere Android-Apps gestartet bzw. Zugriff darauf gewährt werden.
  • DÜRFEN KEINE Berechtigungen des Superuser (Root) oder einer anderen Nutzer-ID mit anderen Anwendungen gestartet bzw. anderen Anwendungen gewährt werden oder diesen gewähren.

Die APK-Dateien alternativer Laufzeiten KÖNNEN im System-Image einer Geräteimplementierung enthalten sein, MÜSSEN jedoch mit einem Schlüssel signiert werden, der sich von dem Schlüssel unterscheidet, der zum Signieren anderer Anwendungen in der Geräteimplementierung verwendet wird.

Bei der Installation von Anwendungen MÜSSEN alternative Laufzeiten die Nutzereinwilligung für die von der Anwendung verwendeten Android-Berechtigungen einholen. Wenn eine App eine Geräteressource verwenden muss, für die eine entsprechende Android-Berechtigung vorhanden ist (z. B. Kamera, GPS usw.), MUSS die alternative Laufzeit den Nutzer darüber informieren, dass die App auf diese Ressource zugreifen kann. Wenn die Laufzeitumgebung die Anwendungsfunktionen nicht auf diese Weise aufzeichnet, MUSS die Laufzeitumgebung alle Berechtigungen der Laufzeit selbst auflisten, wenn eine Anwendung installiert wird, die diese Laufzeit verwendet.

9.5 Unterstützung mehrerer Nutzer

Diese Funktion ist für alle Gerätetypen optional.

Android umfasst Unterstützung für mehrere Nutzer und eine vollständige Nutzerisolation. Bei Geräteimplementierungen MÖGLICHERWEISE mehrere Nutzer zulassen, MUSS jedoch die folgenden Anforderungen in Bezug auf die Unterstützung mehrerer Nutzer erfüllen:

  • Android Automotive-Geräteimplementierungen mit aktivierter Unterstützung für mehrere Nutzer MÜSSEN ein Gastkonto enthalten, mit dem alle vom Fahrzeugsystem bereitgestellten Funktionen genutzt werden, ohne dass sich der Nutzer anmelden muss.
  • Geräteimplementierungen, in denen das Funktions-Flag „android.hardware.telephony“ nicht deklariert wird, MÜSSEN eingeschränkte Profile unterstützen. Mit dieser Funktion können Geräteeigentümer zusätzliche Nutzer und deren Funktionen auf dem Gerät verwalten. Mit eingeschränkten Profilen können Geräteeigentümer schnell separate Umgebungen einrichten, in denen zusätzliche Nutzer arbeiten können. Außerdem haben sie die Möglichkeit, detailliertere Einschränkungen in den Apps zu verwalten, die in diesen Umgebungen verfügbar sind.
  • Umgekehrt MÜSSEN Geräteimplementierungen, in denen das Funktions-Flag „android.hardware.telephony“ deklariert ist, keine eingeschränkten Profile unterstützen, MÜSSEN jedoch mit der AOSP-Implementierung der Steuerelemente übereinstimmen, die den Zugriff anderer Nutzer auf Sprachanrufe und SMS verhindern.
  • Geräteimplementierungen 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.
  • Für jede Nutzerinstanz auf einem Android-Gerät muss es separate und isolierte externe Speicherverzeichnisse geben. In Geräteimplementierungen KÖNNEN die Daten mehrerer Nutzer Daten auf demselben Volume oder Dateisystem. Die Geräteimplementierung MÜSSEN jedoch sicherstellen, dass Anwendungen, die einem bestimmten Nutzer gehören und in seinem Namen ausgeführt werden, keine Daten auflisten, lesen oder bearbeiten können, die einem anderen Nutzer gehören. Beachten Sie, dass Wechselmedien wie z. B. SD-Karten-Steckplätze es einem Nutzer ermöglichen können, über einen Host-PC auf die Daten eines anderen Nutzers zuzugreifen. Aus diesem Grund MÜSSEN Geräteimplementierungen, die Wechseldatenträger für die APIs für externe Speicher verwenden, den Inhalt der SD-Karte verschlüsseln, wenn für mehrere Nutzer ein Schlüssel verwendet wird, der nur auf nicht austauschbaren Datenträgern gespeichert ist und nur für das System zugänglich ist. Da die Medien dann von einem Host-PC nicht mehr gelesen werden können, müssen die Geräteimplementierungen auf MTP oder ein ähnliches System umgestellt werden, um Host-PCs Zugriff auf die Daten des aktuellen Nutzers zu ermöglichen. Dementsprechend sollten Geräteimplementierungen die Nutzung für mehrere Nutzer KÖNNEN, aber NICHT für mehrere Nutzer aktivieren, wenn sie als primären externen Speicher Wechselmedien verwenden.

9.6 Warnung bei Premium-SMS

Android kann Nutzer auch vor ausgehenden Premium-SMS warnen. Premium-SMS sind SMS, die an einen bei einem Mobilfunkanbieter registrierten Dienst gesendet werden und für den Nutzer Gebühren anfallen können. Geräteimplementierungen, die die Unterstützung von android.hardware.telephony angeben, MÜSSEN Nutzer warnen, bevor sie eine SMS an Nummern senden, die über reguläre Ausdrücke identifiziert werden, die auf dem Gerät in der Datei /data/misc/sms/codes.xml definiert sind. Das vorgelagerte Open-Source-Projekt von Android bietet eine Implementierung, die diese Anforderung erfüllt.

9.7 Kernel-Sicherheitsfunktionen

Die Android-Sandbox umfasst Funktionen, die das MAC-System (Security-Enhanced Linux) und andere Sicherheitsfunktionen im Linux-Kernel verwenden sowie die Seccomp-Sandboxing. SELinux oder andere Sicherheitsfunktionen, die unter dem Android-Framework implementiert sind:

  • MÜSSEN die Kompatibilität mit vorhandenen Anwendungen aufrechterhalten.
  • DÜRFEN KEINE sichtbare Benutzeroberfläche haben, wenn ein Sicherheitsverstoß erkannt und erfolgreich blockiert wurde. KANN aber eine sichtbare Benutzeroberfläche haben, wenn ein aufgehobener Sicherheitsverstoß zu einem erfolgreichen Exploit führt.
  • SOLLTE NICHT von Nutzern oder Entwicklern konfiguriert werden.

Wenn eine API zum Konfigurieren von Richtlinien mit einer Anwendung verbunden ist, die sich auf eine andere Anwendung auswirken kann (z. B. eine Device Administration API), DARF die API KEINE Konfigurationen zulassen, die die Kompatibilität beeinträchtigen.

Auf den Geräten MÜSSEN SELinux oder, falls ein anderer Kernel als Linux verwendet wird, ein entsprechendes obligatorisches Zugriffssteuerungssystem implementiert werden. Geräte MÜSSEN außerdem die folgenden Anforderungen erfüllen, die durch die Referenzimplementierung im vorgelagerten Android-Open-Source-Projekt erfüllt werden.

Geräteimplementierungen:

  • MÜSSEN SELinux in den globalen Erzwingungsmodus gesetzt werden.
  • MÜSSEN alle Domains im erzwungenen Modus konfiguriert werden. Domains im moderaten Modus sind nicht zulässig, auch nicht geräte- oder anbieterspezifische Domains.
  • Die „Neverallow“-Regeln im Ordner „system/sepolicy“ des vorgelagerten Open-Source-Projekts von Android (AOSP) dürfen NICHT geändert, weggelassen oder ersetzt werden. Die Richtlinie MÜSSEN mit allen vorhandenen „Neverallow-Regeln“ kompiliert werden, sowohl für AOSP SELinux-Domains als auch für geräte-/anbieterspezifische Domains.
  • MÜSSEN das Medien-Framework in mehrere Prozesse aufteilen, damit es möglich ist, den Zugriff für jeden Prozess präziser zu gewähren, wie auf der Website des Android Open Source Project beschrieben.

Bei Geräteimplementierungen sollte die SELinux-Standardrichtlinie beibehalten werden, die im Ordner "system/sepolicy" des vorgelagerten Open-Source-Projekts von Android bereitgestellt wird, und diese Richtlinie nur für ihre eigene gerätespezifische Konfiguration ergänzen. Geräteimplementierungen MÜSSEN mit dem vorgelagerten Android-Open-Source-Projekt kompatibel sein.

Geräte MÜSSEN einen Sandbox-Mechanismus für Kernel-Anwendungen implementieren, der das Filtern von Systemaufrufen mithilfe einer konfigurierbaren Richtlinie aus Multithread-Programmen ermöglicht. Das vorgelagerte Android-Open-Source-Projekt erfüllt diese Anforderung durch die Aktivierung von seccomp-BPF mit Threadgroup-Synchronisierung (TSYNC), wie im Abschnitt zur Kernel-Konfiguration von source.android.com beschrieben.

9.8 Datenschutz

Wenn das Gerät eine Funktion im System implementiert, die die auf dem Bildschirm angezeigten Inhalte erfasst und/oder den auf dem Gerät wiedergegebenen Audiostream aufzeichnet, MUSS der Nutzer fortlaufend benachrichtigt werden, wenn diese Funktion aktiviert ist und die Aufzeichnung/Aufzeichnung aktiv ist.

Wenn eine Geräteimplementierung über einen Mechanismus verfügt, der den Netzwerktraffic standardmäßig über einen Proxyserver oder ein VPN-Gateway weiterleitet (z. B. durch Vorabladen eines VPN-Dienstes mit gewährtem android.permission.CONTROL_VPN), MUSS die Geräteimplementierung den Nutzer vor der Aktivierung um Zustimmung des Nutzers bitten, es sei denn, das VPN wurde vom Device Policy Controller über die DevicePolicyManager.setAlwaysOnVpnPackage() aktiviert. In diesem Fall muss der Nutzer keine gesonderte Einwilligung erteilen, sondern MÜSSEN nur benachrichtigt werden.

Geräteimplementierungen MÜSSEN mit einem leeren, vom Nutzer hinzugefügten Zertifizierungsstellenspeicher versendet werden, und MÜSSEN dieselben Root-Zertifikate für den vom System vertrauenswürdigen CA-Speicher vorinstallieren, die im vorgelagerten Android-Open-Source-Projekt bereitgestellt werden.

Wenn Geräte über ein VPN geleitet werden oder eine Root-Zertifizierungsstelle eines Nutzers installiert ist, MUSS die Implementierung eine Warnung anzeigen, die darauf hinweist, dass der Netzwerkverkehr für den Nutzer überwacht werden kann.

Wenn eine Geräteimplementierung über einen USB-Port mit Unterstützung für den USB-Peripheriemodus verfügt, MUSS eine Benutzeroberfläche angezeigt werden, in der der Nutzer um Zustimmung bittet, bevor er über den USB-Port auf den Inhalt des freigegebenen Speichers zugreifen darf.

9.9. Verschlüsselung der Datenspeicherung

Optional für Implementierungen von Android-Geräten ohne sicheren Sperrbildschirm.

Wenn die Geräteimplementierung einen sicheren Sperrbildschirm wie in Abschnitt 9.11.1 beschrieben unterstützt, MUSS das Gerät die Datenspeicherverschlüsselung der privaten Daten der App (/Datenpartition) sowie der freigegebenen Speicherpartition der App (/sdcard-Partition) unterstützen, sofern diese ein dauerhafter, nicht entfernbarer Teil des Geräts ist.

Bei Geräteimplementierungen, die die Datenspeicherverschlüsselung unterstützen und eine AES-Verschlüsselungsleistung (Advanced Encryption Standard) über 50 MiB/s bietet, MUSS die Datenspeicherverschlüsselung zu dem Zeitpunkt, zu dem der Nutzer die Einrichtung abgeschlossen hat, standardmäßig aktiviert werden. Wenn eine Geräteimplementierung bereits unter einer früheren Android-Version mit standardmäßig deaktivierter Verschlüsselung eingeführt wird, kann ein solches Gerät die Anforderung nicht über ein Systemsoftwareupdate erfüllen und kann daher ausgenommen werden.

Geräteimplementierungen SOLLTEN die oben genannten Anforderungen an die Verschlüsselung des Datenspeichers durch Implementierung der dateibasierten Verschlüsselung (File-Based Encryption, FBE) erfüllen.

9.9.1 Direct Boot

Alle Geräte MÜSSEN die APIs für den Direct Boot Mode implementieren, auch wenn sie die Speicherverschlüsselung nicht unterstützen. Insbesondere müssen die Intents LOCKED_BOOT_COMPLETED und ACTION_USER_UNLOCKED weiterhin übertragen werden, um für Direct Boot-fähige Anwendungen zu signalisieren, dass die Speicherstandorte für Geräteverschlüsselung (DE) und Credential Encrypted (CE) für den Nutzer verfügbar sind.

9.9.2 Dateibasierte Verschlüsselung

Geräteimplementierungen, die FBE unterstützen:

  • MÜSSEN gestartet werden, ohne dass der Nutzer nach Anmeldedaten gefragt wird, und Direct Boot-bewusste Apps den Zugriff auf den DE-Speicher (Device Encrypted (DE)) erlauben, nachdem die Nachricht LOCKED_BOOT_COMPLETED gesendet wurde.
  • DARF den Zugriff auf den CE-Speicher (Credential Encrypted) erst erlauben, nachdem der Nutzer das Gerät durch Eingabe seiner Anmeldedaten (z. B. Sicherheitscode, PIN, Muster oder Fingerabdruck) entsperrt hat und die Nachricht ACTION_USER_UNLOCKED gesendet wurde. Geräteimplementierungen DÜRFEN KEINE Methode zum Freischalten des CE-geschützten Speichers ohne die vom Nutzer angegebenen Anmeldedaten anbieten.
  • MÜSSEN den verifizierten Bootmodus unterstützen und sicherstellen, dass DE-Schlüssel kryptografisch an den Hardware-Root of Trust des Geräts gebunden sind.
  • MÜSSEN die Verschlüsselung von Dateiinhalten mit AES mit einer Schlüssellänge von 256 Bit im XTS-Modus unterstützen.
  • MUSS die Verschlüsselung von Dateinamen mit AES mit einer Schlüssellänge von 256 Bit im CBC-CTS-Modus unterstützen.
  • KANN alternative Chiffren, Schlüssellängen und Modi für die Verschlüsselung von Dateiinhalten und Dateinamen unterstützen, MÜSSEN jedoch standardmäßig die vorgeschriebenen Chiffren, Schlüssellängen und Modi verwenden.
  • SOLLTEN vorab geladene wichtige Apps (z.B. Wecker, Telefon, Messenger) direkt starten.

Die Schlüssel zum Schutz der CE- und DE-Speicherbereiche:

  • MÜSSEN kryptografisch an einen hardwaregestützten Schlüsselspeicher gebunden sein. CE-Schlüssel müssen an die Anmeldedaten des Nutzers auf dem Sperrbildschirm gebunden werden. Wenn der Nutzer keine Anmeldedaten für den Sperrbildschirm angegeben hat, MÜSSEN die CE-Schlüssel an einen Standard-Sicherheitscode gebunden werden.
  • MUSS eindeutig und eindeutig sein. Mit anderen Worten: Der CE- oder DE-Schlüssel eines Nutzers darf nicht mit den CE- oder DE-Schlüsseln anderer Nutzer übereinstimmen.

Das vorgelagerte Open-Source-Projekt von Android bietet eine bevorzugte Implementierung dieser Funktion, die auf der ext4-Verschlüsselungsfunktion des Linux-Kernels basiert.

9.9.3 Datenträgervollverschlüsselung

Geräteimplementierungen, die die Laufwerksverschlüsselung (Full Disk Encryption, FDE) unterstützen MÜSSEN AES mit einem Schlüssel von 128 Bit (oder höher) und einem für die Speicherung vorgesehenen Modus verwenden (z. B. AES-XTS, AES-CBC-ESSIV). Der Verschlüsselungsschlüssel darf unter keinen Umständen unverschlüsselt in den Speicher geschrieben werden. Außer bei aktiver Nutzung sollte der Verschlüsselungsschlüssel AES-verschlüsselt sein, wobei die Anmeldedaten für den Sperrbildschirm mit einem langsamen Stretching-Algorithmus (z.B. PBKDF2 oder scrypt) erweitert werden. Wenn der Nutzer keine Anmeldedaten für den Sperrbildschirm angegeben oder die Verwendung des Sicherheitscodes für die Verschlüsselung deaktiviert hat, sollte das System einen Standard-Sicherheitscode verwenden, um den Verschlüsselungsschlüssel zu verpacken. Wenn das Gerät über einen hardwaregestützten Schlüsselspeicher verfügt, MÜSSEN der Passwort-Stretching-Algorithmus kryptografisch an diesen Schlüsselspeicher gebunden sein. Der Verschlüsselungsschlüssel DARF NICHT vom Gerät gesendet werden, selbst wenn er mit einem Nutzer-Sicherheitscode und/oder einem hardwaregebundenen Schlüssel verpackt ist. Das vorgelagerte Open-Source-Projekt von Android bietet eine bevorzugte Implementierung dieser Funktion, die auf dem Linux-Kernel-Feature dm-crypt basiert.

9:10. Geräteintegrität

Die folgenden Anforderungen sorgen für Transparenz in Bezug auf den Status der Geräteintegrität.

Geräteimplementierungen MÜSSEN über die System-API-Methode PersistentDataBlockManager.getFlashLockState() korrekt melden, ob ihr Bootloader-Status das Flashen des System-Images zulässt. Der Status FLASH_LOCK_UNKNOWN ist für Geräteimplementierungen reserviert, die ein Upgrade von einer früheren Android-Version ausführen, bei denen diese neue System-API-Methode nicht vorhanden war.

Der verifizierte Bootmodus ist eine Funktion, die die Integrität der Gerätesoftware garantiert. Wenn eine Geräteimplementierung die Funktion unterstützt, MÜSSEN:

  • Geben Sie das Funktions-Flag für die Plattform „android.software.verify_boot“ an.
  • Führen Sie bei jeder Startsequenz eine Überprüfung durch.
  • Starten Sie die Bestätigung über einen unveränderlichen Hardwareschlüssel, der die Root of Trust ist, und gehen Sie dann bis zur Systempartition vor.
  • Implementieren Sie in der nächsten Phase jede Überprüfungsphase, um die Integrität und Authentizität aller Byte zu prüfen, bevor der Code in der nächsten Phase ausgeführt wird.
  • Verwenden Sie für Hash-Algorithmen (SHA-256) und Größen öffentlicher Schlüssel (RSA-2048) Überprüfungsalgorithmen, die den aktuellen Empfehlungen von NIST entsprechen.
  • DARF NICHT den Abschluss des Startvorgangs erlauben, wenn die Systemüberprüfung fehlschlägt, es sei denn, der Nutzer willigt ein, trotzdem zu starten. In diesem Fall DÜRFEN die Daten aus nicht verifizierten Speicherblöcken nicht verwendet werden.
  • DÜRFEN NICHT zulassen, dass verifizierte Partitionen auf dem Gerät geändert werden, es sei denn, der Nutzer hat den Bootloader explizit entsperrt.

Das vorgelagerte Open-Source-Projekt von Android bietet eine bevorzugte Implementierung dieser Funktion, die auf dem Linux-Kernel-Feature dm-verity basiert.

Ab Android 6.0 MÜSSEN Geräteimplementierungen mit AES-Verschlüsselungsleistung (Advanced Encryption Standard) über 50 MiB/Sekunden den verifizierten Bootmodus für Geräteintegrität unterstützen.

Wenn eine Geräteimplementierung bereits gestartet wird, ohne dass verifizierter Bootmodus auf einer früheren Android-Version unterstützt wird, kann diese Funktion nicht über ein Systemsoftware-Update von einem solchen Gerät unterstützt werden und ist daher von der Anforderung ausgenommen.

9.11. Schlüssel und Anmeldedaten

Mit dem Android Keystore System können App-Entwickler kryptografische Schlüssel in einem Container speichern und über die KeyChain API oder die Keystore API für kryptografische Vorgänge verwenden.

Alle Implementierungen auf Android-Geräten MÜSSEN die folgenden Anforderungen erfüllen:

  • SOLLTE nicht die Anzahl der Schlüssel, die generiert werden können, einschränken und MÜSSEN mindestens zulassen, dass mehr als 8.192 Schlüssel importiert werden.
  • Die Authentifizierung auf dem Sperrbildschirm MUSS die Anzahl der Versuche begrenzen und MUSS einen exponentiellen Backoff-Algorithmus haben. Nach 150 fehlgeschlagenen Versuchen MUSS die Verzögerung mindestens 24 Stunden pro Versuch betragen.
  • Wenn die Geräteimplementierung einen sicheren Sperrbildschirm unterstützt, MÜSSEN die Schlüsselspeicherimplementierung mit sicherer Hardware gesichert werden und die folgenden Anforderungen erfüllen: <ph type="x-smartling-placeholder">
      </ph>
    • Sie müssen hardwaregestützte Implementierungen der kryptografischen Algorithmen RSA, AES, ECDSA und HMAC sowie Hash-Funktionen der MD5-, SHA1- und SHA-2-Familie haben, um die vom Android Keystore-System unterstützten Algorithmen zu unterstützen.
    • MÜSSEN die Sperrbildschirm-Authentifizierung auf der sicheren Hardware durchführen und nur bei erfolgreicher Ausführung die Verwendung der authentifizierungsgebundenen Schlüssel zulassen. Das vorgelagerte Android-Open-Source-Projekt bietet die Gatekeeper Hardware Abstraktionsschicht (HAL), die verwendet werden kann, um diese Anforderung zu erfüllen.

Wenn eine Geräteimplementierung bereits unter einer früheren Android-Version eingeführt wurde, ist ein solches Gerät von der Anforderung eines hardwaregestützten Schlüsselspeichers ausgenommen, es sei denn, es deklariert die android.hardware.fingerprint-Funktion, für die ein hardware-basierter Schlüsselspeicher erforderlich ist.

9.11.1. Sicherer Sperrbildschirm

Bei Geräteimplementierungen KÖNNEN die Authentifizierungsmethoden zum Entsperren des Sperrbildschirms hinzugefügt oder geändert werden, MÜSSEN jedoch die folgenden Anforderungen erfüllen:

  • Die Authentifizierungsmethode, die auf einem bekannten Secret basiert, DARF NICHT als sicherer Sperrbildschirm behandelt werden, es sei denn, sie erfüllt die folgenden Anforderungen: <ph type="x-smartling-placeholder">
      </ph>
    • Die Entropie der kürzesten zulässigen Länge von Eingaben MUSS größer als 10 Bit sein.
    • Die maximale Entropie aller möglichen Eingaben MUSS größer als 18 Bit sein.
    • DÜRFEN keine der bestehenden Authentifizierungsmethoden (PIN, Muster, Passwort), die in AOSP implementiert und bereitgestellt werden, ersetzen.
    • MÜSSEN deaktiviert werden, wenn die Device Policy Controller-Anwendung (DPC) die Richtlinie für die Passwortqualität über die Methode DevicePolicyManager.setPasswordQuality() mit einer restriktiveren Qualitätskonstante als PASSWORD_QUALITY_SOMETHING festgelegt hat .
  • Die Authentifizierungsmethode, die auf einem physischen Token oder dem Standort basiert, DARF NICHT als sicherer Sperrbildschirm behandelt werden, es sei denn, sie erfüllt die folgenden Anforderungen: <ph type="x-smartling-placeholder">
      </ph>
    • Sie MUSS einen Fallback-Mechanismus haben, um eine der primären Authentifizierungsmethoden zu verwenden, die auf einem bekannten Secret basieren und die Anforderungen für einen sicheren Sperrbildschirm erfüllen.
    • Sie MUSS deaktiviert sein und der primären Authentifizierung erlauben, den Bildschirm zu entsperren, wenn die DPC-Anwendung (Device Policy Controller) die Richtlinie entweder mit der Methode DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS) oder der Methode DevicePolicyManager.setPasswordQuality() mit einer restriktiveren Qualitätskonstante als PASSWORD_QUALITY_UNSPECIFIED festgelegt hat .
  • Die Authentifizierungsmethode, die auf biometrischen Verfahren basiert, DARF NICHT als sicherer Sperrbildschirm behandelt werden, es sei denn, sie erfüllt die folgenden Anforderungen: <ph type="x-smartling-placeholder">
      </ph>
    • Sie MUSS einen Fallback-Mechanismus haben, um eine der primären Authentifizierungsmethoden zu verwenden, die auf einem bekannten Secret basieren und die Anforderungen für einen sicheren Sperrbildschirm erfüllen.
    • Sie MÜSSEN deaktiviert sein und der primären Authentifizierung erlauben, den Bildschirm nur zu entsperren, wenn die DPC-Anwendung (Device Policy Controller) die Keguard-Funktionsrichtlinie durch Aufrufen der Methode DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_FINGERPRINT) festgelegt hat.
    • Sie MUSS eine falsche Annahmerate haben, die der Anforderungen für einen Fingerabdrucksensor entspricht oder höher ist, als in Abschnitt 7.3.10 beschrieben, oder sie MÜSSEN deaktiviert sein und der primären Authentifizierung nur dann das Entsperren des Bildschirms ermöglichen, wenn die DPC-Anwendung (Device Policy Controller) die Richtlinie für die Passwortqualität über die Methode DevicePolicyManager.setPasswordQuality() mit einer restriktiveren Qualitätskonstante als PASSWORD_QUALITY_BIOMETRIC_WEAK festgelegt hat .
  • Wenn die Authentifizierungsmethode nicht als sicherer Sperrbildschirm behandelt werden kann, passiert Folgendes: <ph type="x-smartling-placeholder">
  • Wenn die Authentifizierungsmethode auf einem physischen Token, dem Standort oder den biometrischen Daten basiert, bei denen die Falschakzeptanzrate höher ist als bei den Fingerabdrucksensoren, wie in Abschnitt 7.3.10 beschrieben, gilt Folgendes: <ph type="x-smartling-placeholder">

9.12. Löschen von Daten

Geräte MÜSSEN Nutzern eine Möglichkeit zum Zurücksetzen auf die Werkseinstellungen bieten. die das logische und physische Löschen aller Daten ermöglicht, mit Ausnahme der folgenden:

  • Das System-Image
  • Alle Betriebssystemdateien, die für das System-Image erforderlich sind

Alle nutzergenerierten Daten MÜSSEN gelöscht werden. MÜSSEN relevante Branchenstandards für das Löschen von Daten wie NIST SP800-88 erfüllt werden. Dies MUSS für die Implementierung der WipeData() API (Teil der Android Device Administration API) verwendet werden, die in Abschnitt 3.9 Geräteverwaltung beschrieben wird.

Geräte bieten KANN eine schnelle Datenlöschung, die eine logische Löschung durchführt.

9:13. Abgesicherter Modus

Android bietet einen Modus, mit dem Nutzer in einem Modus starten können, in dem nur vorinstallierte System-Apps ausgeführt werden und alle Drittanbieter-Apps deaktiviert sind. Dieser Modus, auch bekannt als „Abgesicherter Modus“, bietet Nutzern die Möglichkeit, potenziell schädliche Apps von Drittanbietern zu deinstallieren.

Implementierungen von Android-Geräten werden DRINGEND empfohlen, um den abgesicherten Bootmodus zu implementieren und die folgenden Anforderungen zu erfüllen:

  • Bei der Geräteimplementierung SOLLTEN Nutzer die Möglichkeit haben, über das Bootmenü in den abgesicherten Modus zu wechseln. Dieser Modus ist über einen Workflow erreichbar, der sich vom normalen Bootvorgang unterscheidet.

  • Geräteimplementierungen MÜSSEN dem Nutzer die Möglichkeit geben, den abgesicherten Bootmodus so zu starten, dass er durch auf dem Gerät installierte Drittanbieter-Apps nicht unterbrochen werden kann. Eine Ausnahme bilden Drittanbieter-Apps, die ein Device Policy Controller sind und das Flag UserManager.DISALLOW_SAFE_BOOT auf „true“ gesetzt haben.

  • Geräteimplementierungen MÜSSEN dem Nutzer die Möglichkeit geben, Drittanbieter-Apps im abgesicherten Modus zu deinstallieren.

9:14. Kfz-Systemisolierung

Android Automotive-Geräte müssen Daten mit wichtigen Fahrzeug-Subsystemen austauschen, z.B. indem mit dem Fahrzeug-HAL Nachrichten über Fahrzeugnetzwerke wie den CAN-Bus gesendet und empfangen werden. Bei Android Automotive-Geräteimplementierungen MÜSSEN Sicherheitsfunktionen unterhalb der Android-Framework-Ebenen implementiert werden, um schädliche oder unbeabsichtigte Interaktionen zwischen dem Android-Framework oder Drittanbieter-Apps und Fahrzeug-Subsystemen zu verhindern. Diese Sicherheitsfunktionen sind:

  • Gatekeeping-Nachrichten von Android-Framework-Subsystemen, z.B. zulässige Nachrichtentypen und Nachrichtenquellen auf die Zulassungsliste setzen.
  • Watchdog gegen Denial-of-Service-Angriffe vom Android-Framework oder von Drittanbieter-Apps So wird verhindert, dass schädliche Software das Fahrzeugnetzwerk mit Traffic überflutet, was zu defekten Fahrzeug-Subsystemen führen kann.

10. Software-Kompatibilitätstests

Geräteimplementierungen MÜSSEN alle in diesem Abschnitt beschriebenen Tests bestehen.

Beachten Sie jedoch, dass kein Softwaretestpaket vollständig umfassend ist. Aus diesem Grund wird Entwicklern, die Geräte implementieren, Dringend empfohlen, die im Android Open Source Project verfügbare Referenz und bevorzugte Implementierung von Android so gering wie möglich zu ändern. Dadurch wird das Risiko minimiert, dass Fehler eingebaut werden, die zu Inkompatibilitäten führen, die überarbeitet werden müssen und potenzielle Geräteupdates erfordern.

10.1. Kompatibilitätstest-Suite

Geräteimplementierungen MÜSSEN die im Android Open Source Project verfügbare Android Compatibility Test Suite (CTS) mit der endgültigen Versandsoftware auf dem Gerät erfolgreich durchlaufen. Darüber hinaus sollten Geräte-Implementierer die Referenzimplementierung im Open-Source-Baum von Android so oft wie möglich verwenden und die Kompatibilität bei Mehrdeutigkeiten in CTS und bei Neuimplementierungen von Teilen des Referenzquellcodes gewährleisten.

Das CTS ist für die Ausführung auf einem echten Gerät konzipiert. Wie jede Software kann auch die CTS selbst Fehler enthalten. Die CTS wird unabhängig von dieser Kompatibilitätsdefinition versioniert und für Android 7.0 können mehrere Versionen der CTS veröffentlicht werden. Geräteimplementierungen MÜSSEN die neueste CTS-Version haben, die zum Zeitpunkt der Ausführung der Gerätesoftware verfügbar ist.

10.2. CTS-Prüfung

Geräteimplementierungen MÜSSEN alle anwendbaren Fälle im CTS-Verifizierer korrekt ausführen. Der CTS Verifier ist in der Kompatibilitätstest-Suite enthalten und wurde für einen menschlichen Bediener vorgesehen, um Funktionen zu testen, die von einem automatisierten System nicht getestet werden können, z. B. die korrekte Funktion einer Kamera und von Sensoren.

Der CTS Verifier bietet Tests für viele Arten von Hardware, unter anderem für einige optionale Hardware. Geräteimplementierungen MÜSSEN alle Tests für eigene Hardware bestehen. Verfügt ein Gerät beispielsweise über einen Beschleunigungsmesser, MUSS es den Testlauf des Beschleunigungsmessers im CTS Verifier ordnungsgemäß ausführen. Testläufe für Funktionen, die in diesem Dokument zur Kompatibilitätsdefinition als optional gekennzeichnet sind, können übersprungen oder weggelassen werden.

Auf jedem Gerät und jedem Build MÜSSEN die CTS-Prüfungen ordnungsgemäß ausgeführt werden (siehe oben). Da viele Builds sehr ähnlich sind, wird jedoch nicht erwartet, dass Geräte-Implementierer den CTS Verifier explizit auf Builds ausführen, die sich nur geringfügig unterscheiden. Insbesondere bei Geräteimplementierungen, die sich von einer Implementierung unterscheiden, die den CTS Verifier nur durch die Gruppe der enthaltenen Sprachen, Branding usw. bestanden hat, KÖNNEN den CTS Verifier-Test weglassen.

11. Software zum Aktualisieren

Geräteimplementierungen MÜSSEN einen Mechanismus enthalten, mit dem die gesamte Systemsoftware ersetzt wird. Der Mechanismus muss keine „Live“-Upgrades durchführen, d. h. es ist KÖNNEN ein Neustart des Geräts erforderlich.

Es kann jede Methode verwendet werden, vorausgesetzt, sie ersetzt die gesamte auf dem Gerät vorinstallierte Software. Diese Anforderung wird beispielsweise von einem der folgenden Ansätze erfüllt:

  • Over-the-Air-Downloads (OTA) mit Offline-Aktualisierung durch Neustart
  • Aktualisierungen per Tethering von einem Host-PC über USB
  • „Offline“-Updates werden nach einem Neustart durchgeführt und über eine Datei auf einem Wechseldatenträger aktualisiert.

Wenn die Geräteimplementierung jedoch eine nicht getaktete Datenverbindung unterstützt, z. B. ein 802.11- oder Bluetooth PAN-Profil (Personal Area Network), MUSS sie OTA-Downloads mit Offline-Updates per Neustart unterstützen.

Der verwendete Aktualisierungsmechanismus MÜSSEN Updates unterstützen, ohne dass Nutzerdaten gelöscht werden. Das heißt, der Aktualisierungsmechanismus MÜSSEN die privaten Daten der Anwendung und die freigegebenen Daten der Anwendung beibehalten. Beachten Sie, dass die vorgelagerte Android-Software einen Updatemechanismus enthält, der diese Anforderung erfüllt.

Bei Geräteimplementierungen, die mit Android 7.0 und höher auf den Markt gebracht werden, sollte der Updatemechanismus die Überprüfung unterstützen, ob das System-Image binär identisch mit dem erwarteten Ergebnis nach einem OTA-Update ist. Die blockbasierte OTA-Implementierung im vorgelagerten Android-Open-Source-Projekt, die seit Android 5.1 hinzugefügt wurde, erfüllt diese Anforderung.

Wenn bei einer Geräteimplementierung ein Fehler gefunden wird, nachdem diese veröffentlicht wurde, aber innerhalb der angemessenen Produktlebensdauer, die in Rücksprache mit dem Android-Kompatibilitätsteam ermittelt wird, um die Kompatibilität von Drittanbieter-Apps zu beeinflussen, MÜSSEN der Implementierer den Fehler über ein verfügbares Softwareupdate beheben, das mit dem oben beschriebenen Mechanismus angewendet werden kann.

Android umfasst Funktionen, mit denen die Geräteinhaber-App (falls vorhanden) die Installation von Systemupdates steuern kann. Zu diesem Zweck MÜSSEN das Systemupdate-Subsystem für Geräte, die „android.software.device_admin“ melden, das in der Klasse SystemUpdatePolicy beschriebene Verhalten implementieren.

12. Änderungsprotokoll für Dokumente

Für eine Zusammenfassung der Änderungen an der Kompatibilitätsdefinition in diesem Release:

Zusammenfassung der Änderungen in einzelnen Abschnitten:

  1. Einführung
  2. Gerätetypen
  3. Software
  4. Anwendungspaket erstellen
  5. Multimedia
  6. Entwicklertools und -optionen
  7. Kompatibilität mit Hardware
  8. Leistung und Leistung
  9. Sicherheitsmodell
  10. Software-Kompatibilitätstests
  11. Aktualisierungen von Software
  12. Änderungsprotokoll für Dokumente
  13. Kontakt

12.1 Tipps zum Aufrufen des Änderungsprotokolls

Änderungen sind wie folgt gekennzeichnet:

  • CDD
    Die Kompatibilitätsanforderungen wurden grundlegend geändert.

  • Google Docs
    Kosmetische oder baubezogene Änderungen.

Für eine optimale Darstellung hängen Sie die URL-Parameter pretty=full und no-merges an Ihre Änderungsprotokoll-URLs an.

13. Kontakt

Sie können dem Forum zur Android-Kompatibilität beitreten und dort um Erläuterungen bitten oder Probleme melden, die im Dokument Ihrer Meinung nach nicht behandelt werden.