Android中文API(140) —— DexFile

來源:互聯網
上載者:User

 

前言

  本章內容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”傳遞。(譯者註: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異常,一般不會發生。

 

補充

         文章精選

                   Dalvik 分析 - Class載入篇

                   啟用另一個程式某些方法

                   Android類動態載入技術

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.