當前位置:編程學習大全網 - 編程語言 - 插件化原理

插件化原理

總的來說,組件化框架功能單壹,專心於模塊化開發,但沒有黑科技,不存在Android版本的兼容問題。而插件化框架功能強大,最關鍵的是具備熱修復、模塊動態加載、刪除的能力,但因為需要hook系統組件,所以存在可能的兼容性問題。

Atlas的熱修復使用的是自家的Andfix,基於Native hook。

插件化是體現在功能拆分方面的,它將某個功能獨立提取出來,獨立開發,獨立測試,再插入到主應用中動態加載。以此來規避主應用規模超限。通過代理或Hook來實現。

要正常打開插件中的Activity,需要以下資源:

1,通過DexClassLoader加載插件apk

2,通過包管理器,獲取當前已加載的類信息

3,通過AssetManager獲取插件apk中的資源

4,通過殼app中的代理Activity,提供上下文Context和生命周期管理(插件中的四大組件因為並沒有註冊到殼app的AndroidManifest.xml,所以並不具備生命周期)

通過代理Activity啟動和同步插件Activity的生命周期

Hook其中的第壹步或第十步實現插件Activity啟動。

通過hook的方式啟動插件Activity需要解決如下問題:

a、插件Activity如何繞開Manifest中註冊的檢測

b、如何創建Activity實例,並同步生命周期

我們通過VirtualApk插件化框架來看其實現方案:

a、預先在Manifest中註冊各種啟動模式的Activity占坑,啟動時hook第1步,將Intent根據啟動模式替換成預先在Manifest占坑的Activity,這樣就解決了Manifest中註冊的檢測

b、hook第10步,使用插件的ClassLoader反射創建插件Activity,之後Activity的生命周期回調都通知給插件Activity,這樣就解決了創建Activity並同步生命周期的問題

1,關於dex的生成

我們可以用dx工具,將jar包轉成dex文件

2,dex的加載過程

通過DexClassLoader加載dex文件,然後解析其中的class、method等

參考:

/p/7e4958d02094

  • 上一篇:奔馳C63 AMG這款車的詳細數據是什麽?
  • 下一篇:六年級語文書習作五作文要450字,要蘇州的
  • copyright 2024編程學習大全網