Розробка інтеграції Android Auto
Android Auto дозволяє вивести інтерфейс додатку на екран мультимедійної системи автомобіля через USB або бездротове підключення. Архітектурно це host-rendering: автомобіль запитує шаблони через Car App Library, додаток їх формує — але рендерить не сам додаток, а host на стороні Auto.
Car App Library — єдиний правильний шлях
Старий спосіб через CarActivity та користувацький UI застарів. З Android Auto 6.0+ Google вимагає використовувати androidx.car.app:app (Car App Library). Це декларативні шаблони, подібні до CarPlay: ListTemplate, GridTemplate, NavigationTemplate, MapWithContentTemplate.
Важливий нюанс: Car App Library має кілька рівнів API (CarAppApiLevel). Шаблони, додані на рівні 5, недоступні на автомобілях із більш старим хостом. Перевіряємо CarContext.getCarAppApiLevel() і деградуємо інтерфейс для старих хостів.
Категорії додатків — навігація, POI (паркування, зарядка, АЗС), IoT (управління умним домом), погода, відеозвінки. З 2024 року подібно до Apple додали їжу. Звичайний додаток без дозволеної категорії в AndroidManifest.xml → <category android:name="androidx.car.app.category.NAVIGATION"/> → Auto просто не запустить його.
Типові помилки при інтеграції
Блокування main thread в Session.onCreateScreen(). Session — точка входу в Auto додаток. onCreateScreen() повинен повернути початковий Screen миттєво. Якщо робити мережевий запит — Auto покаже порожній екран із таймаутом. Правильно: повертаємо LoadingTemplate або порожній ListTemplate, потім асинхронно завантажуємо дані й викликаємо invalidate().
MapTemplate та Surface rendering. Для навігаційних додатків потрібно рендерити карту на SurfaceContainer через SurfaceCallback. Це принципово інакше, ніж звичайний View: малюємо на Canvas через SurfaceContainer.getSurface(), оновлюємо тільки при зміні даних. Немає onDraw() циклу — тільки явний lockCanvas() → draw → unlockCanvasAndPost(). Часта помилка: малювати при кожному onStableAreaChanged() навіть якщо карта не змінилася — це видно як мерцання на деяких хостах.
Тестування без автомобіля. Desktop Head Unit (DHU) — офіційний симулятор від Google. Запускається через android-sdk/extras/google/auto/desktop-head-unit. DHU з параметром --phone емулює телефон-режим (USB), --car — бездротовий. Фінальне тестування в реальному авто обов'язково — поведінка SurfaceCallback і жести на тач-екрані авто відтворюються тільки там.
Архітектура
CarAppService
└── Session (lifecycle: Car connected)
└── Screen stack (push/pop)
├── HomeScreen → ListTemplate
├── DetailScreen → DetailTemplate
└── NavigationScreen → NavigationTemplate + SurfaceCallback
Screen — аналог Fragment. invalidate() переопреділює onGetTemplate(), система запитує оновлений шаблон. Ви не можете оновлювати шаблон швидше, ніж дозволяє хост — є rate limiting. Якщо invalidate() викликається надто часто, Auto ігнорує проміжні виклики.
Інтеграція з основним додатком — через спільний шар бізнес-логіки (Repository, UseCases). Auto Session підписується на ті ж Flow/LiveData що й мобільний UI.
Розклад
POI або аудіо-інтеграція: 4–7 тижнів. Навігаційний додаток з картою та Surface rendering: 8–14 тижнів. Вартість залежить від складності навігаційної логіки та наявності існуючої карти в мобільному додатку.







