Proguard no longer works with Retrofit

前端 未结 3 1484
萌比男神i
萌比男神i 2020-12-16 15:34

I have found older questions which touch on the same subject but with the latest versions none of the available answers work for me.

I am using Retrofit in my projec

相关标签:
3条回答
  • 2020-12-16 15:55

    This configuration worked for retrofit with 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.**
    

    plus you need to add all the POJO classes which is used with retrofit just like below.

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

    keepattributes like below

    -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

    0 讨论(0)
  • 2020-12-16 16:07

    Might seem trivial, but have you tried including this line? (If you don't use okhttp that is).

    -dontwarn com.squareup.okhttp.**
    

    Thing is Square doesn't use Proguard internally, so while their libraries may make some assumptions of what's being used, you can safely ignore it if your project doesn't use it. I had the same issue with Picasso and this fixed it for me.

    0 讨论(0)
  • 2020-12-16 16:08
    -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.** { *; }
    

    I have used the above proguard text for Retrofit with OKHTTP.

    EDIT: Nice repo to refer for many popular libraries https://github.com/krschultz/android-proguard-snippets

    0 讨论(0)
提交回复
热议问题