DexClassLoader
public class DexClassLoader
extends BaseDexClassLoader
一个类加载器,用于从.jar
和.apk
文件中加载包含classes.dex
条目的类。 这可以用来执行未作为应用程序的一部分安装的代码。
这个类加载器需要一个应用程序专用的可写目录来缓存优化的类。 使用Context.getCodeCacheDir()
来创建这样一个目录:
File dexOutputDir = context.getCodeCacheDir();
不要在外部存储上缓存优化的类。 外部存储不提供必要的访问控制,以保护您的应用程序免受代码注入攻击。
Summary
Inherited methods |
From class dalvik.system.BaseDexClassLoader
|
From class java.lang.ClassLoader
void |
clearAssertionStatus() 将此类加载器的缺省断言状态设置为 false,并放弃与类加载器关联的所有程序包缺省值或类断言状态设置。 |
final Class<?> |
defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) 将字节数组转换为类 Class的实例,并带有可选的 ProtectionDomain 。 |
final Class<?> |
defineClass(String name, ByteBuffer b, ProtectionDomain protectionDomain) 一个转换 ByteBuffer 为 Class类的实例,带有可选 ProtectionDomain。 |
final Class<?> |
defineClass(byte[] b, int off, int len) 此方法在API级别1中已被弃用。替换为defineClass(String, byte[], int, int) |
final Class<?> |
defineClass(String name, byte[] b, int off, int len) 将字节数组转换为类 Class的实例。 |
软件包 |
definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase) 在此 ClassLoader中按名称定义一个包。 |
Class<?> |
findClass(String name) 使用指定的 binary name查找类。 |
String |
findLibrary(String libname) 返回本机库的绝对路径名称。 |
final Class<?> |
findLoadedClass(String name) 如果此加载器已被Java虚拟机记录为具有该 binary name的类的启动加载器,则返回给定 binary name的类。 |
URL |
findResource(String name) 查找具有给定名称的资源。 |
Enumeration<URL> |
findResources(String name) 返回表示具有给定名称的所有资源的 URL 对象的枚举。 |
final Class<?> |
findSystemClass(String name) 找到具有指定的 binary name的课程 ,并在必要时加载它。 |
软件包 |
getPackage(String name) 返回已由此类加载器或其任何祖先定义的 软件包 。 |
Package[] |
getPackages() 返回由此类加载器及其祖先定义的所有 Packages 。 |
final ClassLoader |
getParent() 返回委托的父类加载器。 |
URL |
getResource(String name) 查找具有给定名称的资源。 |
InputStream |
getResourceAsStream(String name) 返回读取指定资源的输入流。 |
Enumeration<URL> |
getResources(String name) 查找具有给定名称的所有资源。 |
static ClassLoader |
getSystemClassLoader() 返回委托的系统类加载器。 |
static URL |
getSystemResource(String name) 从用于加载类的搜索路径中查找指定名称的资源。 |
static InputStream |
getSystemResourceAsStream(String name) 打开阅读,从用于加载类的搜索路径中指定名称的资源。 |
static Enumeration<URL> |
getSystemResources(String name) 从用于加载类的搜索路径中查找指定名称的所有资源。 |
Class<?> |
loadClass(String name, boolean resolve) 使用指定的 binary name加载课程。 |
Class<?> |
loadClass(String name) 使用指定的 binary name加载课程。 |
static boolean |
registerAsParallelCapable() 将调用者注册为并行能力。 |
final void |
resolveClass(Class<?> c) 链接指定的类。 |
void |
setClassAssertionStatus(String className, boolean enabled) 在此类加载器及其中包含的任何嵌套类中,为指定的顶级类设置所需的断言状态。 |
void |
setDefaultAssertionStatus(boolean enabled) 设置此类加载器的默认断言状态。 |
void |
setPackageAssertionStatus(String packageName, boolean enabled) 设置命名包的包默认断言状态。 |
final void |
setSigners(Class<?> c, Object[] signers) 设置类的签名者。 |
|
From class java.lang.Object
|
Public constructors
DexClassLoader
DexClassLoader (String dexPath,
String optimizedDirectory,
String librarySearchPath,
ClassLoader parent)
创建一个可以找到解释代码和本地代码的DexClassLoader
。 解释类可在包含在Jar或APK文件中的一组DEX文件中找到。
路径列表使用 path.separator
系统属性指定的字符分隔,默认为 :
。
Parameters |
dexPath |
String : the list of jar/apk files containing classes and resources, delimited by File.pathSeparator , which defaults to ":" on Android |
optimizedDirectory |
String : directory where optimized dex files should be written; must not be null |
librarySearchPath |
String : the list of directories containing native libraries, delimited by File.pathSeparator ; may be null |
parent |
ClassLoader : the parent class loader |