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 tertentu. Misalnya, untuk menjalankan Mode garasi semalaman guna menerapkan update software. Beberapa komponen non-Android diperlukan untuk alur kerja menyeluruh. Android tidak menentukan atau menyediakan implementasi untuk komponen non-Android (tanggung jawab ini milik Anda).

Untuk mempelajari lebih lanjut, lihat bagian berikut:

Arsitektur

Konten berikut mengasumsikan bahwa arsitektur contoh berikut digunakan, yang bersifat hipotetis dan mungkin tidak mencerminkan arsitektur yang sebenarnya. OEM harus menyesuaikan penerapan yang sebenarnya dengan arsitektur kendaraan dan server mereka.

gambar

Gambar 1. Contoh arsitektur.

Arsitektur contoh terdiri dari komponen hardware berikut:

Komponen hardware Deskripsi
Prosesor aplikasi Prosesor yang menjalankan Android. Android mungkin berjalan di memori virtual (VM) (bukan di hardware sebenarnya) pada prosesor ini.
Pemroses kendaraan Prosesor yang bertanggung jawab untuk mengontrol daya bagi pemroses aplikasi.
Unit kontrol telematika (TCU) Prosesor di kendaraan selalu mampu menerima pesan jarak jauh dari cloud. TCU dianggap selalu aktif atau dalam mode daya rendah. Gunakan pesan jarak jauh untuk mengaktifkan TCU.
Server bangun Server jarak jauh yang berjalan di cloud dan bertanggung jawab untuk berkomunikasi dengan TCU di kendaraan untuk mengeluarkan perintah pengaktifan.
Server tugas jarak jauh Server tugas jarak jauh berjalan di cloud dan berinteraksi dengan orang-orang serta mengelola tugas jarak jauh.

Arsitektur contoh terdiri dari komponen software berikut, yang semuanya berjalan di Android:

Komponen software di Android Deskripsi
Layanan Mobil Layanan framework AAOS yang menyediakan API akses jarak jauh.
Klien tugas jarak jauh Class Service yang ditulis oleh vendor dan 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 komponen non-Android seperti TCU.

Komponen software non-Android dijelaskan di bawah ini:

Komponen software non-Android Deskripsi
Klien membangunkan Software yang berjalan di TCU yang mempertahankan koneksi yang lama aktif dengan server wake-up. Layanan ini juga mempertahankan koneksi dengan HAL Akses Jarak Jauh untuk mengirimkan tugas jarak jauh ke Layanan Mobil.
Implementasi server bangun Server yang berkomunikasi dengan klien wake-up yang berjalan di TCU. Dapat mengirim permintaan bangun ke klien bangun.
Implementasi server tugas jarak jauh Server yang mengelola tugas jarak jauh. Pengguna berinteraksi dengan server ini untuk mengeluarkan dan memantau tugas jarak jauh.

Alur kerja

Bagian ini mencantumkan langkah-langkah dalam contoh alur kerja.

Contoh alur kerja

Alur kerja mendetail dapat menyerupai hal berikut:

  1. Pengguna memarkir kendaraan di garasi.

  2. Partner ingin mengupdate kendaraan semalaman jika interaksi dengan kendaraan tidak mungkin dilakukan.

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

  4. TCU kendaraan mengaktifkan unit kontrol elektronik (ECU) Android dan layanan OEM memicu mode Garasi.

  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 klien tugas jarak jauh tertentu yang berjalan di kendaraan tertentu. Yang lainnya adalah mengirimkan tugas, yaitu mengirimkan tugas jarak jauh untuk pengguna tertentu ke klien tugas jarak jauh tertentu yang berjalan di kendaraan tertentu.

Mendaftarkan klien

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

  1. Saat booting, Layanan Mobil mendapatkan informasi kendaraan dari HAL akses jarak jauh.

  2. Saat booting, Layanan Mobil meluncurkan semua klien tugas jarak jauh berdasarkan intent-filter dan izin.

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

  4. Layanan Mobil memberi tahu klien tugas jarak jauh tentang informasi pendaftaran, termasuk ID kendaraan dan client ID. Client ID bersifat unik dan ditetapkan oleh Layanan Mobil untuk klien ini. ID ini dijamin unik di antara semua klien tugas jarak jauh di kendaraan yang sama.

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

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

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

    Server tugas jarak jauh harus mengautentikasi bahwa ID kendaraan yang diberikan dalam permintaan cocok dengan ID kendaraan pengirim, yang dapat dilakukan melalui pengesahan kendaraan.

Kecuali jika reset pabrik dilakukan, proses pendaftaran klien diperlukan sekali per pengguna per kendaraan. Client ID disimpan secara lokal di Layanan Mobil dan tetap sama untuk klien yang sama.

gambar

Gambar 2. Mendaftarkan 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 klien tugas jarak jauh dan mengeluarkan permintaan pembatalan tautan untuk membatalkan tautan kendaraan ini dari akun pengguna yang ditautkan sebelumnya.

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

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

Menyelesaikan tugas

Di cloud:

  1. Pengguna menggunakan server tugas jarak jauh untuk mengirim tugas jarak jauh ke kendaraan tertentu.

  2. Server tugas jarak jauh memetakan User-ID ke ID kendaraan dan Client-ID. Aplikasi ini mengirim data tugas, ID kendaraan, dan client ID ke server wake-up.

  3. Server bangun menemukan TCU tertentu untuk ID kendaraan (dengan asumsi bahwa pendaftaranTCU sudah selesai) dan mengirimkan data tugas dan client ID ke 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 menggunakan prosesor kendaraan (VP) untuk mengaktifkan AP.

  3. Layanan Mobil menerima tugas dari TCU.

  4. Layanan Mobil mendistribusikan tugas ke klien tugas jarak jauh yang sesuai.

  5. Klien tugas jarak jauh menerima dan menjalankan tugas.

    (Opsional) Klien tugas jarak jauh menghubungi server tugas untuk mengetahui detail tugas lebih lanjut dan menjalankan tugas.

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

  7. Klien tugas jarak jauh akan memberi tahu Layanan Mobil saat tugas selesai.

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

gambar

Gambar 3. Menyelesaikan tugas.

Menulis klien tugas jarak jauh

CarRemoteAccessManager menyediakan API untuk fitur akses jarak jauh. Untuk mempelajari lebih lanjut, lihat CarRemoteAccessManager. Klien tugas jarak jauh adalah layanan Android yang menjalankan tugas jarak jauh dan menggunakan CarRemoteAccessManager. Hal ini memerlukan PERMISSION_USE_REMOTE_ACCESS dan PERMISSION_CONTROL_REMOTE_ACCESS serta 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 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 mengganti 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 startup dan saat tugas jarak jauh tiba. Layanan Mobil akan berhenti terikat ke layanan ini saat tugas selesai. Untuk mempelajari lebih lanjut, lihat Mengelola siklus proses layanan.

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

Contoh berikut menunjukkan cara menangani callback 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 fitur ini, 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 abstraction layer (HAL) adalah lapisan abstraksi yang diterapkan vendor untuk komunikasi antara AAOS dan ECU lain (misalnya, TCU). Wajib untuk mendukung fitur akses jarak jauh. Hal ini tidak perlu diimplementasikan jika fitur akses jarak jauh tidak diterapkan.

Antarmukanya ditentukan di IRemoteAccess.aidl dan menyertakan metode berikut:

Class Deskripsi
String getVehicleId() Mendapatkan ID kendaraan unik yang dapat dikenali oleh server wake-up.
String getWakeupServiceName() Mendapatkan nama untuk server bangun jarak jauh.
String getProcessorId() Mendapatkan ID prosesor unik yang dapat dikenali dengan mengaktifkan klien.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Menetapkan callback untuk dipanggil saat tugas jarak jauh diminta.

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

Mendeteksi apakah pemroses aplikasi siap menerima tugas jarak jauh.

Antarmuka callback ditentukan 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 tersebut menggunakan stream baca berdurasi panjang untuk menerima 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 dimatikan.
VEHICLE_IN_USE
  • Mendeteksi apakah kendaraan sedang digunakan.
  • Setelah pengguna membuka kunci kendaraan atau saat pengguna mendekati kendaraan. Harus berupa true.
  • Durasi tertentu setelah pengguna mematikan kendaraan atau saat pengguna mengunci kendaraan. Harus false.
  • Saat true, AAOS tidak akan mencoba mematikan kendaraan saat 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 melakukan booting dalam mode senyap untuk menjalankan tugas jarak jauh saat tidak ada pengguna. Dengan mode senyap, perangkat AAOS akan 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

Mewakili mode senyap saat ini.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Merepresentasikan sinyal hardware untuk menyetel mode senyap baru.

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

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

Komponen non-Android di kendaraan

Pemroses 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 prosesor kendaraan.

Komponen non-Android di kendaraan

TCU kendaraan selalu dapat menerima pesan jarak jauh.

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

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

gambar

Gambar 4. TCU (klien bangun).

Komponen di cloud

Server bangun

Server wake-up berkomunikasi dengan klien wake-up di TCU untuk:

  • Mempertahankan koneksi yang tahan lama dengan TCU kendaraan.
  • Menemukan TCU tertentu berdasarkan ID kendaraan.
  • Melaporkan status kendaraan. Misalnya, online atau offline, atau waktu online terakhir ke server tugas jarak jauh.

Dalam implementasi sebenarnya, server wake-up dapat digabungkan dengan server tugas jarak jauh.

Server tugas jarak jauh

Server tugas jarak jauh mengelola tugas jarak jauh ini.

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

  • Menggunakan server wake-up jarak jauh untuk mengaktifkan prosesor aplikasi di kendaraan.

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

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

Biasanya, data tugas yang dikirim melalui server tugas jarak jauh ke server aktif, ke TCU kendaraan, dan akhirnya ke klien tugas jarak jauh hanyalah ID tugas. Klien tugas jarak jauh menggunakan ID tugas untuk mengambil informasi mendetail dari server tugas jarak jauh.

Persyaratan privasi dan keamanan

Tugas Ketentuan Persyaratan
TCU (klien bangun) HARUS
  • Mengautentikasi server bangun.
  • Percayai kode tersebut.
Server membangunkan HARUS
  • Hanya izinkan server tugas jarak jauh yang diizinkan untuk terhubung.
  • Lakukan autentikasi klien wake-up.
  • Kirim pesan aktivasi ke kendaraan target saja.
Klien tugas jarak jauh HARUS
  • Lakukan autentikasi pengguna selama pendaftaran.
  • Lakukan autentikasi server tugas jarak jauh.
  • Memenuhi semua persyaratan keamanan untuk layanan Android. Misalnya, izin terbatas.
Server tugas jarak jauh HARUS
  • Harus mengautentikasi server wake-up.
  • Berikan pengesahan kendaraan. Artinya, autentikasi bahwa ID kendaraan yang diberikan dalam permintaan cocok dengan ID kendaraan pengirim. Jika pengesahan kendaraan tidak memungkinkan, harus menggunakan cara lain untuk memverifikasi bahwa pengguna saat ini memiliki kendaraan.
  • Autentikasi identitas pengguna.
  • Memenuhi semua persyaratan keamanan untuk server yang menangani informasi pengguna.

Reset ke setelan pabrik dan transfer kepemilikan

Jika pengguna melakukan reset ke setelan pabrik, client ID yang disimpan di Layanan Mobil akan dihapus. Namun, server (server tugas jarak jauh dan server bangun jarak jauh) tidak diberi tahu. Server menyimpan pemetaan dari client ID yang sudah tidak berlaku lagi ke kendaraan. Akibatnya, jika pengguna memulai tugas jarak jauh baru untuk kendaraan, tugas tersebut akan menggunakan client ID yang sudah tidak berlaku. Kendaraan diaktifkan, tetapi tugas jarak jauh tidak dapat dieksekusi karena klien tugas jarak jauh memiliki client ID yang berbeda yang tidak cocok.

Berikut ini penjelasan tentang salah satu kemungkinan implementasi untuk reset pabrik.

Saat pengguna melakukan reset pabrik, vendor akan meminta pengguna untuk login ke server tugas jarak jauh dan membatalkan tautan kendaraan dari akunnya jika pengguna sebelumnya telah menautkan kendaraan. Perangkat tidak dijamin memiliki akses jaringan selama reset ke setelan pabrik. Oleh karena itu, permintaan pembatalan tautan pada waktu reset pabrik dari perangkat mungkin tidak dapat dilakukan.

Setiap kali kepemilikan kendaraan ditransfer, beberapa operasi harus dilakukan untuk memastikan pemilik sebelumnya tidak dapat lagi mengeluarkan tugas jarak jauh ke kendaraan. Misalnya, pemilik baru mungkin diminta untuk:

  • Lakukan reset ke setelan pabrik. Tindakan ini memastikan client ID dibuat ulang. Setelah langkah ini, pemilik sebelumnya masih dapat mengaktifkan kendaraan, tetapi tidak dapat lagi menjalankan tugas jarak jauh.

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

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

Menguji klien tugas jarak jauh

Kami menyediakan direktori HAL akses jarak jauh default referensi untuk menguji klien tugas jarak jauh. Anda dapat menggunakan perintah debug berikut untuk memasukkan tugas jarak jauh palsu ke HAL, yang akan diteruskan ke klien tugas jarak jauh jika Anda memberikan client ID yang benar. Anda bisa mendapatkan client ID dengan mencatat informasi pendaftaran dalam implementasi klien tugas jarak jauh.

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