web-dev-qa-db-ja.com

実行中React WSLでネイティブ、エミュレーターはWindowsで直接実行中

私はしばらくの間Android開発を行っていないので、現代のAndroid開発に関する私の知識は不十分です。

React Native。プライマリ開発環境としてWSLを使用しています。Androidエミュレーターをセットアップするのはおそらく面倒なので、学習しようとしています。 Linux/WSLでは、エミュレーターをWindowsで直接実行したいのですが、WSLでreact-native run-Androidを実行できるようにしたいと思います。

WSLでreact-native run-Androidを実行し、WindowsのReactエミュレーターでアプリを実行できるように、ネイティブでAndroid Nativeを設定するにはどうすればよいですか?

私の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
8
Leo Jiang

AFAIKいくつかの問題があるため、WSLでreact-nativeを使用することはできません。

例えば https://github.com/Microsoft/BashOnWindows/issues/152

ただし、ネイティブWindows AndroidビルドとWSLのnpmスタックを組み合わせた回避策を見つけました。現実的には、ネイティブのWindows Android St​​udio/SDKをインストールして、Intellij IDEとエミュレーターを使用することをお勧めします。秘訣は、GradleベースのAndroidコンパイルを分離することです。

ワークフロー

すべてのプロジェクトのセットアップとパッケージ管理は、npm/yarnを使用してWSLで実行されます。 WSLにグローバルにインストールされたreact-native-cli。重複するWindowsバイナリノード/ npmスタックは必要ありません。

react-native run-Androidを使用せず、代わりにcmdからコンパイルしてデプロイします。プロジェクト内の/Androidディレクトリから、gradleラッパーgradlew.bat installDebugを実行するか、Creator's Updateを使用して、WSLbashシェル/mnt/c/Windows/System32/cmd.exe /C gradlew.bat installDebug内からこれを実行できます。 UNIXのgradlewスクリプトは使用しないでください。

APKがアセンブルされ、デバイスまたはエミュレーターにアップロードされたら、コマンドreact-native startを使用してWSL内からデバッグサーバーを実行します。

複数のネイティブAndroidコンポーネントを使用して、かなり複雑なプロジェクトでこれをテストしました。お役に立てれば。

  • 注:これを機能させるには、プロジェクトをネイティブWindowsファイルシステム(/ mnt/c)に配置する必要があります。
16
pscl

WSLでreact-native run-Androidを実行しながら、エミュレータが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
  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:\Users\your-name\AppData\Local\Android\Sdk\platform-tools\adb.exe version
/home/your-name/Android/Sdk/platform-tools/adb version

それらが同じバージョンであることを確認したら、Windows実行可能ファイルからadbサーバーを起動するようにしてください(adb.exe kill-server && adb.exe start-serverを実行)。次に、WSLでadb devicesを実行して動作するかどうかをテストすると、接続されているデバイスが表示されます。

6
Aust

Windows 10 Android StudioをWSL2にあるreact-nativeプロジェクトで動作させるのに苦労している人のために。

初期設定

Windows 10 Android Studioにインストールする必要があります。

ユーザー変数を設定します:_Android_HOME=C:\Users\<YOUR_USER>\AppData\Local\Android\Sdk_

システム変数PATHに追加:%Android_HOME%\emulator %Android_HOME%\platform-tools %Android_HOME%\tools %Android_HOME%\cmdline-tools\latest (I'm not sure if this one is necessary)

次に、WSL2に移動して、以下をインストールします。

  1. _Sudo apt-get install unzip_
  2. get Android studio Command Line Tools Only and unzip to/home // Android
  3. _Sudo apt-get install openjdk-8-jdk_を使用してjdk8をインストールします
  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. bashを再起動して_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. run _adb -a -P 5037 nodaemon server_(ps)/ _adb.exe -a -P 5037 nodeamon server_(wsl2 bash)-ターミナルウィンドウを閉じないでください!
  3. run _emulator -avd <YOUR_AVD_NAME>_(ps)/ _emulator.exe -avd <YOUR_AVD_NAME>_ --ターミナルウィンドウを閉じないでください!
  4. _adb kill-server_(WSL2 bash)を実行します
  5. run _adb devices_(WSL2 bash)-エミュレートされたデバイスがIDを取得するのが表示されます。
  6. wSL2のreact-nativeプロジェクトディレクトリに移動し、_react-native run-Android --deviceId=<YOUR_DEVICE_ID>_を実行します
  7. これですべての設定が完了しました。

USB接続デバイスでも同じフローが維持されます。変更されているのは、手順4の代わりに、開発者対応の電話をPCに接続し、新しいデバイスが接続されていることを示すadbサーバーログを実行しているターミナルウィンドウを表示する必要があることだけです。

注:Windows 10で環境変数を定義し、PATHシステム変数を拡張した場合にのみ、_.exe_とパスを使用せずにエイリアスでPowerShellのすべてのコマンドを実行できます。 WSL2 bashのすべてのコマンドを使用する場合、Windows側で何かを実行するときは、常に_.exe_を追加する必要があります。これにより、WSL2はWindows実行可能ファイルに到達する必要があることを認識します。

0
LukaszKuciel