Unterstützung für Android Automotive OS zu Vorlagen-Apps hinzufügen

Mit Android Automotive OS können Nutzer Apps in ihrem Auto installieren. Damit Sie Nutzer über diese Plattform erreichen können, müssen Sie eine für Autofahrer optimierte App anbieten, die mit Android Automotive OS kompatibel ist. Für Ihre Android Auto-App können Sie fast allen Code und alle Ressourcen Ihrer bestehenden App verwenden. Sie müssen jedoch einen separaten Build erstellen, der die auf dieser Seite beschriebenen Anforderungen erfüllt.

Damit Sie Ihre Auto-App unter Android Automotive OS ausführen können, benötigen Sie den neuesten Templates Host, der als System-App bereitgestellt wird.

Entwicklung – Übersicht

Das Hinzufügen von Android Automotive OS-Unterstützung erfordert nur wenige Schritte, wie in den Abschnitten auf dieser Seite beschrieben:

  1. Automobilmodul erstellen
  2. Unterstützung für Android Automotive OS deklarieren
  3. CarAppService und CarAppActivity deklarieren
  4. Gradle-Abhängigkeiten aktualisieren

Verwenden Sie Android Studio Bumblebee oder höher, damit alle Automotive OS-Funktionen aktiviert sind.

Automobilmodul erstellen

Für einige Komponenten von Android Automotive OS, z. B. das Manifest, gelten plattformspezifische Anforderungen. Erstellen Sie ein Modul, in dem der Code für diese Komponenten von anderem Code in Ihrem Projekt getrennt ist, z. B. dem Code für Ihre Smartphone-App.

So fügen Sie einem vorhandenen Projekt ein Automobilmodul hinzu:

  1. Klicken Sie in Android Studio auf File > New > New Module.
  2. Wählen Sie Automotive Module (Automobilmodul) aus und klicken Sie auf Next (Weiter).
  3. Geben Sie einen Anwendungs-/Bibliotheksnamen an. Das ist der Name, den Nutzer für Ihre App in Android Automotive OS sehen.
  4. Geben Sie einen Modulnamen ein.
  5. Bearbeiten Sie den Paketnamen, sodass er mit dem Ihrer vorhandenen App übereinstimmt.
  6. Wählen Sie API 29: Android 10 (Q) für das Minimum SDK aus und klicken Sie dann auf Weiter. Alle Autos, die die Car App Library unter Android Automotive OS unterstützen, basieren auf Android 10 (API-Level 29) oder höher. Wenn Sie diesen Wert auswählen, sind alle kompatiblen Autos als Zielgruppe festgelegt.

  7. Wählen Sie Keine Aktivität hinzufügen aus und klicken Sie auf Fertigstellen.

Wenn Sie ein neues Projekt starten:

  1. Klicken Sie in Android Studio auf File > New > New Project.
  2. Wählen Sie Automotive als Project Type (Projekttyp) aus.
  3. Wählen Sie No Activity (Keine Aktivität) aus und klicken Sie auf Next (Weiter).
  4. Geben Sie einen Namen für Ihr Projekt an. Das ist der Name, den Nutzer für Ihre App unter Android Automotive OS sehen.
  5. Geben Sie einen Paketnamen ein. Weitere Informationen zur Auswahl eines Paketnamens finden Sie im Abschnitt Paketnamen.
  6. Wählen Sie API 29: Android 10 (Q) für das Minimum SDK aus und klicken Sie dann auf Weiter.

    Alle Autos, die die Car App Library unter Android Automotive OS unterstützen, basieren auf Android 10 (API-Level 29) oder höher. Wenn Sie diesen Wert auswählen, sind alle kompatiblen Autos als Zielgruppe festgelegt.

Nachdem Sie das Modul in Android Studio erstellt haben, öffnen Sie die Datei AndroidManifest.xml in Ihrem neuen Automobilmodul:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

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

</manifest>

Das Element <application> enthält einige Standard-App-Informationen sowie ein <uses-feature>-Element, das die Unterstützung für Android Automotive OS deklariert. Im Manifest sind keine Aktivitäten deklariert.

Funktionsanforderungen deklarieren

Fügen Sie als Nächstes das folgende uses-feature-Element in Ihr Manifest ein, um anzugeben, dass ein Vorlagenhost erforderlich ist, damit es richtig funktioniert:

<manifest ...>
  ...
  <uses-feature
      android:name="android.software.car.templates_host"
      android:required="true" />
  ...
</manifest>

Achte außerdem darauf, dass deine App den Google Play-Funktionsanforderungen entspricht, die für alle Apps gelten, die für Android Automotive OS entwickelt wurden.

Gradle-Abhängigkeiten aktualisieren

Fügen Sie in Ihrem Automotive-Modul eine Abhängigkeit vom androidx.car.app:app-automotive-Artefakt hinzu. Dieses enthält die CarAppActivity-Implementierung, die für die Ausführung Ihrer App unter Android Automotive OS erforderlich ist.

Wenn Sie Ihre App so entwickeln, dass sie sowohl Android Auto als auch Android Automotive OS unterstützt, empfehlen wir, CarAppService in einem separaten Modul zu speichern, das Sie für Ihre Mobil- und Automotive-Module freigeben. Wenn Sie diesen Ansatz verwenden, müssen Sie Ihr Automotive-Modul aktualisieren, damit es das freigegebene Modul mit den Projektabhängigkeiten von Gradle enthält, wie im folgenden Snippet gezeigt:

Groovy

buildscript {
    ...
    dependencies {
        ...
        implementation "androidx.car.app:app-automotive:car_app_library_version"
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation("androidx.car.app:app-automotive:car_app_library_version")
        implementation(project(":shared_module_name"))
    }
}

Unterstützung für Android Automotive OS deklarieren

Mit dem folgenden Manifesteintrag deklarieren Sie, dass Ihre App Android Automotive OS unterstützt:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Dieser Manifesteintrag verweist auf eine XML-Datei, in der die von Ihrer App unterstützten Autofunktionen deklariert werden.

Wenn Sie angeben möchten, dass Sie eine Car App Library-App haben, fügen Sie dem Verzeichnis res/xml/ in Ihrem Android Automotive OS-Modul eine XML-Datei mit dem Namen automotive_app_desc.xml hinzu. Diese Datei sollte die folgenden Inhalte enthalten:

<automotiveApp>
    <uses name="template"/>
</automotiveApp>

CarAppService und CarAppActivity deklarieren

Wie bei Android Auto wird Ihre App auch bei Android Automotive OS mit Ihrer CarAppService-Implementierung ausgeführt. Eine Anleitung zum Implementieren und Deklarieren von CarAppService finden Sie unter CarAppService und Session erstellen und CarAppService deklarieren.

Im Gegensatz zu Android Auto müssen Sie eine zusätzliche Anwendungskomponente, die CarAppActivity, als Einstiegspunkt für Ihre Android Automotive OS-App einfügen. Die Implementierung dieser Aktivität ist im androidx.car.app:app-automotive-Artefakt enthalten und ist für die Kommunikation mit der Template-Host-Anwendung verantwortlich, um die Benutzeroberfläche Ihrer App zu rendern. Sie sollten nur eine Instanz dieser Aktivität in Ihrem Manifest haben und sie muss so deklariert werden:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

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

</activity>
  • android:name wird auf den vollständig qualifizierten Klassennamen der Klasse CarAppActivity aus dem Artefakt app-automotive festgelegt.
  • android:exported ist auf true festgelegt, da die Aktivität von einer anderen App als der eigenen (nämlich dem Launcher) gestartet werden muss.
  • android:launchMode ist auf singleTask gesetzt, sodass der Nutzer über den Launcher zur selben Instanz der Aktivität zurückkehren kann, wenn er die App verlässt.
  • android:theme ist auf @android:style/Theme.DeviceDefault.NoActionBar eingestellt, sodass die App den gesamten verfügbaren Bildschirm einnimmt.
  • Der Intent-Filter gibt an, dass dies die Launcher-Aktivität für die App ist.
  • Es gibt ein <meta-data>-Element, das dem Betriebssystem anzeigt, dass die App verwendet werden kann, während UX-Einschränkungen gelten, z. B. wenn sich das Fahrzeug in Bewegung befindet.

Für Navigations-Apps sind einige zusätzliche erforderliche Manifesteinträge für die CarAppActivity erforderlich, wie im folgenden Snippet gezeigt:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Include the category below ONLY for navigation apps -->
        <category android:name="android.intent.category.APP_MAPS" />
    </intent-filter>

    <!-- Include the intent-filter below ONLY for navigation apps -->
    <intent-filter>
        <action android:name="androidx.car.app.action.NAVIGATE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="geo" />
    </intent-filter>

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

</activity>
  • Mit der zusätzlichen Kategorie android.intent.category.APP_MAPS wird dem System mitgeteilt, dass Ihre App den Standort des Nutzers anzeigen kann.
  • Der Intent-Filter androidx.car.app.action.NAVIGATE sorgt dafür, dass Nutzer Ihre App verwenden können, wenn ein impliziter Navigations-Intent von einer anderen Auto-App verarbeitet wird.

Um die Nutzerfreundlichkeit Ihrer Vorlagen-App auf Android Automotive OS-Geräten zu verbessern, können Sie Ihrer CarAppActivity Unterstützung für Deeplinks hinzufügen. So können Nutzer Ihre App beispielsweise direkt über einen Browser oder über eine URL öffnen, die über Quick Share von einem Smartphone geteilt wurde.

Intent-Filter für Deeplinks hinzufügen

Damit das Betriebssystem weiß, dass Ihre App Deeplinks verarbeiten kann, müssen Sie die entsprechenden Intent-Filter im <activity>-Element für die CarAppActivity Ihrer App hinzufügen. Weitere Informationen finden Sie unter Intent-Filter für eingehende Links hinzufügen.

Für eine optimale Nutzererfahrung empfehlen wir, alle Deeplinks zu unterstützen, die von Ihrer mobilen App unterstützt werden und die von Ihrer In-Car-App sinnvoll unterstützt werden können.

Damit Ihre App Intents verarbeiten kann, muss sie Daten aus eingehenden Intents lesen. Dies gilt sowohl, wenn die Session Ihrer Auto-App während onCreateScreen() erstellt wird, als auch, wenn sie während onNewIntent() einen neuen Intent empfängt:

class MySession : Session() {
    // ...
    override fun onCreateScreen(intent: Intent): Screen {
        // Handle the intent when the app is being started for the first time
        return MyStartScreen(carContext)
    }

    override fun onNewIntent(intent: Intent) {
        // Handle the intent when the app is already running
    }
}

Weitere Überlegungen

Beachten Sie bei der Entwicklung Ihrer Android Automotive OS-App die folgenden weiteren Aspekte:

Paketnamen

Da Sie ein separates Android Package Kit (APK) für Android Automotive OS bereitstellen, können Sie den Paketnamen Ihrer mobilen App wiederverwenden oder einen neuen Paketnamen erstellen. Wenn Sie einen anderen Paketnamen verwenden, hat Ihre App zwei separate Google Play Store-Einträge. Wenn Sie Ihren aktuellen Paketnamen wiederverwenden, hat Ihre App auf beiden Plattformen nur einen Eintrag.

Das ist in erster Linie eine geschäftliche Entscheidung. Wenn Sie beispielsweise ein Team haben, das an der mobilen App arbeitet, und ein separates Team, das an Ihrer Android Automotive OS-App arbeitet, kann es sinnvoll sein, separate Paketnamen zu verwenden und jedes Team seinen eigenen Google Play Store-Eintrag verwalten zu lassen. Der technische Aufwand für die beiden Ansätze ist nicht sehr unterschiedlich.

In der folgenden Tabelle sind einige weitere wichtige Unterschiede zwischen der Beibehaltung des aktuellen Paketnamens und der Verwendung eines neuen Paketnamens zusammengefasst:

Funktion Derselbe Paketname Neuer Paketname
Store-Eintrag Single Mehrere
Gespiegelte Installation Ja: Schnelle Neuinstallation von Apps während des Einrichtungsassistenten Nein
Überprüfungsprozess im Google Play Store Rezensionen blockieren: Wenn die Rezension für ein APK fehlschlägt, werden andere APKs, die im selben Release eingereicht wurden, blockiert. Einzelne Rezensionen
Statistiken, Messwerte und Vitals Kombiniert: Sie können nach Gerätenamen für fahrzeugspezifische Daten filtern. Trennen
Indexierung und Suchranking Auf dem aktuellen Stand aufbauen Keine Übertragung
Einbindung in andere Apps Wahrscheinlich sind keine Änderungen erforderlich, sofern der Media-Code für beide APKs freigegeben ist. Möglicherweise muss die entsprechende App aktualisiert werden, z. B. für die URI-Wiedergabe mit Google Assistant.

Offline-Inhalt

Implementieren Sie gegebenenfalls die Offlineunterstützung in Ihrer App. Autos mit Android Automotive OS haben in der Regel eine eigene Datenverbindung. Das bedeutet, dass ein Datentarif im Preis des Fahrzeugs enthalten ist oder vom Nutzer bezahlt wird. Es wird jedoch auch erwartet, dass Autos eine variablere Konnektivität als Mobilgeräte haben.

Hier sind einige Punkte, die Sie bei der Entwicklung Ihrer Offline-Supportstrategie beachten sollten:

  • Die beste Zeit zum Herunterladen von Inhalten ist während der Nutzung Ihrer App.
  • Gehen Sie nicht davon aus, dass WLAN verfügbar ist. Ein Auto kommt möglicherweise nie in WLAN-Reichweite oder der Erstausrüster (Original Equipment Manufacturer, OEM) hat WLAN zugunsten eines Mobilfunknetzes deaktiviert.
  • Es ist in Ordnung, Inhalte, die Nutzer voraussichtlich verwenden werden, intelligent im Cache zu speichern. Wir empfehlen jedoch, dass Sie Nutzern die Möglichkeit geben, dieses Verhalten zu ändern.
  • Der Speicherplatz in Autos variiert. Bieten Sie Nutzern daher eine Möglichkeit, Offlineinhalte zu löschen.

Häufig gestellte Fragen

In den folgenden Abschnitten finden Sie Antworten auf einige häufig gestellte Fragen zu Android Automotive OS.

Gibt es Einschränkungen oder Empfehlungen für die Verwendung von SDKs und Bibliotheken von Drittanbietern?

Es gibt keine spezifischen Richtlinien für die Verwendung von Drittanbieter-SDKs und ‑Bibliotheken. Wenn Sie SDKs und Bibliotheken von Drittanbietern verwenden, sind Sie weiterhin dafür verantwortlich, dass alle Qualitätsanforderungen für Auto-Apps eingehalten werden.

Wie veröffentliche ich meine Android Automotive OS-App über die Google Play Console?

Weitere Informationen zum Veröffentlichen Ihrer Android Automotive OS-App über die Google Play Console finden Sie unter Für Autos bereitstellen.

Fehlerbehebung

Im Folgenden finden Sie Hilfe zu einigen häufigen Szenarien zur Fehlerbehebung unter Android Automotive OS.

  • Auch nach der Deinstallation einer Car App Library-App über die Systemeinstellungen erhalte ich beim Installieren einer neuen Version eine Fehlermeldung.

    Verwenden Sie den Befehl adb uninstall app.package.name, um sicherzugehen, dass die App deinstalliert wurde.