Androidのスクショ取得効率化

# 発端
最近は社内で業務用アプリを書いています。
エンプラエンプラしたアプリなのでドキュメントもしっかりめに書かないといけないのですが、スクショの取得が煩わしく…。
微妙に自動化して効率化をしたので、手順を残しておこうと思います。

> エンプラエンプラしたアプリなのでドキュメントもしっかりめに書かないといけない

**（´-`）.｡oO（「直感的なUI」なんて言っても通じないとき・場所もあるのです…。）**

(世の中にはスクショ取得を自動でしてくれるソリューションも存在しますが…
諸事情にて実機で手で操作しながらキャプチャしないといけないので、本手段を用いています。)

## ついでに
あとは通知バーに表示されている余計なアイコンとかも気になっちゃうので消したいですよね。
個人的なこだわりで時計も12:34にしたかったり…。(エミュレータはadbコマンドで時刻設定できるんですけどね…)

# 手順
## 環境
- 開発に使用しているマシン
    - MacOS
    - [brew](https://brew.sh/)とbashを使います
- Android端末
    - adb接続できればエミュレータ可

## 準備

大変アナログですが :sweat: 
こういった、いい感じのコンディションの通知バーの画像を切り取って任意ディレクトリに設置します。
`~/hoge/1234.png`
![1234.png](https://qiita-image-store.s3.amazonaws.com/0/147191/adae5949-fda6-6c82-1282-ebd72528a639.png)



コマンドラインから画像の加工ができるImageMagicをインストールします。

```bash:コマンドライン
$ brew install imagemagick
```

続いて任意ディレクトリに下記スクリプトを設置します。

```bash:~/hoge/screen_cap.sh
#!/bin/bash
timestamp=$(date +"%Y%m%d%I%M%S")
adb shell screencap -p /sdcard/${timestamp}.png
adb pull /sdcard/${timestamp}.png
adb shell rm /sdcard/${timestamp}.png
```

```bash:~/hoge/composite.sh
#!/bin/bash
for file in `find . -iname '*.png' -maxdepth 1 -type f`; do
    composite -gravity northeast -compose over ~/hoge/1234.png $file $file;
done
```

**※ 実行権限付与を忘れないように**

```bash:コマンドライン
$ chmod +x ~/hoge/screen_cap.sh
$ chmod +x ~/hoge/composite.sh
```

OK!

## 実践!

### スクショをいっぱい撮る!

```bash:コマンドライン
$ ~/hoge/screen_cap.sh
/sdcard/20171019125624.png: 1 file pulled. 6.1 MB/s (57800 bytes in 0.009s)

$ ~/hoge/screen_cap.sh
/sdcard/20171019125626.png: 1 file pulled. 6.2 MB/s (57800 bytes in 0.009s)

$ ~/hoge/screen_cap.sh
/sdcard/20171019125627.png: 1 file pulled. 6.3 MB/s (57800 bytes in 0.009s)

...

```
カレントディレクトリにキャプチャ画像が転がっていきます。


### 合成する!
**※ カレントディレクトリにある全ての `.png` 形式の画像に変更を加える操作です。影響範囲に注意してください。**

```bash:コマンドライン
$ ~/hoge/composite.sh
```

### 結果を見てみる!

(`open` コマンドを使うと簡単にカレントディレクトリをFinderで開けます)

```bash:コマンドライン
$ open ./
```

こんな感じで一括合成できました!
![open_in_finder.png](https://qiita-image-store.s3.amazonaws.com/0/147191/a78b0c56-ccda-393e-707d-4406a2ae7dbe.png)

## おまけ
### おまけ 1
そもそもキャプチャが面倒なときは…

`watch` コマンドをインストールして…

```bash:コマンドライン
$ brew install watch
```

キャプチャを定期実行…といった乱暴なこともできます。

```bash:コマンドライン
$ watch -n 0.5 bash ~/hoge/screen_cap.sh
```
※ `watch -n` の引数はsec.

### おまけ 2

ImageMagicは便利だぞっ!なんでもデキるぞっ!

SlackとかGitHubのコメントにそのまま貼ると怒られるので、サクッとサイズ変更も♪

```bash:コマンドライン
# 縦横px指定
$ mogrify -geometry 720x1280 *.png
  
# 横px指定
$ mogrify -geometry 720 *.png # 縦は比率を保つように自動調整される
  
# 縦横%指定
$ mogrify -geometry 50%x100% *.png # 縦を保ったまま横を50%に圧縮
  
# 横%指定
$ mogrify -geometry 50% *.png # 縦横比率を保ったまま50%に圧縮
# ※ mogrify は composite よりも柔軟に、複数ファイル一括処理を行うことができる
 
# 最近はモウ疲れてきたのでこうしている. ~/.bash_profile  あたりに入れておくと便利ね.
$ alias im50='mogrify -geometry 50%'
```

### おまけ 3

Android StudioのLogCatで動画キャプチャするのも地味に面倒なので…

```bash:~/hoge/screen_record.sh
#!/bin/bash
timestamp=$(date +"%Y%m%d%I%M%S")
adb shell screenrecord /sdcard/${timestamp}.mp4

# NOTE: 待たなくても特に問題なさそう
# echo Wait for saving...
# sleep 5s

adb pull /sdcard/${timestamp}.mp4
adb shell rm /sdcard/${timestamp}.mp4
```

```bash:コマンドライン
$ ~/hoge/screen_record.sh
# 上限時間になったら自動で終了する
# 任意タイミングで終了したい場合は ^\ でプロセスを終了する(以降の転送等の処理が行われなくてもいいなら ^C も可)
```

## おわり

自分の条件にあった適度な効率化を行いましょう :muscle_tone1: 

以上です。