web-dev-qa-db-ja.com

proguardを使用したログコールの削除

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

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

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

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

それにもかかわらず、ログはアプリケーションに表示され続けます。ここで何が間違っていますか?

38
user1667307

「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'
    }
}   
89
Eric Lafortune

かなり遅いので、同じ問題に遭遇しました。私はAndroid studio 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(モジュール:アプリ)で、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 

これは私のために働いた、それが他の人を助けることを願っています。

12
arshiya

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

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

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

6
Frank