带你从零学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文件依然保存,但是他会额外的添加
ios
andandroid的文件夹,并且他们都依赖于React Native and on Expo的核心SDK.。
下面分离,分离其实很简单,一句话
exp detach
然而,这个过程,将会下载必要的依赖,并且创建
ios
andandroid文件夹
给我报错,打脸,让我在配置文件里设置一些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开发 ...
随机推荐
- Opserver 初探二《exceptions配置》
上一节主要介绍Opserver的搭建以及redis.sqlserver监控的配置,本节主要介绍异常日志的记录和监控.要实现异常日志的监控我们需要在项目中引入StackExchange.Exceptio ...
- yum安装报错:Failure when receiving data from the peer
系统:Centos6.9 操作:yum install -y *.rpm 报错信息: Transaction Summary ===================================== ...
- 拦截并记录数据库操作-Logging and Intercepting Database Operations
原文:http://msdn.microsoft.com/zh-cn/data/dn469464 Logging and Intercepting Database Operations Starti ...
- java-TreeSet进行排序的2种方式
TreeSet和HashSet的区别在于, TreeSet可以进行排序, 默认使用字典顺序排序, 也可以进行自定义排序 1, 自然排序 2, 比较器排序 自然排序: 1, 需要被排序的类实现Compa ...
- mongodb-地理坐标存储查询
mongodb可支持空间地理搜索: 查询器 $geoWithin Selects geometries within a bounding GeoJSON geometry. The 2dsphere ...
- CentOS7.2配置Hadoop2.6.5
Hadoop配置文件 /etc/profile 配置Java和Hadoop环境 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export CLAS ...
- Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
出自 http://www.jb51.net/article/93125.htm
- vue-cli中引入jquery
vue-cli 在引入bootstrap时总是报找不到jquery.(模板用的webpack) 在webpack.base.conf.js里加入 var webpack = require(" ...
- C# 使用/配置Log4Net
1.首先在项目中添加Nuget程序包... 2.然后在NuGet窗体中搜索Log4Net,然后点击安装<安装过程可能会持续几分钟,请耐心等待> 3.在项目中添加一个Config文件,如已有 ...
- Hystrix使用详解
原文参考:http://hot66hot.iteye.com/blog/2155036 一:为什么需要Hystrix? 在大中型分布式系统中,通常系统很多依赖(HTTP,hession,Netty,D ...