JSONIC & google-gson とProguardでドツボる。

Proguardの難読化でハマりましたのでその解決方法を残しておきます。

難読化は成功したが、動作させたらClassCastException発生。。。
JSONIC使っているあたりで例外出ておるよ。
JSONICと似ているgoogle-gsonのライブラリに差し変えても×。

◆point1
JSON解析時にクラス名、メソッド名、変数名が命なのに難読化してしまっている。
JSONICもしくはgoogle-gsonでの解読対象クラスは難読化から除外する。

proguard.cfgには下の記述を追加します。

-keep class com.aaa.bbb.xx対象クラスがあるパッケージxx {
    *;
}

クラスの個別指定もできるけど、いちいち個別に指定するより、
上記のように対象パッケージに切り分けて、∗でまとめて全部除外したほうが一番間違いなさそう。

◆point2
クラス名、メソッド名は難読化解除したが、まだ難読化されるものがある。
→Listのようなgenerics使っていると、上記だけではまだ足りない。

#難読化できたものをdex2jarで解読して見ると、<>がごっそり無くなっていたので気が付いた。

–keepだけだと、クラス名と変数名は確かに難読化されないけど、
それ以外が消えていたりする。

んで、他にもこんなオプションがありました。

-keepattributes *Annotations*
-keepattributes Signature
-keepattributes InnerClasses

アノテーション使っていると、Annotationsを指定しないと消えます。
generics使っていると、Signature必須。これはJSONICとか使ってなくても必須だと思われる。
InnerClassesも難読化されちゃ困る。

とりあえず、上記の2つのステップで無事難読化されず、JSONICによるエンコード処理は動きましたよー。
(gsonのほうは未確認)

あと、使っているライブラリ(JSONICやgson)も難読化対象外にしておきましょう。

こんなもんですかねえ。
なかなかネットで探しても解決している記事が見つからなかったので、残してみました。