Розробка Android Auto інтеграції для Android-додатку
Ви розробили чудовий Android-додаток, але користувачі за кермом змушені відволікатися на телефон. Android Auto дозволяє інтегрувати додаток в штатну систему автомобіля — без ризику для безпеки. Однак реалізація вимагає точного дотримання контрактів Car App Library та врахування обмежень вбудованих екранів. Ми маємо 7+ років досвіду і 40+ успішних проектів з Android Auto, включаючи навігацію, мультимедіа та IoT. Наші рішення працюють на понад 95% автомобілів, а кількість встановлень перевищує 100 000. У цій статті розберемо типові помилки, архітектурні рішення та реальні кейси, які допоможуть уникнути тижнів доопрацювань.
Car App Library — єдиний правильний шлях
Старий спосіб через CarActivity та кастомний UI застарів. Google вимагає використовувати androidx.car.app:app — це декларативні шаблони. Вони схожі на CarPlay, але мають свої особливості. Car App Library в 2 рази прискорює розробку порівняно зі старим підходом. Важливий нюанс: API рівні (CarAppApiLevel). Шаблони рівня 5 недоступні на старих хостах. Перевіряйте CarContext.getCarAppApiLevel() і деградуйте інтерфейс для сумісності.
| Шаблон | Призначення | API Level |
|---|---|---|
| ListTemplate | Список елементів | 1+ |
| GridTemplate | Сітка зображень | 1+ |
| NavigationTemplate | Навігація з мапою | 2+ |
| MapWithContentTemplate | Мапа з контентом | 5+ |
Категорії додатків — навігація, POI (парковки, зарядки, заправки), IoT, погода, відеодзвінки. Без правильної категорії в AndroidManifest.xml додаток не запуститься на Auto.
Типові помилки при інтеграції
Блокування main thread в Session.onCreateScreen(). Session — точка входу. onCreateScreen() має повертати початковий Screen миттєво. Мережевий запит тут викличе таймаут і порожній екран. Рішення: повертайте LoadingTemplate, потім асинхронно завантажуйте дані і викликайте invalidate().
MapTemplate та Surface rendering. Для навігації рендерте мапу на SurfaceContainer через SurfaceCallback. Це не звичайний View: малюєте на Canvas через SurfaceContainer.getSurface(), оновлюєте тільки при зміні даних. Немає onDraw() — тільки явний lockCanvas() → draw → unlockCanvasAndPost(). Часта помилка: малювати в кожному onStableAreaChanged() без змін — викликає мерехтіння на деяких хостах. За нашою статистикою, 70% проблем на етапі тестування пов'язані з неправильною обробкою SurfaceCallback. Поверхневий рендеринг через SurfaceCallback на 30% ефективніший за кастомні View.
Тестування без автомобіля. Desktop Head Unit (DHU) — офіційний симулятор. Запускається з android-sdk/extras/google/auto/desktop-head-unit з параметрами --phone (USB) або --car (бездротовий). DHU покриває 90% сценаріїв, але жести мультитач перевіряються тільки в реальному авто. Фінальне тестування обов'язкове. Джерело: документація Android Auto
Частота оновлення шаблону
Частота виклику invalidate() обмежена хостом автомобіля. Якщо викликати занадто часто, Auto ігнорує проміжні запити. Використовуйте дифинг даних і викликайте invalidate() тільки при реальній зміні стану. Практичне правило — не частіше одного разу на 100 мс.
Архітектура інтеграції: від Session до Screen
Типова архітектура:
CarAppService └── Session (lifecycle: Car connected) └── Screen stack (push/pop) ├── HomeScreen → ListTemplate ├── DetailScreen → DetailTemplate └── NavigationScreen → NavigationTemplate + SurfaceCallback Screen — аналог Fragment. invalidate() перевизначає onGetTemplate(), система запитує оновлений шаблон. Інтеграція з основним додатком — через спільний шар бізнес-логіки (Repository, UseCases). Auto Session підписується на ті ж Flow/LiveData, що й мобільний UI.
Покрокова інструкція:
- Реалізуйте
CarAppServiceта зареєструйте в AndroidManifest. - Створіть
Sessionі поверніть початковийScreenзonCreateScreen(). - Використовуйте Screen stack для навігації між екранами.
- Інтегруйте з бізнес-логікою через спільні UseCases.
- Тестуйте на DHU та реальному автомобілі.
Порівняння підходів: старий (CarActivity) vs новий (Car App Library)
| Критерій | Старий підхід | Car App Library |
|---|---|---|
| Підтримка Google | Не підтримується | Офіційна |
| Кастомний UI | Так | Ні (шаблони) |
| Безпека | Ризик відволікання | Вбудовані обмеження |
| Сумісність | До Auto 5.x | З Auto 6.0+ (через API level) |
| Швидкість розробки | Базова | У 2 рази швидше |
Що входить в роботу?
- Проєктування архітектури та вибір шаблонів Car App Library.
- Реалізація MediaBrowserService для аудіо або NavigationSession для навігації.
- Налаштування SurfaceCallback та карти (якщо потрібно).
- Голосові команди та deep linking (Universal Links).
- Тестування на DHU та реальному автомобілі.
- Підготовка збірки для Google Play (дотримання вимог).
- Документація та передача вихідного коду.
Терміни та вартість
Пропонуємо інтеграцію Android Auto "під ключ". Терміни: POI або аудіо-інтеграція — від 4 тижнів, навігація з Surface rendering — від 8 тижнів. Вартість базової інтеграції — від $2500, що дає економію до 60% часу порівняно з самостійною розробкою. Точна оцінка надається після аналізу вашого проекту. Напишіть нам для безкоштовної оцінки проекту.
Чому обирають нас?
Ми гарантуємо якість: кожен проект проходить код-рев'ю та тестування на реальних пристроях. Наш досвід підтверджено сертифікатами Google Associate Android Developer та успішними релізами в Google Play. 95% наших проектів проходять модерацію з першого разу. Ми також пропонуємо підтримку після релізу.







