【问题标题】:Retrofit 2 returns null in release APK when minifyenable but ok in debug APK当 minifyenable 但在调试 APK 中正常时,Retrofit 2 在发布 APK 中返回 null
【发布时间】:2017-08-04 13:44:41
【问题描述】:

在启用 minify 时获得空响应,但代码为 200 和 Release APK,当 minify false 时则正常。

但在启用 minify 时会通过调试 APK 获得预期的响应。

【问题讨论】:

  • 您的问题是什么?代码在哪里?回应是什么?预期的反应是什么?请阅读:stackoverflow.com/help/how-to-ask.
  • 在发布 APK 中只有一个 API 获得空响应,但其他 API 正常当所有 API 在调试 APK 中工作正常时。你能提出什么建议吗?
  • 您的标题中已经说过的所有内容。你没有回答任何问题。
  • 在发布版本中从 onResponse() 的 response.body() 获得相同的空响应。使用retrofit2,gradle版本4.1.1,studio 4.1.1

标签: android api retrofit2


【解决方案1】:
 Gson gson = new GsonBuilder()
            .setLenient()
            .disableHtmlEscaping()
            .excludeFieldsWithoutExposeAnnotation()//--> Remove this line this might be an issue there
            .disableInnerClassSerialization()
            .create();

如果您有这样的代码,这就是解决方案。 成功了

**

.excludeFieldsWithoutExposeAnnotation()//--> 去掉这一行 this 那里可能有问题

**

【讨论】:

  • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
【解决方案2】:
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}
        
Copy At proguard-rules.pro ^^^^^^

/////////////////////////////////
package com.*;//

import com.google.gson.annotations.SerializedName;// <<
        
public class Retrofit { 
  @SerializedName("name") //<<<<
  private String apiname;
}

【讨论】:

    【解决方案3】:
    -keep public class com.your.packages.model.* {*;}
    

    为我工作

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,我的解决方案是修改“保护规则”以将您的类排除在混淆之外。

      -keep public class com.your.packages.model.** {*;}
      

      【讨论】:

      • 我的应用程序正在生产中,有 38k 活跃用户,最快的解决方案是将 minifyenabled 设置为 false.. 大小为 2.5mb ,现在它的大小为 5mb ..我现在将测试您的解决方案..
      • 我想为整个应用设置这个是否可行?
      • @PrakashShukla 上述解决方案是否有效?
      【解决方案5】:

      问题解决了:)

      proguard-rules 没有问题,无需添加任何额外内容。

      如果minifyEnabled,即使变量名与key相同,也需要添加SerializedName注解。

      这是我手动创建的唯一模型:P

      在调试中可以正常工作,但在登录后不能正常工作。:)

      【讨论】:

      • 我没有从添加 SerializedName 注释的改造中得到成功的响应。
      • 天啊!我已经尝试解决这个问题 3 天了。幸好我读了你的回答。谢谢这个人!
      • 哇,你怎么能找到这个解决方案,你救了我发疯。谢谢。
      • @JahangirKabir 实际上当 minifyEnabled 设置为 true 时,该 body 元素在发布 apk 中被忽略。我通过删除 minifyEnabled true 来修复它。
      • 你救了我,不需要序列化一个参数的所有参数,它的工作就像一个魅力
      【解决方案6】:

      您需要设置 proguard-rule 才能发布。如果你想测试真实服务器,你可以创建新的构建类型,它以服务器 API 为目标

      干杯:)

      【讨论】:

      • 我也添加了 proguard-rule 但没有希望。因为只有一个 API 不工作,但其他 API 工作正常。
      猜你喜欢
      • 2021-04-23
      • 1970-01-01
      • 2021-09-03
      • 2019-03-25
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2020-09-16
      相关资源
      最近更新 更多