[Android]フォルダブルデバイスのadb画面キャプチャ

[Android]フォルダブルデバイスの画面キャプチャ

Androidの世界に、少しずつフォルダブルデバイスが増えてきましたね。開発に活用していくぞ!の思いで、思い切って手を出してしまいました。

アプリのフォルダブル対応まで完了したので、 adbで画面キャプチャを撮ろう としたときに、カバーディスプレイの方でキャプチャを撮れないぞ?となったのでその対処方法をご紹介します。

遭遇した問題

Galaxy Fold3のadb画面キャプチャの取得を試みました。メインディスプレイ(端末を広げた状態の広い方のスクリーン)では、特に問題なく、画面キャプチャを取得できています。

メインディスプレイ

次に、カバーディスプレイ(端末を閉じた状態の狭い方のスクリーン)では、端末上はアプリが正常に表示されているにも関わらず、画面キャプチャは真っ黒です。あれ、なんでやねん😇

カバーディスプレイ

対処への光

フォルダブルデバイスはマイナーだし、きっとまだ対応してないんだろうなくらいの気持ちで、Twitterでつぶやいたところ、 @tomoya0x00さんから、 adb shell screencapのオプションでdisplayを指定できたと思います! という素敵なヒントをいただきました。オプションでdisplayの指定ができるのは知らなくて、これはいけそうだ!と思い、早速試しました。ありがとうございます🙏

対処方法を見つけるまでの考察

adb shell screencapのオプションで何を使えるか分からなかったので、ターミナルで、

 adb shell screencap -h

を実行して、使い方を確認しました。

usage: screencap [-hp] [-d display-id] [FILENAME]
   -h: this message
   -p: save the file as a png.
   -d: specify the physical display ID to capture (default: 19261213734341250)
       see "dumpsys SurfaceFlinger --display-id" for valid display IDs.

-dオプション でディスプレイIDなるものを指定すればよさそうです。が、そのディスプレイIDが分からんやん😇でもう1度読むと、 dumpsys SurfaceFlinger --display-id" を使うことでディスプレイIDを表示できると把握しました。

ということで、PCとFold3を接続した状態で、

 adb shell dumpsys SurfaceFlinger --display-id 

を実行しました。すると、まさに期待していた情報が表示されました(IDを念のためマスクしていますが、実際は全て数字です)😀

Display 1926XXXXXXXX0 (HWC display 0): port=130 pnpId=QCM displayName=""
Display 1926XXXXXXXX1 (HWC display 3): port=131 pnpId=QCM displayName=""

ということで、これらのディスプレイIDが、メインディスプレイとカバーディスプレイを指していそうです😋

では、いざ実行ということで、画面キャプチャを取得していきます。

フォルダブルデバイスの画面キャプチャ取得

メインディスプレイ編

  • コマンド(ディスプレイIDは、環境に合わせて読み替えてください。)
adb shell screencap -p -d 1926XXXXXXXX0 /sdcard/screen.png;adb pull /sdcard/screen.png ~/Desktop/screen1.png
  • 実行結果

メインディスプレイ

こちらも期待通りに画面キャプチャを取得できていますね。

カバーディスプレイ編

  • コマンド(ディスプレイIDは、環境に合わせて読み替えてください。)
adb shell screencap -p -d 1926XXXXXXXX1 /sdcard/screen.png;adb pull /sdcard/screen.png ~/Desktop/screen2.png
  • 実行結果
    カバーディスプレイ

お、真っ黒じゃないぞ!😀期待通りに画面キャプチャを取得できました。お疲れ様でした!

コメントする