T-01Cでスクリーンショットを撮る(ScreenGrab使用)

いよいよ

明日待望のSleipnir Mobile for Androidが公開される予定です。
フェンリルCEOのツイートによれば午前中にMac版はフェンリルのサイトで、Android版はAndroid Marketで公開だそう。

私も楽しみです。明日、午前中の予定です。

http://twitter.com/kazushi_makino/status/88778930915508225

android版はandroidマーケットで公開します。Mac版はフェンリルのサイトで公開します。

http://twitter.com/kazushi_makino/status/88786870917545984

もちろんブログで記事にする予定なんですが、そのために必要なのはスクリーンショットが必要ですよね。
デフォルトのAndroidではスクリーンショットを撮る手段が無いわけでして、少しばかり手間掛けて環境作っておく必要があるわけで、百番煎じ、千番煎じなそれを今更ながらにブログネタにしようかなと。*1


まず、スクリーンショットを撮る一般的な方法は2つです。

  1. SDKを使って撮る
  2. root化してアプリで撮る

このどちらもにメリット・デメリットがあるわけですね。


今回はそのどちらでも無い方法で行きたいと思います。
ScreenGrabという野良アプリを使います。
T-01Cでのスクショには問題あったんですけど、先日ちょうどタイミング良く解決したみたいだしね。
※実はSDKで撮れる環境自体は以前に用意していたのですが、その際に嵌った部分もあったので備忘録代わりでもあります。
※基本的な流れはあっていますが、何分記憶と他のブログなどを参考に書いているので、間違った箇所がある鴨。てか、流れだけ見て詳しいところは参考ページなどでって感じでやってくれた方が良いかw
※あと、Windows 7 x64準拠で書いています。

スクリーンショットの撮り方

1.T-01C USBドライバのインストール
先述の何に嵌ったかって、実はこれですw
普通にPCと繋げて自動で入れられるドライバで、ファイルの移動は出来てたもんで気づかなかったからですww
さらに、ドライバ削除して入れようとして更に嵌ってましたwww

公式サイトから、ドライバファイルをダウンロード後分かりやすい場所に解凍してください。
T-01C側のホームでメニューボタンを押して「設定>アプリケーション>開発>USBデバッグ」にチェックを入れ、PCにUSB接続をします。
この時点でドライバ選択が可能であれば、解凍したドライバを入れてば問題なく次に行けるんですけど、多分ダメでしょう。
おそらくUSBストレージとして認識されてしまうので、「デバイスマネージャー」を開き「ディスク ドライブ>Toshiba Mass Storage USB Device」「ユニバーサル シリアル バス コントローラー>USB 大容量記憶装置」*2のドライバを削除します。
USBを一度抜いて、再度挿します。
今度は一部のドライバがインストールされないはずなので「デバイスマネージャー」で「!」のデバイスを探して、「ドライバソフトウェアの更新」を選び、先ほど解凍したドライバを選択してインストールさせる。
Android Phone>Android Composite ADB Interface」と認識されていればおk。

参考ページ:
REGZA Phone T-01Cでスクリーンショットを撮る。 - 笑うデカトンケイル
おとうさんのつれづれレグザフォン: レグザフォンでスクリーンショットを撮る方法は大変なんだなぁ…。(docomo Regza Phone T-01C)


2.Android SDKのインストール
まず、JavaJDK(Java開発キット)が必要です。普通の人はJRE(Java 実行環境)だけしか入れてないはずなので、ダウンロードしてインストールしてください。*3 *4
次に、Android DevelopersからAndroid SDKをダウンロードしましょう。
特に拘りが無ければ"installer_r11-windows.exe"で良いでしょう。*5
※"r11"とは執筆時のリビジョンナンバーです。時間が経てば多分、変わります。
ダウンロードしたらダブルクリックしてインストールを開始してください。*6
インストールが完了したらチェックしたまま「Finish」してください「Android SDK Manager」が起動します。
Android SDK Manager」の初回起動時にはインストールするコンポーネント選択が出来ます。
必要なのは「Android SDK Platdorm-tools」だけみたいなんですけど、よく分からなければ「Accept All」で全部入れちゃえばイインダヨー*7
インストールの最後のあたりで「adb restart〜」って聞かれますけど「YES」しちゃってください。

参考ページ:
Android SDKをインストールしてエミュレータを準備 [ホームページ作成] All About
【初心者向け】Android SDKインストール手順 2011年1月版!(windows版) | smartgoods.me


3.PATHを通す
wikipedia:環境変数の一種です。詳しくは自分で調べてね。
"adb.exe"のあるフォルダまでPATHを通してください。*8
うっかりミスして他の消しちゃったりすると大変なんで、Rapid Environment Editorの使用をオススメしときます。

  1. インストール後管理者として実行し、「Language」のセレクトボックスから「Japanese」を選択し日本語化します。
  2. 「システム変数」欄から「Path=」で始まっている変数を選択し、右クリックのコンテキストメニューから「値の追加」を選択します。
  3. 入力状態になるので、通したいパスを入力してください。*9
  4. 保存する。

※自力でやる場合は自分でやり方調べて細心の注意を払ってやってね。
環境変数の長さには制限があったりするので、環境によってはとおらない場合もあったりします。*10


SDKスクリーンショットを撮る
ここまでの時点*11SDKでのスクリーンショットは撮れたりします。
AndroidをデバックモードでPCに接続している状態で「ファイル名を指定して実行」に「ddms」と入力し暫く待てば、「Dalvik Debug Monitor」が立ち上がります。
正しく繋がっていれば左側の「Name」欄に端末の名前がありその隣の欄に「Online」とあるはずです。
この状態で「Device>Screen capture...」または「Ctrl+s」でスクリーンをキャプチャできます。


4.ScreenGrabインストール
ありし日の気分(改)(2011-06-28)のバージョン1.5が執筆時最新です。
タイトルのところがリンクなのでそこからダウンロードしてください。
この版だけなぜかzipじゃなく「ScreenGrab_20110628.tar.gz」となっています。
解凍していきますと"ScreenGrab.apk"と"grabfb"が出てきます。
"ScreenGrab.apk"の方は端末側に移してインストールしてください。
"grabfb"は分かりやすい場所に置いてください。(解凍した場所にそのままでもおkです)


5.grabfbインストール
次にPCとT-01Cを接続したまま、コマンドプロンプトを立ち上げて、"grabfb"があるフォルダに移動します。

>cd c:\hoge\fuga

みたいな感じで。
なお、違うドライブにある場合は

>cd /d d:\foo\bar

な感じですね。*12

そして、以下のコマンドを入力してください。

adb push grabfb /data/local/tmp/

すると成功すると次のように出力されます。

370 KB/s (20242 bytes in 0.053s)

※数字は異なっていても問題ありません。実際、私も上記とは異なる数字が出たのですがメモっとくのを忘れていました。
※エラーなどが出た場合はこれまでのどこかで作業を間違っているはずです。
上記の操作によって"grabfb"がT-01Cに格納されました。

adb shell

このコマンドによってT-01C側での作業になるみたいです。

chmod 777 /data/local/tmp/grabfb

アクセス権限の変更をします。*13

/data/local/tmp/grabfb &

バックグラウンドで実行します。*14
成功すると以下の様に出力されます。

$ GrabFB version 1.1

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

これで設定完了です。
あとは、PCとの接続を外してT-01C単体でスクリーンショットの撮影が可能になります。
コマンドプロンプトも終了して構いません。

※ただし、T-01Cを再起動した場合には"grabfb"を起動させる必要があるので、再度PCに接続して以下のコマンドを入力しなければなりません。

adb shell
/data/local/tmp/grabfb &

参考ページ:
ありし日の気分(改)(2010-09-01)
ScreenGrab〜Android端末単体でスクショを | ちえの気ままログ


6.スクリーンショットを撮る

ScreenGrabのショートカットアイコンはこんな感じ。


ScreenGrabを起動させると設定画面が表示されます。
スクリーンショットまでの秒数*15、画像保存形式、RGBの設定*16が可能です。


「OK」を押すとステータスバーにScreenGrabが表示されます。


通知を開いて、ScreenGrabをタップします。


指定時間後にスクリーンショットを撮ったというメッセージが表示されます。*17


スクリーンショットが撮られた後に再び通知から開くと、撮影結果が表示されます。
なお、この結果を見たタイミングで画像がファイルとして描き出される模様です。
ちなみに、デフォルト設定ではT-01Cを始めとする一部端末で色がおかしくなります。
そんな場合は設定の「little endian」にチェックを入れて撮影するようにしてください。


「little endian」にチェックをしてキャプチャすると、こんな風に正しい色で撮影できます。


ちなみに撮影した画像の保存場所は「/mnt/sdcard/DCIM/Screen」になります。


7.おまけ
[Optimus_Report]Android単体でrootを取らずにスクリーンショットを撮影する「ScreenGrab」をOptimus chat L-04Cで試す | memn0ck.comによると
Android Terminal Emulatorを使えば

/data/local/tmp/grabfb &

端末側だけで"grabfb"を起動できるみたいなんですが、うちの環境だと失敗しました。
この辺詳しい人ご教授ください><

*1:といっても割りと最近なネタも入れてますが

*2:複数ある場合があるから、事前にプロパティから場所メモっとく方が良いかも。私は一旦全部消したけどw

*3:OSが64ビットの場合は64ビット用入れる派と32ビット用入れる派が居たりするんですが、まぁ64ビット用でおkかな。まぁ、私は両方入れてるんですけど

*4:インストールしてなかったりするとSDKインストール時にチェックして教えてくれます

*5:私は"android-sdk_r11-windows.zip"使いましたけど

*6:できれば、デフォルトじゃなくて浅い階層に作ったほうが良い気がする。理由は後述

*7:全部入りにしたりすると結構な時間と2.6Gくらいディスクサイズが必要になります

*8:ちなみにWin7 x64にインストーラでデフォ位置に入れたなら"C:\Program files (x86)\Android\"android-sdk-windows\platform-tools"になるかな。※カッコは半角

*9:入力後にできれば、後ろの方に持っていってください

*10:参考:Windows 2000 および Windows NT で新しい環境変数を手動で追加すると、プログラムが起動せず、パスが切り捨てられることがあるを読むと少なくともXPにも制限あり。Vista、7がどうなのかは調べてない

*11:多分正確には2の終わりの時点かな

*12:【 cd 】 ディレクトリを移動する - Linuxコマンド集:ITpro

*13:【 chmod 】 ファイルやディレクトリのアクセス権を変更する - Linuxコマンド集:ITpro

*14:【 & 】 コマンドをバックグラウンドで実行する - Linuxコマンド集:ITpro

*15:デフォルトでは「1sec.」とありますが実際は「5sec.」の間違いみたいです

*16:後述

*17:このn秒前に前に「ScreenGrab: n sec.」というメッセージ表示もされます。"n"は最大"3"