Proguard不再适用于Retrofit

时间:2014-04-05 13:42:19

标签: android 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.** { *; }

最近是否有人遇到此问题并已解决?

3 个答案:

答案 0 :(得分:46)

-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

答案 1 :(得分:5)

可能看似微不足道,但你试过包括这条线吗? (如果你不使用okhttp。)

-dontwarn com.squareup.okhttp.**

Square是内部没有使用Proguard的,所以虽然他们的库可能会对使用的内容做出一些假设,但如果你的项目没有使用它,你可以放心地忽略它。我和毕加索有同样的问题,这也为我解决了这个问题。

答案 2 :(得分:2)

此配置适用于使用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

A nice discussion about proguard with retrofit goes here