• 【原创】【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 写于北京
     

    作者:Nodin
    出处:http://www.cnblogs.com/monodin
    个人博客网站:http://www.coderself.com
    关于作者:爱摄影,爱旅行,爱自由,爱生活,更要爱自己。活在当下,也在为未来打拼!
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    HashMap和HashTable有什么不同?
    JAVA基础查漏补缺(面向面试场景)
    JAVA--GC 垃圾回收机制----可达性分析算法
    如何优雅的设计 Java 异常
    Java多线程之捕获子线程中的异常---面试经
    Review: the foundation of the transaction、Transaction characteristics in Spring
    用Demo 去理解Java Object 的 wait() 和 notify() 方法
    决心彻底认知 Integer 和 int 对象创建的原理
    java 基础复习 -用Demo去认识String 类
    java 基础复习 -用Demo去认识数组
  • 原文地址:https://www.cnblogs.com/monodin/p/3144204.html
Copyright © 2020-2023  润新知