java android obfuscation proguard flurry

java - No se puede encoger la ráfaga con proguard



android obfuscation (5)

Aquí está mi configuración de programa (lo copié de la carpeta de herramientas de Android y agregué algunas líneas

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* -optimizationpasses 5 -allowaccessmodification -dontpreverify # The remainder of this file is identical to the non-optimized version # of the Proguard configuration file (except that the other file has # flags to turn off optimization). -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose -keepattributes *Annotation* -keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native <methods>; } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class **.R$* { public static <fields>; } # 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.** ###################### # added by me ######################## # guava -keepclasseswithmembers class com.google.common.base.internal.Finalizer{ <methods>; } -dontwarn sun.misc.Unsafe -dontwarn com.google.common.collect.MinMaxPriorityQueue # #Action Bar Sherlock -keep class android.support.v4.app.** { *; } -keep interface android.support.v4.app.** { *; } -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; } #-dontobfuscate #-libraryjars libs/FlurryAgent.jar

Me gustaría usar Flurry en mi aplicación, pero cuando intento ofuscar mi aplicación con FlurryAgen.jar, el programa falla al decir una dosis de errores como este:

Warning: com.flurry.android.ay: can''t find referenced class com.google.ads.AdListener

También el programa falla cuando intento no ofuscar las fuentes.

¿Cómo usar flurry con proguard? ¿Y cómo hacer un programa para no ofuscar mis fuentes?

ACTUALIZACIÓN También mencioné que el FlurryAgent.jar parece ya ofuscado - http://korniltsev.ru/p/jBU0f1c.png . ¿Podemos ignorar encogiendo todo el frasco?


El archivo oficial recomendado de Flurry (ahora propiedad de Yahoo) está disponible aquí:

https://developer.yahoo.com/flurry/docs/publisher/code/android/

-­keep class com.flurry.** { *; } -­dontwarn com.flurry.** -­keepattributes *Annotation*,EnclosingMethod,Signature -­keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } # Google Play Services library -­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; } #If you are using the Google Mobile Ads SDK, add the following: # Preserve GMS ads classes -­keep class com.google.android.gms.ads.** { *; } -­dontwarn com.google.android.gms.ads.** #If you are using the InMobi SDK, add the following: # Preserve InMobi Ads classes -­keep class com.inmobi.** { *; } -­dontwarn com.inmobi.** #If you are using the Millennial Media SDK, add the following: # Preserve Millennial Ads classes -­keep class com.millennialmedia.** { *; } -­dontwarn com.millennialmedia.**


Finalmente logré hacerlo así:

-keep class com.flurry.** { *; } -dontwarn com.flurry.**



La respuesta de Korniltsev funciona para mí, sin embargo, el nuevo SDK (3.2.2) sugiere agregar lo siguiente:

-keep class com.flurry.** { *; } -dontwarn com.flurry.** -keepattributes *Annotation*,EnclosingMethod -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); }

Puede haber algunos casos de esquina donde se requieren las nuevas líneas, así que terminé yendo con su README.


No estoy seguro de cómo está interactuando Flurry específicamente con AdListener, pero el nombre de la clase de Google es lo que se confunde.

Intente agregar la -keep public class com.google.ads.AdListener de la línea de mantenimiento al archivo de proguard. Es posible que deba agregar algunas excepciones de clase más si Flurry usa otras clases com.google.ads, pero esa línea debería resolver su advertencia inmediata.

ACTUALIZACIÓN: El problema es que los nombres de los métodos de clase públicos se están ocultando para las diversas bibliotecas de anuncios. Por lo tanto, es posible que debas incluir configuraciones de programa adicionales para incluir estos métodos:

-keep public class com.google.ads.** { public protected *; } -keep public class com.inmobi.androidsdk.** { public protected *; } -keep public class com.millenialmedia.android.** { public protected *; } -keep public class com.mobclix.android.sdk.** { public protected *; } -keep public class com.jumptap.adtag.** { public protected *; }

Después de haber trabajado con Flurry y proguard, asegúrese de probar el apk antes de subirlo a los mercados de su elección.