LoginSignup
7
1

More than 5 years have passed since last update.

リリースビルドだけGsonでパースできない

Posted at

事象

今までのコードが手作業でJsonをパースしてたので、APIのレスポンスに値が追加されるたびに自前のparserも書き足す運用だった。毎回修正箇所も多くなるのでGsonで一発Parse!スマートやん!てやろうとしてた

Gsonの導入

    protected static final Gson GSON = new GsonBuilder().serializeNulls().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();

これでをいろんなAPIで使いまわすつもりでstatic宣言。
FieldNamingPolicyをセットするとJSONが何ケースで返ってくるかを指定していい感じにDtoにパースしてくれる
この場合はjsonでCodeをdtoのcodeに代入してくれる

デバッグまでは何も問題なし。

デバッグまでは何も問題なく通っていたがリリースビルドにした瞬間うまくいかず。
本番APIが変わったのか、色々試したけど問題なさそう。

結局Proguardだった

今まで@SerializeNameのアノテーションを使ってパースをしていたのでリリースビルドしても問題なかったが、
リリースビルドにすると難読化され、クラス名が変わってしまうのでGsonがうまくパースできないそう。
パース後のDtoがnullなので焦った。

proguard-rules.pro
-keep class jp.co.hoge.parser.response.** { *;}

proguardでレスポンスをパースする対象のDtoの難読化をしないように設定するとこれは解決される。

お陰で全然触ってこなかったproguardのことも勉強しなきゃなと思いました…。

完全にこの記事と同じ。結構時間かかっちゃったけどここまでたどり着くのに時間がかかってしまった
http://qiita.com/petitviolet/items/1b709f3f0db2659a271a

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1