在Android模拟器上运行React Native

70

我试图在我的Mac上的Genymotion Android模拟器上运行React Native应用程序。当我输入react-native run-android时,出现了问题。

Running /usr/local/opt/android-sdk/platform-tools/adb reverse tcp:8081 tcp:8081
error: closed
Could not run adb reverse: Command failed: /usr/local/opt/android-sdk/platform-tools/adb reverse tcp:8081 tcp:8081
Building and installing the app on the device (cd android && ./gradlew installDebug...
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/android-setup.html
MacBook-Pro-MacBook:ART-CarefulPeople macbook$ 

然后我尝试了:

  1. react-native start
  2. react-native run-android

结果相同。

然后我尝试了:

  1. react-native bundle --entry-file index.android.js --platform android --bundle-output android/app/src/main/assets/index.android.bundle

  2. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

  3. react-native run-android

结果相同。

我只尝试了 adb reverse tcp:8081 tcp:8081,它显示 error: closed

当我尝试在android-sdk模拟器上运行应用程序时,它出现了与上面相同的错误,但没有显示 error: closed

从Android Studio中,我可以运行此应用程序并且它可以在Genymotion上工作。请告诉我该怎么做才能在Android模拟器上运行我的应用程序?


6
“adb reverse” 仅适用于 Android 5.0 及以上版本的设备。 - Xeijp
1
是的。我不知道那是什么。我只是重新创建了项目,现在一切正常。 - alborozd
我相信如果你的安卓手机(假设你有一部)连接到了电脑上,它可能正在尝试将应用程序安装在那个设备上。如果已经插上了,我建议拔掉它,确保你的模拟器正在运行,然后再次尝试运行 react-native run-android 命令。 - jasonmerino
这可能会有所帮助 如何在安卓模拟器上运行React Native - InfiniteStack
13个回答

66

我曾经遇到过类似的问题,花费了很多时间并进行了大量搜索后,唯一有效的方法是:

  1. 请按照以下图示安装所需的SDK:

配置所需的SDK 配置所需的SDK

  1. 如果您已经安装了SDK,那么您必须更新以下SDK:
    • Android SDK工具(将其更新为最新版本)
    • Android SDK平台工具(将其更新为最新版本)
    • Android SDK构建工具(将其更新为最新版本)
    • Extra文件夹下的Android支持存储库(将其更新为最新版本)
  2. 您必须至少安装与已安装的Android SDK构建工具Android SDK平台工具版本相同的Android API版本,如上面的配置所需的SDK图所示。

注意:React Native官方文档中列出的支持库的本地Maven存储库现在在SDK管理器中被命名为Android支持存储库。


大家好!!如果您喜欢这个答案,请不要忘记给它投票... 谢谢 :) - Rizwan Jamal
你能解释一下它是如何解决adb reverse tcp:8081 tcp:8081 error: closed问题的吗? - Saravanabalagi Ramachandran
2
这可能是由于您的Android操作系统版本引起的... adb reverse tcp:8081 tcp:8081 仅适用于具有操作系统版本 >= 5 的设备。 - Rizwan Jamal

59
在macOS上,我设法通过添加以下内容来修复此问题:
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools

将内容添加到 ~/.zsh_profile 文件中。

然后在终端中键入

source $HOME/.zsh_profile

这个问题是由于使用iTerm2 shell引起的,因此需要按照官方文档描述编辑其自身配置,而不是默认的$ HOME / .bash_profile

https://reactnative.dev/docs/environment-setup

32

React Native(在Mac OS Big SUR上)

我被困在这里。但更新Android Studio的环境设置就解决了问题。

nano ~/.zshrc

复制并粘贴

export ANDROID_SDK_ROOT=$HOME/Library/Android/sdk
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator:$PATH
export PATH=$PATH:$ANDROID_HOME/tools:$PATH
export PATH=$PATH:$ANDROID_HOME/tools/bin:$PATH
export PATH=$PATH:$ANDROID_HOME/platform-tools:$PATH
export JAVA_HOME=$(/usr/libexec/java_home)

按下 control + o 保存 然后按下 enter 再按下 control + x 退出

接着输入 source ~/.zshrc 编译

关闭运行中的终端并运行 npx react-native run-android


16

您也可以尝试使用“doctor”命令。 它将解决大多数情况。

npx @react-native-community/cli doctor

13

我每次从Android Studio运行模拟器或在物理设备上都会遇到类似的问题。相反,您可以通过命令行快速运行Android模拟器。

android avd

当模拟器运行时,您可以使用adb devices检查模拟器是否显示。 然后,您只需使用react-native run-android在模拟器上运行应用程序。

确保已安装平台工具以便能够使用adb。或者您可以使用

brew install android-platform-tools

5
不要使用已经被弃用的命令行工具进行brew安装。按照指示使用Android Studio进行安装 https://facebook.github.io/react-native/docs/getting-started.html#1-install-android-studio - Harry Moreno
1
在此更新brew install android platform tools的命令行。请尝试: brew cask install android-platform-tools - Nguyen Thuong Thong
3
“android avd”已过时,请使用“android list avd”。注意,这是一条命令行提示,用于管理Android模拟器的虚拟设备。 - cmcodes

4
在Windows 10和Android Studio中,您可以在Android Studio中进入“文件”-》“设置”,然后到“外观和行为”-》“系统设置”-》“Android SDK”。在“SDK工具”选项卡中启用以下选项:
  • “Android SDK构建工具..”
  • “Android模拟器”
  • “Android SDK平台工具”
  • “Android SDK工具”
如果都已安装,则可以使用“工具”->“Android”->“AVD管理器”在Android Studio中启动模拟器。如果模拟器正在运行,则可以尝试“react-native run-android”。

4
如果没有安装模拟器,则尝试执行以下命令(如果已安装 Homebrew):

brew install android-platform-tools

可能会有所帮助。

1
这个解决方案在我的Mac Catalina操作系统上有效,谢谢。 - Muhammad Ateq Ejaz

4

我曾经遇到这样一种情况:我在使用旧项目时,运行了一个打包程序的实例(像平常一样运行 react-native start)。当时我使用的是Ubuntu 14.04操作系统。于是我停止了该实例,并在我的项目文件夹中分别在两个不同的控制台选项卡中运行了以下两个命令:

npm start #here I used to run react-native start
react-native run-android

npm start 在我的 package.json 文件中定义为:

"start": "node_modules/react-native/packager/packager.sh"

我不知道React Native是否有一些令人困惑的东西,但这个做法很有效。


2

我曾有过类似的问题。我更新了我的Genymotion以及我的安卓SDK、库和依赖项,所有东西都似乎正常工作。为了更新我的SDK,我使用了安卓sdk管理器 {ANDROID_SDK_FOLDER}/tools/android sdk


2
在我的情况下,android/gradlew文件出现了问题。我认为这是当我们将代码从Windows移动到Mac OS时发生的情况。
参考:- https://dev59.com/wmMm5IYBdhLWcg3wX-AW#62216646 我通过运行以下命令来清理android/gradlew文件 -
步骤1. 在android文件夹的cmd上运行
chmod +x gradlew

步骤2:之后运行
./gradlew clean

步骤三:接下来在项目的根目录中运行

react-native run-android

如果一切正常,这应该开始构建应用程序并在模拟器中启动它。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

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