expoKit是支持expo平台的Objective-C和Java库,比纯RN一个个引入包开发效率会高一些,比如react-native-vector-icons包已经集成在expoKit中了。

假定开发环境windows,已有expo工程,直接开始分离。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
expo eject

1. 报错:UnhandledPromiseRejectionWarning: Error: spawn /bin/cp ENOENT

原因,找不到/bin/cp指令,明显是linux系统指令,解决方式可以是装MSYS,运行这句指令。

可能会碰到要登陆expo账号的提示:

expo login -u username -p password

同时MSYS可能不支持交互:

 expo eject --eject-method expoKit

之后输入Android 包名,基本可以成功分离(至少文件结构正常)。

android文件夹结构如图:

记使用expo与expoKit分离工程遇到的坑 随笔 第1张

 

2. 启动expo (expo start)后,用AS打开android文件夹,启动报错:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yct.myCollection1/host.exp.exponent.MainActivity}: java.lang.IllegalArgumentException: unexpected url: http:

该错误是由于expo并不会自动填入DEVELOPMENT_URL参数。

进入.\android\app\src\main\java\host\exp\exponent\generated\DetachBuildConstants.java

记使用expo与expoKit分离工程遇到的坑 随笔 第2张

 图中url来自于启动expo时终端的提示。

记使用expo与expoKit分离工程遇到的坑 随笔 第3张

将url正确填入后,终端执行expo start, AS启动工程,应该能够在模拟器中看到app运行效果。

 

3. 再次启动调试的时候报错:

记使用expo与expoKit分离工程遇到的坑 随笔 第4张

这是由于expo启动时./android/app/build文件夹被expo占用,AS启动工程时无法更新该文件夹导致。

解决方案主要有两种,可以在每次调试前删除build文件夹,或者在启动AS工程后启动expo。

 

 解决以上三个问题,基本上可以正常调试了。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄