使用直接在Windows中运行的模拟器在WSL中运行React Native

Leo*_*ang 4 android android-studio react-native windows-subsystem-for-linux

我有一段时间没有做过Android开发,所以我对现代Android开发的了解很多.

我正在努力学习React Native.我使用WSL作为我的主要开发环境.由于在Linux/WSL中设置Android模拟器可能会很麻烦,我想直接在Windows上运行模拟器.但是,我更喜欢能够react-native run-android在WSL中运行.

如何设置React Native能够react-native run-android在WSL中运行并在Windows上的Android模拟器中运行应用程序?

我的ANDROID_HOME变量应该正确设置,但我不太了解Android,知道这是做什么的:

export ANDROID_HOME=/mnt/c/Users/Leo/AppData/Local/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
Run Code Online (Sandbox Code Playgroud)

Aus*_*ust 18

可以对其进行设置,以便模拟器react-native run-android在 WSL 中运行时在 Windows 中运行。与@pscl 的方式相比,这样做的好处是这种方式支持自动链接。这是您需要做的事情才能使其正常工作。

视窗

Windows 端唯一需要的是安装Android Studio并设置模拟器/虚拟设备。这很简单,所以我不会引导你完成。

适用于 Linux 的 Windows 子系统

设置这方面的事情还有一点,所以请耐心等待。(我的 WSL 是 Ubuntu 18.04,这在其他版本上未经测试。)

  1. 下载并解压 Android 命令行工具。(目前在Android Studio下载页面上找到,向下滚动到“仅限命令行工具”并选择 Linux 下载选项。)
  2. 查看解压后的文件夹并将名为的目录移动tools~/Android/Sdk/tools. (~/Android/Sdk如果目录不存在,则创建它们。)
  3. 下载并解压 JDK 8。(我建议从AdoptOpenJDK下载。另外,请确保安装 OpenJDK 8,否则sdkmanager将无法运行,我们稍后会使用。)
  4. 将解压后的文件夹移动到/opt/jdk8u222-b10. (你实际上可以把它放在任何你想要的地方,只要确保JAVA_HOME环境变量指向这个解压缩的文件夹。)
  5. 在您的~/.bashrc文件中设置以下环境变量。(路径对你来说可能不同!)
export ANDROID_HOME=/home/your-name/Android/Sdk
export JAVA_HOME=/opt/jdk8u222-b10
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
Run Code Online (Sandbox Code Playgroud)
  1. 重新启动 bash 终端并执行命令sdkmanager "platform-tools"以下载最新的平台工具。(该adb工具来自此处。)

反应本机

现在一切都设置好了,是时候玩了!

  1. 在 Windows 中启动模拟器。
  2. 在 WSL 中打开您的项目目录并运行react-native start. (保持此终端打开)。
  3. 在另一个 WSL 终端中打开您的项目目录并运行react-native run-android. (第一次运行时,React Native 将根据您的虚拟设备下载一些其他 SDK。您可以通过运行查看所有已安装的 SDK sdkmanager --list。有关更多信息,请参阅sdkmanager文档。)

在设备上运行

这是制作它的快速说明,以便您可以将您的应用程序安装到物理设备。这里的技巧是确保您的两个adb可执行文件都在同一版本上。(它们应该是因为我们通过 安装了它sdkmanager。)

C:\Users\your-name\AppData\Local\Android\Sdk\platform-tools\adb.exe version
Run Code Online (Sandbox Code Playgroud)
C:\Users\your-name\AppData\Local\Android\Sdk\platform-tools\adb.exe version
Run Code Online (Sandbox Code Playgroud)

一旦确认它们在同一版本上,请确保从 Windows 可执行文件 (Run adb.exe kill-server && adb.exe start-server)启动 adb 服务器。然后,您可以通过adb devices在 WSL 中运行来测试它是否有效,您应该会看到已插入的设备。

  • 我使用“sudo apt install openjdk-8-jdk”安装了 JDK。所以我跳过了步骤 3 和 4,也跳过了导出 $JAVA_HOME,并且效果很好。 (2认同)
  • 我已遵循本指南,它按预期工作:https://gist.github.com/bergmannjg/461958db03c6ae41a66d264ae6504ade#enable-access-to-adb-server-from-wsl2。这里缺少的步骤是如何使 WSL 中的 adb 客户端连接到 Windows 中运行的 adb 服务器。 (2认同)

psc*_*scl 15

由于许多问题,AFAIK无法在WSL中使用react-native.

例如https://github.com/Microsoft/BashOnWindows/issues/1523

但是,我发现了一个解决方法,它将原生windows android构建与WSL中的npm堆栈相结合.实际上,您仍然希望安装本机Windows Android Studio/SDK以使用Intellij IDE和模拟器.诀窍是分离出基于Gradle的Android编译.

工作流程

所有项目设置和包管理都在WSL中使用npm/yarn执行.react-native-cli全局安装在WSL中.不需要重复的Windows二进制节点/ npm堆栈.

不要使用react-native run-android,而是从cmd编译和部署.从/android项目内的目录,执行gradle包装器gradlew.bat installDebug,或者使用Creator的更新,您可以从WSL bash shell中执行此操作/mnt/c/Windows/System32/cmd.exe /C gradlew.bat installDebug.不要使用unix gradlew脚本.

将APK组装并上传到您的设备或模拟器后,使用该命令从WSL中运行调试服务器react-native start.

我已经使用多个原生Android组件对一些相当复杂的项目进行了测试.希望这可以帮助.

  • 注意:为此,您的项目需要位于本机Windows文件系统中,即/ mnt/c.