Android 插件化和热修复知识梳理

概述

在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的产品当中。因此,我们势必需要了解一下这两门技术。

插件化和热修复

首先需要明确的一点,插件化和热修复不是同一个概念,虽然站在技术实现的角度来说,他们都是从系统加载器的角度出发,无论是采用hook方式,亦或是代理方式或者是其他底层实现,都是通过“欺骗”Android 系统的方式来让宿主正常的加载和运行插件(补丁)中的内容;但是二者的出发点是不同的。插件化顾名思义,更多是想把需要实现的模块或功能当做一个独立的提取出来,减少宿主的规模,当需要使用到相应的功能时再去加载相应的模块。热修复则往往是从修复bug的角度出发,强调的是在不需要二次安装应用的前提下修复已知的bug。

为了方便叙述,做以下称谓约定:

宿主: 就是当前运行的APP
插件: 相对于插件化技术来说,就是要加载运行的apk类文件
补丁: 相对于热修复技术来说,就是要加载运行的*.patch,.dex,.apk等一系列包含dex修复内容的文件。

以下提到内容中的宿主和插件(补丁),均是上述含义,不再赘述。

image

上图就是对Android插件化和热修复之间关系的体现。据我所知,在某些开发团队中,会把热修复的技术,作为在APP端部署日常活动的功能来用。虽然,实际效果来看是没有问题的,但长期使用还是值得商榷的。

早期很多应用的动态换肤功能,就是参考了Android 插件化的技术,最早的新浪微博夜间模式就是通过下载一个夜间模式的apk文件完成,当时做为开发者的自己,感觉很高级。关于动态加载的应用,其实有很多可以扩展的思路,比如特定节日的促销活动,逃避审核机制的动态广告加载都是Android插件化技术可以考虑的实现,更多内容可以参考Android动态加载技术 简单易懂的介绍方式

下面就从插件化技术的发展源头,逐步叙述一下二者的发展历程及现状,了解一下时至今日,热修复框架的发展到了各种地步,总体梳理一下热修复的原理,对现有的框架有一个了解。

插件化

发展历程及现状

关于插件化技术的起源可以追溯到5年前

  • 2012年的 AndroidDynamicLoader ,他的原理是动态加载不同的Fragment实现UI替换,可以说是开山鼻祖了,但是这种方案可扩展性不强。

  • 再到后来出现了23Code,他可以直接下载一个自定义控件的demo,并且运行起来。

  • 2014年一个里程碑式的年份,任玉刚(俗称主席)发布了dynamic-load-apk,也叫做DL。在这个框架里提供了两个很重要的思路:

    • 如何管理插件内Activity的生命周期: 使用 DLProxyActivity 采用静态代理的方式去调用插件中Activity的生命周期方法。
    • 如何加载插件内的资源文件:通过反射调用AssetManager 中到的addAssetPath方法就可以将特定路径的资源加载到系统内存中使用。

    以上两点,可以说是非常有意义的,尤其是第二点关于插件资源的记载,是后期出现的许多框架的参考思路。这个框架也有一些局限,不支持插件内

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值