Screaming Loud

日々是精進

Androidのlibraryを作成していて発生するInnerClass annotations are missingの対処

問題

AndroidのLibraryを作っていると必ずといっていいほど、proguardをかけると思います。 ただライブラリを作ったときにinner classを作っているファイルをproguardのkeep対象にいれてjarを作成すると、 そのライブラリ使用時に下記のようなWarn文言が発生してしまっていました。 ググっても全然出てこなかったのでハマりました。

InnerClass annotations are missing corresponding EnclosingMember annotations. Such InnerClass annotations are ignored.

対処法

その際の対処法はproguardの設定ファイル、proguard-rules.proに以下を記載したら治りました。

-keepattributes EnclosingMethod, RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

おまけ

上記エラーに関しては上のattributesだけで対処できますが、そもそもinnerclassを使っている場合は、以下を追加するのがベターですね。 特にAndroidはinner classを多用すると思うので、気をつけたいです。

-keepattributes Exceptions, InnerClasses, MethodParameters, Signature, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

参考

ProGuard manual | Attributes | GuardSquare