1. 程式人生 > >Android BuildConfig.DEBUG的妙用:http://stormzhang.github.io/android/2013/08/28/android-use-build-config

Android BuildConfig.DEBUG的妙用:http://stormzhang.github.io/android/2013/08/28/android-use-build-config

在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的類,其內容如下:

/** Automatically generated file. DO NOT MODIFY */
package com.boohee.one;

public final class BuildConfig {
    public final static boolean DEBUG = true;
}

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

private static final boolean DEBUG = BuildConifg.DEBUG;

在上面提到,DEBUG會根據Build型別自動設定。那麼Build型別又從哪裡區分呢?很簡單,點開Eclipse的Project選單便可見分曉,如下圖:

 

可見,Build型別分為Build Project和Build Automatically,即手動和自動。

需要注意的是,如果直接通過Eclipse執行Project,則不論Build是手動還是自動,DEBUG均不會被設定為false。這是為什麼呢?這就牽涉到Android 簽名的問題,這裡只簡單提一下,不贅述:直接通過Eclipse執行Project,Eclipse會在工程Build完畢後在bin目錄下生成一個apk,這個apk的簽名是除錯模式(debug mode),和釋出模式(release mode)簽名生成的apk略有不同。如此,該問題產生原因便浮出水面。

此時肯定會有人說,直接使用Android Tools–>Export Signed Application Package匯出的release mode apk,其DEBUG就是false。這是不對的。在生成Release版時,需要區分Build的型別。如果選擇的是自動Build,那麼DEBUG仍然會被設定為true。所以在生成Release版時,請按照下面這個步驟進行打包,BuildConfig.DEBUG會被修改為false:

  1. Project -> Build Automatically,即取消Build Automatically

  2. Project -> Clean

  3. Project -> Build

  4. Android Tools -> Export Android application