Привет! Я Аня, QA-инженер из команды Android в 2ГИС. В середине прошлого года мы наладили контакт с командой Гугла. На тот момент релиза SDK Android Auto ещё не было. Но мы получили ранний доступ к SDK и смогли интегрировать в него навигатор первыми в России. В статье я расскажу о том, как это было.
Если вы не знаете, что такое Android Auto, вот официальный ролик:
Постепенно узнавали требования и ограничения
Мы стартовали в июне, когда документация для Android Auto была написана не вся. Целиком она появилась к октябрю 2020-го. До октября мы работали с начальной версией документации.
У Гугла строгие требования к сторонним разработчикам. Условия, что мы узнавали из документации, приходилось учитывать. Нам пришлось или отказываться от первоначальных идей, или внедрять их по-иному. Срезали функционал и дизайн. Приведу несколько примеров.
Выбросили кейсы, где предполагались тачи. Их планировали добавить только во второй версии SDK. Поэтому на всех экранах пришлось добавить кнопки зума, чтобы дать пользователю масштабировать карту.
Отказались от показа времени пути до объекта. Изначально планировали так: пользователь набрал в поиске «Кафе», 2ГИС показал пины кафе на карте и мини-карточки. В мини-карточках указаны названия и прочая информация.
Но сделать это не вышло. Так как на фоне поисковой выдачи отрисована карта, по требованиям Гугла, нужно указывать именно расстояние.
Оказалось нельзя отрисовать свой UI. Гугл требует, чтобы все навигаторы выглядели единообразно. Пользователь занят вождением, нельзя тратить его внимание на новый интерфейс. Поэтому весь UI создаётся фреймворком. Мы же смогли только выбрать готовый шаблон и нарисовать на его фоне карту 2ГИС. Нельзя было использовать свои шрифты, управлять дневной и ночной темами.
Убрали уведомления о камерах измерения скорости. Потому что места под эти уведомления оказались заняты другими кнопками и контролами. А количество элементов на экране ограничено.
Пришлось ограничивать списки до шести пунктов. По требованиям, юзер-стори должны быть короткими, с минимумом информации. Поэтому в Android Auto не больше шести элементов списка, будь то настройки приложения или результаты поиска. Для пользователя это непривычно, но отображать больше элементов в списках нельзя. Система следит за соблюдением ограничений. Если нарушить правило, приложение будет остановлено.
Это же правило наложило на нас лимит глубины в пять экранов. Например: главный экран → зайти в поиск → получить список кафе → открыть карточку кафе → выбрать альтернативный маршрут — всё, лимит исчерпан.
Все эти ограничения заставили нас пересмотреть свой процесс внедрения фич.
Обычно он выглядел так:
В задаче внедрения навигатора процесс изменился:
От привычных этапов работы пришлось отказаться. В нетипичной задаче велик риск сделать что-то, а потом выяснить, что нужно иное. Поэтому мы шли короткими итерациями. Разработка, тестирование и работа над дизайнами в разных частях проекта были параллельны. Это помогало быстро определять, что реально сделать, а что — нет.
Тестировали на собственном железе и тестовом окружении
Первая сборка для QA появилась в конце августа 2020-го. Мы получили магнитолы — такие же, как ставят в автомобили. Но автомобили были не у всех тестировщиков, поэтому наши магнитолы модернизировали: к каждой из них админы припаяли вилку и блок питания на 12В от компьютера.
Когда я начала тестировать магнитолу, столкнулась с проблемой: если я имитирую движение, смотреть карту можно, а копаться в настройках нельзя. Оказалось, что настраивать приложение можно только когда машина стоит — таковы стандарты безопасности. То есть мне надо доказать системе Android Auto, что моя «машина» запаркована.
Пришлось эмулировать стояночный тормоз или режим парковки. Я замкнула провод Parking на корпус магнитолы и вошла в настройки.
Ещё мы добавляли железо, когда тестировали озвучку навигатора. У магнитолы нет своих динамиков, она воспроизводит звук через аудиосистему автомобиля. Но наши «машины» её не имели. Значит нужно такое тестовое окружение, которое повторяло бы эту схему.
Я нашла старую колонку, мы с разработчиками придумали, как присоединить её к магнитоле. Зачищаю провода, подключаю — звука всё равно нет.
Было три варианта, в чём проблема: колонка, магнитола или приложение. Я запустила радио — звук появился. Проблема в приложении! Так я нашла первый баг с приоритетом blocker. Мы зарепортили его в Гугл, и баг пофиксили.
Ещё одним из требований была поддержка Cluster Display. Это дополнительный экран у новых автомобилей, обычно выпущенных после 2020-го года.
Отдельно, как магнитолу, его не купишь. Найти авто с ним непросто. В автосалонах Новосибирска машин с таким дисплеем не было — это проверил наш продакт. Так что мы настроили эмулятор головного устройства и надеялись, что этого достаточно. Естественно, при ревью в стор выяснилось, что это не так. Маневры в Cluster Display не всегда соответствовали маневрам в навигаторе. Эту проблему мы исправили.
Отлавливали баги даже перед релизом
Баги делились на две категории: те, что воспроизводятся только на магнитоле, и те, что воспроизводятся только на авто.
Из первых запомнился баг, когда через несколько минут вождения пропадала навигация. Я запускала эмуляцию движения и через несколько минут меня выкидывало на главный экран. В логах было пусто. Мы решили, что проблема в моей магнитоле и перестали волноваться. Как оказалось, зря. Спустя пару месяцев этот баг усложнил жизнь одному из коллег, когда он установил наш навигатор и поехал на Алтай.
Фикс этого бага осложнялся тем, что у разработчиков баг по-прежнему не всплывал. Чтобы понять, в чём дело, пришлось обратиться к ребятам из Гугла. Они подсказали нам решение, и баг пофиксили.
Баги, которые воспроизводились только на автомобиле, коллеги отлавливали на своих машинах. Особенно интересным был баг геопозиции. Когда я сидела дома, то меняла свою геопозицию с помощью внутренней утилиты: в ней можно изменить направление движения, остановиться, сойти с маршрута с маршрута и так далее. Тестирование проходило успешно, пока мы не поехали на реальной машине. Выяснилось, что когда машина долго стоит, в пробке или на светофорах, маркер геопозиции крутится вокруг своей оси.
Выяснилось, что это даже не баг, а особенность реализации. При низких скоростях движения GNSS сообщает маркеру случайное направление. Как будто мы топчемся на месте всё время поворачиваем. Лечится это тем, что при снижении скорости ниже какого-то порога направление замораживается. В основном приложении 2ГИС это было сделано много лет назад, но в реализации для Android Auto пришлось снова про это вспомнить.
В самом SDK тоже были баги. В наших интересах было работать со стабильным SDK, поэтому мы помогали отлавливать эти баги: собирали логи и видео, отправляли их в багрепортах разработчикам Гугла. Они быстро выходили на диалог и помогали решить проблему — или фиксили баг, или подсказывали, что сделать нам. Было понятно, что им совсем не всё равно, как и когда будет решена проблема. От такого участия у меня осталось очень приятное впечатление.
В SDK мы поймали баг с голосовым поиском. 2ГИС не влияет на контекст распознавания голосового ввода, это часть Гугла. В Академгородке, где находится один из наших офисов, есть столовая «Кукуруза». Когда наш продакт попытался построить маршрут до неё, услышал: «Кукуруза — однолетнее травянистое культурное растение…». Образовательно, конечно, но до котлеток дойти не помогло.
Наконец, мы всё пофиксили и вышли на ревью в стор. Обычно от ревью до релиза у нас проходило 12 часов, но не в этот раз. Приложение вернулось на доработку, потому что «использовало разрешение, не разрешённое для этой категории».
Пользователи уже злились: в анонсе, написанном до ревью, мы пообещали Android Auto, но в сторе его по-прежнему нет:
Мы искали проблему несколько дней. Оказалось, наше приложение не останавливалось, когда пользователь запускал другую программу для навигации. На экране всплывали оповещения сразу от двух приложений. По ТЗ это было запрещено. Само собой, такую ошибку в стор пропустить не могли.
Проблему исправили и 12 ноября 2020 года мы запустили публичный бета-тест. Мы были горды — 2ГИС первыми из сторонних разработчиков в России выпустили приложение для Android Auto.
Тестовые стенды, сделанные самостоятельно, и тысячи километров на своих машинах. Плотное общение с разработчиками Гугла, разница во времени с которыми — 14 часов. И работа, где нестандартные решения нужно искать прямо на ходу. Этот проект оказался очень запоминающимся и я рада, что участвовала в нём.
Комментарии (25)
sinneren
22.12.2021 10:51+3андроид авто круто, превью это новое тоже круто. осталось понять чтож так маршруты стали криво строиться. что для авто, что для общ. транспорта. ну для авто еще ладно. а уж какие кринжовые выбирает варианты проезда пешеходам - жуть.
Sanch_ru
22.12.2021 11:44Мы постоянно улучшаем маршруты и если вы видите какие-то странности смело сообщайте об ошибках через форму связи в приложении: это поможет нам и дальше улучшать алгоритмы роутинга
sinneren
22.12.2021 15:35+3я пытался... вразумительных ответов не получил. или повторно воспроизвести не получается,а во время обращения ничего в саппорт, видимо, не отправляется. в целом, главная проблема это вместо нормальных пересадок по метро зачем-то заставляет делать кучу нелогичных пересадок на иной транспорт. возможно, так действительно быстрее. на минуту-две. зато на 50+ рублей дороже.
Хотя бы и пример.
Есть маршрут 1 - пешком(13мин)-метро-пешком(23 мин). занимает 55мин, из них пешком 36мин.
Есть маршрут 4 - пешком(1мин)-транспорт-метро-транспорт-пешком(1мин). 61мин. пешком 16 (кстати откуда, если пешком написано по 1 минуты с каждомй стороны??)
Куда логичнее был бы маршрут пешком(13мин)-метро-трансопрт-пешком(1мин), то есть совместить. Было бы 60 мин. 1 пересадка платная. По времени потери не критичные, по удобству выигрышь.Sanch_ru
23.12.2021 20:49Это хороший пример, спасибо! Как раз сейчас улучшаем маршруты на метро, учтем его
dasenkiv
22.12.2021 12:24+2Предыдущий комментатор описал мою боль. Имеем город-миллионник с пустыми центральными улицами, в итоге я еду по таким закоулкам и дворам, какие первый раз вижу на карте. Причем еду в центр города, а не на окраину.
Sandwichman
22.12.2021 16:30Постоянно пользуюсь 2гис, не заметил ни разу чтобы маршруты были плохими)
sinneren
23.12.2021 15:29хз, актуально для спб. и все знакомые и автоблохеры питерские ругают за наркоманские маршруты. пользуюсь иным известным русским сервисом для маршрутов.
что касается маршрутов ОТ, в 14 году, на удивление, оказался гугл лучше всех. В то время как предлагали кучу маршрутов с пересадкой, забугорный сервис лучше знал где сесть на автобус и выйти прям возле работы без всяких пересадок и не затратить особо времени на пешеходство. Сейчас не знаю по прежнему ли так хорошо работает гугл.
entze
22.12.2021 11:37А с CarPlay можете сравнить? Где было больше боли? Все ли задуманное получилось реализовать?
Sanch_ru
22.12.2021 11:44+1С Carplay всё было даже еще более нетривиально, мы ранее писали об этом опыте на хабр :)
https://habr.com/ru/company/2gis/blog/452638/entze
22.12.2021 12:49Спасибо!
В статье один из ключевых моментов, что фреймворк от Apple был еще сырой и обратной связи не было. Можно апдейт - исправились ли в лучшую сторону? Пофикисили ли баги и документацию? Может какие-то новые необходимые вам фичи появились?Sanch_ru
23.12.2021 20:48Хм, я бы наверно сказал, что принципиально что-то не изменилось - документация стала получше, но всё еще встречаются достаточно странные Carplay специфичные баги
NickSin
22.12.2021 18:06А когда ждать от вас поддрежку Dashboard на CarPlay? А то очень удобная штука.
Sanch_ru
23.12.2021 20:46Ага, исследуем эту возможность. А сейчас вы используете эту штуку? Ездите вместе с Google/Apple Maps с ней?
NickSin
23.12.2021 20:55+1Яблочные карты и Гугловские фигня. Я использую MagicEarth. Вот там они классное взаимодействие сделали. Очень удобно. Я люблю слушать подкасты и музыку и меня иногда напрягает выходить и переключать. Так же, если я перехожу на dashboard, то там работают карты, что последние были привязаны к нему и просиходит наложение озучки с одних карт на другие. Это вымораживает
AlexGluck
23.12.2021 06:30Вот бы без провода все эти свистопляски работали...
lonelymyp
23.12.2021 20:42Дык работают, просто не во всех ГУ автомобильных есть беспроводной режим. Удобненько, телефон даже из кармана доставать не надо.
AlexGluck
23.12.2021 23:27Я как раз о том что не всегда работает эта фишка. А подбирать авто, смартфон под конкретную функцию выглядит странным.
lonelymyp
24.12.2021 19:52Помоему наоборот, логично. Ты же при покупке выбираешь что тебе нужно. Объём мотора, цвет салона, всякие там опции подогревы и прочее. Я специально взял комплектацию с более навороченным ГУ, чтобы там были нужные мне функции.
А смартфон любой работает, это же штатная функция и андроида и айоса.
AlexGluck
24.12.2021 19:55Я вот тоже топовую комплектацию взял, а беспроводного андроид авто нет ( так что это не всегда возможно
Heinhain
24.12.2021 22:59Машину брал в феврале и вот только сегодня нашел-таки как включить Android Auto без проводов. Казалось бы все должно быть просто, но UI/UX автомобильных систем, похоже, находитися еще где-то в начале нулевых
kpetrov54
23.12.2021 11:27Ребята, вроде класный продукт делаете. Но вот не могу полноценно перейти на него с Yandex.карт или Гугл.карт. Очень сильно не хватает показа альтернативного маршрута как это делают ваши конкуренты. А 2гис иногда такими "огородами" ведет ради экономии 2 минут, вместо того чтобы проехать по главной улице.
Sanch_ru
23.12.2021 20:44Да, этой штуки действительно очень не хватает - поэтому очень хотим добавить её в наш новый навигатор
Heinhain
Любопытно. А что там с тачами? Честно говоря, это, наверное, основная причина пользоваться гуглкартами вместо 2Гис. Часты ситуации, когда стоишь на светофоре перед сложным неизвестным перекрестком (в Москве очень любят асфальтровать огромные площади с 5-7 направлениями и не обновлять разметку, а авто я приобрел не так давно) и куда удобнее слегка подвинуть карту что бы сориентироваться, чем масштабировать и пытаться что-то рассмотреть. Голосовые подсказки, к слову, во всех навигаторах выключил - в 80% случаев они опаздывают (маневры), либо просто нет никакого смысла - те же камеры и дорожные работы/аварии. Камеры неважны просто потому что ппд соблюдать надо везде, а о событиях опять же слишком поздно сообщается и ты уже стоишь без возможности как-то объехать все это дело.
Sanch_ru
Благодаря последнему обновлению библиотеки Android Auto мы поддержали зум и драг с помощью жестов, про нас даже написали в блоге Google :)
https://android-developers.googleblog.com/2021/09/bringing-richer-navigation-charging.html
Heinhain
И прада работает. Давно не проверял. Спасибо! Так что буду пока продолжать кататься с 2Гис, что бы по-новой оценить