GsonとProguard
2014-12-11
QiitaAndroidAndroid で 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 難しい...
from: https://qiita.com/petitviolet/items/1b709f3f0db2659a271a