在Android開發(fā)中,我們使用android.util.Log來打印日志,方便我們的開發(fā)調(diào)試。但是這些代碼不想在發(fā)布后執(zhí)行,我們并不想在軟件發(fā)布后調(diào)試日志被其他開發(fā)者看到,現(xiàn)在我的方法是設(shè)置一個全局變量,標(biāo)記軟件為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);
}
}
這樣打包發(fā)布之前只要改下DEBUG=false就行了,但是每次在發(fā)布之前都要手動去改這個變量,不是很方便,而且不排除開發(fā)者忘記改的情況。那么有沒有更好更方便的做法呢?
ADT(r17)發(fā)布以后,Google為我們提供了一種新的調(diào)試機制,即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.
即:新增了一個特性,允許開發(fā)者只在Debug模式下運行部分代碼。Builds會生成一個叫做BuildConfig的類,該類包含一個名為DEBUG的常量,其常量值會依據(jù)開發(fā)者的Build類型自動設(shè)定。如此,便可以利用BuildConfig.DEBUG來實現(xiàn)只在Debug模式下運行的代碼。
如果你的ADT已經(jīng)更新到17及以上版本,可以嘗試在Eclipse中新建一個Android工程,你會發(fā)現(xiàn)和R.java同級目錄下多了一個叫做BuildConfig.java的類,其內(nèi)容如下:
/** Automatically generated file. DO NOT MODIFY */
package com.boohee.one;
public final class BuildConfig {
public final static boolean DEBUG = true;
}
這樣只需要改動一行代碼就ok了,
1
private static final boolean DEBUG = BuildConifg.DEBUG;
在上面提到,DEBUG會根據(jù)Build類型自動設(shè)定。那么Build類型又從哪里區(qū)分呢?很簡單,點開Eclipse的Project菜單便可見分曉,如下圖:
可見,Build類型分為Build Project和Build Automatically,即手動和自動。
需要注意的是,如果直接通過Eclipse運行Project,則不論Build是手動還是自動,DEBUG均不會被設(shè)定為false。這是為什么呢?這就牽涉到Android 簽名的問題,這里只簡單提一下,不贅述:直接通過Eclipse運行Project,Eclipse會在工程Build完畢后在bin目錄下生成一個apk,這個apk的簽名是調(diào)試模式(debug mode),和發(fā)布模式(release mode)簽名生成的apk略有不同。如此,該問題產(chǎn)生原因便浮出水面。
此時肯定會有人說,直接使用Android Tools–>Export Signed Application Package導(dǎo)出的release mode apk,其DEBUG就是false。這是不對的。在生成Release版時,需要區(qū)分Build的類型。如果選擇的是自動Build,那么DEBUG仍然會被設(shè)定為true。所以在生成Release版時,請按照下面這個步驟進行打包,BuildConfig.DEBUG會被修改為false:
Project -> Build Automatically,即取消Build Automatically
Project -> Clean
Project -> Build
Android Tools -> Export Android application