市场上现存方案:微软的 CodePush 以及React-Native中文网的Pushy,大家可根据公司实际情况酌情选择。
处于安全性的考虑,公司禁止向第三方平台上传源码相关文件,所以要自己动手实现。
增量更新主要实现流程
1.使用react-native bundle 命令打包,压缩打包文件
2.使用bsdiff生成新旧RN版本压缩文件的差异化文件patchFile
3.客户端旧RN版本压缩文件合并下载的patchFile文件,校验文件MD5值,解压合并后的文件,重新加载jsbundle,完成更新
4.增加版本控制,脚本化1、2过程
常见问题:
一、bsdiff的使用
下载地址:http://www.daemonology.net/bsdiff/
1.解压下载文件
$ cd bsdiff-4.3
2.修改makefile文件格式如下,原文件后三行缩进格式不对:
CFLAGS += -O3 -lbz2
PREFIX ?= /usr/local
INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555
INSTALL_MAN ?= ${INSTALL} -c -m 444
all: bsdiff bspatch
bsdiff: bsdiff.c
bspatch: bspatch.c
install:
${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin
.ifndef WITHOUT_MAN
${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1
.endif
3.在bspatch.c文件中加入头文件
#include<sys/types.h>
4.终端执行make命令,生成bsdiff、bspatch文件
$ make
5.将bsdiff、bspatch文件拷贝到usr/local/bin 目录下
6.使用方式:
//生成差异文件
$ bsdiff oldFilePath newFilePath patchFilePath
//合并文件
$ bspatch oldFilePath newFilePath patchFilePath
二、客户端合并文件,工程需要添加libbz2.tbd
1.bsdiff.h
#ifndef bsdiff_h
#define bsdiff_h
#define LBD_OK 0
#define LBD_ERR_OPEN 1000
#define LBD_ERR_CLOSE 1005
#define LBD_ERR_MALLOC 1010
#define LBD_ERR_SEEK 1015