AndroidでJsonを扱うライブラリとして有名なGsonですが、
Proguardを有効にしたビルドだと問題が発生します
問題
普通だと
new Gson().fromJson(jsonString, Hoge.class);
でjsonStringをHogeクラスに変換出来るはずです
しかしProguardを有効にしてあると、Hogeクラスのフィールド名が難読化されて例えばアルファベット1文字に変更されているため、
jsonStringにおけるjsonのキー名とHogeクラスのフィールド名が一致しなくなりfromJsonによるjsonのパースに失敗し、
結果として全てnullが入ったHogeクラスのインスタンスが得られることとなります
解決策
解決策は2つあります
Proguardでリネームしない
例えば
-keepnames class com.example.android.Model.** { *; }
のように、実装したModelパッケージ内の全てのクラスについてクラスとクラスメンバをリネームしないように
設定しておけば解決します
リネームさえ防げばいいので、-keepではなく-keepnamesで十分です
@SerializedNameを使う
Gsonの機能として、クラスのフィールド名とJsonのキー名を一致させなくても
@SerializedNameを使ってフィールド名とキー名を対応させることが出来ます
class Hoge {
@SerializedName("field_name")
private String fieldName;
}
とすればフィールド名はfieldNameでJsonのfield_nameとしてパース出来るようになります
proguard難しい...