流已重置:空

stream was reset: null

我有一个很难找到的奇怪错误:-(

在我的 Android 应用程序中,我使用 Retrofit2 with Moshi 访问 api。我还使用 proguard-android-optimize.txt 使我的应用程序干净小巧。在我的 proguard-rules.pro 中,我有:

-assumenosideeffects class timber.log.Timber { *; }
-assumenosideeffects class android.util.Log { *; }

使用此组合,当我尝试访问 api.

时出现此错误 stream was reset: null

要修复它,我必须从我的 proguard 配置中删除此 assumenosideeffects 行。但为什么?有谁知道为什么当 proguard 删除日志记录方法时我会遇到这个网络问题?

通配符*匹配所有方法,包括super类中的方法,如Object#wait()。你真的不想删除那些调用,所以你应该明确列出你想要删除调用的方法:

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

如果您指定通配符,ProGuard 已经打印出警告。