backport

技術ネタと野球とときどき雑談

Unmarshalling unknown type codeに悩まされた話

2016/05/06
development Android, proguard

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のエラーは発生しなくなりました。どうやらこの対処方法で合っているみたいです。



コメント欄を表示する

おススメ

WEB+DB PRESS Vol.99

特集「良いコードって何だろう?」がおススメ

WEB+DB PRESS総集編[Vol.1~84] (WEB+DB PRESS plus)

お値段手ごろなので持っておいて損なし

Kindle Paperwhite Wi-Fi、ブラック

読みたいときに読みたい本を読めるのが嬉しい

超小型65W ノートPC汎用 ACアダプター FINsix ”Dart” (シルバー)超軽量85g 11種類の変換プラグで1000機種以上のノートPCに対応 USB5V出力付きでPCとスマホ同時充電 ※必ずご使用のPCとの互換性をご確認ください。『PSE認証済』

持ち運びに便利な小型軽量のACアダプタ