Proguard devolvió error con la biblioteca de Servicios de Google Play
He añadido la biblioteca de Google Play Services a mi aplicación. Todo funciona bien, pero el tamaño de mi apk aumentar en 4 (!) Veces de 350 KB a 1,6 MB. Para eliminar las clases no utilizadas de la biblioteca de Google Play Services, decido usar ProGuard. Pero ahora no puedo ejecutar proyecto o exportarlo a apk porque ProGuard devolvió error. Cuando no uso GPS lib no tengo problemas con la exportación, pero no puedo crear apk con esta biblioteca. He leído mucho sobre este problema, pero cualquier solución que encontré no me ayudó.
Aquí está mi proguard-project.txt (como se recomienda aquí )
- Android form build: proguard no puede encontrar el método de referencia en la clase ViewConfigurationCompatFroyo
- Proguard Android App para compatibilidad con LVL y fragmentos compatibles
- Reducir la biblioteca de Google Play Services para usarla únicamente con Google Analytics
- ¿Se recomienda la combinación de clases con ProGuard en Android / Dalvik?
- Clases desconocidas ILicensingService anota cuando obfusca el proyecto de Android
-keep class * extends java.util.ListResourceBundle { protected Object[][] getContents(); } -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } -keepnames @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }
Aquí está mi proguard.cng
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -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 #keep all classes that might be used in XML layouts -keep public class * extends android.view.View -keep public class * extends android.app.Fragment -keep public class * extends android.support.v4.Fragment #keep all public and protected methods that could be used by java reflection -keepclassmembernames class * { public protected <methods>; } -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); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -dontwarn **CompatHoneycomb -dontwarn org.htmlcleaner.* -dontwarn com.google.android.gms.** -keep class com.google.android.gms.common.GooglePlayServicesUtil {*;} -keep class com.google.ads.** { *;}
Y aquí un error que obtuve después de exportar a apk:
[2014-06-20 23:11:38 - Dictionary] Proguard returned with error code 1. See console [2014-06-20 23:11:38 - Dictionary] You should check if you need to specify additional program jars. [2014-06-20 23:11:38 - Dictionary] Unexpected error while performing partial evaluation: [2014-06-20 23:11:38 - Dictionary] Class = [com/google/android/gms/common/GooglePlayServicesUtil] [2014-06-20 23:11:38 - Dictionary] Method = [showErrorDialogFragment(ILandroid/app/Activity;ILandroid/content/DialogInterface$OnCancelListener;)Z] [2014-06-20 23:11:38 - Dictionary] Exception = [java.lang.IllegalArgumentException] (Can't find any super classes of [com/google/android/gms/common/SupportErrorDialogFragment] (not even immediate super class [android/support/v4/app/DialogFragment])) [2014-06-20 23:11:38 - Dictionary] java.lang.IllegalArgumentException: Can't find any super classes of [com/google/android/gms/common/SupportErrorDialogFragment] (not even immediate super class [android/support/v4/app/DialogFragment]) [2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:299) [2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.value.IdentifiedReferenceValue.generalize(IdentifiedReferenceValue.java:65) [2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:481) [2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.Variables.generalize(Variables.java:136) [2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.TracedVariables.generalize(TracedVariables.java:118) [2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:682) [2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:602) [2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:560) [2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:264) [2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:181) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346) [2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ClassPool.classesAccept(ClassPool.java:116) [2014-06-20 23:11:38 - Dictionary] at proguard.optimize.Optimizer.execute(Optimizer.java:372) [2014-06-20 23:11:38 - Dictionary] at proguard.ProGuard.optimize(ProGuard.java:306) [2014-06-20 23:11:38 - Dictionary] at proguard.ProGuard.execute(ProGuard.java:115) [2014-06-20 23:11:38 - Dictionary] at proguard.ProGuard.main(ProGuard.java:492)
-keep
vez algo malo con mis configuraciones locales … Traté de -keep
y -dontwarn
diferentes clases pero ahora nada ayudó …
¡Por favor, ayúdame!
- Android: onClic no funciona con ProGuard
- Android Proguard - sólo ofuscación
- ¿Cuál es la diferencia entre proguard-android.txt y proguard-rules.pro? - Android
- ProGuard y SharedPreferences
- Firmado apk obtener se estrelló en proguard habilitar
- No se puede habilitar Proguard en un proyecto de Android que contenga jsch lib
- Proguard.cfg Falta
- Kotlin, Proguard y lambdas
Agrega android-support-v4.jar a tu proyecto
He estado haciendo frente al problema similar y pocos otros con Prograud mientras que genera la estructura firmada. Después de mucha búsqueda, finalmente soy capaz de resolver mi problema. Estoy seguro de que la gente tiene mejor solución que debajo de uno.
- Guarde el SDK más reciente y las bibliotecas compatibles.
- Cree una carpeta "libs" dentro de "/ sdk / tools / progaurd /".
- Copie los archivos .jar por ejemplo "android-support-v13.jar", "google-play-services.jar" que necesita su aplicación en la carpeta "/ sdk / tools / progaurd / libs /".
- Copiar .jar en su aplicación "libs" carpeta. También eliminar "android-support-v4.jar", ya que no es necesario, aquí v13 ya es compatible con v4
- Agregue el archivo .jar a su ruta de compilación. También eliminar "android-support-v4.jar" de la ruta de construcción, ya que no es necesario, aquí v13 ya es compatible con v4.
- Añada las líneas siguientes en su archivo application project.properties. Por favor mantenga la meta como "android-22" solamente.
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt # Project target. target=android-22 android.library.reference.1=../../dev/sdk/extras/google/google_play_services/libproject/google-play-services_lib
- Mi archivo Progaurd "proguard-android.txt". Modifiqúelo por favor según su requisito.
-optimizationpasses 2 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -dontshrink -verbose -dontwarn org.apache.** -dontwarn org.slf4j.** -dontwarn org.json.* -dontwarn org.mortbay.** -dontwarn org.apache.log4j.** -dontwarn org.apache.commons.logging.** -dontwarn org.apache.commons.logging.** -dontwarn org.apache.commons.codec.binary.** -dontwarn javax.xml.** -dontwarn javax.management.** -dontwarn java.lang.management.** -libraryjars libs/android-support-v13.jar -libraryjars libs/google-play-services.jar -dontwarn android.support.v13.** -keep class android.support.v13.** { *; } -keep interface android.support.v13.app.** { *; } -keep public class * extends android.support.v13.** -keep public class * extends android.app.Fragment -dontwarn com.google.android.gms.** -keep class com.google.android.gms.** { *; } -dontwarn com.google.code.** -dontwarn oauth.signpost.** -dontwarn twitter4j.** -dontwarn com.google.ads.** -dontwarn org.acra.** -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -allowaccessmodification -keepattributes *Annotation* -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -repackageclasses '' -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 -keep public class com.google.code.linkedinapi.** -keep public class android.content.** { *; } -keep class javax.** { *; } -keep class org.** { *; } -keep class twitter4j.** { *; } -keep class java.lang.management.** { *; } -keep class com.google.code.** { *; } -keep class oauth.signpost.** { *; } -keep class org.acra.** { *; } -keepclassmembers public class com.google.code.linkedinapi.client.impl.LinkedInApiXppClient { public <init>(java.lang.String, java.lang.String); } -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); } -keepclassmembers class **.R$* { public static <fields>; } -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 ** CREATOR; }
Saludos cordiales, Vik
Si utiliza Eclipse ADT: debe hacer referencia a una copia de la biblioteca de servicios de Google Play que copió en su área de trabajo de desarrollo; no debe hacer referencia a la biblioteca directamente desde el directorio SDK de Android.
A pesar de que tenía google play servicios como una biblioteca que todavía tenía que añadir manualmente android-support-v4.jar a mi libs carpeta y haga clic derecho y añadir a construir la ruta de acceso en eclipse.
Mi archivo proguard se veía así:
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontwarn com.google.** -dontpreverify -dontwarn android.support.v4.** -dontwarn org.apache.commons.codec.binary.Base64 -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keep class !mycode.** { *; }
La última línea lo hace tan sólo mi código se ofuscó. Su más limpia.
- AndroidJUnit4 y pruebas parametrizadas
- Mover el puntero del ratón en la pantalla de Android mediante programación