DEX कोड ऑप्टिमाइज़ेशन

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

DEX या Dalvik Executable फ़ाइलों में, आपके ऐप्लिकेशन को चलाने के लिए इस्तेमाल किया गया कंपाइल किया गया कोड होता है. इसमें आम तौर पर Java और Kotlin कोड शामिल होता है. हालांकि, इसमें कंपाइल किया गया C++ कोड या .so फ़ाइलें शामिल नहीं होती हैं.

Android की ज़रूरी जानकारी देने वाली रिपोर्ट, सभी ऐप्लिकेशन और गेम के लिए DEX कोड ऑप्टिमाइज़ेशन मेट्रिक दिखाती हैं. हालांकि, यह सिर्फ़ उन ऐप्लिकेशन और गेम के लिए थ्रेशोल्ड लागू करती है जो साइज़ से जुड़ी कुछ खास ज़रूरी शर्तों को पूरा करते हैं.

समस्या का पता लगाना

Android की ज़रूरी जानकारी की मदद से, आपको सूचना मिल सकती है. ऐसा तब होता है, जब आपके ऐप्लिकेशन के DEX कोड ऑप्टिमाइज़ेशन का लेवल कम होता है. इसमें R8 का इस्तेमाल करने वाले ऐप्लिकेशन और गेम के लिए, कोड को अस्पष्ट बनाना, कोड के साइज़ को छोटा करना, और उसे ऑप्टिमाइज़ करना शामिल है. R8 का इस्तेमाल न करने वाले ऐप्लिकेशन के लिए, Android की ज़रूरी जानकारी ऑप्टिमाइज़ेशन, कोड छोटा करने, और कोड को उलझाने की दरों की जांच करता है. हालांकि, जहां ज़रूरी हो वहां कोड को उलझाने के अनुमानित तरीकों का इस्तेमाल करता है.

ऑप्टिमाइज़ेशन की स्थिति को मॉनिटर करना

Android की ज़रूरी जानकारी की मदद से, अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. इसके लिए, यह सुविधा आपको Play Console के ज़रिए सूचना देती है. ऐसा तब होता है, जब आपका ऐप्लिकेशन कोड ऑप्टिमाइज़ेशन के लिए, तय किए गए कम से कम प्रतिशत को पूरा नहीं करता है. कोड छोटा करने, ऑप्टिमाइज़ करने, और कोड को समझने में मुश्किल बनाने की प्रोसेस की पूरी जानकारी के लिए, R8 Configuration Analyzer का इस्तेमाल करना लेख पढ़ें.

AGP 8.10 या इसके बाद के वर्शन के नए पैच का इस्तेमाल करके बनाए गए ऐप्लिकेशन के लिए, ये प्रतिशत शामिल की गई r8.json फ़ाइल से लिए जाते हैं.

AGP के पुराने वर्शन या जहां r8.json फ़ाइल शामिल नहीं है वहां प्रतिशत की गणना, mapping.txt फ़ाइल के आधार पर की जाती है. अगर यह फ़ाइल शामिल नहीं है, तो DEX के अनुमानित आंकड़ों का इस्तेमाल किया जाता है.

जिन ऐप्लिकेशन को किसी अन्य कोड ऑप्टिमाइज़र की मदद से ऑप्टिमाइज़ किया जाता है उनके लिए, Android की ज़रूरी जानकारी, ऐप्लिकेशन बंडल में शामिल क्लास, तरीकों, और फ़ील्ड के प्रतिशत का अनुमान लगाने के लिए विश्लेषण करती है.

DEX का कुल साइज़ कम से कम इतना होना चाहिए

Android की ज़रूरी जानकारी में, सभी ऐप्लिकेशन के लिए कोड ऑप्टिमाइज़ेशन मेट्रिक का हिसाब लगाया जाता है. हालांकि, आपको सिर्फ़ तब सूचनाएं मिलेंगी, जब आपका ऐप्लिकेशन बंडल, DEX के कुल साइज़ से जुड़ी इन ज़रूरी शर्तों को पूरा करता हो:

  • ऐप्लिकेशन: बंडल में कम से कम 10 एमबी का DEX कोड होना चाहिए. यह कोड, कंप्रेस नहीं किया गया होना चाहिए
  • गेम: बंडल में कम से कम 50 एमबी का DEX कोड होना चाहिए. यह कोड, कंप्रेस नहीं किया गया होना चाहिए

Android की ज़रूरी जानकारी में, आपके ऐप्लिकेशन का DEX साइज़ दिखता है. हालांकि, कमांड लाइन का इस्तेमाल करके, इसे स्थानीय तौर पर भी मेज़र किया जा सकता है:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

स्थानीय तौर पर R8 कोड ऑप्टिमाइज़ेशन को मेज़र करना

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

Android की ज़रूरी जानकारी में, आपके स्कोर का हिसाब लगाने के लिए इस्तेमाल किए गए मेटाडेटा की जांच करने के लिए, अपने ऐप्लिकेशन बंडल से r8.json फ़ाइल निकालें:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

समस्या ठीक करना

DEX कोड ऑप्टिमाइज़ेशन के कम स्कोर की समस्या हल करने के लिए, अपने बिल्ड सिस्टम और ऑप्टिमाइज़र के आधार पर दिए गए सुझावों की समीक्षा करें:

Android Gradle प्लगिन और R8

R8 DEX कोड ऑप्टिमाइज़ेशन स्कोर को बेहतर बनाने के लिए, R8 ऑप्टिमाइज़ेशन को बेहतर बनाना पर दिए गए दिशा-निर्देश देखें. R8 Analyzer skill का इस्तेमाल करके, अपने ऐप्लिकेशन के कीप रूल को ऑप्टिमाइज़ करने के बारे में ज़्यादा जानकारी पाई जा सकती है.

R8 के अलावा अन्य बिल्ड सिस्टम और DEX पोस्ट-प्रोसेसर

अगर आपकी बिल्ड पाइपलाइन में कस्टम बिल्ड टूल या सेकंडरी DEX पोस्ट-प्रोसेसर का इस्तेमाल किया जाता है, तो अपने ऐप्लिकेशन के ऑप्टिमाइज़ेशन को बेहतर बनाने के लिए, यह तरीका अपनाएं:

  • Android Studio में अपना ऐप्लिकेशन बंडल खोलें और उसे APK Analyzer में देखें.
  • सभी .dex फ़ाइलें चुनें.
  • "नामों को साफ़ तौर पर दिखाएं" बटन को टॉगल करते समय, सबसे बड़ी फ़ाइलों पर ध्यान दें. ध्यान दें: इसके लिए, आपको mapping.txt फ़ाइल अपलोड करनी होगी. अगर आपको लगता है कि कुछ फ़ाइलें धुंधली होने के बावजूद बड़ी हैं, तो हो सकता है कि उन पर पैकेज के लिए तय किए गए कीप नियमों का असर पड़ा हो.
  • अपनी proguard-rules.pro फ़ाइल, configuration.txt या अगर R8 का इस्तेमाल नहीं किया जा रहा है, तो अपने ऑप्टिमाइज़र के लिए इसके बराबर की फ़ाइल में देखें. इसके बाद, उन पैकेज से मेल खाने वाले कीप नियमों को खोजें जिन्हें अस्पष्ट नहीं किया जा रहा है. उदाहरण के लिए, अगर com.foo. आपके डेक्स में मौजूद कोई बड़ा पैकेज है, तो -keep com.foo.** या -keep com.foo.bar.** फ़ॉर्मैट वाले कीप नियमों को ढूंढें.
  • ध्यान रखें कि लाइब्रेरी के उपभोक्ता के डेटा को सुरक्षित रखने से जुड़े कीप नियमों की पहचान करना इतना आसान नहीं होता. अगर आपको लगता है कि लाइब्रेरी के उपभोक्ता से जुड़ा कोई नियम, ऑप्टिमाइज़ेशन पर असर डाल रहा है, तो उसे स्थानीय तौर पर पुष्टि की जा सकती है. इसके लिए, उसे AGP के नए वर्शन का इस्तेमाल करके, स्टैंडअलोन सैंपल ऐप्लिकेशन में जोड़ें. इसके बाद, R8 कॉन्फ़िगरेशन ऐनलिसिस टूल की मदद से उसकी जांच करें.