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. Do użytkownikom tej platformy, należy dystrybuować aplikację zoptymalizowaną pod kątem kierowcy, zgodne z systemem operacyjnym Android Automotive. Możesz ponownie wykorzystać prawie cały kod, w aplikacji Android Auto, ale musisz utworzyć osobną kompilację, spełnia wymagania opisane na tej stronie.

Aby uruchomić aplikację samochodu na urządzeniu z systemem operacyjnym Android Automotive, musisz mieć najnowszą wersję „Templates Host” (Host szablonów), który jest dostępny jako aplikacja systemowa.

Omówienie programowania

Aby dodać obsługę systemu operacyjnego Android Automotive, wystarczy wykonać kilka czynności. opisane w sekcjach tej strony:

  1. Tworzenie modułu motoryzacyjnego
  2. Zadeklaruj, że obsługujesz system operacyjny Android Automotive
  3. Zadeklaruj swoje urządzenia CarAppService i CarAppActivity
  4. Aktualizowanie zależności Gradle

Użyj pakietu Android Studio Bumblebee lub nowszego, aby mieć pewność, wszystkie funkcje systemu operacyjnego Automotive są włączone.

Tworzenie modułu motoryzacyjnego

Niektóre komponenty systemu operacyjnego Android Automotive, takie jak plik manifestu, mają wymaganiom określonym na tej platformie. Utwórz moduł, który będzie przechowywać dla tych komponentów oddzielnie od innego kodu w projekcie, takiego jak kodu używanego w aplikacji Telefon.

W przypadku istniejącego projektu wykonaj te czynności, aby dodać moduł motoryzacyjny do projekt:

  1. W Android Studio kliknij Plik > Nowe > Nowy moduł.
  2. Wybierz Moduł motoryzacyjny i kliknij Dalej.
  3. Wpisz nazwę aplikacji/biblioteki. Tę nazwę widzą użytkownicy i aplikacja na system operacyjny Android Automotive.
  4. Wpisz nazwę modułu.
  5. Zmień nazwę pakietu, tak aby pasowała do istniejącej aplikacji.
  6. Wybierz API 29: Android 10 (Q) jako Minimum SDK, a następnie kliknij Dalej. Wszystkie samochody, które obsługują bibliotekę aplikacji samochodowej w systemie operacyjnym Android Automotive, działają Android 10 API na poziomie 29 lub wyższym, więc wybranie tej wartości powoduje kierowanie reklam na wszystkie dla zgodnych samochodów.

  7. Wybierz Dodaj brak aktywności i kliknij Zakończ.

Jeśli rozpoczynasz nowy projekt:

  1. W Android Studio kliknij Plik > Nowe > Nowy projekt.
  2. W polu Typ projektu wybierz Motoryzacja.
  3. Wybierz Brak aktywności i kliknij Dalej.
  4. Podaj nazwę projektu. Tę nazwę będą widzieli użytkownicy na system operacyjny Android Automotive.
  5. Wpisz nazwę pakietu. Zobacz sekcję Nazwy pakietów. , aby dowiedzieć się więcej o wybieraniu nazwy pakietu.
  6. Wybierz API 29: Android 10 (Q) jako Minimum SDK, a następnie kliknij Dalej.

    Wszystkie samochody, które obsługują bibliotekę aplikacji samochodowej w systemie operacyjnym Android Automotive, działają Android 10 API na poziomie 29 lub wyższym, więc wybranie tej wartości powoduje kierowanie reklam na wszystkie dla zgodnych samochodów.

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

<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 elementy standardowe informacje o aplikacji oraz uses-feature deklarujący obsługę systemu operacyjnego Android Automotive. Pamiętaj, że nie są zadeklarowane w manifeście żadne działania.

Następnie dodaj do pliku manifestu te elementy uses-feature:

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

Pierwszy element uses-feature deklaruje, że aplikacja używa hosta szablonów do uruchomienia. Jawne ustawienie pozostałych 4 elementów uses-feature na required="false" dba o to, aby aplikacja nie kolidowała z dostępnymi funkcjami sprzętowymi na urządzeniach z systemem operacyjnym Android Automotive.

Zaktualizuj zależności Gradle

W module motoryzacyjnym musisz dodać zależność androidx.car.app:app-automotive artefakt, w tym wdrożenie CarAppActivity wymagane do działania aplikacji na system operacyjny Android Automotive.

Jeśli opracowujesz aplikację tak, aby obsługiwała zarówno Androida Auto, jak i Androida System operacyjny Automotive, zalecamy przechowywanie urządzenia CarAppService w osobnym który możesz udostępniać między modułami mobilnymi i samochodowymi. Jeśli jesteś W takim przypadku musisz zaktualizować moduł motoryzacyjny, tak aby zawierał moduł udostępniony za pomocą zależności projektu Gradle zgodnie z tym fragmentem:

Odlotowe

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

Zadeklaruj, że obsługujesz system operacyjny Android Automotive

Użyj tego wpisu w pliku manifestu, aby zadeklarować, że aplikacja obsługuje System operacyjny Android Automotive:

<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 deklarującego motoryzację funkcji obsługiwanych przez Twoją aplikację.

Aby wskazać, że masz aplikację dodaj plik XML o nazwie automotive_app_desc.xml do katalogu res/xml/ w modułowi systemu operacyjnego Android Automotive. Plik powinien zawierać tę treść:

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

Deklarowanie usług CarAppService i CarAppActivity

Podobnie jak Android Auto, system operacyjny Android Automotive używa Twojego urządzenia CarAppService do uruchomienia aplikacji. Więcej informacji: Tworzenie usługi CarAppService i sesji i Zadeklaruj usługę CarAppService dla instrukcje implementacji i deklarowania: CarAppService.

W przeciwieństwie do Androida Auto musisz dodać dodatkowy komponent aplikacji. CarAppActivity, będzie służyć jako punkt wejścia w system operacyjny Android Automotive . Implementacja tego działania jest uwzględniona w androidx.car.app:app-automotive artefakt i jest odpowiedzialny za komunikację z aplikacją hosta szablonu w celu renderowania UI aplikacji. Należy użyć tylko w pliku manifestu ma jedno wystąpienie tej aktywności i musi ono być zadeklarowane jako następujące:

<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 pełną i jednoznaczną nazwą klasy klasy CarAppActivity z artefaktu app-automotive.
  • Parametr android:exported ma wartość true, ponieważ działanie musi być możliwe do uruchomienia przez innej niż sama aplikacja (czyli programu uruchamiającego).
  • android:launchMode ma wartość singleTask, więc użytkownik może wrócić do tego samego elementu wystąpienia aktywności z programu uruchamiającego po przejściu na inną stronę.
  • Parametr android:theme ma wartość @android:style/Theme.DeviceDefault.NoActionBar, więc że aplikacja zajmuje całe dostępne dla niej miejsce na pełnym ekranie.
  • Filtr intencji wskazuje, że jest to działanie programu uruchamiającego aplikację.
  • Istnieje element <meta-data>, który wskazuje systemowi operacyjnemu, że aplikacja może używać, gdy obowiązują ograniczenia dotyczące wygody użytkowników, np. gdy pojazd jest w ruchu.

W przypadku aplikacji do nawigacji jest jeszcze kilka wymagane wpisy w pliku manifestu dla CarAppActivity, jak pokazano poniżej fragment:

<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>
  • Dodatkowe android.intent.category.APP_MAPS informuje system, że aplikacja może wyświetlić lokalizację użytkownika.
  • Filtr intencji androidx.car.app.action.NAVIGATE zapewnia użytkownikom z użyciem aplikacji w przypadku niejawnej intencji nawigacji lub inną aplikację do samochodu.

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

Pamiętaj o innych kwestiach przy tworzeniu aplikacji na Androida Automotive Aplikacja systemu operacyjnego:

Nazwy pakietów

Ponieważ rozpowszechniasz oddzielny pakiet Android Package Kit (APK) na system operacyjny Android Automotive, możesz użyj nazwy pakietu z aplikacji mobilnej lub utwórz nowy pakiet imię i nazwisko. Jeśli używasz innej nazwy pakietu, Twoja aplikacja ma 2 osobne Sklep Play strony. Jeśli ponownie użyjesz bieżącej nazwy pakietu, aplikacja ma na obu platformach.

Jest to głównie decyzja biznesowa. Jeśli na przykład masz jeden zespół, który pracuje nad aplikację mobilną oraz osobny zespół pracujący nad Androidem Automotive w systemie operacyjnym, warto nadać osobne nazwy pakietów i zarządzać jej własną stroną w Sklepie Play. Nie ma dużej różnicy pod względem wymaga pracy technicznej każdej z tych metod.

W tabeli poniżej znajdziesz inne kluczowe różnice między zachowywaniem bieżącego pakietu. lub użyj nowej nazwy pakietu:

Funkcja Ta sama nazwa pakietu Nazwa nowego pakietu
Informacje o aplikacji Pojedynczy Wiele
Powielona instalacja Tak: szybka instalacja aplikacji podczas instalacji Nie
Proces sprawdzania w Sklepie Play Blokowanie opinii: jeśli weryfikacja nie powiedzie się w przypadku jednego pliku APK, inne pliki APK przesłane w tej samej wersji są zablokowane Pojedyncze opinie
Statystyki, dane i parametry życiowe Łącznie: możesz filtrować według nazwy urządzenia w przypadku branży motoryzacyjnej i skalowalnych danych. Rozdziel
Indeksowanie i ranking wyszukiwania Zbuduj na bazie obecnego stanu Bez przenoszenia danych
Integracja z innymi aplikacjami Prawdopodobnie nie będą wymagane żadne zmiany, przy założeniu, że kod mediów jest wspólny dla obu pakietów APK Może być konieczna aktualizacja odpowiedniej aplikacji, na przykład do odtwarzania identyfikatora URI za pomocą Asystenta Google

Treści offline

W razie potrzeby zaimplementuj w aplikacji obsługę trybu offline. Samochody z Androidem Automotive System operacyjny powinien mieć własne połączenie transmisji danych, pakiet danych jest wliczony w koszt pojazdu lub opłacany przez użytkownika. Pamiętaj jednak: samochody mogą też mieć bardziej zmienne połączenie niż urządzenia mobilne.

Oto kilka kwestii, o których warto pamiętać, rozważając wsparcie offline strategia:

  • Najlepszy czas na pobieranie zawartości to czas, gdy aplikacja jest używana.
  • Nie zakładaj, że masz dostęp do sieci Wi-Fi. Samochód może nigdy nie znaleźć się w zasięgu Wi-Fi, lub producent oryginalnego sprzętu (OEM) wyłączył Wi-Fi na rzecz sieci komórkowej.
  • Można inteligentnie buforować treści, które użytkownicy mogą zalecamy, by pozwolić użytkownikowi na zmianę takiego działania.
  • Ilość miejsca na dysku w samochodach jest różna, więc daj użytkownikom możliwość treści offline.

Najczęstsze pytania

W poniższych sekcjach znajdziesz odpowiedzi na niektóre z najczęściej zadawanych pytań dotyczących system operacyjny Android Automotive.

Czy są jakieś ograniczenia lub zalecenia dotyczące korzystania z pakietów SDK i bibliotek innych firm?

Nie ma konkretnych wytycznych dotyczących używania bibliotek i pakietów SDK innych firm. Jeśli zdecydujesz się używać pakietów SDK i bibliotek innych firm, nadal ponosisz odpowiedzialność za zgodność ze wszystkimi wymaganiami dotyczącymi jakości aplikacji samochodowych.

Jak opublikować aplikację na system operacyjny Android Automotive, używając Konsoli Google Play?

Proces publikowania aplikacji jest podobny do publikowania aplikacji na telefon, z tą różnicą, że na innym formacie. Aby włączyć w aplikacji korzystanie z Androida Automotive Typ wersji systemu operacyjnego, wykonaj te czynności:

  1. Otwórz Konsolę Play.
  2. Wybierz swoją aplikację.
  3. W menu po lewej stronie wybierz Wersja > Konfiguracja > Ustawienia zaawansowane > Forma .
  4. Wybierz Dodaj format > system operacyjny Android Automotive, a potem postępuj zgodnie z instrukcjami w Konsoli Play.

Rozwiązywanie problemów

Poniżej znajdziesz informacje na temat typowych scenariuszy rozwiązywania problemów. na system operacyjny Android Automotive.

  • Nawet po odinstalowaniu aplikacji samochodowej z poziomu ustawień Podczas próby zainstalowania nowej wersji pojawia się błąd.

    Aby upewnić się, że aplikacja została odinstalowana, użyj polecenia adb uninstall app.package.name