2012-08-30 16 views
19

Hier meine proguard config (i kopiert es von Android Tools Ordner und fügte einige ZeilenKann nicht Flut schrumpfen mit 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 

ich Flurry in meiner App nutzen möchten, aber wenn ich versuche zu verschleiern meine app mit FlurryAgen.jar schlägt die proguard ein dosen von Fehlern wie dies sagte:.

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

auch proguard schlägt fehl, wenn ich nicht versuchen, die Quellen zu verschleiern

Wie mit proguard Aufregung verwenden 012?Und wie man proguard macht, um meine Quellen nicht zu verschleiern?

UPDATE Auch erwähnte ich, dass der FlurryAgent.jar schon verschleiertes scheint - http://korniltsev.ru/p/jBU0f1c.png. Kann es sein, dass wir ignorieren können, wie das ganze Glas schrumpft?

Antwort

46

Schließlich gelang es mir, dies zu tun, dass wie:

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

Es:

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

Kannst du bestätigen, dass Flurry in der Praxis immer noch korrekt Statistiken sammelt, wenn er '-dontwarn com.flurry. **'? Ich bin in der gleichen Situation, in der ich versuche, Proguard auf einer Anwendung zu verwenden, die Gebrauch von Flurry macht, bin aber ein wenig vorsichtig, wenn es darum geht, 'dontwarn' zu verwenden, da ich nicht wirklich verstehe, was vor sich geht. –

+8

Follow-up: nur um ein wenig Autorität zu Ihrer Antwort hinzufügen, ich habe gerade heruntergeladen Flurry Android SDK und in der Datei * FlurryAds-READMEv3.0.5.pdf *, ganz am Ende gibt es einen sehr kurzen Abschnitt, der liest: * 7. Verwenden von ProGuard (optional) Wenn Sie planen, ProGuard auf Ihrem APK auszuführen, bevor Sie Ihre App veröffentlichen, müssen Sie Ihrer "proguard.cfg" -Datei Folgendes hinzufügen: -keep class com.flurry. ** {*; } -dontwarn com.flurry. ** * Also ich denke, ich werde diese Methode verwenden, obwohl das Ignorieren dieser vielen Warnungen mich etwas unbequem macht. –

5

Ich bin mir nicht sicher, wie Flurry speziell mit dem AdListener interagiert, aber der Name von Googles Klasse ist, was verschleiert wird.

Versuchen Sie, die Zeile -keep public class com.google.ads.AdListener der Proguard-Datei hinzuzufügen. Möglicherweise müssen Sie einige weitere Klassenausnahmen hinzufügen, wenn Flurry andere com.google.ads-Klassen verwendet. Diese Zeile sollte jedoch Ihre sofortige Warnung lösen.

UPDATE: Das Problem ist, dass die öffentliche Klasse Methodennamen für die verschiedenen Ad-Bibliotheken verschleiert werden. Also, Sie können zusätzliche proguard Einstellungen umfassen müssen, um diese Methoden sind:

-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 *; } 

mit Flurry gearbeitet habe und ProGuard selbst, seien Sie sicher, die apk gründlich zu testen, bevor Sie den App-Markt Hochladen (n) der Wahl.

+0

Vielen Dank für die Antwort! Ich habe viele Warnungen (http://korniltsev.ru/p/jBU05Go.png), so dass meiner Meinung nach das Ignorieren ist nicht die Lösung. Auch ich erwähnte, dass der FlurryAgent.jar bereits verschleiert scheint - http://korniltsev.ru/p/jBU0f1c.png. Kann es sein, dass wir ignorieren können, wie das ganze Glas schrumpft? –

+0

Ja, ich habe Flurry ohne bestimmte Ausnahmen in Proguard verwendet und es funktioniert gut, solange es im Build-Pfad ist. Mit diesen vielen Ausnahmen müssen Sie die Namen von vielen Klassen beibehalten. Vielleicht etwas in der Art von '-halten Sie öffentliche Klasse com.google.ads. ** { public protected *; } würde funktionieren? –

+0

Und ja, ich würde weitermachen und ignorieren schrumpfen die FlurryAgent.jar :-) –

10

Korniltsev Antwort für mich funktioniert, aber die neue Flut SDK (3.2.2) die folgenden hinzuzufügen schlägt Es mag einige Fälle geben, in denen die neuen Zeilen benötigt werden, also ging ich mit ihrer README-Datei zu Ende.

+1

Diese Antwort gilt für Flurry 4.2.0 – deko

3

Die offizielle empfohlene proguard Datei von Flurry (jetzt durch Yahoo gehört) finden Sie hier:

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.**