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

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

3.4.2 (जुलाई 2019)

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

3.4.1 (मई 2019)

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

3.4.0 वर्शन में आने वाली समस्याएं

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

  • डेटा बाइंडिंग लाइब्रेरी का इस्तेमाल करते समय, LiveDataListener.onChanged() में NPE की गड़बड़ी हो सकती है. इस समस्या को ठीक करने के लिए, Android Studio 3.4.1 में एक अपडेट शामिल किया जाएगा. यह अपडेट, Android Studio 3.5 के प्रीव्यू वर्शन में पहले से उपलब्ध है. ( समस्या #122066788 देखें)

IntelliJ IDEA 2018.3.4

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

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

Android Gradle प्लगिन 3.4.0 में नई सुविधाओं के बारे में जानने के लिए, रिलीज़ से जुड़ी जानकारी देखें.

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

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

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

वैरिएबल

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

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

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

मॉड्यूल

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

डिपेंडेंसी

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

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

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

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

बिल्ड वैरिएंट

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

सुझाव

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

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

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

  • संसाधनों को विज़ुअलाइज़ करना: आपको ड्रॉएबल, रंगों, और लेआउट की झलक देखने का विकल्प मिलता है. इससे आपको अपनी ज़रूरत के संसाधन तुरंत मिल जाते हैं.
  • एक साथ कई ऐसेट इंपोर्ट करना: एक साथ कई ड्रॉएबल ऐसेट इंपोर्ट की जा सकती हैं. इसके लिए, उन्हें संसाधन मैनेजर टूल विंडो में खींचें और छोड़ें या ड्रॉएबल इंपोर्ट करें विज़र्ड का इस्तेमाल करें. विज़र्ड को ऐक्सेस करने के लिए, टूल विंडो के सबसे ऊपर बाएं कोने में मौजूद (+) बटन को चुनें. इसके बाद, ड्रॉप-डाउन मेन्यू से ड्रॉएबल इंपोर्ट करें को चुनें.
  • एसवीजी को 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, dexing और desugaring से अलग कंपाइलिंग स्टेप था.

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

R8 की मदद से, एक ही कंपाइल स्टेप में डिसुगरिंग, श्रिंकिंग, ऑबफ़स्केटिंग, ऑप्टिमाइज़िंग, और डेक्सिंग की जाती है.

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

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

    # 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 ने Support Library को अलग-अलग पैकेज में फिर से पैक किया है. इन्हें मैनेज और अपडेट करना आसान है. इसलिए, इस इंटेंट ऐक्शन की मदद से, सिर्फ़ उन डिपेंडेंसी को तुरंत जोड़ा जा सकता है जिनकी ज़रूरत आपको Jetpack के उन कॉम्पोनेंट के लिए है जिनका आपको इस्तेमाल करना है.