2011-02-18 96 views
0

當我在Eclipse中創建一個新的Android項目,創建以下默認proguard.cfg文件:默認proguard.cfg錯誤?

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

注意,-optimizations行註釋掉文件的其餘部分。我想知道,如果它是故意或者如果它是一個錯字和該行應該有它的最後兩個字符逆轉:

-optimizations !code/simplification/arithmetic,!field/*,!class/merging*/ 

我使用ADT插件9.0和Eclipse 3.6.1。

回答

1

好。我現在感覺有點愚蠢。答案是這裏沒有任何評論。該行應被解釋爲,如果都像這樣隔開:

-optimizations !code/simplification/arithmetic, 
       !field/*, 
       !class/merging/* 

*是通配符和語法爲論壇做了高亮是錯誤在這種情況下。

0

你確定你沒有意外這麼做嗎?

我剛創建了一個虛擬項目,並以此結束。我會嘗試刪除該行,看看是否有效。

-injars  bin/classes 
-injars  libs 
-outjars  bin/classes-processed.jar 
-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 
+0

我沒有意外做到這一點;這個文件是自動生成的。 – 2011-02-18 21:12:11

+0

有趣的是,它與我所得到的不同。您在創建項目時目標是什麼平臺? (我瞄準了SDK 1.6。) – 2011-02-18 21:21:51

0

保語句用於防止從proguard的在收縮步驟刪除類或類成員和從混淆步驟重命名它們。

活動是一個你很可能不想從你的項目中蹦出來的類。在Android的ProGuard page它說

對於某些情況下,proguard.cfg文件中的默認配置就足夠了。但是,許多情況下ProGuard難以正確分析,並且可能會刪除它認爲未被使用的代碼,但實際上您的應用程序需要它。一些例子包括:

  • 列表項都在AndroidManifest.xml只是引用的類文件

自那部分保持在默認的配置,我認爲這是intented註釋掉,因爲out註釋-keep行爲行會阻止proguard消除任何活動。

總之:沒有錯字

+0

事實證明它根本不是一個評論。 – 2011-02-18 21:12:42