欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 中動態(tài)加載.jar的實現(xiàn)步驟

 更新時間:2013年01月21日 10:53:05   作者:  
本文介紹動態(tài)加載 .jar的實現(xiàn)步驟,這將對你的android開發(fā)很有幫助,剛興趣的朋友可以了解下哦
首先第一個是 jar 文件的制作,Java 里面直接把 .class 文件打包到 .jar 文件里面就可以了,但是 Android 的 Dalvik VM 是不認(rèn) Java 的 byte code 的,所以不能直接這么打包,而要用 dx 工具轉(zhuǎn)成 Dalvik byte code 才可以。當(dāng)然,dx 工具轉(zhuǎn)了之后,jar 包里面就不 是 .class 文件了,而是 .dex 文件。

第二個是,Android 里面雖然也提供了 URLClassLoader 的實現(xiàn),但是并不能用。要動態(tài)加載其它類,可以用的 Class Loader 有:
DexClassLoader,PathClassLoader,其中,DexClassLoader 可以加載 apk, jar 或者 dex 文件,例如:
復(fù)制代碼 代碼如下:

File jarFile = new File("/sdcard/test.dex");
# if ( jarFile.exists() ) {
DexClassLoader cl = new DexClassLoader(jarFile.toString(), "/sdcard/test", null, ClassLoader.getSystemClassLoader());
Class<?> c = cl.loadClass("xiaogang.test.Test");

但是 DexClassLoader 要求指定一個可寫的目錄,即 DexClassLoader 構(gòu)造函數(shù)的第二個參數(shù),在上例中是 /sdcard/test
這個參數(shù)的含義是:directory where optimized DEX files should be written
因為 Dalvik 在加載 dex 文件時,會動態(tài)進行優(yōu)化,DexClassLoader 要求指定優(yōu)化后 dex 文件存放的位置。

PathClassLoader 的限制要更多一些,它只能加載已經(jīng)安裝到 Android 系統(tǒng)中的 apk 文件,也就是 /data/app 目錄下的 apk 文件。其它位置的文件加載的時候都會出現(xiàn) ClassNotFoundException. 例如:
復(fù)制代碼 代碼如下:

PathClassLoader cl = new PathClassLoader(jarFile.toString(), "/data/app/" , ClassLoader.getSystemClassLoader());

由于 PathClassLoader 會去讀取 /data/dalvik-cache 目錄下的經(jīng)過 Dalvik 優(yōu)化過的 dex 文件,這個目錄的 dex 文件是在安裝 apk 包的時候 由 Dalvik 生成的。例如,如果包的名字是 xiaogang.test,Android 應(yīng)用安裝之后都保存在 /data/app 目 錄下,即 /data/app/xiaogang.test-1.apk,那么 /data/dalvik-cache 目錄下就會生成 data@app@xiaogang.test-1.apk@classes.dex 文件。在調(diào)用 PathClassLoader 時,它就 會按照這個規(guī)則去找 dex 文件,如果你指定的 apk 文件是 /sdcard/test.apk,它按照這個規(guī)則就會去讀 /data /dalvik-cache/sdcard@test.apk@classes.dex 文件,顯然這個文件不會存在,所 以PathClassLoader 會報錯。

在 Google 修正這個問題之前,我們要么就只能用 DexClassLoader,要么就只能用 PathClassLoader 加載已安裝的 apk 。

相關(guān)文章

最新評論