From 671de442d2e4cf507e276f043fd3d7f49d8f619b Mon Sep 17 00:00:00 2001 From: Gil Tselenchuk Date: Wed, 13 Jan 2016 12:28:46 +0200 Subject: [PATCH] file name added to the output --- src/com/android/dexdeps/DexData.java | 10 ++++++-- src/info/persistent/dex/DexFieldCounts.java | 2 +- src/info/persistent/dex/DexMethodCounts.java | 2 +- src/info/persistent/dex/Main.java | 27 ++++++++------------ 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/com/android/dexdeps/DexData.java b/src/com/android/dexdeps/DexData.java index a890fea..20b484a 100644 --- a/src/com/android/dexdeps/DexData.java +++ b/src/com/android/dexdeps/DexData.java @@ -24,6 +24,7 @@ * Data extracted from a DEX file. */ public class DexData { + private String mDexFileName; private RandomAccessFile mDexFile; private HeaderItem mHeaderItem; private String[] mStrings; // strings from string_data_* @@ -39,8 +40,9 @@ public class DexData { /** * Constructs a new DexData for this file. */ - public DexData(RandomAccessFile raf) { - mDexFile = raf; + public DexData(String dexFileName, RandomAccessFile randomAccessFile) { + mDexFile = randomAccessFile; + mDexFileName = dexFileName; } /** @@ -62,6 +64,10 @@ public void load() throws IOException { markInternalClasses(); } + public String getDexFileName() { + return mDexFileName; + } + /** * Verifies the given magic number. */ diff --git a/src/info/persistent/dex/DexFieldCounts.java b/src/info/persistent/dex/DexFieldCounts.java index 22b4b0c..219e156 100644 --- a/src/info/persistent/dex/DexFieldCounts.java +++ b/src/info/persistent/dex/DexFieldCounts.java @@ -70,7 +70,7 @@ public void generate(DexData dexData, boolean includeClasses, String packageFilt private static FieldRef[] getFieldRefs(DexData dexData, Filter filter) { FieldRef[] fieldRefs = dexData.getFieldRefs(); - out.println("Read in " + fieldRefs.length + " field IDs."); + out.println("Read in " + fieldRefs.length + " field IDs from " + dexData.getDexFileName() + "."); if (filter == Filter.ALL) { return fieldRefs; } diff --git a/src/info/persistent/dex/DexMethodCounts.java b/src/info/persistent/dex/DexMethodCounts.java index 3862c2c..f750a5f 100644 --- a/src/info/persistent/dex/DexMethodCounts.java +++ b/src/info/persistent/dex/DexMethodCounts.java @@ -74,7 +74,7 @@ public void generate(DexData dexData, boolean includeClasses, String packageFilt private static MethodRef[] getMethodRefs(DexData dexData, Filter filter) { MethodRef[] methodRefs = dexData.getMethodRefs(); - out.println("Read in " + methodRefs.length + " method IDs."); + out.println("Read in " + methodRefs.length + " method IDs from " + dexData.getDexFileName() + "."); if (filter == Filter.ALL) { return methodRefs; } diff --git a/src/info/persistent/dex/Main.java b/src/info/persistent/dex/Main.java index 8647a8e..c4edfdb 100644 --- a/src/info/persistent/dex/Main.java +++ b/src/info/persistent/dex/Main.java @@ -17,14 +17,8 @@ import com.android.dexdeps.DexData; import com.android.dexdeps.DexDataException; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.RandomAccessFile; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.io.*; +import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; @@ -54,10 +48,11 @@ void run(String[] args) { } else { counts = new DexMethodCounts(outputStyle); } - List dexFiles = openInputFiles(fileName); + Map dexFiles = openInputFiles(fileName); - for (RandomAccessFile dexFile : dexFiles) { - DexData dexData = new DexData(dexFile); + for (String dexFilenName : dexFiles.keySet()) { + RandomAccessFile dexFile = dexFiles.get(dexFilenName); + DexData dexData = new DexData(dexFilenName, dexFile); dexData.load(); counts.generate(dexData, includeClasses, packageFilter, maxDepth, filter); dexFile.close(); @@ -85,14 +80,14 @@ void run(String[] args) { * classes.dex inside. If the latter, we extract the contents to a * temporary file. */ - List openInputFiles(String fileName) throws IOException { - List dexFiles = new ArrayList(); + Map openInputFiles(String fileName) throws IOException { + Map dexFiles = new HashMap(); openInputFileAsZip(fileName, dexFiles); if (dexFiles.size() == 0) { File inputFile = new File(fileName); RandomAccessFile dexFile = new RandomAccessFile(inputFile, "r"); - dexFiles.add(dexFile); + dexFiles.put(fileName, dexFile); } return dexFiles; @@ -102,7 +97,7 @@ List openInputFiles(String fileName) throws IOException { * Tries to open an input file as a Zip archive (jar/apk) with a * "classes.dex" inside. */ - void openInputFileAsZip(String fileName, List dexFiles) throws IOException { + void openInputFileAsZip(String fileName, Map dexFiles) throws IOException { ZipFile zipFile; // Try it as a zip file. @@ -121,7 +116,7 @@ void openInputFileAsZip(String fileName, List dexFiles) throws // Open and add all files matching "classes.*\.dex" in the zip file. for (ZipEntry entry : Collections.list(zipFile.entries())) { if (entry.getName().matches("classes.*\\.dex")) { - dexFiles.add(openDexFile(zipFile, entry)); + dexFiles.put(entry.getName(), openDexFile(zipFile, entry)); } }