Android外掛程式化 動態載入jar 一

2021-10-03 04:12:24 字數 2347 閱讀 9495

4.結束

dexclassloader 和 pathclassloader 的都是繼承與 basedexclassloader,是通過類載入 classloader 來載入查詢 class。pathclassloader只能載入已經安裝到android系統中的apk檔案,dexclassloader可以載入外部(如sd卡)的jar/apk/dex/aar。

public

class

dexclassloader

extends

basedexclassloader

}

引數意義

dexpath: 需要載入的apk或者jar檔案的路徑,絕對路徑。

optimizeddirectory: 解壓後的dex檔案存放目錄,不能為null,可以設定為getcachedir()

librarypath: 目標類中使用的c/c++庫的列表, 可以為 null

parent: 該類裝載器的父裝載器,一般用當前執行類的裝載器getclassloader()

新建乙個工程及library.。具體的就不演示了,最終效果如下圖。

這裡就寫個簡單的測試方法,輸入十位數和個位數,最後輸出彙總的資料。

這裡打包aar,打jar包的方法網上一搜就很多

開啟gradle 視窗,選擇建立的library——other——assemblerelease方法,這樣,在library——build——outputs——aar下面就會生成該release的aar包。

這裡可以看下,打包的aar包中是否正確,包含測試方法。

build——analyze apk ,選擇library——build——outputs——aar下的library-release.aar包

這裡可以看下打包後的**,這裡沒做混淆,後面再說,在這可以看到,測試類已經包含,aar包打包正確。

將上一步生成的aar包放在手機sd卡的可讀取路徑下,然後測試呼叫aar包中的方法。

這裡將aar包放在主工程的快取目錄下:

android——data——gm.com.gui(包名)——cache資料夾下,沒有cache,則自己手動建立下,等會讀取aar路徑也是該路徑。

* 載入dex檔案中的class,並呼叫其中的方法

* 這裡由於是載入 jar檔案,所以採用dexclassloader

* 下面開始載入dex class

*/public

static

void

loaddexclass

(context context)

catch

(exception e)

}}最後,不要忘記增sd卡的讀取許可權。6.0及以上的自己在**中增加sd卡許可權。

"android.permission.write_external_storage"

/>

"android.permission.read_external_storage"

/>

ps:有時由於編譯問題,導致dexclassloader.loadclass報notfound異常,因此在主工程和library的build.gradle檔案中的android中加上compileoptions 方法,防止編譯報錯。

android 

buildtypes

compileoptions

}

Android動態載入技術(外掛程式化技術)

no1 外掛程式化技術的好處 1 減輕應用的記憶體和cpu占用 2 實現熱插拔,即在不發布新版本的情況下更新某些模組 no2 外掛程式化方案必須要解決三個基礎性問題 資源訪問 activity生命週期的管理和classloader的管理 no3 宿主是指普通的apk,外掛程式一般指經過處理的dex或...

bootstrap table外掛程式動態載入表頭

這篇文章主要為大家詳細介紹了bootstrap table外掛程式動態載入表頭,具有一定的參考價值,感興趣的小夥伴們可以參考一下 bootstrap的table屬性已經很熟悉了,最近遇到乙個問題,猶豫每個列表載入的資料需求不同,所以需要動態的更換表頭。網上有很多載入 資料的例子,但是卻沒有找到如何動...

載入外掛程式(四)之動態載入

三 中介紹了核心模組的載入,其實那是靜態載入,現在我們介紹一下動態載入,從allocatepluginfile 說起,參考 一 可以看到它的位置,這裡不重複了。流程如下 上圖中,呼叫windows api loadlibraryw 來載入動態庫,返回動態庫的控制代碼handle,然後呼叫getpro...