Создание паркованных приложений для 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, совместимые приложения проходят ручную проверку, чтобы гарантировать их безопасность для использования в автомобиле. Дополнительные сведения см. в разделе Распределение по автомобилям .

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

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

<manifest ...>
  ...
  <!--
    Depending on the track you choose to distribute your app, the android:required attribute can
    also be "false" or left unset. See Choose a track for Android Automotive OS.
  -->
  <uses-feature
      android:name="android.hardware.type.automotive"
      android:required="[true|false]" />
  ...
</manifest>

В дополнение к элементу, показанному в предыдущем примере кода, приложения, созданные для 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 , чтобы увеличить целевые объекты касания.

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

После того как вы проверите свое приложение на соответствие рекомендациям по обеспечению качества автомобильных приложений для своей категории, вы можете использовать Google Play для его распространения в Cars со встроенным Google. Дополнительные сведения о процессе публикации см. в разделе Распространение на автомобили .

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

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

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

,

Помимо поддержки приложений, созданных для использования во время вождения, 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, совместимые приложения проходят ручную проверку, чтобы гарантировать их безопасность для использования в автомобиле. Дополнительные сведения см. в разделе Распределение по автомобилям .

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

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

<manifest ...>
  ...
  <!--
    Depending on the track you choose to distribute your app, the android:required attribute can
    also be "false" or left unset. See Choose a track for Android Automotive OS.
  -->
  <uses-feature
      android:name="android.hardware.type.automotive"
      android:required="[true|false]" />
  ...
</manifest>

В дополнение к элементу, показанному в предыдущем примере кода, приложения, созданные для 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 , чтобы увеличить целевые объекты касания.

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

После того как вы проверите свое приложение на соответствие рекомендациям по обеспечению качества автомобильных приложений для своей категории, вы можете использовать Google Play для его распространения в Cars со встроенным Google. Дополнительные сведения о процессе публикации см. в разделе Распространение на автомобили .

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

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

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

,

Помимо поддержки приложений, созданных для использования во время вождения, 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, совместимые приложения проходят ручную проверку, чтобы гарантировать их безопасность для использования в автомобиле. Дополнительные сведения см. в разделе Распределение по автомобилям .

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

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

<manifest ...>
  ...
  <!--
    Depending on the track you choose to distribute your app, the android:required attribute can
    also be "false" or left unset. See Choose a track for Android Automotive OS.
  -->
  <uses-feature
      android:name="android.hardware.type.automotive"
      android:required="[true|false]" />
  ...
</manifest>

В дополнение к элементу, показанному в предыдущем примере кода, приложения, созданные для 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 , чтобы увеличить целевые объекты касания.

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

После того как вы проверите свое приложение на соответствие рекомендациям по обеспечению качества автомобильных приложений для своей категории, вы можете использовать Google Play для его распространения в Cars со встроенным Google. Дополнительные сведения о процессе публикации см. в разделе Распространение на автомобили .

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

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

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