Создание паркованных приложений для Android Automotive OS

Помимо поддержки приложений, созданных для использования во время вождения, Android Automotive OS поддерживает браузеры , игры и видеоприложения для использования во время парковки. Вы можете установить на автомобили то же приложение, что и на другие устройства с большим экраном, с небольшими изменениями.

Проверьте существующее приложение на эмуляторе Android Automotive OS.

Чтобы приступить к созданию приложения для Android Automotive OS, сначала протестируйте существующее приложение на эмуляторе Android Automotive OS. Чтобы настроить эмулятор, выполните действия, описанные в разделе «Тестирование с использованием эмулятора Android Automotive OS» . Затем вы можете запустить приложение, следуя инструкциям в разделе «Запуск приложения на эмуляторе» .

При запуске приложения следите за проблемами совместимости, например следующими:

  • Экраны информационно-развлекательной системы имеют фиксированную ориентацию. Чтобы соответствовать рекомендациям по обеспечению качества автомобильных приложений , приложения должны поддерживать как книжную, так и альбомную ориентацию.
  • API, доступные на других устройствах, могут быть недоступны в Android Automotive OS. Например, некоторые API-интерфейсы сервисов Google Play недоступны в ОС Android Automotive. Подробную информацию о том, как решить эти проблемы, см. в разделе «Отключение функций» .

Настройте файлы манифеста вашего приложения

Чтобы настроить таргетинг на Android Automotive OS, ваше приложение должно иметь определенные записи манифеста. При этом приложения, предназначенные для Android Automotive OS, отправляются в Play Store с использованием отдельного типа выпуска Automotive OS. Они проходят ручную проверку, чтобы убедиться, что они безопасны для использования в автомобиле. Дополнительные сведения см. в разделе Распространение приложений Android для автомобилей .

Требуемые функции Android Automotive OS

Чтобы быть размещенными в Play Store в автомобиле, приложения, созданные для Android Automotive OS, должны включать следующий элемент <uses-feature> в файл AndroidManifest.xml :

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
</manifest>

Приложения, отправленные на неавтомобильные треки, не могут объявлять элемент <uses-feature> , показанный в предыдущем примере кода, поскольку они не могут зависеть от оборудования, специфичного для автомобиля. Таким образом, чтобы выпустить одно и то же приложение как для автомобильных, так и для неавтомобильных устройств, вам необходимо создать как минимум два варианта вашего приложения: один для автомобильных устройств и другой для мобильных устройств. Дополнительные сведения о создании этих отдельных вариантов см. в следующей документации:

Два варианта приложения могут иметь одно и то же имя пакета, но должны иметь разные коды версий, поскольку они загружаются в Play Store отдельно.

Кроме того, вместо использования отдельных вариантов вы можете использовать отдельные имена пакетов для мобильных и автомобильных APK-файлов или пакетов приложений. Чтобы понять компромиссы каждого подхода, обратитесь к разделу Имена пакетов в руководстве разработчика мультимедийных приложений.

В дополнение к элементу, показанному в предыдущем примере кода, приложения, созданные для Android Automotive OS, должны включать следующие элементы <uses-feature> в корневой элемент <manifest> :

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

Если вы явно установите для этих функций значение «необязательно», это поможет гарантировать, что ваше приложение не будет конфликтовать с доступными аппаратными функциями на устройствах с ОС Android Automotive OS.

Убедитесь, что нет отвлекающих действий.

Чтобы ваше приложение было доступно для использования только во время парковки, не включайте следующий элемент <meta-data> ни в один элемент <activity> в своем манифесте:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Без этих метаданных действия вашего приложения автоматически блокируются ОС, когда автомобиль переходит в режим вождения, чтобы водитель не отвлекался. Это происходит как обратный вызов жизненного цикла onPause , во время которого вы должны приостановить воспроизведение видео и аудио из вашего приложения.

Записи манифеста для конкретных категорий

Помимо предыдущих требований, которые применяются ко всем припаркованным приложениям, к категориям видео и игр предъявляются дополнительные требования:

Оптимизируйте свое приложение для Android Automotive OS

Чтобы предоставить пользователям максимальное удобство, при создании приложения для Android Automotive OS учитывайте следующие моменты.

Оптимизация для больших экранов

Экраны, присутствующие в автомобилях с ОС Android Automotive OS, по размеру, разрешению и соотношению сторон больше похожи на планшеты и складные устройства, чем на телефоны. Таким образом, оптимизация вашего приложения для больших экранов принесет пользу и вашим пользователям в автомобилях.

В частности, ознакомьтесь с руководствами «Поддержка разных размеров экрана» и «Перенос пользовательского интерфейса на адаптивные макеты» для получения подробной информации о том, как максимально эффективно использовать большие размеры экрана, а также с галереями мультимедиа и игр для вдохновения и рекомендаций по дизайну.

Другие оптимизации больших экранов, такие как совместимость ввода , не столь полезны для Android Automotive OS, но они все же могут улучшить взаимодействие с пользователем. Например, для навигации с помощью клавиатуры используются те же API, что и для поворотной навигации , поэтому любая оптимизация может принести пользу обоим форм-факторам.

Работа с оконными вставками и вырезами витрин.

Как и другие форм-факторы, ОС Android Automotive включает в себя элементы системного пользовательского интерфейса, такие как панели состояния и навигации, а также поддержку непрямоугольных дисплеев.

По умолчанию приложения рисуют в области, которая не перекрывается с системными панелями и вырезами дисплея. Однако вы можете захотеть, чтобы ваше приложение скрывало системные панели, отображало содержимое за ними или отображало содержимое в вырезе дисплея, как описано в разделе «Размещение приложения внутри оконных вставок» . Если ваше приложение поддерживает что-либо из этого, обратитесь к следующим подразделам, чтобы узнать, как обеспечить хорошую работу вашего приложения в экосистеме устройств Android Automotive OS.

Системные панели, режим погружения и сквозной рендеринг

Системные планки в автомобилях могут иметь размеры и располагаться иначе, чем в других форм-факторах. Например, панели навигации могут располагаться слева, справа или внизу экрана. Даже в том случае, если сверху находится строка состояния, а снизу — панель навигации (как в большинстве телефонов и планшетов), в автомобилях размер этих элементов, скорее всего, будет намного больше.

Кроме того, ОС Android Automotive позволяет OEM-производителям контролировать, могут ли приложения отображать или скрывать системные панели для входа в режим погружения и выхода из него . Например, запретив приложениям скрывать системные панели, OEM-производители могут гарантировать, что элементы управления автомобилем, такие как климат-контроль, всегда будут доступны на экране. Если OEM-производитель запретил приложениям управлять системными панелями, ничего не происходит, когда приложение вызывает API WindowInsetsController (или WindowInsetsControllerCompat ) для отображения или скрытия системных панелей. Обратитесь к документации по show и hide чтобы узнать больше о том, как определить, может ли ваше приложение изменять вставки.

Аналогичным образом, OEM-производители также могут контролировать, могут ли приложения устанавливать цвет и прозрачность системных панелей, чтобы гарантировать, что панели и элементы, содержащиеся в них, всегда четко видны. Если ваше приложение отображает от края до края, убедитесь, что за системными панелями отображается только некритичный контент. Это содержимое может быть не видно, если OEM-производитель устройства запрещает настройку цвета или прозрачности полос.

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

Если ваше приложение работает от края до края, не делайте предположений о размере, количестве, типе или расположении системных панелей. Вместо этого используйте API-интерфейсы вставок окон, чтобы расположить содержимое вашего приложения относительно системных панелей. Дополнительные сведения о том, как использовать эти API, см. в разделе Отображение контента от края до края в вашем приложении . Жестко закодированные значения заполнения, которые, хотя и не рекомендуются, могут сохранять контент в безопасной зоне на других устройствах, но не в автомобилях.

Адаптация к дисплеям неправильной формы

Помимо прямоугольных дисплеев, некоторые автомобили могут иметь экраны неправильной формы, например, показанные на рисунке 1 :

Схема устройства Android Automotive OS с дисплеем, изогнутым с правой стороны.
Рис. 1. Устройство Android Automotive OS с дисплеем, изогнутым с правой стороны. Зеленая область — это безопасный прямоугольник, который не пересекается с ограничивающей рамкой выреза кривой.

Если ваше приложение не отображает от края до края, вам не нужно ничего делать, чтобы оно отображалось в безопасной области.

Если ваше приложение отображает от края до края, вы можете выбрать, как оно будет вести себя в отношении вырезов экрана. Это можно сделать, используя ресурсы, установив атрибут android:windowLayoutInDisplayCutoutMode для темы вашего приложения или во время выполнения, изменив атрибут окна layoutInDisplayCutoutMode .

Поскольку типы вырезов дисплея, присутствующие на устройствах Android Automotive OS, отличаются от типов вырезов на мобильных устройствах, не используйте LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT или LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES , поведение которых оптимизировано для вырезов, обнаруженных на мобильных устройствах. Вместо этого используйте LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER или LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS чтобы всегда избегать или всегда входить в вырез. При выборе последнего варианта см. раздел Поддержка вырезов дисплея для получения более подробной информации об API, связанных с вырезами дисплея.

Если ваше приложение отображается в области выреза дисплея и вы хотите, чтобы поведение Android Automotive OS и мобильных устройств отличалось, ознакомьтесь с инструкциями в разделах Отключение функций , если ваше приложение устанавливает такое поведение во время выполнения, и Использование альтернативных ресурсов, если ваше приложение устанавливает такое поведение с помощью ресурса. файлы.

Отключить функции

Если вы делаете существующее мобильное приложение доступным для ОС Android Automotive, некоторые функции и возможности могут быть неактуальны или недоступны. Например, автомобили обычно не обеспечивают доступа к камерам. Кроме того, в ОС Android Automotive доступна только часть сервисов Google Play; дополнительную информацию см. в сервисах Google Play для автомобилей .

Вы можете использовать API PackageManager.hasSystemFeature , чтобы определить, работает ли приложение в ОС Android Automotive, проверив функцию FEATURE_AUTOMOTIVE , как показано в следующем примере:

Котлин

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Ява

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Альтернативно, если в вашем приложении также есть компонент Android Auto, вы можете использовать API CarConnection из библиотеки приложений Android для автомобилей , чтобы определить, работает ли приложение в ОС Android Automotive или Android Auto или оно не подключено к автомобилю в все.

Для режима «Картинка в картинке» (PiP) следуйте общепринятым рекомендациям , чтобы проверить, доступна ли эта функция, и отреагировать соответствующим образом.

Обработка офлайн-сценариев

Хотя автомобили все чаще подключаются к Интернету, приложениям рекомендуется работать без подключения к Интернету, например, в следующих случаях:

  • Пользователи могут отказаться от мобильных данных, предлагаемых в рамках пакета подписки от автопроизводителя.
  • Доступ к мобильным данным может быть ограничен в определенных регионах.
  • Автомобили с радиоприемниками Wi-Fi могут находиться вне зоны действия Wi-Fi, или OEM-производитель может отключить Wi-Fi в пользу мобильной сети.

Будьте готовы справиться с этими сценариями в своем приложении, постепенно снижая функциональность, зависящую от доступа к Интернету, например, предлагая офлайн-контент. Для получения дополнительной информации ознакомьтесь с рекомендациями по оптимизации сети .

Используйте альтернативные ресурсы

Чтобы адаптировать приложение для автомобилей, вы можете использовать квалификатор ресурса car , чтобы предоставить альтернативные ресурсы при работе на автомобиле с ОС Android Automotive. Например, если вы используете ресурсы измерения для хранения значений заполнения, вы можете использовать большее значение для набора ресурсов car , чтобы увеличить целевые объекты касания.

Распространяйте свое приложение

После того как вы протестировали свое приложение на соответствие рекомендациям по обеспечению качества автомобильных приложений для своей категории и создали сборку для автомобильной ОС Android со всеми необходимыми изменениями для этой категории, вы можете опубликовать его в версиях форм-фактора автомобильной ОС в магазине Play Store. Дополнительные сведения о процессе публикации см. в разделе Распространение приложений Android для автомобилей .

Оставьте отзыв о припаркованных приложениях

Если вы столкнулись с проблемой или у вас есть запрос на добавление функции при разработке припаркованного приложения для Android Automotive OS, вы можете сообщить об этом с помощью Google Issue Tracker . Обязательно заполните всю запрашиваемую информацию в шаблоне вопроса. Прежде чем подавать новую проблему, проверьте, есть ли о ней уже в списке проблем. Вы можете подписаться и проголосовать за проблемы, щелкнув звездочку проблемы в трекере. Дополнительную информацию см. в разделе «Подписка на выпуск» .

Создать новую задачу