您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页Android插件化的历史及热门项目对比

Android插件化的历史及热门项目对比

来源:二三娱乐

本文旨在梳理Android插件化的历史及对比各家技术能解决的问题,对比出优缺点。既是Android插件化的总结,又可以当做插件化入门的引导。本文不对技术细节过多探讨,细节方面会有相应的参考链接。

一、历史
插件化的历史已经有很长一段时间了,各种大大们也介绍过插件化相关的历史,比如:

按照时间维度来看,整理成以下表格:

android_plugin

23Code
23Code并不是一个开源的项目,它是一个完整的apk。在应用市场可以下载得到,它内部展示了一些有趣的动效,通过下载的方式,可以直接运行起来,这就是插件化的真实案例。

官方对这个库的说明是非代理Android动态热部署框架,而且在视频介绍中,伯奎也讲到,这个方案,就是把宿主当做一个容器,动态加载对应的插件。视频中也有讲到,要做到让插件无感知地运行在这个容器中,需要hook很多系统层面的东西,比如:ActivityThread,LoadedApk,ContextImpl,PackageParser,ActivityManagerNative等,即当插件需要系统的服务来提供对应功能的时候,将这个行为拦截掉,宿主就可以在插件和Android系统中间做些手脚了。在当时,Altas是最为先进插件化技术了。为淘宝客户端提供了很多加载其他业务插件的能力。

维术的这几篇blog很详细滴讲解了DroidPlugin是如何实现四大组件的插件化的,还有几篇有规划但是没有写的方面,希望后面能补全。

与ACDD一样修改了aapt,使得插件与宿主的资源不会出现相同id的问题。

热修复
插件化技术的演进,带来了相关的热修复技术。有代表的热修复技术有:

  1. QQ空间的超级补丁技术
  2. 微信Tinker
  3. 阿里的AndFix

QQ空间和微信的Tinker的细想很相近,都是在查找类的之前,将插件的dex插入原有dex之前,使得能够加载的是最新插入进来的dex中的class。从而达到修复原有类的问题的目的。它们并没有在Github上开源,贾吉鑫根据这个思路做出了Nuwa开源道github上,之后又有很多类似的开源项目。阿里的AndFix与这种思路不同,它采用的是方法替换的思路,在native层,把这个方法实现体的指针替换为修复后的方法。

这两种方案其实都有很多弊端,QQ空间的类替换方法,不能即时生效,patch如果修复的地方比较多,会影响启动时间。而AndFix,则只支持方法层面的替换,不能使用未import过的类,不能替换整个类文件。

它应该是性能与修复场景最好的一种了。它的思想与InstantRun一样,在编译时动态地为每个类中的每个方法插桩,每个方法判断是否有插件被加载,有的话直接执行插件中的方法。

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务