รูปแบบไฟล์ที่ดำเนินการได้ Dalvik

เอกสารนี้อธิบายเลย์เอาต์และเนื้อหาของ .dex ซึ่งจะใช้เก็บชุดคำจำกัดความของคลาสและ ที่เกี่ยวข้อง ข้อมูลเพิ่มเติม

คำแนะนำเกี่ยวกับประเภท

ชื่อ คำอธิบาย
ไบต์ ลงชื่อเข้าใช้แบบ 8 บิต
ยูไบต์ Int แบบ 8 บิตที่ไม่มีเครื่องหมาย
วิดีโอสั้น ลงชื่อเข้าใช้แบบ 16 บิต, Little-endian
Ushort Int 16 บิต, Little-endian
Int ลงชื่อเข้าใช้ 32 บิต, Little-endian
Uint Int 32 บิต, Little-endian
ยาว ลงชื่อเข้าใช้แบบ 64 บิต, Little-endian
อูลอง Int 64 บิต, Little-endian
Sleb128 ลงชื่อ LEB128 ความยาวตัวแปร (ดูด้านล่าง)
Uleb128 LEB128 ที่ไม่มีการรับรอง ความยาวตัวแปร (ดูด้านล่าง)
Uleb128p1 LEB128 บวก 1 ที่ไม่มีการรับรอง มีความยาวตัวแปร (ดูด้านล่าง)

LEB128

LEB128 ("Little-Endian Base 128") คือ การเข้ารหัสความยาวตัวแปรสำหรับ จำนวนจำนวนเต็มที่มีการลงชื่อหรือไม่ลงนามที่กำหนดเอง รูปแบบคือ ยืมมาจาก DWARF3 ในไฟล์ .dex จะมีการใช้ LEB128 เพื่อ เข้ารหัสจำนวน 32 บิต

ค่าที่เข้ารหัส LEB128 แต่ละค่าประกอบด้วย 1-5 ไบต์ ซึ่งรวมกันแล้วจะแสดงเป็นค่า 32 บิตเพียงค่าเดียว ชิ้น ไบต์มีชุดบิตที่สำคัญที่สุดยกเว้นไบต์สุดท้ายใน ตามลำดับ ซึ่งมีบิตสำคัญที่สุดอย่างชัดเจน ส่วนที่เหลือ 7 บิตในแต่ละไบต์คือเพย์โหลด ด้วย 7 ที่มีนัยสำคัญน้อยที่สุด บิตของจำนวนในไบต์แรก, 7 ถัดไปในไบต์ที่สอง ไบต์ เป็นต้น ในกรณีของ LEB128 ที่ลงนามแล้ว (sleb128) บิตเพย์โหลดที่สำคัญที่สุดของไบต์สุดท้ายในลำดับคือ เพิ่มเติมเพื่อสร้างค่าสุดท้าย ในเคสที่ไม่ได้ลงนาม (uleb128) บิตใดๆ ที่ไม่ได้แสดงไว้อย่างชัดแจ้งคือ ตีความเป็น 0

แผนภาพบิตไวส์ของค่า LEB128 แบบ 2 ไบต์
ไบต์แรก ไบต์ที่สอง
1 บิต6 บิต5 บิต4 บิต3 บิต2 บิต1 บิต0 0 บิต13 บิต12 บิต11 บิต10 บิต9 บิต8 บิต7

ตัวแปร uleb128p1 ใช้เพื่อแสดงสัญลักษณ์ โดยที่ค่าที่นำเสนอเป็นค่าบวกหนึ่งที่เข้ารหัส ในฐานะ uleb128 การดำเนินการนี้จะทำให้การเข้ารหัสของ -1 (หรืออาจเรียกว่าค่า 0xffffffff ที่ไม่มีเครื่องหมาย) — แต่ไม่มีจำนวนลบอื่นๆ — ไบต์เดียว และ มีประโยชน์ในกรณีต่างๆ ที่ตัวเลขที่แสดงต้อง ไม่ติดลบหรือ -1 (หรือ 0xffffffff) และที่ไม่อนุญาตให้ใช้ค่าลบอื่นๆ (หรือที่ไม่มีเครื่องหมายขนาดใหญ่ )

ต่อไปนี้เป็นตัวอย่างของรูปแบบ

ลำดับที่เข้ารหัส ในชื่อ sleb128 ในชื่อ uleb128 ในชื่อ uleb128p1
0000-1
01110
7f-1127126
80 7F-1281625616255

เลย์เอาต์ของไฟล์

ชื่อ รูปแบบ คำอธิบาย
ส่วนหัว ส่วนหัว_รายการ ส่วนหัว
รหัสสตริง string_id_item[] รายการตัวระบุสตริง พารามิเตอร์เหล่านี้เป็นตัวระบุสำหรับสตริงทั้งหมด ไฟล์นี้จะใช้ในการตั้งชื่อภายใน (เช่น ข้อบ่งชี้ประเภท) หรือเป็นออบเจ็กต์คงที่ที่โค้ด ใช้อ้างอิง ต้องจัดเรียงรายการนี้ ตามเนื้อหาสตริง โดยใช้ค่าจุดโค้ด UTF-16 (ไม่ใช่ใน ภาษาที่ละเอียดอ่อน) และต้องไม่มีรายการที่ซ้ำกัน
type_id type_id_item[] รายการตัวระบุประเภท สิ่งเหล่านี้เป็นตัวระบุทุกประเภท (คลาส อาร์เรย์ หรือประเภทพื้นฐาน) ที่อ้างถึงโดยไฟล์นี้ ไม่ว่าจะมีการกำหนด ในไฟล์หรือไม่ รายการนี้ต้องจัดเรียงตาม string_id และต้องไม่มีรายการที่ซ้ำกัน
รหัสโปรโต proto_id_item[] รายการตัวระบุต้นแบบของเมธอด สิ่งเหล่านี้คือตัวระบุสำหรับทุกคน ต้นแบบที่ไฟล์นี้อ้างถึง รายการนี้ต้องจัดเรียง ประเภทการคืนสินค้า (ตามดัชนี type_id) คำสั่งซื้อหลัก จากนั้น ตามรายการอาร์กิวเมนต์ (การเรียงลำดับแบบพจนานุกรม แต่ละอาร์กิวเมนต์ เรียงลำดับตามดัชนี type_id) รายการต้องไม่ มีรายการที่ซ้ำกัน
รหัสฟิลด์ Field_id_item[] รายการตัวระบุได้ รายการเหล่านี้คือตัวระบุสําหรับทุกช่อง ที่อ้างถึงโดยไฟล์นี้ ไม่ว่าจะระบุไว้ในไฟล์หรือไม่ก็ตาม ช่วงเวลานี้ ต้องจัดเรียงรายการ โดยระบุประเภทที่กำหนด (ภายในวันที่ type_id ดัชนี) คือลำดับหลัก ชื่อช่อง (ตามดัชนี string_id) เป็นลำดับขั้นกลางและประเภท (ตามดัชนี type_id) เป็นลำดับรอง รายการนี้ต้องไม่มีรายการที่ซ้ำกัน
รหัสเมธอด method_id_item[] รายการตัวระบุเมธอด รายการเหล่านี้คือตัวระบุสําหรับทุกวิธีการ ที่อ้างถึงโดยไฟล์นี้ ไม่ว่าจะระบุไว้ในไฟล์หรือไม่ก็ตาม ช่วงเวลานี้ ต้องจัดเรียงรายการ โดยระบุประเภทที่กำหนด (ภายในวันที่ type_id ดัชนี) เป็นลำดับหลัก ชื่อวิธีการ (ตาม string_id ดัชนี) คือลำดับขั้นกลาง และต้นแบบของเมธอด (โดย proto_id) คือลำดับย่อย รายการต้องไม่ มีรายการที่ซ้ำกัน
class_defs class_def_item[] รายการคำจำกัดความของคลาส คลาสจะต้องได้รับการเรียงลำดับตาม Superclass ของคลาสและอินเทอร์เฟซที่นำไปใช้จะปรากฏใน ก่อนหน้าคลาสที่อ้างอิง นอกจากนี้ ไม่ถูกต้องสำหรับ คำจำกัดความของคลาสที่มีชื่อเดียวกันจะปรากฏมากกว่า 1 ครั้งใน รายการ
รหัสไซต์การโทร call_site_id_item[] เรียกรายการตัวระบุเว็บไซต์ ข้อมูลเหล่านี้เป็นตัวระบุสำหรับเว็บไซต์การโทรทั้งหมด ที่อ้างถึงโดยไฟล์นี้ ไม่ว่าจะระบุไว้ในไฟล์หรือไม่ก็ตาม รายการนี้ ต้องจัดเรียงตาม call_site_off จากน้อยไปหามาก
แฮนเดิลเมธอด method_handle_item[] เมธอดจัดการเมธอด รายการแฮนเดิลเมธอดทั้งหมดที่ไฟล์นี้อ้างถึง กำหนดไว้ในไฟล์หรือไม่ รายการนี้ไม่ได้จัดเรียงและอาจมี ซ้ำกันซึ่งจะสอดคล้องกับอินสแตนซ์ที่ใช้จัดการเมธอดที่ต่างกันตามตรรกะ
ข้อมูล ยูไบต์[] พื้นที่ข้อมูล ซึ่งมีข้อมูลการสนับสนุนทั้งหมดสำหรับตารางที่แสดงข้างต้น แต่ละรายการมีข้อกำหนดการตรวจสอบความสอดคล้องที่แตกต่างกัน และ ไบต์ Padding จะถูกแทรกก่อนแต่ละรายการหากจำเป็น การจัดวางที่เหมาะสม
ข้อมูลลิงก์ ยูไบต์[] ข้อมูลที่ใช้ในไฟล์ที่ลิงก์แบบคงที่ รูปแบบของข้อมูลใน ส่วนนี้ไม่ได้ระบุในเอกสารนี้ ส่วนนี้ว่างเปล่าในไฟล์ที่ไม่ได้ลิงก์ และการใช้งานรันไทม์ อาจนำไปใช้ตามความเหมาะสม

คำจำกัดความของบิตฟิลด์ สตริง และคงที่

DEX_FILE_MAGIC

ฝังใน header_item

อาร์เรย์/สตริงคงที่ DEX_FILE_MAGIC คือรายการของ ไบต์ที่ต้องปรากฏที่ตอนต้นของไฟล์ .dex เพื่อให้จำได้ว่าเป็น มูลค่าที่ตั้งใจ มีบรรทัดใหม่ ("\n" หรือ 0x0a) และ ไบต์ที่เป็นค่าว่าง ("\0" หรือ 0x00) เพื่อช่วย เพื่อตรวจหาความเสียหายบางรูปแบบ ค่ายัง จะเข้ารหัสหมายเลขเวอร์ชันของรูปแบบเป็นเลขทศนิยม 3 หลัก ซึ่งเป็น ซึ่งจะเพิ่มขึ้นเรื่อยๆ เมื่อรูปแบบมีการพัฒนาไปในทิศทางเดียวกัน

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 เพื่อรวมที่ซ่อนอยู่ ข้อมูล API ที่ใช้ได้กับไฟล์ DEX ในเส้นทางคลาสการเปิดเครื่องเท่านั้น

หมายเหตุ: การรองรับเวอร์ชัน 038 ของรูปแบบที่เพิ่มเข้ามาใน Android 8.0 เวอร์ชัน 038 ได้เพิ่มไบต์โค้ดใหม่ (invoke-polymorphic และ invoke-custom) และ สำหรับแฮนเดิลเมธอด

หมายเหตุ: รองรับเวอร์ชัน 037 ของ รูปแบบนี้มีการเพิ่มไว้ในรุ่น Android 7.0 ก่อนหน้าเวอร์ชัน 037 มากที่สุด Android เวอร์ชันต่างๆ ใช้รูปแบบ 035 มีเพียง ความแตกต่างระหว่างเวอร์ชัน 035 และ 037 คือ เพิ่มเมธอดเริ่มต้นและการปรับเปลี่ยนinvoke

หมายเหตุ: รูปแบบก่อนหน้านี้อย่างน้อย 2-3 รูปแบบ ใช้ในซอฟต์แวร์รุ่นสาธารณะที่เผยแพร่ในวงกว้าง ตัวอย่างเช่น มีการใช้เวอร์ชัน 009 สำหรับรุ่น M3 ของ แพลตฟอร์ม Android (พฤศจิกายน - ธันวาคม 2007) และมีการใช้เวอร์ชัน 013 สำหรับ Android รุ่น M5 (กุมภาพันธ์ - มีนาคม 2008) ในแง่ต่างๆ ก่อนหน้านี้ ของรูปแบบแตกต่างจากเวอร์ชันที่อธิบายไว้ใน เอกสาร

ENDIAN_CONSTANT และ REVERSE_ENDIAN_CONSTANT

ฝังใน header_item

ค่า ENDIAN_CONSTANT คงที่ใช้เพื่อระบุ Endianness ของไฟล์ที่พบ แม้ว่ามาตรฐาน รูปแบบ .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 และ ชั้นเรียนภายใน

Bitfields ของ Flag เหล่านี้ใช้เพื่อระบุการช่วยเหลือพิเศษและ พร็อพเพอร์ตี้โดยรวมของชั้นเรียนและสมาชิกในชั้นเรียน

ชื่อ ค่า สำหรับชั้นเรียน (และคำอธิบายประกอบ InnerClass รายการ) สำหรับฟิลด์ สำหรับวิธีการ
ACC_PUBLIC 0x1 public: มองเห็นได้ทุกที่ public: มองเห็นได้ทุกที่ public: มองเห็นได้ทุกที่
ACC_PRIVATE 0x2 * private: แสดงต่อการกำหนดชั้นเรียนเท่านั้น private: แสดงต่อการกำหนดชั้นเรียนเท่านั้น private: แสดงต่อการกำหนดชั้นเรียนเท่านั้น
ACC_PROTECTED 0x4 * protected: แสดงแพ็กเกจและคลาสย่อย protected: แสดงต่อแพ็กเกจและคลาสย่อย protected: แสดงต่อแพ็กเกจและคลาสย่อย
สถิติ ACC 0x8 * static: ไม่ได้สร้างขึ้นด้วยด้านนอก ข้อมูลอ้างอิง this static: ส่วนกลางเป็นคลาสที่กำหนด static: ไม่รับอาร์กิวเมนต์ this
ACC_FINAL 10x final: จัดประเภทย่อยไม่ได้ final: เปลี่ยนแปลงไม่ได้หลังการก่อสร้าง final: ลบล้างไม่ได้
ซิงค์ ACC 20x20     synchronized: ได้รับล็อกที่เกี่ยวข้องโดยอัตโนมัติ กับวิธีการนี้

หมายเหตุ: คุณจะใช้การตั้งค่าได้เฉพาะในกรณีที่ ก็ตั้งค่า ACC_NATIVE แล้วด้วย

ACC_VOLATILE 0x40   volatile: กฎสิทธิ์เข้าถึงพิเศษเพื่อช่วยเรื่องชุดข้อความ ได้คะแนนเซฟตี้  
ACC_BRIDGE 0x40     Bridge Method ที่เพิ่มเข้ามาโดยอัตโนมัติโดยคอมไพเลอร์เป็น type-safe สะพาน
ACC_TRANSIENT 0x80   transient: ไม่ให้บันทึกโดยค่าเริ่มต้น  
ACC_VARARGS 0x80     ควรถือว่าอาร์กิวเมนต์สุดท้ายเป็น "ส่วนที่เหลือ" อาร์กิวเมนต์โดยคอมไพเลอร์
ACC_NATIVE 0x100     native: ใช้งานในโค้ดแบบเนทีฟ
อินเทอร์เฟซ ACC 0x200 interface: คลาสนามธรรมที่นำมาใช้ได้แบบทวีคูณ    
ACC_ABSTRACT 0x400 abstract: สร้างอินสแตนซ์โดยตรงไม่ได้   abstract: ไม่ได้ใช้โดยคลาสนี้
ACC_STRICT 0x800     strictfp: กฎที่เข้มงวดสำหรับเลขคณิตที่มีจุดลอยตัว
ACC ระบบ 0x1000 ไม่ได้กำหนดโดยตรงในซอร์สโค้ด ไม่ได้กำหนดโดยตรงในซอร์สโค้ด ไม่ได้กำหนดโดยตรงในซอร์สโค้ด
ACC_ANNOTATION 0x2000 ประกาศว่าเป็นคลาสคำอธิบายประกอบ    
ACC_ENUM 0x4000 ประกาศเป็นประเภทที่แจกแจง ประกาศเป็นค่าแจกแจง  
(ไม่ได้ใช้) 0x8000      
ACC_ผู้สร้าง 0x10,000     เมธอดเครื่องมือสร้าง (คลาสหรือเครื่องมือเริ่มต้นอินสแตนซ์)
ACC_DECLARED_
ซิงค์แล้ว
0x20,000     ประกาศเป็นsynchronized

หมายเหตุ: การดำเนินการนี้ไม่มีผลต่อ (นอกเหนือจากการสะท้อนให้เห็นถึง Flag นี้)

* อนุญาตสำหรับคำอธิบายประกอบ InnerClass รายการเท่านั้น และต้องไม่อยู่ใน class_def_item

การเข้ารหัสแบบ UTF-8 ที่ปรับแล้ว

รูปแบบ .dex เป็นการลดความซับซ้อนของการสนับสนุนเดิมที่ง่ายขึ้น เข้ารหัสข้อมูลสตริงในรูปแบบ UTF-8 ที่แก้ไขแล้วตามมาตรฐานโดยปริยาย เรียกว่า MUTF-8 แบบฟอร์มนี้เหมือนกับ UTF-8 มาตรฐาน ยกเว้น

  • ใช้เฉพาะการเข้ารหัสแบบ 1, 2 และ 3 ไบต์เท่านั้น
  • Code Point ในช่วง U+10000 ... U+10ffff มีการเข้ารหัสเป็นคู่ตัวแทน โดยแต่ละ ซึ่งแสดงเป็นค่าที่เข้ารหัสแบบ 3 ไบต์
  • จุดโค้ด U+0000 มีการเข้ารหัสในรูปแบบ 2 ไบต์
  • ไบต์ค่า Null ธรรมดา (ค่า 0) แสดงถึงจุดสิ้นสุดของ สตริง เช่นเดียวกับการตีความภาษา C มาตรฐาน

2 รายการแรกข้างต้นสามารถสรุปเป็น MUTF-8 คือรูปแบบการเข้ารหัสสำหรับ UTF-16 แทนที่จะเป็น รูปแบบการเข้ารหัสสำหรับอักขระ Unicode

รายการ 2 รายการสุดท้ายข้างต้นช่วยให้สามารถรวม จุดรหัส U+0000 ในสตริง และ ยังคงแก้ไข แสดงเป็นสตริงค่าว่างแบบ C ในลักษณะ Null

อย่างไรก็ตาม การเข้ารหัสพิเศษของ U+0000 หมายความว่า UTF-8 ปกติ ผลลัพธ์ของการเรียกใช้ฟังก์ชัน C มาตรฐาน strcmp() ในสตริง MUTF-8 เพียง 2 คู่ แสดงผลลัพธ์แบบมีการรับรองที่ถูกต้องของการเปรียบเทียบสตริงที่ไม่เท่ากัน เมื่อเรียงลำดับ (ไม่ใช่แค่ความเท่าเทียม) สิ่งที่เป็นกังวลคือ วิธีเปรียบเทียบสตริง MUTF-8 คือการถอดรหัสอักขระทีละอักขระ และเปรียบเทียบค่าที่ถอดรหัสแล้ว (อย่างไรก็ตาม การติดตั้ง ที่ชาญฉลาดกว่านั้น ก็เป็นไปได้)

โปรดดูยูนิโค้ด มาตรฐานสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเข้ารหัสอักขระ อันที่จริง MUTF-8 ใกล้เคียงกับการเข้ารหัส (ซึ่งไม่ค่อยเป็นที่รู้จัก) มากกว่า CESU-8 เมื่อเทียบกับ UTF-8 ต่อบทความ

การเข้ารหัสค่า encrypted_value

ฝังในanalytics_element และ รหัส_array_item

encoded_value เป็นชิ้นส่วนที่เข้ารหัสของ (เกือบ) ข้อมูลที่มีโครงสร้างตามลำดับชั้น การเข้ารหัสมีจุดประสงค์เพื่อ ควรกะทัดรัดและแยกวิเคราะห์ได้ง่าย

ชื่อ รูปแบบ คำอธิบาย
(ค่า << 5) | ประเภทค่า [value_type] ยูไบต์ ไบต์ที่ระบุประเภทของ value ตาม ด้วยอาร์กิวเมนต์ที่อธิบายซึ่งไม่บังคับใน 3 บิตที่มีลําดับสูง โปรดดูคำจำกัดความต่างๆ ของ value ที่ด้านล่าง ในกรณีส่วนใหญ่ value_arg จะเข้ารหัสความยาวของ value ลำดับต่อมาเป็นไบต์ตาม (size - 1) เช่น 0 หมายความว่า ค่าดังกล่าวต้องใช้ 1 ไบต์ และ 7 หมายความว่าต้องใช้ 8 ไบต์ แต่ก็มีข้อยกเว้นดังที่กล่าวไว้ด้านล่างนี้
ค่า ยูไบต์[] ไบต์ที่แทนค่า ความยาวแปรผัน และตีความ จะแตกต่างออกไปสำหรับ value_type ไบต์ที่แตกต่างกัน Little-endian ดูคำจำกัดความของค่าต่างๆ ด้านล่างสำหรับ รายละเอียด

รูปแบบค่า

พิมพ์ชื่อ value_type รูปแบบ value_arg รูปแบบ value คำอธิบาย
VALUE_ไบต์ 0x00 (ไม่มี ต้องเป็น 0) ยูไบต์[1] ค่าจำนวนเต็มแบบ 1 ไบต์แบบมีเครื่องหมาย
สั้นเป็นมูลค่า 0x02 ขนาด - 1 (0...1) ไบต์[size] ค่าจำนวนเต็มสองไบต์แบบมีเครื่องหมาย, ขยาย
แผนภูมิมูลค่า 0x ขนาด - 1 (0...1) ไบต์[size] ค่าจำนวนเต็มสองไบต์ที่ไม่มีการรับรอง, ขยายเป็นศูนย์
VALUE_INT 0x ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์แบบมีเครื่องหมาย, ขยาย
VALUE_ยาว 0x06 ขนาด - 1 (0...7) ไบต์[size] ค่าจำนวนเต็ม 8 ไบต์แบบมีเครื่องหมาย, ขยาย
มูลค่า FLOAT 10x ขนาด - 1 (0...3) ไบต์[size] รูปแบบบิต 4 ไบต์ขยายเป็น 0 ทางขวา และ ตีความว่าเป็นค่าทศนิยม 32 บิต IEEE754
VALUE_ทวีคูณ 11 x ขนาด - 1 (0...7) ไบต์[size] รูปแบบบิตแปดไบต์ ขยายเป็นศูนย์ ไปทางขวา และ ตีความว่าเป็นค่าทศนิยม 64 บิต IEEE754
ประเภทวิธี {1}VALUE_METHOD_TYPE 0x15 ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมาย (ขยายเป็นศูนย์) ได้รับการแปลค่าเป็นดัชนีไปยัง ส่วน proto_ids และแทนค่าประเภทวิธีการ
แฮนเดิลของVALUE_METHOD 16 x ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมาย (ขยายเป็นศูนย์) ได้รับการแปลค่าเป็นดัชนีไปยัง ส่วน method_handles และแทนค่าแฮนเดิลเมธอด
สตริงมูลค่า 0x17 ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมาย (ขยายเป็นศูนย์) ได้รับการแปลค่าเป็นดัชนีไปยัง ส่วน string_ids และแทนค่าสตริง
ประเภทVALUE 18 x ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมาย (ขยายเป็นศูนย์) ได้รับการแปลค่าเป็นดัชนีไปยัง ส่วน type_ids และแสดงถึงการสะท้อนความรู้สึก ค่าประเภท/คลาส
ฟิลด์VALUE_ 19 x ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมาย (ขยายเป็นศูนย์) ได้รับการแปลค่าเป็นดัชนีไปยัง ส่วน field_ids และแสดงถึงการสะท้อนความรู้สึก ค่าในช่อง
วิธีมูลค่า 0x1a ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมาย (ขยายเป็นศูนย์) ได้รับการแปลค่าเป็นดัชนีไปยัง ส่วน method_ids และแสดงถึงการสะท้อนความรู้สึก ค่าเมธอด
มูลค่า 0x1b ขนาด - 1 (0...3) ไบต์[size] ค่าจำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมาย (ขยายเป็นศูนย์) ได้รับการแปลค่าเป็นดัชนีไปยัง ส่วน field_ids และแสดงถึงค่าของ ค่าคงที่ของประเภทแจกแจง
VALUE_ARRAY 0x1ค (ไม่มี ต้องเป็น 0) อาร์เรย์ที่เข้ารหัส อาร์เรย์ของค่า ในรูปแบบที่ระบุโดย "รูปแบบ encoded_array" ที่ด้านล่าง ขนาด ของ value เป็นการเข้ารหัสโดยนัย
Conv. 0x1 วัน (ไม่มี ต้องเป็น 0) คำอธิบายประกอบที่เข้ารหัส คำอธิบายประกอบย่อย ในรูปแบบที่ระบุโดย "รูปแบบ encoded_annotation" ที่ด้านล่าง ขนาด ของ value เป็นการเข้ารหัสโดยนัย
ค่าว่าง 0X1E (ไม่มี ต้องเป็น 0) (ไม่มี) ค่าอ้างอิง null
บูลีน 0X1F บูลีน (0...1) (ไม่มี) ค่าหนึ่งบิต 0 สำหรับ false และ 1ในราคา true ส่วนบิตจะแสดงใน value_arg

รูปแบบอาร์เรย์ที่เข้ารหัส

ชื่อ รูปแบบ คำอธิบาย
ขนาด Uleb128 จำนวนองค์ประกอบในอาร์เรย์
ค่า เข้ารหัส_ค่า[size] ชุดขนาด size encoded_value ไบต์ ลำดับต่างๆ ในรูปแบบที่ส่วนนี้ระบุไว้แบบต่อกัน ตามลำดับ

รูปแบบคำอธิบายประกอบที่เข้ารหัส

ชื่อ รูปแบบ คำอธิบาย
type_idx Uleb128 ของคำอธิบายประกอบ ต้องเป็นคลาส (ไม่ใช่อาร์เรย์หรือค่าดั้งเดิม) ประเภท
ขนาด Uleb128 จำนวนการแมปชื่อ-ค่าในคำอธิบายประกอบนี้
องค์ประกอบ description_element[size] [ขนาด] ของคำอธิบายประกอบ ซึ่งแสดงในบรรทัดโดยตรง (ไม่ใช่ ตำแหน่งพิเศษ) ต้องจัดเรียงองค์ประกอบตามลำดับที่เพิ่มขึ้น ดัชนีของ string_id

รูปแบบ description_element

ชื่อ รูปแบบ คำอธิบาย
name_idx Uleb128 ชื่อองค์ประกอบ ซึ่งแสดงเป็นดัชนีลงใน string_ids สตริงต้องเป็นไปตาม ของ MemberName ตามคำจำกัดความด้านบน
ค่า ค่า_เข้ารหัส ค่าธาตุ

ไวยากรณ์สตริง

ไฟล์ .dex มีรายการอยู่หลายประเภทซึ่ง สุดท้ายคือสตริง คำจำกัดความแบบ BNF ต่อไปนี้ จะระบุไวยากรณ์ที่ยอมรับได้สำหรับสตริงเหล่านี้

ชื่อแบบง่าย

SimpleName เป็นพื้นฐานสำหรับไวยากรณ์ของชื่ออื่นๆ สิ่งต่างๆ รูปแบบ .dex ระบุละติจูดได้พอสมควร (ซึ่งมากกว่าภาษาต้นฉบับทั่วไป) สรุปสั้นๆ ประกอบด้วยอักขระที่เป็นตัวเลขและตัวอักษรที่มี ASCII ต่ำ บางชื่อ สัญลักษณ์ ASCII ต่ำเฉพาะ และจุดรหัสที่ไม่ใช่ ASCII ส่วนใหญ่ที่ไม่ ตัวควบคุม เว้นวรรค หรือสัญลักษณ์พิเศษ เริ่มจากเวอร์ชัน 040 รูปแบบนี้อนุญาตให้มีอักขระเว้นวรรคได้ (Unicode Zs หมวดหมู่) โปรดทราบว่าจุดรหัสสำหรับตัวแทน (ในช่วง U+d800 ... U+dfff) ไม่ พิจารณาอักขระชื่อที่ถูกต้องตามการตั้งค่า แต่เป็นอักขระเสริม Unicode ถูกต้อง (ซึ่งแสดงด้วยอักขระสุดท้าย แทนกฎสำหรับ 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

ชื่อสมาชิก

ใช้โดย Field_id_item และ method_id_item

MemberName คือชื่อของสมาชิกในชั้นเรียน ซึ่งสมาชิกที่เป็น วิธีการและชั้นเรียนภายใน

MemberName
ชื่อแบบง่าย
| '<' ชื่อแบบง่าย '>'

ชื่อเต็มของชั้นเรียน

FullClassName คือชื่อคลาสที่มีคุณสมบัติครบถ้วน ซึ่งรวมถึง ตัวระบุแพ็กเกจที่ไม่บังคับตามด้วยชื่อที่ต้องระบุ

FullClassName
OptionalPackagePrefix ชื่ออย่างง่าย
OptionalPackagePrefix
(ชื่ออย่างง่าย '/')*

TypeDescriptor

ใช้โดย type_id_item

TypeDescriptor คือตัวแทนของทุกประเภท รวมถึง ค่าดั้งเดิม คลาส อาร์เรย์ และ void ดูด้านล่างสำหรับ ความหมายของเวอร์ชันต่างๆ

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

คำอธิบายแบบย่อ

ใช้โดย 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
อา short
C char
I int
J long
F float
D double
โดยสมบูรณ์/ผ่านการรับรอง/ชื่อ ชั้นเรียน fully.qualified.Name
[ข้อบ่งชี้ อาร์เรย์ของ descriptor ซึ่งสามารถใช้ซ้ำได้สำหรับ อาร์เรย์ของอาร์เรย์ แม้จะไม่สามารถมีมากกว่า 255 ได้

รายการและโครงสร้างที่เกี่ยวข้อง

ส่วนนี้ประกอบด้วยคำจำกัดความของรายการระดับบนสุดแต่ละรายการที่ อาจปรากฏในไฟล์ .dex

ส่วนหัว_รายการ

ปรากฏในส่วนหัว

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
มายากล uไบต์[8] = DEX_FILE_MAGIC มูลค่าเวทมนตร์ ดูการสนทนาด้านบนภายใต้ "DEX_FILE_MAGIC" เพื่อดูรายละเอียดเพิ่มเติม
การตรวจสอบข้อผิดพลาด Uint adler32 checksum ของไฟล์ที่เหลือ (ทุกอย่างยกเว้น magic และฟิลด์นี้) ใช้เพื่อตรวจหาความเสียหายของไฟล์
ลายเซ็น ยูไบต์[20] ลายเซ็น SHA-1 (แฮช) ส่วนที่เหลือของไฟล์ (ทุกอย่างยกเว้น magic, checksum และช่องนี้) ใช้แล้ว เพื่อระบุไฟล์โดยไม่ซ้ำกัน
ขนาดไฟล์ Uint ขนาดของทั้งไฟล์ (รวมถึงส่วนหัว) ในหน่วยไบต์
ขนาดส่วนหัว uint = 0x70 (ทั้งส่วนนี้) ในหน่วยไบต์ ซึ่งทำให้สามารถ ความเข้ากันได้แบบย้อนหลัง/ไปข้างหน้าอย่างจำกัดโดยไม่มี ทำให้รูปแบบเป็นโมฆะ
endian_tag uint = ENDIAN_CONSTANT endianness ดูการสนทนาด้านบนภายใต้ "ENDIAN_CONSTANT และ REVERSE_ENDIAN_CONSTANT" เพื่อดูรายละเอียดเพิ่มเติม
ขนาดลิงก์ [link_size] Uint ขนาดของส่วนลิงก์ หรือ 0 หากไฟล์นี้ไม่ใช่ไฟล์ ลิงก์แบบคงที่
link_off Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์จนถึงส่วนลิงก์ หรือ 0 หากเป็น link_size == 0 ออฟเซ็ตหากไม่ใช่ 0 ควรเป็นออฟเซ็ตในส่วน link_data รูปแบบของข้อมูลที่ชี้ไปไม่ได้ระบุไว้โดยเอกสารนี้ ฟิลด์ส่วนหัวนี้ (และฟิลด์ก่อนหน้า) จะถูกทิ้งไว้เป็นฮุกสำหรับใช้งาน การติดตั้งใช้งานรันไทม์
ปิดแผนที่ Uint หักลบจากจุดเริ่มต้นของไฟล์ไปยังรายการแผนที่ ออฟเซ็ตซึ่งต้อง ไม่เป็น 0 ควรเป็นค่าออฟเซ็ตในส่วน data และข้อมูลควรอยู่ในรูปแบบที่ระบุโดย "map_list" ที่ด้านล่าง
รหัสสตริงขนาด [string_id_size] Uint จำนวนสตริงในรายการตัวระบุสตริง
รหัสสตริงปิด Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการตัวระบุสตริง หรือ 0 หาก string_ids_size == 0 (เป็น ตัวพิมพ์เล็กที่มีขอบแปลกไป) ออฟเซ็ตหากไม่ใช่ 0 ควรอยู่ที่จุดเริ่มต้นของส่วน string_ids
type_ids_size Uint จำนวนองค์ประกอบในรายการตัวระบุประเภทไม่เกิน 65535
type_ids_off Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการตัวระบุประเภท หรือ 0 หาก type_ids_size == 0 (เป็น ตัวพิมพ์เล็กที่มีขอบแปลกไป) ออฟเซ็ตหากไม่ใช่ 0 ควรอยู่ต้น type_ids
รหัสโปรโต_id_size Uint จำนวนองค์ประกอบในรายการตัวระบุต้นแบบมากที่สุด 65535 รายการ
รหัสโปรโต_ปิด Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการตัวระบุต้นแบบ หรือ 0 หาก proto_ids_size == 0 (เป็น ตัวพิมพ์เล็กที่มีขอบแปลกไป) ออฟเซ็ตหากไม่ใช่ 0 ควรอยู่ต้น proto_ids
รหัสฟิลด์_ขนาด_ของฟิลด์ Uint จำนวนองค์ประกอบในรายการตัวระบุช่อง
รหัสฟิลด์_ปิด Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการตัวระบุช่อง หรือ 0 หากเป็น field_ids_size == 0 ออฟเซ็ต ไม่ใช่ 0 ควรอยู่จุดเริ่มต้นของ field_ids
ขนาดรหัสเมธอด Uint จำนวนองค์ประกอบในรายการตัวระบุเมธอด
method_id_off Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการตัวระบุเมธอด หรือ 0 หากเป็น method_ids_size == 0 ออฟเซ็ต ไม่ใช่ 0 ควรอยู่จุดเริ่มต้นของ method_ids
class_defs_size Uint จำนวนองค์ประกอบในรายการคำจำกัดความของคลาส
class_defs_off Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการการกำหนดคลาส หรือ 0 หาก class_defs_size == 0 (เป็น ตัวพิมพ์เล็กที่มีขอบแปลกไป) ออฟเซ็ตหากไม่ใช่ 0 ควรอยู่ที่จุดเริ่มต้นของส่วน class_defs
ขนาดข้อมูล [data_size] Uint ขนาดของส่วน data ในหน่วยไบต์ ต้องเป็นเลขคู่ หลายขนาดของ(uint)
ปิดอินเทอร์เน็ต Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ถึงจุดเริ่มต้น data

รายการแผนที่

ปรากฏในส่วนข้อมูล

อ้างอิงจาก header_item

การจัดข้อความ: 4 ไบต์

ซึ่งเป็นรายการเนื้อหาทั้งหมดของไฟล์ตามลำดับ ทั้งนี้ มีความซ้ำซ้อนเกี่ยวกับ header_item แต่มีจุดมุ่งหมายเพื่อให้อยู่ในรูปแบบที่ง่าย สำหรับการปรับปรุง ประเภทที่กำหนดต้องปรากฏมากที่สุดพร้อมกันในแผนที่ แต่จะไม่มี ข้อจำกัดเกี่ยวกับประเภทคำสั่งซื้อที่จะปรากฏในประเภทอื่นนอกเหนือจาก ของรูปแบบโฆษณาที่เหลือ (เช่น ส่วน header ต้องปรากฏก่อน ตามด้วย string_ids ฯลฯ) นอกจากนี้ รายการแผนที่จะต้อง เรียงลำดับตามออฟเซ็ตเริ่มต้นและต้องไม่ทับซ้อนกัน

ชื่อ รูปแบบ คำอธิบาย
ขนาด Uint ขนาดของรายการ ในรายการ
ลิสต์ [size] [ขนาด] องค์ประกอบของรายการ

รูปแบบรายการแมป [map_item]

ชื่อ รูปแบบ คำอธิบาย
ประเภท Ushort ประเภทของรายการ ดูตารางด้านล่าง
unused Ushort (ไม่ได้ใช้)
ขนาด Uint จำนวนรายการที่จะพบในออฟเซ็ตที่ระบุ
หักลบ Uint หักลบจากจุดเริ่มต้นของไฟล์ไปยังรายการที่ต้องการ

พิมพ์รหัส

ประเภทรายการ ค่าคงที่ ค่า ขนาดรายการเป็นไบต์
ส่วนหัว_รายการ TYPE_HEADER_ITEM 0x0000 0x70
string_id_item TYPE_STRING_ID_ITEM 0x0001 0x
type_id_item TYPE_TYPE_ID_ITEM 0x0002 0x
โปรโตคอล_รหัส_รายการ TYPE_PROTO_ID_ITEM 0x0003 0x0c
ฟิลด์_รหัส_รายการ TYPE_FIELD_ID_ITEM 0x0004 0x08
method_id_item TYPE_METHOD_ID_ITEM 0x0005 0x08
class_def_item TYPE_CLASS_DEF_ITEM 0x0006 20x20
รหัสเว็บไซต์การโทร [call_site_id_item] TYPE_CALL_SITE_ID_ITEM 0x0007 0x
method_handle_item TYPE_METHOD_HANDLE_ITEM 0x0008 0x08
รายการแผนที่ ประเภทรายการแผนที่ 0x1000 4 + (item.size * 12)
รายชื่อประเภท [type_list] รายชื่อประเภท TYPE_TYPE_ 0x1001 4 + (item.size * 2)
ชุดคำอธิบายประกอบ [description_set_ref_list] TYPE_ANNOTATION_SET_REF_LIST 0x1002 4 + (item.size * 4)
ชุดคำอธิบายประกอบ [description_set_item] รายการประเภท 0x1003 4 + (item.size * 4)
class_data_item ข้อมูล TYPE_CLASS_DATA_ITEM 0x2000 implicit; ต้องแยกวิเคราะห์
code_item TYPE_CODE_ITEM 0x2001 implicit; ต้องแยกวิเคราะห์
ข้อมูลสตริง TYPE_STRING_DATA_ITEM 0x2002 implicit; ต้องแยกวิเคราะห์
debug_info_item TYPE_DEBUG_INFO_ITEM 0x2003 implicit; ต้องแยกวิเคราะห์
สินค้าคำอธิบายประกอบ รายการประเภท 0x2004 implicit; ต้องแยกวิเคราะห์
รายการอาร์เรย์ที่เข้ารหัส TYPE_ENCODED_ARRAY_ITEM 0x2005 implicit; ต้องแยกวิเคราะห์
ไดเรกทอรีคำอธิบายประกอบ [description_directory_item] TYPE_ANNOTATIONS_DIRECTORY_ITEM 0x2006 implicit; ต้องแยกวิเคราะห์
hideapi_class_data_item TYPE_HIDDENAPI_CLASS_DATA_ITEM 0xF000 implicit; ต้องแยกวิเคราะห์

string_id_item

ปรากฏในส่วน string_ids

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
ปิดข้อมูลสตริง Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์เป็นข้อมูลสตริงสำหรับ รายการ ออฟเซ็ตควรอยู่ที่ตำแหน่ง ในส่วน data และข้อมูลควรอยู่ในส่วน รูปแบบที่ระบุโดย "string_data_item" ที่ด้านล่าง ไม่มีข้อกำหนดในการปรับแนวสำหรับออฟเซ็ต

ข้อมูลสตริง

ปรากฏในส่วนข้อมูล

การจัดข้อความ: ไม่มี (จัดข้อความแบบไบต์)

ชื่อ รูปแบบ คำอธิบาย
utf16_size Uleb128 ขนาดของสตริงนี้ ในหน่วยโค้ด UTF-16 (ซึ่งก็คือ "สตริง ความยาวสระ" ในหลายระบบ) นั่นคือ นี่คือความยาวถอดรหัสของ สตริง (ความยาวที่เข้ารหัสจะแสดงโดยนัยด้วยตำแหน่งของ ไบต์ 0)
ข้อมูล ยูไบต์[] ชุดของหน่วยโค้ด MUTF-8 (หรืออ็อกเท็ตหรือไบต์อื่นๆ) ตามด้วยไบต์ของค่า 0 โปรดดู "การเข้ารหัส MUTF-8 (การแก้ไข UTF-8)" ด้านบนเพื่อดูรายละเอียดและ พูดคุยเกี่ยวกับรูปแบบข้อมูล

หมายเหตุ: เรายอมรับสตริงที่ประกอบด้วย (รูปแบบที่เข้ารหัส) หน่วยโค้ดสำหรับแทน UTF-16 (ซึ่งก็คือ U+d800 ... U+dfff) ไม่ว่าจะอยู่อย่างโดดเดี่ยว หรือไม่ทำงานตามปกติ ที่จะเข้ารหัส Unicode เป็น UTF-16 ทั้งนี้ขึ้นอยู่กับการใช้ ที่จะปฏิเสธการเข้ารหัสที่ไม่ถูกต้องดังกล่าวได้ตามความเหมาะสม

type_id_item

ปรากฏในส่วน type_ids

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
descriptor_idx Uint ดัชนีลงในรายการ string_ids สำหรับข้อบ่งชี้ สตริงประเภทนี้ สตริงต้องสอดคล้องกับไวยากรณ์สำหรับ TypeDescriptor ตามที่ระบุไว้ข้างต้น

โปรโตคอล_รหัส_รายการ

ปรากฏในส่วน protocol_ids

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
รหัสย่อ Uint จัดทำดัชนีลงในรายการ string_ids สำหรับคอนเทนต์แบบสั้น สตริงข้อบ่งชี้ของต้นแบบนี้ สตริงต้องเป็นไปตาม ไวยากรณ์สำหรับ ShortyDescriptor ตามที่ระบุข้างต้น และต้องสอดคล้อง ประเภทการคืนสินค้าและพารามิเตอร์ของสินค้านี้
ประเภทรหัสการคืนสินค้า [return_type_idx] Uint ดัชนีลงในรายการ type_ids สำหรับประเภทผลลัพธ์ ของต้นแบบนี้
พารามิเตอร์ปิดอยู่ Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการประเภทพารามิเตอร์ สำหรับต้นแบบนี้ หรือ 0 หากต้นแบบนี้ไม่มี พารามิเตอร์ หากไม่ใช่ศูนย์ ออฟเซ็ตนี้ควรอยู่ใน data และข้อมูลที่ควรอยู่ในส่วน รูปแบบที่ระบุโดย "type_list" ด้านล่าง นอกจากนี้ ยังมี ไม่ควรมีการอ้างอิงไปยังประเภท void ในรายการ

ฟิลด์_รหัส_รายการ

ปรากฏในส่วนfield_ids

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
class_idx Ushort ดัชนีลงในรายการ type_ids สำหรับตัวกำหนดของ ด้วย ค่านี้ต้องเป็นประเภทคลาส ไม่ใช่อาร์เรย์หรือประเภทพื้นฐาน
type_idx Ushort ดัชนีลงในรายการ type_ids สำหรับประเภท ฟิลด์นี้
name_idx Uint ดัชนีลงในรายการ string_ids สำหรับชื่อของข้อมูลนี้ ด้วย สตริงต้องเป็นไปตามไวยากรณ์สำหรับ MemberName ตามที่ระบุไว้ข้างต้น

method_id_item

ปรากฏในส่วน method_ids

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
class_idx Ushort ดัชนีลงในรายการ type_ids สำหรับตัวกำหนดของ ค่านี้ต้องเป็นประเภทคลาสหรืออาร์เรย์ ไม่ใช่ประเภทพื้นฐาน
Proto_IDX Ushort ดัชนีลงในรายการ proto_ids สำหรับต้นแบบของ วิธีนี้
name_idx Uint ดัชนีลงในรายการ string_ids สำหรับชื่อของข้อมูลนี้ สตริงต้องเป็นไปตามไวยากรณ์สำหรับ MemberName ตามที่ระบุไว้ข้างต้น

class_def_item

ปรากฏในส่วน class_defs

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
class_idx Uint ดัชนีลงในรายการ type_ids สำหรับคลาสนี้ ค่านี้ต้องเป็นประเภทคลาส ไม่ใช่อาร์เรย์หรือประเภทพื้นฐาน
Access_flags Uint เข้าถึง Flag ของชั้นเรียน (public, final, เป็นต้น) ดู "คำจำกัดความ access_flags" เพื่อดูรายละเอียด
Superclass_idx Uint จัดทำดัชนีลงในรายการ type_ids สำหรับ Superclass หรือ ค่าคงที่ NO_INDEX หากคลาสนี้ไม่มี Superclass (เช่น เป็นคลาสรูท เช่น 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_id_item]

ปรากฏในส่วน call_site_ids

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
call_site_off Uint หักลบจากจุดเริ่มต้นของไฟล์เพื่อเรียกการกำหนดไซต์ ออฟเซ็ตควร อยู่ในส่วนข้อมูล และข้อมูลควรอยู่ในรูปแบบที่ระบุโดย "call_site_item" ที่ด้านล่าง

call_site_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: ไม่มี (จัดข้อความไบต์)

call_site_item คือ คีย์การเข้ารหัส_array_itemซึ่งมีองค์ประกอบที่สอดคล้องกับอาร์กิวเมนต์ ให้กับเมธอด Bootstrap Linker อาร์กิวเมนต์ 3 รายการแรก ได้แก่

  1. แฮนเดิลเมธอดที่แสดงเมธอด Bootstrap Linker (VALUE_METHOD_HANDLE)
  2. ชื่อเมธอดที่ Bootstrap Linker ควรระบุ (VALUE_STRING)
  3. ประเภทเมธอดที่สอดคล้องกับประเภทของชื่อเมธอดที่จะแปลง (VALUE_METHOD_TYPE)

อาร์กิวเมนต์เพิ่มเติมคือค่าคงที่ที่ส่งผ่านไปยังเมธอด Bootstrap Linker อาร์กิวเมนต์เหล่านี้คือ ส่งผ่านตามลำดับ และไม่มี Conversion ประเภทใดๆ

แฮนเดิลเมธอดที่แสดงเมธอด Bootstrap Linker ต้องมีประเภทการแสดงผล java.lang.invoke.CallSite พารามิเตอร์ 3 ประเภทแรกได้แก่

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

ประเภทพารามิเตอร์ของอาร์กิวเมนต์เพิ่มเติมจะกำหนดจากค่าคงที่

method_handle_item

ปรากฏในส่วน method_handles

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
ประเภทแฮนเดิลของวิธีการ Ushort ของแฮนเดิลเมธอด ดูตารางด้านล่าง
unused Ushort (ไม่ได้ใช้)
รหัสฟิลด์หรือวิธีการ Ushort ช่องหรือรหัสเมธอดขึ้นอยู่กับว่าประเภทแฮนเดิลของเมธอดเป็นผู้เข้าถึงหรือผู้เรียกใช้เมธอด
unused Ushort (ไม่ได้ใช้)

โค้ดประเภทแฮนเดิลของเมธอด

ค่าคงที่ ค่า คำอธิบาย
METHOD_HANDLE_TYPE_STATIC_PUT 0x00 แฮนเดิลเมธอดคือตัวตั้งค่าช่องแบบคงที่ (ตัวเข้าถึง)
METHOD_HANDLE_TYPE_STATIC_GET 0x แฮนเดิลเมธอดคือ Getter ฟิลด์แบบคงที่ (ตัวเข้าถึง)
เมธอด_มือจับประเภท_INSTANCE_PUT 0x02 แฮนเดิลเมธอดเป็นตัวตั้งค่าฟิลด์อินสแตนซ์ (ตัวเข้าถึง)
Method_HANDLE_TYPE_INSTANCE_GET 0x แฮนเดิลเมธอดคือ Getter ฟิลด์อินสแตนซ์ (ตัวเข้าถึง)
Method_HANDLE_TYPE_INVOKE_STATIC 0x แฮนเดิลเมธอดเป็นผู้เรียกใช้เมธอดแบบคงที่
วิธีการ_ใช้มือจับประเภท_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

ปรากฏในส่วนข้อมูล

การจัดข้อความ: ไม่มี (จัดข้อความแบบไบต์)

ชื่อ รูปแบบ คำอธิบาย
ขนาดฟิลด์คงที่ Uleb128 จำนวนช่องแบบคงที่ที่กำหนดไว้ในรายการนี้
ขนาดฟิลด์อินสแตนซ์ Uleb128 จำนวนฟิลด์อินสแตนซ์ที่กำหนดไว้ในรายการนี้
Direct_methods_size Uleb128 จำนวนวิธีโดยตรงที่กำหนดไว้ในรายการนี้
ขนาดวิธีการเสมือน Uleb128 จำนวนเมธอดเสมือนจริงที่กำหนดไว้ในรายการนี้
static_fields คีย์การเข้ารหัส_[static_fields_size] ช่องแบบคงที่ที่กำหนดไว้ ซึ่งแสดงเป็นลำดับ หลายองค์ประกอบที่เข้ารหัส โดยต้องจัดเรียงช่องตาม field_idx ตามลำดับเพิ่มขึ้น
ฟิลด์อินสแตนซ์ Encrypt_field[instance_fields_size] ฟิลด์อินสแตนซ์ที่กำหนดไว้ ซึ่งแสดงเป็นลำดับ หลายองค์ประกอบที่เข้ารหัส โดยต้องจัดเรียงช่องตาม field_idx ตามลำดับเพิ่มขึ้น
วิธีการโดยตรง วิธีเข้ารหัส [direct_methods_size] โดยตรงที่กำหนดไว้ (static, private หรือเครื่องมือสร้าง) เป็นลำดับ หลายองค์ประกอบที่เข้ารหัส โดยจะต้องจัดเรียงเมธอดตาม method_idx ตามลำดับเพิ่มขึ้น
วิธีการ_เสมือน Encrypt_method[virtual_methods_size] เสมือนที่กำหนดไว้ (ไม่มี static, private หรือเครื่องมือสร้าง) เป็นลำดับ หลายองค์ประกอบที่เข้ารหัส รายการนี้ไม่ควรรับค่าเดิม เว้นแต่จะถูกลบล้างโดยคลาสที่รายการนี้แสดง ต้องจัดเรียงตาม method_idx ตามลำดับที่เพิ่มขึ้น method_idx ของเมธอดเสมือนต้องไม่เหมือนกัน เป็นวิธีทางตรงอื่นๆ

หมายเหตุ: องค์ประกอบทั้งหมด field_id และ อินสแตนซ์ method_id รายการต้องอ้างอิงถึงคลาสที่กำหนดเดียวกัน

รูปแบบฟิลด์ที่เข้ารหัส

ชื่อ รูปแบบ คำอธิบาย
ค่าต่างของฟิลด์_รหัสx Uleb128 ดัชนีลงในรายการ field_ids สำหรับข้อมูลประจำตัวของข้อมูลนี้ (รวมถึงชื่อและข้อบ่งชี้) ซึ่งแสดงเป็นความแตกต่าง จากดัชนีขององค์ประกอบก่อนหน้าในรายการ ดัชนีของ องค์ประกอบแรกในรายการจะแสดงโดยตรง
Access_flags Uleb128 เข้าถึงแฟล็กสำหรับช่อง (public, final, เป็นต้น) ดู "คำจำกัดความ access_flags" เพื่อดูรายละเอียด

รูปแบบ Encrypted_method

ชื่อ รูปแบบ คำอธิบาย
ความแตกต่างของวิธี [idx_diff] Uleb128 ดัชนีลงในรายการ method_ids สำหรับข้อมูลประจำตัวของข้อมูลนี้ (รวมถึงชื่อและข้อบ่งชี้) ซึ่งแสดงเป็นความแตกต่าง จากดัชนีขององค์ประกอบก่อนหน้าในรายการ ดัชนีของ องค์ประกอบแรกในรายการจะแสดงโดยตรง
Access_flags Uleb128 เข้าถึงแฟล็กสำหรับเมธอด (public, final, เป็นต้น) ดู "คำจำกัดความ access_flags" เพื่อดูรายละเอียด
code_off Uleb128 ออฟเซ็ตจากจุดเริ่มต้นของไฟล์เป็นโครงสร้างโค้ดสำหรับ หรือ 0 หากวิธีนี้เป็น abstract หรือ native ออฟเซ็ตควรอยู่ที่ตำแหน่งใน data รูปแบบของข้อมูลจะกำหนดโดย "code_item" ที่ด้านล่าง

รายชื่อประเภท [type_list]

อ้างอิงจาก class_def_item และ proto_id_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
ขนาด Uint ขนาดของรายการ ในรายการ
ลิสต์ type_item[size] องค์ประกอบของรายการ

รูปแบบ type_item

ชื่อ รูปแบบ คำอธิบาย
type_idx Ushort ดัชนีในรายการ type_ids

code_item

อ้างอิงจาก Encrypt_method

ปรากฏในส่วนข้อมูล

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
ขนาดที่ลงทะเบียน Ushort จำนวนการลงทะเบียนที่โค้ดนี้ใช้
ins_size [ขนาด] Ushort จำนวนคำของอาร์กิวเมนต์ขาเข้าที่ใช้วิธีนี้ รหัสมีไว้สำหรับ
เกินขนาด [outs_size] Ushort จำนวนคำของพื้นที่อาร์กิวเมนต์ขาออกที่จำเป็นต้องใช้ รหัสสำหรับการเรียกใช้เมธอด
ขนาดการลอง Ushort จำนวน try_item สำหรับอินสแตนซ์นี้ หากไม่ใช่ 0 ค่าเหล่านี้จะปรากฏเป็นอาร์เรย์ tries หลัง insnsในอินสแตนซ์นี้
ปิดข้อมูลแก้ไขข้อบกพร่อง [debug_info_off] Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปที่ข้อมูลการแก้ไขข้อบกพร่อง (หมายเลขบรรทัด + ข้อมูลตัวแปรภายใน) ลำดับสำหรับโค้ดนี้ หรือ 0 หาก ก็ไม่มีข้อมูลใดๆ เลย ออฟเซ็ตหากไม่ใช่ศูนย์ควรเป็น ไปยังตำแหน่งในส่วนdata รูปแบบของ ข้อมูลนี้ถูกระบุโดย "debug_info_item" ที่ด้านล่าง
insns_size Uint ขนาดของรายการวิธีการในหน่วยโค้ด 16 บิต
โรงแรมขนาดเล็ก ushort[insns_size] อาร์เรย์ของไบต์โค้ดจริง รูปแบบของโค้ดใน insns ระบุอาร์เรย์ตามเอกสารที่แสดงร่วม Dalvik Bytecode หมายเหตุ แม้ว่าค่านี้จะกำหนดเป็นอาร์เรย์ของ ushort เป็นโครงสร้างภายในบางส่วนที่ต้องการใช้การจัดแนวแบบ 4 ไบต์ และ หากข้อผิดพลาดนี้อยู่ในไฟล์ที่สลับแบบปลายทางแล้ว การสลับจะเป็น เท่านั้นในอินสแตนซ์ ushort แต่ละรายการ และไม่ใช่ในอินสแตนซ์ โครงสร้างภายในที่มีขนาดใหญ่ขึ้น
padding ushort (ไม่บังคับ) = 0 ระยะห่างจากขอบ 2 ไบต์เพื่อทำให้ tries สอดคล้องกัน 4 ไบต์ องค์ประกอบนี้จะปรากฏต่อเมื่อ tries_size ไม่ใช่ 0 และ insns_size เป็นเลขคี่
พยายาม Try_item[tries_size] (ไม่บังคับ) อาร์เรย์ที่ระบุตำแหน่งที่จับข้อยกเว้นของโค้ด วิธีจัดการ องค์ประกอบของอาร์เรย์ต้องไม่ทับซ้อนกันใน และเรียงลำดับจากที่อยู่ต่ำไปสูง องค์ประกอบนี้ ปรากฏหาก tries_size ไม่ใช่ 0
ตัวแฮนเดิล encrypted_catch_handler_list (ไม่บังคับ) ไบต์ที่แสดงรายการประเภทคำสั่งและที่เชื่อมโยง เครื่องจัดการที่อยู่ try_item แต่ละรายการมีออฟเซ็ตแบบไบต์ไว ในโครงสร้างนี้ องค์ประกอบนี้จะปรากฏต่อเมื่อ tries_size ไม่ใช่ 0

รูปแบบtry_item

ชื่อ รูปแบบ คำอธิบาย
Start_addr Uint ที่อยู่เริ่มต้นของบล็อกโค้ดที่รายการนี้ครอบคลุม ที่อยู่ คือจำนวนหน่วยของโค้ด 16 บิตจนถึงจุดเริ่มต้นของหน่วยแรกที่ครอบคลุม วิธีการ
จำนวน insn_count Ushort จำนวนหน่วยของโค้ด 16 บิตที่รายการนี้ครอบคลุม โค้ดล่าสุด หน่วยโฆษณาที่ครอบคลุม (รวม) คือ start_addr + insn_count - 1
ปิดตัวแฮนเดิล Ushort เป็นไบต์จากจุดเริ่มต้นของ encoded_catch_hander_list เป็น encoded_catch_handler สำหรับรายการนี้ ค่านี้ต้องเป็น ชดเชยจุดเริ่มต้นของ encoded_catch_handler

รูปแบบรายการเข้ารหัส_ที่จับ_มือ

ชื่อ รูปแบบ คำอธิบาย
ขนาด Uleb128 ขนาดของรายการนี้ ในรายการ
ลิสต์ เข้ารหัส_มือจับ[ขนาด_มือจับ] รายการตัวแฮนเดิลจริงที่แสดงโดยตรง (ไม่ใช่ออฟเซ็ต) และเรียงต่อกันตามลำดับ

รูปแบบแฮนเดิลที่เข้ารหัส_เข้ารหัส

ชื่อ รูปแบบ คำอธิบาย
ขนาด Sleb128 จำนวนประเภทการส่งในรายการนี้ หากไม่ใช่ค่าบวก ค่านี้จะเป็น ค่าลบของจำนวนประเภทการส่ง และการติดตามการดักจับ ด้วยตัวแฮนเดิลแบบรับทั้งหมด เช่น size จาก 0 หมายความว่ามีการรับทั้งหมด แต่ไม่มีที่พิมพ์ไว้อย่างชัดเจน size ของ 2 หมายความว่ามี แบบที่พิมพ์ไว้ แต่ไม่มีที่อยู่ที่รับทั้งหมด และ size จาก -1 หมายความว่า มีข้อความค้นหาที่ถูกพิมพ์ 1 รายการพร้อมด้วย "แคชทั้งหมด"
ตัวแฮนเดิล เข้ารหัส_ประเภท_เพิ่ม_คู่[abs(size)] สตรีมของรายการที่เข้ารหัส abs(size) รายการ แต่ละรายการต่อรายการที่ถูกจับได้ ตามลำดับที่ควรทดสอบประเภทนั้นๆ
Keep_all_addr uleb128 (ไม่บังคับ) ที่อยู่ไบต์โค้ดของเครื่องจัดการแบบรับทั้งหมด องค์ประกอบนี้ ปรากฏหาก size ไม่เป็นบวก

รูปแบบ encrypted_type_addr_pair

ชื่อ รูปแบบ คำอธิบาย
type_idx Uleb128 ดัชนีลงในรายการ type_ids สำหรับประเภท ข้อยกเว้นที่จะจับ
Addr Uleb128 ที่อยู่ไบต์โค้ดของเครื่องจัดการข้อยกเว้นที่เชื่อมโยง

debug_info_item

อ้างอิงจาก code_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: ไม่มี (จัดข้อความแบบไบต์)

debug_info_item แต่ละรายการจะกำหนดไบต์โค้ดที่ได้แรงบันดาลใจจาก DWARF3 ทำให้สถานะของระบบ ซึ่งเมื่อแปลความหมายแล้ว และ (อาจ) ข้อมูลตัวแปรภายในสำหรับ code_item ลำดับเริ่มต้นด้วยความยาวตัวแปร ส่วนหัว (ความยาวจะขึ้นอยู่กับจำนวนเมธอด ) ตามด้วยไบต์โค้ดเครื่องสถานะแล้วสิ้นสุด กับขนาด DBG_END_SEQUENCE ไบต์

เครื่องสถานะประกอบด้วยรีจิสเตอร์ 5 รายการ รีจิสเตอร์ address แสดงการชดเชยคำแนะนำใน insns_item ที่เกี่ยวข้องในหน่วยโค้ด 16 บิต การลงทะเบียน address จะเริ่มต้นที่ 0 เมื่อเริ่มต้นแต่ละวัน debug_info ต่อเนื่องและต้องเพิ่มขึ้นอย่างเดียว การลงทะเบียน line จะแสดงหมายเลขบรรทัดต้นทาง ควรเชื่อมโยงกับรายการตารางตำแหน่งถัดไปซึ่งเกิดจาก สถานะของเครื่อง โดยจะเริ่มต้นในส่วนหัวของลำดับ และอาจ เปลี่ยนแปลงในทิศทางบวกหรือลบ แต่ต้องไม่น้อยกว่า 1 ทะเบียน source_file แสดงถึง ไฟล์ต้นฉบับที่รายการหมายเลขบรรทัดใช้อ้างอิง เริ่มต้นโดย ค่าของ source_file_idx ใน class_def_item ตัวแปรอีก 2 ตัว ได้แก่ prologue_end และ epilogue_begin เป็นแฟล็กบูลีน (เริ่มต้นกับ false) ที่ระบุว่ามีการปล่อยตำแหน่งถัดไปหรือไม่ ควรเป็นอารัมภบทหรือบทส่งท้ายของเมธอด เครื่องสถานะ ต้องติดตามชื่อและประเภทของตัวแปรในเครื่องล่าสุดที่ใช้งานอยู่ด้วย แต่ละรายจะลงทะเบียนเพื่อรับรหัส DBG_RESTART_LOCAL

ส่วนหัวจะเป็นดังต่อไปนี้

ชื่อ รูปแบบ คำอธิบาย
เริ่มบรรทัด Uleb128 ค่าเริ่มต้นสำหรับการลงทะเบียน line ของเครื่องมีสถานะ ไม่ได้แสดงถึงรายการตำแหน่งจริง
ขนาดพารามิเตอร์ Uleb128 จำนวนชื่อพารามิเตอร์ที่เข้ารหัส ควรมี 1 รายการต่อพารามิเตอร์เมธอด ยกเว้น this ของวิธีอินสแตนซ์ หากมี
ชื่อพารามิเตอร์ uleb128p1[parameters_size] ดัชนีสตริงของชื่อพารามิเตอร์เมธอด ค่าที่เข้ารหัสของ NO_INDEX ระบุว่าไม่มีชื่อ ใช้ได้กับพารามิเตอร์ที่เกี่ยวข้อง ตัวบอกประเภท และลายเซ็นจะแสดงโดยนัยจากข้อบ่งชี้เมธอดและลายเซ็น

ค่าโค้ดไบต์มีดังนี้

ชื่อ ค่า รูปแบบ อาร์กิวเมนต์ คำอธิบาย
DBG_END_SEQUENCE 0x00 (ไม่มี) สิ้นสุดลำดับข้อมูลการแก้ไขข้อบกพร่องของ code_item
DBG_ADVANCE_PC 0x uleb128 addr_diff addr_diff: จำนวนที่จะเพิ่มลงในการจดทะเบียนที่อยู่ ดำเนินการลงทะเบียนที่อยู่ล่วงหน้าโดยไม่มีการระบุตำแหน่ง
บรรทัด DBG 0x02 sleb128line_diff line_diff: จำนวนเงินที่จะเปลี่ยนสายลงทะเบียนภายใน นำเครื่องหมายออกจากเส้นชัยโดยไม่ส่งตำแหน่ง
DBG_START_LOCAL 0x uleb128register_num
uleb128p1 name_idx
uleb128p1 type_idx
register_num: ลงทะเบียนที่จะมีคำว่า
name_idx: ดัชนีสตริงของชื่อ
type_idx: ดัชนีประเภทประเภท
จะแนะนำตัวแปรในเครื่องในที่อยู่ปัจจุบัน อย่างใดอย่างหนึ่ง name_idx หรือ type_idx อาจมีลักษณะดังนี้ NO_INDEX เพื่อระบุว่าไม่รู้จักค่านั้น
DBG_START_LOCAL_EXTENDED 0x uleb128register_num
uleb128p1 name_idx
uleb128p1 type_idx
uleb128p1sig_idx
register_num: ลงทะเบียนที่จะมีคำว่า
name_idx: ดัชนีสตริงของชื่อ
type_idx: ดัชนีประเภท
sig_idx: ดัชนีสตริงของลายเซ็นประเภท
แนะนำ Local ที่มีลายเซ็นประเภทที่ที่อยู่ปัจจุบัน name_idx, type_idx หรือ sig_idx อาจเป็น NO_INDEX เพื่อระบุว่าไม่รู้จักค่านั้น (หาก sig_idx คือ -1 อย่างไรก็ตาม ข้อมูลเดียวกันอาจแสดงมากกว่า อย่างมีประสิทธิภาพโดยใช้รหัสดำเนินการ DBG_START_LOCAL)

หมายเหตุ: ดูการสนทนาภายใต้ "dalvik.annotation.Signature" ข้อควรระวังเกี่ยวกับ การจัดการลายเซ็น

DBG_END_LOCAL 0x05 uleb128register_num register_num: การลงทะเบียนที่อยู่ในพื้นที่ จะทำเครื่องหมายตัวแปรในเครื่องที่ใช้อยู่ว่าอยู่นอกขอบเขต ที่อยู่
DBG_RESTART_LOCAL 0x06 uleb128register_num register_num: ลงทะเบียนเพื่อรีสตาร์ท จะแนะนำตัวแปรภายในอีกครั้งในที่อยู่ปัจจุบัน ชื่อ และประเภทตรงกับในเครื่องล่าสุดที่ใช้งานอยู่ใน ลงทะเบียน
DBG_SET_PROLOGUE_END 0x07 (ไม่มี) ตั้งค่าการลงทะเบียนเครื่องสถานะ prologue_end ซึ่งระบุว่ารายการตำแหน่งถัดไปที่เพิ่มควร ถือเป็นการสิ้นสุดอารัมภบทของเมธอด (สถานที่ที่เหมาะสมสำหรับ เบรกพอยท์ของเมธอด) การจดทะเบียน prologue_end คือ ล้างโดยรหัสพิเศษ (>= 0x0a) ใดๆ
DBG_SET_EPILOGUE_BEGIN 0x08 (ไม่มี) ตั้งค่าการลงทะเบียนเครื่องสถานะ epilogue_begin ซึ่งระบุว่ารายการตำแหน่งถัดไปที่เพิ่มควร ถือเป็นจุดเริ่มต้นของบทส่งท้ายวิธีการ (สถานที่ที่เหมาะสม เพื่อระงับการดำเนินการก่อนออกจากเมธอด) ล้างการจดทะเบียน epilogue_begin ออกตามกรณีพิเศษ (>= 0x0a) รหัสการดำเนินการ
ไฟล์ DBG 0x09 uleb128p1 name_idx name_idx: ดัชนีสตริงของชื่อไฟล์ต้นฉบับ; NO_INDEX หากไม่ทราบ ระบุว่ารายการหมายเลขบรรทัดต่อๆ มาทั้งหมดอ้างอิงถึง ชื่อไฟล์ต้นฉบับ แทนชื่อเริ่มต้นที่ระบุใน code_item
โอกาสพิเศษ 0x0ก... 0xff (ไม่มี) ได้ทำการขึ้นทะเบียน line และ address แล้ว แสดงรายการตำแหน่ง และล้าง prologue_end และ epilogue_begin โปรดดูคำอธิบายด้านล่าง

รหัสการดำเนินการพิเศษ

Opcode ที่มีค่าระหว่าง 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)

ไดเรกทอรีคำอธิบายประกอบ [description_directory_item]

อ้างอิงจาก class_def_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
ปิดคำอธิบายประกอบคลาส Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังคำอธิบายประกอบที่ทำโดยตรง ในชั้นเรียน หรือ 0 หากชั้นเรียนไม่มีคำอธิบายประกอบโดยตรง หากไม่ใช่ 0 ของออฟเซ็ต ควรอยู่ที่ตำแหน่งใน data ระบุรูปแบบของข้อมูลแล้ว โดย "annotation_set_item" ที่ด้านล่าง
ขนาดฟิลด์ Uint จำนวนช่องที่มีคำอธิบายประกอบโดยรายการนี้
ขนาด_คำอธิบายประกอบ Uint จำนวนเมธอดที่มีคำอธิบายประกอบโดยรายการนี้
พารามิเตอร์ขนาดคำอธิบายประกอบ Uint จำนวนรายการพารามิเตอร์เมธอดที่รายการนี้มีคำอธิบายประกอบ
ช่องคำอธิบายประกอบ ฟิลด์_คำอธิบายประกอบ[fields_size] (ไม่บังคับ) รายการคำอธิบายประกอบช่องที่เกี่ยวข้อง องค์ประกอบของรายการจะต้อง จัดเรียงตามลําดับเพิ่มขึ้นตาม field_idx
วิธีการเขียนคำอธิบายประกอบ method_annotation[methods_size] (ไม่บังคับ) รายการคำอธิบายประกอบเมธอดที่เกี่ยวข้อง องค์ประกอบของรายการจะต้อง จัดเรียงตามลําดับเพิ่มขึ้นตาม method_idx
คำอธิบายประกอบพารามิเตอร์ parameter_annotation[parameters_size] (ไม่บังคับ) รายการคำอธิบายประกอบพารามิเตอร์เมธอดที่เกี่ยวข้อง องค์ประกอบของ ต้องจัดเรียงลำดับเพิ่มขึ้นตาม method_idx

หมายเหตุ: องค์ประกอบทั้งหมด field_id และ อินสแตนซ์ method_id รายการต้องอ้างอิงถึงคลาสที่กำหนดเดียวกัน

รูปแบบช่องคำอธิบายประกอบ

ชื่อ รูปแบบ คำอธิบาย
Field_idx Uint ดัชนีลงในรายการ field_ids สำหรับข้อมูลประจำตัวของ ช่องที่มีคำอธิบายประกอบ
ปิดคำอธิบายประกอบ Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการคำอธิบายประกอบสำหรับ ด้วย ออฟเซ็ตควรอยู่ที่ตำแหน่งใน data รูปแบบของข้อมูลจะกำหนดโดย "annotation_set_item" ที่ด้านล่าง

รูปแบบคำอธิบายประกอบของเมธอด

ชื่อ รูปแบบ คำอธิบาย
method_idx Uint ดัชนีลงในรายการ method_ids สำหรับข้อมูลประจำตัวของ วิธีที่มีคำอธิบายประกอบ
ปิดคำอธิบายประกอบ Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการคำอธิบายประกอบสำหรับ เมธอด ออฟเซ็ตควรอยู่ที่ตำแหน่งใน data รูปแบบของข้อมูลจะกำหนดโดย "annotation_set_item" ที่ด้านล่าง

รูปแบบคำอธิบายประกอบ "พารามิเตอร์_"

ชื่อ รูปแบบ คำอธิบาย
method_idx Uint ดัชนีลงในรายการ method_ids สำหรับข้อมูลประจำตัวของ เมธอดที่มีพารามิเตอร์กำลังถูกใส่คำอธิบายประกอบ
ปิดคำอธิบายประกอบ Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังรายการคำอธิบายประกอบสำหรับ พารามิเตอร์เมธอด ออฟเซ็ตควรอยู่ที่ตำแหน่งใน data รูปแบบของข้อมูลจะกำหนดโดย "annotation_set_ref_list" ที่ด้านล่าง

ชุดคำอธิบายประกอบ [description_set_ref_list]

อ้างอิงจาก parameter_annotations_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
ขนาด Uint ขนาดของรายการ ในรายการ
ลิสต์ Anthos_set_ref_item[size] องค์ประกอบของรายการ

รูปแบบคำอธิบายประกอบ_set_ref_item

ชื่อ รูปแบบ คำอธิบาย
ปิดคำอธิบายประกอบ Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังชุดคำอธิบายประกอบที่อ้างอิง หรือ 0 หากไม่มีคำอธิบายประกอบสำหรับองค์ประกอบนี้ หากไม่ใช่ 0 ของออฟเซ็ต ควรอยู่ที่ตำแหน่งใน data รูปแบบของข้อมูลจะกำหนดโดย "annotation_set_item" ที่ด้านล่าง

ชุดคำอธิบายประกอบ [description_set_item]

อ้างอิงจาก description_directory_item, field_annotations_item, method_annotations_item และ description_set_ref_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: 4 ไบต์

ชื่อ รูปแบบ คำอธิบาย
ขนาด Uint ขนาดของชุด ในรายการ
รายการ Anthos_off_item[size] ในเซ็ตได้ด้วย องค์ประกอบต้องจัดเรียงตามลำดับที่เพิ่มขึ้น โดย type_idx

รูปแบบ description_off_item

ชื่อ รูปแบบ คำอธิบาย
ปิดคำอธิบายประกอบ Uint ออฟเซ็ตจากจุดเริ่มต้นของไฟล์ไปยังคำอธิบายประกอบ ออฟเซ็ตควรอยู่ที่ตำแหน่งในส่วน data และรูปแบบของข้อมูล ณ ตำแหน่งนั้นจะกำหนดโดย "annotation_item" ที่ด้านล่าง

สินค้าคำอธิบายประกอบ

อ้างอิงจาก description_set_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: ไม่มี (จัดข้อความแบบไบต์)

ชื่อ รูปแบบ คำอธิบาย
การเปิดเผย ยูไบต์ ระดับการมองเห็นคำอธิบายประกอบนี้ (ดูด้านล่าง)
หมายเหตุ คำอธิบายประกอบที่เข้ารหัส เนื้อหาคำอธิบายประกอบที่เข้ารหัสในรูปแบบที่อธิบายโดย "รูปแบบ encoded_annotation" ต่ำกว่า "การเข้ารหัส encoded_value" ที่ด้านบน

ค่าระดับการเข้าถึง

ตัวเลือกเหล่านี้เป็นตัวเลือกสำหรับช่อง visibility ใน annotation_item:

ชื่อ ค่า คำอธิบาย
การสร้างเป้าหมาย 0x00 ซึ่งควรมองเห็นได้เฉพาะในเวลาสร้าง (เช่น ระหว่างการคอมไพล์ จากโค้ดอื่น)
VISIBILITY_RUNTIME 0x ที่ต้องการให้แสดงขณะรันไทม์
ระบบการมองเห็น 0x02 ต้องปรากฏขณะรันไทม์ แต่มีเฉพาะระบบเบื้องหลังเท่านั้น (และไม่ใช่รหัสผู้ใช้ทั่วไป)

รายการอาร์เรย์ที่เข้ารหัส

อ้างอิงจาก class_def_item

ปรากฏในส่วนข้อมูล

การจัดข้อความ: ไม่มี (จัดข้อความแบบไบต์)

ชื่อ รูปแบบ คำอธิบาย
ค่า อาร์เรย์ที่เข้ารหัส ไบต์ที่แทนค่าอาร์เรย์ที่เข้ารหัสในรูปแบบที่ระบุ โดย "รูปแบบ encoded_array" ภายใต้ "encoded_value การเข้ารหัส" ที่ด้านบน

hideapi_class_data_item

ส่วนนี้ประกอบด้วยข้อมูลเกี่ยวกับอินเทอร์เฟซที่จำกัดซึ่งแต่ละชั้นเรียนใช้

หมายเหตุ เราเปิดตัวฟีเจอร์ API ที่ซ่อนอยู่ใน Android 10.0 และใช้ได้เฉพาะกับไฟล์ DEX ของคลาสในเส้นทางคลาสการเปิดเครื่อง รายการ Flag ที่อธิบายไว้ด้านล่างอาจขยายการให้บริการในอนาคต ของ Android สำหรับข้อมูลเพิ่มเติม โปรดดู ข้อจำกัดในอินเทอร์เฟซที่ไม่ใช่ SDK

ชื่อ รูปแบบ คำอธิบาย
ขนาด Uint ขนาดโดยรวมของส่วน
ออฟเซ็ต Uint[] อาร์เรย์ของออฟเซ็ตที่จัดทำดัชนีโดย class_idx รายการอาร์เรย์เป็นศูนย์ที่ดัชนี class_idx หมายความว่า ไม่มีข้อมูลสำหรับ class_idx นี้ หรือ API ที่ซ่อนอยู่ทั้งหมด ค่าสถานะเป็นศูนย์ มิฉะนั้น รายการอาร์เรย์จะไม่เป็น 0 และมีออฟเซ็ตจาก จุดเริ่มต้นของส่วนนี้ไปยังอาร์เรย์ของ Flag API ที่ซ่อนอยู่ สำหรับ class_idx นี้
Flag Uleb128[] อาร์เรย์การเชื่อมต่อของ Flag API ที่ซ่อนอยู่สำหรับแต่ละคลาส โปรดดูคำอธิบายค่าแฟล็กที่เป็นไปได้ในตารางด้านล่าง ระบบจะเข้ารหัสแฟล็กในลำดับเดียวกับช่องและเมธอด เข้ารหัสในข้อมูลคลาส

ประเภทแฟล็กข้อจำกัด:

ชื่อ ค่า คำอธิบาย
รายการที่อนุญาตพิเศษ 0 อินเทอร์เฟซที่ใช้ได้อย่างอิสระและได้รับการสนับสนุนในฐานะส่วนหนึ่งของ เฟรมเวิร์กของ Android ที่จัดทำเป็นเอกสารอย่างเป็นทางการ ดัชนีแพ็กเกจ
รายการที่ต้องสงสัย 1 อินเทอร์เฟซที่ไม่ใช่ SDK ซึ่งใช้ไม่ว่าแอปพลิเคชันจะเป็นแบบใดก็ตาม ระดับ API เป้าหมาย
รายการที่ไม่อนุญาต 2 อินเทอร์เฟซที่ไม่ใช่ SDK ที่ไม่สามารถใช้ได้ไม่ว่าแอปพลิเคชัน ระดับ API เป้าหมาย การเข้าถึงอินเทอร์เฟซใดอินเทอร์เฟซหนึ่งเหล่านี้ก่อให้เกิด ข้อผิดพลาดรันไทม์
รายการสีเทา-max‐o 3 อินเทอร์เฟซที่ไม่ใช่ SDK ซึ่งใช้ได้สำหรับ Android 8.x หรือต่ำกว่า เว้นแต่จะถูกจำกัด
รายการสีเทา-max‐p 4 อินเทอร์เฟซที่ไม่ใช่ SDK ที่ใช้กับ Android 9.x ได้ เว้นแต่จะถูกจำกัด
รายการสีเทา-สูงสุด-q 5 อินเทอร์เฟซที่ไม่ใช่ SDK ที่ใช้กับ Android 10.x ได้ เว้นแต่จะถูกจำกัด
รายการสีเทา-max‐r 6 อินเทอร์เฟซที่ไม่ใช่ SDK ซึ่งใช้สําหรับ Android 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.Memberส่วนย่อย

ปรากฏในชั้นเรียน

แนบคำอธิบายประกอบ MemberClasses ไว้กับแต่ละชั้นเรียน ซึ่งจะประกาศคลาสของสมาชิก (ชั้นเรียนสมาชิกคือชั้นเรียนในชั้นโดยตรง ที่มีชื่อ)

ชื่อ รูปแบบ คำอธิบาย
ค่า ชั้นเรียน[] อาร์เรย์ของคลาสสมาชิก

dalvik.annotation.MethodParameters

ปรากฏในเมธอด

หมายเหตุ: คำอธิบายประกอบนี้เพิ่มเข้ามาหลังจาก Android 7.1 โดยจะไม่สนใจการแสดงข้อมูลใน Android รุ่นก่อนหน้า

คำอธิบายประกอบ MethodParameters เป็นคำอธิบายประกอบที่ไม่บังคับและใช้เพื่อ ระบุข้อมูลเมตาของพารามิเตอร์ เช่น ชื่อพารามิเตอร์และตัวแก้ไข

สามารถละเว้นคำอธิบายประกอบจากเมธอดหรือตัวสร้างได้อย่างปลอดภัยเมื่อ ไม่จำเป็นต้องระบุข้อมูลเมตาของพารามิเตอร์ขณะรันไทม์ java.lang.reflect.Parameter.isNamePresent() สามารถใช้ในการตรวจสอบ ดูว่ามีข้อมูลเมตาสำหรับพารามิเตอร์หรือไม่และการสะท้อนที่เชื่อมโยง เช่น java.lang.reflect.Parameter.getName() กลับไปใช้ลักษณะการทำงานเริ่มต้นขณะรันไทม์หากไม่มีข้อมูล

เมื่อรวมข้อมูลเมตาของพารามิเตอร์ คอมไพเลอร์จะต้องมีข้อมูล สำหรับคลาสที่สร้างขึ้น เช่น enum เนื่องจากข้อมูลเมตาของพารามิเตอร์ รวมถึงระบุว่าพารามิเตอร์เป็นพารามิเตอร์สังเคราะห์หรือมีข้อกำหนดหรือไม่

คำอธิบายประกอบ MethodParameters จะอธิบายแต่ละวิธีเท่านั้น พารามิเตอร์ ดังนั้น คอมไพเลอร์อาจข้ามคำอธิบายประกอบโดยสิ้นเชิงได้ สำหรับตัวสร้างและเมธอดที่ไม่มีพารามิเตอร์ เพื่อขนาดโค้ด และรันไทม์

อาร์เรย์ที่ระบุด้านล่างต้องมีขนาดเท่ากับ method_id_item โครงสร้าง dex ที่เชื่อมโยงกับเมธอด มิฉะนั้น จะมีการขว้าง java.lang.reflect.MalformedParametersException ที่ รันไทม์

ซึ่งก็คือ method_id_item.proto_idx -> proto_id_item.parameters_off -> type_list.size ต้องเหมือนกับ names().length และ accessFlags().length

เนื่องจาก MethodParameters อธิบายวิธีการอย่างเป็นทางการทั้งหมด พารามิเตอร์ใดๆ แม้แต่พารามิเตอร์ที่ไม่ได้ประกาศอย่างชัดแจ้งหรือโดยนัยในซอร์สโค้ด ขนาดของอาร์เรย์อาจแตกต่างจากลายเซ็นหรือข้อมูลเมตาอื่นๆ ข้อมูลที่อิงตามพารามิเตอร์ที่ชัดแจ้งที่ประกาศในแหล่งที่มาเท่านั้น โค้ด MethodParameters จะไม่มีข้อมูลใดๆ เกี่ยวกับ ประเภทพารามิเตอร์ตัวรับคำอธิบายประกอบที่ไม่มีอยู่ในเมธอดจริง ลายเซ็น

ชื่อ รูปแบบ คำอธิบาย
ชื่อ String[] ชื่อของพารามิเตอร์อย่างเป็นทางการสำหรับเมธอดที่เกี่ยวข้อง อาร์เรย์ ต้องไม่เป็น Null แต่ต้องว่างเปล่าหากไม่มีพารามิเตอร์อย่างเป็นทางการ ค่าใน อาร์เรย์ต้องเป็นค่าว่างหากพารามิเตอร์อย่างเป็นทางการที่มีดัชนีนั้นไม่มีชื่อ
หากสตริงชื่อพารามิเตอร์ว่างเปล่าหรือมี ".", ";", "[" หรือ '/' ตามด้วย จะขว้าง java.lang.reflect.MalformedParametersException ที่ รันไทม์
AccessFlags int[] แฟล็กการเข้าถึงของพารามิเตอร์อย่างเป็นทางการสำหรับเมธอดที่เกี่ยวข้อง อาร์เรย์ต้องไม่เป็น Null แต่ต้องว่างเปล่าถ้าไม่มีพารามิเตอร์ที่เป็นทางการ
ค่านี้จะเป็นมาสก์บิตที่มีค่าต่อไปนี้
  • 0x0010 : สุดท้าย พารามิเตอร์ประกาศเป็นขั้นสุดท้าย
  • 0x1000 : พารามิเตอร์สังเคราะห์โดยคอมไพเลอร์
  • 0x8000 : ตามที่กำหนด พารามิเตอร์เป็นกระบวนการสังเคราะห์ แต่ใช้ภาษาโดยนัยด้วย ข้อกำหนด
หากมีการตั้งค่าบิตนอกชุดนี้ ระบบจะแสดงผล java.lang.reflect.MalformedParametersException ระหว่างรันไทม์

dalvik.annotation.Signature

ปรากฏในชั้นเรียน ฟิลด์ และเมธอด

มีคำอธิบายประกอบ Signature แนบอยู่กับชั้นเรียนแต่ละชั้น หรือ Method ที่กำหนดไว้ในแง่ของประเภทที่ซับซ้อนมากขึ้น แทนด้วย type_id_item รูปแบบ .dex ไม่ได้กำหนดรูปแบบของลายเซ็น รายการดังกล่าว มีไว้เพื่อแสดงลายเซ็นต้นฉบับ เพื่อให้การนำภาษานั้นๆ ไปใช้ได้ประสบความสำเร็จ อรรถศาสตร์ ด้วยเหตุนี้ โดยทั่วไปลายเซ็นจึงไม่ได้รับการแยกวิเคราะห์ (หรือได้รับการยืนยัน) ตามการใช้งานเครื่องเสมือน ลายเซ็นจะส่งถึงมือลูกค้าได้ง่ายๆ ไปจนถึง API และเครื่องมือระดับสูง (เช่น โปรแกรมแก้ไขข้อบกพร่อง) การใช้งาน ดังนั้น ควรเขียนลายเซ็นเพื่อไม่ให้ สมมติฐานเกี่ยวกับการรับเฉพาะลายเซ็นที่ถูกต้อง การป้องกันโดยชัดแจ้ง กับความเป็นไปได้ที่จะพบเนื้อหาต่างๆ ในเชิงไวยากรณ์ ลายเซ็นไม่ถูกต้อง

เนื่องจากสตริงลายเซ็นมักจะมี เนื้อหาที่ซ้ำกันอยู่มากมาย คำอธิบายประกอบ Signature ได้รับการระบุเป็นอาร์เรย์ของ สตริง โดยที่องค์ประกอบที่ซ้ำกันจะหมายถึงสตริงเดียวกัน ข้อมูลที่สำคัญ และลายเซ็นจะนำมาใช้เป็นการเชื่อมโยงของ ทุกสตริงในอาร์เรย์ ไม่มีกฎในการดึง แยกลายเซ็นออกเป็นสตริงต่างๆ ที่ขึ้นอยู่กับ เครื่องมือที่สร้างไฟล์ .dex ไฟล์

ชื่อ รูปแบบ คำอธิบาย
ค่า String[] ลายเซ็นของคลาสหรือสมาชิกนี้ เป็นอาร์เรย์ของสตริงที่ ต่อกัน

dalvik.annotation.Throws

ปรากฏในเมธอด

คำอธิบายประกอบ Throws จะแนบอยู่กับแต่ละวิธี ที่ประกาศให้มีประเภทข้อยกเว้นอย่างน้อยหนึ่งประเภท

ชื่อ รูปแบบ คำอธิบาย
ค่า ชั้นเรียน[] อาร์เรย์ของประเภทข้อยกเว้นที่ส่ง