Unmarshalling unknown type codeに悩まされた話


Crashlyticsのエラーレポートを眺めていたら気になるエラーを発見。

Fatal Exception: java.lang.RuntimeException
Unable to start activity ComponentInfo{com.example.application/com.example.application.MainActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@86feb26: Unmarshalling unknown type code 3801188 at offset 20904

発生源はActivityThread.javaです。手元で再現しないし、コードを追いかけてもよく分からないのであれこれググったところ、それらしきものを見つけました。

android - Proguard causing RuntimeException (Unmarshalling unknown type code) in Parcelable class - Stack Overflow

なんでもProguardが原因とのこと。設定ファイルに以下を追加すればいいようです。 アプリ内でParcelableを明示的に使っている箇所はないので、外部ライブラリか何かが使ってるんでしょう。

-keepclassmembers class * implements android.os.Parcelable { static ** CREATOR; }

ただ、標準で読み込まれるproguard-android.txtにはすでによく似た定義があるんですよね。 このルールで大丈夫な気がするんだけどなあ...

-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}

ともあれ、Proguardの設定を変更したバージョンをリリースしてしばらく様子を見てみたところ、Unmarshalling unknown type codeのエラーは発生しなくなりました。どうやらこの対処方法で合っているみたいです。




関連(するかもしれない)記事


おススメ