在关于使用react-native(https://facebook.github.io/react-native/docs/getting-started.html)的facebook.io教程之后,我遇到了一个问题,我用来测试应用程序的AVD android模拟器正在抱怨
出了点问题。无法加载exp://192.168.200.83:19000。
请注意,这是在通过create-react-native-app myapp
:
# after having started the AVD and creating the react-native app...
➜ myap npm start
> myapp@0.1.0 start /<path to my react native app>/myapp
> react-native-scripts start
3:26:37 PM: Starting packager...
Packager started!
Your app is now running at URL: exp://192.168.200.83:19000
View your app with live reloading:
Android device:
-> Point the Expo app to the QR code above.
(You'll find the QR scanner on the Projects tab of the app.)
iOS device:
-> Press s to email/text the app URL to your phone.
Emulator:
-> Press a to start an Android emulator.
Your phone will need to be on the same local network as this computer.
For links to install the Expo app, please visit https://expo.io.
Logs from serving your app will appear here. Press Ctrl+C at any time to stop.
› Press a to open Android device or emulator.
› Press s to send the app URL to your phone number or email address
› Press q to display QR code.
› Press r to restart packager, or R to restart packager and clear cache.
› Press d to toggle development mode. (current mode: development)
<press a>
此时会在AVD上打开一个窗口(可能是尝试启动react-native应用程序)并显示上述错误。
(还尝试使用npm run android
启动应用并打开AVD上的expo应用中的链接,但仍然出现相同的错误。)
有谁知道此时可以做些什么(全新的反应和移动开发,所以我大多只关注教程中的内容)?我应该在这个问题上添加的任何其他信息吗?
答案 0 :(得分:1)
看一下类似的github帖子(https://github.com/react-community/create-react-native-app/issues/595#issuecomment-373539195),似乎是使用错误的网络的问题(即使用AVD无法访问的LAN URL)。并且使用该帖子中描述的exp start --tunnel
方法确实生成了我的手机展示应用实际可以解释的网址。我的工作步骤如下所示。 (注意我使用的是Ubuntu 16.04 )
查看安装watchman
(https://facebook.github.io/watchman/docs/install.html#system-specific-preparation)的文档(由react-native(在linux上)使用)。我看到有一个特定的事情是关于增加linux上的inotify限制(虽然没有给出任何具体的值)(关于inotify的信息,请参阅https://en.wikipedia.org/wiki/Inotify)。
所以从源代码安装watchman后(似乎是目前在linux上安装它的唯一方法)......
$ cd ~
$ git clone https://github.com/facebook/watchman.git
$ cd watchman/
$ git checkout v4.7.0
$ sudo apt-get install -y autoconf automake build-essential python-dev
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ watchman --version
...我们增加了inotify限制。
$ echo 999999 | sudo tee -a /proc/sys/fs/inotify/max_user_watches \
&& echo 999999 | sudo tee -a /proc/sys/fs/inotify/max_queued_events \
&& echo 999999 | sudo tee -a /proc/sys/fs/inotify/max_user_instances \
&& watchman shutdown-server
基于这个较旧的SE帖子(https://askubuntu.com/a/155343/760862)(基本上表明它根本没有占用太多资源),我假设(并希望)增加它就像这样可以。
(增加像这样的inotify限制似乎有助于解决我在使用本机反应项目时遇到的一些其他问题(例如,当尝试捆绑导出到设备时javascript冻结,设备抱怨“有些事情发生了错误的“或者对我试图向他们出口产品等完全没有反应。”)
现在,导航到项目目录并使用--tunnel
选项启动exp服务器进程。来自文档(https://docs.expo.io/versions/latest/workflow/exp-cli):
tunnel(默认),lan,localhost。要使用的主机类型。 “隧道”允许您查看其他网络上的链接
exp start --tunnel
22:21:14 [exp] Your URL is: exp://xm-apt.myexpousername.myapp.exp.direct:80
22:21:14 [exp] Instructions to open this project on a physical device
22:21:14 [exp] Android devices: scan the above QR code.
22:21:14 [exp] iOS devices: run exp send -s <your-phone-number-or-email> in this project directory in another terminal window to send the URL to your device.
22:21:14 [exp] Instructions to open this project on a simulator
22:21:14 [exp] If you already have the simulator installed, run exp ios or exp android in this project directory in another terminal window.
22:21:14 [exp] Logs for your project will appear below. Press Ctrl+C to exit.
如果您看到类似于exp://192.168.200.83:19000的网址,您还应该看到一些日志消息,例如
21:30:35 [exp]切换到LAN URL,因为隧道似乎是 下。只有同一网络中的设备才能访问该应用。重新开始 与
exp start --tunnel
尝试重新连接。
使用相同的命令重新启动,URL应该是非LAN位置。
可选(如果您想使用项目中npm start
的界面)
然后打开另一个终端选项卡并运行npm start
命令,如此
REACT_NATIVE_PACKAGER_HOSTNAME='xm-apt.myexpousername.myapp.exp.direct' npm start -- --reset-cache
其中REACT_NATIVE_PACKAGER_HOSTNAME设置为上一步骤中的exp URL(有关此内容的信息可以在通过create-react-native-app
创建的每个react-native应用程序的自述文件中找到)。此处创建的URL现在应该类似于
Your app is now running at URL: exp://xm-apt.myexpousername.myapp.exp.direct:19000
现在打开另一个标签。请注意,在运行exp过程的选项卡上,应该有关于如何在不同设备上打开项目的说明(例如,在本答案的前面)。使用这些说明使用我们刚刚打开的标签打开不同设备的项目(在我的情况下,对于AVD,运行exp android
(您应该在运行exp过程的选项卡中看到一些消息,如22:28:57 [exp] Finished building JavaScript bundle in 97ms
让你知道它正在运作))。
完全新的反应 - 任何所以,如果有人看到任何关于此设置的任何内容是多余的或奇怪的,请告诉我。