web-dev-qa-db-fra.com

Mise en garde avec Proguard (avec des bibliothèques externes)

J'ai activé Proguard et j'essaie de construire l'APK. Je reçois de nombreux avertissements et je ne sais pas comment les résoudre.

J'utilise Retrofit, Jsoup et d'autres bibliothèques de stock, les avertissements suivants me parviennent:

 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.

Voici mon 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.** { *; }
50
Jaeger

Lorsque vous utilisez ProGuard, vous devez toujours résoudre tous les avertissements.

Ces avertissements vous indiquent que les bibliothèques font référence à du code et qu’il n’existe aucune source pour cela. Cela pourrait et pourrait ne pas être ok. Cela dépend si le code problématique est appelé.

Dans ce cas, les avertissements pour Okio et Retrofit2 peuvent être ignorés. Paquet Java.nio.* _ n'est pas disponible sur Android et ne sera jamais appelé. Vous pouvez ignorer ces avertissements en toute sécurité. De plus, Java 8 classes ne seront pas utilisées.

Ajoutez ceci à votre configuration ProGuard, cela devrait résoudre votre problème:

-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
121
Tomik

La page de modernisation a noté sur la construction de proguard:

Plate-forme appelle Class.forName sur les types qui n'existent pas sur Android pour déterminer la plate-forme.

-dontnote retrofit2.Platform

Plate-forme utilisée lors de l'exécution sur Java 8 ordinateurs virtuels. Ne sera pas utilisé au moment de l'exécution.

-dontwarn retrofit2.Platform $ Java8

Conservez les informations de type génériques pour pouvoir les utiliser par réflexion par les convertisseurs et les adaptateurs.

-keepattributes Signature

Conserver les exceptions vérifiées déclarées pour une utilisation par une instance de proxy.

-keepattributes Exceptions

vérifiez-le ici: http://square.github.io/retrofit/

1
Chi Minh Trinh