- 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动态部署框架(你能够认为是插件,但又与插件不同),与传统意义上的插件不同,用过代理的应该知道,代理方式会有各类莫名其妙的问题。