2012-08-30 95 views
19

這裏是我的ProGuard配置文件(我在Android tools文件夾複製,並增加了一些線條無法收縮亂舞使用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 

我想在我的應用程序使用亂舞,但是當我試圖混淆我與FlurryAgen.jar應用ProGuard的失敗,說錯誤的這樣一個dosens:

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

而且當我嘗試不要混淆來源proguard的失敗

如何使用亂舞使用ProGuard 012?如何使proguard不混淆我的來源?

UPDATE 此外,我提到FlurryAgent.jar似乎已經模糊 - http://korniltsev.ru/p/jBU0f1c.png。可能我們可以忽略整個罐子的縮小?

回答

46

最後我總算是這樣做的:

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

您是否已經能夠驗證Flurry是否仍然在實踐中正確收集統計信息,因爲'-twtwarn com.flurry。**'?我處於嘗試在使用Flurry的應用程序中使用Proguard的情況,但是在使用'dontwarn'時我有點小心謹慎,因爲我不明白髮生了什麼。 –

+8

後續行動:爲了給你的答案增加一點權限,我剛剛重新下載了Flurry Android SDK,並在文件* FlurryAds-READMEv3.0.5.pdf *中,最後有一個非常簡短的部分全文如下: * 7。使用ProGuard(可選) 如果您計劃在發佈應用程序之前在APK上運行ProGuard,則需要將以下內容添加到「proguard.cfg」文件中: -keep class com.flurry。** {*; } -dontwarn com.flurry。** * 所以我想我會使用這種方法,即使忽略這麼多的警告讓我有點不舒服。 –

5

我不確定Flurry是如何專門與AdListener進行交互的,但Google類的名稱是被混淆的。

嘗試將行-keep public class com.google.ads.AdListener添加到proguard文件中。如果Flurry使用其他com.google.ads類,則可能需要添加更多類例外,但該行應解決您的即時警告。

更新: 問題是公共類方法名稱被混淆爲各種廣告庫。所以,你可能需要包括額外的proguard的設置,包括以下方法:

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

已經有亂舞工作,ProGuard的自己,千萬要確保上傳到您選擇的應用程序市場(S)前徹底測試APK。

+0

謝謝你的答覆!我有很多警告(http://korniltsev.ru/p/jBU05Go.png),所以我認爲忽略它們不是他的解決方案。我還提到FlurryAgent.jar似乎已經被混淆了 - http://korniltsev.ru/p/jBU0f1c.png。可能我們可以忽略整個罐子的縮小? –

+0

是的,我已經在proguard中使用了Flurry,沒有任何特定的異常,只要它在構建路徑中,它就可以工作。 有了這麼多的例外,你需要保留好許多類的名字。也許沿着 '-keep public class com.google.ads。** { public protected *; }'會工作嗎? –

+0

是的,我會繼續並忽略FlurryAgent.jar的縮小:-) –

10

Korniltsev的回答對我的作品,但是新亂舞SDK(3.2.2)建議增加以下內容:

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

有可能是一些需要新行的角落案例,所以我最終選擇了自述文件。

+1

此答案適用於Flurry 4.2.0 – deko

3

官方從亂舞(現都由雅虎擁有)推薦proguard的文件可以在這裏找到:

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