Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

事象

今までのコードが手作業で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に代入してくれる

http://qiita.com/yysk/items/e549ba40bc2accfdff35

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

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

結局Proguardだった

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

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

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

http://stackoverflow.com/questions/30001674/gson-deserialize-null-pointer-in-released-apk

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

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

chiiia12
Android,Java
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした