Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Proguard is not removing Log calls

When compiling my app using Ant I can see the verbose Proguard output, and I have things setup to remove the log statements (see below), but when I run the release apk all the log statements I was trying to remove are there.

I have 2 projects each of which include a common project. The 2 main projects and the common project each have a proguard.cfg file, all of which contain the snippet to remove log statements.

Is there something that I am missing?

** All my log statements are Log.d(...)

proguard.cfg

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

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

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

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}
like image 297
chris Avatar asked Feb 17 '12 21:02

chris


2 Answers

Here your proguard file is ok, but there is a detail that you may be missing.

In your gradle file you probably have something like this:

buildTypes {
    release {
        minifyEnabled true

        proguardFiles getDefaultProguardFile('proguard-android.txt), 'proguard-rules.pro'
    }
}

Check the getDefaultProguardFile('proguard-android'), so if you intent to optimize it, you should change it to getDefaultProguardFile('proguard-android-optimize.txt').

I spent some time to realize it, saw your question but still not able to remove my Log calls on my code. So I've found this link that explains that is necessary to change to the optimize file to proguard be able to optimize.

https://developer.android.com/tools/help/proguard.html#enabling-gradle

like image 60
wviana Avatar answered Oct 07 '22 17:10

wviana


You cannot use assumenosideeffects without Proguard optimization.

like image 24
forlayo Avatar answered Oct 07 '22 19:10

forlayo