我试图在我的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的回答。
我只使用Ubuntu和Android,我无法让它运行。我发现了一个非常简单的解决方案,那就是更新你的包。Json文件,更改这行:
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start"
},
to
"scripts": {
"start": "adb reverse tcp:8081 tcp:8081 && node node_modules/react-native/local-cli/cli.js start"
},
然后通过输入命令运行服务器
npm run start
这确保android设备在您的计算机上查找节点服务器,而不是在本地手机上。
以下是我在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应用程序在哪里可以找到您的开发服务器。
好吧,我想我知道问题出在哪里了。这和我当时扮演的守望者有关。
在一个新的shell中,运行brew update
然后:酿解守夜人
然后:酿造安装守望者
现在,您可以从项目文件夹中运行react-native start
我让这个shell打开,创建一个新的shell窗口并从我的项目文件夹中运行:react-native run-android。世界一切都好。
ps.我最初玩的是3.2版的守望者。这将我升级到3.7。
pp。我是新手,所以这可能不是最快的解决方法,但对我来说很有效。
*在设备上运行/调试的更多信息
你可能会发现,如果你将应用部署到Android设备上,而不是模拟器上,你会看到一个红色的死机屏幕,错误提示无法加载JS Bundle。您需要为您的设备设置调试服务器为您的计算机运行react…名称或IP地址。
按设备菜单按钮
选择Dev Settings
为设备选择调试服务器主机或更改包位置
输入你的机器的IP和重载JS加上反应端口,例如192.168.1.10:8081
更多信息:http://facebook.github.io/react-native/docs/running-on-device-android.html