Package org.conscrypt
Class NativeLibraryLoader
- java.lang.Object
-
- org.conscrypt.NativeLibraryLoader
-
final class NativeLibraryLoader extends java.lang.Object
Helper class to load JNI resources.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
NativeLibraryLoader.LoadResult
A result of a single attempt to load a library.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
DELETE_LIB_PROPERTY_NAME
private static boolean
DELETE_NATIVE_LIB_AFTER_LOADING
private static java.util.logging.Logger
logger
private static java.lang.String
NATIVE_RESOURCE_HOME
private static java.lang.String
WORK_DIR_PROPERTY_NAME
private static java.io.File
WORKDIR
-
Constructor Summary
Constructors Modifier Constructor Description private
NativeLibraryLoader()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static byte[]
classToByteArray(java.lang.Class<?> clazz)
Load the helperClass
as a byte array, to be redefined in specifiedClassLoader
.private static void
closeQuietly(java.io.Closeable c)
private static void
copyLibrary(java.net.URL classpathUrl, java.io.File tmpFile)
Copies the given shared library file from classpath to a temporary file.private static void
debug(java.lang.String message, java.lang.Throwable t)
private static java.io.File
getWorkDir()
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
(package private) 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
.private static boolean
loadFromWorkdir(java.lang.String name, java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results)
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
.private static NativeLibraryLoader.LoadResult
loadLibraryFromCurrentClassloader(java.lang.String name, boolean absolute)
Attempts to load the library using theNativeLibraryUtil
helper from the current classloader.private static NativeLibraryLoader.LoadResult
loadLibraryFromHelperClassloader(java.lang.Class<?> helper, java.lang.String name, boolean absolute)
Attempts to load the library by reflectively using theNativeLibraryUtil
helper from its classloader.private static void
log(java.lang.String format, java.lang.Object arg)
private static void
log(java.lang.String format, java.lang.Object arg1, java.lang.Object arg2)
private static void
log(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 helperClass
into 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.IOException
Copies 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
- - TheClassLoader
where 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:
true
if 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 theNativeLibraryUtil
helper from its classloader.- Parameters:
helper
- TheNativeLibraryUtil
helper classname
- the name of the library to load.absolute
- true ifname
is 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 theNativeLibraryUtil
helper from the current classloader.- Parameters:
name
- the name of the library to load.absolute
- true ifname
is 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.ClassNotFoundException
Try to load the helperClass
into specifiedClassLoader
.- Parameters:
loader
- - TheClassLoader
where to load the helperClass
helper
- - 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.ClassNotFoundException
Load the helperClass
as a byte array, to be redefined in specifiedClassLoader
.- Parameters:
clazz
- - The helperClass
provided 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)
-
-