【问题标题】:Debug-only methods or interface in Java/AndroidJava/Android 中的仅调试方法或接口
【发布时间】:2012-05-25 11:16:35
【问题描述】:

我是 Android 和 Java 的新手——在 C/C++/C# 方面有很多经验。

我的界面是这样的:

class WellNamedClass {
    void greatMethodToCallWhenever() { /*...*/ }

    void debugOnlyMethod() { /*...*/ }
}

在上面提到的语言中,我要么#ifdef 整个 debugOnlyMethod 方法,要么#ifdef 实现,所以它什么都不做,但 Java 没有预处理器。

我很乐意将代码放在那里并在运行时检查我们是否处于调试版本中,但我什至找不到这样做的方法。

我发现了像this one 这样的建议,您可以在其中创建一个带有常量的类,该常量指示是否启用了调试(或您想要的任何其他内容)。这可以工作,但是您必须手动更改代码才能获得调试版本和发布版本。

其他人解决了这个问题吗?谢谢。

【问题讨论】:

    标签: java android


    【解决方案1】:

    我不知道你为什么需要这个,顺便说一下你可以放一个静态全局变量,像这样:

    class WellNamedClass{
    
    public static final boolean DEBUG = true;
    ...
    }
    

    并使用 if 语句检查您的调试方法,例如:

    if(WellNamedClass.DEBUG){
        debugOnlyMethod();
    }
    

    从java开始你可以玩这个。

    当您获得更多经验时,您可以尝试注解、aop 或任何其他高级编程技术。

    【讨论】:

    • 这是个好主意,但我更喜欢在不更改代码的情况下构建发布版本和调试版本。
    • @richarbernal,这些“高级”编程技术都没有解决 OP 的基本问题,即如何根据构建(调试/发布/等)获得不同的值。
    • 那么你必须在常量实例中放置一个带有调试模式选项的配置文件或读取一个程序参数
    【解决方案2】:

    这可能有效,但是您必须手动更改代码才能获得 调试与发布版本。

    一种流行的方法是使用-D 标志将系统属性传递给VM。然后,您可以直接使用 System.getProperty 或从该属性初始化 static field

    System.getenv 也可以。

    【讨论】:

    • 我最近才开始使用 Android,但从 adb shell dalvikvm -help 的输出来看似乎是可能的。
    • 供 Android 使用 if (BuildConfig.DEBUG){} Gradle 为我们构建此变量。
    【解决方案3】:

    我认为我们要使用的方法是对我们的本机组件进行 JNI 调用,它会告诉我们是否在调试模式下运行。无论如何,我们必须拥有原生组件,并且会在启动时进行一些 JNI 调用,因此这是一个相对简单的解决方案,因为 C++ 有一个预处理器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-07
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多