Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@chiiia12

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

事象

今までのコードが手作業で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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?