亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2013年01月21日 10:53:05   作者:  
本文介紹動(dòng)態(tài)加載 .jar的實(shí)現(xiàn)步驟,這將對(duì)你的android開(kāi)發(fā)很有幫助,剛興趣的朋友可以了解下哦
首先第一個(gè)是 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 文件。

第二個(gè)是,Android 里面雖然也提供了 URLClassLoader 的實(shí)現(xiàn),但是并不能用。要?jiǎng)討B(tài)加載其它類(lè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 要求指定一個(gè)可寫(xiě)的目錄,即 DexClassLoader 構(gòu)造函數(shù)的第二個(gè)參數(shù),在上例中是 /sdcard/test
這個(gè)參數(shù)的含義是:directory where optimized DEX files should be written
因?yàn)?Dalvik 在加載 dex 文件時(shí),會(huì)動(dòng)態(tài)進(jìn)行優(yōu)化,DexClassLoader 要求指定優(yōu)化后 dex 文件存放的位置。

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

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

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

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

相關(guān)文章

最新評(píng)論