Android 改型api调用在调试apk中工作,但不在“中工作”;发布APk"';版本

Android 改型api调用在调试apk中工作,但不在“中工作”;发布APk"';版本,android,retrofit,signed-apk,Android,Retrofit,Signed Apk,在我的应用程序中,改型工作正常,在调试apk中得到响应,而在发布的apk或签名的apk中不工作。它在控制台中显示错误,如下所示, **java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“boolean java.lang.String.equalsIgnoreCase(java.lang.String)” 在k.d.a.n.f.b.a(:5) **.如果启用了proguard,则应添加proguard规则并保留模型类 # ALSO REMEMBER KEE

在我的应用程序中,改型工作正常,在调试apk中得到响应,而在发布的apk或签名的apk中不工作。它在控制台中显示错误,如下所示, **java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“boolean java.lang.String.equalsIgnoreCase(java.lang.String)” 在k.d.a.n.f.b.a(:5)
**.

如果启用了proguard,则应添加proguard规则并保留模型类

# ALSO REMEMBER KEEPING YOUR MODEL CLASSES
# -keep class com.your.package.model.** { *; }

你的问题是由模糊器发布的。阅读以获得更多细节

在您的情况下,您需要从minify/obfuscate忽略模型类。因为改型使用您的模型属性名称来解析对象。您可以尝试使用
SerializedName

要忽略混淆模型类,请使用以下命令:

#Models
-dontwarn yourpackage.model.**
-keep class yourpackage.model.** { *; }
@SerializedName("abc")
@Expose
private String abc;
您可以看到此用于改装的proguard文件:


希望能有所帮助。

与其他答案不同,我将提出其他建议。我不喜欢保持模型类不混淆的想法,因此我最终采用了这种方法。变量将与类名一起混淆,但您不应该遇到任何问题

创建改装实例时,请使用
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().ExcludeFieldswithotExposeanNotation().create))
而不是
.addConverterFactory(GsonConverterFactory.create())

在模型类中,使用如下变量:

#Models
-dontwarn yourpackage.model.**
-keep class yourpackage.model.** { *; }
@SerializedName("abc")
@Expose
private String abc;
并且,在您的
proguard rules.pro
文件中添加以下行:

-keep @interface com.google.gson.annotations.SerializedName
-keep @interface com.google.gson.annotations.Expose
-keepattributes *Annotation*

在这些更改之后,即使应用程序被混淆,它也应该可以工作。

检查程序规则,如果它已启用发布模式,请发布相关代码,也请发布相关代码