ভিএনডিকে স্ন্যাপশট তৈরি করা হচ্ছে

একটি VNDK স্ন্যাপশট হল একটি Android রিলিজের জন্য VNDK-core এবং VNDK-SP libs এর একটি সেট। আপনি শুধুমাত্র সিস্টেম পার্টিশন আপগ্রেড করতে পারেন যদি system.img মধ্যে vendor.img এর প্রয়োজনীয় VNDK স্ন্যাপশট অন্তর্ভুক্ত থাকে।

অফিসিয়াল VNDK স্ন্যাপশটগুলি অ্যান্ড্রয়েড বিল্ড সার্ভারে স্বয়ংক্রিয়ভাবে তৈরি হয় এবং অ্যান্ড্রয়েড সোর্স ট্রির /prebuilts/vndk চেক ইন করা হয়। উন্নয়নের উদ্দেশ্যে, আপনি স্থানীয়ভাবে VNDK স্ন্যাপশট তৈরি করতে পারেন। VNDK স্ন্যাপশটগুলি arm, arm64, x86, এবং x86_64 TARGET_ARCH ফ্লেভারের জন্য সমর্থিত।

বিল্ডিং স্ন্যাপশট

অ্যান্ড্রয়েড বিল্ড সার্ভার নিম্নলিখিত বিল্ড প্যারামিটার এবং বিল্ড কমান্ড ব্যবহার করে বিল্ড আর্টিফ্যাক্ট এবং VNDK স্ন্যাপশট ফাইল তৈরি করে।

প্যারামিটার তৈরি করুন

বিল্ড টার্গেটের নাম vndk । বিল্ড টার্গেট কনফিগারেশন নীচে দেখানো হয়েছে.

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH হল জেনেরিক সিস্টেম ইমেজ (GSI) টার্গেট আর্চ ( arm , arm64 , x86 , x86_64 ) এর মতই।
  • TARGET_ARCH_VARIANT স্ন্যাপশট v28 (Android 9) এবং উচ্চতরের জন্য, উপরে তালিকাভুক্ত জনপ্রিয় কনফিগারেশন অন্তর্ভুক্ত।

কমান্ড তৈরি করুন

অফিসিয়াল স্ন্যাপশটগুলির জন্য, Android 9 এবং উচ্চতর vndk.mk এ একটি নমুনা লক্ষ্য ( vndk ) অন্তর্ভুক্ত করে যা $DIST_DIR এ একটি VNDK স্ন্যাপশট তৈরি করে এবং আউটপুট করে। স্ন্যাপশট জিপ ফাইলটি android-vndk-$(TARGET_ARCH).zip ফর্ম্যাট ব্যবহার করে। উদাহরণ স্বরূপ:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

নিম্নলিখিত কমান্ডের সাহায্যে সমস্ত সমর্থিত আর্চ ফ্লেভার তৈরি করতে Android বিল্ড সার্ভার build.sh স্ক্রিপ্ট ব্যবহার করে।

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

একটি Android সংস্করণের জন্য VNDK স্ন্যাপশট সেই সংস্করণের প্রকাশ শাখা থেকে তৈরি করা হয়েছে৷

স্থানীয়ভাবে নির্মাণ

বিকাশের সময়, আপনি নিম্নলিখিত কমান্ডগুলির সাহায্যে স্থানীয় উত্স গাছ থেকে ভিএনডিকে স্ন্যাপশট তৈরি করতে পারেন।

  • একসাথে সমস্ত সমর্থিত খিলান তৈরি করতে, নিম্নলিখিত বিল্ড স্ক্রিপ্টটি চালান ( build.sh )।
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • একটি নির্দিষ্ট TARGET_ARCH তৈরি করতে, নিম্নলিখিত কমান্ডগুলি চালান।
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

সংশ্লিষ্ট android-vndk-$(TARGET_ARCH).zip ফাইলটি $DIST_DIR এর অধীনে তৈরি করা হয়েছে।

স্ন্যাপশট ফাইল

একটি VNDK স্ন্যাপশটে নিম্নলিখিত ফাইলগুলি অন্তর্ভুক্ত রয়েছে।

  • VNDK-core এবং VNDK-SP ভাগ করা লাইব্রেরির বিক্রেতা বৈকল্পিক।
    • LL-NDK ভাগ করা libs প্রয়োজন হয় না কারণ তারা পশ্চাদপদ সামঞ্জস্যপূর্ণ।
    • 64 বিট লক্ষ্যগুলির জন্য, TARGET_ARCH এবং TARGET_2ND_ARCH উভয় লাইব্রেরি তৈরি এবং অন্তর্ভুক্ত করা হয়েছে৷
  • VNDK-core, VNDK-SP, LL-NDK, এবং VNDK-প্রাইভেট লাইব্রেরির তালিকা [vndkcore|vndksp|llndk|vndkprivate].libraries.txt এ রয়েছে।
  • লাইসেন্স ফাইল।
  • module_paths.txt । সমস্ত VNDK লাইব্রেরির জন্য মডিউল পাথগুলি রেকর্ড করে, যা GPL প্রকল্পগুলির একটি প্রদত্ত অ্যান্ড্রয়েড সোর্স ট্রিতে প্রকাশিত উত্স রয়েছে তা পরীক্ষা করার জন্য প্রয়োজন৷

একটি প্রদত্ত VNDK স্ন্যাপশট জিপ ফাইলের জন্য, android-vndk-$(TARGET_ARCH).zip , VNDK প্রি-বিল্ট লাইব্রেরিগুলি ABI bitness অনুযায়ী arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) নামে আলাদা ডিরেক্টরিতে গোষ্ঠীভুক্ত করা হয়েছে৷ উদাহরণস্বরূপ, android-vndk-arm64.zip এর জন্য, 64-বিট libs arch-arm64-armv8-a এর অধীনে এবং 32-বিট libs arch-arm-armv8-a এর অধীনে স্থাপন করা হয়। নীচের উদাহরণটি একটি arm64 ( TARGET_ARCH=arm64 ) VNDK স্ন্যাপশট জিপ ফাইল ( android-vndk-arm64.zip ) এর জন্য ডিরেক্টরি কাঠামো দেখায়।

VNDK স্ন্যাপশট ডিরেক্টরি কাঠামো
চিত্র 1. VNDK স্ন্যাপশট ডিরেক্টরি কাঠামো (উদাহরণ)

বিক্রেতা স্ন্যাপশট জন্য বিল্ডিং

Android 11 বিক্রেতার স্ন্যাপশট সমর্থন করে, যা আপনাকে উৎস ট্রিতে Android সংস্করণ নির্বিশেষে vendor.img তৈরি করতে সক্ষম করে। একটি ডিফল্ট VNDK স্ন্যাপশটে ভাগ করা লাইব্রেরি ফাইল ( .so ) থাকে যা ডিভাইসে ইনস্টল করা যায় এবং তারপর রানটাইমে বিক্রেতা C++ বাইনারি থেকে লিঙ্ক করা যায়। সেই VNDK স্ন্যাপশটের বিরুদ্ধে তৈরি করতে, আপনার অতিরিক্ত আর্টিফ্যাক্ট যেমন হেডার ফাইল এবং এক্সপোর্ট করা পতাকা প্রয়োজন।

স্থানীয় উৎস ট্রি থেকে এই ধরনের শিল্পকর্ম (VNDK স্ন্যাপশট সহ) তৈরি করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন।

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

এই কমান্ডটি $DIST_DIR এর অধীনে android-vndk-$(TARGET_ARCH).zip ফাইল তৈরি করে। নীচের উদাহরণটি বিল্ড আর্টিফ্যাক্ট সহ একটি arm64 VNDK স্ন্যাপশট জিপ ফাইল। বোল্ড করা ফাইলগুলি সাধারণ VNDK স্ন্যাপশটে নতুন যোগ করা ফাইল (চিত্র 1-এ দেখানো হয়েছে) এবং এতে JSON ফাইল (যা প্রতিটি লাইব্রেরির cflags সঞ্চয় করে) এবং সমস্ত রপ্তানি করা হেডার ফাইল অন্তর্ভুক্ত করে।

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

VNDK স্ন্যাপশট আপলোড করা হচ্ছে

VNDK স্ন্যাপশটগুলি /prebuilts/vndk/v VER এর অধীনে সোর্স ট্রিতে চেক করা হয়, যেখানে VER VNDK স্ন্যাপশটের সংস্করণের সমান (যা সংশ্লিষ্ট Android রিলিজের SDK সংস্করণ অনুসরণ করে)। উদাহরণস্বরূপ, Android 8.1 VNDK স্ন্যাপশটের সংস্করণ 27 আছে।

update.py স্ক্রিপ্ট ব্যবহার করে

update.py স্ক্রিপ্ট ( /development/vndk/snapshot/update.py ) উত্স ট্রিতে একটি পূর্বনির্মাণ VNDK স্ন্যাপশট যোগ করার প্রক্রিয়াটিকে স্বয়ংক্রিয় করে। এটি স্বয়ংক্রিয়ভাবে বিল্ড আর্টিফ্যাক্ট সনাক্ত করে এবং জেনারেট করা Android.bp এ সংশ্লিষ্ট বৈশিষ্ট্যগুলি যথাযথভাবে পূরণ করে। এই স্ক্রিপ্টটি নিম্নলিখিত কাজগুলি সম্পাদন করে:

  1. /prebuilts/vndk/v VER এ, নতুন গিট শাখা তৈরি করতে repo start ব্যবহার করে।
  2. VNDK স্ন্যাপশট বিল্ড আর্টিফ্যাক্টগুলি নিয়ে আসে এবং আনজিপ করে।
  3. স্বয়ংক্রিয়ভাবে বিল্ড ফাইল তৈরি করতে gen_buildfiles.py চালায় ( Android.bp )।
  4. সাধারণ পাবলিক লাইসেন্স (GPL) এর অধীনে লাইসেন্সকৃত পূর্বনির্মাণ লাইব্রেরিগুলিকে যাচাই করতে check_gpl_license.py চালায় বর্তমান উত্স ট্রিতে প্রকাশিত উত্স রয়েছে৷
  5. নতুন পরিবর্তন করতে git commit ব্যবহার করে।

স্থানীয়ভাবে নির্মিত VNDK স্ন্যাপশট ব্যবহার করে

আপনি স্থানীয়ভাবে নির্মিত VNDK স্ন্যাপশটগুলিও ব্যবহার করতে পারেন। যখন --local বিকল্পটি নির্দিষ্ট করা হয়, update.py স্ক্রিপ্টটি নির্দিষ্ট স্থানীয় ডিরেক্টরি (অ্যান্ড্রয়েড বিল্ড সার্ভারের পরিবর্তে) থেকে VNDK স্ন্যাপশট বিল্ড আর্টিফ্যাক্ট নিয়ে আসে যেটিতে android-vndk-$(TARGET_ARCH).zip রয়েছে। development/vndk/snapshot/build.sh থেকে তৈরি জিপ ফাইলগুলি development/vndk/snapshot/build.sh--local বিকল্পের সাথে, update.py স্ক্রিপ্ট GPL লাইসেন্স চেকিং এবং git commit পদক্ষেপগুলি এড়িয়ে যায়।

বাক্য গঠন:

python update.py VER --local local_path

/path/to/local/dir এ স্থানীয় বিল্ড আর্টিফ্যাক্ট সহ Android 8.1 VNDK স্ন্যাপশট আপডেট করার উদাহরণ কমান্ড:

python update.py 27 --local /path/to/local/dir

স্থানীয়ভাবে নির্মিত VNDK স্ন্যাপশটের উদাহরণ ডিরেক্টরি কাঠামো:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
স্থানীয় বিল্ড আর্টিফ্যাক্টগুলি স্বয়ংক্রিয়ভাবে যোগ করা হয় যদি আর্টিফ্যাক্টগুলি VNDK_SNAPSHOT_BUILD_ARTIFACTS=true দিয়ে তৈরি করা হয়।

VNDK স্ন্যাপশট ইনস্টল করা হচ্ছে

সিস্টেম ইমেজ BOARD_VNDK_VERSION , PRODUCT_EXTRA_VNDK_VERSIONS , এবং ro.vndk.version এ তথ্য ব্যবহার করে বিল্ড টাইমে VNDK স্ন্যাপশট লাইব্রেরি ইনস্টল করে। আপনি নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে পূর্বনির্মাণ VNDK স্ন্যাপশট ডিরেক্টরি (উদাহরণস্বরূপ, /prebuilts/vndk/v29 বা /prebuilts/vndk/v30 ) থেকে কোন VNDK স্ন্যাপশটগুলি ইনস্টল করা হবে তা নিয়ন্ত্রণ করতে পারেন।

  • বিকল্প 1: BOARD_VNDK_VERSION । বর্তমান বিক্রেতা মডিউলগুলি তৈরি করার জন্য স্ন্যাপশট মডিউলগুলি ব্যবহার করুন এবং বিক্রেতা মডিউলগুলির জন্য প্রয়োজনীয় শুধুমাত্র স্ন্যাপশট মডিউলগুলি ইনস্টল করুন৷
  • বিকল্প 2: PRODUCT_EXTRA_VNDK_VERSIONS । বর্তমান বিক্রেতা মডিউল নির্বিশেষে VNDK স্ন্যাপশট মডিউল ইনস্টল করুন। এটি PRODUCT_EXTRA_VNDK_VERSIONS এ তালিকাভুক্ত পূর্বনির্মাণ VNDK স্ন্যাপশটগুলিকে বিল্ড টাইমে অন্য কোনও মডিউলের সাথে লিঙ্ক না করেই ইনস্টল করে৷

BOARD_VNDK_VERSION সেট করা হচ্ছে

BOARD_VNDK_VERSION VNDK সংস্করণ দেখায় যা তৈরি করতে বর্তমান বিক্রেতা মডিউল প্রয়োজন৷ যদি BOARD_VNDK_VERSION /prebuilts/vndk ডিরেক্টরিতে একটি উপলব্ধ VNDK স্ন্যাপশট সংস্করণ থাকে, তাহলে BOARD_VNDK_VERSION এ নির্দেশিত VNDK স্ন্যাপশট ইনস্টল করা আছে। VNDK স্ন্যাপশট ডিরেক্টরিতে উপলব্ধ না হলে, একটি বিল্ড ত্রুটি ঘটে।

BOARD_VNDK_VERSION সংজ্ঞায়িত করা VNDK মডিউলগুলিকে ইনস্টল করতে সক্ষম করে। বিল্ড টাইমে BOARD_VNDK_VERSION এ সংজ্ঞায়িত VNDK স্ন্যাপশট সংস্করণের সাথে ভেন্ডর মডিউল লিঙ্ক করে (এটি সিস্টেমের উৎসে বর্তমান VNDK মডিউল তৈরি করে না)। একটি সংগ্রহস্থল থেকে সম্পূর্ণ উৎস ট্রি ডাউনলোড করার সময়, উভয় সিস্টেম এবং বিক্রেতা উত্স একই Android রিলিজের উপর ভিত্তি করে।

PRODUCT_EXTRA_VNDK_VERSIONS সেট করা হচ্ছে

PRODUCT_EXTRA_VNDK_VERSIONS ইনস্টল করার জন্য অতিরিক্ত VNDK সংস্করণগুলি তালিকাভুক্ত করে৷ সাধারণত বর্তমান বিক্রেতা পার্টিশনের জন্য একটি VNDK স্ন্যাপশট থাকা যথেষ্ট। যাইহোক, কিছু ক্ষেত্রে আপনাকে একটি সিস্টেম ইমেজে একাধিক স্ন্যাপশট অন্তর্ভুক্ত করতে হতে পারে। উদাহরণস্বরূপ, একটি সিস্টেম ইমেজ সহ একাধিক বিক্রেতা সংস্করণ সমর্থন করার জন্য GSI-এর একাধিক স্ন্যাপশট রয়েছে। PRODUCT_EXTRA_VNDK_VERSIONS সেট করে, আপনি BOARD_VNDK_VERSION এ VNDK সংস্করণ ছাড়াও VNDK স্ন্যাপশট মডিউলগুলি ইনস্টল করতে পারেন।

যদি PRODUCT_EXTRA_VNDK_VERSIONS সংস্করণগুলির একটি নির্দিষ্ট তালিকা থাকে, তাহলে বিল্ড সিস্টেমটি prebuilts/vndk ডিরেক্টরিতে সংস্করণ তালিকার পূর্বনির্মাণ স্ন্যাপশটগুলি সন্ধান করে। যদি বিল্ড সিস্টেম সমস্ত তালিকাভুক্ত স্ন্যাপশটগুলি সনাক্ত করে, তবে এটি সেই স্ন্যাপশট ফাইলগুলিকে প্রতিটি VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER তে ইনস্টল করে। অনুপস্থিত সংস্করণগুলি একটি বিল্ড ত্রুটি তৈরি করে।

VNDK মডিউলগুলি বিল্ড টাইমে বিক্রেতা মডিউলগুলির সাথে লিঙ্ক করে না তবে বিক্রেতা পার্টিশনের বিক্রেতা মডিউলগুলির জন্য ইনস্টল করা VNDK সংস্করণগুলির একটির প্রয়োজন হলে রানটাইমে ব্যবহার করা যেতে পারে। BOARD_VNDK_VERSION সংজ্ঞায়িত হলেই PRODUCT_EXTRA_VNDK_VERSIONS বৈধ৷

PLATFORM_VNDK_VERSION

PLATFORM_VNDK_VERSION সিস্টেম উৎসে বর্তমান VNDK মডিউলগুলির জন্য VNDK সংস্করণ সংজ্ঞায়িত করে৷ মান স্বয়ংক্রিয়ভাবে সেট করা হয়:

  • প্রকাশের আগে, PLATFORM_VNDK_VERSION PLATFORM_VERSION_CODENAME হিসাবে সেট করা হয়েছে।
  • রিলিজের সময়, PLATFORM_SDK_VERSION PLATFORM_VNDK_VERSION এ কপি করা হয়।

অ্যান্ড্রয়েড সংস্করণ প্রকাশিত হওয়ার পরে, বর্তমান VNDK লাইব্রেরিগুলি VNDK APEX ( /system/apex/com.android.vndk.v VER ) এ ইনস্টল করা হয়, যেখানে VER হল PLATFORM_VNDK_VERSION এ সংরক্ষিত সংস্করণ।

যখন BOARD_VNDK_VERSION current সেট করা হয়, PLATFORM_VNDK_VERSION ro.vndk.version এ সংরক্ষণ করা হয়, অন্যথায় BOARD_VNDK_VERSION ro.vndk.version এ সংরক্ষণ করা হয়। PLATFORM_VNDK_VERSION SDK সংস্করণে সেট করা হয় যখন Android রিলিজ হয়; প্রকাশের আগে, PLATFORM_VNDK_VERSION এর জন্য অ্যালফানিউমেরিক অ্যান্ড্রয়েড কোড নাম ব্যবহার করা হয়।

VNDK সংস্করণ সেটিংসের সারাংশ

নীচের সারণীটি ভিএনডিকে সংস্করণ সেটিংসের সংক্ষিপ্ত বিবরণ দেয়।

বিক্রেতা
নির্মাণ করুন
বোর্ড
সংস্করণ
SDK
মুক্তি
প্ল্যাটফর্ম
সংস্করণ
সংস্করণ
সম্পত্তি
ডিরেক্টরি ইনস্টল করুন
বর্তমান VNDK মডিউল current আগে CODE_NAME CODE_NAME /system/apex/com.android.vndk.v CODE_NAME
পরে SDK_VER SDK_VER /system/apex/com.android.vndk.v SDK_VER
প্রি-বিল্ট স্ন্যাপশট মডিউল VNDK_VER
স্ন্যাপশটের জন্য
আগে অথবা পরে CODE_NAME
অথবা SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.v VNDK_VER
  • বোর্ড সংস্করণ ( BOARD_VNDK_VERSION )। VNDK সংস্করণ যা বিক্রেতা মডিউল তৈরি করতে প্রয়োজন। বিক্রেতা মডিউল বর্তমান সিস্টেম মডিউলগুলির সাথে লিঙ্ক করতে পারলে current হিসাবে সেট করুন।
  • প্ল্যাটফর্ম সংস্করণ ( PLATFORM_VNDK_VERSION )। VNDK সংস্করণ যা বর্তমান সিস্টেম মডিউল তৈরি করছে। BOARD_VNDK_VERSION কারেন্টের সমান হলেই তৈরি করা হয়।
  • সংস্করণ সম্পত্তি ( ro.vndk.version )। প্রপার্টি যা VNDK সংস্করণ নির্দিষ্ট করে vendor.img-এ বাইনারি এবং libs চালানোর জন্য প্রয়োজন। /vendor/default.propvendor.img এ সংরক্ষিত।