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

Mit Android Automotive OS können Nutzer Apps in ihrem Auto installieren. Wenn Sie Nutzer auf dieser Plattform erreichen möchten, müssen Sie eine für Autofahrer optimierte App anbieten, die mit Android Automotive OS kompatibel ist. Sie können fast den gesamten Code und alle Ressourcen in Ihrer Android Auto App wiederverwenden. Sie müssen jedoch einen separaten Build erstellen, der die auf dieser Seite beschriebenen Anforderungen erfüllt.

Wenn du deine Auto-App unter Android Automotive OS ausführen möchtest, benötigst du den neuesten Vorlagenhost, der als System-App verfügbar ist.

Überblick über die Entwicklung

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

  1. Fahrzeugmodul 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, um sicherzustellen, dass alle Automotive OS-Funktionen aktiviert sind.

Modul für die Automobilbranche erstellen

Einige Komponenten von Android Automotive OS, wie das Manifest, haben plattformspezifische Anforderungen. Erstellen Sie ein Modul, das den Code für diese Komponenten vom anderen Code in Ihrem Projekt getrennt halten kann, z. B. den Code für Ihre Telefon-App.

So fügen Sie bei 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. Dies ist der Name, den Nutzer unter Android Automotive OS für deine App sehen.
  4. Geben Sie einen Modulnamen ein.
  5. Bearbeiten Sie den Paketnamen so, dass er mit dem Ihrer vorhandenen App übereinstimmt.
  6. Wählen Sie API 29: Android 10 (Q) als Minimum SDK (Mindest-SDK) aus und klicken Sie dann auf Weiter. Alle Autos, die die Auto-App-Bibliothek unter Android Automotive OS unterstützen, werden unter Android 10 API-Level 29 oder höher ausgeführt. Wenn Sie diesen Wert auswählen, werden alle kompatiblen Autos ausgewählt.

  7. Wählen Sie Add No Activity (Keine Aktivität hinzufügen) aus und klicken Sie dann auf Finish (Fertigstellen).

Wenn Sie ein neues Projekt starten:

  1. Klicken Sie in Android Studio auf File > New > New Project.
  2. Wählen Sie als Projekttyp die Option Automotive aus.
  3. Wählen Sie Keine Aktivitäten aus und klicken Sie auf Weiter.
  4. Geben Sie einen Namen für Ihr Projekt an. Dies ist der Name, den Nutzer für deine 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) als Minimum SDK (Mindest-SDK) aus und klicken Sie dann auf Weiter.

    Alle Autos, die die Auto-App-Bibliothek unter Android Automotive OS unterstützen, werden unter Android 10 API-Level 29 oder höher ausgeführt. Wenn Sie diesen Wert auswählen, werden alle kompatiblen Autos ausgewählt.

Nachdem du das Modul in Android Studio erstellt hast, öffne die Datei AndroidManifest.xml in deinem neuen Automodul:

<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 standardmäßige App-Informationen sowie ein uses-feature-Element, das die Unterstützung für Android Automotive OS deklariert. Im Manifest sind keine Aktivitäten deklariert.

Füge als Nächstes deinem Manifest 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 deklariert, dass deine Anwendung den Vorlagenhost für die Ausführung verwendet. Wenn du die übrigen vier uses-feature-Elemente explizit auf required="false" setzt, stelle sicher, dass deine App nicht mit verfügbaren Hardwarefunktionen auf Android Automotive OS-Geräten in Konflikt steht.

Gradle-Abhängigkeiten aktualisieren

Innerhalb deines Automoduls musst du eine Abhängigkeit vom androidx.car.app:app-automotive-Artefakt hinzufügen, das die CarAppActivity-Implementierung enthält, die für die Ausführung deiner App unter Android Automotive OS erforderlich ist.

Wenn du deine App so entwickelst, dass sie sowohl Android Auto als auch das Android Automotive OS unterstützt, empfehlen wir dir, CarAppService in einem separaten Modul zu speichern, das du für deine Mobil- und Automodule verwendest. Wenn Sie diesen Ansatz verwenden, müssen Sie das Automobilmodul so aktualisieren, dass es das freigegebene Modul mithilfe der Projektabhängigkeiten von Gradle enthält, wie im folgenden Snippet gezeigt:

Groovig

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

Erklären Sie mit dem folgenden Manifesteintrag, 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 Fahrzeugfunktionen deklariert werden, die von deiner Anwendung unterstützt werden.

Wenn Sie angeben möchten, dass Sie eine Auto-App-Bibliothek-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 den folgenden Inhalt enthalten:

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

„CarAppService“ und „CarAppActivity“ deklarieren

Wie bei Android Auto verwendet Android Automotive OS deine CarAppService-Implementierung zur Ausführung deiner App. Eine Anleitung zum Implementieren und Deklarieren von CarAppService findest du unter CarAppService und Sitzung erstellen und CarAppService deklarieren.

Im Gegensatz zu Android Auto musst du eine zusätzliche Anwendungskomponente, CarAppActivity, einfügen, die als Einstiegspunkt für deine 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 Vorlagenhost-App verantwortlich, um die UI deiner App zu rendern. Ihr Manifest sollte nur eine Instanz dieser Aktivität enthalten, die so deklariert werden muss:

<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 voll qualifizierten Klassennamen der Klasse CarAppActivity aus dem Artefakt app-automotive festgelegt.
  • android:exported ist auf true gesetzt, da die Aktivität von einer anderen App als sich selbst (also dem Launcher) gestartet werden kann.
  • android:launchMode ist auf singleTask gesetzt, damit der Nutzer vom Launcher zur selben Instanz der Aktivität zurückkehren kann, wenn er die Seite verlässt.
  • android:theme ist auf @android:style/Theme.DeviceDefault.NoActionBar gesetzt, damit die App den verfügbaren Vollbildmodus auf dem Bildschirm einnimmt.
  • Der Intent-Filter gibt an, dass es sich um die Launcher-Aktivität für die App handelt.
  • Ein <meta-data>-Element gibt dem Betriebssystem an, dass die App genutzt werden kann, wenn UX-Einschränkungen gelten, z. B. wenn das Fahrzeug in Bewegung ist.

Bei Navigationsanwendungen gibt es weitere erforderliche Manifesteinträge für den CarAppActivity, 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>
  • Durch die zusätzliche Kategorie android.intent.category.APP_MAPS wird das System darüber informiert, dass deine App den Standort des Nutzers anzeigen kann.
  • Mit dem Intent-Filter androidx.car.app.action.NAVIGATE wird sichergestellt, dass Nutzer deine App verwenden können, wenn sie einen impliziten Navigations-Intent von einer anderen Auto-App verarbeiten.

Weitere Überlegungen

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

Paketnamen

Da Sie ein separates Android Package Kit (APK) für Android Automotive OS vertreiben, 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 den aktuellen Paketnamen wiederverwenden, hat Ihre Anwendung 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 separates Team an Ihrer Android Automotive OS-App arbeitet, kann es sinnvoll sein, separate Paketnamen zu verwenden und jedem Team die Möglichkeit zu geben, seinen eigenen Play Store-Eintrag zu verwalten. Es gibt keinen großen Unterschied hinsichtlich des technischen Aufwands, der für die Verwendung beider Ansätze erforderlich ist.

In der folgenden Tabelle sind einige andere wichtige Unterschiede zusammengefasst, die zwischen der Beibehaltung des aktuellen Paketnamens oder der Verwendung eines neuen Paketnamens bestehen:

Funktion Derselbe Paketname Neuer Paketname
Store-Eintrag Single Mehrere
Gespiegelte Installation Ja: schnelle App-Neuinstallation während des Einrichtungsassistenten Nein
Play Store-Überprüfungsprozess Rezensionen blockieren: Wenn die Überprüfung bei einem APK fehlschlägt, werden andere APKs, die im selben Release eingereicht wurden, blockiert. Einzelne Rezensionen
Statistiken, Messwerte und Vitals Kombiniert: Sie können für automobilspezifische Daten nach Gerätenamen filtern. Aufheben
Indexierung und Suchranking Aktuellen Stand aufbauen Kein Übertrag
In andere Apps integrieren Höchstwahrscheinlich sind keine Änderungen erforderlich, vorausgesetzt, dass der Mediencode für beide APKs freigegeben ist Möglicherweise muss die entsprechende App aktualisiert werden, z. B. für die URI-Wiedergabe mit Google Assistant.

Offlineinhalte

Implementieren Sie gegebenenfalls Offline-Unterstützung in Ihrer App. Autos mit Android Automotive OS müssen eine eigene Datenverbindung haben, d. h., ein Datentarif ist in den Kosten des Fahrzeugs enthalten oder wird vom Nutzer bezahlt. Allerdings wird davon ausgegangen, dass Autos die Konnektivität häufiger als andere Mobilgeräte nutzen.

Bei der Planung Ihrer Offline-Supportstrategie sollten Sie Folgendes beachten:

  • Inhalte sollten am besten während der Verwendung der App heruntergeladen werden.
  • Gehen Sie nicht davon aus, dass WLAN verfügbar ist. Es kann vorkommen, dass ein Auto nie in die WLAN-Reichweite gelangt oder der Erstausrüster (Original Equipment Manufacturer, OEM) das WLAN zugunsten eines Mobilfunknetzes deaktiviert hat.
  • Inhalte, von denen Sie erwarten, dass sie von Nutzern verwendet werden, können zwar intelligent im Cache gespeichert werden, wir empfehlen jedoch, dass Nutzer dieses Verhalten ändern.
  • Der Speicherplatz in Autos variiert. Daher sollten Sie Nutzern die Möglichkeit bieten, Offline-Inhalte 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 speziellen Richtlinien für die Verwendung von SDKs und Bibliotheken von Drittanbietern. Auch wenn du SDKs und Bibliotheken von Drittanbietern verwendest, musst du alle Qualitätsanforderungen für Auto-Apps erfüllen.

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

Die Veröffentlichung einer App ähnelt der Veröffentlichung einer Smartphone-App, allerdings wird ein anderer Formfaktor verwendet. So aktivieren Sie den Release-Typ Android Automotive OS für Ihre App:

  1. Öffnen Sie die Play Console.
  2. Wählen Sie Ihre App aus.
  3. Wählen Sie im Menü auf der linken Seite Release > Einrichten > Erweiterte Einstellungen > Formfaktoren aus.
  4. Wähle Formfaktor hinzufügen > Android Automotive OS aus und folge der Anleitung in der Play Console.

Fehlerbehebung

Im Folgenden finden Sie Informationen zu einigen häufigen Fehlerbehebungsszenarien unter Android Automotive OS.

  • Auch nachdem ich eine Auto-App-Bibliothek-App über die Systemeinstellungen deinstalliert habe, erhalte ich eine Fehlermeldung, wenn ich versuche, eine neue Version zu installieren.

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