Proguard больше не работает с Retrofit

Я нашел старые вопросы, которые касаются той же темы, но с последними версиями ни один из существующих ответов для меня.

Я использую Retrofit в своем проекте. Когда я пытаюсь собрать я получаю следующую ошибку:

предупреждение: retrofit.клиент.OkClient: не удается найти ссылочный класс com.squareup.okhttp.OkHttpClient

Я использую следующее, Но ничто из этого не помогает:

-keepattributes Signature

-keep class retrofit.** { *; }
-keep class retrofit.http.** { *; }
-keep class retrofit.client.** { *; }
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keep class com.google.gson.** { *; }
-keep class com.google.inject.* { *; }
-keep class org.apache.http.* { *; }
-keep class org.codehaus.mojo.** { *; }
-keep class org.apache.james.mime4j.* { *; }
-keep class javax.inject.* { *; }
-keep class sun.misc.Unsafe { *; }

-libraryjars libs/acra-4.5.0.jar
-libraryjars libs/radial-menu-v4.jar

-dontwarn javax.xml.stream.events.**
-dontwarn rx.**
-dontwarn org.apache.lang.**

# Application classes that will be serialized/deserialized over Gson
-keep class com.example.package.network.** { *; }

у кого-нибудь была эта проблема в последнее время и решить это?

3 ответов


может показаться тривиальным, но вы пробовали включить эту строку? (Если вы не используете okhttp, то есть).

-dontwarn com.squareup.okhttp.**

thing is Square не использует Proguard внутренне, поэтому, хотя их библиотеки могут делать некоторые предположения о том, что используется, Вы можете безопасно игнорировать его, если ваш проект его не использует. У меня была такая же проблема с Пикассо и это фиксированная это для меня.


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

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

-keep class sun.misc.Unsafe { *; }
#your package path where your gson models are stored  
-keep class com.example.models.** { *; }

я использовал приведенный выше текст proguard для дооснащения с помощью OKHTTP.

редактировать: Хороший РЕПО для ссылки на многие популярные библиотеки https://github.com/krschultz/android-proguard-snippets


эта конфигурация работала дооснащение с помощью gson.

#Using for retrofit & gson
-keep class com.google.gson.** { *; }
-keep class com.google.inject.** { *; }
-keep class org.apache.http.** { *; }
-keep class org.apache.james.mime4j.* { *; }
-keep class javax.inject.** { *; }
-keep class retrofit.** { *; }
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keepclassmembernames interface * {
    @retrofit.http.* <methods>;
}
-keep interface retrofit.** { *;}
-keep interface com.squareup.** { *; }
-dontwarn rx.**
-dontwarn retrofit.**

плюс вам нужно добавить все классы POJO, которые используются с дооснащением, как показано ниже.

-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.packagename.your.pojo.models.** { *; }

keepattributes, как показано ниже

-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes Deprecated
-keepattributes SourceFile
-keepattributes LineNumberTable
-keepattributes *Annotation*
-keepattributes EnclosingMethod

хорошая дискуссия о proguard с retrofit идет здесь