一、探究原理
1. 基本原理
* 合併宿主和插件的ClassLoader:需要注意的是,插件中的類不可以和宿主重複;
* 合併插件和宿主的資源:重設插件資源的packageId,將插件資源和宿主資源合併;
* 去除插件包對宿主的引用:構建時通過 Gradle 插件去除插件對宿主的代碼以及資源的引用。
四大組件的實現原理
- Activity:採用宿主 manifest 中佔坑的方式來繞過系統校驗,然後再加載真正的 Activity;
- Service:動態代理 AMS,攔截 Service 相關的請求,將其中轉給一個虛擬空間(Matrix)去處理,Matrix 會接管系統的所有操作;
- Receiver:將插件中靜態註冊的 Receiver 重新註冊一遍;
- ContentProvider:動態代理 IContentProvider,攔截 Provider 相關的請求,將其中轉給一個虛擬空間(Matrix)去處理,Matrix 會接管系統的所有操作。
二、代碼
1、初始化過程:
1.1、創建 PluginManager.java對象
PluginManager pluginManager = PluginManager.getInstance(base);
private Map