Подтвердить что ты не робот

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

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

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

Предупреждение: retrofit.client.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.** { *; }

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

4b9b3361

Ответ 1

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

-dontwarn com.squareup.okhttp.**

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

Ответ 2

-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

Ответ 3

Эта конфигурация работала для модификации с помощью 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 с модификацией идет здесь