在WSL中运行反应本机,而模拟器直接在Windows中运行



我已经有一段时间没有完成Android开发了,因此我对现代Android开发的了解很少。

我正在尝试学习反应本地。我将WSL作为我的主要开发环境。由于在Linux/WSL中设置Android模拟器可能会很痛苦,因此我想直接在Windows上运行模拟器。但是,我希望能够在WSL中运行react-native run-android

我将如何设置React Native,以便能够在WSL中运行react-native run-android并在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

可以设置它,以便在WSL中运行react-native run-android时,模拟器在Windows中运行。通过 @PSCL的方式这样做的好处是,这种方式支持自动链接。这是您需要做的才能使它起作用。

Windows

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

Linux的Windows子系统

设置这一方面还有更多,所以请忍受我。(我的WSL是Ubuntu 18.04,在其他口味上未经测试。)

  1. 下载并解压缩Android命令行工具。(目前在Android Studio下载页面上找到,向下滚动到"仅命令行工具",然后选择Linux下载选项。)
  2. 在未拉链的文件夹中查看,然后将名为tools的目录移至~/Android/Sdk/tools。(如果不存在,请创建~/Android/Sdk目录。)
  3. 下载并解开JDK 8.(我建议从AddingOpenjdk下载。此外,请确保安装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
  1. 重新启动bash终端并执行命令sdkmanager "platform-tools"以下载最新的平台工具。(adb工具来自这里。)

反应本机

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

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

在设备上运行

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

C:Usersyour-nameAppDataLocalAndroidSdkplatform-toolsadb.exe version
/home/your-name/Android/Sdk/platform-tools/adb version

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

afaik - 由于许多问题,WSL的本地性。

例如。https://github.com/microsoft/bashonwindows/issues/1523

但是,我找到了一个解决方法,将本机Windows Android构建与WSL中的NPM堆栈相结合。实际上,您需要安装本机Windows Android Studio/SDK以使用Intellij IDE和模拟器。诀窍是将基于Gradle的Android编译分开。

工作流

使用NPM/纱线在WSL中执行的所有项目设置和软件包管理。React-native-native-CLI在WSL中全球安装。无需重复的Windows二进制节点/NPM堆栈。

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

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

我已经使用多个本机Android组件的一些相当复杂的项目对此进行了测试。希望这会有所帮助。

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

对于那些难以使Windows 10 Android Studio与WSL2一起工作的人。

Inital Setup

您需要在Windows 10 Android Studio上安装。

设置用户变量: ANDROID_HOME=C:Users<YOUR_USER>AppDataLocalAndroidSdk

添加到系统变量路径: %ANDROID_HOME%emulator %ANDROID_HOME%platform-tools %ANDROID_HOME%tools %ANDROID_HOME%cmdline-toolslatest (I'm not sure if this one is necessary)

然后转到您的WSL2并安装:

  1. sudo apt-get install unzip
  2. 仅获取Android Studio命令行工具,然后将其解压缩到/home//android
  3. 使用sudo apt-get install openjdk-8-jdk安装JDK 8
  4. 将其添加到您的.bashrc:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
export PATH=$PATH:$JAVA_HOME/bin
export ADB_SERVER_SOCKET=tcp:<YOUR_WSL_IP_ADDRESS_FROM_POWERSHELL>:5037 (check your WSL adapter IP by running `ipconfig` in powershell.)
export ANDROID_HOME=$HOME/Android
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
  1. 重新启动并运行sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools"
  2. 运行adb version && adb.exe version检查版本是否匹配

在模拟器上运行

  1. 运行adb kill-server(PS)/adb.exe kill-server(WSL2 BASH)
  2. 运行adb -a -P 5037 nodaemon server(PS)/adb.exe -a -P 5037 nodeamon server(WSL2 BASH) - 不要关闭终端窗口!
  3. 运行emulator -avd <YOUR_AVD_NAME>(PS)/emulator.exe -avd <YOUR_AVD_NAME>- 不要关闭终端窗口!
  4. 运行adb kill-server(WSL2 bash)
  5. 运行adb devices(WSL2 BASH) - 您现在应该看到模拟设备拾取它的ID
  6. 转到WSL2中的React-Native项目目录并运行react-native run-android --deviceId=<YOUR_DEVICE_ID>
  7. 您应该现在设置全部。

与USB连接的设备保持相同的流程。唯一更改的是,您将开发人员启用电话连接到PC而不是步骤4,并且您应该在运行ADB服务器日志中获取新设备已连接的终端窗口。

注意:您只有在Windows 10和扩展路径系统变量上定义了环境变量时,才可以通过无.exe的别名在PowerShell中运行所有命令。如果您想使用 WSL2 BASH的所有命令您在Windows侧执行某些内容时始终需要添加.exe,因此WSL2知道它需要 访问Windows的可执行文件。

steelbrain的答案从这里为我工作:

将以下内容添加到您的WSL BASHRC或ZSHRC:

export WSL_HOST_IP="$(tail -1 /etc/resolv.conf | cut -d' ' -f2)"
export ADB_SERVER_SOCKET=tcp:$WSL_HOST_IP:5037

然后创建一个防火墙条目,创建一个新的"入站"。规则。选择"端口"然后特定的TCP端口" 5037"然后"允许连接"然后检查所有域,私人和公共,并添加一个名称。添加防火墙条目后,打开其属性,转到范围 - &gt;远程IP地址 - &GT;添加172.16.0.0/12&。

现在我们被WSL2 VM覆盖,通过防火墙,您必须启动具有特定参数的ADB服务器,以使其在所有地址上聆听(不用担心,我们只将WSL2 VM IP范围列入白色。所以没有安全问题)。

创建一个vbs脚本,将其称为任何东西,然后将其放入它

CreateObject("WScript.Shell").Run "%USERPROFILE%AppDataLocalAndroidSdkplatform-toolsadb.exe kill-server", 0, True
CreateObject("WScript.Shell").Run "%USERPROFILE%AppDataLocalAndroidSdkplatform-toolsadb.exe -a -P 5037 nodaemon server", 0, True

现在您要做的就是每次重新启动一次调用VBS脚本,WSL VM将连接到主机ADB实例

(我只是在常规的cmd.exe shell中调用了这两个命令:

%USERPROFILE%AppDataLocalAndroidSdkplatform-toolsadb.exe kill-server
%USERPROFILE%AppDataLocalAndroidSdkplatform-toolsadb.exe -a -P 5037 nodaemon server

我猜他提出了vbs,因此它仍然运行,因为如果我将其放入.bat文件中,服务器可能会用BAT文件死亡,没有尝试过)

ANDROID_HOME=/mnt/c/Users/<YOUR_USER>/AppData/Local/Android/Sdk
alias adb=$ANDROID_HOME"/platform-tools/adb.exe"

相关内容

  • 没有找到相关文章

最新更新