我們在開發軟件的時候都會由于某些服務頻繁而更改,導致客戶端頻繁升級,可能會導致用戶體驗不佳,而這個時候就要變換思路了,今天武林技術頻道為大家介紹的是詳解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 文件,例如:
但是 DexClassLoader 要求指定一個可寫的目錄,即 DexClassLoader 構造函數的第二個參數,在上例中是 /sdcard/test
這個參數的含義是:directory where optimized DEX files should be written
因為 Dalvik 在加載 dex 文件時,會動態進行優化,DexClassLoader 要求指定優化后 dex 文件存放的位置。
PathClassLoader 的限制要更多一些,它只能加載已經安裝到 Android 系統中的 apk 文件,也就是 /data/app 目錄下的 apk 文件。其它位置的文件加載的時候都會出現 ClassNotFoundException. 例如:
由于 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的實現操作步驟,想要了解更多開發項目的內容,請繼續關注武林技術頻道!
新聞熱點
疑難解答