2010-06-07(月) [長年日記]
■ Android SDKでHTC Desireのスクリーンショットを撮る
WWDC基調講演を待ってるのも暇なので(←うそ。日付がかわってすぐに寝た)、Androidのスクリーンショットを撮れるようにした。端末単体でスクリーンショットが撮れないのは、Android最大の失策だと思うね、ホント。
開発をするならEclipseとかも必要なんだろうけど、今回はスクリーンショットを撮るだけなので、Javaの実行環境だけが必要。ま、普通はOOo入れるついでにJREがどこかに入ってるだろう(そうかぁ?)。
続いてAndroid SDKから最新のSDKをダウンロードしてzipを展開。いかにもな感じの「SDK Setup.exe」が出てくるけど、別にセットアップしなくても使えるのでここはスルー*1。toolsの下にあるデバッグ環境「ddms.bat」が目的のファイルである。
そのまま実行しても一瞬ウィンドウが出て終わるだけかも知れないが、それはたぶんJavaの実行環境が見つかってない。ddms.batをメモ帳あたりで開いて、「set java_exe=」を見つけ、そこにjava.exeのパスを書けばいいようだ。ウチのWindows7 64bit版の場合:
set java_exe=C:\Program Files (x86)\Java\jre6\bin\java.exe
で、実行するとDelvik Debug Monitorというウィンドウが立ち上がる*2ので、DesireをUSBでPCに接続。モードは「HTC Sync」。同期を始めようとするけど、Backボタンで中止させる。さっきのDelvik Debug Monitorには、接続されたデバイスが認識されているはず。
あとはCtrl+Sを押せばキャプチャウィンドウが開くので、Saveするなりなんなり好きなように。PNGフォーマットでスクリーンショットが撮れる。いやはや、これはハードル高いなぁ。
screenshotを撮れないようにしているのはセキュリティ上の理由だそうですよ。
http://phandroid.com/2010/05/25/take-screenshots-on-the-htc-evo-4g-without-the-need-to-root/ のコメント6参照
iPhoneではアプリに審査が入るので、セキュリティ上の問題は無いと(建前上は)言えそうです。
スクリーンショットを保存する前にユーザの確認を得るようにすればいいだけの話なので、その理由は説得力ないと思いますけど。
> スクリーンショットを保存する前にユーザの確認を得るようにすればいいだけの話
いや、そんなに簡単な話でもないと思いますよ。
スクリーンショットを撮れるようなAPIをユーザ向けに提供するなら、保存確認ダイアログを表示するというやり方はアプリケーションの設計に影響を与えるでしょうし、そのコードに相応のアクセス権をプラットフォームのcore APIのレベルで設定して、かつそれが悪用されないように何らかのセーフガードを付けなければならないということでもあるでしょう。APIを解放しないにしても、少なくとも /dev/graphics/fb0 を無制限に解放したら、懸念されている通りのセキュリティホールにはなるでしょう。
実現できないとは思いませんが、汎用的な解にならないので、面倒だけどSDK経由で最低限の方法を提供している、というのが現状なのだろう、とわたしは理解しています。
HTC EVO 4Gなどでnon-rootedなsshotが撮れるようになっているのは興味深いところですけどね。
いろいろ考慮しなくてはならないのはわかりますが、まさにatsushienoさんが書かれているとおり「実現できないとは思えない」ので、やるべきだ、というのが私の持論です。iPhoneを追撃しなければいけないAndroid陣営にとって、スクリーンショットとアプリへのPermalinkがない状況は、(技術的にではなくマーケティング的に)ありえないと思います。
まさしくスクリーンショットまわりで HTC Sense の脆弱性が発見されてますね。
http://www.tomsguide.com/us/Google-Droid-Incredible-Sense-UI,news-7118.html
記事ではIncredibleにみつかったといってるけど、Sense で実装されてるってことは他の HTC 端末でも同様なきがしますが。
bookmark_thumb1はブラウザのブックマークのためのスクリーンショットが入っているディレクトリなので、なんでこれがSense UIのセキュリティホールと書かれているのかよくわかんないな。もしブラウザに閉じた問題なら、このエントリで論じているような汎用的なスクリーンショットとは無関係だと思います(この問題の影響は大きいと思いますけど)。
ファクトリーリセットしても消えないところに保存されているので、人にあげたり中古で売ったりしたら全部(かどうかしりませんけど)ブラウズの履歴とかメールアドレスとか(screenshotにうつってれば)ばれちゃいますよ、ってことじゃないですかね。
それとも、なんでSense UIの問題かわからないってことですかね? " this feature is related to the HTC Sense UI bookmark widget." だから HTC が Sense UI のために拡張した機能だから、ってことですかね。。ま、記事でもブックマーク用にサムネイルをつくる機能単体には問題がない、ってかいてますけど。
ああ、そういうことですか。Desireしか知らないから、あのブックマークがHTCの独自拡張とは知りませんでした。
でもDesireでは当該ディレクトリはSDカード上にできるので、問題はないということなのかな。どのアプリからも見えちゃうから、悪意のあるアプリがサムネイルをネットにばらまくかも知れないというリスクはありますが。