2013-03-27 75 views
2

我试图编译我的Android应用程序时启用ProGuard的。ProGuard和Android应用程序 - >重复定义

下面是ProGuard的配置。

我遇到的问题是,我得到了很多关于重复定义的警告(几乎所有的类,在我的应用程序或基本的Java类中),更糟糕的是,当我在我的代码中进行更改时,当我在设备上运行时没有反映出来。使用的IntelliJ IDEA 11.1.5

我编译(和发展中国家)(,只是能够在项目结构ProGuard的,我没有将它设置为使用系统的ProGuard配置)。

我看到that other question,但它根本没有任何帮助,我不认为我的问题仅限于第三方库,我想它更多的是设置正确的输入/输出......?

-injars  bin/classes 
-outjars  bin/classes-processed.jar 
-libraryjars /home/matthieu/android/platforms/android-17/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation*,SourceFile,LineNumberTable,*Annotation* 
-renamesourcefileattribute SourceFile 
-dontwarn java.awt.**,javax.security.**,java.beans.**,com.sun.** 

-keep public class my.package.MainMenuActivity 

-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*(...); 
} 

-keep public class * extends android.view.ViewGroup 
-keep public class * extends android.support.v4.app.Fragment 

-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 
-keep class com.actionbarsherlock.** { *; } 
-keep interface com.actionbarsherlock.** { *; } 

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

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

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

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

#ACRA specifics 

# keep this class so that logging will show 'ACRA' and not a obfuscated name like 'a'. 
# Note: if you are removing log messages elsewhere in this file then this isn't necessary 
-keep class org.acra.ACRA { 
    *; 
} 

# keep this around for some enums that ACRA needs 
-keep class org.acra.ReportingInteractionMode { 
    *; 
} 

-keepnames class org.acra.sender.HttpSender$** { 
    *; 
} 

-keepnames class org.acra.ReportField { 
    *; 
} 

# keep this otherwise it is removed by ProGuard 
-keep public class org.acra.ErrorReporter 
{ 
    public void addCustomData(java.lang.String,java.lang.String); 
    public void putCustomData(java.lang.String,java.lang.String); 
    public void removeCustomData(java.lang.String); 
} 

# keep this otherwise it is removed by ProGuard 
-keep public class org.acra.ErrorReporter 
{ 
    public void handleSilentException(java.lang.Throwable); 
} 

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

回答

0

假设你用Ant构建IntelliJ IDEA的里面,你必须不加-injars,-outjars,或-libraryjars选项; Ant脚本已经为你做了。这解释了有关重复的警告。

注意,最好是删除配置的通用部分在你的ProGuard-project.txt和依靠的Android SDK的配置。后者部分由aapt(针对您的项目进行调整)生成,部分由SDK内部维护。

+0

是,除去在固定它开始这些选项。 – Matthieu 2013-03-28 21:15:28

相关问题