Android Automotive OS unterstützt nicht nur Apps, die für die Nutzung beim Fahren entwickelt wurden, sondern auch Browser, Spiele und Video-Apps, die geparkt sind. Mit nur wenigen geringfügigen Änderungen können Sie dieselbe App wie für andere Geräte mit großen Bildschirmen an Autos ausliefern.
Vorhandene App in einem Android Automotive OS-Emulator testen
Damit du deine App für Android Automotive OS erstellen kannst, musst du deine vorhandene App zuerst in einem Android Automotive OS-Emulator testen. Führe zum Einrichten eines Emulators die Schritte unter Mit dem Android Automotive OS-Emulator testen aus. Anschließend können Sie die Anwendung ausführen. Folgen Sie dazu der Anleitung unter Anwendung im Emulator ausführen.
Achten Sie beim Ausführen Ihrer App auf Kompatibilitätsprobleme, z. B.:
- Infotainmentbildschirme haben eine feste Ausrichtung. Gemäß den Qualitätsrichtlinien für Auto-Apps müssen Apps sowohl das Hoch- als auch das Querformat unterstützen.
- Auf anderen Geräten verfügbare APIs sind unter Android Automotive OS möglicherweise nicht verfügbar. Beispielsweise sind einige APIs der Google Play-Dienste unter Android Automotive OS nicht verfügbar. Weitere Informationen zur Behebung dieser Probleme finden Sie im Abschnitt Features deaktivieren.
Manifestdateien Ihrer App konfigurieren
Für die Ausrichtung auf Android Automotive OS muss deine App bestimmte Manifesteinträge enthalten. Damit werden Apps, die auf Android Automotive OS ausgerichtet sind, mit einem separaten Automotive OS-Release-Typ an den Play Store gesendet. Sie durchlaufen einen manuellen Überprüfungsprozess, um sicherzustellen, dass sie für den Einsatz im Auto sicher sind. Weitere Informationen finden Sie unter Android-Apps für Autos vertreiben.
Erforderliche Android Automotive OS-Funktionen
Damit Apps, die für Android Automotive OS entwickelt wurden, in einem Auto im Play Store angeboten werden können, müssen sie in der Datei AndroidManifest.xml
das folgende <uses-feature>
-Element enthalten:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
</manifest>
Für Anwendungen, die an Tracks gesendet werden, die keine Autos sind, kann das <uses-feature>
-Element aus dem vorherigen Codebeispiel nicht deklariert werden, da sie nicht von autospezifischer Hardware abhängig sein dürfen. Wenn Sie also dieselbe App sowohl für Automobil- als auch Nicht-Automobilgeräte ausliefern möchten, müssen Sie mindestens zwei Varianten Ihrer App generieren: eine für Automobilgeräte und eine andere für Mobilgeräte. Weitere Informationen zum Erstellen dieser separaten Flavors 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.
Statt separate Varianten zu verwenden, kannst du für deine APKs oder App Bundles für mobile und mobile Apps jeweils separate Paketnamen verwenden. Informationen zu den Vor- und Nachteilen der einzelnen Ansätze finden Sie im Entwicklerleitfaden für Medien-Apps unter Paketnamen.
Neben dem Element aus dem vorherigen Codebeispiel müssen Apps, die für Android Automotive OS erstellt wurden, 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 als nicht erforderlich festlegst, verhinderst du, dass deine App in Konflikt mit den verfügbaren Hardwarefunktionen auf Android Automotive OS-Geräten steht.
Sicherstellen, dass keine für die Ablenkung optimierten Aktivitäten vorhanden sind
Damit deine App nur im geparkten Zustand verwendet werden kann, verwende das folgende <meta-data>
-Element nicht in einem <activity>
-Element in deinem Manifest:
<!-- 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 reduzieren. Dies erfolgt als onPause
-Lebenszyklus-Callback, in dem Sie die Video- und Audiowiedergabe Ihrer App anhalten müssen.
Kategoriespezifische Manifesteinträge
Zusätzlich zu den oben genannten Anforderungen, die für alle geparkten Apps gelten, gelten für die Kategorien „Video“ und „Spiele“ zusätzliche Anforderungen:
- Informationen zu Video-Apps finden Sie unter App als Video-App kennzeichnen.
- Informationen zu Spielen finden Sie unter App als Spiel kennzeichnen.
App für Android Automotive OS optimieren
Damit deine Nutzer bestmöglich von Android Automotive OS profitieren, solltest du Folgendes beachten, wenn du deine App für Android Automotive OS entwickelst.
Für große Bildschirme optimieren
Die Bildschirme in Android Automotive OS-Fahrzeugen ähneln Tablets und faltbaren Geräten in Größe, Auflösung und Seitenverhältnis eher als Smartphones. Daher profitieren auch Nutzer in Autos von der Optimierung Ihrer App für große Bildschirme.
In den Anleitungen Unterstützung verschiedener Bildschirmgrößen und Migration Ihrer UI zu responsiven Layouts finden Sie insbesondere Informationen zur optimalen Nutzung großer Displaygrößen sowie die Mediengalerien und Spielegalerien, die Ihnen Inspiration und Unterstützung beim Design bieten.
Andere Optimierungen für große Bildschirme wie die Eingabekompatibilität sind für Android Automotive OS nicht direkt vorteilhaft, können aber die Nutzerfreundlichkeit verbessern. Bei der Tastaturnavigation werden beispielsweise dieselben APIs wie bei der Drehnavigation genutzt, sodass von jeder hier vorgenommenen Optimierungen beide Formfaktoren profitieren können.
Mit Fenstereinlagen und Display-Aussparungen arbeiten
Wie bei anderen Formfaktoren enthält Android Automotive OS UI-Elemente des Systems wie Status- und Navigationsleisten sowie Unterstützung für nicht rechteckige Displays.
Standardmäßig werden Apps in einem Bereich gezeichnet, der sich nicht mit Systemleisten oder mit Aussparungen überschneidet. Es kann jedoch sein, dass Ihre App die Systemleisten verborgen, Inhalte dahinter zeichnen oder Inhalte in einer Display-Aussparung anzeigen soll, wie unter App in Fenstereinblendungen platzieren beschrieben. Wenn deine App eine dieser Funktionen unterstützt, findest du in den folgenden Unterabschnitten Informationen dazu, wie du deine App auf allen Android Automotive OS-Geräten verwenden kannst.
Systemleisten, immersiver Modus und Edge-to-Edge-Rendering
Systembalken in Autos können anders groß und anders positioniert sein als bei anderen Formfaktoren. Navigationsleisten können beispielsweise links, rechts oder unten auf dem Bildschirm positioniert werden. Selbst wenn sich oben eine Statusleiste und unten eine Navigationsleiste befinden, wie es bei den meisten Smartphones und Tablets der Fall ist, ist die Größe dieser Elemente in Autos wahrscheinlich viel größer.
Außerdem können OEMs bei Android Automotive OS festlegen, ob Apps die Systemleisten ein- oder ausblenden können, um den immersiven Modus zu starten und zu beenden. Wenn OEMs beispielsweise verhindern, dass Apps die Systemleisten ausblenden, können sie dafür sorgen, dass Steuerelemente wie die Klimasteuerung immer auf dem Bildschirm sichtbar sind. Wenn ein OEM verhindert hat, dass Apps die Systemleisten steuern, passiert nichts, wenn eine App die APIs WindowInsetsController
(oder WindowInsetsControllerCompat
) aufruft, um Systemleisten ein- oder auszublenden. In der Dokumentation zu show
und hide
finden Sie weitere Informationen dazu, wie Sie feststellen können, ob Ihre Anwendung die Einsätze ändern konnte.
Ebenso können OEMs auch steuern, ob Apps die Farbe und Transparenz von Systemleisten festlegen können, um sicherzustellen, dass die Balken und die darin enthaltenen Elemente immer deutlich sichtbar sind. Wenn sich Ihre App randlos zieht, achten Sie darauf, dass sich nur nicht kritische Inhalte hinter Systemleisten befinden. Dieser Inhalt ist möglicherweise nicht sichtbar, wenn der Geräte-OEM verhindert, dass die Farbe oder Lichtdurchlässigkeit der Balken festgelegt wird.
<!-- 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 randvoll ist, sollten Sie keine Annahmen über die Größe, die Anzahl, den Typ oder die Position der Systemleisten treffen. Verwenden Sie stattdessen die Fenster-Insets-APIs, um den Inhalt Ihrer App relativ zu den Systemleisten anzulegen. Weitere Informationen zur Verwendung dieser APIs finden Sie unter Edge-to-Edge-Inhalte in Ihrer App anzeigen. Hartcodierte Werte für Abstände, die zwar nicht empfohlen werden, die Inhalte aber auf anderen Geräten im sicheren Bereich halten können, sind in Autos wahrscheinlich nicht.
An ungleichförmig geformte Displays anpassen
Zusätzlich zu den rechteckigen Displays haben manche Fahrzeuge möglicherweise ungleichförmig geformte Bildschirme, wie in Abbildung 1 zu sehen ist:
![Ein Diagramm eines Android Automotive OS-Geräts mit einem gebogenen Display auf der rechten Seite.](https://developer.android.com/static/images/training/cars/aaos-curved.png?authuser=6&hl=de)
Wenn Ihre App nicht randlos gerendert wird, müssen Sie nichts unternehmen, damit sie innerhalb des sicheren Bereichs gerendert wird.
Wenn Ihre App randlos gerendert wird, können Sie festlegen, wie sie sich in Bezug auf Display-Aussparungen verhalten soll. Dazu können Sie das Attribut android:windowLayoutInDisplayCutoutMode
für das Design Ihrer App 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 diese das Verhalten für die Aussparungen auf Mobilgeräten optimiert haben. Verwenden Sie stattdessen LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
oder LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
, um die Aussparung entweder immer zu vermeiden oder sie immer zu öffnen. Wenn Sie Letzteres auswählen, finden Sie unter Unterstützung von Display-Aussparungen weitere Informationen zu den APIs für Display-Aussparungen.
Wenn deine App in der Display-Aussparung gerendert wird und du ein anderes Verhalten zwischen Android Automotive OS und Mobilgeräten möchtest, findest du unter Funktionen deaktivieren Informationen dazu, ob deine App dieses Verhalten während der Laufzeit einrichtet, und Alternative Ressourcen verwenden, wenn deine App dieses Verhalten mithilfe von Ressourcendateien festlegt.
Funktionen deaktivieren
Wenn du eine vorhandene mobile App unter Android Automotive OS verfügbar machst, sind bestimmte Funktionen möglicherweise nicht relevant oder nicht verfügbar. Beispielsweise bieten Autos in der Regel keinen Zugang zu Kameras. Außerdem ist unter Android Automotive OS nur ein Teil der Google Play-Dienste verfügbar. Weitere Informationen findest du 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 kannst du nach der Funktion FEATURE_AUTOMOTIVE
suchen, 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 deine App auch eine Android Auto-Komponente hat, kannst du mithilfe 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 nicht mit einem Auto verbunden ist.
Folge für die Funktion „Bild im Bild“ (BiB) den etablierten Best Practices, um zu prüfen, ob die Funktion verfügbar ist, und entsprechend zu reagieren.
Mit Offlineszenarien umgehen
Während Autos immer mehr mit dem Internet verbunden sind, wird empfohlen, Apps auch ohne Internetverbindung auszuführen, z. B. in den folgenden Fällen:
- Nutzer können mobile Daten ablehnen, die im Rahmen eines Abopakets des Autoherstellers angeboten werden.
- In bestimmten Regionen ist der Zugriff auf mobile Daten möglicherweise eingeschränkt.
- Autos mit WLAN-Funkschnittstelle können sich außerhalb der WLAN-Reichweite befinden oder ein OEM deaktiviert die WLAN-Funktion zugunsten eines Mobilfunknetzes.
Sie können auf diese Szenarien in Ihrer Anwendung vorbereitet sein, indem Sie Funktionen, die vom Internetzugang abhängig sind, ordnungsgemäß beeinträchtigen, z. B. durch das Anbieten von Offline-Inhalten. Weitere Informationen finden Sie in den Best Practices zur Netzwerkoptimierung.
Alternative Ressourcen verwenden
Zur Anpassung deiner App an Autos kannst du den Ressourcen-Qualifier car
verwenden, um alternative Ressourcen zur Verfügung zu stellen, wenn sie in einem Android Automotive OS-Fahrzeug ausgeführt werden. Wenn Sie beispielsweise Dimensionsressourcen zum Speichern von Padding-Werten verwenden, können Sie einen höheren 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 ihre Kategorie getestet und einen Android Automotive OS-Build davon mit den erforderlichen Änderungen für die Kategorie erstellt hast, kannst du sie für Tracks mit Automotive OS-Formfaktoren im Play Store veröffentlichen. Weitere Informationen zur Veröffentlichung findest du unter Android-Apps für Autos vertreiben.
Feedback zu geparkten Apps geben
Wenn bei der Entwicklung Ihrer geparkten App für Android Automotive OS ein Problem oder eine Funktionsanfrage auftritt, können Sie es über den Google Issue Tracker melden. Geben Sie alle erforderlichen Informationen in der Problemvorlage an. Bevor Sie ein neues Problem melden, prüfen Sie, ob es bereits in der Liste der Probleme gemeldet wurde. Sie können Probleme abonnieren und über diese abstimmen, indem Sie im Tracker auf den Stern für ein Problem klicken. Weitere Informationen finden Sie unter Probleme abonnieren.