带你从零学ReactNative开发跨平台App开发(九)
ReactNative跨平台开发系列教程:
这是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文件依然保存,但是他会额外的添加
iosandandroid的文件夹,并且他们都依赖于React Native and on Expo的核心SDK.。下面分离,分离其实很简单,一句话
exp detach
然而,这个过程,将会下载必要的依赖,并且创建
iosandandroid文件夹
给我报错,打脸,让我在配置文件里设置一些debug模式,过程比较慢,很尴尬!
我在这里给他加 了一个debug,他提示我不应该
不过最后还是提示成功了,
现在在看一下我们的目录结构:
Android文件夹就多出来了,这里应为我没有mac环境跳过了ios文件夹,我觉得这就是赤裸裸的歧视了!!
看我下面执行的命令:
react-native run-android
说明我们的项目已经成功分离出来,没有问题很好,很强大。
我的github地址 项目在这里找到!
后续文章持续更新,敬请期待!
文章为作者原创,转载请注明出处。
带你从零学ReactNative开发跨平台App开发(九)的更多相关文章
- 带你从零学ReactNative开发跨平台App开发(二)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发(一)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发-[react native 仿boss直聘](十三)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发(十一)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发(十)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发[expo 打包发布](八)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发(七)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发(六)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 带你从零学ReactNative开发跨平台App开发(五)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
随机推荐
- linux下shell脚本执行方法及exec和source命令
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...
- hanlp的基本使用--python(自然语言处理)
hanlp拥有:中文分词.命名实体识别.摘要关键字.依存句法分析.简繁拼音转换.智能推荐. 这里主要介绍一下hanlp的中文分词.命名实体识别.依存句法分析,这里就不介绍具体的hanlp的安装了,百度 ...
- certificate verify fails (https://gems.ruby-china.org错误
首先:执行这一步报错的背景是: 更换gems源, 通常执行 gem sources --add https://gems.ruby-china.org/ --remove https://rubyge ...
- 【原】SPARK_MEM和SPARK_WORKER_MEMORY的区别
SPARK_MEM:设置每个Job(程序)在每个节点可用的内存量:(默认为512m) SPARK_WORKER_MEMORY:设置集群中每个节点分配的最大内存量:(默认为内存总量减去1G)
- WebBench压力测试工具
Webbench是有名的网站压力测试工具,它是由 Lionbridge公司(http://www.lionbridge.com)开发. Webbech能测试处在相同硬件上,不同服务的性能以及不同硬件上 ...
- 使用python遍历文件夹取出特定的字符串
# -*- coding: utf-8 -* import re import os # 需要处理的文件夹路径(绝对路径) path = u"/Users/a140/Downloads/te ...
- Ubuntu-16.04 R 安装及Jupyter notebook 配置
1. R 安装 通常在Terminal下直接apt-get 即可,在16.10下可以get到R-3.3.1,目前最新好像是 R-3.4.2,可以去官方网站下载源码编译 (https://www.r-p ...
- solidity如何拼接字符串?
当你开始学习使用solidity开发以太坊智能合约之后,很快你会碰到一个问题: 一.在solidity中该如何拼接字符串? 可能你已经试过了,下面的代码试图把两个字符串使用相加的运算符连接起来,但是这 ...
- XML 实体
实体可以简单的理解为引用数据项的方法,可以是普通的文本也可以是二进制数据. 实体可以分为通用实体和参数实体.通用实体用于XML当中,用于引用文本或者二进制数据,而参数实体只能在DTD中使用.通用实体与 ...
- 常用工具说明-- Intellij Idea生成JavaDoc
JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API,易读且清晰明了.在简略介绍JavaDoc写法之后,再看一下在Intellij Idea 中如何将代码中的注释 ...






