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. Sie können fast allen Code und alle Ressourcen Ihrer bestehenden Android Auto-App verwenden. Sie müssen jedoch einen separaten Build erstellen, der die auf dieser Seite beschriebenen Anforderungen erfüllt.

Damit Ihre Auto-App unter Android Automotive OS ausgeführt werden kann, benötigen Sie den neuesten Templates Host, der als System-App bereitgestellt wird.

Entwicklung – Übersicht

Die Unterstützung von Android Automotive OS lässt sich mit wenigen Schritten hinzufügen, wie in den Abschnitten auf dieser Seite beschrieben:

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

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

Automodul erstellen

Für einige Komponenten von Android Automotive OS, z. B. das Manifest, gelten platformspezifische Anforderungen. Erstellen Sie ein Modul, mit dem der Code für diese Komponenten von anderen Code in Ihrem Projekt getrennt werden kann, z. B. vom Code für Ihre Smartphone-App.

So fügen Sie einem vorhandenen Projekt ein Automotive-Modul hinzu:

  1. Klicken Sie in Android Studio auf File > New > New Module.
  2. Wählen Sie Automotive Module (Automobilmodul) aus und klicken Sie auf Weiter.
  3. Geben Sie einen Namen für die Anwendung/Bibliothek an. Das ist der Name, den Nutzer für Ihre App unter Android Automotive OS sehen.
  4. Geben Sie einen Modulnamen ein.
  5. Bearbeiten Sie den Paketnamen so, dass er mit 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, verwenden Android 10 API-Level 29 oder höher. Wenn Sie diesen Wert auswählen, wird Ihre App also auf alle kompatiblen Autos ausgerichtet.

  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 (Datei > Neu > Neues Projekt).
  2. Wählen Sie Automotive als Project Type aus.
  3. Wählen Sie Keine Aktivität aus und klicken Sie auf Weiter.
  4. Geben Sie einen Namen für Ihr Projekt ein. 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, verwenden Android 10 API-Level 29 oder höher. Wenn Sie diesen Wert auswählen, wird Ihre App also auf alle kompatiblen Autos ausgerichtet.

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

<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 Element uses-feature, das die Unterstützung für Android Automotive OS deklariert. Beachten Sie, dass im Manifest keine Aktivitäten deklariert sind.

Fügen Sie Ihrem Manifest als Nächstes die folgenden uses-feature-Elemente hinzu:

<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" />
    <uses-feature
        android:name="android.software.car.templates_host"
        android:required="true" />

    <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" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

</manifest>

Das erste uses-feature-Element gibt an, dass Ihre App den Templates-Host verwendet. Wenn Sie die verbleibenden vier uses-feature-Elemente explizit auf required="false" festlegen, wird verhindert, dass Ihre App mit verfügbaren Hardwarefunktionen auf Android Automotive OS-Geräten in Konflikt gerät.

Gradle-Abhängigkeiten aktualisieren

Sie müssen in Ihrem Automotive-Modul eine Abhängigkeit vom androidx.car.app:app-automotive-Artefakt hinzufügen, das die CarAppActivity-Implementierung enthält, 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 platzieren, das Sie für Ihre mobilen und Automotive-Module gemeinsam verwenden. Wenn Sie diesen Ansatz verwenden, müssen Sie Ihr Automotive-Modul aktualisieren, um das freigegebene Modul mithilfe der Projektabhängigkeiten von Gradle einzubinden, 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

Verwenden Sie den folgenden Manifesteintrag, um anzugeben, 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 bezieht sich auf eine XML-Datei, in der die von Ihrer App unterstützten Funktionen für die Automobilbranche 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 Folgendes enthalten:

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

CarAppService und CarAppActivity deklarieren

Wie bei Android Auto wird in Android Automotive OS Ihre CarAppService-Implementierung verwendet, um Ihre App auszuführen. Eine Anleitung zum Implementieren und Deklarieren Ihrer CarAppService finden Sie unter CarAppService und Sitzung erstellen und CarAppService deklarieren.

Im Gegensatz zu Android Auto müssen Sie eine zusätzliche Anwendungskomponente, die CarAppActivity, einbinden, die als Einstiegspunkt für Ihre Android Automotive OS-App dient. Die Implementierung dieser Aktivität ist im androidx.car.app:app-automotive-Artefakt enthalten und ist für die Kommunikation mit der Vorlagen-Hostanwendung zum Rendern der Benutzeroberfläche Ihrer App verantwortlich. Ihr Manifest sollte nur eine Instanz dieser Aktivität enthalten. Sie muss folgendermaßen 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 ist auf den vollständig qualifizierten Klassennamen der CarAppActivity-Klasse aus dem app-automotive-Artefakt festgelegt.
  • android:exported ist auf true festgelegt, da die Aktivität von einer anderen App als der eigenen gestartet werden muss (nämlich vom Launcher).
  • android:launchMode ist auf singleTask festgelegt, damit der Nutzer über den Launcher zur selben Instanz der Aktivität zurückkehren kann, wenn er sie verlässt.
  • android:theme ist auf @android:style/Theme.DeviceDefault.NoActionBar festgelegt, 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.
  • Das Element <meta-data> gibt dem Betriebssystem an, 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 weitere Manifesteinträge für die CarAppActivity erforderlich, wie im folgenden Snippet dargestellt:

<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>
  • Die zusätzliche Kategorie android.intent.category.APP_MAPS informiert das System darüber, dass Ihre App den Standort des Nutzers anzeigen kann.
  • Mit dem Intent-Filter androidx.car.app.action.NAVIGATE können Nutzer Ihre App verwenden, wenn sie eine implizite Navigationsabsicht aus einer anderen Auto-App verarbeiten.

Weitere Überlegungen

Beachten Sie bei der Entwicklung Ihrer Android Automotive OS-App außerdem Folgendes:

Paketnamen

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

Das ist in erster Linie eine geschäftliche Entscheidung. Wenn beispielsweise ein Team an der mobilen App und ein anderes an der Android Automotive OS-App arbeitet, kann es sinnvoll sein, separate Paketnamen zu verwenden und jedes Team seinen eigenen 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 dem Beibehalten des aktuellen Paketnamens und der Verwendung eines neuen Paketnamens zusammengefasst:

Funktion Gleicher Paketname Neuer Paketname
Store-Eintrag Single Mehrere
Gespiegelte Installation Ja: Schnelle Neuinstallation der App während des Einrichtungsassistenten Nein
Play Store-Überprüfungsprozess Blockierung von Überprüfungen: Wenn die Überprüfung für ein APK fehlschlägt, werden auch andere APKs blockiert, die im selben Release eingereicht wurden. Individuelle Rezensionen
Statistiken, Messwerte und Vitaldaten Kombiniert: Sie können nach Gerätenamen nach fahrzeugspezifischen Daten filtern. Aufheben
Indexierung und Suchrang Auf dem aktuellen Stand aufbauen Kein Übertrag
Einbindung in andere Apps Höchstwahrscheinlich sind keine Änderungen erforderlich, vorausgesetzt, der Mediencode wird von beiden APKs gemeinsam verwendet. Möglicherweise muss die entsprechende App aktualisiert werden, z. B. für die URI-Wiedergabe mit Google Assistant.

Offlineinhalte

Implementieren Sie gegebenenfalls die Offlineunterstützung in Ihrer App. Autos mit Android Automotive OS haben voraussichtlich eine eigene Datenverbindung, d. h., ein Datentarif ist in den Kosten des Fahrzeugs enthalten oder wird vom Nutzer bezahlt. Autos sollen jedoch auch eine variablere Konnektivität als Mobilgeräte haben.

Folgende Punkte sollten Sie bei der Offline-Supportstrategie beachten:

  • Inhalte sollten am besten heruntergeladen werden, während Ihre App verwendet wird.
  • Gehen Sie nicht davon aus, dass WLAN verfügbar ist. Ein Auto befindet sich möglicherweise nie in Reichweite eines WLANs oder der OEM hat das WLAN zugunsten eines Mobilfunknetzes deaktiviert.
  • Es ist in Ordnung, Inhalte, die Sie von Nutzern erwarten, intelligent im Cache zu speichern. Wir empfehlen jedoch, den Nutzern die Möglichkeit zu geben, dieses Verhalten zu ändern.
  • Der Speicherplatz in Autos ist unterschiedlich. Bieten Sie Nutzern daher die 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 SDKs und Bibliotheken von Drittanbietern. Wenn Sie SDKs und Bibliotheken von Drittanbietern verwenden, sind Sie dennoch für die Einhaltung aller Qualitätsanforderungen für Auto-Apps verantwortlich.

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

Weitere Informationen zur Veröffentlichung Ihrer Android Automotive OS-App über die Google Play Console finden Sie unter Über Autos vertreiben.

Fehlerbehebung

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

  • Auch nachdem ich eine App aus der Car App Library aus den Systemeinstellungen deinstalliert habe, erhalte ich beim Versuch, eine neue Version zu installieren, eine Fehlermeldung.

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