android插件化的一種實現(xiàn)

插件化的框架很多很多,比如360開源的DroidPlugin, 但是有時候用戶不能接受第三方的庫,尤其是他們<覺得>有風(fēng)險的庫,就不得不自己實現(xiàn)簡單動態(tài)加載方法。

需求

1.提供A和B jar包,B是從服務(wù)器上download下來,可替換
2.A包定義一個接口InterfaceA和實現(xiàn)類InterfaceAImpl,App基于InterfaceA寫業(yè)務(wù)代碼

方案

  1. A包的InterfaceImpl的構(gòu)造函數(shù)接收B.jar的路徑,并通過DexclassLoader去加載B.jar
  2. 加載之后,通過findClass和findMethod的方式去調(diào)用B.jar的類和函數(shù)
    實際上,InterfaceImpl的任何調(diào)用都是透傳到B.jar的

要解決的問題

主要的問題都集中在UI資源處理上,這是在大多數(shù)插件方案里面要解決的。

  1. 布局
    布局全部用Java代碼實現(xiàn),復(fù)雜的布局拆分成空間,最大化復(fù)用。

  2. 字符串資源及多語言
    由于沒有ID了,字符串資源是放在xml里面,解析之后放在HashMap,通過Key-Value的方式去選擇顯示。多語言就是根據(jù)機型多個XML。

  3. 圖片
    放在asset下面解壓加載,好在圖片不多。

  4. so庫
    so庫涉及業(yè)務(wù)的,為了能做到熱更新,放在B.jar的assets目錄下,運行的時候解壓到目錄,然后用System.load加載。這個地方主要要注意的是要根據(jù)CPU類型解壓對應(yīng)的so

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容