FileDocCategorySizeDatePackage
DexIndexPrinter.javaAPI DocAndroid 5.1 API4282Thu Mar 12 22:18:30 GMT 2015com.android.dx.io

DexIndexPrinter

public final class DexIndexPrinter extends Object
Executable that prints all indices of a dex file.

Fields Summary
private final com.android.dex.Dex
dex
private final com.android.dex.TableOfContents
tableOfContents
Constructors Summary
public DexIndexPrinter(File file)

        this.dex = new Dex(file);
        this.tableOfContents = dex.getTableOfContents();
    
Methods Summary
public static voidmain(java.lang.String[] args)

        DexIndexPrinter indexPrinter = new DexIndexPrinter(new File(args[0]));
        indexPrinter.printMap();
        indexPrinter.printStrings();
        indexPrinter.printTypeIds();
        indexPrinter.printProtoIds();
        indexPrinter.printFieldIds();
        indexPrinter.printMethodIds();
        indexPrinter.printTypeLists();
        indexPrinter.printClassDefs();
    
private voidprintClassDefs()

        int index = 0;
        for (ClassDef classDef : dex.classDefs()) {
            System.out.println("class def " + index + ": " + classDef);
            index++;
        }
    
private voidprintFieldIds()

        int index = 0;
        for (FieldId fieldId : dex.fieldIds()) {
            System.out.println("field " + index + ": " + fieldId);
            index++;
        }
    
private voidprintMap()

        for (TableOfContents.Section section : tableOfContents.sections) {
            if (section.off != -1) {
                System.out.println("section " + Integer.toHexString(section.type)
                        + " off=" + Integer.toHexString(section.off)
                        + " size=" + Integer.toHexString(section.size)
                        + " byteCount=" + Integer.toHexString(section.byteCount));
            }
        }
    
private voidprintMethodIds()

        int index = 0;
        for (MethodId methodId : dex.methodIds()) {
            System.out.println("methodId " + index + ": " + methodId);
            index++;
        }
    
private voidprintProtoIds()

        int index = 0;
        for (ProtoId protoId : dex.protoIds()) {
            System.out.println("proto " + index + ": " + protoId);
            index++;
        }
    
private voidprintStrings()

        int index = 0;
        for (String string : dex.strings()) {
            System.out.println("string " + index + ": " + string);
            index++;
        }
    
private voidprintTypeIds()

        int index = 0;
        for (Integer type : dex.typeIds()) {
            System.out.println("type " + index + ": " + dex.strings().get(type));
            index++;
        }
    
private voidprintTypeLists()

        if (tableOfContents.typeLists.off == -1) {
            System.out.println("No type lists");
            return;
        }
        Dex.Section in = dex.open(tableOfContents.typeLists.off);
        for (int i = 0; i < tableOfContents.typeLists.size; i++) {
            int size = in.readInt();
            System.out.print("Type list i=" + i + ", size=" + size + ", elements=");
            for (int t = 0; t < size; t++) {
                System.out.print(" " + dex.typeNames().get((int) in.readShort()));
            }
            if (size % 2 == 1) {
                in.readShort(); // retain alignment
            }
            System.out.println();
        }