Configurar el acceso remoto

Android 14 presenta la nueva función de acceso remoto, que permite a los socios activar Android de forma remota en un vehículo para ejecutar tareas específicas. Por ejemplo, para ejecutar el modo Garaje durante la noche para aplicar actualizaciones de software. Se requieren varios componentes que no sean de Android para el flujo de trabajo de un extremo a otro. Android no define ni proporciona implementación para componentes que no sean de Android (esta responsabilidad le pertenece a usted).

Para obtener más información, consulte las siguientes secciones:

Arquitectura

El siguiente contenido supone que se utiliza la siguiente arquitectura de muestra, que es hipotética y puede no reflejar la arquitectura real. Los OEM deben adaptar una implementación real a las arquitecturas de sus vehículos y servidores.

image

Figura 1. Arquitectura de muestra.

La arquitectura de muestra consta de estos componentes de hardware :

Componente de hardware Descripción
Procesador de aplicaciones Procesador que ejecuta Android. Es posible que Android se ejecute en la memoria virtual (VM) (no en el hardware real) en este procesador.
Procesador de vehículos Procesador responsable de controlar la energía del procesador de aplicaciones.
Unidad de control telemático (TCU) Procesador en vehículo siempre capaz de recibir mensajes remotos desde la nube. Se supone que la TCU siempre está encendida o en modo de bajo consumo. Utilice mensajes remotos para despertar la TCU.
servidor de despertador Un servidor remoto que se ejecuta en la nube y es responsable de comunicarse con la TCU del vehículo para emitir comandos de activación.
Servidor de tareas remoto El servidor de tareas remotas se ejecuta en la nube, interactúa con personas y administra tareas remotas.

La arquitectura de muestra consta de estos componentes de software , todos los cuales se ejecutan en Android:

Componente de software en Android Descripción
Servicio de auto Servicio de marco AAOS que proporciona API de acceso remoto.
Cliente de tareas remotas Un servicio escrito por el proveedor que ejecuta tareas remotas. Un sistema Android puede ejecutar múltiples clientes de tareas remotas.
Acceso remoto HAL Debe implementarse para acceso remoto.
Capa de abstracción para la comunicación entre AAOS y un componente que no es de Android, como la TCU.

Los componentes de software que no son de Android se describen a continuación:

Componente de software que no es de Android Descripción
Cliente de despertador Software que se ejecuta en la TCU y mantiene una conexión duradera con el servidor Wake-up. También mantiene una conexión con Remote Access HAL para entregar tareas remotas al Car Service.
Implementación del servidor de activación Servidor que se comunica con el cliente Wake-up que se ejecuta en la TCU. Puede enviar solicitudes de activación al cliente de activación.
Implementación del servidor de tareas remoto Servidor que gestiona tareas remotas. Los usuarios interactúan con este servidor para emitir y monitorear tareas remotas.

Flujo de trabajo

Esta sección enumera los pasos de un flujo de trabajo de muestra.

Flujo de trabajo de muestra

Un flujo de trabajo detallado puede parecerse al siguiente:

  1. El usuario estaciona el vehículo en el garaje.

  2. El socio busca actualizar el vehículo durante la noche cuando es poco probable que haya interacciones con el vehículo.

  3. El servidor en la nube del socio envía una tarea remota del sistema de actualización al vehículo. En concreto, la unidad de control telemático (TCU).

  4. La TCU del vehículo activa la unidad de control electrónico (ECU) de Android y un servicio OEM activa el modo Garaje.

  5. Android ejecuta el modo Garaje para descargar e instalar actualizaciones a través de Google Play.

  6. Después de aplicar la actualización, Android marca la tarea como completada y finaliza la conexión o alcanza un tiempo de espera específico.

Flujo de trabajo detallado

Hay dos pasos importantes necesarios para el acceso remoto. La primera es registrar el cliente, que consiste en vincular un usuario específico a un cliente de tarea remota específico que se ejecuta en un vehículo específico. La otra es entregar una tarea, que consiste en entregar la tarea remota para un usuario específico al cliente de tarea remota específico que se ejecuta en el vehículo específico.

Registrar un cliente

Para utilizar la función de acceso remoto, un usuario debe abrir la aplicación cliente de tareas remotas al menos una vez y finalizar el proceso de registro del cliente (el paso en negrita lo implementa AAOS):

  1. Al arrancar, Car Service obtiene información del vehículo desde el acceso remoto HAL.

  2. Al arrancar, Car Service inicia todos los clientes de tareas remotas según el filtro de intención y el permiso.

  3. Al iniciar el cliente de tareas remotas, el cliente de tareas remotas se registra en el Servicio de automóviles.

  4. Car Service notifica al cliente de la tarea remota sobre la información de registro, incluida la identificación del vehículo y la identificación del cliente. La identificación del cliente es única y Car Service la asigna a este cliente. Se garantiza que será único entre todos los clientes de tareas remotas en el mismo vehículo.

  5. El usuario inicia sesión en el servidor de tareas remotas a través del cliente de tareas remotas y habilita la función de acceso remoto para este vehículo. Este paso normalmente implica la autenticación a través del servidor de tareas remoto.

  6. El cliente de tareas remotas carga la información del usuario junto con la identificación del vehículo y la identificación del cliente al servidor de tareas remotas y le solicita que vincule al usuario con este cliente específico y este vehículo específico.

    Opcionalmente, este paso podría implicar una autenticación de dos factores adicional por parte del usuario.

    El servidor de tareas remoto debe autenticar que la identificación del vehículo proporcionada en la solicitud coincide con la identificación del vehículo del remitente, lo que se puede hacer mediante la certificación del vehículo.

A menos que se realice un restablecimiento de fábrica, el proceso de registro de cliente se requiere una vez por usuario y por vehículo. La identificación del cliente se almacena localmente en el Servicio de automóvil y permanece igual para el mismo cliente.

image

Figura 2. Registrar un cliente.

Dar de baja a un cliente

Un usuario puede desvincular el vehículo de su cuenta ya sea desde el vehículo o desde el servidor de tareas remoto. Sobre el:

  • Vehículo, los usuarios pueden abrir la aplicación cliente de tareas remotas y emitir una solicitud de desvinculación para desvincular este vehículo de sus cuentas de usuario previamente vinculadas.

  • Servidor de tareas remotas, los usuarios pueden iniciar sesión en su cuenta y desvincular un vehículo previamente vinculado de esta cuenta.

Si el usuario desvincula el vehículo de su cuenta, el servidor de tareas remoto debe eliminar el mapeo almacenado para el usuario específico.

Entregar tareas

En las nubes:

  1. Un usuario utiliza el servidor de tareas remoto para enviar una tarea remota a un vehículo específico.

  2. El servidor de tareas remoto asigna la ID de usuario a la ID del vehículo y a la ID del cliente. Envía los datos de la tarea, la identificación del vehículo y la identificación del cliente al servidor de despertador.

  3. El servidor Wake-up busca la TCU específica para el ID del vehículo. Asumimos que el registro de la TCU ya está realizado) y envía los datos de la tarea y el ID del cliente a la TCU.

En el vehículo (el texto en negrita indica tareas realizadas por AAOS):

  1. La TCU recibe tareas remotas del servidor remoto.

  2. Si el procesador de aplicaciones (AP) que ejecuta AAOS está apagado, la TCU usa el procesador del vehículo (VP) para activar el AP.

  3. Car Service recibe tareas del TCU.

  4. Car Service distribuye tareas al cliente de tareas remotas correspondiente.

  5. El cliente de tareas remotas recibe y ejecuta la tarea.

    ( Opcional ) El cliente de tareas remotas se pone en contacto con el servidor de tareas para obtener más detalles sobre la tarea y la ejecuta.

  6. ( Opcional ) El servicio de cliente de tareas remotas informa el resultado de la tarea al servidor de tareas.

  7. El cliente de tareas remotas notifica a Car Service cuando se completa la tarea.

  8. Si es necesario, el Car Service restablece el estado de energía del vehículo.

image

Figura 3. Entregar tareas.

Escribir un cliente de tareas remotas

CarRemoteAccessManager proporciona la API para funciones de acceso remoto. Para obtener más información, consulte CarRemoteAccessManager . Un cliente de tareas remotas es un servicio de Android que ejecuta tareas remotas y utiliza CarRemoteAccessManager . Esto requiere PERMISSION_USE_REMOTE_ACCESS y PERMISSION_CONTROL_REMOTE_ACCESS y debe declarar un filtro de intención para RemoteTaskClientService como:

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

Un cliente de tarea remota debe registrarse en Car Service durante la creación:

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);
    }
}

Debe anular la función onBind para devolver nulo.

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

Car Service gestiona su ciclo de vida. Car Service se vincula a este servicio durante el inicio y cuando llega una tarea remota. Car Service se desvincula de este servicio cuando se completa la tarea. Para obtener más información, consulte Gestión del ciclo de vida de un servicio .

El cliente de tareas remotas se ejecuta como usuario del sistema, por lo que no tiene acceso a ningún dato específico del usuario.

El siguiente ejemplo muestra cómo manejar las devoluciones de llamada registradas:

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();
    }
}

Implementación de proveedores

La función de acceso remoto es opcional y está deshabilitada de forma predeterminada. Para habilitar la característica, agregue un RRO como el siguiente:

// 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
}

O use el siguiente comando adb en una compilación userdebug/eng:

adb shell cmd car_service enable-feature car_remote_access_service

Requisitos en Android

Acceso remoto HAL

La capa de abstracción de hardware de acceso remoto (HAL) es una capa de abstracción implementada por el proveedor para la comunicación entre AAOS y otra ECU (por ejemplo, una TCU). Es obligatorio para admitir la función de acceso remoto. No es necesario implementarlo si no se implementa la función de acceso remoto.

La interfaz se define en IRemoteAccess.aidl e incluye estos métodos:

Clase Descripción
String getVehicleId() Obtiene una identificación de vehículo única que puede ser reconocida por el servidor de activación.
String getWakeupServiceName() Obtiene el nombre del servidor de activación remoto.
String getProcessorId() Obtiene una ID de procesador única que se puede reconocer al despertar al cliente.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Establece una devolución de llamada que se llamará cuando se solicite una tarea remota.

void clearRemoteTaskCallback() Borra una devolución de llamada de tarea remota previamente configurada.
void notifyApStateChange(in ApState state)

Detecta si el procesador de aplicaciones está listo para recibir tareas remotas.

La interfaz de devolución de llamada se define en IRemoteTaskCallback.aid .

Clase Descripción
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Una devolución de llamada que se llama cuando se solicita una tarea remota.

Véase la implementación de referencia con una TCU externa. La implementación utiliza una secuencia de lectura de larga duración para recibir tareas remotas y admite el siguiente comando debug :

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

Vehículo HAL

Para admitir la función de acceso remoto, VHAL debe admitir estas propiedades:

Clase Descripción
SHUTDOWN_REQUEST Solicita que se apague la unidad principal.
VEHICLE_IN_USE
  • Detecta si el vehículo está en uso.
  • Después de que el usuario desbloquea el vehículo o cuando el usuario se acerca al vehículo. Debería ser true .
  • Una duración específica después de que el usuario apaga el vehículo o cuando el usuario bloquea el vehículo. Debería ser false .
  • Cuando true , AAOS no intenta apagar el vehículo cuando se completa la tarea remota.

Para obtener más información, consulte Propiedades del sistema admitidas .

Modo silencioso

El modo silencioso debe ser compatible con la función de acceso remoto para que el vehículo pueda arrancar en modo silencioso para ejecutar tareas remotas cuando no haya ningún usuario presente. Con el modo silencioso, el dispositivo AAOS se inicia con la pantalla y el audio apagados.

El modo silencioso se controla a través de dos archivos sysfs del kernel de Linux.

Clase Descripción
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Representa el modo silencioso actual.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Representa la señal de hardware para establecer un nuevo modo silencioso.

El procesador del vehículo envía una señal HW al SoC de Android para activar o desactivar el modo silencioso. La señal (0 o 1) se escribe en /sys/kernel/silent_boot/pm_silentmode_hw_state . Luego, el marco AAOS actualiza /sys/kernel/silent_boot/pm_silentmode_kernel_state en consecuencia, lo que representa el modo silencioso actual. Los módulos AAOS verifican /sys/kernel/silent_boot/pm_silentmode_kernel_state para saber si el sistema está en modo silencioso o no.

Cuando se recibe una tarea remota y se inicia AAOS, el procesador del vehículo configura el modo silencioso e inicia AAOS para que el sistema se inicie con la pantalla/audio apagado.

Componentes del vehículo que no son Android

Procesador de vehículos

El procesador del vehículo es un procesador en el vehículo que puede controlar la energía del procesador de la aplicación que ejecuta Android. En la arquitectura de ejemplo, la TCU activa el procesador de la aplicación enviando una señal al procesador del vehículo.

Componentes del vehículo que no son Android

La TCU del vehículo siempre puede recibir mensajes remotos.

El cliente Wake-up se ejecuta en la TCU para garantizar una conexión duradera con el servidor Wake-up remoto.

AAOS que se ejecuta en el AP puede comunicarse con el cliente Wake-up que se ejecuta en la TCU a través del acceso remoto HAL.

image

Figura 4. TCU (Cliente de activación).

Componentes en la nube

servidor de despertador

El servidor Wake-up se comunica con el cliente Wake-up en la TCU para:

  • Mantenga una conexión duradera con la TCU del vehículo.
  • Encuentre una TCU específica según la identificación de un vehículo.
  • Informar el estado de un vehículo. Por ejemplo, en línea o fuera de línea, o la última vez que estuvo en línea en el servidor de tareas remoto.

En una implementación real, un servidor de activación se puede fusionar con un servidor de tareas remoto.

Servidor de tareas remoto

El servidor de tareas remoto gestiona estas tareas remotas.

  • El usuario interactúa con el servidor para iniciar nuevas tareas remotas y monitorear tareas remotas.

  • Utiliza el servidor de activación remoto para activar el procesador de aplicaciones en los vehículos.

  • Interactúa con el cliente de tareas remotas que se ejecuta en el vehículo.

  • Almacena información de registro del cliente. Esto asocia un usuario específico a un cliente de tarea remota específico en un vehículo específico.

Normalmente, los 'datos de tarea' que se envían a través del servidor de tareas remoto al servidor de activación, a la TCU del vehículo y, finalmente, al cliente de tareas remotas son simplemente una ID de tarea. El cliente de tareas remotas utilizará el ID de la tarea para obtener la información detallada del servidor de tareas remoto.

Requisitos de privacidad y seguridad

Tarea Condición Requisito
TCU (cliente de activación) DEBE
  • Autentique el servidor de activación.
  • Confía en el código.
servidor de despertador DEBE
  • Permita que solo se conecten los servidores de tareas remotos incluidos en la lista permitida.
  • Autenticar el cliente de activación.
  • Envíe el mensaje de activación únicamente al vehículo objetivo.
Cliente de tareas remotas DEBE
  • Autenticar al usuario durante el registro.
  • Autenticar el servidor de tareas remoto.
  • Cumpla con todos los requisitos de seguridad para un servicio de Android. Por ejemplo, permisos limitados.
Servidor de tareas remoto DEBE
  • Debe autenticar el servidor de activación.
  • Proporcionar certificación del vehículo. Es decir, autenticar que la identificación del vehículo proporcionada en la solicitud coincida con la identificación del vehículo del remitente. Si no es posible la certificación del vehículo, deberá utilizar otros medios para verificar que el usuario actualmente es propietario del vehículo.
  • Autenticar la identidad del usuario.
  • Cumplir con todos los requisitos de seguridad para un servidor que maneja información del usuario.

Restablecimiento de fábrica y transferencia de propiedad

Si un usuario realiza un restablecimiento de fábrica, se borra la identificación del cliente almacenada en el Servicio de automóvil. Sin embargo, los servidores (servidor de tareas remoto y servidor de activación remota) no están informados. Los servidores conservan una asignación desde la ID del cliente ahora caducada hasta el vehículo. Como resultado, si el usuario inicia una nueva tarea remota para el vehículo, utiliza la ID de cliente caducada. El vehículo se activa, pero la tarea remota no se puede ejecutar porque el cliente de la tarea remota tiene una ID de cliente diferente que no coincide.

A continuación se describe una posible implementación para un restablecimiento de fábrica.

Cuando un usuario realiza un restablecimiento de fábrica, el proveedor le solicita que inicie sesión en el servidor de tareas remoto y desvincule el vehículo de su cuenta si el usuario ya lo ha vinculado previamente. No se garantiza que el dispositivo tenga acceso a la red durante el tiempo de restablecimiento de fábrica. Por lo tanto, es posible que no sea factible emitir la solicitud de desvinculación en el momento del restablecimiento de fábrica del dispositivo.

Siempre que se transfiere la propiedad de un vehículo, se deben realizar algunas operaciones para garantizar que el propietario anterior ya no pueda realizar tareas remotas al vehículo. Por ejemplo, se le puede pedir al nuevo propietario que:

  • Realice un restablecimiento de fábrica. Esto garantiza que se vuelva a generar el ID del cliente. Después de este paso, el propietario anterior aún puede reactivar el vehículo, pero ya no puede ejecutar tareas remotas.

  • Abra la aplicación cliente de tareas remotas y siga el proceso Anular registro de un cliente para desvincular el vehículo de la cuenta del propietario anterior. El nuevo propietario puede seguir el proceso de registro de un cliente para vincular el vehículo a su cuenta y reemplazar la cuenta previamente vinculada.

  • El nuevo propietario puede utilizar el proceso Registrar un cliente para vincular el vehículo a su cuenta y reemplazar la cuenta previamente vinculada.

Pruebe el cliente de tareas remotas

Proporcionamos el directorio default HAL de acceso remoto de referencia para probar clientes de tareas remotas. Puede utilizar el siguiente comando debug para inyectar una tarea remota falsa en HAL, que se reenvía a su cliente de tareas remotas si proporciona la ID de cliente correcta. Puede obtener el ID del cliente registrando la información de registro en la implementación del cliente de tareas remotas.

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