android - ProGuard 不能与 okhttp 一起使用

标签 android android-studio proguard retrofit okhttp

ProGuard 无法与 okhttp 配合使用,我不断收到以下警告:

Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl
Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getHeaderFieldLong(java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl
Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection
Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getHeaderFieldLong(java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection
Warning:there were 4 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile the code.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)

这些是我对 okhttp 和改造的 proguard 设置:

-dontwarn rx.**

-dontwarn okio.**

-dontwarn com.squareup.okhttp.*

-dontwarn retrofit.appengine.UrlFetchClient


-keep class retrofit.** { *; }

-keepclasseswithmembers class * {

@retrofit.http.* <methods>; }

-keepattributes Signature 
-keepattributes *Annotation*

这可能与 Android Studio 1.0 中对 ProGuard 的更改有关吗?

我尝试了相关问题的答案,但他们只建议使用我已有的设置。

最佳答案

这对我有用:

您必须在您的 proguard-rules.pro 中添加这两行:

-keep class com.squareup.okhttp.** { *; }

-keep interface com.squareup.okhttp.** { *; }

完整的 proguard-rules.pro 文件如下所示:

-dontwarn rx.**

-dontwarn okio.**

-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }

-dontwarn retrofit.**
-dontwarn retrofit.appengine.UrlFetchClient
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

-keepattributes Signature
-keepattributes *Annotation*

来源:https://stackoverflow.com/a/24178851/4102045

关于android - ProGuard 不能与 okhttp 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27443241/

相关文章:

android - 无法使用 arrayadapter 禁用 ListView 中的单选按钮

android-studio - Android Studio构建错误不会消失

javascript - cordova 未定义 - cordova.js 已加载::Ionic

android - 如何通过单击按钮从大约返回到上一个 Activity ?

java - 从 2.3 升级后通过 Android Studio 2.3.3 安装 apk 的未知失败 (UnsatisfiedLinkError)

Android WebView URL拦截,我只想加载一个网站及其页面,而不是其他任何东西

android - 用新 Android Studio 项目的重建版本替换当前应用程序

android - SAAgent.class 上的 Proguard 错误

java - 如何在 Android 中使用 Proguard 并保护应用程序的功能完整性?

android - 与proguard混淆