Android में ODEX फाइलें क्या हैं?


82

कुछ androidएप्लिकेशन इंस्टॉल होने के बाद , मैंने पाया कि यह स्मार्टफोन में odexफ़ाइल (नहीं apk) में बदल जाएगा । कैसे होता है? मुझे कौन सिखा सकता है, मुझे इसके बारे में बहुत दिलचस्पी है।

जवाबों:


85

ब्लॉग लेख ज्यादातर सही है, लेकिन पूरा नहीं है। एक ओडेक्स फ़ाइल क्या करती है, इसकी पूरी समझ रखने के लिए, आपको थोड़ा समझना होगा कि एप्लिकेशन फाइलें (एपीके) कैसे काम करती हैं।

आवेदन मूल रूप से जिप अभिलेखागार का महिमामंडन करते हैं। जावा कोड को classes.dex नामक फ़ाइल में संग्रहीत किया जाता है और इस फ़ाइल को Dalvik JVM द्वारा पार्स किया जाता है और संसाधित classes.dex फ़ाइल का कैश फोन की Dalvik कैश में संग्रहीत किया जाता है।

एक ओडेक्स मूल रूप से एक एप्लिकेशन के classes.dex का एक पूर्व-संसाधित संस्करण है जो Dalvik के लिए निष्पादन-तैयार है। जब किसी एप्लिकेशन को odexed किया जाता है, तो classes.dex को एपीके आर्काइव से हटा दिया जाता है और यह Dalvik कैश को कुछ भी नहीं लिखता है। एक अनुप्रयोग जो odexed नहीं है, वह classes.dex फ़ाइल की 2 प्रतियों के साथ समाप्त होता है - एपीके में पैक किया हुआ, और Dalvik कैश में संसाधित एक। पहली बार लॉन्च होने में भी थोड़ा समय लगता है क्योंकि Dalvik को classes.dex फाइल को निकालना और प्रोसेस करना है।

यदि आप एक कस्टम रॉम का निर्माण कर रहे हैं, तो उपयोगकर्ता-स्थापित ऐप्स के लिए आंतरिक संग्रहण स्थान को अधिकतम करने के लिए आपकी फ्रेमवर्क JAR फ़ाइलों और स्टॉक ऐप्स दोनों को odex करना एक अच्छा विचार है। यदि आप थीम करना चाहते हैं, तो बस deodex -> अपनी थीम लागू करें -> reodex -> रिलीज़।

वास्तव में डीकोड करने के लिए, छोटी और बक्समाली का उपयोग करें:

https://github.com/JesusFreke/smali/wiki/DeodexInstructions


क्या आप कृपया टन साझा कर सकते हैं कि हम एक एपीके फ़ाइल को कैसे पुनः लोड कर सकते हैं?
बशर ५१

23

यह ब्लॉग लेख ODEX फ़ाइलों के आंतरिक विवरण की व्याख्या करता है:

एक ODEX फ़ाइल क्या है?

Android फ़ाइल सिस्टम में, अनुप्रयोग .apk एक्सटेंशन के साथ संकुल में आते हैं। ये एप्लिकेशन पैकेज, या एपीके में कुछ .odex फाइलें होती हैं, जिनका माना जाता है कि अंतरिक्ष को बचाना है। ये 'ओडेक्स' फाइलें वास्तव में एक एप्लिकेशन के कुछ हिस्सों का संग्रह हैं जिन्हें बूट करने से पहले अनुकूलित किया जाता है। ऐसा करने से बूट प्रक्रिया में तेजी आती है, क्योंकि यह एक एप्लिकेशन का हिस्सा प्रीलोड करता है। दूसरी ओर, यह उन एप्लिकेशन को हैक करना भी मुश्किल बनाता है क्योंकि कोडिंग का एक हिस्सा निष्पादन से पहले ही किसी अन्य स्थान पर हटा दिया गया है।


अगर मुझे उम्मीद है कि मेरे ऐप का एक ही फंक्शन है (ऐप odex not APK में चलते हैं), तो इसे कैसे करें?
user1253435

आपको एक माइनस मिलना चाहिए! दलविक बूट समय का अनुकूलन नहीं करता है। यह कोड हाई-लेवल लैंग्वेज से लेकर लो-लेवल तक के कंपाइलर में ऑप्टिमाइज़ किया गया है, केवल इस मामले में dalvik के लिए कोड लगभग मशीन कोड में ट्रांसलेट है। यही कारण है कि आप जावा से ही नहीं, C ++ से भी ऐप बना सकते हैं।
कॉक्स

क्या आपको यकीन है कि APKs contain certain .odex files?!
अमीर रज़ादेह

3

कला

डॉक्स के अनुसार: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure एक .odexफाइल:

एपीके में विधियों के लिए एओटी संकलित कोड है।

इसके अलावा, वे नियमित रूप से साझा किए गए पुस्तकालय प्रतीत होते हैं, क्योंकि अगर आपको कोई ऐप मिलता है, और जाँच करें:

file /data/app/com.android.appname-*/oat/arm64/base.odex

इसे कहते हैं:

base.odex: ELF shared object, 64-bit LSB arm64, stripped

और aarch64-linux-gnu-objdump -d base.odexकाम करने के लिए लगता है और कुछ सार्थक disassembly (लेकिन यह भी कुछ बकवास वर्गों) दे।

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