একটি নতুন ডিভাইস যোগ করুন

আপনার ডিভাইস এবং পণ্যের জন্য মেকফাইল তৈরি করতে এই পৃষ্ঠার তথ্য ব্যবহার করুন।

প্রতিটি নতুন অ্যান্ড্রয়েড মডিউলের অবশ্যই একটি কনফিগারেশন ফাইল থাকতে হবে যাতে মডিউল মেটাডেটা, কম্পাইল-টাইম নির্ভরতা এবং প্যাকেজিং নির্দেশাবলী সহ বিল্ড সিস্টেম পরিচালনা করা যায়। অ্যান্ড্রয়েড সুং বিল্ড সিস্টেম ব্যবহার করে। অ্যান্ড্রয়েড বিল্ড সিস্টেম সম্পর্কে আরও তথ্যের জন্য বিল্ডিং অ্যান্ড্রয়েড দেখুন৷

বিল্ড লেয়ার বুঝুন

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

স্তর উদাহরণ বর্ণনা
পণ্য myProduct, myProduct_eu, myProduct_eu_fr, j2, sdk পণ্য স্তর একটি শিপিং পণ্যের বৈশিষ্ট্য নির্দিষ্টকরণ যেমন নির্মাণের জন্য মডিউল, সমর্থিত লোকেল এবং বিভিন্ন লোকেলের জন্য কনফিগারেশন সংজ্ঞায়িত করে। অন্য কথায়, এটি সামগ্রিক পণ্যের নাম । পণ্য-নির্দিষ্ট ভেরিয়েবলগুলি পণ্য সংজ্ঞা মেকফাইলে সংজ্ঞায়িত করা হয়। একটি পণ্য অন্যান্য পণ্য সংজ্ঞা থেকে উত্তরাধিকারসূত্রে পেতে পারে, যা রক্ষণাবেক্ষণকে সহজ করে। একটি সাধারণ পদ্ধতি হল একটি বেস পণ্য তৈরি করা যাতে সমস্ত পণ্যের জন্য প্রযোজ্য বৈশিষ্ট্য রয়েছে, তারপর সেই বেস পণ্যের উপর ভিত্তি করে পণ্যের বৈকল্পিক তৈরি করা। উদাহরণস্বরূপ, দুটি পণ্য যা শুধুমাত্র তাদের রেডিও দ্বারা পৃথক (CDMA বনাম GSM) একই বেস পণ্য থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হতে পারে যা একটি রেডিওকে সংজ্ঞায়িত করে না।
বোর্ড/ডিভাইস মার্লিন, ব্লুলাইন, প্রবাল বোর্ড/ডিভাইস লেয়ারটি ডিভাইসে প্লাস্টিকের ফিজিক্যাল লেয়ারকে প্রতিনিধিত্ব করে (অর্থাৎ ডিভাইসের ইন্ডাস্ট্রিয়াল ডিজাইন)। এই স্তরটি একটি পণ্যের বেয়ার স্কিমেটিক্সকেও উপস্থাপন করে। এর মধ্যে বোর্ডের পেরিফেরাল এবং তাদের কনফিগারেশন অন্তর্ভুক্ত। ব্যবহৃত নামগুলি বিভিন্ন বোর্ড/ডিভাইস কনফিগারেশনের জন্য নিছক কোড।
খিলান হাত, x86, arm64, x86_64 আর্কিটেকচার স্তরটি বোর্ডে চলমান প্রসেসর কনফিগারেশন এবং অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI) বর্ণনা করে।

বিল্ড বৈকল্পিক ব্যবহার করুন

একটি নির্দিষ্ট পণ্যের জন্য নির্মাণ করার সময়, চূড়ান্ত রিলিজ বিল্ডে ছোটখাটো বৈচিত্র থাকা দরকারী। একটি মডিউল সংজ্ঞায়, মডিউলটি LOCAL_MODULE_TAGS এর সাথে ট্যাগগুলি নির্দিষ্ট করতে পারে, যা optional (ডিফল্ট), debug এবং eng এর এক বা একাধিক মান হতে পারে।

যদি একটি মডিউল একটি ট্যাগ নির্দিষ্ট না করে ( LOCAL_MODULE_TAGS দ্বারা), তার ট্যাগ ডিফল্ট optionalPRODUCT_PACKAGES এর সাথে পণ্য কনফিগারেশনের প্রয়োজন হলেই একটি ঐচ্ছিক মডিউল ইনস্টল করা হয়।

এগুলি বর্তমানে সংজ্ঞায়িত বিল্ড বৈকল্পিক।

বৈকল্পিক বর্ণনা
eng এটি ডিফল্ট স্বাদ।
  • eng বা debug দিয়ে ট্যাগ করা মডিউল ইনস্টল করে।
  • ট্যাগ করা মডিউল ছাড়াও পণ্য সংজ্ঞা ফাইল অনুযায়ী মডিউল ইনস্টল করে।
  • ro.secure=0
  • ro.debuggable=1
  • ro.kernel.android.checkjni=1
  • adb ডিফল্টরূপে সক্রিয় করা হয়।
user ভেরিয়েন্টটি চূড়ান্ত রিলিজ বিট হতে চাইছে।
  • user সাথে ট্যাগ করা মডিউল ইনস্টল করে।
  • ট্যাগ করা মডিউল ছাড়াও পণ্য সংজ্ঞা ফাইল অনুযায়ী মডিউল ইনস্টল করে।
  • ro.secure=1
  • ro.debuggable=0
  • adb ডিফল্টরূপে নিষ্ক্রিয় করা হয়.
userdebug user মতোই, এই ব্যতিক্রমগুলি সহ:
  • এছাড়াও debug দিয়ে ট্যাগ করা মডিউল ইনস্টল করে।
  • ro.debuggable=1
  • adb ডিফল্টরূপে সক্রিয় করা হয়।

ব্যবহারকারী ডিবাগের জন্য নির্দেশিকা

ইউজারডিবাগ বিল্ড ইন টেস্টিং চালানো ডিভাইস ডেভেলপারদের ইন-ডেভেলপমেন্ট রিলিজের কার্যক্ষমতা এবং শক্তি বুঝতে সাহায্য করে। ব্যবহারকারী এবং ব্যবহারকারী ডিবাগ বিল্ডগুলির মধ্যে সামঞ্জস্য বজায় রাখতে এবং ডিবাগিংয়ের জন্য ব্যবহৃত বিল্ডগুলিতে নির্ভরযোগ্য মেট্রিক্স অর্জন করতে, ডিভাইস বিকাশকারীদের এই নির্দেশিকাগুলি অনুসরণ করা উচিত:

  • userdebug রুট অ্যাক্সেস সক্ষম সহ একটি ব্যবহারকারী বিল্ড হিসাবে সংজ্ঞায়িত করা হয়, ব্যতীত:
    • ইউজারডিবাগ-অনলি অ্যাপ্লিকেশানগুলি যেগুলি শুধুমাত্র ব্যবহারকারীর দ্বারা চালিত হয়
    • অপারেশনগুলি যেগুলি শুধুমাত্র নিষ্ক্রিয় রক্ষণাবেক্ষণের সময় চলে (চার্জারে/সম্পূর্ণ চার্জে), যেমন ব্যাকগ্রাউন্ড কম্পাইলের জন্য dex2oatd বনাম dex2oat ব্যবহার করা
  • বিল্ড প্রকারের উপর ভিত্তি করে ডিফল্টরূপে সক্রিয়/অক্ষম করা বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করবেন না। ব্যাটারি লাইফকে প্রভাবিত করে এমন যেকোনো ধরনের লগিং ব্যবহার থেকে ডেভেলপারদের নিরুৎসাহিত করা হয়, যেমন ডিবাগ লগিং বা হিপ ডাম্পিং।
  • যেকোন ডিবাগিং বৈশিষ্ট্য যা ডিফল্টরূপে userdebug-এ সক্রিয় করা থাকে তা স্পষ্টভাবে সংজ্ঞায়িত করা উচিত এবং প্রকল্পে কাজ করা সমস্ত বিকাশকারীদের সাথে ভাগ করা উচিত। আপনি যে সমস্যাটি ডিবাগ করার চেষ্টা করছেন তার সমাধান না হওয়া পর্যন্ত আপনার ডিবাগিং বৈশিষ্ট্যগুলি শুধুমাত্র সীমিত সময়ের ভিত্তিতে সক্ষম করা উচিত।

রিসোর্স ওভারলে দিয়ে বিল্ড কাস্টমাইজ করুন

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

সবচেয়ে সাধারণভাবে কাস্টমাইজ করা সেটিংস ফাইল ফ্রেমওয়ার্ক/base/core/res/res/values/config.xml- এ থাকে।

এই ফাইলে একটি রিসোর্স ওভারলে সেট আপ করতে, নিম্নলিখিতগুলির একটি ব্যবহার করে প্রকল্প বিল্ডফাইলে ওভারলে ডিরেক্টরি যোগ করুন:

PRODUCT_PACKAGE_OVERLAYS := device/device-implementer/device-name/overlay

বা

PRODUCT_PACKAGE_OVERLAYS := vendor/vendor-name/overlay

তারপর, ডিরেক্টরিতে একটি ওভারলে ফাইল যোগ করুন, উদাহরণস্বরূপ:

vendor/foobar/overlay/frameworks/base/core/res/res/values/config.xml

ওভারলে config.xml ফাইলে পাওয়া যেকোন স্ট্রিং বা স্ট্রিং অ্যারে মূল ফাইলে পাওয়া ফাইলগুলিকে প্রতিস্থাপন করে।

একটি পণ্য তৈরি করুন

আপনি আপনার ডিভাইসের জন্য সোর্স ফাইলগুলিকে বিভিন্ন উপায়ে সংগঠিত করতে পারেন। এখানে একটি Pixel বাস্তবায়ন সংগঠিত করার একটি উপায়ের একটি সংক্ষিপ্ত বিবরণ রয়েছে৷

পিক্সেল marlin নামের একটি প্রধান ডিভাইস কনফিগারেশনের সাথে প্রয়োগ করা হয়। এই ডিভাইস কনফিগারেশন থেকে, একটি পণ্য সংজ্ঞা মেকফাইল সহ একটি পণ্য তৈরি করা হয় যা ডিভাইস সম্পর্কে পণ্য-নির্দিষ্ট তথ্য যেমন নাম এবং মডেল ঘোষণা করে। এই সবগুলি কীভাবে সেট আপ করা হয়েছে তা দেখতে আপনি device/google/marlin ডিরেক্টরি দেখতে পারেন৷

পণ্যের মেকফাইল লিখুন

নিম্নলিখিত পদক্ষেপগুলি বর্ণনা করে যে কীভাবে পিক্সেল পণ্য লাইনের মতো পণ্য মেকফাইল সেট আপ করতে হয়:

  1. আপনার পণ্যের জন্য একটি device/ <company-name> / <device-name> ডিরেক্টরি তৈরি করুন। উদাহরণস্বরূপ, device/google/marlin । এই ডিরেক্টরিতে মেকফাইলগুলি তৈরি করার জন্য আপনার ডিভাইসের জন্য সোর্স কোড থাকবে।
  2. একটি device.mk মেকফাইল তৈরি করুন যা ডিভাইসের জন্য প্রয়োজনীয় ফাইল এবং মডিউল ঘোষণা করে। একটি উদাহরণের জন্য, device/google/marlin/device-marlin.mk দেখুন।
  3. ডিভাইসের উপর ভিত্তি করে একটি নির্দিষ্ট পণ্য তৈরি করতে একটি পণ্য সংজ্ঞা মেকফাইল তৈরি করুন। নিম্নলিখিত মেকফাইলটি একটি উদাহরণ হিসাবে device/google/marlin/aosp_marlin.mk থেকে নেওয়া হয়েছে। লক্ষ্য করুন যে পণ্যটি device/google/marlin/device-marlin.mk এবং মেকফাইলের মাধ্যমে vendor/google/marlin/device-vendor-marlin.mk ফাইল থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয় যখন পণ্য-নির্দিষ্ট তথ্য যেমন নাম, ব্র্যান্ড, এবং মডেল।
    # Inherit from the common Open Source product configuration
    $(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
    $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk)
    
    PRODUCT_NAME := aosp_marlin
    PRODUCT_DEVICE := marlin
    PRODUCT_BRAND := Android
    PRODUCT_MODEL := AOSP on msm8996
    PRODUCT_MANUFACTURER := Google
    PRODUCT_RESTRICT_VENDOR_FILES := true
    
    PRODUCT_COPY_FILES += device/google/marlin/fstab.common:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.marlin
    
    $(call inherit-product, device/google/marlin/device-marlin.mk)
    $(call inherit-product-if-exists, vendor/google_devices/marlin/device-vendor-marlin.mk)
    
    PRODUCT_PACKAGES += \
        Launcher3QuickStep \
        WallpaperPicker
    

    অতিরিক্ত পণ্য-নির্দিষ্ট ভেরিয়েবলের জন্য পণ্য সংজ্ঞা ভেরিয়েবল সেট করা দেখুন যা আপনি আপনার মেকফাইলে যোগ করতে পারেন।

  4. একটি AndroidProducts.mk ফাইল তৈরি করুন যা পণ্যের মেকফাইলগুলি নির্দেশ করে৷ এই উদাহরণে, শুধুমাত্র পণ্য সংজ্ঞা makefile প্রয়োজন. নীচের উদাহরণটি device/google/marlin/AndroidProducts.mk (যাতে মার্লিন, পিক্সেল এবং সেলফিশ উভয়ই রয়েছে, পিক্সেল এক্সএল, যা সর্বাধিক কনফিগারেশন ভাগ করেছে):
    PRODUCT_MAKEFILES := \
    	$(LOCAL_DIR)/aosp_marlin.mk \
    	$(LOCAL_DIR)/aosp_sailfish.mk
    
    COMMON_LUNCH_CHOICES := \
    	aosp_marlin-userdebug \
    	aosp_sailfish-userdebug
    
  5. একটি BoardConfig.mk মেকফাইল তৈরি করুন যাতে বোর্ড-নির্দিষ্ট কনফিগারেশন থাকে। একটি উদাহরণের জন্য, device/google/marlin/BoardConfig.mk দেখুন।
  6. শুধুমাত্র Android 9 এবং তার নিচের সংস্করণের জন্য , একটি ড্যাশ দ্বারা পৃথক করা একটি বিল্ড ভেরিয়েন্ট সহ বিল্ডে আপনার পণ্য (একটি "লাঞ্চ কম্বো") যোগ করতে একটি vendorsetup.sh ফাইল তৈরি করুন৷ যেমন:
    add_lunch_combo <product-name>-userdebug
    
  7. এই মুহুর্তে, আপনি একই ডিভাইসের উপর ভিত্তি করে আরও পণ্যের বৈকল্পিক তৈরি করতে পারেন।

পণ্য সংজ্ঞা ভেরিয়েবল সেট করুন

পণ্য-নির্দিষ্ট ভেরিয়েবলগুলি পণ্যের মেকফাইলে সংজ্ঞায়িত করা হয়। টেবিলটি একটি পণ্য সংজ্ঞা ফাইলে রক্ষিত কিছু ভেরিয়েবল দেখায়।

পরিবর্তনশীল বর্ণনা উদাহরণ
PRODUCT_AAPT_CONFIG প্যাকেজ তৈরি করার সময় ব্যবহার করার জন্য aapt কনফিগারেশন।
PRODUCT_BRAND ব্র্যান্ড (উদাহরণস্বরূপ, ক্যারিয়ার) সফ্টওয়্যার জন্য কাস্টমাইজ করা হয়.
PRODUCT_CHARACTERISTICS একটি প্যাকেজে বৈকল্পিক-নির্দিষ্ট সংস্থান যোগ করার অনুমতি দেওয়ার জন্য aapt বৈশিষ্ট্য। tablet , nosdcard
PRODUCT_COPY_FILES source_path:destination_path এর মত শব্দের তালিকা। এই পণ্যটি তৈরি করার সময় উত্স পাথে ফাইলটি গন্তব্যের পথে অনুলিপি করা উচিত। অনুলিপি পদক্ষেপের নিয়মগুলি config/makefile এ সংজ্ঞায়িত করা হয়েছে।
PRODUCT_DEVICE শিল্প নকশার নাম। এটিও বোর্ডের নাম, এবং বিল্ড সিস্টেম এটি BoardConfig.mk সনাক্ত করতে ব্যবহার করে। tuna
PRODUCT_LOCALES দুই-অক্ষরের ভাষার কোডের একটি স্থান-বিচ্ছিন্ন তালিকা, দুই-অক্ষরের দেশের কোড জোড়া যা ব্যবহারকারীর জন্য বিভিন্ন সেটিংস বর্ণনা করে, যেমন UI ভাষা এবং সময়, তারিখ এবং মুদ্রা বিন্যাস। PRODUCT_LOCALES এ তালিকাভুক্ত প্রথম লোকেলটি পণ্যের ডিফল্ট লোকেল হিসাবে ব্যবহৃত হয়৷ en_GB , de_DE , es_ES , fr_CA
PRODUCT_MANUFACTURER প্রস্তুতকারকের নাম। acme
PRODUCT_MODEL শেষ পণ্যের জন্য শেষ-ব্যবহারকারী-দৃশ্যমান নাম।
PRODUCT_NAME সামগ্রিক পণ্যের জন্য শেষ-ব্যবহারকারী-দৃশ্যমান নাম। সেটিংস > সম্পর্কে স্ক্রিনে উপস্থিত হয়৷
PRODUCT_OTA_PUBLIC_KEYS পণ্যের জন্য ওভার-দ্য-এয়ার (OTA) পাবলিক কীগুলির তালিকা৷
PRODUCT_PACKAGES ইনস্টল করার জন্য APK এবং মডিউলগুলির তালিকা৷ ক্যালেন্ডার পরিচিতি
PRODUCT_PACKAGE_OVERLAYS ডিফল্ট রিসোর্স ব্যবহার করতে হবে নাকি কোনো পণ্য নির্দিষ্ট ওভারলে যোগ করতে হবে তা নির্দেশ করে। vendor/acme/overlay
PRODUCT_SYSTEM_PROPERTIES সিস্টেম পার্টিশনের জন্য "key=value" ফরম্যাটে সিস্টেম সম্পত্তি অ্যাসাইনমেন্টের তালিকা। অন্যান্য পার্টিশনের জন্য সিস্টেমের বৈশিষ্ট্য PRODUCT_<PARTITION>_PROPERTIES এর মাধ্যমে সেট করা যেতে পারে যেমনটি PRODUCT_VENDOR_PROPERTIES এ ভেন্ডর পার্টিশনের জন্য। সমর্থিত পার্টিশনের নাম: SYSTEM , VENDOR , ODM , SYSTEM_EXT , এবং PRODUCT

ডিফল্ট সিস্টেম ভাষা এবং লোকেল ফিল্টার কনফিগার করুন

ডিফল্ট ভাষা এবং সিস্টেম লোকেল ফিল্টার কনফিগার করতে এই তথ্যটি ব্যবহার করুন, তারপর একটি নতুন ডিভাইস প্রকারের জন্য লোকেল ফিল্টার সক্ষম করুন।

বৈশিষ্ট্য

ডেডিকেটেড সিস্টেম বৈশিষ্ট্য ব্যবহার করে ডিফল্ট ভাষা এবং সিস্টেম লোকেল ফিল্টার উভয়ই কনফিগার করুন:

  • ro.product.locale : ডিফল্ট লোকেল সেট করার জন্য। এটি প্রাথমিকভাবে PRODUCT_LOCALES ভেরিয়েবলের প্রথম লোকেলে সেট করা হয়েছে; আপনি যে মান ওভাররাইড করতে পারেন. (আরো তথ্যের জন্য, পণ্য সংজ্ঞা ভেরিয়েবল সেটিং টেবিল দেখুন।)
  • ro.localization.locale_filter : একটি লোকেল ফিল্টার সেট করার জন্য, স্থানীয় নামগুলিতে প্রয়োগ করা একটি রেগুলার এক্সপ্রেশন ব্যবহার করে। যেমন:
    • ইনক্লুসিভ ফিল্টার: ^(de-AT|de-DE|en|uk).* - শুধুমাত্র জার্মান (অস্ট্রিয়া এবং জার্মানি ভেরিয়েন্ট), ইংরেজির সমস্ত ইংরেজি ভেরিয়েন্ট এবং ইউক্রেনীয়কে অনুমতি দেয়
    • এক্সক্লুসিভ ফিল্টার: ^(?!de-IT|es).* - জার্মান (ইতালি ভেরিয়েন্ট) এবং স্প্যানিশ ভাষার সব রূপ বাদ দেয়।

লোকেল ফিল্টার সক্রিয় করুন

ফিল্টার সক্রিয় করতে, ro.localization.locale_filter সিস্টেম প্রপার্টি স্ট্রিং মান সেট করুন।

ফ্যাক্টরি ক্রমাঙ্কনের সময় oem/oem.prop এর মাধ্যমে ফিল্টার সম্পত্তি মান এবং ডিফল্ট ভাষা সেট করে আপনি সিস্টেম ইমেজে ফিল্টার বেক না করে সীমাবদ্ধতা কনফিগার করতে পারেন। আপনি নিশ্চিত করুন যে এই বৈশিষ্ট্যগুলিকে নীচে নির্দেশিত হিসাবে PRODUCT_OEM_PROPERTIES ভেরিয়েবলে যোগ করে OEM পার্টিশন থেকে নেওয়া হয়েছে:

# Delegation for OEM customization
PRODUCT_OEM_PROPERTIES += \
    ro.product.locale \
    ro.localization.locale_filter

তারপরে উত্পাদনে প্রকৃত মানগুলি oem/oem.prop এ লেখা হয়, লক্ষ্য প্রয়োজনীয়তাগুলি প্রতিফলিত করতে। এই পদ্ধতির সাহায্যে, ডিফল্ট মানগুলি ফ্যাক্টরি রিসেটের সময় ধরে রাখা হয়, তাই প্রাথমিক সেটিংস ব্যবহারকারীর কাছে প্রথম সেটআপের মতো দেখায়।

USB এর মাধ্যমে সংযোগ করতে ADB_VENDOR_KEYS সেট করুন৷

ADB_VENDOR_KEYS এনভায়রনমেন্ট ভেরিয়েবল ডিভাইস নির্মাতাদেরকে ম্যানুয়াল অনুমোদন ছাড়াই adb-এর মাধ্যমে ডিবাগযোগ্য বিল্ডগুলি (-userdebug এবং -eng, কিন্তু -user নয়) অ্যাক্সেস করতে সক্ষম করে। সাধারণত adb প্রতিটি ক্লায়েন্ট কম্পিউটারের জন্য একটি অনন্য RSA প্রমাণীকরণ কী তৈরি করে, যা এটি যেকোনো সংযুক্ত ডিভাইসে পাঠাবে। এটি অ্যাডবি অনুমোদন ডায়ালগে দেখানো RSA কী। বিকল্প হিসেবে আপনি সিস্টেম ইমেজে পরিচিত কী তৈরি করতে পারেন এবং এডিবি ক্লায়েন্টের সাথে শেয়ার করতে পারেন। এটি OS ডেভেলপমেন্টের জন্য এবং বিশেষ করে পরীক্ষার জন্য উপযোগী কারণ এটি adb অনুমোদন ডায়ালগের সাথে ম্যানুয়ালি ইন্টারঅ্যাক্ট করার প্রয়োজন এড়ায়।

বিক্রেতা কী তৈরি করতে, একজন ব্যক্তির (সাধারণত একজন রিলিজ ম্যানেজার) উচিত:

  1. adb keygen ব্যবহার করে একটি কী জোড়া তৈরি করুন। Google ডিভাইসগুলির জন্য, Google প্রতিটি নতুন OS সংস্করণের জন্য একটি নতুন কী জোড়া তৈরি করে৷
  2. উৎস গাছের কোথাও কী জোড়া চেক করুন। Google সেগুলিকে vendor/google/security/adb/ এ সঞ্চয় করে, উদাহরণস্বরূপ।
  3. আপনার কী ডিরেক্টরিতে নির্দেশ করতে বিল্ড ভেরিয়েবল PRODUCT_ADB_KEYS সেট করুন। PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub বলে কী ডিরেক্টরিতে একটি Android.mk ফাইল যোগ করার মাধ্যমে Google এটি করে, যা প্রতিটি OS সংস্করণের জন্য একটি নতুন কী জোড়া তৈরি করতে আমরা মনে রাখি তা নিশ্চিত করতে সাহায্য করে৷

এই মেকফাইলটি Google ব্যবহার করে ডিরেক্টরিতে যেখানে আমরা প্রতিটি রিলিজের জন্য আমাদের চেক-ইন কী জোড়া সংরক্ষণ করি:

PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub

ifeq ($(wildcard $(PRODUCT_ADB_KEYS)),)
  $(warning ========================)
  $(warning The adb key for this release)
  $(warning )
  $(warning   $(PRODUCT_ADB_KEYS))
  $(warning )
  $(warning does not exist. Most likely PLATFORM_VERSION in build/core/version_defaults.mk)
  $(warning has changed and a new adb key needs to be generated.)
  $(warning )
  $(warning Please run the following commands to create a new key:)
  $(warning )
  $(warning   make -j8 adb)
  $(warning   LOGNAME=android-eng HOSTNAME=google.com adb keygen $(patsubst %.pub,%,$(PRODUCT_ADB_KEYS)))
  $(warning )
  $(warning and upload/review/submit the changes)
  $(warning ========================)
  $(error done)
endif

এই বিক্রেতা কীগুলি ব্যবহার করার জন্য, একজন প্রকৌশলীকে শুধুমাত্র ADB_VENDOR_KEYS এনভায়রনমেন্ট ভেরিয়েবল সেট করতে হবে যে ডিরেক্টরিতে কী জোড়া সংরক্ষিত আছে তা নির্দেশ করতে। এটি adb প্রথমে এই ক্যানোনিকাল কীগুলি চেষ্টা করতে বলে, তৈরি করা হোস্ট কী-তে ফিরে যাওয়ার আগে যার জন্য ম্যানুয়াল অনুমোদন প্রয়োজন৷ যখন adb একটি অননুমোদিত ডিভাইসের সাথে সংযোগ করতে পারে না, তখন ত্রুটি বার্তাটি আপনাকে ADB_VENDOR_KEYS সেট করার পরামর্শ দেবে যদি এটি ইতিমধ্যে সেট না থাকে৷