При распространении вашего приложения на устройства Android Automotive OS есть некоторые соображения, уникальные для форм-фактора, о которых вам следует знать. В этом руководстве объясняются эти соображения.
Протестируйте свое существующее приложение на эмуляторе Android Automotive OS
Чтобы начать создавать приложение для Android Automotive OS, сначала протестируйте существующее приложение на эмуляторе Android Automotive OS. Чтобы настроить эмулятор, следуйте инструкциям в разделе Тестирование с использованием эмулятора Android Automotive OS . Затем вы можете запустить приложение, следуя инструкциям в разделе Запустите приложение на эмуляторе .
При запуске приложения следите за проблемами совместимости, такими как:
- Информационно-развлекательные экраны имеют фиксированную ориентацию. Чтобы соответствовать рекомендациям по качеству автомобильных приложений , приложения должны поддерживать как портретную, так и альбомную ориентацию.
- API, доступные на других устройствах, могут быть недоступны на Android Automotive OS. Например, некоторые API сервисов Google Play недоступны на Android Automotive OS. Подробнее о том, как решать эти проблемы, читайте в разделе Отключение функций .
Настройте файл манифеста вашего приложения
Чтобы нацелиться на устройства Android Automotive OS, ваше приложение должно иметь определенные записи манифеста. После того, как вы согласились на распространение на устройства Android Automotive OS, совместимые приложения проходят ручную проверку, чтобы убедиться, что они безопасны для использования в автомобиле. Подробнее см. в разделе Распространение на автомобили .
Необходимые функции Android Automotive OS
Все приложения, созданные для Android Automotive OS, должны соответствовать определенным требованиям для распространения с помощью Google Play. Для получения дополнительной информации см. раздел Соответствие требованиям Google Play .
Убедитесь, что нет отвлекающих действий.
Чтобы гарантировать, что ваше приложение будет доступно для использования только во время парковки, не включайте следующий элемент <meta-data>
ни в один элемент <activity>
в вашем манифесте:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Без этих метаданных действия вашего приложения автоматически блокируются ОС, когда автомобиль переходит в режим вождения, чтобы уменьшить отвлекающие факторы для водителя и перейти в состояние жизненного цикла Paused . Это происходит как обратный вызов жизненного цикла onPause()
во время которого вы должны приостановить воспроизведение видео и аудио из вашего приложения.
На устройствах, которые включают режим совместимости Android Automotive OS , блокировка системы приводит к переходу действий вашего приложения из состояния Paused в состояние Stopped . Чтобы убедиться, что ваше приложение приостанавливает воспроизведение на всех устройствах, а не только на тех, которые поддерживают режим совместимости, обязательно протестируйте устройство, которое не включает режим совместимости. См. Тестирование с использованием эмулятора Android Automotive OS для получения информации о том, какие эмуляторы включают или не включают режим совместимости.
Записи манифеста, специфичные для категории
Помимо предыдущих требований, которые применяются ко всем припаркованным приложениям, категории видео и игр имеют дополнительные требования:
- Для видеоприложений см. статью Отметьте свое приложение как видеоприложение .
- Для игр см. раздел Отметьте свое приложение как игру .
Оптимизируйте свое приложение для Android Automotive OS
Чтобы обеспечить пользователям наилучшие впечатления от вождения автомобиля, при создании приложения для Android Automotive OS учитывайте следующее:
Работа с оконными вставками и вырезами в витринах
Как и в случае с другими форм-факторами, Android Automotive OS включает в себя элементы пользовательского интерфейса системы, такие как строки состояния и навигации, а также поддержку непрямоугольных дисплеев.
По умолчанию приложения рисуют в области, которая не перекрывается системными панелями или вырезами дисплея. Однако вы можете захотеть, чтобы ваше приложение скрывало системные панели, рисовало содержимое за ними или отображало содержимое в вырезе дисплея, как описано в разделе Размещение вашего приложения в оконных вставках . Если ваше приложение делает что-либо из этого, обратитесь к следующим подразделам для получения подробной информации о том, как обеспечить хорошую работу вашего приложения в экосистеме устройств Android Automotive OS.
Системные панели, режим погружения и рендеринг от края до края
Системные панели в автомобилях могут иметь другой размер и расположение, чем в других форм-факторах. Например, панели навигации могут располагаться слева, справа или внизу экрана. Даже в случае, если строка состояния находится сверху, а панель навигации — снизу (как в большинстве телефонов и планшетов), размер этих элементов в автомобилях, скорее всего, будет намного больше.
Кроме того, Android Automotive OS позволяет OEM-производителям контролировать, могут ли приложения показывать или скрывать системные панели для входа и выхода из режима погружения . Например, запрещая приложениям скрывать системные панели, OEM-производители могут гарантировать, что элементы управления транспортным средством, такие как климат-контроль, всегда будут доступны на экране. Если OEM-производитель запретил приложениям управлять системными панелями, ничего не произойдет, когда приложение вызовет API WindowInsetsController
(или WindowInsetsControllerCompat
) для отображения или скрытия системных панелей. Подробнее о том, как определить, смогло ли ваше приложение изменить вставки, см. в документации по show
and 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: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 OS, некоторые функции и возможности могут быть неактуальны или недоступны. Например, автомобили, как правило, не предоставляют доступ к камерам. Кроме того, на Android Automotive OS доступны только некоторые службы Google Play; см. Службы Google Play для автомобилей для получения более подробной информации.
Вы можете использовать API PackageManager.hasSystemFeature
, чтобы определить, работает ли приложение на Android Automotive OS, проверив наличие функции 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 for Cars, чтобы определить, работает ли приложение на Android Automotive OS или Android Auto, или оно вообще не подключено к автомобилю.
Для функции «картинка в картинке» (PiP) следуйте общепринятым рекомендациям , чтобы проверить доступность этой функции и отреагировать соответствующим образом.
Обработка офлайн-сценариев
В то время как автомобили все чаще подключаются к Интернету, рекомендуется использовать приложения, обеспечивающие работу без подключения к Интернету, например, в следующих случаях:
- Пользователи могут отказаться от мобильных данных, предлагаемых в рамках пакета подписки от автопроизводителя.
- В некоторых регионах доступ к мобильным данным может быть ограничен.
- Автомобили с радиоприемниками Wi-Fi могут находиться вне зоны действия Wi-Fi, или производитель оборудования может отключить Wi-Fi в пользу мобильной сети.
Будьте готовы справиться с этими сценариями в вашем приложении, изящно снижая функциональность, зависящую от доступа в Интернет, например, предлагая офлайн-контент. Для получения дополнительной информации см. лучшие практики по оптимизации работы в сети .
Используйте альтернативные ресурсы
Чтобы адаптировать приложение для автомобилей, вы можете использовать квалификатор ресурса car
для предоставления альтернативных ресурсов при работе на автомобиле с ОС Android Automotive. Например, если вы используете ресурсы Dimension для хранения значений отступов, вы можете использовать большее значение для набора ресурсов car
, чтобы сделать цели касания больше.