diff options
author | Adnan Begovic <adnan@cyngn.com> | 2016-03-02 16:35:51 -0800 |
---|---|---|
committer | Adnan Begovic <adnan@cyngn.com> | 2016-03-02 16:35:51 -0800 |
commit | 479775176254c0916aff0ba1871410e5be758ea1 (patch) | |
tree | f8685e9c73a7999b8762ac1b17ce176f3c810d0c | |
parent | f8ed7d3f0ea87b3fc1aa72859386c82d8d9bdbd4 (diff) | |
download | android_dalvik-479775176254c0916aff0ba1871410e5be758ea1.tar.gz android_dalvik-479775176254c0916aff0ba1871410e5be758ea1.tar.bz2 android_dalvik-479775176254c0916aff0ba1871410e5be758ea1.zip |
dexdeps: Add option for --include-cm-classes.
dexdeps will filter out classes that are marked
as internal when dumping class references from
the classes.dex. Include a hack to allow public
cm classes to be accessible via the dump.
This is then utilized to generate an html page
for api coverage.
Change-Id: I1f2a8c28b33711235f46adf2f4a98102e72b3d74
-rw-r--r-- | tools/dexdeps/src/com/android/dexdeps/DexData.java | 10 | ||||
-rw-r--r-- | tools/dexdeps/src/com/android/dexdeps/Main.java | 9 |
2 files changed, 15 insertions, 4 deletions
diff --git a/tools/dexdeps/src/com/android/dexdeps/DexData.java b/tools/dexdeps/src/com/android/dexdeps/DexData.java index 89dff182a..d55c4b673 100644 --- a/tools/dexdeps/src/com/android/dexdeps/DexData.java +++ b/tools/dexdeps/src/com/android/dexdeps/DexData.java @@ -49,7 +49,7 @@ public class DexData { * @throws IOException if we encounter a problem while reading * @throws DexDataException if the DEX contents look bad */ - public void load() throws IOException { + public void load(boolean includeCMClasses) throws IOException { parseHeaderItem(); loadStrings(); @@ -59,7 +59,7 @@ public class DexData { loadMethodIds(); loadClassDefs(); - markInternalClasses(); + markInternalClasses(includeCMClasses); } /** @@ -288,7 +288,7 @@ public class DexData { * Sets the "internal" flag on type IDs which are defined in the * DEX file or within the VM (e.g. primitive classes and arrays). */ - void markInternalClasses() { + void markInternalClasses(boolean includeCMClasses) { for (int i = mClassDefs.length -1; i >= 0; i--) { mTypeIds[mClassDefs[i].classIdx].internal = true; } @@ -296,6 +296,10 @@ public class DexData { for (int i = 0; i < mTypeIds.length; i++) { String className = mStrings[mTypeIds[i].descriptorIdx]; + if (includeCMClasses && className.startsWith("Lcyanogenmod")) { + mTypeIds[i].internal = false; + continue; + } if (className.length() == 1) { // primitive class mTypeIds[i].internal = true; diff --git a/tools/dexdeps/src/com/android/dexdeps/Main.java b/tools/dexdeps/src/com/android/dexdeps/Main.java index 410694aee..09afec064 100644 --- a/tools/dexdeps/src/com/android/dexdeps/Main.java +++ b/tools/dexdeps/src/com/android/dexdeps/Main.java @@ -39,6 +39,11 @@ public class Main { private boolean mJustClasses = false; /** + * Whether to include "cyanogenmod" namespace classes in the dump. + */ + private boolean mIncludeCMClasses = false; + + /** * Entry point. */ public static void main(String[] args) { @@ -57,7 +62,7 @@ public class Main { for (String fileName : mInputFileNames) { RandomAccessFile raf = openInputFile(fileName); DexData dexData = new DexData(raf); - dexData.load(); + dexData.load(mIncludeCMClasses); if (first) { first = false; @@ -200,6 +205,8 @@ public class Main { //System.out.println("+++ using format " + mOutputFormat); } else if (arg.equals("--just-classes")) { mJustClasses = true; + } else if (arg.equals("--include-cm-classes")) { + mIncludeCMClasses = true; } else { System.err.println("Unknown option '" + arg + "'"); throw new UsageException(); |