ProGuard не работает с 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)
Это мои настройки proguard для okhttp и модификации:
-dontwarn rx.**
-dontwarn okio.**
-dontwarn com.squareup.okhttp.*
-dontwarn retrofit.appengine.UrlFetchClient
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
@retrofit.http.* <methods>; }
-keepattributes Signature
-keepattributes *Annotation*
Может ли это иметь какое-то отношение к изменениям в ProGuard в Android Studio 1.0?
Я попробовал ответы на связанные вопросы, но они только предложили использовать настройки, которые у меня уже есть.
Ответы
Ответ 1
Наконец-то я смог решить эту проблему.
Предупреждения, которые я встречал, были фактически бессмысленными и могут быть проигнорированы.
Вместо этого я забыл не обфускать мои классы моделей:
-keep class com.example.datamodel.** { *; }
После этого изменения все работало нормально.
Ответ 2
Это работает для меня:
Вы должны добавить в свою 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*
Источник: fooobar.com/questions/311904/...
Ответ 3
он работает для меня с этими конфигами. используйте **
вместо *
для всех подклассов с инкапсулированными дочерними пакетами
-dontwarn org.xmlpull.v1.**
-dontwarn com.squareup.**
-keep class com.squareup.** { *; }
Ответ 4
Добавьте это в свои настройки proguard:
-dontwarn com.squareup.okhttp.internal.huc.**
Я думаю, можно с уверенностью предположить, что вы не используете ни один из классов в com.squareup.okhttp.internal
, так как это происходит из ваших предупреждений.
Ответ 5
OkHttp
-keepattributes Подпись
-keepattributes Annotation
-keep class okhttp3. ** {*; }
-keep интерфейс okhttp3. ** {*; }
-dontwarn okhttp3. **