পরিষেবা বান্ডিলগুলি তৈরি এবং স্থাপন করুন

মিডলওয়্যার তৈরি করে এবং আপনার নিজস্ব কোড লেখার পরে, আপনি আপনার সার্ভিস বান্ডেলগুলিকে APEX ফাইল হিসাবে ডেপ্লয় করতে পারেন।

  1. SDV কনফিগারেশন ফাইল তৈরি করুন:

    মরিচা

    1. নিম্নলিখিত কমান্ডটি চালিয়ে 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/
      

    সি++

    1. এই অপরিহার্য এক্সিকিউশন মেটাডেটা ফিল্ডগুলো সহ 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"
      }
      
    2. একটি নতুন লিঙ্কার কনফিগারেশন ফাইল তৈরি করুন, linker.config.json :

      { "visible": true }
      
    3. এই ফিল্ডগুলো দিয়ে একটি নতুন 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"
        ]
      }
      
    4. একটি পাবলিক কী ( apex_name.apex_key .avbpubkey এবং একটি প্রাইভেট কী ( apex_name.apex_key .pem তৈরি করুন।

    5. একটি নতুন SELinux ফাইল কনটেক্সট apex_file_contexts তৈরি করুন।

      (/.*)?    u:object_r:system_file:s0
      

      আরও জানতে, নিরাপত্তা প্রসঙ্গ এবং বিভাগসমূহ দেখুন।

    6. একটি নতুন বা বিদ্যমান 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",
      }
      
    7. নতুন বা বিদ্যমান 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,
      }
      
  2. একটি SDV ইমেজে নতুন মেকফাইলটি অন্তর্ভুক্ত করতে, প্রোডাক্ট মেকফাইলের PRODUCT_PACKAGES এ নতুন APEX মডিউলটি যোগ করুন। উদাহরণস্বরূপ, sdv_samples_core_services.mk দেখুন।

  3. আপনি যদি কাটলফিশ ব্যবহার করেন, তাহলে একটি ডিভাইস চালু করতে নিম্নলিখিত কমান্ডটি চালান:

    sdv-cf create --instance_name=instance1
    
  4. সিস্টেম বুট করার সময় সার্ভিস বান্ডেলটি চালান:

    # 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 ইন্টিগ্রেশন দেখুন।