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

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

Damit du deine Auto-App unter Android Automotive OS ausführen kannst, benötigst du die neueste Templates Host, eine Systemanwendung.

Entwicklungsübersicht

Die Unterstützung für Android Automotive OS ist in wenigen Schritten die in den Abschnitten auf dieser Seite beschrieben werden:

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

Verwende Android Studio Bumblebee oder höher, dass alle Automotive OS-Funktionen aktiviert sind.

Automobilmodul erstellen

Einige Komponenten von Android Automotive OS, wie das Manifest, haben plattformspezifischen Anforderungen. Erstellen Sie ein Modul, das die für diese Komponenten getrennt von anderem Code in Ihrem Projekt, wie z. B. der für Ihre Telefon-App verwendet wird.

Führen Sie bei einem bestehenden Projekt die folgenden Schritte aus, um ein Automobilmodul zu Ihrem Projekt:

  1. Klicken Sie in Android Studio auf File > Neu > Neues Modul.
  2. Wählen Sie Automotive Module aus und klicken Sie auf Next.
  3. Geben Sie einen Anwendungs-/Bibliotheksnamen an. Dies ist der Name, den Nutzer für für Android Automotive OS optimieren.
  4. Geben Sie einen Modulnamen ein.
  5. Bearbeiten Sie den Paketnamen so, dass er mit dem Namen Ihrer vorhandenen App übereinstimmt.
  6. Wählen Sie als Minimum SDK die Option API 29: Android 10 (Q) aus und klicken Sie dann auf Weiter. Alle Autos, die die Auto-App-Mediathek unter Android Automotive OS unterstützen, laufen auf Android 10 API-Level 29 oder höher. Wenn Sie diesen Wert auswählen, wird daher eine Ausrichtung auf alle kompatiblen Fahrzeugen.

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

Wenn Sie ein neues Projekt starten:

  1. Klicken Sie in Android Studio auf File > Neu > Neues Projekt.
  2. Wählen Sie Automotive als Projekttyp aus.
  3. Wählen Sie Keine Aktivität aus und klicken Sie auf Weiter.
  4. Geben Sie einen Namen für Ihr Projekt an. Dies ist der Name, den Nutzer für Ihre für Android Automotive OS.
  5. Geben Sie einen Paketnamen ein. Weitere Informationen finden Sie im Abschnitt Paketnamen. finden Sie weitere Informationen zur Auswahl eines Paketnamens.
  6. Wählen Sie als Minimum SDK die Option API 29: Android 10 (Q) aus und klicken Sie dann auf Weiter.

    Alle Autos, die die Auto-App-Mediathek unter Android Automotive OS unterstützen, laufen auf Android 10 API-Level 29 oder höher. Wenn Sie diesen Wert auswählen, wird daher eine Ausrichtung auf alle kompatiblen Fahrzeugen.

Nachdem du das Modul in Android Studio erstellt hast, öffne das AndroidManifest.xml in Ihrem neuen Automotive-Modul an:

<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 Standard-App-Informationen sowie eine uses-feature , das die Unterstützung von Android Automotive OS deklariert. Beachten Sie, dass es keine im Manifest deklarierten Aktivitäten 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 deine App den Templates Host verwendet ausgeführt werden soll. Die restlichen vier uses-feature-Elemente werden explizit auf required="false" sorgt dafür, dass deine App nicht mit verfügbaren Hardwarefunktionen in Konflikt steht für Android Automotive OS-Geräte.

Gradle-Abhängigkeiten aktualisieren

Innerhalb Ihres Automotive-Moduls müssen Sie eine Abhängigkeit vom androidx.car.app:app-automotive Artefakt, Dazu gehört die CarAppActivity-Implementierung, die für die Ausführung Ihrer App erforderlich ist. für Android Automotive OS.

Wenn Sie Ihre App so entwickeln, dass sie sowohl Android Auto als auch Android unterstützt Automotive OS empfehlen wir, CarAppService in einem separaten die Sie für Ihre mobilen und Automobilmodule nutzen. Wenn Sie Bei diesem Ansatz müssen Sie Ihr Automotive-Modul so aktualisieren, dass es freigegebenes Modul mit den Projektabhängigkeiten von Gradle , wie im folgenden Snippet gezeigt:

Cool

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äre mit dem folgenden Manifesteintrag, dass deine App Android Automotive OS:

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

Dieser Manifesteintrag verweist auf eine XML-Datei, in der das Automotive-Objekt deklariert die Ihre App unterstützt.

Um anzugeben, dass Sie eine Auto-App-Bibliothek-App haben, fügen Sie eine XML-Datei namens automotive_app_desc.xml zum Verzeichnis res/xml/ in dein Android Automotive OS-Modul. Diese Datei sollte folgenden Inhalt enthalten:

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

„CarAppService“ und „CarAppActivity“ deklarieren

Wie bei Android Auto verwendet Android Automotive OS deine CarAppService um Ihre App auszuführen. Weitere Informationen finden Sie unter CarAppService und Sitzung erstellen und CarAppService deklarieren für Anleitungen zum Implementieren und Deklarieren der CarAppService.

Anders als bei Android Auto müssen Sie eine zusätzliche App-Komponente hinzufügen, das CarAppActivity, das als Einstiegspunkt für dein Android Automotive OS dient Die Implementierung dieser Aktivität ist im Artefakt androidx.car.app:app-automotive und ist für die Kommunikation mit der Vorlagen-Hostanwendung, um die Benutzeroberfläche der App zu rendern. Sie sollten nur eine Instanz dieser Aktivität in deinem Manifest, die als folgt:

<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 des CarAppActivity festgelegt. Klasse aus dem Artefakt app-automotive.
  • android:exported ist auf true gesetzt, da die Aktivität von einem eine andere App als sich selbst (also den Launcher).
  • android:launchMode ist auf singleTask gesetzt, sodass der Nutzer zu derselben Instanz der Aktivität aus dem Launcher, wenn sie die Seite verlassen
  • android:theme ist auf @android:style/Theme.DeviceDefault.NoActionBar gesetzt, dass die App den gesamten verfügbaren Platz einnimmt.
  • Der Intent-Filter gibt an, dass dies die Launcher-Aktivität für die App ist.
  • Ein <meta-data>-Element gibt dem Betriebssystem an, dass die App während UX-Einschränkungen gelten, z. B. wenn sich das Fahrzeug in Bewegung.

Für Navigations-Apps gibt es noch einige weitere Erforderliche Manifesteinträge für CarAppActivity, wie unten gezeigt snippet:

<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ätzlichen android.intent.category.APP_MAPS informiert das System darüber, dass in Ihrer App der Standort des Nutzers angezeigt werden kann.
  • Mit dem Intent-Filter androidx.car.app.action.NAVIGATE wird sichergestellt, dass Nutzer die Option zur Verwendung Ihrer App bei der Verarbeitung eines impliziten Navigations-Intents aus eine andere Auto-App.

Weitere Überlegungen

Behalte bei der Entwicklung von Android Automotive die folgenden Punkte im Hinterkopf Betriebssystem-App:

Paketnamen

Da Sie ein separates Android Package Kit (APK) für Android Automotive OS vertreiben, können Sie Paketnamen aus Ihrer mobilen App wiederverwenden oder ein neues Paket erstellen Namen. Wenn Sie einen anderen Paketnamen verwenden, hat Ihre App zwei separate Play Store- Einträge. Wenn du deinen aktuellen Paketnamen wieder verwendest, hat deine App einen einen einzigen Eintrag auf beiden Plattformen erstellen.

Dies ist in erster Linie eine geschäftliche Entscheidung. Wenn Sie z. B. ein Team haben, die mobile App und ein eigenes Team, das an Android Automotive arbeitet Betriebssystem-App verwenden, ist es sinnvoll, separate Paketnamen zu haben und jedes eigenen Play Store-Eintrag verwaltet. Es gibt keinen großen Unterschied bei der technischen Aufwand erfordern, um einen der beiden Ansätze zu verwenden.

In der folgenden Tabelle sind einige andere wichtige Unterschiede zwischen dem Beibehalten Ihres aktuellen Pakets zusammengefasst oder einen neuen Paketnamen verwenden:

Funktion Gleicher 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 für ein APK oder andere APKs fehlschlägt die im selben Release eingereicht wurden, Einzelne Rezensionen
Statistiken, Messwerte und wichtige Daten Kombiniert: Sie können nach Gerätenamen filtern, Daten. Aufheben
Indexierung und Suchranking Auf dem aktuellen Stand aufbauen Keine Übertragung
Integration in andere Apps Höchstwahrscheinlich sind keine Änderungen erforderlich, vorausgesetzt, der Mediencode wird von beiden APKs gemeinsam verwendet Eventuell muss die entsprechende App aktualisiert werden, z. B. für die URI-Wiedergabe mit Google Assistant.

Offlineinhalte

Implementieren Sie gegebenenfalls Offlinesupport in Ihrer App. Autos mit Android Automotive Betriebssystem muss eine eigene Datenverbindung haben, d. h. Datentarif ist in den Kosten des Fahrzeugs enthalten oder wird vom Nutzer bezahlt. Sie können jedoch Außerdem ist die Konnektivität bei Autos erwartungsgemäß geringer als bei Mobilgeräten.

Hier sind ein paar Dinge, die Sie beachten sollten, wenn Sie Ihren Offline-Support in Betracht ziehen Strategie:

  • Der beste Zeitpunkt zum Herunterladen von Inhalten ist, wenn die App verwendet wird.
  • Gehen Sie nicht davon aus, dass WLAN verfügbar ist. Ein Auto kommt vielleicht nie in Reichweite des WLANs, oder der Erstausrüster (Original Equipment Manufacturer, OEM) hat möglicherweise WLAN zugunsten eines Mobilfunknetzes deaktiviert.
  • Es ist zwar in Ordnung, Inhalte, die die Nutzer erwarten, intelligent im Cache zu speichern verwenden, empfehlen wir Ihnen, dem Nutzer die Änderung zu überlassen.
  • Der Speicherplatz auf dem Auto ist unterschiedlich, daher sollten Nutzer die Möglichkeit haben, von Offline-Inhalten.

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 Sie SDKs und Bibliotheken von Drittanbietern verwenden, zur Erfüllung aller Qualitätsanforderungen an Auto-Apps.

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

Die App-Veröffentlichung ähnelt der Veröffentlichung einer Telefon-App. Sie verwenden einen anderen Formfaktor. So aktivieren Sie die Verwendung von Android Automotive in Ihrer App: Versionstyp des Betriebssystems gehen Sie so vor:

  1. Öffnen Sie die Play Console.
  2. Wählen Sie Ihre App aus.
  3. Wähle im Menü auf der linken Seite Release > Einrichtung > Erweiterte Einstellungen > Formular Faktoren.
  4. Wählen Sie Formfaktor hinzufügen > Android Automotive OS und folgen Sie dann den in der Play Console.

Fehlerbehebung

Im Folgenden finden Sie Informationen zu einigen gängigen Szenarien zur Fehlerbehebung. für Android Automotive OS.

  • Auch nach der Deinstallation einer Car App Library App über die Systemeinstellungen Beim Versuch, eine neue Version zu installieren, erhalte ich eine Fehlermeldung.

    Um sicherzustellen, dass die App deinstalliert wird, verwenden Sie den Befehl adb uninstall app.package.name