44

proguard を使用してすべてのログを削除しようとしています: proguard-project.txt に次の行を入力しました:

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

そして、私の project.properties は次のようになります。

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

これにもかかわらず、ログは引き続きアプリケーションに表示されます。ここで私は正確に何を間違っていますか?

4

3 に答える 3

96

「*」ワイルドカードには「Object#wait()」などのメソッドが含まれるため、指定しないでください。メソッドを明示的にリストすることをお勧めします。

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

このオプションは、 のように最適化が無効になっていない場合にのみ関連しproguard-android.txtます。proguard-android-optimize.txt代わりに次を指定する必要があります。

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

または最新のAndroid Gradle プラグインを使用

buildTypes {
    releaseSomeBuildType {
        ...
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'your-proguard-file.pro'
    }
}   
于 2012-11-11T00:51:24.240 に答える
16

かなり遅く、同じ問題に遭遇しました。私はAndroidスタジオ1.3を使用していますが、これが私がやったことです。

  1. リリース ビルドで削除するログ メソッドを追加しますproguard-android-optimize.txt

    -assumenosideeffects class android.util.Log {
        public static boolean isLoggable(java.lang.String, int);
        public static int d(...);
        public static int w(...);
        public static int v(...);
        public static int i(...);
    }
    
  2. build.gradle (Module: app) で、proguard-android.txt の代わりに proguard-android-optimize.txt をデフォルトの proguard ファイルとして設定します。

    buildTypes {
        release {
            minifyEnabled true
            debuggable false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    

これは、proguard-android.txt最適化がフラグ付きでデフォルトでオフになっているためです。

-dontoptimize
-dontpreverify 

これは私にとってはうまくいきました。他の人に役立つことを願っています。

于 2015-09-30T05:48:36.540 に答える
7

次のようにする必要があります。

-assumenosideeffects class android.util.Log {
public static int d(...);
public static int v(...);
public static int i(...);
public static int w(...);
public static int e(...);
public static int wtf(...);
    }

使用しているすべてのログ メソッドを展開します。

于 2012-11-04T13:10:58.143 に答える