通过AS中BuildConfig.DEBUG字段用来自定义调试Log

BuildConfig.DEBUG

首先在Gradle脚本中默认的debug和release两种模式BuildCondig.DEBUG字段分别为true和false,而且不可更改。该字段编译后自动生成,在Studio中生成的目录在app/build/source/BuildConfig/Build Varients/package name/BuildConfig 文件下。我们以9GAG为例来看下release模式下该文件的内容:


public final class BuildConfig {
  public static final boolean DEBUG = false;
  //...
  public static final boolean IS_SHOW_DEBUG = false;
}

自定义BuildConfig字段

大家看到上述内容的时候发现莫名的有个IS_SHOW_DEBUG字段,这个完全是我自定义的一个字段,我来用它控制Log的输出,而没有选择用默认的DEBUG字段。举例一个场景,我们在App开发用到的api环境假设可能会有测试、正式环境,我们不可能所有的控制都通过DEBUG字段来控制,而且有时候环境复杂可能还会有两个以上的环境,这个时候就用到了Gradle提供了自定义BuildConfig字段,我们在程序中通过这个字段就可以配置我们不同的开发环境:

在app的build.gradle配置如下:

buildTypes {
        release {
            minifyEnabled false
            buildConfigField "boolean", "IS_SHOW_LOG", NOT_SHOW_LOG
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            buildConfigField "boolean", "IS_SHOW_LOG", SHOW_LOG
        }
        preview {
            minifyEnabled false
            buildConfigField "boolean", "IS_SHOW_LOG", SHOW_LOG
        }
    }
其中SHOW_LOG和NOT_SHOW_LOG在gradle.properties中声明:

org.gradle.jvmargs=-Xmx1024m
SHOW_LOG true
NOT_SHOW_LOG false
点击项目重新build一下,下面就可以写app你想要的日志输出了:

public class MyLog {

    public static int i(String tag, String msg) {
        if (BuildConfig.IS_SHOW_LOG) {
            return Log.i(tag, msg);
        } else {
            return -1;
        }
    }

    public static int i(String tag, String msg, Throwable tr) {
        if (BuildConfig.IS_SHOW_LOG) {
            return Log.i(tag, msg, tr);
        } else {
            return -1;
        }
    }
    
    public static int v(String tag, String msg) {
        if (BuildConfig.IS_SHOW_LOG) {
            return Log.v(tag, msg);
        } else {
            return -1;
        }
    }

    public static int v(String tag, String msg, Throwable tr) {
        if (BuildConfig.IS_SHOW_LOG) {
            return Log.v(tag, msg, tr);
        } else {
            return -1;
        }
    }
    //等等其他你想打印的方法....
 }


发布了53 篇原创文章 · 获赞 8 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章