前言

  本章内容dalvik.system.DexFile章节,版本为Android 4.0 r1,翻译来自:"阿年",欢迎访问他的博客:"http://blog.csdn.net/mtding",再次感谢"阿年" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com。

声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com/

    Android中文翻译组: http://androidbox.sinaapp.com/

DexFile

译者署名:阿年

译者链接:http://blog.csdn.net/mtding

版本:Android 4.0 r1

结构

继承关系

public final class DexFile extends Object

java.lang.Object

dalvik.system.DexFile

类概述

操作DEX文件。这个类原理上和ZipFile相似。主要在类装载器里被使用。

注意,我们不直接打开和读取DEX文件。它们被虚拟机以只读方式映射到内存了。

构造函数

public DexFile (File file)

通过指定的File对象打开DEX文件。指定的文件通常是一个ZIP/JAR文件,里面包含一个”classes.dex”。虚拟机将在目录/data/dalvik-cache下生成对应的文件名字并打开它,如果系统权限允许的话会首先创建或更新它。不要传目录/data/dalvik-cache下的文件名给它,因为这个文件被认为处于初始状态(DEX被优化之前)。

参数

File 引用实际DEX文件的File对象

异常

IOException发生I/O异常,例如文件不存在或者没有权限访问。

public DexFile (String fileName)

打开指定文件名的DEX文件。指定的文件通常是一个ZIP/JAR文件,里面包含一个”classes.dex”。虚拟机将在目录/data/dalvik-cache下生成对应的文件名字并打开它,如果系统权限允许的话会首先创建或更新它。不要传目录/data/dalvik-cache下的文件名给它,因为这个文件被认为处于初始状态(DEX被优化之前)。

参数

fileName DEX文件名。

异常

IOException 发生I/O异常,例如文件不存在或者没有权限访问。

公共方法

public void close ()

关闭DEX文件。

有可能无法释放任何资源。如果来自DEX文件的类还存活着的话,DEX文件不能被取消映射。

异常

IOException 在关闭文件的过程中可能发生I/O异常,一般不会发生。

public Enumeration<String> entries ()

枚举DEX文件里面的类名。

返回值

DEX文件所包含类名的枚举,类名的类型是一般内部格式(像java/lang/String)。

public String getName ()

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

返回值

文件名

public static boolean isDexOptNeeded (String fileName)

如果虚拟机认为apk/jar文件已经过期返回true,并且应该再次通过”dexopt”传递。(译者注:dexoptapk优化工具)

参数

fileName被检查apk/jar文件的绝对路径名。

返回值

如果应该调用dexopt处理文件返回true;否则false

异常

FileNotFoundException 文件不可读、不是一个文件或者文件不存在。

IOException fileName不是有效的apk/jar文件,或者在解析文件时出现问题。

NullPointerException fileName是空的。

StaleDexCacheError 优化过的DEX文件已过期且位于只读分区。

public Class loadClass (String name, ClassLoader loader)

装载一个类。返回成功装载的类,失败返回空。

如果在类装载器之外调用它,往往不会得到你想要的结果,这时请使用forName(String)

该方法不会在找不到类的时候抛出ClassNotFoundException异常,因为每次在我们看到的第一个DEX文件里找不到类就粗暴地抛出异常是不合理的。

参数

name 类名,应该是一个"java/lang/String"

loader 试图装载类的类装载器(大多数情况下就是该方法的调用者)

返回值

类名对应的对象,装载失败时返回空。

public static DexFile loadDex (String sourcePathName, String outputPathName, int flags)

打开一个DEX文件,并提供一个文件来保存优化过的DEX数据。如果优化过的格式已存在并且是最新的,就直接使用它。如果不是,虚拟机将试图重新创建一个。该方法主要用于应用希望在通常的应用安装机制之外下载和执行DEX文件。不能在应用里直接调用该方法,而应该通过一个类装载器例如dalvik.system.DexClassLoader.

参数

sourcePathName 包含”classes.dex”Jar或者APK文件。(将来可能会扩展支持"raw DEX")

outputPathName 保存优化过的DEX数据的文件。

flags 打开可选功能(目前什么也没定义)

返回值

一个新的,或者先前已经打开的DexFile

异常

IOException 无法打开输入或输出文件。

受保护方法

protected void finalize ()

类结束时调用。确保DEX文件被关闭。

异常

IOException关闭文件时发生I/O异常,一般不会发生。

补充

文章精选

Dalvik 分析 - Class加载篇

启用另一个程序某些方法

Android类动态加载技术

更多相关文章

  1. Android媒体文件metadata是如何实现跟解码器结合获取的
  2. [置顶] Android下实现自动关机的方法总结
  3. Android 读取U盘或SD卡中的所有.txt文件
  4. gif文件导出png
  5. 在Android中实现全屏显示的方法
  6. Mac完整卸载Android Studio的方法
  7. 【Android】Android处理Home键方法小结
  8. Android常用方法——获取系统信息
  9. 查看Android ADT Plugin版本的方法

随机推荐

  1. phonegap创建项目错误
  2. android sdcard使用量
  3. Android(安卓)短信拦截
  4. android上传图片(相机,相册)
  5. Android(安卓)传感器应用
  6. android从assets目录复制到sd卡
  7. android加载中对话框,循环,透明
  8. android 拔打电话功能
  9. Android实现图片顺时逆时旋转及拖拽显示
  10. android优雅管理edittext得输入法