当我添加新屏幕/组件时,Expo OTA 仍然有效吗?
Posted
技术标签:
【中文标题】当我添加新屏幕/组件时,Expo OTA 仍然有效吗?【英文标题】:Expo OTA still works when I add new screens/components? 【发布时间】:2021-09-20 22:29:43 【问题描述】:据我了解,Expo 或 Codepush OTA 用于更新 React Native (RN) 应用程序,而无需通过应用程序提交。可能的原因是因为一个 RN 应用程序有 2 个部分:
-
UI:内置 RN 组件(View、Text...)将转换为原生 UI 小部件/组件(UIView、android.view...)。基本上我们的 UI 是原生的。
逻辑:用 javascript 编写,无法转换为本机代码。我们必须在我们的原生应用中嵌入一个 JS Runtime(JavascriptCore、Hermes)来读取和执行 JS。
OTA 只更新 JS 代码,不能更新原生代码。 但是,最近我刚刚进行了 OTA 更新以添加一些新功能(新屏幕、新组件),并且运行良好。我无法理解这一点。我不是通过添加新屏幕来修改本机代码吗?这是否意味着我对 UI 部分的理解有误,并且我们的 UI 不是原生的,而是 Web 视图?
希望你们能帮我回答这个问题。谢谢!
【问题讨论】:
我从 Expo 的文档中唯一确定的是,您无法通过无线方式推送新的本机模块。资产、组件(js代码)、字体可以推送,也会推送。您需要注意如何推送更新。他们建议每个新应用程序在商店发布一个频道,这使您可以灵活地将更新发送到应用程序的特定版本,这样您就不会因不兼容的版本/更新而导致应用程序崩溃。我更喜欢禁用OTA,找不到了:) 【参考方案1】:我不是通过添加新屏幕来修改原生代码吗?
不,您没有修改本机代码库。除非您添加使用本机代码的新库,否则您只修改了 JavaScript 代码库。
这是否意味着我对 UI 部分的理解有误,并且我们的 UI 不是原生的 但是网络视图?
React Native UI 是原生的,不是 webview。例如,您使用了 View, Text
等来自 react-native
的组件。它调用本机代码并使用不同的参数创建新的视图实例。当您创建新的 JavaScript 代码时,本机代码保持不变。
换句话说,通过您的直播更新,您创建了本机代码的新调用。但是这个原生代码和你在商店里提交的时候是一样的。
【讨论】:
以上是关于当我添加新屏幕/组件时,Expo OTA 仍然有效吗?的主要内容,如果未能解决你的问题,请参考以下文章
Expo大作战(二十九)--expo sdk api之registerRootComponent(注册跟组件),ScreenOrientation(屏幕切换),SecureStore,
ESP32学习笔记(24)——OTA(空中升级)接口使用(原生API)
使用 Expo 更新 APNS 证书后出现 AWS Pinpoint 错误