Konfigurowanie dostępu zdalnego

Android 14 wprowadza nową funkcję dostępu zdalnego. który umożliwia partnerom zdalne wybudzanie Androida w pojeździe w celu realizacji do konkretnych zadań. Aby wykonać na przykład polecenie Tryb garażowy w nocy – instalowanie oprogramowania aktualizacje. Kompleks wymaga wielu komponentów spoza Androida proces. Android nie definiuje ani nie zapewnia implementacji na urządzeniach z systemem innym niż Android (to Ty odpowiadasz za to?).

Więcej informacji znajdziesz w tych sekcjach:

Architektura

W poniższej treści przyjęto następującą przykładową architekturę, która jest hipotetyczna i może nie odzwierciedlać rzeczywistej architektury. OEM powinien dostosować się do tych zasad. faktyczne wdrożenie w architekturze pojazdu i serwera.

obraz

Rysunek 1. Przykładowa architektura.

Przykładowa architektura składa się z tych komponentów sprzętu:

Komponent sprzętowy Opis
Procesor aplikacji Procesor z Androidem. Android może działać w pamięci wirtualnej (nie na sprzęcie) tego procesora.
Procesor samochodowy Procesor odpowiedzialny za sterowanie zasilaniem aplikacji procesora.
Jednostka telematyczna (TCU) Procesor w pojeździe zawsze może odbierać wiadomości zdalne od do chmury. Przyjmuje się, że TCU jest zawsze włączony lub w trybie niskiego zużycia energii. Używaj wiadomości zdalnych, aby wybudzić TCU.
Serwer wybudzania Serwer zdalny, który działa w chmurze i odpowiada za komunikuje się z modułem TCU w pojeździe, aby wydawać polecenia wybudzania.
Zdalny serwer zadań Zdalny serwer zadań działa w chmurze i wchodzi w interakcje z ludźmi zarządza zdalnymi zadaniami.

Przykładowa architektura składa się z tych komponentów oprogramowania, a wszystkie które działają na Androidzie:

Komponent oprogramowania na Androida Opis
Usługa samochodowa Usługa platformy AAOS, która udostępnia interfejsy API dostępu zdalnego.
Klient zadań zdalny Napisany przez dostawcę Service , która wykonuje zadania zdalne. Jeden system Android może obsługiwać wiele zdalnych klientów zadań.
HAL dostępu zdalnego Wymagana na potrzeby dostępu zdalnego.
Warstwa abstrakcyjna służąca do komunikacji między AAOS a urządzeniami innymi niż Android takim jak TCU.

Komponenty oprogramowania inne niż Android są opisane poniżej:

Komponent oprogramowania innego niż Android Opis
Wybudzanie klienta Oprogramowanie działające na TCU, które utrzymuje długotrwałe połączenie z serwer wybudzania. Utrzymuje też połączenie z HAL dostępu zdalnego. realizując zadania zdalne w ramach Usługi samochodowej.
Implementacja wybudzania serwera Serwer komunikujący się z klientem wybudzania działającym w TCU. Puszka wysyłania żądań wybudzenia do klienta wybudzania.
Implementacja zdalnego serwera zadań Serwer zarządzający zadaniami zdalnymi. Użytkownicy korzystają z tego serwera w celu i monitorowania zadań zdalnych.

Workflow

W tej sekcji wymieniono kroki przykładowego przepływu pracy.

Przykładowy przepływ pracy

Szczegółowy przepływ pracy może wyglądać tak:

  1. Użytkownik parkuje pojazd w garażu.

  2. Partner chce zaktualizować pojazd w nocy, gdy interakcje z pojazdem są mało prawdopodobne.

  3. Serwer chmury partnera wysyła do pojazdu zdalne zadanie aktualizacji. Konkretnie chodzi o jednostkę sterowania telematycznego (TCU).

  4. TCU pojazdu wybudza elektroniczne jednostki sterujące Androida (ECU). usługa OEM aktywuje tryb garażowy.

  5. Android używa trybu Garaż, aby pobierać i instalować aktualizacje z Google Play.

  6. Po zastosowaniu aktualizacji Android oznaczy zadanie jako ukończone i albo zakończy połączenie lub upłynie określony czas.

Szczegółowy przepływ pracy

Aby uzyskać dostęp zdalny, musisz wykonać 2 ważne kroki. Po pierwsze, Rejestrowanie klienta, czyli połączenie określonego użytkownika z konkretnym pilotem klienta zadania uruchomionego w konkretnym pojeździe. Drugi polega na wykonaniu zadania, jest przekazanie zadania zdalnego konkretnemu użytkownikowi w ramach konkretnego pojazdu.

Rejestrowanie klienta

Aby używać funkcji dostępu zdalnego, użytkownik musi otworzyć klienta zdalnego zadań aplikację co najmniej raz i dokończyć proces rejestracji klienta (pogrubiony tekst) wskazuje zadania zaimplementowane przez AAOS):

  1. Po uruchomieniu usługa samochodowa pobiera informacje o pojeździe ze zdalnego dostępu HAL.

  2. Podczas uruchamiania usługa Car Service uruchamia wszystkie zdalne klienty zadań oparte na i filtr intencji.

  3. Po uruchomieniu zdalnego klienta zadania rejestruje się on samodzielnie Usługi samochodowej.

  4. Usługa samochodowa powiadamia klienta zadania zdalnego o rejestracji w tym identyfikator pojazdu i identyfikator klienta. Identyfikator klienta jest unikalny i przypisany temu klientowi przez Serwis samochodowy. Niepowtarzalność wśród wszystkich zdalnych klientów do wykonywania zadań w tym samym pojeździe.

  5. Użytkownik loguje się na zdalnym serwerze zadań za pomocą zdalnego klienta zadań oraz włącza funkcję dostępu zdalnego w tym pojeździe. Ten krok zazwyczaj wymaga uwierzytelnienia przez zdalny serwer zadań.

  6. Klient zadania zdalnego przesyła informacje o użytkowniku wraz z identyfikatorem pojazdu i identyfikatora klienta, ze zdalnym serwerem zadań oraz prosi o połączenie użytkownika w przypadku danego klienta i tego konkretnego pojazdu.

    Opcjonalnie ten krok może obejmować dodatkowe uwierzytelnianie dwuskładnikowe od użytkownika.

    Zdalny serwer zadań musi potwierdzić, że identyfikator pojazdu podany w żądanie jest zgodne z identyfikatorem pojazdu nadawcy. Można to zrobić za pomocą atestacji pojazdów.

O ile nie przywrócono ustawień fabrycznych, wymagany jest proces rejestracji klienta. raz na użytkownika na pojazd. Identyfikator klienta jest przechowywany lokalnie w usłudze Car Service i pozostaje bez zmian dla tego samego klienta.

obraz

Rysunek 2. Zarejestruj klienta.

Wyrejestrowywanie klienta

Użytkownik może odłączyć pojazd od swojego konta, zarówno z poziomu pojazdu, jak i z zdalny serwer zadań:

  • W pojeździe użytkownicy mogą otworzyć aplikację klienta zdalnego zadań i rozpocząć prośba o odłączenie tego pojazdu od wcześniej powiązanego użytkownika kont.

  • Na zdalnym serwerze zadań użytkownicy mogą logować się na swoje konto i odłączać wcześniej połączony pojazd z tego konta.

Jeśli użytkownik odłączy pojazd od swojego konta, zdalny serwer zadań musi usuń zapisane mapowanie danego użytkownika.

Przesyłanie zadań

W chmurze:

  1. Użytkownik używa zdalnego serwera zadań, aby wysłać zadanie zdalne do określonego pojazdu.

  2. Zdalny serwer zadań mapuje identyfikator użytkownika na identyfikator pojazdu i identyfikator klienta. it wysyła dane zadania, identyfikator pojazdu i klienta do serwera wybudzania.

  3. Serwer wybudzania znajduje konkretną jednostkę TCU dla identyfikatora pojazdu (przy założeniu, że Rejestracja w TCU została już ukończona) i wysyła dane zadania oraz identyfikator klienta do czyli TCU.

Na pojeździe (pogrubiony tekst wskazuje zadania wykonywane przez AAOS):

  1. TCU otrzymuje zadania zdalne od zdalnego serwera.

  2. Jeśli procesor aplikacji (AP) z systemem AAOS jest wyłączony, TCU używa parametru procesora pojazdu (VP), aby wybudzić punkt dostępu.

  3. Serwis samochodowy otrzymuje zadania od TCU.

  4. Serwis samochodowy przydziela zadania odpowiedniemu zdalnemu klientowi zadania.

  5. Klient zadań zdalnych otrzymuje i wykonuje zadanie.

    (Opcjonalnie) Aby uzyskać więcej szczegółów zadania, kontaktuje się z serwerem zadań zdalnego klienta zadań i wykona zadanie.

  6. (Opcjonalnie) Usługa klienta zadań zdalnych zgłasza wynik zadania na serwer zadań.

  7. Klient zadań zdalnych powiadamia usługę samochodu, gdy zadanie zostanie ukończone.

  8. W razie potrzeby usługa samochodowa przywraca stan zasilania pojazdu.

obraz

Rysunek 3. realizacji zadań.

Pisanie zdalnego klienta zadań

CarRemoteAccessManager udostępnia interfejs API na potrzeby funkcji dostępu zdalnego. Aby się uczyć więcej, patrz CarRemoteAccessManager. Klient zadań zdalny to usługa na Androida, która wykonuje zadania zdalne i wykorzystuje CarRemoteAccessManager Wymaga to PERMISSION_USE_REMOTE_ACCESS i PERMISSION_CONTROL_REMOTE_ACCESS i muszą zadeklarować filtr intencji dla RemoteTaskClientService na przykład:

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

Klient zadań zdalnych powinien zarejestrować się w usłudze samochodowej podczas tworzenia:

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

Musi zastąpić funkcję onBind, aby zwrócić wartość null.

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

Serwis samochodowy zarządza cyklem życia. Usługa samochodowy łączy się z tą usługą podczas po uruchomieniu i pojawieniu się zadania zdalnego. Usługa Car Service zostanie odłączone od tej usługi, gdy zadanie zostało wykonane. Więcej informacji: Zarządzanie cyklem życia usługi.

Zdalny klient zadań działa jako użytkownik systemowy, więc nie ma dostępu do żadnych danych użytkownika.

Poniższy przykład pokazuje, jak obsługiwać zarejestrowane wywołania zwrotne:

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

Implementacja przez dostawców

Funkcja dostępu zdalnego jest opcjonalna i domyślnie wyłączona. Aby włączyć funkcję , dodaj RRO w taki sposób:

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

Możesz też użyć tego polecenia adb w kompilacji userdebug/eng:

adb shell cmd car_service enable-feature car_remote_access_service

Wymagania dotyczące Androida

HAL dostępu zdalnego

Warstwa abstrakcji sprzętowej dostępu zdalnego (HAL) jest implementowana przez dostawcę. warstwa abstrakcji do komunikacji między AAOS a inną jednostką ECU (na przykład TCU). Jest to konieczne do obsługi funkcji dostępu zdalnego. Nie wymaga należy wdrożyć, jeśli funkcja dostępu zdalnego nie jest zaimplementowana.

Interfejs jest zdefiniowany na stronie IRemoteAccess.aidl i obejmuje te metody:

Kategoria Opis
String getVehicleId() Otrzymuje unikalny identyfikator pojazdu rozpoznawalny po wybudzeniu serwera.
String getWakeupServiceName() Pobiera nazwę zdalnego serwera wybudzania.
String getProcessorId() Pobiera unikalny identyfikator procesora, który można rozpoznać po aktywowaniu klienta.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Ustawia wywołanie zwrotne po zażądaniu zadania zdalnego.

void clearRemoteTaskCallback() Czyści ustawione wcześniej wywołanie zwrotne zadania.
void notifyApStateChange(in ApState state)

Określa, czy procesor aplikacji jest gotowy do odbierania zadań zdalnych.

Interfejs wywołania zwrotnego jest zdefiniowany pod adresem IRemoteTaskCallback.aid

Kategoria Opis
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Wywołanie zwrotne, które jest wywoływane, gdy wymagane jest zadanie zdalne.

Zobacz implementacja referencyjna z zewnętrznym TCU. Implementacja wykorzystuje długotrwały strumień odczytu do umożliwia odbieranie zadań zdalnych i obsługuje następujące polecenie debug:

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

HAL pojazdu

Aby można było obsługiwać funkcję dostępu zdalnego, VHAL musi obsługiwać te właściwości:

Kategoria Opis
SHUTDOWN_REQUEST Żąda wyłączenia jednostki głównej.
VEHICLE_IN_USE
  • Wykrywanie, czy pojazd jest używany.
  • Gdy użytkownik odblokuje pojazd lub zbliża się do niego, w pojeździe. Powinno być true.
  • Określony czas po wyłączeniu pojazdu przez użytkownika lub zamknął pojazd i zamknął pojazd. Powinno być false.
  • Gdy true, AAOS nie próbuje wyłączyć po zakończeniu zadania zdalnego.

Więcej informacji: Obsługiwane właściwości systemowe.

Tryb cichy

Aby pojazd mógł korzystać z funkcji dostępu zdalnego, musi być obsługiwany tryb cichy mogą uruchamiać się w trybie cichym i wykonywać zdalne zadania, gdy nie ma użytkownika. Na w trybie cichym, urządzenie AAOS uruchamia się z wyłączonym ekranem i dźwiękiem.

Tryb cichy jest sterowany za pomocą 2 plików sysfs jądra systemu Linux.

Kategoria Opis
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Reprezentuje bieżący tryb cichy.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Reprezentuje sygnał sprzętowy służący do ustawienia nowego trybu cichego.

Procesor pojazdu wysyła sygnał sprzętowy do układu SOC na Androidzie, aby włączyć lub wyłączyć tryb Cichy. i trybu uzyskiwania zgody. Sygnał (0 lub 1) jest zapisywany w /sys/kernel/silent_boot/pm_silentmode_hw_state Następnie aktualizacje platformy AAOS /sys/kernel/silent_boot/pm_silentmode_kernel_state odpowiednio, reprezentuje obecny tryb cichy. Testy modułów AAOS /sys/kernel/silent_boot/pm_silentmode_kernel_state, aby dowiedzieć się, czy system jest w trybie cichym.

Po otrzymaniu zadania zdalnego i uruchomieniu AAOS procesor pojazdu ustawia Tryb cichy i uruchamianie AAOS, aby system uruchamiał się z wyłączonym wyświetlaczem/dźwiękiem.

Komponenty w pojeździe bez Androida

Procesor samochodowy

Procesor w pojeździe to znajdujący się w pojeździe procesor, który może sterować mocą dla procesora aplikacji z Androidem. W przykładowej architekturze TCU Wybudza procesor aplikacji, wysyłając sygnał do pojazdu. procesora.

Komponenty w pojeździe bez Androida

Moduł TCU pojazdu może zawsze odbierać komunikaty zdalne.

Klient wybudzania działa na TCU, aby zapewnić długotrwałe połączenie z zdalnym serwerem wybudzania.

System AAOS uruchomiony w punkcie dostępu może komunikować się z klientem wybudzania działającym na TCU przez HAL zdalnego dostępu.

obraz

Rysunek 4. TCU (klient wybudzania).

Komponenty w chmurze

Serwer wybudzania

Serwer wybudzania komunikuje się z klientem wybudzania na TCU w celu:

  • utrzymywać długoterminowy związek z końcem TCU pojazdu.
  • Znajdź konkretny TCU na podstawie identyfikatora pojazdu.
  • Zgłaszać stan pojazdu. Na przykład online lub offline albo na końcu czas online na zdalny serwer zadań.

W rzeczywistości serwer wybudzania można połączyć z serwer zadań.

Zdalny serwer zadań

Tymi zdalnymi zadaniami zarządza zdalny serwer zadań.

  • Użytkownik wchodzi w interakcję z serwerem, aby rozpoczynać nowe zadania zdalne i monitorować zadań zdalnych.

  • Używa zdalnego serwera wybudzania do wybudzania procesora aplikacji pojazdów.

  • Wchodzi w interakcję z klientem zadań zdalnych działającym w pojeździe.

  • Przechowuje informacje rejestracyjne klienta. Wiąże się to z konkretnym użytkownikiem z konkretnym klientem do wykonywania zadań zdalnych w konkretnym pojeździe.

Zwykle dane zadania są wysyłane przez zdalny serwer zadań do urządzenia aktywującego przez serwer, do TCU pojazdu, a ostatecznie do zdalnego klienta zadań. identyfikator zadania. Zdalny klient zadań używa identyfikatora zadania, aby pobrać szczegółowe ze zdalnego serwera zadań.

Wymagania dotyczące prywatności i bezpieczeństwa

Zadanie Warunek Wymaganie
TCU (klient wybudzania) MUSI
  • Uwierzytelnij serwer wybudzania.
  • Ufaj kodowi.
Serwer wybudzania MUSI
  • Zezwól na nawiązywanie połączeń tylko z dostępem do zdalnych serwerów zadań, które znajdują się na liście dozwolonych.
  • Uwierzytelnij klienta wybudzania.
  • Wyślij wiadomość o budzeniu tylko do docelowego pojazdu.
Klient zadań zdalny MUSI
  • Uwierzytelnij użytkownika podczas rejestracji.
  • Uwierzytelnij zdalny serwer zadań.
  • Spełnij wszystkie wymagania dotyczące zabezpieczeń usługi na Androida. Przykład: ograniczone uprawnienia.
Zdalny serwer zadań MUSI
  • Musi uwierzytelniać serwer wybudzania.
  • Prześlij atest pojazdu. Musisz potwierdzić, że pojazd Identyfikator podany w prośbie jest zgodny z identyfikatorem pojazdu nadawcy. Jeśli pojazd zaświadczeń nie jest możliwe, należy użyć innych metod, aby zweryfikować, czy obecnie jest właścicielem pojazdu.
  • Uwierzytelnij tożsamość użytkownika.
  • Spełnij wszystkie wymagania dotyczące zabezpieczeń serwera, który obsługuje użytkowników i informacjami o nich.

Przywracanie do ustawień fabrycznych i przenoszenie własności

Jeśli użytkownik przywróci ustawienia fabryczne, identyfikator klienta zapisany w usłudze samochodowej to wyczyszczone dane. Jednak serwery (zdalny serwer zadań i zdalny serwer wybudzania) nie są nie poinformowano. Serwery zachowują mapowanie z wygasłego identyfikatora klienta na w pojeździe. Jeśli więc użytkownik rozpocznie nowe zadanie zdalne w pojeździe, używa nieważnego identyfikatora klienta. Pojazd został wybudzony, ale zadanie zdalne nie można wykonać, ponieważ klient zadań zdalnych ma inny identyfikator klienta, który nie pasuje.

Poniżej opisujemy jedną z możliwych implementacji przywracania do ustawień fabrycznych.

Gdy użytkownik przywróci ustawienia fabryczne, dostawca poprosi go o zalogowanie się zdalny serwer zadań i odłączać pojazd od konta, jeśli użytkownik: wcześniej połączony. Nie ma gwarancji, że urządzenie będzie mieć sieć dostępu podczas resetowania do ustawień fabrycznych. W związku z tym przesłanie prośby o odłączenie to może nie być możliwe.

Po przeniesieniu własności pojazdu niektóre operacje powinny być Dzięki temu poprzedni właściciel nie będzie mógł już przydzielać zadań zdalnym pojazdu. Nowy właściciel może na przykład:

  • Przywróć do ustawień fabrycznych. Dzięki temu identyfikator klienta zostanie wygenerowany ponownie. Po po wykonaniu tego kroku poprzedni właściciel nadal może wybudzić pojazd, ale nie i dalsze wykonywanie zadań zdalnych.

  • Otwórz aplikację kliencką zadania zdalnego i postępuj zgodnie z instrukcjami Wyrejestrowywanie klienta w celu odłączenia pojazdu z konta poprzedniego właściciela. Nowy właściciel może śledzić rejestr przez klienta w celu połączenia pojazdu z jego kontem i wymiany powiązane wcześniej konto.

  • Nowy właściciel może skorzystać z procesu rejestrowania klienta, aby połączyć pojazd ze swoim kontem i zastąpić konto połączone wcześniej.

Przetestuj zdalnego klienta zadań

Udostępniamy referencyjną listę HAL dostępu zdalnego default aby przetestować zdalne klienty zadań. Możesz użyć tych elementów (debug) w celu wstawienia do HAL fałszywego zadania zdalnego, które jest przekazywane do klienta zadań zdalnych, jeśli podasz prawidłowy identyfikator klienta. Możesz uzyskać Identyfikator przez zarejestrowanie informacji o rejestracji w zdalnym kliencie zadań implementacji.

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