wake-up-neo.com

ProGuard funktioniert nicht mit okhttp

ProGuard spielt mit okhttp nicht Nice und ich bekomme die folgenden Warnungen:

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)

Dies sind meine Einstellungen für okhttp und 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*

Könnte dies etwas mit den Änderungen an ProGuard in Android Studio 1.0 zu tun haben? 

Ich habe die Antworten auf verwandte Fragen ausprobiert, aber es wurde nur vorgeschlagen, die Einstellungen zu verwenden, die ich bereits verwendet habe.

20
wkarl

Ich konnte dieses Problem endlich lösen.

Die Warnungen, auf die ich gestoßen bin, waren eigentlich bedeutungslos und können ignoriert werden.

Stattdessen habe ich vergessen, meine Modellklassen nicht zu verschleiern:

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

Nach dieser Änderung hat alles gut funktioniert.

7
wkarl

Das funktioniert für mich:

Sie müssen zu Ihrem proguard-rules.pro diese beiden Zeilen hinzufügen: 

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

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

Die vollständige Datei proguard-rules.pro sieht folgendermaßen aus:

-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*

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

33
pikufolgado

OkHttp

-keepattributes Signatur

-keepattributes Anmerkung

-keep-Klasse okhttp3. ** {*; }

-keep interface okhttp3. ** {*; }

-dontwarn okhttp3. **

3

Für okhttp3 Sie benötigendas Folgende :

# 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

es funktioniert für mich mit diesen configs. Verwenden Sie ** anstelle von * für alle Unterklassen mit gekapselten untergeordneten Paketen

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

Fügen Sie dies Ihren Proguard-Einstellungen hinzu:

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

Ich denke, man kann davon ausgehen, dass Sie keine der Klassen in com.squareup.okhttp.internal verwenden, da Ihre Warnungen von dort stammen.

1
seato

okhttp3 Proguard-Regeln

Hier ist das korrekte Format für 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

Falls hier noch jemand reinfällt. Die erforderliche Proguard-Konfiguration wird im Haupt-OkHttp-Repository dokumentiert und verwaltet:

https://github.com/square/okhttp

0
bplpu