Proguardをかけた後の例外をトレースする方法

Proguardをかけた後、例外が上がってきました。
さてどうしましょう。中身はこんな感じになっています

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.miruker.qcontact.c.ah.a(ProGuard:96)
at com.miruker.qcontact.Widgets.AppWidgetService.b(ProGuard:143)
at com.miruker.qcontact.Widgets.AppWidgetService.a(ProGuard:86)
at com.miruker.qcontact.Activity.WidgetSettingsListActivity.setAppWidget(ProGuard:274)
at com.miruker.qcontact.Components.ag.onItemClick(ProGuard:122)
at android.widget.AdapterView.performItemClick(AdapterView.java:292)
at android.widget.AbsListView.performItemClick(AbsListView.java:1068)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2525)
at android.widget.AbsListView$1.run(AbsListView.java:3186)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
at dalvik.system.NativeStart.main(Native Method)

うーん。さてということでproguardではリトレースするためのツールが用意されています。

SDKやOSの環境によるのですが、とりあえずWindows(64bit)の方法です。

作業フォルダDドライブ

まず2つのファイルを用意します。
1.Eclipseプロジェクトの中に、proguardのフォルダがあるはずです。
  この中のmapping.txtをDドライブにコピーします。

2.次に先ほどのスタックトレースをDドライブにtra.txtとして保存します。

あとはコマンド
retrace.bat -verbose d:\mapping.txt d:\tra.txt
と実行
パスが通っていなければ、\tools\proguard\bin\
この中のretrace.batです。

これで結果が出力されます

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.miruker.qcontact.Data.WidgetGroupCashData.boolean deleteInsert(android.content.Context,int,java.util.List)(ProGuard:96)
at com.miruker.qcontact.Widgets.AppWidgetService.android.widget.RemoteViews loadWidget(android.content.Context,android.widget.RemoteViews,int)(ProGuard:143)
at com.miruker.qcontact.Widgets.AppWidgetService.android.widget.RemoteViews initialWidget(android.content.Context,android.widget.RemoteViews,int)(ProGuard:86)
at com.miruker.qcontact.Activity.WidgetSettingsListActivity.void setAppWidget(android.view.View)(ProGuard:274)
at com.miruker.qcontact.Components.WidgetSettingsListView$onItemClickListener.void onItemClick(android.widget.AdapterView,android.view.View,int,long)(ProGuard:122)
at android.widget.AdapterView.performItemClick(AdapterView.java:292)
at android.widget.AbsListView.performItemClick(AbsListView.java:1068)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2525)
at android.widget.AbsListView$1.run(AbsListView.java:3186)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
at dalvik.system.NativeStart.main(Native Method)


これでどこがエラーかわかるはずです。

関連記事
投稿しますか?

1 コメント

コメントする

メモ - 下記に表示されているHTML属性は利用できます HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Trackbacks and Pingbacks: