android hacks - hack59
DESCRIPTION
「Android Hacks ―プロが教えるテクニック & ツール」(株式会社ブリリアントサービス 著)を教材とした勉強会でのまとめ資料です。http://www.oreilly.co.jp/books/9784873114569/TRANSCRIPT
ANDROIDHACKS#59 Traceview を使う担当:かわらたん
Twitter : @pfkawara
Blog : http://kawara-tan.blogspot.com/
23/04/12
1
この資料について• この資料は下記の本をベースに勉強会で作成した資料です。
• 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)
• この本の紹介ページが下記にあります。
• http://www.oreilly.co.jp/books/9784873114569/
23/04/12
2
アジェンダ1. Traceview とは
1. 概要2. Traceview を使うには
1. SD カードをマウントする2. Trace ログを生成する3. Trace ログを引っこ抜く
3. Traceview でログを解析する
1. Traceview 実行2. タイムラインパネル3. プロファイルパネル4. 解析方法
23/04/12
3
1. Traceview とは
23/04/12
4
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
2. Traceview を使うには
23/04/12
6
1. SD カードをマウントする• Trace ログは SD カードに保存されるため、 SD カードが端
末に差しこまれている ( マウントされている ) 必要がある。
• ここではエミュレータに SD カードをマウントする場合について説明する。
1. SD カードのイメージを作る。
• tools にある mksdcard コマンドを実行する• $> mksdcard 容量 生成ファイル名
23/04/12
7
1. SD カードをマウントする2. AVD で SD カードイメージファ
イルを指定する。
1. Eclipse で「ウィンドウ」→「 Android SDK および AVD マネージャ」をクリック
2. エミュレータ一覧から自分が使うエミュレータを選択し、「編集」ボタンをクリック。または「新規」ボタンをクリックして、エミュレータを新しく作る
3. 右図の画面が出るので、「 SD Card 」の欄にある「参照」ボタンをクリックし、作ったイメージファイルを指定する。
4. 「 Edit AVD 」を押して画面を閉じる。23/04/12
8
2. Trace ログを生成する• Java のソースコードに以下のメソッドを埋め込む。
• Debug.startMethodTracing(string) Trace ログ取得開始• 引数の文字列は出力される trace ログファイル名• パスを指定することも可能 ( デフォルトは /sdcard)
• ちなみに、 /sdcard は /mnt/sdcard へのシンボリックリンク
• Debug.stopMethodTracng() Trace ログ取得終了• アプリの起動から終了までを採りたい場合、 start ~ () は
Activity の onCreate() 内で、 stop ~ () は onDestroy() で呼ぶのが良い
23/04/12
9
2. Trace ログを生成する• Permission 設定
• SD カードにファイルを作り、メッセージを書き込むためにPermission を設定する必要がある。
• でないと、 Permission Denied が発生してアプリが落ちる。• AndroidManifest.xml に以下を追記する。
23/04/12
10
2. Trace ログを生成する• アプリを実行すると、ファイル・エクスプローラの sdcard
フォルダに trace ログファイルが生成される。
• ファイルエクスプローラは Eclipse の DDMS パースペクティブからファイル・エクスプローラービューで見れる。
23/04/12
11
2. Trace ログを生成する• また、 startMethodTrace() 呼び出しと stopMethodTrace()
の呼び出しが LogCat 上に表示される。
23/04/12
12
3. Trace ログを引っこ抜く• SD カードに保存された trace ログファイルを引っこ抜く。
• adb pull で trace ファイルを指定する。
23/04/12
13
3. Traceview でログを解析する
23/04/12
14
1. Traceview 実行• tools にある traceview を実行する。
• trace ログファイルを「絶対パス」で指定する。• なぜ相対パス指定できないのか不明
• 実行すると以下の画面が現れる。
• 上部分:タイムラインパネル• 下部分:プロファイルパネル
23/04/12
15
2. タイムラインパネル• Traceview の上部分はタイムラインパネルと呼ばれ、各スレ
ッド毎にコールされたメソッドがグラフ上に表示される。
• メソッドは時系列で並んでおり、コールされる順序やメソッドの使用頻度、実行に要した時間を見ることが可能。
• 以下の操作が ( マウスのみで ) 可能
• クリック:そのメソッドがコールされている場所全てをアニメーションで表示?、プロファイルパネルの関連情報をソートする
• ドラック:任意の大きさに拡大可能。戻すときはダブルクリック
23/04/12
16
3. プロファイルパネル• Traceview の舌部分はプロファイルパネルと呼ばれ、メソッ
ドの実行時間に関するデータを見ることが可能
• 各項目をクリックするとメソッド内の詳細な統計が表示され、タイムラインパネルのどこに該当するか知らせてくれる。
23/04/12
17
3. プロファイルパネル• 各項目は以下の通り
23/04/12
18
項目名 意味
name メソッド名
Inclusive そのメソッドとそのメソッドから呼ばれたメソッドの実行時間の合計
Incl% 最大経過時間に対する Inclusive タイムの割合
Exclusive そのメソッドの実行時間
Excl% 最大経過時間に対する Exclusive タイムの割合
Calls + Recur Calls/Total このメソッドのコール回数 + 再帰的にコールされた回数
Time/Call 平均タイム
4. 解析方法• Traceview ですべきことは実行時間を多く費やしている処理
を発見し、最適化すべきメソッドを特定する事
• Excl% を降順でソート→実際にメソッド実行に費やされた時間なので、他と比べて高い場合は最適化の対象
• Excl% の値が高いメソッドを最適化してもパフォーマンスが改善されない場合→プログラム全体の作りが悪い。 Incl%を降順でソートし、他と比べて高い場合は最適化の対象。 Incl% は体感速度に直結する。
23/04/12
19
参考 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