Голосовое управление автомобилем на Android: как дорабатывать мобильное ПО без ущерба для безопасности
В кейсе SimbirSoft — о том, как доработать Android Automotive-приложение для голосового управления автомобилем без ущерба для безопасности: расширить команды и API автомобильных систем, обновить уведомления и звуки, добавить запуск ассистента кнопкой на руле и фича-флаги для управляемого включения функций при сборке и обновлении ПО.
Современные мобильные приложения все чаще становятся частью сложных технических систем: от мультимедиа в автомобилях до устройств умного дома и промышленного оборудования. В таких проектах важно не просто добавить новую функцию, но и обеспечить её корректную работу, совместимость с существующими компонентами и возможность контролируемого обновления. Разберем, как эти задачи решались в проекте SimbirSoft для компании, разрабатывающей программное обеспечение для Android Automotive.
Клиент и задача: расширить возможности управления автомобилем
К нам обратилась компания, специализирующаяся на разработке ПО для Android Automotive. Это операционная система на базе Android, предназначенная для работы непосредственно в автомобильных информационно-развлекательных системах.
Перед командой стояла задача доработать приложение, через которое пользователь взаимодействует с различными системами автомобиля и управляет настройками мультимедиа. Особое внимание уделялось голосовому помощнику: необходимо было расширить обработку его команд, улучшить механизм уведомлений и звуков, а также обеспечить гибкое управление доступностью ассистента при обновлении программного обеспечения.
Такая работа требует учитывать не только пользовательские сценарии, но и особенности взаимодействия программных компонентов. В автомобильной системе особенно важно предсказуемое поведение приложения. Некорректная обработка команды может помешать использованию нужной функции или вынудить водителя переключить внимание на экран.
Поэтому ключевыми требованиями стали надежность, предсказуемое поведение приложения и возможность контролировать включение новых функций.
Почему недостаточно просто добавить новые функции
На первый взгляд, доработка голосового помощника может показаться набором относительно независимых задач: добавить обработчик команды, подключить новый API, настроить уведомления и воспроизведение звука. На практике эти изменения затрагивают несколько частей приложения одновременно.
Новые возможности затрагивают сразу несколько компонентов приложения: обработку голосовых команд, взаимодействие с автомобильными системами и уведомления. Изменения необходимо согласовать с существующей архитектурой и проверить связанные пользовательские сценарии.
Дополнительно важно контролировать доступность голосового помощника при обновлении программного обеспечения. Поэтому требовалось предусмотреть не только реализацию новых функций, но и механизм управления их включением и отключением.
Следовательно, решение должно было не просто расширить функциональность приложения, но и сохранить управляемость продукта при его дальнейшем развитии.
Какое решение выбрали
Команда Simbirsoft доработала сервис обработки голосовых команд, расширила API управления автомобильными системами и обновила связанные механизмы уведомлений и звуков.
Одним из изменений стал запуск голосового помощника по нажатию кнопки на руле. Такой сценарий дает водителю дополнительный способ обратиться к ассистенту, не прибегая к поиску соответствующего элемента интерфейса на экране.
Команда также расширила API для управления дверями, зеркалами, сиденьями и окнами и перевела приложения на новый интерфейс взаимодействия с этими системами.
Отдельное внимание уделили уведомлениям. В приложении появились новые типы уведомлений, была реализована их сортировка и добавлено тестовое покрытие. Для воспроизведения индивидуальных звуков уведомлений использовали Android-компонент SoundPool.
Еще одним решением стали фича-флаги. Это механизм, позволяющий управлять доступностью функциональности без необходимости полностью удалять ее из кодовой базы. В рамках проекта реализовали возможность отключения голосового ассистента с помощью флага на этапе сборки. Предусмотрели также включение и выключение ассистента при обновлении программного обеспечения.
Реализация: согласованность компонентов и контроль изменений
Основная сложность подобных проектов заключается в обеспечении корректной работы новых функций в существующей системе. Для этого недостаточно реализовать отдельные обработчики. Необходимо также учитывать архитектуру приложения, связи между сервисами и влияние изменений на остальные компоненты.
В проекте использовались инструменты Kotlin, Coroutines и Flow для работы с асинхронными операциями и потоками данных. Концепции MVVM и Clean Architecture применялись для организации структуры приложения, а библиотека Hilt для управления зависимостями. В технологический стек также входил набор современных технологий и библиотек, составляющих полный стек для разработки мобильного приложения: Jetpack Compose, Jetpack Navigation, Room, MQTT, KotlinX Serialization и Protobuf.
Такой набор технологий помогает организовать взаимодействие между слоями приложения, управлять зависимостями и обрабатывать данные. При этом сам по себе технологический стек не гарантирует надежности: важны корректная интеграция компонентов, проверка сценариев и контроль изменений.
Работа включала не только разработку новых функций, но и исправление ошибок, настройку эмулятора, написание тестов и обновление документации в Confluence. Для тестирования использовались JUnit, Mockito и инструменты Jetpack Compose Test. Команда также взаимодействовала с разработчиками, аналитиками и другими участниками проекта, чтобы согласовывать изменения и проверять их совместимость с существующей системой.
Результаты: управляемая функциональность и более надежная разработка
В результате доработки приложение получило новые возможности голосового управления и взаимодействия с автомобильными системами. Команда расширила API, обновила механизмы уведомлений и воспроизведения звуков, а также предусмотрела управление доступностью голосового помощника.
Эти изменения направлены на решение нескольких бизнес-задач.
Безопасность и удобство. Запуск ассистента кнопкой на руле и голосовое взаимодействие создают дополнительные способы управления функциями автомобиля. Это уменьшает необходимость отвлекаться на экран.
Контроль выпуска новых функций. Фича-флаги дают возможность управлять доступностью ассистента в зависимости от требований к сборке и этапа обновления. Такой подход помогает снизить риски при внедрении изменений.
Поддерживаемость продукта. Тесты, документация и воспроизводимая среда проверки упрощают поиск ошибок и помогают команде сопровождать приложение по мере роста функциональности.
Гибкость конфигурации. Возможность собирать версии с включенным или отключенным ассистентом может быть полезна, если требования к продукту различаются в зависимости от рынка или условий эксплуатации.
Где применим такой подход
Подходы, использованные в проекте, применимы и за пределами автомобильной отрасли. Они полезны в приложениях для умного дома, промышленных системах управления оборудованием и корпоративных продуктах, в которых новые функции необходимо внедрять без нарушения существующих сценариев.
В таких проектах особенно важны три принципа: согласованное взаимодействие компонентов, проверка связанных пользовательских сценариев и возможность контролировать доступность новых функций.
Кейс Simbirsoft показывает, что доработка сложного мобильного приложения требует не только реализации новых возможностей, но и внимания к архитектуре, тестированию и сопровождению. Такой подход помогает управляемо развивать продукт и снижать риски, связанные с внесением изменений в существующую систему.