世界を目指せ!Androidアプリ開発入門

第11回デバッグ手法のあれこれ

前回の復習

前回は、アプリの設定画面の作り方に関して学びました。

具体的には、

  • XMLによる設定画面の作り方
  • 設定画面から設定値の保存方法

の説明を行いました。

Android OSには、設定画面を簡単に実装できる枠組みが用意されており、値の保存も自動的に行ってくれるので、設定画面を作る場合は、この枠組みを上手く活用してアプリを仕上げてください。

アプリのデバッグ方法

アプリの開発段階では、不具合の修正を行ったり、パフォーマンスの改善を行うことがあります。AndroidのSDKには、効率良くデバッグやパフォーマンスチューニングが行えるツールや仕組みが用意されているので、今回は、それらをご紹介します。

最もベーシックなLogCat

バグの修正を行う場合、現状の動作状況を把握したいことがあると思います。

このとき、ソースコード中にブレイクポイントを設定して、ステップ実行をしても良いのですが、頻繁に描画行われる箇所などでは効率が悪いことがあります。そんな時に、android.utilパッケージのLogクラスを使い、動作ログを出力することで効率良くデバッグが行えます。オールドファッションの開発スタイルを知るプログラマであれば、printfでのデバッグとご説明するのが一番わかりやすいと思います。

以下は、動作ログを出力するサンプルです。

public class LogCatActivity extends Activity {
    @Override
    public void onCreate( Bundle icicle )
    {
        super.onCreate( icicle );
        setContentView( R.layout.main );

        // ログを出力
        Log.d( "LogCat", "Log message" );
    }
}

それでは、ソースコードを見ていきます。

ActivityのonCreateメソッドの最後、Log.dでログを出力しています。

Log.dメソッドの第一引数にはタグ名を、第二引数にはメッセージを指定します。

第一引数のタグ名は、ログが表示されるウィンドウで、フィルタリングする際に使うので、アプリ名を指定するのが良いでしょう。ソースコードに、1行追加するだけで、ログの出力が行えるので、積極的に使ってください。

Logクラスには、dメソッド以外にもメソッドを持っています。

それぞれ、以下のような意味を持つので、状況などに応じて使い分けることで、効率的に管理してください。

dデバッグメッセージをログ出力
eエラーメッセージをログ出力
i情報メッセージとしてログ出力
v汎用メッセージとしてログ出力
w警告メッセージとしてログ出力

動作ログは、SDKディレクトリのtools以下にある「ddms(Dalvik Debug Monitor⁠⁠」で⁠確認できます。

画面1
画面1

Monkeyテストツール

Android SDKにもモンキーテストを実行するツールが存在します。

ご存知ではない方の為にご説明すると、モンキーテストとは、無茶苦茶な操作を行って、アプリが問題がなく動作するか確認するストレステストのことです。テストの様子が、まるで、お猿さんが適当に実機を操作しているようなので、モンキーテストと呼ばれています。Andoridの場合は、実際の操作を行うワケではなく、ツールを使って無茶苦茶なイベントを発行してテストを実行します。

一般的な手順であれば、アプリの仕様に合わせてテスト項目を作成して、順にテスト項目を消化して行きますが、モンキーテストは、そうした類のテストではないのと、発生するイベントも網羅的ではないので、バグを発見できない可能性もありますが、ストレス試験の意味合いで、リリースする前に実行することをお勧めします。

では、使い方をご説明します。

モンキーテストは、先のLogクラスとは違い、adbコマンドを使って端末内のコマンドを実行します。実行は、コマンドラインから以下を入力します。

$adb shell monkey -v 1 -p com.exsample.sampleapp 1000

それでは、コマンドを順に見て行きます。

オプションの最初の「-v 1」は、実行情報の出力レベルを指定しています。

設定範囲は0?2で、以下の意味を持っています。

0開始と終了時の最小限の情報出力
1どのようなイベントを発生したかなどの情報出力
2レベル1よりもさらに詳細な情報出力

次の「-p」で、モンキーテストを行うパッケージ名を指定します。

最後の数字は、イベントの発生回数になります。指定する回数は、アプリの性質によって異なりますが、余りに少ないとストレステストにならないので、開発しているアプリに合わせて調整を行ってください。

Monkeyテストには、発生するイベントの種類をどの程度のパーセンテージとするか指定できたり、発生するイベントの間隔を指定できるなど、細かな制御が行えるオプションが存在しています。詳細は、以下のリンクを参照して、アプリに応じた設定を行い、モンキーテストを行ってください。

UI/Application Exerciser Monkey:
http://developer.android.com/intl/ja/guide/developing/tools/monkey.html

プロファイラ:TraceViewの使い方

Android SDKには、プロファイリングツールが付属しています。

ツールはTraceViewと呼ばれるソフトですが、これは名前が示す通りプロファイリングの結果を表示するツールで、プロファイリングするには、以下のようにソースコードの計測したい位置にコードを追加する必要があります。

Debug.startMethodTracing( "profile" );
// ...
Debug.stopMethodTracing();

それでは、ソースコードを順に見て行きます。

計測の開始位置に、Debug.startMethodTracingメソッドを追加します。startMethodTracingメソッドの第一引数には、プロファイリング結果を保存するためのファイル名を指定します。この結果は、.traceの拡張子が付けられて、SDカードの直下に保存されます。計測の停止位置には、Debug.stopMethodTracingを追加します。

コードを追加が終わったら、開始と停止を追加したコード間が実行されるように、エミュレーターを実行して操作を行います。

実行し終えたら、計測結果のファイルを手元のパソコンに転送します。

ファイルの転送は、ddmsのファイルエクスプローラーを使っても良いですし、以下のようにコマンドラインからコマンドを実行しても構いません。

adb pull /sdcard/profile.trace /Users/yasuos/src/profile.trace

次に、TraceViewを起動します。

起動は、以下のように行います。引数に指定した計測結果のファイルは、フルパスで指定して下さい。

traceview /Users/yasuos/src/profile.trace

実行すると、画面2のようなウィンドウが表示されます。

後は、この計測結果を確認しながら、どの部分にボトルネックがあるのか確認してパフォーマンスチューニングを行います。

画面2
画面2

まとめ

今回は、デバッグの手法として、以下の手法をご紹介しました。

  • 動作ログを表示するLogCatの使い方
  • モンキーテストツールのMonkeyの使い方
  • TraceViewの使い方

いずれもアプリのデバッグを行うために、大きな手助けをしてくれるので、この機会に使い方を覚えて、手足のように使いこなせるよう、使い込んでください。

おすすめ記事

記事・ニュース一覧