Android BuildConfig.DEBUG 的妙用

发布于 2024-03-16 03:13:29 字数 3263 浏览 17 评论 0

在 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.DEBUGADT 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:

  1. Project -> Build Automatically,即取消 Build Automatically
  2. Project -> Clean
  3. Project -> Build
  4. Android Tools -> Export Android application

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

不及他

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文