From 3a79b6389df39928823a7a8e862c2f647a1cd164 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Thu, 28 Apr 2016 16:29:22 -0700 Subject: [PATCH] Supply librarySearchPath to PathClassLoader PathClassLoader needs librarySearchPath in order to be able to find native libraries. The java.library.path property is no longer implicitly applied to all basedexclassloaders, and needs to be passed explicitly. Bug: http://b/28449304 Change-Id: Id5b4273553d783c0f7a964f72ecb2c99f3aeaf6f --- test/141-class-unload/src/Main.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/test/141-class-unload/src/Main.java b/test/141-class-unload/src/Main.java index 15683b0b1..17a6049db 100644 --- a/test/141-class-unload/src/Main.java +++ b/test/141-class-unload/src/Main.java @@ -23,6 +23,7 @@ import java.lang.reflect.Method; public class Main { static final String DEX_FILE = System.getenv("DEX_LOCATION") + "/141-class-unload-ex.jar"; + static final String LIBRARY_SEARCH_PATH = System.getProperty("java.library.path"); static String nativeLibraryName; public static void main(String[] args) throws Exception { @@ -32,7 +33,7 @@ public class Main { throw new AssertionError("Couldn't find path class loader class"); } Constructor constructor = - pathClassLoader.getDeclaredConstructor(String.class, ClassLoader.class); + pathClassLoader.getDeclaredConstructor(String.class, String.class, ClassLoader.class); try { testUnloadClass(constructor); testUnloadLoader(constructor); @@ -49,7 +50,7 @@ public class Main { // Test that the oat files are unloaded. testOatFilesUnloaded(getPid()); } catch (Exception e) { - System.out.println(e); + e.printStackTrace(); } } @@ -118,7 +119,7 @@ public class Main { private static void testNoUnloadInvoke(Constructor constructor) throws Exception { WeakReference loader = new WeakReference((ClassLoader) constructor.newInstance( - DEX_FILE, ClassLoader.getSystemClassLoader())); + DEX_FILE, LIBRARY_SEARCH_PATH, ClassLoader.getSystemClassLoader())); WeakReference intHolder = new WeakReference(loader.get().loadClass("IntHolder")); intHolder.get().getDeclaredMethod("runGC").invoke(intHolder.get()); boolean isNull = loader.get() == null; @@ -128,7 +129,7 @@ public class Main { private static void testNoUnloadInstance(Constructor constructor) throws Exception { WeakReference loader = new WeakReference((ClassLoader) constructor.newInstance( - DEX_FILE, ClassLoader.getSystemClassLoader())); + DEX_FILE, LIBRARY_SEARCH_PATH, ClassLoader.getSystemClassLoader())); WeakReference intHolder = new WeakReference(loader.get().loadClass("IntHolder")); Object o = intHolder.get().newInstance(); Runtime.getRuntime().gc(); @@ -138,7 +139,7 @@ public class Main { private static WeakReference setUpUnloadClass(Constructor constructor) throws Exception { ClassLoader loader = (ClassLoader) constructor.newInstance( - DEX_FILE, ClassLoader.getSystemClassLoader()); + DEX_FILE, LIBRARY_SEARCH_PATH, ClassLoader.getSystemClassLoader()); Class intHolder = loader.loadClass("IntHolder"); Method getValue = intHolder.getDeclaredMethod("getValue"); Method setValue = intHolder.getDeclaredMethod("setValue", Integer.TYPE); @@ -155,7 +156,7 @@ public class Main { boolean waitForCompilation) throws Exception { ClassLoader loader = (ClassLoader) constructor.newInstance( - DEX_FILE, ClassLoader.getSystemClassLoader()); + DEX_FILE, LIBRARY_SEARCH_PATH, ClassLoader.getSystemClassLoader()); Class intHolder = loader.loadClass("IntHolder"); Method setValue = intHolder.getDeclaredMethod("setValue", Integer.TYPE); setValue.invoke(intHolder, 2); @@ -177,7 +178,7 @@ public class Main { private static WeakReference setUpLoadLibrary(Constructor constructor) throws Exception { ClassLoader loader = (ClassLoader) constructor.newInstance( - DEX_FILE, ClassLoader.getSystemClassLoader()); + DEX_FILE, LIBRARY_SEARCH_PATH, ClassLoader.getSystemClassLoader()); Class intHolder = loader.loadClass("IntHolder"); Method loadLibrary = intHolder.getDeclaredMethod("loadLibrary", String.class); loadLibrary.invoke(intHolder, nativeLibraryName); -- 2.11.0