Configurare l'accesso remoto

Android 14 introduce la nuova funzionalità di accesso remoto, che consente ai partner di riattivare da remoto Android in un veicolo per eseguire attività specifiche. Ad esempio, per eseguire la modalità Garage durante la notte per applicare gli aggiornamenti software. Per il flusso di lavoro end-to-end sono necessari più componenti non Android. Android non definisce né fornisce l'implementazione per i componenti non Android (questa responsabilità spetta a te).

Per saperne di più, consulta le sezioni seguenti:

Architettura

I seguenti contenuti presuppongono l'utilizzo della seguente architettura di esempio, che è ipotetica e potrebbe non riflettere l'architettura effettiva. Gli OEM devono adattare un'implementazione effettiva alle architetture del veicolo e del server.

immagine

Figura 1. Architettura di esempio.

L'architettura di esempio è costituita dai seguenti componenti hardware:

Componente hardware Descrizione
Processore dell'app Processore che esegue Android. Android potrebbe essere eseguito su memoria virtuale (VM) (non su hardware effettivo) su questo processore.
Processore del veicolo Processore responsabile del controllo dell'alimentazione del processore dell'app.
Unità di controllo telematico (TCU) Il processore del veicolo è sempre in grado di ricevere messaggi remoti dal cloud. Si presume che la TCU sia sempre accesa o in modalità a basso consumo. Utilizza i messaggi remoti per riattivare la TCU.
Server di riattivazione Un server remoto che viene eseguito nel cloud ed è responsabile della comunicazione con la TCU del veicolo per l'invio di comandi di riattivazione.
Server delle attività remota Il server delle attività remote viene eseguito nel cloud e interagisce con le persone e gestisce le attività remote.

L'architettura di esempio è costituita dai seguenti componenti software, tutti eseguiti su Android:

Componente software su Android Descrizione
Servizio auto Servizio framework AAOS che fornisce API di accesso remoto.
Client attività remota Una classe Service scritta dal fornitore che esegue attività remote. Un sistema Android può eseguire più client di attività remota.
HAL di accesso remoto Deve essere implementato per l'accesso remoto.
Livello di astrazione per la comunicazione tra AAOS e un componente non Android come la TCU.

Di seguito sono descritti i componenti software non Android:

Componente software non Android Descrizione
Client di riattivazione Software in esecuzione sulla TCU che mantiene una connessione a lunga durata con il server di riattivazione. Mantiene inoltre una connessione con l'HAL di accesso remoto per fornire attività remote al servizio auto.
Implementazione del server di riattivazione Server che comunica con il client di riattivazione in esecuzione sulla TCU. Può inviare richieste di riattivazione al client di riattivazione.
Implementazione del server delle attività remota Server che gestisce le attività remote. Gli utenti interagiscono con questo server per emettere e monitorare le attività remote.

Flusso di lavoro

Questa sezione elenca i passaggi di un flusso di lavoro di esempio.

Workflow di esempio

Un workflow dettagliato può essere simile al seguente:

  1. L'utente parcheggia il veicolo nel garage.

  2. Il partner cerca di aggiornare il veicolo durante la notte quando le interazioni con il veicolo sono improbabili.

  3. Il server cloud del partner invia un'attività remota di aggiornamento del sistema al veicolo. Nello specifico, l'unità di controllo telematico (TCU).

  4. La TCU del veicolo riattiva l'unità di controllo elettronico (ECU) Android e un servizio OEM attiva la modalità Garage.

  5. Android esegue la modalità Garage per scaricare e installare gli aggiornamenti tramite Google Play.

  6. Dopo aver applicato l'aggiornamento, Android contrassegna l'attività come completata e termina la connessione o raggiunge un timeout specificato.

Flusso di lavoro dettagliato

Per l'accesso remoto sono necessari due passaggi importanti. Il primo è registrare il client, ovvero collegare un utente specifico a un client di attività remoto specifico in esecuzione su un veicolo specifico. L'altro è consegnare un'attività, ovvero consegnare l'attività remota per un utente specifico al client di attività remota specifico in esecuzione sul veicolo specifico.

Registrare un client

Per utilizzare la funzionalità di accesso remoto, un utente deve aprire l'app client di attività remota almeno una volta e completare la procedura di registrazione del client (il testo in grassetto indica le attività implementate da AAOS):

  1. All'avvio, Car Service riceve le informazioni sul veicolo dall'HAL di accesso remoto.

  2. All'avvio, Car Service lancia tutti i client di attività remota in base a intent-filter e autorizzazione.

  3. All'avvio del client di attività remota, questo si registra con il servizio auto.

  4. Car Service comunica al client di attività remota le informazioni di registrazione, inclusi l'ID veicolo e l'ID client. L'ID client è univoco e assegnato da Car Service a questo client. È garantito che sia univoco tra tutti i client di attività remota sullo stesso veicolo.

  5. L'utente accede al server delle attività remoto tramite il client delle attività remoto e attiva la funzionalità di accesso remoto per questo veicolo. Questo passaggio in genere comporta l'autenticazione tramite il server delle attività remoto.

  6. Il client dell'attività remota carica le informazioni dell'utente insieme all'ID veicolo e all'ID client sul server dell'attività remota e gli chiede di collegare l'utente a questo client specifico e a questo veicolo specifico.

    (Facoltativo) Questo passaggio potrebbe comportare un'ulteriore autenticazione a due fattori da parte dell'utente.

    Il server delle attività remoto deve autenticare che l'ID veicolo fornito nella richiesta corrisponda all'ID veicolo del mittente, operazione che può essere eseguita tramite l'attestazione del veicolo.

A meno che non venga eseguito un ripristino dei dati di fabbrica, la procedura di registrazione del client è richiesta una volta per utente per veicolo. L'ID client viene memorizzato localmente nel servizio auto e rimane invariato per lo stesso client.

immagine

Figura 2. Registra un client.

Annullare la registrazione di un client

Un utente può scollegare il veicolo dal proprio account dal veicolo o dal server delle attività remoto:

  • Sul veicolo, gli utenti possono aprire l'app client di attività remota ed emettere una richiesta di scollegamento per scollegare questo veicolo dagli account utente collegati in precedenza.

  • Sul server delle attività remoto, gli utenti possono accedere al proprio account e scollegare un veicolo precedentemente collegato da questo account.

Se l'utente scollega il veicolo dal proprio account, il server delle attività remoto deve rimuovere la mappatura memorizzata per l'utente specifico.

Consegnare le attività

Nel cloud:

  1. Un utente utilizza il server delle attività remoto per inviare un'attività remota a un veicolo specifico.

  2. Il server delle attività remoto mappa l'ID utente all'ID veicolo e all'ID cliente. Invia i dati dell'attività, l'ID veicolo e l'ID client al server di riattivazione.

  3. Il server di riattivazione trova la TCU specifica per l'ID veicolo (supponendo che la registrazione della TCU sia già stata eseguita) e invia i dati dell'attività e l'ID client alla TCU.

Sul veicolo (il testo in grassetto indica le attività eseguite da AAOS):

  1. La TCU riceve attività remote dal server remoto.

  2. Se il processore dell'app (AP) che esegue AAOS è spento, la TCU utilizza il processore del veicolo (VP) per riattivare l'AP.

  3. Car Service riceve le attività dalla TCU.

  4. Car Service distribuisce le attività al client di attività remoto corrispondente.

  5. Il client di attività remota riceve ed esegue l'attività.

    (Facoltativo) Il client di attività remota contatta il server di attività per ulteriori dettagli sull'attività ed esegue l'attività.

  6. (Facoltativo) Il servizio client di attività remota segnala il risultato dell'attività al server delle attività.

  7. Il client dell'attività remota comunica a Car Service quando l'attività è stata completata.

  8. Se necessario, il servizio auto ripristina lo stato di alimentazione del veicolo.

immagine

Figura 3. Eseguire le attività.

Scrivere un client di attività remota

CarRemoteAccessManager fornisce l'API per le funzionalità di accesso remoto. Per saperne di più, consulta CarRemoteAccessManager. Un client di attività remota è un servizio Android che esegue attività remote e utilizza CarRemoteAccessManager. Ciò richiede PERMISSION_USE_REMOTE_ACCESS e PERMISSION_CONTROL_REMOTE_ACCESS e deve dichiarare un filtro per intent per RemoteTaskClientService, ad esempio:

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

Un client di attività remota deve registrarsi al servizio auto durante la creazione:

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

Deve eseguire l'override della funzione onBind per restituire null.

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

Car Service gestisce il proprio ciclo di vita. Car Service si associa a questo servizio durante l'avvio e quando arriva un'attività remota. Il servizio auto viene scollegato da questo servizio al termine dell'attività. Per scoprire di più, consulta la sezione Gestire il ciclo di vita di un servizio.

Il client di attività remota viene eseguito come utente di sistema, pertanto non ha accesso a dati specifici dell'utente.

Il seguente esempio mostra come gestire i callback registrati:

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

Implementazione del fornitore

La funzionalità di accesso remoto è facoltativa e disattivata per impostazione predefinita. Per attivare la funzionalità, aggiungi un RRO come il seguente:

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

In alternativa, utilizza il seguente comando adb su una build userdebug/eng:

adb shell cmd car_service enable-feature car_remote_access_service

Requisiti su Android

HAL di accesso remoto

L'HAL (hardware abstraction layer) per l'accesso remoto è un livello di astrazione implementato dal fornitore per la comunicazione tra AAOS e un'altra ECU (ad esempio, una TCU). È obbligatorio per supportare la funzionalità di accesso remoto. Non è necessario implementarlo se la funzionalità di accesso remoto non è implementata.

L'interfaccia è definita in IRemoteAccess.aidl e include questi metodi:

Classe Descrizione
String getVehicleId() Recupera un ID veicolo univoco che può essere riconosciuto dal server di riattivazione.
String getWakeupServiceName() Recupera il nome del server di riattivazione remota.
String getProcessorId() Recupera un ID processore univoco che può essere riconosciuto riattivando il client.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Imposta un callback da chiamare quando viene richiesta un'attività remota.

void clearRemoteTaskCallback() Cancella un callback di attività remota impostato in precedenza.
void notifyApStateChange(in ApState state)

Rileva se il processore dell'app è pronto a ricevere attività remote.

L'interfaccia di callback è definita in IRemoteTaskCallback.aid.

Classe Descrizione
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Un callback chiamato quando viene richiesta un'attività remota.

Consulta l'implementazione di riferimento con una TCU esterna. L'implementazione utilizza un flusso di lettura a lunga durata per ricevere attività remote e supporta il seguente comando debug:

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

Vehicle HAL

Per supportare la funzionalità di accesso remoto, VHAL deve supportare queste proprietà:

Classe Descrizione
SHUTDOWN_REQUEST Richiede lo spegnimento dell'unità principale.
VEHICLE_IN_USE
  • Rileva se il veicolo è in uso.
  • Dopo che l'utente ha aperto il veicolo o mentre si avvicina al veicolo. Deve essere true.
  • Un periodo di tempo specifico dopo che l'utente spegne il veicolo o lo chiude. Deve essere false.
  • Quando true, AAOS non tenta di spegnere il veicolo al termine dell'attività remota.

Per saperne di più, consulta Proprietà di sistema supportate.

Modalità silenziosa

La modalità silenziosa deve essere supportata per la funzionalità di accesso remoto, in modo che il veicolo possa avviarsi in modalità silenziosa per eseguire attività da remoto quando non è presente alcun utente. Con la modalità silenziosa, il dispositivo AAOS si avvia con il display e l'audio disattivati.

La modalità silenziosa è controllata tramite due file sysfs del kernel Linux.

Classe Descrizione
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Rappresenta la modalità silenziosa attuale.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Rappresenta il segnale hardware per impostare una nuova modalità silenziosa.

Il processore del veicolo invia un segnale HW al SoC Android per attivare/disattivare la modalità Silenziosa. L'indicatore (0 o 1) viene scritto in /sys/kernel/silent_boot/pm_silentmode_hw_state. Poi, gli aggiornamenti del framework AAOS /sys/kernel/silent_boot/pm_silentmode_kernel_state di conseguenza, il che rappresenta la modalità Silenziosa attuale. I moduli AAOS controllano /sys/kernel/silent_boot/pm_silentmode_kernel_state per sapere se il sistema è in modalità Silenzioso o meno.

Quando viene ricevuto un'attività remota e AAOS si avvia, il processore del veicolo imposta la modalità Silenziosa e avvia AAOS in modo che il sistema si avvii con display/audio disattivati.

Componenti non Android sul veicolo

Processore del veicolo

Il processore del veicolo è un processore del veicolo che può controllare l'alimentazione del processore dell'app che esegue Android. Nell'architettura di esempio, la TCU attiva il processore dell'app inviando un segnale al processore del veicolo.

Componenti non Android sul veicolo

La TCU del veicolo può sempre ricevere messaggi da remoto.

Il client di riattivazione viene eseguito sulla TCU per garantire una connessione a lunga durata con il server di riattivazione remota.

AAOS in esecuzione sull'AP può comunicare con il client di riattivazione in esecuzione sull'TCU tramite l'HAL di accesso remoto.

immagine

Figura 4. TCU (client di riattivazione).

Componenti sul cloud

Server di riattivazione

Il server di riattivazione comunica con il client di riattivazione sulla TCU per:

  • Mantenere una connessione di lunga durata con la TCU del veicolo.
  • Trova una TCU specifica in base all'ID veicolo.
  • Segnala lo stato di un veicolo. Ad esempio, online o offline oppure l'ultima ora online del server delle attività remoto.

In un'implementazione effettiva, un server di riattivazione può essere unito a un server di attività remoto.

Server delle attività remota

Il server delle attività remote gestisce queste attività remote.

  • L'utente interagisce con il server per avviare nuove attività remote e per monitorarle.

  • Utilizza il server di riattivazione remota per riattivare il processore dell'app nei veicoli.

  • Interagisce con il client di attività remota in esecuzione sul veicolo.

  • Memorizza le informazioni di registrazione del cliente. In questo modo, un utente specifico viene associato a un client di attività remota specifico su un veicolo specifico.

In genere i dati dell'attività inviati tramite il server delle attività remoto al server di riattivazione, alla TCU del veicolo e infine al client delle attività remoto sono semplicemente un ID attività. Il client dell'attività remota utilizza l'ID attività per recuperare le informazioni dettagliate dal server delle attività remote.

Requisiti di privacy e sicurezza

Attività Condizione Requisito
TCU (client di riattivazione) MUST
  • Autentica il server di riattivazione.
  • Considera attendibile il codice.
Server di riattivazione MUST
  • Consenti la connessione solo ai server delle attività remoti inclusi nella lista consentita.
  • Autentica il client di riattivazione.
  • Invia il messaggio di riattivazione solo al veicolo di destinazione.
Client attività remota MUST
  • Autentica l'utente durante la registrazione.
  • Autentica il server delle attività remoto.
  • Soddisfare tutti i requisiti di sicurezza per un servizio Android. Ad esempio, autorizzazioni limitate.
Server delle attività remota MUST
  • Deve autenticare il server di riattivazione.
  • Fornisci l'attestazione del veicolo. ovvero, autenticare che l'ID veicolo fornito nella richiesta corrisponda all'ID veicolo del mittente. Se l'attestazione del veicolo non è possibile, devono essere utilizzati altri mezzi per verificare che l'utente sia attualmente proprietario del veicolo.
  • Autenticare l'identità dell'utente.
  • Soddisfare tutti i requisiti di sicurezza per un server che gestisce le informazioni degli utenti.

Ripristino dei dati di fabbrica e trasferimento della proprietà

Se un utente esegue un ripristino dei dati di fabbrica, il Client-ID memorizzato nel servizio auto viene cancellato. Tuttavia, i server (server delle attività remoto e server di riattivazione remoto) non vengono informati. I server mantengono una mappatura dall'ID client ora scaduto al veicolo. Di conseguenza, se l'utente avvia una nuova attività remota per il veicolo, viene utilizzato l'ID client scaduto. Il veicolo viene riattivato, ma l'attività remota non può essere eseguita perché il client dell'attività remota ha un ID client diverso che non corrisponde.

Di seguito viene descritta una possibile implementazione per un ripristino dei dati di fabbrica.

Quando un utente esegue un ripristino dei dati di fabbrica, il fornitore chiede all'utente di accedere al server delle attività remoto e di scollegare il veicolo dal proprio account se l'utente lo ha collegato in precedenza. Non è garantito che il dispositivo abbia accesso alla rete durante il ripristino dei dati di fabbrica. Pertanto, l'invio della richiesta di scollegamento al momento del ripristino dei dati di fabbrica dal dispositivo potrebbe non essere fattibile.

Ogni volta che viene trasferita la proprietà di un veicolo, è necessario eseguire alcune operazioni per garantire che il precedente proprietario non possa più inviare attività da remoto al veicolo. Ad esempio, al nuovo proprietario potrebbe essere chiesto di:

  • Esegui il ripristino dei dati di fabbrica In questo modo, l'ID client viene rigenerato. Dopo questo passaggio, il precedente proprietario può ancora riattivare il veicolo, ma non può più eseguire attività da remoto.

  • Apri l'app client di attività remota e segui la procedura Annulla registrazione di un client per scollegare il veicolo dall'account del precedente proprietario. Il nuovo proprietario può seguire la procedura di registrazione di un client per collegare il veicolo al proprio account e sostituire l'account collegato in precedenza.

  • Il nuovo proprietario può utilizzare la procedura Registra un cliente per collegare il veicolo al proprio account e sostituire l'account collegato in precedenza.

Testare il client di attività remota

Forniamo la directory HAL di accesso remoto di riferimento default per testare i client di attività remota. Puoi utilizzare il seguente comando debug per inserire un'attività remota fittizia nell'HAL, che viene inoltrata al tuo client di attività remota se fornisci l'ID client corretto. Puoi ottenere l'ID client registrando le informazioni di registrazione nell'implementazione del client di attività remota.

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