在部署Android应用程序时,Java断言是否始终包含在二进制文件中?

时间:2013-12-22 15:26:47

标签: java android assertions

断言是否总是包含在Android二进制文件中,还是我需要指定-ea参数?

我可以部署应用程序的最终版本禁用断言,还是依赖于系统?

1 个答案:

答案 0 :(得分:1)

Java断言可以在运行时启用/禁用,因此语句必须包含在已编译的代码中,除非它们被明确删除(当然,它们不能在运行)。

documentation表示没有直接支持在编译时实际删除语句,尽管它提到了一个可以使用的技巧,这基本上是一个全局的“调试模式切换”:

// causes the compiler to eliminate the statements
static final boolean asserts = false;

if (asserts) {
    assert <expr>; 
}

我个人认为在这种情况下你也可以抛出实际的异常,因为它会产生相同的开销,因为适当的异常处理(特别是与单元测试覆盖相结合)可以用于开发和生产阶段/ code并且不要求你做额外的工作。

在任何情况下,请确保您只使用assert关键字,因为它很容易被误用。上面链接的文档文章很好地描述了正确的用法。