配信開始したアプリのエラーレポートが管理画面に届く。こういう機能は便利。
(一番いいのはエラーなど起こさないことだが)

配信時のパッケージはProGuardを通して作成している。
そのため難読化が行われておりスタックトレースの内容が「メソッド c.a.a() で例外発生」みたいな表記になっている。

配信パッケージ作成時にProGuardが出力している元のシンボルとの対応リストが残っていれば、つきあわせて追いかけることが出来るわけだが相応に面倒ではある。

自分が困っていることは世界中で他の人も困っているという法則の結果、Android SDKに便利なツールが用意されている。
retraceというツール。
このツールを使うと、シンボルの対応が記録されたファイルとスタックトレースの内容があれば、元々のシンボルでスタックトレースの文言を再構成してくれる。

ツールはandroid-sdk以下に見つかる。このフォルダへパスが通っていればおそらく楽に使える。
android-sdk\tools\proguard\bin\retrace.bat

一番単純な使い方はファイル名を二つ引数で渡すこと。
第一引数に mapping.txt。このファイル名はAndroidプロジェクトに用意されるProGuard設定のデフォルト出力名。
第二引数にスタックトレースの内容をコピー&ペーストして用意したテキストファイル proguard.trace を渡す。

私の場合、使用頻度の低い開発用のパスを環境変数に記述するのは好きではないため別途作業用のフォルダを用意することにした。

  • 作業フォルダを用意
  • android-sdk\tools\proguard\lib\proguard.jarとandroid-sdk\tools\proguard\lib\retrace.jarをコピー
    (最初retrace.jarのコピーだけで試したところエラー発生。proguard.jarの機能を呼び出しているらしい。)
  • mapping.txtとproguard.traceをコピー
  • 毎回コマンドライン入力するのも面倒なのでバッチファイルを作成
    内容は次の通り。(実際には環境変数JAVA_HOMEのチェックなどを行っている)
    java -jar retrace.jar mapping.txt proguard.trace > error.txt
  • バッチファイルを実行
上記の手順を行った結果、元のシンボル名で記述されたスタックトレースが書き込まれたerror.txtを得ることができる。

あとは、配信パッケージ作成時点のソースコードの状態とつきあわせてデバッグ。
この作業が必要になるという点でも、バージョン管理システムを使っていてよかったと思う。