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です。手元で再現しないし、コードを追いかけてもよく分からないのであれこれググったところ、それらしきものを見つけました。
なんでも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のエラーは発生しなくなりました。どうやらこの対処方法で合っているみたいです。
関連(するかもしれない)記事
おススメ