无法在react-native run-android上的设备上安装应用程序

时间:2016-11-26 09:49:21

标签: android reactjs react-native port default

我无法运行任何反应原生项目。 它说已经有一个进程在运行。端口8081由我的MAC上运行的McAfee防病毒软件占用。而且我决不能杀死它(即使我不应该杀死它,我试过它,看起来它永远不会死!毕竟SUDO没有力量!)

参考#7308 #9145stackoverflow,我尝试在端口8082上运行。服务器启动,但是, run-android 仍然无法拒绝找到设备。 我有我的设备(打开调试模式的Galaxy S7 Edge)和Genymotion打开。

React Native version details -

SATJAGAN-M-T0HZ:react-native-card-modal satjagan$ react-native -v
react-native-cli: 1.0.0
react-native: 0.37.0

Genymotion活跃且可用 -

bozzmob:Twitter bozzmobusr$ adb devices
List of devices attached
192.168.57.101:5555 device

运行应用程序的终端日志 (有趣的是它说 JS服务器无法识别,那里有什么问题吗?)

bozzmob:Twitter bozzmobusr$ react-native start --port 8082
Scanning 712 folders for symlinks in /Users/satjagan/collection/work/github/reactnative/react-native-card-modal/node_modules (15ms)
 ┌────────────────────────────────────────────────────────────────────────────┐ 
 │  Running packager on port 8082.                                            │ 
 │                                                                            │ 
 │  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
   /Users/satjagan/collection/work/github/reactnative/react-native-card-modal 

[Hot Module Replacement] Server listening on /hot

React packager ready.

[11/26/2016, 2:47:25 PM] <START> Initializing Packager
[11/26/2016, 2:47:25 PM] <START> Building in-memory fs for JavaScript
[11/26/2016, 2:47:25 PM] <END>   Building in-memory fs for JavaScript (184ms)
[11/26/2016, 2:47:25 PM] <START> Building Haste Map
[11/26/2016, 2:47:25 PM] <END>   Building Haste Map (425ms)
[11/26/2016, 2:47:25 PM] <END>   Initializing Packager (741ms)



bozzmob:Twitter bozzmobusr$ react-native run-android
**JS server not recognized, continuing with build...**
Running adb -s 192.168.57.101:5555 reverse tcp:8081 tcp:8081
Building and installing the app on the device (cd android && ./gradlew installDebug...
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.
Go to https://facebook.github.io/react-native/docs/getting-started.html
and check the Android tab for setup instructions.

不幸的是卸载McAfee不是一个选择:( 如果我有自由,我会先做这件事。

4 个答案:

答案 0 :(得分:1)

React-Native仍在尝试连接到8081.上的打包程序。通常,您打开开发菜单并指定其他端口,但在您的情况下,您甚至无法启动。

看起来您无法指定端口。我想你可能有两种选择:

  1. 暂时通过开发菜单杀死McAfee,安装和更改端口,如下所述:https://facebook.github.io/react-native/docs/troubleshooting.html#terminating-a-process-on-port-8081

  2. 更改此文件:https://github.com/facebook/react-native/blob/292cc82d0ebc437a6f1cdd2e972b3917b7ee05a4/Libraries/Core/Devtools/getDevServer.js

答案 1 :(得分:1)

我有类似的问题。我无法通过kill命令停止McAfee进程。这是因为它作为服务运行。但是可以通过protected virtual void AddSubjectBody() { var container = FindViewById<FrameLayout>(Resource.Id.SubjectBodyContainer); var subjectBody = new SubjectBody(Resource.Layout.SubjectBody, this, null); subjectBody.DataContext = new SubjectBodyViewModel(); container.AddView(subjectBody, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent)); } 工具停止它。试试这个:

lanuchctl

它将停止正在使用8081端口的McAfee进程。

答案 2 :(得分:0)

以下是指定非默认包装程序位置应执行的操作:

  

(物理地摇动设备)&gt;开发设置&gt;调试服务器主机&amp;设备端口&gt; IP:端口

enter image description here

注意:

  • 显然,这需要先将应用程序安装在设备上。如果您无法自动执行此操作,只需将创建的.apk手动复制到设备上,然后在安装后继续执行说明。
  • AFAIK,在撰写本文时,此选项在 iOS 的react-native中不可用
  • 要在模拟器上打开调试菜单,您可以使用陀螺仪/加速度计滑块来模拟摇动(我在Windows上的库存模拟器上测试它,而不是GenyMotion)。也许有一种更简单的方法,但我还没有找到它。

答案 3 :(得分:0)

我发现在几乎所有情况下,您都知道该应用程序应使用您当前的项目设置和代码运行,如果它不起作用,请尝试:

killall -9 node

因为Metro Bundler节点进程可能是问题所在。有时会被捆扎起来。

这就是我的工作,但是您可以更具体地查看持有端口8081的进程并杀死它们。 (尝试使用类似sudo lsof -n -i4TCP:8081的命令(引用:lsof definition)。如果您在本地主机上运行一些node.js API,则在杀死所有节点进程时可能要格外小心,但是如果您只是进行React Native开发,您可以放心地这样做。