1. struct DexTypeId {
2. u4 descriptorIdx; /* index into stringIds list for type descriptor */
3. };
1. struct DexProtoId {
2. u2 classIdx; /* index into typeIds list for defining class */
3. u2 typeIdx; /* index into typeIds for field type */
4. u4 nameIdx; /* index into stringIds for field name */
5. };
1. struct DexFieldId {
2. u2 classIdx; /* index into typeIds list for defining class */
3. u2 typeIdx; /* index into typeIds for field type */
4. u4 nameIdx; /* index into stringIds for field name */
5. };
1. struct DexMethodId {
2. u2 classIdx; /* index into typeIds list for defining class */
3. u2 protoIdx; /* index into protoIds for method prototype */
4. u4 nameIdx; /* index into stringIds for method name */
5. };
1. struct DexClassDef {
2. u4 classIdx; /* index into typeIds for this class */
3. u4 accessFlags;
4. u4 superclassIdx; /* index into typeIds for superclass */
5. u4 interfacesOff; /* file offset to DexTypeList */
6. u4 sourceFileIdx; /* index into stringIds for source file name */
7. u4 annotationsOff; /* file offset to annotations_directory_item */
8. u4 classDataOff; /* file offset to class_data_item */
9. u4 staticValuesOff; /* file offset to DexEncodedArray */
10. };
1. struct DexField {
2. u4 fieldIdx; /* index to a field_id_item */
3. u4 accessFlags;
4. };
1. struct DexMethod {
2. u4 methodIdx; /* index to a method_id_item */
3. u4 accessFlags;
4. u4 codeOff; /* file offset to a code_item */
5. };
1. struct DexCode {
2. u2 registersSize;
3. u2 insSize;
4. u2 outsSize;
5. u2 triesSize;
6. u4 debugInfoOff; /* file offset to debug info stream */
7. u4 insnsSize; /* size of the insns array, in u2 units */
8. u2 insns[1];
9. /* followed by optional u2 padding */
10. /* followed by try_item[triesSize] */
11. /* followed by uleb128 handlersSize */
12. /* followed by catch_handler_item[handlersSize] */
13. };