VNDK সক্ষম করা হচ্ছে

বিক্রেতা এবং সিস্টেমের মধ্যে উদ্বেগ আলাদা করার জন্য VNDK-এর একটি কোডবেসে বেশ কিছু পরিবর্তন প্রয়োজন। একটি বিক্রেতা/OEM কোডবেসে VNDK সক্ষম করতে নিম্নলিখিত নির্দেশিকাটি ব্যবহার করুন৷

সিস্টেম লাইব্রেরি তৈরি করুন

বিল্ড সিস্টেমে লাইব্রেরি (ভাগ করা, স্ট্যাটিক বা হেডার) এবং বাইনারি সহ বিভিন্ন ধরণের অবজেক্ট রয়েছে।

সিস্টেম লাইব্রেরি তৈরি করুন
চিত্র 1. সিস্টেম লাইব্রেরি তৈরি করুন
  • core লাইব্রেরিগুলি সিস্টেম ইমেজ দ্বারা ব্যবহৃত হয়, সিস্টেম ইমেজে। এই লাইব্রেরিগুলি vendor , vendor_available , vndk , বা vndk-sp লাইব্রেরি দ্বারা ব্যবহার করা যাবে না৷
    cc_library {
        name: "libThatIsCore",
        ...
    }
    
  • vendor-only (বা proprietary ) লাইব্রেরিগুলি বিক্রেতা ইমেজ দ্বারা বিক্রেতার ছবিতে ব্যবহার করা হয়।
    cc_library {
        name: "libThatIsVendorOnly",
        proprietary: true,
        # or: vendor: true, # (for things in AOSP)
        ...
    }
    
  • vendor_available লাইব্রেরিগুলি ভেন্ডর ইমেজ দ্বারা বিক্রেতা ইমেজে ব্যবহার করা হয় ( core এর ডুপ্লিকেট থাকতে পারে)।
    cc_library {
        name: "libThatIsVendorAvailable",
        vendor_available: true,
        ...
    }
    
  • vndk লাইব্রেরিগুলি বিক্রেতা ইমেজ দ্বারা সিস্টেম ইমেজে ব্যবহার করা হয়।
    cc_library {
        name: "libThatIsVndk",
        vendor_available: true,
        vndk: {
            enabled: true,
        }
        ...
    }
    
  • vndk-sp লাইব্রেরিগুলি বিক্রেতা ইমেজ দ্বারা এবং সিস্টেম ইমেজ দ্বারা পরোক্ষভাবে ব্যবহার করা হয়।
    cc_library {
        name: "libThatIsVndkSp",
        vendor_available: true,
        vndk: {
            enabled: true,
            support_system_process: true,
        }
        ...
    }
    
  • llndk লাইব্রেরিগুলি সিস্টেম এবং বিক্রেতা ইমেজ উভয় দ্বারা ব্যবহৃত হয়।
    cc_library {
        name: "libThatIsLlndk",
        llndk: {
            symbol_file: "libthatisllndk.map.txt"
        }
        ...
    }
    

যখন একটি lib vendor_available:true হিসাবে চিহ্নিত করা হয়, তখন এটি দুবার নির্মিত হয়:

  • একবার প্ল্যাটফর্মের জন্য (এবং এইভাবে /system/lib এ ইনস্টল করা হয়েছে)
  • একবার বিক্রেতার জন্য (এবং এইভাবে /vendor/lib বা VNDK APEX এ ইনস্টল করা হয়েছে)

libs-এর বিক্রেতা সংস্করণগুলি -D__ANDROID_VNDK__ দিয়ে নির্মিত। Android এর ভবিষ্যত সংস্করণগুলিতে উল্লেখযোগ্যভাবে পরিবর্তন হতে পারে এমন ব্যক্তিগত সিস্টেম উপাদানগুলি এই পতাকা দ্বারা অক্ষম করা হয়েছে৷ এছাড়াও, বিভিন্ন লাইব্রেরি হেডারের একটি ভিন্ন সেট (যেমন liblog ) রপ্তানি করে। একটি লক্ষ্যের একটি বিক্রেতার বৈকল্পিকের জন্য নির্দিষ্ট বিকল্পগুলি একটি Android.bp ফাইলে উল্লেখ করা যেতে পারে:

target: { vendor: { … } }

একটি কোডবেসের জন্য VNDK সক্ষম করা হচ্ছে

একটি কোডবেসের জন্য VNDK সক্ষম করতে:

  1. vendor.img এবং system.img পার্টিশনের প্রয়োজনীয় মাপ গণনা করে যোগ্যতা নির্ধারণ করুন।
  2. BOARD_VNDK_VERSION=current সক্ষম করুন। আপনি BoardConfig.mk এ যোগ করতে পারেন বা এটির সাথে সরাসরি উপাদান তৈরি করতে পারেন (উদাহরণস্বরূপ, m -j BOARD_VNDK_VERSION=current MY-LIB )।

BOARD_VNDK_VERSION=current সক্রিয় করার পরে, বিল্ড সিস্টেম নিম্নলিখিত নির্ভরতা এবং শিরোনামের প্রয়োজনীয়তাগুলি প্রয়োগ করে।

নির্ভরতা পরিচালনা

একটি vendor অবজেক্ট যা একটি core উপাদানের উপর নির্ভর করে যা vndk তে বিদ্যমান নেই বা একটি vendor বস্তু হিসাবে নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে সমাধান করা আবশ্যক:

  • নির্ভরতা দূর করা যায়।
  • যদি core উপাদানটি vendor মালিকানাধীন হয় তবে এটিকে vendor_available বা vendor হিসাবে চিহ্নিত করা যেতে পারে।
  • vndk এর মূল অবজেক্টের অংশ হিসেবে একটি পরিবর্তন Google-এ আপস্ট্রিম করা হতে পারে।

উপরন্তু, যদি একটি core উপাদানের একটি vendor উপাদানের উপর নির্ভরতা থাকে, তাহলে vendor উপাদানটিকে একটি core উপাদানে পরিণত করতে হবে বা নির্ভরতা অন্য উপায়ে অপসারণ করতে হবে (উদাহরণস্বরূপ, নির্ভরতা অপসারণ করে বা নির্ভরতাকে একটি vendor উপাদানে স্থানান্তরিত করে) )

হেডার পরিচালনা

-D__ANDROID_VNDK__ সহ বা ছাড়া শিরোনামগুলি তৈরি করতে হবে কিনা তা জানতে বিল্ড সিস্টেম সক্ষম করার জন্য গ্লোবাল হেডার নির্ভরতাগুলি অবশ্যই মুছে ফেলতে হবে। উদাহরণস্বরূপ, libutils হেডার যেমন utils/StrongPointer.h এখনও হেডার লাইব্রেরি libutils_headers ব্যবহার করে অ্যাক্সেস করা যেতে পারে।

কিছু শিরোনাম (যেমন unistd.h ) আর ট্রানজিটিভভাবে অন্তর্ভুক্ত করা যাবে না তবে স্থানীয়ভাবে অন্তর্ভুক্ত করা যেতে পারে।

অবশেষে, private/android_filesystem_config.h এর সর্বজনীন অংশ cutils/android_filesystem_config.h এ সরানো হয়েছে। এই শিরোনামগুলি পরিচালনা করতে, নিম্নলিখিতগুলির মধ্যে একটি করুন:

  • সম্ভব হলে getgrnam / getpwnam কল দিয়ে সমস্ত AID_* ম্যাক্রো প্রতিস্থাপন করে private/android_filesystem_config.h এর উপর নির্ভরতা দূর করুন। উদাহরণ স্বরূপ:
    • (uid_t)AID_WIFI হয়ে যায় getpwnam("wifi")->pw_uid
    • (gid_t)AID_SDCARD_R হয় getgrnam("sdcard_r")->gr_gid
    বিস্তারিত জানার জন্য, private/android_filesystem_config.h দেখুন।
  • হার্ড-কোডেড AIS-এর জন্য, cutils/android_filesystem_config.h অন্তর্ভুক্ত করুন।