Android Studio Dolphin | 2021.3.1 (सितंबर 2022)

Android Studio Dolphin में ये नई सुविधाएं उपलब्ध हैं.

कंपोज़ करने की सुविधा में नया क्या है

Android Studio में Jetpack Compose की नई सुविधाएं और सुधार यहां दिए गए हैं.

Compose में ऐनिमेशन को एक साथ इस्तेमाल करना

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

'सभी ऐनिमेशन' यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके जांच करने का तरीका दिखाने वाला GIF

मल्टीप्रीव्यू एनोटेशन लिखना

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

एक साथ कई झलक दिखाने वाले एनोटेशन का यूज़र इंटरफ़ेस (यूआई)

लेआउट इंस्पेक्टर में Compose के रीकंपोज़िशन की संख्या

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

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

लेआउट इंस्पेक्टर में नया कंपोज़िशन और स्किप काउंटर

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

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

लेआउट इंस्पेक्टर में कंपोज़िशन और स्किप काउंटर चालू करना

Wear OS डिवाइस को एम्युलेटर से जोड़ने में मदद करने वाले टूल को अपडेट किया गया

Android Studio Dolphin Canary 3 से, Wear OS एम्युलेटर को पेयर करने की सुविधा देने वाले टूल में बेहतर सुविधाएं जोड़ी गई हैं. इससे Wear एम्युलेटर को मैनेज करना और कनेक्ट करना आसान हो जाता है. अब ये काम किए जा सकते हैं:

  • डिवाइस मैनेजर में जाकर, Wear डिवाइस देखें.
  • एक ही वर्चुअल या फ़िज़िकल फ़ोन से, एक से ज़्यादा Wear डिवाइसों को जोड़ना.
  • लॉन्च होने पर, पहले से जोड़े गए डिवाइसों से अपने-आप फिर से कनेक्ट हो जाना. Android Studio अब पिछली बार सेट अप किए गए डिवाइसों को याद रखता है और उन्हें फिर से कनेक्ट कर देता है.

इन नई सुविधाओं का इस्तेमाल करने के लिए, पक्का करें कि आपके फ़ोन इम्यूलेटर का एपीआई लेवल 30 या इससे ज़्यादा हो और उनमें Google Play Store इंस्टॉल हो. यह भी पक्का करें कि आपके Wear इम्यूलेटर, एपीआई लेवल 28 या इसके बाद के लेवल पर हों. इमुलेट किए गए डिवाइसों के लिए, सिस्टम इमेज के नए वर्शन पर अपग्रेड करने के लिए, Tools > SDK Manager पर जाएं.

ज़्यादा जानकारी के लिए, Wear OS के एम्युलेटर को पेयर करने में मदद करने वाले टूल का इस्तेमाल करना लेख पढ़ें.

Wear OS एम्युलेटर के टूलबार को अपडेट किया गया

Android Studio Dolphin Canary 2 से, एपीआई लेवल 28 या इससे ज़्यादा वाले Wear इम्यूलेटर के लिए, इम्यूलेटर टूलबार में अब ऐसे बटन मौजूद हैं जो डिवाइस पर मौजूद फ़िज़िकल बटन और सामान्य कार्रवाइयों को सिम्युलेट करते हैं. नए बटन ये हैं: बटन 1 और बटन 2 (बटन 2 सिर्फ़ एपीआई लेवल 30 या उसके बाद के वर्शन पर उपलब्ध है), पाम बटन, और टिल्ट बटन. WearOS एमुलेटर पर मौजूद नए बटन का इस्तेमाल करके, ये कार्रवाइयां की जा सकती हैं:

  • अपने डिवाइस को हमेशा चालू स्क्रीन मोड पर सेट करने के लिए, हथेली के बटन पर क्लिक करें.
  • डिवाइस को हमेशा चालू स्क्रीन मोड से पहले वाली स्क्रीन पर वापस लाने के लिए, झुकाव वाले बटन पर क्लिक करें.

ज़्यादा जानकारी के लिए, एम्युलेटर में सामान्य कार्रवाइयां करना लेख पढ़ें.

Wear OS का एम्युलेटर, जिसमें Wear OS के लिए खास बटन दिए गए हैं

Wear OS के लिए नए रन कॉन्फ़िगरेशन

Wear OS के लिए खास तौर पर बनाए गए वॉच फ़ेस, टाइल, और विजेट जैसे कॉम्पोनेंट को तेज़ी से चलाने और डीबग करने के लिए, नए रन कॉन्फ़िगरेशन जोड़े गए हैं. ऐप्लिकेशन चलाते समय, रन/डीबग कॉन्फ़िगरेशन डायलॉग से ये नए कॉन्फ़िगरेशन बनाए जा सकते हैं.

ज़्यादा जानकारी के लिए, Wear OS रन/डीबग कॉन्फ़िगरेशन देखें.

WearOS के लिए लॉन्च कॉन्फ़िगरेशन की नई सुविधाएं

New Logcat

Logcat को अपडेट किया गया है, ताकि लॉग को पार्स करना, क्वेरी करना, और ट्रैक करना आसान हो.

नया फ़ॉर्मेटर

Logcat अब लॉग को फ़ॉर्मैट करता है, ताकि टैग और मैसेज जैसी काम की जानकारी को आसानी से स्कैन किया जा सके. साथ ही, अलग-अलग तरह के लॉग की पहचान की जा सके. जैसे, चेतावनियां और गड़बड़ियां.

Logcat में लॉग के लिए नया फ़ॉर्मैट

एक से ज़्यादा Logcat विंडो बनाना

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

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

स्प्लिट का इस्तेमाल करके, एक से ज़्यादा logcat विंडो बनाना

व्यू के प्रीसेट के बीच स्विच करना

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

अलग-अलग व्यू मोड के बीच स्विच करने का स्क्रीनशॉट

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

ऑटो-कंप्लीट सुविधा के साथ नई क्वेरी सिंटैक्स का स्क्रीनशॉट

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

  • स्थानीय ऐप्लिकेशन प्रोजेक्ट के लिए पीआईडी: package:mine
  • खास वैल्यू:
    • package:<package-ID>
    • tag:<tag>
    • level:[VERBOSE | INFO | ASSERT |DEBUG | WARN | ERROR ]
  • - का इस्तेमाल करके, किसी वैल्यू को बाहर रखें:
    • -tag:<exclude-tag>
  • किसी दी गई कुंजी के साथ रेगुलर एक्सप्रेशन का इस्तेमाल करें. इसके लिए, कुंजी के बाद ~ लगाएं:
    • tag~:<regular-expression-tag>
    • 'बाहर रखें' टैग के साथ जोड़ें: -tag~:<exclude-regular-expression-tag>

क्वेरी फ़ील्ड में क्वेरी के इतिहास को चुनने वाला टूल पर क्लिक करके, क्वेरी का इतिहास भी देखा जा सकता है. इसके बाद, ड्रॉप-डाउन से क्वेरी चुनी जा सकती हैं. किसी क्वेरी को पसंदीदा के तौर पर मार्क करने के लिए, क्वेरी फ़ील्ड के आखिर में मौजूद पसंदीदा क्वेरी पर क्लिक करें. इससे वह क्वेरी, आपके सभी Studio प्रोजेक्ट की सूची में सबसे ऊपर बनी रहेगी.

पसंदीदा स्क्रीनशॉट के साथ, स्क्रीनशॉट क्वेरी का इतिहास

ऐप्लिकेशन के क्रैश/रीस्टार्ट होने पर, लॉग ट्रैक करना

नए Logcat की मदद से, ऐप्लिकेशन क्रैश होने और फिर से शुरू होने की स्थिति में, ऐप्लिकेशन के लॉग को आसानी से ट्रैक किया जा सकता है. इससे, इन इवेंट के दौरान आपसे कोई ज़रूरी लॉग नहीं छूटेगा. जब Logcat को पता चलता है कि आपके ऐप्लिकेशन की प्रोसेस बंद हो गई है और फिर से शुरू हो गई है, तब आपको आउटपुट में एक मैसेज दिखेगा. जैसे, PROCESS ENDED और PROCESS STARTED. यह मैसेज यहां दिखाया गया है:

logcat में प्रोसेस के फिर से शुरू होने का स्क्रीनशॉट

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

Gradle मैनेज किए गए डिवाइस

Android वर्चुअल डिवाइसों का इस्तेमाल करके, अपने-आप होने वाली इंस्ट्रुमेंटेड जांचों को ज़्यादा भरोसेमंद, बेहतर परफ़ॉर्म करने वाली, और एक जैसी बनाने के लिए, हम Gradle मैनेज किए गए डिवाइसों को लॉन्च कर रहे हैं. यह सुविधा, एपीआई लेवल 27 और उसके बाद के वर्शन के लिए उपलब्ध है. इसकी मदद से, अपने प्रोजेक्ट की Gradle फ़ाइलों में वर्चुअल टेस्ट डिवाइसों को कॉन्फ़िगर किया जा सकता है. ऑटोमेटेड टेस्ट को लागू करते समय, बिल्ड सिस्टम इन कॉन्फ़िगरेशन का इस्तेमाल करके डिवाइसों को पूरी तरह से मैनेज करता है. इसका मतलब है कि वह इन डिवाइसों को बनाता है, डिप्लॉय करता है, और बंद करता है.

इस सुविधा से Gradle को न सिर्फ़ उन टेस्ट के बारे में जानकारी मिलती है जिन्हें चलाया जा रहा है, बल्कि डिवाइसों के लाइफ़साइकल के बारे में भी जानकारी मिलती है. इससे, टेस्टिंग के आपके अनुभव की क्वालिटी इन तरीकों से बेहतर होती है:

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

इसके अलावा, Gradle Managed Devices में एक नया तरह का एम्युलेटर डिवाइस पेश किया गया है. इसे ऑटोमेटेड टेस्ट डिवाइस (एटीडी) कहा जाता है. इसे इंस्ट्रुमेंटेशन टेस्ट चलाने के दौरान परफ़ॉर्मेंस को बेहतर बनाने के लिए ऑप्टिमाइज़ किया गया है. टेस्ट शार्डिंग की सुविधा के साथ मिलकर काम करने की वजह से, टेस्ट के पूरे होने में लगने वाले समय को कम करने के लिए, अपने टेस्ट सुइट को कई एटीडी इंस्टेंस में बांटा जा सकता है. Gradle Managed Devices और इससे जुड़ी सुविधाओं के बारे में ज़्यादा जानने के लिए, Gradle Managed Devices की मदद से टेस्ट को स्केल करना लेख पढ़ें.

डीईएक्स निर्देश ऑफ़सेट के आधार पर मैपिंग फ़ाइलों का इस्तेमाल करके, R8 के साथ काम करने की सुविधा

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

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

स्टेटलेस लैम्डा को अब सिंगलटन के तौर पर डीसुगर नहीं किया जाता

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

R8, Android रनटाइम पर पुष्टि की प्रोसेस को धीमा होने से बचाता है

Android रनटाइम (Dalvik और ART) पर परफ़ॉर्मेंस से जुड़ी समस्याओं को दूर करने के लिए, R8 (D8 नहीं) अब लाइब्रेरी स्टब और लाइब्रेरी के तरीकों के लिए आउटलाइन कॉल की सुविधा देता है. यह सुविधा, लाइब्रेरी की उन क्लास और तरीकों के लिए है जो रनटाइम में मौजूद नहीं हो सकते. ऐसा करने से, पुष्टि से जुड़ी कई समस्याएं हल हो जाती हैं और रनटाइम परफ़ॉर्मेंस बेहतर हो जाती है. यह सुविधा हमेशा चालू रहती है.

Java 8+ API desugaring के साथ JDK-11 API के लिए सहायता

coreLibraryDesugaring डिपेंडेंसी का इस्तेमाल करते समय, अब JDK-11 पर आधारित इम्प्लीमेंटेशन लाइब्रेरी का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, desugar_jdk_libs बदलाव लॉग देखें.

पैच रिलीज़

Android Studio Dolphin में पैच रिलीज़ की सूची यहां दी गई है.

Android Studio Dolphin | 2021.3.1 पैच 1 (अक्टूबर 2022)

Patch 1 रिलीज़ के साथ, Android Studio Dolphin अब Kotlin प्लगिन 1.7.20 के साथ काम करता है. इस छोटे अपडेट में, इन गड़बड़ियों को भी ठीक किया गया है:

ठीक की गई समस्याएं
Android Gradle प्लग इन
Gradle के ज़रिए इंस्ट्रुमेंटेड Android टेस्ट चलाने पर, डिसुगरिंग की प्रोसेस सही तरीके से लागू नहीं होती
AGP 7.3.0, Gradle प्लैटफ़ॉर्म प्रोजेक्ट के लिए Gradle सिंक की सुविधा काम नहीं करती
Dexer (D8)
DEX को मर्ज करते समय, विवाद को हल करने के लिए एक सार्वजनिक एपीआई जोड़ें, ताकि Bazel डुप्लीकेट क्लास की अनुमति दे सके
इंपोर्ट/सिंक करें
Chipmunk Patch 2 (2021.2.1) से अपग्रेड करने के बाद, Gradle प्रोजेक्ट इंपोर्ट नहीं हो पाता
संसाधन
AarResourceRepositoryCache.createCachingData में NPE (AS Dolphin+)
Shrinker (R8)
टाइप सब्स्टिट्यूट करने वाले फ़ील्ड के लिए, Kotlin मेटाडेटा कॉपी नहीं किया जाता
अंदाज़े के आधार पर तय किए गए कन्वर्ज़न टाइप में अनचाहा बदलाव: TOP (सब कुछ)
Gradle 7.3.0 की वजह से APK बनाने में गड़बड़ी com.android.tools.r8.CompilationFailedException
कंपैट मोड में, डिफ़ॉल्ट कंस्ट्रक्टर हटा दिए जाते हैं.
JetBrains Markdown के साथ टकराव
ThreadLocal.withInitial(java.util.function.Supplier के लिए सहायता
AGP 7.3, कंस्ट्रक्टर में गड़बड़ी वाली क्लास के लिए DEX फ़ाइल जनरेट करता है
यह पता लगाने की कोशिश की गई कि क्या नॉन-सीएफ़ कोड को डीसुगरिंग की ज़रूरत है
ktor VerifyError
okio-jvm 3.2.0 को प्रोसेस करते समय, कंपाइलेशन के दौरान तय नहीं की गई वैल्यू मिली
क्लास इनलाइनिंग ऑब्जेक्ट से कंपाइल करने में गड़बड़ी. ऐसा सीधे तौर पर इस्तेमाल न करने वाले उपयोगकर्ताओं की वजह से होता है
java.lang.IllegalAccessError with R8 3.3.75