0

Eclipse で新しい Android プロジェクトを作成すると、次のデフォルトの 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行は、ファイルの残りの部分をコメントアウトしていることに注意してください。それが意図的なものなのか、それともタイプミスなのか、その行の最後の2文字を逆にする必要があるのか​​ 疑問に思っています:

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

ADT プラグイン 9.0 と Eclipse 3.6.1 を使用しています。

4

3 に答える 3

1

わかった。私は今、少しばかげていると感じています。答えは、ここには何もコメントがないということです。行は、次のように間隔を空けて配置されているかのように解釈する必要があります。

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

*ワイルドカード文字であり、この場合、フォーラムによって行われた構文の強調表示は間違っています。

于 2011-02-18T21:11:42.717 に答える
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>;
}
于 2011-02-18T20:54:21.767 に答える
0

keep ステートメントは、プロガードが縮小ステップでクラスまたはクラス メンバーを削除したり、難読化ステップでそれらの名前を変更したりするのを防ぐために使用されます。

アクティビティは、プロジェクトから削除したくない可能性が最も高いクラスです。AndroidのProGuardページには、

一部の状況では、proguard.cfg ファイルのデフォルト構成で十分です。ただし、多くの状況では ProGuard が正しく分析するのが難しく、使用されていないと思われるコードを削除する可能性がありますが、アプリケーションは実際には必要です。いくつかの例は次のとおりです。

  • AndroidManifest.xml ファイルでのみ参照されるクラスのリスト項目

そのキープ部分はデフォルトの設定でコメントアウトされているので、コメントアウトされた-keep アクティビティ行はプロガードがアクティビティを削除するのを防ぐため、それは意図されていると思います。

要するに:タイプミスなし

于 2011-02-18T20:54:59.273 に答える