简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网

我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981

【之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发

相关文章:

Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xde如何使用

Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题

Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等

Expo大作战(四)--快速用expo构建一个app,expo中的关键术语

Expo大作战(五)--expo中app.json 文件的配置信息

Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式

Expo大作战(七)--expo如何使用Genymotion模拟器

Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流

接下来就开始撸码


已经使用React Native?

本指南旨在为那些已经使用React Native的开发者提供一些关键概念,资源和使用Expo时遇到的差异的简要概述。

什么是expo?


Expo提供了一个共享的本地运行时,所以你不用编写本地代码,你专注于用JavaScript编写你的React应用程序。您不必担心iOS或Android的特定设置,甚至不必打开Xcode。 Expo拥有自己的工作流程,包括一个名为XDE的应用程序和命令行界面,使开发和部署变得轻松。

如果您曾升级过React Native或本地模块,只需更改版本号,即可享受expo无缝完成此功能的功能。

Expo通过提供由团队维护的额外的经过测试的模块扩展了React Native平台。这意味着你花更少的时间配置和更多的时间建立。

如果你曾经经历过升级模块或安装诸如react-native-maps之类的问题,那么当事情正常时,你会明白的。

expo还提供OTA(空中下载||热更新)更新和推送通知服务。

如果您曾经遇到过在应用程序中发现拼写错误并需要等待Apple批准更改的情况,那么您会欣赏OTA更新 - 只要运行exp发布,就会显示这些更改!你也不限于文本,这也适用于图像和配置更新等资产!

无需重新构建或重新部署您的应用到应用和Play商店。这就像Code Push,如果你以前使用过。但是有一些限制。阅读有关这里的人

Expo提供了一个我们称之为清单的共享配置文件。通常,您需要更新Xcode plist或Android Studio xml文件以处理更改。例如,如果你想锁定屏幕方向,改变你的图标,自定义你的启动画面或添加/删除权限,你会在app.json中做一次,它将适用于两者

您通常在Xcode / plist文件或Android studio / xml文件中执行的配置通过app.json处理。例如,如果您想要锁定方向,更改图标,自定义初始屏幕,添加/删除权限和权利(在独立应用程序中),请为Google地图和其他服务配置密钥,您可以在app.json中进行设置。请参阅此处的指南

借助expo,您可以在expo客户端(可在App / Play商店中使用)工作的同时,与世界上任何地方的任何人分享您的应用程序。扫描二维码,或输入电话号码,我们会向您发送一个链接,将您的应用程序立即加载到您的设备上。

无需通过iTunes连接注册几个外部测试人员,您可以轻松让他们下载expo客户端应用程序,并立即在手机上提供工作版本。

我们讨论我们在app.json中设置的权限,但也有Permissions Api。 app.json中的权限旨在被Android独立应用程序用于相机访问,地理定位,指纹等。另一方面,权限Api用于在运行时请求和验证访问权限。它提供了一个简单的API来询问您的用户推送通知,位置,相机,录音和联系人。

expo如何运作?


由于您使用Javascript编写代码,因此我们将其捆绑在一起并在S3中提供。每当您发布您的应用程序时,我们都会更新这些资源,然后将它们推送到您的应用程序,以便始终获得最新版本。

在expo上开发


应用程序默认通过隧道服务从我们的exp / XDE提供服务(我们目前使用ngrok) - 这意味着您不必将设备连接到计算机,甚至不必连接到同一个房间或国家(或行星?我猜它应该从空间开始)作为开发机器,并且您仍然可以实时重新加载,使用热模块重新加载,启用远程JS调试,以及您可以通过React Native正常执行的所有事情。有一点需要注意的是,使用隧道比使用局域网地址或本地主机要慢一点,所以如果可以的话,你应该使用局域网或本地主机。看看如何在exp / XDE中配置它。

Expo将您的设备日志传输到exp和XDE,因此您不需要运行adb logcat或iOS等价物 - 来自任何连接到您的应用的设备的console.log / warn /错误消息将自动显示在您的exp / XDE日志窗口。

expo不能做什么

 

  • 有时expo不提供您可能需要的本地模块或API的访问权限。在这种情况下,您可以分离并使用ExpoKit。这使您可以继续使用Expo的基础,但允许您创建和使用任何自定义本机模块。
  • 阅读更多关于分离的信息

部署到App / Play商店


当你准备好后,你可以运行exp build:ios或者exp build:android和Expo会构建你的应用并输出一个链接到你需要提交的二进制文件。然后,您可以使用类似Application Loader for iOS的应用程序,或直接上传适用于Android的APK。

如果您更愿意在自己的机器上构建应用程序,则可以按照以下步骤操作。

有用的工具和资源

 

  直接从您的浏览器测试和分享Expo功能的最佳方式。将手机指向QR代码,您可以在浏览器中创建沙箱环境,并直接在设备上进行测试。

  如果有什么你不明白或想了解更多的信息,这是一个很好的开始。

  从expo团队或社区获得帮助的最快途径

  Expo Client和SDK都是开源的。如果您想解决某些问题,或者想知道我们如何实现我们的本地模块,欢迎您亲自查看代码!

Useful Commands

在expo开发时,您可以选择使用命令行工具。以下是我们的一些朋友最喜欢的命令和工作流程:

  1. exp start -c --localhost --ios
  2. 启动expo服务器,清除缓存,只加载本地主机并在iOS模拟器上打开
  3. exp start --tunnel
  4. 启动expo服务器(不要清除缓存)并在隧道上运行expo,以便与任何人分享!
  5. exp发送2245551234
  6. 发送一个链接到朋友的电话号码,以便他们可以在手机上查看我正在处理的内容

 

为什么不用expo(Why not Expo?


expo尚未准备好用于所有应用程序。有很多情况下,目前的限制可能不适合您的项目。本文档的目的是概述其中的一些情况,以便您最终不会在expo上构建应用程序,并且在遇到障碍时无法克服障碍,无需分离到ExpoKit或弹出使用React Native没有expo。我们正在计划或积极致力于构建下列所有功能的解决方案,如果您认为缺少任何内容,请通过张贴到我们的功能请求委员会来提请我们注意。

Expo应用程序不支持后台代码执行(当应用程序没有预先安装或设备正在睡眠时运行代码)。这意味着您不能使用后台地理位置,在后台播放音频,在后台处理推送通知等等。这是一个正在进行的工作。

Expo支持很多设备API(查看边栏中的“SDK API参考”),但并非所有iOS和Android API都可以在Expo中使用:需要蓝牙?对不起,我们还没有建立它的支持的WebRTC?不完全的。我们不断添加新的API,因此如果我们现在没有您需要的东西,您可以使用ExpoKit或关注我们的博客,查看我们每月SDK更新的发布说明。

如果你需要保持你的应用程序(包)的规模非常小,expo可能不是最好的选择。 iOS上的expo应用大小约为25mb,Android大约为20mb。这是因为expo包括一堆API,而不管你是否使用它们 - 这可以让你推动空气更新(热更新)以使用新的API,但是以二进制大小为代价。我们将在未来对此进行定制,以便您可以减小二进制文件的大小。

如果您知道您希望使用特定的推送通知服务(例如OneSignal)而不是expo的推送通知服务/ API,则您需要使用ExpoKit或React Native,而无需使用expo。

expo团队,真诚的向我们列出了expo的局限性,以及expo的有点,我们在项目选型的时候,也需要仔细斟酌!


下一张继续介绍,这一篇主要介绍了:针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等!欢迎大家关注我的微信公众号,这篇文章是否被大家认可,我的衡量标准就是公

众号粉丝增长人数。欢迎大家转载,但必须保留本人博客链接!

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!