模块化、组件化、插件化、热修复、增量更新

模块化

主要是重用,使用module,不强调单独编译,通信方式为intent路由,也可以用阿里路由框架。

组件化

主要是解藕,功能拆分,使用module,debug环境下apply plugin 切换为application,强调单独编译,通信方式为intent路由,也可以用阿里路由框架。

模块化与组件化的差别在于颗粒度,模块相对于组件的粒度较大,组件分的更细。一个模块可以由很多个组件构成。

插件化

不同的业务模块都做成一个apk,点击对应的业务模块就去动态加载对应的apk,可以并行开发,插件化本身是不同进程,通信需要用binder机制。

热修复

是为了做到解决修复某个bug或者增加某个小功能而不用去频繁发布版本。做法是打出差异包补丁,发布到第三方平台,重启软件后会下载修复文件,并且与基础包进行合并,实现应用的修复。

说起热修复就不得不提类的加载机制,和常规的JVM类似,在Android中类的加载也是通过ClassLoader来完成,具体来说就是PathClassLoader 和 DexClassLoader 这两个Android专用的类加载器,这两个类的区别如下:

  • PathClassLoader:只能加载已经安装到Android系统中的apk文件(/data/app目录),是Android默认使用的类加载器。
  • DexClassLoader:可以加载任意目录下的dex/jar/apk/zip文件,也就是我们一开始提到的补丁。是实现热修复的重点。

而这两个加载器都是继承BaseDexClassLoader,在BaseDexClassLaoder中有个DexPathList对象,它有一个dexElements集合,储存的是dex文件,而类的加载,就是遍历这个集合,如果找到了这个类就返回。热修复就是将修复后的dex文件放在dexElements中的第一个位置,这样一旦加载到了修复后的类,就不会再加载之前旧的类。

腾讯的tinker用的就是类加载技术实现的,阿里的andFix用的是native实现的。

插件化和热修复的相同点就是都用到了动态加载技术,插件化是宿主apk动态加载插件apk,热修复是app动态加载修复补丁。

增量更新

是将新旧apk生成的字节码文件进行对比,生成差分包,然后将差分包合并到旧apk中,生成新版本的apk。

步骤1:生成差分包
这一步需要在服务器端来实现,一般来说,每当apk有新版本需要提示用户升级,都需要运营人员在后台管理端上传新apk,上传时就应该由程序生成与之前所有旧版本们与最新版的差分包。

例如: 你的apk已经发布了3个版,V1.0、V2.0、V3.0,这时候你要在后台发布V4.0,那么,当你在服务器上传最新的V4.0包时,服务器端就应该立即生成以下差分包:

V1.0 ——> V4.0的差分包;
V2.0 ——> V4.0的差分包;
V3.0 ——> V4.0的差分包

步骤2:使用旧版apk与差分包,在客户端合成新apk
需要在手机客户端实现,ApkPatchLibrary 工程封装了这个过程。

步骤3:校验新合成的apk文件
在执行patch之前,需要先读取本地安装旧版本APK的MD5或SHA1,判断当前安装的文件是否为合法版本,同样,patch得到新包之后,也需要对它进行MD5或SHA1校验,校验失败,说明合成过程有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值