Android 8.0 पर माइग्रेट करना

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

  1. पक्का करें कि ऐप्लिकेशन, Android 8.0 के साथ काम करता हो

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

  2. टारगेट किए गए वर्शन को अपडेट करना और Android 8.0 की सुविधाओं का इस्तेमाल करना

    जब आप प्लैटफ़ॉर्म की नई सुविधाओं का फ़ायदा पाने के लिए तैयार हों, तो अपने targetSdkVersion को 26 पर अपडेट करें. साथ ही, यह पुष्टि करें कि ऐप्लिकेशन उम्मीद के मुताबिक काम कर रहा है. इसके बाद, नए एपीआई का इस्तेमाल शुरू करें.

यह पक्का करना कि ऐप्लिकेशन, Android 8.0 के साथ काम करता हो

इसका मकसद यह पक्का करना है कि आपका मौजूदा ऐप्लिकेशन, Android 8.0 (एपीआई लेवल 26) पर पहले की तरह ही काम करे. प्लैटफ़ॉर्म में किए गए कुछ बदलावों से, आपके ऐप्लिकेशन के काम करने के तरीके पर असर पड़ सकता है. इसलिए, आपको कुछ बदलाव करने पड़ सकते हैं. हालांकि, आपको नए एपीआई का इस्तेमाल करने या अपने targetSdkVersion को बदलने की ज़रूरत नहीं है.

Android 8.0 के साथ काम करने की सुविधा को सिलसिलेवार तरीके से चालू करना

Android 8.0 पर चलने वाले डिवाइस को तैयार करना

डिवाइस के साथ काम करने की जांच करना

ज़्यादातर मामलों में, यह जांच करना ज़रूरी है कि Android 8.0 (एपीआई लेवल 26) के साथ काम करने की सुविधा की जांच कैसे की जाती है. यह ज़रूरी है कि आप अपने ऐप्लिकेशन को रिलीज़ करने की तैयारी करते समय, जांच करें. यह ऐप्लिकेशन की क्वालिटी से जुड़े मुख्य दिशा-निर्देशों और टेस्टिंग के सबसे सही तरीके देखने का सही समय है.

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

टेबल 1. Android 8.0 डिवाइसों पर चलने वाले सभी ऐप्लिकेशन पर असर डालने वाले अहम बदलाव.

बदलें खास जानकारी ज़्यादा जानकारी
बैकग्राउंड में जगह की जानकारी अपडेट करने की ज़रूरत नहीं पड़ती अगर आपके ऐप्लिकेशन को बैकग्राउंड में चलने वाली सेवा से जगह की जानकारी के अपडेट मिलते हैं, तो उसे Android के पुराने वर्शन की तुलना में, Android 8.0 (एपीआई लेवल 26) पर कम अपडेट मिलते हैं. खास तौर पर, बैकग्राउंड में चलने वाली सेवा को हर घंटे कुछ से ज़्यादा बार जगह की जानकारी के अपडेट नहीं मिल सकते. हालांकि, जब आपका ऐप्लिकेशन फ़ोरग्राउंड में होता है, तो जगह की जानकारी अपडेट होने की दर में कोई बदलाव नहीं होता. बैकग्राउंड में जगह की जानकारी की सेवा की सीमाएं
net.hostname पर अब ऐप्लिकेशन इस्तेमाल नहीं किया जा सकता net.hostname सिस्टम प्रॉपर्टी से क्वेरी करने पर, कोई नतीजा नहीं मिलता. कोई नहीं
send(DatagramPacket) से मिला नया अपवाद अगर पहले इस्तेमाल किया गया connect(InetAddress, int) तरीका काम नहीं करता है, तो send(DatagramPacket) तरीका SocketException को दिखाता है. व्यवहार में बदलाव: नेटवर्क और एचटीटीपी(एस) कनेक्टिविटी
AbstractCollection तरीकों से सही NullPointerException AbstractCollection.removeAll(null) और AbstractCollection.retainAll(null) अब हमेशा NullPointerException थ्रो करते हैं. पहले, NullPointerException को तब नहीं फेंका जाता था, जब कलेक्शन खाली था. इस बदलाव से, दस्तावेज़ में बताए गए तरीके के मुताबिक काम किया जा सकेगा. व्यवहार में बदलाव: कलेक्शन मैनेज करना
Currency.getDisplayName(null) से सही NullPointerException Currency.getDisplayName(null) को कॉल करने पर, NullPointerException दिखता है. व्यवहार में बदलाव: स्थानीय भाषाएं और अंतरराष्ट्रीय भाषाओं के लिए उपलब्ध कराना

Android 8.0 (एपीआई लेवल 26) में, व्यवहार में हुए बदलावों की पूरी सूची के लिए, Android 8.0 में व्यवहार में हुए बदलाव भी देखें.

टारगेट किया गया वर्शन अपडेट करना और Android 8.0 की सुविधाओं का इस्तेमाल करना

इस सेक्शन में बताया गया है कि आप Android 8.0 (एपीआई लेवल 26) के लिए, पूरी सहायता कैसे पा सकते हैं. इसके लिए, अपने targetSdkVersion को 26 में अपडेट करें और Android 8.0 में उपलब्ध नई सुविधाएं जोड़ें.

जब आप अपने targetSdkVersion को 26 में अपडेट करते हैं, तो Android 8.0 में आपको नए एपीआई उपलब्ध कराने के साथ-साथ, काम करने के तरीके में भी कुछ बदलाव होते हैं. कुछ मामलों में, गड़बड़ियों से बचने के लिए कोड में बदलाव करना पड़ सकता है. इसलिए, सबसे पहले आपको यह समझना होगा कि Android 8.0 को टारगेट करने वाले ऐप्लिकेशन के काम करने के तरीके में किए गए सभी बदलावों की समीक्षा करके, targetSdkVersion बदलने पर आपके ऐप्लिकेशन पर क्या असर पड़ सकता है.

ध्यान दें: अपने ऐप्लिकेशन को Android 8.0 पर टारगेट करने के लिए, प्लैटफ़ॉर्म के साथ काम करने की पुष्टि करने के लिए ऊपर बताए गए तरीके ज़रूरी हैं. इसलिए, पहले ये तरीके पूरा कर लें.

टारगेट वर्शन को अपडेट करें और Android 8.0 की सुविधाओं को सिलसिलेवार तरीके से इस्तेमाल करें

Android 8.0 SDK टूल पाना

Android 8.0 (एपीआई लेवल 26) के साथ अपना ऐप्लिकेशन बनाने के लिए, Android Studio के सबसे नए वर्शन (हमारा सुझाव है कि Android Studio 3.0 के बाद का वर्शन इस्तेमाल करने का सुझाव दिया जाता है) का इस्तेमाल करके, SDK टूल के पैकेज डाउनलोड किए जा सकते हैं. Android Studio 3.0 और इसके बाद के वर्शन में ऐसे टूल शामिल हैं जिनसे आपको Android 8.0 की सुविधाओं का इस्तेमाल करने में मदद मिलती है. जैसे, अडैप्टिव आइकॉन और डाउनलोड किए जा सकने वाले फ़ॉन्ट. अगर आपको अभी इन सुविधाओं की ज़रूरत नहीं है, तो Android Studio के स्थिर वर्शन का इस्तेमाल करें. इससे, Android 8.0 पर अपना ऐप्लिकेशन बनाया जा सकता है और नए एपीआई का इस्तेमाल किया जा सकता है.

Android Studio के किसी भी वर्शन को सेट अप करने के लिए, यह तरीका अपनाएं:

  1. Android Studio लॉन्च करें और टूल > SDK मैनेजर पर क्लिक करके, SDK मैनेजर खोलें.
  2. SDK प्लैटफ़ॉर्म टैब में, पैकेज की जानकारी दिखाएं को चुनें. Android 8.0 Preview के नीचे बताए गए काम करें:
    • Android SDK प्लैटफ़ॉर्म 26
    • Google API Intel x86 Atom सिस्टम इमेज (सिर्फ़ एमुलेटर के लिए ज़रूरी है)
  3. SDK टूल टैब पर स्विच करें और उन सभी आइटम की जांच करें जिनके लिए अपडेट उपलब्ध हैं. इसके लिए, डैश दिखाने वाले हर चेकबॉक्स पर क्लिक करें. इसमें, ज़रूरी इन आइटम के नए वर्शन शामिल होने चाहिए:
    • Android SDK Build-Tools 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • Android Emulator 26.0.0
  4. चुने गए सभी SDK पैकेज इंस्टॉल करने के लिए, OK पर क्लिक करें.

अब आपके पास Android 8.0 के साथ ऐप्लिकेशन बनाने का विकल्प है.

अपना बिल्ड कॉन्फ़िगरेशन अपडेट करना

compileSdkVersion, targetSdkVersion, और Support Library के वर्शन को, उपलब्ध सबसे नए रिविज़न पर अपडेट करें. उदाहरण के लिए:

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

अपनी मेनिफ़ेस्ट फ़ाइल से ब्रॉडकास्ट रिसीवर हटाना

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

ऐसे ब्रॉडकास्ट जिनका जवाब सिर्फ़ आपका ऐप्लिकेशन दे सकता है—साफ़ तौर पर ब्रॉडकास्ट इंटेंट और खास तौर पर आपके ऐप्लिकेशन के पैकेज नाम पर भेजे गए ब्रॉडकास्ट—Android 8.0 पर पहले की तरह ही काम करते रहेंगे.

हालांकि, इस नई पाबंदी में कुछ अपवाद हैं. Android 8.0 को टारगेट करने वाले ऐप्लिकेशन में अब भी काम करने वाले इंप्लिसिट ब्रॉडकास्ट की सूची के लिए, इंप्लिसिट ब्रॉडकास्ट के अपवाद देखें.

अपने Android 8.0 ऐप्लिकेशन की जांच करना

ऊपर बताई गई तैयारियां पूरी करने के बाद, अपना ऐप्लिकेशन बनाएं और फिर उसका टेस्ट करें. इससे यह पक्का किया जा सकेगा कि Android 8.0 (एपीआई लेवल 26) को टारगेट करने पर, ऐप्लिकेशन ठीक से काम कर रहा है या नहीं. ऐप्लिकेशन की क्वालिटी के लिए दिशा-निर्देश और टेस्टिंग के सबसे सही तरीके पढ़ने का यह एक और अच्छा समय है.

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

टेबल 2 में, इन बदलावों की सूची दी गई है. साथ ही, ज़्यादा जानकारी के लिंक भी दिए गए हैं.

टेबल 2. ऐसे अहम बदलाव जो targetSdkVersion के 26 पर सेट होने पर ऐप्लिकेशन पर असर डालते हैं.

बदलें खास जानकारी ज़्यादा जानकारी
निजता Android 8.0 (एपीआई लेवल 26) net.dns1, net.dns2, net.dns3 या net.dns4 की सिस्टम प्रॉपर्टी के इस्तेमाल की सुविधा नहीं देता. कार्रवाइयों में बदलाव: निजता
लिखने लायक और एक्ज़ीक्यूटेबल सेगमेंट लागू किए गए नेटिव लाइब्रेरी के लिए, Android 8.0 (एपीआई लेवल 26) यह नियम लागू करता है कि डेटा को चलाया नहीं जा सकता और कोड में बदलाव नहीं किया जा सकता. व्यवहार में बदलाव: नेटिव लाइब्रेरी
ELF हेडर और सेक्शन की पुष्टि डाइनैमिक लिंकर, ELF हेडर और सेक्शन हेडर में और वैल्यू की जांच करता है. अगर वे अमान्य हैं, तो लिंक नहीं हो पाता. कार्रवाइयों में बदलाव: नेटिव लाइब्रेरी
सूचनाएं SDK टूल के Android 8.0 (एपीआई लेवल 26) वर्शन को टारगेट करने वाले ऐप्लिकेशन को, उपयोगकर्ताओं को सूचनाएं भेजने के लिए एक या एक से ज़्यादा सूचना चैनल लागू करने होंगे. एपीआई की खास जानकारी: सूचनाएं
List.sort() तरीका इस तरीके को लागू करने पर, हो सकता है कि Collections.sort() को कॉल न किया जाए या स्टैक ओवरफ़्लो की वजह से आपका ऐप्लिकेशन कोई अपवाद दिखाए. व्यवहार में होने वाले बदलाव: संग्रह मैनेज करना
Collections.sort() तरीका सूची लागू करने के तरीके में, Collections.sort() अब ConcurrentModificationException देता है. कार्रवाई के तरीके में बदलाव: कलेक्शन मैनेज करना

Android 8.0 (एपीआई लेवल 26) में, व्यवहार में हुए बदलावों की पूरी सूची के लिए, Android 8.0 में व्यवहार में हुए बदलाव देखें.

Android 8.0 (एपीआई लेवल 26) में उपलब्ध नई सुविधाओं और एपीआई के बारे में जानने के लिए, Android 8.0 की सुविधाएं और एपीआई देखें.