Menyiapkan akses jarak jauh

Android 14 memperkenalkan fitur akses jarak jauh baru, yang memungkinkan partner mengaktifkan Android dari jarak jauh di kendaraan untuk menjalankan tugas tertentu. Misalnya, untuk menjalankan Mode garasi semalaman untuk menerapkan update software. Beberapa komponen non-Android diperlukan untuk alur kerja end-to-end. Android tidak menentukan atau menyediakan implementasi untuk komponen non-Android (tanggung jawab ini ada pada 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 sebenarnya. OEM harus menyesuaikan penerapan 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.
Prosesor kendaraan Prosesor yang bertanggung jawab untuk mengontrol daya bagi prosesor aplikasi.
Unit kontrol telematika (TCU) Prosesor di kendaraan selalu dapat menerima pesan jarak jauh dari cloud. TCU diasumsikan selalu aktif atau dalam mode daya rendah. Gunakan pesan jarak jauh untuk mengaktifkan TCU.
Server aktif Server jarak jauh yang berjalan di cloud dan bertanggung jawab untuk berkomunikasi dengan TCU di kendaraan untuk mengeluarkan perintah aktif.
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 On-Android Deskripsi
Layanan Mobil Layanan framework AAOS yang menyediakan API akses jarak jauh.
Klien tugas jarak jauh Class Service yang ditulis vendor 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 komponen non-Android seperti TCU.

Komponen software non-Android dijelaskan di bawah:

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

Alur kerja

Bagian ini mencantumkan langkah-langkah dalam contoh alur kerja.

Contoh alur kerja

Alur kerja mendetail dapat menyerupai berikut:

  1. Pengguna memarkir kendaraan di garasi.

  2. Partner berupaya memperbarui kendaraan dalam semalam saat interaksi kendaraan tidak mungkin terjadi.

  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 Garasi 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, Car Service meluncurkan semua klien tugas jarak jauh berdasarkan intent-filter dan izin.

  3. Saat klien tugas jarak jauh dimulai, klien tugas jarak jauh akan mendaftarkan dirinya ke Layanan Mobil.

  4. Car Service memberi tahu klien tugas jarak jauh tentang informasi pendaftaran, termasuk ID kendaraan dan ID klien. ID klien bersifat unik dan ditetapkan oleh Layanan Mobil untuk klien ini. ID ini dijamin unik di antara semua klien tugas jarak jauh pada 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 ID klien ke server tugas jarak jauh dan memintanya untuk menautkan pengguna dengan klien 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 ponsel dikembalikan ke setelan pabrik, proses pendaftaran klien diperlukan sekali per pengguna per kendaraan. ID klien disimpan secara lokal di Car Service 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 mengirimkan permintaan pembatalan tautan untuk membatalkan tautan kendaraan ini dari akun pengguna yang sebelumnya ditautkan.

  • 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 tersimpan 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 ID pengguna ke ID kendaraan dan ID klien. Sistem ini mengirimkan data tugas, ID kendaraan, dan ID klien ke server aktif.

  3. Server aktif menemukan TCU tertentu untuk ID kendaraan (dengan asumsi pendaftaran TCU sudah selesai) dan mengirim data tugas dan ID klien 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. Car Service 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 lainnya dan menjalankan tugas.

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

  7. Klien tugas jarak jauh 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 Car Service 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);
    }
}

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 melepaskan ikatannya 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 spesifik per 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 fitur, 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

Lapisan abstraksi hardware (HAL) akses jarak jauh adalah lapisan abstraksi yang diimplementasikan vendor untuk komunikasi antara AAOS dan ECU lain (misalnya, TCU). Aplikasi ini wajib ada untuk mendukung fitur akses jarak jauh. Tidak perlu diterapkan jika fitur akses jarak jauh tidak diterapkan.

Antarmuka ditentukan di IRemoteAccess.aidl dan mencakup metode berikut:

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

Menetapkan callback yang akan 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 implementasi referensi dengan TCU eksternal. Implementasi ini menggunakan aliran baca yang berjalan lama 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 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 berupa false.
  • Jika 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 sehingga kendaraan dapat melakukan booting dalam mode senyap untuk menjalankan tugas jarak jauh saat tidak ada pengguna. Dengan mode senyap, perangkat AAOS di-boot 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

Mewakili sinyal hardware untuk menyetel mode senyap baru.

Prosesor kendaraan mengirim 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 di-boot, prosesor kendaraan akan menyetel Mode senyap dan memulai AAOS sehingga sistem di-boot 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 arsitektur contoh, TCU mengaktifkan prosesor aplikasi dengan mengirim sinyal ke prosesor kendaraan.

Komponen non-Android di kendaraan

TCU kendaraan selalu dapat menerima pesan jarak jauh.

Klien aktif berjalan di TCU untuk memastikan koneksi yang berjalan lama dengan server aktif jarak jauh.

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

gambar

Gambar 4. TCU (membangunkan klien).

Komponen di cloud

Server aktif

Server aktif berkomunikasi dengan klien aktif 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 terakhir online ke server tugas jarak jauh.

Dalam penerapan sebenarnya, server aktif 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 aktifkan dari jarak jauh untuk mengaktifkan prosesor aplikasi di kendaraan.

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

  • Menyimpan informasi pendaftaran klien. Hal ini mengaitkan pengguna tertentu dengan 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 (membangunkan klien) HARUS
  • Lakukan autentikasi server aktifkan.
  • Percayai kode tersebut.
Server aktif HARUS
  • Hanya izinkan server tugas jarak jauh yang ada dalam daftar yang diizinkan untuk terhubung.
  • Lakukan autentikasi klien aktifkan.
  • Kirim pesan aktifkan ke kendaraan target saja.
Klien tugas jarak jauh HARUS
  • Mengautentikasi 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 melakukan autentikasi server aktifkan.
  • Memberikan pengesahan kendaraan. Artinya, mengautentikasi 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 tersebut.
  • Mengautentikasi 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, ID klien yang disimpan di Layanan Mobil akan dihapus. Namun, server (server tugas jarak jauh dan server aktifkan dari jarak jauh) tidak diberi tahu. Server mempertahankan pemetaan dari ID klien yang kini sudah tidak berlaku ke kendaraan. Akibatnya, jika pengguna memulai tugas jarak jauh baru untuk kendaraan, ID klien yang sudah tidak berlaku akan digunakan. Kendaraan diaktifkan, tetapi tugas jarak jauh tidak dapat dijalankan karena klien tugas jarak jauh memiliki ID klien yang berbeda dan tidak cocok.

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

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

Setiap kali kepemilikan kendaraan dialihkan, 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 ID klien 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 mendaftarkan klien untuk menautkan kendaraan ke akunnya dan mengganti akun yang ditautkan sebelumnya.

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

Menguji klien tugas jarak jauh

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

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