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

4

我无法运行任何 react-native 项目,它说已经有一个进程在运行。端口8081被正在运行的Mac上的 McAfee 杀毒软件占用。无论我如何努力(即使不应该杀死它),都无法杀死该进程! SUDO 没有任何作用!

参考 #7308#9145stackoverflow,我尝试在8082端口上运行。服务器启动了,但是run-android仍然失败,显示未找到设备。我的设备(打开调试模式的 Galaxy S7 Edge)和 Genymotion 都已打开。

React Native 版本详细信息 -

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个回答

1
我有过类似的问题。我无法通过kill命令停止McAfee进程。这是因为它作为服务运行。但是,可以通过lanuchctl工具来停止它。请尝试以下操作:
cd /Library/LaunchDaemons sudo launchctl unload com.mcafee.agent.macmn.plist
这将停止正在占用8081端口的McAfee进程。

很好知道如何卸载 McAfee Daemon。谢谢! :) - LeOn - Han Li

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

非常感谢您的回复。第一种方法并没有像我建议的那样起作用,当我杀死它后,McAfee在几毫秒内就会重新启动。我更改了getDevServer.js文件。但是,我仍然面临与问题描述中相同的错误,该错误为“无法将应用安装到设备上,请阅读上面的错误以获取详细信息”。 - bozzmob
现在我对所有文件进行了“8081”的grep,并将8081替换为8082。仍然出现相同的错误:( - bozzmob
当你运行react-native run-android命令时,你是否仍然看到类似这样的内容:adb -s 192.168.57.101:5555 reverse tcp:8081 tcp:8081 - peterp
不,我看到的是192.168.57.101:5555反向tcp:8299 tcp:8299... 我把端口改成了8299。 - bozzmob

0

如果要指定非默认的打包程序位置,请按照以下步骤操作:

(手动震动设备)>开发者选项>为设备设置调试服务器主机和端口 > IP:Port

enter image description here

注意事项:

  • 显然,这需要先在设备上安装应用程序。如果无法自动执行此操作,请手动将创建的.apk复制到设备上,并在安装后按照说明进行操作。
  • 据我所知,在撰写本文时,这个选项在React Native中对于是不可用的
  • 要在模拟器上打开调试菜单,您可以玩弄陀螺仪/加速度计滑块以模拟摇晃(我在Windows上的原始模拟器上测试过,而不是GenyMotion)。也许有更简单的方法,但我还没有找到。

0

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

killall -9 node

因为 Metro Bundler 节点进程可能出现问题。有时它会被卡住。

这就是我所做的,但你可以更具体地查看哪些进程正在占用端口 8081 并杀死它们。(尝试使用类似于 sudo lsof -n -i4TCP:8081 的命令(引自:lsof definition)。如果你在本地主机上运行一些 node.js API,那么你应该更加小心地杀死所有的 node 进程,但如果你只是进行 React Native 开发,那么你可以安全地这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接