首先,應該保證host程式、inte***ce部分和impl實現部分在同乙個專案中,其中inte***ce部分和impl實現部分作為android library。
寫好**之後,將impl部分打包jar的build指令如下:
task clearjar(type: delete)
task makejar(type: copy)
makejar.dependson(clearjar, build)
在android studio右側的gradle模組中找到makejar指令,雙擊即可在libs下生成jar。
接下來使用android的sdk dx應用程式將jar打包成二進位制dex的jar
dx --dex --output target.jar my.jar
在host程式中初始化程式如下
string dexpath = environment.getexternalstoragedirectory().tostring() + file.separator + "target.jar";
log.i("dex", dexpath);
file dexoutputdir = context.getdir("dex", 0);
file dextmp = new file(dexoutputdir.getabsolutepath()+ file.separator + "target.dex");
if(dextmp.exists())
dexclassloader dcl = new dexclassloader(dexpath,dexoutputdir.getabsolutepath(),null,getclassloader());
try
dy = (idynamic)dynamicclass.newinstance();
if(dy != null)
} catch (exception e)
注意!要是想在程式執行的時候替換掉jar,必須把dexoutputdir.getabsolutepath()
下的dex檔案刪除! Android動態載入技術(外掛程式化技術)
no1 外掛程式化技術的好處 1 減輕應用的記憶體和cpu占用 2 實現熱插拔,即在不發布新版本的情況下更新某些模組 no2 外掛程式化方案必須要解決三個基礎性問題 資源訪問 activity生命週期的管理和classloader的管理 no3 宿主是指普通的apk,外掛程式一般指經過處理的dex或...
Android動態載入技術 系列索引
大家新年好,最近花了點時間,慢慢把這個系列的內容稍微調整了下。last edit 2016 2 10 現在使用得比較廣泛的動態載入技術的核心一般都是使用classloader,後者能夠引導程式外部的類 已編譯好的 從而達到公升級 邏輯的目的。雖然動態載入的核心原理比較簡單,但是根據功能的複雜程度,實...
android動態載入jar
jar的載入 jar放在assert中 dexclassloader dexclassloader null classloader localclassloader this.getclassloader try catch ioexception e fileoutputstream out n...