插件化的由来
方法数瓶颈 65535/64K个
插件化要解决的问题
- 动态加载apk
- 资源加载 AssetManager加载资源到resource
- 代码加载
发展历程及现状
关于插件化技术的起源可以追溯到5年前
-
2012年的 AndroidDynamicLoader ,他的原理是动态加载不同的Fragment实现UI替换,可以说是开山鼻祖了,但是这种方案可扩展性不强。
-
再到后来出现了23Code,他可以直接下载一个自定义控件的demo,并且运行起来。
-
2014年一个里程碑式的年份,任玉刚(俗称主席)发布了dynamic-load-apk,也叫做DL。在这个框架里提供了两个很重要的思路:
- 如何管理插件内Activity的生命周期: 使用 DLProxyActivity 采用静态代理的方式去调用插件中Activity的生命周期方法。
- 如何加载插件内的资源文件:通过反射调用AssetManager 中到的addAssetPath方法就可以将特定路径的资源加载到系统内存中使用。
以上两点,可以说是非常有意义的,尤其是第二点关于插件资源的记载,是后期出现的许多框架的参考思路。这个框架也有一些局限,不支持插件内Service、BroadcastReceiver等需要注册才能使用的组件,同时插件apk也需要按照其开发规范来实现,总体来说还是有一定的成本,但无论怎样都是一个很有价值的框架。(话说这个框架貌似已经不再维护了,最近一次关于代码的更新都是2年前了,o(╥﹏╥)o)。
-
2015年 DroidPlugin
DroidPlugin 是Andy Zhang在Android系统上实现了一种新的 插件机制 :它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构,实现多团队协作开发具有一定的好处。 这段话是DroidPlugin在Github README 文档中的介绍。这款来自360的插件化框架. -
2015年 DynamicAPK 这个就……,貌似因为License的原因已经完全不更新了。
-
2017 RePlugin 这是360 开源的插件化框架,按照他自己的说法,相较于其他框架,他对系统的hook只有一处,那就是ClassLoader,这样从理论来说,貌似会有更好的稳定性。
-
2017年 atlas这个是阿里今年刚刚开源的插件化开发框架,可以说是非常强大;具体原理参考详解 Atlas 框架原理;还没有用过。
-
Small 最后再说一下Small,个人感觉Small 所提供了一种比插件化更高层次的概念,组件化;把一个完整的APP看成是由许多可以复用模块组件组成(这个有点像React Native的开发理念);开发起来像是搭积木的感觉。有兴趣的可以去Small官网了解一下。
网友评论