使用Expo SDK的React Native真的是原生的吗?!或者像科尔多瓦

时间:2017-09-21 11:38:32

标签: react-native sdk expo

我是React Native的新手,我知道有两种方法可以使用react native

开发本机应用程序
  

1-反应天然初始 - >需要编译本地鳕鱼       ==>结果是Android的原生应用程序“需要Android SDK”和IOS的本机应用程序“需要Xcode”

     

2- create react native app - >无需编译本机代码!!

因为CRNA使用Expo_SDK来访问本机API,但是:

结果应用程序是否真的是原生的!或者Expo Sdk就像Cordova,但是React使用它,如果结果是原生的,Expo声称结果是原生的!他们是否为IOS克隆了Android Sdk和Xcode,或者它是如何工作的?!

3 个答案:

答案 0 :(得分:0)

Expo应用程序是包含Expo SDK的React Native应用程序。 SDK是一个本机和JS库,可以访问设备的系统功能(如摄像头,联系人,本地存储和其他硬件)。这意味着您不需要使用Xcode或Android Studio,也不需要编写任何本机代码,这也使您的pure-JS项目非常便携,因为它可以在包含Expo SDK的任何本地环境中运行。

Expo还提供了用于处理各种用例的UI组件,这些用例几乎涵盖了所有应用程序,但未被React Native核心覆盖,例如:图标,模糊视图等。

最后,Expo SDK提供了对服务的访问,这些服务通常很难管理,但几乎每个应用都需要这些服务。其中最受欢迎的是:Expo可以为您管理您的资产,它可以为您处理推送通知,它可以构建可以部署到应用程序商店的本机二进制文件。

你应该看看the Expo doc

答案 1 :(得分:0)

Expo(和react-native)应用程序使用本机(android和ios)ui组件来呈现应用程序ui,就像任何本机android或ios app一样。因此,它们可以被视为本地应用。

但是,您的应用程序逻辑是在javascript线程中执行的,它将与本机线程通信(通过react-native桥),以修改本机ui组件。由于网桥是完全异步的,因此这不会影响应用程序的本机ui性能。如果您想了解js与本机代码之间的通信,那么可能是阅读this guide的一个很好的开始。

  

2-创建React Native应用程序->无需编译本机代码!!

使用expo不需要编译本机代码,因为expo已经包括了一个“准备使用的版本” react-native和其他几个常见的react-native库。在expo应用程序中,它将与您的javascript捆绑包一起使用,而不是通过react-native桥与已经存在的本机部分进行通信。

它们基本上只是在滥用您可以将不同的javascript捆绑包注入到预先构建的react-native应用程序中这一事实。 (只要您仅使用访问该预构建应用程序的本机功能的子集)

注意Appcenters codepush使用相同的功能,并且设置集成实际上提供了一个很好的示例,说明了如何在不接触原生部分的情况下加载不同的javascript捆绑包:

在ios AppDelegate.m中,此行已更改:

总是可以解析静态包的原始react-native js-bundle加载

return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

使用codepush加载js-bundle可以解析为不同的js-bunldes

return [CodePush bundleURL];

Link to full codepush ios integration guide

答案 2 :(得分:0)

Expo应用程序与React本机一样本机。他们执行以下操作,因此您无需在本地设置Android / iOS SDK。

  1. 在Android / iOS上提供Expo App

    因此您可以构建js代码并在开发过程中使用Expo App进行调试。

  2. 提供构建服务器

    运行expo build命令后,expo将上载已编译的js代码并在其服务器上构建Android / iOS文件。您可以从他们的服务器下载构建的文件。

您可以{@ {1}}在Expo上,在本地设置Android / iOS SDK,并将该应用程序构建为普通的React Native应用程序