VSIDLC의 유형 시스템은 Protobuf와 VSIDL이라는 두 가지 수준에서 작동합니다. Protobuf는 VSIDL로 정의된 게시자와 구독자 간에 교환되는 메시지를 정의하는 데 사용됩니다. VSIDL은 protobuf로 선언된 유형을 참조합니다.
이 페이지에서는 요청을 호출하고 응답하기 위한 메시지와 리모트 프러시저 콜 (RPC) 메서드를 정의하는 방법을 설명합니다.
메시지 정의
이 섹션에서는 VSIDL 및 protobuf에서 메시지가 정의되는 방식을 설명합니다.
다음 코드 샘플은 TirePressure 메시지를 정의합니다.
syntax = "proto3";
package com.android.sdv.sample.vsidl;
message TirePressure {
uint32 pressure = 1;
}
RPC 서비스 정의
protobuf에서 RPC 서비스는 로컬 함수 호출인 것처럼 원격으로 호출할 수 있는 메서드 집합을 정의합니다. 다음 예에서는 요청을 하고 응답을 수신하는 데 사용되는 요청 및 응답 메시지 유형과 RPC 서비스 메서드를 정의합니다.
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);
}
각 항목의 의미는 다음과 같습니다.
service는 관련 RPC 메서드의 컬렉션을 식별합니다.rpc은 입력 및 출력 메시지 유형(각각SetSeatHeatingRequest및SetSeatHeatingResponse)이 있는 단일 RPC 메서드를 식별합니다.
빌드 시스템 통합 구성
vsidlc가 프로토콜 버퍼 정의를 검색하고 Android 빌드 시스템이 이를 컴파일하도록 하려면 카탈로그 디렉터리의 최상위 폴더에 Android.bp 파일을 포함해야 합니다.
이 파일은 protobuf 파일(.proto 확장자 사용)을 그룹화하는 rust_protobuf 타겟을 정의해야 합니다.
카탈로그의 모든 파일은 파일 그룹에 포함되어야 합니다. Android.bp 파일에 파일 그룹이 여러 개 있는 경우 vsidlc은 첫 번째 파일 그룹을 사용합니다.
다음 예시는 VSIDL 카탈로그의 일반적인 rust_protobuf 타겟을 보여줍니다.
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: ["**/*"],
}
각 항목의 의미는 다음과 같습니다.
name: 빌드 타겟의 고유 식별자입니다. 관례에 따라lib로 시작합니다.crate_name: 생성된 Rust 크레이트의 이름입니다.protos: 카탈로그의 모든 protobuf 파일 목록입니다.**/*.proto과 같은 glob이 지원됩니다.rustlibs: 표준 SDV 주석과 유형을 제공하려면libvsidl_v1_proto_rs을 포함해야 합니다.proto_flags: 포함 경로를 지정하는 데 사용됩니다.-I external/protobuf/src은 표준 protobuf 유형을 해결하는 데 필요한 경우가 많습니다.min_sdk_version: 해당 SDV 플랫폼 API 및 Rust 도구 모음 요구사항과의 호환성을 선언하기 위해"35"(Android 15)로 설정합니다.filegroup: 빌드 시간 검색에 필요합니다. 빌드 시스템이 컴파일 샌드박스로 복사할 수 있도록 모든 VSIDL, protobuf,Android.bp파일을srcs에 포함합니다.
다음 단계
서비스 아키텍처 구현을 계속하려면 서비스 아키텍처 정의를 참고하세요.