diff options
author | Jesse Wilson <jessewilson@google.com> | 2011-08-12 13:36:58 -0400 |
---|---|---|
committer | Jesse Wilson <jessewilson@google.com> | 2011-08-12 13:41:04 -0400 |
commit | ec4d64d1a6421b89fbc65da9d18aae89814474d7 (patch) | |
tree | 344d2cb19caf5efc8cbb959a91597ed8c2097400 /support/src | |
parent | 892c36b1c1eee25ad46bac6fffdf129219a5e98d (diff) | |
download | libcore-ec4d64d1a6421b89fbc65da9d18aae89814474d7.zip libcore-ec4d64d1a6421b89fbc65da9d18aae89814474d7.tar.gz libcore-ec4d64d1a6421b89fbc65da9d18aae89814474d7.tar.bz2 |
Fix ClassLoaderBuilder to work in an APK file.
This was breaking several CTS tests.
Change-Id: I76a87deeb9a1f7b056adb72447001cf5e23ec0b3
Diffstat (limited to 'support/src')
-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); |