Gunakan perender ketersediaan tinggi (HAR) untuk menampilkan informasi kendaraan yang tidak dapat ditampilkan oleh Android. Hal ini dapat terjadi karena masalah seperti start-up, ketersediaan, keselamatan, atau peraturan. HAR adalah aplikasi bawaan portabel yang ditulis dalam Rust.
HAR, yang juga disebut framework HAR, menyertakan kode yang Anda gunakan untuk membangun aplikasi. Aplikasi yang dibuat dengan HAR adalah aplikasi berbasis HAR. Framework HAR memiliki bagian kode untuk platform yang berbeda. Misalnya, di sistem Linux, Anda menggunakan library seperti
tinyalsa untuk suara. QNX memiliki library audio uniknya sendiri.
Platform mencakup hardware, sistem operasi, library sistem, dan faktor lainnya. Kode khusus platform memiliki bagian yang disebut subsistem. Setiap subsistem menangani satu fitur platform, seperti audio, kamera EVS, atau data kendaraan. Untuk mendukung platform, framework HAR memerlukan semua subsistemnya diimplementasikan.
Kode subsistem khusus platform dapat berjalan dalam proses yang sama dengan aplikasi berbasis HAR atau dalam proses yang terpisah. Jika terpisah, kode ini menangani komunikasi antar-proses (IPC) untuk membantu memverifikasi bahwa platform mendukung aplikasi. Mekanisme IPC yang kompleks harus menjadi bagian dari kode khusus platform.
Suite pengujian HAR menjalankan pengujian pada semua subsistem yang diterapkan untuk platform. Gunakan rangkaian alat ini untuk memeriksa apakah platform memenuhi persyaratan HAR dan menemukan masalah baru.
Terminologi
Istilah berikut ada di halaman ini:
- Aplikasi berbasis HAR
- Aplikasi khusus fungsi atau OEM yang dibuat dengan framework HAR. Aplikasi berbeda menurut status aplikasi dan aspek lain yang dapat disesuaikan.
- Framework HAR
- Menyediakan serangkaian alat inti yang digunakan untuk membuat aplikasi.
- Abstraksi platform HAR
- Bagian dari framework HAR yang menyediakan API yang diketahui yang harus diimplementasikan oleh semua platform target.
- Suite pengujian HAR
- Serangkaian pengujian yang diketahui atas penerapan platform, yang membantu memverifikasi bahwa penerapan platform mendukung framework HAR di platform tertentu.
Di luar cakupan
HAR tidak membahas:
Penerapan individual untuk semua target platform: Penerapan untuk platform target. Sebagai gantinya, halaman ini menjelaskan antarmuka yang harus dipenuhi oleh implementasi platform dan suite pengujian yang harus dipenuhi.
Kasus pengujian: Kasus pengujian khusus untuk semua antarmuka. Sebagai gantinya, halaman ini menjelaskan fungsi individual untuk antarmuka, termasuk argumen, nilai yang ditampilkan, perilaku yang diharapkan, dan efek samping yang diharapkan. Halaman ini menjelaskan rangkaian pengujian tempat Anda dapat menerapkan dan menjalankan kasus pengujian.
Struktur crate tingkat tinggi abstraksi platform
Project Rust terdiri dari crate. Gambar 1 menunjukkan struktur crate untuk lapisan abstraksi platform HAR. Lapisan abstraksi platform memengaruhi dua crate Rust atau lebih:
Abstraksi (deskripsi
traitRust) ada di crate framework HAR.Implementasi untuk platform dilakukan dengan crate
har-platform-xterpisah. Misalnya,har-platform-linuxatauhar-platform-android.
Anda tidak dapat membuat atau menguji crate HAR tanpa implementasi platform yang ditentukan. Hal ini disengaja karena framework HAR adalah framework.
Aplikasi yang menentukan platform harus dibangun dengan framework ini agar berfungsi dan diuji. Koneksi antara framework HAR dan platform ada dalam diagram ini:
Gambar 1. Petak HAR.
Struktur umum dalam display-safety
Desain ini menambahkan serangkaian crate baru ke repositori display_safety, seperti yang diilustrasikan pada Gambar 2:
Gambar 2. Modul abstraksi.
Suite pengujian secara struktural mirip dengan aplikasi, tetapi hanya mengandalkan crate implementasi platform tertentu. Suite pengujian harus merujuk pada trait dan struktur yang ditentukan dalam framework HAR, tetapi tidak boleh merujuk pada penerapan yang lebih kompleks.
Deskripsi tingkat tinggi lapisan abstraksi platform
Tabel ini menjelaskan subsistem khusus platform yang ditentukan oleh lapisan abstraksi platform HAR.
| Nama abstraksi | Fungsi terkait | Deskripsi | Catatan |
|---|---|---|---|
OpenGL |
Rendering 2D | Menyediakan kemampuan rendering OpenGLES 2.0/3.0 ke crate framework HAR. | |
Audio |
Rendering audio | Menyediakan antarmuka seperti Android SoundPool untuk mengelola dan memutar audio sistem. | |
Camera |
Tampilan kamera kendaraan | Menyediakan antarmuka seperti EVS HAL untuk mengelola dan menampilkan informasi kamera kendaraan. | |
Looper |
Konfigurasi tampilan dan loop utama aplikasi | Menyediakan antarmuka seperti Android Looper untuk mengelola loop utama aplikasi khusus platform dan konfigurasi tampilan. | |
UserInput |
Sentuhan, keyboard, roda kemudi atau tombol putar, dan input khusus platform lainnya | Menyediakan antarmuka untuk memasok aplikasi berbasis HAR dengan input sentuh dan keyboard. Implementasi referensi berdasarkan evdev Linux di
har-user-input-evdev. |
|
VehicleData |
Input status kendaraan | Menyediakan antarmuka untuk memasok aplikasi berbasis HAR dengan aliran data kendaraan arbitrer seperti yang disediakan oleh Android VHAL atau CAN bus. | |
ResourceManager |
Dokumen desain yang di-cache khusus aplikasi | Menyediakan cache dalam memori untuk resource yang diperlukan untuk memulai HAR, seperti gambar yang di-cache dan dokumen desain. Belum ada cache disk yang diterapkan. | |
Logging |
Logging dan telemetri sistem | Menyediakan dukungan logging khusus platform menggunakan sistem pelacakan. Hal ini memungkinkan pengumpulan telemetri sebagaimana diperlukan oleh platform. | |
Tracing |
Pelacakan sistem | Menyediakan abstraksi untuk berintegrasi dengan sistem pelacakan dan pembuatan profil. | |
Monitoring |
Pemantauan sistem | Toolkit untuk memantau performa dan latensi dalam framework HAR. | |
Commlib |
Data kendaraan | Implementasi referensi menggunakan serialisasi protobuf.
Tidak digunakan lagi: Gunakan API yang ditentukan dalam reference/harry-control-api dan
implementasi harry-grpcio-server dan
harry-tonic-server (implementasi referensi). |
|
TestSupport |
Menguji hook dukungan | Mendukung penyiapan dan penghentian kasus pengujian, pembuatan peristiwa pengujian, dan pembuatan artefak pengujian. Misalnya, membuat peristiwa sentuh simulasi untuk menguji UserInput dan membuat screenshot untuk analisis. |
Fitur ini dikunci oleh Rust untuk mencegah penyertaan dalam build produksi. |
Konvensi penamaan dan struktur framework
Tabel ini menampilkan nama dan struktur berikut:
Instance subsistem
traityang diharapkan disediakan oleh framework HAR. Setiaptraitmewakili subsistem khusus platform yang harus diterapkan.Nama yang diharapkan dari implementasi subsistem khusus platform dalam crate platform apa pun. Aplikasi berbasis HAR mengharapkan nama tertentu ini diterapkan.
Instance framework HAR
enumdanstructterkait biasanya digunakan untuk meneruskan informasi dari penerapan terkait platform ke framework HAR.
| Nama karakteristik | Nama penerapan | Enum dan struct framework HAR |
|---|---|---|
GlContextFactory |
OpenGL |
trait harry::Rendererharry::DisplayRotation |
AudioApiFactory |
Audio |
harry::AudioApiharry::AudioDeviceharry::VolumeMillibel |
ICameraManager |
Camera |
harry::ICameraDeviceharry::CameraDescriptor |
Looper |
Looper |
harry::LooperMessageharry::LooperOptionsharry::DisplayId |
PlatformVehicleData |
VehicleData |
harry::VehicleDataTypeharry::VehicleDataListener |
ResourceManager (Struct) |
ResourceManager |
harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing |
Tracing |
T/A |
HarPerformanceMonitor |
Monitoring |
harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport |
TestSupport |
harry::TestConfigharry::TestDisplayConfig |
Penanganan error dan kesalahan
API yang diusulkan menggunakan jenis Result<> Rust. Rust mengharuskan Anda memeriksa jenis Result yang membawa error. Jika tidak, compiler akan menghasilkan peringatan atau
error. Pemeriksaan waktu build menerapkan pemeriksaan error dari kode khusus platform.
Error yang ditampilkan oleh penerapan platform adalah jenis
harry::error::Error. Untuk memverifikasi bahwa jenis error platform tidak bocor ke dalam kode aplikasi, gunakan jenis error standar yang disediakan oleh framework HAR.
Jenis harry::error::Error diperluas untuk menyertakan error spesifik untuk semua subsistem:
// This is Rust
pub enum Error {
Msg(String), // A generic message string
// Legacy error type, likely to be removed or merged into Msg
Audio(String),
}
Error yang tidak dapat dipulihkan terutama ditampilkan melalui antarmuka dan callback yang ditentukan.
Desain mendetail suite pengujian
Bagian ini menjelaskan desain suite pengujian, yang memverifikasi penerapan abstraksi khusus platform.
Membangun pengujian suite pengujian
Untuk build Soong (ditentukan oleh file Android.bp), pengujian dikompilasi sebagai bagian
dari sistem build platform Android, dan eksekusinya dikelola oleh atest.
Menjalankan suite pengujian
Untuk menguji platform satu per satu:
Gunakan perintah atest dengan target pengujian yang relevan (misalnya,
atest <module_name>). Perintah ini men-deploy dan menjalankan pengujian di perangkat
atau emulator Android.