web-dev-qa-db-fra.com

ProGuard ne fonctionne pas avec okhttp

ProGuard ne jouera pas à Nice avec okhttp et je continue à recevoir les avertissements suivants:

Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl
Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getHeaderFieldLong(Java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl
Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection
Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getHeaderFieldLong(Java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection
Warning:there were 4 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile the code.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)

Voici les paramètres de proguard pour okhttp et retrofit:

-dontwarn rx.**

-dontwarn okio.**

-dontwarn com.squareup.okhttp.*

-dontwarn retrofit.appengine.UrlFetchClient


-keep class retrofit.** { *; }

-keepclasseswithmembers class * {

@retrofit.http.* <methods>; }

-keepattributes Signature 
-keepattributes *Annotation*

Est-ce que cela pourrait avoir quelque chose à voir avec les modifications apportées à ProGuard dans Android Studio 1.0? 

J'ai essayé les réponses aux questions connexes mais ils ont seulement suggéré d'utiliser les paramètres que j'ai déjà.

20
wkarl

J'ai finalement pu résoudre ce problème.

Les avertissements que j'ai rencontrés n'avaient en réalité aucun sens et pouvaient être ignorés.

Au lieu de cela, j'ai oublié de ne pas masquer mes classes de modèles:

-keep class com.example.datamodel.** { *; }

Après ce changement, tout a bien fonctionné.

7
wkarl

Cela fonctionne pour moi:

Vous devez ajouter à votre proguard-rules.pro ces deux lignes: 

-keep class com.squareup.okhttp.** { *; }

-keep interface com.squareup.okhttp.** { *; }

Le fichier complet proguard-rules.pro ressemblera à ceci:

-dontwarn rx.**

-dontwarn okio.**

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

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

-keepattributes Signature
-keepattributes *Annotation*

Source: https://stackoverflow.com/a/24178851/4102045

33
pikufolgado

OkHttp

-keepattributes Signature

-keepattributes Annotation

-keep classe okhttp3. ** {*; }

-keep interface okhttp3. ** {*; }

-dontwarn okhttp3. **

3
Alireza Ghanbarinia

Pour okhttp3, vous avez besoindes éléments suivants :

# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*

# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform
1
serv-inc

cela fonctionne pour moi avec cette configs. utilisez ** au lieu de * pour toutes les sous-classes avec des packages enfants encapsulés

-dontwarn org.xmlpull.v1.**
-dontwarn com.squareup.**
-keep class com.squareup.** { *; }
1
Adem

Ajoutez ceci à vos paramètres de proguard:

-dontwarn com.squareup.okhttp.internal.huc.**

Je pense qu'il est prudent de supposer que vous n'utilisez aucune des classes de com.squareup.okhttp.internal car c'est de là que proviennent vos avertissements.

1
seato

okhttp3 Proguard Rules

Voici le format correct pour okhttp3 Proguard.

-keepattributes Signature  
-keepattributes Annotation  
-keep class okhttp3.** { *; }  
-keep interface okhttp3.** { *; }  
-dontwarn okhttp3.**  
-dontwarn okio.**
1
Bhavik Nathani
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*

# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform
0
Adeeb karim

Au cas où quelqu'un tombe encore ici. La configuration requise de Proguard est documentée et gérée sur le référentiel principal OkHttp:

https://github.com/square/okhttp

0
bplpu