Android插件化框架
- 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。
- 插件编写和改造过程中,需要考虑兼容性问题比较多,联调起来会比较费时费力。
- 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动态部署框架(你可以认为是插件,但又与插件不一样),与传统意义上的插件不一样,用过代理的应该知道,代理方式会有各种莫名其妙的问题。
Android插件化框架的更多相关文章
- 自己动手写Android插件化框架
自己动手写Android插件化框架 转 http://www.imooc.com/article/details/id/252238 最近在工作中接触到了Android插件内的开发,发现自己这种技 ...
- 自己动手写Android插件化框架,让老板对你刮目相看
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由达文西发表于云+社区专栏 最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪 ...
- android 插件化框架VitualAPK
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) LeakCanary 与 鹅场Matrix ResourceCa ...
- android 插件化框架speed-tools
项目介绍: speed-tools 是一款基于代理模式的动态部署apk热更新框架.插件化开发框架: speed-tools这个名字主要指的快速迭代开发工具集的意思. 功能与特性: 1.支持Androi ...
- Android插件化框架研究-DroidPlugin
直接贴上我做的ppt.
- android 插件化 模块化开发
http://blog.csdn.net/o1587790525/article/details/11891997 Android 插件化架构设计 http://www.iqiyi.com/w_19 ...
- 包建强的培训课程(10):Android插件化从入门到精通
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Android插件化(三)载入插件apk中的Resource资源
Android载入插件apk中的Resource资源 简单介绍 怎样载入未安装apk中的资源文件呢?我们从android.content.res.AssetManager.java的源代码中发现,它有 ...
- Android 插件化开发(四):插件化实现方案
在经过上面铺垫后,我们可以尝试整体实现一下插件化了.这里我们先介绍一下最简单的实现插件化的方案. 一.最简单的插件化实现方案 最简单的插件化实现方案,对四大组件都是适用的,技术面涉及如下: 1). 合 ...
随机推荐
- linux上安装Python3和django流程详解
1.安装python3 1.1 安装相关依赖库(工具包) --->很重要 yum install gcc patch libffi-devel python-devel zlib-devel ...
- RPAD()和LPAD()函数进行字符串的填充
RPAD()函数从右边对字符串使用指定的字符进行填充. 格式:RPAD(string,padded_length,[pad_string]) string 表示:被填充的字符串. padded_len ...
- 网页后缀html、htm、shtml、shtm有什么区别?
每一个网页或者说是web页都有其固定的后缀名,不同的后缀名对应着不同的文件格式和不同的规则.协议.用法,最常见的web页的后缀名是.html和.htm,但这只是web页最基本的两种文件格式,今天我们来 ...
- ABAP术语-Interface Parameter
Interface Parameter 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/26/1081800.html Parameter t ...
- 使用Python对Csv文件操作
csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,mayi, ...
- 编辑文件出现:E212 can’t open file for writing
前面目录没有创建 还可能是权限问题
- (转载)jsp的内部方法jspInit(),_jspService(),jspDestroy()
jspInit(){}:jsp Page被初始化的时候调用该方法,并且该方法仅在初始化时执行一次,所以可以在这里进行一些初始化的参数配置等一次性工作,由作者创建jspDestroy(){}:jsp P ...
- 监听浏览器返回,pushState,popstate 事件,window.history对象
在WebApp或浏览器中,会有点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面.确认离开页面或执行一些其它操作的需求.可以使用 popstate 事件进行监听返回.后退.上一页操作. 一 ...
- __name__ 和 "__main__"
本模块名: person 调用者模块名: start import sys def funcperson(): print('我是人') print(sys.modules[__name__]) # ...
- FastDFS轻量级分布式文件系统部署
FastDFS介绍 FastDFS 是一个由 C 语言实现的开源轻量级分布式文件系统,作者余庆,支持 Linux.FreeBSD.AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合 ...