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:
Alur kerja. Alur kerja antara beberapa komponen dalam arsitektur contoh untuk pendaftaran klien dan pengiriman tugas.
Menulis klien tugas jarak jauh. Gunakan akses jarak jauh dan pelajari cara menulis klien tugas jarak jauh.
Penerapan vendor. Komponen vendor dalam arsitektur contoh untuk mendukung akses jarak jauh.
Reset ke setelan pabrik dan transfer kepemilikan. Pelajari cara menangani reset pabrik dan transfer kepemilikan kendaraan.
Uji klien akses jarak jauh. Pelajari cara menguji fitur akses jarak jauh.
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 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:
Pengguna memarkir kendaraan di garasi.
Partner ingin mengupdate kendaraan semalaman jika interaksi dengan kendaraan tidak mungkin dilakukan.
Server cloud partner mengirimkan tugas jarak jauh sistem update ke kendaraan. Secara khusus, unit kontrol telematika (TCU).
TCU kendaraan mengaktifkan unit kontrol elektronik (ECU) Android dan layanan OEM memicu mode Garasi.
Android menjalankan mode Garage untuk mendownload dan menginstal update melalui Google Play.
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):
Saat booting, Layanan Mobil mendapatkan informasi kendaraan dari HAL akses jarak jauh.
Saat booting, Layanan Mobil meluncurkan semua klien tugas jarak jauh berdasarkan intent-filter dan izin.
Setelah klien tugas jarak jauh dimulai, klien tugas jarak jauh mendaftarkan dirinya sendiri ke Layanan Mobil.
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.
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.
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 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:
Pengguna menggunakan server tugas jarak jauh untuk mengirim tugas jarak jauh ke kendaraan tertentu.
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.
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):
TCU menerima tugas jarak jauh dari server jarak jauh.
Jika prosesor aplikasi (AP) yang menjalankan AAOS nonaktif, TCU menggunakan prosesor kendaraan (VP) untuk mengaktifkan AP.
Layanan Mobil menerima tugas dari TCU.
Layanan Mobil mendistribusikan tugas ke klien tugas jarak jauh yang sesuai.
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.
(Opsional) Layanan klien tugas jarak jauh melaporkan hasil tugas ke server tugas.
Klien tugas jarak jauh akan memberi tahu Layanan Mobil saat tugas selesai.
Jika diperlukan, Layanan Mobil akan memulihkan status daya kendaraan.
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 |
|
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 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 |
|
Server membangunkan | HARUS |
|
Klien tugas jarak jauh | HARUS |
|
Server tugas jarak jauh | HARUS |
|
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]