Delvik एक्ज़ीक्यूटेबल फ़ॉर्मैट

यह दस्तावेज़ .dex के लेआउट और कॉन्टेंट के बारे में बताता है फ़ाइलें जिनका इस्तेमाल क्लास की परिभाषाओं के सेट और उनसे जुड़ी सहायक डेटा.

टाइप के बारे में जानकारी देने वाली गाइड

नाम ब्यौरा
बाइट 8-बिट साइन इन किया
यूबाइट 8-बिट साइन नहीं किया गया पूर्णांक
छोटा 16-बिट साइन किया हुआ, लिटिल-एंडियन
यूशॉर्ट 16-बिट अनसाइन्ड int, लिटिल-एंडियन
आईएनटी 32-बिट साइन किया हुआ, लिटिल-एंडियन
यूइंट 32-बिट अनसाइन्ड इंटेजर, लिटिल-एंडियन
लंबा 64-बिट साइन किया हुआ, लिटिल-एंडियन
उलॉन्ग 64-बिट अनसाइन्ड int, लिटिल-एंडियन
स्लीब128 हस्ताक्षर किया गया LEB128, वैरिएबल की लंबाई (नीचे देखें)
Uleb128 साइन न किया गया LEB128, वैरिएबल की लंबाई (नीचे देखें)
Uleb128p1 साइन न किया गया LEB128 प्लस 1, वैरिएबल की लंबाई (नीचे देखें)

एलईबी128

LEB128 ("Little-Endian Base 128") के लिए वैरिएबल-लम्बाई एन्कोडिंग मनचाहे तरीके से हस्ताक्षर किए गए या साइन नहीं किए गए पूर्णांक की संख्या. फ़ॉर्मैट था DWARF3 से लिया है स्पेसिफ़िकेशन. .dex फ़ाइल में, LEB128 का इस्तेमाल सिर्फ़ इन कामों के लिए किया जाता है 32-बिट क्वांटिटी को एन्कोड करें.

LEB128 कोड में बदली गई हर वैल्यू में एक से पांच होती हैं बाइट, जो साथ मिलकर एक 32-बिट वैल्यू दिखाते हैं. हर बाइट का बिट सेट अंतिम बाइट को छोड़कर, होता है, जो सबसे ज़्यादा साफ़ तौर पर समझ आता है. शेष हर बाइट के सात बिट पेलोड होते हैं. पहली बाइट में, मात्रा के बिट, दूसरे में अगले सात बाइट वगैरह. हस्ताक्षर किए गए LEB128 (sleb128) के मामले में, क्रम में मौजूद फ़ाइनल बाइट का सबसे अहम पेलोड बिट है अंतिम मान प्राप्त करने के लिए चिह्न-बढ़ाया गया है. साइन नहीं किए गए केस में (uleb128), ऐसा कोई भी बिट जो साफ़ तौर पर नहीं दिखाया गया है 0 के रूप में समझा जाता है.

दो-बाइट वाली LEB128 वैल्यू का बिट के मुताबिक डायग्राम
पहला बाइट सेकंड बाइट
1 बिट6 बिट5 बिट4 बिट3 बिट2 बिट1 बिट0 0 बिट13 बिट12 बिट11 बिट10 बिट9 बिट8 बिट7

वैरिएंट uleb128p1 का इस्तेमाल, हस्ताक्षर वाले दस्तावेज़ को दिखाने के लिए किया जाता है वैल्यू, जहां वैल्यू को प्लस वन के तौर पर एन्कोड किया गया है uleb128 के तौर पर. इससे -1 की एन्कोडिंग हो जाती है (इसे अन्य तरीके से, बिना साइन वाली वैल्यू 0xffffffff के तौर पर माना जाता है) — लेकिन कोई अन्य नेगेटिव संख्या नहीं है — सिर्फ़ एक बाइट है, और उन मामलों में उपयोगी है जहां बताई गई संख्या में या तो नेगेटिव या -1 (या 0xffffffff) वाली वैल्यू होनी चाहिए, और जहां किसी अन्य ऋणात्मक मान की अनुमति न हो (या जहां बड़े अहस्ताक्षरित हैं में वैल्यू की ज़रूरत नहीं होती है).

यहां फ़ॉर्मैट के कुछ उदाहरण दिए गए हैं:

कोड में बदला गया क्रम sleb128 के तौर पर uleb128 के तौर पर uleb128p1 के तौर पर
0000-1
01110
7f-1127126
80 7f-1281625616255

फ़ाइल लेआउट

नाम फ़ॉर्मैट ब्यौरा
हेडर हेडर_आइटम हेडर
स्ट्रिंग_आईडी स्ट्रिंग_आईडी आइटम[] स्ट्रिंग आइडेंटिफ़ायर की सूची. ये सभी स्ट्रिंग के आइडेंटिफ़ायर हैं इसका इस्तेमाल इस फ़ाइल में, अंदरूनी नामकरण (उदाहरण के लिए, टाइप डिस्क्रिप्टर) के लिए किया जाता है या कॉन्सटेंट ऑब्जेक्ट के तौर पर दिखते हैं. इस सूची को क्रम से लगाना चाहिए इसके लिए, UTF-16 के कोड पॉइंट वैल्यू का इस्तेमाल करें. ऐसा करके, साथ ही, इसमें कोई डुप्लीकेट एंट्री नहीं होनी चाहिए.
type_ids type_id_item[] टाइप आइडेंटिफ़ायर की सूची. ये सभी तरह के आइडेंटिफ़ायर हैं (क्लास, सरणियां, या प्रिमिटिव टाइप) जिनका इस्तेमाल इस फ़ाइल में किया जाता है. फ़ाइल में है या नहीं. इस सूची को string_id के हिसाब से क्रम में लगाना चाहिए इंडेक्स किया जा सकता है और इसमें कोई डुप्लीकेट एंट्री नहीं होनी चाहिए.
प्रोटो_आईडी प्रोटो_आईडी_आइटम[] तरीके के प्रोटोटाइप आइडेंटिफ़ायर की सूची. ये सभी आइडेंटिफ़ायर के आइडेंटिफ़ायर हैं इस फ़ाइल में बताए गए प्रोटोटाइप. इस सूची को इसमें क्रम से लगाया जाना चाहिए रिटर्न-टाइप (type_id इंडेक्स के हिसाब से) बड़ा ऑर्डर. इसके बाद आर्ग्युमेंट सूची के मुताबिक (लेक्सिकोग्राफ़ी ऑर्डर, अलग-अलग आर्ग्युमेंट type_id इंडेक्स के हिसाब से क्रम में लगाया गया). सूची में ये चीज़ें नहीं होनी चाहिए डुप्लीकेट एंट्री न हों.
फ़ील्ड_आईडी फ़ील्ड_id_item[] फ़ील्ड आइडेंटिफ़ायर की सूची. ये सभी फ़ील्ड के आइडेंटिफ़ायर हैं का संदर्भ देता है, चाहे फ़ाइल में परिभाषित हो या नहीं. यह सूची किस तरह की है, इस क्रम में लगाना ज़रूरी है. सूची किस टाइप की है (type_id के हिसाब से) इंडेक्स) मुख्य क्रम है. इसका मतलब है कि फ़ील्ड का नाम (string_id इंडेक्स के हिसाब से) इंटरमीडिएट क्रम है और टाइप (type_id इंडेक्स के हिसाब से) सबसे छोटा आदेश है. सूची में कोई डुप्लीकेट एंट्री नहीं होनी चाहिए.
पद्धति_आईडी तरीके_id_item[] तरीके की पहचान करने वाली सूची. ये सभी तरीकों के आइडेंटिफ़ायर हैं का संदर्भ देता है, चाहे फ़ाइल में परिभाषित हो या नहीं. यह सूची किस तरह की है, इस क्रम में लगाना ज़रूरी है. सूची किस टाइप की है (type_id के हिसाब से) इंडेक्स), मुख्य क्रम है. इसके तरीके का नाम (string_id के हिसाब से) है इंडेक्स एक इंटरमीडिएट क्रम और मेथड प्रोटोटाइप है proto_id इंडेक्स) छोटा क्रम है. सूची में ये चीज़ें नहीं होनी चाहिए डुप्लीकेट एंट्री न हों.
class_defs class_def_item[] क्लास की परिभाषाओं की सूची. क्लास का क्रम इस तरह से होना चाहिए कि क्लास के सुपर क्लास और लागू किए गए इंटरफ़ेस सूची से पहले वाली सूची बनाएं. इसके अलावा, यह समान नाम वाली क्लास की परिभाषा सूची.
कॉल_साइट_आईडी Call_site_id_item[] कॉल साइट आइडेंटिफ़ायर की सूची. ये सभी कॉल साइटों के लिए आइडेंटिफ़ायर हैं का संदर्भ देता है, चाहे फ़ाइल में परिभाषित हो या नहीं. यह सूची call_site_off के बढ़ते क्रम में रखा जाना चाहिए.
मेथड_हैंडल पद्धति_हैंडल_आइटम[] तरीके के हैंडल की सूची. इस फ़ाइल में बताए गए सभी मेथड हैंडल की सूची, तय करें कि फ़ाइल में है या नहीं. इस सूची को क्रम से नहीं लगाया गया है और इसमें यह जानकारी हो सकती है डुप्लीकेट कॉपी किए जाते हैं, जो अलग-अलग तरीके से बताए गए इंस्टेंस से जुड़े होते हैं.
डेटा यूबाइट[] डेटा एरिया जिसमें ऊपर दी गई टेबल का सारा सहायता डेटा शामिल है. अलग-अलग आइटम के लिए अलाइनमेंट की अलग-अलग शर्तें होती हैं और ज़रूरत पड़ने पर पैडिंग बाइट को हर आइटम से पहले डाला जाता है सही अलाइनमेंट.
link_data यूबाइट[] स्टैटिक रूप से लिंक की गई फ़ाइलों में इस्तेमाल किया गया डेटा. इस फ़ाइल में मौजूद डेटा का फ़ॉर्मैट यह सेक्शन इस दस्तावेज़ में बताए बिना छोड़ दिया गया है. यह सेक्शन, अनलिंक की गई फ़ाइलों और रनटाइम को लागू करने के तरीके में खाली है अपने हिसाब से उसका इस्तेमाल कर सकते हैं.

बिटफ़ील्ड, स्ट्रिंग, और कॉन्सटेंट डेफ़िनिशन

DEX_FILE_MAGIC

हेडर_आइटम में एम्बेड किया गया

कॉन्स्टेंट अरे/स्ट्रिंग DEX_FILE_MAGIC, वे बाइट जो .dex फ़ाइल की शुरुआत में दिखनी चाहिए ताकि उसे इस तरह पहचाना जा सके. वैल्यू जान-बूझकर एक नई पंक्ति ("\n" या 0x0a) शामिल है और मदद के लिए शून्य बाइट ("\0" या 0x00) के बारे में पता लगाया जा सकता है. वैल्यू भी फ़ॉर्मैट वर्शन संख्या को तीन दशमलव अंकों के तौर पर कोड में बदलता है. यह जैसे-जैसे फ़ॉर्मैट में बदलाव होगा, समय के साथ इसमें एक सामान्य बढ़ोतरी हो सकती है.

ubyte[8] DEX_FILE_MAGIC = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x39 0x00 }
                        = "dex\n039\0"

नोट: इसके 039 वर्शन के लिए समर्थन फ़ॉर्मैट को Android 9.0 रिलीज़ में जोड़ा गया था. साथ ही, नए बाइट कोड, const-method-handle और const-method-type. (इन दोनों के बारे में, बाइट कोड सेट की खास जानकारी टेबल.) Android 10 के वर्शन 039 में, DEX फ़ाइल फ़ॉर्मैट को छिपाया गया है, ताकि उसे एपीआई की ऐसी जानकारी जो सिर्फ़ बूट क्लास पाथ की DEX फ़ाइलों पर लागू होती है.

ध्यान दें: वर्शन के लिए सहायता फ़ॉर्मैट का 038 को Android 8.0 में जोड़ा गया था रिलीज़. वर्शन 038 में नए बाइट कोड जोड़े गए (invoke-polymorphic और invoke-custom) और तरीके के हैंडल के लिए डेटा.

ध्यान दें: इसके 037 वर्शन के लिए सहायता यह फ़ॉर्मैट, Android 7.0 रिलीज़ में जोड़ा गया था. 037 से पहले के वर्शन में सबसे ज़्यादा Android के वर्शन ने इस फ़ॉर्मैट के 035 वर्शन का इस्तेमाल किया है. सिर्फ़ वर्शन 035 और 037 में यह अंतर है डिफ़ॉल्ट तरीकों को जोड़ना और invoke का अडजस्टमेंट करना.

ध्यान दें: फ़ॉर्मैट के कम से कम कुछ पुराने वर्शन में का इस्तेमाल, सभी के लिए उपलब्ध सार्वजनिक सॉफ़्टवेयर रिलीज़ में किया गया है. उदाहरण के लिए, वर्शन 009 का इस्तेमाल Android प्लैटफ़ॉर्म (नवंबर–दिसंबर 2007), और Android के M5 वर्शन वाली रिलीज़ के लिए, वर्शन 013 का इस्तेमाल किया गया पर लागू होता है (फ़रवरी से मार्च 2008). कई मायनों में, इन पहले का इस फ़ॉर्मैट के वर्शन, यहां बताए गए वर्शन से काफ़ी अलग हैं दस्तावेज़.

ENDIAN_CONSTANT और REVERSE_ENDIAN_CONSTANT

हेडर_आइटम में एम्बेड किया गया

कॉन्स्टेंट ENDIAN_CONSTANT का इस्तेमाल वह फ़ाइल जिसमें वह मौजूद है. हालांकि, स्टैंडर्ड .dex फ़ॉर्मैट छोटा है. हालांकि, इसे लागू करने का विकल्प चुना जा सकता है बाइट-स्वैपिंग करने के लिए. अगर लागू करने पर हेडर, जिसका endian_tag REVERSE_ENDIAN_CONSTANT है ENDIAN_CONSTANT के बजाय, इससे यह पता चलेगा कि फ़ाइल को अपेक्षित फ़ॉर्म से बाइट-स्वैप कर दिया गया है.

uint ENDIAN_CONSTANT = 0x12345678;
uint REVERSE_ENDIAN_CONSTANT = 0x78563412;

नंबर

class_def_item औरdebug_info_item में एम्बेड किया गया

कॉन्स्टेंट NO_INDEX का इस्तेमाल यह बताने के लिए किया जाता है कि इंडेक्स की वैल्यू मौजूद नहीं है.

ध्यान दें: इस वैल्यू को 0 कहा जाता है, क्योंकि असल में यह एक मान्य इंडेक्स है.

NO_INDEX के लिए चुनी गई वैल्यू यह है जिसे uleb128p1 एन्कोडिंग में एक बाइट के रूप में दिखाया जा सकता है.

uint NO_INDEX = 0xffffffff;    // == -1 if treated as a signed int

access_flags की परिभाषाएं

class_def_item, encoded_field, encoded_method, और इनरक्लास

इन फ़्लैग के बिटफ़ील्ड का इस्तेमाल सुलभता की जानकारी देने के लिए किया जाता है. क्लास और क्लास के सदस्यों की कुल प्रॉपर्टी.

नाम वैल्यू क्लास (और InnerClass एनोटेशन) के लिए फ़ील्ड के लिए तरीकों के लिए
ACC_PUBLIC 0x1 public: हर जगह दिखाई दे रहा है public: हर जगह दिखाई दे रहा है public: हर जगह दिखाई दे रहा है
ACC_PRIVATE 0x2 * private: केवल परिभाषित क्लास के लिए दृश्यमान private: केवल परिभाषित क्लास के लिए दृश्यमान private: केवल परिभाषित क्लास के लिए दृश्यमान
ACC_PROTECTED 0x4 * protected: पैकेज और सब-क्लास को दिखता है protected: पैकेज और सब-क्लास को दिखता है protected: पैकेज और सब-क्लास को दिखता है
एसीसी_स्टैटिक 0x8 * static: इसे किसी आउटर से नहीं बनाया गया है this रेफ़रंस static: ग्लोबल से डिफ़ाइनिंग क्लास static: this तर्क नहीं लेता
ACC_FINAL 0x10 final: सब-क्लास नहीं किया जा सकता final: निर्माण के बाद नहीं बदला जा सकता final: बदला नहीं जा सकता
ACC_SYNCHRONIZED 0x20     synchronized: जुड़ा हुआ लॉक अपने-आप हासिल हो गया है इस तरीके को कॉल करें.

ध्यान दें: यह सिर्फ़ तब सेट किया जा सकता है, जब ACC_NATIVE भी सेट है.

ACC_VOLATILE 0x40   volatile: थ्रेड से जुड़ी मदद के लिए, ऐक्सेस के खास नियम सेफ़्टी  
एसीसी_ब्रिज 0x40     ब्रिज विधि, कंपाइलर से अपने-आप टाइप-सेफ़ के रूप में जुड़ जाती है पुल
ACC_TRANSIENT 0x80   transient: डिफ़ॉल्ट सीरियलाइज़ेशन से सेव न करें  
ACC_VARARGS 0x80     आखिरी तर्क को "बाकी" के तौर पर माना जाना चाहिए कंपाइलर की ओर से तर्क
ACC_NATIVE 0x100     native: नेटिव कोड में लागू किया गया
एसीसी_इंटरफ़ेस 0x200 interface: गुणा करने लायक ऐब्सट्रैक्ट क्लास    
ACC_ABSTRACT 0x400 abstract: सीधे तौर पर इंस्टैंशिएट नहीं किया जा सकता   abstract: इस क्लास ने लागू नहीं किया है
एसीसी_एसटीआरआईसीटी 0x800     strictfp: फ़्लोटिंग-पॉइंट अंकगणित के लिए सख्त नियम
एसीसी_एसYNTHETIC 0x1000 सोर्स कोड में सीधे तौर पर तय नहीं किया गया है सोर्स कोड में सीधे तौर पर तय नहीं किया गया है सोर्स कोड में सीधे तौर पर तय नहीं किया गया है
ACC_ वालों 0x2000 एनोटेशन क्लास के तौर पर एलान किया गया    
एसीसी_ईNUM 0x4000 कैलकुलेटेड टाइप के तौर पर बताया गया है गिनती के तौर पर तय की गई वैल्यू  
(इस्तेमाल नहीं किया गया) 0x8,000      
एसीसी_CONSTRUCTOR 0x10,000     कंस्ट्रक्टर विधि (क्लास या इंस्टेंस इनिशलाइज़र)
ACC_DECLARED_
SYNCHRONIZED
0x20,000     synchronized एलान किया गया.

ध्यान दें: इससे, निष्पादन (इस झंडे को प्रतिबिंब के अलावा, प्रति सेकंड).

* सिर्फ़ InnerClass एनोटेशन के लिए चालू है, और class_def_item में कभी भी चालू न हो.

UTF-8 एन्कोडिंग में बदलाव किया गया

पुराने वर्शन पर सहायता पाने की सुविधा को कम करने के लिए, .dex फ़ॉर्मैट इसके बाद, स्ट्रिंग डेटा को सही तथ्यों के साथ स्टैंडर्ड UTF-8 फ़ॉर्म में एन्कोड करता है. इसे MUTF-8 कहा जाता है. यह फ़ॉर्म, स्टैंडर्ड UTF-8 के जैसा होता है. हालांकि, इसमें ये शामिल नहीं हैं:

  • सिर्फ़ एक-, दो- और तीन-बाइट वाली एन्कोडिंग का इस्तेमाल किया जाता है.
  • U+10000 रेंज में कोड पॉइंट ... U+10ffff को सरोगेट जोड़े के तौर पर एन्कोड किया गया है. हर कोड में जिसे तीन-बाइट की कोड में बदली गई वैल्यू के तौर पर दिखाया जाता है.
  • कोड पॉइंट U+0000 को दो बाइट के रूप में एन्कोड किया गया है.
  • एक सादा नल बाइट (मान 0) अंत का संकेत देता है स्ट्रिंग की तरह ही इस्तेमाल करें.

ऊपर दिए गए पहले दो आइटम की खास जानकारी इस तरह से दी जा सकती है: MUTF-8 UTF-16 के लिए कोड में बदलने का फ़ॉर्मैट है, न कि सीधे तौर पर होने वाला यूनिकोड वर्णों के लिए एन्कोडिंग फ़ॉर्मैट.

ऊपर दिए गए अंतिम दो आइटम से एक साथ कई चीज़ें शामिल करना संभव हो जाता है स्ट्रिंग में कोड पॉइंट U+0000 और फिर भी उसमें बदलाव करता है इसे C-स्टाइल खाली-खत्म की गई स्ट्रिंग के तौर पर दिखाता है.

हालांकि, U+0000 की खास एन्कोडिंग का मतलब है कि, सामान्य UTF-8, जो मानक C फ़ंक्शन को कॉल करने का नतीजा होता है MUTF-8 स्ट्रिंग के जोड़े पर strcmp() हमेशा नहीं होता है असमान स्ट्रिंग की तुलना के नतीजे को सही तरीके से दिखाता है. अगर ऑर्डर देना (सिर्फ़ बराबरी का मामला नहीं) है, तो सबसे सीधे तौर पर MUTF-8 स्ट्रिंग की तुलना करने का तरीका यह है कि उन्हें हर वर्ण के हिसाब से डिकोड किया जाए, और डिकोड किए गए वैल्यू की तुलना करें. (हालांकि, इन्हें लागू करने का ज़्यादा बेहतर तरीका है भी संभव है.)

कृपया यूनिकोड देखें वर्ण एन्कोडिंग के बारे में ज़्यादा जानकारी के लिए, मानक सबमिट करें. MUTF-8, एन्कोडिंग के काफ़ी करीब है UTF-8 की तुलना में CESU-8 से ज़्यादा नहीं.

एन्कोडेड_वैल्यू एन्कोडिंग

एनोटेशन_element और encoded_array_item में एम्बेड किया गया

encoded_value (करीब-करीब) एन्कोड किया गया हिस्सा होता है आर्बिट्रेरी हैरारकी के हिसाब से स्ट्रक्चर्ड डेटा. एन्कोडिंग का मकसद पार्स करने में आसान और छोटी, दोनों तरह की होनी चाहिए.

नाम फ़ॉर्मैट ब्यौरा
(value_org << 5) | value_type यूबाइट बाइट जो तुरंत बाद वाली अगली फ़ाइल का टाइप दिखाता है value साथ में के साथ, हाई-ऑर्डर तीन बिट में एक वैकल्पिक आर्ग्युमेंट के साथ. value की अलग-अलग परिभाषाएं नीचे देखें. ज़्यादातर मामलों में, value_arg इसके तुरंत बाद आने वाली value बाइट में, (size - 1), जैसे कि 0 का मतलब है कि मान को एक बाइट चाहिए, और 7 का मतलब है कि इसके लिए आठ बाइट; हालांकि, इसके अपवाद हैं, जैसा कि नीचे बताया गया है.
मान यूबाइट[] बाइट, वैल्यू, वैरिएबल की लंबाई, और इंटरप्रेटेड हालांकि, अलग-अलग value_type बाइट के लिए अलग-अलग हमेशा बहुत कम. नीचे दी गई अलग-अलग वैल्यू की परिभाषाएं देखें विवरण.

वैल्यू के फ़ॉर्मैट

नाम लिखें value_type value_arg फ़ॉर्मैट value फ़ॉर्मैट ब्यौरा
वैल्यू_BYTE 0x00 (कोई नहीं; 0 होना चाहिए) यूबाइट[1] हस्ताक्षर किया गया एक बाइट वाला पूर्णांक मान
मान छोटा करें 0x02 साइज़ - 1 (0...1) यूबाइट[size] साइन किया गया दो-बाइट वाला पूर्णांक मान, साइन-विस्तारित
मान 0x03 साइज़ - 1 (0...1) यूबाइट[size] गैर-हस्ताक्षरित दो-बाइट पूर्णांक मान, शून्य-विस्तारित
मान 0x04 साइज़ - 1 (0...3) यूबाइट[size] साइन किया हुआ चार बाइट वाला पूर्णांक मान, साइन-विस्तारित
वैल्यू_लंबी 0x06 साइज़ - 1 (0...7) यूबाइट[size] साइन किया गया आठ बाइट वाला पूर्णांक मान, साइन-एक्सटेंडेड
मान 0x10 साइज़ - 1 (0...3) यूबाइट[size] चार-बाइट वाला बिट पैटर्न, शून्य से दाईं ओर बढ़ाया गया, और एक IEEE754 32-बिट फ़्लोटिंग पॉइंट वैल्यू के रूप में समझा जाता है
वैल्यू_डबल 0x11 साइज़ - 1 (0...7) यूबाइट[size] आठ-बाइट वाला बिट पैटर्न, दाईं ओर, शून्य से बढ़ाया गया, और एक IEEE754 64-बिट फ़्लोटिंग पॉइंट वैल्यू के रूप में समझा जाता है
वैल्यू_METHOD_TYPE 0x15 साइज़ - 1 (0...3) यूबाइट[size] बिना साइन वाली (शून्य से बढ़ाई गई), चार बाइट वाली पूर्णांक वैल्यू, को इंडेक्स के तौर पर proto_ids सेक्शन में और तरीके के टाइप की वैल्यू
वैल्यू_METHOD_हैंडल 0x16 साइज़ - 1 (0...3) यूबाइट[size] बिना साइन वाली (शून्य से बढ़ाई गई), चार बाइट वाली पूर्णांक वैल्यू, को इंडेक्स के तौर पर method_handles सेक्शन में और तरीके को हैंडल करने वाली वैल्यू को दिखाया जाएगा
मान 0x17 साइज़ - 1 (0...3) यूबाइट[size] बिना साइन वाली (शून्य से बढ़ाई गई), चार बाइट वाली पूर्णांक वैल्यू, को इंडेक्स के तौर पर string_ids सेक्शन में, स्ट्रिंग की वैल्यू दिख रही हो
मान का प्रकार 0x18 साइज़ - 1 (0...3) यूबाइट[size] बिना साइन वाली (शून्य से बढ़ाई गई), चार बाइट वाली पूर्णांक वैल्यू, को इंडेक्स के तौर पर जो type_ids सेक्शन में टाइप/क्लास वैल्यू
मान फ़ील्ड 0x19 साइज़ - 1 (0...3) यूबाइट[size] बिना साइन वाली (शून्य से बढ़ाई गई), चार बाइट वाली पूर्णांक वैल्यू, को इंडेक्स के तौर पर जो field_ids सेक्शन में फ़ील्ड की वैल्यू
मान का तरीका 0x1a साइज़ - 1 (0...3) यूबाइट[size] बिना साइन वाली (शून्य से बढ़ाई गई), चार बाइट वाली पूर्णांक वैल्यू, को इंडेक्स के तौर पर जो method_ids सेक्शन में तरीके की वैल्यू
मान 0x1b साइज़ - 1 (0...3) यूबाइट[size] बिना साइन वाली (शून्य से बढ़ाई गई), चार बाइट वाली पूर्णांक वैल्यू, को इंडेक्स के तौर पर field_ids सेक्शन में और वैल्यू एन्यूमरेटेड टाइप कॉन्सटेंट
मान 0x1सी (कोई नहीं; 0 होना चाहिए) एन्कोडेड_अरे वैल्यू का कलेक्शन, जो "encoded_array फ़ॉर्मैट" देखें. साइज़ value के कोड को कोड में बदलने के तरीके में इंप्लिसिट है.
मान 0x1 दिन (कोई नहीं; 0 होना चाहिए) एन्कोडेड_एनोटेशन आपके बताए गए फ़ॉर्मैट में "encoded_annotation फ़ॉर्मैट" देखें. साइज़ value के कोड को कोड में बदलने के तरीके में इंप्लिसिट है.
वैल्यू_शून्य 0x1e (कोई नहीं; 0 होना चाहिए) (कोई नहीं) null रेफ़रंस वैल्यू
वैल्यू_बूलियन 0x1एफ़ बूलियन (0...1) (कोई नहीं) वन-बिट वैल्यू; false के लिए 0 और true विकेट खोकर 1 रन बनाए. बिट को इसमें दिखाया गया है value_arg.

एन्कोडेड_अरे फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
साइज़ Uleb128 अरे में एलिमेंट की संख्या
मान कोड में बदली गई वैल्यू [size] size encoded_value बाइट की सीरीज़ इस सेक्शन के हिसाब से तय किए गए फ़ॉर्मैट में क्रमों को जोड़ा जा सकता है क्रम से.

एन्कोडेड_annotation फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
type_idx Uleb128 एनोटेशन का टाइप. यह एक क्लास होना चाहिए (अरे या प्रिमिटिव नहीं) टाइप करें.
साइज़ Uleb128 इस जानकारी में नाम-वैल्यू मैपिंग की संख्या
एलिमेंट एनोटेशन_एलिमेंट[साइज़] एनोटेशन के एलिमेंट, जिन्हें सीधे इन-लाइन दिखाया गया है (न कि ऑफ़सेट). एलिमेंट को इस क्रम में लगाना चाहिए string_id इंडेक्स.

एनोटेशन_एलिमेंट फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
name_idx Uleb128 एलिमेंट का नाम, जिसे string_ids सेक्शन. स्ट्रिंग सदस्य का नाम के लिए सिंटैक्स, ऊपर बताया गया है.
मान कोड में बदली गई वैल्यू एलिमेंट का मान

स्ट्रिंग सिंटैक्स

.dex फ़ाइल में कई तरह के आइटम होते हैं, जो आखिरकार किसी स्ट्रिंग को रेफ़र करता है. बीएनएफ़ शैली की ये परिभाषाएं इन स्ट्रिंग के लिए स्वीकार किया जाने वाला सिंटैक्स बताएं.

सिंपलनाम

SimpleName दूसरे नामों के सिंटैक्स का आधार होता है चीज़ें. .dex फ़ॉर्मैट में अक्षांश को काफ़ी हद तक यहां (सबसे आम स्रोत भाषाओं से बहुत ज़्यादा) देखें. आसान शब्दों में कहें, तो नाम में अक्षर या अंक या लो ASCII अक्षर या अंक शामिल होते हैं, चुनिंदा लो-ASCII सिंबल और ज़्यादातर ऐसे नॉन-ASCII कोड पॉइंट जो कंट्रोल, स्पेस या खास वर्णों का इस्तेमाल कर सकते हैं. 040 वर्शन से शुरू फ़ॉर्मैट में स्पेस के वर्णों (यूनिकोड Zs) की भी अनुमति है श्रेणी). ध्यान दें कि सरोगेट कोड पॉइंट (U+d800 ... U+dfff की रेंज में) नहीं है को मान्य नाम वर्ण माना जाता है, लेकिन यूनिकोड पूरक वर्ण हैं मान्य होते हैं (जिन्हें आखिरी शब्द के ज़रिए दिखाया जाता है) SimpleNameChar के लिए नियम का विकल्प), और उन्हें ऐसा होना चाहिए को एक फ़ाइल में MUTF-8 में सरोगेट कोड पॉइंट के जोड़े के रूप में दिखाया जाता है एन्कोडिंग

SimpleName
SimpleNameChar (SimpleNameChar)*
SimpleNameChar
'A' ... 'Z'
| 'a' ... 'z'
| '0' ... '9'
| ' ' DEX वर्शन 040 के बाद से
| '$'
| '-'
| '_'
| U+00a0 DEX वर्शन 040 के बाद से
| U+00a1 ... U+1fff
| U+2000 ... U+200a DEX वर्शन 040 के बाद से
| U+2010 ... U+2027
| U+202f DEX वर्शन 040 के बाद से
| U+2030 ... U+d7ff
| U+e000 ... U+ffef
| U+10000 ... U+10ffff

सदस्य का नाम

फ़ील्ड_id_item औरmethod_id_item से इस्तेमाल की जाती है

सदस्य का नाम, क्लास के सदस्य का नाम होता है, जो सदस्य फ़ील्ड, मेथड, और इनर क्लास शामिल हैं.

सदस्य का नाम
सरलनाम
| '<' SimpleName '>'

फ़ुलक्लासनाम

FullClassName एक पूरी तरह क्वालिफ़ाइड क्लास का नाम होता है, जिसमें पैकेज की जानकारी देने वाली वैकल्पिक सुविधा, इसके बाद एक ज़रूरी नाम.

FullClassName
वैकल्पिकपैकेज प्रीफ़िक्स SimpleName
OptionalPackagePrefix
(SimpleName '/')*

टाइपडिस्क्रिप्टर

इसका इस्तेमाल type_id_item में किया जाता है

TypeDescriptor से किसी भी टाइप की जानकारी मिलती है. इसमें ये शामिल हैं प्रिमिटिव, क्लास, अरे, और void. इनके लिए नीचे देखें अलग-अलग वर्शन का मतलब समझने के लिए.

TypeDescriptor
'V'
| FieldTypeDescriptor
FieldTypeDescriptor
NonArrayFieldTypeDescriptor
| ('[' * 1...255) NonArrayFieldTypeDescriptor
NonArrayFieldTypeDescriptor
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L' FullClassName ';'

ShortyDescriptor

इसका इस्तेमाल proto_id_item से किया जाता है

ShortyDescriptor, किसी तरीके का छोटा रूप होता है प्रोटोटाइप, जिसमें रिटर्न और पैरामीटर टाइप शामिल हैं, इसके अलावा कई तरह के रेफ़रंस (क्लास या अरे) के बीच कोई अंतर नहीं है. इसके बजाय, सभी तरह के रेफ़रंस, एक 'L' वर्ण से दिखाए जाते हैं.

ShortyDescriptor
ShortyReturnType (ShortyFieldType)*
ShortyReturnType
'V'
| ShortyFieldType
ShortyFieldType
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L'

TypeDescriptor सिमेंटिक्स

TypeDescriptor के हर वैरिएंट का मतलब एक ही होता है.

वाक्य-विन्यास मतलब
V void; सिर्फ़ रिटर्न टाइप के लिए मान्य है
Z boolean
B byte
S short
C char
I int
J long
F float
D double
पूरी तरह से/क्वालिफ़ाइड/नाम; क्लास fully.qualified.Name
[जानकारी देने वाला descriptor का अरे, इनके लिए बार-बार इस्तेमाल किया जा सकता है सरणियों-की श्रेणी, हालांकि 255 से ज़्यादा होना अमान्य है डाइमेंशन.

आइटम और उनसे जुड़े स्ट्रक्चर

इस सेक्शन में, टॉप-लेवल के हर उस आइटम की परिभाषाएं शामिल हैं .dex फ़ाइल में दिख सकता है.

हेडर_आइटम

हेडर सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
जादू यूबाइट[8] = DEX_FILE_MAGIC जादुई मूल्य. ऊपर "DEX_FILE_MAGIC" के तहत चर्चा देखें देखें.
चेकसम यूइंट बाकी फ़ाइल का adler32 चेकसम (बाकी सब कुछ magic और यह फ़ील्ड); फ़ाइल के खराब होने का पता लगाने के लिए इस्तेमाल किया जाता है
हस्ताक्षर यूबाइट[20] बाकी फ़ाइल (बाकी सब कुछ) का SHA-1 हस्ताक्षर (हैश) magic, checksum, और यह फ़ील्ड); इस्तेमाल किया गया खास तौर पर फ़ाइलों को पहचानने के लिए
file_size यूइंट हेडर के साथ पूरी फ़ाइल का बाइट में साइज़
हेडर का साइज़ uint = 0x70 हेडर का साइज़ (यह पूरा सेक्शन), बाइट में. इसकी मदद से, ऐसा किया जा सकता है सीमित संख्या में ही, बैकवर्ड और फ़ॉरवर्ड करने की सुविधा के साथ काम करता है अमान्य फ़ॉर्मैट को अमान्य करने में मदद मिलती है.
endian_tag uint = ENDIAN_CONSTANT एंडियननेस टैग. ऊपर "ENDIAN_CONSTANT के तहत चर्चा देखें और REVERSE_ENDIAN_CONSTANT" देखें.
link_size (लिंक_का_साइज़) यूइंट लिंक सेक्शन का साइज़ या अगर यह फ़ाइल नहीं है, तो 0 स्टैटिक तरीके से लिंक किया गया
link_off यूइंट फ़ाइल की शुरुआत से लिंक सेक्शन तक या अगर link_size == 0 है, तो 0. ऑफ़सेट, अगर शून्य नहीं है, link_data सेक्शन में ऑफ़सेट के तौर पर होना चाहिए. कॉन्टेंट बनाने जिस डेटा फ़ॉर्मैट की ओर इशारा किया गया है उसके फ़ॉर्मैट की जानकारी इस दस्तावेज़ में नहीं दी गई है; यह हेडर फ़ील्ड (और पिछले) को हुक के रूप में छोड़ दिया जाता है, ताकि रनटाइम को लागू करना.
मैप_ऑफ़ यूइंट ऑफ़सेट के हिसाब से फ़ाइल की शुरुआत से मैप आइटम तक. ऑफ़सेट, जिसे शून्य के अलावा, data सेक्शन में ऑफ़सेट के तौर पर होना चाहिए, और डेटा "map_list" में बताए गए फ़ॉर्मैट में होना चाहिए देखें.
स्ट्रिंग_आईडी_साइज़ यूइंट स्ट्रिंग आइडेंटिफ़ायर की सूची में स्ट्रिंग की संख्या
स्ट्रिंग_ids_off यूइंट फ़ाइल की शुरुआत से स्ट्रिंग आइडेंटिफ़ायर सूची तक 0 अगर string_ids_size == 0 (मान्य तौर पर एक अजीब किनारे वाला केस). ऑफ़सेट, अगर शून्य नहीं है, string_ids सेक्शन की शुरुआत में होना चाहिए.
type_ids_size यूइंट टाइप आइडेंटिफ़ायर की सूची में एलिमेंट की संख्या, ज़्यादा से ज़्यादा 65535 हो सकती है
type_ids_off यूइंट फ़ाइल की शुरुआत से टाइप आइडेंटिफ़ायर की सूची तक ले जाया जा सकता है या 0 अगर type_ids_size == 0 (मान्य तौर पर एक अजीब किनारे वाला केस). ऑफ़सेट, अगर शून्य नहीं है, type_ids की शुरुआत में होना चाहिए सेक्शन में जाएं.
proto_ids_size यूइंट प्रोटोटाइप आइडेंटिफ़ायर की सूची में एलिमेंट की संख्या. ज़्यादा से ज़्यादा 65535
proto_ids_off यूइंट फ़ाइल की शुरुआत से लेकर प्रोटोटाइप आइडेंटिफ़ायर की सूची तक, या 0 अगर proto_ids_size == 0 (मान्य तौर पर एक अजीब किनारे वाला केस). ऑफ़सेट, अगर शून्य नहीं है, proto_ids की शुरुआत में होना चाहिए सेक्शन में जाएं.
फ़ील्ड_id_size यूइंट फ़ील्ड आइडेंटिफ़ायर की सूची में एलिमेंट की संख्या
फ़ील्ड_ids_off यूइंट ऑफ़सेट करके फ़ील्ड आइडेंटिफ़ायर की सूची में ले जाया जा सकता है या अगर field_ids_size == 0 है, तो 0. ऑफ़सेट, अगर शून्य के अलावा, field_ids के शुरू में होना चाहिए सेक्शन में जाएं.
तरीके_ids_size यूइंट मेथड आइडेंटिफ़ायर की सूची में एलिमेंट की संख्या
पद्धति_ids_off यूइंट फ़ाइल की शुरुआत से लेकर तरीके की पहचान करने वालों की सूची तक या अगर method_ids_size == 0 है, तो 0. ऑफ़सेट, अगर शून्य के अलावा, method_ids के शुरू में होना चाहिए सेक्शन में जाएं.
class_defs_size यूइंट क्लास की परिभाषाओं की सूची में एलिमेंट की संख्या
class_defs_off यूइंट ऑफ़सेट के हिसाब से क्लास की परिभाषा की सूची तक ले सकते हैं या 0 अगर class_defs_size == 0 (मान्य तौर पर एक अजीब किनारे वाला केस). ऑफ़सेट, अगर शून्य नहीं है, class_defs सेक्शन की शुरुआत में होना चाहिए.
data_size (डेटा_साइज़) यूइंट साइज़ data सेक्शन बाइट में. सम होना चाहिए का साइज़ ऑफ़(uint) है.
data_off यूइंट ऑफ़सेट के हिसाब से फ़ाइल की शुरुआत से लेकर data सेक्शन.

मैप की सूची

डेटा सेक्शन में दिखता है

हेडर_आइटम से रेफ़रंस लिया गया

अलाइनमेंट: 4 बाइट

यह फ़ाइल की पूरी सामग्री की एक सूची है, एक क्रम में. यह में header_item के संबंध में कुछ अतिरिक्तता है लेकिन इसे एक ऐसे तरीके के तौर पर इस्तेमाल किया जा सकता है जिसमें पूरी प्रोसेस को दोहराया जा सके फ़ाइल से लिए जाते हैं. मैप में यह टाइप ज़्यादा से ज़्यादा एक बार दिखना चाहिए, लेकिन ऐसा कोई नहीं होता इस बात पर नहीं कि किस तरह के ऑर्डर में शेष प्रारूप द्वारा लगाए गए प्रतिबंध (उदा., एक सबसे पहले header सेक्शन दिखना चाहिए. इसके बाद, string_ids सेक्शन वगैरह). इसके अलावा, मैप में शुरुआती ऑफ़सेट के हिसाब से क्रम में होना चाहिए और ओवरलैप नहीं होना चाहिए.

नाम फ़ॉर्मैट ब्यौरा
साइज़ यूइंट एंट्री में, सूची का साइज़
सूची मैप आइटम[साइज़] सूची के एलिमेंट

Maps_item का फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
टाइप यूशॉर्ट आइटम किस तरह के हैं; नीचे दी गई टेबल देखें
unused यूशॉर्ट (इस्तेमाल नहीं किया गया)
साइज़ यूइंट बताए गए ऑफ़सेट पर मिलने वाले आइटम की संख्या की संख्या
ऑफ़सेट यूइंट फ़ाइल की शुरुआत से लेकर विचाराधीन आइटम तक ऑफ़सेट

कोड टाइप करें

आइटम का प्रकार लगातार वैल्यू आइटम का साइज़ बाइट में
हेडर_आइटम TYPE_हेडर_ITEM 0x0000 0x70
स्ट्रिंग_आईडी_आइटम TYPE_STRING_ID_ITEM 0x0001 0x04
type_id_item TYPE_TYPE_ID_ITEM 0x0002 0x04
Proto_id_item TYPE_PROTO_ID_ITEM 0x0003 0x0सी
फ़ील्ड_id_item TYPE_FIELD_ID_ITEM 0x0004 0x08
[method_id_item] TYPE_METHOD_ID_ITEM 0x0005 0x08
class_def_item TYPE_CLASS_DEF_ITEM 0x0006 0x20
call_site_id_item TYPE_CALL_SITE_ID_ITEM 0x0007 0x04
मेथड_हैंडल_आइटम TYPE_METHOD_HANDLE_ITEM 0x0008 0x08
मैप की सूची TYPE_MAP_LIST 0x1000 4 + (item.size * 12)
type_list TYPE_TYPE_LIST 0x1001 4 + (item.size * 2)
एनोटेशन_set_ref_list TYPE_हुड_SET_REF_LIST 0x1002 4 + (item.size * 4)
एनोटेशन_सेट_आइटम TYPE_1_SET_ITEM 0x1003 4 + (item.size * 4)
क्लास_डेटा_आइटम TYPE_CLASS_DATA_ITEM 0x2000 इंप्लिसिट; पार्स होना चाहिए
कोड आइटम TYPE_CODE_ITEM 0x2001 इंप्लिसिट; पार्स होना चाहिए
स्ट्रिंग_डेटा_आइटम TYPE_STRING_DATA_ITEM 0x2002 इंप्लिसिट; पार्स होना चाहिए
डीबग_info_item TYPE_DEBUG_INFO_ITEM 0x2003 इंप्लिसिट; पार्स होना चाहिए
एनोटेशन_आइटम TYPE_1_ITEM 0x2004 इंप्लिसिट; पार्स होना चाहिए
एन्कोडेड_array_item TYPE_ENCODED_ARRAY_ITEM 0x2005 इंप्लिसिट; पार्स होना चाहिए
एनोटेशन_डायरेक्ट्री_आइटम TYPE_ वालों 0x2006 इंप्लिसिट; पार्स होना चाहिए
छिपा हुआapi_class_data_item TYPE_HIDDENAPI_CLASS_DATA_ITEM 0xF000 इंप्लिसिट; पार्स होना चाहिए

स्ट्रिंग_आईडी_आइटम

स्ट्रिंग_id सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
स्ट्रिंग_डेटा_ऑफ़ यूइंट ऑफ़सेट के हिसाब से फ़ाइल की शुरुआत से लेकर स्ट्रिंग डेटा तक आइटम. ऑफ़सेट किसी जगह पर होना चाहिए data सेक्शन में हो और डेटा "string_data_item" के फ़ॉर्मैट में देखें. ऑफ़सेट के लिए कोई अलाइनमेंट ज़रूरी नहीं है.

स्ट्रिंग_डेटा_आइटम

डेटा सेक्शन में दिखता है

संरेखण: कोई भी (बाइट-अलाइन)

नाम फ़ॉर्मैट ब्यौरा
utf16_size Uleb128 UTF-16 कोड यूनिट में इस स्ट्रिंग का आकार (जो "string है लंबाई" कई सिस्टम में). यानी, यह डिकोड की गई लंबाई है स्ट्रिंग. (एन्कोडेड लंबाई 0 बाइट है.)
डेटा यूबाइट[] MUTF-8 कोड यूनिट की सीरीज़ (जैसे कि ऑक्टेट, a.k.a. बाइट) इसके बाद, 0 की वैल्यू वाला एक बाइट होना चाहिए. यहां जाएं: "MUTF-8 (UTF-8 में बदलाव किया गया) एन्कोडिंग" ऊपर दी गई जानकारी और चर्चा करें.

ध्यान दें: ऐसी स्ट्रिंग का इस्तेमाल किया जा सकता है जिसमें (कोड में बदला गया) UTF-16 सरोगेट कोड यूनिट (यानी, U+d800 ... U+dfff) सामान्य मामले में अलग-अलग या अमान्य यूनिकोड को UTF-16 में एन्कोड करना. जवाब बेहतर तरीके से काम करता है. स्ट्रिंग, अगर सही लगे, तो अमान्य एन्कोडिंग को अस्वीकार कर दिया जाता है.

type_id_item

type_ids सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
डिस्क्रिप्टर_आईडीएक्स यूइंट डिस्क्रिप्टर के लिए string_ids सूची में इंडेक्स करें स्ट्रिंग डालें. स्ट्रिंग TypeDescriptor, ऊपर बताया गया है.

Proto_id_item

proto_ids सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
shorty_idx यूइंट कम अवधि के वीडियो के लिए, string_ids सूची में इंडेक्स करें इस प्रोटोटाइप की डिस्क्रिप्टर स्ट्रिंग. स्ट्रिंग ShortyDescriptor के लिए सिंटैक्स, ऊपर बताया गया है, और यह इसके मुताबिक होना चाहिए इस आइटम के रिटर्न टाइप और पैरामीटर के लिए.
Return_type_idx यूइंट रिटर्न टाइप के लिए type_ids सूची में इंडेक्स करें इस प्रोटोटाइप का
पैरामीटर_बंद यूइंट फ़ाइल की शुरुआत से लेकर पैरामीटर टाइप की सूची तक ऑफ़सेट या 0 अगर इस प्रोटोटाइप में कोई पैरामीटर का इस्तेमाल करें. अगर यह ऑफ़सेट शून्य नहीं है, तो data सेक्शन में दिखाया गया है और उसमें मौजूद डेटा नीचे "type_list" के ज़रिए तय किया गया फ़ॉर्मैट है. इसके अलावा, यहां सूची में टाइप void का कोई रेफ़रंस नहीं होना चाहिए.

फ़ील्ड_id_item

फ़ील्ड_id सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
class_idx यूशॉर्ट इस फ़ंक्शन के डिफ़ाइनर के लिए, type_ids सूची में इंडेक्स करें फ़ील्ड में डालें. यह एक क्लास टाइप होना चाहिए, कोई अरे या प्रिमिटिव टाइप नहीं.
type_idx यूशॉर्ट इस प्रकार के प्रकार के लिए type_ids सूची में इंडेक्स करें यह फ़ील्ड
name_idx यूइंट इस नाम के लिए string_ids सूची में इंडेक्स करें फ़ील्ड में डालें. स्ट्रिंग सदस्य का नाम के सिंटैक्स के मुताबिक होनी चाहिए, ऊपर परिभाषित किया गया है.

[method_id_item]

मेथड_आईडी सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
class_idx यूशॉर्ट इस फ़ंक्शन के डिफ़ाइनर के लिए, type_ids सूची में इंडेक्स करें तरीका. यह कोई क्लास या अरे टाइप होना चाहिए, न कि कोई प्रिमिटिव टाइप.
Proto_idx यूशॉर्ट के प्रोटोटाइप के लिए proto_ids सूची में इंडेक्स करें यह तरीका
name_idx यूइंट इस नाम के लिए string_ids सूची में इंडेक्स करें तरीका. स्ट्रिंग सदस्य का नाम के सिंटैक्स के मुताबिक होनी चाहिए, ऊपर परिभाषित किया गया है.

class_def_item

class_defs सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
class_idx यूइंट इस क्लास के लिए type_ids सूची में इंडेक्स करें. यह एक क्लास टाइप होना चाहिए, कोई अरे या प्रिमिटिव टाइप नहीं.
access_flags यूइंट क्लास के लिए ऐक्सेस फ़्लैग (public, final, वगैरह). "access_flags परिभाषाएं" देखें देखें.
सुपरक्लास_आईडीएक्स यूइंट को सुपर क्लास के लिए type_ids सूची में इंडेक्स करें या अगर इस क्लास में कोई नहीं है, तो स्थिर मान NO_INDEX सुपर क्लास (उदाहरण के लिए, यह Object जैसी एक रूट क्लास है). अगर यह मौजूद है, तो यह एक क्लास टाइप होना चाहिए, न कि कोई अरे या प्रिमिटिव टाइप.
इंटरफ़ेस_ऑफ़ यूइंट फ़ाइल की शुरुआत से लेकर इंटरफ़ेस की सूची तक या अगर कोई न हो, तो 0. यह ऑफ़सेट data सेक्शन में होना चाहिए और डेटा द्वारा निर्दिष्ट प्रारूप में होना चाहिए ''type_list'' देखें. सूची के हर एलिमेंट में एक क्लास टाइप होना चाहिए (कोई अरे या प्रिमिटिव टाइप नहीं) और कोई डुप्लीकेट नहीं होना चाहिए.
source_file_idx यूइंट string_ids सूची में इस नाम के लिए इंडेक्स करें ऐसी फ़ाइल जिसमें इस क्लास के (कम से कम ज़्यादातर हिस्से) का ओरिजनल सोर्स मौजूद है, या इसकी कमी को दिखाने के लिए, खास वैल्यू NO_INDEX यह जानकारी. किसी भी दिए गए तरीके का debug_info_item इस सोर्स फ़ाइल को बदल सकता है, लेकिन उम्मीद है कि ज़्यादातर क्लास सिर्फ़ एक सोर्स फ़ाइल से आएगा.
एनोटेशन_बंद यूइंट ऑफ़सेट के हिसाब से फ़ाइल की शुरुआत से एनोटेशन स्ट्रक्चर तक इस क्लास के लिए या अगर कोई एनोटेशन नहीं है, तो 0 यह कक्षा. अगर यह ऑफ़सेट शून्य नहीं है, तो data सेक्शन है और उसमें मौजूद डेटा इसमें होना चाहिए "annotations_directory_item" द्वारा बताया गया प्रारूप नीचे, उन सभी आइटम के साथ होना चाहिए जो इस क्लास को डिफ़ाइनर के तौर पर रेफ़र करते हैं.
class_data_off यूइंट ऑफ़सेट के हिसाब से फ़ाइल की शुरुआत से संबंधित इस आइटम के लिए क्लास का डेटा या अगर कोई क्लास नहीं है, तो 0 इस क्लास का डेटा. (उदाहरण के लिए, ऐसा हो सकता है अगर यह क्लास एक मार्कर इंटरफ़ेस है.) अगर ऑफ़सेट शून्य नहीं है, तो data सेक्शन में दिखाया गया है और उसमें मौजूद डेटा "class_data_item" के फ़ॉर्मैट में नीचे, सभी के साथ वे आइटम जो इस क्लास को डिफ़ाइनर के तौर पर रेफ़र करते हैं.
स्थिर_मान_ऑफ़ यूइंट ऑफ़सेट के हिसाब से, फ़ाइल की शुरुआत से लेकर नाम के शुरुआती अक्षर की सूची तक static फ़ील्ड के लिए मान या अगर हो, तो 0 कोई नहीं है (और सभी static फ़ील्ड को इनसे शुरू किया जाना है 0 या null). यह ऑफ़सेट इसमें होना चाहिए: data सेक्शन में दिखाया जाएगा और उसमें मौजूद डेटा "encoded_array_item" द्वारा दर्ज प्रारूप देखें. साइज़ कैटगरी, static की संख्या से ज़्यादा नहीं होनी चाहिए फ़ील्ड का एलान कर सकता है और एलिमेंट static फ़ील्ड उसी क्रम में हैं जैसा इसमें बताया गया है संबंधित field_list. हर कलेक्शन का टाइप एलिमेंट को उससे संबंधित फ़ील्ड के बताए गए टाइप से मेल खाना चाहिए. अगर अरे में एलिमेंट की संख्या, पहले से मौजूद एलिमेंट की संख्या से कम है, तो static फ़ील्ड का इस्तेमाल करने के बाद, बचे हुए फ़ील्ड शुरू किए जाते हैं टाइप करने के लिए सही 0 या null होनी चाहिए.

call_site_id_item

कॉल_site_ids सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
कॉल_साइट_ऑफ़ यूइंट ऑफ़सेट के हिसाब से सेट करें. ऑफ़सेट को यह करना चाहिए डेटा सेक्शन में होना चाहिए और डेटा "call_site_item" देखें.

कॉल_साइट_आइटम

डेटा सेक्शन में दिखता है

अलाइनमेंट: कोई भी (बाइट अलाइन की गई)

Call_site_item एक encoded_array_item है, जिसके एलिमेंट आर्ग्युमेंट के मुताबिक हैं बूटस्ट्रैप लिंकर मेथड को दिया जाता है. पहले तीन तर्क ये हैं:

  1. बूटस्ट्रैप लिंकर मेथड (VALUE_METHOD_HANDLE) को दिखाने वाला मेथड हैंडल.
  2. वह तरीका नाम जिससे बूटस्ट्रैप लिंकर को रिज़ॉल्व किया जाना चाहिए (VALUE_STRING).
  3. हल किए जाने वाले तरीके के नाम से जुड़ा तरीका (VALUE_METHOD_TYPE).

कोई भी अतिरिक्त आर्ग्युमेंट, बूटस्ट्रैप लिंकर तरीके में पास की जाने वाली कॉन्सटैंट वैल्यू होते हैं. ये तर्क हैं जिसे बिना किसी तरह के कन्वर्ज़न के क्रम में पास किया गया हो.

बूटस्ट्रैप लिंकर वाले तरीके को दिखाने वाले तरीके के हैंडल में, रिटर्न टाइप java.lang.invoke.CallSite होना चाहिए. पहले तीन पैरामीटर टाइप हैं:

  1. java.lang.invoke.Lookup
  2. java.lang.String
  3. java.lang.invoke.MethodType

किसी भी अतिरिक्त आर्ग्युमेंट के पैरामीटर टाइप, उनकी कॉन्सटैंट वैल्यू से तय किए जाते हैं.

मेथड_हैंडल_आइटम

इनकी जानकारी,method_handles सेक्शन में दिखती है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
मेथड_हैंडल_टाइप यूशॉर्ट मेथड हैंडल का टाइप; नीचे दी गई टेबल देखें
unused यूशॉर्ट (इस्तेमाल नहीं किया गया)
फ़ील्ड_या_तरीका_id यूशॉर्ट फ़ील्ड या मेथड का आईडी, इस बात पर निर्भर करता है कि तरीका हैंडल टाइप, ऐक्सेसर है या मेथड इनवॉइसर
unused यूशॉर्ट (इस्तेमाल नहीं किया गया)

तरीके को हैंडल के टाइप से जुड़े कोड

लगातार वैल्यू ब्यौरा
METHOD_HANDLE_TYPE_स्टैटिक_पीयूटी 0x00 मेथड हैंडल, स्टैटिक फ़ील्ड सेटर (ऐक्सेसर) है
के तरीके 0x01 मेथड हैंडल, स्टैटिक फ़ील्ड गैटर (ऐक्सेसर) है
METHOD_HANDLE_TYPE_INSTANCE_PUT 0x02 मेथड हैंडल, इंस्टेंस फ़ील्ड सेटर (ऐक्सेसर) है
METHOD_HANDLE_TYPE_INSTANCE_GET 0x03 मेथड हैंडल, इंस्टेंस फ़ील्ड गैटर (ऐक्सेसर) है
METHOD_HANDLE_TYPE_INVOKE_स्टैटिक 0x04 मेथड हैंडल, स्टैटिक मेथड शुरू करने वाला है
METHOD_HANDLE_TYPE_INVOKE_INSTANCE 0x05 मेथड हैंडल, इंस्टेंस मेथड शुरू करने वाला है
METHOD_HANDLE_TYPE_INVOKE_CONSTRUCTOR 0x06 मेथड हैंडल, कंस्ट्रक्टर का मेथड शुरू करने वाला है
METHOD_HANDLE_TYPE_INVOKE_DIRECT 0x07 मेथड हैंडल, डायरेक्ट मेथड शुरू करने वाला है
तरीके_हैंडल_टाइप_INVOKE_इंटरफ़ेस 0x08 मेथड हैंडल, एक इंटरफ़ेस मेथड शुरू करने वाला टूल है

क्लास_डेटा_आइटम

class_def_item से रेफ़र किया गया है

डेटा सेक्शन में दिखता है

संरेखण: कोई भी (बाइट-अलाइन)

नाम फ़ॉर्मैट ब्यौरा
स्टैटिक_फ़ील्ड_साइज़ Uleb128 इस आइटम में तय किए गए स्टैटिक फ़ील्ड की संख्या
इंस्टेंस_फ़ील्ड_साइज़ Uleb128 इस आइटम में तय किए गए इंस्टेंस फ़ील्ड की संख्या
Direct_methods_size Uleb128 इस आइटम में बताए गए डायरेक्ट तरीकों की संख्या
Virtual_methods_size Uleb128 इस आइटम में बताए गए वर्चुअल तरीकों की संख्या
स्टैटिक फ़ील्ड कोड में बदला गया फ़ील्ड[static_fields_size] परिभाषित स्थिर फ़ील्ड, जिनके क्रम में दिखाया गया है कोड में बदले गए एलिमेंट. फ़ील्ड इसके हिसाब से क्रम में लगाए जाने चाहिए field_idx बढ़ते क्रम में.
इंस्टेंस_फ़ील्ड कोड में बदला गया फ़ील्ड[instance_fields_size] तय किए गए इंस्टेंस फ़ील्ड, जिन्हें इसके क्रम के तौर पर दिखाया गया है कोड में बदले गए एलिमेंट. फ़ील्ड इसके हिसाब से क्रम में लगाए जाने चाहिए field_idx बढ़ते क्रम में.
Direct_methods कोड में बदलने का तरीका[direct_methods_size] तय किया गया डायरेक्ट (static, private, या कंस्ट्रक्टर) मेथड के हिसाब से दिखाया जाएगा, कोड में बदले गए एलिमेंट. तरीकों को इसके हिसाब से क्रम में लगाना चाहिए method_idx बढ़ते क्रम में.
वर्चुअल_तरीके कोड में बदला गया तरीका[virtual_methods_size] तय किया गया वर्चुअल (static, private में से कोई नहीं, या कंस्ट्रक्टर) मेथड के हिसाब से दिखाया जाएगा, कोड में बदले गए एलिमेंट. इस सूची में इनहेरिट की गई जानकारी शामिल नहीं होनी चाहिए तरीकों का इस्तेमाल तब तक नहीं किया जा सकता, जब तक कि उन्हें इस आइटम में मौजूद क्लास से न बदला जाए. कॉन्टेंट बनाने तरीकों को method_idx के हिसाब से बढ़ते क्रम में लगाएं. वर्चुअल तरीके का method_idx एक समान नहीं होना चाहिए का इस्तेमाल किया जा सकता है.

ध्यान दें: सभी एलिमेंट' field_id और method_id इंस्टेंस को एक ही परिभाषित करने वाली क्लास का हवाला देना चाहिए.

एन्कोडेड_फ़ील्ड फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
फ़ील्ड_idx_diff Uleb128 इसकी पहचान के लिए field_ids सूची में इंडेक्स करें फ़ील्ड (नाम और डिस्क्रिप्टर शामिल है) को अंतर के तौर पर दिखाया जाता है सूची में पिछले एलिमेंट के इंडेक्स से. इसका इंडेक्स सूची का पहला एलिमेंट सीधे तौर पर दिखाया जाता है.
access_flags Uleb128 फ़ील्ड के लिए ऐक्सेस फ़्लैग (public, final, वगैरह). "access_flags परिभाषाएं" देखें देखें.

encoded_method फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
तरीके_idx_diff Uleb128 इसकी पहचान के लिए method_ids सूची में इंडेक्स करें तरीका (नाम और डिस्क्रिप्टर शामिल है) को अंतर के तौर पर दिखाया जाता है सूची में पिछले एलिमेंट के इंडेक्स से. इसका इंडेक्स सूची का पहला एलिमेंट सीधे तौर पर दिखाया जाता है.
access_flags Uleb128 इस तरीके के लिए ऐक्सेस फ़्लैग (public, final, वगैरह). "access_flags परिभाषाएं" देखें देखें.
code_off Uleb128 ऑफ़सेट के हिसाब से फ़ाइल की शुरुआत से लेकर इसके कोड स्ट्रक्चर तक तरीका या अगर यह तरीका abstract है, तो 0 या native. ऑफ़सेट को data सेक्शन. डेटा का फ़ॉर्मैट इसके हिसाब से तय किया जाता है "code_item" देखें.

type_list

class_def_item और proto_id_item से रेफ़र किया गया है

डेटा सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
साइज़ यूइंट एंट्री में, सूची का साइज़
सूची type_item[size] सूची के एलिमेंट

type_item का फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
type_idx यूशॉर्ट type_ids सूची में इंडेक्स करें

कोड आइटम

एन्कोडेड_method से रेफ़रंस लिया गया

डेटा सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
रजिस्टर_साइज़ यूशॉर्ट इस कोड के ज़रिए इस्तेमाल किए गए रजिस्टर की संख्या
ins_size यूशॉर्ट इस तरीके के लिए आने वाले आर्ग्युमेंट के शब्दों की संख्या कोड इसके लिए है
outs_size यूशॉर्ट इसके लिए ज़रूरी आउटगोइंग आर्ग्युमेंट स्पेस के शब्दों की संख्या तरीका लागू करने के लिए कोड
ट्राईज़_साइज़ यूशॉर्ट इस इंस्टेंस के लिए try_item की संख्या. अगर संख्या शून्य नहीं है, तो ये tries कलेक्शन के तौर पर दिखते हैं, इस मामले में insns.
डीबग_info_off यूइंट फ़ाइल की शुरुआत से डीबग की जानकारी तक (लाइन नंबर + इस कोड के लिए लोकल वैरिएबल की जानकारी) क्रम या 0 अगर कोई जानकारी नहीं होती. ऑफ़सेट के हिसाब से, अगर यह शून्य नहीं है, तो data सेक्शन में किसी जगह पर भेज दिया जाएगा. फ़ॉर्मैट डेटा "debug_info_item" से तय किया जाता है देखें.
insns_size यूइंट निर्देशों की सूची का साइज़, 16-बिट कोड यूनिट में
आईएनएसएन यूshort[insns_size] बाइट कोड की वास्तविक श्रेणी. insns में कोड का फ़ॉर्मैट अरे, कंपैनियन दस्तावेज़ में बताया गया है Dalvik बाइटकोड. नोट जोड़ें हालांकि, इसे ushort की कलेक्शन के तौर पर परिभाषित किया गया है, लेकिन कुछ इंटरनल स्ट्रक्चर हैं, जो चार-बाइट अलाइनमेंट को प्राथमिकता देते हैं. साथ ही, अगर ऐसा एंडियन-स्वैप की गई फ़ाइल में होता है, तो स्वैपिंग सिर्फ़ अलग-अलग ushort इंस्टेंस पर किया जाता है, काफ़ी बड़ा अंदरूनी स्ट्रक्चर.
पैडिंग ushort (ज़रूरी नहीं) = 0 tries के चार-बाइट अलाइन करने के लिए दो बाइट पैडिंग. यह एलिमेंट सिर्फ़ तब मौजूद होता है, जब tries_size के लिए वैल्यू शून्य नहीं होती और insns_size विषम है.
प्रयास store_item[tries_size] (ज़रूरी नहीं) अरे यह बताता है कि कोड में कहां अपवाद माना जाता है और और उन्हें कैसे संभालना है. अरे के एलिमेंट ओवरलैप नहीं होने चाहिए रेंज और क्रम में कम से ज़्यादा पते के क्रम में. यह एलिमेंट सिर्फ़ अगर tries_size शून्य नहीं है, तो यह वैल्यू प्रज़ेंट होती है.
हैंडलर encoded_catch_handler_list (ज़रूरी नहीं) बाइट, कैच टाइप और उनसे जुड़ी सूचियों की सूची को दिखाते हैं हैंडलर पते. हर try_item में बाइट के हिसाब से ऑफ़सेट होता है इस स्ट्रक्चर में शामिल करें. यह एलिमेंट सिर्फ़ तब मौजूद होता है, जब tries_size शून्य नहीं है.

ट्राइ_आइटम का फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
start_addr यूइंट इस एंट्री के तहत आने वाले कोड के ब्लॉक का शुरुआती पता. पता पहली बार कवर किए गए शुरुआती हिस्से की शुरुआत तक, 16-बिट कोड यूनिट की गिनती होती है निर्देश दिए गए हों.
insn_count यूशॉर्ट इस एंट्री के तहत आने वाले 16-बिट कोड यूनिट की संख्या. आखिरी कोड शामिल की गई इकाई (शामिल) start_addr + insn_count - 1 है.
हैंडलर_off यूशॉर्ट शुरुआत से बाइट में ऑफ़सेट encoded_catch_hander_list से इस एंट्री के लिए encoded_catch_handler. इसे ऑफ़सेट को encoded_catch_handler की शुरुआत तक ले जाना है.

encoded_catch_handler_list फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
साइज़ Uleb128 इस सूची का साइज़, एंट्री में
सूची encoded_catch_handler[handlers_size] हैंडलर सूचियों की असल सूची, जिसे सीधे तौर पर दिखाया जाता है (ऑफ़सेट के तौर पर नहीं), और क्रम से

एन्कोडेड_catch_handler फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
साइज़ स्लीब128 इस सूची में कैच टाइप की संख्या. अगर यह पॉज़िटिव नहीं है, तो कैच की संख्या का नेगेटिव और कैच को फ़ॉलो किया जाता है कैच-ऑल हैंडलर के ज़रिए. उदाहरण के लिए: 0 का size का मतलब है कि कैच-ऑल है, लेकिन साफ़ तौर पर टाइप किया गया कोई कैच नहीं है. 2 के size का मतलब है कि साफ़ तौर पर दो टाइप कैच और कोई कैच-ऑल नहीं. और -1 का size इसका मतलब है कि कैच-ऑल के साथ एक टाइप की गई कैच भी है.
हैंडलर एन्कोडेड_type_addr_pair[abs(size)] कोड में बदले गए abs(size) आइटम की स्ट्रीम. हर आइटम के लिए एक पकड़ा गया टाइप को उसी क्रम में सेट करें जिस क्रम में टाइप की जांच की जानी चाहिए.
कैच_ऑल_addr uleb128 (ज़रूरी नहीं) कैच-ऑल हैंडलर का बाइट कोड पता. यह एलिमेंट सिर्फ़ यह तब दिखता है, जब size पॉज़िटिव नहीं होता.

encoded_type_addr_pair फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
type_idx Uleb128 इस टाइप के लिए type_ids सूची में इंडेक्स करें अपवाद के तौर पर
ऐडर Uleb128 संबंधित अपवाद हैंडलर का बाइटकोड पता

डीबग_info_item

code_item से रेफ़रंस लिया गया

डेटा सेक्शन में दिखता है

संरेखण: कोई भी (बाइट-अलाइन)

हर debug_info_item, DWARF3 से प्रेरित बाइट-कोड के बारे में बताता है यह ऐसी मशीन है जो व्याख्या किए जाने पर स्थितियों को उत्सर्जित करती है टेबल और (संभावित रूप से) code_item. क्रम, वैरिएबल की लंबाई से शुरू होता है हेडर (जिसकी लंबाई, तरीके की संख्या पर निर्भर करती है पैरामीटर), इसके बाद स्टेट मशीन बाइटकोड, और इसके आखिर में DBG_END_SEQUENCE बाइट के साथ.

स्टेट मशीन में पांच रजिस्टर होते हैं. कॉन्टेंट बनाने address रजिस्टर, इसमें दिए गए निर्देशों का ऑफ़सेट दिखाता है 16-बिट कोड यूनिट में संबंधित insns_item. कॉन्टेंट बनाने हर एक तारीख की शुरुआत को 0 पर address रजिस्टर होना शुरू होगा debug_info क्रम होना चाहिए और इसे सिर्फ़ एक क्रम में बढ़ाना चाहिए. line रजिस्टर, किस सोर्स लाइन नंबर को दिखाता है अगली पोज़िशन की टेबल की एंट्री से जुड़ा होना चाहिए, जो इससे उत्सर्जित होती है स्टेट मशीन पर निर्भर है. इसे क्रम के हेडर में शुरू किया जाता है और हो सकता है में कोई बदलाव नहीं आना चाहिए, लेकिन यह कभी भी इससे कम नहीं होना चाहिए 1. source_file रजिस्टर में सोर्स फ़ाइल मिलती है जिसका रेफ़रंस लाइन नंबर में दिया गया है. इसे इसके लिए शुरू किया जाता है class_def_item में source_file_idx की वैल्यू. अन्य दो वैरिएबल, prologue_end और epilogue_begin, बूलियन फ़्लैग होते हैं (इन्हें शुरू किया गया) false) से पता चलता है कि अगली पोज़िशन उत्सर्जित हुई या नहीं को मेथड प्रस्तावना या उपदेश माना जाना चाहिए. स्टेट मशीन इसे लाइव लोकल वैरिएबल के नाम और टाइप को भी ट्रैक करना होगा हर एक ग्राहक, DBG_RESTART_LOCAL कोड के लिए रजिस्टर करता है.

हेडर ऐसा होता है:

नाम फ़ॉर्मैट ब्यौरा
Line_start Uleb128 स्टेट मशीन के line रजिस्टर के लिए शुरुआती वैल्यू. यह असल पोज़िशन की एंट्री नहीं है.
पैरामीटर_साइज़ Uleb128 कोड में बदले गए पैरामीटर के नामों की संख्या. यहां होना चाहिए हर मेथड के पैरामीटर के हिसाब से एक. इसमें, इंस्टेंस तरीके के this को छोड़कर, और वे कौनसे प्रॉडक्ट हैं.
पैरामीटर का नाम uleb128p1[parameters_size] तरीके पैरामीटर के नाम का स्ट्रिंग इंडेक्स. एन्कोड किया गया मान NO_INDEX बताता है कि कोई नाम नहीं है से जुड़े पैरामीटर के लिए उपलब्ध है. टाइप डिस्क्रिप्टर और हस्ताक्षर, मेथड डिस्क्रिप्टर और सिग्नेचर से शामिल होते हैं.

बाइट कोड की वैल्यू इस तरह हैं:

नाम वैल्यू फ़ॉर्मैट करें तर्क ब्यौरा
डीबीजी_END_SEQUENCE 0x00 (कोई नहीं) code_item के लिए डीबग की जानकारी के क्रम को खत्म करता है
डीबीजी_ADVANCE_पीसी 0x01 uleb128 addr_diff addr_diff: पता रजिस्टर में जोड़ने के लिए रकम स्थिति प्रविष्टि छोड़े बिना पता पंजीकरण को आगे बढ़ाता है
डीबीजी_ADVANCE_LINE 0x02 sleb128 line_diff line_diff: इसके ज़रिए रजिस्टर लाइन बदलने की रकम पोज़िशन एंट्री हटाए बिना, लाइन रजिस्टर को आगे बढ़ाता है
डीबीजी_START_LOCAL 0x03 uleb128 register_num
uleb128p1 name_idx
uleb128p1 type_idx
register_num: वह रजिस्टर जिसमें लोकल
होगा name_idx:
नाम का स्ट्रिंग इंडेक्स type_idx: टाइप का इंडेक्स
मौजूदा पते पर लोकल वैरिएबल दिखाता है. इनमें से कोई एक name_idx या type_idx NO_INDEX का इस्तेमाल करें. इससे यह पता चलता है कि वैल्यू की जानकारी नहीं है.
डीबीजी_START_LOCAL_EXTENDED 0x04 uleb128 register_num
uleb128p1 name_idx
uleb128p1 type_idx
uleb128p1 sig_idx
register_num: वह रजिस्टर जिसमें लोकल
होगा name_idx:
नाम का स्ट्रिंग इंडेक्स type_idx:
टाइप का टाइप इंडेक्स sig_idx: हस्ताक्षर टाइप का स्ट्रिंग इंडेक्स
वर्तमान पते पर टाइप सिग्नेचर के साथ लोकल का परिचय देता है. name_idx, type_idx या sig_idx NO_INDEX हो सकता है का इस्तेमाल करें कि वह मान अज्ञात है. (अगर sig_idx यह है हालांकि, -1 उसी डेटा को ज़्यादा दिखाया जा सकता है ऑपकोड DBG_START_LOCAL का इस्तेमाल अच्छी तरह से करता है.)

नोट: "dalvik.annotation.Signature" समस्याओं से जुड़ी चेतावनियों के बारे में नीचे बताया गया है हस्ताक्षरों को हैंडल करने के लिए.

डीबीजी_END_LOCAL 0x05 uleb128 register_num register_num: वह रजिस्टर जिसमें स्थानीय चीज़ें शामिल हैं मौजूदा लाइव लोकल वैरिएबल को मौजूदा इस्तेमाल करें
डीबीजी_RESTART_LOCAL 0x06 uleb128 register_num register_num: रीस्टार्ट करने के लिए रजिस्टर करें मौजूदा पते पर लोकल वैरिएबल फिर से शामिल करता है. नाम और टाइप वही है जो पिछले लोकल में रजिस्टर करें.
DBG_SET_PROLOGUE_END 0x07 (कोई नहीं) prologue_end स्टेट मशीन रजिस्टर सेट करता है, यह दर्शाता है कि अगली स्थिति प्रविष्टि जोड़ी जाएगी जिसे विधि प्रस्ताव का अंत माना जाता है (के लिए उचित स्थान तरीका ब्रेकपॉइंट). यह prologue_end रजिस्टर है किसी खास (>= 0x0a) ऑपकोड से हटाया जा सकता है.
DBG_SET_EPILOGUE_BEGIN 0x08 (कोई नहीं) epilogue_begin स्टेट मशीन रजिस्टर सेट करता है, यह दर्शाता है कि अगली स्थिति प्रविष्टि जोड़ी जाएगी तरीके के उपसंहार की शुरुआत माना जाता है (सही जगह करने के लिए, सभी तरीकों का इस्तेमाल किया जा सकता है. किसी विशेष अनुरोध से epilogue_begin रजिस्टर को मिटा दिया जाता है (>= 0x0a) ऑपकोड.
डीबीजी_एसईटी_फ़ाइल 0x09 uleb128p1 name_idx name_idx: सोर्स फ़ाइल के नाम का स्ट्रिंग इंडेक्स; जानकारी न होने पर NO_INDEX यह इंगित करता है कि बाद की सभी पंक्ति संख्या प्रविष्टियां इसका संदर्भ देती हैं स्रोत फ़ाइल नाम में दर्ज डिफ़ॉल्ट नाम के बजाय code_item अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
खास ओपीकोड 0x0a...0xएफ़ (कोई नहीं) line और address रजिस्टर आगे बढ़ता है, स्थिति की जानकारी देता है और prologue_end और epilogue_begin. ब्यौरे के लिए नीचे देखें.

खास ऑपकोड

0x0a और 0xff के बीच के मान वाले ओपकोड (शामिल) line और address, दोनों को ले जाएं एक छोटी संख्या से रजिस्टर करता है और फिर नई स्थिति टेबल एंट्री डालता है. बढ़ोतरी का फ़ॉर्मूला यहां दिया गया है:

DBG_FIRST_SPECIAL = 0x0a  // the smallest special opcode
DBG_LINE_BASE   = -4      // the smallest line number increment
DBG_LINE_RANGE  = 15      // the number of line increments represented

adjusted_opcode = opcode - DBG_FIRST_SPECIAL

line += DBG_LINE_BASE + (adjusted_opcode % DBG_LINE_RANGE)
address += (adjusted_opcode / DBG_LINE_RANGE)

एनोटेशन_डायरेक्ट्री_आइटम

class_def_item से रेफ़र किया गया है

डेटा सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
क्लास_एनोटेशन_ऑफ़ यूइंट फ़ाइल की शुरुआत से लेकर सीधे तौर पर की गई व्याख्याओं तक क्लास में या अगर क्लास में सीधे तौर पर कोई एनोटेशन नहीं है, तो 0. ऑफ़सेट के हिसाब से, अगर शून्य नहीं है, तो उसे data सेक्शन. डेटा का फ़ॉर्मैट तय किया गया है "annotation_set_item" के ज़रिए देखें.
फ़ील्ड का साइज़ यूइंट इस आइटम के ज़रिए एनोटेट किए गए फ़ील्ड की संख्या
एनोटेट_methods_size यूइंट इस आइटम के ज़रिए एनोटेट किए गए तरीकों की संख्या
एनोटेट_पैरामीटर_साइज़ यूइंट इस आइटम में बताई गई पैरामीटर सूचियों की संख्या
फ़ील्ड_एनोटेशन फ़ील्ड_एनोटेशन[fields_size] (ज़रूरी नहीं) संबंधित फ़ील्ड एनोटेशन की सूची. सूची के एलिमेंट में field_idx के हिसाब से बढ़ते क्रम में लगाए जाएंगे.
पद्धति_एनोटेशन [method_annotation[methods_size] (ज़रूरी नहीं) संबंधित तरीके के एनोटेशन की सूची. सूची के एलिमेंट में method_idx के हिसाब से बढ़ते क्रम में लगाए जाएंगे.
पैरामीटर_एनोटेशन पैरामीटर_एनोटेशन[parameters_size] (ज़रूरी नहीं) संबंधित तरीके के पैरामीटर एनोटेशन की सूची. इसके एलिमेंट सूची को method_idx के हिसाब से बढ़ते क्रम में लगाया जाना चाहिए.

ध्यान दें: सभी एलिमेंट' field_id और method_id इंस्टेंस को एक ही परिभाषित करने वाली क्लास का हवाला देना चाहिए.

फ़ील्ड_एनोटेशन फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
फ़ील्ड_idx यूइंट field_ids सूची में इंडेक्स करें, ताकि जिस फ़ील्ड की व्याख्या की जा रही है
एनोटेशन_बंद यूइंट फ़ाइल की शुरुआत से लेकर एनोटेशन की सूची तक फ़ील्ड में जोड़ दें. ऑफ़सेट data में किसी जगह पर होना चाहिए सेक्शन में जाएं. डेटा का फ़ॉर्मैट इसके हिसाब से तय किया जाता है "annotation_set_item" देखें.

तरीके_एनोटेशन का फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
[method_idx] यूइंट method_ids सूची में इंडेक्स करें, ताकि एनोटेट करने का तरीका
एनोटेशन_बंद यूइंट फ़ाइल की शुरुआत से लेकर एनोटेशन की सूची तक तरीका. ऑफ़सेट को data सेक्शन. डेटा का फ़ॉर्मैट इसके हिसाब से तय किया जाता है "annotation_set_item" देखें.

पैरामीटर_एनोटेशन फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
[method_idx] यूइंट method_ids सूची में इंडेक्स करें, ताकि वह तरीका जिसके पैरामीटर की व्याख्या की जा रही है
एनोटेशन_बंद यूइंट फ़ाइल की शुरुआत से लेकर एनोटेशन की सूची तक तरीका पैरामीटर. ऑफ़सेट को data सेक्शन. डेटा का फ़ॉर्मैट इसके हिसाब से तय किया जाता है "annotation_set_ref_list" देखें.

एनोटेशन_set_ref_list

पैरामीटर_annotations_item से रेफ़रंस लिया गया है

डेटा सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
साइज़ यूइंट एंट्री में, सूची का साइज़
सूची एनोटेशन_set_ref_item[size] सूची के एलिमेंट

एनोटेशन_set_ref_item फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
एनोटेशन_बंद यूइंट ऑफ़सेट के हिसाब से, फ़ाइल की शुरुआत से लेकर रेफ़र किए गए एनोटेशन सेट तक या अगर इस एलिमेंट के लिए कोई एनोटेशन न हो, तो 0. अगर ऑफ़सेट शून्य नहीं है, तो वह data की किसी जगह पर होना चाहिए सेक्शन में जाएं. डेटा का फ़ॉर्मैट इसके हिसाब से तय किया जाता है "annotation_set_item" देखें.

एनोटेशन_सेट_आइटम

एनोटेशन_directory_item, field_annotations_item से रेफ़रंस लिया गया, [method_annotations_item] और एनोटेशन_set_ref_item

डेटा सेक्शन में दिखता है

अलाइनमेंट: 4 बाइट

नाम फ़ॉर्मैट ब्यौरा
साइज़ यूइंट सेट का साइज़, एंट्री में
एंट्री एनोटेशन_off_item[size] सेट के एलिमेंट शामिल हैं. तत्वों को बढ़ते क्रम में रखा जाना चाहिए, type_idx ने बनाया.

एनोटेशन_off_item फ़ॉर्मैट

नाम फ़ॉर्मैट ब्यौरा
एनोटेशन_ऑफ़ यूइंट ऑफ़सेट के हिसाब से सेट करें. ऑफ़सेट को data सेक्शन में किसी जगह पर होना चाहिए, और उस जगह के डेटा का फ़ॉर्मैट इस तरह से तय किया गया है: ''annotation_item'' देखें.

एनोटेशन_आइटम

एनोटेशन_set_item से रेफ़रंस लिया गया

डेटा सेक्शन में दिखता है

संरेखण: कोई भी (बाइट-अलाइन)

नाम फ़ॉर्मैट ब्यौरा
कैसा दिखाई दे यूबाइट यह एनोटेशन किसको दिखे (नीचे देखें)
टिप्‍पणी एन्कोडेड_एनोटेशन कोड में बदला गया कॉन्टेंट, जिसके फ़ॉर्मैट में बताया गया है: "encoded_annotation फ़ॉर्मैट" कम "encoded_value के कोड में बदलने का तरीका" पढ़ें.

प्रॉडक्ट दिखने की जानकारी

यहां visibility फ़ील्ड के लिए विकल्प दिए गए हैं annotation_item:

नाम वैल्यू ब्यौरा
विज़ुअल 0x00 सिर्फ़ बिल्ड के समय दिखना चाहिए (उदाहरण के लिए, कंपाइलेशन के दौरान) अन्य कोड का उपयोग करके)
ViSIBILITY_RUNTIME 0x01 रनटाइम पर दिखने के लिए बनाया गया है
VISIBILITY_सिस्टम 0x02 रनटाइम पर दिखने के लिए टारगेट किया गया है, लेकिन सिर्फ़ मौजूदा सिस्टम के लिए (न कि सामान्य उपयोगकर्ता कोड के लिए)

एन्कोडेड_array_item

class_def_item से रेफ़र किया गया है

डेटा सेक्शन में दिखता है

संरेखण: कोई भी (बाइट-अलाइन)

नाम फ़ॉर्मैट ब्यौरा
मान एन्कोडेड_अरे कोड में बदले गए अरे की वैल्यू को बताए गए फ़ॉर्मैट में, बाइट "encoded_array फ़ॉर्मैट" के हिसाब से "encoded_value के अंतर्गत एन्कोडिंग" पढ़ें.

छिपा हुआapi_class_data_item

इस सेक्शन में, हर क्लास में इस्तेमाल किए जाने वाले प्रतिबंधित इंटरफ़ेस का डेटा होता है.

ध्यान दें: छिपी हुई एपीआई की सुविधा Android 10.0 में शुरू की गई थी और यह सिर्फ़ बूट क्लास पाथ में क्लास की DEX फ़ाइलों पर लागू होता है. यहां दी गई फ़्लैग सूची को आने वाली रिलीज़ में बढ़ाया जा सकता है Android के लिए. ज़्यादा जानकारी के लिए, यह देखें बिना SDK टूल वाले इंटरफ़ेस पर पाबंदियां.

नाम फ़ॉर्मैट ब्यौरा
साइज़ यूइंट सेक्शन का कुल साइज़
ऑफ़सेट यूइंट[] ऑफ़सेट की अरे को class_idx से इंडेक्स किया गया. इंडेक्स class_idx पर शून्य अरे एंट्री का मतलब है कि इस class_idx के लिए कोई डेटा मौजूद नहीं है या छिपे हुए सभी एपीआई मौजूद नहीं हैं फ़्लैग शून्य हैं. नहीं तो अरे की एंट्री शून्य नहीं होती है और इसमें ऑफ़सेट होता है सेक्शन की शुरुआत से लेकर छिपे हुए एपीआई फ़्लैग के कलेक्शन तक इस class_idx के लिए.
फ़्लैग Uleb128[] हर क्लास के लिए, छिपे हुए एपीआई फ़्लैग की सूची बनाई गई अरे. यहां दी गई टेबल में, फ़्लैग की जा सकने वाली वैल्यू के बारे में बताया गया है. फ़्लैग उसी क्रम में एन्कोड किए जाते हैं जिस क्रम में फ़ील्ड और मेथड को एन्कोड किया जाता है क्लास डेटा में एन्कोड किया गया हो.

पाबंदी वाले फ़्लैग के टाइप:

नाम वैल्यू ब्यौरा
व्हाइटलिस्ट 0 ऐसे इंटरफ़ेस जिनका आसानी से इस्तेमाल किया जा सकता है और जो YouTube Studio के आधिकारिक तौर पर दस्तावेज़ किया गया Android फ़्रेमवर्क पैकेज इंडेक्स.
ग्रेलिस्ट 1 बिना SDK टूल वाले ऐसे इंटरफ़ेस जिनका इस्तेमाल किया जा सकता है. भले ही, ऐप्लिकेशन का टारगेट एपीआई लेवल.
प्रतिबंधित करें 2 ऐसे इंटरफ़ेस जो SDK टूल नहीं हैं और जिनका इस्तेमाल नहीं किया जा सकता. भले ही, ऐप्लिकेशन टारगेट एपीआई लेवल. इनमें से किसी भी इंटरफ़ेस पर जाने पर, रनटाइम की गड़बड़ी भी शामिल है.
ग्रेलिस्ट-max‐o 3 बिना SDK टूल वाले ऐसे इंटरफ़ेस जो Android 8.x और इससे पुराने वर्शन के लिए इस्तेमाल किए जा सकते हैं जब तक कि उन पर पाबंदी न लगी हो.
ग्रेलिस्ट-max‐p 4 बिना SDK टूल वाले ऐसे इंटरफ़ेस जो Android 9.x के लिए इस्तेमाल किए जा सकते हैं जब तक कि उन पर पाबंदी न लगी हो.
ग्रेलिस्ट-max‐q 5 बिना SDK टूल वाले ऐसे इंटरफ़ेस जो Android 10.x के लिए इस्तेमाल किए जा सकते हैं जब तक कि उन पर पाबंदी न लगी हो.
ग्रेलिस्ट-max‐r 6 बिना SDK टूल वाले ऐसे इंटरफ़ेस जो Android 11.x के लिए इस्तेमाल किए जा सकते हैं जब तक कि उन पर पाबंदी न लगी हो.

सिस्टम एनोटेशन

सिस्टम एनोटेशन का इस्तेमाल रिफ़्लेक्टिव एलिमेंट दिखाने के लिए किया जाता है क्लास (और तरीके, और फ़ील्ड) के बारे में जानकारी. यह जानकारी आम तौर पर, इसे क्लाइंट (नॉन-सिस्टम) कोड से सीधे तौर पर ऐक्सेस नहीं किया जाता.

सिस्टम एनोटेशन को .dex फ़ाइलों में इस तरह दिखाया जाता है विज़िबिलिटी वाली एनोटेशन को VISIBILITY_SYSTEM पर सेट किया गया.

Dalvik.annotation.AnnotationDefault

व्याख्या इंटरफ़ेस में तरीकों पर दिखाई देता है

हर इमेज के साथ एक AnnotationDefault एनोटेशन जुड़ा होता है. व्याख्या इंटरफ़ेस जो डिफ़ॉल्ट बाइंडिंग को दिखाना चाहता है.

नाम फ़ॉर्मैट ब्यौरा
मान टिप्पणी इस एनोटेशन के लिए डिफ़ॉल्ट बाइंडिंग, जिसे एनोटेशन के तौर पर दिखाया गया है करते हैं. एनोटेशन में व्याख्या; गुम नामों के डिफ़ॉल्ट नहीं होते हैं.

Dalvik.annotation.EnclosingClass

क्लास में दिखता है

हर क्लास के साथ एक EnclosingClass एनोटेशन अटैच किया जाता है जिसे या तो किसी अन्य क्लास के सदस्य के रूप में परिभाषित किया जाता है, प्रति se या पहचान छिपाकर फ़ॉलो किया जाता है, लेकिन किसी खास तरीके के तहत तय नहीं किया जाता (जैसे, सिंथेटिक इनर क्लास). हर क्लास में यह एनोटेशन होना ज़रूरी है. InnerClass एनोटेशन. इसके अलावा, क्लास में EnclosingClass और EnclosingMethod एनोटेशन.

नाम फ़ॉर्मैट ब्यौरा
मान कक्षा वह क्लास जो इस क्लास के बारे में सबसे सटीक जानकारी देती है

Dalvik.annotation.EnclosingMethod

क्लास में दिखता है

हर क्लास के साथ एक EnclosingMethod एनोटेशन अटैच किया जाता है जो कि मेथड के मुख्य भाग में परिभाषित होता है. हर वह क्लास, जिसमें यह है एनोटेशन में InnerClass एनोटेशन भी होना चाहिए. इसके अलावा, क्लास में EnclosingClass और दोनों नहीं होने चाहिए और एक EnclosingMethod एनोटेशन.

नाम फ़ॉर्मैट ब्यौरा
मान Method वह तरीका जो इस क्लास के बारे में सबसे सटीक जानकारी देता है

Dalvik.annotation.इनरक्लास

क्लास में दिखता है

हर क्लास के साथ एक InnerClass एनोटेशन अटैच किया जाता है जिसे किसी अन्य क्लास की परिभाषा के लेक्सिकल स्कोप में परिभाषित किया गया है. जिस क्लास में यह एनोटेशन होता है उसमें इनमें से कोई भी होना चाहिए EnclosingClass एनोटेशन या EnclosingMethod एनोटेशन.

नाम फ़ॉर्मैट ब्यौरा
नाम स्ट्रिंग इस श्रेणी का मूल रूप से बताया गया सामान्य नाम (इसमें कोई नाम शामिल नहीं है) पैकेज प्रीफ़िक्स). अगर इस क्लास की पहचान छिपाई जाती है, तो नाम null.
ऐक्सेसफ़्लैग आईएनटी क्लास के लिए दिए गए मूल ऐक्सेस फ़्लैग (जो अलग-अलग हो सकते हैं) लागू होने वाले फ़्लैग से लिए जा सकते हैं. ऐसा इसलिए, क्योंकि सेट किए गए टैग एक-दूसरे से मैच नहीं होते सोर्स लैंग्वेज और टारगेट वर्चुअल मशीन के मॉडल)

Dalvik.annotation.MemberClasses

क्लास में दिखता है

हर क्लास के साथ एक MemberClasses एनोटेशन अटैच किया जाता है जिससे मेंबर क्लास के बारे में जानकारी मिलती है. (सदस्य क्लास, सीधे तौर पर अंदरूनी क्लास होती है जिसमें एक नाम हो.)

नाम फ़ॉर्मैट ब्यौरा
मान क्लास[] सदस्य क्लास का कलेक्शन

dalvik.annotation.MethodParameters

तरीकों पर जानकारी दिखाई गई है

ध्यान दें: यह एनोटेशन Android के बाद जोड़ा गया था 7.1. Android के पहले वाले रिलीज़ वर्शन में, इसकी मौजूदगी को अनदेखा कर दिया जाएगा.

MethodParameters एनोटेशन ज़रूरी नहीं है. इसका इस्तेमाल इन कामों के लिए किया जा सकता है पैरामीटर मेटाडेटा, जैसे कि पैरामीटर के नाम और मॉडिफ़ायर देने के लिए.

एनोटेशन को किसी मेथड या कंस्ट्रक्टर से सुरक्षित रूप से हटाया जा सकता है, अगर रनटाइम के दौरान पैरामीटर मेटाडेटा ज़रूरी नहीं होता. java.lang.reflect.Parameter.isNamePresent() का इस्तेमाल करके, यह पता लगाया जा सकता है कि किसी पैरामीटर के लिए मेटाडेटा मौजूद है या नहीं और उससे जुड़ी रिफ़्लेक्शन java.lang.reflect.Parameter.getName() जैसे तरीकों का इस्तेमाल कम हो जाएगा अगर जानकारी मौजूद नहीं है, तो रनटाइम के दौरान डिफ़ॉल्ट व्यवहार पर वापस आ जाता है.

पैरामीटर मेटाडेटा शामिल करते समय, कंपाइलर में जानकारी शामिल होनी चाहिए enum जैसी जनरेट की गई क्लास के लिए अमान्य है, क्योंकि पैरामीटर मेटाडेटा यह भी शामिल है कि पैरामीटर, सिंथेटिक या ज़रूरी है या नहीं.

MethodParameters एनोटेशन से सिर्फ़ अलग-अलग तरीके की जानकारी मिलती है पैरामीटर का इस्तेमाल करें. इसलिए, कंपाइलर व्याख्या को पूरी तरह से छोड़ सकते हैं कोड-साइज़ के लिए, उन कंस्ट्रक्टर और मेथड के लिए जिनके पैरामीटर नहीं हैं और रनटाइम की बचत होती है.

यहां दिए गए अरे का साइज़, तरीके से जुड़ा method_id_item डेक्स स्ट्रक्चर, अन्य मामलों में यहां java.lang.reflect.MalformedParametersException दी जाएगी रनटाइम.

इसका मतलब है: method_id_item.proto_idx -> proto_id_item.parameters_off -> type_list.size, names().length और के बराबर होना चाहिए accessFlags().length.

क्योंकि MethodParameters सभी औपचारिक विधियों का वर्णन करता है पैरामीटर, यहां तक कि वे भी पैरामीटर जिनका सोर्स कोड में साफ़ तौर पर या किसी दूसरे तरीके से एलान नहीं किया गया है, कलेक्शन का साइज़, सिग्नेचर या अन्य मेटाडेटा से अलग हो सकता है ऐसी जानकारी जो सोर्स में बताए गए खास पैरामीटर पर आधारित हो कोड. MethodParameters में इसके बारे में भी कोई जानकारी शामिल नहीं होगी एनोटेशन रिसीवर पैरामीटर लिखें, जो वास्तविक पद्धति में मौजूद नहीं हैं हस्ताक्षर करें.

नाम फ़ॉर्मैट ब्यौरा
नाम String[] इससे जुड़े तरीके के लिए, फ़ॉर्मल पैरामीटर के नाम. अरे शून्य नहीं होना चाहिए, लेकिन अगर कोई औपचारिक पैरामीटर नहीं है, तो इसे खाली होना चाहिए. इसमें एक मान अगर उस इंडेक्स वाले औपचारिक पैरामीटर का कोई नाम नहीं है, तो अरे शून्य होना चाहिए.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर पैरामीटर के नाम वाली स्ट्रिंग खाली हैं या उनमें '.', ';', '[' शामिल है या '/' फिर एक java.lang.reflect.MalformedParametersException को यहां फेंक दिया जाएगा रनटाइम.
ऐक्सेसफ़्लैग पूर्णांक[] इससे जुड़े तरीके के लिए, औपचारिक पैरामीटर के ऐक्सेस फ़्लैग. कॉन्टेंट बनाने श्रेणी शून्य नहीं होनी चाहिए, लेकिन अगर कोई औपचारिक पैरामीटर नहीं है, तो रिक्त होना चाहिए.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है मान एक बिट मास्क है, जिसमें ये मान हैं:
  • 0x0010 : फ़ाइनल, पैरामीटर की जानकारी फ़ाइनल थी
  • 0x1000 : सिंथेटिक, पैरामीटर की शुरुआत कंपाइलर ने की थी
  • 0x8000 : ज़रूरी पैरामीटर, सिंथेटिक है, लेकिन यह भाषा के हिसाब से भी लागू होती है स्पेसिफ़िकेशन
अगर इस सेट के बाहर कोई बिट सेट किया जाता है, तो java.lang.reflect.MalformedParametersException को रनटाइम पर फेंक दिया जाएगा.

Dalvik.annotation.हस्ताक्षर

दिखता है क्लास, फ़ील्ड, और मेथड

हर क्लास के साथ एक Signature एनोटेशन अटैच किया जाता है. फ़ील्ड या तरीका है, जो ज़्यादा जटिल प्रकार के रूप में परिभाषित किया गया है. को type_id_item से दिखाया जा सकता है. कॉन्टेंट बनाने .dex फ़ॉर्मैट, हस्ताक्षर का फ़ॉर्मैट तय नहीं करता; यह का मतलब सिर्फ़ सोर्स के हस्ताक्षर के बारे में बताने के लिए है को सही तरीके से लागू करने के लिए उस भाषा की सिमेंटिक्स. इसलिए, हस्ताक्षर को आम तौर पर पार्स नहीं किया जाता या उनकी पुष्टि नहीं की जाती वर्चुअल मशीन पर निर्भर करता है. हस्ताक्षर के साथ ही बेहतर लेवल वाले एपीआई और टूल (जैसे, डीबगर) का इस्तेमाल करना. किसी हस्ताक्षर करना ज़रूरी है, ताकि हस्ताक्षर करने के बाद सिर्फ़ मान्य हस्ताक्षर पाने के बारे में लगाए जाने वाले अनुमान, जो साफ़ तौर पर जो वाक्यात्मक रूप से आने की संभावना के बजाय अमान्य हस्ताक्षर.

सिग्नेचर स्ट्रिंग में काफ़ी डुप्लीकेट कॉन्टेंट होता है, इसलिए Signature एनोटेशन को इसकी कलेक्शन के तौर पर परिभाषित किया गया है स्ट्रिंग, जहां डुप्लीकेट एलिमेंट सामान्य रूप से उसी जानकारी को दिखाते हैं शामिल है और हस्ताक्षर को वाक्य के संयोजन के रूप में लिया जाता है. अरे में मौजूद सभी स्ट्रिंग. पुल करने के तरीके के बारे में कोई नियम नहीं है हस्ताक्षर को अलग-अलग स्ट्रिंग में बांटकर अलग करना; कि वह पूरी तरह से .dex फ़ाइलें जनरेट करने वाले टूल.

नाम फ़ॉर्मैट ब्यौरा
मान String[] स्ट्रिंग या स्ट्रिंग के कलेक्शन के तौर पर, इस क्लास या सदस्य के हस्ताक्षर एक साथ जोड़ना ही है

Dalvik.annotation.थ्रॉ

तरीकों पर जानकारी दिखाई गई है

हर उस तरीके पर Throws एनोटेशन जोड़ा जाता है जो एक या उससे ज़्यादा अपवाद टाइप करने के लिए एलान किया गया है.

नाम फ़ॉर्मैट ब्यौरा
मान क्लास[] दिए गए अपवाद टाइप का अरे