Package org.conscrypt
Class NativeLibraryLoader
- java.lang.Object
-
- org.conscrypt.NativeLibraryLoader
-
final class NativeLibraryLoader extends java.lang.ObjectHelper class to load JNI resources.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classNativeLibraryLoader.LoadResultA result of a single attempt to load a library.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringDELETE_LIB_PROPERTY_NAMEprivate static booleanDELETE_NATIVE_LIB_AFTER_LOADINGprivate static java.util.logging.Loggerloggerprivate static java.lang.StringNATIVE_RESOURCE_HOMEprivate static java.lang.StringWORK_DIR_PROPERTY_NAMEprivate static java.io.FileWORKDIR
-
Constructor Summary
Constructors Modifier Constructor Description privateNativeLibraryLoader()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static byte[]classToByteArray(java.lang.Class<?> clazz)Load the helperClassas a byte array, to be redefined in specifiedClassLoader.private static voidcloseQuietly(java.io.Closeable c)private static voidcopyLibrary(java.net.URL classpathUrl, java.io.File tmpFile)Copies the given shared library file from classpath to a temporary file.private static voiddebug(java.lang.String message, java.lang.Throwable t)private static java.io.FilegetWorkDir()private static booleanload(java.lang.String name, java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results)Load the given library with the specifiedClassLoader(package private) static booleanloadFirstAvailable(java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results, java.lang.String... names)Loads the first available library in the collection with the specifiedClassLoader.private static booleanloadFromWorkdir(java.lang.String name, java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results)private static booleanloadLibrary(java.lang.ClassLoader loader, java.lang.String name, boolean absolute, java.util.List<NativeLibraryLoader.LoadResult> results)Loading the native library into the specifiedClassLoader.private static NativeLibraryLoader.LoadResultloadLibraryFromCurrentClassloader(java.lang.String name, boolean absolute)Attempts to load the library using theNativeLibraryUtilhelper from the current classloader.private static NativeLibraryLoader.LoadResultloadLibraryFromHelperClassloader(java.lang.Class<?> helper, java.lang.String name, boolean absolute)Attempts to load the library by reflectively using theNativeLibraryUtilhelper from its classloader.private static voidlog(java.lang.String format, java.lang.Object arg)private static voidlog(java.lang.String format, java.lang.Object arg1, java.lang.Object arg2)private static voidlog(java.lang.String format, java.lang.Object arg1, java.lang.Object arg2, java.lang.Throwable t)private static java.lang.Class<?>tryToLoadClass(java.lang.ClassLoader loader, java.lang.Class<?> helper)Try to load the helperClassinto specifiedClassLoader.
-
-
-
Field Detail
-
logger
private static final java.util.logging.Logger logger
-
WORK_DIR_PROPERTY_NAME
private static final java.lang.String WORK_DIR_PROPERTY_NAME
- See Also:
- Constant Field Values
-
DELETE_LIB_PROPERTY_NAME
private static final java.lang.String DELETE_LIB_PROPERTY_NAME
- See Also:
- Constant Field Values
-
NATIVE_RESOURCE_HOME
private static final java.lang.String NATIVE_RESOURCE_HOME
- See Also:
- Constant Field Values
-
WORKDIR
private static final java.io.File WORKDIR
-
DELETE_NATIVE_LIB_AFTER_LOADING
private static final boolean DELETE_NATIVE_LIB_AFTER_LOADING
-
-
Method Detail
-
getWorkDir
private static java.io.File getWorkDir()
-
loadFirstAvailable
static boolean loadFirstAvailable(java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results, java.lang.String... names)Loads the first available library in the collection with the specifiedClassLoader.
-
load
private static boolean load(java.lang.String name, java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results)Load the given library with the specifiedClassLoader
-
loadFromWorkdir
private static boolean loadFromWorkdir(java.lang.String name, java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results)
-
copyLibrary
private static void copyLibrary(java.net.URL classpathUrl, java.io.File tmpFile) throws java.io.IOExceptionCopies the given shared library file from classpath to a temporary file.- Parameters:
classpathUrl- the URL of the library on classpathtmpFile- the destination temporary file.- Throws:
java.io.IOException
-
loadLibrary
private static boolean loadLibrary(java.lang.ClassLoader loader, java.lang.String name, boolean absolute, java.util.List<NativeLibraryLoader.LoadResult> results)Loading the native library into the specifiedClassLoader.- Parameters:
loader- - TheClassLoaderwhere the native library will be loaded intoname- - The native library path or nameabsolute- - Whether the native library will be loaded by path or by name- Returns:
trueif the library was successfully loaded.
-
loadLibraryFromHelperClassloader
private static NativeLibraryLoader.LoadResult loadLibraryFromHelperClassloader(java.lang.Class<?> helper, java.lang.String name, boolean absolute)
Attempts to load the library by reflectively using theNativeLibraryUtilhelper from its classloader.- Parameters:
helper- TheNativeLibraryUtilhelper classname- the name of the library to load.absolute- true ifnameis an absolute path to the file.- Returns:
- the result of the load operation.
-
loadLibraryFromCurrentClassloader
private static NativeLibraryLoader.LoadResult loadLibraryFromCurrentClassloader(java.lang.String name, boolean absolute)
Attempts to load the library using theNativeLibraryUtilhelper from the current classloader.- Parameters:
name- the name of the library to load.absolute- true ifnameis an absolute path- Returns:
- the result of the load operation.
-
tryToLoadClass
private static java.lang.Class<?> tryToLoadClass(java.lang.ClassLoader loader, java.lang.Class<?> helper) throws java.lang.ClassNotFoundExceptionTry to load the helperClassinto specifiedClassLoader.- Parameters:
loader- - TheClassLoaderwhere to load the helperClasshelper- - The helperClass- Returns:
- A new helper Class defined in the specified ClassLoader.
- Throws:
java.lang.ClassNotFoundException- Helper class not found or loading failed
-
classToByteArray
private static byte[] classToByteArray(java.lang.Class<?> clazz) throws java.lang.ClassNotFoundExceptionLoad the helperClassas a byte array, to be redefined in specifiedClassLoader.- Parameters:
clazz- - The helperClassprovided by this bundle- Returns:
- The binary content of helper
Class. - Throws:
java.lang.ClassNotFoundException- Helper class not found or loading failed
-
closeQuietly
private static void closeQuietly(java.io.Closeable c)
-
log
private static void log(java.lang.String format, java.lang.Object arg)
-
log
private static void log(java.lang.String format, java.lang.Object arg1, java.lang.Object arg2)
-
log
private static void log(java.lang.String format, java.lang.Object arg1, java.lang.Object arg2, java.lang.Throwable t)
-
debug
private static void debug(java.lang.String message, java.lang.Throwable t)
-
-