1. 程式人生 > >Android插件化技術簡介

Android插件化技術簡介

https broadcast nsh 正常 provide 我們 content get 圖片

技術分享圖片

https://blog.csdn.net/io_field/article/details/79084630

可以通過反射 事先定義統一接口的方式,訪問插件中的類和方法

還可以在AndroidManifest.xml中動態註冊組件Activity、Service、BroadcastReceiver、ContentProvider(DroidPlugin實現) https://www.jianshu.com/p/e61a4d10e122

插件化的原理無非就是這些:

  1. 通過DexClassLoader加載。
  2. 代理模式添加生命周期(在代理Activity的生命周期函數中,調用插件中Activity實現的生命周期函數)。 https://www.jianshu.com/p/7b2cc534d097
  3. 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。 答案是肯定可以的!

Android插件化技術簡介