Android、Java、Web系、Linux、マラソン等の備忘録

2013/12/23

Androidのlogcatで遊ぶ

0 件のコメント

経緯

マルチモニタ厨としてはメインで使っているWindowsマシンを二画面にしており、Eclipseのウィンドウ2枚をそれぞれ置いて作業しているわけですが、片方をLogcat専用にしてデバッグしたり、
  • ソース編集(Eclipse) + ソース閲覧(Eclipse)
  • ソース編集(Eclipse) + ブラウザ
のような組み合わせでも作業したりで、いちいち切り替えるも面倒でログ専用にもう一枚画面が欲しいところです。その傍らに、Googleカレンダーなどを表示したり、定期スクリプトを動かしたりしているUbuntuがあり、Ubuntuの端末はフォントも綺麗なので、どうにかここでtail -fで表示できたらなと思った次第です。

環境

  • Windows 7
  • Ubuntu 12.04
  • 初代Nexux 7 Android 4.3

WindowsマシンのlogcatをUbuntuへ

まぁ、以降はUbuntuメインでやれって話ですが、上記経緯のような環境ということで。WindowsのlogcatをUbuntuに表示してみたいと思います。

Windows⇒Ubuntu連携

特にUbuntuへsambaを入れなくても共有できた気がします(忘れました)。Ubuntuの画面でホームフォルダーを起動してフォルダ上で右クリック、「共有のオプション」の設定で同LAN内のWindowsから見えるようになった気がします。Windowsでは、ネットワークドライブの割り当てでSドライブに割り当てました。

次に、WindowsのAndroid SDKが入っているディレクトリへ移動し、adb.exeが入っているplatform-toolsディレクトリでコマンドプロンプトを開きます。そこで、先ほど割り当てたSドライブへログを流すべく
adb logcat > S:\androidlogcat.log
とコマンドを打ちます。そうすると、logcatの内容がandroidlogcat.logへ吐かれ続けます。それをUbuntuの端末で

tail -f androidlogcat.log

と実行すると、Windowsのlogcatで流れるものと同じものがUbuntuに表示されます。

だがしかし見辛い!

ログを装飾する

Eclipseのlogcatは色分けやapplication、タグなどで列が別れているGUIなので見やすいですが、Ubuntu側は整列されていないログのテキストが表示され続けています。まあ、サイバーな感じを味わうだけならそれでいいですが、ログとして見るには見づらいです。

検索すると、ありがたいpythonスクリプトが公開されています。
Jeff Sharkey » Modifying the Android logcat stream for full-color debugging
http://jsharkey.org/blog/2009/04/22/modifying-the-android-logcat-stream-for-full-color-debugging/
上記URLの「here’s the source code」のリンクからpythonスクリプトをダウンロードしてandroidlogcat.logと同じところ(Sドライブ)へ保存します。Ubuntuの端末から
tail -f androidlogcat.log | python -m coloredlogcat.py

とコマンドを打つととても見やすくなります。
写真写りはアレですが、端末をフルスクリーン表示などすると見た目はなかなか良いです。


自分のアプリのログに色を付ける

以下で色を付けられるのは、左の列のタグの部分だけですが、pythonスクリプトをいじります。coloredlogcat.pyをテキストエディタで開きます。62行目あたりにKNOWN_TAGSがあるので、そこに自分のアプリが吐くlogcatのタグ名と色を追加します。

PageCommentatorというタグが黄色くなるよう追加したところ

タグ名にドット(例えば、net.takaiwa.PageCommentatorのようなパッケージをタグ名にしたようなの)とか入ってるとうまく機能しないようです。

詳しくログを追うのは、Eclipseのlogcatビューの方が良いでしょうが、今何が動いてるのか、ぱっと見るのには良いのではないでしょうか。あと、サイバーな感じがして良いと思います。サイバー感をだすには、Ubuntuの端末は青っぽい背景が良いでしょうが。

ログからキーワードにヒットしたら音を鳴らす

音を鳴らすならEclipseに何かプラグインを実装するのが理想的なのかもしれませんが、作ったことありませんし、logcatをtail -fで拾えるようになったことでいろいろできそうです。(以下、Ubuntuのコマンド)

まず、適当にwavファイルを用意します。ここでは、se.wavというファイル名のものを使います。

aplay se.wav

というコマンドで音が鳴ります。tail -f を任意のキーワードで引っかけるには、

tail -f androidlogcat.log | grep --line-buffered "Waking"

キーワードは"Waiking"です。これは、実機(ここではNexus 7初代)などを接続している場合、実機の電源ボタンを押すと、ログが表示されます。上記2つのコマンドを組み合わせて、

tail -f androidlogcat.log | grep --line-buffered "Waking" | while read line; do aplay ./se.wav ; echo $line ; done

これで、実機の電源ボタンを押すたびに音が鳴るようになります。このままでは実用性に欠けますが、以下のようにしてみましょう。

インストール/アンインストール完了で音を鳴らす

初代Nexus 7などは、アプリのインストール/アンインストールにやたら時間がかかる時があります。アプリリリース前になると、デバッグのたびに署名付きAPKを実機にインストールしたりアンインストールしたり繰り返すことがあるので、この時間がばかになりません。


その間画面はsleepモードになって暗転したりするので、いちいちインストール/アンインストールが完了したかを電源ONなどして確認するのが煩わしすぎます。

そこで、上記コマンドを使ってインストール/アンインストール完了のタイミングで音を鳴らすようにしてみます。ログのキーワードは

  • インストール完:onReceive: android.intent.action.PACKAGE_ADDED
  • アンインストール完:onReceive: android.intent.action.PACKAGE_REMOVED
これをコマンドに入れるとこんな感じです。

tail -f androidlogcat.log | egrep --line-buffered "onReceive: android.intent.action.PACKAGE_ADDED|onReceive: android.intent.action.PACKAGE_REMOVED" | while read line; do aplay ./se.wav ; echo $line ; done

いやー、音が知らせてくれるって素晴らしいです!!logcatに限らず、Ubuntu上でキーワードが拾えるものには音が鳴らせますね。いろいろ、他のキーワードで応用ができそうです。

参考

追記

2014/01/06
こういうのやると遊びが捗る
第127回 ターミナルマルチプレクサ tmuxを使ってみよう:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0127

PR

0 件のコメント :

コメントを投稿