ऑप्टिमाइज़ेशन की जांच करना और उससे जुड़ी समस्या हल करना

ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा चालू करने के बाद, देखें कि आपका ऐप्लिकेशन सही तरीके से काम कर रहा है या नहीं और R8 कॉन्फ़िगरेशन ठीक से काम कर रहा है या नहीं. आम तौर पर, यह तरीका अपनाया जाता है:

  1. अपने ऐप्लिकेशन की क्रिटिकल यूज़र जर्नी (CUJs) की जांच करें: उदाहरण के लिए, पक्का करें कि उपयोगकर्ता साइन इन कर सकें और अन्य ज़रूरी काम कर सकें.
  2. बेंचमार्क का इस्तेमाल करके, परफ़ॉर्मेंस में हुई बढ़ोतरी को मेज़र करें: ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा चालू करने से पहले और बाद में, अपने ऐप्लिकेशन का बेंचमार्क बनाएं.

अगर आपको कोई समस्या मिलती है, तो R8 में समस्या हल करने के लिए टूल उपलब्ध होते हैं. अगर आपको R8 से जुड़ी कोई समस्या हल करने में समस्या आ रही है, तो बग की शिकायत करें.

सामान्य सलाह

R8 से जुड़ी समस्याएं, अक्सर आपके ऐप्लिकेशन के हिसाब से अलग-अलग होती हैं. हालांकि, डिबग करने की प्रोसेस को आसान बनाने के लिए, यहां कुछ सामान्य सुझाव दिए गए हैं:

  • कुछ समय के लिए कोड को उलझाने की सुविधा बंद करना: R8, ऑप्टिमाइज़ेशन की प्रोसेस के तहत कोड को उलझाता है. आम तौर पर, गड़बड़ियों की वजह कोड को धुंधला करना नहीं होता. हालांकि, कोड को धुंधला करने की वजह से गड़बड़ियों को डीबग करना मुश्किल हो जाता है. समस्या वाले कोड का पता लगाने में आपकी मदद करने के लिए, 'रखें' नियमों वाली फ़ाइल में ‑dontobfuscate और ‑dontoptimize फ़्लैग जोड़ें.
  • रिफ़्लेक्शन की जांच करना: अगर आपको कोई ऐसा एलिमेंट नहीं है अपवाद मिलता है, तो

    Caused by: java.util.NoSuchElementException: Collection contains no element matching the predicate in the stack trace ,

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

  • बाइटकोड की जांच करना: R8 से जुड़ी ज़्यादातर समस्याओं के लिए, बाइटकोड की जांच करना ज़रूरी होता है. यह जांच, APK विश्लेषक जैसे टूल की मदद से की जा सकती है.

यह देखना कि कौनसे नियम लागू किए गए हैं

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

-printconfiguration <output-dir>/<report-name>.txt

आपके पास कोई भी पाथ और फ़ाइल का नाम तय करने का विकल्प होता है. अगर आपने कोई पाथ या फ़ाइल का नाम नहीं दिया है, तो R8, नियमों की रिपोर्ट <module-name>/build/outputs/mapping/<build-type>/configuration.txt पर दिखाता है.

कोड को सेव रखने की वजह समझना

अगर आपको ऐसा कोड दिखता है जिसे हटा दिया जाना चाहिए था, तो कॉन्फ़िगरेशन के विकल्प ‑whyareyoukeeping का इस्तेमाल करके जानें कि कोड को क्यों नहीं हटाया गया. R8, सेव किए गए कोड से आपके ऐप्लिकेशन के किसी एंट्री पॉइंट तक का पाथ दिखाता है. ज़्यादा जानकारी के लिए, Proguard के मैन्युअल में ‑whyareyoukeeping दस्तावेज़ देखें.

ओरिजनल स्टैक ट्रेस को वापस लाना

R8 की मदद से प्रोसेस किए गए कोड में कई तरह के बदलाव किए जाते हैं, ताकि स्टैक ट्रेस अब ओरिजनल कोड को रेफ़र न करे. उदाहरण के लिए, लाइन नंबर और क्लास और तरीकों के नाम बदल सकते हैं. ओरिजनल स्टैक ट्रेस को वापस लाने के लिए, R8 में 'पहले जैसा करें' कमांड-लाइन टूल दिया गया है. यह टूल, कमांड-लाइन टूल के पैकेज में शामिल होता है.

Retrace का इस्तेमाल करने के लिए, उसे मैपिंग फ़ाइल और स्टैक ट्रेस फ़ाइल दें. mapping.txt नाम की मैपिंग फ़ाइल, आपके Android ऐप्लिकेशन बंडल (AAB) के साथ अपने-आप बंडल हो जाती है. ज़्यादा जानकारी के लिए, रीट्रैस दस्तावेज़ देखें. साथ ही, क्रैश स्टैक ट्रेस को डिकोड करने के तरीके के बारे में जानने के लिए, Play Console के सहायता केंद्र का लेख पढ़ें.