Contoh kode inti

Contoh kode layanan SDV Core di /system/software_defined_vehicle/samples memungkinkan Anda mulai membangun layanan. Setiap contoh berisi file README yang menjelaskan kasus penggunaan.

Ringkasan direktori contoh

Tabel berikut mencantumkan direktori contoh referensi di system/software_defined_vehicle/samples dan panduan dokumentasi yang sesuai:

Direktori sampel Deskripsi Panduan dokumentasi
system/software_defined_vehicle/samples/quickstart Contoh paket layanan Rust end-to-end yang menunjukkan publikasi, langganan, dan RPC VSIDL antara paket Manager dan Monitor. Panduan memulai: Membuat dan menjalankan paket layanan SDV
system/software_defined_vehicle/samples/vsidl Lihat katalog VSIDL, definisi protobuf, dan pola implementasi paket layanan. Mengimplementasikan logika bisnis
system/software_defined_vehicle/samples/concal Contoh klien untuk membaca dan memperbarui parameter konfigurasi dan kalibrasi kendaraan. Konfigurasi dan kalibrasi
system/software_defined_vehicle/samples/health Paket layanan yang dipantau kondisi dan contoh pemantauan kualitas layanan (QoS). Pemantauan kondisi
system/software_defined_vehicle/samples/oem_partition_update_client Layanan contoh yang menggunakan crate sdv_oem_updater untuk memicu dan me-roll back update partisi /oem_ab. Update partisi AB OEM
system/software_defined_vehicle/samples/sdv_gateway Aplikasi contoh IVI Native dan Java (NativeSdvGatewayTestApp dan SdvCarMonitorTestApp) yang berkomunikasi dengan layanan SDV Core melalui Gateway SDV. Menggunakan Gateway SDV di IVI
system/software_defined_vehicle/samples/telemetry Sumber data telemetri di perangkat dan contoh simulator. Sumber data

Menggunakan logging API

Untuk mempelajari lebih lanjut petunjuk yang diberikan, lihat:

Contoh log dasar

logging.cpp menampilkan penulisan ke buffer main, system, dan radio. Untuk membaca deskripsi singkat tentang buffering log yang tersedia, lihat Menampilkan buffering log alternatif.

  • Untuk menjalankan contoh tanpa log bersyarat, seperti ALOGI_IF:

    logging_sdv_sample
    
  • Untuk menjalankan contoh dan mencetak log bersyarat, seperti ALOGI_IF:

    LOGIF=1 logging_sdv_sample
    

Contoh logging terstruktur

File contoh: structured_logging.cpp

  • Untuk menjalankan contoh, yang menulis log ke buffer log events:

    structured_logging_sdv_sample
    

Buffer log event, security, dan stats menyimpan data terstruktur, bukan teks bebas.

Data terstruktur dicatat ke dalam log menggunakan API daftar peristiwa, yang selalu dicatat ke dalam log dengan prioritas INFO dan ID tag numerik.

File .logtags dapat ditentukan dengan atribut logtags di Android.bp. Jika disediakan, logcat akan menggunakannya untuk mendapatkan nama tag dari ID tag numerik. Nama tag kemudian dapat digunakan untuk memfilter log terstruktur. Untuk mengetahui detail dan deskripsi format file, lihat komentar di file logcat event.logtags.

Selama proses build, semua file logtags digabungkan dan ditempatkan ke dalam file /system/etc/event-log-tags di image sistem Android.

Mengompilasi contoh pemfilteran log waktu

File contoh: compile_time_log_filtering.cpp

Contoh ini berisi makro yang dapat Anda sesuaikan untuk menghapus beberapa log dari file yang dapat dieksekusi. Lihat kode sumber untuk mengetahui detailnya.

Contoh pemfilteran log: log_filtering.cpp

  • Untuk menjalankan contoh, tetapkan prioritas log minimum ke WARN:

    LOGLEVEL=WARN log_filtering_sdv_sample
    

Pemfilteran log dipengaruhi oleh properti sistem. Untuk semua log dengan :

  • log.tag.<tag>
  • persist.log.tag.<tag>

Untuk semua log dalam sistem:

  • log.tag
  • persist.log.tag

Untuk memilih level log yang dipilih, yang diperiksa secara berurutan, setiap nilai dapat ditetapkan ke V, D, I, W, atau E.

Level log efektif adalah level yang ditetapkan pada properti sistem pertama yang memiliki nilai, yang mungkin lebih rendah atau lebih tinggi daripada level log yang ditetapkan oleh aplikasi dengan panggilan __android_log_set_minimum_priority. Jika tidak ada properti yang ditetapkan, level yang dikonfigurasi dengan __android_log_set_minimum_priority akan berlaku.

Untuk mengetahui detailnya, lihat Ringkasan sistem logging.

  • Jalankan contoh, dengan menetapkan tag log default ke example_tag:

    LOGTAG=example_tag log_filtering_sdv_sample
    

Contoh ini juga berisi definisi makro LOG_TAG yang dijadikan sebagai komentar yang dapat Anda gunakan untuk menetapkan tag log untuk semua pesan log. Tag yang ditetapkan dengan cara ini akan menggantikan tag yang ditetapkan saat runtime dengan __android_log_set_default_tag.

Jika makro LOG_TAG tidak ditentukan dan aplikasi tidak memanggil __android_log_set_default_tag, tag defaultnya adalah hasil dari getprogname(). Misalnya, nama file yang dapat dieksekusi.