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

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

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文件夹结构如图:

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

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

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

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

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

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

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

下面记录打包流程、出现的问题和解决方法。

一般来说,直接使用AS生成dev-debug包没有问题,因为默认调试时给手机安装的就是这种apk,打包步骤为:

1. 修改icons和splash, android/app/src/main/res 中分别替换或添加图标。

  调整封面修改splash_background.xml配置文件,修改app图标或替换ic_foreground.png,或添加图片并修改ic_launcher.xml配置文件。

2. 修改配置文件android/app/build.gradle,提供签名文件

生成签名文件和全局配置详情见react-native官网:https://facebook.github.io/react-native/docs/signed-apk-android

3. 修改好后准备打包,点击Build -> Generate Signed Bundle/APKs

   

其中可以看到四个选项分别对应开发版/非开发版、debug/release版。第一个选项一般如果调试时正常,打包基本上不存在问题。此处主要考虑打发布包(第四个)。

点击Finish开始打包。

**打包过程中可能会在报错,提示找不到/android/app/src/main/assets/shell-app-manifest.json;此问题一般是由于没有运行

expo publish

运行后再次打包,会发现在android/app/src/main/java/host.exp.exponent/generated/AppConstants中多出了两行代码:

embeddedResponses.add(new Constants.EmbeddedResponse("https://exp.host/@YOURUSERNAME/YOURPACKAGENAME", "assets://shell-app-manifest.json", "application/json"));
embeddedResponses.add(new Constants.EmbeddedResponse("https://***********.cloudfront.net/%40YOURUSERNAME%2FYOURPACKAGENAME%2F1.0.0%2F********************-32.0.0-android.js", "assets://shell-app.bundle", "application/javascript"));

通常这两句出现后,打包可以成功。

**打包完成发现有些asset图片、图标资源无法载入。

猜测可能是签名文件配置或者expo自身的配置问题。仔细检查步骤2,并且根据 expo 社区回答(https://github.com/expo/expo/issues/2105)在app.js 开头添加Asset;实在不行重新eject分离。

至此,在我的环境下已能成功打prod-release包并运行在设备中。下面附上我的环境信息:

记使用expo与expoKit分离工程遇到的坑的更多相关文章

  1. 记一次SpringBoot 开发中所遇到的坑和解决方法

    记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...

  2. 新建VS工程与填坑:解决方案与项目不在同一目录

    A.新建项目->空工程 B.添加依赖库 1.属性->C/C++->附加包含目录 注:添加头文件目录,必须指向子文件夹 2.属性->链接器->常规->附加库目录 注: ...

  3. eclipse新建maven工程的各种坑

    尽量按照最后强烈推荐的那篇创建maven工程.  1.jsp文件头报错 2.xml配置文件头红叉 3.Archive for required library...blabla 4.pom依赖出错 5 ...

  4. Thinkphp3.2.3的主从分离事务问题(坑!!!)

    情景:使用Thinkphp3.2.3在项目开发中发现开启主从分离后,一旦事务体内,同时存在写入再读出,再写入这样的操作,TP在识别数据库的时候把读操作和写操作识别到了两个库..实际上希望事务开启后,所 ...

  5. 记前端状态管理库Akita中的一个坑

    记状态管理库Akita中的一个坑 Akita是什么 Akita是一种基于RxJS的状态管理模式,它采用Flux中的多个数据存储和Redux中的不可变更新的思想,以及流数据的概念,来创建可观察的数据存储 ...

  6. 【宝塔面板】centOS部署前后端分离所有遇到的坑,Django

    1:刚刚买完服务器,在宝塔面板安装完一切工具,Django顺利运行后(不能运行一般是起了中文名) # 问题:想迁移数据库,结果发现-bash: python3: command not found# ...

  7. 记node前后端代码共用的一次坑

    项目背景 nodejs项目,webpack打包,用axios请求,Promise封装,nunjucks模板引擎: 之前已将nunjucks模板通过webpack打包策略,做成前后端共用: 目前需要将网 ...

  8. 记一次Dynamic Batching不生效的爬坑实例分析[Unity]

    最近在项目开发过程中,无意发现游戏场景的绘制占用了大量的Batches,几乎一个模型显示就占用了一个Batch,而Saved by batching数量几乎为0,即没有任何合批渲染优化.这显然跟预期相 ...

  9. 记自己在mybatis中设置jdbcType的一个坑

    项目是用ssm搭建的.主要是为app数据接口.其中有一个需求就app想要查询一段时间内某个用户的测量信息,所以app给我后端传递了3个参数,分别是appuserId(String),startDate ...

随机推荐

  1. QT杂记(网上资料整理而成)

    1.新建工程时,Qwidget和Qdialog和Qmianwindow三者的区别? QWidget是所有图形界面的基类QMainWindow是一个提供了菜单.工具条的程序主窗口QDialog是对话框. ...

  2. __http原理__01__通信流程_消息格式

    本文转自  菜鸟教程  一.HTTP协议(HyperText Transfer Protocol,超文本传输协议) 是因特网上应用最为广泛的一种网络传输协议, 是用于从万维网(WWW:World Wi ...

  3. docker容器和本机互传文件

    首先需要确定docker容器的container_id,可以使用docker ps -a 查看你要操作的docker容器的container_id docker容器向本机传送文件 docker cp ...

  4. js 快速将字符串数组 转化为 数字数组(互换)

    转载于   这里 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(String); //结果: ['1', '2', '3', '4', '5', '6' ...

  5. ARM_DMA学习

    AMBA: advanced(高级) microcontroller bus architecture; 利用多层总线系统减少DMA传输和CPU中断的延迟: DMA流或DMA通道,流优先级,Adres ...

  6. 一个FORK的面试题(转)

    https://coolshell.cn/articles/7965.html https://coolshell.cn/articles/945.html

  7. Good Introduction of Kerberos and RADIUS

    1. RADIUS https://baike.baidu.com/item/RADIUS/3073981?fr=aladdin http://www.h3c.com/cn/d_201309/9220 ...

  8. Linux技术栈整理一:系统体系结构

    Linux操作系统必备的硬件构造: CPU 主板 显卡 硬盘 网卡 外设(键鼠-输入设备 / 显示器-输出设备) 内核管理调度: 内核体系结构: 来源于:极客专栏

  9. Python基础听课笔记

    需求:为8位老师随机分配办公室 #先定义一个列表用来存储8位老师的姓名 teachers = ['xiaowang', 'xiaoli', 'xiangming', 'xiaohua', 'xiaog ...

  10. 精心调制的Bash主题分享

    第一个是米色背景, 一样遵守蓝色为目录的习惯, 字体为浅灰色,代码和终端看起来相对比较清晰 第二个则是 深海蓝的背景风格,字体都选择饱和度较高的颜色,如下图 终端 配置方法,这里以 mintty 也就 ...