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

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

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

कर्नेल और उसके एबीआई का प्रतिनिधित्व बनाएं

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

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.batz में दी गई है). ऐसा करने के लिए, आपको यह कमांड चलाना होगा:

​​tools/bazel run //common:kernel_aarch64_abi_update

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

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

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

Kलीफ़ के लिए रेफ़रंस दस्तावेज़ भी देखें: एबीआई से निगरानी करने की सुविधा (डिवाइस).

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 का इस्तेमाल करने पर, यह सिंबल की सूची को अपडेट भी करता है.