• Android中文API(140) —— DexFile


    前言

      本章内容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类动态加载技术

  • 相关阅读:
    JS版Stopwatch计时器
    【学习笔记】——网络营销2(赢利)
    CMMI 3级精简并行过程综述
    【学习笔记】——网络营销1(基础概念)
    ASP.NET MVC路由匹配检测组件的代码分析
    学习笔记(一)
    【学习笔记】——网络营销3(市场策略)
    jQuery.API源码深入剖析以及应用实现(4) - 选择器篇(下)
    关于实现B/S与C/S平台之间功能通用性的设计思路
    【学习笔记】——网络营销6(搜索引擎优化)
  • 原文地址:https://www.cnblogs.com/over140/p/2270160.html
Copyright © 2020-2023  润新知