Remotezugriff einrichten

Mit Android 14 wird die neue Funktion für den Remotezugriff eingeführt: die es Partnern ermöglicht, Android per Remote-Zugriff in einem Fahrzeug zu aktivieren, bestimmte Aufgaben zu erledigen. Um beispielsweise Garage-Modus über Nacht zur Anwendung der Software Aktualisierungen. Für den End-to-End-Vorgang sind mehrere Nicht-Android-Komponenten erforderlich. zu optimieren. Android definiert keine Implementierung für Nicht-Android- Komponenten (diese Verantwortlichkeit liegt bei Ihnen).

Weitere Informationen finden Sie in den folgenden Abschnitten:

Architektur

Der folgende Inhalt setzt die folgende Beispielarchitektur voraus, die ist hypothetisch und spiegelt möglicherweise nicht die tatsächliche Architektur wider. OEMs sollten Implementierung in ihre Fahrzeug- und Serverarchitektur.

Bild

Abbildung 1: Beispielarchitektur.

Die Beispielarchitektur besteht aus den folgenden Hardwarekomponenten:

Hardwarekomponente Beschreibung
App-Prozessor Prozessor, der Android ausführt. Android kann auf virtuellem Speicher (VM) ausgeführt werden (nicht auf der Hardware) auf diesem Prozessor.
Fahrzeugauftragsverarbeiter Prozessor, der für die Steuerung der Stromversorgung der App verantwortlich ist Prozessor.
Telematiksteuerung (TCU) Der Prozessor im Fahrzeug kann immer Remote-Nachrichten von in der Cloud. Es wird angenommen, dass die TCU immer aktiviert ist oder sich im Energiesparmodus befindet. Verwenden Sie um die TCU zu wecken.
Wakeup-Server Ein Remote-Server, der in der Cloud ausgeführt wird und für kommuniziert mit der TCU im Fahrzeug, um Weckbefehle auszuführen.
Remote-Aufgabenserver Remote-Aufgabenserver wird in der Cloud ausgeführt und interagiert mit Personen und Remote-Aufgaben verwaltet.

Die Beispielarchitektur besteht aus diesen Softwarekomponenten, die alle für Android:

On-Android-Softwarekomponente Beschreibung
Autodienst AAOS-Framework-Dienst, der APIs für den Remotezugriff bereitstellt.
Remote-Task-Client Ein vom Zulieferunternehmen Service Klasse, die Remote-Aufgaben ausführt. Ein Android-System kann mehrere Remote-Aufgabenclients.
Remotezugriff HAL Muss für den Remotezugriff implementiert werden.
Abstraktionsschicht für die Kommunikation zwischen AAOS und einer Nicht-Android-App wie die TCU.

Komponenten von Nicht-Android-Software werden im Folgenden beschrieben:

Nicht-Android-Softwarekomponente Beschreibung
Wakeup-Client Software, die auf der TCU ausgeführt wird und eine langjährige Verbindung zur Wakeup-Server. Außerdem hält er eine Verbindung zum HAL für den Remotezugriff aufrecht. um Remote-Aufgaben an den CarService zu senden.
Implementierung des Wakeup-Servers Server, der mit dem auf der TCU ausgeführten Wakeup-Client kommuniziert. Kann Wakeup-Anfragen an den Wakeup-Client senden.
Implementierung des Remote-Aufgabenservers Server, der Remoteaufgaben verwaltet. Nutzer interagieren mit diesem Server, Aufgaben ausführen und Remote-Aufgaben überwachen.

Workflow

In diesem Abschnitt werden die Schritte in einem Beispielworkflow aufgeführt.

Beispiel-Workflow

Ein detaillierter Workflow kann so aussehen:

  1. Der Nutzer parkt das Fahrzeug in der Garage.

  2. Der Partner versucht, das Fahrzeug über Nacht zu aktualisieren, wenn Interaktionen mit dem Fahrzeug auftreten unwahrscheinlich.

  3. Der Cloud-Server des Partners sendet eine Remoteaufgabe zum Aktualisieren des Systems an das Fahrzeug. Insbesondere die telematische Steuereinheit (TCU).

  4. Die TCU des Fahrzeugs aktiviert die elektronische Steuereinheit von Android und ein OEM-Dienst den Garage-Modus auslöst.

  5. Android nutzt den Garage-Modus, um Updates über Google Play herunterzuladen und zu installieren.

  6. Nach der Installation des Updates markiert Android die Aufgabe als abgeschlossen beendet die Verbindung oder erreicht ein angegebenes Zeitlimit.

Detaillierter Workflow

Für den Remotezugriff sind zwei wichtige Schritte erforderlich. Die erste besteht darin, Registrieren Sie den Client, um einen bestimmten Nutzer mit einem bestimmten Remote- für ein bestimmtes Fahrzeug ausgeführt wird. Die andere ist die Erledigung einer Aufgabe, die Remote-Aufgabe für eine bestimmte Person an die jeweilige Remote-Aufgabe zu übergeben. für ein bestimmtes Fahrzeug ausgeführt wird.

Client registrieren

Um die Funktion für den Remotezugriff zu verwenden, müssen Nutzer den Remote-Task-Client öffnen mindestens einmal in der App installieren und die Kundenregistrierung abschließen (fett Text) gibt Aufgaben an, die von AAOS implementiert wurden):

  1. Beim Start erhält CarService Fahrzeuginformationen aus dem Remotezugriff HAL.

  2. Beim Start startet Car Service alle Remote-Aufgabenclients basierend auf Intent-Filter und Berechtigung.

  3. Beim Start des Remote-Aufgabenclients registriert sich der Remote-Aufgabenclient mit den Autoservice.

  4. Car Service benachrichtigt den Remote-Aufgabenclient über die Registrierung einschließlich Fahrzeug-ID und Client-ID. Die Client-ID ist eindeutig und wird diesem Kunden von Car Service zugewiesen. Sie ist garantiert einzigartig für alle Remote-Aufgabenclients im selben Fahrzeug.

  5. Der Nutzer meldet sich über den Remote-Aufgabenclient beim Remote-Aufgabenserver an und aktiviert die Funktion für den Remotezugriff für dieses Fahrzeug. Dieser Schritt ist normalerweise beinhaltet die Authentifizierung über den Remote-Aufgabenserver.

  6. Der Client für Remote-Aufgaben lädt die Informationen des Nutzers zusammen mit der Fahrzeug-ID hoch. und Client-ID an den Remote-Task-Server und fordert ihn auf, den Nutzer mit bestimmten Kunden und diesem Fahrzeug.

    Optional kann dieser Schritt eine zusätzliche 2-Faktor-Authentifizierung umfassen von den Nutzenden.

    Der Remote-Aufgabenserver muss authentifizieren, dass die Fahrzeug-ID, die in mit der Fahrzeug-ID des Absenders übereinstimmt. Dies kann über Fahrzeugattestierung.

Sofern das Gerät nicht auf die Werkseinstellungen zurückgesetzt wird, ist die Clientregistrierung erforderlich. einmal pro Nutzer und Fahrzeug. Die Client-ID wird lokal in CarService gespeichert und bleibt für denselben Kunden gleich.

Bild

Abbildung 2: Registrieren Sie einen Client.

Client abmelden

Nutzer können die Verknüpfung des Fahrzeugs mit ihrem Konto entweder vom Fahrzeug oder von Remote-Aufgabenserver:

  • Im Fahrzeug können Nutzer die Client-App für Remote-Aufgaben öffnen und Folgendes ausgeben: Anfrage zum Aufheben der Verknüpfung dieses Fahrzeugs mit dem zuvor verknüpften Nutzer Konten.

  • Auf dem Remote-Aufgabenserver können sich Nutzer in ihrem Konto anmelden und die Verknüpfung aufheben. ein zuvor aus diesem Konto verknüpftes Fahrzeug.

Wenn der Nutzer die Verknüpfung des Fahrzeugs mit seinem Konto aufhebt, muss der Remote-Taskserver die gespeicherte Zuordnung für den jeweiligen Nutzer entfernen.

Aufgaben bereitstellen

In der Cloud:

  1. Ein Nutzer sendet über den Remote-Aufgabenserver eine Remoteaufgabe an einen bestimmten Fahrzeug.

  2. Der Remote-Aufgabenserver ordnet die Nutzer-ID der Fahrzeug-ID und der Client-ID zu. Es sendet die Aufgabendaten, die Fahrzeug-ID und die Client-ID an den Wakeup-Server.

  3. Der Wakeup-Server findet die spezifische TCU für die Fahrzeug-ID (vorausgesetzt, die TCU-Registrierung ist bereits erfolgt) und sendet die Aufgabendaten und die Client-ID an der TCU.

Am Fahrzeug (fetter Text zeigt Aufgaben an, die von AAOS ausgeführt werden):

  1. TCU empfängt Remote-Aufgaben vom Remote-Server.

  2. Wenn der App Processor (AP), der AAOS ausführt, deaktiviert ist, verwendet TCU die VP (Vehicle Processor), um den AP zu aktivieren.

  3. Car Service erhält Aufgaben von TCU.

  4. Car Service verteilt Aufgaben auf den entsprechenden Remote-Aufgabenclient.

  5. Remote-Task-Client empfängt und führt die Aufgabe aus.

    Optional: Remote-Aufgabenclient kontaktiert den Aufgabenserver, um weitere Aufgabendetails zu erhalten und führt die Aufgabe aus.

  6. Optional: Der Clientdienst für Remote-Aufgaben meldet das Ergebnis der Aufgabe an den Taskserver.

  7. Der Remote-Task-Client benachrichtigt Car Service, wenn die Aufgabe abgeschlossen ist.

  8. Bei Bedarf stellt der Autodienst den Energiestatus des Fahrzeugs wieder her.

Bild

Abbildung 3: Aufgaben liefern.

Remote-Aufgabenclient schreiben

CarRemoteAccessManager stellt die API für Funktionen für den Remotezugriff bereit. Weitere Informationen finden Sie unter CarRemoteAccessManager verwendet werden. Ein Client für Remote-Aufgaben ist ein Android-Dienst, der Remote-Aufgaben ausführt und CarRemoteAccessManager Hierfür sind PERMISSION_USE_REMOTE_ACCESS und PERMISSION_CONTROL_REMOTE_ACCESS und muss einen Intent-Filter deklarieren für RemoteTaskClientService wie zum Beispiel:

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

Ein Client für Remote-Aufgaben sollte sich während der Erstellung bei CarService registrieren:

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

Sie muss die Funktion onBind überschreiben, um null zurückzugeben.

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

Car Service verwaltet seinen Lebenszyklus. CarService bindet währenddessen an diesen Service. und wenn eine Remote-Aufgabe eingeht. CarService hebt die Bindung an diesen Dienst auf, wenn ob die Aufgabe abgeschlossen ist. Weitere Informationen finden Sie unter Lebenszyklus eines Dienstes verwalten

Der Client für Remote-Aufgaben wird als Systemnutzer ausgeführt, daher hat er keinen Zugriff auf alle nutzerspezifischen Daten.

Das folgende Beispiel zeigt, wie die registrierten Callbacks verarbeitet werden:

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

Anbieterimplementierung

Die Funktion für den Remotezugriff ist optional und standardmäßig deaktiviert. Um den fügen Sie einen RRO wie den folgenden hinzu:

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

Oder verwenden Sie den folgenden ADB-Befehl in einem userdebug/eng-Build:

adb shell cmd car_service enable-feature car_remote_access_service

Anforderungen auf Android-Geräten

Remotezugriff HAL

Die Remote-Access-Hardware-Abstraktionsschicht (HAL) ist eine vom Anbieter implementierte Abstraktionsschicht für die Kommunikation zwischen AAOS und einer anderen ECU (z. B. ein TCU). Dies ist für die Unterstützung der Funktion für den Remotezugriff erforderlich. Es muss nicht wenn die Funktion für den Remotezugriff nicht implementiert ist.

Die Schnittstelle wird unter IRemoteAccess.aidl. Sie enthält folgende Methoden:

Klasse Beschreibung
String getVehicleId() Ruft eine eindeutige Fahrzeug-ID ab, die beim Aufwachen erkannt werden kann Server.
String getWakeupServiceName() Ruft den Namen für den Remote-Wakeup-Server ab.
String getProcessorId() Ruft eine eindeutige Prozessor-ID ab, die beim Aktivieren des Client.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Legt einen Callback fest, der aufgerufen wird, wenn eine Remote-Aufgabe angefordert wird.

void clearRemoteTaskCallback() Löscht einen zuvor festgelegten Remote-Aufgaben-Callback.
void notifyApStateChange(in ApState state)

Erkennt, ob der App-Prozessor bereit ist, Remote-Aufgaben zu empfangen.

Die Callback-Oberfläche wird unter IRemoteTaskCallback.aid

Klasse Beschreibung
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Ein Callback, der aufgerufen wird, wenn eine Remoteaufgabe angefordert wird.

Weitere Informationen finden Sie in der Referenzimplementierung mit einer externen TCU. Die Implementierung nutzt einen langen Live-Lesestream, um Remote-Aufgaben empfangen und unterstützt den folgenden debug-Befehl:

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

Fahrzeug-HAL

Um die Funktion für den Remotezugriff zu unterstützen, muss VHAL die folgenden Eigenschaften unterstützen:

Klasse Beschreibung
SHUTDOWN_REQUEST Fordert das Herunterfahren des Infotainmentsystems an.
VEHICLE_IN_USE
  • Erkennt, ob das Fahrzeug in Gebrauch ist.
  • Nachdem der Nutzer das Fahrzeug entriegelt hat oder wenn sich der Nutzer nähert des Fahrzeugs. Richtig wäre true.
  • Eine bestimmte Dauer nach dem Abstellen des Fahrzeugs oder dem Zeitpunkt, das Fahrzeug verriegelt. Richtig wäre false.
  • Wenn true festgelegt ist, versucht AAOS nicht, den wenn die Remote-Aufgabe abgeschlossen ist.

Weitere Informationen finden Sie unter Unterstützte Systemeigenschaften.

Lautlos-Modus

Der Lautlos-Modus muss für die Funktion „Remotezugriff“ unterstützt werden, damit das Fahrzeug kann im Lautlos-Modus gestartet werden, um Remote-Aufgaben auszuführen, wenn kein Nutzer anwesend ist. Mit Lautlos-Modus startet das AAOS-Gerät mit ausgeschaltetem Display und Audio.

Der Lautlos-Modus wird über zwei Linux-Kernel-Dateien vom Typ sysfs gesteuert.

Klasse Beschreibung
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Stellt den aktuellen Lautlos-Modus dar.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Stellt das Hardware-Signal zum Festlegen eines neuen Lautlos-Modus dar.

Der Fahrzeugprozessor sendet ein Hardwaresignal an das Android-SoC, um den Lautlos-Modus zu aktivieren/deaktivieren . Das Signal (0 oder 1) wird /sys/kernel/silent_boot/pm_silentmode_hw_state Dann wird das AAOS-Framework aktualisiert, /sys/kernel/silent_boot/pm_silentmode_kernel_state entsprechend, steht für den aktuellen Lautlos-Modus. Prüfung der AAOS-Module /sys/kernel/silent_boot/pm_silentmode_kernel_state, um zu erfahren, ob das System ob der Lautlos-Modus aktiviert ist oder nicht.

Wenn eine Remoteaufgabe eingeht und AAOS gestartet wird, legt der Fahrzeugprozessor Lautlos-Modus und startet AAOS, sodass das System mit ausgeschaltetem Display und Audio gestartet wird.

Android-fremde Komponenten im Fahrzeug

Fahrzeugauftragsverarbeiter

Der Fahrzeugprozessor ist ein Prozessor im Fahrzeug, der die Leistung für den App-Prozessor mit Android. In der Beispielarchitektur Weckt den App-Prozessor durch Senden eines Signals an das Fahrzeug auf Prozessor.

Android-fremde Komponenten im Fahrzeug

Der TCU des Fahrzeugs kann immer Remote-Nachrichten empfangen.

Der Wakeup-Client wird auf der TCU ausgeführt, um eine langlebige Verbindung zum Remote-Wakeup-Server.

Auf dem ZP ausgeführtes AAOS kann mit dem Wakeup-Client, der auf diesem ausgeführt wird, kommunizieren. TCU über den Remotezugriff-HAL.

Bild

Abbildung 4: TCU (Wakeup-Client).

On-Cloud-Komponenten

Wakeup-Server

Der Wakeup-Server kommuniziert mit dem Wakeup-Client in der TCU, um:

  • Sie können eine langlebige Verbindung zur TCU des Fahrzeugs aufrechterhalten.
  • Bestimmte TCU anhand der Fahrzeug-ID finden.
  • Melden Sie den Status eines Fahrzeugs. Zum Beispiel online, offline oder zuletzt Online-Zeit auf dem Remote-Aufgabenserver.

In einer tatsächlichen Implementierung kann ein Wakeup-Server mit einem Remote-Server zusammengeführt werden. Taskserver.

Remote-Aufgabenserver

Der Remote-Aufgabenserver verwaltet diese Remoteaufgaben.

  • Der Nutzer interagiert mit dem Server, um neue Remote-Aufgaben zu starten und zu überwachen Remote-Aufgaben zu erledigen.

  • Verwendet den Remote-Wakeup-Server, um den App-Prozessor in zu aktivieren. die Fahrzeuge.

  • Interagiert mit dem Remote-Task-Client, der auf dem Fahrzeug ausgeführt wird.

  • Speichert Informationen zur Kundenregistrierung. Dadurch wird ein bestimmter Nutzer an einen bestimmten Remote-Task-Client in einem Fahrzeug senden.

In der Regel die Aufgabendaten, die über den Remote-Aufgabenserver an die Weckzeit gesendet werden mit der TCU des Fahrzeugs und schließlich dem Remote-Aufgabenclient eine Aufgaben-ID. Der Remote-Aufgabenclient verwendet die Aufgaben-ID, um die detaillierte Informationen vom Remote-Aufgabenserver.

Datenschutz- und Sicherheitsanforderungen

Aufgabe Bedingung Anforderungen
TCU (Wakeup-Client) MUSS
  • Authentifizieren Sie den Wakeup-Server.
  • Vertrauen Sie dem Code.
Wakeup-Server MUSS
  • Nur Remote-Taskserver dürfen eine Verbindung herstellen, die auf der Zulassungsliste stehen.
  • Authentifizieren Sie den Wakeup-Client.
  • Sende die Wecknachricht nur an das Zielfahrzeug.
Remote-Task-Client MUSS
  • Authentifizieren Sie den Nutzer während der Registrierung.
  • Authentifizieren Sie den Remote-Aufgabenserver.
  • Erfüllt alle Sicherheitsanforderungen für einen Android-Dienst. Beispiel: eingeschränkte Berechtigungen.
Remote-Aufgabenserver MUSS
  • Der Wakeup-Server muss authentifiziert werden.
  • Reichen Sie eine Fahrzeugbescheinigung ein. Sie müssen also authentifizieren, Die in der Anfrage angegebene ID stimmt mit der Fahrzeug-ID des Absenders überein. Bei Fahrzeug eine Bescheinigung nicht möglich ist, muss auf andere Weise überprüft werden, Der Nutzer ist derzeit Inhaber des Fahrzeugs.
  • Authentifizieren Sie die Identität des Nutzers.
  • Alle Sicherheitsanforderungen für einen Server erfüllen, der Informationen.

Auf Werkseinstellungen zurücksetzen und Übertragung der Inhaberschaft

Wenn ein Nutzer das Gerät auf die Werkseinstellungen zurücksetzt, wird die im CarService gespeicherte Client-ID gelöscht. Die Server (Remote-Task-Server und Remote-Wakeup-Server) sind jedoch nicht informiert sind. Die Server behalten eine Zuordnung von der nun abgelaufenen Client-ID zu des Fahrzeugs. Wenn der Nutzer dann eine neue Remote-Aufgabe für das Fahrzeug startet, wird die abgelaufene Client-ID verwendet. Das Fahrzeug ist geweckt, aber die Remote-Aufgabe kann nicht ausgeführt werden, da der Client für die Remote-Aufgabe eine andere Client-ID hat, die nicht übereinstimmen.

Im Folgenden wird eine mögliche Implementierung für das Zurücksetzen auf die Werkseinstellungen beschrieben.

Wenn ein Nutzer das Gerät auf die Werkseinstellungen zurücksetzt, wird er vom Anbieter aufgefordert, sich Remote-Taskserver und heben die Verknüpfung des Fahrzeugs mit seinem Konto auf, falls der Nutzer das Fahrzeug bereits verknüpft hat. Das Gerät hat nicht zwangsläufig eine Netzwerkverbindung während des Zurücksetzens auf die Werkseinstellungen nicht verfügbar sind. Daher wird die Anfrage zum Aufheben der Verknüpfung auf die Werkseinstellungen zurücksetzen.

Wenn das Eigentum an einem Fahrzeug übertragen wird, sollten einige Vorgänge damit der vorherige Eigentümer keine Remote-Aufgaben mehr an den Nutzer senden kann Fahrzeug. Der neue Inhaber kann beispielsweise dazu aufgefordert werden:

  • Setzen Sie das Gerät auf die Werkseinstellungen zurück. Dadurch wird sichergestellt, dass die Client-ID neu generiert wird. Nachher kann der Vorbesitzer das Fahrzeug zwar aktivieren, um Remote-Aufgaben auszuführen.

  • Öffnen Sie die Remote-Task-Client-App und folgen Sie der Registrierung eines Clients aufheben, um die Verknüpfung des Fahrzeugs aufzuheben aus dem Konto des vorherigen Inhabers. Der neue Inhaber kann der Kasse folgen, um das Fahrzeug mit seinem Konto zu verknüpfen und zuvor verknüpftes Konto.

  • Der neue Inhaber kann mit dem Prozess Client registrieren verknüpfen und das zuvor verknüpfte Konto ersetzen.

Remote-Task-Client testen

Wir stellen die Referenz-HAL für den Remotezugriff bereit. default für das Testen von Remote-Aufgabenclients. Sie können folgende debug verwenden: Befehl zum Einfügen einer vorgetäuschten Remote-Aufgabe in den HAL, die an Ihre Remote-Task-Client, wenn Sie die richtige Client-ID angeben. Sie können den Client ID, indem Sie die Registrierungsdaten in Ihrem Remote-Task-Client protokollieren Implementierung.

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