एबीआई मॉनिटरिंग की सुविधा चालू करना

इस पेज पर, Android कर्नेल एबीआई को दिखाने और उसे चलाने का तरीका बताया गया है एबीआई की निगरानी. यह सिर्फ़ Android 14 और उच्च. पुराने वर्शन के लिए, यह देखें कर्नेल के पुराने वर्शन.

Kleaf के लिए रेफ़रंस दस्तावेज़ भी देखें: एबीआई मॉनिटरिंग (GKI) के साथ काम करना और एबीआई मॉनिटरिंग (डिवाइस) के साथ काम करना.

कर्नेल और उसका एबीआई रूप बनाएं

जीकेआई सोर्स डाउनलोड करने के बाद GKI कर्नेल और ABI आर्टफ़ैक्ट बनाने के लिए, नीचे दिया गया कमांड चलाएँ:

tools/bazel run //common:kernel_aarch64_abi_dist

यह कमांड, मौजूदा एबीआई को तैयार करता है और इसे 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.bazel). इन अंतरों को बिल्ड के अंत में प्रिंट किया जाता है, जैसा कि नीचे दिया गया उदाहरण:

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 जैसी ब्रांच में, एबीआई का कोई रेफ़रंस नहीं होता है. इसके बिना, //common:kernel_aarch64_abi_dist को कोई अंतर नहीं दिखेगा.

रेफ़रंस एबीआई का प्रतिनिधित्व अपडेट करना

सिंबल की सूची में बदलाव जैसे, कर्नेल एबीआई पर असर डालने वाले किसी भी बदलाव को रेफ़रंस एबीआई के रेप्रज़ेंटेशन (common/android/abi_gki_aarch64.stg, BUILD.bazel में बताया गया है) में दिखाया जाना चाहिए. इसके लिए, आपको यह कमांड चलाना होगा:

​​tools/bazel run //common:kernel_aarch64_abi_update

यह कमांड, एबीआई के अंतर का विश्लेषण करें चरण में मौजूद सभी काम करता है. साथ ही, सोर्स में रेफ़रंस का प्रतिनिधित्व भी अपडेट करता है. इसके बाद, अपडेट किया गया एबीआई जो परिवर्तन के समान हैं. ये अंतर शामिल करें कि तय किए गए मैसेज में $DIST_DIR/abi.report.short की शिकायत करें.

एबीआई की निगरानी और डिवाइस टारगेट

एबीआई मॉनिटरिंग को सिर्फ़ मुख्य कर्नेल बिल्ड टारगेट के लिए कॉन्फ़िगर करना ज़रूरी है. मिले-जुले बिल्ड कॉन्फ़िगरेशन (जो base_kernel को परिभाषित करते हैं) जो सीधे GKI कर्नेल को सिर्फ़ डिवाइस सिंबल को ट्रैक करने के लिए सहायता जोड़नी होगी सूची में बदल दिया जाएगा. एबीआई की परिभाषा को जीकेआई बिल्ड का इस्तेमाल करके अपडेट किया जाना चाहिए.

Kleaf के लिए रेफ़रंस दस्तावेज़ भी देखें: एबीआई मॉनिटर करने की सुविधा के साथ काम करता है (डिवाइस).

kernel के पुराने वर्शन

Android 13

Android 14 के बने बंडल के लिए दिए गए निर्देशों के मुकाबले, Android 15 के लिए दिए गए निर्देशों में ज़्यादा अंतर नहीं है. हालांकि, ABI फ़ॉर्मैट एक्सएमएल है और रेफ़रंस ABI का प्रतिनिधित्व common/android/abi_gki_aarch64.xml है.

Android 13 और उससे पहले वाले वर्शन के लिए

Android 13 की तरह ही, एबीआई फ़ॉर्मैट, एक्सएमएल होता है.

पुराने कर्नेल Kleaf के बजाय build.sh का इस्तेमाल करते हैं. एबीआई की निगरानी के लिए, आपको build_abi.sh का इस्तेमाल करना चाहिए. यह build.sh की तरह ही, बिल्ड को पसंद के मुताबिक बनाने के लिए, वही एनवायरमेंट वैरिएबल स्वीकार करता है. उदाहरण के लिए:

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

इससे कर्नेल बनता है और एबीआई का प्रतिनिधित्व, OUT_DIR (जो डिफ़ॉल्ट रूप से out_abi होता है) सबडायरेक्ट्री में निकाला जाता है. यह Kleaf के //common:kernel_aarch64_abi_dist टारगेट के बराबर होता है. ज़्यादा जानकारी के लिए, कर्नेल और एबीआई आर्टफ़ैक्ट बनाएं लेख पढ़ें.

रेफ़रंस एबीआई के तौर पर दिखाने के तरीके को 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 विकल्प, रेफ़रंस एबीआई के रेप्रज़ेंटेशन को ओवरराइट करता है. KMI_SYMBOL_LIST कॉन्फ़िगर किए गए डिवाइस के लिए BUILD_CONFIG का इस्तेमाल करने पर, यह सिंबल की सूची को अपडेट भी करता है.