gpt4 book ai didi

android - 只调试断言代码的更好方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:21 26 4
gpt4 key购买 nike

我正在编写我的第一个 Android 应用程序,我正在大量使用 junit.framework.Assert 中的 asserts()

我想找到一种方法来确保断言只编译到调试版本中,而不是发布版本中。

我知道如何从 list 中查询 android:debuggable 属性,这样我就可以创建一个变量并在以下 fashon 中完成此操作:

static final boolean mDebug = ...

如果(调试) 断言.assertNotNull( View );

有更好的方法吗?即我不希望每个断言都使用 if()。

谢谢

最佳答案

我认为 Java 语言的 assert 关键字可能就是您想要的。在幕后,assert 关键字本质上编译成 Dalvik 字节码,它做了两件事:

  1. 检查静态变量 assertionsDisabled(通过调用 java.lang.Class.desiredAssertionStatus() 在类的静态构造函数中设置)是否为 != 0 并且如果是这样,什么都不做
  2. 如果它 0,那么它检查断言表达式并在表达式解析为false时抛出一个java.lang.AssertionError,有效终止您的申请。

Dalvik 运行时默认关闭断言,因此 desiredAssertionStatus 总是返回 1(或者更准确地说,一些非零值)。这类似于以“零售”模式运行。为了打开“调试”模式,您可以针对模拟器或设备运行以下命令:

adb shell setprop debug.assert 1

这应该可以解决问题(应该可以在模拟器或任何有根调试就绪的设备上工作)。

但是请注意,上述 Dalvik 代码检查 assertionsDisabled 的值并在表达式为 false 时抛出 AssertionError代码中的 assert 可能会导致字节代码膨胀。

请参阅此处了解更多详细信息:Can I use assert on Android devices?

关于android - 只调试断言代码的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com