2

Android アプリケーションをコンパイルするときに ProGuard を有効にしようとしています。

以下は、ProGuard の構成です。

私が抱えている問題は、定義の重複について多くの警告が表示されることです (ほぼすべてのクラス、私のアプリまたは基本的な Java クラス)。デバイスで実行します。

IntelliJ IDEA 11.1.5 を使用してコンパイル (および開発) しています (プロジェクト構造で ProGuard を有効にするだけで、システムの proguard 構成を使用するように設定していません)。

他の質問を見ましたが、まったく役に立ちません。私の問題はサードパーティのライブラリに限定されているとは思いません。正しい入力/出力を設定することの方が多いと思います...?

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

1 に答える 1

0

IntelliJ IDEA 内で Ant を使用してビルドしていると仮定すると、-injars、-outjars、または -libraryjars オプションを追加してはなりません。Ant スクリプトが既にそれを行っています。これは、重複に関する警告を説明しています。

proguard-project.txt の構成の一般的な部分を削除し、Android SDK の構成に依存することをお勧めします。後者は部分的に aapt によって生成され (プロジェクトに合わせて調整されます)、部分的に SDK 内で維持されます。

于 2013-03-28T19:26:30.763 に答える