Siapkan akses jarak jauh

Android 14 memperkenalkan fitur akses jarak jauh baru, yang memungkinkan mitra membangunkan Android dari jarak jauh di dalam kendaraan untuk menjalankan tugas tertentu. Misalnya, menjalankan mode Garasi semalaman untuk menerapkan pembaruan perangkat lunak. Beberapa komponen non-Android diperlukan untuk alur kerja end-to-end. Android tidak mendefinisikan atau menyediakan implementasi untuk komponen non-Android (tanggung jawab ini ada di tangan Anda).

Untuk mempelajari lebih lanjut, lihat bagian berikut:

Arsitektur

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

image

Gambar 1. Contoh arsitektur.

Arsitektur sampel terdiri dari komponen perangkat keras berikut:

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

Contoh arsitektur terdiri dari komponen perangkat lunak berikut, yang semuanya berjalan di Android:

Komponen perangkat lunak di Android Keterangan
Layanan Mobil Layanan kerangka kerja AAOS yang menyediakan API akses jarak jauh.
Klien tugas jarak jauh Kelas Service yang ditulis vendor yang menjalankan tugas jarak jauh. Satu sistem Android dapat menjalankan beberapa klien tugas jarak jauh.
Akses jarak jauh HAL Harus diterapkan untuk akses jarak jauh.
Lapisan abstraksi untuk komunikasi antara AAOS dan komponen non-Android seperti TCU.

Komponen perangkat lunak non-Android dijelaskan di bawah ini:

Komponen perangkat lunak non-Android Keterangan
Klien bangun Perangkat lunak yang berjalan di TCU yang memelihara koneksi jangka panjang dengan server bangun. Itu juga memelihara koneksi dengan HAL Akses Jarak Jauh untuk mengirimkan tugas jarak jauh ke Layanan Mobil.
Implementasi server bangun Server yang berkomunikasi dengan klien bangun 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 terperinci dapat menyerupai berikut ini:

  1. Pengguna memarkir kendaraan di garasi.

  2. Mitra berupaya memperbarui kendaraan dalam semalam ketika interaksi kendaraan tidak mungkin terjadi.

  3. Server cloud mitra mengirimkan tugas jarak jauh sistem pembaruan ke kendaraan. Khususnya unit kendali telematika (TCU).

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

  5. Android menjalankan mode Garasi untuk mengunduh dan menginstal pembaruan melalui Google Play.

  6. Setelah menerapkan pembaruan, Android menandai tugas sebagai selesai dan mengakhiri koneksi atau mencapai batas waktu yang ditentukan.

Alur kerja terperinci

Ada dua langkah penting yang diperlukan untuk akses jarak jauh. Yang pertama adalah mendaftarkan klien, yaitu menghubungkan pengguna tertentu ke klien tugas jarak jauh tertentu yang berjalan pada kendaraan tertentu. Yang lainnya adalah menyampaikan tugas, yaitu mengirimkan tugas jarak jauh untuk pengguna tertentu ke klien tugas jarak jauh tertentu yang berjalan pada kendaraan tertentu.

Daftarkan 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 dilaksanakan oleh AAOS):

  1. Saat boot-up, Layanan Mobil mendapat informasi kendaraan dari akses jarak jauh HAL.

  2. Saat boot-up, Car Service meluncurkan semua klien tugas jarak jauh berdasarkan filter maksud dan izin.

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

  4. Layanan Mobil 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. Ini dijamin unik di antara semua klien tugas jarak jauh pada kendaraan yang sama.

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

  6. Klien tugas jarak jauh mengunggah informasi pengguna bersama dengan ID kendaraan dan ID klien ke server tugas jarak jauh dan memintanya untuk menghubungkan pengguna dengan klien khusus ini dan kendaraan khusus ini.

    Secara opsional, langkah ini mungkin melibatkan autentikasi dua faktor 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 dilakukan reset pabrik, proses pendaftaran klien diperlukan satu kali per pengguna per kendaraan. ID klien disimpan secara lokal di Layanan Mobil dan tetap sama untuk klien yang sama.

image

Gambar 2. Daftarkan klien.

Batalkan pendaftaran klien

Pengguna dapat memutuskan tautan kendaraan dari akunnya baik dari kendaraan atau dari server tugas jarak jauh:

  • Di kendaraan , pengguna dapat membuka aplikasi klien tugas jarak jauh dan mengeluarkan permintaan pembatalan tautan untuk memutuskan tautan kendaraan ini dari akun pengguna yang ditautkan sebelumnya.

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

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

Memberikan tugas

Di awan:

  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. Ini mengirimkan data tugas, ID kendaraan dan ID klien ke server bangun.

  3. Server bangun menemukan TCU spesifik untuk ID kendaraan (dengan asumsi registrasi TCU sudah selesai) dan mengirimkan 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 mati, TCU menggunakan prosesor kendaraan (VP) untuk membangunkan AP.

  3. Car Service 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 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 memberi tahu Layanan Mobil ketika tugas selesai.

  8. Jika diperlukan, Servis Mobil memulihkan kondisi daya kendaraan.

image

Gambar 3. Menyampaikan tugas.

Tulis 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 . Ini memerlukan PERMISSION_USE_REMOTE_ACCESS dan PERMISSION_CONTROL_REMOTE_ACCESS dan harus mendeklarasikan filter maksud 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);
    }
}

Itu harus menggantikan fungsi onBind untuk mengembalikan null.

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

Layanan Mobil mengelola siklus hidupnya. Layanan Mobil mengikat layanan ini selama startup dan ketika tugas jarak jauh tiba. Layanan Mobil melepaskan ikatan ke layanan ini setelah tugas selesai. Untuk mempelajari lebih lanjut, lihat Mengelola siklus hidup layanan .

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

Contoh berikut menunjukkan cara menangani panggilan balik 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 tersebut, 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

Akses jarak jauh HAL

Lapisan abstraksi perangkat keras akses jarak jauh (HAL) adalah lapisan abstraksi yang diterapkan vendor untuk komunikasi antara AAOS dan ECU lain (misalnya, TCU). Wajib untuk mendukung fitur akses jarak jauh. Tidak perlu diterapkan jika fitur akses jarak jauh tidak diterapkan.

Antarmuka didefinisikan di IRemoteAccess.aidl dan mencakup metode berikut:

Kelas Keterangan
String getVehicleId() Mendapat ID kendaraan unik yang dapat dikenali oleh server bangun.
String getWakeupServiceName() Mendapatkan nama untuk server bangun jarak jauh.
String getProcessorId() Mendapatkan ID prosesor unik yang dapat dikenali dengan membangunkan klien.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Mengatur panggilan balik untuk dipanggil ketika tugas jarak jauh diminta.

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

Mendeteksi apakah pemroses aplikasi siap menerima tugas jarak jauh.

Antarmuka panggilan balik ditentukan di IRemoteTaskCallback.aid .

Kelas Keterangan
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Panggilan balik yang dipanggil ketika tugas jarak jauh diminta.

Lihat implementasi referensi dengan TCU eksternal. Implementasinya menggunakan aliran baca jangka panjang untuk menerima tugas jarak jauh dan mendukung perintah debug berikut:

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

Kendaraan HAL

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

Kelas Keterangan
SHUTDOWN_REQUEST Meminta head unit dimatikan.
VEHICLE_IN_USE
  • Mendeteksi jika kendaraan sedang digunakan.
  • Setelah pengguna membuka kunci kendaraan atau saat pengguna mendekati kendaraan. Seharusnya true .
  • Durasi tertentu setelah pengguna mematikan kendaraan atau saat pengguna mengunci kendaraan. Seharusnya false .
  • Jika true , AAOS tidak berusaha mematikan kendaraan saat tugas jarak jauh selesai.

Untuk mempelajari lebih lanjut, lihat Properti Sistem yang Didukung .

Mode diam

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 melakukan booting dengan tampilan dan audio dimatikan.

Mode senyap dikontrol melalui dua file sysfs kernel Linux.

Kelas Keterangan
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Mewakili mode senyap saat ini.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Mewakili sinyal perangkat keras untuk menyetel mode senyap baru.

Prosesor kendaraan mengirimkan sinyal HW ke SoC Android untuk menghidupkan/mematikan mode Senyap. Sinyal (0 atau 1) ditulis ke /sys/kernel/silent_boot/pm_silentmode_hw_state . Kemudian, kerangka kerja AAOS memperbarui /sys/kernel/silent_boot/pm_silentmode_kernel_state yang mewakili mode Senyap saat ini. Modul AAOS memeriksa /sys/kernel/silent_boot/pm_silentmode_kernel_state untuk mengetahui apakah sistem dalam mode Senyap atau tidak.

Ketika tugas jarak jauh diterima dan AAOS melakukan booting, prosesor kendaraan menyetel mode Senyap dan memulai AAOS sehingga sistem melakukan booting dengan tampilan/audio mati.

Komponen non-Android pada kendaraan

Prosesor kendaraan

Prosesor kendaraan adalah prosesor di dalam kendaraan yang dapat mengontrol daya untuk prosesor aplikasi yang menjalankan Android. Dalam contoh arsitektur, TCU membangunkan prosesor aplikasi melalui pengiriman sinyal ke prosesor kendaraan.

Komponen non-Android pada kendaraan

TCU kendaraan selalu dapat menerima pesan jarak jauh.

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

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

image

Gambar 4. TCU (klien bangun).

Komponen di cloud

Server bangun

Server bangun berkomunikasi dengan klien bangun di TCU untuk:

  • Pertahankan koneksi jangka panjang dengan TCU kendaraan.
  • Temukan TCU tertentu berdasarkan ID kendaraan.
  • Laporkan status kendaraan. Misalnya, online atau offline, atau waktu online terakhir ke server tugas jarak jauh.

Dalam implementasi sebenarnya, server bangun dapat digabungkan dengan server tugas jarak jauh.

Server tugas jarak jauh

Server tugas jarak jauh mengelola tugas-tugas jarak jauh ini.

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

  • Menggunakan server bangun jarak jauh untuk membangunkan prosesor aplikasi di kendaraan.

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

  • Menyimpan informasi pendaftaran klien. Ini mengaitkan pengguna tertentu ke klien tugas jarak jauh tertentu pada kendaraan tertentu.

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

Persyaratan privasi dan keamanan

Tugas Kondisi Persyaratan
TCU (klien bangun) HARUS
  • Otentikasi server bangun.
  • Percayai kodenya.
Server bangun HARUS
  • Izinkan hanya server tugas jarak jauh yang terdaftar dan diizinkan untuk terhubung.
  • Otentikasi klien bangun.
  • Kirim pesan bangun ke kendaraan target saja .
Klien tugas jarak jauh HARUS
  • Otentikasi pengguna saat pendaftaran.
  • Otentikasi 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. 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 adalah pemilik kendaraan tersebut.
  • Otentikasi identitas pengguna.
  • Memenuhi semua persyaratan keamanan untuk server yang menangani informasi pengguna.

Reset pabrik dan transfer kepemilikan

Jika pengguna melakukan reset pabrik, ID klien yang disimpan di Layanan Mobil akan dihapus. Namun, server (server tugas jarak jauh dan server bangun jarak jauh) tidak diinformasikan. Server menyimpan pemetaan dari ID klien yang sekarang sudah habis masa berlakunya ke kendaraan. Akibatnya, jika pengguna memulai tugas jarak jauh baru untuk kendaraan, ia akan menggunakan ID klien yang sudah habis masa berlakunya. Kendaraan dibangunkan, namun tugas jarak jauh tidak dapat dijalankan karena klien tugas jarak jauh memiliki ID klien berbeda yang tidak cocok.

Berikut ini menjelaskan salah satu kemungkinan implementasi untuk reset pabrik.

Saat pengguna melakukan reset pabrik, vendor meminta pengguna untuk masuk ke server tugas jarak jauh dan memutuskan tautan kendaraan dari akun mereka jika pengguna sebelumnya telah menautkan kendaraan tersebut. Perangkat tidak dijamin memiliki akses jaringan selama proses reset pabrik. Oleh karena itu, mengeluarkan permintaan pembatalan tautan pada waktu reset pabrik dari perangkat mungkin tidak dapat dilakukan.

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

  • Lakukan reset pabrik. Ini memastikan ID klien dibuat ulang. Setelah langkah ini, pemilik sebelumnya masih dapat membangunkan kendaraannya, tetapi tidak dapat lagi menjalankan tugas jarak jauh.

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

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

Uji klien tugas jarak jauh

Kami menyediakan referensi direktori default HAL akses jarak jauh untuk menguji klien tugas jarak jauh. Anda dapat menggunakan perintah debug berikut untuk memasukkan 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 implementasi klien tugas jarak jauh Anda.

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