หน้านี้ระบุภาษาที่ใช้นิยามอินเทอร์เฟซสำหรับบริการยานพาหนะ (VSIDL) โดยใช้ Extended Backus-Naur Form (EBNF) ของ ISO/IEC 14977 และ Protobuf หน้านี้จะมุ่งเน้นที่ไวยากรณ์แบบไม่พึ่งบริบทของภาษาและความหมายขององค์ประกอบภาษา
ลำดับชั้นของภาษา
ตาม Meta Object Facility (MOF) คอมไพเลอร์ VSIDL (VSIDLC) จะใช้ภาษาที่แสดงในรูปที่ 1 ดังนี้
รูปที่ 1 ภาษา VSIDLC
VSIDLC อิงตามภาษาบัฟเฟอร์โปรโตคอล (protobuf) เป็นหลัก Protobuf จะระบุประเภทข้อมูลที่แลกเปลี่ยนโดยใช้การเผยแพร่-สมัครใช้บริการและการเรียกใช้โพรซีเยอร์ระยะไกล (RPC) ในทางเทคนิคแล้ว โมเดล VSIDL คือไฟล์ TextProto และไวยากรณ์ VSIDL จะกำหนดไว้ในไฟล์ protobuf (syntax.proto)
ระบบจะใช้ทั้งไฟล์ protobuf สำหรับระบุประเภทข้อมูลและโมเดล VSIDL เพื่อสร้างโค้ด Rust โค้ดที่สร้างขึ้นประกอบด้วยโครงสร้างสำหรับโครงสร้างข้อมูลข้อความที่แลกเปลี่ยนและฟังก์ชัน Rust สำหรับสร้างหน่วยบริการ โดยไม่ต้องเรียกใช้หน่วยบริการเหล่านั้นโดยอัตโนมัติ จากนั้นโค้ด Rust ที่กำหนดเองจะใช้โค้ดที่สร้างขึ้นเพื่อสร้างอินสแตนซ์หน่วยบริการและใช้ตรรกะของแอปพลิเคชัน
ไวยากรณ์นามธรรม
รูปที่ 2 แสดงประเภทข้อความหลักใน VSIDL
รูปที่ 2 ประเภทข้อความหลักใน VSIDL
รายการ VSIDL
ส่วนนี้จะอธิบายประเภทข้อความรายการ VSIDL
ไวยากรณ์ EBNF
start VsidlEntry =
"package" , ":" , String , ";" ,
{ "service_bundle" , ServiceBundle } ,
{ "extension" , ":" , Any } ,
{ "some_ip_mapping" , ":" , SomeIpMapping } ,
{ "vhal_mapping" , ":" , VhalMapping }
;
คำจำกัดความของ Proto
// The root message for VSIDL files
message VsidlEntry {
// Required. Package name for entities mentioned in the file.
string package = 1;
// Enables custom extensions beyond the standard VSIDL model.
repeated google.protobuf.Any extension = 3;
// SOMEIP mapping rules
repeated sdv.someip.v1.SomeIpMapping some_ip_mapping = 4;
// VHAL mapping rules
repeated VhalMapping vhal_mapping = 5;
// List of SDV service bundles defined in the file.
repeated ServiceBundle service_bundle = 6;
}
ตัวอย่างการใช้งาน
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "Manager"
publisher {
message: "TirePressure"
topic: "front-left"
topic: "front-right"
capacity: 10
}
}
คำอธิบาย
ข้อความ VsidlEntry ทำหน้าที่เป็นคอนเทนเนอร์รูทสำหรับไฟล์ VSIDL (ที่มีนามสกุล .vsidl) ข้อความนี้จะรวมคำจำกัดความและการกำหนดค่าทั้งหมดไว้ในไฟล์ VSIDL ไฟล์เดียว VsidlEntry เป็นองค์ประกอบระดับบนสุด
ที่เชื่อมโยงทุกอย่างเข้าด้วยกัน
วัตถุประสงค์
- กำหนดโครงสร้างโดยรวมของไฟล์ VSIDL
- ระบุเนมสเปซของแพ็กเกจสำหรับเอนทิตีทั้งหมดภายในไฟล์
- มีคอลเล็กชันคำจำกัดความของแพ็กเกจบริการ
- อนุญาตให้ใช้ส่วนขยายที่กำหนดเองกับโมเดล VSIDL
- รวมถึงกฎการแมปสำหรับ SOME/IP และ VHAL
ข้อจำกัด
- ชื่อแพ็กเกจ (E211): ชื่อแพ็กเกจต้องมีความยาวไม่เกิน 127 อักขระ
- ไฟล์ที่ไม่มีการอ้างอิง (E10B): ไฟล์ทั้งหมดในแคตตาล็อกต้องมีการอ้างอิงในกลุ่มไฟล์
Android.bp
แพ็กเกจบริการ
ส่วนนี้จะอธิบายประเภทข้อความแพ็กเกจบริการ
ไวยากรณ์ EBNF
ServiceBundle = "{" , { ServiceBundleElement } , "}" ;
ServiceBundleElement =
"name" , ":" , String |
"publisher" , Publisher |
"subscriber" , Subscriber |
"server" , Server |
"client" , Client |
"extension" , ":" , Any |
"diagnostics_declaration" , DiagnosticsDeclaration |
"build_cfg" , BuildConfiguration |
"register_reflection_metadata" , Boolean
;
คำจำกัดความของ Proto
// Defines an SDV service
message ServiceBundle {
// Required. Name of the service bundle (without the package name).
string name = 1;
// List of publications the service bundle provides.
repeated Publisher publisher = 2;
// List of publications a service bundle subscribes to.
repeated Subscriber subscriber = 3;
// RPC services offered by a service bundle.
repeated Server server = 4;
// RPC services consumed by a service bundle.
repeated Client client = 5;
// Enables custom extensions beyond the standard VSIDL model.
repeated google.protobuf.Any extension = 7;
// Diagnostics declarations
sdv.diagnostics.v1.DiagnosticsDeclaration diagnostics_declaration = 8;
// Build Configuration
optional BuildConfiguration build_cfg = 9;
// Register metadata for service units provided by this service bundle.
// Setting this to true will increase the memory footprint
// and network load significantly.
bool register_reflection_metadata = 10;
}
ตัวอย่างการใช้งาน
service_bundle {
name: "SeatController"
publisher {
message: "SeatHeating"
topic: "driver-seat"
capacity: 10
}
}
คำอธิบาย
แพ็กเกจบริการจะกำหนดการจัดกลุ่มเชิงตรรกะของบริการที่เกี่ยวข้อง, ผู้เผยแพร่, ผู้สมัครใช้บริการ, เซิร์ฟเวอร์ RPC และไคลเอ็นต์ RPC แพ็กเกจบริการจะทำหน้าที่เป็นคอนเทนเนอร์สำหรับชุดฟังก์ชันการทำงานและการโต้ตอบที่เฉพาะเจาะจง
ข้อจำกัด
- ข้อกำหนดเกี่ยวกับชื่อแพ็กเกจ (E209, E20A, E20B, E20C):
- แพ็กเกจบริการต้องมีชื่อที่ระบุไว้
- ชื่อต้องขึ้นต้นด้วยอักขระเริ่มต้นตัวระบุ Unicode ที่ถูกต้อง (โดยทั่วไปคือตัวอักษร)
- อักขระต่อๆ ไปในชื่อต้องเป็นอักขระต่อท้ายตัวระบุ Unicode ที่ถูกต้อง (โดยทั่วไปคือตัวอักษรหรือตัวเลข)
- ชื่อต้องไม่ใช่คีย์เวิร์ดที่สงวนไว้ใน Rust, Java หรือ C++
- ความไม่ซ้ำกันของแพ็กเกจส่วนกลาง (E309): แพ็กเกจบริการทุกแพ็กเกจต้องมีชื่อที่สมบูรณ์และไม่ซ้ำกัน (อิงตามแพ็กเกจและชื่อ)
- ความไม่ซ้ำกันภายใน (E100, E300, E302, E303, E308):
- ภายในแพ็กเกจบริการเดียว บริการ RPC แต่ละรายการจะแสดงได้โดยคำจำกัดความของเซิร์ฟเวอร์อย่างมาก 1 รายการ
- ภายในแพ็กเกจบริการเดียว สิ่งพิมพ์
MULTI_PUBแต่ละประเภทจะเผยแพร่ได้โดยคำจำกัดความของผู้เผยแพร่เนื้อหาไม่เกิน 1 รายการ - ภายในแพ็กเกจบริการเดียว ชื่อหน่วยบริการที่ผู้ใช้กำหนดทั้งหมด (สำหรับผู้เผยแพร่โฆษณาหรือเซิร์ฟเวอร์) ต้องไม่ซ้ำกัน
- ภายในแพ็กเกจบริการเดียว ชื่อหน่วยบริการทั้งหมด (ไม่ว่าจะกำหนดโดยผู้ใช้หรือสร้างขึ้นโดยอัตโนมัติ) ต้องไม่ซ้ำกัน
- รูปแบบการตั้งชื่อเป้าหมายการสร้าง (E205, E206, E207, E208): หากมีการระบุชื่อเป้าหมายการสร้างที่กำหนดเอง (
build_cfg.target_name) ชื่อดังกล่าวต้องเป็นไปตามรูปแบบ Snake Case (ตัวอักษรพิมพ์เล็ก ตัวเลข และขีดล่างเดี่ยว โดยไม่ขึ้นต้นหรือลงท้ายด้วยขีดล่าง) - ความไม่ซ้ำกันของชื่อเป้าหมายบิลด์ (E301): ชื่อเป้าหมายบิลด์ที่ผู้ใช้กำหนดต้องไม่ขัดแย้งกับชื่อเป้าหมายที่สร้างขึ้นโดยอัตโนมัติสำหรับแพ็กเกจบริการอื่นๆ
ผู้เผยแพร่
ส่วนนี้จะอธิบายประเภทข้อความของผู้เผยแพร่โฆษณา
ไวยากรณ์ EBNF
Publisher = "{" , { PublisherElement } , "}" ;
PublisherElement =
"message" , ":" , String |
"topic" , ":" , String |
"capacity" , ":" , Integer |
"service_unit_name" , ":" , String
;
คำจำกัดความของ Proto
// Represents a publisher within a service bundle.
message Publisher {
// Name of the service unit. Name may only use characters from [a-z0-9\-]+,
// must start with [a-z], may not end with a hyphen,
// and may not contain consecutive hyphens.
string service_unit_name = 3;
// Required. The type of data being published.
string message = 4;
// Required. The number of messages a publication queue can hold.
// Must be an even number >= 2.
int64 capacity = 6;
// Required. Unique identifier for the publication topic.
// Must be in lowercase dash-case.
repeated string topic = 7;
}
ตัวอย่างการใช้งาน
publisher {
message: "SeatHeating"
topic: "driver-heating"
capacity: 10
}
คำอธิบาย
ประเภทข้อความ Publisher จะกำหนดแหล่งข้อมูลที่ ServiceBundle มีให้ ประเภทข้อความนี้จะระบุประเภทของข้อมูลที่เผยแพร่ รวมถึงหัวข้อและความจุที่เฉพาะเจาะจงของข้อมูลนั้น
หัวข้อ
อินสแตนซ์ Publisher ทุกรายการมีฟิลด์ message ที่อ้างอิงถึงข้อความ Proto ที่เผยแพร่ โดยต้องระบุหัวข้อ (แสดงโดย topic) และความจุ (แสดงโดย capacity)
- Topic: ตัวระบุที่ไม่ซ้ำกันสำหรับหัวข้อของสื่อเผยแพร่ โดยต้องใช้ตัวพิมพ์เล็กและคั่นด้วยขีดกลาง (เช่น
my-topic) - ความจุ: ระบุขนาดของคิว ซึ่งก็คือจำนวนข้อความที่คิวสามารถเก็บไว้ได้ก่อนที่ข้อความที่ยังไม่อ่านจะถูกทิ้ง โดยต้องเป็นเลขคู่ที่มากกว่าหรือเท่ากับ 2
ชื่อที่ผู้ใช้กำหนด
ผู้เผยแพร่โฆษณาสามารถมีชื่อหน่วยบริการที่ผู้ใช้กำหนดซึ่งลบล้างชื่อหน่วยบริการที่เลือกโดยอัตโนมัติ ความสามารถนี้ช่วยให้เลือกชื่อที่สั้นลงได้ หากผู้เผยแพร่โฆษณาใช้ชื่อหน่วยบริการที่ผู้ใช้กำหนด ผู้เผยแพร่โฆษณาอาจใช้อินสแตนซ์เดียวเท่านั้น เพื่อให้ชื่อหน่วยบริการได้รับการกำหนดให้กับอินสแตนซ์เดียวโดยไม่ซ้ำกัน
# VALID: A publisher assigns a user-defined name to a single instance
publisher {
message: "SeatHeating"
topic: "seat-heating-status"
service_unit_name: "heating-is-off"
}
# ERROR: user-defined names are only allowed if there's only a single instance
publisher {
message: "SeatHeating"
topic: "seat-heating-status"
service_unit_name: "heating-status"
}
ข้อจำกัด
- ตำแหน่งโฆษณาของผู้เผยแพร่โฆษณา (E300): ต้องกำหนดผู้เผยแพร่โฆษณาสำหรับประเภท
MULTI_PUBเดียวกันในแพ็กเกจบริการแยกต่างหาก - ความไม่ซ้ำกันของชื่อในเครื่อง (E302): ภายในแพ็กเกจบริการเดียว ผู้เผยแพร่โฆษณาทั้งหมดต้องมีชื่อหน่วยบริการที่ผู้ใช้กำหนดซึ่งไม่ซ้ำกัน
- ชื่อที่ไม่ซ้ำกันทั่วโลก (E304): ผู้เผยแพร่โฆษณาที่มีประเภทการเผยแพร่เดียวกันต้องมีชื่อหน่วยบริการที่ผู้ใช้กำหนดซึ่งไม่ซ้ำกันทั่วโลกในแพ็กเกจบริการทั้งหมด
- การตั้งชื่อช่องเดียว (E306): ชื่อหน่วยบริการที่ผู้ใช้กำหนดจะกำหนดให้กับผู้เผยแพร่โฆษณาที่จัดการอินสแตนซ์เดียวเท่านั้น
- ขีดจำกัดผู้เผยแพร่รายเดียว (E307): ข้อความ protobuf ที่ทำเครื่องหมายเป็น
SINGLE_PUBสามารถเผยแพร่โดยผู้เผยแพร่รายเดียวเท่านั้นในทั้งระบบ - ความไม่ซ้ำกันของชื่อหน่วยบริการ (E308): ชื่อหน่วยบริการทั้งหมด (ไม่ว่าจะสร้างขึ้นหรือกำหนดโดยผู้ใช้) ต้องไม่ซ้ำกันภายในแพ็กเกจบริการ และควรใช้ชื่อที่ผู้ใช้กำหนดเพื่อแก้ไขความขัดแย้งกับชื่อที่สร้างขึ้น
- ข้อกำหนดเฉพาะของตัวแปร (E501): เมื่อผู้เผยแพร่โฆษณาใช้ชื่อที่ผู้ใช้กำหนดสำหรับประเภทที่มีตัวแปรหลายรายการ ผู้เผยแพร่โฆษณาต้องระบุตัวแปรที่เผยแพร่อย่างชัดเจน
- การมีอยู่ของผู้เผยแพร่สำหรับผู้สมัครใช้บริการ (E504): ผู้สมัครใช้บริการที่กำหนดไว้ทุกรายต้องมีผู้เผยแพร่ที่เกี่ยวข้องอย่างน้อย 1 รายสำหรับประเภทและตัวแปรที่ระบุ
- ประเภทผู้เผยแพร่โฆษณาที่ถูกต้อง (E601): ผู้เผยแพร่โฆษณาต้องอ้างอิงประเภทที่สอดคล้องกับข้อความ Protobuf ที่มีอยู่
- ข้อกำหนดคำอธิบายประกอบการเผยแพร่ (E602): ประเภทข้อความ protobuf ที่ผู้เผยแพร่อ้างอิงต้องมีคำอธิบายประกอบ
SdvPublication - การใช้ตัวแปรที่ถูกต้อง (E606): หากผู้เผยแพร่โฆษณาระบุตัวแปร (อินสแตนซ์) ตัวแปรนั้นต้องมีอยู่ใน
instances_enumที่กำหนดไว้สำหรับประเภทสื่อเผยแพร่ใน protobuf - เงื่อนไขข้อกำหนดของตัวแปร (E607): ผู้เผยแพร่โฆษณาจะระบุตัวแปร (อินสแตนซ์) ที่ชัดเจนได้ก็ต่อเมื่อประเภทการเผยแพร่กำหนด
instances_enumใน protobuf - การตั้งชื่อหัวข้อ (E20D, E20F): หัวข้อต้องเป็นตัวพิมพ์เล็กและใช้ขีดกลาง และมีความยาวไม่เกิน 127 อักขระ
- ความไม่ซ้ำกันของหัวข้อ (E314): หัวข้อต้องไม่ซ้ำกันทั่วโลกในผู้เผยแพร่เนื้อหาทั้งหมด
- ข้อกำหนดด้านความจุ (E406, E407): ต้องระบุความจุและต้องเป็นเลขคู่ >= 2
ผู้สมัคร
ส่วนนี้จะอธิบายประเภทข้อความสำหรับผู้สมัครใช้บริการ
ไวยากรณ์ EBNF
Subscriber = "{" , { SubscriberElement } , "}" ;
SubscriberElement =
"message" , ":" , String |
"topic" , ":" , String
;
คำจำกัดความของ Proto
// Represents a subscriber within a service bundle.
message Subscriber {
// Required. The type of data being subscribed to.
string message = 4;
// Required. Specific topic(s) of the message to subscribe to.
// Must match the publisher's topic.
repeated string topic = 6;
}
ตัวอย่างการใช้งาน
subscriber {
message: "SeatHeating"
topic: "driver-seat"
}
คำอธิบาย
ข้อความ Subscriber จะกำหนดตัวรับการเผยแพร่ที่ ServiceBundle มีให้ ข้อความนี้จะระบุประเภทข้อมูลที่สมัครรับข้อมูลและหัวข้อที่เฉพาะเจาะจงของสิ่งพิมพ์นั้น หากมีผู้เผยแพร่หลายรายสำหรับหัวข้อหนึ่ง ผู้สมัครใช้บริการจะได้รับข้อความที่เผยแพร่โดยผู้เผยแพร่ทั้งหมด
ข้อจำกัด
- การมีอยู่ของผู้เผยแพร่ (E504): สำหรับผู้สมัครใช้บริการที่กำหนดไว้ทุกราย ต้องมีผู้เผยแพร่ที่เกี่ยวข้องอย่างน้อย 1 รายที่เผยแพร่ประเภทและตัวแปรของสิ่งพิมพ์ที่ระบุ
- ประเภทการสมัครใช้บริการที่ถูกต้อง (E608): ผู้สมัครใช้บริการต้องอ้างอิงประเภทที่สอดคล้องกับข้อความ Protobuf ที่มีอยู่ซึ่งกำหนดด้วยคำอธิบายประกอบ
SdvPublication - การสมัครใช้บริการตัวแปรที่ถูกต้อง (E609): หากผู้สมัครใช้บริการระบุตัวแปร (อินสแตนซ์) ตัวแปรนั้นต้องเป็นค่าที่ถูกต้องซึ่งกำหนดไว้ภายใน
instances_enumของประเภทการเผยแพร่ Protobuf ที่เกี่ยวข้อง - ต้องระบุหัวข้อ (E408): ต้องระบุหัวข้อสำหรับผู้สมัครใช้บริการ
- การประกาศหัวข้อซ้ำ (E311): ไม่ควรประกาศหัวข้อของผู้สมัครใช้บริการซ้ำในแพ็กเกจบริการเดียวกัน
เซิร์ฟเวอร์ RPC
ส่วนนี้จะอธิบายประเภทข้อความของเซิร์ฟเวอร์ RPC
ไวยากรณ์ EBNF
Server = "{" , { ServerElement } , "}" ;
ServerElement =
"service" , ":" , String |
"channel" , ":" , String |
"service_unit_name" , ":" , String
;
คำจำกัดความของ Proto
// Represents an RPC server within a service bundle.
message Server {
// Deprecated. Name of the service unit.
string service_unit_name = 3 [ deprecated = true ];
// Required. Name of the RPC service.
string service = 4;
// Required. Name of the RPC channel.
// Must be in lowercase dash-case.
string channel = 5;
}
ตัวอย่างการใช้งาน
server {
service: "SetTemperature"
channel: "temp-setter"
}
คำอธิบาย
ข้อความ Server จะกำหนดเซิร์ฟเวอร์ RPC ที่ ServiceBundle มีให้ ข้อความนี้ระบุบริการที่เซิร์ฟเวอร์ใช้และแชแนล RPC
เซิร์ฟเวอร์ RPC จะแสดงชุดเมธอดที่ไคลเอ็นต์สามารถเรียกใช้จากระยะไกลได้ ช่อง service จะระบุชื่อของบริการ RPC ที่เซิร์ฟเวอร์ใช้ บริการนี้กำหนดไว้ในไฟล์ Proto และนำไปใช้ในโค้ด Rust ที่กำหนดเอง บริการ RPC อาจรวมถึงเมธอด Unary, Client-Streaming และ Server-Streaming ตามที่กำหนดไว้ในคำจำกัดความของบริการ Protobuf ฟิลด์ channel จะกำหนดปลายทางการสื่อสารและเป็นฟิลด์ที่ต้องกรอก (E409)
ข้อจำกัด
- คำจำกัดความของบริการ (E603): เซิร์ฟเวอร์ RPC ต้องระบุค่า
serviceที่สอดคล้องกับค่าserviceของ RPC แบบ Protobuf ที่มีอยู่ - ขีดจำกัดของเซิร์ฟเวอร์ต่อบริการ (E100): ภายในแพ็กเกจบริการเดียว RPC
serviceที่เฉพาะเจาะจงจะแสดงได้โดยคำจำกัดความของเซิร์ฟเวอร์อย่างมาก 1 รายการ - การตั้งชื่อแชแนล (E20E): แชแนล RPC ต้องเป็นตัวพิมพ์เล็กและใช้ขีดกลาง
- Channel mandatory (E409): ต้องระบุแชแนล RPC
- ความไม่ซ้ำกันของช่อง (E40B): ช่อง RPC ต้องใช้โดยบริการเดียวเท่านั้น
ไคลเอ็นต์ RPC
ส่วนนี้จะอธิบายประเภทข้อความของไคลเอ็นต์ RPC
ไวยากรณ์ EBNF
Client = "{" , { ClientElement } , "}" ;
ClientElement =
"service" , ":" , String |
"channel" , ":" , String
;
คำจำกัดความของ Proto
// Represents an RPC client within a service bundle.
message Client {
// Required. Name of the RPC service.
string service = 2;
// Required. Name of the RPC channel.
// Must match the server's channel and be in lowercase dash-case.
string channel = 3;
}
ตัวอย่างการใช้งาน
client {
service: "SetTemperature"
channel: "temp-setter"
}
คำอธิบาย
client กำหนดไคลเอ็นต์ RPC ที่ ServiceBundle ใช้ client จะระบุบริการที่ไคลเอ็นต์โต้ตอบด้วยและช่องทางที่จะเชื่อมต่อ ไคลเอ็นต์สามารถโต้ตอบกับเมธอดแบบ Unary, การสตรีมฝั่งไคลเอ็นต์ และการสตรีมฝั่งเซิร์ฟเวอร์ ทั้งนี้ขึ้นอยู่กับคำจำกัดความของบริการ
ข้อจำกัด
- คำจำกัดความของบริการ (E60A): ไคลเอ็นต์ RPC ต้องระบุ
serviceที่สอดคล้องกับคำจำกัดความserviceของ protobuf ที่มีอยู่ - แหล่งที่มาของบริการที่ไม่ซ้ำกัน (E60B): คำจำกัดความ
serviceของ protobuf ที่อ้างอิงโดยserviceของไคลเอ็นต์ RPC ต้องได้รับการกำหนดอย่างไม่ซ้ำกัน (ไม่ได้กำหนดหลายครั้ง) ในไฟล์ protobuf ทั้งหมด - Channel mandatory (E409): ต้องระบุแชแนล RPC
การกำหนดค่าบิวด์
ส่วนนี้จะอธิบายประเภทข้อความการกำหนดค่าบิลด์
ไวยากรณ์ EBNF
BuildConfiguration = "{" , BuildConfigurationElement, "}" ;
BuildConfigurationElement =
"target_name" , ":" , String |
"skip_codegen" , ":" , Boolean
;
คำจำกัดความของ Proto
// Defines additional information used to configure build settings
message BuildConfiguration {
/// Build target name
optional string target_name = 1;
// Do not generate code for this service bundle
optional bool skip_codegen = 2;
}
ตัวอย่างการใช้งาน
build_cfg {
target_name: "my_custom_target_name"
skip_codegen: false
}
คำอธิบาย
BuildConfiguration กำหนดค่าพารามิเตอร์ที่ไม่ได้มาตรฐานของ ServiceBundle สำหรับ
การสร้างโค้ด การกำหนดค่าบิลด์ทั้งหมดเป็นแบบไม่บังคับ
target_name(ไม่บังคับstring): ระบุชื่อของเป้าหมายบิลด์ในไฟล์Android.bpใช้ตัวเลือกนี้เพื่อตั้งชื่อเป้าหมายให้สั้นกว่าชื่อที่เลือกโดยอัตโนมัติskip_codegen(ไม่บังคับbool): ระบุว่าควรข้ามการสร้างโค้ดสำหรับแพ็กเกจบริการนี้หรือไม่ หากตั้งค่าเป็นtrueระบบจะไม่สร้างรหัสสำหรับแพ็กเกจบริการนี้ ซึ่งจะเป็นประโยชน์สำหรับแพ็กเกจบริการที่ติดตั้งใช้งานด้วยตนเอง โดยค่าเริ่มต้น ระบบจะตั้งค่านี้เป็นfalse
ข้อจำกัด
- รูปแบบชื่อเป้าหมาย (E205, E206, E207, E208): หากมีการระบุชื่อเป้าหมายบิลด์ที่กำหนดเอง (
build_cfg.target_name) ชื่อดังกล่าวต้องเป็นไปตามการจัดรูปแบบ Snake Case อย่างเคร่งครัด ดังนี้- โดยต้องมีเฉพาะตัวอักษรพิมพ์เล็ก (
aถึงz) ตัวเลข (0ถึง9) และขีดล่าง (_) เท่านั้น - ต้องไม่มีขีดล่าง (
__) ติดกัน - โดยต้องไม่ขึ้นต้นด้วยขีดล่าง
- และต้องไม่ลงท้ายด้วยขีดล่าง
- โดยต้องมีเฉพาะตัวอักษรพิมพ์เล็ก (
- ความไม่ซ้ำกันของชื่อเป้าหมาย (E301):
build_cfg.target_nameที่ผู้ใช้กำหนดต้องไม่ซ้ำกันในระบบบิลด์ และต้องไม่ขัดแย้งกับชื่อเป้าหมายที่สร้างขึ้นโดยอัตโนมัติซึ่งได้มาจากคำจำกัดความของแพ็กเกจบริการอื่นๆ