कंपैटिबिलिटी फ़्रेमवर्क टूल

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

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

यह कैसे पता करें कि कौनसे बदलाव चालू हैं

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

डेवलपर के लिए सेटिंग और टूल का इस्तेमाल करके, चालू किए गए बदलावों की पहचान करना

पहली इमेज. डेवलपर के लिए सेटिंग और टूल में मौजूद, 'ऐप्लिकेशन के साथ काम करने के लिए किए गए बदलाव’ वाली स्क्रीन पर, वे बदलाव दिखते हैं जिन्हें टॉगल किया जा सकता है.

डिवाइस के डेवलपर के लिए सेटिंग और टूल में जाकर, यह देखा जा सकता है कि कौनसे बदलाव चालू हैं. साथ ही, उन बदलावों को टॉगल करके चालू या बंद किया जा सकता है. इन विकल्पों को ऐक्सेस करने के लिए, यह तरीका अपनाएं:

  1. अगर डेवलपर के लिए सेटिंग और टूल पहले से चालू नहीं हैं, तो उन्हें चालू करें.
  2. अपने डिवाइस का सेटिंग ऐप्लिकेशन खोलें और सिस्टम > बेहतर > डेवलपर के लिए सेटिंग और टूल > ऐप्लिकेशन के साथ काम करने से जुड़े बदलाव पर जाएं.
  3. सूची में से अपना ऐप्लिकेशन चुनें.

आम तौर पर, व्यवहार में होने वाला हर बदलाव, इनमें से किसी एक कैटगरी में आता है:

  • ऐसे बदलाव जिनका असर Android के उस वर्शन पर चलने वाले सभी ऐप्लिकेशन पर पड़ता है, भले ही ऐप्लिकेशन का targetSdkVersion कुछ भी हो.

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

  • ऐसे बदलाव जिनका असर सिर्फ़ उन ऐप्लिकेशन पर पड़ता है जो Android के कुछ वर्शन को टारगेट कर रहे हैं. इन बदलावों का असर सिर्फ़ उन ऐप्लिकेशन पर पड़ता है जो Android के किसी खास वर्शन को टारगेट करते हैं. इसलिए, इन्हें targetSDKVersion के हिसाब से गेट किए गए बदलाव भी कहा जाता है.

    अगर आपका ऐप्लिकेशन, सूची में दिए गए एपीआई वर्शन से नए वर्शन को टारगेट करता है, तो ये बदलाव कंपैटबिलिटी फ़्रेमवर्क में डिफ़ॉल्ट रूप से चालू होते हैं. उदाहरण के लिए, Android 13 (एपीआई लेवल 33) में targetSDKVersion से कंट्रोल होने वाले व्यवहार में बदलाव को यूज़र इंटरफ़ेस (यूआई) के targetSdkVersion >=33 के लिए चालू किया गया सेक्शन में दिखाया जाएगा. Android के कुछ पुराने वर्शन पर, इस सेक्शन का नाम "एसडीके API_LEVEL के बाद चालू किया गया" होता है.

आपको पहली इमेज में डिफ़ॉल्ट रूप से बंद किए गए बदलाव नाम का एक सेक्शन भी दिखेगा. इस सेक्शन में शामिल बदलावों से कई काम किए जा सकते हैं. इन बदलावों को चालू करने से पहले, Android के उस वर्शन के लिए कंपैटिबिलिटी फ़्रेमवर्क की सूची में बदलाव की जानकारी पढ़ें.

Logcat का इस्तेमाल करके, चालू किए गए बदलावों की पहचान करना

व्यवहार में होने वाले हर बदलाव के लिए, आपके ऐप्लिकेशन की प्रोसेस के दौरान पहली बार जब आपका ऐप्लिकेशन असर डालने वाले एपीआई को कॉल करता है, तो सिस्टम इस तरह का logcat मैसेज दिखाता है:

D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED

हर Logcat मैसेज में यह जानकारी शामिल होती है:

आईडी बदलें
इससे पता चलता है कि किस बदलाव का असर ऐप्लिकेशन पर पड़ रहा है. यह वैल्यू, ऐप्लिकेशन के साथ काम करने के लिए किए गए बदलाव वाली स्क्रीन पर मौजूद, व्यवहार में होने वाले बदलावों में से किसी एक से मैप होती है (इमेज 1 देखें). इस उदाहरण में, 194833441 को NOTIFICATION_PERM_CHANGE_ID से मैप किया गया है.
UID
इससे पता चलता है कि इस बदलाव का असर किस ऐप्लिकेशन पर पड़ा है.
राज्य

इससे पता चलता है कि बदलाव का असर ऐप्लिकेशन पर पड़ रहा है या नहीं.

स्टेटस इनमें से कोई एक हो सकता है:

राज्य मतलब
ENABLED बदलाव चालू है और अगर ऐप्लिकेशन उन एपीआई का इस्तेमाल करता है जिनमें बदलाव किया गया है, तो इससे ऐप्लिकेशन के काम करने के तरीके पर असर पड़ेगा.
DISABLED

बदलाव को बंद कर दिया गया है. इससे ऐप्लिकेशन पर कोई असर नहीं पड़ेगा.

ध्यान दें: अगर ऐप्लिकेशन का targetSDKVersion ज़रूरी थ्रेशोल्ड से कम होने की वजह से यह बदलाव बंद है, तो ऐप्लिकेशन के targetSDKVersion को नए वर्शन के हिसाब से बढ़ाने पर, यह बदलाव डिफ़ॉल्ट रूप से चालू हो जाएगा.

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

एडीबी का इस्तेमाल करके, चालू किए गए बदलावों की पहचान करना

पूरे डिवाइस पर, चालू और बंद किए गए बदलावों का पूरा सेट देखने के लिए, यह ADB कमांड चलाएं:

adb shell dumpsys platform_compat

आउटपुट में, हर बदलाव के लिए यह जानकारी दिखती है:

आईडी बदलें
इस व्यवहार में हुए बदलाव के लिए यूनीक आइडेंटिफ़ायर. उदाहरण के लिए, 194833441.
नाम
इस बदलाव का नाम. उदाहरण के लिए, NOTIFICATION_PERM_CHANGE_ID.
targetSDKVersion से जुड़ी ज़रूरी शर्तें

वह targetSDKVersion जिसके तहत बदलाव को लागू किया गया है (अगर कोई है).

उदाहरण के लिए, अगर यह बदलाव सिर्फ़ SDK टूल के वर्शन 33 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए चालू है, तो enableAfterTargetSdk=32 आउटपुट के तौर पर दिखता है. अगर बदलाव को targetSDKVersion से कंट्रोल नहीं किया जाता है, तो enableAfterTargetSdk=0 आउटपुट के तौर पर दिखता है.

पैकेज में बदलाव करने की सुविधा

हर उस पैकेज का नाम जिसमें बदलाव की डिफ़ॉल्ट स्थिति (चालू या बंद) को बदल दिया गया है.

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

packageOverrides={com.my.package=false}

targetSDKVersion से कंट्रोल किए जाने वाले बदलाव, डिफ़ॉल्ट रूप से चालू या बंद हो सकते हैं. इसलिए, पैकेज की सूची में true या false, दोनों के इंस्टेंस शामिल हो सकते हैं. यह हर ऐप्लिकेशन के targetSDKVersion पर निर्भर करता है. उदाहरण के लिए:

packageOverrides={com.my.package=true, com.another.package=false}

खास बदलावों के बारे में ज़्यादा जानें

कंपैटिबिलिटी फ़्रेमवर्क में, व्यवहार में होने वाले बदलावों की पूरी सूची, Android के हर वर्शन के दस्तावेज़ में शामिल होती है. अपने ऐप्लिकेशन को Android के जिस वर्शन पर टेस्ट किया जा रहा है उसके हिसाब से, ज़्यादा जानकारी के लिए ये लिंक देखें:

बदलावों को कब टॉगल करना चाहिए

कंपैटबिलिटी फ़्रेमवर्क का मुख्य मकसद, आपको कंट्रोल और सुविधा देना है, ताकि आप Android के नए वर्शन के साथ अपने ऐप्लिकेशन की जांच कर सकें. इस सेक्शन में कुछ ऐसी रणनीतियों के बारे में बताया गया है जिनका इस्तेमाल करके, यह तय किया जा सकता है कि ऐप्लिकेशन की जांच और डीबग करते समय, बदलावों को कब टॉगल करना है.

बदलावों को टॉगल करने की सुविधा कब बंद करनी चाहिए

बदलावों को टॉगल करके बंद करने का फ़ैसला, आम तौर पर इस बात पर निर्भर करता है कि बदलाव को targetSDKVersion से कंट्रोल किया गया है या नहीं.

सभी ऐप्लिकेशन के लिए बदलाव करने की सुविधा चालू की गई

सभी ऐप्लिकेशन पर असर डालने वाले बदलाव, प्लैटफ़ॉर्म के किसी खास वर्शन के लिए डिफ़ॉल्ट रूप से चालू होते हैं. भले ही, आपके ऐप्लिकेशन का targetSDKVersion कुछ भी हो. इसलिए, प्लैटफ़ॉर्म के उस वर्शन पर अपना ऐप्लिकेशन चलाकर देखा जा सकता है कि आपके ऐप्लिकेशन पर असर पड़ा है या नहीं.

उदाहरण के लिए, अगर आपको Android 16 (एपीआई लेवल 36) को टारगेट करना है, तो Android 16 पर चलने वाले डिवाइस पर अपना ऐप्लिकेशन इंस्टॉल करें. इसके बाद, अपने सामान्य टेस्टिंग वर्कफ़्लो का इस्तेमाल करके, ऐप्लिकेशन की जांच करें. अगर आपके ऐप्लिकेशन में समस्याएं आती हैं, तो उस बदलाव को बंद किया जा सकता है जिसकी वजह से समस्या आ रही है. इसके बाद, अन्य समस्याओं की जांच जारी रखी जा सकती है.

ये बदलाव सभी ऐप्लिकेशन पर असर डाल सकते हैं, भले ही उनका targetSDKVersion कुछ भी हो. इसलिए, targetSDKVersion से जुड़े बदलावों से पहले, इन बदलावों के लिए अपने ऐप्लिकेशन की जांच करें और उसे अपडेट करें. इससे यह पक्का करने में मदद मिलती है कि प्लैटफ़ॉर्म के नए वर्शन पर अपडेट करने के बाद, उपयोगकर्ताओं को खराब अनुभव न मिले.

आपको इन बदलावों को टेस्ट करने को भी प्राथमिकता देनी चाहिए. ऐसा इसलिए, क्योंकि Android के सार्वजनिक रिलीज़ के लिए तैयार बिल्ड का इस्तेमाल करते समय, इन बदलावों को टॉगल करके बंद नहीं किया जा सकता. आम तौर पर, आपको Android के हर वर्शन के लिए, इन बदलावों की जांच करनी चाहिए. ऐसा उस वर्शन के प्रीव्यू के दौरान किया जाना चाहिए.

targetSDKVersion के हिसाब से बदलाव किए गए

अगर आपका ऐप्लिकेशन किसी खास targetSDKVersion को टारगेट कर रहा है, तो उस वर्शन के हिसाब से किए गए बदलाव डिफ़ॉल्ट रूप से चालू हो जाते हैं. इसलिए, जब ऐप्लिकेशन के targetSDKVersion को नए वर्शन पर स्विच किया जाता है, तो आपके ऐप्लिकेशन पर एक साथ कई नए बदलावों का असर पड़ने लगता है.

आपके ऐप्लिकेशन पर इनमें से एक से ज़्यादा बदलावों का असर पड़ सकता है. इसलिए, ऐप्लिकेशन की जांच और डीबग करते समय, आपको इनमें से कुछ बदलावों को अलग-अलग टॉगल करके बंद करना पड़ सकता है.

बदलावों को कब टॉगल करना चाहिए

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

उदाहरण के लिए, हो सकता है कि आप अगले targetSdkVersion में प्लैटफ़ॉर्म में होने वाले कई बदलावों के हिसाब से, अपने ऐप्लिकेशन की जांच कर रहे हों. डेवलपर के लिए सेटिंग और टूल या एडीबी कमांड का इस्तेमाल करके, गेटेड बदलावों को एक-एक करके चालू किया जा सकता है और उनकी जांच की जा सकती है. इसके लिए, आपको ऐप्लिकेशन मेनिफ़ेस्ट में बदलाव करने और एक साथ सभी बदलावों में शामिल होने की ज़रूरत नहीं है.

इस अतिरिक्त कंट्रोल की मदद से, बदलावों को अलग से टेस्ट किया जा सकता है. साथ ही, अपने ऐप्लिकेशन के कई हिस्सों को एक साथ डीबग और अपडेट करने से बचा जा सकता है.

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

बदलावों को चालू या बंद करने के लिए टॉगल करना

कंपैटबिलिटी फ़्रेमवर्क की मदद से, डेवलपर के लिए सेटिंग और टूल या ADB कमांड का इस्तेमाल करके, हर बदलाव को चालू या बंद किया जा सकता है. बदलावों को टॉगल करके चालू या बंद करने से, आपका ऐप्लिकेशन क्रैश हो सकता है या सुरक्षा से जुड़े अहम बदलाव बंद हो सकते हैं. इसलिए, बदलावों को टॉगल करने पर कुछ पाबंदियां लागू होती हैं.

डेवलपर के लिए सेटिंग और टूल का इस्तेमाल करके, बदलावों को टॉगल करना

बदलावों को टॉगल करके चालू या बंद करने के लिए, डेवलपर के लिए सेटिंग और टूल का इस्तेमाल करें. डेवलपर के लिए सेटिंग और टूल ढूंढने के लिए, यह तरीका अपनाएं:

  1. अगर डेवलपर के लिए सेटिंग और टूल पहले से चालू नहीं हैं, तो उन्हें चालू करें.
  2. अपने डिवाइस का सेटिंग ऐप्लिकेशन खोलें और सिस्टम > बेहतर सेटिंग > डेवलपर के लिए सेटिंग और टूल > ऐप्लिकेशन के साथ काम करने से जुड़े बदलाव पर जाएं.
  3. सूची में से अपना ऐप्लिकेशन चुनें.
  4. बदलावों की सूची में से, वह बदलाव ढूंढें जिसे आपको चालू या बंद करना है. इसके बाद, स्विच पर टैप करें.
उन बदलावों की सूची जिन्हें चालू या बंद किया जा सकता है
दूसरी इमेज. बदलावों को टॉगल करके चालू या बंद करना.

एडीबी का इस्तेमाल करके बदलावों को टॉगल करना

एडीबी का इस्तेमाल करके किसी बदलाव को चालू या बंद करने के लिए, इनमें से कोई एक कमांड चलाएं:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

CHANGE_ID (उदाहरण के लिए, 194833441) या CHANGE_NAME (उदाहरण के लिए, NOTIFICATION_PERM_CHANGE_ID) और अपने ऐप्लिकेशन का PACKAGE_NAME पास करें.

किसी बदलाव को उसकी डिफ़ॉल्ट स्थिति में रीसेट करने के लिए, यहां दिए गए कमांड का भी इस्तेमाल किया जा सकता है. इससे, एडीबी या डेवलपर के लिए सेटिंग और टूल का इस्तेमाल करके सेट किया गया कोई भी बदलाव हट जाएगा:

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

बदलावों को टॉगल करने पर पाबंदियां

डिफ़ॉल्ट रूप से, व्यवहार में होने वाला हर बदलाव चालू या बंद होता है. सभी ऐप्लिकेशन पर असर डालने वाले बदलाव, डिफ़ॉल्ट रूप से चालू होते हैं. अन्य बदलावों को targetSdkVersion से कंट्रोल किया जाता है. जब कोई ऐप्लिकेशन, SDK टूल के संबंधित वर्शन या इसके बाद के वर्शन को टारगेट करता है, तो ये बदलाव डिफ़ॉल्ट रूप से चालू हो जाते हैं. वहीं, जब कोई ऐप्लिकेशन, गेटेड वर्शन से पहले के SDK टूल के वर्शन को टारगेट करता है, तो ये बदलाव डिफ़ॉल्ट रूप से बंद हो जाते हैं. किसी बदलाव को टॉगल करके चालू या बंद करने पर, उसकी डिफ़ॉल्ट स्थिति बदल जाती है.

कंपैटबिलिटी फ़्रेमवर्क का गलत इस्तेमाल रोकने के लिए, बदलावों को टॉगल करने पर कुछ पाबंदियां लगाई गई हैं. किसी बदलाव को टॉगल किया जा सकता है या नहीं, यह बदलाव के टाइप पर निर्भर करता है. साथ ही, इस बात पर भी निर्भर करता है कि आपका ऐप्लिकेशन डीबग करने लायक है या नहीं और आपके डिवाइस पर किस तरह का बिल्ड चल रहा है. इस टेबल में बताया गया है कि आपको अलग-अलग तरह के बदलावों को कब टॉगल करने की अनुमति है:

बिल्‍ड का प्रकार डीबग न किया जा सकने वाला ऐप्लिकेशन डीबग करने लायक ऐप्लिकेशन
सभी बदलाव targetSDKVersion के हिसाब से किए गए बदलाव अन्य सभी बदलाव
डेवलपर के लिए झलक या बीटा बिल्ड टॉगल नहीं किया जा सकता टॉगल किया जा सकता है टॉगल किया जा सकता है
सार्वजनिक उपयोगकर्ता बिल्ड टॉगल नहीं किया जा सकता टॉगल किया जा सकता है टॉगल नहीं किया जा सकता