यह दस्तावेज़ .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 के तौर पर |
---|---|---|---|
00 | 0 | 0 | -1 |
01 | 1 | 1 | 0 |
7f | -1 | 127 | 126 |
80 7f | -128 | 16256 | 16255 |
फ़ाइल लेआउट
नाम | फ़ॉर्मैट | ब्यौरा |
---|---|---|
हेडर | हेडर_आइटम | हेडर |
स्ट्रिंग_आईडी | स्ट्रिंग_आईडी आइटम[] | स्ट्रिंग आइडेंटिफ़ायर की सूची. ये सभी स्ट्रिंग के आइडेंटिफ़ायर हैं इसका इस्तेमाल इस फ़ाइल में, अंदरूनी नामकरण (उदाहरण के लिए, टाइप डिस्क्रिप्टर) के लिए किया जाता है या कॉन्सटेंट ऑब्जेक्ट के तौर पर दिखते हैं. इस सूची को क्रम से लगाना चाहिए इसके लिए, 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_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 सरोगेट कोड यूनिट (यानी,
|
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 है, जिसके एलिमेंट आर्ग्युमेंट के मुताबिक हैं बूटस्ट्रैप लिंकर मेथड को दिया जाता है. पहले तीन तर्क ये हैं:
- बूटस्ट्रैप लिंकर मेथड (VALUE_METHOD_HANDLE) को दिखाने वाला मेथड हैंडल.
- वह तरीका नाम जिससे बूटस्ट्रैप लिंकर को रिज़ॉल्व किया जाना चाहिए (VALUE_STRING).
- हल किए जाने वाले तरीके के नाम से जुड़ा तरीका (VALUE_METHOD_TYPE).
कोई भी अतिरिक्त आर्ग्युमेंट, बूटस्ट्रैप लिंकर तरीके में पास की जाने वाली कॉन्सटैंट वैल्यू होते हैं. ये तर्क हैं जिसे बिना किसी तरह के कन्वर्ज़न के क्रम में पास किया गया हो.
बूटस्ट्रैप लिंकर वाले तरीके को दिखाने वाले तरीके के हैंडल में, रिटर्न टाइप java.lang.invoke.CallSite
होना चाहिए. पहले तीन पैरामीटर टाइप हैं:
java.lang.invoke.Lookup
java.lang.String
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 का इस्तेमाल अच्छी तरह से करता है.)
नोट:
" |
डीबीजी_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 को यहां फेंक दिया जाएगा
रनटाइम.
|
ऐक्सेसफ़्लैग | पूर्णांक[] | इससे जुड़े तरीके के लिए, औपचारिक पैरामीटर के ऐक्सेस फ़्लैग. कॉन्टेंट बनाने
श्रेणी शून्य नहीं होनी चाहिए, लेकिन अगर कोई औपचारिक पैरामीटर नहीं है, तो रिक्त होना चाहिए. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है मान एक बिट मास्क है, जिसमें ये मान हैं:
java.lang.reflect.MalformedParametersException को रनटाइम पर फेंक दिया जाएगा.
|
Dalvik.annotation.हस्ताक्षर
दिखता है क्लास, फ़ील्ड, और मेथड
हर क्लास के साथ एक Signature
एनोटेशन अटैच किया जाता है.
फ़ील्ड या तरीका है, जो ज़्यादा जटिल प्रकार के रूप में परिभाषित किया गया है.
को type_id_item
से दिखाया जा सकता है. कॉन्टेंट बनाने
.dex
फ़ॉर्मैट, हस्ताक्षर का फ़ॉर्मैट तय नहीं करता; यह
का मतलब सिर्फ़ सोर्स के हस्ताक्षर के बारे में बताने के लिए है
को सही तरीके से लागू करने के लिए उस भाषा की
सिमेंटिक्स. इसलिए, हस्ताक्षर को आम तौर पर पार्स नहीं किया जाता या उनकी पुष्टि नहीं की जाती
वर्चुअल मशीन पर निर्भर करता है. हस्ताक्षर के साथ ही
बेहतर लेवल वाले एपीआई और टूल (जैसे, डीबगर) का इस्तेमाल करना. किसी
हस्ताक्षर करना ज़रूरी है, ताकि हस्ताक्षर करने के बाद
सिर्फ़ मान्य हस्ताक्षर पाने के बारे में लगाए जाने वाले अनुमान, जो साफ़ तौर पर
जो वाक्यात्मक रूप से आने की संभावना के बजाय
अमान्य हस्ताक्षर.
सिग्नेचर स्ट्रिंग में काफ़ी डुप्लीकेट कॉन्टेंट होता है, इसलिए
Signature
एनोटेशन को इसकी कलेक्शन के तौर पर परिभाषित किया गया है
स्ट्रिंग, जहां डुप्लीकेट एलिमेंट सामान्य रूप से उसी जानकारी को दिखाते हैं
शामिल है और हस्ताक्षर को वाक्य के संयोजन के रूप में लिया जाता है.
अरे में मौजूद सभी स्ट्रिंग. पुल करने के तरीके के बारे में कोई नियम नहीं है
हस्ताक्षर को अलग-अलग स्ट्रिंग में बांटकर अलग करना; कि वह पूरी तरह से
.dex
फ़ाइलें जनरेट करने वाले टूल.
नाम | फ़ॉर्मैट | ब्यौरा |
---|---|---|
मान | String[] | स्ट्रिंग या स्ट्रिंग के कलेक्शन के तौर पर, इस क्लास या सदस्य के हस्ताक्षर एक साथ जोड़ना ही है |
Dalvik.annotation.थ्रॉ
तरीकों पर जानकारी दिखाई गई है
हर उस तरीके पर Throws
एनोटेशन जोड़ा जाता है जो
एक या उससे ज़्यादा अपवाद टाइप करने के लिए एलान किया गया है.
नाम | फ़ॉर्मैट | ब्यौरा |
---|---|---|
मान | क्लास[] | दिए गए अपवाद टाइप का अरे |