Here is my proguard config (I copied it from android tools folder and added some lines).
-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
I would like to use Flurry in my app, but when I try to obfuscate my app with FlurryAgen.jar the proguard fails saying a dozens of errors like this:
Warning: com.flurry.android.ay: can't find referenced class com.google.ads.AdListener
Also proguard fails when I try not to obfuscate the sources.
How to use flurry with proguard? And how to make proguard not to obfuscate my sources?
UPDATE Also I mentioned that the FlurryAgent.jar seems already obfuscated - http://korniltsev.ru/p/jBU0f1c.png . Maybe we can ignore shrinking the whole jar?
Finally I managed to do that like this:
-keep class com.flurry.** { *; }
-dontwarn com.flurry.**
Korniltsev's answer works for me, however the new flurry SDK (3.2.2) suggests to add the following:
-keep class com.flurry.** { *; }
-dontwarn com.flurry.**
-keepattributes *Annotation*,EnclosingMethod
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
There may be some corner cases where the new lines are required, so I ended up going with their README.
I'm not sure how Flurry is specifically interacting with the AdListener, but the name of Google's class is what's being obfuscated.
Try adding the line -keep public class com.google.ads.AdListener
to the proguard file. You may need to add a few more class exceptions if Flurry uses other com.google.ads classes, but that line should solve your immediate warning.
UPDATE: The problem is that the public class method names are being obfuscated for the various ad libraries. So, you may need to include additional proguard settings to include these methods:
-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 *; }
Having worked with Flurry and proguard myself, do be sure to test the apk thoroughly before uploading to your app market(s) of choice.
The official recommended proguard file from Flurry (now owned by Yahoo) is available here:
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.**
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With