一、背景说明:
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
现在build.gradle下,新增了一个配置,如果开启了就采用新的hermes,如果未开启则采用老的jsc加载引擎。
二、热更新传统方案
目前 code-push 的两种发布模式:
code-push release-react
(打bundle并自动上传)
code-push release
(需先打bundle,再通过该命令上传)
如果采用code-push release-react
app热更新后,杀掉进程重新进入,app首屏加载速度又慢下来了。
生成的bundle只是通过babel编译转码(es6转es5),然后js压缩和削减。Hermes 仍然可以执行纯文本的 JS 代码,效率比替换js引擎前更低。
三、热更新打包优化方案
(1)先打bundle
react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --assets-dest ./bundles --dev false
(2)将bundle转成字节码
1.下载hermes-engine(可以在一个测试rn工程中引入)
npm i hermes-engine
2. cd node_modules/hermes-engine/oxs-bin
(根据平台,我这里是苹果系统,其他系统可以到hermes-engine,ls查看选择。)
3.将bundle转换成字节码
./hermesc -emit-binary -out index.android.bundle.hbc /Users/xxxx/work/react-native/app/bundles/index.android.bundle
4.将之前bundle目录下的index.android.bundle删掉,将当前的index.android.bundle.hbc重命名为index.android.bundle,mv到之前bundle目录下。
(3)上传bundle
code-push release AndroidAppNamexx ./bundles 1.0.0 --d Staging --des "描述" --m true
(4)测试热更新
当前热更新首屏加载速度比直接上传原始bundle的速度快了很多,但是比初次打包就是字节码bundle的加载速度要慢一点点。
网友评论