पहले से बने एबीआई के इस्तेमाल की जांच करने वाला ऐप्लिकेशन

Android की शेयर की गई लाइब्रेरी समय-समय पर बेहतर होती रहती हैं. पहले से बनी बाइनरी रखना अप-टू-डेट होने के लिए कड़े प्रयास करने होते हैं. Android में 9 या उससे पहले के हैं, जो पहले से बनी बाइनरी हैं जो हटाई गई लाइब्रेरी या एबीआई सिर्फ़ रन-टाइम पर लिंक नहीं हो पाते. डेवलपर को लॉग को ट्रेस करके, पहले से बनी पुरानी बाइनरी को खोजें. Android में 10, प्रतीक-आधारित ABI के इस्तेमाल को चेक करने वाले की सुविधा पेश की गई है. जांच करने वाला व्यक्ति बिल्ड-टाइम में, पहले से बनी पुरानी बाइनरी का पता लगा सकता है, ताकि इन्हें शेयर किया जा सके लाइब्रेरी डेवलपर यह जान सकते हैं कि पहले से बनी कौन-कौनसी बाइनरी, बदलाव करना होगा और पहले से बनी कौन-कौनसी बाइनरी फिर से बनानी होंगी.

सिंबल पर आधारित एबीआई के इस्तेमाल की जांच करने वाला टूल

सिंबल पर आधारित एबीआई के इस्तेमाल की जांच करने वाला टेस्टर, Android डाइनैमिक लिंकर को इस तरह एम्युलेट करता है होस्ट. चेकर पहले से बनी बाइनरी को पहले से बनी बाइनरी. यह जांच करता है कि तय नहीं किए गए सभी निशान हल हो गए हैं या नहीं.

सबसे पहले, चेकर पहले से बनी बाइनरी के टारगेट आर्किटेक्चर की जांच करता है. अगर पहले से बनी बाइनरी, ARM, AArch64, x86 या x86-64 को टारगेट नहीं करती है, तो आर्किटेक्चर को चुनने के बाद, चेकर पहले से बनी बाइनरी को छोड़ देता है.

दूसरा, पहले से बनी बाइनरी की डिपेंडेंसी LOCAL_SHARED_LIBRARIES या shared_libs. बिल्ड सिस्टम, मॉड्यूल के नामों को मेल खाने वाले वैरिएंट से रिज़ॉल्व करता है (जैसे, core बनाम vendor) शेयर की गई हैं.

तीसरा, चेकर DT_NEEDED एंट्री की तुलना करता है LOCAL_SHARED_LIBRARIES या shared_libs. खास तौर पर, चेकर, शेयर की गई हर इकाई से DT_SONAME एंट्री निकालता है लाइब्रेरी से मेल खाती है और इन DT_SONAME की तुलना पहले से बनी बाइनरी में DT_NEEDED एंट्री रिकॉर्ड की गई. अगर कोई मेल नहीं खा रहा है, तो एक गड़बड़ी का मैसेज आया है.

चौथा, चेकर पहले से बनी बाइनरी में तय नहीं किए गए निशानों को हल करता है. उन तय नहीं किए गए सिंबल को किसी एक डिपेंडेंसी और सिंबल बाइंडिंग, GLOBAL या WEAK होना चाहिए. अगर कोई तय नहीं किया गया निशान हल नहीं किया जा सकता, गड़बड़ी का एक मैसेज जनरेट हुआ है.

पहले से बने मॉड्यूल की प्रॉपर्टी

पहले से बनी बाइनरी की डिपेंडेंसी, इनमें से किसी एक में बताई जानी चाहिए फ़ॉलो किया जा रहा है:

  • Android.bp: shared_libs: ["libc", "libdl", "libm"],
  • Android.mk: LOCAL_SHARED_LIBRARIES := libc libdl libm

अगर पहले से बनी बाइनरी को कुछ ऐसे चिह्न जिन्हें हल नहीं किया जा सकता, इनमें से किसी एक के बारे में बताएं:

  • Android.bp: allow_undefined_symbols: true,
  • Android.mk: LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

पहले से बनी बाइनरी को ईएलएफ़ फ़ाइल की जांच से बचने के लिए, इनमें से किसी एक के बारे में बताएं फ़ॉलो किया जा रहा है:

  • Android.bp: check_elf_files: false,
  • Android.mk: LOCAL_CHECK_ELF_FILES := false

जांच करने वाले टूल का इस्तेमाल करें

चेकर चलाने के लिए, एनवायरमेंट वैरिएबल सेट करें CHECK_ELF_FILES से true और दौड़ें make check-elf-files:

CHECK_ELF_FILES=true make check-elf-files

डिफ़ॉल्ट रूप से चेकर को चालू करने के लिए, PRODUCT_CHECK_ELF_FILES जोड़ें BoardConfig.mk को:

PRODUCT_CHECK_ELF_FILES := true

Android को बनाने की प्रोसेस के दौरान, पहले से बने ऐप्लिकेशन की जांच अपने-आप हो जाती है:

make