Sistem jenis VSIDLC beroperasi pada dua tingkat: Protobuf dan VSIDL. Protobuf digunakan untuk menentukan pesan yang dipertukarkan antara penayang dan pelanggan yang ditentukan oleh VSIDL. VSIDL mereferensikan jenis yang dideklarasikan oleh protobuf.
Halaman ini menjelaskan cara menentukan pesan dan metode panggilan prosedur jarak jauh (RPC) untuk memanggil dan merespons permintaan.
Menentukan pesan
Bagian ini menjelaskan cara pesan ditentukan dalam VSIDL dan protobuf.
Contoh kode berikut menentukan pesan TirePressure:
syntax = "proto3";
package com.android.sdv.sample.vsidl;
message TirePressure {
uint32 pressure = 1;
}
Menentukan layanan RPC
Di protobuf, layanan RPC menentukan serangkaian metode yang dapat dipanggil dari jarak jauh seolah-olah merupakan panggilan fungsi lokal. Contoh berikut menentukan jenis pesan permintaan dan respons serta metode layanan RPC yang digunakan untuk membuat permintaan dan menerima respons:
syntax = "proto3";
package com.google.sdv;
enum SeatHeatingLevel {
OFF = 0;
LOW = 1;
HIGH = 2;
}
// Request to set seat heating
message SetSeatHeatingRequest {
enum Seat {
DRIVER = 0;
PASSENGER = 1;
}
Seat seat = 1;
SeatHeatingLevel level = 2;
}
// Response to setting seat heating
message SetSeatHeatingResponse {
bool success = 1;
}
// Seat heating service
service SeatHeatingService {
rpc SetSeatHeating (SetSeatHeatingRequest) returns (SetSeatHeatingResponse);
}
Dengan:
servicemengidentifikasi kumpulan metode RPC terkait.rpcmengidentifikasi satu metode RPC dengan jenis pesan input dan output (SetSeatHeatingRequestdanSetSeatHeatingResponse, masing-masing).
Mengonfigurasi integrasi sistem build
Untuk mengaktifkan vsidlc agar dapat menemukan definisi protobuf Anda dan memungkinkan sistem build Android mengompilasinya, Anda harus menyertakan file Android.bp di folder teratas direktori katalog Anda.
File ini harus menentukan target rust_protobuf yang mengelompokkan file protobuf Anda
(dengan ekstensi .proto).
Setiap file dalam katalog Anda harus diperhitungkan dalam grup file. Jika ada
beberapa grup file dalam file Android.bp, vsidlc akan mengambil grup file pertama.
Contoh berikut menunjukkan target rust_protobuf umum untuk katalog VSIDL:
rust_protobuf {
name: "liboem_vehicle_messages",
crate_name: "oem_vehicle_messages",
source_stem: "oem_vehicle_messages_source",
protos: [
"**/*.proto",
],
rustlibs: [
"libvsidl_v1_proto_rs",
],
proto_flags: [
"-I external/protobuf/src",
],
apex_available: [
"//apex_available:platform",
"//apex_available:anyapex",
],
vendor_available: true,
product_available: true,
min_sdk_version: "35",
}
filegroup {
name: "catalog_oem_vehicle_messages",
srcs: ["**/*"],
}
Dengan:
name: ID unik untuk target build. Menurut konvensi, ini dimulai denganlib.crate_name: Nama crate Rust yang dihasilkan.protos: Daftar semua file protobuf dalam katalog. Glob seperti**/*.protodidukung.rustlibs: Harus menyertakanlibvsidl_v1_proto_rsuntuk memberikan anotasi dan jenis SDV standar.proto_flags: Digunakan untuk menentukan jalur sertakan.-I external/protobuf/srcsering kali diperlukan untuk menyelesaikan jenis protobuf standar.min_sdk_version: Ditetapkan ke"35"(Android 15) untuk menyatakan kompatibilitas dengan API platform SDV yang sesuai dan persyaratan toolchain Rust.filegroup: Diperlukan untuk penemuan waktu build. Sertakan setiap file VSIDL, protobuf, danAndroid.bpdisrcssehingga sistem build dapat menyalinnya ke dalam sandbox kompilasi.
Langkah berikutnya
Untuk melanjutkan penerapan arsitektur layanan, lihat Menentukan arsitektur layanan.