Android端末でスクリーンショットが撮れるようになって久しいですが、スクロールを含む画面全体のスクリーンショットについてはサポートされていません。デザインの全体を俯瞰してレビューする際などにはスクロールを含む画面全体のスクリーンショットがあると助かります。
PGSSoft/scrollscreenshotを利用すると比較的カンタンにスクロールを含む画面全体のスクリーンショットを撮れます。
セットアップ
リポジトリをcloneすれば利用できます。
git clone https://github.com/PGSSoft/scrollscreenshot.git
スクロールしながらスクリーンショットを撮る
scrollscreenshotはjarで提供されています。java
コマンドでスクリーンショットを撮るクラスを実行すれば良いのですがその前にいくつか準備が必要です。
ANDROID_SDK_HOMEが設定されてない場合は.bash_profile
などに追加してください。実行時引数として渡すこともできますが面倒だと思うので環境変数を設定しておくと良いでしょう。
export ANDROID_SDK_HOME=/usr/local/opt/android-sdk
デバイスのデジタイザの入力番号を確認する
scrollscreenshotはadbでデバイスに接続し、デジタイザに対して直接タッチイベントを送信してスクロールをします。以下のコマンドを使って対象となるデバイスのデジタイザの入力番号を調べて下さい。
adb shell getevent -l
色々なイベントが流れてきます。最初は複数の入力番号が出てきますが端末を操作すると同じデジタイザで沢山イベントが発生するので判別ができます。以下のログだと/dev/input/event5
の末尾の5が入力番号となります。
/dev/input/event5: EV_SYN SYN_REPORT 00000000 /dev/input/event5: EV_ABS ABS_MT_POSITION_X 0000021f /dev/input/event5: EV_ABS ABS_MT_POSITION_Y 0000051e /dev/input/event5: EV_SYN SYN_MT_REPORT 00000000 /dev/input/event5: EV_SYN SYN_REPORT 00000000 /dev/input/event5: EV_ABS ABS_MT_POSITION_X 0000022c
スクリーンショットを撮る
scrollscreenshotのバイナリにある場所に移動し、javaコマンドを使って実行します。-i
オプションにデジタイザの入力番号を設定すれば正しくスクロールされ縦長のスクリーンショットが撮れるはずです。画像は実行したディレクトリの直下にout.png
という名前で保存されます。
cd scrollscreenshot/binaries java -cp scrollscreenshot-latest.jar com.pgssoft.scrollscreenshot.ScrollScreenShot -i 5
こんな感じでスクリーンショットが撮れます(仕組み上ガタつく所が出ます)。
注意点とオプション
scrollscreenshotはadb接続をしてスクロールをしながらスクリーンショットを撮って最後に結合するという仕組みで動いており画面上のスクロールの状態については関与できません。このためスクリーンショットを撮る画面毎にスクロール回数を調整する必要があります。スクロール回数(スクリーンショットの回数)は-c
で指定できます。この他にもいくつかオプションがあります。
scrollscreenshotのオプションを次に示します*1。
Usage: com.pgssoft.scrollscreenshot.ScrollScreenShot [options] Options: -c, --count スクロールの回数 デフォルト: 5 -v, --device 複数の端末が接続されている場合Device IDを指定できます。特に指定がなければ最初のデバイスに接続します -d, --direction スワイプの方向を指定できます。topdown (default), leftright デフォルト: topdown -h, --help ヘルプ デフォルト: false -e, --inertia コンテンツの慣性。スクロールに必要なピクセル数を指定できます デフォルト: 0 * -i, --inputdevice デジタイザの入力番号。 /dev/input/eventNのN デフォルト: 1 -n, --nameprefix 出力ファイルのプレフィクス デフォルト: out -p, --pathsdk Android SDKのパス -s, --stitch 画像の結合方法: full (つなぎ目がスムーズ), none (差分を気にせずそのまま結合する), separate (別々のファイルに分ける) デフォルト: full
enjoy
scrollscreenshotのソースを読むとjavaからAndroidDebugBridge
でadb接続してBufferedImageを使って結合などしていてとてもシンプルなので簡単に俺得スクリーンショットツールが作れるんじゃないかなと思います。タッチイベントも送出できるので特定動作を繰り返す仕組みとかできるんじゃないですかね。
*1:README.mdから抜粋し日本語化しました