Setelah membuat middleware dan menulis kode kustom, Anda dapat men-deploy paket layanan sebagai file APEX.
Buat file konfigurasi SDV:
Rust
Buat file konfigurasi SDV dengan menjalankan:
vsidlc -c /path/to/catalog -o /path/to/output --apexMenjalankan
vsidlcdengan flag--apexakan otomatis membuat semua file konfigurasi yang diperlukan, termasuk:- Manifes APEX (
apex_manifest.json) - Manifes metadata SDV (
sdv_service_bundles_manifest.textproto) - Konfigurasi linker (
linker.config.json) - Konteks file SELinux (
file_contexts) - Kunci publik dan pribadi (
.avbpubkeydan.pem) - Pernyataan Izin dan konfigurasi orkestrasi
- File
Android.bpyang menentukan semua modul Soong yang diperlukan.
Anda dapat menemukan konfigurasi yang dibuat di bagian:
/path/to/output/apex/dan,
/path/to/output/configs/- Manifes APEX (
C++
Buat file manifes metadata SDV,
service_bundle.manifest.textprotodengan kolom metadata eksekusi penting ini:- Nama layanan sesuai dengan konvensi penamaan
- Representasi bilangan bulat dan string dari versi paket layanan
- Jalur ke library yang dibuat sebelumnya
Mempersiapkan metadata paket layanan penting wajib dilakukan untuk pengemasan dan deployment paket layanan.
# proto-file: //system/software_defined_vehicle/core_services/service_bundles_registry/proto/sdv_service_bundles_manifest.proto # proto-message: SdvServiceBundleManifestEntry # SDV service bundle metadata definition with mandatory fields. sdv_service_bundle_metadata { # Service bundle name. name: "ServiceBundleName" # Service bundle integer version. version_number: 42 # Service bundle version as a string. version_name: "42.alpha" # Service bundle library path. native_library_path: "lib64/libservice_bundle.so" }Buat file konfigurasi linker baru,
linker.config.json:{ "visible": true }Buat file
apex_manifest.jsonbaru dengan kolom berikut:- Nama paket SDV unik
- Versi APEX
- Dependensi pada library Comms SDV
{ "name": "com.sdv.oem.apex_and_module_name", "version": 1, "requireNativeLibs": [ "libsdv_comms_ctx_ffi.so", "libsdv_comms_dt_ffi.so", "libsdv_comms_id_ffi.so", "libsdv_comms_sd_ffi.so" ] }Buat kunci publik,
apex_name.apex_key.avbpubkeydan kunci pribadi,apex_name.apex_key.pem.Buat konteks file SELinux baru
apex_file_contexts.(/.*)? u:object_r:system_file:s0Untuk mempelajari lebih lanjut, lihat Konteks dan kategori keamanan.
Buat target yang telah dibuat sebelumnya dalam file
Android.bpbaru atau yang sudah ada:// SDV manifest file prebuilt. prebuilt_etc { name: "com.sdv.oem.apex_and_module_name.service_bundles_manifest", // The source filename of the manifest file. src: "service_bundle.manifest.textproto", // The name of the installed file needs be `sdv_service_bundles_manifest.textproto`. filename: "sdv_service_bundles_manifest.textproto", // Disable direct installation of the prebuilt to one of the partitions. // The manifest is used only inside of an apex. installable: false, } // The linker config to allow libraries for the apex to be linkable. linker_config { name: "com.sdv.oem.apex_and_module_name. linker_config", src: "linker.config.json", // Disable direct installation of the prebuilt to one of the partitions. // The linker configuration is used only inside of an apex. installable: false, } // Key to be used for signing the apex. apex_key { name: "apex_name.apex_key", public_key: "apex_name.apex_key.avbpubkey", private_key: "apex_name.apex_key.pem", }Buat modul APEX baru dalam file
Android.bpbaru atau yang sudah ada. Gunakan nama paket SDV sebagai nama modul APEX.apex { name: "com.sdv.oem.apex_and_module_name", // The service bundle(s) to be included in the apex. native_shared_libs: [ "libservice_bundle", ], prebuilts: [ // SDV service bundles manifest file. "com.sdv.oem.apex_and_module_name.service_bundles_manifest", // Linker configuration to enable loading library from apex. "com.sdv.oem.apex_and_module_name.linker_config", ], // Json manifest file describes metadata of the APEX package. // The 'name' field from the JSON is used as a mounting point. manifest: "apex_manifest.json", // Setting the security contexts to files in this APEX bundle. file_contexts: "apex_file_contexts", // Name of the apex_key module that provides the private key to sign the APEX bundle. key: "apex_name.apex_key", // Mark apex as non-updatable for now, this might be revisited going forward. updatable: false, // Service bundle package is installed into /product partition. product_specific: true, }
Untuk menyertakan makefile baru dalam image SDV, tambahkan modul APEX baru ke
PRODUCT_PACKAGESdi makefile produk. Misalnya, lihatsdv_samples_core_services.mk.Jika Anda menggunakan Cuttlefish, jalankan perintah berikut untuk memulai perangkat:
sdv-cf create --instance_name=instance1Jalankan paket layanan saat sistem di-boot:
# Grant root access. adb root # Launch the new service bundle. adb shell sdv_service_bundle start \ local-vm:com.sdv.oem.apex_and_module_name.ServiceBundleName/instance-1
Pengelolaan dependensi paket layanan
Dalam beberapa skenario, Anda dapat menggunakan penautan statis dependensi paket layanan untuk mengurangi ukuran APEX dan footprint memori paket layanan, serta meningkatkan waktu startup paket layanan. Skenario ini mencakup APEX dengan:
- Paket layanan tunggal
- Beberapa paket layanan yang tidak memiliki banyak dependensi umum
Untuk mengaktifkan penautan statis, tambahkan properti berikut ke definisi library paket layanan:
// Service bundle library.
rust_ffi_shared {
// See rust_ffi_shared basic template.
...
// uses static linking for the dependencies
prefer_rlib: true,
// needed to correctly resolve commstack deps
ld_flags: ["-Wl,--no-as-needed"],
}
Untuk setiap situasi, sebaiknya konfirmasi bahwa penautan statis ke dependensi akan meningkatkan footprint memori dan waktu mulai paket layanan.
Debug (dumpsys)
Pengelola siklus proses mengimplementasikan antarmuka dumpsys. Antarmuka ini menampilkan daftar paket layanan kepada pengguna yang berada dalam status created atau started. Antarmuka ini juga menampilkan FQIN atau UID dari proses paket layanan.
Untuk melihat status dan ID paket layanan saat ini, jalankan:
# Grant root access.
adb root
# Execute dumpsys to see service bundles state
adb shell dumpsys google.sdv.lifecycle.ILifecycleManager/default
Langkah berikutnya
Untuk menjalankan vsidlc secara otomatis dan mengaktifkan plugin IDE agar dapat berfungsi dengan
dependensi, lihat Update katalog otomatis dan integrasi LSP.