Android, Does Log reduces application speed?

Ask by : Hesam November 19, 2012 11:02

In my application I have so many lines of logs, such as Log.i(), Log.e() and Log.d(). I use these logs widely through my application.

After I run my application if I connect device to Eclipse I can see hundreds of lines of log. My question is does this behavior reduces application speed?



Thanks to Frank for his suggestion. I added proposed code into proguard.cfg then exported new APK file. It took so much time but finally new APK file generated. However, when I test it in a real device I still can see logs.

This is my proguard.cfg:

# This is a configuration file for ProGuard.


# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# file.

-keepattributes *Annotation*
-keep public class
-keep public class

# For native methods, see
-keepclasseswithmembernames class * {
    native <methods>;

# keep setters in Views so that animations can still work.
# see
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();

# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends {
   public void *(android.view.View);

# For enumeration classes, see
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);

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

-keepclassmembers class **.R$* {
    public static <fields>;

# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.

# Hesam - Remove all logs
-assumenosideeffects class android.util.Log {
    public static int v(...);
    public static int d(...);
    public static int i(...);
    public static int w(...);
    public static int e(...);

#-libraryjars /libs/gcm.jar
#-libraryjars /libs/libGoogleAnalytics.jar
#-libraryjars /libs/twitter4j-core-android-2.2.6.jar
#-libraryjars /libs/universal-image-loader-1.5.4.jar

-dontwarn org.apache.**
-dontwarn org.slf4j.**
-dontwarn org.json.*

-keep class** { *; }
-keep class twitter4j.** { *; }
-keep class com.nostra13.** { *; }
View original question

Answer by : FrankNovember 04, 2012 13:36

The answer is obvious, YES it does.

But there is a solution, you can ask Proguard to remove log statements of any level that you desire. Like this your users are not impacted by the verbose logging that they don't see anyway..

Add folowing to your Proguard config:

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

This will remove LOG.d and LOG.v statements, you can expand as you like..

View original answer