এই পৃষ্ঠায় অ্যান্ড্রয়েড কার্নেল ABI রিপ্রেজেন্টেশন তৈরি করার এবং ABI মনিটরিং চালানোর পদ্ধতি বর্ণনা করা হয়েছে। এটি অ্যান্ড্রয়েড ১৬ এবং তার পরবর্তী সংস্করণগুলোর জন্য প্রযোজ্য। এর চেয়ে নিম্ন সংস্করণগুলোর জন্য, পূর্ববর্তী কার্নেল সংস্করণগুলোর ABI মনিটর অংশটি দেখুন।
এছাড়াও Kleaf-এর জন্য রেফারেন্স ডকুমেন্টেশন দেখুন: Support ABI monitoring (GKI) এবং Support ABI monitoring (Device) ।
কার্নেল এবং এর 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 এবং বিল্ড আর্টিফ্যাক্টের গন্তব্য পরিবর্তন করতে, আপনি --destdir অপশনটি ব্যবহার করতে পারেন:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=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 এই কমান্ডটি "Analyze the ABI differences" ধাপের সমস্ত কাজ সম্পাদন করে এবং এর পাশাপাশি সোর্সগুলিতে রেফারেন্স রিপ্রেজেন্টেশন আপডেট করে। এরপর আপডেট করা ABI-টি পরিবর্তনের সাথে একই কমিটে আপলোড করা যেতে পারে। $DIST_DIR/abi_stgdiff/abi.report.short এ থাকা রিপোর্ট থেকে প্রাপ্ত ABI পার্থক্যগুলো কমিট মেসেজে অন্তর্ভুক্ত করুন।
ABI পর্যবেক্ষণ এবং ডিভাইসের লক্ষ্য
শুধুমাত্র কোর কার্নেল বিল্ড টার্গেটগুলোর জন্য ABI মনিটরিং কনফিগার করার প্রয়োজন হয়। মিক্সড বিল্ড কনফিগারেশন (যেগুলো base_kernel সংজ্ঞায়িত করে) যেগুলো সরাসরি GKI কার্নেল দিয়ে কম্পাইল হয়, সেগুলোর ক্ষেত্রে শুধু ডিভাইস সিম্বল লিস্ট ট্র্যাক করার জন্য সাপোর্ট যোগ করতে হবে । GKI বিল্ড ব্যবহার করে ABI ডেফিনিশনটি আপডেট করা উচিত ।
Kleaf-এর জন্য রেফারেন্স ডকুমেন্টেশন আরও দেখুন: ABI মনিটরিং সাপোর্ট (ডিভাইস) ।
ABI মনিটর পূর্ববর্তী কার্নেল সংস্করণ (অ্যান্ড্রয়েড ১৫ এবং তার নিচের সংস্করণ)
পূর্ববর্তী কার্নেল সংস্করণগুলির ক্ষেত্রে, ABI বিল্ড এবং মনিটরিং নির্দেশাবলী নিম্নরূপভাবে ভিন্ন।
অ্যান্ড্রয়েড ১৫ এবং ১৪
নির্দেশাবলী মূলত অ্যান্ড্রয়েড ১৬-এর মতোই, তবে পার্থক্য হলো রেফারেন্স ABI রিপ্রেজেন্টেশনটি হলো common/android/abi_gki_aarch64.stg এবং $DIST_DIR ডিফল্টভাবে out_abi/kernel_aarch64/dist হয়।
অ্যান্ড্রয়েড ১৩
অ্যান্ড্রয়েড ১৩ ক্লিফ (Kleaf) অথবা লিগ্যাসি বিল্ড স্ক্রিপ্ট ব্যবহার করে বিল্ড করা যেতে পারে।
Kleaf-এর জন্য নির্দেশাবলী Android 14-এর মতোই, তবে এক্ষেত্রে ABI ফরম্যাটটি হলো XML এবং রেফারেন্স ABI রিপ্রেজেন্টেশনটি হলো common/android/abi_gki_aarch64.xml ।
লিগ্যাসি বিল্ড স্ক্রিপ্টগুলোর জন্য নির্দেশনাগুলো অ্যান্ড্রয়েড ১২-এর মতোই।
অ্যান্ড্রয়েড ১২ এবং তার নিচের সংস্করণ
ABI ফরম্যাটটি হলো XML এবং রেফারেন্স ABI রিপ্রেজেন্টেশনটি হলো common/android/abi_gki_aarch64.xml
এই কার্নেলগুলো Kleaf-এর পরিবর্তে build.sh ব্যবহার করে। ABI মনিটরিং-এর জন্য আপনার build_abi.sh ব্যবহার করা উচিত, যা build.sh মতোই বিল্ড কাস্টমাইজ করার জন্য একই এনভায়রনমেন্ট ভেরিয়েবল গ্রহণ করে। উদাহরণস্বরূপ:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh এটি কার্নেল বিল্ড করে এবং ABI রিপ্রেজেন্টেশনকে OUT_DIR (যা ডিফল্টরূপে out_abi ) সাবডিরেক্টরিতে এক্সট্র্যাক্ট করে, যা Kleaf-এর //common:kernel_aarch64_abi_dist টার্গেটের সমতুল্য (দেখুন Build kernel and ABI artifacts )।
common/build.config.gki.aarch64 এর ABI_DEFINITION ভেরিয়েবল দ্বারা সংজ্ঞায়িত রেফারেন্স ABI রিপ্রেজেন্টেশনটি android/abi_gki_aarch64.xml এ সংরক্ষিত থাকে।
যদি আপনার কার্নেল ABI উপস্থাপনা আপডেট করার প্রয়োজন হয়, তাহলে সবচেয়ে সুবিধাজনক উপায় হলো --update এবং --print-report অপশনগুলো ব্যবহার করা:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report --print-report ফাইলের বিদ্যমান অবস্থা এবং নতুনভাবে তৈরি হওয়া ABI-এর মধ্যেকার পার্থক্যগুলো প্রিন্ট করে।
--update অপশনটি রেফারেন্স ABI রিপ্রেজেন্টেশনকে ওভাররাইট করে। এছাড়াও, KMI_SYMBOL_LIST কনফিগার করা কোনো ডিভাইসের জন্য BUILD_CONFIG ব্যবহার করার সময় এটি সিম্বল লিস্টও আপডেট করে।