Dodaj obsługę systemu operacyjnego Android Automotive do swojej aplikacji na podstawie szablonu

System operacyjny Android Automotive umożliwia użytkownikom instalowanie aplikacji w samochodzie. Aby dotrzeć do użytkowników tej platformy, musisz rozpowszechniać aplikację zoptymalizowaną pod kątem kierowcy, zgodną z systemem operacyjnym Android Automotive. Możesz ponownie wykorzystać prawie cały kod i zasoby w aplikacji Android Auto, ale musisz utworzyć oddzielną kompilację, która spełnia wymagania opisane na tej stronie.

Aby uruchomić aplikację samochodową w systemie operacyjnym Android Automotive, musisz mieć najnowszą wersję składnika Templates Host, który jest aplikacją systemową.

Omówienie procesu tworzenia

Dodanie obsługi systemu operacyjnego Android Automotive wymaga tylko kilku czynności, które opisujemy w sekcjach na tej stronie:

  1. Tworzenie modułu motoryzacyjnego
  2. Deklarowanie obsługi systemu operacyjnego Android Automotive
  3. Zadeklaruj CarAppServiceCarAppActivity
  4. Aktualizowanie zależności Gradle

Używaj Androida Studio Bumblebee lub nowszego, aby mieć pewność, że wszystkie funkcje Automotive OS są włączone.

Tworzenie modułu motoryzacyjnego

Niektóre komponenty systemu operacyjnego Android Automotive, takie jak plik manifestu, mają wymagania specyficzne dla platformy. Utwórz moduł, który będzie przechowywać kod tych komponentów oddzielnie od innego kodu w projekcie, np. kodu używanego w aplikacji na telefon.

Aby dodać moduł motoryzacyjny do istniejącego projektu:

  1. W Android Studio kliknij Plik > Nowy > Nowy moduł.
  2. Kliknij kolejno Moduł motoryzacyjnyDalej.
  3. Podaj nazwę aplikacji lub biblioteki. Jest to nazwa, którą użytkownicy widzą w przypadku Twojej aplikacji w systemie operacyjnym Android Automotive.
  4. Wpisz nazwę modułu.
  5. Zmień nazwę pakietu, aby pasowała do istniejącej aplikacji.
  6. W sekcji Minimalny pakiet SDK wybierz API 29: Android 10 (Q), a potem kliknij Dalej. Wszystkie samochody, które obsługują bibliotekę aplikacji samochodowych w systemie operacyjnym Android Automotive, działają na Androidzie 10 (API na poziomie 29) lub nowszym, więc wybranie tej wartości spowoduje kierowanie na wszystkie zgodne samochody.

  7. Kliknij Add No Activity (Dodaj brak aktywności), a następnie Finish (Zakończ).

Jeśli rozpoczynasz nowy projekt:

  1. W Android Studio kliknij Plik > Nowy > Nowy projekt.
  2. W sekcji Typ projektu wybierz Automotive.
  3. Kliknij kolejno Brak aktywnościDalej.
  4. Podaj nazwę projektu. Jest to nazwa, którą użytkownicy widzą w przypadku Twojej aplikacji w systemie operacyjnym Android Automotive.
  5. Wpisz nazwę pakietu. Więcej informacji o wybieraniu nazwy pakietu znajdziesz w sekcji Nazwy pakietów.
  6. W sekcji Minimalny pakiet SDK wybierz API 29: Android 10 (Q), a potem kliknij Dalej.

    Wszystkie samochody, które obsługują bibliotekę aplikacji samochodowych w systemie operacyjnym Android Automotive, działają na Androidzie 10 (API na poziomie 29) lub nowszym, więc wybranie tej wartości spowoduje kierowanie na wszystkie zgodne samochody.

Po utworzeniu modułu w Android Studio otwórz plik AndroidManifest.xml w nowym module samochodowym:

<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>

Element <application> zawiera standardowe informacje o aplikacji, a także element <uses-feature>, który deklaruje obsługę systemu operacyjnego Android Automotive. Pamiętaj, że w pliku manifestu nie zadeklarowano żadnych działań.

Deklarowanie wymagań dotyczących funkcji

Następnie dodaj do pliku manifestu ten element uses-feature, aby wskazać, że do prawidłowego działania wymaga on hosta szablonu:

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

Upewnij się też, że Twoja aplikacja spełnia wymagania dotyczące funkcji w Google Play, które obowiązują w przypadku wszystkich aplikacji tworzonych na system operacyjny Android Automotive.

Aktualizowanie zależności Gradle

W module samochodowym musisz dodać zależność od artefaktu androidx.car.app:app-automotive, który zawiera implementację CarAppActivity wymaganą do uruchomienia aplikacji w systemie operacyjnym Android Automotive.

Jeśli tworzysz aplikację, która ma obsługiwać zarówno Androida Auto, jak i Androida Automotive OS, zalecamy umieszczenie CarAppService w osobnym module, który będzie współdzielony przez moduły mobilne i samochodowe. Jeśli korzystasz z tego podejścia, musisz zaktualizować moduł samochodowy, aby uwzględniał moduł udostępniony za pomocą zależności projektu Gradle, jak pokazano w tym fragmencie kodu:

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"))
    }
}

Deklarowanie obsługi systemu operacyjnego Android Automotive

Aby zadeklarować, że aplikacja obsługuje system operacyjny Android Automotive, użyj tego wpisu w pliku manifestu:

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

Ten wpis w pliku manifestu odnosi się do pliku XML, który deklaruje funkcje motoryzacyjne obsługiwane przez aplikację.

Aby wskazać, że masz aplikację z biblioteki aplikacji do samochodu, dodaj plik XML o nazwie automotive_app_desc.xml do katalogu res/xml/ w module systemu operacyjnego Android Automotive. Ten plik powinien zawierać te informacje:

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

Deklarowanie CarAppService i CarAppActivity

Podobnie jak w przypadku Androida Auto, system operacyjny Android Automotive używa Twojej CarAppServiceimplementacji do uruchamiania aplikacji. Instrukcje dotyczące implementowania i deklarowania CarAppServiceznajdziesz w artykułach Tworzenie usługi CarAppService i sesjiDeklarowanie usługi CarAppService.

W przeciwieństwie do Androida Auto musisz uwzględnić dodatkowy komponent aplikacji, CarAppActivity, który będzie służyć jako punkt wejścia aplikacji na system operacyjny Android Automotive. Implementacja tego działania jest zawarta w artefakcie androidx.car.app:app-automotive i odpowiada za komunikację z aplikacją hosta szablonu w celu renderowania interfejsu aplikacji. W pliku manifestu powinna znajdować się tylko jedna instancja tego działania, która musi być zadeklarowana w ten sposób:

<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 jest ustawiona na pełną i jednoznaczną nazwę klasy CarAppActivity z artefaktu app-automotive.
  • android:exported ma wartość true, ponieważ aktywność musi być uruchamiana przez aplikację inną niż ona sama (czyli program uruchamiający).
  • android:launchMode ma wartość singleTask, dzięki czemu użytkownik może wrócić do tego samego wystąpienia aktywności z programu uruchamiającego, jeśli z niego wyjdzie.
  • android:theme jest ustawiona na @android:style/Theme.DeviceDefault.NoActionBar, aby aplikacja zajmowała cały dostępny ekran.
  • Filtr intencji wskazuje, że jest to aktywność uruchamiająca aplikację.
  • Istnieje element <meta-data>, który informuje system operacyjny, że aplikacja może być używana, gdy obowiązują ograniczenia UX, np. gdy pojazd jest w ruchu.

W przypadku aplikacji do nawigacji wymaganych jest kilka dodatkowych wpisów w pliku manifestu CarAppActivity, jak pokazano w tym fragmencie kodu:

<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>
  • Dodatkowa kategoria android.intent.category.APP_MAPS informuje system, że Twoja aplikacja może wyświetlać lokalizację użytkownika.
  • Filtr intencji androidx.car.app.action.NAVIGATE zapewnia użytkownikom możliwość korzystania z Twojej aplikacji podczas obsługi niejawnej intencji nawigacji z innej aplikacji samochodowej.

Aby poprawić komfort korzystania z aplikacji opartej na szablonie na urządzeniach z systemem operacyjnym Android Automotive, możesz dodać obsługę precyzyjnych linków do CarAppActivity. Umożliwia to na przykład otwieranie aplikacji bezpośrednio z przeglądarki lub po otrzymaniu adresu URL udostępnionego z telefonu za pomocą szybkiego udostępniania.

Dodawanie filtrów intencji precyzyjnych linków

Aby poinformować system operacyjny, że Twoja aplikacja może obsługiwać precyzyjne linki, musisz dodać odpowiednie filtry intencji w elemencie <activity> dla CarAppActivity aplikacji. Dodatkowe wskazówki znajdziesz w artykule Dodawanie filtrów intencji dla linków przychodzących.

Aby zapewnić użytkownikom jak najlepsze wrażenia, zalecamy obsługę wszystkich precyzyjnych linków obsługiwanych przez aplikację mobilną, które mogą być w rozsądny sposób obsługiwane przez aplikację w samochodzie.

Aby obsługiwać intencje, aplikacja powinna odczytywać dane z przychodzących intencji zarówno podczas tworzenia Session aplikacji samochodowej w trakcie onCreateScreen(), jak i gdy otrzymuje nową intencję w trakcie onNewIntent():

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
    }
}

Inne rzeczy, które warto wziąć pod uwagę

Podczas tworzenia aplikacji na Androida Automotive OS pamiętaj o tych kwestiach:

Nazwy pakietów

Ponieważ dystrybuujesz osobny pakiet aplikacji na Androida (APK) na Androida Automotive OS, możesz ponownie wykorzystać nazwę pakietu z aplikacji mobilnej lub utworzyć nową nazwę pakietu. Jeśli używasz innej nazwy pakietu, Twoja aplikacja będzie miała 2 osobne wpisy w Sklepie Play. Jeśli użyjesz obecnej nazwy pakietu, Twoja aplikacja będzie miała jedną stronę w obu platformach.

Jest to przede wszystkim decyzja biznesowa. Jeśli na przykład jeden zespół pracuje nad aplikacją mobilną, a inny nad aplikacją na Androida Automotive OS, warto używać oddzielnych nazw pakietów i umożliwić każdemu zespołowi zarządzanie własną kartą aplikacji w Sklepie Play. Nie ma dużej różnicy w nakładzie pracy technicznej wymaganej do zastosowania obu tych podejść.

W tej tabeli zestawiono inne najważniejsze różnice między zachowaniem obecnej nazwy pakietu a użyciem nowej nazwy pakietu:

Funkcja Ta sama nazwa pakietu Nazwa nowego pakietu
Informacje o aplikacji Singiel Wiele
Instalacja dublująca Tak: szybkie ponowne instalowanie aplikacji podczas działania kreatora konfiguracji Nie
Proces weryfikacji w Sklepie Play Blokowanie opinii: jeśli weryfikacja jednego pliku APK zakończy się niepowodzeniem, inne pliki APK przesłane w tej samej wersji zostaną zablokowane. Indywidualne opinie
Statystyki, dane i parametry życiowe Połączone: możesz filtrować dane dotyczące motoryzacji według nazwy urządzenia. Oddzielny
Indeksowanie i ranking w wyszukiwarce Budowanie na podstawie obecnej pozycji Brak przeniesienia
Integracja z innymi aplikacjami Najprawdopodobniej nie trzeba wprowadzać żadnych zmian, jeśli kod multimedialny jest wspólny dla obu plików APK. Może być konieczne zaktualizowanie odpowiedniej aplikacji, np. w przypadku odtwarzania identyfikatora URI za pomocą Asystenta Google.

Treści offline

W razie potrzeby zaimplementuj w aplikacji obsługę offline. Samochody z Androidem Automotive OS powinny mieć własne połączenie do transmisji danych, co oznacza, że pakiet danych jest wliczony w cenę pojazdu lub opłacany przez użytkownika. Oczekuje się jednak, że samochody będą miały bardziej zmienne połączenie niż urządzenia mobilne.

Oto kilka kwestii, o których warto pamiętać, gdy rozważasz strategię pomocy offline:

  • Najlepszy czas na pobieranie treści to okres, w którym aplikacja jest używana.
  • Nie zakładaj, że Wi-Fi jest dostępne. Samochód może nigdy nie znaleźć się w zasięgu Wi-Fi lub producent oryginalnego sprzętu (OEM) mógł wyłączyć Wi-Fi na rzecz sieci komórkowej.
  • Możesz inteligentnie buforować treści, których użytkownicy prawdopodobnie będą używać, ale zalecamy umożliwienie użytkownikom zmiany tego zachowania.
  • Ilość miejsca na dysku w samochodach jest różna, dlatego umożliw użytkownikom usuwanie treści offline.

Najczęstsze pytania

W sekcjach poniżej znajdziesz odpowiedzi na niektóre z najczęstszych pytań dotyczących systemu operacyjnego Android Automotive.

Czy istnieją jakieś ograniczenia lub zalecenia dotyczące korzystania z zewnętrznych pakietów SDK i bibliotek?

Nie ma konkretnych wytycznych dotyczących korzystania z pakietów SDK i bibliotek innych firm. Jeśli zdecydujesz się używać pakietów SDK i bibliotek innych firm, nadal będziesz odpowiadać za spełnianie wszystkich wymagań dotyczących jakości aplikacji na samochody.

Jak opublikować aplikację na system operacyjny Android Automotive za pomocą Konsoli Google Play?

Szczegółowe informacje o publikowaniu aplikacji na system operacyjny Android Automotive za pomocą Konsoli Google Play znajdziesz w artykule Dystrybucja aplikacji na samochody.

Rozwiązywanie problemów

Poniżej znajdziesz pomoc dotyczącą rozwiązywania typowych problemów z systemem operacyjnym Android Automotive.

  • Nawet po odinstalowaniu aplikacji Car App Library z ustawień systemu podczas próby zainstalowania nowej wersji pojawia się błąd.

    Aby mieć pewność, że aplikacja została odinstalowana, użyj polecenia adb uninstall app.package.name.