【发布时间】:2018-09-06 00:09:25
【问题描述】:
有没有办法在不晃动应用的情况下打开开发菜单或重新加载应用?
安卓 通过 wifi 无线,所以没有 USB 电缆 视窗 10
Hot reload 或 Live reload 不够好,我的胳膊疼:)
【问题讨论】:
-
@bennygenel 是模拟器,但我使用的是物理设备
标签: react-native
有没有办法在不晃动应用的情况下打开开发菜单或重新加载应用?
安卓 通过 wifi 无线,所以没有 USB 电缆 视窗 10
Hot reload 或 Live reload 不够好,我的胳膊疼:)
【问题讨论】:
标签: react-native
正如@bennygenel 所暗示的,从那个页面你可以看到Android 上有一个通过adb 的命令
adb shell input keyevent 82
在无线设备上打开菜单
【讨论】:
对于安卓: 在您的 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?
对于 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;
【讨论】:
您可以通过以下方式向设备发送重新加载调用:adb shell input keyboard text "rr"
【讨论】:
CMD + M打开菜单呢?
adb shell input keyevent 82
对我来说,只使用adb shell input keyevent 82 有效
为方便起见,您可以将其添加到 scripts 文件中的 package.json 中
链接这个:
"android-menu": "adb shell input keyevent 82"
显然 KK 设备也存在问题 - solved here
【讨论】:
在 Android 中也可以通过音量键打开 Debug 菜单。检查以下链接。
【讨论】: