Android BuildConfig.DEBUG 的妙用
在 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:
- Project -> Build Automatically,即取消 Build Automatically
- Project -> Clean
- Project -> Build
- Android Tools -> Export Android application
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Android 批量插入数据性能优化
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论