summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdnan Begovic <adnan@cyngn.com>2016-03-02 16:35:51 -0800
committerAdnan Begovic <adnan@cyngn.com>2016-03-02 16:35:51 -0800
commit479775176254c0916aff0ba1871410e5be758ea1 (patch)
treef8685e9c73a7999b8762ac1b17ce176f3c810d0c
parentf8ed7d3f0ea87b3fc1aa72859386c82d8d9bdbd4 (diff)
downloadandroid_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.java10
-rw-r--r--tools/dexdeps/src/com/android/dexdeps/Main.java9
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();