डाल्विक निष्पादन योग्य प्रारूप

यह दस्तावेज़ .dex फ़ाइलों के लेआउट और सामग्री का वर्णन करता है, जिनका उपयोग वर्ग परिभाषाओं और उनके संबंधित सहायक डेटा के एक सेट को रखने के लिए किया जाता है।

प्रकार के लिए गाइड

नाम विवरण
बाइट 8-बिट हस्ताक्षरित इंट
ubyte 8-बिट अहस्ताक्षरित इंट
छोटा 16-बिट हस्ताक्षरित इंट, लिटिल-एंडियन
उशॉर्ट 16-बिट अहस्ताक्षरित इंट, लिटिल-एंडियन
int यहाँ 32-बिट हस्ताक्षरित इंट, लिटिल-एंडियन
uint 32-बिट अहस्ताक्षरित इंट, लिटिल-एंडियन
लंबा 64-बिट हस्ताक्षरित इंट, लिटिल-एंडियन
उलोंग 64-बिट अहस्ताक्षरित इंट, लिटिल-एंडियन
sleb128 हस्ताक्षरित LEB128, चर-लंबाई (नीचे देखें)
uleb128 अहस्ताक्षरित LEB128, चर-लंबाई (नीचे देखें)
uleb128p1 अहस्ताक्षरित LEB128 प्लस 1 , चर-लंबाई (नीचे देखें)

एलईबी128

LEB128 (" L ittle- E ndian B ase 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 के रूप में
00 0 0 -1
01 1 1 0
7एफ -1 127 126
80 7एफ -128 16256 16255

फ़ाइल लेआउट

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

बिटफ़ील्ड, स्ट्रिंग और स्थिर परिभाषाएँ

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"

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

नोट: प्रारूप के संस्करण 038 के लिए समर्थन एंड्रॉइड 8.0 रिलीज़ में जोड़ा गया था। संस्करण 038 में नए बाइटकोड ( invoke-polymorphic और invoke-custom ) और विधि हैंडल के लिए डेटा जोड़ा गया।

नोट: प्रारूप के संस्करण 037 के लिए समर्थन एंड्रॉइड 7.0 रिलीज़ में जोड़ा गया था। संस्करण 037 से पहले एंड्रॉइड के अधिकांश संस्करणों ने प्रारूप के संस्करण 035 का उपयोग किया है। संस्करण 035 और 037 के बीच एकमात्र अंतर डिफ़ॉल्ट तरीकों को जोड़ने और invoke के समायोजन का है।

ध्यान दें: व्यापक रूप से उपलब्ध सार्वजनिक सॉफ़्टवेयर रिलीज़ में प्रारूप के कम से कम कुछ पुराने संस्करणों का उपयोग किया गया है। उदाहरण के लिए, संस्करण 009 का उपयोग एंड्रॉइड प्लेटफ़ॉर्म के एम 3 रिलीज़ (नवंबर-दिसंबर 2007) के लिए किया गया था, और संस्करण 013 का उपयोग एंड्रॉइड प्लेटफ़ॉर्म के एम 5 रिलीज़ (फरवरी-मार्च 2008) के लिए किया गया था। कई मायनों में, प्रारूप के ये पुराने संस्करण इस दस्तावेज़ में वर्णित संस्करण से काफी भिन्न हैं।

ENDIAN_CONSTANT और REVERSE_ENDIAN_CONSTANT

हेडर_आइटम में एंबेडेड

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

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

NO_INDEX

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 में एंबेडेड

इन झंडों के बिटफील्ड का उपयोग कक्षाओं और वर्ग के सदस्यों की पहुंच और समग्र गुणों को इंगित करने के लिए किया जाता है।

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

नोट: यह केवल तभी सेट करने के लिए मान्य है जब ACC_NATIVE भी सेट हो।

ACC_VOLATILE 0x40 volatile : थ्रेड सुरक्षा में सहायता के लिए विशेष पहुंच नियम
एसीसी_ब्रिज 0x40 ब्रिज विधि, टाइप-सुरक्षित ब्रिज के रूप में कंपाइलर द्वारा स्वचालित रूप से जोड़ा गया
ACC_TRANSIENT 0x80 transient : डिफ़ॉल्ट क्रमांकन द्वारा सहेजा नहीं जाना चाहिए
ACC_VARARGS 0x80 अंतिम तर्क को संकलक द्वारा "बाकी" तर्क के रूप में माना जाना चाहिए
ACC_नेटिव 0x100 native : मूल कोड में लागू किया गया
एसीसी_इंटरफ़ेस 0x200 interface : बहु-कार्यान्वयन योग्य अमूर्त वर्ग
ACC_ABSTRACT 0x400 abstract : प्रत्यक्ष रूप से तात्कालिक नहीं abstract : इस वर्ग द्वारा लागू नहीं किया गया
ACC_STRICT 0x800 strictfp : फ़्लोटिंग-पॉइंट अंकगणित के लिए सख्त नियम
एसीसी_सिंथेटिक 0x1000 सीधे स्रोत कोड में परिभाषित नहीं है सीधे स्रोत कोड में परिभाषित नहीं है सीधे स्रोत कोड में परिभाषित नहीं है
ACC_ANNOTATION 0x2000 एक एनोटेशन वर्ग के रूप में घोषित किया गया
ACC_ENUM 0x4000 एक प्रगणित प्रकार के रूप में घोषित किया गया एक प्रगणित मूल्य के रूप में घोषित किया गया
(अप्रयुक्त) 0x8000
ACC_CONSTRUCTOR 0x10000 कंस्ट्रक्टर विधि (क्लास या इंस्टेंस इनिशियलाइज़र)
एसीसी_घोषित_
सिंक्रनाइज़
0x20000 synchronized घोषित किया गया।

ध्यान दें: इसका निष्पादन पर कोई प्रभाव नहीं पड़ता है (इस ध्वज के प्रतिबिंब के अलावा)।

* केवल InnerClass एनोटेशन के लिए अनुमति है, और कभी भी class_def_item में चालू नहीं होना चाहिए।

संशोधित UTF-8 एन्कोडिंग

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

  • केवल एक-, दो- और तीन-बाइट एन्कोडिंग का उपयोग किया जाता है।
  • U+10000U+10ffff श्रेणी में कोड बिंदु एक सरोगेट जोड़ी के रूप में एन्कोड किए गए हैं, जिनमें से प्रत्येक को तीन-बाइट एन्कोडेड मान के रूप में दर्शाया गया है।
  • कोड बिंदु U+0000 दो-बाइट रूप में एन्कोड किया गया है।
  • एक सादा शून्य बाइट (मान 0 ) एक स्ट्रिंग के अंत को इंगित करता है, जैसा कि मानक सी भाषा व्याख्या है।

उपरोक्त पहले दो आइटमों को इस प्रकार संक्षेप में प्रस्तुत किया जा सकता है: MUTF-8, यूनिकोड वर्णों के लिए अधिक प्रत्यक्ष एन्कोडिंग प्रारूप होने के बजाय, UTF-16 के लिए एक एन्कोडिंग प्रारूप है।

उपरोक्त अंतिम दो आइटम कोड बिंदु U+0000 को एक स्ट्रिंग में शामिल करना और फिर भी इसे C-स्टाइल नल-टर्मिनेटेड स्ट्रिंग के रूप में हेरफेर करना संभव बनाते हैं।

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

कैरेक्टर एन्कोडिंग के बारे में अधिक जानकारी के लिए कृपया यूनिकोड मानक देखें। MUTF-8 वास्तव में UTF-8 की तुलना में (अपेक्षाकृत कम प्रसिद्ध) एन्कोडिंग CESU-8 के अधिक निकट है।

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

एनोटेशन_एलिमेंट और एन्कोडेड_अरे_आइटम में एंबेडेड

एक encoded_value (लगभग) मनमाने ढंग से पदानुक्रमित संरचित डेटा का एक एन्कोडेड टुकड़ा है। एन्कोडिंग को संक्षिप्त और पार्स करने में आसान दोनों माना जाता है।

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

मूल्य प्रारूप

नाम टाइप करें value_type value_arg प्रारूप value प्रारूप विवरण
VALUE_BYTE 0x00 (कोई नहीं; 0 होना चाहिए) यूबाइट[1] हस्ताक्षरित एक-बाइट पूर्णांक मान
VALUE_SHORT 0x02 आकार - 1 (0…1) यूबाइट[आकार] हस्ताक्षरित दो-बाइट पूर्णांक मान, चिह्न-विस्तारित
VALUE_CHAR 0x03 आकार - 1 (0…1) यूबाइट[आकार] अहस्ताक्षरित दो-बाइट पूर्णांक मान, शून्य-विस्तारित
VALUE_INT 0x04 आकार - 1 (0…3) यूबाइट[आकार] हस्ताक्षरित चार-बाइट पूर्णांक मान, चिह्न-विस्तारित
VALUE_LONG 0x06 आकार - 1 (0…7) यूबाइट[आकार] हस्ताक्षरित आठ-बाइट पूर्णांक मान, चिह्न-विस्तारित
VALUE_FLOAT 0x10 आकार - 1 (0…3) यूबाइट[आकार] चार-बाइट बिट पैटर्न, दाईं ओर शून्य-विस्तारित, और IEEE754 32-बिट फ़्लोटिंग पॉइंट मान के रूप में व्याख्या की गई
VALUE_DOUBLE 0x11 आकार - 1 (0…7) यूबाइट[आकार] आठ-बाइट बिट पैटर्न, दाईं ओर शून्य-विस्तारित, और IEEE754 64-बिट फ़्लोटिंग पॉइंट मान के रूप में व्याख्या की गई
VALUE_METHOD_TYPE 0x15 आकार - 1 (0…3) यूबाइट[आकार] अहस्ताक्षरित (शून्य-विस्तारित) चार-बाइट पूर्णांक मान, proto_ids अनुभाग में एक सूचकांक के रूप में व्याख्या किया गया और एक विधि प्रकार मान का प्रतिनिधित्व करता है
VALUE_METHOD_HANDLE 0x16 आकार - 1 (0…3) यूबाइट[आकार] अहस्ताक्षरित (शून्य-विस्तारित) चार-बाइट पूर्णांक मान, method_handles अनुभाग में एक सूचकांक के रूप में व्याख्या किया गया और एक मेथड हैंडल मान का प्रतिनिधित्व करता है
VALUE_STRING 0x17 आकार - 1 (0…3) यूबाइट[आकार] अहस्ताक्षरित (शून्य-विस्तारित) चार-बाइट पूर्णांक मान, string_ids अनुभाग में एक सूचकांक के रूप में व्याख्या किया गया और एक स्ट्रिंग मान का प्रतिनिधित्व करता है
मान प्रकार 0x18 आकार - 1 (0…3) यूबाइट[आकार] अहस्ताक्षरित (शून्य-विस्तारित) चार-बाइट पूर्णांक मान, type_ids अनुभाग में एक सूचकांक के रूप में व्याख्या किया गया और एक प्रतिबिंबित प्रकार/वर्ग मान का प्रतिनिधित्व करता है
VALUE_FIELD 0x19 आकार - 1 (0…3) यूबाइट[आकार] अहस्ताक्षरित (शून्य-विस्तारित) चार-बाइट पूर्णांक मान, field_ids अनुभाग में एक सूचकांक के रूप में व्याख्या किया गया और एक प्रतिबिंबित फ़ील्ड मान का प्रतिनिधित्व करता है
VALUE_METHOD 0x1a आकार - 1 (0…3) यूबाइट[आकार] अहस्ताक्षरित (शून्य-विस्तारित) चार-बाइट पूर्णांक मान, method_ids अनुभाग में एक सूचकांक के रूप में व्याख्या किया गया और एक प्रतिबिंबित विधि मान का प्रतिनिधित्व करता है
VALUE_ENUM 0x1बी आकार - 1 (0…3) यूबाइट[आकार] अहस्ताक्षरित (शून्य-विस्तारित) चार-बाइट पूर्णांक मान, field_ids अनुभाग में एक सूचकांक के रूप में व्याख्या किया गया है और एक गणना प्रकार स्थिरांक के मूल्य का प्रतिनिधित्व करता है
VALUE_ARRAY 0x1सी (कोई नहीं; 0 होना चाहिए) एन्कोडेड_एरे नीचे दिए गए " encoded_array प्रारूप" द्वारा निर्दिष्ट प्रारूप में मानों की एक सरणी। value का आकार एन्कोडिंग में निहित है।
VALUE_ANNOTATION 0x1d (कोई नहीं; 0 होना चाहिए) एन्कोडेड_एनोटेशन एक उप-एनोटेशन, नीचे दिए गए " encoded_annotation फॉर्मेट" द्वारा निर्दिष्ट प्रारूप में। value का आकार एन्कोडिंग में निहित है।
VALUE_NULL 0x1e (कोई नहीं; 0 होना चाहिए) (कोई नहीं) null संदर्भ मान
VALUE_BOOLEN 0x1f बूलियन (0…1) (कोई नहीं) एक-बिट मान; false के लिए 0 और true के लिए 1 । बिट को value_arg में दर्शाया गया है।

एन्कोडेड_अरे प्रारूप

नाम प्रारूप विवरण
आकार uleb128 सरणी में तत्वों की संख्या
मान एन्कोडेड_वैल्यू[आकार] इस अनुभाग द्वारा निर्दिष्ट प्रारूप में size encoded_value बाइट अनुक्रमों की एक श्रृंखला, क्रमिक रूप से संयोजित।

एन्कोडेड_एनोटेशन प्रारूप

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

एनोटेशन_तत्व प्रारूप

नाम प्रारूप विवरण
name_idx uleb128 तत्व का नाम, string_ids अनुभाग में एक सूचकांक के रूप में दर्शाया गया है। स्ट्रिंग को ऊपर परिभाषित memberName के सिंटैक्स के अनुरूप होना चाहिए।
कीमत एन्कोडेड_वैल्यू तत्व मान

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

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

सरल नाम

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

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

सदस्य का नाम

फ़ील्ड_आईडी_आइटम और मेथड_आईडी_आइटम द्वारा उपयोग किया जाता है

सदस्यनाम एक वर्ग के सदस्य का नाम है, सदस्य फ़ील्ड, विधियाँ और आंतरिक वर्ग हैं।

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

पूर्णवर्गनाम

FullClassName एक पूरी तरह से योग्य वर्ग नाम है, जिसमें एक आवश्यक नाम के बाद एक वैकल्पिक पैकेज विनिर्देशक शामिल होता है।

पूर्णवर्गनाम
वैकल्पिक पैकेज उपसर्ग सरल नाम
वैकल्पिक पैकेज उपसर्ग
( सरलनाम '/' )*

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

type_id_item द्वारा उपयोग किया जाता है

टाइपडिस्क्रिप्टर किसी भी प्रकार का प्रतिनिधित्व करता है, जिसमें आदिम, वर्ग, सरणियाँ और void शामिल हैं। विभिन्न संस्करणों के अर्थ के लिए नीचे देखें।

टाइपडिस्क्रिप्टर
'V'
| फ़ील्डटाइपडिस्क्रिप्टर
फ़ील्डटाइपडिस्क्रिप्टर
नॉनएरेफ़ील्डटाइपडिस्क्रिप्टर
| ( '[' * 1…255) नॉनएरेफ़ील्डटाइपडिस्क्रिप्टर
नॉनएरेफ़ील्डटाइपडिस्क्रिप्टर
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L' फुलक्लासनेम ';'

शॉर्टीडिस्क्रिप्टर

proto_id_item द्वारा प्रयुक्त

शॉर्टीडिस्क्रिप्टर एक विधि प्रोटोटाइप का संक्षिप्त रूप प्रतिनिधित्व है, जिसमें रिटर्न और पैरामीटर प्रकार शामिल हैं, सिवाय इसके कि विभिन्न संदर्भ (वर्ग या सरणी) प्रकारों के बीच कोई अंतर नहीं है। इसके बजाय, सभी संदर्भ प्रकारों को एक एकल 'L' वर्ण द्वारा दर्शाया जाता है।

शॉर्टीडिस्क्रिप्टर
शॉर्टीरिटर्नटाइप ( ShortyFieldType )*
शॉर्टीरिटर्नटाइप
'V'
| शॉर्टीफ़ील्ड प्रकार
शॉर्टीफ़ील्डटाइप
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L'

टाइपडिस्क्रिप्टर शब्दार्थ

टाइपडिस्क्रिप्टर के प्रत्येक वेरिएंट का यही अर्थ है।

वाक्य - विन्यास अर्थ
वी void ; केवल रिटर्न प्रकारों के लिए मान्य है
जेड boolean
बी byte
एस short
सी char
मैं int
जे long
एफ float
डी double
एल पूर्णतः/योग्य/नाम ; कक्षा fully.qualified.Name
[ वर्णनकर्ता descriptor की सरणी, सरणियों के सरणियों के लिए पुनरावर्ती रूप से प्रयोग करने योग्य, हालांकि इसमें 255 से अधिक आयाम होना अमान्य है।

वस्तुएँ और संबंधित संरचनाएँ

इस अनुभाग में प्रत्येक शीर्ष-स्तरीय आइटम की परिभाषाएँ शामिल हैं जो .dex फ़ाइल में दिखाई दे सकती हैं।

हेडर_आइटम

शीर्ष लेख अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

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

मानचित्र_सूची

डेटा अनुभाग में दिखाई देता है

हेडर_आइटम से संदर्भित

संरेखण: 4 बाइट्स

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

नाम प्रारूप विवरण
आकार uint सूची का आकार, प्रविष्टियों में
सूची मानचित्र_आइटम[आकार] सूची के तत्व

मानचित्र_आइटम प्रारूप

नाम प्रारूप विवरण
प्रकार उशॉर्ट वस्तुओं का प्रकार; नीचे दी गई तालिका देखें
अप्रयुक्त उशॉर्ट (अप्रयुक्त)
आकार uint संकेतित ऑफसेट पर पाई जाने वाली वस्तुओं की संख्या की गिनती
ओफ़्सेट uint फ़ाइल की शुरुआत से विचाराधीन आइटम तक ऑफसेट

कोड टाइप करें

वस्तु का प्रकार स्थिर कीमत आइटम का आकार बाइट्स में
हेडर_आइटम TYPE_HEADER_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 0x0c
फ़ील्ड_आईडी_आइटम प्रकार_फ़ील्ड_आईडी_आइटम 0x0004 0x08
विधि_आईडी_आइटम TYPE_METHOD_ID_ITEM 0x0005 0x08
class_def_item टाइप_क्लास_डीईएफ_आइटम 0x0006 0x20
कॉल_साइट_आईडी_आइटम TYPE_CALL_SITE_ID_ITEM 0x0007 0x04
विधि_हैंडल_आइटम TYPE_METHOD_HANDLE_ITEM 0x0008 0x08
मानचित्र_सूची TYPE_MAP_LIST 0x1000 4 + (आइटम आकार*12)
टाइप_सूची प्रकार_प्रकार_सूची 0x1001 4 + (आइटम आकार * 2)
एनोटेशन_सेट_रेफ_लिस्ट TYPE_ANNOTATION_SET_REF_LIST 0x1002 4 + (आइटम आकार * 4)
एनोटेशन_सेट_आइटम TYPE_ANNOTATION_SET_ITEM 0x1003 4 + (आइटम आकार * 4)
क्लास_डेटा_आइटम प्रकार_वर्ग_डेटा_आइटम 0x2000 अंतर्निहित; पार्स करना होगा
कोड_आइटम प्रकार_कोड_आइटम 0x2001 अंतर्निहित; पार्स करना होगा
स्ट्रिंग_डेटा_आइटम TYPE_STRING_DATA_ITEM 0x2002 अंतर्निहित; पार्स करना होगा
डिबग_इन्फो_आइटम TYPE_DEBUG_INFO_ITEM 0x2003 अंतर्निहित; पार्स करना होगा
एनोटेशन_आइटम TYPE_ANNOTATION_ITEM 0x2004 अंतर्निहित; पार्स करना होगा
एन्कोडेड_एरे_आइटम TYPE_ENCODED_ARRAY_ITEM 0x2005 अंतर्निहित; पार्स करना होगा
एनोटेशन_निर्देशिका_आइटम TYPE_ANNOTATIONS_DIRECTORY_ITEM 0x2006 अंतर्निहित; पार्स करना होगा
hidapi_class_data_item TYPE_HIDDENAPI_CLASS_DATA_ITEM 0xF000 अंतर्निहित; पार्स करना होगा

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

string_ids अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
स्ट्रिंग_डेटा_ऑफ़ uint इस आइटम के लिए फ़ाइल की शुरुआत से स्ट्रिंग डेटा तक ऑफसेट करें। ऑफसेट data अनुभाग में एक स्थान पर होना चाहिए, और डेटा नीचे " string_data_item " द्वारा निर्दिष्ट प्रारूप में होना चाहिए। ऑफसेट के लिए कोई संरेखण आवश्यकता नहीं है।

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

डेटा अनुभाग में दिखाई देता है

संरेखण: कोई नहीं (बाइट-संरेखित)

नाम प्रारूप विवरण
utf16_size uleb128 इस स्ट्रिंग का आकार, UTF-16 कोड इकाइयों में (जो कई प्रणालियों में "स्ट्रिंग लंबाई" है)। यानी यह स्ट्रिंग की डिकोडेड लंबाई है। (एनकोडेड लंबाई 0 बाइट की स्थिति से निहित है।)
डेटा यूबाइट[] MUTF-8 कोड इकाइयों (उर्फ ऑक्टेट, उर्फ ​​बाइट्स) की एक श्रृंखला जिसके बाद मान 0 का एक बाइट आता है। डेटा प्रारूप के बारे में विवरण और चर्चा के लिए ऊपर "MUTF-8 (संशोधित UTF-8) एन्कोडिंग" देखें।

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

type_id_item

type_ids अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
डिस्क्रिप्टर_idx uint इस प्रकार की डिस्क्रिप्टर स्ट्रिंग के लिए string_ids सूची में अनुक्रमणिका बनाएं। स्ट्रिंग को ऊपर परिभाषित टाइपडिस्क्रिप्टर के सिंटैक्स के अनुरूप होना चाहिए।

proto_id_item

proto_ids अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
छोटू_idx uint इस प्रोटोटाइप के शॉर्ट-फॉर्म डिस्क्रिप्टर स्ट्रिंग के लिए string_ids सूची में अनुक्रमणिका बनाएं। स्ट्रिंग को ऊपर परिभाषित शॉर्टीडिस्क्रिप्टर के सिंटैक्स के अनुरूप होना चाहिए, और इस आइटम के रिटर्न प्रकार और पैरामीटर के अनुरूप होना चाहिए।
return_type_idx uint इस प्रोटोटाइप के रिटर्न प्रकार के लिए type_ids सूची में अनुक्रमित करें
पैरामीटर_बंद uint इस प्रोटोटाइप के लिए पैरामीटर प्रकारों की सूची में फ़ाइल की शुरुआत से ऑफसेट, या 0 यदि इस प्रोटोटाइप में कोई पैरामीटर नहीं है। यह ऑफ़सेट, यदि गैर-शून्य है, तो data अनुभाग में होना चाहिए, और वहां मौजूद डेटा नीचे "type_list" द्वारा निर्दिष्ट प्रारूप में होना चाहिए। इसके अतिरिक्त, सूची में void प्रकार का कोई संदर्भ नहीं होना चाहिए।

फ़ील्ड_आईडी_आइटम

फ़ील्ड_आईडी अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

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

विधि_आईडी_आइटम

मेथड_आईडी अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
class_idx उशॉर्ट इस विधि के परिभाषितकर्ता के लिए type_ids सूची में अनुक्रमणिका डालें। यह एक वर्ग या सरणी प्रकार होना चाहिए, न कि एक आदिम प्रकार।
proto_idx उशॉर्ट इस विधि के प्रोटोटाइप के लिए proto_ids सूची में अनुक्रमित करें
name_idx uint इस विधि के नाम के लिए string_ids सूची में अनुक्रमित करें। स्ट्रिंग को ऊपर परिभाषित memberName के सिंटैक्स के अनुरूप होना चाहिए।

class_def_item

class_defs अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

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

कॉल_साइट_आईडी_आइटम

call_site_ids अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
कॉल_साइट_बंद uint साइट परिभाषा को कॉल करने के लिए फ़ाइल की शुरुआत से ऑफसेट करें। ऑफ़सेट डेटा अनुभाग में होना चाहिए, और वहां मौजूद डेटा नीचे "call_site_item" द्वारा निर्दिष्ट प्रारूप में होना चाहिए।

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

डेटा अनुभाग में दिखाई देता है

संरेखण: कोई नहीं (बाइट संरेखित)

call_site_item एक एन्कोडेड_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

किसी भी अतिरिक्त तर्क के पैरामीटर प्रकार उनके स्थिर मानों से निर्धारित होते हैं।

विधि_हैंडल_आइटम

मेथड_हैंडल अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
विधि_हैंडल_प्रकार उशॉर्ट विधि हैंडल का प्रकार; नीचे दी गई तालिका देखें
अप्रयुक्त उशॉर्ट (अप्रयुक्त)
फ़ील्ड_या_विधि_आईडी उशॉर्ट फ़ील्ड या विधि आईडी इस पर निर्भर करती है कि विधि हैंडल प्रकार एक एक्सेसर है या विधि इनवॉकर है
अप्रयुक्त उशॉर्ट (अप्रयुक्त)

विधि हैंडल प्रकार कोड

स्थिर कीमत विवरण
METHOD_HANDLE_TYPE_STATIC_PUT 0x00 विधि हैंडल एक स्थिर फ़ील्ड सेटर (एक्सेसर) है
METHOD_HANDLE_TYPE_STATIC_GET 0x01 विधि हैंडल एक स्थिर फ़ील्ड गेटर (एक्सेसर) है
METHOD_HANDLE_TYPE_INSTANCE_PUT 0x02 मेथड हैंडल एक इंस्टेंस फ़ील्ड सेटर (एक्सेसर) है
METHOD_HANDLE_TYPE_INSTANCE_GET 0x03 मेथड हैंडल एक इंस्टेंस फील्ड गेटर (एक्सेसर) है
METHOD_HANDLE_TYPE_INVOKE_STATIC 0x04 मेथड हैंडल एक स्टैटिक मेथड इनवॉकर है
METHOD_HANDLE_TYPE_INVOKE_INSTANCE 0x05 मेथड हैंडल एक इंस्टेंस मेथड इनवॉकर है
METHOD_HANDLE_TYPE_INVOKE_CONSTRUCTOR 0x06 मेथड हैंडल एक कंस्ट्रक्टर मेथड इनवोकर है
METHOD_HANDLE_TYPE_INVOKE_DIRECT 0x07 मेथड हैंडल एक डायरेक्ट मेथड इनवॉकर है
METHOD_HANDLE_TYPE_INVOKE_INTERFACE 0x08 विधि हैंडल एक इंटरफ़ेस विधि इनवॉकर है

class_data_item

Class_def_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: कोई नहीं (बाइट-संरेखित)

नाम प्रारूप विवरण
static_fields_size uleb128 इस आइटम में परिभाषित स्थैतिक क्षेत्रों की संख्या
ISSING_FIELDS_SIZE uleb128 इस आइटम में परिभाषित उदाहरण फ़ील्ड की संख्या
direct_methods_size uleb128 इस आइटम में परिभाषित प्रत्यक्ष तरीकों की संख्या
VIRTICE_METHODS_SIZE uleb128 इस आइटम में परिभाषित आभासी विधियों की संख्या
static_fields encoded_field [static_fields_size] परिभाषित स्थैतिक क्षेत्र, एन्कोडेड तत्वों के अनुक्रम के रूप में प्रतिनिधित्व करते हैं। बढ़ते क्रम में field_idx द्वारा फ़ील्ड को सॉर्ट किया जाना चाहिए।
Instry_fields encoded_field [Inst_fields_size] परिभाषित उदाहरण फ़ील्ड, एन्कोडेड तत्वों के अनुक्रम के रूप में प्रतिनिधित्व करते हैं। बढ़ते क्रम में field_idx द्वारा फ़ील्ड को सॉर्ट किया जाना चाहिए।
direct_methods encoded_method [direct_methods_size] परिभाषित प्रत्यक्ष (किसी भी static , private या कंस्ट्रक्टर) विधियों को एन्कोडेड तत्वों के अनुक्रम के रूप में दर्शाया गया है। बढ़ते क्रम में method_idx द्वारा तरीकों को क्रमबद्ध किया जाना चाहिए।
virtual_methods encoded_method [virtual_methods_size] परिभाषित वर्चुअल ( static , private या कंस्ट्रक्टर) तरीकों में से कोई भी, एन्कोडेड तत्वों के अनुक्रम के रूप में दर्शाया गया है। इस सूची में तब तक विरासत में मिली विधियाँ शामिल नहीं होनी चाहिए जब तक कि यह आइटम उस आइटम का प्रतिनिधित्व करता है। बढ़ते क्रम में method_idx द्वारा तरीकों को क्रमबद्ध किया जाना चाहिए। वर्चुअल विधि की method_idx किसी भी प्रत्यक्ष विधि के समान नहीं होनी चाहिए।

नोट: सभी तत्वों के field_id और method_id उदाहरणों को एक ही परिभाषित वर्ग को संदर्भित करना चाहिए।

encoded_field प्रारूप

नाम प्रारूप विवरण
field_idx_diff uleb128 इस फ़ील्ड की पहचान के लिए field_ids सूची में सूचकांक (नाम और डिस्क्रिप्टर शामिल है), सूची में पिछले तत्व के सूचकांक से अंतर के रूप में दर्शाया गया है। एक सूची में पहले तत्व के सूचकांक को सीधे दर्शाया गया है।
access_flags uleb128 क्षेत्र ( public , final , आदि) के लिए झंडे का उपयोग करें। विवरण के लिए " access_flags परिभाषाएँ" देखें।

encoded_method प्रारूप

नाम प्रारूप विवरण
method_idx_diff uleb128 इस विधि की पहचान के लिए method_ids सूची में सूचकांक (नाम और डिस्क्रिप्टर शामिल है), सूची में पिछले तत्व के सूचकांक से अंतर के रूप में दर्शाया गया है। एक सूची में पहले तत्व के सूचकांक को सीधे दर्शाया गया है।
access_flags uleb128 विधि ( public , final , आदि) के लिए झंडे का उपयोग करें। विवरण के लिए " access_flags परिभाषाएँ" देखें।
कोड_बंद uleb128 फ़ाइल की शुरुआत से इस विधि के लिए कोड संरचना के लिए ऑफसेट, या 0 यदि यह विधि या तो abstract या native है। ऑफसेट data अनुभाग में एक स्थान पर होना चाहिए। डेटा का प्रारूप नीचे " code_item " द्वारा निर्दिष्ट किया गया है।

type_list

Class_def_item और proto_id_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
आकार uint सूची का आकार, प्रविष्टियों में
सूची type_item [आकार] सूची के तत्व

टाइप_टेम प्रारूप

नाम प्रारूप विवरण
type_idx उशॉर्ट INDEX type_ids सूची में

code_item

Encoded_method से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

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

try_item प्रारूप

नाम प्रारूप विवरण
start_addr uint इस प्रविष्टि द्वारा कवर किए गए कोड के ब्लॉक का पता प्रारंभ करें। पता पहले कवर किए गए निर्देश की शुरुआत के लिए 16-बिट कोड इकाइयों की एक गिनती है।
insn_count उशॉर्ट इस प्रविष्टि द्वारा कवर 16-बिट कोड इकाइयों की संख्या। अंतिम कोड इकाई कवर (समावेशी) start_addr + insn_count - 1 है।
हैंडलर_ऑफ उशॉर्ट इस प्रविष्टि के लिए encoded_catch_handler के लिए संबद्ध encoded_catch_hander_list की शुरुआत से बाइट्स में ऑफसेट। यह एक encoded_catch_handler की शुरुआत के लिए एक ऑफसेट होना चाहिए।

encoded_catch_handler_list प्रारूप

नाम प्रारूप विवरण
आकार uleb128 इस सूची का आकार, प्रविष्टियों में
सूची encoded_catch_handler [हैंडलर_सिज़] हैंडलर सूचियों की वास्तविक सूची, सीधे (ऑफसेट के रूप में नहीं) का प्रतिनिधित्व किया, और क्रमिक रूप से सम्‍मिलित

encoded_catch_handler प्रारूप

नाम प्रारूप विवरण
आकार sleb128 इस सूची में कैच प्रकार की संख्या। यदि गैर-सकारात्मक है, तो यह कैच प्रकारों की संख्या का नकारात्मक है, और कैच को कैच-ऑल हैंडलर द्वारा पीछा किया जाता है। उदाहरण के लिए: 0 के size का मतलब है कि एक कैच-ऑल है, लेकिन स्पष्ट रूप से टाइप किए गए कैच नहीं हैं। 2 के size का मतलब है कि दो स्पष्ट रूप से टाइप किए गए कैच हैं और कोई कैच-ऑल नहीं है। और -1 के size का मतलब है कि एक कैच -ऑल के साथ एक टाइप किया गया कैच है।
संचालकों encoded_type_addr_pair [ABS (आकार)] abs(size) की धारा एन्कोडेड आइटम, प्रत्येक पकड़े गए प्रकार के लिए, इस क्रम में कि प्रकारों का परीक्षण किया जाना चाहिए।
catch_all_addr ULEB128 (वैकल्पिक) कैच-ऑल हैंडलर का बाइटकोड पता। यह तत्व केवल तभी मौजूद है जब size गैर-सकारात्मक है।

encoded_type_addr_pair प्रारूप

नाम प्रारूप विवरण
type_idx uleb128 अपवाद के प्रकार को पकड़ने के लिए type_ids सूची में सूचकांक
uleb128 संबंधित अपवाद हैंडलर का बायटेकोड पता

debug_info_item

Code_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: कोई नहीं (बाइट-संरेखित)

प्रत्येक debug_info_item एक बौना 3-प्रेरित बाइट-कोडित राज्य मशीन को परिभाषित करता है, जो कि व्याख्या की जाती है, स्थिति तालिका और (संभावित रूप से) एक code_item के लिए स्थानीय चर जानकारी का उत्सर्जन करती है। अनुक्रम एक चर-लंबाई हेडर के साथ शुरू होता है (जिसकी लंबाई विधि मापदंडों की संख्या पर निर्भर करती है), राज्य मशीन बाइटकोड्स द्वारा पीछा किया जाता है, और एक DBG_END_SEQUENCE बाइट के साथ समाप्त होता है।

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

हेडर इस प्रकार है:

नाम प्रारूप विवरण
लाइन_स्टार्ट uleb128 राज्य मशीन की line रजिस्टर के लिए प्रारंभिक मूल्य। एक वास्तविक स्थिति प्रविष्टि का प्रतिनिधित्व नहीं करता है।
parameters_size uleb128 पैरामीटर नामों की संख्या जो एन्कोडेड हैं। एक इंस्टेंस विधि this छोड़कर, एक प्रति विधि पैरामीटर होना चाहिए, यदि कोई हो।
parameter_names ULEB128P1 [पैरामीटर्स_सिज़] विधि पैरामीटर नाम का स्ट्रिंग सूचकांक। NO_INDEX का एक एन्कोडेड मान इंगित करता है कि संबंधित पैरामीटर के लिए कोई नाम उपलब्ध नहीं है। टाइप डिस्क्रिप्टर और हस्ताक्षर विधि डिस्क्रिप्टर और हस्ताक्षर से निहित हैं।

बाइट कोड मान इस प्रकार हैं:

नाम कीमत प्रारूप बहस विवरण
DBG_END_PEATIONENCE 0x00 (कोई नहीं) एक code_item के लिए एक डिबग जानकारी अनुक्रम समाप्त करता है
Dbg_advance_pc 0x01 uleb128 addr_diff addr_diff : पता रजिस्टर में जोड़ने के लिए राशि एक पद प्रविष्टि उत्सर्जित किए बिना पता रजिस्टर को आगे बढ़ाता है
Dbg_advance_line 0x02 sleb128 line_diff line_diff : लाइन रजिस्टर को बदलने के लिए राशि एक पद प्रविष्टि उत्सर्जित किए बिना लाइन रजिस्टर को आगे बढ़ाता है
DBG_START_LOCAL 0x03 ULEB128 register_num
ULEB128P1 NAME_IDX
ULEB128P1 TYPE_IDX
register_num : रजिस्टर जिसमें स्थानीय होगा
name_idx : नाम का स्ट्रिंग इंडेक्स
type_idx : प्रकार का सूचकांक टाइप करें
वर्तमान पते पर एक स्थानीय चर का परिचय देता है। या तो name_idx या type_idx यह इंगित करने के लिए NO_INDEX हो सकता है कि यह मान अज्ञात है।
Dbg_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 है, हालांकि, एक ही डेटा को Opcode DBG_START_LOCAL का उपयोग करके अधिक कुशलता से दर्शाया जा सकता है।)

नोट: हस्ताक्षर को संभालने के बारे में कैवेट्स के लिए नीचे " dalvik.annotation.Signature " के तहत चर्चा देखें।

DBG_END_LOCAL 0x05 ULEB128 register_num register_num : रजिस्टर जिसमें स्थानीय था वर्तमान पते पर दायरे से बाहर एक वर्तमान में एक स्थानीय चर को चिह्नित करता है
DBG_RESTART_LOCAL 0x06 ULEB128 register_num register_num : पुनरारंभ करने के लिए रजिस्टर करें वर्तमान पते पर एक स्थानीय चर को फिर से पेश करता है। नाम और प्रकार अंतिम स्थानीय के समान हैं जो निर्दिष्ट रजिस्टर में रहते थे।
Dbg_set_prologue_end 0x07 (कोई नहीं) prologue_end स्टेट मशीन रजिस्टर सेट करता है, यह दर्शाता है कि जोड़ा गया अगली स्थिति प्रविष्टि को एक विधि प्रोलॉग (एक विधि ब्रेकपॉइंट के लिए एक उपयुक्त स्थान) का अंत माना जाना चाहिए। prologue_end रजिस्टर किसी भी विशेष ( >= 0x0a ) opcode द्वारा साफ किया जाता है।
Dbg_set_epilogue_begin 0x08 (कोई नहीं) epilogue_begin स्टेट मशीन रजिस्टर को सेट करता है, यह दर्शाता है कि जोड़ा गया अगली स्थिति प्रविष्टि को एक विधि उपसंहार की शुरुआत माना जाना चाहिए (विधि से बाहर निकलने से पहले निष्पादन को निलंबित करने के लिए एक उपयुक्त स्थान)। epilogue_begin रजिस्टर किसी भी विशेष ( >= 0x0a ) opcode द्वारा साफ किया जाता है।
Dbg_set_file 0x09 ULEB128P1 NAME_IDX name_idx : स्रोत फ़ाइल नाम का स्ट्रिंग सूचकांक; NO_INDEX यदि अज्ञात है इंगित करता है कि सभी बाद की लाइन नंबर प्रविष्टियाँ code_item में निर्दिष्ट डिफ़ॉल्ट नाम के बजाय इस स्रोत फ़ाइल नाम का संदर्भ देती हैं
विशेष ओपकोड्स 0x0a ... 0xff (कोई नहीं) line और address रजिस्टरों को आगे बढ़ाता है, एक स्थिति प्रविष्टि का उत्सर्जन करता है, और prologue_end और epilogue_begin साफ करता है। विवरण के लिए नीचे देखें।

विशेष ओपकोड्स

0x0a और 0xff (समावेशी) के बीच मानों के साथ opcodes दोनों 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)

annotations_directory_item

Class_def_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
class_annotations_off uint फ़ाइल की शुरुआत से सीधे क्लास पर किए गए एनोटेशन तक, या 0 यदि कक्षा में कोई प्रत्यक्ष एनोटेशन नहीं है। ऑफसेट, यदि गैर-शून्य, data अनुभाग में एक स्थान पर होना चाहिए। डेटा का प्रारूप नीचे " annotation_set_item " द्वारा निर्दिष्ट किया गया है।
Fields_size uint इस आइटम द्वारा एनोटेट किए गए फ़ील्ड की गिनती
annotated_methods_size uint इस आइटम द्वारा एनोटेट किए गए तरीकों की गिनती
annotated_parameters_size uint इस आइटम द्वारा एनोटेट किए गए विधि पैरामीटर सूचियों की गिनती
Field_annotations field_annotation [fields_size] (वैकल्पिक) संबंधित क्षेत्र एनोटेशन की सूची। field_idx द्वारा सूची के तत्वों को बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए।
method_annotations method_annotation [meaths_size] (वैकल्पिक) संबंधित विधि एनोटेशन की सूची। method_idx द्वारा सूची के तत्वों को बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए।
पैरामीटर_एनोटेशन Parameter_annotation [parameters_size] (वैकल्पिक) संबंधित विधि पैरामीटर एनोटेशन की सूची। method_idx द्वारा सूची के तत्वों को बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए।

नोट: सभी तत्वों के field_id और method_id उदाहरणों को एक ही परिभाषित वर्ग को संदर्भित करना चाहिए।

फ़ील्ड_नोटेशन प्रारूप

नाम प्रारूप विवरण
field_idx uint फ़ील्ड की पहचान के लिए field_ids सूची में सूचकांक एनोटेट किया जा रहा है
annotations_off uint फ़ाइल की शुरुआत से फ़ील्ड के लिए एनोटेशन की सूची तक ऑफसेट। ऑफसेट data अनुभाग में एक स्थान पर होना चाहिए। डेटा का प्रारूप नीचे " annotation_set_item " द्वारा निर्दिष्ट किया गया है।

विधि_नोटेशन प्रारूप

नाम प्रारूप विवरण
method_idx uint विधि की पहचान के लिए method_ids सूची में सूचकांक एनोटेट किया जा रहा है
annotations_off uint फ़ाइल की शुरुआत से विधि के लिए एनोटेशन की सूची तक ऑफसेट। ऑफसेट data अनुभाग में एक स्थान पर होना चाहिए। डेटा का प्रारूप नीचे " annotation_set_item " द्वारा निर्दिष्ट किया गया है।

पैरामीटर_नोटेशन प्रारूप

नाम प्रारूप विवरण
method_idx uint विधि की पहचान के लिए method_ids सूची में सूचकांक जिनके मापदंडों को एनोटेट किया जा रहा है
annotations_off uint विधि मापदंडों के लिए एनोटेशन की सूची में फ़ाइल की शुरुआत से ऑफसेट। ऑफसेट data अनुभाग में एक स्थान पर होना चाहिए। डेटा का प्रारूप नीचे " annotation_set_ref_list " द्वारा निर्दिष्ट किया गया है।

annotation_set_ref_list

Parameter_annotations_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
आकार uint सूची का आकार, प्रविष्टियों में
सूची annotation_set_ref_item [आकार] सूची के तत्व

annotation_set_ref_item प्रारूप

नाम प्रारूप विवरण
annotations_off uint फ़ाइल की शुरुआत से संदर्भित एनोटेशन सेट या 0 के लिए ऑफसेट करें यदि इस तत्व के लिए कोई एनोटेशन नहीं हैं। ऑफसेट, यदि गैर-शून्य, data अनुभाग में एक स्थान पर होना चाहिए। डेटा का प्रारूप नीचे " annotation_set_item " द्वारा निर्दिष्ट किया गया है।

annotation_set_item

Annotations_directory_item, field_annotations_item, method_annotations_item, और annotation_set_ref_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: 4 बाइट्स

नाम प्रारूप विवरण
आकार uint सेट का आकार, प्रविष्टियों में
प्रविष्टियां annotation_off_item [आकार] सेट के तत्व. type_idx द्वारा तत्वों को बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए।

annotation_off_item प्रारूप

नाम प्रारूप विवरण
ennotation_off uint फ़ाइल की शुरुआत से एक एनोटेशन तक ऑफसेट। ऑफसेट data अनुभाग में एक स्थान पर होना चाहिए, और उस स्थान पर डेटा का प्रारूप नीचे " annotation_item " द्वारा निर्दिष्ट किया गया है।

ennotation_item

Annotation_set_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: कोई नहीं (बाइट-संरेखित)

नाम प्रारूप विवरण
दृश्यता ubyte इस एनोटेशन की इच्छित दृश्यता (नीचे देखें)
टिप्पणी encoded_annotation एन्कोडेड एनोटेशन सामग्री, ऊपर " encoded_annotation प्रारूप" द्वारा वर्णित प्रारूप में " encoded_value एन्कोडिंग" के तहत ऊपर।

दृश्यता मान

ये annotation_item में visibility क्षेत्र के लिए विकल्प हैं:

नाम कीमत विवरण
दृश्यता_बिल्ड 0x00 केवल निर्माण समय पर दिखाई देने का इरादा है (जैसे, अन्य कोड के संकलन के दौरान)
Visibility_Runtime 0x01 रनटाइम पर दिखाई देने का इरादा है
दृश्यता_सिस्टम 0x02 रनटाइम पर दिखाई देने का इरादा है, लेकिन केवल अंतर्निहित प्रणाली के लिए (और नियमित उपयोगकर्ता कोड के लिए नहीं)

encoded_array_item

Class_def_item से संदर्भित

डेटा अनुभाग में दिखाई देता है

संरेखण: कोई नहीं (बाइट-संरेखित)

नाम प्रारूप विवरण
कीमत encoded_array उपरोक्त " encoded_value एन्कोडिंग" के तहत " encoded_array प्रारूप" द्वारा निर्दिष्ट प्रारूप में एन्कोडेड सरणी मूल्य का प्रतिनिधित्व करने वाले बाइट्स।

Hiddenapi_class_data_item

इस खंड में प्रत्येक वर्ग द्वारा उपयोग किए जाने वाले प्रतिबंधित इंटरफेस पर डेटा शामिल है।

नोट: हिडन एपीआई सुविधा को एंड्रॉइड 10.0 में पेश किया गया था और यह केवल बूट क्लास पथ में कक्षाओं की DEX फ़ाइलों पर लागू होता है। नीचे वर्णित झंडे की सूची को एंड्रॉइड के भविष्य के रिलीज़ में बढ़ाया जा सकता है। अधिक जानकारी के लिए, गैर-एसडीके इंटरफेस पर प्रतिबंध देखें।

नाम प्रारूप विवरण
आकार uint अनुभाग का कुल आकार
ऑफसेट uint [] class_idx द्वारा अनुक्रमित ऑफसेट की सरणी। INDEX class_idx पर एक शून्य सरणी प्रविष्टि का मतलब है कि या तो इस class_idx के लिए कोई डेटा नहीं है, या सभी छिपे हुए एपीआई झंडे शून्य हैं। अन्यथा सरणी प्रविष्टि गैर-शून्य है और इसमें अनुभाग की शुरुआत से इस class_idx के लिए छिपे हुए एपीआई झंडे की एक सरणी तक एक ऑफसेट होता है।
झंडे ULEB128 [] प्रत्येक वर्ग के लिए छिपे हुए एपीआई झंडे के संक्षिप्त सरणियाँ। संभावित ध्वज मान नीचे दी गई तालिका में वर्णित हैं। झंडे को उसी क्रम में एन्कोड किया जाता है जैसे कि फ़ील्ड और विधियां कक्षा डेटा में एन्कोड किए जाते हैं।

प्रतिबंध ध्वज प्रकार:

नाम कीमत विवरण
श्वेत सूची 0 इंटरफेस जो स्वतंत्र रूप से उपयोग किए जा सकते हैं और आधिकारिक तौर पर प्रलेखित एंड्रॉइड फ्रेमवर्क पैकेज इंडेक्स के हिस्से के रूप में समर्थित हैं।
ग्रेलिस्ट 1 गैर-एसडीके इंटरफेस जो एप्लिकेशन के लक्ष्य एपीआई स्तर की परवाह किए बिना उपयोग किए जा सकते हैं।
काला सूची में डालना 2 गैर-एसडीके इंटरफेस जो एप्लिकेशन के लक्ष्य एपीआई स्तर की परवाह किए बिना उपयोग नहीं किया जा सकता है। इनमें से किसी एक इंटरफेस तक पहुंचने से रनटाइम त्रुटि होती है।
ग्रीलिस्ट ‘मैक्स‘ ओ 3 गैर-एसडीके इंटरफेस जो कि एंड्रॉइड 8.x और नीचे के लिए उपयोग किए जा सकते हैं जब तक कि वे प्रतिबंधित न हों।
greylist ‘max‘ p 4 गैर-एसडीके इंटरफेस जो कि एंड्रॉइड 9.x के लिए उपयोग किए जा सकते हैं जब तक कि वे प्रतिबंधित न हों।
greylist ‘max the q 5 गैर-एसडीके इंटरफेस जो कि एंड्रॉइड 10.x के लिए उपयोग किए जा सकते हैं जब तक कि वे प्रतिबंधित न हों।
Greylist ‘Max - R 6 गैर-एसडीके इंटरफेस जो कि एंड्रॉइड 11.x के लिए उपयोग किए जा सकते हैं जब तक कि वे प्रतिबंधित न हों।

तंत्र एनोटेशन

सिस्टम एनोटेशन का उपयोग कक्षाओं (और विधियों और क्षेत्रों) के बारे में चिंतनशील जानकारी के विभिन्न टुकड़ों का प्रतिनिधित्व करने के लिए किया जाता है। यह जानकारी आम तौर पर केवल क्लाइंट (गैर-सिस्टम) कोड द्वारा अप्रत्यक्ष रूप से एक्सेस की जाती है।

सिस्टम एनोटेशन को .dex फ़ाइलों में दृश्यता के साथ VISIBILITY_SYSTEM के साथ एनोटेशन के रूप में दर्शाया गया है।

dalvik.annotation.annotationDefault

एनोटेशन इंटरफेस में तरीकों पर दिखाई देता है

एक AnnotationDefault एनोटेशन प्रत्येक एनोटेशन इंटरफ़ेस से जुड़ा हुआ है जो डिफ़ॉल्ट बाइंडिंग को इंगित करना चाहता है।

नाम प्रारूप विवरण
कीमत टिप्पणी इस एनोटेशन के लिए डिफ़ॉल्ट बाइंडिंग, इस प्रकार के एनोटेशन के रूप में प्रतिनिधित्व किया गया। एनोटेशन को एनोटेशन द्वारा परिभाषित सभी नामों को शामिल करने की आवश्यकता नहीं है; लापता नामों में बस चूक नहीं होती है।

dalvik.annotation.enclosingclass

कक्षाओं पर दिखाई देता है

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

नाम प्रारूप विवरण
कीमत कक्षा वह वर्ग जो सबसे अधिक बारीकी से इस वर्ग को स्कोप करता है

dalvik.annotation.enclosingmethod

कक्षाओं पर दिखाई देता है

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

नाम प्रारूप विवरण
कीमत तरीका वह विधि जो सबसे बारीकी से इस वर्ग को स्कोप करती है

dalvik.annotation.innerclass

कक्षाओं पर दिखाई देता है

एक InnerClass एनोटेशन प्रत्येक वर्ग से जुड़ा हुआ है जिसे दूसरे वर्ग की परिभाषा के शाब्दिक दायरे में परिभाषित किया गया है। इस एनोटेशन के पास कोई भी वर्ग भी या तो EnclosingClass एनोटेशन या EnclosingMethod एनोटेशन होना चाहिए।

नाम प्रारूप विवरण
नाम डोरी मूल रूप से इस वर्ग का सरल नाम घोषित किया गया (किसी भी पैकेज उपसर्ग सहित)। यदि यह वर्ग गुमनाम है, तो नाम null है।
AccessFlags int यहाँ मूल रूप से कक्षा के एक्सेस फ्लैग घोषित किए गए (जो स्रोत भाषा और लक्ष्य वर्चुअल मशीन के निष्पादन मॉडल के बीच बेमेल के कारण प्रभावी झंडे से भिन्न हो सकते हैं)

dalvik.annotation.memberclasses

कक्षाओं पर दिखाई देता है

एक MemberClasses एनोटेशन प्रत्येक वर्ग से जुड़ा होता है जो सदस्य वर्गों की घोषणा करता है। (एक सदस्य वर्ग एक प्रत्यक्ष आंतरिक वर्ग है जिसका एक नाम है।)

नाम प्रारूप विवरण
कीमत कक्षा[] सदस्य वर्गों का सरणी

dalvik.annotation.methodparameters

तरीकों पर दिखाई देता है

नोट: यह एनोटेशन एंड्रॉइड 7.1 के बाद जोड़ा गया था। पहले के एंड्रॉइड रिलीज पर इसकी उपस्थिति को नजरअंदाज कर दिया जाएगा।

एक MethodParameters एनोटेशन वैकल्पिक है और इसका उपयोग पैरामीटर मेटाडेटा जैसे पैरामीटर नाम और संशोधक प्रदान करने के लिए किया जा सकता है।

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

जब पैरामीटर मेटाडेटा शामिल है, तो कंपाइलरों को उत्पन्न कक्षाओं जैसे कि एनम्स के लिए जानकारी शामिल होनी चाहिए, क्योंकि पैरामीटर मेटाडेटा में शामिल है कि एक पैरामीटर सिंथेटिक या अनिवार्य है या नहीं।

एक MethodParameters एनोटेशन केवल व्यक्तिगत विधि मापदंडों का वर्णन करता है। इसलिए, संकलक कोड-आकार और रनटाइम दक्षता के लिए पूरी तरह से कंस्ट्रक्टरों और तरीकों के लिए एनोटेशन को छोड़ सकते हैं, जिनके पास कोई पैरामीटर नहीं है।

नीचे दिए गए सरणियों को विधि से जुड़े method_id_item डेक्स संरचना के लिए एक ही आकार होना चाहिए, अन्यथा एक java.lang.reflect.MalformedParametersException को रनटाइम पर फेंक दिया जाएगा।

वह names().length accessFlags().length method_id_item.proto_idx - type_list.size proto_id_item.parameters_off -

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

नाम प्रारूप विवरण
नाम डोरी[] संबंधित विधि के लिए औपचारिक मापदंडों के नाम। सरणी शून्य नहीं होनी चाहिए, लेकिन अगर कोई औपचारिक पैरामीटर नहीं हैं तो खाली होना चाहिए। यदि उस सूचकांक के साथ औपचारिक पैरामीटर का कोई नाम नहीं है, तो सरणी में एक मान शून्य होना चाहिए।
यदि पैरामीटर नाम स्ट्रिंग्स खाली हैं या शामिल हैं java.lang.reflect.MalformedParametersException
AccessFlags int[] संबंधित विधि के लिए औपचारिक मापदंडों के एक्सेस झंडे। सरणी शून्य नहीं होनी चाहिए, लेकिन अगर कोई औपचारिक पैरामीटर नहीं हैं तो खाली होना चाहिए।
मान निम्न मानों के साथ थोड़ा मास्क है:
  • 0x0010: अंतिम, पैरामीटर को अंतिम घोषित किया गया था
  • 0x1000: सिंथेटिक, पैरामीटर को संकलक द्वारा पेश किया गया था
  • 0x8000: अनिवार्य, पैरामीटर सिंथेटिक है, लेकिन भाषा विनिर्देश द्वारा भी निहित है
यदि कोई बिट इस सेट के बाहर सेट किया गया है, तो एक java.lang.reflect.MalformedParametersException को रनटाइम पर फेंक दिया जाएगा।

dalvik.annotation.signature

कक्षाओं, क्षेत्रों और तरीकों पर दिखाई देता है

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

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

नाम प्रारूप विवरण
कीमत डोरी[] इस वर्ग या सदस्य के हस्ताक्षर, स्ट्रिंग्स की एक सरणी के रूप में जो एक साथ समेटे हुए हैं

dalvik.annotation.throws

तरीकों पर दिखाई देता है

एक Throws एनोटेशन प्रत्येक विधि से जुड़ा होता है जिसे एक या अधिक अपवाद प्रकारों को फेंकने के लिए घोषित किया जाता है।

नाम प्रारूप विवरण
कीमत कक्षा[] अपवाद प्रकारों की सरणी फेंक दी गई