ABI পর্যবেক্ষণ চালান

এই পৃষ্ঠাটি বর্ণনা করে যে কীভাবে অ্যান্ড্রয়েড কার্নেল এবিআই উপস্থাপনা তৈরি করতে হয় এবং এবিআই পর্যবেক্ষণ চালাতে হয়। এটি Android 16 এবং উচ্চতর সংস্করণের জন্য প্রযোজ্য। নিম্ন সংস্করণের জন্য, ABI মনিটরের পূর্ববর্তী কার্নেল সংস্করণগুলি পড়ুন।

এছাড়াও ক্লিফের রেফারেন্স ডকুমেন্টেশন দেখুন: সাপোর্ট এবিআই মনিটরিং (জিকেআই) এবং সাপোর্ট এবিআই মনিটরিং (ডিভাইস)

কার্নেল এবং এর ABI উপস্থাপনা তৈরি করুন

GKI উত্সগুলি ডাউনলোড করার পরে GKI কার্নেল এবং ABI আর্টিফ্যাক্টগুলি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

tools/bazel run //common:kernel_aarch64_abi_dist

এই কমান্ডটি বর্তমান ABI প্রতিনিধিত্ব তৈরি করে এবং নির্মিত কার্নেল এবং মডিউল সহ $DIST_DIR/abi.stg এ কপি করে। $DIST_DIR ডিফল্ট out_abi/kernel_aarch64_abi_dist/dist .

কমান্ডের শেষে আপনি ABI টুলিংয়ের জন্য অতিরিক্ত আর্গুমেন্ট উল্লেখ করতে পারেন -- এর পরে। উদাহরণস্বরূপ ABI-এর জন্য গন্তব্য পরিবর্তন করতে এবং শিল্পকর্ম তৈরি করতে, আপনি --dist_dir বিকল্পটি ব্যবহার করতে পারেন:

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

বিল্ড এবং একটি রেফারেন্স প্রতিনিধিত্ব মধ্যে ABI পার্থক্য বিশ্লেষণ

//common:kernel_aarch64_abi_dist টার্গেট, পূর্ববর্তী কমান্ডে সম্পাদিত, common/gki/aarch64/abi.stg ( BUILD.bazel এ সংজ্ঞায়িত) এ অবস্থিত বিল্ড এবং রেফারেন্স প্রতিনিধিত্বের মধ্যে পাওয়া যে কোনো ABI পার্থক্য বিশ্লেষণ করে রিপোর্ট করে। এই পার্থক্যগুলি বিল্ডের শেষে প্রিন্ট করা হয়, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

মুদ্রিত প্রতিবেদনটি $DIST_DIR/abi_stgdiff/abi.report.short এ অবস্থিত বিল্ড আর্টিফ্যাক্ট থেকে আসে এবং অন্যান্য ফরম্যাটে রিপোর্টের সাথে।

অটোমেশনের জন্য বিল্ড কমান্ডের প্রস্থান কোড ব্যবহার করা উচিত, যা পার্থক্য পাওয়া গেলে শূন্য নয়।

মনে রাখবেন যে ডেভেলপমেন্ট ফেজ শাখা, android-mainline সহ, কোন রেফারেন্স ABI প্রতিনিধিত্ব নেই। এটি ছাড়া, //common:kernel_aarch64_abi_dist কোনো পার্থক্য সনাক্ত করবে না।

রেফারেন্স ABI প্রতিনিধিত্ব আপডেট করুন

কার্নেল ABI-কে প্রভাবিত করে এমন যেকোনো পরিবর্তন, যেমন একটি প্রতীক তালিকা আপডেট , রেফারেন্স ABI উপস্থাপনা ( common/gki/aarch64/abi.stg , BUILD.bazel এ সংজ্ঞায়িত) প্রতিফলিত হওয়া প্রয়োজন। এটি করার জন্য আপনাকে নিম্নলিখিত কমান্ডটি চালাতে হবে:

tools/bazel run //common:kernel_aarch64_abi_update

এই কমান্ডটি এবিআই পার্থক্যগুলি বিশ্লেষণ করার ধাপে সবকিছু সম্পাদন করে এবং অতিরিক্তভাবে উত্সগুলিতে রেফারেন্স উপস্থাপনা আপডেট করে। আপডেট করা ABI তারপর পরিবর্তনের মতো একই প্রতিশ্রুতিতে আপলোড করা যেতে পারে। কমিট মেসেজে $DIST_DIR/abi_stgdiff/abi.report.short এ রিপোর্ট থেকে ABI পার্থক্যগুলি অন্তর্ভুক্ত করুন।

এবিআই পর্যবেক্ষণ এবং ডিভাইস লক্ষ্য

ABI মনিটরিং শুধুমাত্র মূল কার্নেল বিল্ড লক্ষ্যগুলির জন্য কনফিগার করা প্রয়োজন। মিশ্র বিল্ড কনফিগারেশন (যেগুলি base_kernel সংজ্ঞায়িত করে) যেগুলি সরাসরি GKI কার্নেলের সাথে কম্পাইল করে শুধুমাত্র ডিভাইস প্রতীক তালিকা ট্র্যাক করার জন্য সমর্থন যোগ করতে হবে । ABI সংজ্ঞা GKI বিল্ড ব্যবহার করে আপডেট করা উচিত

এছাড়াও ক্লিফের জন্য রেফারেন্স ডকুমেন্টেশন দেখুন: ABI পর্যবেক্ষণ (ডিভাইস) সমর্থন করুন

ABI পূর্ববর্তী কার্নেল সংস্করণগুলি পর্যবেক্ষণ করে (Android 15 এবং নিম্নতর)

পূর্ববর্তী কার্নেল সংস্করণগুলির জন্য, ABI নির্মাণ এবং পর্যবেক্ষণ নির্দেশাবলী নিম্নরূপ ভিন্ন।

অ্যান্ড্রয়েড 15 এবং 14

নির্দেশাবলী বেশিরভাগই অ্যান্ড্রয়েড 16 এর মতই, রেফারেন্স ABI উপস্থাপনা common/android/abi_gki_aarch64.stg এবং $DIST_DIR ডিফল্ট out_abi/kernel_aarch64/dist ব্যতীত।

অ্যান্ড্রয়েড 13

অ্যান্ড্রয়েড 13 হয় ক্লিফ বা লিগ্যাসি বিল্ড স্ক্রিপ্ট দিয়ে তৈরি করা যেতে পারে।

ক্লিফের জন্য, নির্দেশাবলী Android 14 এর মতোই, ABI ফর্ম্যাটটি XML এবং রেফারেন্স ABI উপস্থাপনাটি common/android/abi_gki_aarch64.xml ছাড়া।

লিগ্যাসি বিল্ড স্ক্রিপ্টগুলির জন্য, নির্দেশাবলী Android 12 এর মতোই।

অ্যান্ড্রয়েড 12 এবং তার নিচের

ABI ফর্ম্যাট হল XML এবং রেফারেন্স ABI উপস্থাপনা হল common/android/abi_gki_aarch64.xml

এই কার্নেল ক্লিফের পরিবর্তে build.sh ব্যবহার করে। ABI পর্যবেক্ষণের জন্য আপনাকে build_abi.sh ব্যবহার করতে হবে, যা বিল্ডকে build.sh হিসাবে কাস্টমাইজ করতে একই পরিবেশের ভেরিয়েবল গ্রহণ করে। যেমন:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

এটি কার্নেল তৈরি করে এবং OUT_DIR (যা ডিফল্টরূপে out_abi হয়) সাবডিরেক্টরিতে ABI উপস্থাপনা বের করে এবং এটি ক্লিফের //common:kernel_aarch64_abi_dist লক্ষ্যের সমতুল্য (দেখুন বিল্ড কার্নেল এবং এবিআই আর্টিফ্যাক্টস )।

রেফারেন্স ABI উপস্থাপনাটি android/abi_gki_aarch64.xml এ সংরক্ষণ করা হয়েছে যেমন ABI_DEFINITION ভেরিয়েবল common/build.config.gki.aarch64 দ্বারা সংজ্ঞায়িত করা হয়েছে।

আপনি যদি কার্নেল ABI উপস্থাপনা আপডেট করতে চান, তাহলে সবচেয়ে সুবিধাজনক উপায় হল --update এবং --print-report বিকল্পগুলি ব্যবহার করা:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

--print-report ফাইলটি বিদ্যমান এবং একটি নতুন-উত্পাদিত ABI-এর মধ্যে ABI পার্থক্য প্রিন্ট করে।

--update বিকল্পটি রেফারেন্স ABI উপস্থাপনাকে ওভাররাইট করে। এটি KMI_SYMBOL_LIST কনফিগার করা ডিভাইসের জন্য BUILD_CONFIG ব্যবহার করার সময় প্রতীক তালিকা আপডেটও করে।