public final class DexFile
extends Object
java.lang.Object | |
↳ | dalvik.system.DexFile |
操作DEX文件。 原则上,该课程与ZipFile
类似。 它主要由类加载器使用。
请注意,我们不直接在这里打开并阅读DEX文件。 它们是VM的内存映射只读。
Public constructors |
|
---|---|
DexFile(File file) 从给定的File对象打开一个DEX文件。 |
|
DexFile(String fileName) 从给定的文件名打开一个DEX文件。 |
Public methods |
|
---|---|
void |
close() 关闭DEX文件。 |
Enumeration<String> |
entries() 枚举此DEX文件中类的名称。 |
String |
getName() 获取(已经打开的)DEX文件的名称。 |
static boolean |
isDexOptNeeded(String fileName) 如果VM认为apk / jar文件已过期并且应该再次通过“dexopt”,则返回true。 |
Class |
loadClass(String name, ClassLoader loader) 加载一个班级。 |
static DexFile |
loadDex(String sourcePathName, String outputPathName, int flags) 打开一个DEX文件,指定应该写入优化的DEX数据的文件。 |
String |
toString() 返回对象的字符串表示形式。 |
Protected methods |
|
---|---|
void |
finalize() 班级完成时调用。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
DexFile (File file)
从给定的File对象打开一个DEX文件。 这通常是一个带有“classes.dex”的ZIP / JAR文件。 VM将在/ data / dalvik-cache中生成相应文件的名称并将其打开,如果系统权限允许,可能会先创建或更新它。 不要传入/ data / dalvik-cache中的文件名称,因为指定的文件应该处于其原始(pre-dexopt)状态。
Parameters | |
---|---|
file |
File : the File object referencing the actual DEX file |
Throws | |
---|---|
IOException |
if an I/O error occurs, such as the file not being found or access rights missing for opening it |
DexFile (String fileName)
从给定的文件名打开一个DEX文件。 这通常是一个带有“classes.dex”的ZIP / JAR文件。 VM将在/ data / dalvik-cache中生成相应文件的名称并将其打开,如果系统权限允许,可能会先创建或更新它。 不要传入/ data / dalvik-cache中的文件名称,因为指定的文件应该处于其原始(pre-dexopt)状态。
Parameters | |
---|---|
fileName |
String : the filename of the DEX file |
Throws | |
---|---|
IOException |
if an I/O error occurs, such as the file not being found or access rights missing for opening it |
void close ()
关闭DEX文件。
这可能无法释放所有资源。 如果这个DEX文件中的类仍然驻留,则DEX文件不能被取消映射。 在我们没有释放所有资源的情况下,在终结器中再次调用close。
Throws | |
---|---|
IOException |
if an I/O error occurs during closing the file, which normally should not happen |
Enumeration<String> entries ()
枚举此DEX文件中类的名称。
Returns | |
---|---|
Enumeration<String> |
an enumeration of names of classes contained in the DEX file, in the usual internal form (like "java/lang/String"). |
boolean isDexOptNeeded (String fileName)
如果VM认为apk / jar文件已过期并且应该再次通过“dexopt”,则返回true。
Parameters | |
---|---|
fileName |
String : the absolute path to the apk/jar file to examine. |
Returns | |
---|---|
boolean |
true if dexopt should be called on the file, false otherwise. |
Throws | |
---|---|
FileNotFoundException |
if fileName is not readable, not a file, or not present. |
IOException |
if fileName is not a valid apk/jar file or if problems occur while parsing it. |
NullPointerException |
if fileName is null. |
Class loadClass (String name, ClassLoader loader)
加载一个班级。 成功返回类,或失败时返回null
。
如果你不是从类加载器调用它,这很可能不会做你想要的。 改为使用forName(String)
。
如果找不到类,则该方法不会抛出 ClassNotFoundException
,因为每当在我们查看的第一个DEX文件中找不到类时,就不合理地抛出异常。
Parameters | |
---|---|
name |
String : the class name, which should look like "java/lang/String" |
loader |
ClassLoader : the class loader that tries to load the class (in most cases the caller of the method |
Returns | |
---|---|
Class |
the Class object representing the class, or null if the class cannot be loaded |
DexFile loadDex (String sourcePathName, String outputPathName, int flags)
打开一个DEX文件,指定应该写入优化的DEX数据的文件。 如果优化表单存在并且似乎是最新的,则会使用它; 如果不是,虚拟机将尝试重新生成它。 这适用于希望在通常的应用程序安装机制之外下载和执行DEX文件的应用程序。 这个函数不应该被应用程序直接调用; 相反,请使用类加载器,如dalvik.system.DexClassLoader。
Parameters | |
---|---|
sourcePathName |
String : Jar or APK file with "classes.dex". (May expand this to include "raw DEX" in the future.) |
outputPathName |
String : File that will hold the optimized form of the DEX data. |
flags |
int : Enable optional features. (Currently none defined.) |
Returns | |
---|---|
DexFile |
A new or previously-opened DexFile. |
Throws | |
---|---|
IOException |
If unable to open the source or output file. |
String toString ()
返回对象的字符串表示形式。 一般来说, toString
方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。
类Object
的toString
方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @
”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns | |
---|---|
String |
a string representation of the object. |
void finalize ()
班级完成时调用。 确保DEX文件已关闭。
Throws | |
---|---|
IOException |
if an I/O error occurs during closing the file, which normally should not happen |
Throwable |