如何修改 IP 和端口使用 react-native Android?

Posted

技术标签:

【中文标题】如何修改 IP 和端口使用 react-native Android?【英文标题】:How to modify IP & port use react-native Android? 【发布时间】:2015-12-20 12:41:24 【问题描述】:

我使用了 react-native android 演示项目 AwesomeProject 并在我执行的项目中:

react-native start

在第二个终端:

react-native run-android

启动网络服务器并安装 Android APK。默认webserver配置为localhost:8081,如何修改webserver端口,Android项目中如何更新IP&Port记录。

编辑:

我刚刚发现可以在Android调试设置中修改ip地址,似乎“getDebugServerHost”是一个私有API,Facebook有没有提供任何API来改变ip&port?

【问题讨论】:

请在other post查看我的回答。 【参考方案1】:

正如 OP 对 MossP 的 answer 评论的那样,现在可以使用 debug_http_host 共享偏好来实现这一点(请参阅 this 问题)。

所以,如果你想使用端口 8082,你可以在你的 MainActivity.java 文件中添加一个 onCreate 方法,它可能看起来像这样:

@Override
protected void onCreate(Bundle state)
    super.onCreate(state);

    SharedPreferences preferences =
        PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    preferences.edit().putString("debug_http_host", "localhost:8082").apply();

当然不要忘记导入android.content.SharedPreferencesandroid.os.Bundleandroid.preference.PreferenceManager

这将使您的应用尝试在所需端口而不是 8081 访问打包程序。

然后,您只需确保使用--port 8082(如here 所述)启动打包程序,您就应该准备就绪。 (除非你碰巧在使用 Nuclide,这完全是另一个 story)。

请注意,在 React Native 0.46 之前,这只会允许一个人成功运行应用程序,但仍然无法实际附加 调试器非标准端口。从 React Native 0.46 开始,附加一个调试器 should also work。

【讨论】:

这不是专门问的,所以我不想在答案本身中引用它,但还要注意,你甚至可以在构建时使用 gradle 的 buildConfigField 使端口可配置,尽管这可以获得有点复杂。 我认为答案包含这样的旁注是可以接受的,即使他们没有回答特别提出的问题。但当然,答案应该回答具体要求的内容,并在此基础上添加很好 当您的目标 Android 设备没有功能正常的菜单按钮时,这很有用。【参考方案2】:

更新:请参阅Tomty's answer,了解 2019 年当前推荐的执行方式。

不幸的是,该端口目前是 (2015/09/23) 硬编码的。我相信这会及时改变,因为它已经从项目的高级贡献者那里提出了一个问题。 https://github.com/facebook/react-native/issues/2704

【讨论】:

谢谢。我们现在只能通过修改 debug_http_host SharedPreferences 值来修改 url 而不能修改端口。 进一步更新:现在也可以使用 debug_http_host 更改端口。 @Tomty 请您提供更多关于如何或在何处使用 debug_http_host 的见解? @bozzmob 添加了一个单独的答案,详细说明了这一点。如果还有什么不清楚的地方,请告诉我。【参考方案3】:

对此有一个小的解决方法。在物理设备上运行此程序的任何人(甚至)都可以使用不同的端口重新启动他们的 adb 会话。

例如。

react-native start --port=1234

在不同的 cmd/终端窗口上。

react-native run-android

之后我收到了这些消息。

BUILD SUCCESSFUL

Total time: 22.589 secs
Running C:\SDK/platform-tools/adb -s VY0025160560725694 reverse tcp:8081 
tcp:8081

这会在默认反向端口 8081 上运行,该端口已被 McAfee 阻止。

解决方法:

adb reverse tcp:8081 tcp:1234

试试看。它对我有用。

注意:您可能需要终止并重新打开应用程序。

目前我无法为模拟设备提供答案,因为我的系统上没有安装模拟设备。但是语义应该是相似的。

注意:这可能会破坏使用 watchman 的自动代码更新。

【讨论】:

【参考方案4】:

如https://facebook.github.io/react-native/docs/debugging.html#accessing-the-in-app-developer-menu中所述,

您可以通过摇晃设备或通过以下方式访问开发者菜单 在 ios 的硬件菜单中选择“摇动手势” 模拟器。当您的应用程序运行时,您还可以使用 ⌘D 键盘快捷键 在 iOS 模拟器中运行,或在 Android 中运行时 ⌘M 模拟器。或者,对于 Android,您可以运行命令 adb shell 输入 keyevent 82 打开开发菜单(82 为菜单键码)。

所以在 iOS 设备上摇动它,在 iOS 模拟器上按 control D,在 Android 模拟器上按 control M,在 Android 设备上做adb shell input keyevent 82

然后在打开的菜单中,转到Dev Settings调试设备的服务器和主机端口,然后编辑IP和端口。

ps:仅适用于非生产环境

【讨论】:

菜单中没有这样的菜单项。我怎样才能找到它?【参考方案5】:

在 Mac 上:

    去无线网络 打开网络首选项 Wi-Fi 已连接到 wifi name 并具有 IP 地址 xxx.xxx.x.x。 获取您的 IP 地址。 转到设备上的应用程序 进入开发设置 点击调试设备的服务器主机和端口 填写你的IP地址和端口是8081(例如ipaddress:8081)。

【讨论】:

【参考方案6】:

这是 Tomty 答案的延伸。查看示例项目here:

npm i @nick-bull/react-native-debug-address

# DEBUG_HOST=127.0.0.1:8081 npx react-native start --port 8081
# or, equivalently
DEBUG_PORT=8081 npx react-native start --port 8081

npx react-native run-android --port 8081 

【讨论】:

以上是关于如何修改 IP 和端口使用 react-native Android?的主要内容,如果未能解决你的问题,请参考以下文章

卓岚5143如何修改默认IP地址

如何配置华为usg6320防火墙指定Ip访问指定端口?

ensp阻塞端口怎么看

如何查询TCP/IP并发连接数

修改Vue项目运行的IP和端口

Linux下端口如何分配