Menyiapkan akses jarak jauh

Android 14 memperkenalkan fitur akses jarak jauh baru, yang memungkinkan partner mengaktifkan Android dari jarak jauh di dalam kendaraan untuk menjalankan tugas-tugas spesifik. Misalnya, untuk menjalankan Mode garasi semalam untuk menerapkan software pembaruan. Beberapa komponen non-Android diperlukan untuk end-to-end alur kerja. Android tidak menentukan atau menyediakan implementasi untuk aplikasi non-Android (tanggung jawab ini milik Anda).

Untuk mempelajari lebih lanjut, lihat bagian berikut:

Arsitektur

Konten berikut menganggap bahwa contoh arsitektur yang digunakan adalah sebagai berikut, yang bersifat hipotetis dan mungkin tidak mencerminkan arsitektur yang sebenarnya. OEM harus beradaptasi implementasi aktual untuk arsitektur kendaraan dan server mereka.

gambar

Gambar 1. Contoh arsitektur.

Contoh arsitektur terdiri dari komponen hardware berikut:

Komponen hardware Deskripsi
Pemroses aplikasi Prosesor yang menjalankan Android. Android mungkin berjalan di memori virtual (VM) (bukan pada perangkat keras yang sebenarnya) pada prosesor ini.
Prosesor kendaraan Prosesor bertanggung jawab untuk mengontrol daya aplikasi Prosesor Google Cloud.
Unit kontrol telematika (TCU) Prosesor di kendaraan yang selalu mampu menerima pesan jarak jauh dari {i>cloud<i}. TCU dianggap selalu aktif atau dalam mode daya rendah. Gunakan pesan jarak jauh untuk menyadarkan TCU.
Server membangunkan Server jarak jauh yang berjalan di {i>cloud<i} dan bertanggung jawab untuk berkomunikasi dengan TCU di dalam kendaraan untuk memberikan perintah {i>Wake-up<i}.
Server tugas jarak jauh Server tugas jarak jauh berjalan di {i>cloud<i} dan berinteraksi dengan orang-orang serta mengelola tugas jarak jauh.

Arsitektur contoh terdiri atas komponen software ini, yang semuanya yang berjalan di Android:

Komponen software di Android Deskripsi
Layanan Mobil Layanan framework AAOS yang menyediakan API akses jarak jauh.
Klien tugas jarak jauh Ditulis oleh vendor Service yang menjalankan tugas jarak jauh. Satu sistem Android dapat menjalankan beberapa klien tugas jarak jauh.
HAL akses jarak jauh Harus diterapkan untuk akses jarak jauh.
Lapisan abstraksi untuk komunikasi antara AAOS dan non-Android seperti TCU.

Komponen software non-Android dijelaskan di bawah ini:

Komponen software non-Android Deskripsi
Klien membangunkan Perangkat lunak yang berjalan di TCU yang mempertahankan koneksi jangka panjang dengan bangun. {i>Router<i} juga mempertahankan koneksi dengan {i>Remote Access HAL<i} untuk mengirimkan tugas jarak jauh ke Layanan Mobil.
Implementasi server bangun Server yang berkomunikasi dengan klien bangun yang berjalan di TCU. Kaleng mengirim permintaan bangun ke klien yang membangunkan.
Implementasi server tugas jarak jauh Server yang mengelola tugas jarak jauh. Pengguna berinteraksi dengan server ini untuk masalah dan memantau tugas jarak jauh.

Alur kerja

Bagian ini mencantumkan langkah-langkah dalam contoh alur kerja.

Contoh alur kerja

Alur kerja terperinci dapat terlihat seperti berikut:

  1. Pengguna memarkir kendaraan di garasi.

  2. Partner ingin mengupdate kendaraan dalam semalam saat interaksi kendaraan tidak mungkin.

  3. Server cloud partner mengirimkan tugas jarak jauh sistem update ke kendaraan. Khususnya, unit kontrol telematika (TCU).

  4. TCU kendaraan akan membangunkan unit kontrol elektronik (ECU) Android dan layanan OEM memicu mode Garage.

  5. Android menjalankan mode Garage untuk mendownload dan menginstal update melalui Google Play.

  6. Setelah menerapkan update, Android akan menandai tugas sebagai selesai dan mengakhiri koneksi atau mencapai waktu tunggu yang ditentukan.

Alur kerja mendetail

Ada dua langkah penting yang diperlukan untuk akses jarak jauh. Yang pertama adalah mendaftarkan klien, yaitu menautkan pengguna tertentu ke {i>remote<i} tertentu klien tugas yang berjalan di kendaraan tertentu. Yang lainnya adalah menyampaikan tugas, yang adalah mengirimkan tugas jarak jauh untuk pengguna tertentu ke tugas jarak jauh tertentu yang berjalan di kendaraan tertentu.

Mendaftarkan klien

Untuk menggunakan fitur akses jarak jauh, pengguna harus membuka klien tugas jarak jauh aplikasi minimal sekali dan menyelesaikan proses pendaftaran klien (teks tebal menunjukkan tugas yang diimplementasikan oleh AAOS):

  1. Saat booting, Car Service mendapatkan informasi kendaraan dari akses jarak jauh HAL.

  2. Saat booting, Car Service meluncurkan semua klien tugas jarak jauh berdasarkan filter intent dan izin.

  3. Setelah klien tugas jarak jauh dimulai, klien tugas jarak jauh mendaftarkan dirinya sendiri dengan Layanan Mobil.

  4. Layanan Mobil memberi tahu klien tugas jarak jauh tentang pendaftaran termasuk ID kendaraan dan client ID. Client-ID bersifat unik dan ditetapkan oleh Car Service ke klien ini. Data ini dijamin unik di antara semua klien tugas jarak jauh di kendaraan yang sama.

  5. Pengguna masuk ke server tugas jarak jauh melalui klien tugas jarak jauh dan akan mengaktifkan fitur akses jarak jauh untuk kendaraan ini. Langkah ini biasanya melibatkan otentikasi melalui server tugas jarak jauh.

  6. Klien tugas jarak jauh mengupload informasi pengguna bersama dengan ID kendaraan dan ID klien ke server tugas jarak jauh dan memintanya untuk menautkan pengguna dengan klien tertentu dan kendaraan ini.

    Secara opsional, langkah ini dapat melibatkan autentikasi 2 langkah tambahan dari pengguna.

    Server tugas jarak jauh harus mengotentikasi bahwa ID kendaraan yang disediakan di permintaan cocok dengan ID kendaraan pengirim, yang dapat dilakukan melalui pengesahan kendaraan.

Proses pendaftaran klien diperlukan kecuali jika pengaturan ulang pabrik dilakukan sekali per pengguna per kendaraan. Client ID disimpan secara lokal di Layanan Mobil dan tetap sama untuk klien yang sama.

gambar

Gambar 2. Daftarkan klien.

Membatalkan pendaftaran klien

Pengguna dapat membatalkan tautan kendaraan dari akunnya, baik dari kendaraan maupun dari server tugas jarak jauh:

  • Di kendaraan, pengguna dapat membuka aplikasi dan masalah klien tugas jarak jauh permintaan pembatalan tautan untuk membatalkan tautan kendaraan ini dari pengguna tertaut sebelumnya menggunakan akun layanan.

  • Di server tugas jarak jauh, pengguna dapat login ke akun mereka dan membatalkan tautan kendaraan yang ditautkan sebelumnya dari akun ini.

Jika pengguna membatalkan tautan kendaraan dari akunnya, server tugas jarak jauh harus menghapus pemetaan yang disimpan untuk pengguna tertentu.

Melaksanakan tugas

Di cloud:

  1. Seorang pengguna menggunakan server tugas jarak jauh untuk mengirim tugas jarak jauh ke server saat ini.

  2. Server tugas jarak jauh memetakan ID pengguna ke ID kendaraan dan client ID. Ini mengirimkan data tugas, ID kendaraan, dan ID klien ke server bangun.

  3. Server bangun menemukan TCU tertentu untuk ID kendaraan (dengan asumsi Pendaftaran TCU sudah selesai) dan mengirimkan data tugas dan ID klien ke di TCU.

Di kendaraan (teks tebal menunjukkan tugas yang dilakukan oleh AAOS):

  1. TCU menerima tugas jarak jauh dari server jarak jauh.

  2. Jika prosesor aplikasi (AP) yang menjalankan AAOS nonaktif, TCU akan menggunakan prosesor kendaraan (VP) untuk mengaktifkan AP.

  3. Layanan Mobil menerima tugas dari TCU.

  4. Car Service mendistribusikan tugas ke klien tugas jarak jauh yang sesuai.

  5. Klien tugas jarak jauh menerima dan menjalankan tugas.

    (Opsional) Server tugas kontak klien tugas jarak jauh untuk detail tugas selengkapnya dan menjalankan tugas.

  6. (Opsional) Layanan klien tugas jarak jauh melaporkan hasil tugas ke server tugas.

  7. Klien tugas jarak jauh memberi tahu Car Service saat tugas selesai.

  8. Jika diperlukan, Layanan Mobil akan memulihkan status daya kendaraan.

gambar

Gambar 3. Melaksanakan tugas.

Menulis klien tugas jarak jauh

CarRemoteAccessManager menyediakan API untuk fitur akses jarak jauh. Untuk mempelajari selengkapnya, lihat CarRemoteAccessManager. Klien tugas jarak jauh adalah layanan Android yang menjalankan tugas jarak jauh dan menggunakan CarRemoteAccessManager. Tindakan ini memerlukan PERMISSION_USE_REMOTE_ACCESS dan PERMISSION_CONTROL_REMOTE_ACCESS dan harus mendeklarasikan filter intent untuk RemoteTaskClientService seperti:

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

Klien tugas jarak jauh harus mendaftarkan dirinya sendiri ke Layanan Mobil selama pembuatan:

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

Fungsi ini harus menggantikan fungsi onBind untuk menampilkan null.

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

Car Service mengelola siklus prosesnya. Layanan Mobil terikat ke layanan ini selama sistem dimulai dan ketika tugas jarak jauh tiba. Layanan Mobil melepas ikatan ke layanan ini saat sampai tugas selesai. Untuk mempelajari lebih lanjut, lihat Mengelola siklus proses layanan.

Klien tugas jarak jauh berjalan sebagai pengguna sistem sehingga tidak memiliki akses ke setiap data spesifik pengguna.

Contoh berikut menunjukkan cara menangani callback yang terdaftar:

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

Implementasi vendor

Fitur akses jarak jauh bersifat opsional dan dinonaktifkan secara default. Untuk mengaktifkan tambahkan RRO seperti berikut:

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

Atau, gunakan perintah adb berikut pada build userdebug/eng:

adb shell cmd car_service enable-feature car_remote_access_service

Persyaratan di Android

HAL akses jarak jauh

Remote Access Hardware Abstraksi Layer (HAL) adalah solusi yang diterapkan oleh vendor lapisan abstraksi untuk komunikasi antara AAOS dan ECU lain (misalnya, TCU). Kebijakan ini bersifat wajib untuk mendukung fitur akses jarak jauh. Hal itu tidak memerlukan untuk diterapkan jika fitur akses jarak jauh tidak diterapkan.

Antarmuka didefinisikan di IRemoteAccess.aidl dan mencakup metode berikut:

Class Deskripsi
String getVehicleId() Mendapatkan ID kendaraan unik yang dapat dikenali oleh sistem bangun server tertentu.
String getWakeupServiceName() Mendapatkan nama untuk server bangun jarak jauh.
String getProcessorId() Mendapatkan ID pemroses unik yang dapat dikenali dengan mengaktifkan dengan klien besar.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Menetapkan callback untuk dipanggil saat tugas jarak jauh diminta.

void clearRemoteTaskCallback() Menghapus callback tugas jarak jauh yang telah ditetapkan sebelumnya.
void notifyApStateChange(in ApState state)

Mendeteksi apakah pemroses aplikasi siap untuk menerima tugas jarak jauh.

Antarmuka callback ditetapkan di IRemoteTaskCallback.aid.

Class Deskripsi
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Callback yang dipanggil saat tugas jarak jauh diminta.

Lihat penerapan referensi dengan TCU eksternal. Implementasi ini menggunakan stream baca berdurasi panjang untuk terima tugas jarak jauh dan mendukung perintah debug berikut:

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

HAL Kendaraan

Untuk mendukung fitur akses jarak jauh, VHAL harus mendukung properti berikut:

Class Deskripsi
SHUTDOWN_REQUEST Meminta head unit untuk dinonaktifkan.
VEHICLE_IN_USE
  • Mendeteksi apakah kendaraan sedang digunakan.
  • Setelah pengguna membuka kunci kendaraan atau saat pengguna mendekati yang digunakan untuk kendaraan. Harus true.
  • Durasi tertentu setelah pengguna mematikan kendaraan atau saat pengguna mengunci kendaraan. Harus false.
  • Saat true, AAOS tidak akan mencoba menonaktifkan kendaraan ketika tugas jarak jauh selesai.

Untuk mempelajari lebih lanjut, lihat Properti Sistem yang Didukung.

Mode senyap

Mode senyap harus didukung untuk fitur akses jarak jauh agar kendaraan dapat bisa {i>booting<i} dalam mode senyap untuk mengeksekusi tugas jarak jauh ketika tidak ada pengguna. Dengan mode senyap, perangkat AAOS melakukan booting dengan layar dan audio dinonaktifkan.

Mode senyap dikontrol melalui dua file sysfs kernel Linux.

Class Deskripsi
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Merepresentasikan mode senyap saat ini.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Menunjukkan sinyal hardware untuk menyetel mode senyap baru.

Prosesor kendaraan mengirimkan sinyal HW ke SoC Android untuk mengaktifkan/menonaktifkan Senyap mode. Sinyal (0 atau 1) ditulis ke /sys/kernel/silent_boot/pm_silentmode_hw_state. Kemudian, framework AAOS memperbarui /sys/kernel/silent_boot/pm_silentmode_kernel_state, yang mewakili mode Senyap saat ini. Pemeriksaan modul AAOS /sys/kernel/silent_boot/pm_silentmode_kernel_state untuk mengetahui apakah sistem dalam mode Senyap atau tidak.

Saat tugas jarak jauh diterima dan AAOS melakukan booting, prosesor kendaraan menyetel Mode senyap dan memulai AAOS sehingga sistem melakukan booting dengan layar/audio nonaktif.

Komponen non-Android di kendaraan

Prosesor kendaraan

Prosesor kendaraan adalah prosesor di kendaraan yang dapat mengontrol daya untuk prosesor aplikasi yang menjalankan Android. Dalam contoh arsitektur, TCU mengaktifkan pemroses aplikasi melalui mengirimkan sinyal ke kendaraan Prosesor Google Cloud.

Komponen non-Android di kendaraan

TCU kendaraan selalu dapat menerima pesan jarak jauh.

Klien bangun berjalan di TCU untuk memastikan koneksi jangka panjang dengan bangun jarak jauh.

AAOS yang berjalan di AP dapat berkomunikasi dengan klien bangun yang berjalan pada melalui HAL akses jarak jauh.

gambar

Gambar 4. TCU (klien bangun).

Komponen di cloud

Server membangunkan

Server bangun berkomunikasi dengan klien bangun di TCU untuk:

  • Pertahankan hubungan jangka panjang dengan TCU kendaraan.
  • Temukan TCU tertentu berdasarkan ID kendaraan.
  • Melaporkan status kendaraan. Misalnya, online atau offline, atau terakhir waktu {i>online<i} ke server tugas jarak jauh.

Dalam implementasi yang sebenarnya, server bangun bisa digabungkan dengan remote server tugas.

Server tugas jarak jauh

Server tugas jarak jauh mengelola tugas jarak jauh ini.

  • Pengguna berinteraksi dengan server untuk memulai tugas jarak jauh baru dan untuk memantau untuk tugas jarak jauh.

  • Menggunakan server bangun jarak jauh untuk mengaktifkan prosesor aplikasi di kendaraan-kendaraan tersebut.

  • Berinteraksi dengan klien tugas jarak jauh yang berjalan di kendaraan.

  • Menyimpan informasi pendaftaran klien. Hal ini mengaitkan pengguna tertentu ke klien tugas jarak jauh tertentu di kendaraan tertentu.

Biasanya data tugas yang dikirim melalui server tugas jarak jauh untuk layanan bangun server, ke TCU kendaraan, dan akhirnya ke klien tugas jarak jauh hanya sebuah ID tugas. Klien tugas jarak jauh menggunakan ID tugas untuk mengambil informasi dari server tugas jarak jauh.

Persyaratan privasi dan keamanan

Tugas Ketentuan Persyaratan
TCU (klien bangun) HARUS
  • Mengautentikasi server bangun.
  • Percayai kodenya.
Server membangunkan HARUS
  • Hanya izinkan server tugas jarak jauh yang tercantum dalam daftar yang diizinkan untuk terhubung.
  • Autentikasi klien bangun.
  • Kirim pesan bangun ke kendaraan target saja.
Klien tugas jarak jauh HARUS
  • Mengautentikasi pengguna saat pendaftaran.
  • Mengautentikasi server tugas jarak jauh.
  • Memenuhi semua persyaratan keamanan untuk layanan Android. Misalnya, izin terbatas.
Server tugas jarak jauh HARUS
  • Harus mengautentikasi server bangun.
  • Memberikan pengesahan kendaraan. Yaitu, mengautentikasi bahwa kendaraan ID yang diberikan dalam permintaan cocok dengan ID kendaraan pengirim. Jika kendaraan tidak dimungkinkan, harus menggunakan cara lain untuk memverifikasi bahwa pengguna saat ini memiliki kendaraan tersebut.
  • Mengautentikasi identitas pengguna.
  • Memenuhi semua persyaratan keamanan untuk server yang menangani masalah pengguna tidak akurat atau tidak sesuai.

Reset ke setelan pabrik dan transfer kepemilikan

Jika pengguna melakukan {i>factory reset<i}, {i>client ID<i} yang disimpan di Layanan Mobil dihapus total. Namun, server (server tugas jarak jauh dan server bangun jarak jauh) tidak menerima informasi. Server menyimpan pemetaan dari client ID yang sudah tidak berlaku untuk yang digunakan untuk kendaraan. Akibatnya, jika pengguna memulai tugas jarak jauh baru untuk kendaraan, menggunakan {i>client ID<i} yang sudah tidak berlaku. Kendaraan diaktifkan, tetapi tugas jarak jauh tidak dapat dieksekusi karena klien tugas jarak jauh memiliki ID klien berbeda yang tidak sesuai.

Berikut ini menjelaskan satu kemungkinan penerapan untuk reset ke setelan pabrik.

Saat pengguna melakukan {i>factory reset<i}, vendor meminta pengguna untuk {i>login<i} server tugas jarak jauh dan membatalkan tautan kendaraan dari akun mereka jika pengguna yang sebelumnya telah menghubungkan kendaraan. Perangkat tidak dijamin memiliki jaringan akses selama proses {i>factory reset<i}. Oleh karena itu, mengeluarkan permintaan pembatalan tautan pada waktu {i>factory reset<i} dari perangkat mungkin tidak memungkinkan.

Setiap kali kepemilikan kendaraan dialihkan, beberapa operasi harus dilakukan untuk memastikan pemilik sebelumnya tidak lagi dapat memberikan tugas jarak jauh saat ini. Misalnya, pemilik baru mungkin diminta untuk:

  • Lakukan reset ke setelan pabrik. Tindakan ini memastikan client ID dibuat ulang. Sesudah langkah ini, pemilik sebelumnya masih bisa membangunkan kendaraan, tetapi tidak bisa lebih lama mengeksekusi tugas jarak jauh.

  • Buka aplikasi klien tugas jarak jauh dan ikuti Membatalkan pendaftaran proses klien untuk membatalkan tautan kendaraan dari akun pemilik sebelumnya. Pemilik baru dapat mengikuti daftar untuk menautkan kendaraan ke akun mereka dan mengganti yang sebelumnya tertaut.

  • Pemilik baru dapat menggunakan proses Mendaftarkan klien untuk menautkan kendaraan ke akun mereka dan mengganti akun yang sebelumnya ditautkan.

Menguji klien tugas jarak jauh

Kami menyediakan HAL akses jarak jauh referensi default untuk menguji klien tugas jarak jauh. Anda dapat menggunakan debug berikut untuk menginjeksikan tugas jarak jauh palsu ke HAL, yang diteruskan ke klien tugas jarak jauh jika Anda memberikan ID klien yang benar. Anda bisa mendapatkan klien ID dengan mencatat informasi pendaftaran ke dalam log di klien tugas jarak jauh terlepas dari implementasi layanan.

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