本文主要是介绍利用BuildConfig进行编译选择及Gradle自定义BuildTypes和字段,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
BuildConfig的用法
在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 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模式下运行的代码。
因此只需要将如下代码进行修改即可,而该值会自动根据当前项目的编译方式(debug/release)进行更新:
private static final boolean DEBUG = BuildConifg.DEBUG;
而在编译完成后,我们可以看到在如下路径中会自动生成该BuildConfig.java文件:
app/build/source/BuildConfig/Build Varients/package name/BuildConfig
当然除了DEBUG字段之外,还包含如下内容:
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字段
如果上述默认生成的字段无法满足开发需求,那就需要在其中加入自定义的字段,假设我们需要加入应用的编译的时间timeStamp, 那我们则需要在gradle中加入该自定义字段:
defaultConfig {applicationId "com.qualcomm.qti.faceauth"minSdkVersion 24buildConfigField("String", "timeStamp", System.currentTimeMills() + "L");
}
通过增加该条属性,那么则会在BuildConfig中自动生成如下字段:
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 attributepublic static final String timeStamp = 23800883L;
}
那在代码中直接可以调用:
String timeStr = BuildConfig.timeStamp;
即可获取到当前时间戳的字符串,用于业务逻辑代码的控制等。
这篇关于利用BuildConfig进行编译选择及Gradle自定义BuildTypes和字段的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!