PCからAndroid端末のキャプチャを取る方法はいくつかありますが、既存のものに不便さを感じていたので効率化してみました。
私はよく、接続しているAndroid端末のキャプチャを取ってPCで開いているSlackに貼り付けたいことがあります。
最終型だけ見たい方は④リサイズできるようにしてみるからどうぞ。
既存のキャプチャ方法はどれももう一つ足りない
- 端末で取って転送
- AndroidStudio
- Adbそのまま
どれも今やっている作業を中断する必要があります。
キャプチャを効率化する
なるべく早く、少ない手順でキャプチャを取る・利用できることを目指す。
①キャプチャ用のshellスクリプトを組む
ファイル名は日付にしてみます。
お馴染みのadbコマンド使いshellを作成。
# 必要に応じてadbをexportする
DATETIME=$(date +%Y-%m%d-%H%M-%S)
DEVICE_FILE_PATH="/sdcard/${DATETIME}.png"
LOCAL_FILE_PATH="キャプチャを保存したいパス/${DATETIME}.png"
adb shell screencap -p ${DEVICE_FILE_PATH}
adb pull ${DEVICE_FILE_PATH} ${LOCAL_FILE_PATH}
adb shell rm -f "${DEVICE_FILE_PATH}"
exportですが、②以降でapplescriptで呼ぶ際にパスが通っていない状態になるので、1行目でadbのパスを通すと良いです。
②どこでもキャプチャできるようにする
applescriptを作る。
アプリケーションとして保存してアプリケーションフォルダに入れれば、alfredから呼べるのでどこからでも呼べるようになります。
do shell script "上で作ったシェルスクリプトのパス"
display notification "キャプチャ完了"
これで呼び出す際はPATHが通っていないので、screencap.sh側でexportするまたはadbコマンドをフルパスで書く必要があります。
③:クリップボードに貼り付ける
slackで貼り付けたい場合が多かったので、実行したときにクリップボードに貼り付けられるようにしてみる。
AppleScriptにクリップボードのコマンドがある + シェルからAppleScriptを呼べることが分かったのでshに突っ込む。
最下行にクリップボード貼り付け処理を追加
# 必要に応じてadbをexportする
DATETIME=$(date +%Y-%m%d-%H%M-%S)
DEVICE_FILE_PATH="/sdcard/${DATETIME}.png"
LOCAL_FILE_PATH="キャプチャを保存したいパス/${DATETIME}.png"
adb shell screencap -p ${DEVICE_FILE_PATH}
adb pull ${DEVICE_FILE_PATH} ${LOCAL_FILE_PATH}
adb shell rm -f "${DEVICE_FILE_PATH}"
# AppleScriptでクリップボードにキャプチャをセット
osascript -e "set the clipboard to (read (POSIX file \"${LOCAL_FILE_PATH}\") as JPEG picture)"
set the clipboard toでクリップボードに貼り付けられる。
画像パスではただの文字列になってしまうので、readを使って画像を読み取る。
JPEGと指定してもpngでクリップボードに貼り付けられたので、JPEGでも大丈夫そう(PNGではダメだった)
④リサイズできるようにしてみる
Bitbucketを利用することがあり、プルリクにキャプチャを貼り付けることがあったが、デフォルトだとサイズがそのままになってしまい大きすぎることがあった。
プルリクに画像を貼るときにはリサイズできたら便利・・・と思いリサイズ機能も付けてみた。
# 必要に応じてadbをexportする
DATETIME=$(date +%Y-%m%d-%H%M-%S)
DEVICE_FILE_PATH="/sdcard/${DATETIME}.png"
LOCAL_FILE_PATH="キャプチャを保存したいパス/${DATETIME}.png"
adb shell screencap -p ${DEVICE_FILE_PATH}
adb pull ${DEVICE_FILE_PATH} ${LOCAL_FILE_PATH}
adb shell rm -f "${DEVICE_FILE_PATH}"
# 引数が指定されていた場合、その引数の値にリサイズする
if [ $# -eq 1 ]; then
sips --resampleWidth $1 ${LOCAL_FILE_PATH}
fi
# AppleScriptでクリップボードにキャプチャをセット
osascript -e "set the clipboard to (read (POSIX file \"${LOCAL_FILE_PATH}\") as JPEG picture)"
sipsコマンドは、Macで画像処理ができるコマンドで、簡単にリサイズをすることができました。
これで、新しくresize_screencap.appをAppleScriptで作ればAlfredから選んで実行できるようになります。