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ę komponentu Templates Host, który jest aplikacją systemową.
Omówienie procesu tworzenia
Dodanie obsługi systemu operacyjnego Android Automotive wymaga wykonania kilku czynności opisanych w odpowiednich sekcjach na tej stronie:
- Tworzenie modułu samochodowego
- Deklarowanie obsługi systemu operacyjnego Android Automotive
- Deklarowanie
CarAppService
iCarAppActivity
- Aktualizowanie zależności Gradle
Użyj wersji Android Studio Bumblebee lub nowszej, aby mieć pewność, że wszystkie funkcje systemu operacyjnego Automotive są włączone.
Tworzenie modułu samochodowego
Niektóre komponenty systemu operacyjnego Android Automotive, takie jak plik manifestu, mają wymagania specyficzne dla platformy. Utwórz moduł, który pozwoli oddzielić kod tych komponentów od innego kodu w projekcie, np. kodu używanego w aplikacji na telefon.
Aby dodać moduł samochodowy do istniejącego projektu, wykonaj te czynności:
- W Android Studio kliknij Plik > Nowy > Nowy moduł.
- Kliknij kolejno Moduł motoryzacyjny i Dalej.
- Podaj nazwę aplikacji lub biblioteki. To nazwa, którą użytkownicy widzą w aplikacji w systemie operacyjnym Android Automotive.
- Wpisz nazwę modułu.
- Zmień nazwę pakietu tak, aby była zgodna z nazwą Twojej dotychczasowej aplikacji.
W sekcji Minimalna wersja pakietu 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 na poziomie interfejsu API 29 lub nowszym, więc wybranie tej wartości spowoduje ukierunkowanie na wszystkie zgodne samochody.
Kliknij Dodaj brak aktywności, a potem Zakończ.
Jeśli rozpoczynasz nowy projekt:
- W Android Studio kliknij Plik > Nowy > Nowy projekt.
- W polu Typ projektu wybierz Motoryzacja.
- Wybierz Brak aktywności i kliknij Dalej.
- Podaj nazwę projektu. Jest to nazwa, którą użytkownicy widzą w Twojej aplikacji w systemie operacyjnym Android Automotive.
- Wpisz nazwę pakietu. Więcej informacji o wybieraniu nazwy pakietu znajdziesz w sekcji Nazwy pakietów.
W sekcji Minimalna wersja pakietu 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 na poziomie interfejsu API 29 lub nowszym, więc wybranie tej wartości spowoduje ukierunkowanie 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 oraz element uses-feature
, który deklaruje obsługę systemu operacyjnego Android Automotive. Pamiętaj, że w pliku manifestu nie ma deklarowanych aktywności.
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 korzysta z usługi hosta szablonów. Wyraźne ustawienie pozostałych 4 elementów uses-feature
na required="false"
zapewnia, że aplikacja nie będzie wchodzić w konflikt z dostępnymi funkcjami sprzętowymi na urządzeniach z systemem operacyjnym 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 działania aplikacji w systemie operacyjnym Android Automotive.
Jeśli aplikacja ma obsługiwać zarówno Androida Auto, jak i system operacyjny Android Automotive, zalecamy przechowywanie CarAppService
w oddzielnym module, który będzie używany zarówno w przypadku modułu mobilnego, jak i samochodowego. Jeśli używasz tego podejścia, musisz zaktualizować moduł samochodowy, aby uwzględniał moduł współdzielony za pomocą zależności projektu w 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 samochodowe obsługiwane przez aplikację.
Aby wskazać, że masz aplikację z biblioteki aplikacji samochodowych, 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>
Zadeklaruj CarAppService i CarAppActivity
Podobnie jak w przypadku Androida Auto, system operacyjny Android Automotive używa implementacji CarAppService
do uruchamiania aplikacji. Aby dowiedzieć się, jak zaimplementować i zadeklarować CarAppService
, zapoznaj się z artykułami Tworzenie usługi CarAppService i sesji oraz Deklarowanie usługi CarAppService.
W przeciwieństwie do Androida Auto musisz uwzględnić dodatkowy komponent aplikacji, CarAppActivity
, który będzie punktem 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 szablonów w celu renderowania interfejsu użytkownika aplikacji. W pliku manifestu powinna być 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 ustawiony na pełną nazwę klasyCarAppActivity
z artefaktuapp-automotive
.- Wartość
android:exported
totrue
, ponieważ aktywność musi być uruchamiana przez aplikację inną niż ona sama (czyli przez program uruchamiający). android:launchMode
ma wartośćsingleTask
, więc użytkownik może wrócić do tej samej instancji aktywności z poziomu programu uruchamiającego, jeśli z niej wyjdzie.android:theme
ma wartość@android:style/Theme.DeviceDefault.NoActionBar
, dzięki czemu aplikacja zajmuje cały dostępny obszar ekranu.- Filtr intencji wskazuje, że jest to aktywność menu aplikacji.
- Element
<meta-data>
informuje system operacyjny, że aplikacja może być używana, gdy obowiązują ograniczenia dotyczące UX, np. gdy pojazd jest w ruchu.
Dodatkowe wymagania dotyczące aplikacji do nawigacji
W przypadku aplikacji do nawigacji jest kilka dodatkowych wymaganych 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, że użytkownicy mają możliwość korzystania z Twojej aplikacji podczas obsługi ukrytej intencji nawigacji z innej aplikacji samochodowej.
Inne rzeczy, które warto wziąć pod uwagę
Podczas tworzenia aplikacji na Androida Automotive weź pod uwagę te kwestie:
nazwy pakietów,
Ponieważ dystrybuujesz osobny pakiet Android Application Package Kit (APK) dla systemu operacyjnego Android Automotive, możesz ponownie użyć nazwy pakietu z aplikacji mobilnej lub utworzyć nową nazwę pakietu. Jeśli używasz innej nazwy pakietu, Twoja aplikacja ma 2 osobne strony w Google Play. Jeśli ponownie użyjesz obecnej nazwy pakietu, Twoja aplikacja będzie mieć jedną stronę na obu platformach.
Jest to przede wszystkim decyzja biznesowa. Jeśli na przykład jeden zespół pracuje nad aplikacją mobilną, a inny nad aplikacją na system Android Automotive, warto użyć oddzielnych nazw pakietów i zezwolić każdemu zespołowi na zarządzanie własną stroną w Sklepie Play. Nie ma dużej różnicy w nakładzie pracy technicznej wymaganej do zastosowania obu tych metod.
W tej tabeli zestawiono inne kluczowe 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 | Pojedynczy | Wiele |
Instalacja lustrzana | Tak: szybkie ponowne instalowanie aplikacji podczas konfiguracji | Nie |
Proces sprawdzania w Sklepie Play | Blokowanie weryfikacji: jeśli weryfikacja jednego pliku APK zakończy się niepowodzeniem, inne pliki APK przesłane w ramach tej samej wersji zostaną zablokowane. | Indywidualne opinie |
Statystyki, dane i wskaźniki | W połączeniu: możesz filtrować według nazwy urządzenia, aby uzyskać dane dotyczące pojazdów. | Rozdziel |
Indeksowanie i ranking wyszukiwania | Budowanie na podstawie obecnej pozycji | Brak przeniesienia |
Integracja z innymi aplikacjami | Najprawdopodobniej nie trzeba wprowadzać żadnych zmian, o ile kod multimediów jest wspólny dla obu plików APK. | Może być konieczne zaktualizowanie odpowiedniej aplikacji, na przykład w przypadku odtwarzania URI za pomocą Asystenta Google |
Treści offline
W stosownych przypadkach wprowadź w aplikacji obsługę trybu offline. Samochody z systemem Android Automotive powinny mieć własne połączenie z internetem, co oznacza, że abonament danych jest uwzględniony w cenie pojazdu lub płatny przez użytkownika. Samochody mają jednak zapewniać bardziej zmienną łączność niż urządzenia mobilne.
Oto kilka kwestii, o których warto pamiętać, gdy rozważasz strategię pomocy offline:
- Najlepszym momentem na pobranie treści jest czas, gdy aplikacja jest używana.
- Nie zakładaj, że sieć Wi-Fi jest dostępna. Samochód może nigdy nie znaleźć się w zasięgu sieci Wi-Fi, a producent oryginalnego sprzętu (OEM) może wyłączyć Wi-Fi na rzecz sieci komórkowej.
- Chociaż możesz inteligentnie przechowywać w pamięci podręcznej treści, z których użytkownicy będą korzystać, zalecamy, aby użytkownik mógł zmienić to zachowanie.
- Miejsce na dysku w samochodach jest różne, dlatego daj użytkownikom możliwość usuwania treści offline.
Najczęstsze pytania
W następnych sekcjach znajdziesz odpowiedzi na niektóre z najczęstszych pytań dotyczących systemu operacyjnego Android Automotive.
Czy istnieją jakieś ograniczenia lub zalecenia dotyczące używania zewnętrznych pakietów SDK i bibliotek?
Nie ma żadnych konkretnych wytycznych dotyczących używania 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 zgodność z wymaganiami dotyczącymi jakości aplikacji samochodowych.
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 Play znajdziesz w artykule Rozpowszechnianie aplikacji na samochody.
Rozwiązywanie problemów
Poniżej znajdziesz wskazówki dotyczące rozwiązywania typowych problemów w systemie operacyjnym Android Automotive.
Nawet po odinstalowaniu aplikacji z biblioteki aplikacji samochodowych 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
.