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

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

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

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

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

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

Используйте Android Studio Bumblebee или более позднюю версию, чтобы убедиться, что все функции автомобильной ОС включены.

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

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

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

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

  7. Выберите «Добавить отсутствие активности» , затем нажмите «Готово» .

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

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

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

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

<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 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" />
    <uses-feature
        android:name="android.software.car.templates_host"
        android:required="true" />

    <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" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

</manifest>

Первый элемент uses-feature объявляет, что ваше приложение использует для запуска узел шаблонов. Явное задание оставшимся четырем элементам uses-feature значения required="false" гарантирует, что ваше приложение не будет конфликтовать с доступными аппаратными функциями на устройствах с Android Automotive OS.

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

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

Если вы разрабатываете свое приложение для поддержки как 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-файлу, в котором объявляются автомобильные возможности, поддерживаемые вашим приложением.

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

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

Объявите свои CarAppService и CarAppActivity.

Как и в случае с Android Auto, ОС Android Automotive использует вашу реализацию 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> , который указывает ОС, что приложение можно использовать, пока действуют ограничения UX, например, когда автомобиль находится в движении.

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

Имена пакетов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Откройте консоль Play .
  2. Выберите свое приложение.
  3. В меню слева выберите «Выпуск» > «Настройка» > «Дополнительные настройки» > «Форм-факторы» .
  4. Выберите «Добавить форм-фактор» > «Android Automotive OS» и следуйте инструкциям в Play Console.

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

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

  • Даже после удаления приложения Car App Library из системных настроек я получаю сообщение об ошибке при попытке установить новую версию.

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