React Native + Expo打包,热更新

您所在的位置:网站首页 testflight需要花钱吗 React Native + Expo打包,热更新

React Native + Expo打包,热更新

#React Native + Expo打包,热更新| 来源: 网络整理| 查看: 265

闲来无事,记录一下React Native基于0.0.46Expo打包Andriod APK包和iOS包

expo这个工具还是挺良心的,免费给我们打包资源和构建应用。(不过免费账户是有次数限制和资源优先级的,我在某天晚上去打包的时候就失败了,应该是排在我前面的vpn太多了吧)

iOS的包

在iOS里面,打包的类型简单点说可以分三种

development 这个就是自己用Xcode链接数据线跑到真机上需要用到的证书 ad hoc 这个需要你有付费的苹果开发者账号,如果你知道怎么配置证书,那么就去苹果开发者官网去配置,如果不知道,就交给expo就行。这个包的安装对象是需要被安装者的iPhone的UDID注册到证书里面去,才可以被安装 app store,这个主要就是用来发布到testFiglt,上线发布的包了

安卓的APK包

不懂安卓,反正只要能打出APK包,发给对方,对方就可以直接安装了,相较于iOS会有好很多,不过iOS也有tetsFlight,但是需要添加对方的邮箱,然后对方会收到兑换码,去testFlight去兑换即可。这个后面有时间再说

安卓好像还有个ADB还是啥玩意儿的包,其实道理都是一样,配置改个东西就行

目前我这个项目暂时不需要上线,所以,我这边打的iOS包是ad hoc,安卓是apk,能够让内部测试人员测试即可,或者能给客户演示即可。上线包和测试包,其实就是参数不一样

如何打包

前提

打包的前提是你开发的项目,能过通过expo start命令正常跑起来。

步骤一,安装EAS

在项目根目录中,安装EAS CLI(建议使用npm)

npm install -g eas-cli

步骤二,登录Expo

登录你的Expo账号

eas login

你也可以通过eas whoami来检查是否已经登录

步骤三,配置项目

如果你之前从来没配置过关于eas的东西,那么你的项目中,应该不会存在eas.json这个文件,在项目根目录中输入以下命令

eas build:configure

这个命令输入后,你的项目的根目录就会多出一个eas.json的文件,这个就是打包构建的时的配置文件了。

默认生成的eas.json文件应该长下面这样:

{ "cli": { "version": ">= 2.1.0" }, "build": { "development": { "developmentClient": true, "distribution": "internal" }, "preview": { "distribution": "internal" }, "production": {} }, "submit": { "production": {} } }

其实完全可以不用动里面的配置,不过我建议你修改一下,修改成下面这样,后面有大用(热更新)

{ "cli": { "version": ">= 2.1.0" }, "build": { "development": { "developmentClient": true, "distribution": "internal", "channel": "development" }, "preview": { "distribution": "internal", "channel": "preview" }, "production": { "channel": "production" } }, "submit": { "production": {} } }

步骤四,运行构建

官网的教程是让你使用eas build --platform all或者eas build --platform android或者eas build --platform ios

因为我们刚刚配置了perview这个配置,所以你可以指定运行构建

eas build --profile preview --platform all

注意:

1.这步构建之前,我在0.0.42版本的时候,就已经登录过我的Expo账户,并且生成了安卓的密钥,iOS的开发者正式也已配置过了。所以我是很顺利的就打包成功了。如果你没有配置过安卓的密钥,那么就去按照官方的教程去弄一下。iOS一定需要开发者账号,如果你没有,那就别搞iOS了。如果你有,但是你不会配证书,别担心,一切交给eas,你只要输入你的账号密码验证码就行。

iOS如果你想添加测试iphone,就是让手机能安装你的包,需要把对方手机的UDID给注册到你的证书里面去。

eas device:create

然后输入手机的UDID即可。怎么获取iPhone的UDID,用这个网站的工具就行UDID获取工具

步骤五,下载

如果上面的你都顺利通过,那么你的应用就已经被打包到expo这个官方了。你可以在上面第四步的时候,看到你的包的地址。

image.png

类似上面的图片,安卓也是一样的,点击install,会有一个二维码展示,iOS直接使用相机扫描,就可以下载了(要去设置->通用->VPN与设备管理里面验证一下你的应用),安卓手机用带扫码功能的相机或者浏览器可以下载APK包,直接安装

步骤六,踩坑

如果按照上面的步骤不行,多去看看官方文档,官网文档。或者评论留言,知无不言

如何热更新?

在expo 0.0.42版本的时候,热更新还是一件很方便的事情,我那时候把包上传到testFlight后,使用expo publish,用户在手机上多冷启动几次,就可以热更新了,但是这个官网更新的速度有点快,之前的方法已经不适用了,包括打包的方式都已经变更了,但是热更新这个功能是RN的为数不多的优势了,他不可能删除的,所以新的热更新方式如下:

步骤一,安装

在项目根目录中输入命令

npx expo install expo-updates

步骤二,回忆

有点不记得了,安装完这个expo-updates后,你的app.json文件应该会马上同步的,相较于之前的app.json文件,你会发现多出了

"updates": { "fallbackToCacheTimeout": 0, "url": "https://u.expo.dev/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" },

看到fallbackToCacheTimeout这个玩意儿,是不是很熟悉,这个就是app冷启动时的更新参数了,设置为0,代表会立即找有没有更新的代码,如果有就会更新。

步骤三,配置

还记的上面我们打包的命令吗?eas build --profile preview --platform all

可以看到eas.json文件中,我在preview这个键值对对象里面多了一个channel这个参数,这个就是代表通道的意思,你可以理解为git仓库管理的分支。因为我这边的需求是,打一个线上域名的包给业务去演示,打一个测试环境的包给测试随时验证数据。

因为刚刚打的包,是基于preview的通道,所以我们更新时,也需要走这个通道(这是我翻了不少github论坛才找到的答案,此处不容易,打包完后,你要是执行expo start本地调试的话,改回去即可,不要嫌麻烦)

这里敲黑板,更新之前,需要将app.json文件里面的这个 "runtimeVersion": { "policy": "sdkVersion" } 修改为 "runtimeVersion": "1.0.0" 具体版本号你随便定义 eas update --branch preview --message "Updating the app"

你也可以去参照官网的指示,多弄几个通道。我用的方法比较笨,不过也是因为代码不一样,我才这么做。我在本地代码仓库建立了两个分支,一个preview分支,一个test分支,然后将eas.json里面的channel字段的值改成了对应的preview和test。然后我打了两个包上去,两个包就是channel配置不一样,其他一模一样。后面我针对这两个不同通道的包,就可以设置不同的域名,代码了。

如果我需要对test这个通道的代码进行热更新,我修改好代码后,执行下面的命令即可

eas update --branch test --message "测试版本1.0.1"

步骤四,热更新

当你更新完代码后,多冷启动几次你安装的包,就可以更新成功了,提个小建议,在你们的app里面加个标识,比如“个人中心”加个版本号,标明一下当前测试版本,每次更新前,把版本号加1,这样测试和自己,就知道app有没有热更新成功了

这里注意一下,热更新只对js层面的代码有效,如果你的项目中嵌入了原生代码,比如我的项目中涉及到了支付宝支付,如果你改动了原生的代码,那么热更新是不会有效的,需要你重新bulid一个新包上去才行

最后

做完上面的步骤,基本上你公司的测试,老板都能看到app了,有bug修复完,热更新一下即可。说的不一定对,一切以官网为准,欢迎留言



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3