
https://blog.csdn.net/io_field/article/details/79084630
可以通過反射 事先定義統一接口的方式,通路插件中的類和方法
還可以在AndroidManifest.xml中動态注冊元件Activity、Service、BroadcastReceiver、ContentProvider(DroidPlugin實作) https://www.jianshu.com/p/e61a4d10e122
插件化的原理無非就是這些:
- 通過DexClassLoader加載。
- 代理模式添加生命周期(在代理Activity的生命周期函數中,調用插件中Activity實作的生命周期函數)。 https://www.jianshu.com/p/7b2cc534d097
- Hook思想跳過清單驗證。https://www.jianshu.com/p/69bfbda302df---Hook技術之Activity的啟動過程攔截
在2017年至今各大公司推出的插件化技術越來越成熟,發展到了頂峰,井噴了許多高品質的插件化架構,以應對大型App的開發。但是時不湊巧 2018年,Google官方祭出了大殺器 -- 禁止調用私有API(經過@hide修飾的方法),也意味着賴以生存的插件化技術走向了終結。
Hook技術繞開Android P 系統限制
Google為了不讓開發者調用經@hide注解修飾的系統api,可謂下了非常大的功夫。不過上有政策,下有對策。經過360技術團隊與動腦學院研發團隊的聯合攻克下,可以将app某個單獨的類僞裝成系統類。會讓Android系統誤認為是自己調用隐藏的API;大家都知道系統是可以調用隐藏的方法的。
這如何做到呢?
在類加載機制分析中,我們可以發現,系統的Class是被BootStrapClassLoader加載的,BootStrapClassLoader也稱為系統類加載器 應用層經過反射調用系統的Api最終會調用BootStrapClassLoader的加載類的方法。
那我們能否将我們apk中定義的某個工具類的ClassLoader變成BootStrapClassLoader呢?如果能實作那該怎樣才能使工具類能夠正常調用經@hide注解修飾的系統api。 答案是肯定可以的!
轉載于:https://www.cnblogs.com/genggeng/p/9963407.html