2014-12-12 23 views
17

ProGuard non giocherà bello con okhttp e continuo a ricevere i seguenti avvisi:ProGuard che non funziona con okhttp

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) 

Queste sono le mie impostazioni Proguard per okhttp e 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* 

Potrebbe questo avere qualcosa a che fare con le modifiche a ProGuard in Android Studio 1.0?

Ho provato le risposte a domande correlate, ma hanno suggerito solo di utilizzare le impostazioni che ho già.

risposta

7

Sono finalmente riuscito a risolvere questo problema.

Gli avvertimenti che ho riscontrato erano in realtà privi di significato e possono essere ignorati.

Invece ho dimenticato di non offuscare le mie classi modello:

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

Dopo questa modifica tutto ha funzionato bene.

+0

I campi rinominati a 'a' e' b' semplicemente non sono divertenti! – EpicPandaForce

1

funziona per me con questa configurazione. utilizzare ** invece di * per tutte le classi secondarie con pacchetti figlio incapsulati

-dontwarn org.xmlpull.v1.** 
-dontwarn com.squareup.** 
-keep class com.squareup.** { *; } 
+2

-dontwarn com.squareup. ** solo sopprime gli avvertimenti. Posso creare l'APK ma okhttp non funzionerà. Dopo aver decommentato la riga 2, gli stessi avvertimenti si sono manifestati nuovamente. – wkarl

30

questo funziona per me:

Devi aggiungere ai proguard-rules.pro queste due linee:

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

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

Completo proguard-rules.pro file w aspetto malato come:

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

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

+0

senza
funziona per me! – Roman

+0

Ancora non funziona per me. Gli avvisi sono soppressi ma l'APK non funziona correttamente. – wkarl

+0

L'APK è stato creato? Se gli avvertimenti sono soppressi e l'APK è stato creato, penso che il problema sia più legato a come usi la libreria okhttp e non alla configurazione di ProGuard in Android Studio. – pikufolgado

1

Aggiungere questo alle impostazioni Proguard:

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

penso che sia lecito ritenere che non si sta utilizzando una delle classi in com.squareup.okhttp.internal dal momento che è da dove provengono i vostri avvisi.

+0

Solo ignorare gli avvertimenti mi consente di compilare ma anche di rompere la funzionalità, provata prima. – wkarl

+0

Cosa intendi per "funzionalità interruzioni"? – seato

+0

Sono stato in grado di risolvere questo problema, per favore vedi la mia risposta: http://stackoverflow.com/a/31872274/2427585 Il tuo punto era valido, tuttavia, gli avvertimenti possono essere tranquillamente ignorati. – wkarl

1

OkHttp

-keepattributes Firma

-keepattributes annotazione

-keep class okhttp3 ** {*.; }

-keep interfaccia okhttp3. ** {*; }

-dontwarn okhttp3. **

Problemi correlati