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