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í )

-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!

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.

  1. Guarde el SDK más reciente y las bibliotecas compatibles.
  2. Cree una carpeta "libs" dentro de "/ sdk / tools / progaurd /".
  3. 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 /".
  4. 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
  5. 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.
  6. 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 
  1. 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.

https://developers.google.com/android/guides/setup

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.

  • Generar firmado APK: Errores mientras se construye APK Android Studio
  • Android ProGuard: no se puede encontrar la clase referenciada
  • ¿Cómo enseño a ProGuard a deshacerse de algo que es mantener que no estoy usando?
  • ¿Cuál es la diferencia entre `com.example. **` y `com.example. ** {*;}`?
  • Android-Studio-1.2.RC Advertencias de Proguard en la referencia de la biblioteca de Square Okio
  • Howto in eclipse depura el archivo apk ofuscado por Proguard
  • Android-maven-plugin: método de despliegue que no elimina SharedPreferences
  • ¿Cómo usar el nuevo Android 2.0 Shrinker y Resource Shrinker juntos?
  • Decoración de artículos Proguard y RecyclerView
  • Error de Proguard al exportar una aplicación firmada usando el paquete de compatibilidad de nido de abeja android.support.v4.app
  • Android - proguard error en el android studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.