From ec4d64d1a6421b89fbc65da9d18aae89814474d7 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Fri, 12 Aug 2011 13:36:58 -0400 Subject: Fix ClassLoaderBuilder to work in an APK file. This was breaking several CTS tests. Change-Id: I76a87deeb9a1f7b056adb72447001cf5e23ec0b3 --- .../test/java/tests/util/ClassLoaderBuilder.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'support/src') 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 classpathToUrls(String propertyName) { try { String classpath = System.getProperty(propertyName); -- cgit v1.1