यह अनुभाग वर्णन करता है कि एंड्रॉइड कर्नेल एबीआई अभ्यावेदन कैसे बनाएं और एबीआई मॉनिटरिंग कैसे चलाएं। यह एंड्रॉइड 14 और उच्चतर पर लागू है। पुराने संस्करणों के लिए, कृपया पुराने कर्नेल संस्करण देखें।
क्लीफ़ के लिए संदर्भ दस्तावेज़ भी देखें: समर्थन एबीआई निगरानी (जीकेआई) और समर्थन एबीआई निगरानी (डिवाइस) ।
कर्नेल और उसके ABI प्रतिनिधित्व का निर्माण करें
GKI स्रोतों को डाउनलोड करने के बाद GKI कर्नेल और ABI कलाकृतियों को बनाने के लिए निम्नलिखित कमांड चलाएँ:
tools/bazel run //common:kernel_aarch64_abi_dist
यह कमांड वर्तमान ABI प्रतिनिधित्व बनाता है और इसे निर्मित कर्नेल और मॉड्यूल के साथ out_abi/kernel_aarch64/dist/abi.stg
पर कॉपी करता है।
आप --
के बाद कमांड के अंत में एबीआई टूलिंग के लिए अतिरिक्त तर्क निर्दिष्ट कर सकते हैं। उदाहरण के लिए, एबीआई के लिए गंतव्य बदलने और कलाकृतियों का निर्माण करने के लिए, आप --dist_dir
विकल्प का उपयोग कर सकते हैं:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
बिल्ड और संदर्भ प्रतिनिधित्व के बीच एबीआई अंतर का विश्लेषण करें
//common:kernel_aarch64_abi_dist
लक्ष्य, ऊपर दिए गए आदेश में निष्पादित, common/android/abi_gki_aarch64.stg
( BUILD.bazen में परिभाषित) पर स्थित बिल्ड और संदर्भ प्रतिनिधित्व के बीच पाए गए किसी भी 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
किसी भी अंतर का पता नहीं लगाएगा।
संदर्भ एबीआई प्रतिनिधित्व अद्यतन करें
कोई भी परिवर्तन जो कर्नेल एबीआई को प्रभावित करता है, जैसे प्रतीक सूची अद्यतन , को संदर्भ एबीआई प्रतिनिधित्व ( common/android/abi_gki_aarch64.stg
, BUILD.bazen में परिभाषित) में प्रतिबिंबित करने की आवश्यकता है। ऐसा करने के लिए आपको निम्नलिखित कमांड चलाने की आवश्यकता है:
tools/bazel run //common:kernel_aarch64_abi_update
यह आदेश एबीआई अंतरों का विश्लेषण करने के चरण में सब कुछ निष्पादित करता है और स्रोतों में संदर्भ प्रतिनिधित्व को अतिरिक्त रूप से अद्यतन करता है। फिर अद्यतन एबीआई को परिवर्तन के समान कमिट में अपलोड किया जा सकता है। कृपया प्रतिबद्ध संदेश में $DIST_DIR/abi.report.short
में रिपोर्ट से ABI अंतर शामिल करें।
एबीआई निगरानी और डिवाइस लक्ष्य
एबीआई मॉनिटरिंग को केवल कोर कर्नेल बिल्ड लक्ष्यों के लिए कॉन्फ़िगर करने की आवश्यकता है। मिश्रित बिल्ड कॉन्फ़िगरेशन (जो base_kernel
परिभाषित करते हैं) जो सीधे जीकेआई कर्नेल के साथ संकलित होते हैं , उन्हें केवल डिवाइस प्रतीक सूची को ट्रैक करने के लिए समर्थन जोड़ने की आवश्यकता होती है। GKI बिल्ड का उपयोग करके ABI परिभाषा को अद्यतन किया जाना चाहिए ।
क्लीफ़ के लिए संदर्भ दस्तावेज़ भी देखें: एबीआई मॉनिटरिंग (डिवाइस) का समर्थन करें ।
पुराने कर्नेल संस्करण
एंड्रॉइड 13
बिल्ड निर्देश अधिकतर Android 14 के समान हैं, सिवाय इसके कि ABI प्रारूप XML है और संदर्भ ABI प्रतिनिधित्व common/android/abi_gki_aarch64.xml
है।
एंड्रॉइड 12 और उससे नीचे का संस्करण
Android 13 की तरह, ABI प्रारूप XML है।
पुराने कर्नेल क्लीफ़ के बजाय build.sh
का उपयोग करते हैं। एबीआई मॉनिटरिंग के लिए आपको 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
में संग्रहीत किया जाता है, जैसा कि common/build.config.gki.aarch64
में ABI_DEFINITION
चर द्वारा परिभाषित किया गया है।
यदि आपको कर्नेल एबीआई प्रतिनिधित्व को अपडेट करने की आवश्यकता है, तो सबसे सुविधाजनक तरीका --update
और --print-report
विकल्पों का उपयोग करना है:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
मौजूदा फ़ाइल और नव-निर्मित एबीआई के बीच एबीआई अंतर को प्रिंट करती है।
--update
विकल्प संदर्भ ABI प्रतिनिधित्व को अधिलेखित कर देता है। KMI_SYMBOL_LIST
कॉन्फ़िगर किए गए डिवाइस के लिए BUILD_CONFIG
उपयोग करते समय यह प्रतीक सूची अद्यतन भी करता है।