《ReactNative系列讲义》高级篇---09.热更新差量更新

本文详细介绍了ReactNative应用的热更新差量更新实现过程,包括差量包的生成、Android工程中diff_match_patch算法的集成、热更新主流程的修改以及JSBundle加载路径的调整。通过这种方式,可以有效地减少更新包的大小,提高用户体验。
摘要由CSDN通过智能技术生成

| 版权声明:本文为博主原创文章,未经博主允许不得转载。

一、简介

通过前面几篇文章我们已经实现了全量热更新,这仅仅是实现了热更新的第一步,全量更新的bundle包会稍显大一些,差量更新就是给bundle包做瘦身。
大致思路如下:
发布APP版本前,保留发布版APP的bundle包;等再次更新的时候,手动打bundle包,将生成的bundle包和保存的原始版本做差量动作,生成差量包;将生成的bundle差量包上传至服务器,修改bundle版本号;用户端APP下载差量包,将差量包与APP本地正使用的bundle包进行合并,生成新的bundle;RN重新加载指定路径的bundle包。
这里讨论的差量指的是代码文件的差量,即index.android.bundle文件的差量计算。图片目前还是全量更新,如果做差量,需要修改RN源码,如果APP RN的版本需要升级,升级完成之后仍然需要再次修改RN源码,后续文章我们会讲到。

二、代码实现
1. 生成差量包
  • 需将新旧bundle包转换成String类型的数据
/**
 * 将文件转换成字符串
 * FileReader
 * BufferedReader
 *
 * @param path 文件路径
 * @return
 */
public String readFileToString(String path) {
   String results = "";
   try {
       FileReader reader = new FileReader(path);
       BufferedReader bufferedReader = new BufferedReader(reader);
       int result = bufferedReader.read();
       StringBuilder sb = new StringBuilder();
       while(result != -1) {
           sb.append((char) result);
           result = bufferedReader.read();
       }
       bufferedReader.close();
       reader.close();
       results = sb.toString();
   } catch (FileNotFoundException e) {
       e.printStackTrace();
   } catch (IOException e) {
       e.printStackTrace();
   }

   return results;
}
  • 使用Google diff_match_patch算法库,从官网下载最新的代码文件,从中选择java版本
/**
 * 生成差异补丁包
 *
 * @param oldSource 
 * @param newSource 
 * @return
 */
public String createPatch (String oldSource, String newSource) {
   diff_match_patch dmp = new diff_match_patch();
   
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值