
Layer cake of react native platforms. Vega OS supports multiple form factors of devices.
架构原则
对等兼容
适用于Vega的React Native采用React Native的跨平台原则,旨在提供与RN API和流行库对等的功能。RNV支持超过80%的RN核心组件和API。此外,RNV还移植了在RN生态系统中流行的40多个RN库。这种支持允许用户在Vega OS和其他操作系统平台上重复使用代码。RNV还包括RN tvOS中的API,用于支持特定于电视设备的焦点管理和事件处理功能。此外,在合理的情况下,RNV包括特定RN平台独有的特定API,例如BackHandler (Android)、SafeAreaView (iOS)。
此外,Vega SDK支持常用RN工具以及其他开发和测试实用工具,以加快应用开发,同时支持高性能运行时。React Native DevTools、Chrome Dev Tool、Flashlight等都可以与RNV一起使用。您可以将现有工作流程与这些工具结合,进行跨平台工作。
性能
适用于Vega的React Native是亚马逊从头开始设计而成的,旨在优化亚马逊设备上的性能。您的应用应符合Vega的性能KPI要求。 亚马逊使用React Native的新架构构建了RNV,并受益于RN核心框架的所有改进。新架构包括对以下内容的支持:- 同步布局和事件
- 并行渲染
- 通过JSI实现快速JavaScript和原生互操作,包括对Turbo模块的支持。
多配置文件和多模态
适用于Vega的React Native支持多种亚马逊设备,包括电视和智能音箱。它使用灵活的布局来适应不同的屏幕尺寸上的内容。平台API可帮助应用在运行时适应不同的设备类型。在应用构建过程中,您还可以使用Vega的构建工具为特定设备自定义功能。 您的用户可以通过不同的方式控制亚马逊设备:通过语音、触摸或遥控器。适用于Vega的React Native (RNV) 自动支持所有这些控制方法。它的组件可与触摸屏和遥控器方向键配合使用。该框架还包括Alexa语音控制,允许用户使用语音命令浏览应用和控制媒体。特别是对于电视应用,RNV提供了特殊工具来处理遥控器导航和焦点管理。基于标准构建
RNV使用熟悉的网页标准来构建应用功能。虽然它的目标是与React Native的常用API相匹配,但它还采用了W3C的核心功能标准。例如,RNV使用W3C标准进行媒体播放,因此可以轻松使用许多现有的JavaScript媒体播放器。在即将发布的版本中,RNV增加了对WebCrypto和WebWorkers的支持,同样基于网页标准。通过使用这些广泛采用的标准,RNV可以轻松地在Vega应用中使用许多最初为网页浏览器创建的JavaScript库。实现
亚马逊将适用于Vega的React Native构建为React Native框架的树外实现,用于支持运行Vega OS的设备。RNV移植了React Native软件堆栈,包括React Common、Yoga和适用于Vega OS的Hermes,以便在Vega的原生用户界面框架上运行。RNV使用React Native的新架构,仅支持JSI进行JavaScript到Native的接合。RNV还支持新的结构渲染器,用于同步布局和效果改进以及并行渲染。此外,RNV支持为Vega平台通过Turbo Native模块和Fabric Native组件进行原生集成。
Layer cake for React Native for Vega out of tree implementation. RNV is integrated with Vega’s native UI framework, leveraging several of Vega’s middleware including graphics, application framework, etc.
内置于操作系统中,动态地链接
RNV通过将整个React Native运行时捆绑到Vega OS中(该操作系统在运行时与应用动态链接),从而提供独特的架构选择。或者,现有的Vega平台将运行时与应用二进制文件静态链接,并与应用代码捆绑在一起。
这种固定的应用架构选择优化了运行Vega OS的设备的磁盘存储、启动和应用切换时间以及内存使用情况。移除React Native运行时会将应用程序包的大小减少超过10MB。从操作系统加载运行时还让Vega平台能够使用它预热进程池,从而为React Native应用带来更短的启动时间。
RNV可用于通过拆分捆绑将主要的JavaScript代码与React和React Native库分开。拆分捆绑将应用的大小减少了1-2兆字节,并确保它在设备的操作系统上正常运行。当应用启动时,它会加载这些单独的React和React Native组件以及应用自身的代码。这种方法类似于标准React Native运行时的工作方式。

Figure: Build steps differences during a normal JS bundle built, and a split bundle build with React Native for Vega. Only the App Bundle is packaged into the final app vpkg.
API和ABI稳定性
在Vega操作系统中加入React Native会带来一些挑战。当React Native发布带有重大更改的新版本时,应用可能会停止正常运行。此外,每个新版本都必须重新编译JavaScript代码,因为Hermes(JavaScript引擎)会更改其处理代码的方式。其他使用React Native的平台通过将React Native运行时打包到每个应用中来避免这些问题。运行时确保始终使用构建应用程序时使用的版本。 当前的Vega操作系统支持React Native 0.72和0.83版本。您必须检查哪些React Native版本在Vega设备上可用,并相应地设置您的应用。确认正确的版本意味着应用程序可以在当前和未来的Vega设备上正常运行,同时仍与旧版本兼容。 RNV提供两种主要的解决方案来处理兼容性问题:- 双Bundle包装:RNV在每个应用中都包含已编译的和原始的JavaScript代码。因此,如果设备使用新版本的JavaScript引擎 (Hermes) 进行更新,则亚马逊应用商店可以在安装过程中自动重新编译该应用的代码。
- 版本控制系统:您可以指定应用依赖项的最低要求版本和首选版本。此版本控制有助于亚马逊应用商店确定哪些设备可以运行该应用。RNV还提供了一个名为
isPresentOnOS的工具,用于检查设备上是否有特定的依赖项版本可用。

