がらぱっぱ

自分用覚え書き中心(モバイル関係中心だったはずが)

rootとらずに頑張ってみる その4 - 画面のハードコピーをとる(リベンジ編)

前回の「rootとらずに頑張ってみる その3 - 画面のハードコピーをとる」編は、あえなくホーム画面しかとれないってオチで終わってしまったわけですが、Home++アプリでホーム画面、ガラパゴズブラウザでブラウザの画面が撮れれば、もうそれでいいじゃん的な諦めがありました。


が、ありました、ありましたよ。
ありし日の気分(改) ScreenGrab
そのものずばり、root権限なしで端末単体でスクリーンショットを撮るアプリです。


権限がなくて撮れないスクリーンショットですが、ADB Shellから起動することでgraphicsの権限が付くことと、端末の/data/local/tmp/は実行形式のファイルを保存できる事を利用したある種裏技的なツールです。
そのため、通常のアプリのインストールとは少し手順が違います。

詳しくは作者さんのページを参照することとして、早速やってみました。
2011/01/06 adb installを使ったもっと簡単な方法に直しました

準備
やったこと

1.PCで作者ページからアプリをダウンロード(ZIP)
2.ZIPを展開(C:\Tempディレクトリに)→ScreenGrab.apkとgrabfbの2ファイルが出来る
3.ADB installでScreenGrab.apkをX06HTにインストール
4.grabfbをADB pushでX06HTの/data/local/tmp/にコピー
5.ADB shellでgrabfbの実行権限を付与
6.ADB shellでgrabfbをX06HTでバックグランド実行
3〜6の実行結果はこんな感じ(青字は入力)

C:\Temp>adb install ScreenGrab.apk
759 KB/s (96423 bytes in 0.124s)
        pkg: /data/local/tmp/ScreenGrab.apk
Success

C:\Temp>adb push grabfb /data/local/tmp/
599 KB/s (20242 bytes in 0.033s)

C:\Temp>adb shell
$ chmod 777 /data/local/tmp/grabfb
chmod 777 /data/local/tmp/grabfb
$ /data/local/tmp/grabfb &
/data/local/tmp/grabfb &
$ GrabFB version 1.0.20100830

framebuffer device was opend.
(widht, height) = (480, 800), bpp: 32 line_len: 1920
offset: 0 800
offset (r g b) = (0 8 16), len (r, g, b) = (8 8 8)
start listening

$ exit
exit

7.X06HTでScreenGrabを起動(タイマーはデフォルト5秒)
8.スクリーンショットを撮りたいところで、通知バーからScreenGrabを指定
9.5秒後にスクリーンショットが撮れる。

感想

すげーよこれ
こういった仕組みなので、端末の電源を落としたりすると、PCを使って再度grabfbを起動しなければならないのですが、2回目からはadb shellで
/data/local/tmp/grabfb &
と指定ればOK

要望

通知バーから起動だと、アプリによっては通知バーが出てこないのとかあるので、別の方法が出来ると完璧。
(どんな方法がいいのか良く分からないんだけど...)