Android 9 (एपीआई लेवल 28) से, प्लैटफ़ॉर्म यह तय करता है कि आपका ऐप्लिकेशन किन गैर-एसडीके इंटरफ़ेस का इस्तेमाल कर सकता है. ये पाबंदियां तब लागू होती हैं, जब कोई ऐप्लिकेशन किसी गैर-एसडीके इंटरफ़ेस का रेफ़रंस देता है या रिफ़्लेक्शन या जेएनआई का इस्तेमाल करके, उसका हैंडल पाने की कोशिश करता है. ये पाबंदियां इसलिए लगाई गई हैं, ताकि उपयोगकर्ताओं और डेवलपर को बेहतर अनुभव मिल सके. साथ ही, उपयोगकर्ताओं को क्रैश की समस्याओं का सामना न करना पड़े और डेवलपर को इमरजेंसी रोलआउट न करना पड़े. इस फ़ैसले के बारे में ज़्यादा जानने के लिए, नॉन-एसडीके इंटरफ़ेस का इस्तेमाल कम करके, स्थिरता को बेहतर बनाना लेख पढ़ें.
एसडीके और नॉन-एसडीके इंटरफ़ेस के बीच अंतर बताना
आम तौर पर, सार्वजनिक एसडीके इंटरफ़ेस वे होते हैं जो Android फ़्रेमवर्क के पैकेज इंडेक्स में मौजूद होते हैं. गैर-एसडीके इंटरफ़ेस को मैनेज करना, लागू करने की एक जानकारी है जिसे एपीआई छिपा देता है. इसलिए, इन इंटरफ़ेस में बिना किसी सूचना के बदलाव किया जा सकता है.
क्रैश और अनचाहे व्यवहार से बचने के लिए, ऐप्लिकेशन को एसडीके में मौजूद क्लास के सिर्फ़ उन हिस्सों का इस्तेमाल करना चाहिए जिन्हें आधिकारिक तौर पर दस्तावेज़ में शामिल किया गया है. इसका मतलब यह भी है कि रिफ़्लेक्शन जैसे तरीके का इस्तेमाल करके किसी क्लास के साथ इंटरैक्ट करते समय, आपको उन तरीकों या फ़ील्ड को ऐक्सेस नहीं करना चाहिए जो SDK टूल में शामिल नहीं हैं.
नॉन-एसडीके एपीआई की सूचियां
Android के हर रिलीज़ के साथ, गैर-एसडीके इंटरफ़ेस पर पाबंदी लगाई जाती है. हम जानते हैं कि इन पाबंदियों से आपके ऐप्लिकेशन को रिलीज़ करने के वर्कफ़्लो पर असर पड़ सकता है. इसलिए, हम यह पक्का करना चाहते हैं कि आपके पास गैर-एसडीके इंटरफ़ेस के इस्तेमाल का पता लगाने के लिए टूल हों. साथ ही, आपको हमें सुझाव/राय देने या शिकायत करने का मौका मिले और नई नीतियों के हिसाब से बदलाव करने और प्लान बनाने के लिए समय मिले.
आपके डेवलपमेंट वर्कफ़्लो पर, गैर-एसडीके इंटरफ़ेस से जुड़ी पाबंदियों का असर कम से कम हो, इसके लिए गैर-एसडीके इंटरफ़ेस को सूचियों में बांटा गया है. इन सूचियों से पता चलता है कि उनके इस्तेमाल पर कितनी पाबंदी लगाई गई है. यह इस बात पर निर्भर करता है कि किस एपीआई लेवल को टारगेट किया जा रहा है. यहां दी गई टेबल में, इनमें से हर सूची के बारे में बताया गया है:
| सूची | कोड टैग | ब्यौरा |
|---|---|---|
| अवरोधित उपयोगकर्ताओं की सूची |
|
ऐसे गैर-एसडीके इंटरफ़ेस जिनका इस्तेमाल नहीं किया जा सकता. भले ही, आपके ऐप्लिकेशन का टारगेट एपीआई लेवल कुछ भी हो. अगर आपका ऐप्लिकेशन इनमें से किसी इंटरफ़ेस को ऐक्सेस करने की कोशिश करता है, तो सिस्टम गड़बड़ी का मैसेज दिखाता है. |
| कुछ शर्तों के मुताबिक ब्लॉक किया गया |
|
Android 9 (एपीआई लेवल 28) से, हर एपीआई लेवल में गैर-एसडीके इंटरफ़ेस होते हैं. जब कोई ऐप्लिकेशन उस एपीआई लेवल को टारगेट करता है, तो उन पर पाबंदी लगा दी जाती है. इन सूचियों को ज़्यादा से ज़्यादा एपीआई लेवल ( अगर आपका ऐप्लिकेशन किसी ऐसे इंटरफ़ेस को ऐक्सेस करने की कोशिश करता है जिस पर आपके टारगेट एपीआई लेवल के लिए पाबंदी लगाई गई है, तो सिस्टम इस तरह से काम करता है जैसे कि एपीआई, ब्लॉकलिस्ट का हिस्सा हो. |
| काम नहीं करता |
|
ऐसे गैर-एसडीके इंटरफ़ेस जिन पर कोई पाबंदी नहीं है और आपका ऐप्लिकेशन इनका इस्तेमाल कर सकता है. हालांकि, ध्यान दें कि ये इंटरफ़ेस काम नहीं करते और इनमें बिना किसी सूचना के बदलाव किया जा सकता है. आने वाले समय में, Android के नए वर्शन में इन इंटरफ़ेस को कुछ शर्तों के साथ ब्लॉक किया जा सकता है. इसके लिए, इन्हें max-target-x सूची में शामिल किया जाएगा. |
| SDK टूल |
|
ऐसे इंटरफ़ेस जिनका इस्तेमाल बिना किसी शुल्क के किया जा सकता है और जो अब आधिकारिक तौर पर दस्तावेज़ में दर्ज Android फ़्रेमवर्क पैकेज इंडेक्स के हिस्से के तौर पर काम करते हैं. |
| एपीआई की जांच करना |
|
सिस्टम की अंदरूनी जांच के लिए इस्तेमाल किए जाने वाले इंटरफ़ेस. जैसे, Compatibility Test Suite (सीटीएस) की मदद से जांच करने की सुविधा देने वाले एपीआई. टेस्ट एपीआई, एसडीके का हिस्सा नहीं होते. Android 11 (एपीआई लेवल 30) से, टेस्ट एपीआई को ब्लॉकलिस्ट में शामिल किया गया है. इसलिए, ऐप्लिकेशन को इनका इस्तेमाल करने की अनुमति नहीं है. भले ही, उनका टारगेट एपीआई लेवल कुछ भी हो. सभी टेस्ट एपीआई काम नहीं करते. साथ ही, प्लैटफ़ॉर्म के एपीआई लेवल के बावजूद, इनमें बिना किसी सूचना के बदलाव किया जा सकता है. |
आपके ऐप्लिकेशन के टारगेट एपीआई लेवल के हिसाब से, कुछ गैर-एसडीके इंटरफ़ेस इस्तेमाल किए जा सकते हैं. हालांकि, किसी भी गैर-एसडीके तरीके या फ़ील्ड का इस्तेमाल करने से, आपके ऐप्लिकेशन के काम न करने का जोखिम हमेशा ज़्यादा होता है. अगर आपका ऐप्लिकेशन, गैर-एसडीके इंटरफ़ेस पर निर्भर करता है, तो आपको एसडीके इंटरफ़ेस या अन्य विकल्पों पर माइग्रेट करने की योजना बनानी चाहिए. अगर आपको अपने ऐप्लिकेशन में किसी सुविधा के लिए, गैर-एसडीके इंटरफ़ेस के इस्तेमाल का कोई विकल्प नहीं मिल रहा है, तो आपको नया सार्वजनिक एपीआई का अनुरोध करना चाहिए.
यह तय करना कि कोई इंटरफ़ेस किस सूची से जुड़ा है
गैर-एसडीके इंटरफ़ेस की सूचियां, प्लैटफ़ॉर्म के हिस्से के तौर पर बनाई जाती हैं. Android के हर वर्शन के बारे में जानकारी पाने के लिए, यहां दिए गए सेक्शन देखें.
Android 16
Android 16 (एपीआई लेवल 36) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. इसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में बताया गया है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074
Android 16 में, गैर-एसडीके एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 16 में गैर-एसडीके इंटरफ़ेस से जुड़ी पाबंदियों के बारे में अपडेट देखें.
Android 15
Android 15 (एपीआई लेवल 35) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. इसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में बताया गया है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9
Android 15 में, गैर-एसडीके एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 15 में गैर-एसडीके इंटरफ़ेस से जुड़ी पाबंदियों के अपडेट देखें.
Android 14
Android 14 (एपीआई लेवल 34) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. इसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में बताया गया है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f
Android 14 में, गैर-एसडीके एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 14 में गैर-एसडीके इंटरफ़ेस से जुड़ी पाबंदियों के अपडेट देखें.
Android 13
Android 13 (एपीआई लेवल 33) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. इसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में बताया गया है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3
Android 13 में, एसडीके टूल में उपलब्ध नहीं होने वाले एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 13 में, एसडीके टूल में उपलब्ध नहीं होने वाले इंटरफ़ेस पर लगी पाबंदियों से जुड़े अपडेट देखें. इसमें, Android 13 में कुछ शर्तों के साथ ब्लॉक किए गए एपीआई के लिए, सार्वजनिक एपीआई के सुझाए गए विकल्पों के बारे में भी जानकारी दी गई है.
Android 12
Android 12 (एपीआई लेवल 31) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. इसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में बताया गया है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761
Android 12 में, गैर-एसडीके एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 12 के लिए सूची में हुए बदलाव देखें. इसमें, उन एपीआई के लिए सार्वजनिक एपीआई के सुझाए गए विकल्प भी शामिल हैं जिन्हें Android 12 में कुछ शर्तों के साथ ब्लॉक किया गया है.
Android 11
Android 11 (एपीआई लेवल 30) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. इसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में बताया गया है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56
Android 11 में, गैर-एसडीके एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 11 के लिए सूची में हुए बदलाव देखें. इसमें, Android 11 में कुछ शर्तों के साथ ब्लॉक किए गए एपीआई के लिए, सार्वजनिक एपीआई के सुझाए गए विकल्पों के बारे में भी बताया गया है.
Android 10
Android 10 (एपीआई लेवल 29) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. इसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में बताया गया है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb
Android 10 में, गैर-एसडीके एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 10 के लिए सूची में हुए बदलाव देखें. इसमें, Android 10 में कुछ शर्तों के साथ ब्लॉक किए गए एपीआई के लिए, सार्वजनिक एपीआई के सुझाए गए विकल्प भी शामिल हैं.
Android 9
Android 9 (एपीआई लेवल 28) के लिए, नीचे दी गई टेक्स्ट फ़ाइल में उन गैर-एसडीके एपीआई की सूची है जिन पर पाबंदी नहीं लगाई गई है (ग्रे सूची में शामिल हैं):
hiddenapi-light-greylist.txt.
ब्लॉकलिस्ट (blacklist) और कुछ शर्तों के साथ ब्लॉक किए गए एपीआई की सूची (डार्कग्रे लिस्ट), बिल्ड के समय बनाई जाती है.
एओएसपी से सूचियां जनरेट करना
एओएसपी के साथ काम करते समय, ऐसी hiddenapi-flags.csv फ़ाइल जनरेट की जा सकती है जिसमें सभी गैर-एसडीके इंटरफ़ेस और उनसे जुड़ी सूचियां शामिल हों. ऐसा करने के लिए,
एओएसपी सोर्स डाउनलोड करें. इसके बाद, यह कमांड चलाएं:
m out/soong/hiddenapi/hiddenapi-flags.csv
इसके बाद, आपको फ़ाइल इस जगह पर मिलेगी:
out/soong/hiddenapi/hiddenapi-flags.csv
प्रतिबंधित गैर-एसडीके इंटरफ़ेस ऐक्सेस करने पर क्या होता है
इस टेबल में बताया गया है कि अगर आपका ऐप्लिकेशन, ब्लॉकलिस्ट में शामिल किसी गैर-एसडीके इंटरफ़ेस को ऐक्सेस करने की कोशिश करता है, तो क्या हो सकता है.
| ऐक्सेस करने का तरीका | नतीजा |
|---|---|
| किसी फ़ील्ड का रेफ़रंस देने वाला Dalvik निर्देश | NoSuchFieldError फेंका गया |
| किसी तरीके का रेफ़रंस देने वाला Dalvik निर्देश | NoSuchMethodError फेंका गया |
Class.getDeclaredField() या Class.getField() का इस्तेमाल करके, रिफ़्लेक्शन की सुविधा |
NoSuchFieldException फेंका गया |
Class.getDeclaredMethod(), Class.getMethod() का इस्तेमाल करके, रिफ़्लेक्शन इफ़ेक्ट |
NoSuchMethodException फेंका गया |
Class.getDeclaredFields(), Class.getFields() का इस्तेमाल करके, रिफ़्लेक्शन इफ़ेक्ट |
नतीजों में, एसडीके टूल के अलावा अन्य सदस्य नहीं दिखते |
Class.getDeclaredMethods(), Class.getMethods() का इस्तेमाल करके, रिफ़्लेक्शन इफ़ेक्ट |
एसडीके टूल के अलावा, अन्य सदस्यों को नतीजों में शामिल नहीं किया गया है |
env->GetFieldID() का इस्तेमाल करने वाला जेएनआई |
NULL को वापस किया गया, NoSuchFieldError को थ्रो किया गया |
env->GetMethodID() का इस्तेमाल करने वाला जेएनआई |
NULL को वापस किया गया, NoSuchMethodError को थ्रो किया गया |
गैर-एसडीके इंटरफ़ेस के लिए अपने ऐप्लिकेशन की जांच करना
अपने ऐप्लिकेशन में गैर-एसडीके इंटरफ़ेस की जांच करने के लिए, कई तरीके इस्तेमाल किए जा सकते हैं.
डीबग करने लायक ऐप्लिकेशन का इस्तेमाल करके जांच करना
Android 9 (एपीआई लेवल 28) या इसके बाद के वर्शन पर काम करने वाले डिवाइस या एम्युलेटर पर, डीबग करने लायक ऐप्लिकेशन बनाकर और उसे चलाकर, गैर-एसडीके इंटरफ़ेस की जांच की जा सकती है. पक्का करें कि इस्तेमाल किया जा रहा डिवाइस या एम्युलेटर, आपके ऐप्लिकेशन के टारगेट एपीआई लेवल से मैच करता हो.
आपके ऐप्लिकेशन की जांच के दौरान, अगर आपका ऐप्लिकेशन कुछ गैर-एसडीके इंटरफ़ेस को ऐक्सेस करता है, तो सिस्टम एक लॉग मैसेज प्रिंट करता है. अपने ऐप्लिकेशन के लॉग मैसेज की जांच करके, यह जानकारी देखी जा सकती है:
- डिक्लेयर करने वाली क्लास, नाम, और टाइप (Android रनटाइम के इस्तेमाल किए जाने वाले फ़ॉर्मैट में).
- ऐक्सेस करने का तरीका: लिंक करना, रिफ़्लेक्शन का इस्तेमाल करना या जेएनआई का इस्तेमाल करना.
- गैर-एसडीके इंटरफ़ेस किस सूची में शामिल है.
इन लॉग मैसेज को ऐक्सेस करने के लिए, adb logcat का इस्तेमाल किया जा सकता है. ये मैसेज, चल रहे ऐप्लिकेशन के पीआईडी के नीचे दिखते हैं. उदाहरण के लिए, लॉग में कोई एंट्री इस तरह दिख सकती है:
Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
StrictMode API का इस्तेमाल करके टेस्ट करना
StrictMode एपीआई का इस्तेमाल करके भी, गैर-एसडीके इंटरफ़ेस की जांच की जा सकती है. इसे चालू करने के लिए, detectNonSdkApiUsage तरीके का इस्तेमाल करें. StrictMode एपीआई को चालू करने के बाद, आपको गैर-एसडीके इंटरफ़ेस के हर इस्तेमाल के लिए कॉलबैक मिल सकता है. इसके लिए, आपको penaltyListener का इस्तेमाल करना होगा. यहां कस्टम हैंडलिंग को लागू किया जा सकता है. कॉलबैक में दिया गया Violation ऑब्जेक्ट, Throwable से लिया गया है. साथ ही, इसमें शामिल स्टैक ट्रेस से, इसके इस्तेमाल के बारे में जानकारी मिलती है.
Android Studio के लिंट टूल का इस्तेमाल करके टेस्ट करना
जब भी Android Studio में ऐप्लिकेशन बनाया जाता है, तब लिंट टूल आपके कोड की जांच करके संभावित समस्याओं का पता लगाता है. अगर आपका ऐप्लिकेशन, गैर-एसडीके इंटरफ़ेस का इस्तेमाल करता है, तो आपको बिल्ड से जुड़ी गड़बड़ियां या चेतावनियां दिख सकती हैं. यह इस बात पर निर्भर करता है कि वे इंटरफ़ेस किस सूची में शामिल हैं.
इसके अलावा, कमांड लाइन से लिंट टूल को चलाया जा सकता है या किसी प्रोजेक्ट, फ़ोल्डर या फ़ाइल पर मैन्युअल तरीके से जांच की जा सकती है.
Play Console का इस्तेमाल करके टेस्ट करना
Play Console में किसी टेस्टिंग ट्रैक पर अपना ऐप्लिकेशन अपलोड करने पर, संभावित समस्याओं के लिए आपके ऐप्लिकेशन की अपने-आप जांच हो जाती है. साथ ही, प्री-लॉन्च रिपोर्ट जनरेट हो जाती है. अगर आपका ऐप्लिकेशन, गैर-एसडीके इंटरफ़ेस का इस्तेमाल करता है, तो प्री-लॉन्च रिपोर्ट में गड़बड़ी या चेतावनी दिखती है. यह इस बात पर निर्भर करता है कि वे इंटरफ़ेस किस सूची में शामिल हैं.
ज़्यादा जानकारी के लिए, समस्याओं का पता लगाने के लिए प्री-लॉन्च रिपोर्ट इस्तेमाल करना लेख में, Android के साथ काम करने की सुविधा वाला सेक्शन देखें.
नए सार्वजनिक एपीआई का अनुरोध करना
अगर आपको अपने ऐप्लिकेशन में किसी सुविधा के लिए, गैर-एसडीके इंटरफ़ेस के इस्तेमाल का कोई विकल्प नहीं मिल रहा है, तो आपके पास नए सार्वजनिक एपीआई का अनुरोध करने का विकल्प है. इसके लिए, हमारे समस्या को ट्रैक करने वाले टूल में जाकर, सुविधा का अनुरोध करें.
सुविधा का अनुरोध करते समय, यह जानकारी दें:
- आप किस ऐसे एपीआई का इस्तेमाल कर रहे हैं जो काम नहीं करता. इसमें
Accessing hidden ...logcat मैसेज में दिखने वाला पूरा डिस्क्रिप्टर शामिल है. - आपको इन एपीआई का इस्तेमाल क्यों करना है. इसमें उस हाई-लेवल सुविधा के बारे में जानकारी शामिल होनी चाहिए जिसके लिए एपीआई ज़रूरी है. इसमें सिर्फ़ लो-लेवल जानकारी शामिल नहीं होनी चाहिए.
- इससे जुड़े सार्वजनिक एसडीके एपीआई, आपके मकसद के लिए क्यों काफ़ी नहीं हैं.
- आपने जो अन्य विकल्प आज़माए हैं और वे काम क्यों नहीं किए.
सुविधा के अनुरोध में ये जानकारी देने से, आपको नया सार्वजनिक एपीआई मिलने की संभावना बढ़ जाती है.
अन्य सवाल
इस सेक्शन में, डेवलपर के अक्सर पूछे जाने वाले कुछ अन्य सवालों के जवाब दिए गए हैं:
सामान्य सवाल
Google को कैसे पता चलेगा कि वह issuetracker की मदद से, सभी ऐप्लिकेशन की ज़रूरतों को पूरा कर सकता है?
हमने Android 9 (एपीआई लेवल 28) के लिए, ऐप्लिकेशन के स्टैटिक विश्लेषण के ज़रिए शुरुआती सूचियां बनाईं. इसके लिए, हमने इन तरीकों का इस्तेमाल किया:
- Google Play और अन्य प्लैटफ़ॉर्म पर मौजूद टॉप ऐप्लिकेशन की मैन्युअल टेस्टिंग
- इंटरनल रिपोर्ट
- संगठन के उपयोगकर्ताओं से अपने-आप डेटा कलेक्शन की सुविधा
- डेवलपर के लिए झलक वाली रिपोर्ट
- अतिरिक्त स्टैटिक विश्लेषण, जिसे सावधानी से ज़्यादा फ़ॉल्स पॉज़िटिव (गलत नतीजे) शामिल करने के लिए डिज़ाइन किया गया था
हर नई रिलीज़ के लिए सूचियों का आकलन करते समय, हम एपीआई के इस्तेमाल के साथ-साथ, समस्या ट्रैकर के ज़रिए डेवलपर से मिले सुझावों को भी ध्यान में रखते हैं.
मैं गैर-एसडीके इंटरफ़ेस का ऐक्सेस कैसे चालू करूं?
डेवलपमेंट डिवाइसों पर गैर-एसडीके इंटरफ़ेस का ऐक्सेस चालू किया जा सकता है. इसके लिए, एपीआई लागू करने की नीति में बदलाव करने के लिए, adb कमांड का इस्तेमाल करें. एपीआई लेवल के हिसाब से, इस्तेमाल किए जाने वाले कमांड अलग-अलग होते हैं. इन कमांड के लिए, रूट किए गए डिवाइस की ज़रूरत नहीं होती.
- Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन
ऐक्सेस चालू करने के लिए, इस adb का इस्तेमाल करें
कमांड:
adb shell settings put global hidden_api_policy 1
एपीआई लागू करने की नीति को डिफ़ॉल्ट सेटिंग पर रीसेट करने के लिए, इस निर्देश का इस्तेमाल करें:
adb shell settings delete global hidden_api_policy
- Android 9 (एपीआई लेवल 28)
ऐक्सेस चालू करने के लिए, इन adb कमांड का इस्तेमाल करें:
adb shell settings put global hidden_api_policy_pre_p_apps 1adb shell settings put global hidden_api_policy_p_apps 1एपीआई लागू करने की नीति को डिफ़ॉल्ट सेटिंग पर रीसेट करने के लिए, इन निर्देशों का इस्तेमाल करें:
adb shell settings delete global hidden_api_policy_pre_p_appsadb shell settings delete global hidden_api_policy_p_apps
एपीआई लागू करने की नीति में, पूर्णांक को इनमें से किसी एक वैल्यू पर सेट किया जा सकता है:
- 0: गैर-एसडीके इंटरफ़ेस का पता लगाने की सुविधा बंद करें. इस सेटिंग का इस्तेमाल करने पर, गैर-एसडीके इंटरफ़ेस के इस्तेमाल से जुड़े सभी लॉग मैसेज बंद हो जाते हैं. साथ ही,
StrictModeएपीआई का इस्तेमाल करके, ऐप्लिकेशन की जांच नहीं की जा सकती. हम इस सेटिंग का सुझाव नहीं देते. - 1: सभी गैर-एसडीके इंटरफ़ेस का ऐक्सेस चालू करें. हालांकि, किसी भी गैर-एसडीके इंटरफ़ेस के इस्तेमाल के लिए, चेतावनियों के साथ लॉग मैसेज प्रिंट करें. इस सेटिंग का इस्तेमाल करके,
StrictModeएपीआई की मदद से अपने ऐप्लिकेशन की जांच भी की जा सकती है. - 2: ब्लॉकलिस्ट में शामिल या आपके टारगेट एपीआई लेवल के लिए कुछ शर्तों के साथ ब्लॉक किए गए गैर-एसडीके इंटरफ़ेस के इस्तेमाल की अनुमति न दें.
नॉन-एसडीके इंटरफ़ेस की सूचियों के बारे में सवाल
मुझे सिस्टम इमेज में, गैर-एसडीके एपीआई की सूचियां कहां मिल सकती हैं?
इन्हें प्लैटफ़ॉर्म की dex फ़ाइलों में, फ़ील्ड और मेथड ऐक्सेस फ़्लैग बिट में एन्कोड किया जाता है. सिस्टम इमेज में ऐसी कोई अलग फ़ाइल नहीं होती जिसमें ये सूचियां शामिल हों.
क्या एक ही Android वर्शन वाले अलग-अलग ओईएम डिवाइसों पर, गैर-एसडीके एपीआई की सूचियां एक जैसी होती हैं?
ओईएम, ब्लॉकलिस्ट (ब्लैकलिस्ट) में अपने इंटरफ़ेस जोड़ सकते हैं. हालांकि, वे एओएसपी की गैर-एसडीके एपीआई सूचियों से इंटरफ़ेस नहीं हटा सकते. सीडीडी ऐसे बदलावों को रोकता है. साथ ही, सीटीएस टेस्ट यह पक्का करते हैं कि Android रनटाइम, सूची को लागू कर रहा है.
मिलते-जुलते ऐप्लिकेशन के साथ काम करने से जुड़े सवाल
क्या नेटिव कोड में मौजूद नॉन-एनडीके इंटरफ़ेस पर कोई पाबंदी है?
Android SDK में Java इंटरफ़ेस शामिल होते हैं. प्लैटफ़ॉर्म ने Android 7 (एपीआई लेवल 26) में नेटिव C/C++ कोड के लिए, गैर-एनडीके इंटरफ़ेस के ऐक्सेस को सीमित करना शुरू कर दिया. ज़्यादा जानकारी के लिए, Improving Stability with Private C/C++ Symbol Restrictions in Android N लेख पढ़ें.
क्या dex2oat या DEX फ़ाइल में बदलाव करने पर पाबंदी लगाने का कोई प्लान है?
dex2oat बाइनरी के ऐक्सेस पर पाबंदी लगाने का हमारा कोई प्लान नहीं है. हालांकि, हमारा मकसद DEX फ़ाइल फ़ॉर्मैट को स्टेबल या सार्वजनिक इंटरफ़ेस बनाना नहीं है. इसके अलावा, Dalvik Executable फ़ॉर्मैट में सार्वजनिक तौर पर बताए गए हिस्सों के अलावा, हमारा कोई और मकसद नहीं है. हमारे पास किसी भी समय, dex2oat और DEX फ़ॉर्मैट के उन हिस्सों में बदलाव करने या उन्हें हटाने का अधिकार सुरक्षित है जिनके बारे में जानकारी नहीं दी गई है. यह भी ध्यान रखें कि dex2oat से जनरेट की गई फ़ाइलें, जैसे कि ODEX (इसे OAT भी कहा जाता है), VDEX, और CDEX, सभी ऐसे फ़ॉर्मैट हैं जिनके बारे में जानकारी नहीं दी गई है.
अगर तीसरे पक्ष का कोई ज़रूरी एसडीके टूल (जैसे, कोड को छिपाने वाला टूल) गैर-एसडीके इंटरफ़ेस का इस्तेमाल करने से नहीं बच सकता, लेकिन Android के आने वाले वर्शन के साथ काम करने की सुविधा को बनाए रखने के लिए प्रतिबद्ध है, तो क्या होगा? क्या Android इस मामले में, साथ काम करने से जुड़ी ज़रूरी शर्तों में छूट दे सकता है?
हमारा ऐसा कोई प्लान नहीं है कि हर SDK टूल के लिए, साथ काम करने से जुड़ी ज़रूरी शर्तों को हटाया जाए. अगर कोई एसडीके डेवलपर, इस्तेमाल न किए जा सकने वाले (पहले ग्रे) इंटरफ़ेस पर निर्भर रहकर ही अपने एसडीके को काम करने लायक बनाए रख सकता है, तो उसे एसडीके इंटरफ़ेस या अन्य विकल्पों पर माइग्रेट करने की योजना बनानी चाहिए. साथ ही, जब भी उसे गैर-एसडीके इंटरफ़ेस के इस्तेमाल का कोई विकल्प न मिले, तो उसे नए सार्वजनिक एपीआई का अनुरोध करना चाहिए.
क्या नॉन-एसडीके इंटरफ़ेस से जुड़ी पाबंदियां, तीसरे पक्ष के ऐप्लिकेशन के साथ-साथ सिस्टम और पहले पक्ष के ऐप्लिकेशन पर भी लागू होती हैं?
हां, हालांकि, हम प्लैटफ़ॉर्म की कुंजी से साइन किए गए ऐप्लिकेशन और कुछ सिस्टम इमेज ऐप्लिकेशन को छूट देते हैं. ध्यान दें कि ये छूट सिर्फ़ उन ऐप्लिकेशन पर लागू होती हैं जो सिस्टम इमेज (या अपडेट की गई सिस्टम इमेज वाले ऐप्लिकेशन) का हिस्सा हैं. यह सूची सिर्फ़ उन ऐप्लिकेशन के लिए है जो एसडीके एपीआई के बजाय, निजी प्लैटफ़ॉर्म एपीआई के लिए बनाए जाते हैं. यहां LOCAL_PRIVATE_PLATFORM_APIS := true है.