- 1. dynamic-load-apk/DL動態加載框架
是基於代理的方式實現插件框架,對 App 的表層作了處理,經過在 Manifest 中註冊代理組件,當啓動插件組件時,首先啓動一個代理組件,而後經過這個代理組件來構建,啓動插件組件。 須要按照必定的規則來開發插件 APK,插件中的組件須要實現通過改造後的 Activity、FragmentActivity、Service 等的子類。android
優勢以下:git
- 動態升級,
- 高效並行開發(編譯速度更快)
- 按需加載,內存佔用更低等等DynamicLoadApk 提供了 3 種開發方式,讓開發者在無需理解其工做原理的狀況下快速的集成插件化功能。
- 插件須要遵循必定的規則,所以安全方面可控制。
- 方案簡單,適用於自身少許代碼的插件化改造。
- plugin 無需安裝便可由宿主調起。
- 支持用 R 訪問 plugin 資源
- plugin 支持 Activity 和 FragmentActivity(將來還將支持其餘組件)
- 基本無反射調用
- 插件安裝後仍可獨立運行從而便於調試
- 支持 3 種 plugin 對 host 的調用模式:
(1)無調用(但仍然能夠用反射調用)。github
(2)部分調用,host 可公開部分接口供 plugin 調用。 這前兩種模式適用於 plugin 開發者沒法得到 host 代碼的狀況。安全
(3)徹底調用,plugin 能夠徹底調用 host 內容。這種模式適用於 plugin 開發者能得到 host 代碼的狀況。框架
- 只需引入 DL 的一個 jar 包便可高效開發插件,DL 的工做過程對開發者徹底透明
- 支持 android2.x 版本
缺點以下:模塊化
- 不支持經過 This 調用組件的方法,須要經過 that 去調用。
- 因爲 APK 中的 Activity 沒有註冊,不支持隱式調用 APK 內部的 Activity。
- 插件編寫和改造過程當中,須要考慮兼容性問題比較多,聯調起來會比較費時費力。
- 2. DroidPlugin
DroidPlugin 是 360 手機助手實現的一種插件化框架,它能夠直接運行第三方的獨立 APK 文件,徹底不須要對 APK 進行修改或安裝。一種新的插件機制,一種免安裝的運行機制,是一個沙箱(可是不徹底的沙箱。就是對於使用者來講,並不知道他會把 apk 怎麼樣), 是模塊化的基礎。組件化
優勢以下:編碼
- 支持 Android 四大組件,並且插件中的組件不須要在宿主 APK 中註冊。
- 支持 Android 2.3 及以上系統,支持全部的系統 API。
- 插件與插件之間,插件與宿主之間的代碼和資源徹底隔閡。
- 實現了進程管理,插件的空進程會被及時回收,佔用內存低。
缺點以下:插件
- 插件 APK 中不支持自定義資源的 Notification,通知欄限制。
- 插件 APK 中沒法註冊具備特殊的 IntentFilter 的四大組件。
- 因爲插件與插件,插件與宿主之間的代碼徹底隔離,所以,插件與插件,插件與宿主之間的通訊只能經過 Android 系統級別的通訊方式。
- 安全性擔心(能夠修改,hook一些重要信息)。
- 機型適配(不是全部機器上都能行,由於大量用反射相關,若是rom廠商深度定製了framework層,反射的方法或者類不在,容易插件運用失敗)
1.3. Small框架代理
Small 是一種實現輕巧的跨平臺插件化框架,基於「輕量、透明、極小化、跨平臺」的理念,更傾向於組件化。跳轉插件的界面都是經過uri來指定的.
優勢以下:
- 全部插件支持內置宿主包中。
- 插件的編碼和資源文件的使用與普通開發應用沒有差異。
- 經過設定 URI ,宿主以及 Native 應用插件,Web 插件,在線網頁等可以方便進行通訊。
- 支持 Android 、 iOS 、和 Html5 ,三者能夠經過同一套 Javascript 接口實現通訊。
缺點以下:
- 暫不支持 Service 的動態註冊,不過這個能夠經過將 Service 預先註冊在宿主的 AndroidManifest.xml 文件中進行規避,由於 Service 的更新頻率一般很是低。
- 4. DynamicAPK(攜程)
組件化框架,目前已中止維護
- 5. AndroidDynamicLoader
經過fragment實現,限制太多。
- 6. ACCD阿里
ACDDCore Android動態部署框架(你能夠認爲是插件,但又與插件不同),與傳統意義上的插件不同,用過代理的應該知道,代理方式會有各類莫名其妙的問題。