【问题标题】:ProGuard with Android app -> duplicate definition带有 Android 应用程序的 ProGuard -> 重复定义
【发布时间】:2013-03-27 17:07:43
【问题描述】:

我正在尝试在编译我的 Android 应用程序时启用 ProGuard。

下面是 ProGuard 的配置。

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

我正在使用 IntelliJ IDEA 11.1.5 编译(和开发)(并且只是在项目结构中启用 ProGuard,我没有将其设置为使用系统 proguard 配置)。

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

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

【问题讨论】:

    标签: android intellij-idea proguard


    【解决方案1】:

    假设您在 IntelliJ IDEA 中使用 Ant 构建,您不能添加 -injars、-outjars 或 -libraryjars 选项; Ant 脚本已经为您做到了。这解释了有关重复的警告。

    请注意,最好删除 proguard-project.txt 中配置的通用部分,并依赖 Android SDK 的配置。后者部分由 aapt 生成(针对您的项目进行了调整),部分在 SDK 中维护。

    【讨论】:

    • 是的,删除开头的那些选项修复了它。
    猜你喜欢
    • 2012-02-07
    • 2016-06-15
    • 1970-01-01
    • 2012-02-03
    • 2019-09-25
    • 2014-03-15
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多