1. 程式人生 > >Android外掛化技術簡介

Android外掛化技術簡介

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。  答案是肯定可以的!