BuildConfig的用法
在Android開(kāi)發(fā)中褥蚯,我們使用android.util.Log來(lái)打印日志国夜,方便我們的開(kāi)發(fā)調(diào)試鹏控。但是這些代碼不想在發(fā)布后執(zhí)行,我們并不想在軟件發(fā)布后調(diào)試日志被其他開(kāi)發(fā)者看到枢纠,現(xiàn)在我的方法是設(shè)置一個(gè)全局變量像街,標(biāo)記軟件為Debug模式還是Release模式。來(lái)看下代碼:
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ā)布之前都要手動(dòng)去改這個(gè)變量镰绎,不是很方便,而且不排除開(kāi)發(fā)者忘記改的情況木西。那么有沒(méi)有更好更方便的做法呢畴栖?
ADT(r17)發(fā)布以后,Google為我們提供了一種新的調(diào)試機(jī)制八千,即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.
新增了一個(gè)特性挪挤,允許開(kāi)發(fā)者只在Debug模式下運(yùn)行部分代碼。Builds會(huì)生成一個(gè)叫做BuildConfig的類关翎,該類包含一個(gè)名為DEBUG的常量,其常量值會(huì)依據(jù)開(kāi)發(fā)者的Build類型自動(dòng)設(shè)定鸠信。如此纵寝,便可以利用BuildConfig.DEBUG來(lái)實(shí)現(xiàn)只在Debug模式下運(yùn)行的代碼。
因此只需要將如下代碼進(jìn)行修改即可星立,而該值會(huì)自動(dòng)根據(jù)當(dāng)前項(xiàng)目的編譯方式(debug/release)進(jìn)行更新:
private static final boolean DEBUG = BuildConifg.DEBUG;
而在編譯完成后爽茴,我們可以看到在如下路徑中會(huì)自動(dòng)生成該BuildConfig.java文件:
app/build/source/BuildConfig/Build Varients/package name/BuildConfig
當(dāng)然除了DEBUG字段之外,還包含如下內(nèi)容:
public final class BuildConfig {
public static final boolean DEBUG = false;
public static final String APPLICATION_ID = "com.storm.9gag";
public static final String BUILD_TYPE = "release";
public static final String FLAVOR = "wandoujia";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}
Gradle中自定義BuildConfig字段
如果上述默認(rèn)生成的字段無(wú)法滿足開(kāi)發(fā)需求绰垂,那就需要在其中加入自定義的字段室奏,假設(shè)我們需要加入應(yīng)用的編譯的時(shí)間timeStamp, 那我們則需要在gradle中加入該自定義字段:
defaultConfig {
applicationId "com.qualcomm.qti.faceauth"
minSdkVersion 24
buildConfigField("String", "timeStamp", System.currentTimeMills() + "L");
}
通過(guò)增加該條屬性,那么則會(huì)在BuildConfig中自動(dòng)生成如下字段:
public final class BuildConfig {
public static final boolean DEBUG = false;
public static final String APPLICATION_ID = "com.storm.9gag";
public static final String BUILD_TYPE = "release";
public static final String FLAVOR = "wandoujia";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
//newly automatically added timeStamp attribute
public static final String timeStamp = 23800883L;
}
那在代碼中直接可以調(diào)用:
String timeStr = BuildConfig.timeStamp;
即可獲取到當(dāng)前時(shí)間戳的字符串劲装,用于業(yè)務(wù)邏輯代碼的控制等胧沫。