如何在Android Studio中设置2个Android模拟器以测试React Native应用程序

5

我为React Native 0.59应用测试添加了一个Android模拟器。现在我可以启动两个模拟器。使用adb devices命令,输出如下:

List of devices attached
emulator-5554   device
emulator-5556   device

当只有一个模拟器时,我在cmd终端上使用react-native run-android命令来运行应用,并使用另一个模拟器执行react-native log-android命令。后端服务器在同一台计算机上运行。以下是Android Studio中的虚拟设备:

enter image description here

我想要做的是启动两个应用程序,代表两个用户同时连接到后端进行测试。当两个模拟器都在运行时,我尝试启动一个应用程序,但应用程序的加载非常缓慢。似乎需要将这两个应用程序启动在不同的端口上,但我在网上找到的解决方案在这里似乎不起作用。此外,当遇到两个模拟器时,react-native log-android会抛出错误。

3个回答

8
尝试将metro-bundler在2个不同的端口上运行。在项目根目录中打开一个终端窗口并使用以下默认命令,

react-native start

这将在默认的8081端口启动一个服务器。

在另一个终端窗口中运行以下命令

react-native start --port=9090

这将在9090端口启动另一个服务器。

现在在第三个终端窗口中运行以下命令

react-native run-android

这将编译并在默认端口下的两个运行中模拟器中启动应用程序。

当应用程序正确启动时,请选择一个模拟器并使用Ctrl+M打开开发菜单。

点击底部的Dev Settings按钮。

点击Debug server host & port for device 按钮。

输入localhost:9090或ip_address:9090并点击OK按钮。

重新加载应用程序,它将从运行在9090端口的react-native server获取js bundle。


按照以下步骤启动2个服务器。但是端口为9090(模拟器-5556)的服务器出现错误“无法连接到开发服务器”。尝试了几次,问题总是在模拟器-5556上。模拟器-5554正常工作并成功加载应用程序。单独使用模拟器-5556时也能正常工作。 - user938363
最初 emulator-5556 抛出了 无法加载脚本。请确保您正在运行 Metro 服务器(运行 'react-native start'),或者您的捆绑包 'index.android.bundle' 已正确打包以供发布。 的错误。点击重新加载后,会显示 无法连接到开发服务器 的错误。 - user938363
1
尝试使用你的IP地址替代localhost:9090,例如[你的IP地址]:9090 - Nishant Nair

1
"

react-native CLI中的log-android只是使用adb logcat来显示Android日志。

adb有一个-s参数,可以让您指定模拟器序列号。首先,您需要使用adb devices列出当前打开的设备。您将获得一个列表,例如:

"
List of devices attached
emulator-5554   device

现在您可以指定特定的设备:
adb -s emulator-5554 logcat *:S ReactNative:V ReactNativeJS:V

你可以多次运行它,以查看你想要查看日志的所有正在运行的设备。

如何在Android Studio下同时运行两个模拟器?我尝试指定两个端口,但不知何故它没有起作用。 - user938363
如何获取console.log输出?logcat输出系统消息,但没有console.log输出。 - user938363
1
logcat outputs everything, but you might need to fine-tune it. <tag>[:priority] can be used for this purpose. RN's log-android uses: *:S ReactNative:V ReactNativeJS:V. The first *:S tells it to suppress all output on all tags and the other two tells it to show only RN related logs. You can do the same: adb logcat *:S ReactNative:V ReactNativeJS:V. You can also filter the log to contain specific words by piping grep to it: adb logcat | grep YourFilter - Artal
1
关于运行设备:您也可以使用命令行来使用avd运行设备:~/Library/Android/sdk/tools/emulator -avd "DEVICE_NAME"。只需在模拟器名称中用下划线代替空格即可。 - Artal
这真的取决于您应用程序的设置。在使用相同的捆绑器进程的不同设备上运行相同的应用程序没有问题。我不确定您所说的两个不同用户是什么意思,每个模拟器都可以执行自己的“登录”,如果需要的话。如果您正在进行端到端测试并且具有某种模拟服务器,则控制不同的端口必须在您的测试基础架构中(例如:识别服务器实例已在运行并在不同的端口上打开新实例)。 - Artal
显示剩余3条评论

0

@NishantNiar的解决方案是正确的,但我想在这里做一些更改。 首先我运行我的两个不同的模拟器。 然后我运行yarn start --port=9090而不是npm start --port=9090,因为它给了我一个错误。 然后在另一个终端中,我运行npm run android,然后第一个模拟器自动启动在默认端口8081上,另一个模拟器启动在9090端口上。 希望这可以帮助到你。


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