【原创】【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:
      1、取消Build Automatically
      2、Clean(means compiling all java classes)
      3、Build
      4、Export Signed Application Package
      回到开头的问题,有没有更好的方法帮助开发者解决Log关闭的问题?看过本篇文章,相信你已找到答案。
 
——2013.6.19 写于北京
 
posted @ 2013-06-19 15:02  陌上幽人  阅读(1891)  评论(2编辑  收藏  举报