android BuildConfig.DEBUG的妙用

在Android開發中,我們使用android.util.Log來打印日誌,方便我們的開發調試。但是這些代碼不想在發佈後執行,現在的方法是設置一個全局變量,標記軟件爲Debug模式還是Release模式。來看下代碼:

public class Log {
    private static final boolean DEBUG = true;

    public static void i(String tag, String msg) {
        if (DEBUG)
            android.util.Log.i(tag, msg);
    }

    public static void e(String tag, String msg) {
        if (DEBUG)
            android.util.Log.e(tag, msg);
    }

    public static void d(String tag, String msg) {
        if (DEBUG)
            android.util.Log.d(tag, msg);
    }

    public static void v(String tag, String msg) {
        if (DEBUG)
            android.util.Log.v(tag, msg);
    }

    public static void w(String tag, String msg) {
        if (DEBUG)
            android.util.Log.w(tag, msg);
    }
}

這樣打包發佈之前只要改下DEBUG=false就行了,但是每次在發佈之前都要手動去改這個變量,不是很方便,而且不排除開發者忘記改的情況。那麼有沒有更好更方便的做法呢?

ADT(r17)發佈以後,Google爲我們提供了一種新的調試機制,即BuildConfig.DEBUG。

ADT 17.0.0的New build features第二條如下描述:

Added a feature that allows you to run some code only in debug mode. Builds now generate a class called BuildConfig containing a DEBUGconstant that is automatically set according to your build type. You can check the (BuildConfig.DEBUG) constant in your code to run debug-only functions.

即:新增了一個特性,允許開發者只在Debug模式下運行部分代碼。Builds會生成一個叫做BuildConfig的類,該類包含一個名爲DEBUG的常量,其常量值會依據開發者的Build類型自動設定。如此,便可以利用BuildConfig.DEBUG來實現只在Debug模式下運行的代碼。

如果你的ADT已經更新到17及以上版本,可以嘗試在Eclipse中新建一個Android工程,你會發現和R.java同級目錄下多了一個叫做BuildConfig.java的類,其內容如下:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.example.administrator.rxjavademo";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
}

這樣只需要改動一行代碼就ok了,

private static final boolean DEBUG = BuildConifg.DEBUG;

在上面提到,DEBUG會根據Build類型自動設定。那麼Build類型又從哪裏區分呢?
在android studio中,我們使用gradle打包,這樣生成的apk的BuildConfig.DEBUG的值分別爲true和false。
Build類型

gradle自定義你的BUILDCONFIG

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.example.administrator.rxjavademo";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
  // Fields from build type: debug
  public static final boolean LOG_DEBUG = true;
}

上述內容有個LOG_DEBUG字段,這個完全是我自定義的一個字段,我來用它控制Log的輸出,而沒有選擇用默認的DEBUG字段。舉例一個場景,我們在App開發用到的api環境假設可能會有測試、正式環境,我們不可能所有的控制都通過DEBUG字段來控制,而且有時候環境複雜可能還會有兩個以上的環境,這個時候就用到了Gradle提供了自定義BuildConfig字段,我們在程序中通過這個字段就可以配置我們不同的開發環境。
語法:

debug{
       buildConfigField "boolean", "LOG_DEBUG", "true"
     }

>
>
>
>

文章轉載自 http://stormzhang.com/android/2013/08/28/android-use-build-config/

發佈了33 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章