Настроить удаленный доступ

В Android 14 представлена ​​новая функция удаленного доступа, которая позволяет партнерам удаленно активировать Android в автомобиле для выполнения определенных задач. Например, чтобы включить режим «Гараж» на ночь, чтобы применить обновления программного обеспечения. Для сквозного рабочего процесса требуется несколько компонентов, отличных от Android. Android не определяет и не обеспечивает реализацию компонентов, отличных от Android (эта ответственность лежит на вас).

Чтобы узнать больше, смотрите следующие разделы:

Архитектура

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

image

Рисунок 1. Пример архитектуры.

Пример архитектуры состоит из следующих аппаратных компонентов:

Аппаратный компонент Описание
Процессор приложений Процессор под управлением Android. Android может работать в виртуальной памяти (ВМ) (а не на реальном оборудовании) на этом процессоре.
Автомобильный процессор Процессор, отвечающий за управление питанием процессора приложения.
Блок управления телематикой (TCU) Процессор в автомобиле всегда способен получать удаленные сообщения из облака. Предполагается, что TCU всегда включен или находится в режиме пониженного энергопотребления. Используйте удаленные сообщения, чтобы разбудить TCU.
Сервер пробуждения Удаленный сервер, который работает в облаке и отвечает за связь с TCU в автомобиле для выдачи команд пробуждения.
Сервер удаленных задач Сервер удаленных задач работает в облаке, взаимодействует с людьми и управляет удаленными задачами.

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

Программный компонент для Android Описание
Автосервис Служба платформы AAOS, предоставляющая API удаленного доступа.
Клиент удаленных задач Написанный поставщиком класс Service , выполняющий удаленные задачи. Одна система Android может запускать несколько клиентов удаленных задач.
Удаленный доступ HAL Должен быть реализован для удаленного доступа.
Уровень абстракции для связи между AAOS и компонентом, отличным от Android, например TCU.

Программные компоненты, отличные от Android , описаны ниже:

Программный компонент, отличный от Android Описание
Пробуждающий клиент Программное обеспечение, работающее на TCU и поддерживающее долговременное соединение с сервером пробуждения. Он также поддерживает соединение с HAL удаленного доступа для доставки удаленных задач в автосервис.
Реализация сервера пробуждения Сервер, который взаимодействует с клиентом пробуждения, работающим на TCU. Может отправлять запросы пробуждения клиенту пробуждения.
Реализация удаленного сервера задач Сервер, управляющий удаленными задачами. Пользователи взаимодействуют с этим сервером для выполнения и мониторинга удаленных задач.

Рабочий процесс

В этом разделе перечислены шаги примера рабочего процесса.

Пример рабочего процесса

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

  1. Пользователь паркует автомобиль в гараже.

  2. Партнер стремится обновлять информацию о транспортном средстве в одночасье, когда взаимодействие транспортных средств маловероятно.

  3. Партнерский облачный сервер отправляет на автомобиль удаленное задание системы обновления. В частности, блок управления телематикой (TCU).

  4. TCU автомобиля активирует электронный блок управления Android (ECU), а OEM-сервис запускает режим гаража.

  5. Android запускает режим «Гараж» для загрузки и установки обновлений через Google Play.

  6. После применения обновления Android помечает задачу как выполненную и либо завершает соединение, либо достигает заданного таймаута.

Подробный рабочий процесс

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

Зарегистрировать клиента

Чтобы использовать функцию удаленного доступа, пользователю необходимо хотя бы один раз открыть клиентское приложение удаленных задач и завершить процесс регистрации клиента ( жирным шрифтом выделены задачи, реализуемые AAOS):

  1. При загрузке Car Service получает информацию об автомобиле из HAL удаленного доступа.

  2. При загрузке Car Service запускает все клиенты удаленных задач на основе фильтра намерений и разрешений.

  3. При запуске клиента удаленных задач клиент удаленных задач регистрируется в Автосервисе.

  4. Car Service уведомляет клиента удаленного задания о регистрационной информации, включая идентификатор автомобиля и идентификатор клиента. Идентификатор клиента уникален и присваивается этому клиенту Автосервисом. Он гарантированно будет уникальным среди всех клиентов удаленных задач на одном автомобиле.

  5. Пользователь входит на сервер удаленных задач через клиент удаленных задач и включает функцию удаленного доступа для этого автомобиля. Этот шаг обычно включает аутентификацию через удаленный сервер задач.

  6. Клиент удаленных задач загружает информацию о пользователе вместе с идентификатором транспортного средства и идентификатором клиента на сервер удаленных задач и просит его связать пользователя с этим конкретным клиентом и этим конкретным транспортным средством.

    При желании этот шаг может включать дополнительную двухфакторную аутентификацию пользователя.

    Сервер удаленных задач должен подтвердить, что идентификатор транспортного средства, указанный в запросе, соответствует идентификатору транспортного средства отправителя, что можно сделать посредством аттестации транспортного средства.

Если не выполнен сброс настроек к заводским настройкам, процесс регистрации клиента требуется один раз для каждого пользователя на каждый автомобиль. Идентификатор клиента хранится локально в Автосервисе и остается неизменным для одного и того же клиента.

image

Рисунок 2. Регистрация клиента.

Отменить регистрацию клиента

Пользователь может отвязать автомобиль от своей учетной записи либо с автомобиля, либо с сервера удаленных задач:

  • На автомобиле пользователи могут открыть клиентское приложение удаленных задач и отправить запрос на отсоединение этого автомобиля от ранее связанных учетных записей пользователей.

  • На сервере удаленных задач пользователи могут войти в свою учетную запись и отсоединить ранее связанный автомобиль от этой учетной записи.

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

Доставлять задачи

В облаке:

  1. Пользователь использует сервер удаленных задач для отправки удаленного задания конкретному транспортному средству.

  2. Сервер удаленных задач сопоставляет идентификатор пользователя с идентификатором транспортного средства и идентификатором клиента. Он отправляет данные задачи, идентификатор транспортного средства и идентификатор клиента на сервер пробуждения.

  3. Сервер пробуждения находит конкретный TCU для идентификатора транспортного средства (при условии, что регистрация TCU уже выполнена) и отправляет данные задачи и идентификатор клиента в TCU.

На машине ( жирным шрифтом указаны задачи, выполняемые AAOS):

  1. TCU получает удаленные задания с удаленного сервера.

  2. Если процессор приложения (AP), на котором работает AAOS, выключен, TCU использует процессор автомобиля (VP) для пробуждения точки доступа.

  3. Автосервис получает задания от ТЦУ.

  4. Car Service распределяет задачи соответствующему клиенту удаленных задач.

  5. Клиент удаленной задачи получает и выполняет задачу.

    ( Необязательно ) Клиент удаленной задачи связывается с сервером задач для получения более подробной информации о задаче и выполняет ее.

  6. ( Необязательно ) Служба клиента удаленных задач сообщает о результатах задачи серверу задач.

  7. Клиент удаленных задач уведомляет Car Service о завершении задачи.

  8. При необходимости Автосервис восстанавливает электропитание автомобиля.

image

Рисунок 3. Выполнение задач.

Написать клиент удаленных задач

CarRemoteAccessManager предоставляет API для функций удаленного доступа. Дополнительные сведения см. в разделе CarRemoteAccessManager . Клиент удаленных задач — это служба Android, которая выполняет удаленные задачи и использует CarRemoteAccessManager . Для этого требуются PERMISSION_USE_REMOTE_ACCESS и PERMISSION_CONTROL_REMOTE_ACCESS , и необходимо объявить фильтр намерений для RemoteTaskClientService , например:

<service android:name=".remoteaccess.RemoteTaskClientService"
         android:directBootAware="true"
         android:exported="true">
    <intent-filter>
       <action android:name="android.car.remoteaccess.RemoteTaskClientService" />
    </intent-filter>
</service>

Клиент удаленной задачи должен зарегистрироваться в Car Service во время создания:

public final class RemoteTaskClientService extends Service {
    @Override
    public void onCreate() {
        // mCar = Car.createCar()...
        mRemoteAccessManager = (CarRemoteAccessManager)
            mcar.getCarManager(Car.CAR_REMOTE_ACCESS_SERVICE);
        if (mRemoteAccessManager == null) {
            // Remote access feature is not supported.
            return;
        }
        mRemoteAccessManager.setRemoteTaskClient(executor, mRemoteTaskClient);
    }
}

Он должен переопределить функцию onBind, чтобы вернуть значение null.

@Override
public IBinder onBind(Intent intent) {
    return null;
}

Автосервис управляет своим жизненным циклом. Car Service привязывается к этой службе во время запуска и при поступлении удаленного задания. Автосервис отвязывается от этого сервиса после выполнения задачи. Дополнительные сведения см. в разделе Управление жизненным циклом службы .

Клиент удаленных задач запускается от имени системного пользователя, поэтому у него нет доступа к каким-либо пользовательским данным.

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

private final class RemoteTaskClient
    implements CarRemoteAccessManager.RemoteTaskClientCallback {
    @Override
    public void onRegistrationUpdated(
        RemoteTaskClientRegistrationInfo info) {
        // Register to remote task server using info.
    }
    @Override
    public void onRemoteTaskRequested(String taskId,
        byte[] data, int remainingTimeSec) {
        // Parses the data and execute the task.
        // Report task result to remote task server.
        mRemoteAccessManager.reportRemoteTaskDone(taskId);
    }
    @Override
    public void onShutdownStarting(CompleteableRemoteTaskFuture future) {
        // Stop the executing task.
        // Clear the pending task queue.
        future.complete();
    }
}

Реализация поставщика

Функция удаленного доступа является необязательной и по умолчанию отключена. Чтобы включить эту функцию, добавьте RRO, например:

// res/xml/overlays.xml
<?xml version="1.0" encoding="utf-8"?>
<overlay>
    <item target="array/config_allowed_optional_car_features" value="@array/config_allowed_optional_car_features" />
</overlay>

// res/values/config.xml
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string-array translatable="false" name="config_allowed_optional_car_features">
        <item>car_remote_access_service</item>
    </string-array>
</resources>

// Android.bp
runtime_resource_overlay {
    name: "RemoteAccessOverlay",
    resource_dirs: ["res"],
    manifest: "AndroidManifest.xml",
    sdk_version: "current",
    product_specific: true
}

Или используйте следующую команду adb в сборке userdebug/eng:

adb shell cmd car_service enable-feature car_remote_access_service

Требования к Android

Удаленный доступ HAL

Уровень абстракции оборудования удаленного доступа (HAL) — это реализованный поставщиком уровень абстракции для связи между AAOS и другим ECU (например, TCU). Это обязательно для поддержки функции удаленного доступа. Его не нужно реализовывать, если функция удаленного доступа не реализована.

Интерфейс определен в IRemoteAccess.aidl и включает следующие методы:

Сорт Описание
String getVehicleId() Получает уникальный идентификатор транспортного средства, который может распознаваться сервером пробуждения.
String getWakeupServiceName() Получает имя удаленного сервера пробуждения.
String getProcessorId() Получает уникальный идентификатор процессора, который можно распознать при пробуждении клиента.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Устанавливает обратный вызов, который будет вызываться при запросе удаленной задачи.

void clearRemoteTaskCallback() Очищает ранее установленный обратный вызов удаленной задачи.
void notifyApStateChange(in ApState state)

Определяет, готов ли процессор приложения получать удаленные задачи.

Интерфейс обратного вызова определен в IRemoteTaskCallback.aid .

Сорт Описание
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Обратный вызов, который вызывается при запросе удаленной задачи.

См. эталонную реализацию с внешним TCU. Реализация использует долгоживущий поток чтения для получения удаленных задач и поддерживает следующую команду debug :

dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default

Автомобиль ХАЛ

Для поддержки функции удаленного доступа VHAL должен поддерживать следующие свойства:

Сорт Описание
SHUTDOWN_REQUEST Просит выключить головное устройство.
VEHICLE_IN_USE
  • Определяет, используется ли автомобиль.
  • После того, как пользователь отпирает транспортное средство или когда пользователь приближается к транспортному средству. Должно быть true .
  • Определенное время после того, как пользователь выключит или заблокирует автомобиль. Должно быть false .
  • Если true , AAOS не пытается выключить автомобиль после завершения удаленной задачи.

Дополнительную информацию см. в разделе Поддерживаемые свойства системы .

Бесшумный режим

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

Тихий режим контролируется с помощью двух файлов sysfs ядра Linux.

Сорт Описание
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Представляет текущий беззвучный режим.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Представляет аппаратный сигнал для установки нового бесшумного режима.

Процессор автомобиля отправляет аппаратный сигнал на Android SoC для включения/выключения бесшумного режима. Сигнал (0 или 1) записывается в /sys/kernel/silent_boot/pm_silentmode_hw_state . Затем платформа AAOS соответствующим образом обновляет /sys/kernel/silent_boot/pm_silentmode_kernel_state , который представляет текущий беззвучный режим. Модули AAOS проверяют /sys/kernel/silent_boot/pm_silentmode_kernel_state , чтобы узнать, находится ли система в тихом режиме или нет.

Когда получено удаленное задание и загружается AAOS, процессор автомобиля устанавливает беззвучный режим и запускает AAOS, чтобы система загружалась с выключенным дисплеем/звуком.

Автомобильные компоненты, отличные от Android

Автомобильный процессор

Автомобильный процессор — это процессор в автомобиле, который может управлять питанием процессора приложений под управлением Android. В примере архитектуры TCU пробуждает процессор приложения, отправляя сигнал процессору автомобиля.

Автомобильные компоненты, отличные от Android

TCU автомобиля всегда может получать дистанционные сообщения.

Клиент пробуждения работает на TCU, чтобы обеспечить долговременное соединение с удаленным сервером пробуждения.

AAOS, работающий на точке доступа, может взаимодействовать с клиентом пробуждения, работающим на TCU, через HAL удаленного доступа.

image

Рисунок 4. TCU (клиент пробуждения).

Облачные компоненты

Сервер пробуждения

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

  • Поддерживайте долговременную связь с TCU автомобиля.
  • Найдите конкретный TCU по идентификатору автомобиля.
  • Сообщите о состоянии автомобиля. Например, онлайн или оффлайн, или время последнего подключения к удаленному серверу задач.

В реальной реализации сервер пробуждения может быть объединен с сервером удаленных задач.

Сервер удаленных задач

Сервер удаленных задач управляет этими удаленными задачами.

  • Пользователь взаимодействует с сервером для запуска новых удаленных задач и мониторинга удаленных задач.

  • Использует сервер удаленного пробуждения для пробуждения процессора приложений в транспортных средствах.

  • Взаимодействует с клиентом удаленных задач, работающим на автомобиле.

  • Хранит регистрационную информацию клиента. Это связывает конкретного пользователя с конкретным клиентом удаленных задач на конкретном автомобиле.

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

Требования конфиденциальности и безопасности

Задача Состояние Требование
TCU (клиент пробуждения) ДОЛЖЕН
  • Аутентификация сервера пробуждения.
  • Доверяйте коду.
Сервер пробуждения ДОЛЖЕН
  • Разрешить подключение только серверам удаленных задач из списка разрешенных.
  • Аутентификация клиента пробуждения.
  • Отправьте тревожное сообщение только целевому автомобилю.
Клиент удаленных задач ДОЛЖЕН
  • Аутентифицировать пользователя при регистрации.
  • Аутентификация удаленного сервера задач.
  • Соблюдайте все требования безопасности для службы Android. Например, ограниченные разрешения.
Сервер удаленных задач ДОЛЖЕН
  • Необходимо аутентифицировать сервер пробуждения.
  • Предоставить свидетельство об автомобиле. То есть подтвердите, что идентификатор транспортного средства, указанный в запросе, соответствует идентификатору транспортного средства отправителя. Если аттестация транспортного средства невозможна, необходимо использовать другие средства, чтобы убедиться, что пользователь в настоящее время является владельцем транспортного средства.
  • Аутентификация личности пользователя.
  • Соблюдайте все требования безопасности для сервера, на котором обрабатывается информация пользователей.

Сброс к заводским настройкам и передача права собственности

Если пользователь выполняет сброс настроек к заводским настройкам, идентификатор клиента, хранящийся в Автосервисе, удаляется. Однако серверы (сервер удаленных задач и сервер удаленного пробуждения) не уведомляются. Серверы сохраняют сопоставление идентификатора клиента с истекшим сроком действия с транспортным средством. В результате, если пользователь запускает новую удаленную задачу для автомобиля, он использует идентификатор клиента с истекшим сроком действия. Транспортное средство пробуждается, но удаленное задание невозможно выполнить, поскольку у клиента удаленного задания другой идентификатор клиента, который не соответствует.

Ниже описан один из возможных вариантов сброса настроек.

Когда пользователь выполняет сброс настроек к заводским настройкам, поставщик предлагает пользователю войти на сервер удаленных задач и отсоединить автомобиль от своей учетной записи, если пользователь ранее привязал автомобиль. Не гарантируется, что устройство будет иметь доступ к сети во время сброса настроек. Таким образом, выдача запроса на отсоединение во время сброса настроек устройства может быть невозможна.

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

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

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

  • Новый владелец может использовать процесс «Зарегистрировать клиента» , чтобы связать автомобиль со своей учетной записью и заменить ранее связанную учетную запись.

Тестирование клиента удаленных задач

Мы предоставляем эталонный каталог удаленного доступа HAL default для тестирования клиентов удаленных задач. Вы можете использовать следующую команду debug , чтобы внедрить поддельную удаленную задачу в HAL, которая перенаправляется вашему клиенту удаленной задачи, если вы укажете правильный идентификатор клиента. Вы можете получить идентификатор клиента, зарегистрировав регистрационную информацию в реализации клиента удаленных задач.

adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]