summaryrefslogtreecommitdiffstats
path: root/support/src
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2011-08-12 13:36:58 -0400
committerJesse Wilson <jessewilson@google.com>2011-08-12 13:41:04 -0400
commitec4d64d1a6421b89fbc65da9d18aae89814474d7 (patch)
tree344d2cb19caf5efc8cbb959a91597ed8c2097400 /support/src
parent892c36b1c1eee25ad46bac6fffdf129219a5e98d (diff)
downloadlibcore-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.java21
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);