国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2020-04-11 12:33:31
字體:
供稿:網(wǎng)友
首先第一個(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),但是并不能用。要動態(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 要求指定一個(gè)可寫的目錄,即 DexClassLoader 構(gòu)造函數(shù)的第二個(gè)參數(shù),在上例中是 /sdcard/test
這個(gè)參數(shù)的含義是:directory where optimized DEX files should be written
因?yàn)?Dalvik 在加載 dex 文件時(shí),會動態(tài)進(jìn)行優(yōu)化,DexClassLoader 要求指定優(yōu)化后 dex 文件存放的位置。

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

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

由于 PathClassLoader 會去讀取 /data/dalvik-cache 目錄下的經(jīng)過 Dalvik 優(yōu)化過的 dex 文件,這個(gè)目錄的 dex 文件是在安裝 apk 包的時(shí)候 由 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 時(shí),它就 會按照這個(gè)規(guī)則去找 dex 文件,如果你指定的 apk 文件是 /sdcard/test.apk,它按照這個(gè)規(guī)則就會去讀 /data /dalvik-cache/sdcard@test.apk@classes.dex 文件,顯然這個(gè)文件不會存在,所 以PathClassLoader 會報(bào)錯。

在 Google 修正這個(gè)問題之前,我們要么就只能用 DexClassLoader,要么就只能用 PathClassLoader 加載已安裝的 apk 。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 连城县| 纳雍县| 仙桃市| 论坛| 海安县| 将乐县| 阳信县| 商河县| 泗洪县| 大洼县| 开远市| 平泉县| 巴里| 大冶市| 博罗县| 清涧县| 乌兰县| 重庆市| 霍山县| 涿鹿县| 灵璧县| 洮南市| 克拉玛依市| 邢台县| 修文县| 台北县| 清水河县| 三穗县| 桓仁| 雷州市| 夏河县| 和政县| 白沙| 东台市| 德保县| 长垣县| 宁强县| 泾川县| 阿尔山市| 莱西市| 宁波市|