【ReactNative】热更新(原理篇)


写在前面:文章讲的是热更新的基本原理,适用于RN对应的Android和iOS端。不涉及:服务端下发,客户端校验和替换操作
如果您已经明白热更新的原理,请珍惜您的时间绕道去这里
你需要具备的知识:
1.很牛X开源的二进制差分工具Binary diff/patch utility
2.react-native打离线bundle包

操作步骤

生成增量包文件
增量包和源版本合并生成新的bundle文件
应用使用新的bundle 文件运行验证


1 生成增量包文件

  • 首先,在桌面创建两个文件夹,也可以跳过该步骤.只要你后面路劲搞得清楚就行.里面放两个ipa文件,随便什么文件都行.前提是两个文件要有点差别.我是在Test里放老的ipa,然后在Test1里放了个修改代码后的ipa.
图0-准备工作
  • 然后在命令行里
    bsdiff ~/Desktop/Test/HotPush.ipa ~/Desktop/Test1/HotPush.ipa ~/Desktop/hot.patched
    在桌面你会看到多了个hot.patched 文件,这个hot.patched 就是你需要的那个增量包

    bsdiff的定义bsdiff: usage: bsdiff oldfile newfile patchfile
    假如你出现了这个: bsdiff: command not found 复制下错误提示=>去这里

  • 再然后在命令行里
    合成新的.ipa
    bspatch ~/Desktop/Test/HotPush.ipa ~/Desktop/hot_new.ipa ~/Desktop/hot.patched
    bsdiff的定义bspatch: usage: bspatch oldfile newfile patchfile

hot_new.ipa就是最后客户端运行的那个最新包了.(这里是以iOS 端的例子)
到这里,我们怎么来确保新的包文件就是对的呢,这里就要用到MD5命令了.

图1-命令执行

上图中:可以看到合成新包的MD5和Test1里直接打最新代码的包是一样的,这就表明增量合成的过程没有问题.

2 增量包和源版本合并生成新的bundle文件

进到你的RN项目的根目录,然后命令行执行react-native bundle 命令,参数的话就不一一解释了
react-native bundle --entry-file index.ios.js --bundle-output ./ios/bundle/index.ios.jsbundle --platform ios -- assets-dest ./ios/bundle --dev false

  • 注意 执行前,需要自己在对应目录上创建空文件夹bundle


    图2-bundle文件

这里我的猜测是:

index.ios.jsbundle 是node_modules的bundle文件,index.ios.jsbundle.meta 则是自己JS代码的bundle文件.

图3-然后运行代码

弄成上图的样子后就在xcode上Comand R

你会发现,手机屏幕上方状态栏的位置有个黑色的加载进度显示(很快就消失了),这就表示现在的工程不是连接的你电脑上那个npm start 出来的本地服务.绿色的加载进度表示你是跑的本地起的服务,而不是离线包.
图片里的bundleURL 方法看你自己情况而定,只要能让app 找到对应的bundle文件就好.如果找不到,会去你localhost 找,再找不到就会包找不到服务的错.

至此,我们已经完成了准备工作.
随便在你项目里修改下代码,然后保存.然后再react-native bundle 一次,这里要注意点:这里换下output 的路劲,方便后面新旧的对比,我这边是直接放到桌面了的Test了
命令A:react-native bundle --entry-file index.ios.js --bundle-output ~/Desktop/Test/index.ios.jsbundle --platform ios --assets-dest ./ios/bundle --dev false

新旧资源包进行最开始的diff 和patch 操作
命令B:bsdiff ~/Desktop/Test/index.ios.jsbundle.meta ~/Desktop/HotPush/ios/bundle/index.ios.jsbundle.meta ~/Desktop/hot.patched

会看到桌面有个hot.patched 的文件

命令C:bspatch ~/Desktop/HotPush/ios/bundle/index.ios.jsbundle.meta ~/Desktop/Test/index.ios.jsbundle.meta ~/Desktop/hot.patched

经过命令C后,就在桌面上得到了新的index.ios.jsbundle.meta ,这个meta其实和命令A 放在Test里面的是一样,可以用md5 校验

图4-修改代码后新的bundle文件

然后把上图中新的index.ios.jsbundle.meta文件拖到你的工程里,就是图2的最后一级目录里,然后会提示你有同名文件了,选择替换.

3 应用使用新的bundle 文件运行验证

这一步就是验证了,替换bundle文件后,点击运行.(其实替换这一步应该是在打包好的客户端里操作的),你会发现是你修改后的代码了.


写在最后:
讲的那么一大堆的东西,只是为了自己能搞懂热更新脚本都做了些啥,然后自己手动做一遍.可能后面在RN里面写那些热更新的代码的时候就会简单很多吧.网上有很多Pushyreact-native-code-push 的使用教程,但是一看他们的源码就懵逼了 .我就是在看了Pushy 的源码后,写这些的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容