ReactNative跨平台开发系列教程:

带你从零学ReactNative开发跨平台App开发(一)

带你从零学ReactNative开发跨平台App开发(二)

带你从零学ReactNative开发跨平台App开发(三)

带你从零学ReactNative开发跨平台App开发(四)

带你从零学ReactNative开发跨平台App开发(五)

带你从零学ReactNative开发跨平台App开发(六)

带你从零学ReactNative开发跨平台App开发(七)

hot:更多>>

这是reactnative系列文章第九篇,感觉没有反响,也许大家都忙着搞rn,也许是expo在国内市场不成熟,反正是我先把我自己踩过的坑分享一下,好了,废话不多说,开始撸码,你准备好了吗?


Detaching to ExpoKit

这篇主要说一下分离expo项目,到rn原生混合开发模式。这里引出了expo kit。这是一个强悍的东西,下面我简单以官方的口吻介绍一下expo kit。

expo kit是一个允许你用expo平台把你已经创建的expo项目作为更大的标准native项目一部分的objective-c和java的类库。说白了就是一个类库。当你把expo项目分离后,

你就可以用xcode或者Androidstudio或者react-native init 打开项目。

我们为何要把expo项目detache呢?

因为当我们用expo创建项目后,但我们想调用native modules的时候,这在expo里是不允许的,因为expo是纯js写的,并且不会 “drop down” 到ios或者Android层,然而这也是expo的核心也是expo快速和强大使用的一部分。

然而某些情况下,一些高级开发者,需要用到native的功能,而这些共能,超出了expo提供的范围,那么把expo项目detache,分离出来,就是一个大家通用的做法。

分离出来的项目,可以用xcode打开,也可以用androidstudio运行,并且分离出来的项目对expo kit有依赖关系。我们分离后,也依然依赖expo sdk,也就是说,expo提供的api,我们可以用,但是expo提供的部分服务,我们将不再可以使用,这是一件很不幸的事情。

这里官方给出了几点建议,什么情况下,你应该分离,什么情况下,你不应该分离:

You might want to detach if:
Your Expo project needs a native module that Expo doesn’t currently support. We’re always expanding the Expo SDK, so we hope this is never the case. But it happens, especially if your app has very specific and uncommon native demands.
You should not detach if:
All you need is to distribute your app in the iTunes Store or Google Play. Expo can build binaries for you in that case. If you detach, we can’t automatically build for you any more.
You are uncomfortable writing native code. Detached apps will require you to manage Xcode and Android Studio projects.
You enjoy the painless React Native upgrades that come with Expo. After your app is detached, breaking changes in React Native will affect your project differently, and you may need to figure them out for your particular situation.
You require Expo’s push notification services. After detaching, since Expo no longer manages your push certificates, you’ll need to manage your own push notification pipeline.
You rely on asking for help in the Expo community. In your native Xcode and Android Studio projects, you may encounter questions which are no longer within the realm of Expo.

好,依然创建一个新的项目,下面我们来做分离:(分离前的目录结构)

分离后,我们的js文件依然保存,但是他会额外的添加ios and android的文件夹,并且他们都依赖于React Native and on Expo的核心SDK.。

下面分离,分离其实很简单,一句话

exp detach

然而,这个过程,将会下载必要的依赖,并且创建ios and android文件夹

给我报错,打脸,让我在配置文件里设置一些debug模式,过程比较慢,很尴尬!

我在这里给他加 了一个debug,他提示我不应该

不过最后还是提示成功了,

现在在看一下我们的目录结构:

Android文件夹就多出来了,这里应为我没有mac环境跳过了ios文件夹,我觉得这就是赤裸裸的歧视了!!

看我下面执行的命令:

react-native run-android

说明我们的项目已经成功分离出来,没有问题很好,很强大。


我的github地址 项目在这里找到!

后续文章持续更新,敬请期待!

文章为作者原创,转载请注明出处。

带你从零学ReactNative开发跨平台App开发(九)的更多相关文章

  1. 带你从零学ReactNative开发跨平台App开发(二)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  2. 带你从零学ReactNative开发跨平台App开发(一)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  3. 带你从零学ReactNative开发跨平台App开发-[react native 仿boss直聘](十三)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  4. 带你从零学ReactNative开发跨平台App开发(十一)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  5. 带你从零学ReactNative开发跨平台App开发(十)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  6. 带你从零学ReactNative开发跨平台App开发[expo 打包发布](八)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  7. 带你从零学ReactNative开发跨平台App开发(七)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  8. 带你从零学ReactNative开发跨平台App开发(六)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  9. 带你从零学ReactNative开发跨平台App开发(五)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

随机推荐

  1. linux 目录结构+常用命令+压缩命令+vim使用+及基础知识

    linux目录架构 / 根目录 /bin 常用的命令 binary file 的目录 /boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内 /boot/grub/menu.lst ...

  2. 【Java并发编程】:volatile变量修饰符

    volatile用处说明     在JDK1.2之前,java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程环境下volatile关键 ...

  3. tensorflow model save and restore

    TensorFlow 模型保存/载入 我们在上线使用一个算法模型的时候,首先必须将已经训练好的模型保存下来.tensorflow保存模型的方式与sklearn不太一样,sklearn很直接,一个skl ...

  4. Linux-(ls,mv,mkdir,rm,cp)

    ls命令 ls命令是linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单.如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls命令不仅可以查看 ...

  5. Spring Boot 使用Redis

    转载自:http://www.cnblogs.com/ityouknow/p/5748830.html Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化 ...

  6. openTSDB(转)

    1.OpenTSDB介绍 1.1.OpenTSDB是什么?主要用途是什么? 官方文档这样描述:OpenTSDB is a distributed, scalable Time Series Datab ...

  7. swiper在vue中的使用 及 神坑

    一.实例化和导入 import Swiper from 'swiper'; let viewSwiper; let previewSwiper; 在外面声明全局变量,然后在初始化方法里面实例化swip ...

  8. vs中插件影响代码自动创建后台事件问题

    CSS Tools 启用之后会影响代码自动创建后台事件,禁用之后解决.禁用之后鼠标悬浮不能看图片,颜色也不能展示

  9. javascript中字符串常用操作总结

    String对象属性 (1) length属性 length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度.当然需要注意的是js中的中文每个汉字也只代表一个字符,这里可能跟其他语言有些不 ...

  10. pch文件配置

    配置.pch文件 刚上手 Xcode6 的人,总会发现之前在 6 之前常常会在“利用名-Prefix.pch”这个文件中来配置我们全局要用到的头文件,但是 xcode6 没有了,人家说,这类东西有时候 ...