我试图在我的Nexus5 (android 5.1.1)上运行AwesomeProject。

我能够构建项目并将其安装到设备上。但当我运行它时,我看到一个红色屏幕,上面写着

无法下载JS包。您是否忘记启动开发服务器或连接设备?

在react原生iOS中,我可以选择离线加载jsbundle。我如何在Android上做同样的事情?(或者至少,我可以在哪里配置服务器地址?)

更新

要使用本地服务器运行,请在react-native项目根目录下运行以下命令

React-native start > /dev/null 2>&1 & Adb reverse tcp:8081 tcp:8081

请看disssitka的回答,了解更多细节。

要在没有服务器的情况下运行,可以运行以下命令将jsfile捆绑到apk中:

在android/app/src/main下创建一个assets文件夹 旋度“http://localhost: 8081 / index.android.bundle吗?平台=android" -o "android/app/src/main/assets/index.android.bundle"

详情请看kzzzf的回答。


当前回答

有一件重要的事情需要检查,到目前为止还没有人提到: 检查你的本地防火墙,确保它是关闭的。

请看我的回答: https://stackoverflow.com/a/41400708/1459275

其他回答

从项目目录中运行

react-native start

输出如下:

$ react-native start
 ┌────────────────────────────────────────────────────────────────────────────┐ 
 │  Running packager on port 8081.                                            │ 
 │                                                                            │ 
 │  Keep this packager running while developing on any JS projects. Feel      │ 
 │  free to close this tab and run your own packager instance if you          │ 
 │  prefer.                                                                   │ 
 │                                                                            │ 
 │  https://github.com/facebook/react-native                                  │ 
 │                                                                            │ 
 └────────────────────────────────────────────────────────────────────────────┘ 
Looking for JS files in
   /home/user/AwesomeProject 


React packager ready.

[11:30:10 PM] <START> Building Dependency Graph
[11:30:10 PM] <START> Crawling File System
[11:30:16 PM] <END>   Crawling File System (5869ms)
[11:30:16 PM] <START> Building in-memory fs for JavaScript
[11:30:17 PM] <END>   Building in-memory fs for JavaScript (852ms)
[11:30:17 PM] <START> Building in-memory fs for Assets
[11:30:17 PM] <END>   Building in-memory fs for Assets (838ms)
[11:30:17 PM] <START> Building Haste Map
[11:30:18 PM] <START> Building (deprecated) Asset Map
[11:30:18 PM] <END>   Building (deprecated) Asset Map (220ms)
[11:30:18 PM] <END>   Building Haste Map (759ms)
[11:30:18 PM] <END>   Building Dependency Graph (8319ms)

在同一终端上启动两个终端,第一个终端运行react-native Start,第二个终端运行react-native run-android,简单地解决了这个问题。祝你好运

我发现这很奇怪,但我有一个解决办法。 我注意到每隔一段时间我的项目文件夹变成只读,我不能从VS.中保存它,所以我读了一个建议,将NPM从本地用户PATH转移到系统范围的PATH全局变量,它就像一个咒语。

以下是我在Ubuntu 14.04上使用它的方法:

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081

更新:看

在设备上运行(Android) 设备警告被抑制?

更新2:@scgough我们得到这个错误,因为React Native (RN)无法从运行在我们工作站上的开发服务器获取JavaScript。你可以看到为什么会这样:

https://github.com/facebook/react-native/blob/42eb5464fd8a65ed84b799de5d4dc225349449be/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java#L116-L137

如果您的RN应用程序检测到您正在使用Genymotion或模拟器,它会尝试从GENYMOTION_LOCALHOST(10.0.3.2)或EMULATOR_LOCALHOST(10.0.2.2)中获取JavaScript。 否则,它假定您正在使用一个设备,并尝试从DEVICE_LOCALHOST (localhost)获取JavaScript。 问题是开发服务器运行在你的工作站的本地主机上,而不是设备的,所以为了让它工作,你需要:

从(设备的localhost):8081/tcp到(工作站的localhost):8081/tcp的转发流量。这就是adb命令的作用。 告诉您的RN应用程序在哪里可以找到您的开发服务器。

在设备上运行

我找到了另一个答案。

adb reverse:仅适用于Android 5.0+ (API 21)。 另一种方法:通过摇动设备打开开发人员菜单,进入开发设置,进入设备调试服务器主机,输入您的机器的IP地址和本地开发服务器的端口