|
昨日のカウンタ: 今日のカウンタ: |
root権限なしで、スクリーンショットを撮るアプリです。とは言っても、インストール方法が煩雑で、標準的ではないので、Android Marketには載せずにこちらだけで配布します。こちらからZIPファイルをダウンロードして、適当なディレクトリで解凍すると、「ScreenGrab.apk」と「grabfb」という二つのファイルが確認できるかと思います。前者は普通のAPKファイルですので、Android端末本体のサードパーティのアプリのインストールに許可を出しておけばインストールできます。インストールしておいて下さい。ただ、これだけでは動きません。
grabfbの方はちょっとやっかいです。Android SDKをインストールしてコマンドラインから以下の作業を行います。以下はMacで作業しましたが、Windowsでも同じはずです。
先ずは端末本体の設定で、USBデバッグを有効にした上で、Android SDKをインストールしたパソコンへUSBで接続し、ターミナル内で、展開したgrabfbのあるディレクトリへ移動し、以下を入力します。
adb push grabfb /data/local/tmp/
ここでエラーがなければ次のような表示があるでしょう。
370 KB/s (20242 bytes in 0.053s)
ちょっと数字が違うだけなら気にしなくて大丈夫です。これでバイナリファイルgrabfbは端末内の「/data/local/tmp/」へ格納されています。*1 次に以下を入力します。
adb shell
ここでプロンプトが変化し、Android端末の中での作業に入ります。このままでは実行許可が与えられていませんので、次のように入力して実行許可を付加します。
chmod 777 /data/local/tmp/grabfb
最後に次を入力するとgrabfbが起動します。
/data/local/tmp/grabfb &
起動に成功すると次のようなメッセージが表示されるはずです。
GrabFB version 1.0.20100830 framebuffer device was opend. (widht, height) = (320, 480), bpp: 16 line_len: 640 offset: 0 0 offset (r g b) = (11 5 0), len (r, g, b) = (5 6 5) start listening
あとはUSBケーブルを抜いても大丈夫です。ScreenGrabアプリを起動して、スクリーンショットが起動するまでの時間と、保存形式(JPEG/PNG)だけを選択して「OK」ボタンを押します。それからスクリーンショットを撮りたい場面になったら、通知バーからScreenGrabのアイコンを選択すれば、事前に指定した時間後に保存形式で画像がSDカードに保存されます。
ただ、電池切れなどの理由で再起動した場合にはgrabfbが起動していないので、その場合にはまたUSBでパソコンに繋いで
adb shell /data/local/tmp/grabfb &
を入力しないと動きません。ちょっとここが残念ですが、root権限なしでも動くので勘弁してやって下さい。
*1 このディレクトリなら、どの端末でも実行形式のファイルを保存できる旨は、つ部のみずのさんに教えてもらいました。
androidのshellユーザの権限では、/dev/graphics/fb0(アクセス権限はroot.graphicsで660(rw-rw----))の読み取りはできないと思うのですが、一体どのような仕組みでキャプチャを実現されているのでしょうか?
adb shellからのshにはgraphicsのGIDがついてるようですよ。
zygoteさんが AndroidManifest.xml の <uses-permission> に従って secondary GID をプロセスに付与してくれるんですよね? /system/etc/permissions/platform.xml を見るとshellユーザは殆どの権限付与してくれるみたい...
ほほう。そうなんですか。zygoteよく知らないんですが、上の層にあるinitプロセスみたいなもんなんでしょうか。/etc/permissions/platform.xmlの存在についてはつ部のLTでもちょっと話したのですが、よく理解できてませんでした。
ここ掘り下げるとちょっと面白そうですね。ありがとうございます。
解説どうもありがとうございます。
Zygoteが<uses-permission>をみてsecondary GIDを付与してくれるのは知っていたのですが、shellユーザにはほとんどの権限を付与してくれるとは。。。/system/etc/permissions/platform.xmlは要チェックですね。
root化でgrabfbの自動起動は出来ませんかね?
自動起動できるでしょうが、メリットが感じられなくて。。。rootとってるなら、他のスクリーンショットアプリもありますので。
別アプリからintent飛ばして撮影、なんてことはできないのでしょうか。
このアプリをIntent経由で起動して同時に撮影って動くようにできると思いますが、どう使えばいいのかよく見えません。
Softbank 003shでgrabfbを使用させて頂きましたが、(jpeg,png共に)赤みがかった画像が保存されるのですが、何が問題でしょうか?
よろしければアドバイスをお願いいたします。
因みにgrabfb起動後のメッセージは下記です。
----------
framebuffer device was opend.
(widht, height) = (480, 800), bpp: 32 line_len: 1920
offset: 0 800
offset (r g b) = (24 16 8), len (r, g, b) = (8 8 8)
start listening
001HT(SoftBank)の場合だとScreenGrabが強制終了します。grabfbの起動は成功しています。何か対策があれば…。
>003sh_Userさん
なるほど。ちょっとすぐにはわからないのですが、grabfb側のバグでしょうか。確認してみます。もし良かったら/sdcard/framebuffer.rawにあるファイルをどこかにアップロードして頂けませんでしょうか。
>001HT_Userさん
そうなのですか。もう少しメッセージの内容などの情報を頂けると助かるのですが…
ファイルを下記にアップしました。(Pass:grabfb)
お手数ですがよろしくお願いします。
ttp://u12.getuploader.com/sb-iphone/download/192/framebuffer.raw
こちらが、キャプチャした画面(赤色)です。
ttp://u12.getuploader.com/sb-iphone/download/193/20110105-014210.jpg
こんにちは。
Xperiaで快適に利用させていただいてます。
X06HT2(2.2up)に手順通りインストールしたあと起動すると、強制終了されます。
コマンドプロンプトには
「framebuffer device was opend.
file open error.」
と表示されます。
なにか対策などあれば・・・
す、すみません・・・解決しました。
PCにインストールした後、PCに繋いだ際にメモリーカードモードにしてました(^^;
REGZA Phone T-01Cでは、003sh_Userとは違って、
キャプチャ画面の本来赤い部分が青っぽく、
青い部分が赤っぽくと、入れ替わって表示されてしまうようです
BGの値を入れ替えたところ、正常な画面になりました
ほほう。なるほど。ありがとうございます。ちょっとその辺りのビットシフトの辺りの処理を見直してみます。
T-01C Userさんどのような手順で値を入れ替えたのでしょうか?
検索で見つけてここへ来ました。T-01Cを使用していて便利なアプリということで試させていただいたのですが、T-01C Userさんと同じく、キャプチャ自体はできるものの、全体的に青と赤が反転したような感じになってしまいます。Photoshopのような画像編集ソフトで赤と青の色調を調整すれば正常な色で表示されるのですが…。これだと端末単体でのキャプチャではなくなってしまうので…。何とかならないでしょうか…。
ど素人ながら、何時間もかけて苦労して起動までこぎつけました・・・(汗)。003sh_Userさんと同じく、赤みがかった画像が保存されます。とっても便利なアプリなので、これを改善していただければ、最強です!!よろしくお願いします
私も、やっとキャプできたと思ったら画像が赤いんですよね。
003SH使用です。
同じ症状ですか。。。実機がないので一度ソースを見直します。
IS03では普通に使えるようです。
ただ、設定が保存できるようにしていただけませんでしょうか。
1秒pngの設定を使っているので…
もしくはソースがあれば修正できるのですが
rootを取ってしまったものの、systemが変更できないのでこのアプリに落ち着きそうです
私はsimフリー版desireS,os2.33ですが正しくキャプチャすることができました。ありがとうございます。
T-01C(2.2)で試したところ、全体が青みがかっていました。またPhotoshopで見た所、赤のチャンネルが真っ黒で欠落している様でした。
fb0をcatしてIrfanViewで開いたところ、32BPPでRGBAのColor oderで正しく表示されました。ABGRではScreenGrabと同じ結果になりました。
バイナリエディタで見た所、1byte毎にR G B A R G B A....と格納されていました。
以下、起動時のメッセージです。
------------------------------------------------------
framebuffer device was opend.
(widht, 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)
start listening
なるほど。非常に参考になります。時間作ってコード直してみます!>takumiさん
色とかは今回の修正で直りましたでしょうか? あとは、設定の保存ですね。こっちも近い内に。。。
こんにちは。
最新版、なお色が青くなります。。
RGBの設定をご教授頂ければ幸いです。
よろしくお願いいたします!
いつもお世話になっています。
IS04で最新版は、やはり青くなりますね…
>ジョージさん
どもですー。赤と青入れ換えてもダメですか?
赤と青を入れ換えると緑っぽい感じで保存されますね(;´Д`)
あらら、入れ替える要素が違ったんですかね。。。
もうこうなれば自由に入れ替えられるようにするしかないのかしらん。。。
一応IS04での起動時のメッセージを書きこんでおきます。
---------------
framebuffer device was opend.
(widht, height) = (480, 854), bpp: 32 line_len: 1920
offset: 0 0
offset (r g b) = (24 16 8), len (r, g, b) = (8 8 8)
start listening
---------------
REGZAなのでT-01Cと同じ感じですね
色設定期待です!
是非ともよろしくお願いします!
どうも機種によって
・RGBの順序(screenshotというアプリでオプション指定あり)
・エンディアン(Drocap2というアプリでオプション指定あり)
の差異があるようです。
この辺を組み込んで、あとはユーザ丸投げでいかがでしょうか?
エンディアン。。。。 そういう可能性は考えてなかったです。。。
なるほど。。。。 orz
最新版ですがDesireHD2.3で
ブラウザ起動してる時とかたまに強制終了する
再起動時とかに1minとかの設定を保存してほしい
こんにちは
自分も1.5を導入させてもらって、Little endianにチェックを入れたのですが、スクリーンショットが赤かったです。
だけど、その後携帯の電源を入れ直しし、再利用できるようコマンドを入力した後には、正常な色でスクリーンショットが保存されていました。
もちろん Little endian にはチェックしておきます。
参考までに。
便利につかわせてもらってます。
adb shell ではなく terminal emulator から grabfb を起動出来ればと思い試してみました。
framebuffer device was opend. とは表示されますが、その後エラーが出ます。
adb shellの権限が特殊なのか、grabfb側で対応可能であれば母機が無くても
使えるかなと思い書き込んで見ます。
お時間のあるときに調べて頂ければ幸いです。