Vehicle Services Interface Definition Language (VSIDL) ara yazılımı, SDV ekosisteminin kullanımını basitleştirmek için yazılımla tanımlanmış araç (SDV) iletişim yığınının üzerinde bir soyutlama katmanı oluşturan bir dizi Rust kitaplığını tanımlar. Ara katman yazılımı, hizmetlerin birbirleriyle iletişim kurması ve etkileşime girmesi için standartlaştırılmış bir yol sağlar. Hem VSIDLC tarafından oluşturulan kod hem de özel kodunuz bu kitaplıkları kullanır.
Vehicle Services Interface Definition Language derleyicisi (VSIDLC) tanımları doğrular, derleme işlemi sırasında Rust ara katman yazılımı kodu oluşturmak için genrule hedeflerini içeren derleme dosyaları (Android.bp) oluşturur ve katalogdaki VSIDL ve protobuf dosyalarından dağıtım yapılandırmaları oluşturur. Şekil 1'de VSIDLC'ye giriş ve VSIDLC tarafından oluşturulan çıkış gösterilmektedir:
Şekil 1. VSIDLC girişleri ve çıkışları.
Şemayla ilgili açıklama aşağıda verilmiştir:
Giriş olarak, katalog olarak bilinen dizinler içinde düzenlenmiş aşağıdaki dosyaları sağlarsınız:
- Proto dosyaları (
.protouzantılı) VSIDL tarafından tanımlanan hizmet birimleri arasında değiştirilen veri yapılarını içerir. - VSIDL dosyaları (
.vsidluzantılı) hizmet paketlerini, hizmet birimlerini ve birim türü sahipliğini tanımlar. - Her katalog dizinindeki
Android.bpdosyaları, katalogdaki tüm proto dosyaları içinrust_protobufderleme hedeflerini tanımlar. VSIDLC, Rust'ta oluşturulan protobuf mesaj türlerine referans vermek için bu hedeflerde belirtilencrate_nameöğesini kullanır.
- Proto dosyaları (
Aşağıdaki dosyaları oluşturmak için VSIDLC'yi çalıştırırsınız:
Her hizmet paketi klasöründe
Android.bpdosya oluşturulur.--genruledeğerini ayarlarsanız bu hedefler, derleme işlemi sırasında güncel Rust dosyaları oluşturur ve gereklirust_protobufkitaplığı bağımlılıklarını içerir.Her hizmet paketi için
service_bundle.rsdosyaları oluşturulur ve bu dosyalar, ara katman yazılımı bileşenleriyle etkileşim için anastructve işlevleri içerir.Pakete ait her RPC hizmeti için
lib.rsdosyaları oluşturulur ve RPC hizmetinin adını taşıyan bir alt klasöre yerleştirilir. Apple tarafından yedeklenen bazı dosyalar:Interfaceözelliği, sunucu tarafı mantığını uygular.Bir
Clientyapısı, RPC hizmetine çağrı yapar.VSIDL dosyasında bir
diagnostics_declarationvarsadiagnostics.rsdosyaları oluşturulur. Bu dosyalar, UDS tabanlı teşhis için gerekli bağlamaları sağlar.--apexişareti kullanıldığında dağıtım ve güvenlik yapılandırmaları oluşturulur. Bu dosyalarapex/veconfigs/dizinlerine yerleştirilir. Hizmetten hizmete iletişim için gereken düzenleme.textprotodosyalarını ve güvenlik politikalarını (izinler) içerir.--servicesişareti kullanıldığında hizmet için standart bir kod oluşturulur. Bu,services/dizinine yerleştirilir ve uygulamanızı hızlı bir şekilde başlatmak içinmain.rsdosyası da dahil olmak üzere bir Rust uygulaması iskeleti içerir.
VSIDLC'yi çalıştırma
VSIDLC'yi çalıştırmak için:
Ortamınızı ayarlamadıysanız
source build/envsetup.shkomutunu çalıştırın.VSIDLC'yi oluşturmak için aşağıdaki komutu çalıştırın:
m vsidlcVSIDL katalog dizininizde gerekli derleme, protobuf ve VSIDL dosyalarının bulunduğundan emin olun.
vsidlckomutunu çalıştırın:vsidlc -c path_to_catalog -o output_directory -pNerede:
-c path_to_catalogana katalog dizininin yolunu tanımlar.-o output_directory,generated_rsçıkış dizininin oluşturulduğu üst dizini tanımlar.- (isteğe bağlı)
--apex, düzenleme ve güvenlik yapılandırması yapılarını oluşturur. - (isteğe bağlı)
--services, hızlı başlangıç için Rust uygulama iskeleti oluşturur. - (isteğe bağlı)
-p, yeni dosyalar oluşturmadan önce mevcut oluşturulmuş dizinleri (ör.generated_rsve varsaapex,configsveyaservices) siler. - (isteğe bağlı)
--genrule, Rust kodu yerineAndroid.bpgenrules oluşturur. Genrules, oluşturulan eserlerin sürüm denetimi altına alınmasını önlemek içinmçalıştırılırken gerekli Rust kodunu anında oluşturur.
generated_rsdizini oluşturulur. Bu dizindeAndroid.bpve oluşturulan ara yazılım dosyaları bulunur. Bu dizin, tanımladığınız hizmet paketlerinin tam nitelikli adlarına karşılık gelen alt dizinler halinde düzenlenir.
Bağımlılıkları yönetme
VSIDLC, varsayılan olarak yalnızca ana katalog için kod oluşturur, bağımlılık katalogları için oluşturmaz. Kataloğunuzda diğer kataloglarda tanımlanan türler veya hizmet birimleri kullanılıyorsa -d işaretini kullanarak her bağımlılık kataloğunun yolunu belirtin:
vsidlc -c path_to_catalog -o output_directory -d dep1_path -d dep2_path ...
Geçişli bağımlılıklar (bağımlılıkların bağımlılıkları) dahil olmak üzere bağımlılık grafiğinin tamamı için yollar sağlamanız gerekir. Örneğin, aşağıdaki katalog bağımlılık ağacına sahip olduğunuzu varsayalım:
Şekil 2. Örnek VSIDLC bağımlılık ağacı.
Ağaçtaki her katalog için ara yazılım oluşturmak üzere aşağıdaki komutları çalıştırmanız gerekir:
| Hedef katalog | Bağımlılıklar | Komut |
|---|---|---|
| SDV Core kataloğu | Yok | vsidlc -o ./generated -c ./path/to/sdv_core_catalog |
| Teşhis kataloğu | SDV Core kataloğu | vsidlc -o ./generated -c ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
| SOMEIP kataloğu | Teşhis kataloğu, SDV Core kataloğu | vsidlc -o ./generated -c ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
| OEM kataloğu | Teşhis kataloğu, SOMEIP kataloğu, (geçişli olarak) SDV Core kataloğu | vsidlc -o ./generated -c ./path/to/oem_catalog -d ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
Rust çıkışını biçimlendirme
VSIDL, varsayılan olarak Rust çıktısını biçimlendirmek için rustfmt'yi kullanır. Varsayılan değerin düzgün çalışması için $ANDROID_BUILD_TOP ortam değişkenini veya RUSTFMT_PATH ve RUSTFMT_TOML_PATH ortam değişkenlerini ayarlayın. Rust'ın varsayılan olarak kullandığı biçimi değiştirmek için --rust-formatter seçeneğini pretty-please veya none ile birlikte kullanın:
Çıkış biçimini
prettypleaseolarak değiştirmek içinpretty-pleasedeğerini kullanın:vsidlc -c path_to_catalog -o output_directory -p --rust-formatter pretty-pleaseÇıkış biçimini none olarak değiştirmek için
nonedeğerini kullanın:vsidlc -c path_to_catalog -o output_directory -p --rust-formatter none
Sonraki adımlar
Ara yazılım oluşturduktan sonra İşletme mantığınızı uygulama başlıklı makaleyi inceleyin.