Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署Android应用程序时,Java断言是否总是包含在二进制文件中?_Java_Android_Assertions - Fatal编程技术网

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

部署Android应用程序时,Java断言是否总是包含在二进制文件中?,java,android,assertions,Java,Android,Assertions,断言总是包含在Android二进制文件中,还是我需要指定-ea参数 我可以部署我的应用程序禁用断言的最终版本吗?或者这个断言依赖于系统吗?Java断言可以在运行时被en-/disabled,因此除非它们被显式删除,否则这些语句必须包含在编译后的代码中(当然,在运行时它们不能被启用) 声明没有直接支持在编译时实际删除语句,尽管它提到了一个可以使用的技巧,这基本上是一个全局“调试模式开关”: //使编译器消除这些语句 静态最终布尔断言=false; 如果(断言){ 断言; } 我个人认为,在这种情

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


我可以部署我的应用程序禁用断言的最终版本吗?或者这个断言依赖于系统吗?

Java断言可以在运行时被en-/disabled,因此除非它们被显式删除,否则这些语句必须包含在编译后的代码中(当然,在运行时它们不能被启用)

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

//使编译器消除这些语句
静态最终布尔断言=false;
如果(断言){
断言;
}
我个人认为,在这种情况下,您可能会抛出实际的异常,因为这将是相同的开销,因为适当的异常处理(特别是与单元测试覆盖率相结合)可以用于开发和生产阶段/代码,并且不需要您做额外的工作


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

您尝试过吗?构建和部署测试应用程序应该非常容易。通过部署应用程序,我无法知道在禁用断言(我也不知道如何禁用断言)时二进制文件中是否有断言指令,或者系统是否将二进制文件执行为“禁用断言”模式。所以,我在问是否有人已经知道了。@HAL9000对我的答案有什么评论吗?@IngoBürk你的答案正是我想要的,谢谢!
// causes the compiler to eliminate the statements
static final boolean asserts = false;

if (asserts) {
    assert <expr>; 
}