মিডলওয়্যার তৈরি করে এবং আপনার নিজস্ব কোড লেখার পরে, আপনি আপনার সার্ভিস বান্ডেলগুলিকে APEX ফাইল হিসাবে ডেপ্লয় করতে পারেন।
SDV কনফিগারেশন ফাইল তৈরি করুন:
মরিচা
নিম্নলিখিত কমান্ডটি চালিয়ে SDV কনফিগারেশন ফাইলগুলি তৈরি করুন:
vsidlc -c /path/to/catalog -o /path/to/output --apex--apexফ্ল্যাগ সহvsidlcচালালে স্বয়ংক্রিয়ভাবে সমস্ত প্রয়োজনীয় কনফিগারেশন ফাইল তৈরি হয়, যার মধ্যে রয়েছে:- এপেক্স ম্যানিফেস্ট (
apex_manifest.json) - এসডিভি মেটাডেটা ম্যানিফেস্ট (
sdv_service_bundles_manifest.textproto) - লিঙ্কার কনফিগারেশন (
linker.config.json) - SELinux ফাইল কনটেক্সট (
file_contexts) - পাবলিক ও প্রাইভেট কী (
.avbpubkeyএবং.pem) - অনুমতি ঘোষণা এবং অর্কেস্ট্রেশন কনফিগারেশন
- একটি
Android.bpফাইল যা সমস্ত প্রয়োজনীয় Soong মডিউল সংজ্ঞায়িত করে।
তৈরি করা কনফিগারেশনগুলো আপনি এখানে খুঁজে পাবেন:
/path/to/output/apex/এবং,
/path/to/output/configs/- এপেক্স ম্যানিফেস্ট (
সি++
এই অপরিহার্য এক্সিকিউশন মেটাডেটা ফিল্ডগুলো সহ
service_bundle.manifest.textprotoনামে একটি SDV মেটাডেটা ম্যানিফেস্ট ফাইল তৈরি করুন:- নামকরণের রীতি অনুযায়ী পরিষেবার নাম
- সার্ভিস বান্ডেল সংস্করণের পূর্ণসংখ্যা এবং স্ট্রিং উপস্থাপনা
- পূর্বে তৈরি করা লাইব্রেরির পথ
সার্ভিস বান্ডেল প্যাকেজিং এবং ডেপ্লয়মেন্টের জন্য অপরিহার্য সার্ভিস বান্ডেল মেটাডেটা প্রস্তুত করা বাধ্যতামূলক।
# 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" }একটি নতুন লিঙ্কার কনফিগারেশন ফাইল তৈরি করুন,
linker.config.json:{ "visible": true }এই ফিল্ডগুলো দিয়ে একটি নতুন
apex_manifest.jsonফাইল তৈরি করুন:- অনন্য এসডিভি প্যাকেজের নাম
- এপেক্স এর সংস্করণ
- এসডিভি কমস লাইব্রেরির উপর নির্ভরতা
{ "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" ] }একটি পাবলিক কী (
apex_name.apex_key .avbpubkeyএবং একটি প্রাইভেট কী (apex_name.apex_key .pemতৈরি করুন।একটি নতুন SELinux ফাইল কনটেক্সট
apex_file_contextsতৈরি করুন।(/.*)? u:object_r:system_file:s0আরও জানতে, নিরাপত্তা প্রসঙ্গ এবং বিভাগসমূহ দেখুন।
একটি নতুন বা বিদ্যমান
Android.bpফাইলে প্রি-বিল্ট টার্গেট তৈরি করুন:// 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", }নতুন বা বিদ্যমান
Android.bpফাইলে একটি নতুন APEX মডিউল তৈরি করুন। APEX মডিউলের নাম হিসেবে SDV প্যাকেজের নামটি ব্যবহার করুন।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, }
একটি SDV ইমেজে নতুন মেকফাইলটি অন্তর্ভুক্ত করতে, প্রোডাক্ট মেকফাইলের
PRODUCT_PACKAGESএ নতুন APEX মডিউলটি যোগ করুন। উদাহরণস্বরূপ,sdv_samples_core_services.mkদেখুন।আপনি যদি কাটলফিশ ব্যবহার করেন, তাহলে একটি ডিভাইস চালু করতে নিম্নলিখিত কমান্ডটি চালান:
sdv-cf create --instance_name=instance1সিস্টেম বুট করার সময় সার্ভিস বান্ডেলটি চালান:
# 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
সার্ভিস বান্ডেল নির্ভরতা ব্যবস্থাপনা
কিছু ক্ষেত্রে, APEX-এর আকার ও সার্ভিস বান্ডেলের মেমরি ফুটপ্রিন্ট কমাতে এবং সার্ভিস বান্ডেলগুলোর স্টার্টআপ টাইম উন্নত করতে আপনি সার্ভিস বান্ডেল ডিপেন্ডেন্সিগুলোর স্ট্যাটিক লিঙ্কিং ব্যবহার করতে পারেন। এই ধরনের APEX-গুলোর মধ্যে রয়েছে:
- একক পরিষেবা বান্ডেল
- বেশ কয়েকটি সার্ভিস বান্ডেল যেগুলোর মধ্যে অনেক সাধারণ নির্ভরতা নেই
স্ট্যাটিক লিঙ্কিং সক্রিয় করতে, সার্ভিস বান্ডেল লাইব্রেরি সংজ্ঞায় নিম্নলিখিত প্রোপার্টিগুলো যোগ করুন:
// 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"],
}
প্রতিটি পরিস্থিতির জন্য, আমরা আপনাকে নিশ্চিত করতে পরামর্শ দিই যে ডিপেন্ডেন্সিগুলোর সাথে স্ট্যাটিক লিঙ্কিংয়ের ফলে সার্ভিস বান্ডেলগুলোর মেমরি ফুটপ্রিন্ট এবং স্টার্ট টাইমের উন্নতি হয় কিনা।
ডিবাগ (ডাম্পসিস)
লাইফসাইকেল ম্যানেজার ` dumpsys` ইন্টারফেসটি প্রয়োগ করে। এই ইন্টারফেসটি ব্যবহারকারীকে সেইসব সার্ভিস বান্ডেলের তালিকা প্রদর্শন করে, যেগুলো ` created বা started অবস্থায় রয়েছে। ইন্টারফেসটি সার্ভিস বান্ডেল প্রসেসের FQIN বা UID-ও প্রদর্শন করে।
আপনার সার্ভিস বান্ডেলগুলোর বর্তমান অবস্থা ও শনাক্তকারীগুলো দেখতে, নিম্নলিখিত কমান্ডটি চালান:
# Grant root access.
adb root
# Execute dumpsys to see service bundles state
adb shell dumpsys google.sdv.lifecycle.ILifecycleManager/default
এরপর কী?
vsidlc স্বয়ংক্রিয়ভাবে কার্যকর করতে এবং IDE প্লাগইনকে ডিপেন্ডেন্সিগুলির সাথে কাজ করার জন্য সক্ষম করতে, স্বয়ংক্রিয় ক্যাটালগ আপডেট এবং LSP ইন্টিগ্রেশন দেখুন।