2013-01-09 22 views
36

Winrar (एस/डब्ल्यू संपीड़ित फ़ाइलों को खोलने के लिए) के साथ एपीके फ़ाइल खोलते समय। मुझे एपीके के अंदर पैक की गई फाइलों का एक गुच्छा मिला। उनमें से class.dex एक है। मेरा सवाल यह है कि इस फ़ाइल की भूमिका क्या है और यदि हम एक ही फाइल को संशोधित/हटाते हैं तो क्या यह एपीके को प्रभावित करेगा?एपीके फ़ाइल में class.dex फ़ाइल की भूमिका

उत्तर

46

एक APK फ़ाइल बनाने के लिए, Android के लिए एक कार्यक्रम पहले संकलित किया गया है, और उसके बाद अपने हिस्से के सभी एक फ़ाइल में पैक कर रहे हैं। इसमें उस प्रोग्राम के सभी कोड हैं (ये .dex files हैं), संसाधन, संपत्तियां, प्रमाण पत्र, और मैनिफेस्ट फ़ाइल।

प्रोग्राम आमतौर पर Java में लिखे गए हैं और bytecode पर संकलित किए गए हैं। फिर उन्हें डिवाइस पर इंस्टॉलेशन से पहले Java Virtual Machine-compatible .class files से Dalvik-compatible .dex (Dalvik निष्पादन योग्य) फ़ाइलों में परिवर्तित कर दिया जाता है। कॉम्पैक्ट Dalvik निष्पादन योग्य प्रारूप को उन प्रणालियों के लिए उपयुक्त बनाया गया है जो स्मृति और प्रोसेसर की गति के मामले में बाध्य हैं।

  • classes.dex: डेक्स फ़ाइल स्वरूप में संकलित कक्षाएं Dalvik आभासी मशीन, इन फ़ाइलों पर किसी भी संपादित

.dex फ़ाइलों के रूप में APK संसाधनों धारण द्वारा समझा जा सकता सीधे होगा एपीके को प्रभावित करें।

+2

अच्छा जवाब। क्या आपको पता है कि एकाधिक .class फ़ाइलों के दौरान केवल एक class.dex क्यों है? क्या यह dexing द्वारा किए गए अनुकूलन के कारण है या यह सिर्फ कुछ प्रकार का पैकेज है जैसे .jar फ़ाइल है? – PSIXO

+0

डीईएक्स फ़ाइलों में मेरा विश्वास है संसाधन नहीं है। class.dex के निर्माण के बाद वे विलय हो जाते हैं। – zgulser

9

.dex फ़ाइल संकलित एंड्रॉइड एप्लिकेशन कोड फ़ाइल।

From Android API GUIDES

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

और हाँ यदि आप उन फ़ाइलों को हटा देंगे तो यह एपीके को प्रभावित करेगा।

4

classes.exex अनिवार्य रूप से सभी एप्लिकेशन तर्क है। दिए गए आवेदन का कोड जावा में लिखा गया है और उसके बाद कक्षा फाइलों में संकलित किया गया है, तो इन वर्ग फ़ाइलों को संकल्पित किया गया है (कई अनुकूलन के साथ) दल्विक वीएम प्रारूप में। ध्यान दें कि कुछ भी हो सकते हैं। इसलिए फाइलें जो एप्लिकेशन कोड भी हैं लेकिन एनडीके का उपयोग होने पर ये उत्पन्न होते हैं। आप इस फ़ाइल को हटा नहीं सकते हैं। हालांकि आप इसे पहले उपयोगिता https://code.google.com/p/smali/ चलाकर बदल सकते हैं जो इस संकलित डीएक्स से स्माली कोड उत्पन्न करेगा जो कुछ हद तक जावा जैसा ही है और समझा जा सकता है। आप smali फ़ाइलों से जावा स्रोत प्राप्त करने के लिए उपकरण ApkOneClick या ApkMultiTool का भी उपयोग कर सकते हैं लेकिन ये शायद सही नहीं होंगे और आगे फिक्सिंग की आवश्यकता होगी। जब आप चाहते हैं कि कोड बदलते हैं तो आपको class.dex को फिर से बनाना चाहिए और उन्हें आपके पास मौजूद मौजूदा ज़िप/एपीके फ़ाइल में रखना चाहिए। ध्यान दें कि तब मौजूदा प्रमाणपत्र फाइलें (मेटा-आईएनएफ) अब मान्य नहीं होंगी और आपको फोन या एमुलेटर पर इसे स्थापित करने के लिए इस फ़ोल्डर को हटाने और एपीके पैकेज को इस्तीफा देने की आवश्यकता होगी।

अधिक जानकारी के लिए आप इस प्रश्न की जांच कर सकता भी What are .dex files in Android?

इसके अलावा इस मौजूदा उपकरणों http://blog.vogella.com/2011/02/14/disassemble-android-dex का उपयोग कर डेक्स फ़ाइलें वियोजन पर एक बड़ा ट्यूटोरियल है

0

apk में .dex फ़ाइल संपीड़ित फ़ाइल जो बना है आवेदन कोड में सभी जावा वर्गों के। यह जार फ़ाइल से अलग है। एक जार फ़ाइल .class फ़ाइलों का एक संग्रह है जो अलग हैं। अगर हम अनजिप करते हैं।जार, हम सभी वर्गों को अलग से प्राप्त करते हैं। दूसरी ओर, .dex फ़ाइल एक कोड है जो सभी कोड के साथ बनाई गई है। क्लास फ़ाइल एप्लिकेशन कोड से।

कोड संकलन प्रवाह: कई जावा फ़ाइलें -> कई .classes फ़ाइलें -> एक एकल .dex फ़ाइल

.dex फ़ाइलें निष्पादनयोग्य जो DVM द्वारा क्रियान्वित कर रहे हैं ... Dalvik आभासी मशीन , जो एंड्रॉइड के लिए एक रनटाइम है।

.dex में कभी भी संसाधन शामिल नहीं होंगे। संसाधनों को अलग-अलग/res फ़ोल्डर में .apk

1

इस फ़ाइल की भूमिका क्या है?

एंड्रॉइड में classes.dex की भूमिका सादे जावा में जेएआर फाइलों के समान है। यह एक फ़ाइल है जिसमें बाइटकोड हैं। एंड्रॉइड मामले में, बाइटकोड Dalvik बाइटकोड है, जो जावा बाइटकोड से अलग है।

यदि हम एक ही फ़ाइल को संशोधित/हटाते हैं तो यह एपीके को प्रभावित करेगा?

आप classes.dex संशोधित हैं, तो आप कार्यक्रमों व्यवहार है, जो या repackage के बाद काम नहीं हो सकता है संशोधित कर रहे हैं। यदि आप classes.dex हटाते हैं, तो आपके एप्लिकेशन में कोड नहीं है और आपको इसे काम करने की उम्मीद नहीं करनी चाहिए।