23

難読化された Android アプリケーションを作成したいと考えています。そのためにProGuardを使用しています。すべての Log.* メッセージを自動的に削除したいと考えています。どうやってやるの?この投稿を見つけましたが、まだ取得しています。(難読化をチェックするために逆コンパイラを使用します)。
proguard-project.txt は次のとおりです。

-injars       libs/In.jar
-outjars      libs/Out.jar
#-libraryjars  <java.home>/lib/rt.jar
-libraryjars C:/Users/thomas/android-sdks/platforms/android-7/android.jar

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep public class * {
    public protected *;
}

-keepclassmembernames class * {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

-keepclasseswithmembernames class * {
    native <methods>;
}

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

-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** e(...);
}

どんな助けでも大歓迎です。
ありがとう。

4

4 に答える 4

41

Log.d(TAG, "...");これは、すべてのデバッグ呼び出しとエラーLog.e(TAG, "...")呼び出しのみを削除します。

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** e(...);
}

すべてのログ コールを削除するには、次のようにします。

-assumenosideeffects class android.util.Log { *; }
于 2012-09-12T21:34:06.180 に答える
18

デフォルトの Android Proguard 構成では、最適化が無効になっています。有効にするには、プロジェクトの project.properties ファイルで、proguard-android.txt の代わりに proguard-android-optimize.txt を使用します。

于 2013-02-28T23:47:53.770 に答える
12

プロガードに頭を悩ませているように見えない人は、2 つのことを確認する必要があります。

1: @yorkw より

-assumenosideeffects class android.util.Log { *; }

2: @Gallal から

プロジェクトの project.properties ファイルで次を使用します。

proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt

それ以外の

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

これは、sdk に含まれているため、「すぐに使える」2 つのプロガード オプションがあるためです。

android-adk > tools > proguard

次の 2 つのファイルが含まれます。

proguard-android.txt
proguard-android-optimize.txt

それが他の誰かを助けてくれることを願っています。

于 2014-01-17T20:42:37.297 に答える
10

Android Studio をお持ちの場合はbuild.gradle、メイン アプリケーションの を変更する必要があります。

gradle ファイルではproguard-android-optimize.txt、デフォルト ファイルとしての使用法を指定する必要があります。

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        // With the file below, it does not work!
        //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

実際、デフォルトproguard-android.txtファイルでは、次の 2 つのフラグで最適化が無効になっています。

-dontoptimize
-dontpreverify

ファイルはこれらproguard-android-optimize.txtの行を追加しないため、今すぐ機能しassumenosideeffectsます。

次に、Eclipseなどの他の回答で述べたように、メインのproguardファイルに次の行を追加するだけです:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** e(...);
}
于 2015-09-09T15:23:56.683 に答える