当 minifyenable 时,Retrofit 2 在发布 APK 中返回 null,但在调试 APK 中正常

问题描述 投票:0回答:9

当 minify 启用时,获取空响应,但使用 Release APK 得到代码 200,当 minify false 时则可以。

但是当启用 minify 时,调试 APK 会得到预期的响应。

android api retrofit2
9个回答
41
投票

问题解决了:)

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

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

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

在调试中工作正常,但在登录后就不行了。:)


18
投票

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

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

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

为我工作


1
投票

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

干杯:)


0
投票
-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;
}

0
投票
 Gson gson = new GsonBuilder()
            .setLenient()
            .disableHtmlEscaping()
            .excludeFieldsWithoutExposeAnnotation()//--> Remove this line this might be an issue there
            .disableInnerClassSerialization()
            .create();

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

**

.excludeFieldsWithoutExposeAnnotation()//--> 删除此行 那里可能有问题

**


0
投票

@Juanes30 分享的简单解决方案有效:

-保留公共类 com.your.packages.model.** {*;}

其他解决方案甚至 Retrofit 文档都不起作用。


0
投票

如果您使用的是 build.gradle 中的这一行

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
。然后将此行替换为

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

通过此代码,您还可以使用 minifyEnabledshrinkResources

minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

那么他们也不需要应用程序文件夹中的

proguard-rules.txt
文件。


0
投票

您似乎已经发现了代码中的问题。在发布构建配置中添加“minifyEnabled false”会禁用代码缩小。缩小是一个通过删除不必要的字符和重命名变量来减小代码大小的过程,这有时会导致问题,尤其是在发布版本中。

构建类型{ 发布 { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 签名配置 签名配置.releaseConfig } }

© www.soinside.com 2019 - 2024. All rights reserved.