見出し画像

Android実機とエミュレーターのスクショ/画面録画が簡単にできるツールadbeemを作った

Android開発をしていると、エミュレーターやUSB接続してる実機の画面録画やスクショをPCで取りたいことが日常的にあります。

PC側で画面録画をしてエミュレーターの画面録画をしたりとか、実機の方で録画やスクショして何かしらでPCに転送することもできますが、Androidの場合は Android Studioadb を使って画面録画できます🙋‍♂️

でも結構不便なんですよね。Android StudioはLogcatの部分でできるのですが、連続して色々な画面取りたい時に軽快性に欠けますし、何よりAndroid Studioを起動してない時にいちいち起動するのは面倒です(Flutter開発をVSCodeでしてる時とか)

adbは、Android Device Bridgeと言うCLIツールで、Android SDKをインストールするとついてきます。

パス通ってないので自分でパス通す必要はありますが、これを使えば画面録画もスクショもできます。ただ、こっちも画面録画した後PC側にpullしてくる必要があったりなどしてそのまま使うのは不便です。よしなに使えるようにシェルスクリプトを公開してくれている方もいますが、複数デバイスが検出された時に失敗したりなど、ちょっと不便性があります。

そこで、このadbコマンドをラップした、簡単につけるCLIコマンドツール「adbeem」を作りました😍

What is adbeem?

adbeemをインストールすれば、エミュレーターでも、USB接続してる実機でも、画面録画/スクリーンショットが取れます。

インストール方法はGo言語で書いているので、go getでインストール可能です。

go get github.com/yasukotelin/adbeem

内部的にadbを使っているので、使う前にadbにパスを通しておいてください🚀

使い方は簡単で、スクショならこう。

adbeem screencap

画面録画はこう

adbeem screenrecord

ファイル名が時刻から自動生成されて、コマンドを実行したパスに出力されます。ファイル名はこんな感じ adbeem-20200611010217.png

あるいは、自分の好きなパスに好きなファイル名で出力したい場合は、screencapでもscreenrecordでも--outputオプションを用意してるので指定可能です。

adbeem screencap -o ~/Desctop/adbeem-demo.png

ちなみに、マルチデバイス対応していて、複数エミュレーターや実機が接続されている場合は画面にセレクタが表示されて選択することができます(超便利!!

画像1

欠点は、名前がわかりづらいこと。。adbから取れる端末名、もうちょっとちゃんとしたの取れるのかな。。?

開発側のこと

ここからはadbとGo周りの実装時の雑談。

adbeemはGo言語で書かれています。処理的にはadbを実行しているだけなので、さくっと楽しく作れたのですが、ハマったところもありました。

adbeemで画面録画する時は実際にはこのコマンドを実行しているのですが、

adb -s [device id] shell screenrecord /sdcard/[filename].mp4

画面録画を停止するのにCtrl + Cを入力します。ターミナルで停止させるいつものやつです。

このCtrl + Cはプロセスに割り込みのシグナルを送っているので、停止処理はこう実装しています。

// Send to stop process signal
cmd.Process.Signal(syscall.SIGINT)

実行してるcmdのプロセスに対してシグナルを送れるんですね。syscall.SIGINTがCTRL + Cのシグナルです。勉強になりました。

あとは、画面録画を停止した後に、デバイスから adb pull コマンドを使ってPC側に持ってきているのですが、画面録画の場合はどうしても正常にmp4をpullしてくることができませんでした。

でもデバイス内で確認するとちゃんと撮れてる。。pullしてくるとファイルが壊れている、と言う状態です。

これはadbを使って録画するシェルスクリプトを書いている人たちのコードを参考にしました。

adb shell psコマンドでプロセス一覧を取得して、そこにまだscreenrecordプロセスがある場合はまだ完全に停止していないようです。停止のシグナルを送信しても終了処理が走ってるんですね。

whileループでプロセスを監視して、本当に停止したらadb pullをするようにしたら見事綺麗に取れました!笑

さいごに(今後の機能)

今は画面録画とスクリーンショットの機能しかありませんが、adbを使っているうちに、これそのままだと使いにくいな?と言う機会があればこのadbeemに機能が追加されるかもしれません。

今のところは予定ないですけどね。

adbeem作ってからスクショとかがめちゃくちゃやりやすくなったので、便利に使ってくれる人がいたら嬉しいですね🤗

この記事が気に入ったらサポートをしてみませんか?