web-dev-qa-db-ja.com

Androidログ呼び出しのみを削除するようにproguardを構成する方法

Androidアプリ(リリースビルド用)からAndroid.util.Logへの呼び出しのみを削除するようにproguardを構成しようとしています。特にproguardに難読化や縮小を行わせたくありません。コードの。

これは私が試した構成ですが、Log呼び出しは削除されません(-keep class **

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep class ** {
    *;
}

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

私が求めていることは、proguardでさえ可能ですか?

17
UloPe

proguard-project.txtでこのオプションを使用して、ロギング呼び出しを削除できます。

-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.txtproject.propertiesを指定する必要があります。

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

必要に応じて、縮小と難読化を無効にすることができます。必要に応じて、アプリケーションの内部APIを最適化から保護することもできます。

-keep class myapp.** { *; }

もちろん、これらの手順を無効にしてすべてのコードを保持することは、ProGuardの観点からは最適ではありません。

30
Eric Lafortune

Build.gradleで

buildTypes {

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

Proguard-rules.proで

-dontwarn **
-target 1.7
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

-optimizations !code/simplification/arithmetic,!code/allocation/variable
-keep class **
-keepclassmembers class *{*;}
-keepattributes *

#This will not remove error log
-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(...);
}
13
Sandeep Shabd