Android 9 (एपीआई लेवल 28) की शुरुआत के बाद, यह प्लैटफ़ॉर्म, SDK टूल के अलावा किसी अन्य प्लैटफ़ॉर्म का इस्तेमाल करने पर पाबंदी लगा देता है ऐसे इंटरफ़ेस जिन पर आपका ऐप्लिकेशन काम कर सकता है. ये पाबंदियां तब लागू होती हैं, जब कोई ऐप्लिकेशन रेफ़रंस करता है ऐसा इंटरफ़ेस जिसमें SDK टूल नहीं है या जो रिफ़्लेक्शन या जेएनआई का इस्तेमाल करके अपना हैंडल पाने की कोशिश करता है. ये पाबंदियां, उपयोगकर्ता और डेवलपर को बेहतर बनाने में मदद करने के लिए लगाई गई हैं इस समस्या को हल करने में मदद मिलती है. साथ ही, डेवलपर. इस फ़ैसले के बारे में ज़्यादा जानकारी के लिए, स्थिरता में सुधार करना' देखें बिना SDK टूल वाले इंटरफ़ेस के इस्तेमाल को कम करके.
SDK टूल और बिना SDK टूल वाले इंटरफ़ेस के बीच अंतर बताना
आम तौर पर, सार्वजनिक SDK टूल के इंटरफ़ेस वे होते हैं जो Android फ़्रेमवर्क पैकेज इंडेक्स. बिना SDK टूल वाले इंटरफ़ेस को इस्तेमाल करना लागू करने के बारे में जानकारी देते हैं कि एपीआई एब्सट्रैक्ट हो जाता है, ताकि ये इंटरफ़ेस बिना किसी सूचना के बदला जा सकता है.
क्रैश और अनपेक्षित व्यवहार से बचने के लिए, ऐप्लिकेशन को दस्तावेज़ में मौजूद क्लास के हिस्सों को SDK टूल में रिकॉर्ड कर लिया है. इसका मतलब यह भी है कि आपको उन तरीकों या फ़ील्ड को ऐक्सेस करें जो SDK टूल की सूची में शामिल नहीं हैं. प्रतिबिंब जैसी क्रियाविधि का उपयोग करने वाली क्लास.
बिना SDK टूल के एपीआई की सूचियां
Android के हर रिलीज़ के साथ, बिना SDK टूल वाले दूसरे इंटरफ़ेस पर पाबंदी लगा दी जाती है. बुध इन पाबंदियों का असर आपके रिलीज़ वर्कफ़्लो पर पड़ सकता है. इसलिए, हम चाहते हैं कि पक्का करें कि आपके पास बिना SDK टूल वाले इंटरफ़ेस के इस्तेमाल का पता लगाने के टूल मौजूद हों. हमें सुझाव, राय दें या शिकायत करें. साथ ही, इनके हिसाब से प्लान बनाने और उनमें बदलाव करने का समय भी दें.
अपने डेवलपमेंट वर्कफ़्लो पर, SDK टूल के अलावा अन्य पाबंदियों के असर को कम करने के लिए, बिना SDK टूल वाले इंटरफ़ेस को ऐसी सूचियों में बांटा गया है जिनसे पता चलता है कि उनका इस्तेमाल कितना असरदार है टारगेट किया जा रहा है. यह इस बात पर निर्भर करता है कि कौनसा एपीआई लेवल टारगेट किया जा रहा है. नीचे दी गई टेबल इनमें से हर सूची का वर्णन करती है:
सूची में देखें | कोड टैग | ब्यौरा |
---|---|---|
ब्लॉकलिस्ट |
|
ऐसे इंटरफ़ेस जिनमें SDK टूल नहीं हैं और जिनका इस्तेमाल नहीं किया जा सकता. भले ही, आपका ऐप्लिकेशन टारगेट एपीआई लेवल. अगर आपका ऐप्लिकेशन इनमें से किसी इंटरफ़ेस को ऐक्सेस करने की कोशिश करता है, तो सिस्टम कोई गड़बड़ी हुई हो. |
शर्तों के साथ ब्लॉक किया गया |
|
Android 9 (एपीआई लेवल 28) और इसके बाद के वर्शन में, हर एपीआई लेवल में SDK टूल नहीं है ऐसे इंटरफ़ेस जो किसी ऐप्लिकेशन के एपीआई लेवल को टारगेट करने पर प्रतिबंधित होते हैं. इन सूचियों को एपीआई लेवल के तौर पर लेबल किया गया है
( अगर आपका ऐप्लिकेशन ऐसे इंटरफ़ेस को ऐक्सेस करने की कोशिश करता है जिस पर टारगेट एपीआई लेवल, सिस्टम यह ऐसे व्यवहार करता है जैसे API ब्लॉकलिस्ट को भी शामिल नहीं किया जा सकता. |
काम नहीं करता |
|
ऐसे इंटरफ़ेस जिनमें SDK टूल नहीं हैं और जिन पर पाबंदी नहीं लगाई गई है. साथ ही, आपका ऐप्लिकेशन इन इंटरफ़ेस का इस्तेमाल कर सकता है. नोट जोड़ें
हालांकि, ये इंटरफ़ेस काम नहीं करते और
बिना किसी सूचना के बदला जा सकता है. इन इंटरफ़ेस के साथ
आने वाले समय में Android के वर्शन के लिए,
max-target-x सूची. |
SDK टूल |
|
ऐसे इंटरफ़ेस जिनका स्वतंत्र रूप से इस्तेमाल किया जा सकता है और जो अब आधिकारिक तौर पर दस्तावेज़ किया गया Android फ़्रेमवर्क पैकेज इंडेक्स. |
टेस्ट एपीआई |
|
ऐसे इंटरफ़ेस जिनका इस्तेमाल इंटरनल सिस्टम टेस्टिंग के लिए किया जाता है. जैसे, ऐसे एपीआई जो कम्पैटिबिलिटी टेस्ट सुइट (सीटीएस) की मदद से टेस्टिंग की सुविधा दें. टेस्ट एपीआई, SDK टूल का हिस्सा नहीं हैं. इतने समय में शुरू होगा Android 11 (एपीआई लेवल 30) और टेस्ट एपीआई को ब्लॉकलिस्ट में शामिल किया गया है, इसलिए ऐप्लिकेशन को इनका इस्तेमाल करने की अनुमति नहीं है, भले ही उनका एपीआई लेवल टारगेट किया गया हो. सभी टेस्ट एपीआई काम नहीं करते और बिना किसी सूचना के इनमें बदलाव किया जा सकता है एपीआई लेवल की कम या ज़्यादा जानकारी देता है. |
आपके ऐप्लिकेशन के टारगेट एपीआई के हिसाब से, बिना SDK टूल वाले कुछ इंटरफ़ेस का इस्तेमाल किया जा सकता है लेवल ), बिना SDK टूल के किसी तरीके या फ़ील्ड का इस्तेमाल करने पर, पेज के आपका ऐप्लिकेशन. अगर आपका ऐप्लिकेशन ऐसे इंटरफ़ेस पर काम करता है जिनमें SDK टूल नहीं है, तो आपको डेटा को SDK टूल के इंटरफ़ेस या अन्य विकल्पों पर माइग्रेट करना होगा. अगर आपको कोई विकल्प नहीं मिलता है, के बजाय, अपने ऐप्लिकेशन की किसी सुविधा के लिए बिना SDK टूल के इंटरफ़ेस का इस्तेमाल करें. नए सार्वजनिक एपीआई के लिए अनुरोध करें.
पता करना कि कोई इंटरफ़ेस किस सूची से संबंधित है
बिना SDK टूल वाले इंटरफ़ेस की सूचियां, प्लैटफ़ॉर्म के हिस्से के तौर पर बनाई गई हैं. ज़्यादा जानकारी के लिए, हर Android रिलीज़ के बारे में जानकारी के लिए, यहां दिए गए सेक्शन देखें.
Android 15
Android 15 (एपीआई लेवल 35) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. बिना SDK टूल वाले सभी इंटरफ़ेस और उनसे जुड़ी सूचियां:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Android 15 में, बिना SDK टूल के एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 15 में, SDK टूल के अलावा अन्य इंटरफ़ेस के पाबंदियों से जुड़े अपडेट देखें.
Android 14
Android 14 (एपीआई लेवल 34) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. बिना SDK टूल वाले सभी इंटरफ़ेस और उनसे जुड़ी सूचियां:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Android 14 में, बिना SDK टूल के एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 14 में, SDK टूल के अलावा अन्य इंटरफ़ेस के पाबंदियों से जुड़े अपडेट देखें.
Android 13
Android 13 (एपीआई लेवल 33) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. बिना SDK टूल वाले सभी इंटरफ़ेस और उनसे जुड़ी सूचियां:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Android 13 में, बिना SDK टूल के एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, इसमें शर्तों के साथ-साथ एपीआई के लिए सुझाए गए सार्वजनिक एपीआई के विकल्प शामिल हैं Android 13 में ब्लॉक किया गया है, SDK टूल के अलावा अन्य इंटरफ़ेस के अपडेट देखें Android 13 में पाबंदियों से जुड़ी जानकारी शामिल है.
Android 12
Android 12 (एपीआई लेवल 31) के लिए, यह फ़ाइल डाउनलोड की जा सकती है. बिना SDK टूल वाले सभी इंटरफ़ेस और उनसे जुड़ी सूचियां:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Android 12 में, बिना SDK टूल के एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, इसमें शर्तों के साथ-साथ एपीआई के लिए सुझाए गए सार्वजनिक एपीआई के विकल्प शामिल हैं Android 12 में ब्लॉक किया गया है, इसके लिए सूची में किए गए बदलावों की सूची देखें Android 12.
Android 11
Android 11 (एपीआई लेवल 30) के लिए, यह फ़ाइल डाउनलोड की जा सकती है बिना SDK टूल वाले सभी इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में जानकारी देता है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Android 11 में, बिना SDK टूल के एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, इसमें शर्तों के साथ ब्लॉक किए गए एपीआई के लिए, सार्वजनिक एपीआई के सुझाए गए विकल्प Android 11, Android 11 में किए गए बदलावों की सूची बनाना देखें.
Android 10
Android 10 (एपीआई लेवल 29) के लिए, यह फ़ाइल डाउनलोड की जा सकती है बिना SDK टूल वाले सभी इंटरफ़ेस और उनसे जुड़ी सूचियों के बारे में जानकारी देता है:
फ़ाइल: hiddenapi-flags.csv
SHA-256 चेकसम:
f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Android 10 में, बिना SDK टूल के एपीआई की सूची में हुए बदलावों के बारे में ज़्यादा जानने के लिए, इसमें शर्तों के साथ ब्लॉक किए गए एपीआई के लिए, सार्वजनिक एपीआई के सुझाए गए विकल्प Android 10, Android 10 में किए गए बदलावों की सूची बनाना देखें.
Android 9
Android 9 (एपीआई लेवल 28) के लिए, इस टेक्स्ट फ़ाइल में
बिना SDK टूल वाले ऐसे एपीआई जिन पर पाबंदी नहीं है (स्लेटी सूची में):
hiddenapi-light-greylist.txt
.
ब्लॉकलिस्ट (blacklist
) और शर्तों के साथ ब्लॉक किए गए एपीआई की सूची (गहरे स्लेटी रंग में)
सूची) बिल्ड टाइम के दौरान मिलती हैं.
AOSP से सूचियां जनरेट करें
एओएसपी के साथ काम करते समय, ऐसी hiddenapi-flags.csv
फ़ाइल जनरेट की जा सकती है
इसमें बिना SDK टूल वाले सभी इंटरफ़ेस और उनसे जुड़ी सूचियां शामिल होती हैं. ऐसा करने के लिए,
AOSP स्रोत डाउनलोड करें और फिर नीचे दिया गया कमांड चलाएं:
m out/soong/hiddenapi/hiddenapi-flags.csv
इसके बाद, आपको फ़ाइल नीचे दी गई जगह पर मिल जाएगी:
out/soong/hiddenapi/hiddenapi-flags.csv
पाबंदी वाले बिना SDK टूल के इंटरफ़ेस ऐक्सेस किए जाने पर, अनुमानित व्यवहार
नीचे दी गई टेबल में बताया गया है कि अगर आपका ऐप्लिकेशन बिना SDK टूल वाले ऐसे इंटरफ़ेस को ऐक्सेस करने की कोशिश करता है जो ब्लॉकलिस्ट का हिस्सा है.
ऐक्सेस करने के तरीके | नतीजा |
---|---|
फ़ील्ड के बारे में बताने वाला डालाविक निर्देश | NoSuchFieldError ने थ्रो किया |
एक तरीके के बारे में बताने वाला Delvik निर्देश | NoSuchMethodError ने थ्रो किया |
Class.getDeclaredField() या Class.getField() का इस्तेमाल करके परछाई |
NoSuchFieldException ने थ्रो किया |
Class.getDeclaredMethod() , Class.getMethod() का इस्तेमाल करके परछाई |
NoSuchMethodException ने थ्रो किया |
Class.getDeclaredFields() , Class.getFields() का इस्तेमाल करके परछाई |
जो सदस्य SDK टूल नहीं हैं वे नतीजों में शामिल नहीं हैं |
Class.getDeclaredMethods() , Class.getMethods() का इस्तेमाल करके परछाई |
जो सदस्य SDK टूल नहीं हैं वे नतीजों में शामिल नहीं हैं |
env->GetFieldID() का इस्तेमाल करने वाला JNI |
NULL रिटर्न किए गए, NoSuchFieldError थ्रो किया गया |
env->GetMethodID() का इस्तेमाल करने वाला JNI |
NULL रिटर्न किए गए, NoSuchMethodError थ्रो किया गया |
बिना SDK टूल वाले इंटरफ़ेस के लिए अपने ऐप्लिकेशन की जांच करना
ऐसे कई तरीके हैं जिनका इस्तेमाल करके, बिना SDK टूल वाले इंटरफ़ेस की जांच की जा सकती है आपका ऐप्लिकेशन.
डीबग करने लायक ऐप्लिकेशन का इस्तेमाल करके जांच करना
बिना SDK टूल वाले इंटरफ़ेस की जांच करने के लिए, Android 9 (एपीआई लेवल 28) पर चलने वाले डिवाइस या एम्युलेटर पर, डीबग करने लायक ऐप्लिकेशन या उच्च. पक्का करें कि इस्तेमाल किया जा रहा डिवाइस या एम्युलेटर टारगेट एपीआई लेवल का इस्तेमाल करें.
आपके ऐप्लिकेशन पर जांच के दौरान, सिस्टम एक लॉग मैसेज प्रिंट करता है, अगर ऐप्लिकेशन, बिना SDK टूल वाले कुछ इंटरफ़ेस ऐक्सेस करता है. अपने ऐप्लिकेशन के लॉग मैसेज की जांच की जा सकती है ताकि आपको यह जानकारी मिल सके:
- क्लास, नाम, और टाइप की जानकारी (उस फ़ॉर्मैट में जिसका इस्तेमाल Android रनटाइम).
- ऐक्सेस करने के तरीके: चाहे वे लिंक किए जा रहे हों, रिफ़्लेक्शन का इस्तेमाल कर रहे हों या जेएनआई का इस्तेमाल कर रहे हों.
- बिना SDK टूल वाला इंटरफ़ेस किस सूची से जुड़ा है.
आप इन लॉग मैसेज को ऐक्सेस करने के लिए adb logcat
का इस्तेमाल कर सकते हैं. ये मैसेज,
चल रहे ऐप्लिकेशन का पीआईडी. उदाहरण के लिए, लॉग में कोई एंट्री इस तरह से हो सकती है:
Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
StrictMode API का इस्तेमाल करके जांच करना
StrictMode
API का इस्तेमाल करके, बिना SDK टूल वाले इंटरफ़ेस की भी जांच की जा सकती है. इसका इस्तेमाल करें
इसे चालू करने के लिए, detectNonSdkApiUsage
तरीका. चालू करने के बाद
StrictMode
एपीआई, बिना SDK टूल के हर इस्तेमाल के लिए आपको कॉलबैक मिल सकता है
penaltyListener
का इस्तेमाल करके इंटरफ़ेस में, जहां आप अपनी वेबसाइट पर
हैंडलिंग. कॉलबैक में दिया गया Violation
ऑब्जेक्ट, यहां से लिया जाता है
Throwable
और साथ में मौजूद स्टैक ट्रेस, इनके इस्तेमाल के बारे में जानकारी देते हैं.
Veridex टूल का इस्तेमाल करके, जांच करें
अपने APK पर veridex स्टैटिक विश्लेषण टूल भी चलाया जा सकता है. Veridex टूल यह APK का पूरा कोड बेस स्कैन करता है. इसमें तीसरे पक्ष की लाइब्रेरी भी शामिल हैं. बिना SDK टूल वाले इंटरफ़ेस के इस्तेमाल की रिपोर्ट करता है.
Veridex टूल की सीमाओं में ये शामिल हैं:
- यह JNI के माध्यम से बोले जाने वाले नामों का पता नहीं लगा सकता.
- यह रिफ़्लेक्शन की मदद से, बातचीत के लहजे के सिर्फ़ सबसेट का पता लगा सकता है.
- इनऐक्टिव कोड पाथ का विश्लेषण, एपीआई लेवल की जांच तक ही सीमित है.
- इसे सिर्फ़ उन मशीनों पर चलाया जा सकता है जो SSE4.2 और POPCNT निर्देशों के साथ काम करते हैं.
विंडो
नेटिव Windows बाइनरी नहीं दी गई हैं, लेकिन आप Veridex टूल को Linux के लिए Windows सबसिस्टम का इस्तेमाल करके, Linux बाइनरी चलाकर Windows (डब्ल्यूएसएल). इस सेक्शन में दिया गया तरीका अपनाने से पहले, WSL इंस्टॉल करें और अपने Linux डिस्ट्रिब्यूशन के तौर पर Ubuntu को चुनें.
Ubuntu इंस्टॉल किए जाने के बाद, Ubuntu टर्मिनल लॉन्च करें और फिर इन चरणों का पालन करें:
- Android रनटाइम पहले से बनाए गए ऐप्लिकेशन से veridex टूल डाउनलोड करें डेटा स्टोर करने की जगह.
appcompat.tar.gz
फ़ाइल का कॉन्टेंट निकालें.- एक्सट्रैक्ट किए गए फ़ोल्डर में,
veridex-linux.zip
फ़ाइल ढूंढें और उसे एक्सट्रैक्ट करें. अनज़िप किए गए फ़ोल्डर पर जाएं और यहां दिया गया निर्देश चलाएं. यहां
your-app.apk
वह APK है जिसकी आपको जांच करनी है:./appcompat.sh --dex-file=your-app.apk
macOS
macOS पर veridex टूल चलाने के लिए, यह तरीका अपनाएं:
- Android रनटाइम पहले से बनाए गए ऐप्लिकेशन से veridex टूल डाउनलोड करें डेटा स्टोर करने की जगह.
appcompat.tar.gz
फ़ाइल का कॉन्टेंट निकालें.- एक्सट्रैक्ट किए गए फ़ोल्डर में,
veridex-mac.zip
फ़ाइल ढूंढें और उसे एक्सट्रैक्ट करें. अनज़िप किए गए फ़ोल्डर पर जाएं और यहां दिया गया निर्देश चलाएं. यहां APK का पाथ
/path-from-root/your-app.apk
है सिस्टम की रूट डायरेक्ट्री से शुरू करके, नए वर्शन की जांच करें:./appcompat.sh --dex-file=/path-from-root/your-app.apk
Linux
Linux पर veridex टूल चलाने के लिए, इन चरणों का पालन करें:
- Android रनटाइम पहले से बनाए गए ऐप्लिकेशन से veridex टूल डाउनलोड करें डेटा स्टोर करने की जगह.
appcompat.tar.gz
फ़ाइल का कॉन्टेंट निकालें.- एक्सट्रैक्ट किए गए फ़ोल्डर में,
veridex-linux.zip
फ़ाइल ढूंढें और उसे एक्सट्रैक्ट करें. अनज़िप किए गए फ़ोल्डर पर जाएं और यहां दिया गया निर्देश चलाएं. यहां
your-app.apk
वह APK है जिसकी आपको जांच करनी है:./appcompat.sh --dex-file=your-app.apk
Android Studio लिंट टूल का इस्तेमाल करके जांच करना
जब भी Android Studio में अपना ऐप्लिकेशन बनाया जाता है, लिंट टूल संभावित समस्याओं के लिए कोड. अगर आपका ऐप्लिकेशन ऐसे इंटरफ़ेस का इस्तेमाल करता है जिनमें SDK टूल नहीं हैं, तो आपको से जुड़ी गड़बड़ियां या चेतावनियां तैयार करती हैं. यह इस बात पर निर्भर करता है कि वे इंटरफ़ेस किस सूची से जुड़े हैं से.
आप कमांड लाइन से लिंट टूल चला सकते हैं या जांच कर सकते हैं" मैन्युअल तरीके से किसी प्रोजेक्ट, फ़ोल्डर या फ़ाइल पर.
Play Console का इस्तेमाल करके जांच करना
जब Play Console में, किसी टेस्टिंग ट्रैक पर अपना ऐप्लिकेशन अपलोड किया जाता है, तो आपका ऐप्लिकेशन की जांच अपने-आप हो जाती है. साथ ही, प्री-लॉन्च रिपोर्ट जनरेट किया गया. अगर आपका ऐप्लिकेशन ऐसे इंटरफ़ेस का इस्तेमाल करता है जिनमें SDK टूल नहीं हैं, तो इसमें कोई गड़बड़ी या चेतावनी दिखती है प्री-लॉन्च रिपोर्ट, जो इस बात पर निर्भर करती है कि वे इंटरफ़ेस किस सूची से जुड़े हैं.
ज़्यादा जानकारी के लिए, प्री-लॉन्च सुविधा का इस्तेमाल करना' में 'Android के साथ काम करता है' सेक्शन देखें रिपोर्ट सबमिट करें.
नए सार्वजनिक एपीआई का अनुरोध करना
अगर आपको Google में किसी सुविधा के लिए, बिना SDK टूल वाले इंटरफ़ेस का इस्तेमाल करने का विकल्प नहीं मिलता है तो सुविधा का अनुरोध करके नए सार्वजनिक एपीआई का अनुरोध किया जा सकता है समस्या को ट्रैक करने वाले टूल का इस्तेमाल करें.
किसी सुविधा का अनुरोध करते समय, यह जानकारी दें:
- आप किस काम न करने वाले एपीआई का इस्तेमाल कर रहे हैं. इसमें दिया गया पूरा डिस्क्रिप्टर भी शामिल है
Accessing hidden ...
लॉगकैट मैसेज. - आपको इन एपीआई का इस्तेमाल करने की ज़रूरत क्यों है. इनमें एपीआई लेवल के अपग्रेड से जुड़ी जानकारी भी शामिल है सुविधा के लिए ज़रूरी है, न कि सिर्फ़ कम लेवल की जानकारी के लिए.
- आपके काम के लिए, जुड़े हुए सार्वजनिक SDK टूल के एपीआई काफ़ी क्यों नहीं हैं.
- अन्य विकल्प जिन्हें आपने आज़माया है और जो काम नहीं कर रहे हैं.
सुविधा के अनुरोध में यह जानकारी देने पर, नया सार्वजनिक एपीआई दिए जाने की संभावना ज़्यादा होती है.
कुछ और सवाल
इस सेक्शन में, डेवलपर के कुछ अन्य सवालों के जवाब भी शामिल हैं अक्सर पूछे जाने वाले सवाल:
सामान्य सवाल
Google यह कैसे पक्का कर सकता है कि वह समस्या के ट्रैकर की मदद से, सभी ऐप्लिकेशन की ज़रूरतों को पूरा कर सकता है?
हमने स्टैटिक तरीके से Android 9 (एपीआई लेवल 28) के लिए, शुरुआती सूचियां बनाई हैं इन तरीकों का इस्तेमाल करके, ऐप्लिकेशन का विश्लेषण किया गया:
- Play और उससे बाहर के ऐप्लिकेशन की मैन्युअल तरीके से जांच करना
- इंटरनल रिपोर्ट
- संगठन के उपयोगकर्ताओं से अपने-आप इकट्ठा होने वाला डेटा
- डेवलपर की झलक वाली रिपोर्ट
- अतिरिक्त स्टैटिक विश्लेषण को इस तरह डिज़ाइन किया गया कि इसमें ज़्यादा फ़ॉल्स पॉज़िटिव
हर नई रिलीज़ की सूचियों का आकलन करते समय, हम एपीआई के इस्तेमाल को इस तरह से देखते हैं साथ ही, समस्या को ट्रैक करने वाले टूल के ज़रिए डेवलपर के सुझाव, शिकायत या राय भी भेजी जाती है.
मैं बिना SDK टूल वाले इंटरफ़ेस का ऐक्सेस कैसे चालू करूं?
adb का इस्तेमाल करके, डेवलपमेंट डिवाइसों पर बिना SDK टूल वाले इंटरफ़ेस का ऐक्सेस चालू किया जा सकता है निर्देशों का पालन करें. आपके इस्तेमाल किए जाने वाले निर्देश अलग-अलग होते हैं, का इस्तेमाल किया जा सकता है. इन निर्देशों के लिए, रूट किए गए डिवाइस की ज़रूरत नहीं है.
- 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 1
adb shell settings put global hidden_api_policy_p_apps 1
एपीआई लागू करने की नीति को डिफ़ॉल्ट सेटिंग पर रीसेट करने के लिए, इसका इस्तेमाल करें ये कमांड इस्तेमाल करें:
adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps
एपीआई लागू करने से जुड़ी नीति में पूर्णांक सेट करने के लिए, इनमें से किसी एक का इस्तेमाल किया जा सकता है मान:
- 0: बिना SDK टूल वाले इंटरफ़ेस की पहचान करने की सुविधा बंद करें. इस सेटिंग का इस्तेमाल करने पर बंद हो जाता है
गैर-SDK इंटरफ़ेस के इस्तेमाल के लिए सभी लॉग मैसेज. साथ ही, आपको
StrictMode
एपीआई का इस्तेमाल करके ऐप्लिकेशन. इस सेटिंग का सुझाव नहीं दिया जाता है. - 1: बिना SDK टूल वाले सभी इंटरफ़ेस का ऐक्सेस दें, लेकिन लॉग मैसेज को
बिना SDK टूल वाले इंटरफ़ेस के इस्तेमाल से जुड़ी चेतावनियां. इस सेटिंग का इस्तेमाल करने पर, आपको
StrictMode
एपीआई का इस्तेमाल करके अपने ऐप्लिकेशन की जांच करें. - 2: अनुमति नहीं है कि ऐसे इंटरफ़ेस का इस्तेमाल किया जा सके जो SDK टूल के दायरे में नहीं आते हैं. ये ऐसे इंटरफ़ेस हैं जो ब्लॉकलिस्ट में शामिल हैं या आपके टारगेट एपीआई लेवल के लिए, शर्त के साथ ब्लॉक किया गया.
बिना SDK टूल वाले इंटरफ़ेस की सूचियों से जुड़े सवाल
मुझे सिस्टम इमेज में, बिना SDK टूल के एपीआई की सूचियां कहां मिल सकती हैं?
इन्हें प्लैटफ़ॉर्म dex फ़ाइलों में, फ़ील्ड और मेथड ऐक्सेस फ़्लैग बिट में एन्कोड किया जाता है. सिस्टम इमेज में इन सूचियों वाली कोई अलग फ़ाइल नहीं है.
क्या एक जैसे Android वर्शन वाले अलग-अलग OEM डिवाइसों पर, SDK टूल के अलावा अन्य एपीआई की सूचियां एक जैसी होती हैं?
ओईएम, ब्लॉकलिस्ट (ब्लैकलिस्ट) में अपने इंटरफ़ेस जोड़ सकते हैं, लेकिन वे ऐसा नहीं कर सकते AOSP बिना SDK टूल वाले एपीआई की सूचियों से इंटरफ़ेस हटाएं. CDD ऐसे बदलावों को रोकता है और CTS टेस्ट यह पक्का करते हैं कि Android रनटाइम सूची को लागू कर रहा है.
मिलते-जुलते ऐप्लिकेशन के साथ काम करने से जुड़े सवाल
क्या नेटिव कोड में, गैर-एनडीके इंटरफ़ेस पर कोई पाबंदी है?
Android SDK टूल में Java इंटरफ़ेस शामिल हैं. प्लैटफ़ॉर्म ने Android 7 (एपीआई लेवल 26) में नेटिव C/C++ कोड के लिए, नॉन-एनडीके इंटरफ़ेस का ऐक्सेस. ज़्यादा जानकारी के लिए, निजी C/C++ सिंबल की मदद से स्थिरता को बेहतर बनाना Android N में पाबंदियां.
क्या dex2oat या DEX फ़ाइल के इस्तेमाल पर रोक लगाने के लिए कोई प्लान है?
हमारे पास dex2oat बाइनरी के ऐक्सेस पर पाबंदी लगाने की कोई योजना नहीं है, लेकिन DEX फ़ाइल फ़ॉर्मैट को स्थायी या इससे आगे के सार्वजनिक इंटरफ़ेस के लिए तैयार नहीं किया जाना चाहिए ऐसे हिस्से जिन्हें सार्वजनिक रूप से Dalvik एक्ज़ीक्यूटेबल फ़ॉर्मैट में बताया गया है. हमारे पास dex2oat और उसके अनिर्दिष्ट हिस्सों में बदलाव करने या उन्हें खत्म करने का अधिकार सुरक्षित है को DEX फ़ॉर्मैट में बदल सकते हैं. यह भी ध्यान दें कि dex2oat के ज़रिए बनाई गई डिराइव्ड फ़ाइलें जैसे, ODEX (जिसे OAT भी कहा जाता है), VDEX, और CDEX सभी फ़ॉर्मैट नहीं बताए गए हैं.
क्या होगा अगर तीसरे पक्ष का कोई अहम SDK टूल (जैसे, उलझाने वाला टूल) बिना SDK टूल वाले इंटरफ़ेस का इस्तेमाल किए जाने से बच नहीं सकता, लेकिन वह आने वाले समय में Android के वर्शन के साथ काम करता है? क्या ऐसे मामले में Android, साथ काम करने से जुड़ी ज़रूरी शर्तों को छोड़ सकता है?
हमारा ऐसा कोई प्लान नहीं है कि हर SDK टूल के हिसाब से, ऐप्लिकेशन के साथ काम करने से जुड़ी ज़रूरी शर्तों को माफ़ करें. अगर आपने SDK टूल के डेवलपर, सिर्फ़ इंटरफ़ेस में काम करने वाले इंटरफ़ेस पर निर्भर करते हैं. काम नहीं करने वाली (पहले ग्रे रंग की) सूचियां थी, तो उन्हें माइग्रेशन की योजना बनानी होगी और किसी भी समय नए सार्वजनिक एपीआई के लिए अनुरोध करना चाहिए इसलिए, उन्हें बिना SDK टूल वाले इंटरफ़ेस के इस्तेमाल का विकल्प नहीं मिलता.
क्या बिना SDK टूल वाले इंटरफ़ेस से जुड़ी पाबंदियां, तीसरे पक्ष के ऐप्लिकेशन पर ही नहीं, बल्कि सिस्टम और पहले पक्ष के ऐप्लिकेशन के साथ-साथ सभी ऐप्लिकेशन पर लागू होती हैं?
हां. हालांकि, हम उन ऐप्लिकेशन को छूट देते हैं जो प्लैटफ़ॉर्म बटन और सिस्टम इमेज का इस्तेमाल करके साइन किए गए हैं
दिखाई देता है. ध्यान दें कि ये छूट, सिर्फ़ उन ऐप्लिकेशन पर लागू होती हैं जो सिस्टम का हिस्सा हैं
इमेज (या अपडेट किए गए सिस्टम इमेज ऐप्लिकेशन). यह सूची सिर्फ़ उन ऐप्लिकेशन के लिए है जिनमें
SDK टूल के एपीआई के बजाय, Private प्लैटफ़ॉर्म के एपीआई के साथ बनाए जाते हैं (जहां
LOCAL_PRIVATE_PLATFORM_APIS := true
).