スキップしてメイン コンテンツに移動

Androidのlogcatで遊ぶ

経緯

マルチモニタ厨としてはメインで使っている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

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。