diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java index 7b2e60ae..16e5d881 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java @@ -91,4 +91,84 @@ public class DexBackedDexFile implements DexFile { } }; } + + public Set getStrings() { + final int stringCount = dexBuf.getStringCount(); + + return new FixedSizeSet() { + @Override + public String readItem(int index) { + return dexBuf.getString(index); + } + + @Override + public int size() { + return stringCount; + } + }; + } + + public Set getTypes() { + final int typeCount = dexBuf.getTypeCount(); + + return new FixedSizeSet() { + @Override + public String readItem(int index) { + return dexBuf.getType(index); + } + + @Override + public int size() { + return typeCount; + } + }; + } + + public Set getProtos() { + final int protoCount = dexBuf.getProtoCount(); + + return new FixedSizeSet() { + @Override + public String readItem(int index) { + return dexBuf.getProto(index); + } + + @Override + public int size() { + return protoCount; + } + }; + } + + public Set getFields() { + final int fieldCount = dexBuf.getFieldCount(); + + return new FixedSizeSet() { + @Override + public String readItem(int index) { + return dexBuf.getField(index); + } + + @Override + public int size() { + return fieldCount; + } + }; + } + + public Set getMethods() { + final int methodCount = dexBuf.getMethodCount(); + + return new FixedSizeSet() { + @Override + public String readItem(int index) { + return dexBuf.getMethod(index); + } + + @Override + public int size() { + return methodCount; + } + }; + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBuffer.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBuffer.java index 18496a92..1aab36bb 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBuffer.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBuffer.java @@ -245,6 +245,10 @@ public class DexBuffer { return ret; } + public int getStringCount() { + return stringCount; + } + @Nullable public String getOptionalType(int typeIndex) { if (typeIndex == -1) { @@ -268,6 +272,21 @@ public class DexBuffer { return getString(stringIndex); } + public int getTypeCount() { + return typeCount; + } + + @Nonnull + public String getProto(int typeIndex) { + int protoOffset = getProtoIdItemOffset(typeIndex); + int stringIndex = readSmallUint(protoOffset); + return getString(stringIndex); + } + + public int getProtoCount() { + return protoCount; + } + @Nonnull public String getField(int fieldIndex) { int fieldOffset = getFieldIdItemOffset(fieldIndex); @@ -285,6 +304,10 @@ public class DexBuffer { return sb.toString(); } + public int getFieldCount() { + return fieldCount; + } + @Nonnull public String getMethod(int methodIndex) { int methodOffset = getMethodIdItemOffset(methodIndex); @@ -317,6 +340,10 @@ public class DexBuffer { return sb.toString(); } + public int getMethodCount() { + return methodCount; + } + @Nonnull public String getReference(int referenceType, int referenceIndex) { switch (referenceType) {