diff options
-rw-r--r-- | support/src/test/java/tests/util/ClassLoaderBuilder.java | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/support/src/test/java/tests/util/ClassLoaderBuilder.java b/support/src/test/java/tests/util/ClassLoaderBuilder.java index 8fd18c2..0fd4159 100644 --- a/support/src/test/java/tests/util/ClassLoaderBuilder.java +++ b/support/src/test/java/tests/util/ClassLoaderBuilder.java @@ -102,7 +102,7 @@ public final class ClassLoaderBuilder { try { // first try to create a PathClassLoader for a dalvik VM... - String classPath = System.getProperty("java.class.path"); + String classPath = getApplicationClassPath(); return (ClassLoader) Class.forName("dalvik.system.PathClassLoader") .getConstructor(String.class, ClassLoader.class) .newInstance(classPath, bridge); @@ -116,6 +116,25 @@ public final class ClassLoaderBuilder { return new URLClassLoader(classpath.toArray(new URL[classpath.size()]), bridge); } + /** + * Returns a path containing the application's classes. When running in the + * Android framework this will be the APK file; otherwise it's the runtime's + * reported class path. + */ + private String getApplicationClassPath() { + String manifestFile = "AndroidManifest.xml"; + String suffix = "!/" + manifestFile; + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + URL manifest = classLoader.getResource(manifestFile); + if (manifest != null) { + String manifestString = manifest.toString(); + if (manifestString.endsWith(suffix)) { + return manifestString.substring(0, manifestString.length() - suffix.length()); + } + } + return System.getProperty("java.class.path"); + } + private List<URL> classpathToUrls(String propertyName) { try { String classpath = System.getProperty(propertyName); |