【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 )
Android 插件化系列文章目錄
【Android 插件化】插件化簡介 ( 組件化與插件化 )
【Android 插件化】插件化原理 ( JVM 內存數據 | 類加載流程 )
【Android 插件化】插件化原理 ( 類加載器 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 原理與實現思路 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 類加載器創建 | 資源加載 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 注入上下文的使用 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 獲取插件入口 Activity 組件 | 加載插件 Resources 資源 )
【Android 插件化】“ 插樁式 “ 插件化框架 ( 運行應用 | 代碼整理 )
文章目錄
- Android 插件化系列文章目錄
- 一、" 插樁式 " 插件化
- 二、插件包中的組件類 與 應用中的組件類 區別
- 三、" 代理 " 組件 與 " 插件 " 組件
- 四、" 插樁式 " 插件化框架實現思路
一、" 插樁式 " 插件化
將 " 插件 " 模塊 編譯打包成 apk 文件 , 該文件包含 classes.dex 文件 , 被打包在了 apk 壓縮包中 ;
只要拿到了 apk 文件 , 就可以將其解壓 , 獲取到其中的 classes.dex 文件 , 可以自己實現一個 DexClassLoader 加載該 dex 文件 , 進而調用其中封裝的字節碼類對象 ;
" 插樁式 " 插件化 : 在 " 宿主 " 模塊 應用中 , 將 " 插件 " 模塊 apk 插入到程序中 , 可以調用這些 apk 安裝包中的功能 ; " 宿主 " 模塊中需要提前預留好 插件組件 對應的 代理組件 接口 ;
類似于電腦主板 , 提前預制好插槽 , 可以插入內存條 , 顯卡等硬件設備 , 主板運行時調用這些設備 ;
二、插件包中的組件類 與 應用中的組件類 區別
應用中的組件 :
應用運行時 , 插件包 apk 是 運行后才加載的 , 將該 apk 文件中的 dex 加載到內存之后 , 其中的 Activity , Service 等組件類 , 與 當前應用運行的組件 是有區別的 , 這些新加入的組件類沒有上下文 ;
應用中的 Activity , Service 等組件初始化 , 不需要開發者干預 , 都是由系統完成的 , 這些組件都在清單文件中注冊過了 , 系統按照清單初始化相關組件 ;
插件包中的組件 :
插件包 apk 中的類 , 是通過 DexClassLoader 加載到內存中的 , 僅僅是加載了 字節碼數據 , 組件的初始化 , 賦予上下文等 , 必須 由開發者手動完成 , 應用系統是不管的 ;
加載的插件中的 Activity 并不是 Activity 組件 , 只是 有 Activity 方法 , 成員 , 繼承關系的字節碼類 ;
插件 Activity 類沒有生命周期 , 不在 ActivityManagerService 管理范疇內 ;
這些通過插件包加載進來的組件類的生命周期 , 需要開發者進行管理 ;
三、" 代理 " 組件 與 " 插件 " 組件
代理 Activity ( ProxyActivity ) 與 插件 Activity ( PluginActivity ) :
將加載進來的 Activity 類 ( PluginActivity ) 當做普通類 , 構造一個 代理 Activity , 命名為 ProxyActivity , 在 ProxyActivity 中 持有從 apk 插件包中加載的 PluginActivity 類對象 ;
ProxyActivity 是空的 Activity , 沒有任何實際的業務邏輯 , 只是作為一個 生命周期的轉接代理接口 ; 但是 ProxyActivity 有著完整的生命周期回調機制 , 在進入該界面時會回調 onCreate , onStart , onResume 生命周期方法 , 在退出該界面時會回調 onPause , onStop , onDestroy 生命周期方法 ;
在 ProxyActivity 中的生命周期方法中, 調用 PluginActivity 相應的生命周期方法即可 ;
ProxyActivity 運行時會有上下文 , PluginActivity 使用上下文時調用 ProxyActivity 的上下文 ;
四、" 插樁式 " 插件化框架實現思路
" 插樁式 " 插件化框架 實現思路 : 如果要加載 " 插件 " 模塊 編譯的 apk 插件包中的 Activity 類 , 需要執行如下流程 ;
① 加載類對象 : 使用 DexClassLoader 加載 Activity 對應的 Class 字節碼類對象 ;
② 管理生命周期 : 處理加載進來的 Activity 類的生命周期 , 創建 ProxyActivity , 通過其生命周期回調 , 代理管理 插件包中加載的未納入應用管理的組件 Activity 類 ;
③ 注入上下文 : 為加載進來的 Activity 類注入 上下文 ;
④ 加載資源 : 使用 AssetManager 將插件包 apk 中的資源主動加載進來 ;
總結
以上是生活随笔為你收集整理的【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 插件化】插件化原理 (
- 下一篇: 【错误记录】Android Studio