practices best android performance android-layout android-fragments proguard

best - Obtención No se puede encontrar una super clase común de[com/loopj/android/http/MySSLSocketFactory] después de habilitar Pro-guard



android best practices (2)

Agrega esto:

-keep class cz.msebera.android.httpclient.** { *; } -dontwarn cz.msebera.android.httpclient.**

Actualización: prueba esto:

-keep class com.loopj.android.** { *; } -keep interface com.loopj.android.** { *; } -keep class cz.msebera.android.** { *; } -keep interface cz.msebera.android.** { *; } -dontwarn cz.msebera.android.** -dontwarn com.loopj.android.**

Después de habilitar Pro-Guard, estaba recibiendo alrededor de 1000 advertencias. Entonces, después de agregar reglas y seguir this y this y las respuestas en Stackoverflow, ahora recibo 1 advertencia y 1 error.

Esto es lo que estoy recibiendo ahora.

Advertencia: Excepción al procesar la tarea java.io.IOException: java.lang.IllegalArgumentException: No se encuentra una súper clase común de [com / loopj / android / http / MySSLSocketFactory] (con 1 súper clases conocidas) y [java / seguridad / KeyStore] (con 2 súper clases conocidas) Error: la ejecución falló para la tarea '': app: transformClassesAndResourcesWithProguardForRelease''.

java.io.IOException: java.lang.IllegalArgumentException: No se puede encontrar una super clase común de [com / loopj / android / http / MySSLSocketFactory] (con 1 súper clases conocidas) y [java / security / KeyStore] (con 2 conocidos súper clases)

proguard-rules.pro

-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -dump class_files.txt -printseeds seeds.txt -printusage unused.txt -printmapping mapping.txt -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -allowaccessmodification -keepattributes *Annotation* -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -repackageclasses '''' #---------------TEST -dontwarn javax.annotation.** -keep class com.google.** -dontwarn com.google.** -keep class com.conviva.** -dontwarn com.conviva.** -keep class com.loopj.android.http.** -keep class org.apache.http.** -keep class rx.internal.util.** -keep class com.algolia.search.** -dontwarn com.loopj.android.http.** -dontwarn org.apache.http.** -dontwarn rx.internal.util.** -dontwarn com.algolia.search.** -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 com.loopj.android.** { *; } -keep interface com.loopj.android.** { *; } -assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); } #---------------TEST -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -dontnote com.android.vending.licensing.ILicensingService # Explicitly preserve all serialization members. The Serializable interface # is only a marker interface, so it wouldn''t save them. -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } # Preserve all native method names and the names of their classes. -keepclasseswithmembernames class * { native <methods>; } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int); } # Preserve static fields of inner classes of R classes that might be accessed # through introspection. -keepclassmembers class **.R$* { public static <fields>; } # Preserve the special static methods that are required in all enumeration classes. -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep public class * { public protected *; } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } ##---------------End: proguard configuration common for all Android apps ---------- #---------------Begin: proguard configuration for support library ---------- -keep class android.support.v4.app.** { *; } -keep interface android.support.v4.app.** { *; } -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; } # The support library contains references to newer platform versions. # Don''t warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. -dontwarn android.support.** -dontwarn com.google.ads.** ##---------------End: proguard configuration for Gson ---------- ##---------------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 # For using GSON @Expose annotation -keepattributes *Annotation* # Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.example.model.** { *; } ##---------------End: proguard configuration for Gson ---------- # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #}

gradle

android { compileSdkVersion 25 buildToolsVersion "24.0.3" useLibrary ''org.apache.http.legacy'' }

EDITAR

Así es como build.gralde pro-guard en la app build.gralde file, estoy usando ''proguard-android-optimize.txt

buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile(''proguard-android-optimize.txt''), ''proguard-rules.pro'' } }


Verifique si está utilizando una biblioteca de terceros como la modificación o el okHttp para las llamadas de red. En tales casos, por ejemplo, la modificación ha eliminado el soporte "paquete org.apache.http". Prueba esto...

-dontwarn org.apache.http.** -dontwarn android.net.http.AndroidHttpClient -dontwarn retrofit.client.ApacheClient$GenericEntityHttpRequest -dontwarn retrofit.client.ApacheClient$GenericHttpRequest -dontwarn retrofit.client.ApacheClient$TypedOutputEntity

Puede consultar aquí: https://github.com/square/retrofit/issues/1019