Android Studio 3.4 (अप्रैल 2019)

Android Studio 3.4 एक मुख्य रिलीज़ है. इसमें कई नई सुविधाएं और सुधार शामिल हैं.

3.4.2 (जुलाई 2019)

इस छोटे से अपडेट में कई गड़बड़ियां ठीक की गई हैं और परफ़ॉर्मेंस में सुधार किए गए हैं. गड़बड़ियों को ठीक करने से जुड़ी अहम जानकारी देखने के लिए, रिलीज़ से जुड़े अपडेट वाले ब्लॉग पर जाएं.

3.4.1 (मई 2019)

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

3.4.0 में पहले से मौजूद समस्याएं

  • Android Q बीटा वर्शन पर चलने वाले डिवाइस पर ऐप्लिकेशन को डिप्लॉय करने पर, प्रोफ़ाइलिंग की सुविधा बंद हो जाती है.

  • डेटा बाइंडिंग लाइब्रेरी का इस्तेमाल करते समय, LiveDataListener.onChanged() काम न कर सकता है और एनपीई (नॉन-पैरामीटर एरर) दिख सकता है. इस समस्या का समाधान Android Studio 3.4.1 में शामिल कर लिया जाएगा और यह Android Studio 3.5 के नए झलक वर्शन में पहले से उपलब्ध है. ( समस्या #122066788 देखें)

IntelliJ IDEA 2018.3.4

Android Studio के मुख्य IDE को अपडेट किया गया है. इसमें, 2018.3.4 रिलीज़ के ज़रिए, IntelliJ IDEA के सुधारों को शामिल किया गया है.

Android Gradle प्लग इन 3.4.0 के अपडेट

Android Gradle प्लग इन 3.4.0 में क्या नया है, इस बारे में जानने के लिए, इसके रिलीज़ नोट देखें.

नए प्रोजेक्ट के स्ट्रक्चर वाला डायलॉग बॉक्स

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

मेन्यू बार में जाकर, फ़ाइल > प्रोजेक्ट स्ट्रक्चर को चुनकर, PSD फ़ाइल खोली जा सकती है. Windows और Linux पर Ctrl+Shift+Alt+S या macOS पर Command+; (सेमीकोलन) दबाकर भी PSD फ़ाइल खोली जा सकती है. यहां PSD के कुछ नए और अपडेट किए गए सेक्शन के बारे में जानकारी दी गई है.

वैरिएबल

PSD के नए वैरिएबल सेक्शन की मदद से, बिल्ड वैरिएबल बनाए और मैनेज किए जा सकते हैं. जैसे, अपने प्रोजेक्ट में डिपेंडेंसी के वर्शन नंबर को एक जैसा बनाए रखने के लिए.

  • अपने प्रोजेक्ट की Gradle बिल्ड स्क्रिप्ट में पहले से मौजूद, बिल्ड वैरिएबल तुरंत देखें और उनमें बदलाव करें.
  • सीधे PSD से प्रोजेक्ट- या मॉड्यूल-लेवल पर नए बिल्ड वैरिएबल जोड़ें.

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

मॉड्यूल

किसी मौजूदा मॉड्यूल में, सभी बिल्ड वैरिएंट पर लागू होने वाली प्रॉपर्टी कॉन्फ़िगर करें या मॉड्यूल सेक्शन से अपने प्रोजेक्ट में नए मॉड्यूल जोड़ें. उदाहरण के लिए, यहां defaultConfig प्रॉपर्टी कॉन्फ़िगर की जा सकती हैं या हस्ताक्षर करने के कॉन्फ़िगरेशन मैनेज किए जा सकते हैं.

डिपेंडेंसी

अपने प्रोजेक्ट के डिपेंडेंसी ग्राफ़ में, हर डिपेंडेंसी की जांच करें और उसे विज़ुअलाइज़ करें. ऐसा करने के लिए, प्रोजेक्ट सिंक करने के दौरान Gradle के हल किए गए तरीके का इस्तेमाल करें. इसके लिए, यह तरीका अपनाएं:

  1. PSD के बाएं पैनल में, डिपेंडेंसी चुनें.
  2. मॉड्यूल पैनल में, वह मॉड्यूल चुनें जिसके लिए आपको हल की गई डिपेंडेंसी की जांच करनी है.
  3. PSD की दाईं ओर, समाधान की गई डिपेंडेंसी पैनल खोलें, जो यहां दिखाया गया है.

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

आपने जो डिपेंडेंसी चुनी है उसके आधार पर, आपको नीचे दिए गए डायलॉग बॉक्स जैसा एक डायलॉग बॉक्स दिखेगा. इससे, आपको मॉड्यूल में डिपेंडेंसी जोड़ने में मदद मिलेगी.

वैरिएंट बनाना

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

सुझाव

प्रोजेक्ट की डिपेंडेंसी और बिल्ड वैरिएबल के लिए सुझाए गए अपडेट देखने के लिए, सुझाव सेक्शन में जाएं. यहां दिए गए उदाहरण में यह तरीका बताया गया है.

नया रिसोर्स मैनेजर

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

  • संसाधनों को विज़ुअलाइज़ करना: आपके पास ड्रॉबल, रंग, और लेआउट की झलक देखने का विकल्प है. इससे अपनी ज़रूरत के हिसाब से संसाधन तुरंत ढूंढे जा सकते हैं.
  • एक साथ कई ऐसेट इंपोर्ट करना: एक साथ कई ड्रॉबल ऐसेट इंपोर्ट करने के लिए, उन्हें रिसॉर्स मैनेजर टूल विंडो में खींचकर छोड़ें या ड्रॉबल ऐसेट इंपोर्ट करें विज़र्ड का इस्तेमाल करें. विज़र्ड को ऐक्सेस करने के लिए, टूल विंडो के सबसे ऊपर बाएं कोने में मौजूद (+) बटन को चुनें. इसके बाद, ड्रॉप-डाउन मेन्यू से ड्रॉबल आइटम इंपोर्ट करें को चुनें.
  • एसवीजी को VectorDrawable ऑब्जेक्ट में बदलना: अपनी एसवीजी इमेज को VectorDrawable ऑब्जेक्ट में बदलने के लिए, ड्रॉ किए जा सकने वाले आइटम इंपोर्ट करें विज़र्ड का इस्तेमाल किया जा सकता है.
  • ऐसेट खींचें और छोड़ें: रिसॉर्स मैनेजर टूल विंडो से, डिवाइस के डिज़ाइन और एक्सएमएल व्यू, दोनों पर ड्रॉआउट खींचें और छोड़ें.
  • विकल्प के तौर पर मौजूद वर्शन देखना: अब टूल विंडो में किसी संसाधन पर दो बार क्लिक करके, अपने संसाधनों के वैकल्पिक वर्शन देखे जा सकते हैं. इस व्यू में, आपके बनाए गए अलग-अलग वर्शन और शामिल किए गए क्वालिफ़ायर दिखते हैं.
  • टाइल और सूची व्यू: टूल विंडो में व्यू बदलकर, अपने संसाधनों को अलग-अलग क्रम में देखा जा सकता है.

ज़्यादा जानने के लिए, ऐप्लिकेशन के संसाधनों को मैनेज करने के तरीके के बारे में गाइड पढ़ें.

APK की प्रोफ़ाइल बनाने और उन्हें डीबग करते समय, बिल्ड आईडी की जांच करना

जब आप अपने APK में .so शेयर की गई लाइब्रेरी के लिए, डीबग करने के लिए सिंबल फ़ाइलें उपलब्ध कराते हैं, तो Android Studio पुष्टि करता है कि दी गई सिंबल फ़ाइलों का बिल्ड आईडी, APK में मौजूद .so लाइब्रेरी के बिल्ड आईडी से मेल खाता है.

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

R8 डिफ़ॉल्ट रूप से चालू है

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

नीचे दी गई इमेज में, R8 के आने से पहले, कॉम्पाइल करने की प्रोसेस के बारे में खास जानकारी दी गई है.

R8 से पहले, ProGuard कोड को डीकोड करने और शुगर को हटाने के बाद, कॉम्पाइल करने का एक अलग चरण था.

अब R8 के साथ, डीसुगरिंग, छोटा करना, गुप्त करना, ऑप्टिमाइज़ करना, और डीक्सिंग (D8) ये सभी एक चरण में पूरे हो जाते हैं, जैसा कि यहां दिखाया गया है.

R8 की मदद से, डेसुगरिंग, छोटा करना, गुप्त करना, ऑप्टिमाइज़ करना, और डिक्स करना, ये सभी काम एक ही कंपाइल चरण में किए जाते हैं.

ध्यान रखें कि R8 को आपके मौजूदा ProGuard नियमों के साथ काम करने के लिए डिज़ाइन किया गया है. इसलिए, R8 का फ़ायदा पाने के लिए, आपको कुछ करने की ज़रूरत नहीं होगी. हालांकि, यह ProGuard के लिए एक अलग टेक्नोलॉजी है जिसे खास तौर पर Android प्रोजेक्ट के लिए डिज़ाइन किया गया है. इसलिए, छोटा करने और ऑप्टिमाइज़ करने की सुविधा की वजह से हो सकता है कि वह कोड हटा दिया जाए जो ProGuard ने नहीं किया हो. इसलिए, इस असंभावित स्थिति में, आपको अपने बिल्ड आउटपुट में उस कोड को बनाए रखने के लिए, अतिरिक्त नियम जोड़ने पड़ सकते हैं.

अगर आपको R8 का इस्तेमाल करने में समस्या आ रही है, तो R8 के साथ काम करने के बारे में अक्सर पूछे जाने वाले सवाल पढ़ें. इनसे आपको पता चलेगा कि आपकी समस्या का कोई हल है या नहीं. अगर समाधान का दस्तावेज़ नहीं बनाया गया है, तो कृपया गड़बड़ी की शिकायत करें. अपने प्रोजेक्ट की gradle.properties फ़ाइल में, इनमें से किसी एक लाइन को जोड़कर, R8 को बंद किया जा सकता है:

    # Disables R8 for Android Library modules only.
    android.enableR8.libraries = false
    # Disables R8 for all modules.
    android.enableR8 = false
    
  

ध्यान दें: अगर आपने किसी बिल्ड टाइप के लिए, अपने ऐप्लिकेशन मॉड्यूल की build.gradle फ़ाइल में useProguard को false पर सेट किया है, तो Android Gradle प्लग इन उस बिल्ड टाइप के लिए, आपके ऐप्लिकेशन के कोड को छोटा करने के लिए R8 का इस्तेमाल करता है. भले ही, आपने अपने प्रोजेक्ट की gradle.properties फ़ाइल में R8 को बंद कर दिया हो.

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

लेआउट एडिटर में किए गए सुधार {:#layout-editor}

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

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

डिपेंडेंसी इंपोर्ट करने के लिए नई इंटेंट कार्रवाई

अपने कोड में कुछ Jetpack और Firebase क्लास का इस्तेमाल करने पर, एक नया इंटेंट ऐक्शन यह सुझाव देता है कि अगर आपने अभी तक ऐसा नहीं किया है, तो Gradle लाइब्रेरी डिपेंडेंसी को आपके प्रोजेक्ट में जोड़ना ज़रूरी है. उदाहरण के लिए, अगर ज़रूरी android.arch.work:work-runtime डिपेंडेंसी को इंपोर्ट किए बिना, WorkManager क्लास का रेफ़रंस दिया जाता है, तो इंटेट ऐक्शन की मदद से एक क्लिक में आसानी से ऐसा किया जा सकता है, जैसा कि नीचे दिखाया गया है.

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