【问题标题】:How to modify IP & port use react-native Android?如何修改 IP 和端口使用 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?

【问题讨论】:

标签: android react-native


【解决方案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 上:

    1. 去无线网络
    2. 打开网络首选项
    3. Wi-Fi 已连接到 {wifi name} 并具有 IP 地址 {xxx.xxx.x.x}。
    4. 获取您的 IP 地址。
    5. 转到设备上的应用程序
    6. 进入开发设置
    7. 点击调试设备的服务器主机和端口
    8. 填写你的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 
      

      【讨论】:

        猜你喜欢
        • 2019-01-30
        • 1970-01-01
        • 2017-03-19
        • 2020-11-24
        • 1970-01-01
        • 1970-01-01
        • 2018-12-19
        • 2021-12-11
        • 2020-01-10
        相关资源
        最近更新 更多