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

首頁 > 系統 > Android > 正文

詳解Android 中動態加載.jar的實現操作步驟

2020-02-21 17:36:33
字體:
來源:轉載
供稿:網友

我們在開發軟件的時候都會由于某些服務頻繁而更改,導致客戶端頻繁升級,可能會導致用戶體驗不佳,而這個時候就要變換思路了,今天武林技術頻道為大家介紹的是詳解Android 中動態加載.jar的實現操作步驟,一起看看吧!

詳解Android 中動態加載.jar的實現操作步驟

首先第一個是 jar 文件的制作,Java 里面直接把 .class 文件打包到 .jar 文件里面就可以了,但是 Android 的 Dalvik VM 是不認 Java 的 byte code 的,所以不能直接這么打包,而要用 dx 工具轉成 Dalvik byte code 才可以。當然,dx 工具轉了之后,jar 包里面就不 是 .class 文件了,而是 .dex 文件。

第二個是,Android 里面雖然也提供了 URLClassLoader 的實現,但是并不能用。要動態加載其它類,可以用的 Class Loader 有:
DexClassLoader,PathClassLoader,其中,DexClassLoader 可以加載 apk, jar 或者 dex 文件,例如:


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 構造函數的第二個參數,在上例中是 /sdcard/test
這個參數的含義是:directory where optimized DEX files should be written
因為 Dalvik 在加載 dex 文件時,會動態進行優化,DexClassLoader 要求指定優化后 dex 文件存放的位置。

PathClassLoader 的限制要更多一些,它只能加載已經安裝到 Android 系統中的 apk 文件,也就是 /data/app 目錄下的 apk 文件。其它位置的文件加載的時候都會出現 ClassNotFoundException. 例如:


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


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

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

上文是詳解Android 中動態加載.jar的實現操作步驟,想要了解更多開發項目的內容,請繼續關注武林技術頻道!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松江区| 都昌县| 嘉义市| 武功县| 大埔区| 屏边| 海淀区| 梨树县| 新平| 县级市| 常山县| 锡林郭勒盟| 平凉市| 新沂市| 望城县| 白山市| 丹江口市| 汉川市| 岳池县| 云林县| 融水| 泰和县| 云梦县| 鹤岗市| 泽普县| 华池县| 嘉峪关市| 临湘市| 武胜县| 玛多县| 柏乡县| 长海县| 云梦县| 彰化市| 兴业县| 廊坊市| 洛隆县| 沧源| 循化| 潜江市| 兰西县|