【问题标题】:Open Dev Menu or reload app without shaking?打开开发菜单或重新加载应用程序而不晃动?
【发布时间】:2018-09-06 00:09:25
【问题描述】:

有没有办法在不晃动应用的情况下打开开发菜单或重新加载应用?

安卓 通过 wifi 无线,所以没有 USB 电缆 视窗 10

Hot reload 或 Live reload 不够好,我的胳膊疼:)

【问题讨论】:

标签: react-native


【解决方案1】:

正如@bennygenel 所暗示的,从那个页面你可以看到Android 上有一个通过adb 的命令

adb shell input keyevent 82

在无线设备上打开菜单

【讨论】:

  • 目前正在尝试让 adb 无线工作不成功
  • (附上我的赞成票 - 我的设备是通过 USB 连接的,这在问题的正文中不可用,尽管它确实解决了标题中所述的问题......)
【解决方案2】:

您可以配置长按Android系统Recent按钮打开/关闭菜单

这将在 react native 应用中打开开发菜单。

【讨论】:

  • Android 的确切答案,如果尝试在没有物理连接的情况下打开菜单以发送 adb 命令。
【解决方案3】:

对于安卓: 在您的 package.json 脚本中添加以下行

 "reload":"adb shell input keyevent 82 && adb shell input keyevent 66 && adb shell input keyevent 66",
 "devmenu":"adb shell input keyevent 82",
 "debug":"adb shell input keyevent 82 && adb shell input keyevent 61 && adb shell input keyevent 66 && adb shell input keyevent 66"

现在你可以运行npm run devmenu 在安卓中打开摇动菜单, reload 重新加载应用程序,debug 连接到远程调试器。

对于 ios : 你可以在 app 的某个地方为它创建一个按钮,并让这个东西只在 app 处于开发模式时显示。

import {NativeModules,Platform} from "react-native"


renderDevMenuTouchable = () => {
    if(__DEV__ && Platform.OS == "ios" ){
        return (
            <TouchableOpacity
            style={styles.touchableDebug}
            onPress={()=>{
                NativeModules.DevMenu.reload();
            }}
            onLongPress={()=>{
                NativeModules.DevMenu.show();
            }}
            > 
            <View style={{backgroundColor:"red",width:23,height:25}}/>
            </TouchableOpacity>
        )
    }
    else {
        return null;
    }

}

【讨论】:

  • devmenu 在这里工作得很好。但是,使用这些选项重新加载将显示 "adb server is out of date. killing..." 。下次重新加载时,手机会显示一条带有Could not connect to development server 的RedBox 消息。在我的react-native run-android 输出中,我看到最后是adb server version (32) doesn't match this client (41); killing...,所以这两个可能是冲突的。
  • 为什么NativeModules.DevMenu 在Android 上返回null
【解决方案4】:

对于 iOS,我喜欢将我的应用程序包装在这样的组件中,它允许 3 指触摸来触发开发菜单:

import { NativeModules } from 'react-native';

// wraps the app in a function to allow three finger dev menu access
const DevMenuTrigger = ({ children }) => {
  const { DevMenu } = NativeModules;
  const panResponder = PanResponder.create({
    onStartShouldSetPanResponder: (evt, gestureState) => {
      if (gestureState.numberActiveTouches === 3) {
        DevMenu.show();
      }
    },
  });
  return <View style={{ flex: 1 }} {...panResponder.panHandlers}>{children}</View>;
};

const DevApp = () => (<DevMenuTrigger><App /></DevMenuTrigger>);

// export default App;
export default DevApp;

【讨论】:

    【解决方案5】:

    我已将Shake 手势添加到Assistive Touch 菜单,这对我来说没问题。

    【讨论】:

    • 有用的答案。
    【解决方案6】:

    您可以通过以下方式向设备发送重新加载调用:adb shell input keyboard text "rr"

    【讨论】:

    • 但是如何发送CMD + M打开菜单呢?
    • 对我来说,只使用密钥代码工作adb shell input keyevent 82
    • 在运行应用程序时,我刚刚打开了一个新终端并运行了这个命令。不错的一个
    【解决方案7】:

    对我来说,只使用adb shell input keyevent 82 有效

    为方便起见,您可以将其添加到 scripts 文件中的 package.json

    链接这个: "android-menu": "adb shell input keyevent 82"

    显然 KK 设备也存在问题 - solved here

    【讨论】:

      【解决方案8】:

      在 Android 中也可以通过音量键打开 Debug 菜单。检查以下链接。

      https://stackoverflow.com/a/59526945/958913

      【讨论】:

        猜你喜欢
        • 2016-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        相关资源
        最近更新 更多