Добавьте поддержку Android Automotive OS в шаблонное приложение.

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

Для запуска вашего автомобильного приложения на Android Automotive OS вам потребуется последняя версия Templates Host, которая поставляется в виде системного приложения.

Обзор разработки

Для добавления поддержки Android Automotive OS достаточно выполнить всего несколько шагов, описанных в разделах этой страницы:

  1. Создайте автомобильный модуль.
  2. Объявить о поддержке Android Automotive OS
  3. Объявите свои CarAppService и CarAppActivity
  4. Обновите зависимости Gradle.

Для включения всех функций Automotive OS используйте Android Studio Bumblebee или более позднюю версию.

Создайте автомобильный модуль.

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

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

  1. В Android Studio нажмите Файл > Создать > Новый модуль .
  2. Выберите «Автомобильный модуль» , затем нажмите «Далее» .
  3. Укажите название приложения/библиотеки . Это название, которое пользователи видят для вашего приложения в операционной системе Android Automotive.
  4. Введите название модуля .
  5. Измените имя пакета в соответствии с именем вашего существующего приложения.
  6. Выберите API 29: Android 10 (Q) в качестве минимального SDK , затем нажмите «Далее» . Все автомобили, поддерживающие библиотеку автомобильных приложений в Android Automotive OS, работают на Android 10 с уровнем API 29 или выше, поэтому выбор этого значения будет применяться ко всем совместимым автомобилям.

  7. Выберите «Не добавлять активность» , затем нажмите «Готово» .

Если вы начинаете новый проект:

  1. В Android Studio нажмите Файл > Создать > Новый проект .
  2. Выберите «Автомобильная отрасль» в качестве типа проекта .
  3. Выберите «Нет активности» , затем нажмите «Далее» .
  4. Придумайте название для своего проекта. Это название будет отображаться пользователям вашей программы в операционной системе Android Automotive.
  5. Введите имя пакета . Более подробную информацию о выборе имени пакета см. в разделе «Имена пакетов».
  6. Выберите API 29: Android 10 (Q) в качестве минимального набора SDK , затем нажмите «Далее» .

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

После создания модуля в Android Studio откройте файл AndroidManifest.xml в вашем новом модуле Automotive:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

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

</manifest>

Элемент <application> содержит стандартную информацию о приложении, а также элемент <uses-feature> , объявляющий о поддержке Android Automotive OS. Обратите внимание, что в манифесте не указаны никакие действия.

Объявите требования к функционалу.

Далее добавьте в манифест следующий элемент uses-feature чтобы указать, что для корректной работы требуется хост шаблонов:

<manifest ...>
  ...
  <uses-feature
      android:name="android.software.car.templates_host"
      android:required="true" />
  ...
</manifest>

Кроме того, убедитесь, что ваше приложение соответствует функциональным требованиям Google Play , которые применяются ко всем приложениям, созданным для Android Automotive OS.

Обновите зависимости Gradle.

В вашем модуле для автомобильной тематики необходимо добавить зависимость от артефакта androidx.car.app:app-automotive , который включает реализацию CarAppActivity необходимую для работы вашего приложения в Android Automotive OS.

Если вы разрабатываете приложение для поддержки как Android Auto, так и Android Automotive OS, мы рекомендуем разместить CarAppService в отдельном модуле, который будет использоваться совместно мобильным и автомобильным модулями. В этом случае вам необходимо обновить автомобильный модуль, включив в него общий модуль с помощью зависимостей проекта Gradle, как показано в следующем фрагменте кода:

Классный

buildscript {
    ...
    dependencies {
        ...
        implementation "androidx.car.app:app-automotive:car_app_library_version"
        implementation project(':shared_module_name')
    }
}

Котлин

buildscript {
    ...
    dependencies {
        ...
        implementation("androidx.car.app:app-automotive:car_app_library_version")
        implementation(project(":shared_module_name"))
    }
}

Объявить о поддержке Android Automotive OS

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

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Эта запись в манифесте относится к XML-файлу, в котором описываются автомобильные возможности, поддерживаемые вашим приложением.

Чтобы указать, что у вас есть приложение из библиотеки автомобильных приложений, добавьте XML-файл с именем automotive_app_desc.xml в каталог res/xml/ вашего модуля Android Automotive OS. Этот файл должен содержать следующее содержимое:

<automotiveApp>
    <uses name="template"/>
</automotiveApp>

Объявите свои приложения CarAppService и CarAppActivity.

Как и в Android Auto, Android Automotive OS использует вашу реализацию CarAppService для запуска вашего приложения. Инструкции по реализации и объявлению CarAppService см. в разделах «Создание CarAppService и сессии» и «Объявление CarAppService .

В отличие от Android Auto, вам необходимо добавить дополнительный компонент приложения, CarAppActivity , который будет служить точкой входа для вашего приложения Android Automotive OS. Реализация этой активности включена в артефакт androidx.car.app:app-automotive и отвечает за взаимодействие с приложением-шаблоном для отображения пользовательского интерфейса вашего приложения. В вашем манифесте должен быть только один экземпляр этой активности, и он должен быть объявлен следующим образом:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

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

</activity>
  • android:name устанавливается на полное имя класса CarAppActivity из артефакта app-automotive .
  • android:exported установлен в true поскольку активность должна быть доступна для запуска приложением, отличным от неё самой (а именно, лаунчером).
  • android:launchMode установлен в singleTask , чтобы пользователь мог вернуться к тому же экземпляру активности из панели запуска, если он покинет приложение.
  • android:theme установлен на @android:style/Theme.DeviceDefault.NoActionBar , чтобы приложение занимало все доступное ему пространство экрана.
  • Фильтр намерений указывает, что это действие запуска приложения.
  • В приложении присутствует элемент <meta-data> , который указывает операционной системе, что приложение можно использовать при наличии ограничений пользовательского интерфейса, например, во время движения транспортного средства.

Для навигационных приложений требуется добавить еще несколько записей в манифест CarAppActivity , как показано в следующем фрагменте кода:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Include the category below ONLY for navigation apps -->
        <category android:name="android.intent.category.APP_MAPS" />
    </intent-filter>

    <!-- Include the intent-filter below ONLY for navigation apps -->
    <intent-filter>
        <action android:name="androidx.car.app.action.NAVIGATE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="geo" />
    </intent-filter>

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

</activity>
  • Дополнительная категория android.intent.category.APP_MAPS сообщает системе, что ваше приложение может отображать местоположение пользователя.
  • Фильтр намерений androidx.car.app.action.NAVIGATE гарантирует, что у пользователей будет возможность использовать ваше приложение при обработке неявного навигационного намерения из другого автомобильного приложения.

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

Добавить фильтры намерений для прямых ссылок

Чтобы сообщить операционной системе, что ваше приложение способно обрабатывать прямые ссылки, вам необходимо добавить соответствующие фильтры намерений в элемент <activity> для CarAppActivity вашего приложения. Дополнительные рекомендации см. в разделе «Добавление фильтров намерений для входящих ссылок» .

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

Для обработки интентов ваше приложение должно считывать данные из входящих интентов как при создании Session вашего автомобильного приложения в методе onCreateScreen() , так и при получении нового интента в методе onNewIntent() :

class MySession : Session() {
    // ...
    override fun onCreateScreen(intent: Intent): Screen {
        // Handle the intent when the app is being started for the first time
        return MyStartScreen(carContext)
    }

    override fun onNewIntent(intent: Intent) {
        // Handle the intent when the app is already running
    }
}

Другие соображения

При разработке приложения для Android Automotive OS следует учитывать и другие факторы:

Названия пакетов

Поскольку вы распространяете отдельный комплект пакетов Android (APK) для Android Automotive OS, вы можете повторно использовать имя пакета из своего мобильного приложения или создать новое имя пакета. Если вы используете другое имя пакета, у вашего приложения будет две отдельные записи в Play Store. Если вы используете текущее имя пакета, у вашего приложения будет одна запись на обеих платформах.

Это преимущественно бизнес-решение. Например, если одна команда работает над мобильным приложением, а другая — над приложением для Android Automotive OS, то может быть целесообразно использовать отдельные имена пакетов и позволить каждой команде управлять своим собственным списком в Play Store. Разница в технических затратах на использование обоих подходов невелика.

В следующей таблице приведены некоторые другие ключевые различия между сохранением текущего имени пакета и использованием нового имени пакета:

Особенность То же название пакета Новое название пакета
Список магазинов Одинокий Несколько
Зеркальная установка Да: быстрая переустановка приложения во время работы мастера установки. Нет
Процесс проверки в Play Store Блокировка проверки: если проверка одного APK-файла не пройдена, другие APK-файлы, отправленные в рамках того же релиза, блокируются. Отдельные обзоры
Статистика, показатели и жизненно важные параметры В комбинированном режиме: вы можете фильтровать данные по названию устройства, чтобы получить информацию, специфичную для автомобильной отрасли. Отдельный
Индексирование и ранжирование в поисковой выдаче Опираясь на текущее положение дел Перенос невозможен
Интеграция с другими приложениями Скорее всего, никаких изменений не потребуется, если предположить, что медиакод используется в обоих APK-файлах. Возможно, потребуется обновить соответствующее приложение, например, для воспроизведения URI с помощью Google Ассистента.

Офлайн-контент

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

Вот несколько моментов, которые следует учитывать при разработке стратегии офлайн-поддержки:

  • Лучшее время для загрузки контента — это когда приложение используется.
  • Не стоит предполагать, что Wi-Fi доступен. Автомобиль может никогда не попасть в зону действия Wi-Fi, или производитель оригинального оборудования (OEM) мог отключить Wi-Fi в пользу мобильной сети.
  • Хотя разумное кэширование контента, который, как ожидается, будут использовать пользователи, допустимо, мы рекомендуем предоставить пользователю возможность изменить это поведение.
  • Объем дискового пространства в автомобилях может различаться, поэтому предоставьте пользователям возможность удалять контент, недоступный в автономном режиме.

Часто задаваемые вопросы

В следующих разделах вы найдете ответы на часто задаваемые вопросы об операционной системе Android Automotive.

Существуют ли какие-либо ограничения или рекомендации по использованию сторонних SDK и библиотек?

Конкретных рекомендаций по использованию сторонних SDK и библиотек нет. Если вы решите использовать сторонние SDK и библиотеки, вы по-прежнему будете нести ответственность за соблюдение всех требований к качеству автомобильных приложений.

Как опубликовать приложение для Android Automotive OS с помощью Google Play Console?

Подробную информацию о том, как опубликовать приложение для Android Automotive OS с помощью консоли Google Play, см. в разделе «Распространение в автомобилях» .

Поиск неисправностей

Ниже приведена информация о некоторых распространенных сценариях устранения неполадок в операционной системе Android Automotive.

  • Даже после удаления приложения из библиотеки автомобильных приложений из системных настроек, при попытке установить новую версию возникает ошибка.

    Чтобы убедиться, что приложение удалено, используйте команду adb uninstall app.package.name .