Android 插件化技术简史

  • 2012年的时候,大众点评的屠毅敏,推出了AndroidDynamicLoader框架,他使用一个Activity作为外壳,动态加载一个未安装apk中的Fragment,并通过外壳Activity来处理Fragment的全部生命周期,达到动态加载一个Android视图界面的效果。
  • 2013年,出现了23Code。23Code提供了一个壳,在这个壳里可以动态下载插件,然后动态运行。可以在壳外编写各种各样的控件,放在这个框架下去运行。
  • 2014年初,阿里淘宝的Altas技术
  • 2014年4月,任玉刚发布了dynamic-load-apk,它没有Hook太多的系统底层方法,而是从上层,即App应用层解决问题,创建一个继承自Activity的ProxyActivity类,然后让插件中的所有Activity都继承自ProxyActivity,并重写Activity所有的方法。其实现原理是创建一个静态代理 Activity,将动态加载到未安装的 Activity 中的全部方法(包括生命周期方法)使用静态代理类调用执行。然而由于是动态加载的类,静态代理调用后没有办法拿到super,只能在编写插件时使用that来替代super,而这个that对象实际上就是静态代理类。
  • 2014年7月(或者8月),一位名叫 null 的朋友(中国人),写了一个插件化加载框架,叫android-pluginmgr 利用 java 虚拟机字节码操作方式,通过动态生成一个插件类的子类,达到插件化的功能。尽管热编译(或者叫热部署)首次创建时效率非常低,但是首次创建后下次加载就能达到比起反射调用快的多的效果,同时可以做到插件代码不必遵循任何限定。现在,看到他的master分支已经与 lody 一起,改成了Instrumentation加载
  • 2014年11月,11月份,当时高一刚入学3个月的 lody 也写了一个插件化框架,叫Direct-Load-apk。DLA使用的应该是当时最先进方案了,以至于第二年的DroidPlugin,DynamicAPK都采用的是这套方案,只不过实现起来更为严谨。通过找到一切Activity启动的根源:Instrumentation通过替换这个类,来加载一个伪装的Activity欺骗系统的校验,而实际上加载的是未安装的插件Activity。
  • 2015年4月,一个新框架推出来,叫OpenAltas,后来改名为ACDD。这个框架参考了淘宝App的很多经验,主要就是Hook的思想,同时,还首次提出来通过扩展AAPT来解决插件与宿主的资源id冲突的问题。
  • 2015年8月,张勇发布DroidPlugin。能把任意的App都加载到宿主里。可以基于这个框架写一个宿主App,然后就可以把别人写的App都当作插件来加载。没有制订任何说明文档,导致技术人员掌握这个框架不太容易。深度hook实现。跟上面说的DLA一样,通过修改Instrumentation实现Activity动态加载,通过修改ActivityThread和ActivityManagerService实现Service动态加载。说起来非常容易,但是实际上实现起来应该是困难重重。作者几乎是完全自己实现了一套Framework层中对Service和Activity加载的方案,替换掉了系统几乎全部相关的Binder。
  • 2015年9月,阿里Andfix通过加载器读取一个dex文件中的类,并找到被注解标记到的要修复的方法,再通过jni在C层替换掉原本出BUG的方法的指针,从而达到热修复的目的。这套方案作为热修复而言并没有任何问题可言,但是热修复毕竟是热修复,不能达到动态添加的目的。
  • 2015年10月,大众点评的贾吉鑫做了一个项目,起名为Nuwa(女娲),通过前置相同Dex来实现热修复,都是解决Android的修复问题,能修复线上的任何一个方法。可惜后来没有继续维护。
  • 2015年10月,携程的也开源了其插件化框架:DynamicAPK,内容没细看,据说最成功的是自己实现了一个aapt,替换掉SDK的aapt后可以做到对插件资源重排,达到资源通用。
  • 2015年底,仍然是Android插件化框架,福建的林广亮提出了一个新机制——Small框架,这个机制不太一样的地方就是,通过脚本的方式来解决资源冲突的问题。不光有Android的插件化功能,同时作者还提供了IOS的实现代码。这个项目融合了热修复的类替换思路和插件化的资源加载,是一个非常好的思路。项目的 java 代码本身并没有什么特殊的地方,跟上面讲的差不多,主要内容是在 groovy 脚本里面,通过脚本修改了编译后生成的插件资源id。
  • 2017年 6 月 ,VirtualAPK 是滴滴开源的一套插件化框架,支持几乎所有的 Android 特性,四大组件方面。
  • 2017 年 7 月,RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出”全面插件化“(全面特性、全面兼容、全面使用)的方案。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值