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

इस पेज पर, Android kernel ABI के रिप्रज़ेंटेशन बनाने और ABI की निगरानी करने का तरीका बताया गया है. यह सुविधा, Android 16 और उसके बाद के वर्शन वाले डिवाइसों पर काम करती है. पुराने वर्शन के लिए, एबीआई मॉनिटर के पिछले कर्नेल वर्शन देखें.

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

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

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

tools/bazel run //common:kernel_aarch64_abi_dist

यह कमांड, मौजूदा एबीआई (ऑब्जेक्ट फ़ाइल फ़ॉर्मैट) का प्रतिनिधित्व बनाता है और इसे बने हुए कर्नेल और मॉड्यूल के साथ $DIST_DIR/abi.stg में कॉपी करता है. $DIST_DIR डिफ़ॉल्ट रूप से out_abi/kernel_aarch64_abi_dist/dist पर सेट होती है.

-- के बाद कमांड के आखिर में, एबीआई टूल के लिए अतिरिक्त आर्ग्युमेंट दिए जा सकते हैं. उदाहरण के लिए, एबीआई के लिए डेस्टिनेशन बदलने और आर्टफ़ैक्ट बनाने के लिए, --dist_dir विकल्प का इस्तेमाल किया जा सकता है:

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

बिल्ड और रेफ़रंस रिप्रज़ेंटेशन के बीच एबीआई के अंतर का विश्लेषण करना

पिछले निर्देश में इस्तेमाल किया गया //common:kernel_aarch64_abi_dist टारगेट, common/gki/aarch64/abi.stg (BUILD.bazel में बताया गया है) में मौजूद बिल्ड और रेफ़रंस रिप्रज़ेंटेशन के बीच मिले किसी भी एबीआई अंतर का विश्लेषण करता है और उसकी शिकायत करता है. ये अंतर, बिल्ड के आखिर में प्रिंट किए जाते हैं, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

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 के साथ-साथ, डेवलपमेंट फ़ेज़ की शाखाओं में, एबीआई का कोई रेफ़रंस नहीं होता. इसके बिना, //common:kernel_aarch64_abi_dist किसी भी अंतर का पता नहीं लगा पाएगा.

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

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

tools/bazel run //common:kernel_aarch64_abi_update

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

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

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

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

एबीआई, पिछले कर्नेल वर्शन (Android 15 और उससे पहले के वर्शन) को मॉनिटर करता है

पिछले वर्शन के लिए, एबीआई बिल्ड और मॉनिटरिंग के निर्देश अलग-अलग होते हैं.

Android 15 और 14

ये निर्देश, Android 16 के निर्देशों से काफ़ी हद तक मिलते-जुलते हैं. हालांकि, रेफ़रंस एबीआई का प्रतिनिधित्व common/android/abi_gki_aarch64.stg है और $DIST_DIR डिफ़ॉल्ट रूप से out_abi/kernel_aarch64/dist पर सेट होता है.

Android 13

Android 13 को Kleaf या लेगसी बिल्ड स्क्रिप्ट, दोनों में से किसी एक की मदद से बनाया जा सकता है.

Kleaf के लिए, Android 14 के जैसे ही निर्देश हैं. हालांकि, एबीआई का फ़ॉर्मैट एक्सएमएल है और एबीआई के रेफ़रंस का प्रतिनिधित्व common/android/abi_gki_aarch64.xml है.

लेगसी बिल्ड स्क्रिप्ट के लिए, निर्देश Android 12 के जैसे ही हैं.

Android 12 और उससे पहले के वर्शन

एबीआई फ़ॉर्मैट एक्सएमएल है और रेफ़रंस एबीआई का रेप्रज़ेंटेशन common/android/abi_gki_aarch64.xml है

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