Make AppDataDirGuesser read classpath using Reflection from
the classloader's "path" field when available (Gingerbread and
below).

The reason for not parsing the classpath from the output of
toString() is that on some platforms (e.g., Eclair) the output
does not contain the classpath.

This change originated in LittleMock r10.
diff --git a/src/main/java/com/google/dexmaker/AppDataDirGuesser.java b/src/main/java/com/google/dexmaker/AppDataDirGuesser.java
index 3252a1c..e9f343c 100644
--- a/src/main/java/com/google/dexmaker/AppDataDirGuesser.java
+++ b/src/main/java/com/google/dexmaker/AppDataDirGuesser.java
@@ -17,6 +17,7 @@
 package com.google.dexmaker;
 
 import java.io.File;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -31,7 +32,7 @@
             Class<?> clazz = Class.forName("dalvik.system.PathClassLoader");
             clazz.cast(classLoader);
             // Use the toString() method to calculate the data directory.
-            String pathFromThisClassLoader = getPathFromThisClassLoader(classLoader);
+            String pathFromThisClassLoader = getPathFromThisClassLoader(classLoader, clazz);
             File[] results = guessPath(pathFromThisClassLoader);
             if (results.length > 0) {
                 return results[0];
@@ -46,7 +47,19 @@
         return AppDataDirGuesser.class.getClassLoader();
     }
 
-    private String getPathFromThisClassLoader(ClassLoader classLoader) {
+    private String getPathFromThisClassLoader(ClassLoader classLoader,
+            Class<?> pathClassLoaderClass) {
+        // Prior to ICS, we can simply read the "path" field of the
+        // PathClassLoader.
+        try {
+            Field pathField = pathClassLoaderClass.getDeclaredField("path");
+            pathField.setAccessible(true);
+            return (String) pathField.get(classLoader);
+        } catch (NoSuchFieldException ignored) {
+        } catch (IllegalAccessException ignored) {
+        } catch (ClassCastException ignored) {
+        }
+
         // Parsing toString() method: yuck.  But no other way to get the path.
         // Strip out the bit between angle brackets, that's our path.
         String result = classLoader.toString();