包含调试代码的最佳方法?

时间:2010-04-27 03:43:33

标签: java android debugging buildconfig

我正在编写Android应用程序,这里最好的方法可能与一般的Java相同或不同。

我只是希望能够设置一个调试标志,该标志仅在设置为true时执行某些代码部分 - 相当于C ++设置预处理器#define DEBUG并使用#ifdef DEBUG。

在Java中是否有可接受的或最好的方法来实现这一目标?

现在我要在我的Application对象中设置一个变量,但我不认为这是最好的方法。

7 个答案:

答案 0 :(得分:54)

您可以使用ADT自动设置的标志,而不是使用您自己的标志,如下所示:

final static int appFlags = context.getApplicationInfo().flags;
final static boolean isDebug = (appFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0

FLAG_DEBUGGABLE位自动设置为true或false,具体取决于应用程序的“debuggable”属性(在AndroidManifest.xml中设置)。最新版本的ADT(版本8)会在不导出已签名的包时自动为您设置此属性。

因此,您不必记住设置/重置自己的自定义标志。

您可以在this thread中阅读更多内容。

答案 1 :(得分:30)

这就是我这样做的方式:

// in some.class.with.Constants
public static final boolean DEV_MODE = true;

// in some other class
import static some.class.with.Constants.DEV_MODE;

if(DEV_MODE){
    Log.d('sometag', 'somemessage');
}

答案 2 :(得分:26)

SDK工具修订版17(2012年3月)介绍了一种模仿 C #ifdef DEBUG

的方法

来自General Notes

  

添加了一项功能,允许您仅在调试模式下运行某些代码。 Builds现在生成一个名为BuildConfig的类,其中包含一个DEBUG常量,该常量根据您的构建类型自动设置。您可以检查代码中的(BuildConfig.DEBUG)常量以运行仅调试函数。

答案 3 :(得分:13)

我建议使用内置的Android API BuildConfig

if (BuildConfig.DEBUG) {
  // do something for a debug build
}

答案 4 :(得分:12)

使用 BuildConfig 类,我可以使用代码if (BuildConfig.DEBUG)。这是一个安全而简单的代码。使用这种代码时要小心。不要使用它,以便在发布和调试版本之间有2个不同的不同代码分支。如果这样做,它可能会使发布版本的应用程序测试无效。对我来说,我只是用它来跳过调用Log消息。

有关此类BuildConfig @ Build System Concepts的详细信息。

答案 5 :(得分:6)

if ( Debug.isDebuggerConnected() ) {
  // debug stuff
}

答案 6 :(得分:1)

我认为编写测试比添加DEBUG代码更好。

我的观点是,当您为某些组件/方法/类编写测试时,您不会使用一些冗余调试代码污染原始源代码。