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