Geparkte Apps für Android Automotive OS erstellen

Neben Apps, die für die Nutzung während der Fahrt entwickelt wurden, unterstützt Android Automotive OS auch Browser, Spiele und Video-Apps für die Nutzung, wenn das Auto geparkt ist. Mit nur wenigen geringfügigen Änderungen können Sie die gleiche App an Autos senden wie an andere Geräte mit großem Bildschirm.

Vorhandene App auf einem Android Automotive OS-Emulator testen

Um Ihre App für Android Automotive OS zu erstellen, testen Sie zuerst Ihre vorhandene App in einem Android Automotive OS-Emulator. Um einen Emulator einzurichten, folgen Sie den Schritten unter Mit dem Android Automotive OS-Emulator testen. Anschließend können Sie die App ausführen, indem Sie der Anleitung unter App im Emulator ausführen folgen.

Achten Sie beim Ausführen Ihrer App auf Kompatibilitätsprobleme wie die folgenden:

  • Infotainmentbildschirme haben eine feste Ausrichtung. Apps müssen sowohl das Hoch- als auch das Querformat unterstützen, um die Qualitätsrichtlinien für Auto-Apps zu erfüllen.
  • Auf anderen Geräten verfügbare APIs sind unter Android Automotive OS möglicherweise nicht verfügbar. So sind beispielsweise einige APIs für Google Play-Dienste unter Android Automotive OS nicht verfügbar. Weitere Informationen zum Umgang mit diesen Problemen finden Sie im Abschnitt Features deaktivieren.

Manifestdateien deiner App konfigurieren

Für eine Ausrichtung auf Android Automotive OS muss deine App bestimmte Manifesteinträge haben. Damit werden Apps, die auf Android Automotive OS ausgerichtet sind, mit einem separaten Automotive OS-Release-Typ beim Play Store eingereicht. Sie werden einer manuellen Überprüfung unterzogen, um sicherzustellen, dass sie für die Nutzung in einem Auto unbedenklich sind. Weitere Informationen findest du unter Android-Apps für Autos vertreiben.

Erforderliche Android Automotive OS-Funktionen

Für Android Automotive OS erstellte Apps müssen im Play Store in einem Auto das folgende Element <uses-feature> in der Datei AndroidManifest.xml enthalten:

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
</manifest>

Für Apps, die an Nicht-Automobil-Tracks übermittelt werden, kann das im vorherigen Codebeispiel gezeigte Element <uses-feature> nicht deklariert werden, da sie nicht von autospezifischer Hardware abhängen dürfen. Wenn Sie also dieselbe App für Geräte aus der Automobil- und Nicht-Automobilbranche ausliefern möchten, müssen Sie mindestens zwei Varianten Ihrer App generieren: eine für Automobilgeräte und eine für Mobilgeräte. Weitere Informationen zum Erstellen dieser separaten Geschmacksrichtungen finden Sie in der folgenden Dokumentation:

Die beiden Varianten der App können denselben Paketnamen haben, müssen aber unterschiedliche Versionscodes haben, da sie separat in die Play Store-Tracks hochgeladen werden.

Anstatt separate Varianten zu verwenden, können Sie auch separate Paketnamen für Ihre APKs für Mobilgeräte und die Automobil-APKs oder App Bundles nutzen. Weitere Informationen zu den Vor- und Nachteilen der beiden Ansätze finden Sie im Entwicklerleitfaden für Medien-Apps unter Paketnamen.

Für Android Automotive OS erstellte Apps müssen neben dem im vorherigen Codebeispiel gezeigten Element die folgenden <uses-feature>-Elemente im Stammelement <manifest> enthalten:

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

Wenn du diese Funktionen explizit auf „Nicht erforderlich“ setzt, kannst du dafür sorgen, dass deine App nicht mit den verfügbaren Hardwarefunktionen in Android Automotive OS-Geräten in Konflikt steht.

Achten Sie darauf, dass es keine Aktivitäten gibt, die für die Ablenkung optimiert sind.

Damit deine App nur im geparkten Zustand verwendet werden kann, füge das folgende <meta-data>-Element in einem <activity>-Element in deinem Manifest nicht ein:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Ohne diese Metadaten werden die Aktivitäten Ihrer App automatisch vom Betriebssystem blockiert, wenn das Auto in den Fahrmodus wechselt, um Ablenkungen für den Fahrer zu vermeiden. Dies erfolgt als onPause-Lebenszyklus-Callback, bei dem Sie sowohl die Video- als auch die Audiowiedergabe über Ihre App anhalten müssen.

App für Android Automotive OS optimieren

Um die bestmögliche Nutzererfahrung zu bieten, solltest du beim Entwickeln deiner App für Android Automotive OS Folgendes beachten:

Für große Bildschirme optimieren

Die Bildschirme in Android Automotive OS-Fahrzeugen sind in Größe, Auflösung und Seitenverhältnis eher mit Tablets und faltbaren Smartphones als Smartphones vergleichbar. Somit profitiert auch die Nutzung von Autos von der Optimierung Ihrer App für große Bildschirme.

Weitere Informationen dazu, wie du große Displays optimal nutzt, findest du in den Leitfäden Unterstützung unterschiedlicher Bildschirmgrößen und Benutzeroberfläche zu responsiven Layouts migrieren. In den Medien- und Spielgalerien findest du Inspirationen und Anleitungen zum Design.

Andere Optimierungen für große Bildschirme wie die Eingabekompatibilität sind für Android Automotive OS nicht so direkt von Vorteil, können aber dennoch die Nutzerfreundlichkeit verbessern. Bei der Tastaturnavigation werden beispielsweise dieselben APIs wie bei der Drehnavigation verwendet, sodass von jeder Optimierung beide Formfaktoren profitieren können.

Mit Fenstereinfügungen und Display-Aussparungen arbeiten

Wie andere Formfaktoren umfasst auch Android Automotive OS Elemente der System-UI, z. B. Status- und Navigationsleisten, und Unterstützung für nicht rechteckige Bildschirme.

Standardmäßig zeichnen Apps einen Bereich, der sich nicht mit Systemleisten oder Display-Aussparungen überschneidet. Möglicherweise möchten Sie jedoch, dass Ihre App die Systemleisten ausblendet, Inhalte dahinter zeichnet oder Inhalte in einem Display-Ausschnitt anzeigt, wie unter App in Fenstereinsätzen anordnen beschrieben. Wenn Ihre App einer dieser Anforderungen entspricht, finden Sie in den folgenden Unterabschnitten Informationen dazu, wie Sie Ihre App auf allen Android Automotive OS-Geräten verwenden können.

Systemleisten, immersiver Modus und randloses Rendering

Systemleisten in Autos können in ihrer Größe und Position andere Formfaktoren haben. Navigationsleisten können z. B. links, rechts oder unten auf dem Bildschirm positioniert werden. Selbst wenn oben eine Statusleiste und unten eine Navigationsleiste vorhanden ist – wie es bei den meisten Smartphones und Tablets der Fall ist –, sind diese Elemente in Autos wahrscheinlich viel größer.

Darüber hinaus können OEMs mit Android Automotive OS steuern, ob Apps die Systemleisten ein- oder ausblenden können, um den immersiven Modus zu starten und zu beenden. Wenn sie beispielsweise verhindern, dass Apps die Systemleisten verstecken, können OEMs dafür sorgen, dass Fahrzeugsteuerelemente wie die Klimatisierung immer auf dem Bildschirm zugänglich sind. Wenn ein OEM verhindert hat, dass Apps Systemleisten steuern, passiert nichts, wenn eine App die WindowInsetsController- oder WindowInsetsControllerCompat-APIs aufruft, um Systemleisten ein- oder auszublenden. Weitere Informationen dazu, wie Sie feststellen können, ob Ihre Anwendung die Einsätze ändern konnte, finden Sie in der Dokumentation zu show und hide.

Ebenso können OEMs auch festlegen, ob Apps die Farbe und Durchsichtigkeit von Systembalken festlegen können, um sicherzustellen, dass die Balken und die darin enthaltenen Elemente jederzeit deutlich sichtbar sind. Wenn Ihre App randvoll ist, achten Sie darauf, dass sich nur nicht kritische Inhalte hinter Systemleisten befinden. Dieser Inhalt ist möglicherweise nicht sichtbar, wenn der Geräte-OEM die Einstellung der Farbe oder Transparenz der Balken verhindert.

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

Wenn Ihre Anwendung von Edge-to-Edge-Geräten ausgeführt wird, sollten Sie keine Annahmen über die Größe, die Anzahl, den Typ oder die Position der Systemleisten anstellen. Verwenden Sie stattdessen die APIs für Fenstereinfügungen, um den Inhalt Ihrer Anwendung relativ zu den Systemleisten anzuordnen. Weitere Informationen zur Verwendung dieser APIs finden Sie unter Inhalte in Apps bis zum Rand anzeigen. Hartcodierte Werte für den Abstand, die zwar nicht empfohlen werden, aber möglicherweise Inhalte im sicheren Bereich anderer Geräte aufbewahren, werden in Autos wahrscheinlich nicht verwendet.

Unregelmäßig geformte Displays anpassen

Zusätzlich zu rechteckigen Displays können einige Fahrzeuge auch unregelmäßig geformte Bildschirme haben, wie in Abbildung 1 dargestellt:

Ein Diagramm eines Android Automotive OS-Geräts mit einem gebogenen Display auf der rechten Seite
Abbildung 1: Ein Android Automotive OS-Gerät mit einem gebogenen Display auf der rechten Seite. Der grüne Bereich ist das sichere Rechteck, das sich nicht mit dem Begrenzungsrahmen des Display-Ausschnitts der Kurve überschneidet.

Wenn Ihre App nicht von Rand zu Rand gerendert wird, müssen Sie nichts unternehmen, um sie im sicheren Bereich zu rendern.

Wenn deine App randvoll gerendert wird, kannst du auswählen, wie sie sich in Bezug auf Display-Aussparungen verhalten soll. Dazu können Sie Ressourcen verwenden, indem Sie das Attribut android:windowLayoutInDisplayCutoutMode für das Design Ihrer Anwendung festlegen oder während der Laufzeit das Attribut layoutInDisplayCutoutMode des Fensters ändern.

Da sich die Arten von Display-Aussparungen auf Android Automotive OS-Geräten von denen auf Mobilgeräten unterscheiden, solltest du LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT oder LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES nicht verwenden, da deren Verhalten für die Ausschnitte auf Mobilgeräten optimiert ist. Verwenden Sie stattdessen LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER oder LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS, um den Ausschnitt immer zu vermeiden oder immer zu öffnen. Wenn Sie Letzteres auswählen, finden Sie unter Display-Aussparungen unterstützen weitere Informationen zu den APIs für Display-Aussparungen.

Wenn Ihre App im Display-Ausschnittbereich gerendert wird und Sie ein anderes Verhalten zwischen Android Automotive OS und Mobilgeräten wünschen, lesen Sie Funktionen deaktivieren, wenn Ihre App dieses Verhalten während der Laufzeit festlegt, und Alternative Ressourcen verwenden, wenn Ihre App dieses Verhalten mithilfe von Ressourcendateien festlegt.

Features deaktivieren

Wenn Sie eine bestehende mobile App für Android Automotive OS verfügbar machen, sind bestimmte Funktionen möglicherweise nicht relevant oder nicht verfügbar. Autos bieten beispielsweise in der Regel keinen Zugang zu Kameras. Darüber hinaus ist nur ein Teil der Google Play-Dienste für Android Automotive OS verfügbar. Weitere Informationen finden Sie unter Google Play-Dienste für Autos.

Mit der PackageManager.hasSystemFeature API kannst du feststellen, ob die App unter Android Automotive OS ausgeführt wird. Dazu suchst du nach der Funktion FEATURE_AUTOMOTIVE, wie im folgenden Beispiel gezeigt:

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Wenn Ihre App auch eine Android Auto-Komponente hat, können Sie auch mit der CarConnection API aus der Android for Cars App-Bibliothek feststellen, ob die App unter Android Automotive OS oder Android Auto ausgeführt wird oder ob sie gar nicht mit einem Auto verbunden ist.

Befolge für die Funktion „Bild im Bild“ die bewährten Best Practices, um zu prüfen, ob die Funktion verfügbar ist, und reagiere entsprechend.

Offlineszenarien verarbeiten

Während Autos immer stärker mit dem Internet verbunden sind, wird empfohlen, Apps ohne Internetverbindung auszuführen, z. B. in den folgenden Fällen:

  • Nutzer können mobile Daten deaktivieren, die im Rahmen eines Abopakets des Autoherstellers angeboten werden.
  • Der Zugriff auf mobile Daten ist in bestimmten Regionen möglicherweise eingeschränkt.
  • Autos mit WLAN-Funkschnittstellen befinden sich möglicherweise außerhalb der WLAN-Reichweite oder ein OEM deaktiviert die WLAN-Funktion zugunsten eines Mobilfunknetzes.

Zur Bewältigung dieser Szenarien in Ihrer App sollten Sie Funktionen, die vom Internetzugriff abhängig sind, ordnungsgemäß herabstufen, z. B. durch Anbieten von Offlineinhalten. Weitere Informationen finden Sie in den Best Practices zur Optimierung von Netzwerken.

Alternative Ressourcen verwenden

Bei der Anpassung deiner App für Autos kannst du den car-Ressourcenqualifizierer verwenden, um alternative Ressourcen bereitzustellen, wenn du auf einem Android Automotive OS-Fahrzeug ausgeführt wirst. Wenn Sie z. B. Dimensionsressourcen zum Speichern von Padding-Werten verwenden, können Sie einen größeren Wert für den Ressourcensatz car verwenden, um Berührungszielbereiche zu vergrößern.

App vertreiben

Nachdem du deine App anhand der Qualitätsrichtlinien für Auto-Apps für die entsprechende Kategorie getestet und einen Android Automotive OS-Build mit allen erforderlichen Änderungen für die Kategorie darauf vorgenommen hast, kannst du sie in Automotive OS-Formfaktor-Tracks im Play Store veröffentlichen. Weitere Informationen zum Veröffentlichungsprozess findest du unter Android-Apps für Autos vertreiben.

Feedback zu geparkten Apps geben

Wenn während der Entwicklung Ihrer geparkten App für Android Automotive OS ein Problem auftritt oder Sie eine Funktion anfragen, können Sie dies über den Google Issue Tracker melden. Geben Sie in der Problemvorlage alle erforderlichen Informationen an. Bevor Sie ein neues Problem melden, prüfen Sie, ob es bereits in der Problemliste aufgeführt ist. Sie können Themen abonnieren und für sie abstimmen, indem Sie im Tracker auf den Stern für ein Problem klicken. Weitere Informationen finden Sie unter Ausgaben abonnieren.

Neues Problem erstellen