Как превратить пылящийся планшет в полноценный экран Android Auto
Валяется старый планшет на Android 5 или 7, который уже не тянет современные приложения из Google Play? Рука не поднимается выбросить, а применить некуда. Кажется логичным поставить его на торпеду машины в качестве навигатора. Но запускать отдельные приложения на экране планшета не всегда удобно: сообщения с телефона туда не приходят, звонки не транслируются, а точки маршрута приходится заново вбивать на ходу.
За $300–500 можно купить китайскую головную систему. Правда, железка там часто сомнительная, а прошивка зависает раз в три дня. Репозиторий Open Headunit предлагает другое решение. Это открытый эмулятор приемника Android Auto, который превращает практически любое Android-устройство в автомобильный дисплей.

Зачем возрождать старый проект
Исходный проект Headunit когда-то написал разработчик Майкл Рид. Со временем автор перестал обновлять кодовую базу, а Google тем временем постоянно менял протоколы связи в Android Auto. Андре Книрим подхватил проект, переписал значительную часть логики на Kotlin и создал Open Headunit.
Основная задача приложения — слушать поток данных от смартфона, декодировать видео и отдавать назад касания по экрану и сигналы кнопок руля. Важно то, что запустить эмулятор вы можете даже на устройствах с Android 4.1.

Способы подключения и грабли с протоколами
Соединить телефон с эмулятором можно кабелем или по воздуху. Но тут начинаются нюансы, из-за которых проект регулярно получает свежие коммиты.
Проводное соединение через USB
Самый надежный вариант. Кабель качает видеопоток без задержек и параллельно подзаряжает смартфон.
Для работы понадобится поддержка USB Host (OTG) на планшете. В настройках Open Headunit можно выбрать стандартный стек Android USB или библиотеку libusb. Второй вариант выручает на специфических китайских чипсетах Allwinner и MediaTek, где стандартная подсистема Android отключает USB-устройства при малейшем сбое.
Беспроводной режим и козни Google
Google стабильно раз в полгода обновляет Android Auto и ломает неофициальные способы передачи картинки по Wi-Fi. Например, в релизе Android Auto 17.4 разработчики в очередной раз перекроили схему соединения, нарушив работу сторонних беспроводных помощников.
Сейчас в проекте реализовано несколько вариантов беспроводной связи:
- Wireless Helper: отдельное приложение-компаньон для смартфона. Оно берет на себя автоматический запуск точки доступа, поиск headunit-сервера в локальной сети и стартует трансляцию без лишних кликов.
- Wi-Fi Direct (P2P): прямое соединение двух устройств без участия внешней Wi-Fi сети или мобильного хотспота.
- Native mode: эмуляция штатного подключения через Bluetooth-handshake. Работает далеко не везде, так как мало какие планшеты умеют правильно обрабатывать нужные Bluetooth-профили одновременно.
Запустить беспроводное соединение можно прямо из скриптов автоматизации. Если вы используете Tasker или MacroDroid, отправить команду на подключение к конкретному IP-адресу получится с помощью одного intent:
adb shell am start -a android.intent.action.VIEW -d "headunit://connect?ip=192.168.1.25"

Что под капотом
Проект написан на Kotlin, но внутри прячется много низкоуровневой работы с железом.
Во-первых, декодирование видео. По умолчанию система пытается задействовать аппаратный MediaCodec для H.264 или H.265. Если чипсет планшета некорректно обрабатывает NAL-пакеты H.265 (что часто встречается на старых планшетах Amazon Fire и устройствах Rockchip), картинка замирает на надписи «Android is starting». Чтобы обойти эту проблему, разработчики встроили софтверный декодер FFmpeg. Решение снижает FPS на слабых одноядерных процессорах, но дает стабильную картинку без черных экранов.
Во-вторых, работа с аудиофокусом. До версии 3.2.0 играющая на планшете музыка перебивала звуки навигатора со смартфона. Авторы переписали AudioTrackWrapper и добавили динамический захват аудиофокуса. Теперь системные подсказки маршрута микшируются с фоновым звуком, не обрывая воспроизведение.
В-третьих, управление. Open Headunit умеет перехватывать сигналы со штатных кнопок руля (MTC, FYT) и поворедных шайб-джойстиков. В настройках есть визуальный сниффер клавиш, где можно назначить физическую кнопку на действия в интерфейсе Android Auto.

Досадные баги и как их чинить
Из-за различий в железе и версиях Android вам наверняка придется заглянуть в раздел настроек.
- Google Карта не реагирует на нажатия в портретном режиме. Это старый баг взаимодействия сервисов Google и сторонних эмуляторов. Лечится уменьшением параметра DPI (Pixel density) в настройках приложения до значений ниже 200 (например, 190).
- Картинка идет рывками или задерживается. Стоит запустить встроенный Auto-Optimization Wizard. Он автоматически переберет комбинации разрешений (вплоть до 1440p) и кодеков, выбрав подходящую связку для вашего видеодекодера.
- Постоянные обрывы Wi-Fi. В настройках Android на смартфоне нужно отключить функцию «Помощник Wi-Fi» (автоматическое переключение на мобильную сеть при слабом сигнале без интернета).
Итоги
Open Headunit — отличный пример того, как открытое сообщество решает проблему планируемого устаревания железа. Если у вас есть пылящийся планшет, автодержатель и час свободного времени на настройку, вы получите удобную навигацию и медиасистему в машине без затрат на покупку нового головного устройства.
Проект активен, PR от сторонних контрибьюторов принимаются регулярно, а в Wiki репозитория подробно расписаны шаги отладки для специфических китайских платформ.
