Android插件化开发指南——插件化技术简介

1. 为什么需要插件化技术

插件化技术最初源于将app中一些不常用的功能模块做成插件,主要有两个方面的好处:

  • 减小了安装包的大小;
  • 实现app功能的动态扩展;

但实际上现在插件化80%的使用场景都是为了修复线上BUG。当将一个项目的各个功能抽离为单独的可运行的模块的时候,也就是插件化的时候。如果项目的某个模块出现了问题,那么需要在短时间内修复这个问题,而重新打包发布Android版到各大应用市场却已经来不及了。而插件化就可以做到只需要重新打包这个模块的代码,生成增量包,放到服务器上供用户下载即可更新。

当然,针对上述场景可选的技术方案不止插件化开发,Android热修复技术也可以解决这个问题。但是插件化技术能做到的确不止是修复BUG。比如吃鸡中的地图更新、皮肤更新等,这些都不需要重新打包一个新的发布版本。因为此时各个业务模块不再是事先分离的组件(即:aar)包,而是一个打包好的APK文件,放在宿主APPassets的目录下,用户只需要下载就可以实现更新操作,而这个方面的内容才是插件化技术的价值所在。

2. 插件化技术的历史

插件化框架名称作者Github地址支持类别需要在清单文件注册
AndroidDynamicLoader2012年大众点评的屠毅敏(最早的动态加载实现方案)【代理Fragmenthttps://github.com/mmin18/AndroidDynamicLoader只支持Activity
Altas2013年淘宝的伯奎 【hook底层】https://alibaba.github.io/atlas/支持四大组件
dynamic-load-apk2014年百度的任玉刚 【代理Activityhttps://github.com/singwhatiwanna/dynamic-load-apk只支持Activity
DroidPlugin2015年奇虎360的张勇【hookhttps://github.com/Qihoo360/DroidPlugin支持四大组件
DynamicAPK2015年携程【基于OpenAltashttps://github.com/CtripMobile/DynamicAPK只支持Activity
Small2015年二手车交易平台林光亮【hookhttps://github.com/wequick/Small支持四大组件
RePlugin2017年奇虎360手机卫士【hookhttps://github.com/Qihoo360/RePlugin支持四大组件
VisualApk2017年滴滴https://github.com/didi/VirtualAPK支持四大组件

值得注意的是,插件化开发技术一直是我们中国的开发者在积极探索。这是因为在国外一般都使用Google Play,在这个官方市场不允许插件化APP的存在。且因为国内的场景不同,在国内任何数据的显示错误或者奔溃都直接导致更过利润的丢失,所以在国内这个相对宽松的环境下,插件化技术运营而生。

3. 插件化实现思路

利用hook技术实现欺上瞒下。Android系统是多进程的,所以系统服务实际上不知道App进程中具体运行的代码,所以使得欺上瞒下成为了可能。欺上是指让系统不知道我们的插件在宿主App中运行;瞒下是指让插件以为自己已经被安装。当然也有使用Java动态代理来实现的欺上瞒下,比如DroidPlugin

无意间看到《Android插件化开发指南》这本书作者包老师的专访记录:专访包建强:为什么我说 Android 插件化从入门到放弃?。这里简单做一个摘要:

3.1 InfoQ:您在 GMTC 中的议题叫做《Android 插件化:从入门到放弃》,请问这个标题代表什么意思?

包建强:哈哈哈。我是觉得,如果这个演讲主题是《Android 插件化:从入门到精通》的话,就体现不出真是想明白了这个领域。所以最近冒出来各种从入门到放弃、改行、住院、出家的技术书籍,我觉得那反而是说明作者是真的大彻大悟了,武侠小说里面有写,虽“飞花摘叶皆可伤人,草木竹石均可为剑”,就是这种境界。
不过要声明的是,我对 Android 插件化的认识,远不如冯森林、张勇、罗迪这些人。
我有一个 Android 插件化研究的群,三十多人,都是国内各个插件化开源项目的作者、公司插件化的实施者,以及传经授道的博客作者。我们都感受到 Android 插件化技术基本已经成型了,随着 React Native 的横空出世,Android 插件化会慢慢退出历史舞台,也就是这一两年的事情吧,所以要给后人留下点什么,于是便有了这次技术分享
我的分享讲包括插件化技术的历史和各种八卦,各个技术流派,一些小例子,各个开源项目的思想,插件化实施过程中遇到的问题,以及未来的发展方向。45 分钟,我尽量讲的生动有趣一些。

3.2 InfoQ:请问您是如何学习的?对于初学者有什么建议?

  • 首先就是去写代码。有一个做 Android 的哥们升级为架构师,需要了解 iOS 这门技术,来问我怎么能迅速精通 iOS,我就告诉他,别玩虚的,脚踏实地跟着 iOS 开发团队做几个需求,半年之后再来谈这个话题。AndroidiOS 的很多现金思想可以相互借鉴,我建议做一门技术的同学,也适当学习另一门技术。
  • 咬着牙看开源项目。比如说 JSPatch,怎么看?我有个建议,你看 JSPatch 的版本提交历史,从第一次提交看起,这时候的功能应该是最简单的,也是最容易看懂的,然后看历史每次提交都修改了哪些东西,你能搞清楚作者的思路是什么
  • Android 插件化虽然有被 React Native 取代的势头,但还是要搞清楚插件化所涉及的各种思想和技术。我这一年来的心得是,这是提高自身内功的极好办法。尤其是涉及到 Android 系统底层的各种 Hook
  • 写技术博客吧。每天看文章只能是看过,一个月后能沉淀下来的没有多少,好记性不如烂笔头。一开始你可以转载或罗列精品文章的链接,慢慢的开始分享自己的心得,翻译些技术文章,技术水平提高是一个循序渐进的过程。

4. 其他

除了插件化和热修复可以用来修复bug以外,React Native也可以用来修复bug和动态发布新功能,和Android插件化开发有异曲同工之妙。值得注意的是React Native虽然是H5编写,但是和Hybrid技术不同。由于H5很慢所以React NativeHTML5翻译为了原生代码。

既然React Native也可以达到效果,且效率上可以得到满足。那么未来React Native会成为App开发的主流?


References

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦否

文章对你有用?不妨打赏一毛两毛

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值