在平常開發中,咱們使用android.util.Log來打印日誌,方便咱們的開發調試。可是在打包發佈時,須要手工把Log關閉,多少會有些不便,並且不排除打包者忘記關閉Log的狀況。那麼有沒有更好的方法來幫助開發者解決這個問題?
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 DEBUG constant 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.nodin.mo;
public final class BuildConfig {
public final static boolean DEBUG = true;
}
使用方法比較簡單,在須要區分是否爲Debug模式的代碼塊前添加對DEBUG的判斷便可,以下:
if (BuildConfig.DEBUG) {
Log.i("DEBUG", "debug mode.");
// TODO codes ran in debug mode
// ......
}
在文章開頭提到,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:
一、取消Build Automatically
二、Clean(means compiling all java classes)
三、Build
四、Export Signed Application Package
回到開頭的問題,有沒有更好的方法幫助開發者解決Log關閉的問題?看過本篇文章,相信你已找到答案。