なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

adb で device (2) のようになってしまったときに expo run をしたいときに当てるパッチ

Android 開発しているときに、ワイヤレスデバッグで何度か再接続を繰り返したりしていると、 adb devices で表示されるデバイスの様子がおかしくなるときがあります。

(2) が付いてしまったデバイス

こうなってしまったら、 expo で開発しているときに使うコマンド、 expo run:android コマンドでは、デバイスに接続できないと言われ、デバッグが出来なくなります。

$ expo run:android
CommandError: Failed to get properties for device (DeviceName): Command failed: adb -s DeviceName shell getprop ro.product.cpu.abilist
adb: device 'DeviceName' not found

こういうときは、次のようなパッチを当てることで接続可能になります。

diff --git a/build/src/start/platforms/android/adb.js b/build/src/start/platforms/android/adb.js
index a8dafb4fedf286fd3aba8f764d3c2ba8566db292..0e8568ed8781a48b943e74546014bd63244b2aca 100644
--- a/build/src/start/platforms/android/adb.js
+++ b/build/src/start/platforms/android/adb.js
@@ -209,9 +209,9 @@ async function installAsync(device, { filePath }) {
 }
 function adbArgs(pid, ...options) {
     const args = [];
-    if (pid) {
-        args.push('-s', pid);
-    }
+    // if (pid) {
+    //     args.push('-s', pid);
+    // }
     return args.concat(options);
 }
 async function getAttachedDevicesAsync() {

pnpm コマンドを使っている場合は、 pnpm patch @expo/cli でパッチを当てる準備をし、 build/src/start/platform/android/adb.js の210行目付近を探し、該当関数にパッチを当てることで動作するようになります。参考元 Issue は悲しいことに bot に閉じられてしまっていますが、追記してくださっているパッチは現在の expo@55.0.4 現在でも利用可能なので、こうなってしまったらこのパッチを当てて作業をしましょう。もしくは USB デバッグを使いましょう。

ちなみにこのブログを見た Android 開発者の方でこれの治し方を知っている方がいましたらコメントで教えてください。 adb shell すら出来ずに切実に困っています。

参考:

追記:

  • Android 端末側を再起動したら治りました......