【原创】【Android New Features】—— 关于ADT 17的BuildConfig.DEBUG

      在平常开发中,咱们使用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关闭的问题?看过本篇文章,相信你已找到答案。
 
——2013.6.19 写于北京
相关文章
相关标签/搜索