Android 9 (एपीआई लेवल 28) की शुरुआत के बाद, यह प्लैटफ़ॉर्म, SDK टूल के अलावा किसी अन्य प्लैटफ़ॉर्म का इस्तेमाल करने पर पाबंदी लगा देता है ऐसे इंटरफ़ेस जिन पर आपका ऐप्लिकेशन काम कर सकता है. ये पाबंदियां तब लागू होती हैं, जब कोई ऐप्लिकेशन किसी ऐसे इंटरफ़ेस का रेफ़रंस देता है जो SDK टूल में उपलब्ध नहीं है या रिफ़्लेक्शन या JNI का इस्तेमाल करके उसका हैंडल पाने की कोशिश करता है. ये पाबंदियां, उपयोगकर्ता और डेवलपर को बेहतर बनाने में मदद करने के लिए लगाई गई हैं इस समस्या को हल करने में मदद मिलती है. साथ ही, डेवलपर. इस फ़ैसले के बारे में ज़्यादा जानकारी के लिए, स्थिरता में सुधार करना' देखें बिना SDK टूल वाले इंटरफ़ेस के इस्तेमाल को कम करके.
SDK टूल और बिना SDK टूल वाले इंटरफ़ेस के बीच अंतर बताना
आम तौर पर, सार्वजनिक SDK टूल के इंटरफ़ेस वे होते हैं जो Android फ़्रेमवर्क पैकेज इंडेक्स. बिना 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) के लिए, यहां दी गई फ़ाइल डाउनलोड की जा सकती है. इसमें, ऐसे सभी इंटरफ़ेस और उनकी सूचियों के बारे में बताया गया है जो एसडीके टूल के नहीं हैं:
फ़ाइल: 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 ने थ्रो किया |
किसी तरीके का रेफ़रंस देने वाला Dalvik निर्देश | 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 रनटाइम).
- ऐक्सेस करने का तरीका: लिंक करना, रिफ़्लेक्शन का इस्तेमाल करना या JNI का इस्तेमाल करना.
- बिना 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 ...
logcat मैसेज में दिखने वाला पूरा डिस्क्रिप्टर भी शामिल है. - आपको इन एपीआई का इस्तेमाल करने की ज़रूरत क्यों है. इसमें एपीआई लेवल के एपीआई इस्तेमाल करने की जानकारी भी शामिल है सुविधा के लिए ज़रूरी है, न कि सिर्फ़ कम लेवल की जानकारी के लिए.
- आपके काम के लिए, जुड़े हुए सार्वजनिक SDK टूल के एपीआई काफ़ी क्यों नहीं हैं.
- आपने कौनसे अन्य विकल्प आज़माए हैं और वे काम क्यों नहीं हुए.
सुविधा के अनुरोध में यह जानकारी देने पर, नया सार्वजनिक एपीआई दिए जाने की संभावना ज़्यादा होती है.
कुछ और सवाल
इस सेक्शन में, डेवलपर के कुछ अन्य सवालों के जवाब भी शामिल हैं अक्सर पूछे जाने वाले सवाल:
सामान्य सवाल
Google यह कैसे पक्का कर सकता है कि वह समस्या के ट्रैकर की मदद से, सभी ऐप्लिकेशन की ज़रूरतों को पूरा कर सकता है?
हमने ऐप्लिकेशन के स्टैटिक विश्लेषण की मदद से, Android 9 (एपीआई लेवल 28) के लिए शुरुआती सूचियां बनाई हैं. इन सूचियों को बनाने के लिए, हमने इन तरीकों का इस्तेमाल किया है:
- Play और 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 टूल वाले एपीआई की सूचियों से इंटरफ़ेस हटाएं. सीडीडी की वजह से, ऐसे बदलाव नहीं हो पाते. साथ ही, सीटीएस टेस्ट यह पक्का करते हैं कि Android Runtime, इस सूची को लागू कर रहा है.
मिलते-जुलते ऐप्लिकेशन के साथ काम करने से जुड़े सवाल
क्या नेटिव कोड में, गैर-एनडीके इंटरफ़ेस पर कोई पाबंदी है?
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 टूल के एपीआई (जहां LOCAL_PRIVATE_PLATFORM_APIS := true
) के बजाय, निजी प्लैटफ़ॉर्म के एपीआई के हिसाब से बनाए गए हैं.