案头见蠹鱼,犹胜凡俦侣。这篇文章主要讲述Android插件化框架相关的知识,希望能为你提供帮助。
- 1. dynamic-load-apk/DL动态加载框架
优点如下:
- 动态升级,
- 高效并行开发(编译速度更快)
- 按需加载,内存占用更低等等DynamicLoadApk 提供了 3 种开发方式,让开发者在无需理解其工作原理的情况下快速的集成插件化功能。
- 插件需要遵循一定的规则,因此安全方面可控制。
- 方案简单,适用于自身少量代码的插件化改造。
- plugin 无需安装即可由宿主调起。
- 支持用 R 访问 plugin 资源
- plugin 支持 Activity 和 FragmentActivity(未来还将支持其他组件)
- 基本无反射调用
- 插件安装后仍可独立运行从而便于调试
- 支持 3 种 plugin 对 host 的调用模式:
(2)部分调用,host 可公开部分接口供 plugin 调用。 这前两种模式适用于 plugin 开发者无法获得 host 代码的情况。
(3)完全调用,plugin 可以完全调用 host 内容。这种模式适用于 plugin 开发者能获得 host 代码的情况。
- 只需引入 DL 的一个 jar 包即可高效开发插件,DL 的工作过程对开发者完全透明
- 支持 android2.x 版本
缺点如下:
- 不支持通过 This 调用组件的方法,需要通过 that 去调用。
- 由于 APK 中的 Activity 没有注册,不支持隐式调用 APK 内部的 Activity。
- 插件编写和改造过程中,需要考虑兼容性问题比较多,联调起来会比较费时费力。
- 2. DroidPlugin
优点如下:
- 支持 Android 四大组件,而且插件中的组件不需要在宿主 APK 中注册。
- 支持 Android 2.3 及以上系统,支持所有的系统 API。
- 插件与插件之间,插件与宿主之间的代码和资源完全隔阂。
- 实现了进程管理,插件的空进程会被及时回收,占用内存低。
- 插件 APK 中不支持自定义资源的 Notification,通知栏限制。
- 插件 APK 中无法注册具有特殊的 IntentFilter 的四大组件。
- 由于插件与插件,插件与宿主之间的代码完全隔离,因此,插件与插件,插件与宿主之间的通信只能通过 Android 系统级别的通信方式。
- 安全性担忧(可以修改,hook一些重要信息)。
- 机型适配(不是所有机器上都能行,因为大量用反射相关,如果rom厂商深度定制了framework层,反射的方法或者类不在,容易插件运用失败)
Small 是一种实现轻巧的跨平台插件化框架,基于“轻量、透明、极小化、跨平台”的理念,更倾向于组件化。跳转插件的界面都是通过uri来指定的.
优点如下:
- 所有插件支持内置宿主包中。
- 插件的编码和资源文件的使用与普通开发应用没有差别。
- 通过设定 URI ,宿主以及 Native 应用插件,Web 插件,在线网页等能够方便进行通信。
- 支持 Android 、 ios 、和 html5 ,三者可以通过同一套 javascript 接口实现通信。
- 暂不支持 Service 的动态注册,不过这个可以通过将 Service 预先注册在宿主的 AndroidManifest.xml 文件中进行规避,因为 Service 的更新频率通常非常低。
- 4. DynamicAPK(携程)
- 5. AndroidDynamicLoader
- 6. ACCD阿里
【Android插件化框架】
推荐阅读
- ActivityTask: Android上的Async/Await小帮手
- [Angular] Use :host-context and the ::ng-deep selector to apply context-based styling
- Android开发学习
- django创建app
- AndroidThermal-engine
- Java字符串format()
- Java字符串equalsIgnoreCase()
- Java字符串常见问题解答或面试问题
- Java字符串equals()