通過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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章