WSL2環境でAndroid10以前の実機デバッグ

## 概要
ワイヤレスデバッグ設定のない古いAndroid端末を使って、WSLのFlutter環境で実機デバッグするためにやったことです
（Windows環境へのADBツールインストールなし）

### 経緯
- WSLのFlutter環境でAndroid端末の実機デバッグをしたい
- 古い端末 (Android 10) を使いたい
- Windows環境にADBツールは入れていないし、入れたくない
- WSL環境にADBツールを入れているのでこれだけ使ってなんとかしたい、やってみる


## 前提
- WSL カーネル ver. 5.15.153.1-2
- usbipd-win ver. 4.2.0
- WSL Flutter環境は構築済み
- Android端末のUSBデバッグは有効化済み


## 手順
基本的には以下を参考に進めていくだけです

### 1. WSLでのUSB接続認識
- [USB デバイスを接続する](https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb)
- [usbipd-win](https://github.com/dorssel/usbipd-win)

### 2. ADB接続
- [最初の USB 接続後にデバイスとワイヤレスで接続する（Android 10 以前でのみ利用可能）](https://developer.android.com/tools/adb?hl=ja#wireless)


## 1. WSLでのUSB接続認識
### windows環境にusbipd-winをインストール
```:powershell
winget install --interactive --exact dorssel.usbipd-win
```

### USBデバイスの確認
管理者権限でpowershellを起動して `usbipd list` 実行
```:powershell 管理者権限
usbipd list

BUSID  VID:PID    DEVICE                                                        STATE
2-5    046d:c52f  USB 入力デバイス                                              Not shared
2-8    30c9:0014  Integrated Camera                                             Not shared
2-9    06cb:00da  Synaptics UWP WBDI                                            Not shared
2-10   8087:0026  インテル(R) ワイヤレス Bluetooth(R)                           Not shared
3-2    2dc8:5201  USB 入力デバイス                                              Not shared
3-3    22b8:2e76  moto g(7) plus, ADB Interface                                 Not shared
```
Android端末のBUSIDを確認
今回の場合は `moto g7` を使うため `3-3` となる


### WSLへのデバイス共有
`usbipd bind --busid <busid>` 実行
```:powershell 管理者権限
usbipd bind --busid 3-3
```


再度 `usbipd list` 実行
ここからはpowershellの管理者権限不要
```:powershell
usbipd list

BUSID  VID:PID    DEVICE                                                        STATE
2-5    046d:c52f  USB 入力デバイス                                              Not shared
2-8    30c9:0014  Integrated Camera                                             Not shared
2-9    06cb:00da  Synaptics UWP WBDI                                            Not shared
2-10   8087:0026  インテル(R) ワイヤレス Bluetooth(R)                           Not shared
3-2    2dc8:5201  USB 入力デバイス                                              Not shared
3-3    22b8:2e76  moto g(7) plus, ADB Interface                                 Shared
```


指定したbsuidのデバイスが `Shared` に変わっていることを確認
`usbipd attach --wsl --busid <busid>` 実行
```:powershell
usbipd attach --wsl --busid 3-3
```

WSL側で `lsusb` 実行
```:WSL
lsusb

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 22b8:2e81 Motorola PCS moto g(7) plus
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
```


一覧に指定のデバイスが表示されていたら成功


#### WSL側で表示されない場合
一覧に表示されていない場合は、WSLでのUSB接続ができていない
今回の場合は `--auto-attach` オプションを付けてコマンド実行すると接続に成功した
```:powershell
usbipd attach --wsl --busid 3-3 --auto-attach
```

## 2. ADB接続
### WSL環境 ADBで Android端末認識
`adb devices` 実行
```:WSL
adb devices

* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
ZY226QDTNL      unauthorized
```
Android端末側の接続確認画面で許可すると、WSL環境でのUSBデバッグが可能となる

#### リモートデバッグの場合

`adb tcpip` 実行
```:WSL
adb tcpip 5555

restarting in TCP mode port: 5555
```

AndroidのIPアドレスを確認し `adb connect` 実行
```:WSL
adb connect 192.XXX.XXX.XXX:5555

connected to 192.XXX.XXX.XXX:5555
```

## 後かたづけ
### デバイス共有解除
接続解除
```:powershell
usbipd detach --busid 3-3
```
共有解除
powershell 管理者権限必要
```:powershell 管理者権限
usbipd unbind --busid 3-3
```


## 参考サイト

https://qiita.com/suruseas/items/42d5d9c5beffa6ebdd78

https://note.com/code89314/n/ncb3b4213ede8