1. 程式人生 > >Android插件化框架

Android插件化框架

host 定制 所有 運行 需要 兼容性 work and nta

  1. 1. dynamic-load-apk/DL動態加載框架

是基於代理的方式實現插件框架,對 App 的表層做了處理,通過在 Manifest 中註冊代理組件,當啟動插件組件時,首先啟動一個代理組件,然後通過這個代理組件來構建,啟動插件組件。 需要按照一定的規則來開發插件 APK,插件中的組件需要實現經過改造後的 Activity、FragmentActivity、Service 等的子類。

優點如下:

  • 動態升級,
  • 高效並行開發(編譯速度更快)
  • 按需加載,內存占用更低等等DynamicLoadApk 提供了 3 種開發方式,讓開發者在無需理解其工作原理的情況下快速的集成插件化功能。
  • 插件需要遵循一定的規則,因此安全方面可控制。
  • 方案簡單,適用於自身少量代碼的插件化改造。
  • plugin 無需安裝即可由宿主調起。
  • 支持用 R 訪問 plugin 資源
  • plugin 支持 Activity 和 FragmentActivity(未來還將支持其他組件)
  • 基本無反射調用
  • 插件安裝後仍可獨立運行從而便於調試
  • 支持 3 種 plugin 對 host 的調用模式:

(1)無調用(但仍然可以用反射調用)。

(2)部分調用,host 可公開部分接口供 plugin 調用。 這前兩種模式適用於 plugin 開發者無法獲得 host 代碼的情況。

(3)完全調用,plugin 可以完全調用 host 內容。這種模式適用於 plugin 開發者能獲得 host 代碼的情況。

  • 只需引入 DL 的一個 jar 包即可高效開發插件,DL 的工作過程對開發者完全透明
  • 支持 android2.x 版本

缺點如下:

  • 不支持通過 This 調用組件的方法,需要通過 that 去調用。
  • 由於 APK 中的 Activity 沒有註冊,不支持隱式調用 APK 內部的 Activity。
  • 插件編寫和改造過程中,需要考慮兼容性問題比較多,聯調起來會比較費時費力。
  1. 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 的更新頻率通常非常低。
  1. 4. DynamicAPK(攜程)

組件化框架,目前已停止維護

  1. 5. AndroidDynamicLoader

通過fragment實現,限制太多。

  1. 6. ACCD阿裏

ACDDCore Android動態部署框架(你可以認為是插件,但又與插件不一樣),與傳統意義上的插件不一樣,用過代理的應該知道,代理方式會有各種莫名其妙的問題。

Android插件化框架