2016-03-15 16 views
39

Ho abilitato Proguard, e sto provando a creare l'APK, e ricevo molti avvisi e non so come risolverli.Avvisi con Proguard (con librerie esterne)

sto usando Retrofit, Jsoup e altre biblioteche azionari, sto ottenendo i seguenti avvisi:

Warning:okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
Warning:okio.Okio: can't find referenced class java.nio.file.Files 
Warning:okio.Okio: can't find referenced class java.nio.file.Path 
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning:okio.Okio: can't find referenced class java.nio.file.Path 
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning:okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
Warning:okio.Okio: can't find referenced class java.nio.file.Path 
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning:okio.Okio: can't find referenced class java.nio.file.Path 
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning:okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
Warning:retrofit2.Platform$Java8: can't find referenced method 'boolean isDefault()' in library class java.lang.reflect.Method 
Warning:retrofit2.Platform$Java8: can't find referenced class java.lang.invoke.MethodHandles$Lookup 
Warning:retrofit2.Platform$Java8: can't find referenced class java.lang.invoke.MethodHandle 
Warning:retrofit2.Platform$Java8: can't find referenced class java.lang.invoke.MethodHandles 
Warning:retrofit2.Platform$Java8: can't find referenced class java.lang.invoke.MethodHandle 
Warning:retrofit2.Platform$Java8: can't find referenced class java.lang.invoke.MethodHandles$Lookup 
Warning:retrofit2.Platform$Java8: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
Note: the configuration keeps the entry point 'android.support.v7.widget.FitWindowsLinearLayout { void setOnFitSystemWindowsListener(android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener); }', but not the descriptor class 'android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener' 
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setAccessibilityDelegateCompat(android.support.v7.widget.RecyclerViewAccessibilityDelegate); }', but not the descriptor class 'android.support.v7.widget.RecyclerViewAccessibilityDelegate' 
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setAdapter(android.support.v7.widget.RecyclerView$Adapter); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$Adapter' 
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setRecyclerListener(android.support.v7.widget.RecyclerView$RecyclerListener); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$RecyclerListener' 
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$LayoutManager' 
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setRecycledViewPool(android.support.v7.widget.RecyclerView$RecycledViewPool); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$RecycledViewPool' 
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setViewCacheExtension(android.support.v7.widget.RecyclerView$ViewCacheExtension); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$ViewCacheExtension' 
Warning:there were 22 unresolved references to classes or interfaces. 
Warning:there were 1 unresolved references to library class members. 
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first. 

Ecco il mio Proguard:

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

##---------------Begin: proguard configuration for Gson ---------- 
# Gson uses generic type information stored in a class file when working with fields. Proguard 
# removes such information by default, so configure it to keep all of it. 
-keepattributes Signature 


# Gson specific classes 
-keep class com.abohani.tdroms.SharedPreferencesTools { *; } 
#-keep class com.google.gson.stream.** { *; } 


# Application classes that will be serialized/deserialized over Gson 
-keep class com.abohani.tdroms.** { *; } 
+0

Si dovrebbe aggiungere classe -keep o dontwarn con okio.Okio come ha detto l'avvertimento. –

risposta

101

Quando si utilizza ProGuard si deve sempre risolve tutti gli avvisi.

Questi avvisi indicano che le librerie fanno riferimento ad un codice e non ci sono fonti per questo. Potrebbe e potrebbe non essere ok. Dipende se il codice problematico viene mai chiamato.

In questo caso, gli avvisi per Okio e Retrofit2 possono essere ignorati. Il pacchetto java.nio.* non è disponibile su Android e non verrà mai chiamato. Puoi tranquillamente ignorare questi avvertimenti. Anche le classi Java 8 non saranno usate.

Aggiungi questo alla propria configurazione ProGuard, dovrebbe risolvere il tuo problema:

-dontwarn okio.** 
-dontwarn retrofit2.Platform$Java8 
+0

Android 7 SDK supporta Java 8 e java.nio. C'è ancora questa risposta corretta? (Disclaimer: So poco di Okio, scusa se questa è una domanda stupida). – Blaisorblade

+1

Sì, è ancora valido. Android SDK contiene alcune classi da 'java.nio', ma non contiene nulla da' java.nio.file'. – Tomik

0

pagina Retrofit ha notato la costruzione Proguard:

Piattaforma chiama Class.forName su tipi che non esistono su Android per determinare la piattaforma.

retrofit2.Platform -dontnote

piattaforma utilizzata durante l'esecuzione su Java 8 macchine virtuali. Non verrà utilizzato in fase di runtime.

-dontwarn retrofit2.Platform $ Java8

conservare le informazioni di tipo generico per l'utilizzo da parte di riflessione di convertitori e adattatori.

-keepattributes Firma

mantenere dichiarato eccezioni per l'uso controllato da un'istanza proxy.

-keepattributes eccezioni

verificarlo qui: http://square.github.io/retrofit/

Problemi correlati