React-Native学习笔记

RN笔记

一. 常用命令

  • 比如我们希望查看RN的所有历史版本,可以在命令行中输入:

npm view react-native versions -json

  • 创建工程并指定版本:

react-native init 工程名字 -source react-native@0.55.4 (无效)
react-native init 工程名字 --version 0.55.4

  • 在项目中运行npm intall --save命令来执行安装react-native新版本:

npm install --save react-native@版本号

react-native run-ios --simulator "iPhone 7 Plus”
双引号也是需要的,做Android不熟悉的可以先将需要的模拟器跑起来,模拟器下面会显示型号 + 系统版本,系统版本不需要

  • 使用真机运行项目:(需要提前安装工具:npm i -g ios-deploy)

react-native run-ios --device "'YooHoh's iPhone X"

  • 查看当前可用的所有设备/模拟器列表:

xcrun simctl list devices
我平时主要是Android真机的时候会用到,iOS真机我就直接Xcode跑了,一般是先adb devices检查下能否识别到Android真机,识别不到的话,看看USB设置,物理连接

  • 链接库

react-native link

http://localhost:8081/debugger-ui/

  • Android调出菜单的指令

adb shell input keyevent 82


二、iOS端build 遇到的报错

  • 报错1:
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=22):
Failed to install the requested application
The bundle identifier of the application could not be determined.
Ensure that the application's Info.plist contains a value for CFBundleIdentifier.
Print: Entry, ":CFBundleIdentifier", Does Not Exist
Command failed: /usr/libexec/PlistBuddy -c Print:CFBundleIdentifier build/Build/Products/Debug-iphonesimulator/travelProject.app/Info.plist
Print: Entry, ":CFBundleIdentifier", Does Not Exist

尝试方案:

基本思路: 先确保依赖包没问题,可以手动下载替换, 确保依赖包完整后, 清缓存,npm重新安装依赖

关于Entry, ":CFBundleIdentifier", Does Not Exist的解决方法

清项目依赖包, 也可以手动删除node_modules文件夹下内容

cd node_modules/react-native/third-party/glog-0.3.4
../../scripts/ios-configure-glog.sh

解决CFBundleIdentifier", Does Not Exist

mac环境下,在命令行中run-ios构建时报错:CFBundleIdentifier", Does Not Exist
打开XCode,进入.xcodeproj文件,运行,编译时报错:'boost/iterator/iterator_adaptor.hpp' file not found’
经过多次测试,这个问题只在react native 0.45.0及以后的版本中出现。

在网上找到解决方法如下:

这个问题产生原因:
/Users/你的用户名/.rncache中boost_1_63_0.tar.gz,double-conversion-1.1.5.tar.gz,folly-2016.09.26.00.tar.gz,glog-0.3.4.tar.gz文件不完整。或者node_modules/react-native/third-party 文件不完整。

具体操作:
1、删除/user/你的用户名/.rncache目录下的boost_1_63_0。重新下载,下载网址http://www.boost.org/users/history/version_1_63_0.html
2、打开命令行工具,在项目目录下输入rm -rf node_modules && rm -rf ~/.rncache && yarn
3、npm install 
4、react-native upgrade 
  • 报错2:
Libtool /Users/Shen/Desktop/travel/travelProject/ios/build/Build/Products/Debug-iphonesimulator/libRCTWebSocket.a normal x86_64 (1 failure)

Xcode 10 libfishhook.a cannot be found

根据提示去路径里看了下,唯独缺少libRCTWebSocket.a静态库, 打开Xcode工程在Lib中找到RCTWebSocket项目,在Link Binary With Libraries下看到libfishhook.a图标状态有点虚,移除重新导入,再次执行react-native run-ios 解决。

  • 报错3: 'config.h' file not found

我通过备份项目,进到了路径Macintosh HD⁩ ▸ ⁨用户⁩ ▸ ⁨Shen⁩ ▸ ⁨桌面⁩ ▸ ⁨GYYX⁩ ▸ ⁨travel⁩ ▸ ⁨travelProject⁩ ▸ ⁨node_modules⁩ ▸ ⁨react-native⁩ ▸ ⁨third-party⁩ ▸ ⁨glog-0.3.4⁩比对,出问题的项目的确是缺少错误中的文件,会有一个config.h.in文件,起初我通过另外正常项目将文件复制了一份,但是又出现了其他文件缺失的问题

third-party: 'config.h' file not found 解决方案

  • 报错4: make sure you're running a packager server or have included a .jsbundle file in your application bundle
  1. 删除build文件夹
  2. 关闭VPN
  3. 删除node_modules/third-party文件夹
  • 报错4: React Native version mismatch

React Native version mismatch 错误

2019.01.07


三、Android端环境配置

  • 打开Android Studio 报错Unable to access Android SDK add-on list

原因: 检测到电脑没有SDK, 通过AS管理SDK勾选安装后,配置环境变量

vi ~/.bash_profile

通过SD管理SDK安装JDK等资源,可以通过AS看到安装路径

export ANDROID_HOME=~/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
//本机新账号下默认没有.bash_profile,按照视频讲解在补充上面两个环境后也加上了
export ANDROID_SDK=$ANDROID_HOME
export ANDROID_NDK=/usr/local/Cellar/android-ndk-r10e/r10c

使配置生效或者重启电脑

source ~/.bash_profile

检查配置是否生效

echo $Android/sdk
  • 配置好路径后, 直接react-native run-android,下载一些依赖包后报错
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:installDebug'.
com.android.builder.testing.api.DeviceException: No connected devices!

原因:
iOS通过run-android会自动启动模拟器,Android运行run-android不会自动启动模拟器
出现这一行,表示环境已经OK, 下一步需要启动模拟器或连接设备

  • 下面的报错信息是一个一般性的提示信息,任何报错都可能会出现这段描述
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/getting-started.html
  • 接下来就是通过AS打开工程,创建一个模拟器,并启动模拟器,然后再通过 react-native run-android 启动android项目

  • SDK版本问题

* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApk'.
   > A problem occurred configuring project ':react-native-webview-bridge-updated'.
      > The SDK Build Tools revision (23.0.1) is too low for project ':react-native-webview-bridge-updated'. Minimum required is 25.0.0

去路径 Macintosh HD⁩ ▸ ⁨用户⁩ ▸ ⁨Shen⁩ ▸ ⁨桌面⁩ ▸ ⁨GYYX⁩ ▸ ⁨travel⁩ ▸ ⁨travelProject⁩ ▸ ⁨node_modules⁩ ▸ ⁨react-native-webview-bridge-updated⁩下找到package.json,将版本修改为要求的版本
保存后重新执行run,可能会有多个文件提示版本问题,根据提示进行修改

  • NDK is missing a "platforms" directory

-RN项目报错:NDK is missing a "platforms" directory.,解决方法

  • No toolchains found in the NDK toolchains folder for ABI with prefix

-No toolchains found in the NDK toolchains folder for ABI with prefix

  • Could not find method implementation() for arguments...
* What went wrong:
A problem occurred evaluating project ':react-native-fast-image'.
> Could not find method implementation() for arguments [com.facebook.react:react-native:+] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

打开build.gradle文件, 将implementation替换成compile

2019.01.08


四、相关资料:

波浪符号(~):他会更新到当前minor version(也就是中间的那位数字)中最新的版本。
放到我们的例子中就是:body-parser:~1.15.2,这个库会去匹配更新到1.15.x的最新版本,
如果出了一个新的版本为1.16.0,则不会自动升级。
波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。

插入符号(^):这个符号就显得非常的灵活了,他将会把当前库的版本更新到当前major version
(也就是第一位数字)中最新的版本。
放到我们的例子中就是:bluebird:^3.3.4,这个库会去匹配3.x.x中最新的版本,
但是他不会自动更新到4.0.0。

npm install moduleName # 安装模块到项目目录下
npm install -g moduleName # -g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置。
npm install -save moduleName # -save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖。
npm install -save-dev moduleName # -save-dev 的意思是将模块安装到项目目录下,并在package文件的devDependencies节点写入依赖。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容