Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android中文API(140) —— DexFile

Android中文API(140) —— DexFile

編輯:Android開發實例

前言

  本章內容dalvik.system.DexFile章節,版本為Android 4.0 r1,翻譯來自:"阿年"。 

 

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”傳遞。(譯者注:dexopt是apk優化工具)

參數

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異常,一般不會發生。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved