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難しい...