【AndroidStudio】Wi-Fiワイヤレスデバッグ ペアリング済み端末の再接続

パソコンから接続していたAndroid端末に、気がつくと切断されている時がある。


パソコンや端末の電源を一度落としたり、OS の再起動や AndroidStudio の再起動は時間がかかるのでしたくない。

なるべくかんたんに素早く再接続する方法。


1. Connection Assistant「Restart ADB server」

2. ターミナルから「adb kill-server」

3. ワイヤレスデバック OFF → ON

4. 再ペアリング

上のどれかで再接続できるので操作が少ない 1. から順にやっていくと良い。

それぞれ操作後は、3〜10秒程度待つと再接続される。

Event log を見ながらやると分かりやすい。

 

📶 1. Connection Assistant「Restart ADB server」

AndroidStudio 上部から、Troubleshoot device connections を選択して、

NextNext で2画面を飛ばして以下画面から Restart ADB server

数秒待つと、端末と再接続されます。

 

📶 2. ターミナルから「adb kill-server」

ターミナルを開いて adb kill-server と打つだけ。

数秒後、再接続されます。

ADB server は kill されると、自動で起動し、ペアリング済み端末に接続にいくようです。

1. の機能もこのことを利用しているように思えます。



 

📶 3. ワイヤレスデバック OFF → ON

私、ずっとこの方法でやってました。

いちいち端末を手にとって、通知バーに入れたタイルから、一度 OFF して ON にする。

 

📶 4. 再ペアリング

上記の3つの方法で接続できない場合は、もう再ペアリングしちゃいます。

AndroidStudio 上部 Pair Devices using Wi-Fi からどうぞ。

 

📶 注意点

端末側がロック画面やスリープ状態だと再接続できないようです。

👉 Jake Wharton さん「Android12、ロック画面 / 常時表示の時計が良い。」 hatena-bookmark

あと、AndroidStudio の設定として、ADB 周りがデフォルト設定になっていることが必要です。

mDNS という仕組みを使って接続してるようです。

👉 【謎?】QRコードによるデバイスのペア設定 - Android11 hatena-bookmark

 

📶 まとめ

一度、ペアリング済みのWiFiワイヤレスデバッグの再接続は、Android Studio 画面上部から、


No Devices 

 ↓

Troubleshoot device connections

 ↓

Next

 ↓

Next

 ↓

Restart ADB server

とするだけでよい。上記 1. の方法です。


Twitter 動画をツイートできず - 公式「YUV 4:2:0 ピクセルフォーマット にのみ対応しています」

YouTube ではアップロードして公開できました。



しかし、Twitter で動画アップロード時、完了できてるのに、ダイアログがグレーアウトしたまま。

ツイートができない。戻るとエラーの表示。

エラー
長い動画はアップロードされるまで時間がかかります。アップロードが中断されないように、ブラウザのタブは開いたままにしてください

アップロードはできてるのに。

なんでかな。

 

🎞️ ffmpeg で .mov → .mp4 に変換するときの注意点

ffmpeg では、以下のようにすれば Twitter でもいけます。

画質は -crf で設定するだけです。0 はロスなし、18 は実際はロスしていますが見た目では問題ありません。

もし、FFmpeg以外のプレイヤーで再生できるようにしたい場合は、-vf format=yuv420p を追加してください。

色の再現性が若干低下することがありますが、広い互換性のために必要です。


ffmpeg -i input.mov -crf 18 -vf format=yuv420p output.mp4

YouTubeにアップロードする場合は、-vf format=yuv420p を省略することができます。

👉 video - ffmpeg convert mov to mp4 without reduction of bit rate - Stack Overflow hatena-bookmark

それぞれのコマンドオプションで作成された output.mp4 を ffprobe で確認。


# -vf format=yuv420p なし
ffmpeg -i input.mov -crf 18 output.mp4 

Stream #0:0[0x1](und): Video: h264 (High 4:2:2) (avc1 / 0x31637661), yuv422p10le(tv, bt709, progressive), 720x1280 [SAR 1:1 DAR 9:16], 216 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)


ffmpeg -i input.mov -crf 18 -vf format=yuv420p output.mp4

Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280 [SAR 1:1 DAR 9:16], 212 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)

となり、ピクセルフォーマットが


yuv422p10le

  ↓

yuv420p

と変化していることが分かります。

この話、Twitter 公式にもきちんと書いてました。

YUV 4:2:0 ピクセルフォーマットにのみ対応しています。

👉 メディアのベストプラクティス | Docs | Twitter Developer Platform hatena-bookmark

その他、分かったことメモ。

※ ffmpeg で .mov → .mp4 にすれば コーデックは H.264 になる。

※ mov のコーデックは ProRes も H.264 も存在する。

動画ファイルって、いろんなきまりがあるんですね!

 

🎞️ まとめ

ffmpeg で、広く互換性を優先して、.mov.mp4 に変換する。


# .mov → .mp4
ffmpeg -i input.mov -crf 18 -vf format=yuv420p output.mp4

👉 Encode/H.264 – FFmpeg hatena-bookmark
👉 Encode/VP9 – FFmpeg hatena-bookmark

👉 YouTubeに縦長動画をどうアップするべきか? hatena-bookmark
👉 【Google フォト対策】ffmpeg で動画軽量化 hatena-bookmark


adb restart-server

ヘルプを見てみます。


❯ adb help

...

internal debugging:
 start-server             ensure that there is a server running
 kill-server              kill the server if it is running
 reconnect                kick connection from host side to force reconnect
 reconnect device         kick connection from device side to force reconnect
 reconnect offline        reset offline/unauthorized devices to force reconnect

...

restart-server が欲しいですよね。

.bash_profile とか .zshrc とかに書いておくと便利です。


alias adb='function _adb(){
  if [ $1 = "restart-server" ]; then
    adb kill-server && adb start-server;
  else adb "$@";
  fi;
};_adb'


❯ adb restart-server
* daemon not running; starting now at tcp:5037
* daemon started successfully

既存のコマンドにオプションを追加したい場合に、このような alias 記述は使えます。

👉 How to restart ADB manually from Android Studio - Stack Overflow hatena-bookmark

 

■ しかし実は、

今どきの AndroidStudio は、自動で adb start-server される。

以下がデフォルト。

なので、


adb kill-server

だけで、そのあと自動的に起動される。