如何配置proguard只能删除android日志记录调用

Ulo*_*oPe 17 android proguard

我正在尝试将proguard配置为仅从我的Android应用程序中删除对android.util.Log的调用(对于发布版本).我特别不希望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 {
    *;
}
Run Code Online (Sandbox Code Playgroud)

是什么我甚至可以用proguard问?

Eri*_*une 30

您可以使用以下选项删除日志记录调用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(...);
}
Run Code Online (Sandbox Code Playgroud)

此选项仅在未禁用优化时才相关,例如proguard-android.txt.你必须指定proguard-android-optimize.txt,在project.properties:

proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以禁用收缩和混淆.如果您愿意,还可以保留应用程序的内部API:

-keep class myapp.** { *; }
Run Code Online (Sandbox Code Playgroud)

从ProGuard的角度来看,禁用这些步骤并保持所有代码当然不是最佳选择.


小智 13

在build.gradle中

buildTypes {

        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
Run Code Online (Sandbox Code Playgroud)

在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(...);
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用..我复制/粘贴您的代码,我仍然有日志.. (3认同)
  • 我错了Sandeep。确实有效。。我很抱歉。我错过了更改proguard-android.txt-> proguard-android-optimize.txt (3认同)