Transcript
Page 1: Android Hacks - Hack57 syukudai

ANDROIDHACKS#57 ADB を使用する〜EXTRA STAGE 〜担当:なべべなべべ

Twitter : @nave_aki

23/04/08

1

Page 2: Android Hacks - Hack57 syukudai

この資料について• この資料は下記の本をベースに勉強会で作成した資料です。

• 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)

• この本の紹介ページが下記にあります。

• http://www.oreilly.co.jp/books/9784873114569/

23/04/08

2

Page 3: Android Hacks - Hack57 syukudai

アジェンダ

四つの難題 from kawara-tan1. ログバッファ編2. logcat 編3. 標準出力編4. バグレポート編

23/04/08

3

Page 4: Android Hacks - Hack57 syukudai

1. ログバッファ編

23/04/08

4

Page 5: Android Hacks - Hack57 syukudai

1. ログバッファ?• ログバッファとはログを溜めておく循環バッファのことらしい

• logcat はログバッファを参照してログを印字するようだ

• 実はログバッファは複数種類があって、すべてのログが一つのログバッファに書き込まれるわけではないそうな

• main バッファ ・・・ 普通のログはここに書き込まれる• radio バッファ ・・・ 無線や電話関係のログはここに書き込まれ

る• events バッファ ・・・ イベント関係のログはここに書き込まれ

参照するログバッファを指定するには

• adb logcat -b バッファ名ってやればおk ( 指定しない場合は main バッファを参照する )23/04/08

5

Page 6: Android Hacks - Hack57 syukudai

2. logcat 編

23/04/08

6

Page 7: Android Hacks - Hack57 syukudai

2. logcat コマンド?• logcat コマンドは Android が吐くログを整形して印字してく

れるスゴイやつだよ

• ところで、ログには優先度があり、 logcat コマンドは優先度の低いログを印字しないよう指定ができます

• 以下、低→高 の順に優先度の種類を記します

• Verbose 冗長ログ。こんなの監視してるのは暇人• Debug デバッグログ• Information 情報ログ• Warning 警告ログ• Error エラーログ• Fatal やばいログ。とにかくやばい

23/04/08

7

Page 8: Android Hacks - Hack57 syukudai

2. logcat コマンド?• android.util.Log パッケージをインポートして、以下のメソ

ッドを使うことでログを出力できるよ

• Log.v(String tag, String msg) ・・・ Verbose 冗長ログ• Log.d(String tag, String msg) ・・・ Debug デバッグログ• Log.i(String tag, String msg) ・・・ Information 情報ログ• Log.w(String tag, String msg) ・・・ Warning 警告ログ• Log.e(String tag, String msg) ・・・ Error エラーログ• Log.wtf(String tag, String msg) ・・・ What a Terrible

Failure これはひどいログ• SDK ソースを確認したところ、上記メソッドで出力されるロ

グは main バッファに書き込まれます

23/04/08

8

Page 9: Android Hacks - Hack57 syukudai

2. logcat コマンド?• ログバッファの説明で書いたとおり、 logcat はログバッフ

ァの内容を印字します

• logcat -d オプションをつけた場合とつけない場合の違いはログバッファの内容を印字した後の挙動

• -d をつけた場合 ・・・ 現時点でログバッファに書きこまれている内容を印字した後、賢者となってコマンドを終了する

• -d をつけない場合 ・・・ ログバッファの内容を印字した後も、コマンドは終了しないでログバッファをいやらしい目つきで監視し続ける。そしてログバッファに新しいログが書き込まれるとそれを即座に印字する

23/04/08

9

Page 10: Android Hacks - Hack57 syukudai

3. 標準出力編

23/04/08

10

Page 11: Android Hacks - Hack57 syukudai

3. 標準出力はどこにいくの?

• Android アプリケーションの標準出力・標準エラー出力は /dev/null に送られるので、通常目に入ることはありません

• どうしても標準出力・標準エラー出力を確認したい人のために、それらをログに出力する方法が用意されています

23/04/08

11

Page 12: Android Hacks - Hack57 syukudai

3. 標準出力をログに吐く• それでは、早速以下のコマンドを打ち込んでみましょう

$ adb shell stop$ adb shell setprop log.redirect-stdio true$ adb shell start

• 上記の設定はエミュレータ ( または実機 ) を終了するまで有効です

• また、これらのログは以下の設定で出力されます

• タグ: stdout または stderr• 優先度: I

• なお、常時上の設定を有効にしたい場合には、デバイス上の/data/local.prop に

• log.redirect-stdio true

とか書いておくといいらしいです

23/04/08

12

Page 13: Android Hacks - Hack57 syukudai

4. バグレポート編

23/04/08

13

Page 14: Android Hacks - Hack57 syukudai

4. バグレポート?• bugreport コマンドを使うと、その時のデバイスの状態を印

字することができます

• 具体的にどんな情報がでるかというと

• dumpstate コマンドの実行結果• dumpsys コマンドの実行結果• logcat コマンドの実行結果

(main, events, radio バッファそれぞれについて )

をまとめて出力してくれる

• 出力されるデータ量が多いのでファイルにでもリダイレクトすんのがいーんじゃねーの?

23/04/08

14

Page 15: Android Hacks - Hack57 syukudai

参考 URL• Android Developers

• logcathttp://developer.android.com/guide/developing/tools/logcat.html

• Reading and Writing Logshttp://developer.android.com/guide/developing/debugging/debugging-log.html

23/04/08

15