Most visited

Recently visited

Added in API level 1

DexFile

public final class DexFile
extends Object

java.lang.Object
   ↳ dalvik.system.DexFile


操作DEX文件。 原则上,该课程与ZipFile类似。 它主要由类加载器使用。

请注意,我们不直接在这里打开并阅读DEX文件。 它们是VM的内存映射只读。

Summary

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

Public constructors

DexFile

Added in API level 1
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

Added in API level 1
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

Public methods

close

Added in API level 1
void close ()

关闭DEX文件。

这可能无法释放所有资源。 如果这个DEX文件中的类仍然驻留,则DEX文件不能被取消映射。 在我们没有释放所有资源的情况下,在终结器中再次调用close。

Throws
IOException if an I/O error occurs during closing the file, which normally should not happen

entries

Added in API level 1
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").

getName

Added in API level 1
String getName ()

获取(已经打开的)DEX文件的名称。

Returns
String the file name

isDexOptNeeded

Added in API level 1
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.

loadClass

Added in API level 1
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

loadDex

Added in API level 3
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.

toString

Added in API level 1
String toString ()

返回对象的字符串表示形式。 一般来说, toString方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。

ObjecttoString方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @ ”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 

Returns
String a string representation of the object.

Protected methods

finalize

Added in API level 1
void finalize ()

班级完成时调用。 确保DEX文件已关闭。

Throws
IOException if an I/O error occurs during closing the file, which normally should not happen
Throwable

Hooray!