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

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

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

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

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

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

বিল্ড ভেরিয়েন্ট ব্যবহার করুন

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

যদি কোন মডিউল কোন ট্যাগ নির্দিষ্ট না করে ( LOCAL_MODULE_TAGS দ্বারা), তাহলে তার ট্যাগটি ডিফল্টভাবে optional হিসেবে সেট করা হবে। PRODUCT_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 কে আপনার শীর্ষ-স্তরের ডিরেক্টরির সাথে সম্পর্কিত একটি পাথে সেট করুন। বিল্ড সিস্টেম যখন রিসোর্স অনুসন্ধান করে তখন সেই পাথটি বর্তমান রুটের সাথে অনুসন্ধান করা একটি ছায়া রুট হয়ে যায়।

সবচেয়ে বেশি কাস্টমাইজ করা সেটিংস frameworks/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

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

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

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

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

পণ্য তৈরির ফাইল লিখুন

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

  1. আপনার পণ্যের জন্য একটি device/ <company-name> / <device-name> ডিরেক্টরি তৈরি করুন। উদাহরণস্বরূপ, device/google/marlin । এই ডিরেক্টরিতে আপনার ডিভাইসের জন্য সোর্স কোড থাকবে এবং সেগুলি তৈরি করার জন্য মেকফাইলগুলিও থাকবে।
  2. একটি device.mk makefile তৈরি করুন যা ডিভাইসের জন্য প্রয়োজনীয় ফাইল এবং মডিউলগুলি ঘোষণা করে। উদাহরণস্বরূপ, device/google/marlin/device-marlin.mk দেখুন।
  3. ডিভাইসের উপর ভিত্তি করে একটি নির্দিষ্ট পণ্য তৈরি করতে একটি পণ্য সংজ্ঞা makefile তৈরি করুন। নিম্নলিখিত makefileটি উদাহরণ হিসেবে device/google/marlin/aosp_marlin.mk থেকে নেওয়া হয়েছে। লক্ষ্য করুন যে পণ্যটি device/google/marlin/device-marlin.mk এবং vendor/google/marlin/device-vendor-marlin.mk ফাইল থেকে makefile এর মাধ্যমে উত্তরাধিকারসূত্রে আসে এবং একই সাথে নাম, ব্র্যান্ড এবং মডেলের মতো পণ্য-নির্দিষ্ট তথ্য ঘোষণা করে।
    # 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 ফাইল তৈরি করুন যা পণ্যের মেকফাইলগুলিকে নির্দেশ করে। এই উদাহরণে, শুধুমাত্র পণ্যের সংজ্ঞা মেকফাইল প্রয়োজন। নীচের উদাহরণটি 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 makefile তৈরি করুন যাতে বোর্ড-নির্দিষ্ট কনফিগারেশন থাকে। উদাহরণস্বরূপ, 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_VENDOR_PROPERTIES এর মতো PRODUCT_<PARTITION>_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 মাধ্যমে ফিল্টার প্রোপার্টি মান এবং ডিফল্ট ভাষা সেট করে আপনি সিস্টেম ইমেজে ফিল্টার বেক না করেই সীমাবদ্ধতা কনফিগার করতে পারেন। আপনি নিশ্চিত করতে পারেন যে এই প্রোপার্টিগুলি OEM পার্টিশন থেকে PRODUCT_OEM_PROPERTIES ভেরিয়েবলে যোগ করে নেওয়া হয়েছে যেমনটি নীচে নির্দেশিত হয়েছে:

# 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 প্রমাণীকরণ কী তৈরি করে, যা এটি যেকোনো সংযুক্ত ডিভাইসে পাঠাবে। এটি adb অনুমোদন ডায়ালগে দেখানো RSA কী। বিকল্প হিসাবে আপনি সিস্টেম ইমেজে পরিচিত কী তৈরি করতে পারেন এবং সেগুলি adb ক্লায়েন্টের সাথে শেয়ার করতে পারেন। এটি OS ডেভেলপমেন্টের জন্য এবং বিশেষ করে পরীক্ষার জন্য কার্যকর কারণ এটি adb অনুমোদন ডায়ালগের সাথে ম্যানুয়ালি ইন্টারঅ্যাক্ট করার প্রয়োজন এড়ায়।

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

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

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

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 সেট করার পরামর্শ দেবে যদি এটি ইতিমধ্যে সেট না থাকে।