2012-08-30 16 views
19

Aquí es mi Proguard config (lo copié de la carpeta herramientas androide y añadido algunas líneasNo se puede reducir ráfaga con Proguard

-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 utilizar la ráfaga en mi aplicación, pero cuando intento para ofuscar mi aplicación con la FlurryAgen.jar Proguard no decir una dosens de errores de la siguiente manera:.

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

también Proguard falla cuando intento de no confundir las fuentes

Cómo utilizar ráfaga con Proguard 012?¿Y cómo hacer proguard para no ofuscar mis fuentes?

ACTUALIZACIÓN También he mencionado que el FlurryAgent.jar parece ya ofuscado - http://korniltsev.ru/p/jBU0f1c.png. ¿Puede ser que podamos ignorar la reducción de toda la jarra?

Respuesta

46

fin he conseguido hacerlo de esta manera:

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

¿ha podido verificar que Flurry todavía está recopilando estadísticas correctamente en la práctica, dado el '-dontwarn com.flurry. **'? Estoy en la misma situación tratando de usar Proguard en una aplicación que hace uso de Flurry, pero soy un poco cauteloso cuando se trata de usar 'dontwarn' dado que realmente no entiendo lo que está pasando. –

+8

Seguimiento: solo para agregar un poco de autoridad a su respuesta, acabo de volver a descargar el SDK de Flurry para Android y en el archivo * FlurryAds-READMEv3.0.5.pdf *, al final, hay una sección muy breve que lee: * 7. Uso de ProGuard (Opcional) Si planea ejecutar ProGuard en su APK antes de liberar su aplicación, deberá agregar lo siguiente a su archivo "proguard.cfg": -keep class com.flurry. ** {*; } -dontwarn com.flurry. ** * Así que supongo que usaré este método, aunque ignorar estas muchas advertencias me hace sentir algo incómodo. –

5

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

Intente agregar la línea -keep public class com.google.ads.AdListener al archivo 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 la clase pública están siendo ofuscado por las distintas bibliotecas de anuncios. Por lo tanto, es posible que tenga que incluir ajustes Proguard 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 *; } 

haber trabajado con Ráfaga y PROGUARD a mí mismo, no estar seguro de probar el apk a fondo antes de subir a su mercado (s) aplicación de elección.

+0

Gracias por la respuesta! Tengo muchas advertencias (http://korniltsev.ru/p/jBU05Go.png), así que, en mi opinión, ignorarlas no es la solución. También mencioné que FlurryAgent.jar parece ya ofuscado - http://korniltsev.ru/p/jBU0f1c.png. ¿Puede ser que podamos ignorar la reducción de toda la jarra? –

+0

Sí, he usado Flurry sin excepciones específicas en proguard y funciona bien siempre y cuando esté en la ruta de compilación. Con tantas excepciones, necesita conservar los nombres de muchas clases. Tal vez algo similar a '-keep public class com.google.ads. ** { public protected *; } '¿funcionaría? –

+0

Y sí, seguiría adelante e ignoraría la reducción de FlurryAgent.jar :-) –

10

respuesta de Korniltsev funciona para mí, sin embargo, el nuevo SDK ráfaga (3.2.2) sugiere añadir lo siguiente:

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

Hay pueden ser algunos casos de esquina donde se requieren las nuevas líneas, así que terminé yendo con su LÉAME.

+1

Esta respuesta es válida para Flurry 4.2.0 – deko

3

El funcionario recomendó archivo Proguard de ráfaga (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.** 
Cuestiones relacionadas