Configura 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 implementazione per componenti non Android (questa responsabilità appartiene a te).

Per saperne di più, consulta le seguenti sezioni:

Architettura

Il contenuto seguente presuppone che venga utilizzata la seguente architettura di esempio, che è ipotetica e potrebbe non riflettere l'architettura effettiva. Gli OEM dovrebbero adattare un'implementazione effettiva alle architetture dei loro veicoli e server.

image

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 sulla memoria virtuale (VM) (non sull'hardware reale) su questo processore.
Processore del veicolo Processore responsabile del controllo della potenza del processore dell'app.
Unità di controllo telematica (TCU) Processore nel veicolo sempre in grado di ricevere messaggi remoti dal cloud. Si presuppone che la TCU sia sempre accesa o in modalità a basso consumo. Usa i messaggi remoti per risvegliare la TCU.
Server di sveglia Un server remoto che funziona nel cloud ed è responsabile della comunicazione con la TCU nel veicolo per emettere comandi di riattivazione.
Server di attività remote Il server delle attività remote viene eseguito nel cloud, interagisce con le persone e gestisce 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 di attività remote Una classe Service scritta dal fornitore che esegue attività remote. Un sistema Android può eseguire più client di attività remote.
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.

I componenti software non Android sono descritti di seguito:

Componente software non Android Descrizione
Cliente sveglia Software in esecuzione su TCU che mantiene una connessione di 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 risveglio Server che comunica con il client di riattivazione in esecuzione su TCU. Può inviare richieste di riattivazione al client di riattivazione.
Implementazione del server di attività remote Server che gestisce attività remote. Gli utenti interagiscono con questo server per eseguire e monitorare attività remote.

Flusso di lavoro

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

Flusso di lavoro di esempio

Un flusso di lavoro dettagliato può essere simile al seguente:

  1. L'utente parcheggia il veicolo nel garage.

  2. Il partner cerca di aggiornare il veicolo dall'oggi al domani 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 telematica (TCU).

  4. La TCU del veicolo attiva 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

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

Registra un cliente

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

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

  2. All'avvio, Car Service avvia tutti i client di attività remote in base al filtro di intenti e all'autorizzazione.

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

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

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

  6. Il client dell'attività remota carica le informazioni dell'utente insieme all'ID del 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.

    Facoltativamente, questo passaggio potrebbe comportare un'ulteriore autenticazione a due fattori da parte dell'utente.

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

A meno che non venga effettuato un ripristino delle impostazioni di fabbrica, il processo di registrazione del cliente è richiesto una volta per utente e per veicolo. L'ID cliente viene memorizzato localmente nel Car Service e rimane lo stesso per lo stesso cliente.

image

Figura 2. Registra un cliente.

Annullare la registrazione di un cliente

Un utente può scollegare il veicolo dal proprio account sia dal veicolo che dal server delle attività remote:

  • Sul veicolo , gli utenti possono aprire l'app client delle attività remote ed inviare una richiesta di scollegamento per scollegare questo veicolo dai suoi account utente precedentemente collegati.

  • Sul server delle attività remote , 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à remote deve rimuovere la mappatura memorizzata per l'utente specifico.

Consegnare compiti

Nella nuvola:

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

  2. Il server delle attività remote associa l'ID utente all'ID veicolo e all'ID client. Invia i dati dell'attività, l'ID del veicolo e l'ID del cliente al server di sveglia.

  3. Il server di risveglio trova la TCU specifica per l'ID del veicolo (presupponendo che la registrazione della TCU sia già stata effettuata) 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. 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 incarichi da TCU.

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

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

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

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

  7. Il client dell'attività remota avvisa Car Service quando l'attività è completata.

  8. Se richiesto, il Car Service ripristina lo stato di alimentazione del veicolo.

image

Figura 3. Consegna delle attività.

Scrivere un client di attività remota

CarRemoteAccessManager fornisce l'API per le funzionalità di accesso remoto. Per ulteriori informazioni, vedere CarRemoteAccessManager . Un client di attività remote è 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 di intenti per RemoteTaskClientService come:

<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 sovrascrivere la funzione onBind per restituire null.

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

Car Service ne gestisce il ciclo di vita. Car Service si lega a questo servizio durante l'avvio e quando arriva un'attività remota. Car Service si svincola da questo servizio una volta completata l'attività. Per saperne di più, consulta Gestire il ciclo di vita di un servizio .

Il client dell'attività remota viene eseguito come utente di sistema, quindi non ha accesso ad alcun dato specifico dell'utente.

L'esempio seguente 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 disabilitata per impostazione predefinita. Per abilitare la funzione, 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
}

Oppure usa 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

Il livello di astrazione hardware di accesso remoto (HAL) è 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() Ottiene un ID veicolo univoco che può essere riconosciuto dal server di riattivazione.
String getWakeupServiceName() Ottiene il nome del server di riattivazione remota.
String getProcessorId() Ottiene un ID processore univoco che può essere riconosciuto riattivando il client.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

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

void clearRemoteTaskCallback() Cancella una richiamata di attività remota impostata in precedenza.
void notifyApStateChange(in ApState state)

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

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

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

Una richiamata che viene chiamata quando viene richiesta un'attività remota.

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

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

Veicolo 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 sbloccato il veicolo o mentre si avvicina al veicolo. Dovrebbe essere true .
  • Una durata specifica dopo che l'utente ha spento il veicolo o quando l'utente ha bloccato il veicolo. Dovrebbe essere false .
  • Quando è true , AAOS non tenta di spegnere il veicolo una volta completata l'attività remota.

Per ulteriori informazioni, 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à remote quando non è presente alcun utente. Con la modalità silenziosa, il dispositivo AAOS si avvia con display e 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 corrente.

/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. Il segnale (0 o 1) viene scritto in /sys/kernel/silent_boot/pm_silentmode_hw_state . Quindi, il framework AAOS aggiorna di conseguenza /sys/kernel/silent_boot/pm_silentmode_kernel_state che rappresenta la modalità silenziosa corrente. I moduli AAOS controllano /sys/kernel/silent_boot/pm_silentmode_kernel_state per sapere se il sistema è in modalità silenziosa o meno.

Quando viene ricevuta 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 a bordo del veicolo

Processore del veicolo

Il processore del veicolo è un processore del veicolo in grado di controllare la potenza del processore dell'app con Android. Nell'architettura di esempio, la TCU attiva il processore dell'app inviando un segnale al processore del veicolo.

Componenti non Android a bordo del veicolo

La TCU del veicolo può sempre ricevere messaggi remoti.

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

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

image

Figura 4. TCU (client di riattivazione).

Componenti sul cloud

Server di sveglia

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

  • Mantieni una connessione duratura con la TCU del veicolo.
  • Trova una TCU specifica in base all'ID del veicolo.
  • Segnala lo stato di un veicolo. Ad esempio, online o offline oppure l'ultima volta online sul server delle attività remote.

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

Server di attività remote

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

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

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

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

  • Memorizza le informazioni di registrazione del cliente. Ciò associa un utente specifico a uno specifico client di attività remota su un veicolo specifico.

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

Requisiti di privacy e sicurezza

Compito Condizione Requisiti
TCU (client di riattivazione) DOVERE
  • Autenticare il server di riattivazione.
  • Fidati del codice.
Server di sveglia DOVERE
  • Consentire la connessione solo ai server di attività remote elencati nell'elenco consentito.
  • Autenticare il client di riattivazione.
  • Invia il messaggio di sveglia solo al veicolo di destinazione.
Client di attività remote DOVERE
  • Autenticare l'utente durante la registrazione.
  • Autenticare il server delle attività remote.
  • Soddisfa tutti i requisiti di sicurezza per un servizio Android. Ad esempio, autorizzazioni limitate.
Server di attività remote DOVERE
  • È necessario autenticare il server di riattivazione.
  • Fornire l'attestazione del veicolo. Ovvero, autenticare che l'ID del veicolo fornito nella richiesta corrisponda all'ID del veicolo del mittente. Se l'attestazione del veicolo non è possibile, è necessario utilizzare altri mezzi per verificare che l'utente sia attualmente proprietario del veicolo.
  • Autenticare l'identità dell'utente.
  • Soddisfa tutti i requisiti di sicurezza per un server che gestisce le informazioni dell'utente.

Ripristino delle impostazioni di fabbrica e trasferimento di proprietà

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

Di seguito viene descritta una possibile implementazione per il ripristino delle impostazioni di fabbrica.

Quando un utente effettua un ripristino delle impostazioni di fabbrica, il venditore chiede all'utente di accedere al server delle attività remote e di scollegare il veicolo dal proprio account se l'utente ha precedentemente collegato il veicolo. Non è garantito che il dispositivo abbia accesso alla rete durante il ripristino delle impostazioni di fabbrica. Pertanto, emettere la richiesta di scollegamento al momento del ripristino delle impostazioni di fabbrica dal dispositivo potrebbe non essere fattibile.

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

  • Eseguire un ripristino delle impostazioni di fabbrica. Ciò garantisce che l'ID client venga rigenerato. Dopo questo passaggio, il precedente proprietario può comunque riattivare il veicolo, ma non può più eseguire attività remote.

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

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

Testare il client delle attività remote

Forniamo la directory default HAL di accesso remoto di riferimento per testare i client di attività remote. È possibile utilizzare il seguente comando debug per inserire un'attività remota falsa nell'HAL, che viene inoltrata al client dell'attività remota se si fornisce l'ID client corretto. È possibile ottenere l'ID client registrando le informazioni di registrazione nell'implementazione del client dell'attività remota.

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