2011-02-18 99 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