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 Configuration Analyzer का इस्तेमाल करके, अपने ऐप्लिकेशन बंडल के ऑप्टिमाइज़ेशन, अस्पष्ट बनाने, और कोड के साइज़ को छोटा करने की दर को मेज़र किया जा सकता है. R8 Configuration Analyzer की रिपोर्ट, R8 Analyzer Skill में भी शामिल होती है. रिपोर्ट से आपको यह समझने में मदद मिल सकती है कि आपके 'कीप रूल', ऑप्टिमाइज़ेशन, कोड के साइज़ को छोटा करने, और अस्पष्ट बनाने के स्कोर पर कैसे असर डालते हैं. हालांकि, रिपोर्ट में दिए गए प्रतिशत, 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फ़ाइल अपलोड करनी होगी. अगर आपको पता चलता है कि अस्पष्ट होने के बावजूद, इनमें से कुछ फ़ाइलें बड़ी बनी रहती हैं, तो ऐसा इसलिए हो सकता है, क्योंकि उन पर पैकेज-वाइड 'कीप रूल' लागू होते हैं. - अगर R8 का इस्तेमाल नहीं किया जा रहा है, तो अपने
proguard-rules.proफ़ाइल,configuration.txt, या अपने ऑप्टिमाइज़र के लिए इसके बराबर की फ़ाइल में देखें. साथ ही, उन 'कीप रूल' को खोजें जो उन पैकेज से मेल खाते हैं जिन्हें अस्पष्ट नहीं किया जा रहा है. उदाहरण के लिए, अगरcom.foo.आपके dex में एक बड़ा पैकेज है, तो-keep com.foo.**या-keep com.foo.bar.**फ़ॉर्मैट के 'कीप रूल' खोजें. - ध्यान रखें कि लाइब्रेरी के उपभोक्ता के 'कीप रूल' की पहचान करना आसान नहीं हो सकता. अगर आपको लगता है कि लाइब्रेरी के उपभोक्ता का कोई नियम, ऑप्टिमाइज़ेशन पर असर डाल रहा है, तो AGP के नए वर्शन का इस्तेमाल करके, उसे स्टैंडअलोन सैंपल ऐप्लिकेशन में जोड़कर, स्थानीय तौर पर उसकी पुष्टि की जा सकती है. इसके बाद, R8 Configuration Analyzer की मदद से उसकी जांच की जा सकती है.