কিভাবে ABI মনিটরিং চালাবেন

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

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

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

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

tools/bazel run //common:kernel_aarch64_abi_dist

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

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

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

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

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

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

প্রিন্ট করা রিপোর্টটি out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short এ অবস্থিত বিল্ড আর্টিফ্যাক্ট থেকে এসেছে এবং অন্যান্য ফরম্যাটে রিপোর্ট রয়েছে।

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

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

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

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

​​tools/bazel run //common:kernel_aarch64_abi_update

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

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

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

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

পুরানো কার্নেল সংস্করণ

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

বিল্ড নির্দেশাবলী বেশিরভাগই অ্যান্ড্রয়েড 14 এর মতই, তবে ABI ফরম্যাটটি XML এবং রেফারেন্স ABI উপস্থাপনা common/android/abi_gki_aarch64.xml

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

অ্যান্ড্রয়েড 13-এর মতো, ABI ফর্ম্যাট হল XML।

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

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

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

রেফারেন্স 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 ব্যবহার করার সময় প্রতীক তালিকা আপডেটও করে।