एंड्रॉइड मल्टीडेक्स क्या है?


111

मल्टीडेक्स के बारे में कई पोस्ट हैं। मैंने अपने बिल्ड.ग्रेड multiDexEnabled trueके defaultConfigअनुभाग सहित कई बार अनुभव किया है ।

लेकिन, वास्तव में यह विशेषता क्या है? इसका उपयोग करने के लिए परिदृश्य क्या हैं?

जवाबों:


166

दस्तावेज का हवाला देते हुए :

एंड्रॉइड एप्लिकेशन (एपीके) फाइलों में डाल्विक एक्सेसेबल (डीईएक्स) फाइलों के रूप में निष्पादन योग्य बायटेकोड फाइलें होती हैं, जिसमें आपके ऐप को चलाने के लिए उपयोग किए गए संकलित कोड होते हैं। Dalvik निष्पादन योग्य विनिर्देश उन तरीकों की कुल संख्या को सीमित करता है जिन्हें किसी एकल DEX फ़ाइल में 65,536 में संदर्भित किया जा सकता है, जिसमें Android फ्रेमवर्क विधियाँ, लाइब्रेरी विधियाँ, और आपके अपने कोड में विधियाँ शामिल हैं। इस सीमा को पार करने के लिए आवश्यक है कि आप एक मल्टीडेक्स कॉन्फ़िगरेशन के रूप में जानी जाने वाली एक से अधिक डीएक्स फ़ाइल बनाने के लिए अपनी ऐप बिल्ड प्रक्रिया को कॉन्फ़िगर करें।

तो, सुविधा यह है: यह आपके जटिल एप्लिकेशन को संकलित करने की अनुमति देता है। इसका उपयोग करने के लिए परिदृश्य तब होते हैं जब आपका ऐप 64K DEX विधि संदर्भ सीमा से टकराने के कारण संकलन करने में विफल रहता है। यह एक बिल्ड त्रुटि के रूप में प्रकट होता है, जैसे:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

2
कोई भी विचार कितना बड़ा कोडबेस होगा (LOC, या स्क्रीन का लगभग #)? क्या आप एक साधारण 5-6 स्क्रीन ऐप पर इस सीमा को हिट करने जा रहे हैं या यह वास्तव में बहुत नीचे लाइन (यानी: 10-20 स्क्रीन) है जो आपको संभवतः हिट करेगा
Marchy

20
@ मार्की: आमतौर पर, यह बहुत सारे पुस्तकालयों को जोड़ने से आता है। लाइब्रेरी-कम प्रोजेक्ट के लिए इस सीमा को हिट करना मुश्किल है।
कॉमन्सवेयर

3
मेरे पास एक छोटा ऐप है जो लगभग 5 Google समर्थन पुस्तकालयों के साथ-साथ Fabric.io और 2 या 3 अन्य तृतीय पक्ष पुस्तकालयों का उपयोग करता है और मुझे मल्टी-डेक्स का उपयोग करना होगा।
c.dunlap

1
क्या मल्टीडेक्स को सक्षम करने के कोई नुकसान हैं? इसे डिफ़ॉल्ट के रूप में सत्य क्यों नहीं माना जाए?
राफेल लीमा

1
@ राफेललिमा: प्री-एंड्रॉइड 5.0 उपकरणों के लिए मल्टीडेक्स के अर्ध-बैकपोर्ट के साथ सुरक्षा मुद्दे हैं। IIRC, यह आपके ऐप के साथ कुछ समस्याएं भी पैदा कर सकता है, यदि आप उन कक्षाओं का उपयोग करने की कोशिश कर रहे हैं जो एक अभी तक लोड-एक्सएक्सएक्स फ़ाइल में नहीं हैं।
कॉमन्सवेयर

43

यह इतना सरल है

एकल .dex फ़ाइल में 65,536 विधियाँ (संदर्भ) हो सकती हैं, इसलिए यदि संदर्भों की संख्या 65,536 से अधिक है, तो आप मल्टीफ़ैक्स के साथ जाते हैं।

अधिक स्पष्टीकरण!

एक एंड्रॉइड एप्लिकेशन प्रोग्राम को एक .dex फ़ाइल में संकलित किया जाता है जो बदले में एक .apk फ़ाइल में ज़िपित होता है।
DVM (Dalvik वर्चुअल मशीन)। Byxodes को निष्पादित करने के लिए .dex फ़ाइल / फ़ाइलों का उपयोग करता है।

65,536 से अधिक संदर्भों की संख्या का क्या कारण है?
आपके द्वारा लिखे गए तरीके + एंड्रॉइड फ्रेमवर्क मेथड्स + थर्ड पार्टी लाइब्रेरी (जैसे वॉली, रेट्रोफिट, फेसबुक एसडीके आदि) मेथड्स।
मैंने "कहीं न कहीं" पढ़ा है।
ऐप्पल कम्पेट 24.2.1 में 16.5k विधियाँ शामिल हैं।
Google Play Services GCM 9.6.1 में 16.7k विधियाँ हैं
इसलिए यदि आपने एक सरल हैलो वर्ल्ड एप्लीकेशन बनाया है जिसमें ऐप कम्पेटिबिल 24.2.1 है, तो आप पहले से ही 1/4 हैं। एकल डेक्स विधियों की सीमा को पार करने का तरीका


7

एंड्रॉइड में मल्टीडेक्स क्या है?

Dex का मतलब होता है Dalvik एक्जिक्यूटेबल, जो कि Google का वर्चुअल मशीन प्रोसेसर (Dalvik) एंड्रॉइड एप्लिकेशन को संभालने के लिए उपयोग करता है। एंड्रॉइड को छोटे और सरल ऐप को ध्यान में रखते हुए बनाया गया था और एक एकल Dalvik निष्पादन पर बाधाओं ने 65,536 तरीकों पर कोड संदर्भों की छत को पिन किया था। इस मुद्दे के कारण और जिस तरह से Dalvik मशीन कोड निष्पादन को संभालती है, उसमें कुछ जटिल और आह्वान के मुद्दे थे, जब तक कि बंदर पैच या मल्टीप्लेक्स एकीकरण। एंड्रॉइड स्टूडियो में मल्टीडेक्स एकीकरण एंड्रॉइड डेवलपर्स को 65,536 से अधिक तरीकों के साथ कोड-बेस को संकलित करने और निष्पादित करने की अनुमति देता है!


1

एंड्रॉइड डेवलपर आधिकारिक साइट को पूरा करना।

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.

1
जवाब के लिए धन्यवाद। यह वर्ष 2015 से एक सवाल है, इसलिए बहुत सी चीजें बदल गई हैं।
रॉबर्टो टेललेज़ इबारा

-2

क्या यह भी अनुमति देता है, गूगल (और अन्य) के लिए DRM लागू करने के लिए, कहते हैं .. चौड़े, कोड के टुकड़ों में जहां यह सबसे गैर-डेवलपर्स के लिए समस्याएं पैदा करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.