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.** { *; }
У кого-нибудь была эта проблема в последнее время и разрешил ее?
Ответы
Ответ 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 с модификацией идет здесь