Download ppt - Android Hacks - Hack59

Transcript
Page 1: Android Hacks - Hack59

ANDROIDHACKS#59 Traceview を使う担当:かわらたん

Twitter : @pfkawara

Blog : http://kawara-tan.blogspot.com/

23/04/12

1

Page 2: Android Hacks - Hack59

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

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

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

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

23/04/12

2

Page 3: Android Hacks - Hack59

アジェンダ1. Traceview とは

1. 概要2. Traceview を使うには

1. SD カードをマウントする2. Trace ログを生成する3. Trace ログを引っこ抜く

3. Traceview でログを解析する

1. Traceview 実行2. タイムラインパネル3. プロファイルパネル4. 解析方法

23/04/12

3

Page 4: Android Hacks - Hack59

1. Traceview とは

23/04/12

4

Page 5: Android Hacks - Hack59

1. 概要• デバイス上で動く Android アプリケーションのパフォーマン

スをグラフィカルに解析できるデバッグツール

• 処理が重くなる箇所を見つけ、最適化すべきメソッドを特定できる

• Trace 対象は VM 全体

• ツールを使うには以下のステップが必要

1. SD カードをマウントする2. Trace ログを生成する3. Trace ログを引っこ抜く

23/04/12

5

Traceview: A Graphical Log Viewerhttp://developer.android.com/guide/developing/tools/traceview.html

Page 6: Android Hacks - Hack59

2. Traceview を使うには

23/04/12

6

Page 7: Android Hacks - Hack59

1. SD カードをマウントする• Trace ログは SD カードに保存されるため、 SD カードが端

末に差しこまれている ( マウントされている ) 必要がある。

• ここではエミュレータに SD カードをマウントする場合について説明する。

1. SD カードのイメージを作る。

• tools にある mksdcard コマンドを実行する• $> mksdcard 容量 生成ファイル名

23/04/12

7

Page 8: Android Hacks - Hack59

1. SD カードをマウントする2. AVD で SD カードイメージファ

イルを指定する。

1. Eclipse で「ウィンドウ」→「 Android SDK および AVD マネージャ」をクリック

2. エミュレータ一覧から自分が使うエミュレータを選択し、「編集」ボタンをクリック。または「新規」ボタンをクリックして、エミュレータを新しく作る

3. 右図の画面が出るので、「 SD Card 」の欄にある「参照」ボタンをクリックし、作ったイメージファイルを指定する。

4. 「 Edit AVD 」を押して画面を閉じる。23/04/12

8

Page 9: Android Hacks - Hack59

2. Trace ログを生成する• Java のソースコードに以下のメソッドを埋め込む。

• Debug.startMethodTracing(string) Trace ログ取得開始• 引数の文字列は出力される trace ログファイル名• パスを指定することも可能 ( デフォルトは /sdcard)

• ちなみに、 /sdcard は /mnt/sdcard へのシンボリックリンク

• Debug.stopMethodTracng()       Trace ログ取得終了• アプリの起動から終了までを採りたい場合、 start ~ () は

Activity の onCreate() 内で、 stop ~ () は onDestroy() で呼ぶのが良い

23/04/12

9

Page 10: Android Hacks - Hack59

2. Trace ログを生成する• Permission 設定

• SD カードにファイルを作り、メッセージを書き込むためにPermission を設定する必要がある。

• でないと、 Permission Denied が発生してアプリが落ちる。• AndroidManifest.xml に以下を追記する。

23/04/12

10

Page 11: Android Hacks - Hack59

2. Trace ログを生成する• アプリを実行すると、ファイル・エクスプローラの sdcard

フォルダに trace ログファイルが生成される。

• ファイルエクスプローラは Eclipse の DDMS パースペクティブからファイル・エクスプローラービューで見れる。

23/04/12

11

Page 12: Android Hacks - Hack59

2. Trace ログを生成する• また、 startMethodTrace() 呼び出しと stopMethodTrace()

の呼び出しが LogCat 上に表示される。

23/04/12

12

Page 13: Android Hacks - Hack59

3. Trace ログを引っこ抜く• SD カードに保存された trace ログファイルを引っこ抜く。

• adb pull で trace ファイルを指定する。

23/04/12

13

Page 14: Android Hacks - Hack59

3. Traceview でログを解析する

23/04/12

14

Page 15: Android Hacks - Hack59

1. Traceview 実行• tools にある traceview を実行する。

• trace ログファイルを「絶対パス」で指定する。• なぜ相対パス指定できないのか不明

• 実行すると以下の画面が現れる。

• 上部分:タイムラインパネル• 下部分:プロファイルパネル

23/04/12

15

Page 16: Android Hacks - Hack59

2. タイムラインパネル• Traceview の上部分はタイムラインパネルと呼ばれ、各スレ

ッド毎にコールされたメソッドがグラフ上に表示される。

• メソッドは時系列で並んでおり、コールされる順序やメソッドの使用頻度、実行に要した時間を見ることが可能。

• 以下の操作が ( マウスのみで ) 可能

• クリック:そのメソッドがコールされている場所全てをアニメーションで表示?、プロファイルパネルの関連情報をソートする

• ドラック:任意の大きさに拡大可能。戻すときはダブルクリック

23/04/12

16

Page 17: Android Hacks - Hack59

3. プロファイルパネル• Traceview の舌部分はプロファイルパネルと呼ばれ、メソッ

ドの実行時間に関するデータを見ることが可能

• 各項目をクリックするとメソッド内の詳細な統計が表示され、タイムラインパネルのどこに該当するか知らせてくれる。

23/04/12

17

Page 18: Android Hacks - Hack59

3. プロファイルパネル• 各項目は以下の通り

23/04/12

18

項目名 意味

name メソッド名

Inclusive そのメソッドとそのメソッドから呼ばれたメソッドの実行時間の合計

Incl% 最大経過時間に対する Inclusive タイムの割合

Exclusive そのメソッドの実行時間

Excl% 最大経過時間に対する Exclusive タイムの割合

Calls + Recur Calls/Total このメソッドのコール回数 + 再帰的にコールされた回数

Time/Call 平均タイム

Page 19: Android Hacks - Hack59

4. 解析方法• Traceview ですべきことは実行時間を多く費やしている処理

を発見し、最適化すべきメソッドを特定する事

• Excl% を降順でソート→実際にメソッド実行に費やされた時間なので、他と比べて高い場合は最適化の対象

• Excl% の値が高いメソッドを最適化してもパフォーマンスが改善されない場合→プログラム全体の作りが悪い。 Incl%を降順でソートし、他と比べて高い場合は最適化の対象。 Incl% は体感速度に直結する。

23/04/12

19

Page 20: Android Hacks - Hack59

参考 URL• Android Developers

• http://developer.android.com/intl/ja/index.html• Android エミュレーターの仮想 SD カードを使う

• http://www.usefullcode.net/2010/12/androidsd.html• Android1.6 以降 プロファイラ traceview の落とし穴

• http://blog.livedoor.jp/sylc/archives/1478471.html• Android TraceView 基本編

• http://www.taosoftware.co.jp/blog/2009/11/android_traceview.html

23/04/12

20