2017-08-22 1 views
3

quand je suis en train minifiyEnabled à true dans ma toute variante (debug ou libération), il me donne ci-dessous une erreur -"minifyEnabled true" me pose problème, pourquoi?

Warning:retrofit.appengine.UrlFetchClient: can't find referenced class com.google.appengine.api.urlfetch.HTTPRequest 
Warning:retrofit.appengine.UrlFetchClient: can't find referenced class com.google.appengine.api.urlfetch.HTTPHeader 
Warning:library class android.webkit.WebView depends on program class android.net.http.SslCertificate 
Warning:library class android.webkit.WebViewClient depends on program class android.net.http.SslError 
Warning:library class org.apache.http.conn.ssl.SSLSocketFactory depends on program class org.apache.http.conn.scheme.HostNameResolver 
Warning:library class org.apache.http.conn.ssl.SSLSocketFactory depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.params.HttpConnectionParams depends on program class org.apache.http.params.HttpParams 
Warning:there were 176 unresolved references to classes or interfaces. 
Warning:there were 23 instances of library classes depending on program classes. 
Warning:there were 6 unresolved references to program class members. 
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first. 
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForProductionDebug'. 
> Job failed, see logs for details 

Il fonctionne bien dans l'émulateur ou un appareil si son Lolipop ou plus.

Mon problème a été résolu si je désactivais ou rendait minifyEnabled à false, mais je ne le souhaite pas vraiment.

Mon outil gradle est build: gradle: 2.3.0'

Et multiDexEnabled vrai

Remarque - dans mon proguard-rules.pro Je ne suis pas en possession de tout classe ou un attribut fichier.

+0

Veuillez supprimer tous les avertissements en premier comme suggéré dans les journaux – Pankaj

+0

Je pense que vous devez configurer la règle proguard pour la mise à niveau. – darwin

+0

Le retrofit utilise la fonction de réflexion de Java, il a donc besoin de certains noms et attributs pour rester identiques à ceux de la source. Vous devez configurer proguard pour ignorer ceux qui s'obscurcissent. Cela signifie évidemment que certaines parties de votre code ne seront pas obscurcies, donc vous devriez plutôt faire attention aux parties qui sont définies comme ça, et garder juste une partie minimale du code (principalement des classes vides contenant des valeurs avec get/set (ou juste champs publics)) et déplacez les détails d'implémentation restants dans des classes pouvant être masquées. Même le code obfusqué est encore bien lisible pour un bon codeur, ne dérange pas beaucoup. – Ped7g

Répondre

0

Essayez d'ajouter les lignes suivantes à votre configuration proguard:

# Platform calls Class.forName on types which do not exist on Android to determine platform. 
-dontnote retrofit2.Platform 
# Platform used when running on Java 8 VMs. Will not be used at runtime. 
-dontwarn retrofit2.Platform$Java8 
# Retain generic type information for use by reflection by converters and adapters. 
-keepattributes Signature 
# Retain declared checked exceptions for use by a Proxy instance. 
-keepattributes Exceptions 

Il est pour la bibliothèque de rénovation. Pour les autres bibliothèques externes, vous pouvez utiliser cette méthode avec des packages propres que vous voulez ignorer.

-dontwarn org.apache.** - par exemple

En savoir plus sur l'utilisation ProGuard vous pouvez trouver here

2

Après beaucoup de expériences et je Recherches ai la solution. Nous devons ajouter garder et dontwarn statments dans notre proguard-rules.pro fichier -

# Retrofit 1.X 
-keep class com.squareup.okhttp.** { *; } 
-keep class retrofit.** { *; } 
-keep interface com.squareup.okhttp.** { *; } 

-dontwarn com.squareup.okhttp.** 
-dontwarn okio.** 
-dontwarn retrofit.** 
-dontwarn rx.** 

-keepclasseswithmembers class * { 
    @retrofit.http.* <methods>; 
} 

# If in your rest service interface you use methods with Callback argument. 
-keepattributes Exceptions 

# If your rest service methods throw custom exceptions, because you've defined an ErrorHandler. 
-keepattributes Signature 



# Proguard configuration for amazon Jackson 2.x (fasterxml package instead of codehaus package) 

-keep class com.amazonaws.** { *; } 
-keepnames class com.amazonaws.** { *; } 
-dontwarn com.amazonaws.** 
-dontwarn com.fasterxml.** 


-keep public class com.google.android.gms.* { public *; } 
-dontwarn com.google.android.gms.** 

-dontwarn org.mockito.** 
-dontwarn sun.reflect.** 
-dontwarn android.test.** 



-dontwarn org.hamcrest.** 
-dontwarn android.test.** 
-dontwarn android.support.test.** 

-keep class org.hamcrest.** { 
    *; 
} 

-keep class org.junit.** { *; } 
-dontwarn org.junit.** 

-keep class junit.** { *; } 
-dontwarn junit.** 

-keep class sun.misc.** { *; } 
-dontwarn sun.misc.** 


-keep public class android.net.http.SslError 
-keep public class android.webkit.WebViewClient 

-dontwarn android.webkit.WebView 
-dontwarn android.net.http.SslError 
-dontwarn android.webkit.WebViewClient 


-keep class org.apache.http.** { *; } 
-dontwarn org.apache.http.** 

Remarque - J'ai suivi les avertissements dans les messages et en choisissant un par un mis ma règle PROGUARD en conséquence.